From a71a059febd0dd2ffa1dc86ab96ed791786badcc Mon Sep 17 00:00:00 2001 From: Jolimaitre Matthieu Date: Wed, 10 Nov 2021 22:57:17 +0100 Subject: [PATCH 01/11] initialisation --- .gitignore | 1 + Cargo.lock | 7 +++++++ Cargo.toml | 8 ++++++++ rustfmt.toml | 1 + src/main.rs | 3 +++ 5 files changed, 20 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 rustfmt.toml create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..2a7f45e --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "harsh" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..c15c686 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "harsh" +version = "0.1.0" +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..218e203 --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1 @@ +hard_tabs = true diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..731af3f --- /dev/null +++ b/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, harmony!"); +} From b95003257d2a221095104dea6b6e2ed55699106a Mon Sep 17 00:00:00 2001 From: Jolimaitre Matthieu Date: Thu, 11 Nov 2021 20:28:45 +0100 Subject: [PATCH 02/11] setup main project layout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Clément Rehs --- Cargo.lock | 818 ++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 20 +- README.md | 7 + assets/icon_256.png | Bin 0 -> 33048 bytes assets/icon_512.png | Bin 0 -> 115449 bytes src/lib/config.rs | 13 + src/lib/database.rs | 15 + src/lib/harsh.rs | 14 + src/lib/http.rs | 9 + src/lib/log.rs | 59 ++++ src/lib/mod.rs | 5 + src/main.rs | 7 +- 12 files changed, 963 insertions(+), 4 deletions(-) create mode 100644 README.md create mode 100644 assets/icon_256.png create mode 100644 assets/icon_512.png create mode 100644 src/lib/config.rs create mode 100644 src/lib/database.rs create mode 100644 src/lib/harsh.rs create mode 100644 src/lib/http.rs create mode 100644 src/lib/log.rs create mode 100644 src/lib/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 2a7f45e..f51f5f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,824 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "async-trait" +version = "0.1.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "axum" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e874ee652f2ec443faed3073b80f0ac7a2042a3605fc0704d28bbbf22d623c" +dependencies = [ + "async-trait", + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "matchit", + "mime", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-util", + "tower", + "tower-http", + "tower-layer", + "tower-service", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "colored" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" +dependencies = [ + "atty", + "lazy_static", + "winapi", +] + +[[package]] +name = "crc32fast" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "lazy_static", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" +dependencies = [ + "cfg-if", + "lazy_static", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +dependencies = [ + "matches", + "percent-encoding", +] + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "futures-channel" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" + +[[package]] +name = "futures-sink" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" + +[[package]] +name = "futures-task" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" + +[[package]] +name = "futures-util" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" +dependencies = [ + "autocfg", + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "harsh" version = "0.1.0" +dependencies = [ + "axum", + "chrono", + "colored", + "serde", + "serde_json", + "sled", + "tokio", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "http" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" + +[[package]] +name = "httpdate" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" + +[[package]] +name = "hyper" +version = "0.14.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b91bb1f221b6ea1f1e4371216b70f40748774c2fb5971b450c07773fb92d26b" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" + +[[package]] +name = "lock_api" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + +[[package]] +name = "matchit" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58b6f41fdfbec185dd3dff58b51e323f5bc61692c0de38419a957b0dcfccca3c" + +[[package]] +name = "memchr" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + +[[package]] +name = "memoffset" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "mio" +version = "0.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" +dependencies = [ + "libc", + "log", + "miow", + "ntapi", + "winapi", +] + +[[package]] +name = "miow" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +dependencies = [ + "winapi", +] + +[[package]] +name = "ntapi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" +dependencies = [ + "winapi", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "once_cell" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pin-project" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "proc-macro2" +version = "1.0.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "redox_syscall" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +dependencies = [ + "bitflags", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "serde" +version = "1.0.130" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.130" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e466864e431129c7e0d3476b92f20458e5879919a0596c6472738d9fa2d342f8" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +dependencies = [ + "libc", +] + +[[package]] +name = "sled" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935" +dependencies = [ + "crc32fast", + "crossbeam-epoch", + "crossbeam-utils", + "fs2", + "fxhash", + "libc", + "log", + "parking_lot", +] + +[[package]] +name = "smallvec" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309" + +[[package]] +name = "socket2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "syn" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi", + "winapi", +] + +[[package]] +name = "tokio" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "588b2d10a336da58d877567cd8fb8a14b463e2104910f8132cd054b4b96e29ee" +dependencies = [ + "autocfg", + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "once_cell", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "tokio-macros", + "winapi", +] + +[[package]] +name = "tokio-macros" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "114383b041aa6212c579467afa0075fbbdd0718de036100bc0ba7961d8cb9095" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-util" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00e500fff5fa1131c866b246041a6bf96da9c965f8fe4128cb1421f23e93c00" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b56efe69aa0ad2b5da6b942e57ea9f6fe683b7a314d4ff48662e2c8838de1" +dependencies = [ + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "pin-project", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" + +[[package]] +name = "tower-service" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" + +[[package]] +name = "tracing" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" +dependencies = [ + "cfg-if", + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "try-lock" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml index c15c686..bba9c1c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,23 @@ name = "harsh" version = "0.1.0" edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +description = "Harmony server application" [dependencies] + +# async engine +tokio = { version = "1.0", features = ["full"] } + +# http client +axum = "0.3.2" + +# database +sled = "0.34.7" + +# serialization +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0.68" + +# useful for logging +chrono = "0.4" +colored = "2.0.0" diff --git a/README.md b/README.md new file mode 100644 index 0000000..d49c61b --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# harsh + +![harsh icon](./assets/icon_256.png) + +## Description + +harsh is a Harmony server made in rust. diff --git a/assets/icon_256.png b/assets/icon_256.png new file mode 100644 index 0000000000000000000000000000000000000000..5a1cd30e3f42f8f7d55257afa213a8121c05932e GIT binary patch literal 33048 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 literal 0 HcmV?d00001 diff --git a/assets/icon_512.png b/assets/icon_512.png new file mode 100644 index 0000000000000000000000000000000000000000..5b09baa0a1c0f0e1c1f0a7e5a476fb66ac559194 GIT binary patch literal 115449 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 qumAvsrU6vT;{Ol+|K+G1kSId@yKGk Self { + todo!() + } +} diff --git a/src/lib/database.rs b/src/lib/database.rs new file mode 100644 index 0000000..e80892e --- /dev/null +++ b/src/lib/database.rs @@ -0,0 +1,15 @@ +use super::config::Configuration; + +/// +/// handle the database access +/// +pub struct DbManager { + // +} + +impl DbManager { + /// constructor + pub fn new(_config: &Configuration) -> Self { + todo!() + } +} diff --git a/src/lib/harsh.rs b/src/lib/harsh.rs new file mode 100644 index 0000000..92b6bda --- /dev/null +++ b/src/lib/harsh.rs @@ -0,0 +1,14 @@ +use super::config::Configuration; +use super::database::DbManager; +use super::http::serve; +use super::log::Logger; + +/// +/// main function +/// +pub fn main() { + let configuration = Configuration::read(); + Logger::configure(&configuration); + let mut db_manager = DbManager::new(&configuration); + serve(&configuration, &mut db_manager); +} diff --git a/src/lib/http.rs b/src/lib/http.rs new file mode 100644 index 0000000..5da81d1 --- /dev/null +++ b/src/lib/http.rs @@ -0,0 +1,9 @@ +use super::config::Configuration; +use super::database::DbManager; + +/// +/// listen for and handle received requests +/// +pub fn serve(_config: &Configuration, _db_manager: &mut DbManager) { + todo!() +} diff --git a/src/lib/log.rs b/src/lib/log.rs new file mode 100644 index 0000000..a8e5884 --- /dev/null +++ b/src/lib/log.rs @@ -0,0 +1,59 @@ +use std::cell::RefCell; + +use super::config::Configuration; +use chrono::prelude::*; +use colored::Colorize; + +/// +/// a static custom logger +/// +pub struct Logger { + // +} + +/// static Logger instance +pub const LOGGER: RefCell = RefCell::new(Logger {}); + +impl Logger { + /// adapt the static instance according to parameters specified by the configuration + pub fn configure(_config: &Configuration) { + let refcell = LOGGER; + let _logger = refcell.try_borrow_mut().unwrap(); + todo!() + } + + fn log_info(&self, msg: String) { + let tag_section = "[info]".blue(); + println!("{} {} {}", time_section(), tag_section, msg); + } + + fn log_warn(&self, msg: String) { + let tag_section = "[warn]".yellow(); + println!("{} {} {}", time_section(), tag_section, msg); + } + + fn log_fail(&self, msg: String) { + let tag_section = "[fail]".red(); + println!("{} {} {}", time_section(), tag_section, msg); + } +} + +fn time_section() -> String { + let now = Local::now(); + let result = now.format("[%Y.%m.%d-%H:%M:%S]").to_string(); + result +} + +pub mod shorthands { + pub fn log_info(msg: String) { + super::LOGGER.try_borrow().unwrap().log_info(msg); + } + + pub fn log_warn(msg: String) { + super::LOGGER.try_borrow().unwrap().log_warn(msg); + } + + pub fn log_fail(msg: String) { + super::LOGGER.try_borrow().unwrap().log_fail(msg); + } +} diff --git a/src/lib/mod.rs b/src/lib/mod.rs new file mode 100644 index 0000000..4091b14 --- /dev/null +++ b/src/lib/mod.rs @@ -0,0 +1,5 @@ +pub mod config; +pub mod database; +pub mod harsh; +pub mod http; +pub mod log; diff --git a/src/main.rs b/src/main.rs index 731af3f..b17108b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,6 @@ -fn main() { - println!("Hello, harmony!"); +pub mod lib; + +pub fn main() { + println!("Hello, harmony!"); + lib::harsh::main(); } From 3c9f92a1ab488399f2ad84a7b6b741e5e7a0de5b Mon Sep 17 00:00:00 2001 From: Jolimaitre Matthieu Date: Fri, 12 Nov 2021 15:27:39 +0100 Subject: [PATCH 03/11] converted main library module to a more structural architecture --- src/lib/event.rs | 31 +++++++++++++++++++++++++++++++ src/lib/harsh.rs | 27 +++++++++++++++++++++++---- src/lib/http.rs | 17 ++++++++++++++--- src/lib/log.rs | 42 +++++++++++------------------------------- src/lib/mod.rs | 1 + 5 files changed, 80 insertions(+), 38 deletions(-) create mode 100644 src/lib/event.rs diff --git a/src/lib/event.rs b/src/lib/event.rs new file mode 100644 index 0000000..acd46e9 --- /dev/null +++ b/src/lib/event.rs @@ -0,0 +1,31 @@ +/// + + +trait Eventable { + key() -> +} + +struct EventManager {} + +impl EventManager { + fn new() -> Self { + EventManager {} + } + + fn on(&mut self, event: E, callback: dyn Fn(E)) { + // + } + + fn send(&self, event: E) {} +} + +fn test() { + enum Events { + A, + B(i32), + C(f64), + } + + let event_manager = EventManager::new::(); + event_manager.on(Events::A, || {}) +} diff --git a/src/lib/harsh.rs b/src/lib/harsh.rs index 92b6bda..2f7dbb0 100644 --- a/src/lib/harsh.rs +++ b/src/lib/harsh.rs @@ -1,6 +1,6 @@ use super::config::Configuration; use super::database::DbManager; -use super::http::serve; +use super::http::HttpManager; use super::log::Logger; /// @@ -8,7 +8,26 @@ use super::log::Logger; /// pub fn main() { let configuration = Configuration::read(); - Logger::configure(&configuration); - let mut db_manager = DbManager::new(&configuration); - serve(&configuration, &mut db_manager); +} + +pub struct Harsh { + db_manager: DbManager, + logger: Logger, + http_manager: HttpManager, +} + +impl Harsh { + pub fn new(configuration: Configuration) -> Self { + let db_manager = DbManager::new(&configuration); + let logger = Logger::new(&configuration); + let http_manager = HttpManager::new(); + + Harsh { + logger, + db_manager, + http_manager, + } + } + + fn serve(&mut self) {} } diff --git a/src/lib/http.rs b/src/lib/http.rs index 5da81d1..ebdca62 100644 --- a/src/lib/http.rs +++ b/src/lib/http.rs @@ -2,8 +2,19 @@ use super::config::Configuration; use super::database::DbManager; /// -/// listen for and handle received requests +/// listen for incoming requests and handle both incoming and outgoing requests /// -pub fn serve(_config: &Configuration, _db_manager: &mut DbManager) { - todo!() +pub struct HttpManager { + // +} + +impl HttpManager { + pub fn new() -> Self { + HttpManager {} + } + + /// listen for and handle received requests + pub fn serve(_config: &Configuration, _db_manager: &mut DbManager) { + todo!() + } } diff --git a/src/lib/log.rs b/src/lib/log.rs index a8e5884..c889214 100644 --- a/src/lib/log.rs +++ b/src/lib/log.rs @@ -1,59 +1,39 @@ -use std::cell::RefCell; - use super::config::Configuration; use chrono::prelude::*; use colored::Colorize; /// -/// a static custom logger +/// configurable structure with methods to log informations in different ways /// pub struct Logger { // } -/// static Logger instance -pub const LOGGER: RefCell = RefCell::new(Logger {}); - impl Logger { /// adapt the static instance according to parameters specified by the configuration - pub fn configure(_config: &Configuration) { - let refcell = LOGGER; - let _logger = refcell.try_borrow_mut().unwrap(); - todo!() + pub fn new(_config: &Configuration) -> Self { + Logger {} } - fn log_info(&self, msg: String) { + pub fn info(&self, msg: String) { let tag_section = "[info]".blue(); - println!("{} {} {}", time_section(), tag_section, msg); + println!("{} {} {}", time_segment(), tag_section, msg); } - fn log_warn(&self, msg: String) { + pub fn warn(&self, msg: String) { let tag_section = "[warn]".yellow(); - println!("{} {} {}", time_section(), tag_section, msg); + println!("{} {} {}", time_segment(), tag_section, msg); } - fn log_fail(&self, msg: String) { + pub fn fail(&self, msg: String) { let tag_section = "[fail]".red(); - println!("{} {} {}", time_section(), tag_section, msg); + println!("{} {} {}", time_segment(), tag_section, msg); } } -fn time_section() -> String { +/// make the time segment of a log +fn time_segment() -> String { let now = Local::now(); let result = now.format("[%Y.%m.%d-%H:%M:%S]").to_string(); result } - -pub mod shorthands { - pub fn log_info(msg: String) { - super::LOGGER.try_borrow().unwrap().log_info(msg); - } - - pub fn log_warn(msg: String) { - super::LOGGER.try_borrow().unwrap().log_warn(msg); - } - - pub fn log_fail(msg: String) { - super::LOGGER.try_borrow().unwrap().log_fail(msg); - } -} diff --git a/src/lib/mod.rs b/src/lib/mod.rs index 4091b14..c0f56db 100644 --- a/src/lib/mod.rs +++ b/src/lib/mod.rs @@ -1,5 +1,6 @@ pub mod config; pub mod database; +pub mod event; pub mod harsh; pub mod http; pub mod log; From 5235ca9308ebfdc431d42a3f7da892c3c9cfc9e7 Mon Sep 17 00:00:00 2001 From: Jolimaitre Matthieu Date: Fri, 12 Nov 2021 17:31:02 +0100 Subject: [PATCH 04/11] removed event module might find fitting library latter --- src/lib/event.rs | 31 ------------------------------- src/lib/mod.rs | 1 - 2 files changed, 32 deletions(-) delete mode 100644 src/lib/event.rs diff --git a/src/lib/event.rs b/src/lib/event.rs deleted file mode 100644 index acd46e9..0000000 --- a/src/lib/event.rs +++ /dev/null @@ -1,31 +0,0 @@ -/// - - -trait Eventable { - key() -> -} - -struct EventManager {} - -impl EventManager { - fn new() -> Self { - EventManager {} - } - - fn on(&mut self, event: E, callback: dyn Fn(E)) { - // - } - - fn send(&self, event: E) {} -} - -fn test() { - enum Events { - A, - B(i32), - C(f64), - } - - let event_manager = EventManager::new::(); - event_manager.on(Events::A, || {}) -} diff --git a/src/lib/mod.rs b/src/lib/mod.rs index c0f56db..4091b14 100644 --- a/src/lib/mod.rs +++ b/src/lib/mod.rs @@ -1,6 +1,5 @@ pub mod config; pub mod database; -pub mod event; pub mod harsh; pub mod http; pub mod log; From 3938b2032ddb7e4d06b566d2d8916cda612c06e2 Mon Sep 17 00:00:00 2001 From: Jolimaitre Matthieu Date: Fri, 12 Nov 2021 21:01:35 +0100 Subject: [PATCH 05/11] progress on overall structure --- Cargo.lock | 18 ++++++++++ Cargo.toml | 11 +++--- config.ron | 4 +++ database/conf | 4 +++ database/db | Bin 0 -> 524287 bytes database/snap.0000000000000060 | Bin 0 -> 69 bytes src/lib/config.rs | 54 ++++++++++++++++++++++++++++-- src/lib/database.rs | 15 --------- src/lib/db/mod.rs | 20 +++++++++++ src/lib/db/models.rs | 18 ++++++++++ src/lib/harsh.rs | 59 ++++++++++++++++++++++++++------- src/lib/http.rs | 20 ----------- src/lib/http/mod.rs | 45 +++++++++++++++++++++++++ src/lib/http/models.rs | 16 +++++++++ src/lib/http/routes.rs | 15 +++++++++ src/lib/log.rs | 2 +- src/lib/mod.rs | 21 +++++++++++- src/main.rs | 8 +++-- 18 files changed, 272 insertions(+), 58 deletions(-) create mode 100644 config.ron create mode 100644 database/conf create mode 100644 database/db create mode 100644 database/snap.0000000000000060 delete mode 100644 src/lib/database.rs create mode 100644 src/lib/db/mod.rs create mode 100644 src/lib/db/models.rs delete mode 100644 src/lib/http.rs create mode 100644 src/lib/http/mod.rs create mode 100644 src/lib/http/models.rs create mode 100644 src/lib/http/routes.rs diff --git a/Cargo.lock b/Cargo.lock index f51f5f8..ea0759e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -59,6 +59,12 @@ dependencies = [ "tower-service", ] +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + [[package]] name = "bitflags" version = "1.3.2" @@ -221,6 +227,7 @@ dependencies = [ "axum", "chrono", "colored", + "ron", "serde", "serde_json", "sled", @@ -527,6 +534,17 @@ dependencies = [ "bitflags", ] +[[package]] +name = "ron" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b861ecaade43ac97886a512b360d01d66be9f41f3c61088b42cedf92e03d678" +dependencies = [ + "base64", + "bitflags", + "serde", +] + [[package]] name = "ryu" version = "1.0.5" diff --git a/Cargo.toml b/Cargo.toml index bba9c1c..fd7bd0b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ description = "Harmony server application" [dependencies] # async engine -tokio = { version = "1.0", features = ["full"] } +tokio = { version = "1.13.0", features = ["full"] } # http client axum = "0.3.2" @@ -16,9 +16,12 @@ axum = "0.3.2" sled = "0.34.7" # serialization -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0.68" +serde = { version = "1.0.130", features = ["derive"] } +serde_json = "1.0.69" # useful for logging -chrono = "0.4" +chrono = "0.4.19" colored = "2.0.0" + +# serialization format of config files +ron = "0.7.0" diff --git a/config.ron b/config.ron new file mode 100644 index 0000000..f5d0ac3 --- /dev/null +++ b/config.ron @@ -0,0 +1,4 @@ +( + database_path: "./database", + port: 42069 +) \ No newline at end of file diff --git a/database/conf b/database/conf new file mode 100644 index 0000000..4154d7c --- /dev/null +++ b/database/conf @@ -0,0 +1,4 @@ +segment_size: 524288 +use_compression: false +version: 0.34 +vQÁ \ No newline at end of file diff --git a/database/db b/database/db new file mode 100644 index 0000000000000000000000000000000000000000..c4d313c7775b17c65ef6795ff695c1888ed4573d GIT binary patch literal 524287 zcmeIuu?fNe5CzbSVhA?k2)c-)1R=2sh(y6o(b^$&j0~WKjeA>c{8nLU_NqJNVbU zS92M>+H9iDcCxuW)6c#*o!7l2lDLod$1ID^w-AqUJ Self { - todo!() + pub fn get() -> Self { + match Self::try_from_file() { + Ok(config) => config, + Err(_) => { + let result = Configuration::default(); + Configuration::write_config(&result); + result + } + } + } + + fn try_from_file() -> Result { + let content = Self::try_read()?; + let config: Configuration = ron::from_str(&content)?; + Ok(config) + } + + fn try_read() -> Result { + for path in CONFIG_PATHS { + match read_to_string(path) { + Ok(serialized) => return Ok(serialized), + _ => (), + } + } + Err("unable to locate or read config file".to_string().into()) + } + + fn write_config(data: &Self) { + let serialized = ron::to_string(data).unwrap(); + write(CONFIG_PATHS[0], serialized); + } +} + +impl Default for Configuration { + fn default() -> Self { + Self { + database_path: "./database".to_string(), + port: 42069, // haha funny number + } } } diff --git a/src/lib/database.rs b/src/lib/database.rs deleted file mode 100644 index e80892e..0000000 --- a/src/lib/database.rs +++ /dev/null @@ -1,15 +0,0 @@ -use super::config::Configuration; - -/// -/// handle the database access -/// -pub struct DbManager { - // -} - -impl DbManager { - /// constructor - pub fn new(_config: &Configuration) -> Self { - todo!() - } -} diff --git a/src/lib/db/mod.rs b/src/lib/db/mod.rs new file mode 100644 index 0000000..6baa80c --- /dev/null +++ b/src/lib/db/mod.rs @@ -0,0 +1,20 @@ +pub mod models; + +use sled::Db; + +use super::{config::Configuration, harsh::Error}; + +/// +/// handle the database access +/// +pub struct DbManager { + handle: Db, +} + +impl DbManager { + /// constructor + pub fn new(config: Configuration) -> Result { + let handle = sled::open(config.database_path)?; + Ok(DbManager { handle }) + } +} diff --git a/src/lib/db/models.rs b/src/lib/db/models.rs new file mode 100644 index 0000000..2ab6f65 --- /dev/null +++ b/src/lib/db/models.rs @@ -0,0 +1,18 @@ +type Id = u64; + +pub struct User { + username: String, + password: String, + id: Id, +} + +pub struct Channel { + name: String, + id: Id, + messages: Vec, +} + +pub struct Message { + content: String, + id: Id, +} diff --git a/src/lib/harsh.rs b/src/lib/harsh.rs index 2f7dbb0..6c0e8fd 100644 --- a/src/lib/harsh.rs +++ b/src/lib/harsh.rs @@ -1,33 +1,68 @@ +use std::error; +use std::sync::{Arc, RwLock}; + use super::config::Configuration; -use super::database::DbManager; +use super::db::DbManager; use super::http::HttpManager; use super::log::Logger; /// /// main function /// -pub fn main() { - let configuration = Configuration::read(); +pub async fn main() { + let configuration = Configuration::get(); + let instance = Harsh::new(configuration); + instance.serve().await; } pub struct Harsh { - db_manager: DbManager, - logger: Logger, - http_manager: HttpManager, + pub shared_state: SharedState, + pub http_manager: HttpManager, } impl Harsh { pub fn new(configuration: Configuration) -> Self { - let db_manager = DbManager::new(&configuration); - let logger = Logger::new(&configuration); - let http_manager = HttpManager::new(); + let db_manager = + DbManager::new(configuration.clone()).expect("failed to open / create the database"); + let logger = Logger::new(configuration.clone()); + let shared_state = State::new_shared(db_manager, logger); + let http_manager = HttpManager::new(configuration.clone(), shared_state.clone()); Harsh { - logger, - db_manager, + shared_state, http_manager, } } - fn serve(&mut self) {} + pub async fn serve(self) { + self.http_manager.serve().await; + } } + +/// +/// shared state arround the app +/// +pub struct State { + pub db_manager: RwLock, + pub logger: RwLock, +} + +impl State { + pub fn new_shared(db_manager: DbManager, logger: Logger) -> SharedState { + let state = State { + db_manager: RwLock::new(db_manager), + logger: RwLock::new(logger), + }; + Arc::new(state) + } +} + +/// +/// safe pointer to the shared state +/// +pub type SharedState = Arc; + +/// +/// error type for now.. +/// +pub type Error = Box; diff --git a/src/lib/http.rs b/src/lib/http.rs deleted file mode 100644 index ebdca62..0000000 --- a/src/lib/http.rs +++ /dev/null @@ -1,20 +0,0 @@ -use super::config::Configuration; -use super::database::DbManager; - -/// -/// listen for incoming requests and handle both incoming and outgoing requests -/// -pub struct HttpManager { - // -} - -impl HttpManager { - pub fn new() -> Self { - HttpManager {} - } - - /// listen for and handle received requests - pub fn serve(_config: &Configuration, _db_manager: &mut DbManager) { - todo!() - } -} diff --git a/src/lib/http/mod.rs b/src/lib/http/mod.rs new file mode 100644 index 0000000..140a766 --- /dev/null +++ b/src/lib/http/mod.rs @@ -0,0 +1,45 @@ +/// +/// contains every route handlers +/// +mod routes; + +/// +/// contains every models used by the http server +/// +pub mod models; + +use axum::{AddExtensionLayer, Router}; + +use self::routes::setup_routes; + +use super::config::Configuration; +use super::harsh::SharedState; + +/// +/// listen for incoming requests and handle both incoming and outgoing requests +/// +pub struct HttpManager { + _shared_state: SharedState, + app: Router, +} + +impl HttpManager { + /// constructor + pub fn new(_config: Configuration, shared_state: SharedState) -> Self { + let app = setup_routes(Router::new()).layer(AddExtensionLayer::new(shared_state.clone())); + + HttpManager { + _shared_state: shared_state.clone(), + app, + } + } + + /// listen for and handle received requests + pub async fn serve(self) { + let address = "0.0.0.0:3000".parse().unwrap(); + axum::Server::bind(&address) + .serve(self.app.into_make_service()) + .await + .unwrap(); + } +} diff --git a/src/lib/http/models.rs b/src/lib/http/models.rs new file mode 100644 index 0000000..e979def --- /dev/null +++ b/src/lib/http/models.rs @@ -0,0 +1,16 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize)] +pub struct CreateUser { + name: String, + password: String, +} + +pub struct EditUser { + // +} + +pub struct DeleteUser { + name: String, + password: String, +} diff --git a/src/lib/http/routes.rs b/src/lib/http/routes.rs new file mode 100644 index 0000000..fe7886a --- /dev/null +++ b/src/lib/http/routes.rs @@ -0,0 +1,15 @@ +use axum::extract::{Extension, Json}; +use axum::routing::get; +use axum::Router; + +use crate::lib::harsh::SharedState; + +use super::models::*; + +pub fn setup_routes(app: Router) -> Router { + app.route("/user/create", get(create_user)) +} + +async fn create_user(Extension(state): Extension, Json(payload): Json) { + // +} diff --git a/src/lib/log.rs b/src/lib/log.rs index c889214..f6253e9 100644 --- a/src/lib/log.rs +++ b/src/lib/log.rs @@ -11,7 +11,7 @@ pub struct Logger { impl Logger { /// adapt the static instance according to parameters specified by the configuration - pub fn new(_config: &Configuration) -> Self { + pub fn new(_config: Configuration) -> Self { Logger {} } diff --git a/src/lib/mod.rs b/src/lib/mod.rs index 4091b14..40e9033 100644 --- a/src/lib/mod.rs +++ b/src/lib/mod.rs @@ -1,5 +1,24 @@ +/// +/// encapsulate the logic responsible for reading and parsing the server configuration +/// pub mod config; -pub mod database; + +/// +/// encapsulate the logic responsible for interacting with the database +/// +pub mod db; + +/// +/// main module, exposes the highest level structure holding the whole server runtime logic +/// pub mod harsh; + +/// +/// encapsulate the logic responsible for receiving and routing http requests +/// pub mod http; + +/// +/// encapsulate the logic responsible for logging events occuring while the server is running +/// pub mod log; diff --git a/src/main.rs b/src/main.rs index b17108b..6b3a094 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,10 @@ +/// +/// library module +/// pub mod lib; -pub fn main() { +#[tokio::main] +pub async fn main() { println!("Hello, harmony!"); - lib::harsh::main(); + lib::harsh::main().await; } From 21f4449da01496cea1abaf3d7b4ae8d1ff62b590 Mon Sep 17 00:00:00 2001 From: Jolimaitre Matthieu Date: Fri, 12 Nov 2021 21:06:09 +0100 Subject: [PATCH 06/11] ignoring config and database --- .gitignore | 2 ++ config.ron | 4 ---- database/conf | 4 ---- database/db | Bin 524287 -> 0 bytes database/snap.0000000000000060 | Bin 69 -> 0 bytes 5 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 config.ron delete mode 100644 database/conf delete mode 100644 database/db delete mode 100644 database/snap.0000000000000060 diff --git a/.gitignore b/.gitignore index ea8c4bf..40d9840 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ /target +/database +/config.ron diff --git a/config.ron b/config.ron deleted file mode 100644 index f5d0ac3..0000000 --- a/config.ron +++ /dev/null @@ -1,4 +0,0 @@ -( - database_path: "./database", - port: 42069 -) \ No newline at end of file diff --git a/database/conf b/database/conf deleted file mode 100644 index 4154d7c..0000000 --- a/database/conf +++ /dev/null @@ -1,4 +0,0 @@ -segment_size: 524288 -use_compression: false -version: 0.34 -vQÁ \ No newline at end of file diff --git a/database/db b/database/db deleted file mode 100644 index c4d313c7775b17c65ef6795ff695c1888ed4573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524287 zcmeIuu?fNe5CzbSVhA?k2)c-)1R=2sh(y6o(b^$&j0~WKjeA>c{8nLU_NqJNVbU zS92M>+H9iDcCxuW)6c#*o!7l2lDLod$1ID^w-AqUJ Date: Fri, 12 Nov 2021 22:22:41 +0100 Subject: [PATCH 07/11] implemented logging for main components --- src/lib/config.rs | 2 +- src/lib/db/mod.rs | 40 +++++++++++++++++++++++++++++++++++----- src/lib/harsh.rs | 7 ++++--- src/lib/http/mod.rs | 39 +++++++++++++++++++++++++++++---------- src/lib/log.rs | 42 +++++++++++++++++++++++++++++++++--------- src/main.rs | 1 - 6 files changed, 102 insertions(+), 29 deletions(-) diff --git a/src/lib/config.rs b/src/lib/config.rs index ad5f444..21a1a89 100644 --- a/src/lib/config.rs +++ b/src/lib/config.rs @@ -47,7 +47,7 @@ impl Configuration { fn write_config(data: &Self) { let serialized = ron::to_string(data).unwrap(); - write(CONFIG_PATHS[0], serialized); + write(CONFIG_PATHS[0], serialized).unwrap_or_else(|_| ()); } } diff --git a/src/lib/db/mod.rs b/src/lib/db/mod.rs index 6baa80c..9e3a6a5 100644 --- a/src/lib/db/mod.rs +++ b/src/lib/db/mod.rs @@ -2,19 +2,49 @@ pub mod models; use sled::Db; -use super::{config::Configuration, harsh::Error}; +use super::{ + config::Configuration, + harsh::Error, + log::{Loggable, Logger}, +}; /// /// handle the database access /// pub struct DbManager { - handle: Db, + path: String, + handle: Option, + logger: Logger, } impl DbManager { /// constructor - pub fn new(config: Configuration) -> Result { - let handle = sled::open(config.database_path)?; - Ok(DbManager { handle }) + pub fn new(config: Configuration, logger: Logger) -> Result { + let mut result = DbManager { + path: config.database_path, + handle: None, + logger, + }; + result.info("ininitalized new manager"); + + result.open_db()?; + result.info("openned database"); + Ok(result) + } + + pub fn open_db(&mut self) -> Result<(), Error> { + let handle = sled::open(&self.path)?; + self.handle = Some(handle); + Ok(()) + } +} + +impl Loggable for DbManager { + fn name(&self) -> String { + "db manager".to_string() + } + + fn logger(&self) -> Logger { + self.logger.clone() } } diff --git a/src/lib/harsh.rs b/src/lib/harsh.rs index 6c0e8fd..bebf40a 100644 --- a/src/lib/harsh.rs +++ b/src/lib/harsh.rs @@ -22,10 +22,10 @@ pub struct Harsh { impl Harsh { pub fn new(configuration: Configuration) -> Self { - let db_manager = - DbManager::new(configuration.clone()).expect("failed to open / create the database"); let logger = Logger::new(configuration.clone()); - let shared_state = State::new_shared(db_manager, logger); + let db_manager = DbManager::new(configuration.clone(), logger.clone()) + .expect("failed to open / create database"); + let shared_state = State::new_shared(db_manager, logger.clone()); let http_manager = HttpManager::new(configuration.clone(), shared_state.clone()); Harsh { @@ -49,6 +49,7 @@ pub struct State { impl State { pub fn new_shared(db_manager: DbManager, logger: Logger) -> SharedState { + logger.info("initialized shared state"); let state = State { db_manager: RwLock::new(db_manager), logger: RwLock::new(logger), diff --git a/src/lib/http/mod.rs b/src/lib/http/mod.rs index 140a766..20c2469 100644 --- a/src/lib/http/mod.rs +++ b/src/lib/http/mod.rs @@ -14,32 +14,51 @@ use self::routes::setup_routes; use super::config::Configuration; use super::harsh::SharedState; +use super::log::Loggable; +use super::log::Logger; /// /// listen for incoming requests and handle both incoming and outgoing requests /// pub struct HttpManager { - _shared_state: SharedState, + shared_state: SharedState, + port: u32, app: Router, + logger: Logger, } impl HttpManager { /// constructor - pub fn new(_config: Configuration, shared_state: SharedState) -> Self { + pub fn new(config: Configuration, shared_state: SharedState) -> Self { let app = setup_routes(Router::new()).layer(AddExtensionLayer::new(shared_state.clone())); + let logger = shared_state.logger.try_read().unwrap().clone(); - HttpManager { - _shared_state: shared_state.clone(), + let result = HttpManager { + shared_state: shared_state.clone(), + port: config.port, app, - } + logger, + }; + result.info("initialized new manager"); + + result } /// listen for and handle received requests pub async fn serve(self) { - let address = "0.0.0.0:3000".parse().unwrap(); - axum::Server::bind(&address) - .serve(self.app.into_make_service()) - .await - .unwrap(); + let address = format!("0.0.0.0:{}", self.port).parse().unwrap(); + self.info(format!("listening to address '{}'", address)); + let server = axum::Server::bind(&address).serve(self.app.into_make_service()); + server.await.unwrap(); + } +} + +impl Loggable for HttpManager { + fn name(&self) -> String { + "http manager".to_string() + } + + fn logger(&self) -> Logger { + self.logger.clone() } } diff --git a/src/lib/log.rs b/src/lib/log.rs index f6253e9..31891df 100644 --- a/src/lib/log.rs +++ b/src/lib/log.rs @@ -1,3 +1,5 @@ +use std::{borrow::Borrow, ops::Deref}; + use super::config::Configuration; use chrono::prelude::*; use colored::Colorize; @@ -5,6 +7,7 @@ use colored::Colorize; /// /// configurable structure with methods to log informations in different ways /// +#[derive(Clone)] pub struct Logger { // } @@ -15,19 +18,16 @@ impl Logger { Logger {} } - pub fn info(&self, msg: String) { - let tag_section = "[info]".blue(); - println!("{} {} {}", time_segment(), tag_section, msg); + pub fn info>(&self, msg: T) { + println!("{} {} {}", time_segment(), "[info]".blue(), msg.into()); } - pub fn warn(&self, msg: String) { - let tag_section = "[warn]".yellow(); - println!("{} {} {}", time_segment(), tag_section, msg); + pub fn warn>(&self, msg: T) { + println!("{} {} {}", time_segment(), "[warn]".yellow(), msg.into()); } - pub fn fail(&self, msg: String) { - let tag_section = "[fail]".red(); - println!("{} {} {}", time_segment(), tag_section, msg); + pub fn fail>(&self, msg: T) { + println!("{} {} {}", time_segment(), "[fail]".red(), msg.into()); } } @@ -37,3 +37,27 @@ fn time_segment() -> String { let result = now.format("[%Y.%m.%d-%H:%M:%S]").to_string(); result } + +pub trait Loggable { + fn name(&self) -> String; + + fn logger(&self) -> Logger; + + fn info>(&self, msg: T) { + self.logger().info(self.format_message(msg)); + } + + fn warn>(&self, msg: T) { + self.logger().warn(self.format_message(msg)); + } + + fn fail>(&self, msg: T) { + self.logger().fail(self.format_message(msg)); + } + + fn format_message>(&self, msg: T) -> String { + let message: String = msg.into(); + let formatted = format!("[{}] {}", self.name(), message); + formatted + } +} diff --git a/src/main.rs b/src/main.rs index 6b3a094..4c05023 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,5 @@ pub mod lib; #[tokio::main] pub async fn main() { - println!("Hello, harmony!"); lib::harsh::main().await; } From c2e635f9c7ca48fba5f983bc1f5bd4428ee51f97 Mon Sep 17 00:00:00 2001 From: Jolimaitre Matthieu Date: Fri, 12 Nov 2021 22:25:03 +0100 Subject: [PATCH 08/11] removed unused warnings on common models --- src/lib/db/models.rs | 2 ++ src/lib/http/models.rs | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/lib/db/models.rs b/src/lib/db/models.rs index 2ab6f65..ab4d2a5 100644 --- a/src/lib/db/models.rs +++ b/src/lib/db/models.rs @@ -1,3 +1,5 @@ +#![allow(unused, dead_code)] + type Id = u64; pub struct User { diff --git a/src/lib/http/models.rs b/src/lib/http/models.rs index e979def..c52f6bd 100644 --- a/src/lib/http/models.rs +++ b/src/lib/http/models.rs @@ -1,3 +1,5 @@ +#![allow(unused, dead_code)] + use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize)] From 0d99c753ed58eab25791a8453f19a639cb541a94 Mon Sep 17 00:00:00 2001 From: Jolimaitre Matthieu Date: Sat, 13 Nov 2021 02:24:17 +0100 Subject: [PATCH 09/11] begun to implement a first route --- src/lib/db/mod.rs | 55 +++++++++++++++++++++++++++++++++++++++++- src/lib/db/models.rs | 29 +++++++++++++++------- src/lib/http/routes.rs | 4 ++- src/lib/log.rs | 2 -- 4 files changed, 77 insertions(+), 13 deletions(-) diff --git a/src/lib/db/mod.rs b/src/lib/db/mod.rs index 9e3a6a5..168ca61 100644 --- a/src/lib/db/mod.rs +++ b/src/lib/db/mod.rs @@ -1,7 +1,12 @@ pub mod models; +use std::time::{SystemTime, UNIX_EPOCH}; + +use serde::{de::DeserializeOwned, Serialize}; use sled::Db; +use self::models::*; + use super::{ config::Configuration, harsh::Error, @@ -32,11 +37,37 @@ impl DbManager { Ok(result) } - pub fn open_db(&mut self) -> Result<(), Error> { + fn open_db(&mut self) -> Result<(), Error> { let handle = sled::open(&self.path)?; self.handle = Some(handle); Ok(()) } + + pub fn create_user(&self, username: String, password: String) -> Result { + let id = new_id(Prefixes::User); + + let user = User { + username, + password, + id, + }; + + let path = format!("/user/{}", id); + let serialized = serialize(&user)?; + self.handle().insert(path, serialized)?; + + Ok(user) + } + + // pub fn verify_user(&self, username: String, password: String) -> Result {} + + fn handle(&self) -> &Db { + let db = match &self.handle { + None => unreachable!(), + Some(h) => h, + }; + db + } } impl Loggable for DbManager { @@ -48,3 +79,25 @@ impl Loggable for DbManager { self.logger.clone() } } + +fn new_id(prefix: Prefixes) -> Id { + let prefix = prefix as u8; + let timestamp = SystemTime::now(); + let duration = timestamp.duration_since(UNIX_EPOCH).unwrap(); + let result = duration.as_millis() as Id; + let result = (result << 256) + (prefix as Id); + result +} + +fn serialize(item: &T) -> Result, Error> { + let serialized = serde_json::to_string(item)?; + let array = serialized.as_bytes(); + let result = Vec::from(array); + Ok(result) +} + +fn deserialize(serialized: &[u8]) -> Result { + let data = String::from_utf8(serialized.to_vec())?.clone(); + let result = serde_json::from_str::(&data)?; + Ok(result) +} diff --git a/src/lib/db/models.rs b/src/lib/db/models.rs index ab4d2a5..63d16ed 100644 --- a/src/lib/db/models.rs +++ b/src/lib/db/models.rs @@ -1,20 +1,31 @@ #![allow(unused, dead_code)] -type Id = u64; +use serde::{Deserialize, Serialize}; +pub type Id = u64; + +pub enum Prefixes { + Message = 0, + User = 10, + Channel = 20, +} + +#[derive(Serialize, Deserialize)] pub struct User { - username: String, - password: String, - id: Id, + pub username: String, + pub password: String, + pub id: Id, } +#[derive(Serialize, Deserialize)] pub struct Channel { - name: String, - id: Id, - messages: Vec, + pub name: String, + pub id: Id, + pub messages: Vec, } +#[derive(Serialize, Deserialize)] pub struct Message { - content: String, - id: Id, + pub content: String, + pub id: Id, } diff --git a/src/lib/http/routes.rs b/src/lib/http/routes.rs index fe7886a..a43cb62 100644 --- a/src/lib/http/routes.rs +++ b/src/lib/http/routes.rs @@ -11,5 +11,7 @@ pub fn setup_routes(app: Router) -> Router { } async fn create_user(Extension(state): Extension, Json(payload): Json) { - // + // TODO: security check + + //state.db_manager.; } diff --git a/src/lib/log.rs b/src/lib/log.rs index 31891df..2d0e0cc 100644 --- a/src/lib/log.rs +++ b/src/lib/log.rs @@ -1,5 +1,3 @@ -use std::{borrow::Borrow, ops::Deref}; - use super::config::Configuration; use chrono::prelude::*; use colored::Colorize; From b3dcb80a6fa0810ea3ff94450e602eabd7ffe49c Mon Sep 17 00:00:00 2001 From: mb Date: Tue, 23 Aug 2022 15:54:40 +0300 Subject: [PATCH 10/11] made room for update --- .gitignore | 3 - Cargo.lock | 843 ----------------------------------------- Cargo.toml | 27 -- README.md | 7 - assets/icon_256.png | Bin 33048 -> 0 bytes assets/icon_512.png | Bin 115449 -> 0 bytes rustfmt.toml | 1 - src/lib/config.rs | 61 --- src/lib/db/mod.rs | 103 ----- src/lib/db/models.rs | 31 -- src/lib/harsh.rs | 69 ---- src/lib/http/mod.rs | 64 ---- src/lib/http/models.rs | 18 - src/lib/http/routes.rs | 17 - src/lib/log.rs | 61 --- src/lib/mod.rs | 24 -- src/main.rs | 9 - 17 files changed, 1338 deletions(-) delete mode 100644 .gitignore delete mode 100644 Cargo.lock delete mode 100644 Cargo.toml delete mode 100644 README.md delete mode 100644 assets/icon_256.png delete mode 100644 assets/icon_512.png delete mode 100644 rustfmt.toml delete mode 100644 src/lib/config.rs delete mode 100644 src/lib/db/mod.rs delete mode 100644 src/lib/db/models.rs delete mode 100644 src/lib/harsh.rs delete mode 100644 src/lib/http/mod.rs delete mode 100644 src/lib/http/models.rs delete mode 100644 src/lib/http/routes.rs delete mode 100644 src/lib/log.rs delete mode 100644 src/lib/mod.rs delete mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 40d9840..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/target -/database -/config.ron diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index ea0759e..0000000 --- a/Cargo.lock +++ /dev/null @@ -1,843 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "async-trait" -version = "0.1.51" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" - -[[package]] -name = "axum" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e874ee652f2ec443faed3073b80f0ac7a2042a3605fc0704d28bbbf22d623c" -dependencies = [ - "async-trait", - "bitflags", - "bytes", - "futures-util", - "http", - "http-body", - "hyper", - "matchit", - "mime", - "percent-encoding", - "pin-project-lite", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tokio-util", - "tower", - "tower-http", - "tower-layer", - "tower-service", -] - -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" -dependencies = [ - "libc", - "num-integer", - "num-traits", - "time", - "winapi", -] - -[[package]] -name = "colored" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" -dependencies = [ - "atty", - "lazy_static", - "winapi", -] - -[[package]] -name = "crc32fast" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "lazy_static", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" -dependencies = [ - "cfg-if", - "lazy_static", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "form_urlencoded" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" -dependencies = [ - "matches", - "percent-encoding", -] - -[[package]] -name = "fs2" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "futures-channel" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" - -[[package]] -name = "futures-sink" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" - -[[package]] -name = "futures-task" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" - -[[package]] -name = "futures-util" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" -dependencies = [ - "autocfg", - "futures-core", - "futures-task", - "pin-project-lite", - "pin-utils", -] - -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - -[[package]] -name = "harsh" -version = "0.1.0" -dependencies = [ - "axum", - "chrono", - "colored", - "ron", - "serde", - "serde_json", - "sled", - "tokio", -] - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "http" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" - -[[package]] -name = "httpdate" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" - -[[package]] -name = "hyper" -version = "0.14.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b91bb1f221b6ea1f1e4371216b70f40748774c2fb5971b450c07773fb92d26b" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" - -[[package]] -name = "lock_api" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - -[[package]] -name = "matchit" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58b6f41fdfbec185dd3dff58b51e323f5bc61692c0de38419a957b0dcfccca3c" - -[[package]] -name = "memchr" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" - -[[package]] -name = "memoffset" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - -[[package]] -name = "mio" -version = "0.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" -dependencies = [ - "libc", - "log", - "miow", - "ntapi", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi", -] - -[[package]] -name = "ntapi" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" -dependencies = [ - "winapi", -] - -[[package]] -name = "num-integer" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "once_cell" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi", -] - -[[package]] -name = "percent-encoding" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" - -[[package]] -name = "pin-project" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "proc-macro2" -version = "1.0.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "quote" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "redox_syscall" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" -dependencies = [ - "bitflags", -] - -[[package]] -name = "ron" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b861ecaade43ac97886a512b360d01d66be9f41f3c61088b42cedf92e03d678" -dependencies = [ - "base64", - "bitflags", - "serde", -] - -[[package]] -name = "ryu" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "serde" -version = "1.0.130" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.130" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e466864e431129c7e0d3476b92f20458e5879919a0596c6472738d9fa2d342f8" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" -dependencies = [ - "libc", -] - -[[package]] -name = "sled" -version = "0.34.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935" -dependencies = [ - "crc32fast", - "crossbeam-epoch", - "crossbeam-utils", - "fs2", - "fxhash", - "libc", - "log", - "parking_lot", -] - -[[package]] -name = "smallvec" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309" - -[[package]] -name = "socket2" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "syn" -version = "1.0.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" - -[[package]] -name = "time" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" -dependencies = [ - "libc", - "wasi", - "winapi", -] - -[[package]] -name = "tokio" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "588b2d10a336da58d877567cd8fb8a14b463e2104910f8132cd054b4b96e29ee" -dependencies = [ - "autocfg", - "bytes", - "libc", - "memchr", - "mio", - "num_cpus", - "once_cell", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "tokio-macros", - "winapi", -] - -[[package]] -name = "tokio-macros" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "114383b041aa6212c579467afa0075fbbdd0718de036100bc0ba7961d8cb9095" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-util" -version = "0.6.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tower" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00e500fff5fa1131c866b246041a6bf96da9c965f8fe4128cb1421f23e93c00" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-http" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b56efe69aa0ad2b5da6b942e57ea9f6fe683b7a314d4ff48662e2c8838de1" -dependencies = [ - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "pin-project", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" - -[[package]] -name = "tower-service" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" - -[[package]] -name = "tracing" -version = "0.1.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - -[[package]] -name = "unicode-xid" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml deleted file mode 100644 index fd7bd0b..0000000 --- a/Cargo.toml +++ /dev/null @@ -1,27 +0,0 @@ -[package] -name = "harsh" -version = "0.1.0" -edition = "2018" -description = "Harmony server application" - -[dependencies] - -# async engine -tokio = { version = "1.13.0", features = ["full"] } - -# http client -axum = "0.3.2" - -# database -sled = "0.34.7" - -# serialization -serde = { version = "1.0.130", features = ["derive"] } -serde_json = "1.0.69" - -# useful for logging -chrono = "0.4.19" -colored = "2.0.0" - -# serialization format of config files -ron = "0.7.0" diff --git a/README.md b/README.md deleted file mode 100644 index d49c61b..0000000 --- a/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# harsh - -![harsh icon](./assets/icon_256.png) - -## Description - -harsh is a Harmony server made in rust. diff --git a/assets/icon_256.png b/assets/icon_256.png deleted file mode 100644 index 5a1cd30e3f42f8f7d55257afa213a8121c05932e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33048 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 diff --git a/assets/icon_512.png b/assets/icon_512.png deleted file mode 100644 index 5b09baa0a1c0f0e1c1f0a7e5a476fb66ac559194..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115449 zcmeFY2U}B7(>9uf5CS3)iu7Ut>0MDe2%!j4q)H6}f=ZL#NdW1+t29BRcchm9Dpe5a zAVn#mgY*)@7vJwZ&wGBuxz05^*|}!zti5OLRc7wFSCp={+D$ShG5`Q@Q$t<{h z`~(4@5W?xmXZ(V2B6U@N>J9+hp!xR!0^VgY5R{Z22on$07mjuSSx;w=7aopww(@Cp zQ|W{vhJQsW)*f~MaZzzG5wU*ETUdDJfo000hvhKiDbkL7mzi)yomP-6w|DiMD3RdK!lL{ELG_r{Z;|v;I}?9f$KSJMLEe0s@PzmuXK< z7u-)~dQ4wc?V0&Yt5sUIOCNO#qyJaFCu2sxzjStS%252TpfvJmP|hS4p#KOnFIpQQ zsk_nM{~wJ7C>!9xyiWZenN}qA09B(O?LFT8uWlWjH}}7lVjzzQwca%Fb8-9cjTCtR z^N<$se?(H3P^)9!PydwG|LUZH>ykgX|0C6C>UA)ZC~e{Wum9?PkSaF*zYMyWN~o2& z_-J9}e~r`zwA}O{{f{{2fu(`diiM|ly#K570R3>v)BKMhiMW4|Vj%qO_nZH#``08y z|7-sL-z0>_`u}*7#JeEh`=?NT0Owreu({6nw)&DddnU?^?WjBH3v0Gcup>5po$(_L z15fB84;t&Urk+@2*rIk!rpOK6ZcT>Hh1*r8L@10Lbf$ax%;+^Im0M7ntmWeRbInbR zgXAnSFyHynoJsm^PX&H$O>m>AeY$Q~x?cSG8sqZF3zzP3)daF9{zwjiiJDzU0z^TD zx2!SvZy(W0H@il*dXJSr`HD%04oR8Z2PiuM-7j7OOZM~CxYTma+BXN7mOR;}3Vv2A z8%Ey1Lg}5tErsJB%9K|=dvO*ZlBa}m#$vnU zE8d@W2YLBg#Jk0_uS(v-A5@%(`bbRIm3&r*r6fmYawrNM6l_+jh^ISpz@L&I!I}?o z`WF%U77NEqp_KT(aPOW49FZWp1F{4Va7ih1R>t!kj4b8i?e^6;>^P8$o*YWLE3Y7A zXD+P1W^8y$^bcUT(#Y6@>DO{*OHsb1C&d?T{Swb*9d3lm&Vmxykd~h-y$eV7nz1?l3(fHsM|Uki_Y1%mP|Ww@G|Qq-U~-&@Ma$9T z3TiPs%L@_=p(R$YDE8tTFv^R}n{TPY$VCSgB!TJseg^W$Z`FHhs0t|>kUc4276M>l zq=-MXx1WH+y0ScJ7-iBKFW|5M%7m zD;XLn7(}N5$GCA-9y|em?JA;kDlNWMU>A$yRE)Dlt@4Au6cFdA#=R2-NLcGBM!Ur* zTCCD+kdek+RH|yEZgX0Ec#I<7eKd8cj(OfvK(x3i4{}{HY?8XU)R$ZE%SfdJP{}Pt z_gO~$cA_ZC=UstX!hi({{~|O%3WPl=fkk>AJQIxvc=E9}ax(!H|NP(=NR~<Lh3&{?9qhgWRc4_4i?nZ^^y|r} zWtPgzvXo;ifI}@Se@w@O+O@F(i2|)&yc%|i_7%P3}Y-gn5!fK?BVT&z7D!C-%g0+&2&xR$W+QWL9ySpMJ*V|; z>_dSbbMdN+8u%N&6?&3C8}0Td2{dt{&Qqy2`O4r<1BnxA&apGjmFcgF*`fW*z>8f} z&rUuCVoMtMfcB-Vc^t<2dPS=@5D$IFa4vIu37VW;2f82d?eO<{VCR<*piUfw1H*x` zHjOo?an@3=zB2a$uMa#k$Y!8zuQZ7-O@LcvRUW@bv)g^~b^kaV78zw6b98&ADdOvR)6QY{kH0kUHnm@W^Eh>l6ZwCqR6 z9t#malc1V&VLwrL{pX7#TaFSDrx`vTRgMv0vV6`F1J}HB+g$aPNB5yh_lFhKs5AJb zx;8Dcq5L6Gn8;I;jn{@Q$^Wt`d$br}dFn>@8VTxYS;2`>R_d$V;k?|x2MhwxCP$f8 z;dfD?zoR8f(*x--swJ0ej)E@7Ha}eV8?A$hf<2C=;ShhY6DFC8CXBewp(3pzrO%F7(c=-|Kntx^sIY z$V|m`RS^B+a2;~IBaI|0vXv;nnq#28p)~>gOLo_O`PENS%(wTL6oQ9%qN7$8Uv*@N z!IWLi06C$2icgdqaIr)bAkNTEB3e+XOfcle@Z#9tI=wGU6A`3jYNbKBN>N)SP*T;E zGmFncAiF!(3lt&=tAiJo#&~tGYy!8O2#oZOWAXb)TX>Q($fm$R9b|&v@V27aUun*^ z6j%S}Fj444gU=G#!A#!Y+LjVnE2E)w>imj52L`nLD0V~`zqEaIRDJ*$g1AHVD_^!| z7Y5}|{^De`qnu9#6XKSExQ){k8P`TZ-(f?~8~fJ+Z_os73SQGnZ<3uP9SE@-I-cDNI5dt;O=3ESZaNr#gqlg_%aXF635|XDutY<0URjF)y zM>rBNt>8*>SuK8_agI`wMxDZ*wi-*89m1ObprO(_NC;`@>C8AS?R12NMHWb_cwxki zy++}}mB9!ke8#7JXBrvojjGKyz~Vt4m^a_}Sqr1(2@d@4a18+G^$PTG22XB4j$g+a z9wo%jWS7Co`DaxX|N6OpsmM3;6p9u$^w=G7KPN*~KaNfvnhuDTW}G&~jMUmS`(80D z8DuwIO*^Lp)5{_=e%joaPLpjXuNTwlRnbTy;tF{5&BO)KT^+z#>-CJI5jZ=e26E1% z-z5IN-Fz=~0x`ku+RlYa>O^-&Z?fQg`)JY0*)<>`j}8{T{JL)*>-&aBL!UB=QynK!;=~+zR6Qy$>tJu7G^hJom zJ*!gqUC5Kz-5*^IsCQ!}Sc9WdxB-|4amPR|bBGtgn`o@~6?UJdpm^Ba*o9@u_esx4tv16-(p?q3z`^wC9NpeCe(Onhp+@#w z9&*{bBLb-e7i|68-!KghrjuTE=7=lCHqIZG(U{Q^VW9kdHcl0Yrr>?hL-r`wAG%9b zs&o(BVh7?Q$w0SK{K{`2vX(Vt;K?B^ru4WPq3AwQG2PMon>nO50uFkp0j?+grb&?W zG&qN#cPjnXkHP&UfP$dkYw07?#5) zihZc6KB7<#wXjF1Q7VZL1?=DwED6Q&lBKH+fyxZv6@8A0Be&%f3DRDT;iS`=oQ$h( zz6l*C$7g!6)_gw3nPSZ+|`1+`p8JZJsyfLbzP-m&q=5lMTol5>l)^L; zODRL`RXh^=MEicbXczs2pSj8Csls?0j>2|cAbu8)s0;rRwlj`)aAOv|PQO_#PED8{5B&oJT<5tkO9^@jGBPB=0Z*ertLa2) zOEya;y<+YQ)v{zd)6oq39}Mz?_T5swxNoSG&{0BnQEqTN?3pwVpjFz{@KcZQP`x?Pxp8kw^> zCN~EK(knK;8PNo3x*SXJL`2}GUA*eItN+Rq6)5b*Gb*sEkL%WiM)1pkw1dJ6R1plc zzfE{*d%dQ;gTHMtBNmcm3!wCeHq>EX!spPae$Ru8i^DT!B{Lu!h&wo8W$;{rp#c9h zT|NAVrRjm;M~G)>B+({frW)Jd&}9aG!*Vb%>JF;xcR!B!hlY9hPd9>1 zd+@t`atEh@`1PX)@670B84XfXj9_;tNhLTqp<+Ll>NHUdNn~6KnwV~6xgyC{ao;1_ zzoi!f7&XTHq2^!Q`*8LIwI);W0zusee6To}?<&k=kd{IvmrL7~EZOAg*@snpse8gTT530$zE&A5!66&hO$6Ru9G z)h!1)Xh~HV8x_qray;kYZyxn(ZMF$NDk}HBjN7Atu1wNHcBk_EF8;ii0j{T4SAq#X zxSJ)`fNO*YR}*T)QL_U5%h+J-^-U-_FZ@XXZ%TGO$cLC*vw)hHa&?>YDeprnwCUaM z?xo3OwU{sa?dl|3AfYYqC=w91C~;Le3cC@ z-|F*g(fil*HYS=Nd2BArSnC+k?X%0QPEb*#V`-lix|bTs7ZHoBq2O?B77A%|{>TU< zCISv?G9j%LI*Y`-ERBTM?Yx>146ED zo$G=HKz7dVF#tY)Lr&W0yU)%C*q-K0CrFc;3>qG*TqY8r%uA}tPj~L^>!AKlu4IXy z3FyXIZZO}puwfge+LG=m(Nmd#6A3-31`qJJ7-`G!FPnzf()A(S;?%*^j6})V+1Xtb zS$ZGIl=}0ZR%Q z`|v81(y-mRp0WUJx$cRLkMO4tUbfeB^a|64QtrsfHp;#kzt!WmFPkc>`>C>(mo-Jco~VJ8TcVtPu6hnUcW)qSi|LqM6N?4! zOC(-fY+RoHavzZ+bkxUg<5Sa<+JH(u*Z2D-uex$&_+(civV&JXGMKJ-T(PQ27TIo5(9x6RWPP@{`twQ%uRNYjKofsv=?)T}Ay(9(aD-6C&BA zWECNK!iU=8_|lU}>~gFhKe>i-QlG+lF`AeS8}yeG4@H}Uhh6MwmE_6*Leb?jQk*D` z%;iI8=jip@N2QA8B85LzA*Ht3{tiLF4*+ z;Ma%PkqG6zk*3wYed0zoM&X^CJrk+;XBTbNTl#m^YSkOP$I?F>-75(?E7MGWd0}RM zS1C!!j0SoAD?Fd~0bG)QlAu8QDADa&4y`<*08C1?@P*=&@qj(?~ ze@^P4#sknn=~B9-j~XdBrih#^2jW=@m-cu=jE7T!%&hO=Hv@9}fhi+ zWWt6C1(^XnqH=S<)+XEDqEhn)KIbsi`pm_$@gDBDh;`(d7;3Tg31C6q>$H*p0cmPN zwolXi_S`P+b|;RROV;W}c7Ii25iYdUbKJc>NX zTP}~aW`{37Z@~W2Ud~OPd_8kv?#BSp-0uzC(c^kw{zegUS!nzjWU7V+#Vol0zUBeT ziOw;z)pn@ov30Oat~ojZ6aY!`giCpS$`nby;k6`a3=W01(eXvjqF93wKs+x00kFOCeqSb8vyBD&ste3t$%_ zeU}>3N@NNcsek&-YjNR{s;p_utHag*$T+&b6yM`y$86L3?1_D6g$t8XucuU| z@al{e$4A=MuBi)J3`Ah@9X^D<4S8au5TCz&zvJiq=;2iTW!{^)POEj=T=Y^79$Dr& zGP}1-RMs%(&-|qnz;5v;RI+Dm3R8~;kB{t~?0o7+7IS=^nNF@v2UG2Q5xqQQrcKPq;-UHi0< zr>cry;OCaK-$Um8(42j#V($gk{r^Gnli4n>dV~l*k!#cOoMSdR7!(uGZFP}heChrX zO~6vs;!UX97zANw50aJahkboa>8`5BjPuH8?;{$@+!tBqOOn8`7Y6U?BE?XjZHrby zkGt*96WNDPo4r~4m#(|*)1 z&fS3!Eq2ePm_~LcJl+E%m2Uz$uem~Gw@32&34jmG6Z~zPBcqQf{W~V6)6BLzy9gve zcWlGT*jLj*2Ax)_E3m^3YyTQk`xvtNh9cL_`Be6x@l7zxQ&UUH?d!#>oeFZi{I)`w ze$KUsvD-ZVy4ntZZO+e;E#pe;E2)A<;GbBbqBw9?KNkm_PL>sOf@#sKJvjKQKf{qC zHvYbmbd0xlZ3m;1!3nCXWwZ+wqAr+?=9=7MavFPsy^KO9>CfhE1(G2{Q+FQ6QJgCQ zEM_;czI-I5ks#@35F4;yIgzxES1qURM6~F-*azgjy1IBpF1Ov%;em~^SEW~vo>%Zv zZj}-KDHSv$5l?Zw|JlrUI{4k;2%k~JaUd76VA1 z&lA{sSgK(T`9M~<=hu&Ug_I2i>y4#En~`e3>h=Mz0zIN_7jqZGoVeoszk{i2i>%dX zhNZ{5oB-xe0gzyi@ZD6}vjUpu`(GCc5Ka=U%)@vOMus-QJ8Uc^2gT@?Dn$i2Cv-(G z+i;E!S*))6_5<8Fb9h(g>~aSGYgfeog8wW-mh5N7(Y=Qw#)HA+$(GKQH1V_yq$pyv z{uNnhB1f8Y_Tw?&;@O{y->p`@Zdwt9oZ1m#{-7t`b`)_OA#ZdOca^`g<7!=cnxi-KgZ0-s6pamL`la%juxwgP&CsVI_H~(a0tPiYc|vGl$hQ z_*gLSOrUQxuJiJ9!;;9&OZKwnmEULO8Vorirw7^?&9=zf|KS2$6nRv&kPS|*-ktQ# z0`V4+OB?TFhpp=0pk;a}akGVKl0HnqF?n;j$)}H+OT;Q#to;yzCTjze&GN9Bo;LWr z8y-h~LKMAZFCDWTy9n>Qc-(o}t!TFtfiop!rB=vJ)?Tk9z|d-Uy3;CR+- z{k|=>3g2DO> z^6`|j2&uhD8tb{Zy`hVW(KY}A*67g0(iUF3XXMhpUJI7P$%1K)PmQ!x@E5FV5iY^2 z8#5uDOh+S%l2f0=CgqU>{0 z;6W1Y1Kv-QVs0BZ`4x(I2PIH!k7bj~WU6az8%Vi;)jNw=#H3XrYqye+7;9Z!43(5e zRR)L{!tF81@WxH1`a2od1q?Nq|(MSqO-0OBV)$ z*x;O0zm$3Zu1G&V zms5>comapM=l&;k_*i6l_uPdGeheBARZ!b7R}~1OpeLVn2koEhrKdThMs}iP@PV77 zgFQNJ*SP(|;4DmMhecu(#oU`KRcg$^!6GiI#pdlFxypiCy)^nz=}G3TKjL3??27bS zWrb+CadE33;%;yBBmpKe{sGaBP*nnoqFm~551XK9zbM31tv@AuU~eCZ{5q^BH3+?H z7?z*U3<>bctgtuLhRuB+re?KC6$Vjx_h~^N=-eUUWH8pX1t{qvvk|C!?l_9GV{oTf zuvmn`yXz*vkBGyq0C_Fgir?sD7mVx0O`z&Ud83YeGUobzLxj~?!JyQEy>5quZy|kl z)}FEolfULQA*zVV3-4sF=t0Wk^=H#{MKGTH#G}EtJ$d(S0U&y!?J?N!KKt;d`L0Nt0KBgWo*QepwK?+kK z1q}=wAgCkt8VtTe&A@Hln$98!;tA1Jp{CL`xnmwYF$rz5N14%zIyb&=nD4p^AfGQF z$10jqlI9bke`Tr8B>Mh-3v%>sSQ^1xWAP5&KHEP%#;XSx;n$77yk7Xs?8x*~^a@i} zHDBTOzej;NNV{d7xG=+Q_Vcy!Pvr?nWc;cqOmSXxTFuX0s%o9T?3HId(Pg0@M1%N5 zXLT6o+hBiLp-s+JJ3$X&6OUadn8#0x#p%Y$t3BL4W|$3_k9e8+Kn!60u>`J<2v5AU)8;t&CXu-0 z0>0E(D12VvRG!7)5Q}VCKW5?#1_TfFc3l@XI#KriLp!x9OiHdD zPuXVQv28Mq6f(Y=0i5Z;+gk;FTqaNc%Vf=9`aq#=V|#ZfNALb-7Jy4; zV3~Nq4(OU%9t?(a_Y(cHN;SrxdS;|0VA=oaAU) zKpYMD`XJJh*eL1Q94Y=4L`Fn0bFP$r6sDDkqt5->um~O*`1+UrF z&zHf@*zAqBjlV3rI&+vJw_r~6T{AYu;Zw8ffJA_ESqi|6VfrP}9BoltR_p^ylGNHr;8^t-;f$O_*4vZwvH z-{p8Y@=L_kO~Oi8fl^J2aP!GDlG64TM;~UwDDTkkh8YAh$Qm-!J>B;!mMoa1d%G{5 z<SLPpW0e6+Kcn^fZAXPU5vSiIr|2TA}ed_|wmZk_MQfZ}gK}&e-?E)cbC2VSJ06 zJw-o5I&%ZAy>bq{_j~;ad>;9*TjXq@M{SE|`-5amG z{6CQx>&ww_6UuULZk+)6S~Z0EkI8wXrhtxk$yNj5+03-nG2qSG=^`SN-y~<=JOC0C z-&^NJ_XAgngEy=o!Po9Q=p}ZkyB^|XVbf^%51X753t%%GJfNZa+Qz*ty-`% zuZSJlItQ$6@;05YaX>sU68(O!P9nips%(T@$!WmO)FJ)w)CMTAFv-W*`pq7wDBq!7 zk*aUWk?JYu4@+#f%3FDH10Qs7CDSAFaRQ&PH{2f~m%(}6w&ddfAm;@dosYNQc>0x1S)_>uCmXgG@iNPWIHsB=|IQIQ3ZhIu)YtE@u}#s`NV z$t6(G0hzKzQ=o-8P+d;!@CpEpW_24MzO^K>`n%S6RK6kOP!F^0WS{@$LWFbUFc2p( z1GwF{Q@V8`d&0JQqX;aXc@Pu&txrMjuwQN9W$@hQX>GNEoG^t*yQlvH z>C|@I+rse|WM$_~NnKbXe#V+4lyT8Kumka9?oI9C8}tK0m@?w^dA38`0^Op_SleC( z3*n7}10UrMtQq8#?zOVI=f+&nY(X^ujTPxr8W`Z$c)}oS`a{5FH?yP;)R5H_r3;%_ zZD95XH}f3!pxWgwaYmnW%NwqAZ!vzQEyV}M+B>-4N(|!|% zUU^*~yHfW8F#ZO<+NN&I_5h}c~E@=VXW9#4PxiGvpI;r4PK1xxiF?I zP+c6(zI3XVPoCZVAi!AT>x>i*G&x+sM%L$Fi`=oEOmKUNi+V+_H;Vfw1F8dHA|Z;x9hDXI_+%O z8F#^z@^XbQ+P>F_nGa$pK9Z>T{=*)>=0m%OA)TY=C6b?6D%{rBr_(r% z<|VfG#^N5f|t z2tkYLjD;w`WK=Op|#Hrtq z(Zaa;pbIe5l? zhq7aKG5qQ6yM<1R^_QecV4ws{-a+su||LSa(z2Z|0~uQP&!<|k5TIVN|Bb$j9=r8 z4i@->+O&@-iUfUnAvMlTP50K~1}X_z!}8qen88oK>{*PASsJ1_1wf9kYh-k0@>$+L<$ zxZFkEvkQ>m+5#^<|M5_l#C+d=X)pVxOcA=XeRPoWJSv~mgDOel@GhAL!K2?!O?iz$ zL9HG6Kr2tcAG5fm*&xqE=;uBFnh`$vN715U`-lT&sp8t2Y!msZH=fNe<%u2A#@I)| z#fNzAy^V5!tOU}?YSGAK%7NjGuyp%1C=C2MsGq>wmE~5PRC$UyRG};rXfhvb#ExEP zeyUAryOU=w_+pa+9YBG$s&@wkSR*cpya<>Cy z+b?W+y5jSQ4c4`ON%2-2JTs*DnawIK4%S^gOC|CGbmI(K;Sq7jeml1XbA?o~HFku5 zIn5n9oViNkj}HPxta80Ae>Xy&h zJFH1A;%z(VwimdG(^sMm3t4>MRI;(;B zF@eAu`DL>!!Gp%eiwT_E6Ol{2T$qT}EA-(pY4hJ>qmq@(2CB#!BO7UU-hG?Uz{i+! zp|sx|q^?p0K_=|#RDWeQ=X0%Dt9PeQ4E^jlO>`P;D%DhO(JKA+tCRiFfy)UzxDoci zVxTbvm7eb$;!j`&gCAk|Mb88Phkc9cC~tKyT_08%Ayr~BT{ScUb|D7QYs%xgcR)MpGvw5UA~$vf z;q;C&XM(3XyZTAlH5Kp|x*rw$BQ;R#64_u^lJ=+|Z;&euUnl|4j;LEC$Cv8Y+BhR5 zq2@^v%K4a&Kvt#{A`e+DStG@mTYP)~!==r57;B?jTaGq57(BV|Q2u!R-<4kUqX5Kz;uKx2RR!d9eh?vYrYOYTdv|iqv#(Qj#mIpR>&%#Wd5wFP z8?q!nwTGCTL79f7#B2!pJxfDY_BGwWY;#dw`I9Q%6@RKBb91xM?b*@^f&A2Iu>KLk>jLyd~=s)I-T3NFAy_$=nfjXPkerS52)E4n7r!^ z+UFw8i8&^C+83?*Jf^-i38B{;V?~FI*HGNAjUO*uJiHYnF1s3#N`A)FxOix7&yJ9tKH;_>8m40vrQu2EyjFcyXj^&k{wV!c>kb{59edQn zhuTnm>m*XPskgfv(n*+dh;BF^5BA_a7Zx|&X^jpt90N`Bv?R{r6|V1oTLM@y>Aw8q zIq3E03&>>PF89(6ror`yIPi)w>0+%6bB&^Zw@s);<$~%R=jgrJQ@=}r}fl+Pi%F_{Z$pkMc`70T^SXozNXokJG?ZzpcNU?f1&2b;bm zJttty3S+RiX^>qFMt=G)IGs8bsB%Q- zyOI2+AZ0bA<$gV$zZvNnwJSgpb=)P{5UI6tcl7r1q54p&&B+BnNrJeNuAWMq9cIMu z65frRT0DH85uS@*@`3}6RXM)5lv2g@o>zLHTj19;c%#nxrI9t<(_XtWs~K!=7dw_E zK)XYmFBZ9zXNhi!g^sssL&X{QIU{a}F{n`j^|f- z*+3gBa*Xo+u-s$iF zh0u#j|K=+s+U7OGdC{;4Aq%*afax8+9W6WV>7hE^%&0QcWqmHBhK-NSE^({eCU2MD zOfmervn2gDkT^>nIi1v)FOvFL1)^(7ev#B+di?vsj7^p`>;lKbKK+;r$&-S5v19e- z3EuOfs4j+zpcC!OC<&UFr#mZdw$ha$&U{ky!Z>~(3DQk6R>Z;)FH zJ)GRDe|+1x1Xq5(dIQOQZ|7u{vqvO&cYA+Orq@0%?8J7o3`n11Wf$SlOTL}Mw(|}h z*l$UtE5<%yJX%@p7&J^6+oZcydJ4+#U6NoatCN#PcYr2r^{pv@TL&pet%Q`b#(u|= zh-Wk*dr=zha$HC8bu^>MMT$m?2Hhb8F_f2~k2jiz<<~g^{S9srC6(5-d^*ry>0xD^ zq{&`OUVfF*)O+x{^eES$<|V^Uaa|A>>>ft3Z^{!vEv7tWC51n(`&5 z4zI{2UsBN1GEwH6sINDM`Gn2o(z~t$u?dv9pJ$*Zj+@61d=FLxU#{LANVm8H&2g~u zS#(NAv+hJik<5YzG?UDCv5t$s=$mrIqkfAw32PqLTuK^lZ~~*ZKiv)VM!E6cKQrY4 z+&5V=VqrT-k?uY-Qt)P)MDIHWSLVCvWZm;w-ky` z6IRF1y?S(hZQ6^RSo@l-Tnk}O1_T1<{a1eDV)u?+W~DRdqOF^&#D>bwx2#wvPu1n^ z4b?~wLOPQ*@Q25sww|tj00n^I?D}Vc8RwZhdktanDK>5(J(jh!naTg&@Y7m~Je@2S zRz12Vl-mcH4xeFb4l)-WAPx+xH5`et;s{eImY>o%b0d+_%Tdh3@-gFU+zo8TkH zYZJcL<|IC@=ARYJICVexWl8j<>$)zmpTJPC3b$nHjk zDaWd5`k4_Q(_l0e`%?<}{1m{diVNm5r_e25qJhOsIAQCWdDH&n_>$}JqI9HCj-LMu z!w4%k+5u~^7s$ML3}>{hnVyz_n>GB0ICzzdv-jJ1=^_-m{qd^NEkHA`bKFwco0J@m zo%{JV?RUgnp8L0!>-LOnhK>zx`*4|Iwn5w9DGf_|MBE47`)bV`XGJ`Zpu2!=nk%0; zXC2=(I-IAW(#%M1(9|mM+^k07L6(DHQNyQaoi2X|N2WZ9(np5V3hJbSCrDfexN0-{ z77T+NVv>fbbZ6F@Mn3nk(e$s+q{r2bSe4doz8`>O;6@h~77_!NT+a_y(?UPK45BO= z@s>MV3RS2T!|Ze2uP40SJOF_?!{`%KC?XBM+_{0rRRoz=81&AtS_gLIb9ILBlJL@nIefvV>MXzCCo!Z)Y>KpW!wftdu(Zk+1 zfO{f+GJ*5W=HXX+GQrQz1j#k?h61M-EBW4AQx|#kuK?6Q)2dY4h6*+ZsFP~&uF#*n z?Kq7-YM7p9l%v^a=B*`h3F_+h_I5WmqSRy8N0*fmY<|TlC~kWnR)SaN${IF3kWY-q zXZh9WfSZ2tnQaHMVhaJ0K=FazY%KaWCQFTk8GkHl448tUqjEflu8Nt14othZ1fRHmIEmqs3j8>PUhV6N?x%l(@&(&abFbL8Hu0e+M;!cT57G{CKggIRSEx{)Yw zHY~Vt*jYJm1d1X6L z&qeXz&S&rxe~81d0GW`_BNIJASH3g%R((1hFO{jqa-Z>TWIGJCykZ43C5B%G^En;2 ziZ~rh>>EpN6^-*LzCstlNriNcI7(4I*+~$Hk(Z%n5C@!9&no63bo}0W?%Yo}&%zxR zQfPotE`<-M=0!dF7EK#)m3;)@>x;;Qe}{U1%I{mdD-H? zi$>^;hIv)sxVj=(lt4c{J)gSgyIhK&!37ThNg&8ONJk#T6~%4`1!e@Y{}rGOVOTG6 zLUlaPqy6TNC%<#TOpoKMo~>##WYh!;Y%WfdJb0|KW~Nh0yZIgrsI+{SQ5LqnVFQbCf>ZPulDXz z-(0V~_Jd#PE3lD|oZAz^CL3Eb7!kG|JiTo$=(4EMwfEQofrFU{kn~-cMmVVW{c_=A z*mw#g-~0we#X*V{xJ}{c&+Yc%eMtH!QNr-y&cXd~ z{BaDNR$UOKOMow=u6OQYDI;)sv94uSH$K)R@IU33c~!WKYf=c3zq(h;SYPw%wzT7x z36{H6`CO$Tl53`O*#j`uxi(WoWLwoPPk$+i+2ZUK%UDnA*bZ=PO$PtQW}Cu`uAf|LO#LvJN~WAYklochPIHHvZGE``Lw$h)hI3JY|A zHtju`K4#T~;K`yim$Ivg z<|F7`UP`-+ilE*rqOFL)p4AwYB+qTnhwXX8Y2R-n%dly2Rj*DfI*Kl6Pl3DlA2k@! zFTx|ip+_kRH#-P8;bPRm&LV+JLD+dK?>5xDloc#~_IjFKrW8@sFi}N}7ZQ!#MX-{0 zy&(n5P|*`h^V90wP;VdG-Q9h@Phiq{HSD_nZ2>(6OL(&9s*!9>WrL@S+|EoWC!9S9 z=qQY8za=MV zn|SH+GcQb5M{)0ULpId18)ElP{zUfZXARr!T2QsrZW%1&4?d@cqY5mfToVyc5!dnG zYy`x~pzL0*=2a~LCwxK}PJhKi!5fdQ?zl<}ZYDjXO!=f)IMh_>7Xv^lk8a$?2&KyG z7gQ@TM7R(AG30Tw>28XWNepQA_}B6;zf1SS4NX+k$U7!4koVit87jH_!V^08rY0oh zcHQX3wUp3RZP&=Nhh>o?0cry>O8l^mGVNEa&R1Gl6M z7#+(7OzBWelz=tPjSCmY$)_E=aQYF{Bzb&6o$7k>fkQ`}O#v}8c?;Yg+BIY6Q~3K2 z#O;qeCp=5}QDpx2yEISN=Ye)q6NxH|@&Ia+CgzN4XlN5;j|+u;DoarnyW!JiAQORX zI{S@C@^?9hHSCl?3$;E%iv4)z{3Z|mZvYFNGY~$-+|m9vcgBX5d%RER%ZM9H_g-vK z*lmPA!vi90YzAgHzU5DGzWr{)Z`zKK!oQ-(4@k&m0pBHsa_vr|_UwzWqV!^bvC;acj z8HQddASiG}s`G=}51_T%KzKJ@70W*fQz;jFv&O?mt!qyLIv;vY0wF_;0{Ayf2zMDK z^o{TTjP{E^ZhajX|8j2n^#S5sWm|BfOzvOj>@{2_Fa&GGraaj`2Pl|~&*77D&9Y7} zZ<%wqOzG}$_>Wv>?Mpsefi@I$$~N~u{0e?i)F1ae=^)|6HANSy#HUi7LO-lJ5Pzf@ z_Uu|pdk94qD@n|AWO(nNS`*oMW_Cf76(oqJ+XndGB*(0oa7+_(L>1}DAY%g}QlT}n zYvu!Jv+_`0CKOfK6fNGiH+!{f`tGJqRVRu!0zwu+ZoI2se;9f@DuD~zU2sIVOsHwr zWI`nBc|y_4N?8U(BGo8qulf74i$&0YJ^m-4`$*BxNUdY)r`YwkyNQDa-5wolQY^F;Vg!oJ9T?W|G1WTZ|S z)CU`@kX%mPCmA}>3;U*?R-_Evt4myLg?(3wo``#E$p3WW86aTN6-%^RpWGTH;umH8 z7_2 z1hY9HC5_-KP528{HX=0po2EAg@)Wk0SGJx4*j&`-VN~g?^YDKYGUJW#k~yyw`KnDec7}*4Tj& z=LlNxbF#q0$uEL4G?zy{+!@mdqIFYnokoq-l<&Uf4VB^J661XL`igV!dM!kUe)&9m zqW3hv;^o4$(5x6aB(HXpDqW1v*Cj=!s*)suN{xM`Ly2)!8CR`pX_?V!l3(yHtV33P z>9VAG?`c45`)yv7)t#BT3>PI{NE-grPm)2T!q-UT9??FVa>1y@713pRF^ z??ph1`=Dmwfv~~`9)TY_TF?<*_%nb5U`=50wj0UQ?Ms?~Y34LR11F5Hpu41vOXxg0OX2?BQYI<3viFc2eJHP?4 zsGzRZeQWbO$*dII)ik6i5k%7Vkn@qh-+PH^j;$l76_t1@qNT|BQ zoZca=sD7^FMwzmpjEKMa5h=ZdI%0erJ7~l^u)>+ncHZ1iXZl0mDqSf9o0KO84e+ugWbFR9=iC0@u2ZoILLu7Lv>{MgduRG>gGXQ@MEgBpPcW*R0EaV}d zFa9lO8n0%igjdAeJ`vD z{HXUjggY){qABd|h%n%&ABv!vW3=5wDDC9acDRDGV`Md+iVoVjpUotP!Cw z^uL6k_8@HLIh3%Om98ZF@=Ai?L+&Z{{jH6;X3XhdBj2RYJT*uAYJJ=IntB-V3FV>mDyY(DEhocZB^2n$8K!XiF0bmH3*A&a~dI@3?u*lbI4+ z;z?#nyDg&NXp%C@p_ZOsr$}yU3Z0}hTDIpw_$MH|Av@;&N&B}jGz)ePdxHgE^D093 zmADUC8e|LZ{EyeaFrlsqHVZ1b6aIwkcO@?U_&OO*{@Pbnn2OKQArlE!m;y zOtFLsAT4Y8&--3RzchgXG|3WSWPGA}U93!uDQc7aBmfUaho@$3-gYbA7VM__p=bO2 ze~>z4!@LlPqOBn@ixQ7Ly$5j_UFL^nkRF{nttjKZb_o6SIOiGFWNf%!RC*IyNq~om zr?8P9KIg6wHO+tv{wTZYpvyAse2}X0jlZh$h;F5+_XujLw;}ZVT#3AvS443E!r`2V z{fF*|ys7QtIa&YXT(B>IZhm?cBw_1|a&qb!bwBG!77SqWTQe=))!JvzOuQtDST#xt zq56r~)6|+d@46C?b1Kti3YmB=ZRVX5WuLz!VtxXj6_vN1RQ=ikoYNAyvL;O(jS_Dw zjMFzBM-Mm3!8ePC=A-6A_HdI1#&lNqUx{Oluq)a@B2m8aA)>F|A}Uim4RV4A zPE^$o40{-MQ%k_?8bj3K-rWU!Iv%Rd+Os<9%&p=HGNzif*k-uuWE@P>s_13Ijg(R^ zcrCz(GhK(jpvVn*8t+E8&<`Cs5)QIAbE_W|x3k8I>@pBRD*O{GC7G-Iki(rLx>#nq z83mv-)w8^VB)V=|j^>+2@Df;q=V?-+n*4?_W$&3NQ$!+p1OmaRd!_1a21P2pa|j&L z)+KI##?3eBo6E(j947B({3#l!M205toMp77^=m`e1In5QW_6})zHJzSM{lma!?#yiJ1MKmbIjH4(2>_t$&^QCV6V9qti%O<;QM-v zlWC+jG0ts=t+y*c8YKUNllGj(Ejv6JbHCBm;6^s8lG}^)3%DOfKkgjA#KyHxCAlxm zuhZZe0`=*fhiIYBf@0cJ9_=x~Z&JhIy&=yJE!lKxZXP#zmrQ(u=PW=X1IX4E#nN(M zPMoM4UKf3&_%+`o3W8T7>~ zUXWji;;KLA@BQJ8y)jt64%)oKXR99Lwm>>U!5r6!Lb;OAe$T~Bjb&G8CSZqZ38CFQ z;1D7iN;8V%tBAiOZ5q>JtKKu!cmz4r)J6(RB;H)U;&IILS<;qapKF0%_H(BrUl)A8 z$$j1{6OQy=K+moe{tL4!+&w!dS_A^Q)9)cig=24Fn}IE-c9gGU-bW+zYW#J9&uD1P z^L}hP6x-Wdi7j8Be2yc_*QoO%!wRQ(T0QN}9VtV3 zhF+b|d0I%|+M?9S6`WxYc{VwXBOa&RaIMR@L@$ZQ3}kHT&NqPlzW74^rp zut}A<)<^tKl)W0rmF=Kee?njIxzAH^zkF=MvT9$FP71$BK)>Y$eFtG2Ee_r5LAM^r z&t?Q?PRi@f-VgV$Ew(%MY)9=;iBt@8e4?T8Ibm_KyDlT#x;pyS59ydT?%&_htfA9I z#8+Oy_$V8aq%a}+a0N_#pGm>9;K!@?=G58fn{eFh=y!WEY@7u<9klGFCAlr>` zZ$uy(LwBi8?offOAX5|h%8|wSnos)o#dtfmz@$H)3AEeDK|+Ubt26> z0e#KOX^H!%38>(mj1O!1d^MJ)gsRC+eEl=@r9bqLY|xAxObdLttDH-p`J0YSWpI4W zOCsQHW=s-Uu0n{PA`2@kt~V8(>I)USdlEyLUVobIsMNFKetp#&!h#(NRRX(Upht0) zy_}w1$;Jgd9ME0gvgjn6{Li;MPsdqRbYpakcN9{E2U%6(PmS74;C(1`mR8@MrBiEj zX{5-3Z0;P$I&+CHFsDPI(Btggd^83N!pg%e(S3lT8|ur646z^Nw5>crpq8a^rOL2+ zu_AEOiJtO+zdl?~rfIY>qbqJ-isV|$I7Nw%(6>_uQUW1r1Y+86SXExV#c;)lALlEuOg%<(qk6mM(e!N4KqtZlm*yr_mg|%+P=>ped)W-&r!SXuc{I0 z>F@S?>-w&O+EMM*&L+J6l?!v=*OzMNjndrI6*`_XZ(K1HC5Ok~BffCw zWubOx@P`B~jtkAF=E0faCeR`4|F3ps@#OKTp+>L@{WYS~S2R)iD%f;)erTPmOjkv2j z*Ccy%8#?;w(!~C9U;jM$Z7H)g&}K1{(Q;@CGlFE!wE62Rsa^{l7A%^yR;Mgo$#YTL z7FaI))g-C#k`2BUj>4vYHc~~k z@37#8ynA}lU;Bt*5N@UXQt~u9bAfPoWyWx$HK|5}0R=u|(O0F)ys2-7^qco7j_y$# zl3j5kt+_i7oAOp8lk&1huIneZ>|oRX#yv-M895&SMR^UweDc6TKlPPCJ5dEm2w4(> z7I9cfaaWgobx}QEt7E}pX3?js?qGDSV#Dst9~eQ{|4Evm%uu%179n*)i^@c=*;ygm5RBF(%nG`&9UB^jVa->9e%DY2eiZW zCWuR^P_IwQhqSA(*&zDhoi*2?e1{ZQ z4b7xU#+_0u!JQ8XNzp>|ot&MA&b;4@7f_bZr`njgPxfM*@2`ve+os1XE~1R>{n5cadGx;bChn&AL|n)oN_V~h&-3rM zjTdR4qM3d+(5}umyWD`Ky_6DnjiVJE$e$sj;%PemNh*^HP$NAUc$;oU!EjrK6=>;M(XP9HldwvL?DW0V$`j66PjhfQ z72lo+$y7$d7a@&+BC6m?k73n0qj*E_;Az!(w-EEtm}k5*pB?}?H33)E(8aIA<@*Jq z502R|RTGc-qLCtPn}sae#ySqdN#zEO>|r$D(xmJJw*(Lu>l&kk$}aS_*U(NeHKK+t zNf6N7)zzj4Sj0Eo`TLVUw5l^BUm@txt{&ZL{J3$~yG3uiz{9M(TX>_QEUL+`_%qQY z3IyM8R%&IZkwozdPc>Hao5qm#^F(*=u0-xU=b?KwuJng1qEAx+>S{(7RvBODo1Za~ zl4Y>AI$DVWx4{m})MW4S9;JyYoi8`u^UKi=K zx>tGL?<+rAl?S>-HYWamllAPcD(59@_a{Dp9IAj>i4J2g=-k0=EPt0JMaW(~(#nTq zagML7hAZ4>H`G0jN^P`p^IM15TRYQ@SUw+SAi1@tx_m)Gj`as&`1p#}#Hop=brxw7KPhT0}J8 zqCUsq*GD;V{ZmXF@v$1(N>?w=m?TQd{4ozBUE`^$Xi7zS6Z_lX=l&;VeHxiJFNb2( zJ0HQVx;mvn$%BjiPk@~Dw_a=n*$_eM5Ydk8dJv+7SCyYI&!B-b(Z zn_!0zwEAZf6ilh283~epTZuwmK7Q>kA0Vzeka^^-Wa{JzneO}Hh}I=8ZLItC>PLG~ z7Nl9`HpHKN5&q=|QTXdY%j)R-8f(>t0@HJ6M;>oXr9xmtwdD$eURRQS2 z*e>|fXd-2XMEDY~xOUA3=o}l*taeyV9lDA(DzNudJfxk{N#(wI>?HHS} zN_0B%+RSQ;mtJ=?@SbK+J8EyJ@DTYhxu;D?GThx5tQOvl!ntP!(u!U}DC&%DG&qWJ z_FY!HY>Ozqt`bCcgdrn@Lhph`1mbpQfpunTC~0?CN$RA-(i8IuMMegmZMj2Ak7Fj* z#yXWnVzB9vYQ<{yo+XZyRr%|QRmy*BR-J|-)O9`=n2eI2Zt7Ie4-$oFYf;+x+&h_U z^3hV%1MX50tF0Z?cn9#HEJ#jn)?#NOwQBXn{34;kLcFvZN*q0(T6yIz*7Pyx3Q~|FnJdV$d`6 zcWe3jpDJp(NiqaK;TthcRcsoE9pNpK?W)rk>id?fMYcAW^-%8(z;wpD`2-aVw?`!Y z8dl&VsrC~h-E(H`&`1n>bZwnFLka<1fRZQ-qfFa8Q}FsZ@1GS2PWZ~7^wpEwMl54*a>-0L2pCjzG*8&Z z23pHXAa-KYPX1kwsu3)@t3|_c_}OpUZVc{skumeX_sfq5pgnX+5tvHKS2aMLRqd zcXp6Ubqb-Q)@=Wrn;FzurliBxea@Rk0_Y~|xv+|TERvsPp~HKHiTV9VtE|yjudsO( z>^T^UB!swJIR}%=T*_iT?Zsd_NwD|PTTX^B_lVY^S95@w5aQ_AR^ik>++VgDmi98u zL@n*Fj^T3b{IH{jD@h^J{nuf*sx~0B5%$WN`@&@3SRJoDnx-Jb$pvs*Rv%h;5U9OW)J&yEOvX#A0!1d{t^%MM{vQHHRhi>LjiL}cX9}Rjd ztpkJQvZ6s6b4fHb+Ks2@iX(LQMv~1{9%IXps-oN;W z8xOa1X~DnCsGYSIT13%+&n>-x2J~S>hqN6!B1&e6={^DdJt4IV8D3OLrVZZK-9>*+Ty?~`B?{svh6i1ue}D_X3EH3}1yb;^KX|RN)YJcF z+uFAO#4XgL>n%-y8^tYhu7?$HV$9c8O?hDa5VkIw88h<_3T;VW;&TeOGTt#kiXj}i z0xya1$xXQwG??@0fB$~&uE5^P>?gU`OVQ%HD|P8Fp>|-vmZ_P7#e9~*%VKh1EkD}c zA^zkIpTs9J%czr5M)IHA0tnDolD7>p)0g^UUL>!zyG$=lmVBQOYcN2EVZnEAm8pNO zbQj^5y6^c#?B03~DNBdppeB*w7=Hckw0x5-i}}CJ1GGMe`Y*4y<Nf`J0(^g6Aoyf)L=+jtMTC{a%rf!&p>rNy=l*D)8&E z40@?mp}|)!b=>-Ce|==M^))xhnAfd+tgTHHW!M*@+=F`OI!;Kk*3S<@$TpP7^qLN* z#=>)fiFeU*$BO^hzmz%fUlE5RnSJCre7Od;bi8_C6Y?hTVj}Uj;H!}VHlAQMqY1cI)KhRM?`P_=zapU4qp?M!=phc~93N-Cyt(*SL z7uh?Uy+_%gw0Fl!V8K(vM`(Wwy@i>6O{}PjYr*P%XfDxwbK2g+qLd&9bV2Q zeMdeZP%7^eqa)Y#7Am6Gt;{|dwxh}xO}Gx5$Oin-Y*4TTq52#=^Ol!NYeGgPLVHc7 z$zc+b^$umXXj^|g8hT<}bR4IagzULXlX(v%)f{icmx!n(c`s4zdta0lyP_#}n{dT; zhdR&!zxB-1X73;4M?WEiad;GOypIKm!=bBovFc#c<+^U58e;F?Nev^~H%DJLP$A8&!%D9dXq#qX6agxFBb$7~BkKZEf^D1uD9`z!~jk8=zYUHR9PPtJdky11OMe zRRXeVf^cX9{|D(cHtRAKH>*nC6xtY^)Pi6%W*4&|W$0upJk)*)^N*b=s-3G+##=>) zhH16@IlEIjjR|q7EEu`wzp}RyDe%N(-|1bj_I`8as$1936NB?@0mrwbm~I?hLkGs9 z^E9)rgUK)=F9)v+iwBnNW`p-OQdXbXK!dM%y6_D;IdFI$>%zjq_2!Gg$H5#gw$g|_ ziQjJCi(W~g#e4BT1jU~=2Ui`=V8lv#}xJAUv>nJ1N*CCu(lXn6?nUa!JpyCFGZC)A;g%O z6t7Izw9hBi*8J%#mtmtMEEQ#}LR}W>@$0`-kr$!}cPd z9flk--S3+#hbwk*VY$D z5E97{^=>ew(qtNC)9~9QA^l}TWtQ$i$3kq`amqW zk`WnNh&%XA7Z;>yyMA78=gN6oZ?yjec67boi%asjon#|Sd5EC$jo^w+J4JdA%i_>l zUbilM9{)U#>f#CUBObZ-)`^*N*n~EcR+reoZKx*NPX0y8=`kr`Cz)4g-RDf7BtSU&5~0U^bY zqW8?C9H6lIin}VWFgAA~_f*v}2fWw+DXEINN0vw4dtpfOgW@0e4}UcUgVN?P^>f`b z6xIE1jsjl=8qR83h;m{3gHL3{>I@2Ebss-a@xOH!O@;FCH~=jPch_skSv>8$$ILB1 zTz)Xck@qt3Y81i-lyS~xh_W8?8*bQT5HQ^N^4c*ibB`MmHvgxV)SWc{G$p+G(Lb(l zu9W!zfe#Rf@HHzNI6xrOEJo5;npawa++*=xCcuJ&jzms@O$O>m8^Jgl9ci?*7*RV) zyRrB<-9Uqb2!Tu}&z(NCNOmE#@ZU&jkQ|0MxCZX~fESm$xpEsqZiH7Vdr=Z`v+} zYPlyvcg}0H!XL06lbAGU)_jim(!A~jb8@<>*UgxbWwogIZaMoGO8$n4O4(_B`sLl7 zf#3@lW?jQQi5cC-$l$t!wJWXPzr;#GByuHE2fJSKUN9$g9hWiwg&yqDy_A=c7Lo~7|F3pw>>c^^{+AXVQ`y7XtDI**(sZBfMUAPrme9lS z?cqt9C_T2Lr!cn`g0E9d-^E9xjTKcWxf1lvx0Fx7r5*bcD(HDh_1_0a3(Qoz)T_W^ed!ol@l4{Zn&(kv+%TxmY8n2x1KV?O^RsjV3NbGv9> z$?VJn?-t>~gS|R!38mjY%5x0uJjfb#=hk3@k2WTun=rU6kJ5XQtBHPMjh`l0c$)6a zkhOG5cxFK+wHX;VO-yUb6%J1WlOiVE|4Xk#=x;vFj5b%0`h>8xGMuZH)DPJ2%GBze z<%|$G`AOQYt1Mr}Nfwb4W`I}vOU5hwD={3YN}!cvHJT?HL0>Zv3ymN0*lOy&76I$( zyvtU=kM(U)s|UR&bL>WaM%T4f=;qY8nNJFalTeY*Dr5@M3J@Fi@_D-%{N{S!cn?C7 zDLJAk;bG=)pTw+dbNL9*R3nay=Jhc5*=1vl)K~a21^)g?pO`+sJV5GQRf)TA-===( z*d-Ux_ol9AVy%fbmtpfGF@(imLb#+qq9b5sC%Dg$J&#)(lK*m_qyPduekh2u`48XJ zOUt+&=s(&$Tk~j(8L3+KK3@NZEUJaa)~BVq16Z|+7O7&K5W~32Eg8-awfby4qC);( zVy71Wyp31Me02S@degE!<@2}ahnms!gqV)i5ZEf#O%pKR4zW8S8uS&gIx)SZMH36? zt-bK3q%ekOzb4;3kc^6Y4O&4#s|I^~_#mHL_E{h=AJ;)MfRGjsI~ZknV&9M3Ouay3j-1a4v5jMAzyqlga1_`7?j>aDP=+EhV&Wha&PyN!E)w@?hy+r% z{56yjG23U0DOMV28ffdolozwI2V;&W_ImKzn@JZ#ojExAcvzlfYr(pw4NdqpT&Z!| z6JJT(Ooh-Iy#c-6#VYG|y@=69o~b%urB2z2s@|Vq_}4~2{@(C)E$MlC3Rk)7EwoYJ zn$z61P|Tf(l+OUp4t>zlVb{B#BD7p(q;G9ey+>0=Wv^>8Om60nJ1>m8Y^kn5HlL$$ z6G{a5N(~=lc>EBXCQB7ID#9BU~kKbeyV|hs{1a>dnS?+96$od%k-Q4<5~YtkzlJ z^tIZm($&pOJO1!E$;{^K_t>!|z`pnKiZf;Fwu^N457-stkPd?N3>fFUSN4RdJf_|y zN#K3<^7;;7U%_;yTpTW*vuiqE1yDN4q+Lp(w;%~Rqr~SeO!2Yb8lJQ9Qb_+-5v=j+ z{a&1DL{p-_>wuldfb3-r=}SPGU9F@b<$v784>sr`o*S=xPXKU8LTbQKoD%OOW&hqs zZ=TGu^RF9T!#|t8l~Q0OpCpFh_$vgP`tpgnU@>}%0%Bmqm1LLrTF>Oz(97YEbGv+) zh^gI$vZ+qTudAVqY#uZ@^D-sE=ehKoN<AekThII~W%mZa(l@x+#XW%3{$qZuFP1 zZ-9FXt5V}9u_n3MhhM9z-IjggEOOHFg!+&HQplgv?LLLIx{0#V917Wlo!as5U-r8g zM<<*`KR;Bs2-(R6crK*s>V?I-M_~eJzE~wuWkYWdlr8XK^c%+RcSSo6Z_uAO*dX9r zO|@06ht^$G`xYlkA}gMfa(~H`6-IovKT5Xsr>IkWj2;-JRCqv=wrjX+Hp;oj>JKK5 zwY07@sBdQmb|(&v#zdG#z|)FIYr!OF%rvRY{ZKWmI0<rHUeBv3Ancxo?`D3UTvWXvP>Y5?Emm&f>M<^_f1 z!A#z7zW;LGp)WIW@4ss($V_=)v(0b~(ewmgI+p&5;L`C|u3}xE;7sLPn@=bG@Ch2r zqg5l1kGr&Chi=~Mu)$VNcu#w_`i2CKfKV~bc~VRgjIwFOIOziH@YT8?@v1qaMN zI^D;gj-bS7#TVzFX|mAw4tXw&B0ErZdC&8NJ@YW`~oyZ2}I@Yb+z z$Rjd$%Vzza)1Wh(xX%lBpli$tH6A@qFp$QiLxi4DbpOb|N zmA!pDor>7{<=JQ7+{S5c5^EH_9Rt_%6ndp}4zr}AYubOGNzxKTQpR$$=f%e7ADXqZL%Z-?ItWubP4ltzb4)cQV# z{@zUE6`4JtbizpJfpQX{FqOUK?=^3ZD-gT=(3T9C-bcr1CK<`A)VI@KyebImYicdt z8eMfMN{mB(SJV?*)ai`r(x1jY^$}TAy3eD#4u=1h4K-y5(8A!QTwaDB&;?>o##Vjq z{#_$BE^%6*Q7N#zw@9)~__U~>PP{U4+iJA>= zil!HXZ%~WII;{{A6#}BgAtBzi&36`-cl<`Q5HNq&xU;E(Ph_)pN`nzix%1DLkNfFS zb9Mc5TzG-rI?rssw;)aBi{;Mz@V-?|(*B}qfj3HLhca=vVmhXgX|5LQ4mTutm+eQ0 zMf|ZYVdSDb(@b7?B1G2`wB(2Suv(M1II?0R{OSSlsAYW(eFi3WTaEGqp*-%LEc?7) zhcZlX?DK#-MfF7>4^Q9mZe?uI)4F8r<7A>$-CXl1H+D^i-SCZ zpdSktraD~E>m#Uu=#Wv%7brC9Z=>;}JoYcdPSob34R9x_&c~Kv;q%d6Uo%xx?pwFY z2a2&=cC-IByK%89>i7$PV7l7yO>CwtQ&Jp4*a@PPvk|p-d#g>XG1o0g!?WU3=vqn# z*Y%@UZ;(otv+1kuacN;=-?ih?uD7)sW6n;8Mm^}4^9Qd}GHp1(XdnP!Fv$)F%(=;r&xYH6}kJ} ztK^4oxX_8v5ucFG$g_Uwqv3;mdDajx@XzLu$tm>Y=(;s;wYMPOxO2T8sQ~p4)F$?A zGm#P=calk_?gmKe7iIp-u>SA!E&+y{@}rd*9MuZP$;{0QPCJPTQt;CjKb?I0BJ6#5 z!y84g>6c}sf8NILn$@XJZLca^LM z9$rB5>1=I3VPnS4hLFck$^G^(8I)P>=_%2NaZZCU^7BNzk+{ZG&97}}os2a;rE+&AV}h>F5(gC2E3TAY&-~5w_X8$-I1np8s-*4Lu@52 zPOJ=1I%k}s*^4GZ3<;<81}>%g;k5XG9-H7gdN99V)pc;5RQ_($Es-jFLF)VB+67N< zM8;_~)|^z))6fvR#TccwoXgLgSH)82KB7IL7y~g{BseP?=VWVUVW3G;Md6fa&Cw}S zLp?i4`~^=QYA>d6AIChkL{s^|W%*TYGOl-KM<2RggjZ_Zwru)f`x0E&9w5%cf#0^z zj84LDZu-sJgX_FJ!CV9RQd#ro*p3rn1w=pWXv+0xT%eg1w)t~^p3BQk^iJOoTKdrW znWw{=S#D}uFXPglV$P&N1`hI5OJ>E45o`iX=qA63X|ho4#}2QzN_SUc$lcxDH#4)2 zc`iHB$y(ibKAD4D^l-YH5i@_eXT{Yz6Hgs-PB0Zuw{>$1HIyhZ_c6WYFT^eWp)PFk zmNoZV{|#T#D*}}fs>S(y$*sM5qqp+%U-|taY4r_MqCFGso7?4Gq@Z~BW|E_9W8KkU(wR3>+&;*%RwElGNhZa!=Ks4E1m7Ws3NsC9^^lZ zT4jkN<9f`b$3_7k;h?S!Sg+KZo7U5{hYh@}?p<6*NrTsDcGF(8@+87RF<4*WM+R)$ zq3`a@!qDBsbHZ_F-YO)|#tPkEScp(P=kRzGDYa1LejK7Y|G^uX^)1s){B#raLzq8C zzUKM3bzp$g)$|#rK#&RT6xZ*COCX!Qr_(Nxyw`h?1SQ2J?YdS}r|52W#-14AG9te0 z^^koy|Io!x_}!Fnu6KEL*IuLYKyF7iJ;J*$#!yGNpYgpg z!qRE4CU?Hc-_7Hq&n7X=WulHq#dN;mMc1;`JxfU6YPQo4)sD_|EyU1-A7a7dS^W5) z-w6hW&W=|-%Apn@@I>sS&WcPU*o2(V{Lr`6TKeCsdHKfP8RtU$W1jd~$kobkM(h~0 z&W7Jhh$QB^_-S1S+&$1LKVV}JJ=#!vv{X&w2!3#<YwX?FyO1 z(%~C&&a6G)@m~%%5!EEBRosL^{^-O?vP|d9QgVAeJ`tYD{u2NQa8x+ zvcVtxoNDr#?1+nBa0C3~)T5D5obnxjqiGd8MVxWp8_Ja~{s-|N&qx1~C{b_{uTOwT z8}3UlJ)R?860uKf$}^S1ZkxFq4(i?e6^xKfPiP_a3I5^x2r_jnO7N_~V7pc>r28Fp zI7r?=HRfKNuUzS$3UgFfNg-N~9)HXmrTyYond_CgkcOXQIOoA$m#o5W=JHkzl90=J zhw%Ddho#)6G@O%*QIMHwhO2VHxzlLC`~2Y`kv2$h&{f+4lHOCvVrd1{^#119mjqkO z+fH)cO;3Ys%pycb)6d(9t7)`MB8d%V(RH`rOX4 zRR#Y00;vZhUjKW-}@${vRd{R;Uvspec<;ZixKg&D6q8c8oJlPqJl3j*3!|{kAV$u_A`}2=8?5^;4 z<>)bw@7DOCAmgG`K@F@5pH8u2Mc_*hnLf`ILI*YW++0$eXvG?|LgP^WOF+Wv9SSKY{B@m8H!cVt3;HBL)P+ zq7mm~(Ls{1@2ULLCF!htGP_9{>=J}nk%n-ir@b4a2QTI{H&l(di#y^ENghRX}2?&OISj8 zl}+J!aErTol}|4#CQPEcJ_9h{g-@D=32@~fJy^Lly`0C<8O7-@>dEAb#Ae(DR-U*B ztW24hviu(l(4SJ@OE{gK#4*af_;ax^YHRBwGa=gl!&2OFqum+bndbTFi*n9pZ@h#i zXSrI>78dqsKKx|c@^Sv_t|w$vj7_D`gqVe(Q(BaXG%uvlMqRovAFw6Kyq|RQMUTt z)wIIIVK_2>)RjcvC=ZQ3|Sk&!SxIT2)oVIXt>9r*?BpxiLJOu5hv_ZX>1rJ*-(%77Y-^sn@G}K82;NCCICn(%~OEC$`q!m zIyg>Ar|rn6h+yjfQq1=zH=?PqabSdxKp(oXhCalYbT4mS-U!s!bUkG(^*cMvy*Ksv zPOPCeCvY2t-YXgFtZ2~Q-ARb4SW2bM-b6sQ=*M6|rL}`x*CsfYpXm1=M`k_Vzx$Q| z+fS)hBiY*c>pn=8jl1@q^X=FkW7O?c(wgJF6RZC~0`~Q0x8168P@SNs25-Xv_vEGG z&71hBD%^j|n7m7E*kxw~R{cMk&N{5g_kI5xqZ_4LF=^=@7+}!dL%O?RY=8>BiGdQL zz)++?8k8D{0#c(>+34wm>$ubf=EEAB?D zn)@B{=)fY9oCc~41CgRJxq+!m^%X<2s|uZoWThF{v!8N<_bcM*pfe*e#-aspgSLgb2Q@%5|?OiIndFT2|JV}rqT90t7c}{RqdJ(N=TM=Sw8BX z*#`I1giBqN7YBFXH%p6T`o0R&(NX2lD)+Xt1&GK*R<}>Jo<}YC?FPj|pkR%}HcZ&C zMpSisaoBESLbsJs%z`;?zK>J_fh_PrnyzXqJD0bc81Z2x0|R{+O@R%Sfd*}1fN<<5 zA41-B>@FZ9YSE)L*%2AJ`F2xP>SUV1?aWy-{yMkCj&tg!tVX@le#>p^YnmvETSk6V zq`IeLT_jUI+;Vq=noq0qi++5>P?mohyG(TfUm>g)`!3|L)I$TV!{g2rn|JqI-D#vH zMJ2AJk#Y`sc;|~W11%ft@8+v}{SSRtm$)(?<=b0M#i)Jfm&~}l+v=JF5N8|&s2;!W z2X7Q)n!y~;wc#Hw?_T^cQZHqZbH*a6ICAp*1-zZC=1br2ABMG86NWcdy}nF(od#8b z037Tf3HWUjX0vzc6lD)(3tWwdHRW219R`Ez>w@@f5h~k^>^Y&_ipS0?(i4E$2hP!s zG(V3V9MGEVE8P>uB`<{O0ct1QVs%civpx0i&-#Q%716K9i?!$hnfp;- z+iQg}a>_=^Odof0d29|6$WkIHocPSft;FxXX6WxXc{ea`gLAcnuQ&9THddV@3QDw~ zASs>ftCp3EhGqX3JT})4GG6TEcR-_v9l)%l*yN*jRlNgOU$%OpiD$I=e-tu}&$hGU zNq;uMndzjVyKAG=8}$vOad8KgC9xHr-1&3PlW<_0O3T>O7Nf)F-efILc(Xe1$<6L% zrbq`KSslSUfDOKys8&m^#g^Gu4+>lLpZ#j5v0*hl>C)%+u45>mhAGqf2Od>k1B0_C z)cCs2Cj^yQjbJM(Q}MJ^mZyqa^%Es!q@@mt*ycFp@r+Zx;2_L*38?nvhs)7XS(?ME zIT`?uL)o#}joNq4=Q68nZrp~lR1R?TMtq#sWfpsUN*b~|tOE%&EuQhN?61)6%HA?e zC=5aHQ;j1JySD6}<80ccB6O7(_XFlR@D)NO4W0uTy?s>@XnLBr;y{+HMXZ=Q+~LBB zp8bQ6xR*Xn{rkE};(qHNmdnuw@D=e_9d@4wNc7EM8qIr0FUr>Ju=3WC(wf>g-u^5~8Uk~+S-8`jq*Ea8QuTxy^*ah7! zK}P0PpP^5VY*M)nP?frwByCtO?@QC%hR~tMkmTb|qliHC306knpzRA+=$NpEcTn4tv=Aep8PdgJ5YMqE z2Cv)SW)Fb3h>D#7@r=RXV>aFD{(M;dPzBOhJ$F{L;bF0`rpeTuV>_S6xJF6TvW}FG0g%a>4=~$iYR;|i0pKWC zcGDd<_8nUQQDj;10Exg?C?XX{;kSzce;In8ic`aY`4#$o+kxT*>i_=GioL)8ZMKgD z6_SdY8ZZaHz{x_oN_w*+wqbT_`2BXH;WU<9PmxgG_9h-Cox%Jb-&di($|h(M{o6*y zcvb*af6o@*(cP0%tB04XXf@ssi3#de1&fBAdG|Sei|<+#{-@*VdQ zZs*hFcW1EY5sRalI#)NJZA+U^qf3Hx(?0X5{bVVqu49qgi;b1wP4-Bq-|AYiZ@6#R zPBW!L#klvqmo8Re8WjvRn~t%l>cM3)snfD+%vS(t^DKt zg8deg#+&e%e4sSfCjJ{*SQXndzGs%BX|Y805L-cW=Y|X=>qUyECrA#YwQDskXs8dz z=ilTbcez?8g*AQNtp3qp!JD<3x4y)^N>ODn*TK7cl?lX{6DX(ugp{#>k)6VY5602A z=c$o7lD2%80a-&@#Evr{oc^{+G$&wB?4Tme^u`R}JCkH@e-;n*Ud2tfliIkl!&;zg zf6<%lQy;oq@&NA}Bi7jMoyyD@Vmn1YB{z96*X4B!YCqt(0j4;-Fd%t-D?-Wi>m{_{ zP3G0VbQh@GIy`J4kKaBjzr3?Dg`UmXR-Q z1uZnU__4vp8^J%rGXg20?N1mqa4PRa$FPm#>`-@!_$g(O9@oy3M^g6~Kx~vX`?dQ@ z;d%*LUn;@y-u+M*m>*5#|%$m)Nq zjVu6}+kOC*7KsA zmw{})ZtR`TJspo(Ky8`J>9C&heNxNNrs_8`1dy8#>t%8BS!pniAukL-|E)!} zZSVGln?^j-G)B^olv#3X&UUik--hm-J-J=wOCCG+KKv8+ASxsPnk3j+0Xr3wU=ajY zNDKj4PUmbch+ittszpf7NYtdm$xI){0w9(v+mhB-`@$MgJina2td(v$8sax#h>CYV@=CRp686Fc&cEQJX68&OLi^=u}>(RBhj9xc> zZ#V;L_N)%pKDvKkk!e}j!>IHlRd-W++VpLPhWT2NgQIh}=RHGrv%s~<7&YTgp;Nnf zU{L^j_vAECUGMGcqq=T=rSycf zM`JixL;TG_M>iJEMq`|#o+7Qo3ftxrOp+Z>{TeXN3m1=o#wKQzQ2TCBYJR?b;Obs5 z*(_vbc0ndkvN;DRuKLuxL7bvT-mIw-Vx{?o zjjXl$iZDcK_k?zIR_Tib0X$2eHy4TPB;YM)VYpvan>Iob4L+w{QDyV@Moe}J3w+j~ z-CYf%@*#k6ihqk2L)s|#tSwja8;?lXGaM-abKC&dupI`RUey&;q~fdgsC7XWK;4QC zRAE}!KdoF$t@LN$ zzM{={laS?i%154z(LpP7 zmo*yOnQ-Z&1$8PmKqGIc@n$+dPf$PQ8x2;Cf>`WlP zcU?8I;%P@JJ3el{Z23_|h~r)D)xr}Z0Y;P!>GVr)0=;zmb|I2Z#v&=1>`XJ%60c!~AiG)ye<<0D5fUGno!s&QoRz z?6J2{8q1kJ5)upgCtD&L_VE~75pTI&lH#fS+Ck*USWLuAo4jMvTg>?+F(+omhVTuM zjzR#I$46eVs*&bs>Ka)zD7-5sud`fNVuySC(BF#(|3XL62Vt6ng0EiBHx=8wK$(J* zbs$lwN8>?4>pVFNDSLflLh`~lfOAj~Nnu?m0bdi;BtuO!kPsmagg1f_OF+-jT+pie zsxB!Fy6m$_GhY9bJL#s1pX=5yG!?RKwl6>9(Z_k-By7zoA~w#Z>`yWWzRtMlnQkl zRUY#wK7lQ*TvG1zvv5Ln09gA(8mvvw<~i^z`}b>QYHQ4z1~5r^zuYV~72yAM(8_MT zu+r+Jv>|}U?1ItKDyi;XR%XUPDm)*E^sxEQcM>oYE{8RWABdxG&&u0HyVze{3~hQq zc12)&*%z%@j#b0&{S;swDnH#@mVBen%D8`u)ZUX0%BB2}Mc!x0SJ}WezdNluz8PdX z$&dL8a(%V0))RBq?Jyy)JMmVh^_V>W7}WrNqE!DD?sl zCL@1PxIq9{wXbNgFuN~=x8NI>?Pw|?Sghz2?CctEu`}C>OO12LhiBg(`5KAY8@OMz zX+pcOh65XE6H#G~E)_y2-D`NH-5A-^kMc7<9(BTXewxm$YsS!w-kX0!Ls~PUul76e z{iJ?^@(h10R3=BjbW* zRFN+Wch>4|>Ml+ryzbI2!Eld0h5MNI`zz1Oej-A)_zZy>XX)ghv zn~jwnn5L#AgP8Beod4QM6ABflCZg|G5KuMW&i1CeKDH+!Wj&YyJMkOVId8I zhd8*+0T1-U_ARC}1wHq6Z5)@S8p7=ghVQl%?3ge!R0=$dZ^Ms8E#s96ue!t^us-i4z+Pg3yg`v&z=6G zeS0KsGNkr+>b67MFiA0C{HFBBlDmG+b((3N76gc z&B*_JMN$5)LgwdaeYZuC@$bdDoNF$fm9Z4rqcJWh9?R@Gw>ceZChM&5^nWIT0co9h z*Y%e{#4|+K>+O8MQwIMpY-{fZ*9%mHLS4EB#r61o2B|-?KQ3FG=daH@a3jZv2N9?4 z+8mtk)Rho5Pl4fv*Y7We7awgw}oG^%LtiW z@+%Y&pCg@k>h_YODYo{krAZ1$ezwnjta0k}%%;sc4TT!MCIK$@0X(O>!gi2tMgaF8 zwi{wusSc)TciO~dw4pg;^%ONPUD8Fzv!UqZr(N8Hmyeu(^EVEhy61V@=1{mzYlk?$ z8H@&2h3a)dkd4=g`SSDY7%khp4^5xjY-NbWH0&ZuLaiFXc{1Xo4nHk$q!XcC{e7Y- zlFOM;M;;fye}6|xyt=GPo3pP7_@;3a-n~4e!JhjkTN|%&b1(SDJj;RKk)!DYnF(A* zv9D+a0fzdTMOtfU1%;-WBVtJ`cFq6R@Fsbm4(sXyIcaC;VB{b;`^^D2T>amg$^AMq zJ&kc(b+ji_<$E<`>DeBu9l4v5&?fGyqdO@h5j`EN$V(CMbhURs>si^Y9&^o>by?tz z?&p5GJn+y=tzeE=<~oIvVRDlpoC+p*DU0@A@$-P;=Kti)GdXX0Zk%hMeFd>)SO~AH z{IHYkjmZhoCb)(oHl15$-P}5&UN=ras&ocCvF}dPw@3D^F)Da_901Poki+9yr%2I~ zn`ze!cL9ISL)TakpU)I^z7fdOX(%~o+uVT?%H!brMu{eqStcjIx#0oiLvPmEdOGT; z(|$9Gu$*d;J!V7rUM<^kPk4OaNb_qf*(B&^W~_Ot@u@j^>_H^HlhnY4%l)trG_d9A zA?ESFGZW{VmoH&ylCUHb2LE2NS~R4*9MUMq#lK;;PxXxXN<*cmbTTQTJ#$C!#e{03 z!G`gV^FI_s6cksxxm#l1oNP6#V-NjaOhBD%rLz>y^I04#p3*O-jnoPh)Q=jhB@tu_JmY2~>aI$t z3}ui)qlt&z)08LjH?*F!e0|tNE7NY>ClTp})*)kn_ZEWOuZ~rlN+2k&!dTQ1lL+i9 zLDtZ%9o=DJtt85{w5T|P3Yay54|TR9Nv1G*f_J1Sw(11oZRcT#DcA7*HeM0`u?A0BhJ*JGQ#Cps({&c+2u6jgsC@XBGbOF76!8oT=h z=`^DopesT8W5PFHjakF8Fb{l-_X@(+qiLkqEo}Uhmryh+uma)(rdI}S%ekqkhf8#!r-F^ z-V8bW0|4+b*VcO_|5$tHF0HlgNk5m6c){x0p z`bbDQ6aQPIqS#m`qn^#~`w@L9mu|`VupTLTz#h06G~UC8B&op0dsRULPIwmBD zxJ1cm4(v?^T@2(sa!Jq6?7Fqox6rRklCqoT?;GOMu z{k>u%kqC{{pNlXHtfc(MWUiDH(uXVDggicyz9q5K8=uaI{U zx~PEpvy-!TXKp!*QF+HwHUz=Y)AXMxz+^aQ-Hys6?^Z~r&e>9Chth(@`~&M6G7_ox9yxCDKoK0}GL3gq=RcpXu2)uyJ$+hqM=XhhJ z41~(g?4!J}^-^!C{kKoJX7Y)v0qE;wi2L)!(cDoo`+i7q!}qKwDdnc+w4M%IPi0?Q z8+RDJ`Y$y5%Xm64nNfFp4E}Jto`d-DY+42YQ`L3tLHo~%%*r5re=K{?z6o=^njqsZ zAu+g34;sG&3Bj}Q!(k4gfpe!%d!C4QJ)b}*_W|{bJ4{;&Ns5?zT0gZfy=s4Hi$~%f zANB!Y2OwzR0ePAG<51m;I}Z$4q&;l*?g;`mA|PUKPBJtIXJ?M4NfYiaj}6RJC7>At zB_qnLm+c1mfd{bOd;#`HQHvshfD4;BBp1GFD{MqpWKC2Dj>_AGkay8zIu_3v!Clq; zW5l)BG%;)O4nb5l2cygK>okt{X|_l3ykues4WOC*#j4Q+nBkWSMt!IICU`zhQBO!R z=@!I3^l5aPct39D8|9+^-+ZAFYF13M-%nO42FKFjpED|xbKXfk z`9nTv7sUj;xkW%r+al6BHX+fps|IZ81k&?_pU2tw85E(W$$PglKi=28JMgE8d z5eLafRx@;GNvT0VA-ZCFZ62+UI^t>_7iwD{3|`;V2-H>$>y@ngFZ*tEaI(QZL??Cu zeMt)r3jE6j+1*dTvs?PJrWW&8_M`qwqW3zRPo1mZb$q4mek!o4qjbL9 zPh_d5XwF@LwK;u74qBcpiR**yrBxar+O9@Upcwy#q06v*k@t%hq6VyKhVr5R3@*fQ zcpoxz8@48NkxB(qTIsFlTljP5j^iKk59QF?cOpK%-T;O#sa)(2x*KEHx5D7rvVSjJ zUs86GiUSoW+?^oZDn&7IA)HsYcWrIWdxgAFZOyM4+Y>Tl^RAR)o`YC6 zx=RI4TMJuc0T9tov$w}P3H=vz5y@9sr#jnz+!qiSnoXiLSzmp`OBYDl`GUf=NPA__ zA=xYEnyb-ESGjVy_xCxjhF<0;p!~u60hdMODz!p8Px+oaHNGhwm3LGUf+fBXY<&P- zcWU0IgPFZKLviN}>3oICJy_r5$M0|LCs^@hO8hZeMav8Y(_Qs23t?f%BS)mhkzzsF zn9t7C-mF&B%};Axb-sfgSPb3h_u;P8ettVIt14>o%7>WQN*Cm zXM_k$wPiRI`KSH*RU#=>hzys{Z-$VvZ2`8x9%leRYKMyRuH?EZ`o! zkz+;uyE^0t+1E}!|4W|Fkxasz)PM5Zrk|m77q+H9yjhZ$u4JsxeYnqxzi{aa-HRbT1VaQ{!^%}mp7%`@rDEx>jYp|&vpf1)M=-~g*3Ph@^s!~}; zUaC>;vL(7{(M*@bAVAc6e&(nn7YE9h^EHQ(D5E@ar&W{s68B_i_1TL78EB1%trKkM zT+ZK+)HJakAL+MS0yqP`;1s4Tjx+57>7Ft0HtaE`S>>?n%DMl^2z3t6dFUeijX55u zJ8yC|Q>xQYKl*YQlEUfJaWLw#Li$ihg(uYHP#?$~RfSBw@)!DjQyo_}KitrOO2Nw} zL};Wk%dDYZ=;ua6Rk9v)xD1nWT)Hq&#r{6jX>n*-Z1wp(SMFtQ;E#k+Ne0%K5v!%f z#VELCHkG0_W>@@j?oCOZ%~^q|y9W#evpMMXpg5WC#Eg;gLM@X9r{1r1fWH)u$nnh~ zNSN|M_T}q+C=zv}e0&p+Fn{`&a@XE?D^Ut^2TVcrkFl6GGw?Hgsq*{@aD)g2QDsQatVat~CUoRIQ=-D*02bHL7UXsF>=J z28TnmChLS~qgVQouZTH4GyhL_XR~@nmo5moS`i^x9?;l7g!ohl#e>}sMqbw$`X}^o)S!byJmz!^= zO$5N;jEuF%;Lba*Cf%h*f`Yyhe7c0tmxV&v9Ct~7lMD@@xgF~==IVqWMk;`S0=F3l`faHEcw&Jdl?0Q>46N3xpZpbwQ0NvZh?u*vR z#zw>2Np1k&Dz7QHlzzqR>$xlouc)b7EaIc5+|6B*%d|ryic0vnR?&P_M0%0x)0DX$ zZvF=N#8Ie$ir`^GP`FBhb|UG=)B`=c-X%$z@6gmVcSTb^az9Rgz; z{@l4RUvzUu(5f2ek1Zpk%)?=m5xL1s6tR=oju&c^!HR0kKZYe%`Vwu zSJz=Z%cXYJcake})Z9QaeoP*_7OVb|3q4mR+F16 z^dH6y4jOe12uBx9&Zh_8^1Ab<7uF}8R9`AVY5p*aH%d#s+*8>)4^XC}E5 zWR5xY{!8b0jWlXPOcByBMf!q+zW(ozg*^1SKZqsY%h!Ln38pcVr{*wbF{hawwclnEYz3WqpdQks$x9YfaJgFR9ZiYd!fMa$kFSm-P?jD+j5_Fu2KM$ctR-_e8 z5ydQ+1rMf-#5LyJbBKHkV&$5QzDwI&s1asrzHLRZkdAz5RgMVAJBG^^zGT*4D$d_3ee@ZR>DcAAuA|8no0nN z`z`y5;D)ZOmi}$wCtX5cXQCGJcy)HKD%Uf&8#CKCPeX-bRY#Utk(#$X25a3@Uzr(v z`DP``KSZ-D-^$7!XYO@uYE?_@2~6HmH8}6FM3H}tCF45Ldj(T0eN%K4Yb0>Ii%^qSoQO-QYvy#m@@a~M=^vhOWXNkq|z9I zG^|DougX&nD)x;fCpE+O*b*gTahLG2`eB}-BL{)LIMq`FyK({koV7u&K-QnZSk-(Z z_2s4$Wvbx4gsb@?jlgyu*mv-Y6KRMJ@S_II5LSIE32+q^6BNs#&lKS0bENi<1Sjzt zK{!KPr%hif*A2425b)PVX_RR9^^}ZW_B|bCK8B}=eL7xu^IjqC^j_q`2qT)olZQh( zwEms-P$Ct6GQi$`D|+vC)c7)e-wbD4WZb95aeuTH7yQ56YBwJ9@vcmSu>79trh4f? z%!S@U=#=b`mK$L?Q7%Y<7QW<{^!Dack3%*Q(~)h$e)Iv)YFcWocT*dT4yP`!Z;!wNCTnBDZ(b_;5cpgvpLA%0Xkrt|k7aTYtCZlkp^#p)%JfavG~*O;7+*gPqYlobdInF6ZO$B^0G-y( z0z}6pRwa&^f*-JaVA*N?Ai1i3tV!5S?A;>OI|v`Y#T}9gFc2KT0i0%5Gm92JyUxvy z;P7Jq^JrEkemRP9%iFtfU0W`d@xy=@k3v(W&uaA~)p~IcT_pMO_dabszYQc#-Uv%` zl0Nc4dOXFwWax5wl9&f%^qtQ9UzN2FtCp!Y z=*rGxy?mA6rw6|D=@s>}Dp?c}zwTh;IQvG%!6?mG=sNGNilEF8fJ-j9UmETbniAu$ z>TUxCjekYEXeFOLI5x9hFBNh(AoRVfcFU1GG>Z6eNHMLgHW9c%Lb&c#whZBAr6?nV6bP@T!!e4v+>hS4w ztde(``8qHq4t2$fBYT}f6@C(4%%OT7u$jV5Rc~I=v4B+w&OZ)dZBw!Nv12hJv^5rI zj`A>9zbpRviSmXk4r=u(Cpt|d6t(2m-BS(gDZs1kaTzPCH6YIEtZ03_iTc`e9qKWw zf*K@bLc=-s=eu0yt#?!r*_j0^5 z=x5Gv3VOc0DMdR65&!Nbc{jquFXHPfLn!-R-b(a36CZ2Brb}GZE0ZuV^g{4?KJ$wb zdLp`YUZtLB+CZ-nNY3Z}5fuwRHV3|`$f* z;1!uoiAkQ)#t|!2>YV}43!0k|2qptiS2ZjPmN~=ceKmK#RK;3S!mhh=HUQAryT{+kEWzAz&SC$C z7dH)gGBvi@5=z`Oh!??!P4O`-nm;H?hEJ!cmQOB1;2u;pb#tVueXu;?gimc3Nj1hn z?y(@-C#$D88ykFHcQ}4-ddqB5GkWp%DKLaGVz`z0z|P*VsUxy=3$kl-q8Kx?-+>ki zA_nc*U>NbR4L$+Gr>t3ZgB+vPOF)fqM1iPh2dlqXF5>&T&{)q^dp{4`3kD_*` z0lA2qwOXDl3KaTg)b|$dSts0Bmdf2W{@T~muMbbL=g^D)Pze@Uby^kT;X1$Wvz?2g z=21AR_8=ua%9D2gO{=T@$$Q6s+O&%#59=_2>?~t3VC@71-av0U3rd_>u-Ifsd(8YJ z<A<=otQgJ=7ju)Ttl~X8sGr+Lw^lbjL_b(KLCsfBz?!+p<7FZjn zQo8(RZy23jlCInk2H?X@h7w4tSE1xpYpeK3)W3vb{e9do`+;u`K>qLv?Nx0P5JyQW z@J|O)GX7GrJ*qhtoE@8r^Cacf&0!EjLG2G>W-c!U8NchBsQqqh*bbTSri*q1ohys_ zsGTZo!Saax?*-c)>&!t92)fE6vFDd=q0|SctNs*v;;_)1FAsg8inm|tiaZee-Yemp zW!%jTJ*Rw)jZw=l?mW_t@F%8VSa`-|v|ig5HTM7~UHl2kI9)w`$as~1`TP`uPtJ0? zbjGg`4+)I9lbHJ{f18e2U930@R4cM^!6PV`JtaVtGSsp1mdIxg5v~?T;-I!?TU7u;D{faoV%UVc0A~-8k zAExZ9C=>8P$Zt4uL&FzKlKV;!`ISS(aa>vw*cs2=mNyztrCTU0{74vkz?b>hNN~;~ z>+#6y&J!z?Q8OT`dbRCK))|SrU8Y6DL`c~k_EB)Zu9c}y*b$0fCTn~BU>$6-9RnXd> zp=M-`{qdC2NLDfK?bZS8Otzo4~2!}-72RXBuPE0g4zXj07 zW*pZEwNP9(9^L%zis<_F{O+culRO3Ge}X$+^IH}R3H~O^BC+5N*-p&aWfVM4p+!bX zAXi?CWbJKU0*W3j0B6t2b5bvPN1Q6sw-jW@>TM^qyK2q#`PFtv8)yUHWUXt);mQGO zM?Yk>MiAoCi$sskPW;O>H}DTiVh-30Y&VpUtKGA11Yh&Zhp7MW{Ru#y#; z92uAA`E>RiRvyO7M(YL7`&M<(U-Xy*wW$#*ADY8CJbHv$&$3wl$r7>^b4#^4E0cu- zF_P=b)A!mHMO^P$J)E^lT zp4Ja|4xdD84Jkk1&;YH7mQE5s*8#$QF)XQlWRBI3l7^3Z9oRPjeF!nWSC64ZQuaIJ zI2LtB9@t50nJWdc#hF4pbN{eAdUzJ6z-3BB{wdg{jX`rg!7Q5`O0Pv-9MvYMn4(A%L`;r_CLbs4zCw|utgex{$_j!{1qA3jc=<@j zqD#BU;>};tS@}I-&{+8Ox1Zw>3I7sr;0a>Zyz$h;fULUl|5;k^2; zPjkMM8_q~+C!8z zwRI2Leoz9zq~d>@g~-%VVgBITX-dArro?~OL`dK-P@*n^%+lk;XI>{V&z9l2Ut8SW zmKyS~yoR~_8@c|Xf$#V`G=rB#$un#T@RL?<3!+`Q!Lata%t@U?fN8)fWzN{mE>Fm{lBC=aZG2y9AXO~|=h3tqM2mxNbx_)?aXcQjRq!3njFGr?lY z+sC*Xw9YW0_??rJz&=FY!8#$7J@v4bt2!`s{BlXd(irz@eT{l9-|TWSt%8cz62O~6 zO{bS-Khu0gw&$oWBF-*@VBW(R=F5oAcEzo=IAvx12it12&bZ2Ruk3dGR1ekolTRBc z8pfR5@E1NVR*zp;Yk&sW5+8Jm0$fiesi^wN>Dg6duhwTFuG1O%t3Nc*(fup$N7FCI z#qafb)7JgbBn2Ig2kokGqoz~36xiLUAohXz>vrL=bcEEBh&=? zthoU^_B(a5Zl)p<&W+{677THxgz)!l7?07?Ql!}bKprdB10iCk z46tP2BRsS3m$JDeQYpeWau>3%UmelA)hBdyIM_0||0}pm;7InxA0=)a`&*M#hi(|f zt$4fV)G9Vzs>CM}qc2(TUzqG)V?I6>HrZ-YCPlXSJ;TA|TuUbI3h%l?ewckN+>F zsl5<_y`mENI36HxKmTizt-d8YoYng5Bfq;{oi^|5l6I@l=FGuUbU32G zeAKw2eV}8@N)1i82D1)$w{O05sEz>(=xFdB$OYRWu1@GKmKgSIrxvmWf5~q?Au!HN zsoU*VN1CJ0{1WhnAGl+k1~`Y}(luU>ZOOJL4N_hOe)Tq)l^h4WXc|)R(1N!cCUH^! z%y#KW)ba>MA}!`!G4K|4H6Cd*7R%}e0jeiO@}P6Z?~P2SCON2i^j+881KAy+OgC|< zk#~nN|Grg)0MdBqbaHq~#iYweU@{N!z^`9INP-w#dHESwm)l^|iqzINBK=m@VSY<1O{0TH6G$pfw^5f$E_F4l`MO@oL84AkKCPRK ztV>FZSmugTq>N(wnnUZ|B_woI=-?)QR!$y-r{YzQ>XIo_=sIGVs~{%mTk_b@ z_Mu+Bm}jSbA84jL6WlpGtj|Qj9xa0nY}|}ZqNtw2c)x1o?PA`c+0oYIzZz`GxctPJ zJep5!|Ga*zNJDk`^_5Q1eXsb-&uxFgr-RMH2Z4iq(}+2h#Q)vXxanfMSbjRY6=)Y} zb~p!DQi@Qm!(&r!m~`C!tqHCRt?NMKQhck3trht*hwX%?m~l~)&nOo%u(YjKmxj#d zH^5k({m+`jed#6aT0z*JB?j~%M4-;`5vH7l5;HCYzKuDZ*d6%WR?1tao{Un5xkuLv z{%Idm+iKqEj!KTXk2DOC;P(VkV;>c&YY(MMY=GP#J}f5}Pp#U{RLL({^~ummLOLoI zeDW$DJ{Yl3x2)9(A&i&(v0ul{whrr~&azdWM9|j3_y=tlBTz)6g$0W`8S< z{ht@$qf+2>N2uB^mUr5Lk8Qn5mvGX^ajvV=FFsUT$E>-#>D9EC(^1Xu{5$kl%yU`b zz2-035|*n^8;Zb`grfwMI$<*ZL{OhQ(zkzxWf&1|z0l**b`6d#E&@E=Tnm*E zl)Vs>Om_Yf@@-(hQG?E(T_QD(f?AeSMoft>R#Z9J-IPU4L=4Ug;Y{v&G(SS)*_0eWI@qEe<*dw^&=jPjBX+@QFC1={{0F<^P?DiW=Bk) z0iPk;%)}ef4V9-$Pa%N70qNfFyeLAo-lOn4Ki5m=bAlUmp*~EQ|>kwV_KamBrZ&p=lzoLR$)6TaR3_^ z--4fL>wjltt2;%0QQe=b@OoewR+*b(iG&6KN!K#$EXRmdVhfkE6`40= z5B{|75EOGRl^KHU=lw7oafMJ3V+xjdpG+_`?H`5WG@aC6GOxEP#;$i}xE8xlT!qro zj61_HkIe9Kts0(iATxRkB# zvdCqc_r1gQ5}d7qbQ<)S?#vi$U>!_hoSovasH^;JN7eaW^!Lk=<7YYKI`Kv}?=TexY-u8Vf(sSCW|GypuA_IX64 zBYDF}q*=Igt4SEXO$p_s#CP8fE6%G^?$pvwJ(uVp{h-1NS#**N3*2^9$I{k}`6x2p zuTn(2%2fI`oB!)s3L4osn9I#F+5Y#Hwg5_H3EZJ)Q~0T7W&U1B5`*|>KuvlP<`g7@$ST7EiP*d zO`+-a*SotIq(lqXRi{-_BtT%{|NREze6cXXlU1{UCz8D^s!NSKIvI>p!JOK+#=q(O z!q&Ylxc_+Dk_ULLnIB6Z(PXOf^Q))~eQEOkYM9*tmkohEzY0ZGk7l>X%>BUG>X|2q z9$qt9%!p}Eywda+TKc7Y0aS7o9KWN_)=}kEE8KZ;Sl^8M#!F?a8ZoZHNm(;^#z1Qr zO6Om%nKwVZpA#c-$#EJn2Zn~4f=_axAJ1M~)=rpHPw_Bo-ksUg?s~Xpl0Y4z=~o#7 zC>Sjj#SB)DM4O-SGuUUsGw*`dbkjd%4R-z|Rq>+6dYCm)@mWUF(qH6*Sj&<0YI6$b zJoBJ*I>X-n_1@!lv3^63v*!?s^SuP075iSVe@0War~GZ|_64K2@b#B#04Zwm$rMq< z_ry^F(1NeBA89wt$6z09HJl)|>&-F8Gew$hS$SPWoKe4>6fPmImJ{i_V> zFeAaRKi}J*mv~hmgy+IMK%>59n`gxXDEnUw3)a;p56TYYlBOZij&o}4IoD~wZdLkq z?_90gxfgErXkLGYym#37?e1giw1iPviZ=>q>}d<0qDHTW)wyg~n@BS4B)y>^Djc29 z1PD6M<)S1mTGyV#Y7q;_!%?{k*Tj3Gm2%u{qXu<0eXqDO1tq(tU3pgP?aZ+uOnIs7 zLlLHQ6!z8~B-=kn*zP7ja^kY$)SR@xS9^F29T_$H&F8qIRB|Xz@c+?t7H&u zrEJpNuWv;6-S8;NM=;Nc9QCp1rRlrBo01AA7LH-&q4TN*uOL4WZ{lesXzu^un(Uqc znhlpFeBeqcy73qxyzO}H9|y343@vU_e4;1@SaOO4$$dx(lfx(o`tmxvTw>tz>-0$O zg(QjR(jimKw)POt!~4u3O)~C0?yeIMl)B<`)>4 zO4X*_S^2E-V*YQdOwM0ELP+0exg{CS;0=YqjvLSXZ#_vMMBnm?S*01Uv2l8MqR7EC{$In&xG8vBd_KBj?m}T zm%jbmKHu)ytM$hx~<>DYhQ^YZ)amR)M<4V%1 z(uoad$>jnOEWc}bb<87*5Uc%>^*Zflg#kP?_@GJxOo0w8@2zIZ?#yF^pf~_ppCi(?1Oeu=HgObQbQnW?jMmV#GMg-+V zcgUx0(*TbSY0f@NH!c9=v5|ubzfrf7=HSQtgxftmr%nlg)79MR5{<#rgf_`yK-rP3 zFNc)|S681_9p}uT(o4Kc9()lvU>b0n^$yPkx?HkbsF$Tf#@Xxems$aj3=>*KfEQMG z)WjFld~&s%ddodd)bjh%x1yq*CpKNW!BhK|uh+a*M#F~Np1^dzrWxWTk(1`DvXy5I z2f|T0vc|c^Q8g6L2TOik$I|!8)KbrnlszG9u|6Q#-I=276t;+Rx>eEb^^JA?Md{9`;xc77DiCo3wAMuc?1?NI4T~;LhK0=8S0EqoSMT!J{&yobgNK zVJE(TFU~$Xyff;YRGrr!9!#?TQ4Six%6+O3;(u1NznFMT%b4d|B>FRSkZWOrC$&~J z5hs6WLEUMTz(?_uUU#R|ujjRj&UbIXK$DbDpJ?c0w>jzWhE0!~4myWd^UZpk<*~OO z(ISDC+I>HTX*m$1Yx>=+ysGxm*j9=FnaRZW5fe1T9%aoiZ@n+2;uotuidDqxbc*() z$KgVH#vk;VC+8yLgIhAT<@_k}&&)NbF>~{WcAWv$R$*lm(II*%($t~vVCku9 zxgS21KpL01pcEE3|8VxhAEo-ySD9_`$6W>WWL73l*e>k5sCb6iVEvr$;Q=%k1cU#+ z-T=i5ksCf0$Bt|Tc7NS6%ir_~=iS?|Fuk1bm~R7A3i-_>liLg z^>EqeGP?#cT>AU-ooJn087?~>qDgu??y57{%k_-;2JX2c-cYUrKYey;<`Eg34SYz! ziy(Aj`FJW-gs=v`WhZ5ir+$YQItgj%D_b-y6D1MOQsfjvohA|vBxY|&A(x9R8nw$E9s>UPxVG;HadQbUaZs$M9M3*eu=}~!8H^D*)N>34be+>oXK8?O?lsQ0|AE-JIYNyhh@Ku zc=NXXpN#cUX0Va&wn9I}#ed@KtO+5WdFft+21CE=t@nwZdN~A@A``2w=W%z`JfMfP z9n?JXY-88An1_SzLObgoDo|&vZ!W0tjZcBCazCgs9(EP%A)E8PfDpwxUi4Po!^j7k zr$7$2!y4KjI-fzJ*X(5NH)`DH<_waA(zcj|$peJ0ctq zFVk%Z&>qq4aQXIw`lBd>{(;$dNr&MI2SESF%ICD*i+bOsET-GyubOQCiN#lUpz`g| zU9F-az0$e#eOqCA#I1`V7|0_+vCM0@;0U_Ucz9_Zn7tRp>B^OicyfAYbFQdi!3X^i zw&Ju;dU4=B^b2pbY20hy3-6#|sqVJ5bns$lfQ>fGyWs4huWb$l4u(ol_O`zQ%a>tT zKfpPIgR1ebsYn(dO%Ak18?Eba z?KOiGci>l|FqT>f-lLG|pH==WE9yue20!o03V(ov&zU|m9ive(3O#qDGi#Ngp1ok` zZAbAX;hy32(AE#zvPpM$_8@UGQtjxh@v`Xh6(l?T5?3DYI~bu0@r0jJ&Lj$Oo_SOW zQbe}z173Rd8mWtj#7??4Qp*6P{y=h~bFI~Q4pc&axSuZME?I5hRPTl!O|dH`Wdxalz|hC6L3btQjLA+zK}1Yjw<4%Jf~k;$Zzd7tZbSs z8_PB#FLEy%huYN}W;HS#>E2fRxW;aFO+=YFmXpBwyCLre;4$wy2Ksv94z%}*?~6rv z6xQl%Ky~lr<_F8@DvgrMyp$@BqKk-kp0r($;jkgs|KS)rdl6)~(K!B&cLjNi)M%6I zp^<>gA<%1^dtuZ5h=H#nM5G#o58GqV2=(v^n6w^PGDZ{P8(0sQg?#Z+;J1GkmMbqi zX$sR}6W_OQG0bM?UL596Br30Ooxrt;FHpp7#Y;S($YEKP5@E07pco$9K9a3cwpED@d7>JzN!RE@|dY znBRd=k(C%aSgB{pe%|6xpi6rlZIpZA`TdPlA&x_Y%P*O_gmGv&UyabI$B?gwQx2?> zH~}VSMivSSYL*JC`BzxUlA;{g-pf}H(}K>~-=>nA=u0OJIZwSRy(ejhJ?Ce9-PIX* zGZ;2`U}Zwr0S0oCR^_WR9xe}P9Uup+DzOhZE$&JILxw(l#PnoFyuTB|@+H_~WG;F~ z>>VA>)@g;8(Oc|8DwVVTo7x3i&opy=Xt|}GkNz^ z7`5qI6ySf{!xuKanl->qHm29Mfi0e=UH4R7KM!j>C)1Mg3*Db1rK1NcYXkrdX((Z+ zk9E8qk*H&Zm0`Ja_(u8eWG^_%E0gQyoEA<&I(vH|-$qp+FPqH_3=EKxJRv)=gu5UB zXQ6yNUlsBd=v$3=`eCsP?5Vb?li8l-`Gb*rH5AkA&ZRG$+3P6wJ`bc_HmxBWz1USC zP}Qv&;%$aq$HQlVWw^2*h$slzik5`oZE28T_vOQ2PVgg7DJXlgKD*XvA84@Wo{ zY~|?$c|W8`2aHJtQ!h z?~Ou3FzG4w5M)?bh#eWiW=4aGvV~(!5=x~#(6h#|Sbd9Qc z=DS&mr*p~cPu;U-$~(pz?a~KrE-rj`9&vLe%^uS#?U1{zDC5jB-ptR9Xl04@afh1^f}5|p7YI&-k73^=5ed3E8;yc9O|&=vT|05mykb$)cX9)Y_N_7OKKu;b5CDf4w9$t2h8xGs zdK%dxY!OH!+fuv%(VH|%EDZ+BCt|ERfl~s7_HX6++Bkpi5N8pIC+W0cd!?wC0k%7X z7}ICmz&zpEE!n%oymPS^U;g-xYYWF31U{Abl* z(`36yZ(I-M%0!wupFUGeg!N6Itm>)CD4%@PifJezFB$~{SxD_@SQS(FDL#=|A($ML z4FssL^N{M9gAU1W0&FkQwV1%YiQCHvu~Ld=5{>Ay2uc1u zt6%Lbq@)2P{nwcN`n-?Pc(pGqJU>~#<Zg_-4b7(-|ud?@S_gkh5 zPSJ;Z2foBv{{X==-Op;>EZ@3C)mvElXfu)dsSb~XxG?f@o7Qp^TM=LVZP3K)$-R)p zgN7Tz?XV_gIe$?mOVXfk?qvGtg@dn6SEPy|A`|t z#m?OU5D#{MC?({sgLPk9=?gHj=D?L?ei{`YSM!fW`@lmQ+R2y_t}5|YcPD)2WiZA% z`j;i*Cd~_p;S@)BB9?(*vX6ok^rMsSkS&{!A(A9x=W z-5`IXYi@Mr)EpyxAsIeS*i`kg55doP>DhX_$m=`+rZwKXeveINAkwL8LJJdo6`kK3 zeK(yPc9lpWpxVkS%N#B&YY1u1pdZ`K%beL!_Iclcga|H~C?=8)R$LwLigAO-ivyIp z+QwQabu(x|lpIT|c0&OuKZn+}k6xaar|BGMBdg?<&vz1DoHq{XU6dkC&ch(omfNGF zk|d`J4&vEqLBR&k{HeJuaw7~0+_mpha=tkGo+ce zjVyWuj=3AXxYH?bACZ=N`Llm`dxrX=y^)Bpw3F_w1;8}6W`prPG&BB2_$$faCHD_~?MP|1I z8vw?~v$eMqc4UeUu1psuTE(eq81=EIWI-lniUTUR%;D``>cDN^^2VR=QH7VT^Uz=5dE!(`Iy(1p}>D)Yr|L98@KuX z!#Vt~$NSgH;II6{4raVwEFae`oQ6UD*G?NCJ}vF7nx!{^%7_J$^v%#xcKV8iy>ivi z)rX-Ig9M0E$Y9JyWdbQ((Vl)mX8du?eR9mnQy=Yhi)NuKXByH$i>~R!)@nYuqz(e6 zo{%4kQ2B!x(nRT5{@Nbe$l$IWR{8hl`3Ck<{<&BQUSaJ<`O}bZ?OM8BEA%2x6m~go{0uZmofYHK@XaCZ9|BTgX zOlA1ZBlC}pMQQkn@GB*+(hghWUtI^1Ra62l6ca-cp9%rOyq6s!GL^Xb1)7WWa|Q^m zR-vu=+YQpcJW;|F^5XMso$|FR@cn~4ZojGI?PP`%=&3M8v!feGV*-fE(x(4(8cy$s zWe$0;e9NPl!e?z8aF}pfUO^?ea#L}il>(r`e(Fq%5vxhdKXBEBzPj5{!*i1^c?V~E z9#JDw-Eh{n*4MZlp?U7U-tpUSZ1VZa>#IeQk}GC1%4st4b;$w=aZ0N_dmT$Hr#XfM zcLglM-2C*}t{b=tq71S9PFgl6S;jhd-iXZL;VYNv2}r%PuXicnU+q_KtDgn}qTYke z)kR5oV9`M9oHH#rEwc`dVo_thnZK^~N0qO9zDwFIb^;y#D5fbG#@BlQCo9QKP90_o z{^xfWi@Mk#l(@vQYBL@#fn-#;0GizS$6IixH%B8E_7imLh<246uffNbrZ#@gP2URB zFY~f~zpB7I85Lw}l{xUx>_~vnv{^7pShRG9t>!&n9~u!RmMFoES+qmmR-0(Bl4E=W z%#s{HOU3~d7w_wx{^gh^4Y|~s-b2$vulA0AFW;G~vO(2UoPT{!5~uwyNhM4|FFk3H zSNDcS!XeAuf3#W=n(UNcK$fGccujNd$wx57_3xitF^nvm124ng1P>pdrss-QcBnX9 z1F|VJ^rqy#ro$H8GCIU(o)5VHj1s1q5Ky_R<}ecG$exH}z8X+}EQ~D9AR(K!oEk3U zoET7YTrLNqR3xeCHPq>CH&^(ve_TKB(Br3(#I>9G2YZU?lA>G>+BE;VXD}+vgXoVYyDlgO z`=YL?BuTm~z7m-JKMO#cVvb0oP2eg7iJm*G)y|DIa+L>8&fKUeNmiA$=SAJI>=2U- z6B|8s9fR`%dMB#+s;XuFhB?rI!W7i59eT_0Q1*CyyTiybDEd}qh9fCcjt1@J@41nR z-oybXYWfV_7Wy=Q`+rP{1F@z@Sufw_z*T-kAEkaOK~yuXqp#!*BfKqg`T;8q$Xge1 z0pasreFYzgCkBl}*CFa;;d`ayZ;D#gV=ji--*HsD5^F6SB?5v7I=Ew+CBxP+^g720 zYe#=&*+EDQbaDx=*VMi?JyhLTu?@Dto2M1`luP$AaCLoA>kwvSWluD3;$>#R^ftwv z>sPg0HqRFxyHZUWHB1JWbMx8uH|48@Jr(dXb{P!I{FQNOF-^8dc&RodQ?aaxQ|X(T zQ2?;To8*b2vKfC;mi_8ejWbHs$}xTbQR+fBk?v~`RH|!`=dm+ZMRBvA(Ne}vyb6&P z?AtQKggVBF#uz{;K~)k-IVj}=nlX_3ieRjG-7^!fX5Y||XFxX2!!G)mV5v_olDk^$ zZiI|;^LfOe6TP;BlhmshY8zv-<`3n${M)KXU=JpMW1r`kDEQ76r%553qAJ$^vXa{unA#x9%brjQsF3+8mnY>YmwZXSUP^qB z9Z|6VK0#woGO>8IJ5MztP0=fx%#4ywqiCdZ78$R*DCWKSIM}J2ckm=%N#ua?;zU6; zi@j2TF^%G`AGv~HsqQ;EF1xNxQVB12KQB9b-_f(VhXTDf+c~}e5%)Ebs)MEul|J%M zya0ZB2d!Ax#kqlMCOxCg>?LpjDLSj3liw9NJ1)dl`dhN~&!)L4VsvvAAlXRd-=?D< z(uU2IM`F{ohhLk_4;cYFE@#0O zMfe0A!-C4N_M-_W?fLM)tNioxKxOX*+n4m1M~6hkYu^mE;|aFzR*rU<=VQxexHRpz zC>9P*;pc^j5VC<<@iIySr;V9Oq|c(eYW{(!{nU#o>r>^j9YMwP^aV%q{W86ez~BC- zz`TZq)^F!e2|rq@{5)V4P(U8N{WmQHb`YM_fk@Ttc&lzxFzgRG`Tlp8LfAEfLlB}N z;d3(Y*&{+m>kqPsiR6e&B%yCB98n?RDO|3noc|(a{s5hO`guD+*QJ_~!` zbSNnoJWnv92tSdHq&+E$$3Obp5J&pp#tl8*aN9(|5m1YI!iOkTwQK9jH6AsR5w5wF zS87w!>eQA1btj)Thq6CJAb*{iX*SZIzQX+$)Hi4^yQ&v!AG9o;x$gSd%##sE8-X<3 z%!8)_vpAALBC7cVJ_Jci-$3SvRc2IOJbtZ5JK~{i}<3g0q@`65SKY5-OQP&Yt$= z^4%w@i~8#B18V`I!{0RT-GuCAru*URyA?YSb5gVL>u;BsUzZ_sn_GhqwA0PV^bcNy zPVXB{?oC(`HO~!;-*c+t!b*|Dmq_zeuadc6_|eu~qkpe^``Tap3gtC#X7meMxy_l_ zHm7Xa&`jcz`Sq7Y(X9brDdhrq0ba-B%hB5u{u+^KGP2I(+&>D}tWz|# zs?~g_-?c*&Fd_{dH~KtTWNfJX{LLD;#-$H&FA62M`^VYjewdSkLDefjA1!r)>px?+ z0FHSyQA3!46lF;jF^YNS$y;o3oN##$-ydf)+2Yx9umx-Y7eOO>Xs?Q71%Fh-mv310 zx=T``_I#R;DM|j3%6$5Izxi8!%?%YcOTt%wxRy0k*SEU%LWc{n2UuwuD{Q5oR+-^c zR&HJUnDdEh<9eelCU%>jEsAkm>6rwWR`hC)98HuJ!00X3nxD$muN8-q{#qZfuHb< z7esrgxf42S&0eSQix!{#@V!9f9b(?tr-XFJrp^m)KZK~}EG059S}S;+kI zsqT#y(Re_#m2W)yN(;z#fu81H1wqM0h>so~X3=6&Kvd3%XtGA9Ip1`|=*vkgHV^ z&mE!o-xP;qXo7tG)PeIZwzBl>#RzxMBm;kF64h3%mA(dk;-rBb?;yN0E$F7nw=h`M zR%CQM<`EkDj)En%GF7EA(_aIsM?TL-_yYViZ~TBT#G|HZj_0!;05R+{VP;fNgfXW{ z`pE`Ih29gfxuMO!*c4TYz4Og(W;j^dcejieaKRrT;*GkW0830scX@eLO>Ddl(eTyi z>eIJNAeeV47eRc;wO>A%_~YPSPw zA{M}GdI{hht}HqTpB85~d9c`2A$6~um!Q3qh92_Ve`iIA^6=Kd4uZ`5JG=8;Mv>4b ze?t$%D!VVUCaGN%j~JBp!^90wCtV6=M}BwilZ#>k@9w<1-8Nb@;} zA#*tUI~w#S@n&%8B$lZ9CWhhn}hn($jYANYLd)=BPfV3VaXZS^`n$|n|3gcLr7yQH}HiHmCDJYRK%fJdEEnxhME zdKNH2^ybR~RZm&5oi}xDlDVw!<&P^laZGlTF=4rx%A#rSnjR&Tg^XuNy)aFe{A(L_ zsY?T@C7j)zW1=IMgmNDtfneW5)UvxG$~GTOLL(yy|2~CpDOC4=lH++}4TYfvUSg9+ zyl5_yFh$)6TCr?@#7-*%r36Qyjqc}oT=>z$wiUgbNM%Bm!sY?dW=9jBWixqtPraOp z9{qadnCyLk)#>t`!|-*FEaC<6HN2OFw51FJ!om3`*Ev$ie8Q9`(hKTqm9Qes4QrZa z;gjc8M1CDvMoS{SqrDL*$>k6%j0E#g&;MAove*ec#X8afYG50)_9O0o@i{Q^{gCi) z`UoFysKnbLVCkv2e1od>yfqb8?##Ah%#-zXX?iP}Wmkd9FA1$+`CtXu zf`90l-;gO%%r`~Ap9ptW2ehicOw$193bM z3D6c;=&c3%1E|uDA`{U^;+rOM{R&R^^L^P zcH()Rj3EE=%L{#afo7ob$se6LuA_!PE}~l9$NA1FjnXhK&LgmnB+bSO1^f9Lg&5R}khr)rHH!Bq1m7s%Uc7f0nc5V;a zF;knd-54*|FyrtmochAQaP3?ER@OGGZkD9Vlo^VT=|OQUG}$Rds3(Xg4n<{36QNx4_ZKtKDN~qvrDym<4&?ZIxbW(O)Hmg7umKIE1ecNVAL;r+y23_?^Y78ViNoO>?dYkK0QpK|(Nl4`&Kbi->`*r~k|aqOiCR6+d}N*{ zwO<>3Jqgml@FBz(0u zQFg^CwC_Z<#vxYL?a+L6K<(-xp$_=FJ@W$Mlo;CeXa8Ci1%W*E2kPCA84Ls zOi6#H+y3n;v9O80ZZ!+8H0LCxd-QPY);s%?7f5-_4V>O&a=7CvL&ZvXHJr$;$NH0a zKp$syzu_xJ_R&i}O4l*xJSNtV#Nmu7Y=icCPIh}av-bUu{%n7YrGIhPYaX$L)4N%@ zcQ_phCs+i~6)W8u5*|(8jUN2lj48hoslQct59@{rG#4O_XlJ+sCK&EeB!Up#WUj)A(@PJSxI?&D!LKtfDUc6g33DmiM0oFDW% zz*`kWn_n8KYH~dxg38)Y6_+^78fQtZ*;Q?ivv*>w*ITg{LjSZ5KD@!wtw|57+FO> zGfgz$a!zPT<>uCF-B%dxS4n=TnG27VRi8-wuII0dgUIF0zL5Rx|_2`|#E zw>GOALfkU%v{M~AZT|{>u9W|x{SFxX@ydu4z+Z9F!D-ah`otVyLev zv-t=*-m0#?` z>LZV}xxSNAYbzNnL`L!Sdm@m~*t^=G=9eTG%V<78Q_uDh zQTG(sHS|Sr`~j9&lc9ah^LSnra%)<3OA?OvNb=v zJ=ZN(DVh(fTncqpM-#5T*-uDvt2E3Y_Fn3Rt|&0fn+FJMPKRy)iGJa4v~1?8lGa3^ z1ECA{s@~MVOXmY?t172p39!)=K^Wu|vOfK1o;aNG70LPdY4g$*`~@TKo08D2aF$mx+)UGf7br}<@6d+wARs1V^rA%T(MkKF$yBiz% zNYF|(2Wh~qZ9>S5#Ye)`K|P)qJupq$@&f{L2WDc5l_R<$FPQXsR|s_4w?m8A<(ED?5v!9ZkT(UnLTPDc(hOP4haK(6w2}YE!SM{EyA< zsst+%j5X-4eic&*9m{-JkEyCCV#Uo9|Xn^cuiz+m`RdXfswRLl@E~ zYONW|)dsH={t|}pfKb2A|*Byb69=#x$nDk<79g9e=h|AsF+3htVCK}2raZu8~ zAIXL$$~@cZ|0l?{>o)EXeHI`Z6p+OC$ALWm)a_}`vo#LN;s{|m@n?wQSlj)slhru^ z==hgU8o$MKe`+w=Jl3RO8*?J>>G?SB8Vh}m0qmW%9%`|_wau?Bl|L34RC3Cp7eoN0 z#m3;We;s@#-4L{hh5^mgu216?3d(vnuj_)tSzKm(a@D@QlZLw-a-k=0Q)Xy5PXG?n ztZhyoMw*W3(HdKWs9`DJ3;$rIPz_4yPO16H$47;E@k^Xnc zjeu@oHPk^@-;UP<3^Y#F*E>&YS|$^nPPS|KmXo(T`}9_>KGKWHe2U@r~JV@wCJYkLj9IgFl11)IqRHWPvGE>>2yd4Bu(e5OC+_*BTSvDsn^x_jy}?2 zl3&~KWTug;j5Bd+6x6xdoH4oIL1-5JZz?sTT@C1)?ZL!-*8@q8C%QaD<*F%RZvW(( z=mLx`$5W(yo1_s}m4^1evE5_Haefo&F#2>K+N#;tN{MAEk|Fw|k@1qW%x{G+dR@b( z?~u#ZhhLB`yuAM8C8uIdn8I!Y>ZsfkRd|N_(K`MS>xIke3zW1|MR6yhHT^dO2`5xi z-{~Ds96Hc2|LTX|U~6F+Ftq_<+%QT0t3-y*CSv3bu#4`S#C1=>*movAg?Chd;`fx zOT-CGtYbrcuA|0qd=dDgXr%}I7gp86oMJ{XGS!vvcdFdae(h|}-_Uo1wL2}w;UihA6H%=wS=tbf3Jona#ZDAui6a#R~>G36RP z5uI?Fc38g@bp9?airO)$e*uK^d?~G4lEDP({-8fkmYO*FP(4aWUuu%PISb{)O^q*P z6R=|P^3Wrqf-KRW-M~%f!064J+j*5aRFB>PUkD6vLskEHsiZ>oLgw2=FGO4j&ynxH z1Ht9AM>dUZvyVGim0pF0EX|ArQmC06(#$>>0JI}<)z=6;NE<5L`coiz248#n<@imQ zyoCCW(Opmc2fybY(r!GkXAA$*y`d8$0_}Nlxxcb^n}iu@QwWah=_wHl!<>VH`e~WNX!2=r7E9Ifh(W2*aXlIY{7FFL@zTTbDQ*XMgvnG&> z-<5O3dOH-_>}?*nzSk;y$U>@SRCNd_XjRNBqf)b->FmVD{VCuR3DjyeN$1L?Y=lY8od&MhF>qzMH!st+o2Bdydljl&C@x2`{^J(QGbTu%g>dm_{aQ@b78ZVZSh zpP1F6ClwC_2%wL9O{_A8IU;*HGCCid*Jl-MYT_S5|GBmdo}@<7MRL(7auhxpER9-&IYjq< zbP_lHlm4el{daIkCT!yc(F_&7kY8 z^c3QK88dop>0?E`B+65--1lTJai>S?j`+I)PE4Xouv-&RgraMCmy0r;#rd%&yOcYU zATn^&7Jk@ve8t6ancsSyl1vCpFNfJSweASu&&2?^*ZV;Gs`;z*-QEa#tnll0fMdIFSScra*tn}i7x-5`daj|0ZY7ju z=nZ3@LN^X#37I#qxK^%gN{Hrah9=RUSI8sCtUg~#qF zQx;#Be4Z3g%*pV~J^d8?Gj@8``HBR~MV`aMrS<4}R`Bfc>ZiS~38=V#>JS=TfwiP- zj04eOt+yeq8QU~u3d+s5{yc|^{{_&wV-7fI<@OfV-*!8xgb))02;VYwbWX1_WtD*l znQ1&sq9x*mcN6_f@#5IY6UkpfDGPe-V2kvV3=e@C)wUj)f(2zFCyVW^SjfyhP7Sb2 z6}`we0PlnyG@MUjew4u5%g+cmApG-~n>Ic3!}Cvry1EQCwW?&MHuZSfY3GY3R*LJs z^WG3RJsxWN9&&1#v?cx_ljP+C@l<1)5LAL3SN#O3fUZyQ6oqKv@Y+DNVd%>|<1EP7 zy3A4b)npt2rI-(sc&Odf7tjx*@u(5+!_EAj8DO7yCzed|5p%!V5|}J6{@zp zT__xvHk|T^h7D}r5C0JVG&Q#)EB;nxcO9=<{B-W+7MCF%Xz3{N$OZt(b}`C2a<3CJ zUAr;^DZL4Nwve;GpRyzM)XJ{$cU@?}m9u=tvm74mZ;kk?fUdXz{{YPIG4d_6jM@+H z_N7I+m!~OP8N;T{d^;ttN(r6z!Hg?Pe)`S#z(9e)yDT>r3~-4|cc)>peNxdWv21C^ zk13CK=&{CRoh^1TCAzo$91|>aUTvI6qN_H8)<#Faw-H;FN^H&P%Y+5AOm6;sIHrX8 zRoL$J(_db`^Jx(`xh_>PJrt+G3t!kLKbzXaKVO!4oVYd^$MO?6lIMB%p}N}kb&~9P z{=}+Kcp4ctJy^;@91R}9&B4^+7|MzKutCVM%wRpm;*g(_N7Ctw9s8@<_DEgNn1#_@ zyMGCY=wvS^+uT$G8}7CLqH@J>b91L?rk8fBeP|^TYf4<08rV1UxuHhBf>(icP6-F8 zO>C?VTw#xRO!+1-B$NsirZ36!&bd9S!$iMJaMsd+@g%|vz@In-h&~*Y?)l_=)k|^W14#s!pbCb55 z9NoMKLTT1N0ML*q$Bzlc(s{u=9L(gA6t+H6n4hUUw7Fqk{coJq0q)N_*sA-{w*Hrz zNFpPOHRZ|@6XGL`{XmS!$jhc2ikI(o7Q^}yi*78(FFa}R9RD?;WPLpew+|*IAOD3C z6$Xm&h4vHzQZ`N2w9L6MO3y~G-nXSO+`ka zn;jDwH>*;k_Be{0+~+j7ELIzxRo5l8Q?o0saZ;@!8Gn8B_kU(z_?`GvJz^K85m_nG zDN7$9!vTjFw2(6*ez`Rlr|)dK{Z^ffnW;P;d^IZ+c5>!&6>hUR0nGL^;m>)f^XUsr zG8f_W*7D?@fi$CzyQW1;8m~aZAJj6Q-hOY#xRvzbt@@MOOiwAPfsvs4Ckyb!z3RR7*QeDBjQUoKgYOrGWs2dq zqb2wuYPTLyfl2R2yvhBhVp3*gMDUG6RJIH&8k-A5$A(a>MpRHS**ed*$~?h`=P%5{$S zagYBnzt7G|=@C$LO!K!(e`DWR3Q%8f5otPb%?I69GJ$wy@ZjP!@q7Hn8@Ox4?Hs%$ z2;*s;T~54W=}%k`fzG&uyAA$lOt{W>A|8$O7E)OyuVMPdDD3_$wp!z2A}UgkwA#pL zC5JbyALYn`mC?0^cymSEFQLPa{N{VyNT!bJCY~VuEaM0i3R-8Yl$%PImrz<>>X)@` z9>Gz!=qlORer3J)gdbZLXo1he!L$GXiLZBEc!NGlTyoQ>ynRhWc?e~Z^B22=DXS>S zL)rfgc_gNhovL5MYk~l9M>&AnE;Y~7ke&#**#844LD#<2lfg1WH=^^gK#;Z(B3+5- zKkc&jJ+lidz?IPvE8$R*aHuHuqu~629oM1W}rYYC0 z^;fc`dQsKI#!u_ld%OBlz3ho~F(Uuw{Lk8JbSZ-NA^TtjdlB%)!_j9|kamFxRkke!-s&F|gVzL9 zpvXbM%PuTG^IvjJKpNXnK8arF_o`iwhA?+MjIocAK!uM33#Z)Bjwm{mDy9*R<1|#U z#DD7S)#Xp0iPs3L^R(a9?f{jGE!xifAK3@czDIK&0nUAo4h2;-W5BdRUv52ftW5`; zS-$>rVmd%&$)3TQfJ?STFa{j;_qIleYR`{@fk%r~y_L-H*egA$jBX|0RXu7@;dH=1 z)*HKq$lu;jS$$kaiYcU?acX42D}C*3|LS8~{ml74&gT5n5$n{7%W3%aAbmPu@FLg! zM_<5u@P?+<0-MbM#ftfhg9ykluw0clR_8$Up3{#83CC%d>=@%OyW`UG^wTp4V%@Pd z0oZ*}$!aAJthbdMgdWTEzt&YbQ+}r6z1opowtfws#9rlq7+heCTYb|$l|uI* zzj)vQ00hi+a0TJVH5LFhZ0e-dX>PT_N>>R9c&|pUGJ;$dW2u~2RcED`$OPE5fR4}V zcxwXzFZz)S%P;&!%%jir3(E#a&W3|&GbuaG^LrUK*hQ3#h$kGZHP(*LrB~>(gZS_h z*O$+4=dypn+4XzTF*XGO$`9s$`MpP&EJxu1KnJE1_b=!WcVjKUi0stSStj7mJ~?&= zFrT@<*dpkefFMmojW+$@e2IgD(8`u0XSvY+u6aHj7Wa$CvL%mbr!ulzbN;LY=KK-) z$Mno? zoFAP(L9`Trp-<2e&>!*X@KnIR+58XW{>_Z5vac0TC<*-_zj)vQ01Fw@ zdP{KFX(?|i$50tczNYo5@n-?kdr*o>2o;1>0K@TLe{Ee)HZN%inLAfM58H zwlFY1?93+mr0#p4S7vF>1cY*s!2lSLYp|IZ|MASpGF|N6)pnNp9mlUO&%JYRdDfYE zQCHLv7Iar8U_V+7o=#FUoVnX}Hn-lg7iMF?QDc;tSLs_Fwtw3)0RRC!2DD)y;3x0D zWgHuv?f1wsFqSVi;f+eVk!Vp=@ZjpKY%ef`{4g}-~qsvF;XYO zOdV)k4f>j4P#89b5E@n{buj$g>>%doko&(M0I3YJj*Hu}@&*DuYp; zdpq9O7W`S{&w7cm`73?xt$yv5zP4&UoVH6uPxDWaJeve~V7lf>0Llc!To+M*5Q5qa z){kHobSL;W@y^=zjz;}#YtWiaCt%u)d0;Oh0x-0{ zyk&d19MgZ7L;hfGGXn=6uYwxYTb1iwy5N!_U`yNDrDv5cJeaRNBmh8VxY%&8P%Apz zLZcPB+!723prYhTFtxAzECZ7YP_S^Sf~xW3c5G|l*|TRI1mMF)`3?8nSpM;=FD$?G z)+=d|((ZIez22I~^!4v*I8%{ASw?SI`36XeG8WO?I!*)b4_Oj3li$moC$28fYf%j{ z0XlB`t%n6wV^*i+=Ku&Ej51@rLho-Dj9kcwc*l4~RMy+3kT37H-2q3ZH38r+%PWoz zwlx8s_3hv)cUlzDGLMbrr~(I-bKY{sOh=~s1b(uR@xb0kP_=JG#+-iuQ`Hp!r4@fc z$3};DzW4g_9sfR7`&Z-m_a;p3UWcw4ds#d+5bPE6#)A1Hb8dL{UpNHzel&}fUj&Xka~Q3cZ51-`^_Lg zoul%lvT2oF+_IIpzGa`;ZYk*4l55rPn~`(2rD3B6BY2D|^Oc-&pAXvihXeq)StF)G zSve!EOC5COOdvoiuv^zF0b>DFqo?H=XfSBt>ui**jAa6Bd!QNsl>3>tUteDFhD*!& zOKE7xfN3<(H0g@O-gD(hXSHBDMO~3GIG*djw2v0iV4Z-~bjPtP%kwf5z|MntSEV-9 z=&THi_d`<`^SSbqllEYK3^wE|#;RlFl&`~zYzCPCo(@nsG7#_+c5HBF0-}lVPCCO| z$zUb3Dr0N}x8$>`yV5BvFjHrOepuxHoKHK|PWUs153sZ`!!m>?ai;a-p7&i_{zZGS z&r5$PoIiMraXqFTjQN5#=Wnm{jkP6tT(8qUzw>-eI@!L~0Ienn$b3O`H~Zl%#FQB7 z^p-H`~>swndV)s9yy+!h? z?%Hd+12X@SGy}ctuj$Oyt7Eb4%{YJ7Y;~fYgu>V@C(8B^9_fdT)DMkez{5FglJzN>~m>6wq z0z4BC(*Zhm^l|Im0j$t$MEcr>H1d6{6g|eXbHorshG7i{^=l-@!lTxjX+)KfT;`1`cXu zP}m<&gaF3Ml=!>vyBd-IuZ-3H+?Ks6`71K*@2~WQOgdj@bQ&}WTE-U7klz^Vc+~IG z{5{Y8`*l?7e_cSLSq1_LcAXxSIT~YC&@jtcr@sNuR)=NGdNLs$x?Q(CUi2>oIs0JK z0bkv8#z25NYX=RDXB7xg;Kz=%($QUxoMmR>G5t`R3OX{-!8Nt*+&Av`F6Xb~3mqRX zbJAyVf2;oo>H2{N0F|L*qsEL-$5=6O)1e7RD`Bb(Xe9`06jk_CdALvNwArxobD#m9 zHRo@NZ3?dAwlbgh3CEZJ;TdO_kG$)cCo)y3cpSU{kjDa3G|^Bp0Wf@(1GP4eVvd%K zrnP|uRc6oFMBZ`iYOV>0D6j%(dit5l#Ppj(J8mcq?kKBKe{^g%s^Lf`SxM*8Wsw@U zg@Mn@ErJuhi5BthfP8^a7P{QBBj72^0~<@#iJ5QG$8=h1Y*m(-)>c**{8i6e+W)!f z{8KVTRCZZESZ*sBR{N}aanODrXaJxBtiLOxrNUepPYAsVB^y|j z(fYKE8anie1(TJ9`*X9xq)NhlFz0V6SyOCW=k}iQn4`;Iea4yPV;*(f9q{yl5z9!` z`wST5xd$AjF3b5G#>K~#+WiYFrvpEqeXF|rAEAVVxVmi{Q5jBh-C*n_UV9o z&-h_M!H@VT0NNa%l;?8$=@T1pmeXBZ{UCGpVjpw>;5W(1 zgc~U;?=nTQKZzXySRI!?+s6~%Az!w0M)lh6_o<-}$wUDme}DM&rRC2z5b#Iant(02 zF`J2+oug6K?LdavQ%Yj5YOClayW=itM;6|^d^isQk$bP zpAKmAo0tv&ubIBpYf+gO_C4lpY1^KRdl=!-cGNL*y3;#pfii5cx{+gAwer42uz`TT z{yC>6SzsCTcL%gBf|qa5Yh{gw`A-dK)h_FU>Jd8>mb>b^zS37|Z@^6I)Z@$=vp(OJ9PM@4YVPpUvW`>{xgA`-v zz>w<50ED6pXUsgZMS!Z8JRZ2mN4uWW3JyrzJ+BQ>n+HHECB;oj?9e+alPe zNo=7c^MvbB5U?dDEO*RHrU%P~+M_MG)#nGz25q^&TjeW&akC&n{fGjMtu|+i@ZkM* zpaFmi5)^LBIk96^VOE9PVi~u&%TZT~P$AArfcaY04^bf{(Otz&49v+cWWm#Qp(IH=nM13zE=zWST_DfJKp!X?Rei? zTXsYBa?>md=-g`p@Y0{TuzdGVUs>*XV4lCWw(e|c|1ZDo^74dR<7|ItK}Npb7tH5& zfY*gQyFg5HzTgE5Ar77XeLaCQv1g)Oe^PcrO)Lekr(FiP#6s60gQI?xOYp{5lK{k6 z{RH&RHd(2jyV4enc9{sA5?Qo--tK*T%LIJQT^E;+&xL`^4?Ju9wcQ-}FgOICRVLIn zRQ8I?R8CauhK*A&%l+B{x)pu+In+JrA|bP?uQx5rn?nBJxN)EXKxMqxP*qNy1sKn> z;3!B?!RPub5!k=GT69WCB=5 z@%>-ke`0yvrE${ZmRzvxG5_?s>dTh?fM19Zw`9~7{BhcU7+3~~Hn;&0qpso9%=!QL zf4;bU=j$#n_ne>6mC@l5t?2Wc^MA^1d$#U99KY4)10B4HsjH}WrK4b5_G3NG)4x9VO-?=`$zROo| zAGhj02-goh0N8T4?4;PxK{(WDRnbnxKxVuO4+|rNrveu$?7IX7SOn4e^XTE9$FZQv--+)X780w+yBl z)v8}ros|RMk{Sgl+$Xe$)&6YkS-_w1m}ARd`@C~4@(<_Fh8gXKp3Ldm4iMZvjn&VS zg2V7mmS&8GY0pl8#~W`-8;Xi&x-oMb+@kyTztQ)oAv3++cRM!NGXZU3VCBqqDeziG z!gk{NY)R2}#(YKJnMPhmcTi%Ki4g4UZ93pfo^p2i+RvJ|2&$ZH$s8NyEu+09_vrf= zd(eSj>{A(KOZ$KRe|N^6Kg%N5!+mjH5-_rIm(BVA%Ejd${`f_Y{8@j%`#*c@)#d58 z?=2_I`5S4SQ6ax35Ha->Khxii+nMq4e#`cU8qF@mrnfTdp=*u725_Yb`Db^ z-rspEWb}O2y;%Ip0Ce0pFmcqTJZQSX+G}eiV-aBLat?_9_;=5sJ3zEpE8?`k@B#5o&{c=s0x}IPrlEFUIn=lP6Zm=S3~L8>Q~k4k^eK#E+2JwOZ(eu z`;2CE>=Ee9+pBut@WqW+n2ugHZB!qx0Pg)1)at^qrb_d6NO81m1~?65v^!-pDQmGT zceZ1LzwpindM2QEy+?6l1@tZ%fr;1tBVwKTMnJ$Lx41hZL;sOw)*8c`8hU~3kGpq zkCnUD_R#%odsF4NyyD{WJ1z3B^zAEK?pPhAO11pT3Zs4Ve+D(nEjSV|HTTmp|?7@>f1H=1A0dDv01RZ2Z=B&qxi1oH>VUZ2VRCKJ46) zhYoos0#nB`35!rHG<~U#f>sOZl^M^0^g1_hT61t>~6xCj|X9ex;40p^X4K3)e4W4!z|SurIF9)Iq_@`Cm%VLMNu za+&}E*j9}3vb^ZH*``*G6m_UfO*VjJewQ=md)g1KuL6}Q&-AVOUeSfee~`W(XaE4? zpvI5|3im2-FbwtDz=MgE@kIUXuy+YmSGx2ND%co@mQ$r-0Y%%UkbKAw_uJaRKL3wu zTm7&Cxf?HPfa{+6!^Th|R@k>lwUV(OHZ1H{-rrAg>}5c1lq4dyH=7MN+HGN0JO&Yt zHm!OZ%W-0$zBXr8(^%joX$z0?(j@mJ#E1-3(Wmjjm$_%<ZF`~LrU$>%N@;TVm$e0z->+H^T=_i{pP48`o-aL>;;CfMxYBIzd@mqRq_YG0; z?RHp@EDT)9z^YC}R@Pqr+o9Jzx>TR!5!;CRFs_+C5n8ID#c!s?tu2lGrEN{XU-`^= zVW9HA+U>w}uM98CCd;E4dOj3}<>d((Y(oQ*YT@zVeRC4gxBNimW56L00kPU@)pw=sE?RRxbi7;RIVjf;GytfWs0L>k-1S@;-%~+C zJ&OFees;pjaCYD-xcZy|6gJLU4;yCgBO47X^OTP{>WBP%v`79U`Wi~QPE9j#;y!>j zwE;;}7Ivh65Xr#K;fDKrL};8!Z3S!_*DbN@ZOQ_?{_>IK$J-IO_g@vGN+D(1IO+r< z^)Q5XZ15A#URj!NsnfnlxMU%zmA`GIy)i4GhNmM;>)_`N&5c_oxgjn$dsnpDR8hn)tota5^w>gF6%{+KqautXNk}O08Qt zIEYDcTRpco$M)x+-sX^Vp%mZ$-Up5?FTb~efNOTbd-k7BV334A})c@t;>E++H z6Z9^mkz<BOQ#>Kgx$A z8q;r}+oylr$>o23_K*VuZGWg8TYIuOqR2pLd>{2WKfGT1o~F$oNgV(oGFt!@fb4`^ zT7R&xkdD6Y0){~fe_EZte(}`u{r8?){!;_2yPVjM|JwECTiffm-}dhLWky?>CZ>_i z?Z5HumzNj*@cHFe-?O%L*6wGVyxz|IZ?6RE7$o!)pd5NT0Bg4d1deX_dZACh<-+o1 zw_jfFGCPu)f?bZYl0|mN;5$=~Ww*3JDc@T_fOT@PcmVK9{?U(WENpYNP1c8MEE`(; zpuK$H0f0s;l`vG)?@lcZ(Jmojqo?)bo(cxn52ffvj}(aoZ0%g|7Q!{=W0a zmmjxBUS4~7K8hB!_^KzJSf25COJUDr+*1CL zzF$Xq!}-TOmYqSbjKY!uogO)!=tYc*X{FODx3%ejXMgG`f6Xi#XYRLwfL+HyZ^^xK zn?dy?&(z1!*EGK7tSv>4Oi$7Sa)-#7@S)3-$?g*$b87jjr^f564Yd8s2Tm;C_Pghn zH=jS%(%a)e9>TF5bH%kJrpvZ0Xv?U6HAWxUoT2Kh0J6w3&K@h9ton_X_WzM~GULx) zS*QL%FXp9X0>1TC0|ZPuF~n+QFmg!0^7bpsi`oLoH@|BDC#LTc+QQf8w{!j7HqlijlM(64UOSV5>G z+_pZm*0Jqvmprx#aBq$M!F>I|1AxkbD*9#tWo1#pP+_=P#@&qLuIf_oPzlu*kbodp z_1ZJ1Y{YK3}j{4E5WW5r$Wt8=E*@662uBq2^bsN zS-{t&xvf#}aNeDMY1}b(R`lVhI`t<<5OoYA-FuNXDiq3Xk4Jx>`^l%5Z*Hr~K@U|x z&jh^RG6AiyTdPd@l5@G*77o7g{ORSz?>)V|RW<-%oL}7{|L3p6#A*_sU%c%o8jrRV?hn-ly_z95(z{eK2efI;$mw)!2bIUuL44;V$cfXYIsX>qdpmK|_$xF%;WR+#M0w7B7 zNgr3-I9L}BGyteb%}zs&(Uu|G5>OR5w5Lv!9n=)P`?PALWsP6|TaDGNz{z;ID z2z%=JBRCq?>n=+?lNVMvQp6C^y$;fnKNe=`-{btLwBOi z00Dc;Ti?~v_DLfI(AU~)ye;zo#vg9ZKO=wW6!_w4|F%HVoj*h*Wfy}UJ5knvNm(@d zfORfoDo43pInT93sNN(kQ*JRH(1q=BWhdAHtCO$#hilbyTYAGbo%zLj`cMD@2O0pV zb71DH0j`9AnW@GQLdl3!0mN2&TMEGK>9ZyNgVkh!sp%CNA z=+{tK7>7>J_N70QfP#&CcYYGM#5mR|dDMHNP4j=wC!bor=?hO!#-GRZ{d*_c!oXY; zke$BLBLAPe|Mc?h??1J?kH$CpabteML*0nAU(*FeCxzVgEI_VD`{Emtt6BEluUfwVo~e&Gm5K6)lj{yj|!8~1E{7fKGBFccee$lllXzmx53;LrJ_00CRd{QYfBfbR~tdepZ*{d|l3 z&H39)a#%j_ye;@c}&WHHU=7`N92XUQnnYD^`$q$B1fbCrmNDh$qj)Bb|mzN{U z@3i#?Kh)CxHs=pMvCUxT&-649V3`1Qc=-LQw_IIb{0iG5c+IDF%=yQHzu1+aj@9P; zZNcB8+k(F?%kIGQlVguz5>O?cO#@tIk_@4bXDivbS;wpPPV3rou2q`~I<$<^x9X!h zcLrskHUAY!C~b?DIS9Y$-D?M-yP}UCMTTJSLU(wo0tkGM9fmq%7LW=VvQXmtE(F;P z9i?vfL!A4Kllw^ie{IAzBGCb4dY~{;w)wU-RlcZvy;~tKi{ZhXCZgOKq=a!EfWX>1 zdE$sq2Ygej@Nd2JVkxBGcm7y&{^yoI)Q*OIN!#jY&cEWCXBwoOg@YrOg4Lbn`6d6n>+134 zhZ^AccNf>O6CAWT`Qyjy(;ATxz|IVBn)qg!fFnotmOt@H$Cq#a50|C|e_Zy7r*5>g zf1C3^(H8tgDyP^!FedigOB)FISNFHHe{;AMU(NYHzn!3GbN+}%JKuU5U^a3Q z)Fbsd(+M^gGzi+nR;lQhOPPOKx(Nhk=<>e!cz#3MwM2Yr71pH07+u z6h4c2c%@AlzrURa&vIaO+F44s9KE(YvmKrL{9EF{nYmBF6W$`oJlg^+Lr&I?U^3>M zF`=R>!|B}^z>-tdv)s3BfsZ}4{4dWwJ1q)iJ^W8CCI6DP@bex60Xbgph9lwpmxJt6 z1JbvV38LrP*LOGP{{wBo-)marzlRJ5WgyL&!})_3l}=#%SQ7x6cSlXaQh_l~`{#nc zuG3u(X`H4{L0bP0oOuUWLEI75gAPDKJ&O}hUrJlE%Lejzx9ox1AC@`hWd#h_UUvSH zLRC&3Hj;|1zOv)j{wTm>nY@|0ceVRqxOdg+N%me$59U$l00WQzF6vGikG*}CJJkDAEjs_+cJ9MF+X{VG z?=GtFh%sg2&eLy4fdS-Z{#YG|{9oJZrg!;}%pd8_pZTD6LiuSRK&N0>hgrAn`x8&L zw13;`hXsFA{pq+nu*orTdML&S5FF#|fD4%ePHkC=ycKg9qm0Rxqu22%5Mn)2o2cUk zKe?RBZe@p64=Q=DbUS2V*tH74RPAl`VZU}CEcXvQ08qw(u$7~%n9NQ@ojCu-vnr62 zK_nqkr&2l9t!vuuR@+-jV)eH5bMuD{;S{`0(7zi@HT?cNi>e~eWuuT9FZc;4mOoQD zN*L!UWj>tjiMG4JK)^SBQ5+Ve3dsDieg0VOAAPd_2wBX?NqWB1KMTVy^m0^5b&Xr- zMvyJBr(ctv1t1ARM@PMWH{4Mxe#eitI=fBKGELE*vp=gj+dzP40?y4Zj$uCObO7s- z>ILgjmmZ>P_=_P2YFH7CtNa5vAmzT!PDNJhsh@aq`PyfU=>V<&r`pQ=A9?@T<-J$i z3j7WNf{yN_a&S%_lOY$xBzcYleX}Wrmo`B0nzqm1oIg7?(1_Fisy8YNaFY0oOh9E< z*fxDyi~PSd_xWShN02yw<)FG;iL6toGphjP3i4ui?OG7W$Lmu7sjHLzCjHoXLpIjD zos3Rjm!ghV=~ICUzNY=DsjuI)t(Cv9&^V;B~2&a)-_hFuE_I_vT zR@)xRGpmJ;RgJ~y(|Aq|gxxW4W4i;82|zup*k62JI3%0i`pn0jb`Ze*WSM^T zg`>;&xB2?_wncmF+|y?gFvuu4@Muq)TcrHfOQ)89)13dS+nfD3@*naYk-s@{IEpR% zz;=jfY2R&opl%VIHD_5aW@aglC?a`rIde*d(DXTs9M7Bv@rzC;0SL2u&iWGsxQw|D z)r);GW|npCKg(IAa}@}HF7vafU*%S1pLxL!ypmz!{~oNr4>SPS za-Lv1GhYQk9k2?A3Le_xx*-%Sm?+2fEAuO%)V}gF>Wo$B_*wMns5<~&5Eo{{#W&GB z8#1IoS>R`I)Sq5OQfQNvHt0Zx#G0kKQ&w6w++0_bS*L-mysruPqo zjN|gtIkh8$k6vFs_x8QzYi?_=(IwkMU%;C@?b5Dtd-Dl zJGVBQWCk+y8>e}}0mpR(AypqZ?L3XOX9?n|DbrA;ey5199_<+8IAkRFH=|KIvV*8? zl7rSo+W}yU0Gapbn-6fioC&Dv?$=U|Mwu}_0F;p# zK^AKCmuc)gL6%B^Vqn?M&j?`cq`+nQtWSz#qw!JQc=^THw)g%90{k8WQ~MbWhoiJ~ zcZ+uI&5{55ea-o|w7=R7@E1`#^hkjb#>N4`mMwss>Nx>ix0U&s_AZ3)Y8eSX^8hG- z6~rTUZ<+jf%5oA2r0kDJNBbktl_<{7raf_88cM13hR!HRxS4XG8F*O*27FEL>+_&1 z^QHnE6`(2g&`CAhhAwyq^vi)h2S6FDzbm0*K5ZesEn_k}irJyC&~6!xEn~_8$j?@Y zna2o$hk*C-HW@vdukZAJVRF@j0rse2C^FO67ecx5wztvcnwgG6K`fGLI-2rw^z^}gZTHog%gQD@u*wYsjYU|!5K~0Qr#sIvi zWQ6HB&E-?;Lk5yvNq=@A;61lt3$!?DvbO9HpgvC=WEi1t`)UgVpMLB4cJ1u)ZTH1F z0V-Dp0_=lDYLGFM>wm5N9!8MN80~W!B8CYElD{ZAHV^m7DzQcMo7-Kv!dLQzC!K-l%x-mo> z#LcaLHiqPw{k`g2YxAPlH2^HrKxKayEh_pb;Nfvsbu0Z95HKIOt}WVEdcZcg;_H@; z-ja<6+w}vT0Z_+Tp-&aUP=+DE)%UJbt(*!aelsIi4mjITAfRo{j$z(%rUJ`-(&ttP zwhhl5qmGp)4}(^0Jx0VkrOZ7r8pg1jiXyu0<*X1nrpow%j$LUfYVomyPuU=Yo1X2= zzS&s+#2-7oe9h906$z!k0@lV0 zU@(KobbNg!KM@DIi8>~*xU%FCk*jeHInTo3=e$g85go@ytB%@loEUi@O$R_Gtj5dN z!x?ThL=>tFSq^_J+vkS)( zylDF?g{4Rn#%40s97U(`*hO2^Q5m;kq~`RxkA)KxX4rebhQar5UR`l}!iiFU^TdLCKM9J#(c?Y0ZcUv3~kjU@PJk*J+o2R-1w%CmkiX|GOT zg&Ez^6o5!UpRrvZwl+w1{n%*R9YV)Ov+UdR{uash?uh&B)zB0zUv4jt`j7XWUHmUv-paeanee^i{oO-NbZ&zCZ|Nex{A#yV`pYe%s!NC?5uVnA%WYIc@kN zgM86NI|&f~dOX z25q)1ZoCUB2!{RN{vA%Y)pP2|wdFJ0bijXq8>N$z4j2Po9E7nm&jxK~%1q<$Q$IpI z0%U5qRmPO=vknBXs!oh#eGd?DY}-d^C~}8|0)?mUnl$7E~<^*dUnef?6eaPqMHXE z05Ag}99zoQb)=Z{N*syNN=+HF)lI^+SiY};^<*Br2I6_p zFkU6y4hw3F>3*~=5c~mh{@^QQ$(+8;`5!wLb876oRnOUOpiNxcl4k`JOmDl#nE)OK z`oRkWS(ayc45Ipf85pEE^o7DH5-T7~*@4Q&YM*uN6>oIcuOq2F@gY#=IQq6TCOgkZdOSc-qh`HyFYS5a_K0S0%O zk~JChOC=`f8?>0kpZhx*3v`p5^aM82IFI@`DxO@x1azDZ?e>b6cC9;e=g^dV7zP*? z0Aw6AV1vXCW5||QOBsTkHX%c!MoWJWAjNzfAOxMZ41m%$>H=+M;4wK+$2m#Q_UH7m z8_Q?6Ou%2e{qklCl;tB)bH;^1GXu)b;URZSzo={QzXDM_mWh}2ERU(8pMoRQ zc{9ME>SHCJm5tW=d91tmsj~54{(ay9fHFlL@z#A69)DkcL5Z}c8qCuO1*xHLc4P#;#5lKeVL4V7zH+(yA-C=U~-xRjib#l zO7V$nqhoU_Kcjc{O-TzxM3@GF^Qq)vqA{gTCm9pN*_T#LbaX4)X~OF*I^SsQpq5E>xhL|Yj6l(sMsAb|Bk4RtVp9q1g z7|6yP<a84@IvB2Fi|;IBm1EaB)UmTY;1>w7T;h8N0c|?K`N1j<;=4SgTx2>R zX1xXw^!iM`+n-DAOavYGmLuG=&rm$i;lE`%c(zGM$v0%$#>}NhN=E-_;ir;8O*J!IueA zw8g-(opd1(9sm4{(=&*am$BD=vq?-nYw;6jI!SU!@YuzZ_>~)8Y@iJP2oYYK7tKLG zD2AS#BSk4*=4gZVydhpOHaFtvcky0X@lyUDr6LirW1>%MM`5k(qU5Z##)+%?4aXGtHa9&hq5P;`ve zc_?hU!Y)HD^&#vEkG>8`(W+sh#5<(v)KBJf@=LZh+P!QjGdD1Xqu8R5A=%gnt|xLU z3HQf4S21Vx$35$vuJ6rXax%7s(0NDRiwVm03YJ3$bKSW>mn>GAUBB9nDZl9leWm8A z$^v53IRdly$K?jCdkUuee7aX(%{TwgstYr#LLBHt6^R5aAZ!V~cUHgRHJz-iinVG@ zWYm&V39(pPYpXIf%KhEh?50de7_&R&&{%h$t98WT;NwAeI}fSGdf4^V7EzHbRVa5a zb*%R6ZNPkff#c;Flr3JNyswC1t0^R!PBC)aVpmMIb?F{fDcU zcZzw$HVO0KrAyh+XM6^jxMIk64CBzZ&vG7fm7SiS6>e2aa=zGpT&W2hHbt6Ws4~^dxDEXm4}ZyJ z-;WKA0sW4R1HPKgcK=%YmPdl!@+cTm>f4II&i*e~QZlD@o@lb4NDa~`N?Zq4G_9kx z4&#Qb+I~9eUwN7^|3xI6YyS@Yg>8qCTBT z%%4*?Fm&&$c`iAN9!fu(n&4}qOlVuFTNr1*xt4gU8tWn?&1yB1VIDE@DSY1;DftJ~ zt!U;7oVN)*yaPICHl&6>fNosL{Jy8thqI9Sr7qFe;K7|bvs(~GyR z!kg}w68jGCK(NyN%q+S^Px72hnZxkn2A+J@@2}f#6d3%Xt9TXrLgf($UohY(Cx77W zc?QaMg1qjNv{b>b8H@&3rZ`?8OU#?SL4rAlTA`P1zxzjQew{0zY=sWREIzV&pSh63 z00H$s)J3e5ehzFGEiHjahlHk?#T~f1zlgL`RSiiT9(xEdxWlE}(c&=^frHne?&ERK z56Zd#EUc!AcPdmE>Oa0>#)pK5M1{y=y6ub4jE`b;=4-$=r zLx+I1$G6^8r8$a1!Y4jv1!3>tO4lim9kcldx%ru3SzGE6PomM7p^=gbL7XF-y0@nL zaV*1ZWu98v^cRisZ+j(Ae>lP>imtt|a56kT#4{+t@ZH@1V@ctyZxy#pxy%spa=ncY zIM_V<8IxWO*eT8n)(Y!3qd&o(1q=V)Xt5ovdtL-q-+-i|vp45u81C8+&2jj!AWK?R z-#y3dL8zb7afu9{Qv4$Cdqu!pMHK@2!EHRPi)#4hT<6}JOvOFvd^~0EK~p5}t=Ra0 zlT$N^u0b`-ri6_Mw2a0{)G@X9QZ<3wDP4CIPxg;3%?(YsWUNQBP=Uw7!s;dE(DSwWC73dhY*KEy`;UmsRSUXRbx1Y>O40*4td8OBJ){mIKc3W)P1gfP>YQ zep&Ju@|szs>EsdG{i@UQBuD;_rL=g+jd4>d{Ds>dq$V=8j?Cw_lv)56adDe z;;%+!;(E50;^IJm)4PL4@P8%s1zB6Vg=1}v8(EU*GEcvyR^ zA{%ppKI!zTghCA5vUUYG?UJ18xE2NL2QSt=unTM#_yi$F3}b(S(-n#CRIAy{cRWz2 z=m_TIV;idgA2O4CLyFp_q1}a7A5aklfS#eM3IV|#hCwy+>eNhDA5@}Nn%%><)$aX=B<>r7LhL&VDquo5G8;OJj_zYE_g>HQ_1a^Y;1zLtl zV#%7pp&OB+JtG8eM5+$%-m6vpIM`9W?V&9-jd#82)(oo`XSg1vge2)OxuD|~x?dRB z5>*>r*f)M9&xAzj9ULyzGQOn2xmIq%KV{-Jq|o9xX826)e;oVUQkbrXSlOk{z>K+< zoDj`@NRdyK?!3J6;qu_D*f2?hOTYkhAtlj2+!Aj4Yg8LeZ|58qt%+HiL)_8S-b5}s zip}z8f+DYVz#;y{OQ>b{ck4D^rvVp6VRjGQ9q-c~E$#|A3U=zuEoyDexoVYde#WpZ z5^n|nTOKHm8AC2O$UYL|A{|Wq`v3si$UxXtz6D5II%+M2Xl!yMslrx-5J&HgtS;WD zymSb{`QBDI8{@#YRuUC8)zK6{ZH``q=^EC~cwk=?B;@3c2ZX~HjUsUz-LdSI*W;so zshsGovU;PC>#(@Te!y$XoTA8~F6~<)=DwPCwXU6?Ys#h->$)@@(kqRA+iz%t=K{@{ zWSTP(NThsr>IjhG6*sh50y4-E<@jS{_g$U1xT{v6fJ0?eC83u zw-%d*wO#qI>_v?KM0~0VK3{LxYth=}$t-@XV#y&Mpgi)?keVQ<>6woi5JIm@M34>} z-tU0`TC^I`V}uQ~r8SaABET_jPkz-gE2OM>>m!;HjKK8hZYI#P|1}!h-dCwnl!ElbI~H zX+EIsj!M#K^tCj=lvFw$YtHudUau>m=UPt})8u(BFB%t?{BYmh#;vkj8NtPgyh3E^ zP^)3StkxH29uxKqQ|ey9egD_U+qHndn8X5U6gmWjgRtx)q_?9cm-h%h=pMc`Z-?5Y<%dJqx3D#wKd7JSct<|xQg^!q^k zxp|d|O%}tAwRl~EEJSR^ZuF!RS~@X+h4VuZDg;aAj9S?|nILui-R){@zC>e6@4&-V za-j}Y6LEFxyVuQ{kt{`tSqRB{36Hsl@X{@=@I(dS_}l%NTD>@Z9n~1kokZRL?W1n5 zg9R#AW@9=1)bpRIvMA1~B4EN81S~EKUhA{15yGlV#tgJyq>txA)nBfK1dd@(R-32z z=))V0%D*#`c}`rt_2Q8wZs%lb&L@Cf9y;}waiOKfyF~(F?o6WDDqzvMuBoQq*4@|( z+aORe$FKG+w+My>O4JKo3|%I;+{3Y@?n6-@yn(yXifQtM-xTLo~| z`Q9^h&?I7v;^R>&41JA_7$Nx{?JaLjPHHb?{hVBj!PHs^f*75ff65oYarr*Dkp&A? zq*dH%SPsHf9X*AgK5dFF%?I~ez`Yq`I#s$l)cb1hp`)ZoB zHUW)q#nEL*pa=x+Trq-SG~Z4e;buJjZFAV?!FrX0mmgVS{=d-Y7J?)dFs3I>c(=3< zYq>yxMXqY8U5~$Aaj^LxO);oYNf45bU}92mFYrW7=HM6ojw!vt_FAt&h+1GyBob5{Xt~!^1vY1@`t;RV zP!czk7i8ssXIoerSenR0g~|tq>1{s6Vgm%BirD;2-b_$P9d7&ba^~?v>35yPC`>ZE z&LA~v3{7!z1NlFwsVH~tRq7h`&QbK@?|n|z|MDbGO6|?g%!8}~2uXHkap3KQ{V(%n zw^xxC`Y0m6v5hDda`5x-S+@stnDv!mQ8_Pzje?YDK@XoF$N8gAsD#z?A-fj%dC zlz1Hp^TK))*@WT*Kb+Q5@bcGuV5Bxvy9YKu39RaV2oHnGhOadm(evxk;BD%lIkRz< zCbdQLm4~5Z9ZnUUOBU0^{sb|Lgfccu%D!pQ&Zh}XGX}2OcrtRvgvO)JS zNC~^WtRUEY$qem)6Lco26bBY2jAWWKs=PhZCPQykASpT94Hl}# zqIkzA>HY?G`>%2r_bC(_=NFT%Qw6Qta~y2!HB>{Te!1QG71Fz|tUt`}Y~{#$?mjZm zm6Ebp_4^Gy4;V}RLlqghs|WVP(B~lsw^gt!x{jR1mUh%L4#vMg!+NlARx7`H!C)&* z!nAio3C-fOoUo6}j)WtfIU@tqI*r2YeY`-%V)gOXb$SwHEZItPC6;bN;ST%HNU5Zn zi`#%2iNGXHWF=a+351oSIeFG?w5A&}CQO-Q^PrmYYcF5XY5lX2Djo2&_o-#A80?S? zOxZ^`daETEi0b6+HSM{^8&fAT1X^P24(|^%@s5?m059k8} zXkT*?sAJnAig#fg#$A{C;icgvN{Ntx`9_Rpb<0{Jjn08pI6VO9ZNjkkm!hM-PO&`+ zs30n;FWqXgBE~aX8O@N&ivgmE1@7QQ-8vPQo}B51@>z0II4JG!d8>w}=0b8ix1}7Ht}Wxgd&$KNCRm0H_q*Sr`5z zcPJj5J4S=65t5YkB}UNI4^fpkVWC^_u)uY=G9dLEd9Pz}i0T3XW}zHpW8cR{aaCT; z9)IMndrsZivc=9OH>(`WhG~KMMOrIl{tNeHwhd^~hz94T*Up$>8NxmO?Usie+t*Fjnv`y}l>HhQlNsF|R-i8sSUrnz_vtvXUJ2_s+AuMp`c%2g`R5xf4 zNK1iv1F@QAsXyP8+)l(>{OFZTJ^RVE2iCsMG2eBz^9^py8%wj-!@KS!y?*zV+KRo? z`a?NO+OY6D!M^ru`Z1y+gX)IYkc=etwSVRe{Dcor_8t0#d*&a50B=@S6SPHNJk5I% zWX|q}Dch#P${kVxJAXtC=xC~Qe4--;l{Y?k^UyaCO>gNuv+%ZRCO2eY-X1$m>MBL9 z-p5@bC3ERNf-$)iC-4f?Yl;Q}w?!XyX7)GI8D#V9BBXC-4)-P!yjcT7 z>Q(ys{*0j)2 zDmW={Ey{TqAXjJ2-HYLQL{!lg#7hR}UsD8(0F0I^z(sU4n-~m6gQ@7_Ko7zf<*CK^O&g+UGCJ3eLZz6}42^ zkHXDcGve%2-#B-j8O?CyYg;x8g!z~Ur? zz0>i=B|yxtI~$~8`F-FXM}c^rK-9_F$1cHC6u^(S_$)fB9;m5gN~;pNlN$J}U^fi2 zRuPTa;EsVZFTDC@(YxZ(9ZlF)nJ!|jdt+wsT|3v=9ucQhHi8S)2LRCu0f$cp!S5z+ zvIgEg(!R)3lEd@Iou?Gd%x05RTaU=(+vK_Xc1x_RIS0ZAXP zN{}=}C0ZZC!bMOg%43&X)jnD{vT*#tQ0|3_KZ3`8u8-p`dP|K~z=Q>Bp_<-O_( zy&#&-jqXnb!bm~Q;53FC{O{T~hs~S>-`g$c2Dmk0*?~?grIgWX)4S!aBN4$Hy4256)CnE_ty($+^URmLatYo0Eq(cP5*FOSk$Z=#^jjJ z0}j1^JwA~xxW@)M_es3}y3|8AzCo3V?%Q#k2{q)RblX$!j$^!Cb~BR`C;z<3?&k>O zo!s&p;DPx|{CcOcmJWac^0JSKJV$i`Jlge{%Q)zlpy+*ofp*;-yx3*;A^Uxl;hV+4 zg5M@BkLzDYU)|QUry#VLxlar6xy^K3S5CEGgdJ?gc%u^#heYinK-FO*oOD7oq$2ur zZ`sFx<`Vl;P0ZBa;^0oi5*fYfbDS-5u^EW7`l<;1Fty|<`xCxJ&I$CNW&XN!MG<>U zaX~t@^coQhaYa6Sk4Hl^B}G@-L4EaM$}7!CfQbu%W#Tx$ zQ~l4j<^$4#>C21pOt)h!E{b62V+cDFc3P zjM_-TMSl(EJKH&0kuIRRfp%&lkxxJ5q4LK($91mKZrZn{rUDQ3Zonary1)Uh!>;M$ zfyc_vT`qVOQ*l~novZf6em?dy=>gN@8Ba1^Sx^4rKH6XaBhmj>3=Ed{|KYexvX|JV zXhUzC@x<8l^BN8+YLzrVc7}v+u63jSO{W1S11WJ{l8xu{`zOtxhX5= zeQ2&Jqo|p&CbAz23ceJ<1AUvOA!f0%s_kwDn~1`qq%18{VF62j!1J%$H(45(cd%)1 zB{MZ+^T9WwZ42iQ8lA$-4Ea7#U159s`cL@4+Lxa&`&@K>)ZksGUNZjq5$Y*DMEA+; zfAjd}&%l!W)mF4}0ZNG}@=2tt)K{S?mRP%^Qs22G@B1KHQNp`ga93*{tUZ(RRI*}S z&g5NeyB(}Jqq8>?n06(7eM@=OnEyaOGP1IBRe=qV$MB1Qvlf|y98DO$$C3YeH=sMC zP7VKV%c3nk*-*4LzZb*Glb{yWA`!z8B+Lx3Gm1nL>k!bLrI|Yl-tv_PA6bjmQR>3d z9{RxKfN3mwwT1)^c%Ls-BKMIuRpd2gYM4RF{Jx*A1>wMmS#XoW)aaWWd;Ii~CWcuD{Y{J(AdcfufY{|hxf&wHRJG!Hu=Y9Cgz&(A!hoCl=qex1#@Ue#=&S<% zU(9FE3T~3}XPI7d3hzHzs9#U+@^RGzzSn6;%}Xw<2o z4En{SdX3`j{sckXAK3>dm%FU90yy?J_Fe+se^uAT&}pbcCjo*CNSk@XS@IczLRvt0 zC?2x#Y`mdSD{2<%I-J6PaB%~Mzc!%Qj}|l+EYN>PeMIe^LviDDrA6mckJlmY8cK^9 z-B;8P6E}@9o4QC#W{9V#dfo~^U|~^}dWV1H%EyO)tsLuXR705%yyR)8Ptd@TrgA(W zCyQzp3gslLCnB=7E8C-AlAsJ`GkI@jcLBPp0Md}GT1|BOB4Tb>^~@D@(BR8-8a zwWk78dT9JxlgfVL-6EJ97|^`Nj3rt5Kl-3pPct}ysP9Elya`0juj`nj`3n#v-W45J z9!PSaLf+y;eV8?E*x#N6MxHvhCYJv5uJ6IST^BuQ&fMZ%pi0h{L2}7TVgO`gt&JJ% ze{tJ!5R^RsCTIYD)3sAnRRlT;OB3<_D)OdY!_-YIdF!;G6Nq6c8-k3(9U}ujNN($| zu?PpTvsS1LMkQfy*S{tQ!e+K?yC53n=PpE{bZO!KG zpq8rLZ)aDFIIw|LV(q9{(k+!mk;_9<80q<^W9lj6LX!)u=+TF4K4Tm z(@2WNAkCLl`2Kc`9Xct?Yx00gQn3tak5)E(QzAa+{72E}LLfp~BAmbxxt>PCgawBu*ww_oJn&E{l~<>BcFVjxtSDwC)HgWQ1> z4N}vy=jx_1a8ub-kFNi0M9_ z%4dvu$A=Z?uDzlQTQ$h|c<^wKxMvVCh|c;w>sR@&eoByJr3Qst-~Sf-&J_8`-i48q z%$tOZ(UO#?i6G2aX$q~aNlYDe`u1b-F@<8)Uet>S91sa^O}cY?fMcM0&_IZeg{P+QGOg&OMK#1x|RU(l56N2roElpzTz$h@cFDLqyphGgo|ORaJGlT}YP+6iDK6QJg=2b)D)5fF$e zRa@9hEs)r z5YzxZI8|{6@fll|X?37w=VK@PWyc~G0bBaQq5^MC3YP=sw_uF?lr=}=_bn}<{_4cE ze`}31uIrUUGyeT+AVL05(8S7LSywEM|& z`mOG!x7{l(XuK6VA88n1NM~IG`uqIULobnm0j4mZ%2d=6`ML4+E8+2ILU|_WaQGf| zOq`qBARU@Fneo>3+18Cv8y{7BHR~~+{FTe&z)U!jTzD1PK!_!d=N}r4nbPFA_6{3v zD|FWAGr!_sxq2ps7RiK0kirh6x5l0i=#%VnMeiqHx|6_zY-SWmL@>KQ{(UzTEst<` z>uFB+T&3dQTM|{w&}WsW+G4GwFLx=V1=FV~q6w#$fVyTHGE)mjR&EY23HiUAJ*UpE zRA2(Q)GM983Ryt`nd6{F`KmdV)T_qZquxbE>_K#@{9KV2{&0gIq){St9-^rSHRqP$ zCNBN~If>sywo9EQWa19l#x^CZO7yIV&ZXLR*UuOo8hC-6TQ-+R1W7z@u6vOTVY*x- zL7Bc2Y+M{t_tofubnGWUvbZ}xm2lN|U}}H+o{Q^gb&E2|(C_+dSZUOPF3l4QFK((x zP?JTpg(9)Y^w1?RwlSf2Lj-b?Y#);#mp3y6o-%iXvH9Q5T78yr|L;=AOMQ;x5G<9; z07Yp7abK|Yz@zo;kp6=226O3~MzhS>QQL6=gPai2CyrOhOBp}~ao~XQ7<|@Y}&xm>z^AsQamT*PPQkT+Hdx* z9=&Co-Qg}$SeV8KxBiP;t&>$khExEWuI!$}J&hcL(z`XB`#-fnQ==uSPt+y)My7MY z?<0)NB}J#D|2Euo^)zpc&V{+@z{D>q$F-f)T9o-*8+D`XbcSvb+r!Dph?Q5z9+E2j zOczT77?F^JjdjNsqnU@y6NN-`E?gf;U>rdPlzHp7LS=?FBTttIe=n~!Vngla zi?U0r(COY$%Y3@WT`^Af{QC@S)hz<VBp_=?->`mzF}Lt@5)*>Y5Mj z^EyPlVd+L6r(^uz^?Dr5K6kcfK`O=T>Po4Qi(ys-t4f}%r7qzaryQ6H=6qKCeNF|Q z&OuPq736>Jp}PsDmyfe&b`fpjfaM+(r5`71bryZRe%d9zCkN}wHtPB-txd{~v z83hhZKRWW|D3Aa%!+9}|thPz_sT>hp;<;ywPpM28KVEN)&v2Q&p4;Lb)VG@`EPt39 z99*#(KNF)*F$C3^HA3j~o#Opj(fD85YO<{Hi=55` z++taSi)IuJx25IEKPIy-bX~zNqX&y5R3Fq&fTE5|iG+Uzgaa_XF1q_4qw{G;%=b&b zb;a~BJgdJ~IX8(x6BE!j*2^lBs((d%CFzW8@vNmZ&*gRw2#Tw|($jitDve+i#8o(> z#f9awI*;xgx~k+~#ruqm+)9_GVdeZZR%eag0rLOWZ4_EF2YdN!sU#Zljo^~GViV*3 zHH=-|=gS;)4SYGPR*?r1&ID>zFZY#f$7%Pf5{!3Ose!cChLEX`lDcAAi?@bo{)74U z{l5CGMS6o|E7cEk!sC&#iDOnBRcblv1ER5doS>|$nSAhk8Vo;KS5}$&jk`M3P}@*X52yEoM-qO&%)P;rX*mGN7tZ68Yrl zU#Yz1a@Fjf0-TL`=WK|cbUqfL^_R7(+|u+%3X(C-qE7WtlS2UVhgM=%6#re}LnW_g zVg(JBI9idM7Xdm1DBBMHY>TeRrisv&A|H`w1j4|=T<$g1YN=`+WUc?KM>j&;q7l_` z(bz@rG5iPvV*NtFJ+GQT1Q&_>2B&?`3wQ`Bxasg{M|RZ2M{B};FX52P(?<)b=0(y{ zjc@FSPof@=l*vA6=jD-i$gIYy`;g`r+HE$H#Qw}vxvXVWFr(~Uku)g%5{rkAay@xEziIg5HFnc_zNqiyu&cWM zT4j!}dAT;yJ@9pNufyd+Y<8E((?=5f_4${82HaOxq+sA@Zo}E{m57fiA%0q-35i-E zspQGI)HUVuUZ3Xb2F~3e@uK1aytaLna$`BQ11hb195eGrF#JKWWwK+Uo!t{fv3+-; z$&QWd1OTI-y4_||ZslU%QnSxn8Pb5G!Xf|jVoq$F6Ebk{ zj26w&Ju$-B%WFKwK-(XAze;#9@hFKJy4=D?lS=!@v|eFa^Zv(wHT8T2?6}BBayHjO}9_&%?C{hB`{;7)E_1A%bW%!rJdxI1t#?3vvzpsk+CFm(oV#`DXeWz&<4`f!tr(ila z214!}#-sT9Pejfp!g8q7Ncn}$x9N_j{0hqP+3_st3u&IouAK?8#9tn6z3BYdCAZ-m zccNx?X0QgSB-Vh>pAvQFS6&62WbU40qUjT())AXWl1{b3jmjd;^}gMQl<3e1p0g)p z_SIlSEo)dVmLcTZWt%q^ejmnxep98Mwdw88x{ZBZgYopI%x~^N&ql@lYB_Gi5Q~_| zm8~}bivX|v9o5Wtvq5mlFA@-MQZyOp{dL7DUjSIs;=-A?r=?l}I zM+c!m1o$1^8n$;Whm!k!q5Qj|??nxZe`u67D?YBxy|-?*{a)m3d*5iUDajV>@zb!y zvoimWFD3|{uze2% z89it1un5kUhdZw)#uZb+R|6B>2H#imYT^yLtxx6a675sRNYwc*Rny{l{v`lS?p(G` zQGAZmD{@*0H>ms0^=kc4tHRq)&_Xw{zaZ_ld&^1UCLT56ED|*3XvGGb!hmXqUz!ml28X4owsY=Srf1!WIcONMlZU8@jt=T`wx!s zksq;%=9LN`*5=SCn}W(mh7l(1B*SH~>iZ0jET#DvEDo1%b#PFWuIR{yvDd=CK_%Gz z7ZE#-+?FRJx9BW2$wG(;s{2r@{35XmecNHh@+X-g$_Gf||#0BHjxjo5t@C9P(Tf1IKLepz5iO4lPX3g&HI~*~z-r0h-V^eBNYgYo%9Q z01hqRvrtCW{}R3Ov=@pWud5TI@F1M`0JAIoTA=m~cSn5%99b?>;m;Nv)94tN$|Muh zljU?ea!PwpTVT~Do?l}I*k#h;KPDiSZhhwIMeH03@|(t&H*}d+*^Ykf!dT}gJS^1B zQyi$!fzl&grnQ^Xjrj9T(iI0Wm1;Hi>!fZ^`#}@&^_wk8VQi2Wm0*#K?QLw|DJj5D<(w(%@H~ldU7$7$sH}aLfh7y0)yW%GO&Z4|Y2UFQQU( z^wKnNe^-Dn4;&cX*wDf)hwPHByt-Mh<8~C~QTah~7#X5AUq65&r@MY@nd!gvTu8V; z>23Jd*N__;t*XxOBQ=P`SsjlYjf=UuRY{7JW`5x5Fu?J`;&&0g=q8oPov5f8{^OnX zQ_>aEKl>1w*_s&_@aN%BTDVDXvEXcq5{n5(<#tVg=K!AaXL$(gYxRELYwhQy47j7b zQKd14o@F9Wb*sl^SZ2PY^s;#hXKzUW@XfJYw!;P!z%JojAWoB|=QHCGrqh%Z#7Cb; zziJ}wEx9eSrmvUA$!gyor<-^@yZtnlc@0?~oxNt?e@4Ye(zVT6$Y4p$4u%0%gY)!G z(=(|GqU(5r4ix7)&O9_;-IuA{ByG&>FWO&5(onehC&u?uNFPzMNi0JEBx8gMG+V=c z-MNK?$YNCoQMTiN)Mj#6U|n_8Md~B-P4b8Xg8kiSt;NNAQ{LWccW)Wky+II=qL`y1 zaOnF4S3XC2n8feACaXAU_M7G!qgts!(mRW|Cl`CE}niH#Wl2H|vWT z2o9b`=p)V4(PjrQ^;A8M$?wGYyZbtqH4!vN1!DK`ZmcA?YSrOM`66KTeGA*m9(Ray zZ0<2E+EQ$d;tv^54TytkhTvpdrkFLgT>w*jZ>Lyr%9SUkhNDy&7y_cHdxHn6hkdW@ zA3=cF4(E+G%Og<|H-0z(f8rl~8auiebJS@@TJkE1h7jYek~znMms)1!mTh1Dac`Ou zc^p#kk%*yTAQ04%gBDbx5$NqiDGx9sEN}ijz6oo8+iu4pYUK* z@;3qel%^L9YRx+8>WWjaV}uMrEyNc-H<*#fCNKX8Wme%+FpewEoLD_kb>dc{J2Q>g zYw;M`6>$TQAA&#U`@_S!*`+O7FUZ4BOnFAsl*{P<3i{e9GT3HnqRI$hhb zEcBuBTv#wFRrowHJI`y@O45M_%~ZQzGh0uj>2g@gGzETrK^3d~vH=BQ6eQxBsNTJuUm% z=q$7_>!-ft7KQHrvLh_h7}{3pR0YS5D{piYTjotf4`hw0!%ThqZ^;G`erTr2zbGuD z6#7h#{xYyb9y|3whcr}sQm6`?DG#$8BB-(gQO>jQ#C7jSBFE}Ka!rmqgZFO8eTxtH zB*r-F2_Ib$+Q>?PpFfnm8!0nL`C zVJ35i8~6vJudziWUAF{e)#k!;RyH-THe!XEWouVHRccy7EJn`=BTSV88ibsq?1

#H==XL^1M>6J#<3*B{RkSW-n%1Qip?4`C(l;|FuFm8fL$e0cfi3kDVzF zX0@*lMG+shGbk-lkn1d0631ICi2jZm^FHx^Y|B{~+8HF#yM4FFhP4Ym^Jk+PZb(tk z_DquhX$o6!1XA1oxe@FIxu-#YMx_RYvNQFR#8igPl?|a;MbvR3;q%)A=6m$I_Dv;3RN-AIutsRtaSuDWo5uKwFy$O*1%NNzXq!UTT9<1ws~D1`RVT0-9{~hjIcT zT4pftikQC5V&#D&sJsR(l+kfSbrZ(YPE-`!3_oN=`OE4YIL_fHjjB41@b7FGZ)Ewc zpQ%0=Ygglvpn4ns_|ANBTVu5gQ!RpO!K{ zFW1YRHIkJ)3{VAy?QYXaCwa9%C=!~%tOm9sfU$(FJR0T!V-M(?T=&C;W1Cc%45Jb<{I9t2yFG11gGMb~S3ecq`&?B)d~f*0~E zxdBB5iR<>%&!XP3w!^XVKy(F$gC?H=bby%Nfv-&MXxB<@AVAo=T&lX%U}e)a2h07> zI5O9ib7^VTu@4QU*X<>c>Vcc`CI}`%kGM0lWyp0Dm(xxQ7~bU1%FHO5oQ-%<{AEGz5E!XWO?y~4%^ zpB@1)3#KaP5*gKL-agrhLJb-Ix}vU7%Ir^QBV}1?`X)_iCH!TebdXYhN6RJI8Evyb z`>$BMZ3E?mO-jr;^78tN#PVb8J~mnvAOYrDN%ErBNnukD{Le(lv_?fP5@o4df9FK2 zbG?@S6gJD1eTROIP*BVN37o^6Ax6Qta>keo;WX&zGL&0HG%eq(%92(C1z=3f?i2xP zd^eh*!bk4jPmlbFF0xsTJpsMk=8<}`LziP5 zAB#2Xxst#m9ka5s`i{j`?$QJ9v5W@O6$d^8rakHA(ga|$dmaw8<+a*eJsN!7cYlb4 z-b;Z$B_MQMdM}ej!5?qE6L_{u?^LtoA4~Q>WWBhhe{sBq#@_sYFMv<=;@#@t{|2N? zclxpT7CDuun1^ZC0vaB-aJA>D17+i(?vBZ(=8QFYC)})wq+#Q#!Gzst`F<9fJzD-K z07ge2SC@E*B_hpb&8K?N>)le)WMLn!eIh=Cm%7x$#`_8*LIcL$#=;XjE8cf`6CG7p z^9~-5w^4`Sn2 zL)ye(=F@FY=XFf0%n%F`mmQlLzB7r~UxC*DarbA@74QM?e>pSDxrafRVj?mG1GH9& zqpQ`lm`lzuzw$1zrB&H$xmg>s8fCA7#XEzfPP8)u*gQO29PIWa&9sQof4s<={cyX_ zP_jG9IEv|5iCQ5w(?_T{d1itdjI0{31s78Q3=hqeot5-93MOtD}vKbAuVg< za@D4V49(BqMm9dJ9ZWbWtASeNM(zA)9GrhAj3`RUrv{5ea8p-mxYCbw4w`)@Q~;jv ze(KkLjgzZGt?f!fgni*q{obh#ftV_fhN9BZz%`z;pMTJfp54Gt-l~9d&zeEy(f6;R z{b&A&ho=}c50I5*NxIiO_N&Rks7_KTlXs2cTJERkjH9Bd2zqq06a1 zDgazNkEa1Tn;88o0@HoJa}j}M9~r$RYp-STETenSyd9`~m&w#PfaiHoK<2toMP0JM z8oVR+G<7z>e1Wf{gypGMH|65lr!3b(d|HcsA73(6XpTCNrbk-P{3~^3VLS2fQF(47 z@Xno;Ca^+UbtC7xCS#zX(0G0x0+XDh=y33xdSOSZsJocK!Vx_f0$MVdc#ie&aw#@G zj^5?eYO_D-oGNtVMcgg_4A%>jS`RwaoLj<}ZLqj&SGwOBL);ySGfz)xXmS*%f$Dzo z!(lAF$Z~SlA?p6n(~!Oi&gQ)8f0yAFA^rLISeP$+<(P=y5^sfCW>5eF3uNEAQ~s=O z7v@DLO=&;|uPTIAf6?~|m4*#)@7?4RV%&!%;hqQpl}<_sH_R(G65)!^^~A;&(^7pk z8_Vy?X4J3vaiGnK=ik1vuoPV+EEL^^)@j|TMEh<3#Ry;Eh(O~<=@Hcb-I|ObYR?G? zYy6PtDe7a9lP`Ts*gRmeBwkuyANI z+dzf)O*){A(r)8#yD&5Cyqdd3TtQS}bM3~s(uSg))B`EpiRiEBB>>Z1r5{~GV_*HH z>h*NdS&V2?n5*4zoDcgIg*dQ{D66L9UgAcgE0BX8*~!{gM~QAvh1TS<#@y)@{*7eu z#o*-Er#bc6xkl3e+x3vbGpnGPAPk5=y9|ts;h=O5l9COJuvx}q3~ekBfvt%#T)u01 zTdMhZ^NjwuR|NRV8W4#q?(&VH;lGk_2w6h{OZ1Ijwdz&Ui((x0al!qsdBsI5ddx?K z52Q$OH&ZDn+z2#6U;L05R(ih{gpdNze`i9!Y4jwgULF9px6fsx;56~9qDH|#jCuYm zC-||fV7~7LfC_ zP2Xcubd|mOO1*7g(g$_Os=J%7`zV@YS==ddmV8QQe~AL0NujT6#3?7!zHVs77d1i* zfHxHCe8@oJMATI}j!Eo8$)F;Wi}jn=vY{tHq)Fw!b6t!npf&=6fexrHKvp*#_tT1_ zC;F?Tb^PiX1T)Md1qhl%msyKcMKx-|d7Dhc?i#}%y#vD3q-kyP1p$8->u;M7v%TB* zepvyDNe1({0iJo~9A$J1)FPhOJY%lyX1`y4+?`7&>cCQLFX6|fCT82m#<^q>xlMkJ z?h52;*r=kX)e}KjN32rJmfUO|)++*_ustIGC&aN-<^2U1d0)ZM*BASApS01fEqq50 zWwA5`ti5WbNp<@Gxtn$v3+|vB#GQzMG)Ajtb-3Ws)I{5PC0nu6ANSd3OGMmr={IeT zWc3DlFVuEn2Cxm^J|G-ZfHx2Mx05;Of57v_$v{kGYyMGd&SF+}gG=y_bQaf49 zr8?`|sxQ9zk`V3h8kQR^w4u2bZ0Gl+>713T7mlZeI=- z7IaFf@CV#v*wm<%1_`0O&d2=|io+f+>Q^4RCEYs>%dRYPAD`;4Ia-^{XEY2omYV91 z1fD1U<#z=C3|(?0leK&~{v(0;L$JXrHiK-iy!V@kB(awegB)W9{sAjl=U1e-W(k@m zFWk*utLOcGPZ}ZHDTv2uXyR;mX);_pt><&#)T8H#~uF_>bxebSJuaFfbJP%1abLnC^GQ@#Rm^sj*sUR}@^T<$%<4ZlKFiCL2eO znooJO=LaEwazECz9E{pp5M51siB_6p36qty6U%8jIG;E^ z!c#lQOw;=M(d}QCpGKT=_u5a!Hd9<(l&Z#Z633)^^^$M)0nm0~K@Y;gKM}#CvrY7S zB?^pLU8O8`Z z9&f~W#RjwEW;Vil_YME~sUE0~;wm*H+%{&23Z0M@&zk@Z=gyKpyLP-&1=?!uqR`cQR?lrv~?_3#)4`X_$SI^{~WSHs;If| zi{#>4qEQ*RL&KDv`>EHrqbT-HzKw?M>)i4$ssmFB_W#8}Dk=$wZv}Qr3ie|0_<>=! z0>o#-;cf8kRgTnO)_<_-c)|Rg4bTmr8+D58gR^DSvld3}zPRo6@ssr&B#9JsKD6oB z0mq)?1^4~bzR-}tqYxi3j!@QXr6TyMzB?M!Dtt`w9io&O`kl1KJQYD~O%@f#E}G;*++7aRD%F&LZvTcA0a_5pK=Y;IjL-Wq%* zsyoRTHe$;&o)c~fdH;bpLu&sG?bHi56L6Q7_*HClU$zN@z^_eiE@faD@PAj8y5OW~ zG;x$t7&h^;wgvn&tiyJo@!y#{vVPe&rWnFZ^MX;%dwwex*5&tB46oC--?{V0PB{U}QOWV@T!USTCwy(JCpTfBi+ZlOdyBlg5PpwaNS(O3vU? zahB2H^`-jO`O_Kd8&({_28oeZ81gcsb&s_3B%GyAAHl3#9DDmm&&cV?lJ1w- z38H=iIoNp(M_Ma@o0^;-pCwngPS5(DY!d{K!DC3x3zIVDO@8$>HXxM(cy80=^9ZPUc<-%odWb2_ggOZ#(SLZP(lE!0D=A<1 zO?C}DqYt`k)KklBwR$3e-3-Tmqv`Z{N0%SC)aHM28n~ZFTwTq4z!-9F78SW#G%x@x zz>or2+reqVq#oF<3ZV;haBmvh1&pd@cS zg8N8T1zQvnb;;t_54S!_jy1WMD*q7_vdZc~erKZfAZ%l0`qySrl<{RN^RSiXc^i{fY_Q<1oDEC`)Sp%g{&tD>*CL&|Mdx1JqbE9!HMp z6zle=AG;iI^MKeX&D=F$M<4gZnm;oV8`Z*g8fEi|#MC8K!grGv)5G!)Ci>Pdw=d`0 zVjpc&E*{ckPAz?l-CHCHcAs)nRtw|FHX?!B^@!p;spC(#7>s^u-;~=ItxE-!@%ueIF zs9PSO4+-$HS`CkUbj2GuF#%<%8iFqt+;D$1;mvuxSOCvAsCj5nK%?q#5bM8(6~-+A zVuolsmG*@bf$w80J2dr?DkjuEe$zr-)OpDnV8o?Y2KBWoiqIEPRt^eL#CnYiNuNLf zGit*d8D1Mg7~AZ6*DUBY9yoGUvH4NnZ^y@Tx}!_KYt% zT%x@apqPr;!{-?x{&x^7Rq`&%eD7px(Ez}%7~t+JFqF1lOaPXX4sV1Irlkdc?L z6z%${Ij}a?^Cd5P64 z?yw7~eZQdYGOs&uUM?QnjpiCS{iD+N3q4gwnlpJo`nQx`hk&f4#;2(CCB9rwVhVE%g**y%PUtLS$LDvH%O(K6WLVUj9eODJBgwc7OB@hm1sE_(1CFpS ztrMy73<4+8n2i2%?#3N0S0ewfX0}}^%AL#hUq8{uTX46rr9|>f3E4cUO9h8zgj@_= zzUx;!Q$4F}_-^NAg^`EsZ)NArgo?=UiiOpuGChWMFEO~3&u_mRdRw8Gp!iko!?lA=z-{x|jCW6ni%YGc7ss_3?US;z z;MxpVLJLcF=d6r(xW$JE!zSC;1FM7DYs1c)>N3c zI{VaLL>bCaPVZ`Q`FWZjj*5!y>-))#BWiGWVkXN0YNT2n?>ZmIzTB5&(lL8ef z41vr39F+WLSWk`7h2wszDm#BI=B4M#lREKN`k}O+x$0L#r$0@WR@Wxu2`@;6_m`wM zJ51$*R;ybUgQNU^V5V3iSOHUwj@^$!&l(E|(MJdE4*Xxfi8?(sotZP^$Bx)JId|%6 z(^B1zLn5tUUNF^wR9b+7wuCu|OV7<|tnTxrL;Eg#QZJF)+N$WMJCjps2fVwl277U{ z&g&GezVhj5!z7c}4q$rlKpK%9a@6n2Sj4ZKC*a2&GLhrJq z7>6a$TPiY;#Wi71ir1SY)XsuN$ab=z-$P9oSLs_FwQd}u#ci;&CA|55d4fP8?}8P#xSMp={`@21FA|6+h0z7Kjtd7roB8~ z!5*(z&Wj4Xk#LCsCKEXM0q==2$mWM`Bn@V+APJ{jM4k zr(_*mF?_5jg;XB>_%-&NwLbW9EAQ=552(6y=4W~p?#C>Y8dC|J;*5Gojm-Y5Iq}rB z3basg{BK;~gq0GjbY9*8_P1LTi4l!LP1J&XSnOP@`DJGniube0+n+izXz9!Hzq&zV3aZ2f{KwXND+i92y?W@Cf-F#87%d%1a;$trDzZz)Pw@xS^*~;`Kp1s6h^CUw1QTg(v)y{ z&(qwKeO4{dcG9_+pWlBvoLtbn)+GinP#@t~Cnsjis>6m_efO{*j?urpa%Rc78!-ZcrQOGO9wK=E9g&K>4Ky9hUk-N#H5+> z@}q0vJU!BJ++lkQ5u2wrb_%{6`PMzg_Fdel9kYwN}X? zG%QX52ZhFM2C3aGevTUHv-DzrD>camHz@T5Ez4p*k7ed_kShBmC+`^6=8K?Hw=19) z!rFBUjrvyvj(S3Ej|T6By_at*LYD$si}=balEIoV$}u|AX4F+@pcUOV_)YQN+^zXW z)0@rNI*Fmmpk+H?p4!hK;zTAy9K5`;snAkDAL+Htw$SE1zA(^OYvY~a=WPF~EL5KN zqlZpSSZDl6zGbb=afRyU!-m*Tw|0 z3B##5>>R7Bu6Pq(i3zX_9WSlk^oAWNL{!A330YLzWj>}gbb^l2T&mA*U~m^IYwlX> z$*%0%pNk$12F-#c<@KL~p(H!{{3cwHEs zpUE+|W#y*qTX!9eE!TYfvjs|L3aNrdXT37*S^TcsGe1Ecmt6X8=&(beS`9HFpie}` zCH0nZG_l<`=f{umxVz}QN``7HI#@1Xv)*MF=C54zfGC7yMHR-j2PH;3`s2HV!b`D|I0>{MSig?3Bt{H1lB##O#k5q20?Ml z>f{__-^)C#!(D|&|-$Tx?PJB~vwHHn&AHu-6?Cy(-+qVMpx2y89M8SxV zmrPfBt&otZ`Z5CyqL!k=dGi*fPtV;K-u@+l)UEQ%?b9!k#=`3|OHncyYuJk+Ay*Tr zqm%bHbj{=Fn`&vD#+G-Flqd?m{$}@YdL6JPi(;sgz0T`=G+_(~+Edr^dSfCsKELce zzwPWUInJ{3`pS=$siD)?=}Cm3<=YDNLDj6GEsM3vv+Tg`7fexK9h4R{y zP>i6FV=d%hL;KMsSXd8#|>q%g7ZwJ`n`Odj}uRr5c zLvdf|8{hhE@}hQl&z~OOt#lmNGZ>{!&^0(O%|vhnY@j;2>)`UJb|_@!Owj%($McK7); zwCn~|(myJ)R6MfTsy{+%2hFh-ND8x<>k0K!jTU{;0xVYvh#byV@dk#sTRgP z|6{lSc9z?>zuExHUG)Q{C!boZK3*w81y4BO8KM(|`E4|9xgEznngyAlu3e64=#q;N z!Us_JMkPe{i*7Y-C$w>aA}b|1?UuQ{3b)QWLw(UKGk^>)dCq>-V~0F*_uc#MKKdpQ zitG7}$y^|hnOrnj{LB=FcY-vy{|Md3>bmMD z>xhWA^nFfXYBgQ+D{$$p=Jz)|ho5}7yGDH|Uf|b6@*8ECL?r>#Hu6wxw4G!< z^x+6fOp*QN6PX~4$h}(<$&zg?@i8gMyxfBWZ8@~8Vl*LIbQ#+?1YwY_Og7W!tVN(j ziGpB^Li!7hjF!BS{qcJ*?Bx0NgYYuSq~-mc_{#dERsMZTS56_iiWLR<@BS+dI}T@f zGyBtTVz^-t7Ej0`4^^#+TjGv%Hn+)mgw z8|9zAsp*ZG>LD*)>Rp~~<%A17tNE%B`MTSi3Khuk=&^a%I>JG(6`@Ku>HjYW2>m|&R&y-gjX|^Wfhz0f z_uu;*7&PC}?;H$)ZTHxk5DggBXY0p|xSrvQ<1ARCT@F9@#vPrx`==CN8B_Rz&DQ4K z^qsXgO>9-cK|;>!I%I{*y=Bf_-xjRyb5R7PsB(Nb8&%!Mo69>mN->5$X6XcOJ46t8 zVCFASw)Em93Fw=}1xPe}C*d{gOk+#z?twml=dt&1<$P4o#S!T%{KC=gey6#Zs2dia z34@7|a+rm-RHz|9EfYm6l5)IR`~IG*D} z8PO|Ph?2tMyu7kjTBa@wrUCqk$8@mb_54dz0YN(-s&gZ_i@ZRbQN9f`f)+0#| z2^9HskiBxY8VFhBz?_LOrQy@ff=3a711~mrI>Z$RUSFopk7BT3$zS*NjRU^+i_J&`g&QoasV8@nO{wCes-;2%f zh-7|eB^7gqCG(LX!5{R0;o;DM6cT?d^i(-jSthpKSzu13!*U^r_fH@~6nw}u5&xa4 znXA7oc=Y_vntTf5MQsPM@r{wlQ)pI0eYHjfMM#-q*x+JYrd%n)om`-MVua zKF#yGhX-bZ#IAm1=6ZtaV56%0(xEEIEO5RDI7!Nk4z65ARA;FEM2U8O4==#%+qb<{ zG^VnsuV1`oqp-h7T85wh*j9|Bt_+P0@Ybu|zUG*}?B91$ypigC+CyxpU)k1S9lSxT zK!Y&_v_X>KLNJ9!2l&X6()Bhw%-*>pq0sUodqaZ{gder*Qp)i@Te`y>F6TQ-qka45%iL+f1`1uFVgA&k=~fM6UI&>p zb@WjB@%hDSgX%JTy|R$`|_C(|U=JRQESi~U0DKIy$Q@A>G-78uoLi*fO_UxJRtEE;s zDep+0g%rZzpF{(5NG`sXPxX?N-ko@pMG0^j^OukKU1gb%=TBgJ@x5I!i{qm+-}Fw)APE*Z0uT0 zEJNw7G>6!M%f6*Ug)|UcA%wvof}tWa72J8;bF{_YwVxgxVRCI|LL4S^6!zq2@LJMW zd|0~)K3r6Qo7AYCe2~%HRwG`T4kuXaAB7hARNfgIO&~3s z*&W1+;crkJM?yqZdhKbI_#vRL`y!#@x z&kpr$?_AKJ_u zR%OOVK}54Xe9PZ4rExG<1*7Ur*#0)ci~E(1s)W*dedC{j>*IEzFMQOB&)0A3F2cvH z_$$Q|@H3sag@}8&%M^Zg*LC6v9y7nkc&Q5aVJU0#bPwMeh5uKlY0Rphx<#7-_ z85nj&)@KT$)D&}Vu5xQB{q?;czIBQYxD*O?al)Q(IP6O9hidbS;^n!+-RRBtVH3Ac z@~F2l+d3iQnjvq(_boJw>VVe|9#g3wnI>GkdDTp+Wyg@v9W7A=kWdpp@X{_`c@MFt zr_}e0en9c5-IfOz)|pS?lrKm9$lBq|yfuWz z)6mA!uQWa^#m5Gn;BbSvdz~#W7t#t}An)=lstYr5=?VkZLmRa8%;S3Fyg^U)e{QQg zh}b&_S}-1TEnj9)ihuTPbv$%C2;P_<&b^wJGF1)5<{gh4ACRJ6K)qK;y zS=}HxO7>qq`gqUzwyI!)PG{0bOM#onLVd5>4=fxnrcJd|)jez8NFYqO+3BC7Za5$< z< z6xvPmHP&<{Yh|Cvm8=}2H8Y$|3zFj5ep#?<+1>mt&!GF*u9@bnCsIuq!cNVt%G1^z z(XEubWVBm(I$v3f?w+MI`Zo-?5Hb0cB2@nHdWJeL?|2zkNS7c#Q`AFBhMrQ1jKdcG z_E#4}1ZxSL>NA(68#uiuyJ%N|5!5qYv5Eo||NPYR-1585s%nfn7itc77&2maQI=hL8Qe{QZ2{cW5REj=bIu&$rD<`p@|8Ka+V0vWU6gt{K-3S&slZ3`VE_ zMYgcO;KmL}j{Y^wCjKrzPZi1}5r`kJGWfr!7SHdYa)mB3~lSC3hs&NY_=GlK14e z4mE`R(cki*d5(gF;v3s8wiJMd{%}BNzS*2OH=k-xwaiC4J=BicE`&x^uwlABjug2i}s*Pz*AFuNV<5 z$!z%vKgs$hB%3qGjr<6n%NC3q7#kG8;v~(On%svi2!^X8`w_u93<9o7$%>RJM zbi)>!;K>g4(4NTXXaJl@xq5=fa(*LI*(sNkR1qe><(b2;Vv^ky`Rdq+mWyVrT23W= zuw8w_1eLEN;=$oKsMyu3i&m{+ny~N`u~`3>0WDARFE$pvcgpyvL>^MjLYpxMRso5*yxbMm9rhIHy{;`h7L>8yF;s?SkABi zyA|HQ$=XeM@!HIj(`hGB9u^Ah-a_SX$}L&&Y&#l5?*_H7TjbujqcBQV#nLk0#vAYH z_a#(egFhJ;4tf67Fb^%hIM`cgQzDl^9Yw~OdAa>cfR1Lw{%F;4_A~B}DlfhY@7G8y ztw!0Zi2KU11YHx`bG18gSG78Sah>xX*V)osmwUbpc@!AK+kaqNXmV&wi_CMcPp>BH z#=K8n7zuv~y7}&B5{*05b!ud_0b8!u9Vx_bruZh_uqkkOxHrJpain`xf80j*WRaSk z*=(u&LN`+PRIEi0Ha3=JZsP;N93%}T?9E&($j^O{VK!9bSI>(j5P}?i5osicl8ns< zHvzAhc60$k6hp^~;QH#<{MuGAc?MK;1+Yfr@`_(}y%BvdUGWO3%O7BhMivkj%Ex-= zv$!tnOq}+JnV7CN@VGv#kz^w{(tT={Cv>X-wrA&`s-JIQ1)I!mdH#<1zFBBJSv;56 zYcn2eXyeMi^<87!{p*Bxi_&nE|IUb7O_Vsu31}e<_zf-Vd)#Lu2~Ji6-yTqC$bxN( z8~-eCi2WWJos2U+85wZZHHM?`(k`>$ZuKXn7e2DETOFAoZNsecFlTyq%D(*#d3i~? z{^d!PX~`g!#}@8krL`UinR6q*&}YCS!9t^Z0gKA#&RXA1$;m_C%wE4*ZlRgof3cQT zWf~=smJe!J+Q!y%lxx@HKQMRcf6H17v)*ja(`Pp1Jtx?8-(Uvn+vjpjCHkJ8G`@Z? zKF!|?IWh-jmfQFH4nK5H0!gy-Iyj!H>Oq*=^xu}p(N1yr&NDOFe;ShHPE8SdhsH9j zrLQ3tpW;5-6@bFaV)jtp7HwC4a?bj81ytn6W`L>(se9{sgLC5Xf-;MK#gF-dMq>Ao zimdSKJ%wmGY$|hVqlV%U;^d!MsCwW}0R!TOR|3RpTY>VRepz+t!y%dK`oY{Gk(omO zF6fSed|k^Xwur)NQIyOAUPhMnpQfPngeL~xSu9qA*`$8&AF2s?XU>h}E5Iua@lJDD zg@@emE~Hbp8u&&p;V*y9(8G8=Ugfw5uw9>HGNkW*6VIjgY5LL|*N4eMFC^*sgb^|& z2$Lg-BMaX6Q9k8zc4tt2b}Nmz?oP+iqr<|qfmN51*4Wo?Il-8023eM|k>Qjhz2ZK_ zA%%yOQVucYEWH@rXSy^xp5h*ekJ!Ko74lk9g9`A@Og&3DTH`8RVnvbjvC>%@A+PSlj6>mR7ZV3R16_}c|=#Bzjs9-JsjX|a^Kl!nLr9@jXw zatAJF-wO`odL7bjdGNM@ zPzUuiA80VL+|=RY^DFQk{UmYCw{h8cA#-PQcdg~AY&B$(Is4>`l3PbckCM+Z<(9@f&3 zPcE&2J9nNY(p^cXE(23|e9Ybf)6WceBdOlK1FI^IdIY6|Hjc8Af`rx8zHc~31DOVONqe>H) zeDbDC`U7wV@A%I+C@W(K!=pLMiy_B9gh_sib=E)s+F$XZD$Ivx1h_bLEuXs7ky%*A za$D2OaTa49qe)c>cjfN9dYmO#q9!MhLMb>V|7;Y@WPEiDD{Vh+^Uy&&ExBT2=Pq-H z;3qRGnaoSR!7x!P8>jP7Lko%e(hK!q(UQ9jaw{DcuE@EM7ZxiUbi^IUiL+NGHD{2( zl3<-(6AB-l&U|>YIOTh@p6Cd;{%hR>W2PY+g-u_QxNjkiS0X(&P4L|f=DLd!&Rbl% zoVvR%X}L|FmG>*W!9`K6t_v0}rdc@+JwrkYK-bB7_ z5bV^7aeYA^G#g0r7PVJ7DuOahP8}z0F@fBm6`*H#7Uv5V!(OtylWcZe|9-ER_)MnM{XcN>aTRBk;~>ksnMFc01fsK*fBe0hg=T8(@u3_KlCCdsi{^VQvJtHO058zLpwP8BlraDWMbyOr_Y7 zd?A*4FPd+XT8DM@d)bo&R2sg8-pBzVN<$7IXLn|0zqnC&olg7BCK3=LUA^(O|I*^g zXjGqYr2pbJ#jHA#$&~WycBk2!?B%$c&r9wfHH6f?6T72_X;I^rEebKb22R~p+S;&b z6BcA=eF<fGGncD|0YZQ=vp7QBK^s%Rhle1e`8iB+mk@c)_Y7$ zW$ydA&5lzoa%#Q9OrxKs&;8&wFY!C-D=#BYqu4IYX?kwB8~(KDsqkC%ZfEx3MeaOK z;?t^hAM@R0)P??gIbCsKO2)5N3_5_x58o+L1W3H;@w+RRbxQ|fys}}b-DBzqp4B8T zS!~-nQFgu~^pYI2argZA_tZUF^IEuj^pn4hbQCNU-x+bM*n(OpU`mht200z<`hpoJ<(DesqHssaTxG>mDSWndF zbYXk-{KjY9G0q(me*qSSGu25G9fhEz^1D8B1o-P_NKzyB8QO2-K^jR$GA%xzjq(oF zLDk!l5Si%CMGi8Q#NYE&n^ly~tt$I9QY~BfEGja4r|$Z^hcE@Jh`t9NZsGW1F6rd` zxpOKXEmA%aNO$c<^a?*OE3#6YVs*evk22-zEIoV&TYV;}Rt&F`nP&{R&$n*`bDJia zX9%%CjDWW&52VIMPys^W{Z}Qy@;$iat~bv$$L1`d;ZenEuZ6FQa6XMvJPvMO{3k7m zv6&d8eHOq_LZ#m+@hBV(b^b=DUZ(>LBO z6#o<8XUD0!1CK5$wcbY;2K=2Nwn^)XqOOtWnmtuT_J$1bKsqv^>P5#mG<+5u7bB3Y z#_hVU1O5!Q)hpVLi>r&U4;1#7xkuhed=NJbN4Fis4Y1WJI5b}GzL1jGG z!*z=M>rS^!`>!f&O8(g}m0?jzW1Gxsf2Q+5VW0arl)KgjHZ|>ls?nfpu=O8E$~xpu zWa{`7#gQn}7Zf9%(b7^|wAOZ~Jt z^Ij)Z^XuxVi|KZJ1aYHpx|wFNEpY#dCuP<$_}2=zxGPy#ter|@Mav|j&FZU%JtADA z)+vnBTU!U`XL-NZI2v&Gw{|P#>NOhU9^p<)R}6*$1*Q{a#`Dus*JOfiMVVNI5~^&+o$?L!f1qr12J8i7yct1~ z6vZ)AdRL1T6M8KjUwz$DZGjoRuls50ekruK?pJe$j$#=2Sit+=6FTUeC-Rsw!sC9p z`wHC^LT_a(x$}iXe&aI zB2%!*-ONEp9oDR*5?`iMp|XuLrv*!#F|im=f9d$=E9PT?6xrFGKRF!z6##a!0~-C3 zWq%Va(C(mIwk?*NA$ui|RT5+%pACMg zfSKK9fpze@In#eNs;`Ml?=}OqZuN83ORBX$;EZ1hxJxwT6%3G~#H+>->eW0RrjbTB z)Zg*FA$z-&E_I`Yc(Ry7D(0el51{<>X|GpcC;7CJkJ5axJhNvkGVbL4#t&dc z&M4OT>zMo5mQZm5m=CG<<4ND?`lU^7d5C-dsY6kB=ywn!>tltko>i?->(CgO1g2m% zi_Ce#CAl}OG7Zpl`cAtKsxq09*|$u-_W{ALK`VvMf%{Cfg4dpvP;={WzZc`8jV2b#q9?*D-0g~=Tgr#2Do=LI~nODuAV8~UJPifrV@u&%0em6n59`N zFH+F;*w6ab(QDZwxDIjct{XmQKIxfgovME@zqzvv4%%z1kC5bQ5bh!|YKs$sI%f(74FE(f37n{=V3Y?U(wl@VgVfW{{-Ss-GDvZ@e` zPOb#OYT;=VFGy@7-bGtS?CD!QU=5Us88xIJ!8089i6QHW>|B5-NgTX-YSlejYx{*P zLkF1^ktG2^DGGz9TI8vJx|vutcpZ2!y_`K&Js^A3TyG;L z`rDNdwI7RjUrcyaF2HAte(gwe800}J_u)ecLw}bnPd=9!94#H z(Tq5VB=HL|e*znx8K;+3pe(Nc)*FjfhYo0qR6yXL^t*}K?E#~bkpb*urcY$m9J8CA zCsvezErpMy%|6LlnC03c^jt-TVz=HqllU-RqF=*kJ_1_9LerFHBLI8Xm+MsFs08CP zW^ZVXKBt5|KP)e6Nh*~K=CUa9k?+3q4oCt?U9FGUR%U(N7`%7d!6jQ$$xVH&vic^i z2>Vy*x8$?FxkD7W&GG-Wc}CW@lH6u6#n>*=#`NLU1p1awpr_6+g#A;%&~7IqIq@`0 zx)m9rG}MTAWZ`W2ub0mCO-_v4U1pSh<}0kUjqTXt6W;sGJm}n!)dVFG@}1F+n`37@+P1rko06XK+u$25=hJ7tR+DU&GsW* z@>O;`kWEHUzA%cyI(>?9B!^l0_S!9V#_ONGe^~CvtH=c)tubB&O`hz&W?p9b#7S-n z5fr$n?1HIZD~h5CXNDuLs|N0&4kzurXEyLgz?Z`0|9bhP#jTVp0)rqPBmS-y7pwUw z1y&Eue0YFNXZg9<1VsLf>!tW)-QDHTsCGP1;t4+p%PEfmuMPicD|>0z?G|G&^YY@~ zhb8>qqenxjc20{0G`!*D{=TA#0kcFv1wr~i=7v|Nk@O9{qo%Z;}*T qumAvsrU6vT;{Ol+|K+G1kSId@yKGk Self { - match Self::try_from_file() { - Ok(config) => config, - Err(_) => { - let result = Configuration::default(); - Configuration::write_config(&result); - result - } - } - } - - fn try_from_file() -> Result { - let content = Self::try_read()?; - let config: Configuration = ron::from_str(&content)?; - Ok(config) - } - - fn try_read() -> Result { - for path in CONFIG_PATHS { - match read_to_string(path) { - Ok(serialized) => return Ok(serialized), - _ => (), - } - } - Err("unable to locate or read config file".to_string().into()) - } - - fn write_config(data: &Self) { - let serialized = ron::to_string(data).unwrap(); - write(CONFIG_PATHS[0], serialized).unwrap_or_else(|_| ()); - } -} - -impl Default for Configuration { - fn default() -> Self { - Self { - database_path: "./database".to_string(), - port: 42069, // haha funny number - } - } -} diff --git a/src/lib/db/mod.rs b/src/lib/db/mod.rs deleted file mode 100644 index 168ca61..0000000 --- a/src/lib/db/mod.rs +++ /dev/null @@ -1,103 +0,0 @@ -pub mod models; - -use std::time::{SystemTime, UNIX_EPOCH}; - -use serde::{de::DeserializeOwned, Serialize}; -use sled::Db; - -use self::models::*; - -use super::{ - config::Configuration, - harsh::Error, - log::{Loggable, Logger}, -}; - -/// -/// handle the database access -/// -pub struct DbManager { - path: String, - handle: Option, - logger: Logger, -} - -impl DbManager { - /// constructor - pub fn new(config: Configuration, logger: Logger) -> Result { - let mut result = DbManager { - path: config.database_path, - handle: None, - logger, - }; - result.info("ininitalized new manager"); - - result.open_db()?; - result.info("openned database"); - Ok(result) - } - - fn open_db(&mut self) -> Result<(), Error> { - let handle = sled::open(&self.path)?; - self.handle = Some(handle); - Ok(()) - } - - pub fn create_user(&self, username: String, password: String) -> Result { - let id = new_id(Prefixes::User); - - let user = User { - username, - password, - id, - }; - - let path = format!("/user/{}", id); - let serialized = serialize(&user)?; - self.handle().insert(path, serialized)?; - - Ok(user) - } - - // pub fn verify_user(&self, username: String, password: String) -> Result {} - - fn handle(&self) -> &Db { - let db = match &self.handle { - None => unreachable!(), - Some(h) => h, - }; - db - } -} - -impl Loggable for DbManager { - fn name(&self) -> String { - "db manager".to_string() - } - - fn logger(&self) -> Logger { - self.logger.clone() - } -} - -fn new_id(prefix: Prefixes) -> Id { - let prefix = prefix as u8; - let timestamp = SystemTime::now(); - let duration = timestamp.duration_since(UNIX_EPOCH).unwrap(); - let result = duration.as_millis() as Id; - let result = (result << 256) + (prefix as Id); - result -} - -fn serialize(item: &T) -> Result, Error> { - let serialized = serde_json::to_string(item)?; - let array = serialized.as_bytes(); - let result = Vec::from(array); - Ok(result) -} - -fn deserialize(serialized: &[u8]) -> Result { - let data = String::from_utf8(serialized.to_vec())?.clone(); - let result = serde_json::from_str::(&data)?; - Ok(result) -} diff --git a/src/lib/db/models.rs b/src/lib/db/models.rs deleted file mode 100644 index 63d16ed..0000000 --- a/src/lib/db/models.rs +++ /dev/null @@ -1,31 +0,0 @@ -#![allow(unused, dead_code)] - -use serde::{Deserialize, Serialize}; - -pub type Id = u64; - -pub enum Prefixes { - Message = 0, - User = 10, - Channel = 20, -} - -#[derive(Serialize, Deserialize)] -pub struct User { - pub username: String, - pub password: String, - pub id: Id, -} - -#[derive(Serialize, Deserialize)] -pub struct Channel { - pub name: String, - pub id: Id, - pub messages: Vec, -} - -#[derive(Serialize, Deserialize)] -pub struct Message { - pub content: String, - pub id: Id, -} diff --git a/src/lib/harsh.rs b/src/lib/harsh.rs deleted file mode 100644 index bebf40a..0000000 --- a/src/lib/harsh.rs +++ /dev/null @@ -1,69 +0,0 @@ -use std::error; -use std::sync::{Arc, RwLock}; - -use super::config::Configuration; -use super::db::DbManager; -use super::http::HttpManager; -use super::log::Logger; - -/// -/// main function -/// -pub async fn main() { - let configuration = Configuration::get(); - let instance = Harsh::new(configuration); - instance.serve().await; -} - -pub struct Harsh { - pub shared_state: SharedState, - pub http_manager: HttpManager, -} - -impl Harsh { - pub fn new(configuration: Configuration) -> Self { - let logger = Logger::new(configuration.clone()); - let db_manager = DbManager::new(configuration.clone(), logger.clone()) - .expect("failed to open / create database"); - let shared_state = State::new_shared(db_manager, logger.clone()); - let http_manager = HttpManager::new(configuration.clone(), shared_state.clone()); - - Harsh { - shared_state, - http_manager, - } - } - - pub async fn serve(self) { - self.http_manager.serve().await; - } -} - -/// -/// shared state arround the app -/// -pub struct State { - pub db_manager: RwLock, - pub logger: RwLock, -} - -impl State { - pub fn new_shared(db_manager: DbManager, logger: Logger) -> SharedState { - logger.info("initialized shared state"); - let state = State { - db_manager: RwLock::new(db_manager), - logger: RwLock::new(logger), - }; - Arc::new(state) - } -} - -/// -/// safe pointer to the shared state -/// -pub type SharedState = Arc; - -/// -/// error type for now.. -/// -pub type Error = Box; diff --git a/src/lib/http/mod.rs b/src/lib/http/mod.rs deleted file mode 100644 index 20c2469..0000000 --- a/src/lib/http/mod.rs +++ /dev/null @@ -1,64 +0,0 @@ -/// -/// contains every route handlers -/// -mod routes; - -/// -/// contains every models used by the http server -/// -pub mod models; - -use axum::{AddExtensionLayer, Router}; - -use self::routes::setup_routes; - -use super::config::Configuration; -use super::harsh::SharedState; -use super::log::Loggable; -use super::log::Logger; - -/// -/// listen for incoming requests and handle both incoming and outgoing requests -/// -pub struct HttpManager { - shared_state: SharedState, - port: u32, - app: Router, - logger: Logger, -} - -impl HttpManager { - /// constructor - pub fn new(config: Configuration, shared_state: SharedState) -> Self { - let app = setup_routes(Router::new()).layer(AddExtensionLayer::new(shared_state.clone())); - let logger = shared_state.logger.try_read().unwrap().clone(); - - let result = HttpManager { - shared_state: shared_state.clone(), - port: config.port, - app, - logger, - }; - result.info("initialized new manager"); - - result - } - - /// listen for and handle received requests - pub async fn serve(self) { - let address = format!("0.0.0.0:{}", self.port).parse().unwrap(); - self.info(format!("listening to address '{}'", address)); - let server = axum::Server::bind(&address).serve(self.app.into_make_service()); - server.await.unwrap(); - } -} - -impl Loggable for HttpManager { - fn name(&self) -> String { - "http manager".to_string() - } - - fn logger(&self) -> Logger { - self.logger.clone() - } -} diff --git a/src/lib/http/models.rs b/src/lib/http/models.rs deleted file mode 100644 index c52f6bd..0000000 --- a/src/lib/http/models.rs +++ /dev/null @@ -1,18 +0,0 @@ -#![allow(unused, dead_code)] - -use serde::{Deserialize, Serialize}; - -#[derive(Serialize, Deserialize)] -pub struct CreateUser { - name: String, - password: String, -} - -pub struct EditUser { - // -} - -pub struct DeleteUser { - name: String, - password: String, -} diff --git a/src/lib/http/routes.rs b/src/lib/http/routes.rs deleted file mode 100644 index a43cb62..0000000 --- a/src/lib/http/routes.rs +++ /dev/null @@ -1,17 +0,0 @@ -use axum::extract::{Extension, Json}; -use axum::routing::get; -use axum::Router; - -use crate::lib::harsh::SharedState; - -use super::models::*; - -pub fn setup_routes(app: Router) -> Router { - app.route("/user/create", get(create_user)) -} - -async fn create_user(Extension(state): Extension, Json(payload): Json) { - // TODO: security check - - //state.db_manager.; -} diff --git a/src/lib/log.rs b/src/lib/log.rs deleted file mode 100644 index 2d0e0cc..0000000 --- a/src/lib/log.rs +++ /dev/null @@ -1,61 +0,0 @@ -use super::config::Configuration; -use chrono::prelude::*; -use colored::Colorize; - -/// -/// configurable structure with methods to log informations in different ways -/// -#[derive(Clone)] -pub struct Logger { - // -} - -impl Logger { - /// adapt the static instance according to parameters specified by the configuration - pub fn new(_config: Configuration) -> Self { - Logger {} - } - - pub fn info>(&self, msg: T) { - println!("{} {} {}", time_segment(), "[info]".blue(), msg.into()); - } - - pub fn warn>(&self, msg: T) { - println!("{} {} {}", time_segment(), "[warn]".yellow(), msg.into()); - } - - pub fn fail>(&self, msg: T) { - println!("{} {} {}", time_segment(), "[fail]".red(), msg.into()); - } -} - -/// make the time segment of a log -fn time_segment() -> String { - let now = Local::now(); - let result = now.format("[%Y.%m.%d-%H:%M:%S]").to_string(); - result -} - -pub trait Loggable { - fn name(&self) -> String; - - fn logger(&self) -> Logger; - - fn info>(&self, msg: T) { - self.logger().info(self.format_message(msg)); - } - - fn warn>(&self, msg: T) { - self.logger().warn(self.format_message(msg)); - } - - fn fail>(&self, msg: T) { - self.logger().fail(self.format_message(msg)); - } - - fn format_message>(&self, msg: T) -> String { - let message: String = msg.into(); - let formatted = format!("[{}] {}", self.name(), message); - formatted - } -} diff --git a/src/lib/mod.rs b/src/lib/mod.rs deleted file mode 100644 index 40e9033..0000000 --- a/src/lib/mod.rs +++ /dev/null @@ -1,24 +0,0 @@ -/// -/// encapsulate the logic responsible for reading and parsing the server configuration -/// -pub mod config; - -/// -/// encapsulate the logic responsible for interacting with the database -/// -pub mod db; - -/// -/// main module, exposes the highest level structure holding the whole server runtime logic -/// -pub mod harsh; - -/// -/// encapsulate the logic responsible for receiving and routing http requests -/// -pub mod http; - -/// -/// encapsulate the logic responsible for logging events occuring while the server is running -/// -pub mod log; diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 4c05023..0000000 --- a/src/main.rs +++ /dev/null @@ -1,9 +0,0 @@ -/// -/// library module -/// -pub mod lib; - -#[tokio::main] -pub async fn main() { - lib::harsh::main().await; -} From 48474c3878da63ba4e72cf1ad0c34845efbee8b6 Mon Sep 17 00:00:00 2001 From: mb Date: Tue, 23 Aug 2022 16:00:10 +0300 Subject: [PATCH 11/11] fixed readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fcc3165..1471862 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,13 @@ ## Description -An enbeded Harmony server implementation written in rust. +An embedded Harmony server implementation written in rust. > **Warning** > This project is in early design phase, it is non conforming and very few features are implemented. ## Usage -To launch the server, use the `start-server.sh` script +To launch the server, ensure your rustup toolchain is up to date and use the `start-server.sh` script To launch the debug client, use the `start-client.sh` script