From 06a8fcd807b27866c5aae5e21db0b96077000f0e Mon Sep 17 00:00:00 2001 From: Tipragot Date: Sat, 18 Nov 2023 22:51:55 +0100 Subject: [PATCH] First commit --- .gitignore | 1 + Cargo.lock | 1434 +++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 14 + README.md | 3 + build.rs | 7 + icon.ico | Bin 0 -> 268350 bytes src/lib.rs | 100 ++++ src/main.rs | 59 +++ 8 files changed, 1618 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 README.md create mode 100644 build.rs create mode 100644 icon.ico create mode 100644 src/lib.rs 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..34ef60f --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,1434 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aes" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "cpufeatures" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "deranged" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", +] + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f258a7194e7f7c2a7837a8913aeab7fd8c383457034fa20ce4dd3dcb813e8eb8" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" + +[[package]] +name = "futures-sink" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" + +[[package]] +name = "futures-task" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" + +[[package]] +name = "futures-util" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +dependencies = [ + "futures-core", + "futures-io", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "h2" +version = "0.3.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" + +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.4.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "launcher" +version = "0.1.0" +dependencies = [ + "anyhow", + "glob", + "reqwest", + "winres", + "zip", +] + +[[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.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "linux-raw-sys" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +dependencies = [ + "libc", + "wasi", + "windows-sys", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "openssl" +version = "0.10.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a257ad03cd8fb16ad4172fedf8094451e1af1c4b70097636ef2eac9a5f0cc33" +dependencies = [ + "bitflags 2.4.1", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40a4130519a360279579c2053038317e40eff64d13fd3f004f9e1b72b8a6aaf9" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core", + "subtle", +] + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest", + "hmac", + "password-hash", + "sha2", +] + +[[package]] +name = "percent-encoding" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "proc-macro2" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "reqwest" +version = "0.11.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustix" +version = "0.38.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ad981d6c340a49cdc40a1028d9c6084ec7e9fa33fcb839cab656a267071e234" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.192" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.192" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys", +] + +[[package]] +name = "time" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +dependencies = [ + "deranged", + "powerfmt", + "serde", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2 0.5.5", + "windows-sys", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "url" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" + +[[package]] +name = "web-sys" +version = "0.3.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys", +] + +[[package]] +name = "winres" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" +dependencies = [ + "toml", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes", + "byteorder", + "bzip2", + "constant_time_eq", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac", + "pbkdf2", + "sha1", + "time", + "zstd", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.9+zstd.1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..ffa97f1 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "launcher" +version = "0.1.0" +edition = "2021" +build = "build.rs" + +[dependencies] +anyhow = "1.0.75" +glob = "0.3.1" +reqwest = { version = "0.11.22", features = ["blocking"] } +zip = "0.6.6" + +[build-dependencies] +winres = "0.1.12" diff --git a/README.md b/README.md new file mode 100644 index 0000000..d07e548 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Launcher + +Le code est moche et pas commenté mais tkt j'ai fais ça en une soirée j'avais la fleme diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..d4791d0 --- /dev/null +++ b/build.rs @@ -0,0 +1,7 @@ +fn main() { + if cfg!(target_os = "windows") { + let mut res = winres::WindowsResource::new(); + res.set_icon("icon.ico"); + res.compile().unwrap(); + } +} diff --git a/icon.ico b/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d9d86717df2cf2a41f0029a7180a8b8f0d07ac47 GIT binary patch literal 268350 zcmeFa2Y4LEl`Y&#q)3qzb0#8@bIv*EoQXsbAPIsQAOYr_Nil($N|vo)Nmj5eS+Zt* z_h(JR|2;JS*|%yl@z@`YuW2{yuk)eyAGgSZ>wm5uaP@$z2V6bi>H${|xO%|V1Fjx$ z^?<7fTs`3G0ap*Wdcf5Kt{!mpfU5^wJ>cpAR}Z*)z|{k;9&q)5s|Q>?;OYTa54d{3 z)dQ{`aP@$z2V6aHoq9kB?YsD@xRpIxWNnj{($S-7=MHJwjvd$O0$g9?>H${|T(2JJ zI)7eE+`2(qbpItSdtjp$)6lL(RAkHs|Q>?@YU;qgza4tzm=B`Yxz4j$RAL2aQB?#<*VAG>z4d5tf2Xy!wOnOcwx&Q zBP-jUk6*mBD`TK{-Yr^~mcDMSmbZ66u5%xpQ{I4J#d5e0NnJBLi`W@ zy6mo_TEUhb+IPjj+?2n+-!rvm&Fa|tu9w3KTK+R6t4V}pHi^)@77>!YNInkBZ~iaf z|JAsbB^%S%ulC>YkB{CQ*WRHe_pa8`FJ0E8<#6$U8}!DzF6%F~2Z{#axus;^-r%ft1G{4zyWRn=|A$yNH{w3jz`c4sEN_vBtZ4ltX3^rq2`iSz z7hgUwCcLIzOIh2aHGlJ7ExoHrbd-A0APtORg`us61YxPF0 z<;BZmiuUY@&s??TcuL#GUnSJ77vTkqMM#D%=9Ry<$GyUTU}mid$f^EAXhp-_v7Jlu zviJ8-^hz(#(l)NvDi3bej)?zzL;QZ%MYww4FQo@MAG@GMHU5=W^z1IJ`t)V3VB;yR z_P)C&7VOwrl(}-#eJO4IzfY*$AmXbwh`6d=9rt#={z|y_PpuLQW6Ok3LYeT-sQjmp z()uT27B8;N*uHi~NMf5-w0nnEwSR{;$KOrM*}wlUrR!b4)71mly$AZAep;Kcqfe{9 z?}Ao&{H#{kazU%RaCvgYfpgWly*r*vZrSk92{k(2iTSI?eWUP8t(3SY_GODJ6MktG z{~lJ+^itZYwaW|lZg*n`)Hd%y_bIDL9OM! z`?QK9=kPNtwAu@27nJWm-BCO+_`||Ar~a7Uu~o!Z_ercP%bvTy%XFM|1rRR za+Qd!>G@M?d*7QGD>rT~*s&#G(QEr|$zH!nD?NTtTlDHZTJhPzr?m8blHT2SEO+y!xcWy2$HupGYQ_6^X&q~~X-9tj z>o2^ITwmbofv-ak(6={Ux?Af)?yTX$-CEhc(^~86_uX1?{7gvMu5-JJH=OyPaMkHQ z7jzTvs$B{99X2|?#CCR*2rp_Ap*hWtf6E*O_esQkw+*jIsOb}kF@B%6y!XD0-gWt9 zC-zSaDOrRXfUR1_;4#g=Hcu-%c<}3RdtAT4)dSbG2V`yxsrQ;E&S;gV&T2)Q&uC2# zULIF<>|93K&cX9VeWyPwT&Zwwe;gY3@l|~yqF{-k=Qjf9O~CCEk>relmf*yOE+dn7n zw>gdPiOGnfC*8 zabL1b$GzeYz(4AN{}f%*{zg*Q@@-k$dPCaZ{`RejJs)-mu_V#9_%>2Y$O$Z8uc?oW%1CA$Q3_el-?BBOnW&gG%=Tm8Eg?@A9G z7WXN3`FkUe?@L{;lzRR~8*Pu*9%b+EO}JMYLTE1PfXiF|5ZBUmU;4V$`6YwfCq_|NKR*;^a{+XVoTc@%Qc&w9+$-{yAH!#fcSoGtzjjr)Ppl9T#a*~& z)(Y5O`$%wa!9Vf|5v48vFQ%#E>BJSw>M?g{#;w{cEv;{*R(fHZw)01JzWvpw{z2|Ch?-f-j=J+Lu*}k!2erT%jO({nmz!DKxxlTkDjUM-bX?0>DYJk~% zQ!D;ExVY}EsOGjU=>w|+mcRP&Ed`s`Xk{n1Xt~?EwMBOy(V&tO;9s;xgsYTEE`@zu6<^JbjeKhAK<^G_mX zKP1xIw@J-T=h^C@1t!nQu&i0>`9_lXs=jW#bRS$HQD3Ht8ge7m#1 zS#WQhpK}3xlPg3}VeO~!?QM4z@9m8#dF-yS#eLmc+3_t})4eCOuAQx}xxg;ueQ7<= zcK3@?ud7FWUD<&%+Oog>#?3Y7&iIw>8{AO5aqyLbRVV%{wPlk-{BDnP`{(KHJCR>k zn%qf|({)IswQLoMb;P-|_~2@AKPWPh#|zGF5P=zWz-yxkv#8q{1@3kH#|ZD(0>u7H zL|A^CZ9Z=p?jM*|tNVKs?$unNxS|?S+S&TM(sfJkFWI#=r{vy!6LMQ>w9-SHw2Hy4 z^1k0bapISD|6O1Fm(v5;m~&e5$a$^epP$m|zjaP4-*r}7^5VB{tv+!+vTXO@;o^;_ zKPp^(`hUo!nJ-Ui9vC(5)8Nzdx{pGq+b2?+w~54B>SxaI{(1a8aKB`?2uQ0D3*#~0 z2KqhmA1v{IHMoxz-tk3}@5fcG7tyHU=e+-+=JzY#KOFAk^QuKfL!+o@Y7%7~t^ZKA zy6cJ3t!wH^&g`BVn_RBt?jF!8FYVT}QZKotm}@%3TK&`K$5k9VlUlap?AfB;!Qa@|(dI8d0nKf6{+^ggYUmZoP5sEr5$nU@{Tkpt z75*0U?4*wc{>iZe(raYguKcd~=#1wpzP~V`1h`*sv2&dJA5*>(YxuQ`;H(BaPNA;@ z5|BQ$zgM`g1omZXY!v0~Eq^TO>3AV`L(htwJsTJB{-^e?(u(iet}Q-(#I+{q^#a7# z{ChT?+^0=>?gg#kam;x?aZbx#b6jh<@7&~yqi4!XwhumnI@+`GR`Skb1y*({qYL|60(zsxEbI|OFb8l1ww{V+V=0rv*}%WzDrZvInLP5Wz!OO_2}Z|Ms-B;LC@ zby&G~aP zD)ygiDA_XjgQ9h(|K&<`wE4^6?;D20J@8(!20D1B2+cL-#i6z}8g=egOe>#0-0>RY z9(I7dKbSc-`hIW##saht#QoeMaPJ*o4Ewdt;o74sRtmoi)&Z63F$K;S2tUu5g6Efd zzP;_i^C59x-zegWbv;7X0amqr9N*q`FcWovbx$1~16zQ(fSa_|pS-AL@6&4{ul4wF zo$u?@12_Ho&zkRt1yZY9^u)bd&GGZvBjO#c_Tr#N`GM0bFz5Yeh~59~N_ba!G9CAu z9dJNQGw&6F{FlQ#*sH>QuSjp*I?DXL5#KxW_gq^C>+Pr*ocN@lrY-P}1@8Tw`+LUs z!{gqFCx~$)rtnP$r=UH!O5Ce!ly!g=ZNHCe?YxXSz?|}PdnZO#)@p_D|K;D?qV;_A zly>vjv937a>jT%%{Y%IP7e9Yl+w#R#X-p-8{p`r%21iUO~mj_Gk++TJnz{|J-B7b%L*M50J}mJpYo`0L-^yUR?c| zhqcBR@4Btx#9&O>?lXsrHw=D^H7-U~3uCqk`O8is*FGHXove8=BHUx0i>A#YZ^dCz zx#b(8e)m(NY|}k*Zms$IhkrbBe{aQolL$($7e3$vUcjh(ShkoKkZj;TMtH>)z~8TR zuyaaU)S?3x}J*f!Sjd0z2#cDu1In7zr{8! zc`3PjMQ6dTf%zP%=~xfE_}CUr!!+QwpPc>b4qn%lkGcow-^2g@8LjTw6I$yd_h`*` zJ*F*w>D28l_dJkXdEml1ta0(%p|rZ;v1GOpr$p}3Bf!1$_+Iz-qsM(p(^iqc^0=tp z@{nlQ{XNmR`&qQ_i?Yq5#XaWVV=j+VT@RQu^Lz`IkcU^eSALm3+C3~+%nM9G9+`D5siQ|kzJYsd9T4LPw~$N`m0d2%>Kk+|-@rU=K-oxeuWANh zN5c!7|0}w7@oPy-yEkTUS?{~@qkC^j?OCOj9oeZZ|Ivr2y*M!HG35HdSEL7wIdQv= zJ+3u9vrB7v_&%*=?TcE=Qx_*UUwEi+(TT?&Xgu`f-^#h{3|2~Ox9q-TJG219{k2N=n)|?gDEA}CO??lfh?h(tI@va`*<6hy{ zJEm0lB$kO#)c?g)tb)(C<{w9kdzB;bjLZ^|xfLR-vR0G=>%@GOf%}+3=R99sr?X>N z{-Xbhs&4x@v2)qcj16m}+a4br6OTQCijHj4GBWeDW%pjz>Yvcp1^SANYS(2B(F64D zzAs(W0>t;V(lf`jl6?oX*|+p-?GN2EYte;=TbhnP{%q5Mr~kQe&ok10mTkKCDshiG z+NFmvKW3+sI$B39{%UZa+&CbrwtNdXr;k^d9|i7-_qFFl#isj3-LCHlSMdL#Li6Qa83^~qFgWE=sl2qaILoUqZhRDQwOx%zJ6_u zc;@EfgM0id4iEM<9(nv1jr+g%A7=cJHIpTm<)cOWv zy^T<;-^s@g@46+oU8|RBVZVC?dqW=9(z`cm zt=~U2wqWO`=*(4{4yP{e|0HMS{y*36(#O9e?(ZIvzh@0@cISSPx@fb|_olJ(S~I?f zdVE#5ZyLtmJHdV7%0W@udr4Gndq~vpddij~5chpUcL`8FB!Rs9fP4S19X@?XOYcdc?2^w2CJm(&{dq(~379)M_przoTHw z&diJzo9;<&-S9g(=e-hZ%`MppzxN$m9Dp~|-9Jx^!~RJL=q0nl{PxZOn1( zP#Aai`qkh*WeD6iFuot4z0%j)C|o@#$~N3BYPNkFzv;UUzf;<}E8yNeJO}x;6yX(< zCv$gt-TqbJ9)6lwpC6Pa^}G3jslp>1n2jls`1c6UbI|pi`Fk7O^L#kZY~MJ+xq!Sz z?&}qt$y#7*PH&`-`8n1nvVO=ft@6J^O6vYPx~**>eaq^AJ>us#CoNm76%X#wqU%Dm z+9$uGRc?0e3-V=~fX;Kj(DpREsV%y6pH_A1qLx*AnEOagFFA0eI-_UvV@ZoP{)6qD zcht5m*&*t7Jnn!8=eQ@{F((e|)KRNTM!r13$-Xqsusz&sjCn0Jdgie@Odc;~5&Zqu zA>w=Z`=T{xL|OkmqGrdVhSqP^0PG%L0rzepS(e=Vyuc)VtqpK>&ZA)-&y2$>Jyy6^ zc%DPN2BgS5fLmy`kq5Nu`RaXUo^SpR+6?9o)cbgx8;~eGBC`>nAhsAK{w3~Z{gCx{ zF)j%zs{JUkvH4)i+7;2Q&s`W3)!w4z9^9y9?OmrWF7no}Ywh_AGdw}E@CL0KztZ>x_<-1lEH z^5BDlv3u5%JtCnVwX`LRk)xtcZGXPeJns`+S1Y4yr%3DCjQOgg%j0owU)9!c!d|KC zepdSPs%;Mn?3V?+KZ3t~-@%@lV;RfiE8uB)0q$gnLAmh6if^=J+v(Z;SoW;9h-pesHSHD=Y??$u+?Q3%Yd`CUZaqH~F> zmS&Y*-Z>$-uo`;;^l0Vx9My97cDvRBxDM8*^V|h3`GI@2hKqM=l}FBK>;Cb=&DCel zE-c@BeqC|@nOCrP)PJ*%HgEY+0blO~r&q%LWr=sLUlm`o64>Ov65MZM5%NpAZGTC$Pq}lRYcw@5`Lm=PQ3tO|D_r)1qSYeImE#pq%TQwF0pV zG6 zZQH-Rr`_o`>pCFdFXt;buR8gG`=w^raQ9{GxpZFZc=CZURj1CylNt_h8*;9q%eeWbWr`aL@H^bGi>mj1sHF8(U%T zN$0pno!L;hXCAM7(`9h^%UDNqKk5Up&KC3JmAxW!>F97T_58lGL+JUyeQ<_@|CP88 zN|IP&zYs6>^L7+Y%*QL@9&2|kjMe=u=l!r|Pu1?3&!ZkY8!{FZeJluqujqvT8oUFUkH#*$I?oi*)TXh(I8}s2D@^~Y|y|RgF-j1BN=Y%Vd z4EMGiTh{7hUavDwF)G}fu7^IG`AO^gA|~7?i~#rQTn7Gw^XmRHrXF>G%epsYZQbaz zOT2z_a?diY@_tAitUebhbtyYJ1E*b~Ftu<`_o>qVNg(;Os z&X$&J8~kR``oaJ2N_Dgn_l?duc>3b4@a+#Fzx6GVzvh@oZAC5)Yg}-h2+omHSTEszb&F{7l}eLyp{A;(j=P?;Q71TX4`T_!~!pd!1+0?R-M!?US4PL}cj_ z5tvyk`LJ!gK04g1e)7khorTQXDSQ~mtHC|b;h$1%p~cRJH*_; zeZf`m{Gm0);c!p9KLZ`}QBkn=xJYbTYt<~UXCAMYd_534m|Rm&&a=NkaG$K>irA7d zMF!Ua0zTs$^?WPO9|7(y*wr-vasXSqXUjdDVxPE|^$pg%A?5}* zGyCs|D6iLYwr|oFo!RG_18lS_2X^r>Xt2Lc@NNW(wZ)&>mkXO_3 z$5u2ReEO&Ld!G1@;`Qf5!E*Dwm*F3?Mn0**>hC2svF1}m;S#LCG&BfDZW>qQ^%qFJ?GcEg=IO_?71elr;P6%u@+#$z4{JntX#9h zD>fgwd&~t!PSAXPa|4nr^ZA_ORbl?~9-ZJ`T_ZK%h|<>oi@Cs$rmkLDRd{6Q6pzSK zEpN{zE$z}Vt+_f~^ZfDie~}!3zJ1A_^;+|#lUn&*hqQtnd$sN#eD{{7a}S0#op^i~ z@cu5ewm)&~*6(~u6s-g9M=@VU;XV$U7wg2s3)LErjS^d2_u^XNKC%e=LBc25x8ZSr zT*rL|J}2?sid^ARr}J3tuha24a1Z`cx9f4y1Ra6-$ZFK+6|Omn7-p-8EbauCwc=e} zXDDopnV+cFseg0r9BTUZYiwKb)`dm-R&w{|jTJ9>_VuUnu5jGls#vy2emB7r5nLu`lrRDJy$AbNBVnqsvQOze3B~ zw?o@>d9U_Ys4x9X_(!cS@9c4{^QlL%htz&8bw!`n`1Glhj_F?eN96n50h~68FVUcs{VH$M??j_oK)Cv*7u_eNhW+P#gA} z!@e_4?2seAt^CFIZ#wR4c0D5V`}wPnNd1p7OdRSHBMLelY!b)jP`Ia0RrT~-7sDO3 zHEN#y)#BbitxDQA#?pSMkztJuYi*=|hKBD9rvby_-g-|Nqp)UoK}Z_%5b2g$KxgN? zX0MF^_X_{C>&9H*R}#9GZphfO&i8Tb2^8PcrR5#!*Cs#vj8@X!D)UueI~xGI*1xP+ zt9arp<~<+Q;_6mu_4gc`l(%(TQO1hR_opu2`1i=i0q?e$m;QbS{Qc_lBfvfOl0n`+ zvty6s_*|pXS?%`lxHs#1@R7J@5k>8=A;{fVTi1#;<8D~ockegZFg<_3SUaa@pNOei z30yiqr}_L>d<=Z2FWHQFwR^GWHP-F6t0%k~+;jfD86)1&C9=NOJtD`F$Fq!UgX;{* z^WpC$?oFJCF@=9h73SKYUKcu>`McEPfYjmqy%qQBI+&-^*X?qCK6T#F99dVud4W7G zG|w#<4el+!8yqF4`p>8X{2+Q!>%R2>C<|eEMIH0B8b??_^Pte9g$Yt(( zNGpG0P^%t1t7TUl)+$aNou0RGXKlu^P2WvkwBi4;j+V8rh3ig0gL1@u9dW;EINTd^ z-WPMuJNJ&-Ao;S~zroVy)^Rcv?x~A&-v?QzgLpj(dUx`oUXk6kAA46E9CE&0WD#?J z*7K{!tU?%gT%eFxY-HrRUh%Yh*v-4*O_Ox=xg}QXmQVT^13YNaCR-De2wdW zaXm4v3B)-DoJYj`1oQazx}NnnIgSPWZ;D4@t|B;3P(jV#MbtN6Ozc^jS$1yk9iipr zS{~|v(>B*?HBar;;BwrXHC1PQf}` zSsljyx2R9d>NtpVJFi!W$R9n=9}f4@1^}1DDc`5+VVHL_+Xu_zVR3K0Khzbt-=@sj z)1M+Q=`wkp|LdQQ_}+;P zcJ`X80}RT-{#{P;B+fpgUK^hyi=7u!{l?G`(Qt#y2!n9LYssmQn z#@I&bCJz0Cx(DyXyg&No6#qD)pKxBEQrvUTxisu0OCF!UeCYjThsAxdiRT-5=U(vo8k3IKW{=I` zpL31<)zIXZLhtXuo_4z&*U!XWdKp+N&-t2Oh+XXcJ+Bd5i1~xiY$tOB$n!^mdo_kR zmzDls*1Q7i>UACWqxFr{RXVM?805wjeug^^hkNEHEPNgFe`OuN6RcaV8-LU13tIiX z!anB_aXkV4HvV2S?-}a)hQmGe6RDjdFS#Hr<-dK>^Ir|EuIWqd?e^L856|5a)77cD zr5E3*u-7_%cuwp3*|`Z-$4~Dp+Hm^s3Rar^=HL}@f6NZ|dd*4I_HT+(%#*9$_6X*q znCFv!|LSm$HQ*9qD;OW-z>kk)|7fnEHI%=PDqSY)^TG?-5hrwC8?6q0TGswq*4Wqc zk6a7W?C0fUiTj;H;C_Rl=OYe>@8mUd?>g?s6!fxg%ifC^wso##Gj?c z7T6elEZl_sM3x#nj&;wdgM{|tbndc=M+}R5)0_kATwurbyVdXE(M`tpPH>NSU*g_m zHx%!&-xEmL0f~F=L1OxhdThZx=OixFzi(b}(*JlT=YAAcUB5MbL+_-twd-$K+_yh< zQCs}|OS3EXo_*P2d|tud=dIHHy_|0bU(UFgYr`iuZxB_RACmJ~%=tZP|3#SBCfC!j zi-(>1d+Cc?;D>wU9!;w>l~M?4I18eJAT&L`-%5(yV^gF zov_>%kkIU`Ikt7iO4l>LpO48K z>~U}D6Jt*h+B(`nb&bQ}o;3$^<(lM@^DW&L-HjLz+t*Mhh-t5HN2c8RKihaGVb?Y{{1u0!G;xpA4tGk7iYEd?$2S5Up}87 zl8Rc2cFb2;CW3MhgVQG)amw(x&vWX#Eq#J>sJXzr#;e7>XMFCv;kB(E;ngiSEbbfc zzoa#N^U@s5m-`#X@i|O<58S7;Y!t~YoEyXa)4@wwV}=%0xKvd24}p8kqto||we_WO z)bo+QXWfqCwF-;L68GF+#unQ{KZl-Ae_w0+9qN47_IMSzxA1)GlYPiVU{8%zN1=l} zfY|6kk&3*bvuhj<_r$E+9}j$;W0!d=%Xl6F|3l$k;eWJ8M}M#PKlj=6#eP2WdQ8|- z@rA;y{q+uw`!wva(FI$%QSzav@)cMQxJBj`-LWp9{k}j}e}4tstA64&LIYq8gN%LD z>!#yy{$Ap~2Dq=ffpLHNvetC(-E+&foqfd_j)v6rI2R7J^U^P{cGcn=hR1#3x>F9g zkF8h>+ua4efI2u6uT^7zw7AdjK8_suE~)veb6nFS^LnyjT%)d7*4Y>~Puac@^a<+@ zoW}RCU)j)0(>u1I1_FC(Y}fbHV7yej{ZWzDzU``TukHbT75%??e@uH!@j1D&+4ri? zU+r-?++!U)TRQ}7k)KE#Wx|vBI)}%7r>T#a57jjVpOjLEIRK-^y}BNCjfi`w1(>gG zSlq|K-`BKwgjY7-u>QXO0``Z$e0gr^*3sdf_+(7$I7Y67`_riTp&u~zmWA#engfj* zb7J)M+Z}y$a(%zZTXtoC&s~l1}BpBj{2M&&iSw1{_W3=d+R-6P5jXN*Io_oxi4r0 zYNN@`>~nUb!o9-QFvpSOUft(D;h#}`?QoB4^Go7B!_YoetrGDMdoV2S<8#3Co51rM zZ&=*dox7;jUA#oxzd9O!KYH9#>;Jx-KhJgV9QKywx;1j&26Ydu$7Iy>GhYzy_1qrUk0{-E0W~q} z;ot4%voc1w0`49BJ!;-qBaplNAn*>J$GSSZ9KjWzE1at%@eUi4(Y6cvz)^{J?v+X0 zXD!}`?_e&?u9dG7;dx6$F!rAeP6zf)EfjlD5cm1ZPg$C>0jy)H-}QuPE&$im1MV>w zAZ_t>r@ti@-{m}y=NzNN^HBR_={$e5YuPs9w-Wb89t3(MZ9oj{bp+;5Ml$B+`~}sY z^0)!^d<9}}<{NCacQbEx_Lz0{&SG`ydf~_sINo3Q`%L(IKij#!SIzU`@9lA~Y$Wl| zxe9J!SZ^G)0sIctyx{L6>lS%L)HL0&{=Vuo*0()-es0O;Gp}7!e{bmdbvqvyC4J}Q z_)kDyjX5gScQ(giaGwHPTl~G;JL;^c7`Pui`B9O#67_#ISIEcNj6*X==lnN(mRdTv zLdIg^{RqD6IPwQ4WDX&3>0R=e)xH<+T`OYC^cI7oYGJvHMNnFur3Hf%($~k=u9Epj zX**D3WXAt!aWCgY)T|d_InMI;SBHCIF@$@2BY$FZFDzP(@wzF73D0d4aj<>FHs=m1 zj1&LV*n{(s$2amY`rnBAZsD8Cb+L$h)okNsXSipb4%hCdUu7On;c9r?*8qn@;U0B6 z!^9QN{x%fuReurxzNmk4kKi0=eZI1HQvSQKt(_jR&5LhX+*h19t5u#lH@9S9@Y>)W zV}yCU(!L9FKeu$uy^;IVaE!p8MxriG^_k6aINUdb=l9%&y`wJ38i6{)PqO}xb69Qi z1E#U4#-uuOoLcyK1@XQfTEKwFT)bEMcVaxZi|v@+I&thgDqBYDE?I{cUAkIWTFELA zjTQNz>$Z;!oFz_#N@30pL{r%%2eKFPsmi@Is<|I;4 zpUAmJnM<}K-*N45?~nCxxaT!%m&n&`;&l_&sa>e}B`l{+kaxtP|MUjV4?DmX44uY1 zwitR{nFvJ9ZaCHvh^bhE^DmbC*Qi4$1wgr0PB$1`(LZSzxKFS zW7slZIXXx9XP3X5ynK~MVrTb_i~Hl}u&yX^e{K9dIeb(}7x+Bp>>)>`#;?xFhlE!Oo=jkSRJtB=aKTVY!rb&TsiNn#!2G**t)^?3g})Xi^_ z^JM7XCC&|u=X4$sIZN0Mi=2+bi0co@mfpM_{=G*;72CHJzvq6>bj{xOdamT}?faX0No0B3yQ$r)Jd&2KxN&iR^o&+<*O__6{r3J|-@_>fd&)VR zmqUD6bZq=qUFYqTK2gV>RhP5IVZ^=jIi~jUy_~}aY-V@vgZ4cr>M^&saThSJaDrn! z>;UuL@x1@immB`vBfoafR>f#Rn0~9}rpXXl?MZ zZTn@f5|HUB`r7xeiN^vh;@d4E7gxd8H0R=N}%POZgc;NIUF6R6l=xOzQeoBk-gq!T;^aXa#h zN{i6-e5~BZ+|y+`3jGuuH`o_?vD&&-t8c9|GG84*EMHqP}xg>d&bY?ou)<~ z%6S;fQF9JTEcl#^l}+z4zh9rv#~M`Ub4+#IuRu(&QDTUDSV}*KTzByrXkgo+eH)l3 zR@fx&R}%N+nL6)OI9EO>u6&J1uILuom2IM^x?Yr2SBtzhV1LOzVa9kSuu6<)0J|Bj zdqhUdZjs)+OQbKtUO9`fP5`tC=IO(7m)Nxq9rw)j;eF}NJLPA29-fomkqzEJ9zkBA zuuoe?PEXFleE^C#oJGwe_T+Br6pWfad>6iueH0cy6t2? z65kU4;9^0j+YL&smGxOsB`ain!x$&JWTl8M)>~j&qx8r0$!wfYC+$FVA?6KX9~w=90_kKxLuwSbY_puIW zowOyY4$v=oA3Z&2M=R{fqb1j+xVAo?Xe%6Y-O!b|Mh@2Wkb6`syz6%86#PAW?iff{P|sEE74E&7!EPR+Lm#i{i>EQB+wea+=$L$zAZz z#JN4jw~N%KZ6dXCt4L|sB2wx%i{v`2<6F7L(9{@Tn_3p^9@hIvLTw=5$IqlTZj&~E zwu9e6?qKix3s;{K0s#%fY#Zw(XRRJtFdedvokP5`Q00 z|K*6O0O*grf3(jQ?L)>x=DtLH4xEPSMB3Bx7zmYvH(ud=fMi{Q#^nic;zM%m>e@Qv&efQY(~JG> zdqsYIBd}g6iYh8aVMT=~EUyp+W#uBPu?4yLt-vOHc@uCBoSHG7RNF6-u;)c0bbi{r zB+TRI+#qT^Kk5+MZ1uIv66^2HdtTC^YPr|474re{`CFS4Y*!FPR{|< zIMcttc1nAt_gOsr4Q-O1PoN%PZL}T4y{Z+k!T%7pfc{?R)(S@o|5zu3@xA0}z`db; zSZycyJ2XtgrxWLLeKP3()a*hrmm<8N3;d%CxjnW{)VNe(@62qY

YVjiVm#8JRCN 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Ã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 l)*)NDSdaV52i_Uz~XafG(>AR-7E3$h*#1 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 X8}6I;InM96|9QXfKF0k|{qg?~c~)(x literal 0 HcmV?d00001 diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..173bee2 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,100 @@ +use anyhow::Context; +use reqwest::{blocking::Client, Method}; +use std::{ + fs::{self, File}, + io, +}; + +use reqwest::Url; +use zip::ZipArchive; + +fn get_remote_size(name: &str) -> anyhow::Result { + Ok(Client::new() + .execute(reqwest::blocking::Request::new( + Method::HEAD, + Url::parse(&format!("https://tipragot.fr/paimon/{name}.zip"))?, + ))? + .headers() + .get("content-length") + .context("failed to get content-length")? + .to_str()? + .parse()?) +} + +pub fn download(name: &str) -> anyhow::Result<()> { + let file_size = get_remote_size(name)?; + if let Ok(metadata) = fs::metadata(format!("downloads/{name}.zip")) { + if metadata.len() == file_size { + return Ok(()); + } + } + println!("Downloading {name} ({} Mo)", file_size / 1000000); + fs::create_dir_all("downloads")?; + reqwest::blocking::get(format!("https://tipragot.fr/paimon/{name}.zip"))? + .error_for_status()? + .copy_to(&mut File::create(format!("downloads/{name}.zip"))?)?; + Ok(()) +} + +pub fn apply_zip(name: &str) -> anyhow::Result<()> { + // Open the archive + let mut archive = ZipArchive::new(File::open(format!("downloads/{name}.zip"))?)?; + + // Get all folders in the archive + let mut exact_folders = Vec::new(); + for i in 0..archive.len() { + let zip_file = archive.by_index(i)?; + if zip_file.is_dir() && zip_file.comment() == "exact" { + exact_folders.push(zip_file.name().to_owned()); + } + } + + // Extract files + let mut exact_files = Vec::new(); + for i in 0..archive.len() { + let mut zip_file = archive.by_index(i)?; + + if zip_file.is_dir() { + continue; + } + + let path = zip_file + .enclosed_name() + .context("invalid filename")? + .to_owned(); + for exact_folder in &exact_folders { + if path.starts_with(exact_folder) { + exact_files.push(path.clone()); + break; + } + } + + // Check if the file is already up to date + if let Ok(metadata) = fs::metadata(&path) { + if zip_file.comment() == "once" || metadata.len() == zip_file.size() { + continue; + } + } + + if let Some(parent) = path.parent() { + fs::create_dir_all(parent)?; + } + let mut out_file = File::create(&path)?; + io::copy(&mut zip_file, &mut out_file)?; + } + + // Remove orphan files + for exact_folder in exact_folders { + for file in glob::glob(&format!("{exact_folder}/**/*"))? { + let file = file?; + if file.is_dir() { + continue; + } + if !exact_files.contains(&file) { + fs::remove_file(file)?; + } + } + } + + Ok(()) +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..c8a6f01 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,59 @@ +use launcher::{apply_zip, download}; +use std::env; +use std::io::Write; +use std::path::Path; +use std::{env::set_current_dir, fs, io, process::Command}; + +fn main() -> anyhow::Result<()> { + // Move to the project directory + let project_folder = Path::new(&env::var("APPDATA")?).join(".paimon"); + fs::create_dir_all(&project_folder)?; + set_current_dir(project_folder)?; + + // Get the player username + let username = match fs::read_to_string("username.txt") { + Ok(username) => username, + Err(_) => { + print!("Enter your username: "); + io::stdout().flush()?; + let mut username = String::new(); + io::stdin().read_line(&mut username)?; + fs::write("username.txt", username.trim())?; + username + } + }; + + // Download all the zip files + download("runtime")?; + download("libraries")?; + download("assets")?; + download("config")?; + download("mods")?; + + // Apply all the zip files + println!("Updating..."); + apply_zip("runtime")?; + apply_zip("libraries")?; + apply_zip("assets")?; + apply_zip("config")?; + apply_zip("mods")?; + + // Launch the game + println!("Launching game..."); + set_current_dir("data/game")?; + Command::new("../runtime/bin/java.exe") + .args([ + "-cp", + "../libraries/*", + "net.fabricmc.loader.impl.launch.knot.KnotClient", + "--assetsDir", + "../assets", + "--assetIndex", + "5", + "--username", + username.trim(), + ]) + .status()?; + + Ok(()) +}