From 24b4d1f74e145d9772cb12a13d1b3d29179829e7 Mon Sep 17 00:00:00 2001 From: lzt404 <2596933790@qq.com> Date: Thu, 16 Jul 2026 18:33:28 +0800 Subject: [PATCH] feat(providers): add API, OAuth, quota, and DeepSeek support --- bun.lock | 3 + package.json | 1 + src-tauri/Cargo.lock | 109 +- src-tauri/Cargo.toml | 16 + src-tauri/icons/icon.png | Bin 18703 -> 301702 bytes src-tauri/src/main.rs | 2831 +++++++++++++++++++++++++- src/App.tsx | 103 +- src/AppErrorBoundary.tsx | 32 + src/assets/icons/antigravity.svg | 28 + src/assets/icons/apikey-fun.png | Bin 0 -> 17719 bytes src/assets/icons/claude.svg | 1 + src/assets/icons/claudeapi.png | Bin 0 -> 17658 bytes src/assets/icons/code0.png | Bin 0 -> 12900 bytes src/assets/icons/codex.svg | 1 + src/assets/icons/deepseek.svg | 1 + src/assets/icons/fenno-ai.png | Bin 0 -> 118036 bytes src/assets/icons/gemini.svg | 1 + src/assets/icons/grok.svg | 1 + src/assets/icons/kimi-light.svg | 1 + src/assets/icons/openai-light.svg | 1 + src/assets/icons/qiniu-cloud.png | Bin 0 -> 11418 bytes src/assets/icons/vertex.svg | 1 + src/assets/logo.jpg | Bin 0 -> 54461 bytes src/coreRuntime.tsx | 61 + src/main.tsx | 5 +- src/pages/ApiAccessPage.tsx | 1290 ++++++++++++ src/pages/AuthFileManagementPage.tsx | 567 ++++++ src/pages/ConfigPanel.tsx | 578 +++++- src/pages/Kernel.tsx | 420 +++- src/pages/ManagementPages.tsx | 482 +++++ src/pages/QuotaPage.tsx | 203 ++ src/services/authFiles.ts | 70 + src/services/clientAccess.ts | 39 + src/services/managementApi.ts | 190 ++ src/services/modelService.ts | 192 ++ src/services/oauthModels.ts | 81 + src/services/quotaCache.ts | 52 + src/services/quotaService.ts | 882 ++++++++ src/styles.css | 2480 +++++++++++++++++++++- src/vite-env.d.ts | 1 + tests/authFiles.test.ts | 30 + tests/clientAccess.test.ts | 23 + tests/managementApi.test.ts | 20 + tests/oauthModels.test.ts | 52 + tests/providerConfig.test.ts | 258 +++ tests/quotaCache.test.ts | 38 + tests/quotaService.test.ts | 203 ++ 47 files changed, 11156 insertions(+), 192 deletions(-) create mode 100644 src/AppErrorBoundary.tsx create mode 100644 src/assets/icons/antigravity.svg create mode 100644 src/assets/icons/apikey-fun.png create mode 100644 src/assets/icons/claude.svg create mode 100644 src/assets/icons/claudeapi.png create mode 100644 src/assets/icons/code0.png create mode 100644 src/assets/icons/codex.svg create mode 100644 src/assets/icons/deepseek.svg create mode 100644 src/assets/icons/fenno-ai.png create mode 100644 src/assets/icons/gemini.svg create mode 100644 src/assets/icons/grok.svg create mode 100644 src/assets/icons/kimi-light.svg create mode 100644 src/assets/icons/openai-light.svg create mode 100644 src/assets/icons/qiniu-cloud.png create mode 100644 src/assets/icons/vertex.svg create mode 100644 src/assets/logo.jpg create mode 100644 src/coreRuntime.tsx create mode 100644 src/pages/ApiAccessPage.tsx create mode 100644 src/pages/AuthFileManagementPage.tsx create mode 100644 src/pages/ManagementPages.tsx create mode 100644 src/pages/QuotaPage.tsx create mode 100644 src/services/authFiles.ts create mode 100644 src/services/clientAccess.ts create mode 100644 src/services/managementApi.ts create mode 100644 src/services/modelService.ts create mode 100644 src/services/oauthModels.ts create mode 100644 src/services/quotaCache.ts create mode 100644 src/services/quotaService.ts create mode 100644 src/vite-env.d.ts create mode 100644 tests/authFiles.test.ts create mode 100644 tests/clientAccess.test.ts create mode 100644 tests/managementApi.test.ts create mode 100644 tests/oauthModels.test.ts create mode 100644 tests/providerConfig.test.ts create mode 100644 tests/quotaCache.test.ts create mode 100644 tests/quotaService.test.ts diff --git a/bun.lock b/bun.lock index 46b7972..abf4563 100644 --- a/bun.lock +++ b/bun.lock @@ -6,6 +6,7 @@ "name": "cpa-gui", "dependencies": { "@tauri-apps/api": "^2.0.0", + "lucide-react": "^1.24.0", "react": "^19.0.0", "react-dom": "^19.0.0", }, @@ -246,6 +247,8 @@ "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + "lucide-react": ["lucide-react@1.24.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-YT6mBD8lGKkg4nM39enlm94/sfJIiW0YKUT60fBy4YK8tai31ylg1VhGNWxkpSKHo9UagfnZqwIff3HTDQwXeA=="], + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], "nanoid": ["nanoid@3.3.16", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q=="], diff --git a/package.json b/package.json index 12c4ac5..2b4dbba 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ }, "dependencies": { "@tauri-apps/api": "^2.0.0", + "lucide-react": "^1.24.0", "react": "^19.0.0", "react-dom": "^19.0.0" }, diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 2f6d437..f1e1a87 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -407,21 +407,34 @@ dependencies = [ "libc", ] +[[package]] +name = "countme" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636" + [[package]] name = "cpa-gui" version = "0.1.0" dependencies = [ "flate2", "futures-util", + "libc", "reqwest 0.12.28", "serde", "serde_json", + "serde_norway", + "serde_yaml", "sha2", "tar", "tauri", "tauri-build", "tokio", "tokio-util", + "toml 0.8.2", + "windows-sys 0.59.0", + "yaml-edit", + "yaml-serde-edit", "zip", ] @@ -1264,6 +1277,12 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + [[package]] name = "hashbrown" version = "0.17.1" @@ -2394,7 +2413,7 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash", + "rustc-hash 2.1.3", "rustls", "socket2", "thiserror 2.0.18", @@ -2415,7 +2434,7 @@ dependencies = [ "rand", "rand_pcg", "ring", - "rustc-hash", + "rustc-hash 2.1.3", "rustls", "rustls-pki-types", "slab", @@ -2650,6 +2669,24 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rowan" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "417a3a9f582e349834051b8a10c8d71ca88da4211e4093528e36b9845f6b5f21" +dependencies = [ + "countme", + "hashbrown 0.14.5", + "rustc-hash 1.1.0", + "text-size", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc-hash" version = "2.1.3" @@ -2805,7 +2842,7 @@ dependencies = [ "phf", "phf_codegen", "precomputed-hash", - "rustc-hash", + "rustc-hash 2.1.3", "servo_arc", "smallvec", ] @@ -2886,6 +2923,19 @@ dependencies = [ "zmij", ] +[[package]] +name = "serde_norway" +version = "0.9.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e408f29489b5fd500fab51ff1484fc859bb655f32c671f307dcd733b72e8168c" +dependencies = [ + "indexmap 2.14.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml-norway", +] + [[package]] name = "serde_repr" version = "0.1.20" @@ -2959,6 +3009,19 @@ dependencies = [ "syn 2.0.118", ] +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.14.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + [[package]] name = "serialize-to-javascript" version = "0.1.2" @@ -3486,6 +3549,12 @@ dependencies = [ "new_debug_unreachable", ] +[[package]] +name = "text-size" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233" + [[package]] name = "thiserror" version = "1.0.69" @@ -3907,6 +3976,18 @@ version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "unsafe-libyaml-norway" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39abd59bf32521c7f2301b52d05a6a2c975b6003521cbd0c6dc1582f0a22104" + [[package]] name = "untrusted" version = "0.9.0" @@ -4705,6 +4786,28 @@ dependencies = [ "rustix", ] +[[package]] +name = "yaml-edit" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d25d3b32461fbd629221a7356eb48c86ad435356db0bfa93e26e8c1509c1836" +dependencies = [ + "base64 0.22.1", + "rowan", +] + +[[package]] +name = "yaml-serde-edit" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5bdfd93bdf8b688e9a20708d5eb55faed433eb6286e8f0d5c08ab6f1d32d793" +dependencies = [ + "serde", + "serde_norway", + "thiserror 1.0.69", + "yaml-edit", +] + [[package]] name = "yoke" version = "0.8.3" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 7a2f72a..8cb40e7 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -14,9 +14,25 @@ futures-util = "0.3" reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "stream"] } serde = { version = "1", features = ["derive"] } serde_json = "1" +serde_norway = "0.9" +serde_yaml = "0.9" sha2 = "0.10" tar = "0.4" tauri = { version = "2", features = [] } tokio = { version = "1", features = ["macros", "sync", "time"] } tokio-util = "0.7" +toml = "0.8" +yaml-serde-edit = { version = "0.1", default-features = false } +yaml-edit = "0.2" zip = { version = "2", default-features = false, features = ["deflate"] } + +[target.'cfg(target_os = "linux")'.dependencies] +libc = "0.2" + +[target.'cfg(windows)'.dependencies] +windows-sys = { version = "0.59", features = [ + "Win32_Foundation", + "Win32_Security", + "Win32_Storage_FileSystem", + "Win32_System_JobObjects", +] } diff --git a/src-tauri/icons/icon.png b/src-tauri/icons/icon.png index 923b052dc4bca7b251f198ee19f702527f0e61e2..cd2a9045d809f7398583872d923d76a02abed200 100644 GIT binary patch literal 301702 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�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�C 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�cPaV>XYM%3dvATf>~Q9Zu?lY-=SorJId#=|_CRAWMl+wz zsVeQ+F6$w~Q2{PP)zBaIIJ{e>;8-6eMzqRone+l4dYF80MKquyOaTR zd@M&3JjX7M&w8X8h}Pm25HKd4-t&q(EqnIeD?|Dx+)L^>c8#9|A~jr6r7i-Idi&Yr zvZK@8CK?tC0A0Jf-I5-QrKW8s>ee(sK(?T++Urf?9O2|gav`7hk%S}`K?tAqNCGj5 z(eaP}hy(4~P(F0lT?YUSppN8H61yvY0wrbJS~n&th4B65U9C|TR?9wa-tfd@f6voD z{0HVY_E{f{C@i=@%#jO))gGu+?qufIc2DDK!eNoEAi;ha%# zh^aJ1QF!2>_5$tj@X%BC1}^=^nl3Wox=wCF%76iAkhx_0#4dN=cOMrn-N9&M1(!>- zG6EqR&w)Pga@9Fatks}j>_PXJXLvO&(dJI{0C)CpdA{#9Ol;cfP26^(&m zsmP=sA0;FPr~>_PZ8VkjT>C=GP=U~3ouk+5F&Yi&_j(j%&W);~>=ld#eg3Q8`PY1S z`4fKh6x2RE5kQ^-BWLSzbO4N`cxqY0HJDtN#`xY$Us4ek49 zVn~LNcehazFE5I?SYCCTwbXg{{{QHqC9QK3!!-qR(T3&nA}23$P?_(KpuOkW)Sgnf z=w+`}6C(@XYI+xp;z;XSWeT)9A{Bm35u; zK1kz$ozz&+Co$x`tRh)BbkK73tS9+$Gt3F zdKtmm`#efTBsV8WZu#>(e#H=wi$+FFY4~?!7)aZ`9{KzdRAvkV;e5CgPp2w{1Y7Y+eK~? zz{)Z67>{u58;K5xn^y>5Zbsz!mJ(yFN2SZqc2fnb+gU7l#5tBsWMrAARn3%QayVh6 zO0K{AF+Y3u8GiokFQ}`Ev#UGg2$*Sb{_d)#K}x}_soU~E-FUA^8|}wDsaS~U+)ODf zzH_2>HT~5A7w)}_i>J6$31?RAAfNvKUj-89s-ujS5V28BfH z2AeDF+@R~mS72mB@X3jxz zcpd~C+SH6kBlZtU2K_$0L682RN54OynCD~@#p$&j{>Oj&-}ChIzu@VA_&M*s`8E%J z>0!3Ew%MN_qG_1UXDEDs`dsARtyG#`nUg8+{rK>IiUaUox0FG#M?5-rDGRa;95bx5WQ9U&>&qY!;4HmS!Iyvi z5hk+uc)>ZE?oY>-W%&qpA(P@j9wk^6`87?A@Ai?)(<(8!OD_6UwsJQfZ?E z&Y5J+V^_qK>ml%}kn#vDg`H!p`}26NA{?_V7p2t=kr$^6*LTsYNO>Lgo9EGqX{?Um zsjCifU4%UJh46rB8<;bNpRc&m7cgf5m`iM+7XA5D)sr0GTZWNV+7TLmh7V<31CDfm z$puVmJBDD^ZYiAg*-E-aN7|*E`^+!?YGH~bO{N`!H(qP2h&83K>) zH+Ur!+xI#X>a>OLUvHhI==a$@eUkpxI$~|WaCeLCi>E2aecw2w=kshLG$WCSR)Ndd zIy2mBYp_M3yI@@>dD_pM$J?NqMJKP*Z?=R;q0^bbw<8^oM@()^aQKvr4fm{#@xVdh z%fE*GK4(v#q59>UeE;ts=Yx+wRMgBO7EUusTEK4T7B0=g+dXy2|s6Im`D`RN<_&j>wBiwQB z0?)ko3m*H+$2fn_9o+lyeGG>~3e{sWIq(d0c`!neSSdn!gaxI%;FvAs5~HW@k~I() z$>P3S*qttUF1_7F6*%%{8^ObY^?e`8UXQ#e5muuzFTfhpV3k8De6@%1g4v*P)O_XF zAECAlufFt4r1B{`k>^M+R=VN#)wHYi~!}q#sa_!tPXsXq7&9yXphrSP|Xim z-yZOVFWt?Xue`@QuYb(O&Kkp&bA0gbhg36*wzY2++%!I7s3h}wMblI`Q=xTD-89VR zGu9i;sMhp`eR7vmHFH)s#%vB(xVd+k*Isy=a~Do?`phnMJq5he zAaq)TzrgLEDyz5B6az~S_|?;xy9GxnopH`r!$w8{?Q0S znu_hx0qK#K)_hy04Q;51j(K&d3ZPBkc879{I^a0f+J!|@#o68R|NoD8l+S}1NC){> zH30noNx)-4_qCpWvbGk98fek^!aB;lpq_h5*q&01dqZwszQSMr{a^CRQ_s-TFjfV! z(w-{wH6gbgo3}(SM>xo{9E9(DC#7U{V~y=oCm3w4!=Pa0^a(aEo<y~q`R(6C%pT_{`C^|oVT2n(H*7--V=I~Uzqw$#i>j!O= zCE^0K*4|q#3yNOJ=GG?LTU+d&+~ucFJw>J@7tfsIa56>La|%)T8g@ab!?tK=ecf{a z(D_bsKJ0IWuXA>>)v)j_eJ9lvnJaeAo#de}Jj9)M-N|@;g}Kz|Plp7UO|x;h(e$XO_S9$RfDNDMNjxhK&=r%kg1${*3j!0{PTbI&w1qj2l&pn zo?yCHvAwZ^5E*5jb#$?^Ti0IsYbKMaCuC8I;c&ocG-f)UGC4eCb!8P{1+&SV(dvl3 ztGCEX#czM@pK{-=Yy9--pYr%${~Zs1=?k1bcZQvnEe<9J?9KOmp9m?@Rnr>HuB8%< zJpt^(`sfht&&{g-giE!Uv>F%!`HUl^DtM3tK5cuh*x@bA&BX znL$d2vJ#^$y79EaQuydfqYQ_K2dwUF@#U|6fxR2Ic<=3x(T$<921TDNlgw+2npP;K z$nq(@L65A+kmQuPVAvb;)IU7MuYLV12Xtaq-Uv?86KzRor?omjV1lSg`Yp6+fpC4PnR$c?I4ZMa zXcZ88Zl+|+(P&I5@`ZgX^>S3$crMEtob03rhYbCwG(W>(UCVj3n~9EbJ}T@1l> zizY*Pa+s>2Kzd-Bb-erhtNie>$N2E=_ZY~G+&a)^fdS8jjcP-n-C67DGo1&OI3&(_ z)-jc342A<%S6A6Rc@jG+$hTKGd-ommH`ka+ix!5WEKs>G}O5_5#b%znFmv5dC6cjLYuCcNVNW~HO%J~y|RZ?igM6r zb$yM-XwIBI&EEbVjczE50$m##XFMAsc=8_IcuL;JppEzbUEsQR!W%tC_<);rp7C$4 zYc@}AbMFK9a@T!#v$4I2la4tJE(294^4tTgd^x2J>%%qv?eG5A zy!HOu{N$%U;jNe60QVyvUXd7s+9m-ftAc4vilvXmC z-Qvu-T^{|?!%X%k+`77tt}B|roGGkeT50+{L(??OrgH{zK&CQktvRuMk{922o)?~d zkw?DzAbYbLp)An0LzMOaNbj>t4aD~XT1Rwa-lheu3B9?4rzw4xQ9^W4STNQh$Pq$P z(~!#oWgXSLCKH0w=e8M*zRXK6zRK&bzQyWble_M@z&me!z;r&PSM+I`hCI({8iNxS zXPef5vVlH%ZEYQ6ZZKXQva&Y7%q{y@4;ieE*j^j5zjuRQJoz$r-*jMXxJ{=iBN5K>{L7WA)2YeNmPll|`L1mi8(MEmVRWWx?}zLbU1QG$qiwuEOg( zA9am$8rN!=znE6QdYuwq4|?v=-u$p_9HOQqaYsy0gK95kYxJ z;EK_jQf1htVbmW{&*uE(NB_V}Klm}T>o+KkBXbVhXsq$d!A7G>hyXVAi@;O)b_Rw( zQ04_qp!40?IlWvUnZ&e)yg$RYjnGqS92EQgr{j;8Mnu_&WHb<^*zUp_GNiZ(=eG#*grhr z=Kd{i?(bo&N2fQ9rN~Qa+aZ=s6HDf_?|^14v0u3e8bV7DN_y{EYc_Vac;L=++^V=*E}Pl?Ac9&;dn} zL#CPDJmlw3J;|%jzs8yElk9A6k~!ru93g_FgioV5G8{fHtpiz6Q^gj)P*pXDhZFYq z_bJPg@p!~sYi{iCv%9@b(`e?iir%24na!yuIp;Qax#Qpd?|Jo&SNYi!KPG>9#KXV# zD8tdn_e+RrpO_YlRV6J?h6#qO^Ttmo`%Hs&ejWG_eM_1qIv;1jUSC>f9Vtt?OuGZS zn2Zf?N+~FdB2dywq_iM1Ukd9SnesjEwbC?=rg1gpu%JdWo$qns;%RPNxrgVUewl-t z6RN5rQw6G5;Dlmcc|)$MDqnFED3_&BtgWo^o8#^DC^c zZt&c*uTm6!?z#6a-h2Ba_V*4M^oP`S?Q_d2qXD0~oK;wNz^rbljbU?b9c^oju2@+a zB6|gsTbjYR$I57%syXDv=U?aa`7L%%ZBh<%3JG;n`-&_gP;$voa?6s*1s_d(s@`b7 z<2s#rI}vr{Ptlz5%n2@FB${uLrJiI0Ay0LzhyZ>xM!oG6c#xMyllI`ycbfKPyLMktYN4Wc~(--E1b1t0Ur=d z*+t>!Gae09vp3+L&d+hN-G;J&9|1ST{Y3RzSUSSG9tl+B@CHKEg|r7dN1 zqBACvZ9yyy=zO851QL%qrnZ7Nl^VJ(c#sxf@sej5N(rn`p2<)`E^|+Oqy7HN2pki& zqi!@St0S&o*`q9a+;iVWZd|>|yUhn2?#+E#N^6V|%uGW)=%cOm`Ep|sneSS;K3eCK zcR%8z_dn+3`5g}GJ<49rLLa5p5a{l|y~pr=j6yn*?xs#72z*MwInO@oOh>3Dq;K&p z@CLPzFc|cM(Ng1bLDA2Gq1|x*BbOMAM?C$r=c(rv=kD0$+T}g2UcN!5GO&(GRZ*6i zuS^LTrp6i{MXTqmudagghWKbWq(AI)peOW)J^I5nGMRJv{Tm$Y%{X~>ll7f7id<3Y znFrJ2iMYD{XSSX1=s-jiejB#GjTMmU*$xAihS4QmJk%Q=oeE84SSl}5S?RjewV%7L z8QgJ|)o$67YS)1{@|l<>ig|*iIR0@Lbfh}K0og)kLUj2zkt#<)8=_s#WH{mLAyvE~ z$B`&No0ds0?Q=SbJ}15qbNJNX1p?KE43F_xh3ziLaYW(yW4J)y>y>{5o=*p#?;hvIN1w2YqOW=gYq4{KLg9qOYG0nyF5a+^BoeGa zIBz5helvkhNv~AD%d)G zimXtWrl!mbjM3BvilXNgdsS0pIkRcS-i>|sZyk`yoVu>DR^uErMsrwCJ&BJt9;<=C zT3@lDvJ5LEPDpCqFgG=-pL6QMdG5ITPA=Yk2P>OvG-&Dom{M8RmLDn+`1*zFIwraf z;1kzQ$|oVD#}p{3=#@R1Mq{-jlNr)@;+EVAUV8Qge*A+UA*OTAjdy&g_T~Z7Nirue zA*64NXMU@7LtSZftuc)U7gk!+7=zY6^lOc8NP`kMZ7~8&?$Gs3=F^JVtm1GoKJjtd#?%2YbBt+I40V&GzXP%A&wf)6~9mC(hGzXSwvfDqLWabdh%2f-^yPiKA*D zRWLE~pQevm{S{MDQ5vS2#3|w_3 z)~m`z2-eY#< z7Ek`ell<(7A5-leu+keKw9oSje7-Y=I4u?t_%TCL%s;)iQWu|RzVwWSY2OZV`H7kwOcr6L&#is0H4uJ=M}!ht)Z&s98M<8 z=X096@nR=b3}~x;ABDj1=WJ||?0X^9*7(wJAx(j_15GXo!%yjGlA1%o9fMgydS3dZJZ~xV|_~5N~ z*je9XWn~kkP4H+#S3P|0+!#j_s9BrFQ0W@o7uhiBaQ*7FuJkXIbm>4;vn#XMA4S{9RCF|wb;*t(0(Bf87PpMsGe(_p7 zcq>NrQieAd_e^NrENzzpRZ96%TIX}?!(orPGn_hel5-c%ar5c{G~O#U)*>BDr!)5U z_Q{JJCme+oSYyeH9N{v4`OA0s^?5~J6gbx)Nx1P_8MZ7G<4whUc)}V7N$NGoVgycx zu}48@lP!Y5(dD-T(q2dq8B#cm5jcr&0c{MzI#$+teEDl%U~6NWmtS}TX>-n9ILVdE z*V*4|Kom@-b9zNiuh(NXt2}9y@#EGsHO6SHX&8(O`pp2NpJwi zC0CZ`iT%zwW_Fcp4-XxI5C~`>byihoWmR=$S9SNSVb2;ixwyDyX7PdK1LsT313v;E z$QM4$;;e2CyL+ldshmoM6v#vhAdyf3EdmHcAOa!WuQIbE_;7?ByY7L^y19_ye*Ip% zcF);oi~rvHzdMXH8aQ!i4@fI7GNPQWNH7a_R?y}2`7u4Xm9m~xhQplJD}x)75s{q}@Q-=?J`O`% znBGgp;TNp@E%)BKJNCaNp8vR^IEu3H2710^BudtclDA%bnV)|5hrD<7O~$I^_|`55 z`}e)K3h1_tE1JBaSOh3sq-peevF4MT;Rgxi=4Q0n!(x#>nttCr(6aBS&(_5`|IR)|QDk{+PoJ!v#Th?o(P9GwfKZf!fk$;3M^Pz8#h441 zF7VO&pK#-&Pf@nSH7!m_Dp@j{%@~b`tci(dAQV1@H6Bm+^ya7BzWo`yXLr2J_MGmh zmp|{3IZmlaE|>}zM=J-z6!d}&br?ziL|s7`|19Ej7BInyD`}U$7QzVu%JIZASJ>Iv z;)P%QmV^D<96z4|ckjbR>DZN3% za5Q9ODoR~2n2ab#1^b`fWTaCj6w38nCeAG;uBehq0p9{`m z==sk%PI>`j4*#$2MD`hZUcUG8RYsd`40@iD=%v3?t$^zVbS_5>T&G{UW{B`yk0Zgq zD!!($S;b;cNxLpn(6jgPi>*kd6&^zAbv?RRg%~2od?fDY7?UG6>GyecxcK3Li1Egc zE>dt=i&7Z27vS0$J9O8Ocx9xUC3}+%%)KekefRtP{D1vE`=8$C#MTbBHQf937Q^w_ zM`kex8uCAR)Q|NF-536OCPC{Qh?BnzG>HN$GJszN_GsLHl{m!?4SybX)VLan9a>?PMti>wfC=47NwW#kargNJ&5^4PYe`>+N9#({N%cT z;^an-Tr1IO{n-E5$zS)L6?qHKb;>kIeb}>@ArT^;{Z6$DAs7rw3Mp9V1!biWt>etO z(_Fmt5H~)$;Ti3U0j<^yh69W>%olUU<1paMT3XXG8IJk%)+c=M-Zf5~KTX3j<*wu1 z9~Bv{e7khc1QIJuK>agCBk-O~yi`{IYI9HfQ??R_Wj|y;Be~r@HO~2@P24WXLXJ4a(ny87bcg*~s z!;VE;9orV2!wDG*Lh}~-4jGAdxezYPYeZNnApx*zs5>+2`o<)j7@G(hvYc>sm97Ba zvGTG1$V&eQJj79V9DmH+le}U%8(afKMiQUl_qi6~0*jfpR2C{KuD$vu&wuY(-um@# z8E81QzJr-J;2e|T7;S7AOw%1K6*o7miw*2uah-~?U@#hS;qoO$n`=z1=EQ}woVt7g zJ1VIqXekj@!P07ERiLDIO5#Y|d?EAkscHSQvZ$jC_v+&)&h2c;drxO@mH7N?bt+tj zS@3@Eq?I`BP{2nYUZY+vsR}>oPf6+75yM_t>my(*1a0H6F7)v`2hL!f3kJj&JRt=O z-Jpe~7?zy5aF&aYJj_FvFR;G5gD4A@qV+6^gMvaSR8`=l@5PV(^-7A=P$NR6iVJ)T z-a~-ITOQ>y8ZYN4ghIBC^~n~uKKg{e{j2}XyRW^$-qtQBkDW$phix0Iwqew+L|b3H zXtc#@8@d_{t?|%*YrEeyeofS{q!5|(RyjuF38T@-qb184IW)*dv0Th)weQ&< zNDuwCb}+k)%$MA|KTWNK)pWty+8QU1pJHQulcs6?T9w&g z7uS~*q*yWjxrT`mOhf}*!YMnc?u>ueC7_6731fFh@8LQofgVCBJVR!jvgxEJ%CbTr ztR>J$d0#Upb(5FBOZS2JnQT0y#MAWOb_mJ?!rmd?o9aj+6_j-F&JNV zU@W-Cv2=b=QEM9Nx}~iR&6;;4b)#t;&s3?kVLYC&Hri%sX3X#J^V&=A^3cW89NXJw zKEIDFOGM!v#mIKo=^2-;Pj3kx5W{zY@9Ii><=I`gPow`i8`Z<;qiuDmsI_D9m+3YA z%LR7A@VpfLd+*oW#qhs-ucL1R(lwoL#Y?Re zW(aZkBRJwZzt7`=keN9Ai$C|>SWcJ7T72)kFoDGlL0h-14Tk9bect@dD?Iz1@AB!j zkJ%`PtW}k-)Ysb22M-K$Wub6H-ggq~o;4oA1+Pq;fTAoJZ>)3f@!O3pP~d3WDJ`saVy6%%SBeJZGGN zLUR1%3C=!zfpZrxuyg7ds}>#M1?_6~sY z`F&p$8QT1e2|N-GD+MC7o-IrRLa=w{1ZN*Q&#`02sGF8sH*fOE_3O+IrVNH7s!_#! z{{UTUr1h{b2%NDj!pwtZy<|F_F*}%Y@6J88wzk;VSZ6Ysv9>nBXv=ssW@~Gk+qZok zKv@=H!=*2(N|9*)w06Zx98y^+x9_r4C1g&0h;Sp9dhTpEL1cEz#|Za6BJ^{6Fd;a0 zq3TyUAjq5_VQX+gFdUC*L<`zGoySk@aqhx7?%uxdy9^3n)aX+;j=FA`42LM^8ToW= z*jU@*+WQ}I_s#+9J0-1ckTPGN&pU5N=j+_+Nj;RGBcwaRFE(@r1T;W8hfsd9CYF9G zM_M$R!bvvDHQJ?SI-R2i1s5MV!->5;e*2r(xOw9Jd&0TnpuBh{GU6#d}w8uzz>T`3olyLesRqOTe>0 z#X1)oQ0KmJ`P~|9g;ZyiWa!Y#KgW0-TKH~Akjp+T2HYamLM1@EOU?EW^#0i)==D6{ z=$zZA5IZz0p0Xm(za;_!Tp}x=`}}M`PJr{m_4;0i=)A~OXqI{0j#Pozi_{}BaMX5) z-_Hq%;EG!<{7d*x{sI0TeBL$?~Z$e z1*-K4rc#UsV|1yolE8{Zm_6W&ca-W!+^Ky$P5)$0+p?qJQC{ue` zU``YQQAmt4SevI&JmqSM@`}hfw$|3sP0LF^{UtyBhwpRqWDIGrWEEUFHW( z$7mQLY$1e~59ix49hRaP@X5`Oxck{Y+s97P+69qv`$2_k*)jy@(+2e>y@AB*G$(z! zrE6w$*&1Xma?+EHS?dc0t#f{)uqY8$`gT$&Fc?p4Re8-gj}d(Z&s4PJq_1Ax+2+p&H5C< zUU%hazymI}@>wDU*0Deq7p4ft_&-4R5y41-acoI+HlqN}X3vHK^F+Oobz{YAxPUCB zf<_@JdPNJt!|q_E-q%}MyjUFAFJkD7Nk&)bI)U|3cK9j5^`F0hc^l#HUSjC;GUtu8 zD|xe+^ReM@%218$K%pp|!!<1u<@}`!RFe@5D$ZR#&)Ugj$U(`n5XgbTl@hB&VDa-t zND+#9LR`#-(zEagR(3*IG6%{aFS5cGp1P` zbZc_8(blHOKbOWd(_Ccm?IBwj1C7`Newg#!Ios(Sm-UFR1Rplummsup9+r3MyyNX1 zd=Cu>d{it;ixL&PCw4rQ^1V;6Zj80QO-(8prcGLJkYg!?@&DcY#@*;ey70wIK%HNNY+H|gZXIeaX!H(Fb2S1K_-2<*2 zBMCqifwUsP%Sr%Ei?lG7C1yJ3AO8NkJolp?Bifd61C>;$qD+iiCa}rbu*kx?K+cjK zs37!0`e@Nf$*G6VaqP?~it&(QG~oEz)2yFANi$GbrI1zOBReU=WI-QId77J;^S6n6 zI#o@_l}iXf9?kz_*0fu&-wWkRPRQX_($x{CB7?dHqQE$dY%Txc-~M~vd;Lu|2V;cs zwI-4Ms=J+7V?r0X;ShxcCDBIH=$5sObuK(~mJ3%dbK>k7Hg>mZG1O91O-7Ve;X49K zM6 z;PmD$V_DH0EKovHRh2go)*CFXTi?5H46SJ~+7G2^+twF8`bG4qlfrj2xI!XF6~oDx zlV?wH>B_^bZ*QOqMbrAahSAo9LKU>S!L*GhhEcG6VvEhKr`S8S$F+AqlS%!u$v!r7!Tz&>v@AQdkiRK2qO6 zNN{-qAt!8Lw#*K2V5;a;TVLK1O5_MpQY6{RQV)ob{|6@p!iMS&DUz&3$Us`p34pMX zG?StdnAYK}W@mSk?cGgod~_q^c`dEhR8cb>bf zQfyVPMh75Ol#9?-nLXd@cb8r9Z7Kk?UPq|VU1Y66NQ;#QDJ4c2KjPYll{BIT=@`j^ z{l#t8ch>moAAN!M-u{Sp-};!rsN~$m(|mUGK6mflr;=qVdTzBvIEywNVU=zTZQc5I z)>enQ1Izlx2J^P18aPJd4Vq@k`)}Uh)~EM)`0)#zIChTx*=^G6-&gjcu&6esXB?pwFs`}FV7ViVlISYuf42eZoq+HN zpOxA;f|`h2(avG53lL=oDVInpDR}i)FY@ER{SNo9f65pMMp6bYeJcp_*cHZV|6N?S zIO!9EH;oi%>+1r_!HDhS$Jjf2nnpUxwIL5b{S<0EU@8secmN1mYp6y893GmBEq-L; zW5Zh8P|3U6{+A&5(h%T?_6u-k0%o*_GRmVfloPCH(4`1Tk#q)^q08tg_5>z#y8Vx-2 zp8}ygqoa@b6-sqV!`D|t4?LDnMui)ox{wB|RN)Vn6(~`%J{)lO#%-Se;ZJzwmoFe& z$End4gR-PTB8;UPjx z;zOJ~cZ%)f#~4mVES3u_mf>iGDuWTyn!%(3Q=r=h-Lz<{kweL;3uoBc+u@UsuJis| z@3VjBKI7dDnng`JUt)A9Qj?&a2IC9(=^n>nsQK5Rz;XY?>jY0S^B8Vn82yw z9pec5_c#*-#8IhMkcezLI^UIZe`FDs>;3Fpmj3FZn67I;1ce@2|FFR@T0%96@=l0w zn9!f?!t^?&1X^e&8)Np4Z}V1JVvM0Eix3=mltODwLHs%9dlk2D-9hVal3(r|AO0?@ zCoz}|D|`{559yO^c16xz8Z?0gy>5ue931s{XxWTLQAxiRf=~$Phh|9$6$(UwZZ*Sl zfH8AwJ!8DS#uLvx%p zQ`cy1nQRIcizOTDV{nSubiwA5Vbzh%;w=%LaLH+isBKp)AJYN(?ppyW%6|y>q8&}N$jE@qgx1ce zFZ*h~hn8BGh=BTEIN9x$FLQVdWB$&ljJxL_I4?eA{l2Tg_0~V47U(A9Gn`d2$PE1?} z5r+FXU-%`JXX{(r++g$A4x^1VT&cKpw!R7#w}A!ziwY%!jJrxo3aGkALt(CRVXE znfRP|5@gpQOn?;;aq%rL7DwwWswlYd@MSJOa)~n!onvit4I?bN6v$zPstROPAc`W4 z6ZTG(DtulsM*fBl-gn_p#>#LHw|bPoM#RNgl#mFan2d)k?oIjGPk+MmKl&+pf6ne` zgV9(qaEeMQ>ZU%dV6rx5es96B940Ob=lt3yCP!z_3W?FeMEtWbnTYRd6Vs4QQFHXo~{f zw2an9I0L$Fs9VkM@io5vmw&>mzkQ1j-o4IXIO6R2Q+#^k7R|E7YLJBl6c*6hVU5P< zCDy>QZdo*%(ZQ6R-5u`g1@&^k#>N_p1C3CQ$@mxt^Urws#Wy&A?-W-aJ5M zXbc|uOLz!pInt0vIb5--IYHXt_?0|+>YR^g4!N+uL$$_seX;83iriL58SM%UMSiaG zRC@R-MekNb_R9Rn21oX?H82ft|bJ(=SXsaXBO z$dua>;Sl?LKbW>yVfKf6qcB_(35k6?}O3*MZp z@zPIz&cFTt{A=G)AuATs8SB-Eel>R|Gg1gzXFz%i)fS5!lw5e^VV?Q&7uY#*jK(y$ zfua};kflJD1uj(dBSPdK^8C&@jMZUbydh8D*af9XpU&3=$IR2G0@@dTzVXtleD80+ z!>1o!=gjso);EtaL{VCSXbooB;=&kLOBiizOn^dLnq}S1CQ;wbqnvOIv%? zp%@hGp59~Y*fu9l9Ounft}?xQk3xY(V_E^)^AO13Knv$v75(?|#=R^H-vwYDR+UL^ zh3MD}`?f72ajsLGc@&#;O)ihV-`U!}MRTjV%D>X*@cR|Bz1(O{2fJE`Cxj=0Qp9N3 zfwDgJBsECK*6tP?TWd`3&wYw8)B(j}z{YyM1?!wI+%tmZ{(|ZKDZ3k^R2b>{3)71W z57{8P>S(T>Z@;|wc+f!Q{20Iz@5AIShfviQGo@meLL8+}LAHu5;`9U2ffcfv3NEncclL-x{l1WGO>khz*2K zN28yeU*#98<5duSWtj@+AD|L@BG}1#n&IH`=MxmwArUT<`5vGuk^>hTkvW7K#r=-= zFVcJC#S0rLZ+q{|=`S*3tY}kukgO$gBntvm7i~avW}g>klF2fy!71jy!g|fbN8bgY^jRE3KYr{ zut1Tp4`W0FcpHejZHT9b{QYrLaYrL?QV1Y(mCYj8uhS1 zR0X1tKCKjZ$z%T6%c>0iRhNqni`UF4Qo4mc0nOIq8s2q8uz2Q-)Q^V!mKB9CH80EuR0I?^5j7l#_z8aIfe^-5eB+=HVSr6zJBLn4(3a6)z+_PJ-dpeR{lEVQ-hcgVb|xD77K-7@7zf?b~d>A;m3UR z{x$aR3S8aLPM4nK$~auBDZ>CJCnRXFrtuRGWd*`wOoLFK8PgejSH}8gR|plLOP?4I zrrHJA5{C%qFj52iQ8O+SA{(C`DGIc66haUya&VE{#-B?Qh?QdTU{tmd0r1X@=u(yf z95EN=jfU?u3kaYUIORDP+GWe;&N?WE!KZJkvhtlAjYd@>;I0CvBw8CrYD9g%=H9J) zoOoy*?X>^SE;t-fmy)ITLiA#@5wcw|SeI)~Bvrzu@0Q@`4*BnyhR!kYRpu_D0oH~Y zDgLt^&J$xrG}2lM>2<3@GL)sCK-n0I5$L+6X&X+R+oT*k%!eO*!nOB4Wo>gERZ4Ds z`Wf@(+;=?1js$BkPBW}3EC%fib!)LsqK#u?eT~*y2Bu`lfa!isH7wX1o?y8=;FX`f z$KI(8t~_~($@-Y-@-CwCBw2+l!n!CTf|P+q#MDYMk3D$Xdgsm2wb?yDCnjoU2t;im z?HQZ^OXQk~j;Wsp8#gr3;S0~v;oE8b6vtSH;D>I-fW6}r=<+wvr$_d$DGtFFStV(7 zN@D7$Q~#NFo**(u=bdM{jbPm$1YY?-G2~NL3%%%|?0o7~>gYSl6L1b;d@-0Wn)5TS zwKagnYC|C;WmwosDK=%ndoRDnv)}nHH{bn`by2c27$WMxs)g^Xj!sPvj?0UQoUa_$ z){pxg4u@1##dtj8#OYI%>l5s-VC(EjPF;EkHy)r1aDxg8U%4)&fWYP_!Z_JpZ-3AH zKENQ0Y@f1MMwY4c+!1h9NBJD~v$s%?Lk`Yb%V;uTaWG|Lybjv% z@Bi&z@zyI>*;!lnG^xvmVOjasI~$6&tWQl@d^=jL8-x^0>ltS*U*a2o_AO4FJ&hO? zsDVOO3a7wG*QF1n&+$toJ(qt_Tps>)3C%u^qYFIMf zSYv%_lhfzVaN?n}Y#iH0jVf#bwh#za=>pI=004jhNkl!D-8AeaywjE_3|!2|oVd8rQE~=f1p)t~IXFn5D*Ok6=it zD1%aMbW5QNDp`1REIOb;^(EMn=mW$vACy!Ild^DiMd(6I-vu4w@uk$gtX^5(931e4D#>U*z#GUg6lOZKm}-ib4fU z&pX@JXn!_CcTob5vQXS*YwaDhj7#A`1}QiQg5YRpuM&rpZntOYROHivI8xiE`|07V zqAx3bhRJxo;w*rp?mAsKlc!9alB}g-m`=Ea>v|7+9#nqAS>Z!6HNBqoRhf3Zi{wwO zJ|uuKXy3 z)naB4omZ|>D3*1N6q3n!%xE%Ub8D0J-E9~TC^y$Red!_Aj~}C!7RtafSI90R6giup z=zdP*GAoeJk-4hqZHmr$6TRi@)-M_S-1x_9x$XdnRfpgxDa?_x&U=leDnj_8M&Sg7 zPz;3P=Rf;7zxeUbSSw4ERG6k^R1E!uyk+gjj0P2Nok&pl+-e%Dx%}7_zW%LmarW{< z5O@*@g?(E3gY2Y-&Qq>mNk73a9Li{8QunnJ7<`&X6$M5Jmc~c8Qg}3KR17E#{OZ}C z@{=F@kh?cOWp{m((p^&ohkiRowWUOyJ6~RfB0hKUC=(%>D=2(`B z(PYA8XMJ_aS#~hQUADp=XVsZIAC#X|17k1|=pz>C!BB&_Szgej#`#3+P7SqoBmM_U>SX=tUzxfW*)suYaZ2R!xE74~*_`PDC9 zmhk>z}{E`OBwygpE{bkdVnpsj?N4$7j(Du5 zTaJ{pBi{d@`1a5rveZGx-4k1@=@<0(46%QYF%aHFuL@(+53F-RZt6v8Y5t+_K zTV>RGkaW5<13H7hL_~yOI-PQCyupnRuJPT!`p?LD%V0FY)S9X&8C4aw)gk&fSPypj zLNn*kSQe(`+~tdW^_zdh`A05dl)%U^AxuW2@2l0F@}xi_3`+7HAHKQF8b>5cNhufS zD3qdY8-z5eManwMs2ngX3qE-LZNB>-|C$@`U1L&JT-Z5D;Ur>dDUi6lF~m4*Lag?A!~ zLi%~>p;fdag6htj3|kb@p?ah3b{FZ2*CNYg9w2qj^8*xj)H_LjyOd3G#v}Wh5TPr`w-Sp&F`i7Y)?uwl zPJsW<;+*PzZzUC`HnckC(Mh$Bsee5>^AT0;>AqD=H7>I2ea9S%4r-czGDVNE_;Plx_`1d(@_09I$t4gFpP^FZ1$mUgzTvZ!j5evv+!z zJGbsp&ufaZ!dXXMFIl!NLp#7aLDM$Wre+iKQZ6c&lW16Kyx?Ms5EIsDHo)$ey#QKv8 zdmGSm%`*<0uFW#S^yOIU!c zys$_1(mUySlOp!t`84R+X?9PjcLJ@hoedHhWZH{tKQjLdf?e4O+wLv)^Gum8d za`pr}=TB1%2Q(7YphQb>fh5HzWM#)==3=+9=pW8Q#y|Rcz6da1rj8FFm&BFz>;1V? zW~+Q6>7UQV|Fh2)G0qEO8FB(b`pDl1#d5abC*S)K*WbF%iH!-BkW^JkAtbu-PS|KT zMAt3e4R9&?(86-=;fwsypZ^(WE?uA&mU1|t2uO;+f%3B(P$4>2eVXJ{^c4#g^Y4tG z-dGidH{M#aHX0)x+R~ZVdNC2HntfRB^Za(eg?TkqEtcKw3q<%8*4pf zFB+U2{x=SdWa#$M%2Gtr3VGve>ty?H1lkE*2dHQkoPM+YS zcR%Fg_pedZHKuNn#v?7h3f^Y-(ZTf(BA9Yff^t+d$(QJz4YD0g2)OI(l?cU0qOJ$& zluqx&2st~03Dy+E{JM}5tnr-z!6+6=F_}!jg<2rjr2zcD*4MJg(19dK?U@{*@1kRW z6gc2tDtpd6rRExkC{(~x6VTzEJ zY9vk5fN=hdH-^2F8~pK~ew8=hc%N5adXqwpS>GC?3dMZ7K)04^G^EvqF9_5N#-kAw z7QH`ZG#vO**o|hnY^XOi>uZi-Suz}!EDj7sDcGHyVt(&{U;p$K&R;si*^8$bjn`Q; z2RNlX65wpoBR#g!v``|j-->L-K3|@)-K4(@;kkS~{R-l6Xoq^rIXm0pFwT>n$rX6^ zJqouXRUNJB;Vg(%U*A$`2{&$U2e3D;#=F?tFIlb9fo85FO=VIFL?= zKuiG=Z}^pS3`Ie)&|H7}J%0K9XL;wvm#MU4b1+0Tp38e&4M0HCwEla9XfSValz{@) zI8O!Y(+l1Q9B;0(wYSG`a~)SIs@+YtPn}?L_9SLBz)H_L*8omR%ChWM*mkp{MW*16 z8ta=o0=@OiCmeR7+R2B={{r3KhbmDK_ookc9YKn=^627+Ji3S=kxv5%oB?TIW4Okx zcR%FCpZ$W3vY;}8sw^m_Z!s#%678T_HaG$tALPbZix?C<@`a~Z-`jy<38lc6o`_0@ z##SHg3s3VZ`Ufn*#J&|G)hEP)Rby>{`k}Cb-Suti>6~Bx?0J6pci+LyYIaBKjAel` z4!3N5ahg;J1lm}%ZbIL_XS>tB;W-r^8t3Vzg;QxyWlaA_!FXfBqfb80<6nG=r8C@j zHE!T#rW#iMT1rt?1={Ei>KBo=m{hOQYqQNNh5HoEvAB!S4=;W6Z#^1S$^u;!7_B|B zQYiFN)1Z-};Ml1>wzsx8zI%-4pM8$HZoya|Sw(%38GE;)0P}7n=O7D#lg{hj>5l9! z>8UG`y|x#9cTPakhbuKUt9s_p6H(t}b5sx#ApUor&4%te2#H|?p?hyMQZT9C?Gt%uywiYXu<+(0$gwBhAvqU@Q(E*QC#HO3X z)*<`^O(zvnSs@3MospZkW!N zw7O(CDlw*})fR0Xt+BLWQs!hh2DgSaf~o>V!KB*8(sJ#sPq}&HGp;;&iR}}cw5~?$ zW#R$xF~^cR$4Ho4S9a!Rw`UWm?zXruFtU)7wcJ;`tZ-&d037FYb16 zD1;6#N<(9MpW*rcCE0a^z)EjqSC_zK*NB01Qbpm;jwyprhc07cy z_O;4^v(Q=!3nLUv4|w&LFYxp4{*e9aH#jy~XHWvyCYwx{~akJH@%n7b!*q+F^xNKEg8&R9R4#WxAen-DEt% z0g8RNBnKc0N%wnHtk(IWn2zzfJI+}U1FI^|Whg^jQ`>uc=ai6~%tMb96vbKz8!NLt z1ZBfMO6%v&tJd0xFi0>iaXIBBuY(i($tmRYl8XLpw~S1xk$ z!g;FA38n&B78pgM@l_&5{<2%YsMvyRIT<&cLfAT!v{p-Kw z{*7Cl*w|q*nILps0!8((eSv?j4cdfD>RA*B)+DUsI8lTbb{9*YzY z<})^Tws57wT1!<8F_l1-1y02-25-~~(dD0o=okLw3OkKP%@8fD3u|F3RoMr3TM6A-4QrovP>A{`L-*bkr+X=CLPPN}>%37@82)&k;{BsUNQsHklTK?ppBxp}5uOMYQAQq_|PHToJ)Pjo?uOU!B`S@OxX_j&#YKVqXAQM6E~5}fBE&%HY7iNy;#ZNhCi`1*GDH8ku)Y?clm+Xf z5g)$&F5mf2f6cWw-(kBNbAEG=%1LA$X@Y!@v~dn2L2DhV_`UHrAquh9dKq@UCDnv> zKBv61DgvdmbuN%UDO@2vX;CSWD2hs;N^kg;@=BGE{P6~&Qz$vza{h1h?Q-U~l$N)? zM#9T^c%Owh7|VveS4u(Y63T$Hv;wpX&WDmnd>dXNgl_{BzNNJb5u!_Jy1j_H0ns}L z(O7kDtl8#8c?oj>64W36vl)6AJlIGEY<~x;m9wb{M4pX3{D?q>?9eu2^D6n37l+rl zNKG8l07}Z$qtv^f-kCk}MP2c=>sfS39_Ts9wMTLWSGfhE(dcR+R&-O24g}{)(sd0e zsRHT(Pz2|}hW2Q>6qORlWlK|Q92%z`!!^lcPhMbqXM^AV<|;Qnxs50#qjJP@=~HV( zSz)aoh{aOJPEt(ejlZ=9-L@E0vsRC=dW@=t3Kd=)OdbG&{(3db(gP&>c}hcY!n( z(Pcni&!Z((&pPKkvzxJ$QZleGkc#GD%1@vD9xwdxCoFE?VNDcN!eJImtZq>O%4}Sl zMc{d(h6^yC-+(CSs!)hRqDBKoyIZX9?O-a!v2$nHJAamPW5Uw5SS4{%p~{l7D82Fy zbM5;~O&P>5BFQ94VfLMXzF_r={j$GE`YD2bhecK|5F+2N-KD)=(`YuHYg)02#(>bG&LqJvqv!)&B=$( z(TqGJqam>Kg&EGh^-Rk0sP7ZtO6N!Qy0&GcDh6eVUetM4R@a zqXW(W>0HO=n-QF4Z&NxHAg>FMLL^#sXSP0h&uBctDu>YxLYagfWq2ZojM9Sz z>d1XLN~d=(%Z%=-q3kwA*Nv-_}}@`zCRp{_J> z^wQ+UtxHaK7kAlvJK!pQ@%WE-_hSFF2~27ginXQY#@p}m?DxLU)fZo4A{0B-7-cP{ zX)ss8ty+f&ElhEav))@W7=)12l6C+tf40`KglC#(MyjCABI2f6scdqC8=Uo{t z7jV0>m+|1++@qpiqx=6`6i4z8d zps|L#(oE6Fy(GDEw4(myHT-@)Y zk;mBjmvYhhIr&|;ll*dV=(;gTmO@|%ETO{Z^>yoEVDthbfaNaq@voM07C`+vH z=tLYcmd<^+MyfrFOLPRx-~TzgTbJon5z$`%*O(6I-m!ufrpsndV_KsO2?&ze6&TAP zM}(nq&Ld5PDUeR!3MhxZQ%A}rjc72&(Jos=S+Kh|X1sQu$$G`xuYbVDAKn5X84O3v zr%RL?AY>6De!rH!^ul6|AEMRNOIo9;+m@y^j7DRWR6Z5!pk8WZIly6g<%M^+@$qMT z^$)+m+SWF+`W}utpjehfjF#1E{Z65ddNeM$71>$KANkD2+<3?Fz8UNvNr3QJV7Ghu z=j5*^d)~h{xttxr&5HCNbxu~G#m@W84Y=#r`+B!#v%}Lj{{24m{%P)DrvTSR^g)O; zQEW6GF}wL0Z+!1(yzt}aIJkG8v+LW)*3d2%2uC-)G8lJyhExb)=X%!Q>@f<}O-22937Ukv6fr7Dtg%8UBCbPDNE z*=#G16s_!#=9Rx`@3Iyp@5s! zlqbbWk#~%!qu)h`rp3@xiF_xza}H5?x#TcGa3iI6&Sh}=JomdmC=kLk!C@>;Xk4HX zuEIPF85|cIIrjygqBj_=-$gea?=LZr;*y+qjp|*GbFcHr^&{qpBIO=;90HV_fFtgw zAHYOTli&ay_4;g1fQ*LC`E*b`nW?>W<&&)SEnM38E&^4kL!S}bHM>I2)$7DPUd5OX zuW-j*lA)=|SzLMbp{E|adHK3aDZ*?3zv0%!7{P0n*!4hYQ##>M6yb;KHSo>}*YVbMsx^e(M_ba?W@%!8FR(1;_#+v}e=Q1|c+{u(nB)Ivd?m z>y~OdWqWG}fO@%LG^$WqAyviR#u;vXe4W4l&)?_EfAAD%E}TF+hod2C>11+6?AZGJ zH9Be;eSm)S!4N&zKIHv7@2z*SK2Ds;z@f|L41xYpftr1Qh9YsRrb|-KjqVu!f_DRF;pd=UBAgc{F{Hr?VrBDZaL)Gc#K~98Ph@v zTCFiwqsjuM1{h~)mrGQje$8DVC6!m!NQ6>|LgAD^7qEVO8?n32xr-OsJ$(vYdG}ct zigGyg=?FZNmA`obG5XI8ZzRVN;Wc@*=VkC=9ZB!{j^l!Dfw21EB908t=TqpQ;(NdKh+_}#yFTTV;77Rn)zbMOuG^8r= zfJ!+5%erB>Hs*;hJjJOC=h20awp`)ql7+|B{r6P9Wi5VxmwA*noHHQ+0~LaSELhyR z&tLt!|I91Dc!A2o>Fr}wNbI~uT8nZp7!H^(mtJ8jN3l+3EVU!x>3bf)}37>QJKVxmz_7{}2B}U+xUJ7BgNDgx>PPVC5;HXKZz8fJ(ZB*3Z z9*r>pHOrzJnVlozpfF!ApaMH(zH43%WcGU=d`E4XCw*4;o1`aGkhNkijzV73Iqy9( z0m<$%w;f*3$W%xgou)X+G0)1$fEvjnppe#LwWFvCgcOuT$x_w`=^0#|_1prRyCc5z zwI|ppfj239)5G-k1jczT2a=?6Ev$?s!=EgdU zMU9j&9*^0-yI?%rp=Hibp8XY9Zk^}pFF%4RON?tWhcHryxn6Mn;77iJF6-Fn33j(n z4!VQvoq!x`>2|Q&w0_z?x52ri*gcBaGvDJgjtMnEilPJ}^}k1Paj^{#+ubmo66rex z-EBu@+(FXai~0_c>l8rX#`d*jA}AS)w2rl6fWEiSkN>}a#m6tc!ro|rbdLFQ8VYQ@ zAQ~*9P-yD{x4!pQTjK@KIgb!n>!_CthE>I2P$A2LgQlUHOxQYm5`B7;!G&|kQ>WNh z3M-%*4pG$rltKvQqakG1A1p*t{%K2Oe}fX-=xi|bt1VoFNXG_+71pnZ1mq__ zSjLlm)L7ndaTygw9A@OY>t)eG@9nXUB-U$qDtL^uNFgz`rYr?-U457LuD;F5Y8|H? zQaOsU@J2z3(6R}(HI&1OJBt}wJ1$*(i1Sw-rdS`)mI56nGP=SdrFYC!6&ocVso~rMh%^Z&tBH=WMh}|{$rYaa0D&`py_^!X z!UmQ&g_8>F1j1UBbAE7+6d^y`Q6Os_(mv8*X+3$9@sl?_qf;l#PJ-1fg;f5Yt;05k z!U^o6#x4!T$avO4XZ`r%$|mR52B*LnO`O$%b)nn9J6^_`RAiYPQYjJ6Prk$D4!Tbr zDp`8uL`W8kC3o%~V1c46eV0HXkkWxLXb0M8T5V8ON!uDG8*7ZmYoH^#BYRF+#Qt4O z$GI@5Ct`+SeO)S64hT@}v4ii?&l~8U;pNlOzRm=c$PzJJ*w%fWi=)~{0L41F3f3hX$@mrd;;-P8a9LT zU2yhC<#>)Fu#yru0*=oGW7R4o+FV=~ z)vtKaM-^$UAOJ}W^IU@P(U<3nHx$5YFaDP6ufIvP)KDmN=&ubkT>O1xjBY-!-!Z?n zO@nV~lvJvq99FEaZ&J4{_h&QQWXSP{PP2FUBKGt)!`)46RbZ`SP*s%G&_|$BBBVkh zeG!xpDHZX1sf32;(S3~8mm<`(=E=CnEz9BWC|@1vk3U2t@F!AQCx|FqSES2l z^%MdKPP28s2+~?lk?mjWf#GLs>Cvr_Ad)%2_4@C?yDMf&&pcFl<+G@2p2|;;HChHAyeR6~XxDYEk(1w{H0& z-L}9Ok927>Xa8VIRSr<92&24Jcg_Wv)*EZB4Hg(rCaiC4psn!+G)uqsPFfsd6gIIV ztXa{cbiqcqy*xOtgy#P=WS9}g0db4vS8;s-CwD)sCkNs98G3l(7mr-K54G7i%$c==bq=HB(2 z>e7(5U`{ZLKpsy@x1TW7z{8N47sy^z|DJi818QK@S|5a{>UZPPansw zkNk8t6h*11ia|gWlpm8BDq_9MyxNO@_~*{3#slj&Gtcm>@|%kz_D7@xp0^c>fY5{j zuB_OzD<*QOPdnL!hz^Um-zyHt;oVH{wZZ8tiUQmC=y1Bf&(&97qb$pCs0AqR1Qfw4 zDIu{KWLYq4mNcg2!j;Fk^yn3;@sK9ulfBK%2$GW3%3Rjq4SV7juuaRjEU8fZ`+xWU zs>DOI7@%dV4Msb3+j#WJLTx;E`*1Y!#b3hFI?G2lKVyHY zx%}`+EyjP~Nb`}K)*!JW4lWkdvp9W{3s&GqE$ z$nYfRmLNHk9fFi8Y)6=K>AaB+LAgoLZd7LR^&JgwXGDBmN$fk9N$vvj5NTg&En6H~V==W{-I>piai=5@9+MFHZ@hDsFVu4B@X9wkcW_e z$9JBD{6?mOe5xbMw{;5=&U8EzA?qI|RXPUMfO=VT|K5G7LFJ=QRZta!4y}p4o`6=j zSR5N$n`~}v(c1m4?JkeYdLDYvvzY?zsDg6`pl`~Pyv4I21bJyp7nJ0|pZgpQPC~U^ zM22#ml-*m>5dp@QVWMW@F%=dOhi?h5A0l;k5$1RZ(b7trsH&Y5j5jKZa))pKi$CS1 zU%k$YzkHPsKm3HrWWcfAEefSrE|=79K~+_hg^$=5iv`wds{S>U(#@JIU(lj^3Lf zzamZw%xVe3qv)yfo)_uTXSsm!L~lNqPp>d!_j&Oa!`r(kfxgiGj)aNJ?!-p8GZ;1N zKnZY0qlBP2m~!uvn+zQYr>7F_dJjz37T(h4aAbrLeUp1~R)u7g^|jWSBc-H z5I@&3=%WA+evLcgHSzh+WvY0P5@8HFumVcyP|AT-0jB9Tp(qrCq4&@Sg`#d6PM$hV zqg$T+$*;M)go_up_~y62&GAPchOKq#wISAO)M!MZ3S?P8QDTHjRn8vLkx79iWqa6K zcdqlwdgQTTFZjr~1G*GIzfK@=`A0}7`tu=-a707mG8nEa#*D0s{ThMXBgrA=6?qh$ zF%wFm>l$G#BUSR|tFL3*7C9KF+QVS`J>+SO&(TZCvR$%h8y5~nYmrx*{Z3xO5} za2{5TMWcCFMUHF6NR-U!Z4JMA?s@dAh61#ysfrS9VOrO^pVcY3m%YIgSe=O8*Z*&2!hYZ?j)X45$zy!#=xF{q)U zD2lENNJ>9cDa;r#&ia<*QgZ6dN#ChrqLCLXYuE*3y?k9R@|lwmVSPb&4!ZMu6n>Yn z2_79@WY2Y}gj8&nK7R!z%(((Gk@V-%&oHnVX_CuF4~O?!VJYz`TvhmPm{zua>SXIj zg)I)I3#hSY?;iUciI8_#DSWXa>ximIs4IPTA;XaTO2Jod$>c=*Z3+1@+G zqHRD5ilU&flErip20no*icnF$SiZr=Uvv4HyVtClhf$XvjvMV|ayaqPL!y-DVafGq(w5<*XMa4)B zxcBL2TzlslZ@>N~N((NZya26X{^@;x->t@4jg*4nutK*jN;sO@voRWLJVTr@wAN$@ zMMT|l$1CcxfT9FqG~4SS$nY^MP_pFC{d;_T?PD-d2t}nzibAE=rol)^v^BoQQ7U#% z?E34<%+XGJ*C8VD4l~dv+y4+CxNg;>-c58JtK>rA?bF>U#8{?(uHwXgpnv*m)tVu8cATrQVO?%cVor%ofJqOCPm2~tJ=TX}>Y{5>9rhWZ4AX7wOH@HJ$w6%cD>4iO0DpVNPI zDS-6G>;pu137@xeDQGn*>gqnHb5ccoLn;RJ@*0#@*5l~X!GFN|Ifsai#KfcN@q4W` z7Qt|B!tR-qy!YuXBoe3mjW@c*QhFtb_8ja8thLN%bIPJbO3BSzw|qYA#wVyk@t1$` zPkH*OC;5N;KmT9+?SJ@>{Bip)cwBVgvi`ABUckbb|MOZ&4!s2KJKHsQ1M>Wyj@X|b40!;kR}h=HfgyST%{#AO z<(=2xW_owZL=IRRjA;)Rm}QGF4y!fRv{-8}TGMLnM@JhU*#XpTgO<=3jdqTzRFtDC z&HgBa^ywf(;KAr*-A08i{Ok?z^BbIY7;TXh2v>0P`YoR50&HW1 z^&@ZdKqTsdBo8jTHyf@O(*d0$nnr3~5PtHfcjRT}$bVjh9;4&9 zZ#H{Rw{LNPb*dN1@P$->?I6(u$D)pCNFySjAdW=g8Tai4A$2;{qQAT{Kc;*tBQ&O zr!A`T41tS!NmUj;vI=i)+LrzOeVV4hY;91t4g1pr=JPqT>5ONd`2zp<|KWe&-~848 z!grtjA@h39SN{A@7;mmK#j>cENGYfW!!$lpD$#SWeemEq*fTpyc>!KG6Cqm<9PW@n z9d;d3K7Qq}c5cOCpWLnf+~Idwx*&@xlARET?_}kcgmWpI<*cQYB_G|mNxeU1;6U2= zz38fd1t{s;Fm)LGv$4I+`py=jED(iDx&Ktq8NamXRxagmWAuOxt!rMnIqO*pOC)HE z5FKr8Onr1;Q6g25*c-L?rC2sgw1l10Cwb(lCpdfYJWeTGS)eMP3W{uS(m|^i3@0PX zs-j^YbWUi=3^DL(e(z{7v1|8C$WhwW9DwwjCo&m|@)z0gdL6&n|3^89M{$*UwyRO- zE2HT2#VzQj?u8UoD7uTUi*p2|kQ5aZWB`H`Gn|dAUrL;7&MDf?Bt}m{h`rD;L?=+6Zl^arjPd zT(e^)vLemor1`;5QYfr32&s7M>RT*lOHOQ`48>~+{2_Ax8)q?AQ&fV*vgYxNk1}2# z<3yVdRNe^{k(@5d?t*}*XZo5VLi9Nz(4F~i$D_=L@3wNNMMOXnG8BFe@R0XC`tvmo zk-tTGi?%7d6%Y8tf=ibW5)lz5e1syMrw^7=vRpJ+Q{YUP-a4qz2!8R?mw5TtSNXzI zU*Mnq**`^D$!DM4W;&gEQYK?*+J^aJ!D6vwKAW>xE~)F9WnI%Wn${RkJk(mMq2yqB z9|}V?QGD^MPqMK!V$t443BP|}I^+M3dSqwyNS|Tl`D{U5tdm$t9d}Md=4FZO`Cbs% zy{@YPNcZG-D_29kqO^F)44z!UD?{O57p3$FNW|)T<=pqK|3??2oJf%y-y%|lwicdr z@AGiZq47j4Wudt7 z;YZB(r;LVcp%WqObug;2NYOYSmCLGR`@}KETN_X)?*K>{lz~XbKY7T41amtVxX8n` zqS`b;kbMytV1h@iY!?;D?z$d@QE2C*{}xBB8#eZ~x%kM#oVj#?(b^cw5~l>ku=14B z%110F$fs&F!|}k6#f^oFSd{8o^`avz1j#u%w5FmD`-$hcp$@*guB+Hi5*uX7b+2_Uz~));YBxu~QOc6SDU=bEP9j~!s4TI|n&1BF z1>Sn?4N6&X{@7WX`I7zVJqlakjKOMy)|R$uXxf%VTeDc!ESs99X{nnAV+}$T)NSqg z`O5-hVcr@ZdHhiZlL57!A&NNV&5>8(r0<33dh8=oW<8y+Xa&P!!2R3%Tz&NoM&+1| z$vSOaqofGy?NKFC(B#pQWxM3c<5y56{{EDJ5KzQ=o`}4~0=$USWCuTU&~26ukeTuC zVB-{6IN>AN?Au0TF0RhPEpr;jog)T>Z_-?dtsjoi1%L<2;7F5B~!On>jeB&?wf}cCV?Kj?`u#PGe zTeVGtaFWLO3eVCh3MG?*o6i=WKGGVnhRyX2-h20L=J)q`^sz_z<1c@Or=NO)|M7qR z*Zk~n{)Vr7``hfCKTBN*W=)H#N~Fk0i}GkZ+skgMR=0TFp$L&1-eq>N690F|SBmvh zYQ^>8-?(21VF~P9foLQe5SLm-@cp8q;~40LjKAYvaDKv_w#G;M+HmL7TPWiw(%9zA z=s_}6+F6!O&2Tbi=lCAwaDY?7r-eoLwpC{;=8bI@UHW34&m?BFuRONKM-?ho zA3M_2I)G){Pz?s2I@B758*7|7dzvdxJjI2MpeaT} z>SgOach&8&l3moFnA1dbl3n)YR-CWs2qdw|+6YA#DMqnNh+T%T*=SgLo0qlit+ttF z|0X9jbMn(U&mzre@RQR(XUL?KVbBj$MTN2gyR>XP;pF^`E(A}VYOpa4*AK8zu@+bTkLI}@SO_*74+~1 zc#ddayCNkl+nV*wH7;B_kClGxtO$BC9>$~UE0WHP3!Y7T?a=5>S9dj8{$4tCDE_fC zLNVw_XibXf^D@DJ>lcmD@UhTQn*6J`ffKgh=!mdiQw`JCx=$}&uVoiAz*_7AA* zmR1|uFh<(jfRtk+yc7v~f<1+v9fBTn=HYAJs9>cK=`d#6WI4jdJ_`EDYVoZ#C z7E?DOJJ8(;3@BVjLmknnoK&fUe#8D9`PrYRxCO-uDQ5aN4@4q*&_#${R=XRn5uyI> zGm~ia6hmC3esq!n487;9@a$i{d#zJOLMWWDELu%5sF>Cb$IhPRPyg~Scx$}QTfcpU zMZIJ^8iA0=LSRknjeP4{fKY{xK#gO%KlSij+aR1{du_sW|1Ph-^aA_$Zu96fPw{{I zKmB)n|GA&?n;-v_hn{?bhn{(YYQv`ltg{GNc(^Y_)`|HntVyh)fE5Sf^ET;o0e~FO z&AI(M_&$-jI8wx%BF_Zlb$i-_2{SnO^YdFl8O2D&c?V!rDCW~ScW>XJ6p|82Z|Y;V z&q^tb)hw1vc2AyW@5Bj;K}Ab8SR}}wbS})WkLW~)BE{EvvP7@2Tiqg^!$9gi?hK%Z zA*A%|SxWgl`eZ!eU@>R9m~-~wi(G#4F-|;m7BQ%hql#iYqzn|%1QtUf1x|&wG5jzf zRSIem*wLUza^iD!VYrBJS)Jv|;gcN#kjJMnipZDLWhXSDELqim*A+mDB;r|&-6g$t z(<6{7^0n@)QIZ3@YW!XIRdA%iPXZ`VxLQ+M$=k2J$&Y{ZeQeuu=J*L*qj5%a|Mp#+ zcB~E8SS}mtWkahqb=y$uhDB3Tx2^BxZvA-JR@=a}FOX$HQ57^8v}-wc@dE$#|L$LL z>f9Mx+aQ&nPanDYoy+l0h^>1Onocl>F<5OW<&ax9Z}aQtUqH!{VO3!pO*sq|VJzaXX zcb>(n4ag~HviFKk7FIjK`WK7{mY0XzXhJ5V!Klf+RzyVhNPm8ClE3}yzvrFT-sKx# z`xcK~e2UpY%XD^^<+5ft9I#kSna-y)i-yHw$zncd*|yB*OAZcZESAeKvb)QUJLixJ zs!FibhCluDFY+({)nBrEazbPFDJnoZi~&%Ay4hskxqlY>TO^Kftdnx>Em}OiBKvc{ zlPn7oR%Z#Upm+~@#2SO5f5S&B`3?fkwm4sunnjn877-S&?O8UrL3W2eL`D{ij zEDv42$RkfZ!4iucmWV-#98@4BjrEo11LX@!JuPvlf-fAl_3VOGSuiygH7L9>a3*v_ zxNc95a`r@Aqll(;@m7x=Gx1vFUEzJn>UyzP&Rp{BLjjUoQ7G}fDWw(*5~C4FwhHi+ z+kQ?$h!g|+o``Fo^a+eqNuesf`*+`=(KQ>@8XG$kaF&DFKF&Ct@ebX={R3ZxZ49+; zS%&C8Ism%0=tleAdI3%es?IRE?q=Ksj?vnQFEdkA5WG7NVz)}vI2 z(5Vs5aXO`0QI>O9<2OWD!RxPF<)aU-v9oau(-?4qN)2iCG9je#Y#Hk(U23Db{KzH7 z>th;M`*Y@87z5wqdCXiokF=_u(RU##b)Ho(b&EVGdT_~xL|rX%Sz2*IJ4d2-@K;oU z%T>$jr}a?KPA7%Gi);W|kTWTizhZJ26vd$8gLiK5(`SFq{+)gP%YXh~a%%T12cOM3 zxI4#L?>OAQe~(7jSZA0o=RW5@pR-sr%oj`Qx*?2;@T5=ycF?W{QM0zS!GHCa{~Nya zwa1xkDjajPHB^p>KSh>huX-f8jUWz4i&TEdx~{t;Lwu&yfcYzeWm0 zYoTeGI$ynPTJNk(#v_^=w|MdSUvc-=ZJxe#k>gwIJonodx%%vnIQi%mPCR@CI~+3C z1}ha(R=&SHKxF>#2B#pwULBm4pubcQnJ=6>`ezZ9u}Mn6BgiiB5d=}l-s*a53sFzR zkBr?N{UhG(lS_uPyOwp`xXDl(h19;Pdf6Cm-?>Lw4uYL=C@d1sxh)HcF)l%nRiW6~ z+5{O=3AEl}w7y!`h^R2~f=k(bozU`Rg&(qFa8$zqw)W|tN)!lD_(@~J-+LJdqY6== zBDslxYB1nnIc2iDO|`M+tI5kE^z(bZgJCsD{q?vwW*5&7VI{?=Knz;^xDo+QV}5VLfj zm-6{N%^vs%gb32>dtM4Bkj_#|ODhbOuzp^EpLl~X4yP>!<69(4#m?Ri+dJFbyMLEc zdwVD;xbxX(fG6uQ#^9_#x0In5APd9Fn*WEEogMDOztiSkwzPwl}!)_#-&!9j1iVq~c1^jp0rO zf8ox&^6JiJaD=07iLIpmy*BAyoD8)D2@ImcRz-MECm1%X5s^@dCc#1JH z_&X~SD3qjW8;o-lMMXs9MBt0j+A=5xG|QHkU%ARJpL>Dr^&P(Y$6sSyjQI4En@C%L zYpGk!Y`#Qm!?J0p+nV`opZRRYe9=%Z9m~d`jl>`^Xsm28LSt+LRl_r1J;xva$(MNY z>Bo`EVnvHop4TL%POb5qVr-L6R(~XN|5zn;ZHWrHL*pDEyu)fTe<0c1h`fi?ZnT|I zKJ$<14LnWyF*I8S6eSM53!^?M@`*%wf4vYS(w#j2+BYKIu6G+8vPHRL;|{&NM=+9s z&WBeo%Q5*VG`6=0q)=$5eL6rHoRiqHU^y%(3dzYwudu$o!^f{(<%8GWpq)+;&QchO zHfCcf22TD5&t;RXuDpI!%>uX~+H#Vt1y3V~jce(f3Z61H>asI`h{24D?eVw;n zdxQNuce(K7Qw-PEv9h4Cq4GRazCDO6uIxOWA{M zMOQoC>nTppC+*Rbim}Rm!J# z1Tx*t2N3^I_e=aaR-vaUa6({YUMLq1NR;_-fFn2`rPxEm5>=ImLLowbvWS)I%3E(I zJx9LpGKkT+!w3>BbnMo_f-CY__Awe0sTC?MyYTf7HaqzFy~m%^B)|mKi|`HlLu>N= z%8y!?y0g6#n6GVj-TaDO8b&x@tt}Cl5GAMR4ZNdXH|VlLN=YdtTU%RPym*1VW4pZl z_FEj>z2~7`W3W~uq@!(hGWu=ZQim%4`C`eUUgD&nF&=wsbj@fo1|ev4i?*7gQat^Y zXZX{<_$OR^&gNu|df6};Oem%D1BaaRMW@yy4B8lKTT|-=U;p9&{6GW0A8`8oX$%(aG-Xlv z!Bq(vjLO&VxXbeKsmL?>o-uupPW38O$Dwplu2MRllFqa5rmoV1xAV&XmE>FR(S4Rn z$Y2-S_*PNVwmvN;mA^lNGiwF9Hk4w>{%12@fAuP_y!cxlz3@1DJI8Si+`e;{cA;r& zKjp7!EKSpd4v>cZ=|1z>K6TyDG(PjIjYC@>^*f=_wx)G+cJ?;;#<#x7m%o02y;Eb1 zm|~q|G#pYCDs&XtKv>uj6iFA?Mv!gSk!u_lue1AM-?}4}x!y-zCx`oU-M9KtL2&y8 z#nHm{U9=*<{N;zb(Y1d&8;a-tzr|eK=XzWqzk-z6bXjKY`v(_f(5`$UJ1Sh4> z50%3q^=yX5u)ep;V_*F;yT^8U_m$VU_3_6v^@3p_WHD`vDMD{;IP9%8xYmcV+O#yf zX4y1M#$zm&H{W@ePj21ji(mc{fAGwgIJR?)7q4FB?dN~VrDvXD{p3jwOp7ckT4&Js z0V2`bcztcVmZ;#B=WR7dJ4CrKbbpV;GDk>3XV7~3AVw3hnz*kr2+^eh)Po=`y2!AL z5WD9D-k>e!OPW?Q%)8&SKp;jpLIejucn6>;%3uRSdsZgGhXpB!c3xz&x=wD@L(T;( zN^NiH`~fKoin0iUq$IK|kcFT3fbzWf2A7Hl(mV;cyPd@2ebS>lr!Qi!e~ zQ3z1r6juGQ&&i4K65p2)c$ zQ!H5jud@~>C9O5IMuQdzttiWq$#~4&d-s{o7PNKKA!H8b^Q9+gXOZAOd`kgvoeJ)6_JrMpcRnmoM`5Z~Os|J@qKnWXPTAeMI3HOvc^-U_!(#53dnq zZMgoPilU$_D%w^v+n-ZX@!4m0c=o%`BCKR{yn${kWl?$rQ5%n@T915aZD?#m>l&(2 z#WP=ihVf*?fj&T1egKt>e%u4jTvWb3&FH6Rip=;t@NpEjj62$bbkdcbp`83D%0(x0 zU3Wm|!1l-21R2ZpjeoujdfPjRelHZRg_42~-ui$SfAIoBD8BaPKcr-cZXC^`MzM z)CeIM4u=#)i7{=UF6n~N?lichLZTDa3z>T8x9BZ>YKOLAI$z2I_)k$iZ@h0~R}Z5g zpXRutB}JzOS9iO}{kKluJ1*xgdJT#$en1WrM|xnl`hIM8%vS4;PPP zC-AN|Mnf7iW4~$GSRZln(MxO|+veR@U+4PU?=ru4AJfznWram!oI^O9 zdUmaVWz%3?iLnlCrY!23rfpbTpHR1&Up)6b7cbuAk;fn7sc`R4518&B_%^M2L9=X#)BhUX z(zGp2)3U5<7K@r?-C(Rml_grY7;PxalHq8`bbcSHB&W`v;wyjnRUUrq3Zu<6bP2Vd zL*W>V2Wa8j{fcl-qU7nQ$GISF6U3~;S7w1 zBYYJ^NbnhlGX@>l2eoTiwhJD4{1Glca>=K-q(c?LBa)E-{{j0TGTjXL>6kI7h`jnS zMUakd#`Y>~()0buJ?5EKY29Ur+#jsWMW%~Vr$B_eG7-(IdAhuW)=5?RoRoVehs>if3KiB;Ae|q?V=Yh?6q6CAY*||G zWsOhn@z~mg0ga2x z{(O^j2^86JOmN-G>*D%HB@iq9lTe1Lgjg2=T@`VPCi8y-G?~NC&JW=M!qhF#cW#Xh zg>U_B&ZCW@C@9O)J9ODA(yNnDcb-lE9CU;&@c_6ScF2}1C*_J#ojxi2Ad3Q3mY)4l z_;x>U_+#;#2o6n9%!x%-gudcHck2Q-fDPkxU50BTG`G(6%w!3;P<^ zLSzEdMOc19UBV?gFS=X!OhNdq>>QfIq8HD6TIH}nA%_-w=#TK^BMY~OP4N`C&M}+M zx%SaVEM{|-i@AsYwZRxm+qM{ISu{1vMNQrKHa{OE3feG&c`zKXST4AG`zFUv?(ozz zPw|zne~sOf$7zM8#ZQeJtPOpx9qV(taq*Mm7mdG2A{Q|iZQ3bI(aT0|LAy?O8NiTuaq*X>@>afoDRH$}AhXFColqjZkL z1)RcJM1&zgy0tX5X1YH^*DbTf zg4uM+bTOl@Ynrx3TZ=UzAe5FyFQI4|4B)B9pWu(a^<^$Ub^$3hOTEuvB0%`s6jc;B zeA-4z`GBdm;>cfDkJ@27Ez-H@3dC2a_ahR#5>F?hCAW$wWE$|uXu5M~<9iW~LWBaU zt}7wZ5OxYNrxuPq#3~#f=e%dH==vdZ8F2jJi)`;6WBd4t{-e} z(uSGWS}L6M5W7tgUN2=zryfM8WpRJ%g*g6Qp+ zhx@yKBMK0^HH`F(78GUa2MP&+XX{JSpD8qvzI%QxYx~## zywp;!-ZEZ*z>#nL{dk9@@I^ovC}fyLkl#j!B*ea5AuLw-ytvN;i-ZIS84v;|68zlN zAUKo=5xVPMq`|%X*A2leOgod>l(*mz6@xIXWLvXmn>>ek!wY8mV*=KgyZi0 zdz4kdm;c}^Jn@Amxb(bXqQDxcy51VTUuj$$B(k8!qM0oEtZ@0V;qu718eRKf;$v|F zr0vyM^;DC~m>7Z{6wY@0BO)=AL^@0V3K?oZ)b*0Wx{d>$JfaTTv)4YFDIAmEnG4+k zVQplJM1#qfqW>lGb|8M&!w*8~u9)zv0JHj{5hE2+IZ7vdu~uO*VX~AKjenO?EEhGc z&`fr=co!4IF`iJkM+Xf*NwrvqoQVNB!{&*SV+n5@wDU82wYXr_3)84g*9{{4$`RJQ&0tyg? zKx@zLcIlDJ{Lwf5i1QcEA=e8Qu0=}gyGsg(8Yqmk9@UeQQc1AJ%f5^xQJo{`LNH;p zW>5}jwGIxKgw`=|B{%Qh;yeH8?{Q7b$-Uz=2Mxo~m_ij8r@gacJalY~rLJojfGE8~ z`{#f8PdIV*I0yBCA14b)MT+`TGQxEztcVV4*qCHzMc+8ZGET|S>44q|&PGhf4xI!W zr{fke*XWe^Iu$EzSJ>KDNI_-9{Ogvswk(&vw|_ocdj1h@sM{JVER(efwXSK*451uP zefeSj@S9)d;RAl9Qo&Q_+6v*aBd zUENSxyXdR~R&q@p~B>r5y?(qi-uPuJ&`-$75X4 zFsn6cGGhCohj@B@!p6=v@4fR5(>wPV6qTptG#VvhaTAD83EDdE;hRcfoThP_vDK^# zc=@&0_~g^i_{x{R!j~>T%JrL{^4oXc=kD##ICbd)n`cfkZyQ|cNr+nO0troE!RlC* zx+NAzuTGDwC9^P{^Pdy>kes|&;hcAXbhbV_{OS2Fe)#<;fjjt6N*`0ZYP%KCAs=a*Bt3jYek~~_1rifTf;>M!SfrHi4uwuD zFoetRbp=xQ&adq06of!YMWGZ`S#kQrN#?@x!5eS$%-#;CHn-Tf4GXK$ra?+YRh7(U zbFhx#V1P3=SKD2EM%@4GEXOl>cqhA>gyc3jd=G!B)94a2t~HotLt$ZKeT(U5`@H|o zd%opSm4FM~HJt~iM?g*Rm4|IKm zi_8YNzCQ1NdbncjehF=Ty3r^K3RQS+2Mu;<`Q-XXyz<*unBALl{^Ub!O}3cdU$C6j zSncm?S=Y?wb7u9NWxZs%XlQE7V$rf(wBAvZ6738v79lK)X3nBLV6sv1r+@w}zWJwr z2!){-I7I2|F=VL9SB0P2nA&HB@JL;ThIsSXopn}`~;Zcx_vPHJa;N>&OmnnqZhuxM*(t)(@NMPpbSkFhsy^88Pp zYn@-e@d_{g=s8Y5e36~=r=gU= zw-=bEWl#hnk}Sb55>H2j2s1@Pw^gYPQxI4aNwW~*>!QCSrLR!O#h)#%)eM|uZEXwb z99Lg@gi(#{R_vIgfU3Pq{9;x=QuO6s^r#u$t-VOE1rl}wil2ICQ% zySwbqX574Slkw(&N51$J-}Tr8ou|}|G*1B`xQHDJ6P?|u3@x3=ri*Z z^?XDDMAX^AA#wfBOQ+6-pikJeb~0-t>>P~{ml}bwmP!qA4G2*nG)(W$c<;>*xcbUf z#)C1BUVM~h)^Pj!ZSM$LXd2^(_B0K~SPmAR!+$=jX@oBvM=ca`XF4nQA&S(S>H4=9 z@3!Bs?y}acPRZmmjQdKsyJU<=av?e@28l0DGs~kgLUaa)D9kZ>4E>`hobdGK>5VK{7E4kRfUa21bYwImISl8cR1wcM<4O)pFhugZ@fh%2RwB0G_JMG?k_kvn9(#%iok7aLy;-y zjHkg^m-7A)$af@c?H!}BEuVaLlSSKd`LRd%+8=+Ni&rk;3P)2KhT}CXevW%N93V;$ z^D7xnLr8H(eH9Bg(;0Hv^LXVgg+v&SUbKsr$zX&sk{|xyr~K$UKV)OL&hExGZQY_M zFh(N_iL)k*CH72!RybPMQp$o^qxtqf{}Y~g<}s%81JuwD9}>uf03-w=B50Y8TQwvJ zB2LG(1L>pu#xo}~xH+E%U_>_}I?){GdLph_QV-qrd&k8^fZB!8!0FAQ%STbk0=?8I zTOdWjjgLOzwU=M#{;hq^9zVmN7_fi)K4$6DGrG0R=L=@bMPPnxm@k)})4y(5F8lx= zi%$_ZVN9=~rCv@setMU$|G}5|`ZvG8c%x!j`z{bsRKcMaC?zOVk*$3Aj&AYlKBC876^gWk5GWhQNlKrW6XgIU z3twf7fuW!^8dDfV-LQT7G@F|nY;0`s*2^z5yYm@#x$wQJ(km(DJioVT4N`$|iq=?W zx@K5aI9r4DeeLgj_&#^;-{O%+uJGj3U*P!q4zIrb4mW=D8oQS+G2Grju1P2qjj*)R zP+I9df7d~GJwEsRdna!$XWHss=(6<}Jtv^^XuCe*NYhDzu47)R%MTvjghT|`1schb zD9Z{}C~VVB4vT#8ao+?`79~nZW=-v9xrbpY{k~<9$y4_g9wbEReqv7ih}*Z~sB3iV zDhd1&LLxFn&<*4e-E51*z87+~_`O?g*Qd z%63-{YpzFJcZODwg#0{-UUh#*_1;Axq)wq;)p|tiEVQ*|AO~Os@4opSZ@&H(?Y!aC z?g@ky%zjRhlU>YCYnNuyg9^^#e=WV)PF*EMx*(2b$d7Mpb`sYLQ1I3A&$&-tq&T%ZBC%p5@t6YEoJ=(So#44dWBKCI&{s3dZNv~mat1((r>xz+SDHXhP^(uEi z{fw`C`49N^SH8w8@4Uwwuf4(O)N$4?oue$q$f9HWa>?Tk2*-*M%awVEi+fU$S|sy# zt#(}`2hFou3D@-$2V9=y{kr}hrwGI4hCj0N`GaYlCr=SlBsRNrI|(NDA6S&7Z`Tn5 zj14($5$+-PXu|hQ)$@mi$TI;(w1AMeJ6h%<60j;;p0YUP{-uv7ld(+3KSa>cu|fED z)KIc7qH`4`Uv?G$QIWdP9$4#^wr!bCXJL$T!AH#pOg7dzbN&pwmmlTC<_>Rv{2{;n z`7hW#e};`ydpP5h0ydi#;!-bn4i5!GmmIpj9Qm$<4oHZOpmcZ-&pI~8Yglb~?bTPg z`pe%?e|VFTQfyWeq%lZsu&t(T49-fVag?HV1jt&b0mkTPn-Z@yQ0VB z^sIh?0+`pt=Hb>lMg@n|C9FLPnKL+o+tLX z_qzKNp(Ax71rmvb)<6M;LTS;}(_+MO*2tyV?oJPB{5$$T;gUw0k+kKKyUX3#?wRhc z?yjz?E@+KR=u9LskvbxtaQCbD!xioxndspdqbv%M5%2kPzxUiDzUQ3pVI)T!SU(6> z&@38sYr$HYWf=CdvGDVQF;DWNpNA-+7K#e(*d8 z4{zXPgVsyND-(nY=dCD;aBfvn39$&;d5|hQ$1*P*45lZhb1!;-OKp>V9mKb)oV>V0 zXFKeT7eln6BaKhPga&G=7hH#Z&EEWePpn7ppPT}Zq;La+(5XMS|AV43$q?$mW85cl zJwd!%!DeZ^$C})IFX1!qJ{T#_6#An@h|qFmV^Dq4iI~3?Hd1K1KtNGQg|>kx!iZ4O zZ>3<-Xp|5fIQJlangR;QckbZE!#MNMI__oGk zJT&eGzkBVsJiK#*2hX16!1{>uUtMPRqXioeKEU?II*U?aDnW}0o~cw}sEP|!`+Wo@ zL^DMG_kN_`tyD&3@{)ECVfv?!5@Q@v76=hWe+C87tzvp_{BKGq; z%Bo^Cp5!)FANS4+N$VV2W^K3&2@&=TFoXR!Kw=+9pk7ig8NP#<)!bvz%$Q2&idvU=Nqi_l+y}>ML?(xiyopBDHRvp{V1P_ zaLkerBF~^=Kj~gVZAlJ9>30l-05qYT0~dLKF^#*;Cl$(Z@h9@A1dr{bu^|@irLN`^kPBj zH}hwTXt-1Rc{&h26Q6V$dd2IqreNj|ubi_*PR41_Kj z)&AH|2pt77?FU^N#Cngh9?;-D&IG#K*=)wfY{uI98jHn(jg1W^dn@ei?6R@B!Pz4x zIeqj5pMQOc&)@oh(dHUQ9ymogE>V@jctK+wR&)qPI;E+Wp?4>lsK;rG_fSfOG!Erq zEDPG586UmzHt+o7YpB+8cw>uF3ak#3)okmLC=@cz0f1I(7IjV2YFZn{_ttGoSyf@A zs3PIfMe8(0At=iNqdcmR6iUWE{_qHuR3u}S z8S4_%?R$fw7|xNf(IG2UfnKzXs}bufo9x}V!{7YPf8gTzPtiL|HbyJ7wx+cPRRpKX zy3m7eoyQr6Z7sEFaLVJ9pw=}zX2}yTKFlBf%RgkN-k};7j8?{2+oB4YccRv;4*ZoA|a*87LbmAuY(}VeTwPTD$v@8mOia%b;Dw@2;a*(jPcbi z)`wwAx((6sY`)8QrGP?XM9mXVo#RJ8{Q<{M9iyrQjag8PCDlmbgb6h$GC1`Eu9~P5 zg-@wDG9sB%qJo|i*&(hTAE%lm6)N!iji%_!%6QEyRc0Pd3vZcbkN&Kg47p+k>>hx8zDh^1?cA zRYZ-opS!z5mb=`L%)fPkaV9-iBxk`13I&*edI&4Ck&;rdT-H=8E1Y@!G1j*>8Lh2y z@xn*gx7_RQ52H#WJJ@{?CkDv zz#q%^6}mfzOnrIoK&pSp#(y7_NjStVD^pL-k?j-BJ_MdpCW(o!pQF2bzWVUor0QFh zt}42t+n0ACz&jtRoVBK2ESb*=_GU9yclTIdTVuYgSzVp7vAIFrwCwE7*xcUcH6=1s)_X50$|5pZ#<9z34I=DV2+34d=(<5+SsPE7 z-Mqt_@4dkXufNIS<{gf29b&p#QqLB61WnU~f+;02Hqg0h63s6Y6VRnCe#w zg>OP9PB{t#pO$UI?b$Bn>V%hG`93ea{2kU0ZsAl!g~~9Dr6>wiDIlg}qzoN7Ql{3e zq!Y*sEl3HZs6>Up(iOj1=aE)0E-FTaVnW3S|M(W~z490_+3ZBAq1QC?;}>#fBZm{b$K z{_+av-@U-CZ*H?%u5xJeAkCs>xi?2h$zrjfF$S$IbyKrkE}75f0U2nUAWN;qIuD`< z9bL*Xsszh+m(7h;e)i*^@#6PhU^1uqv=}%`r8Qpz*DY_l$bjdLC^>=jy3=~qV&ysQGM*lPJ9`uwuMeez=L7oP~ zfV#IOp-OTjG7QwE7`lh*E6jTr2r^KxV&5;5Anw1FTo@4fa0H^08hdNraP7Xj;! zaEp(OBdNWe}VOrCmC&T zGPed_73jiYgu{sfEL z=UCQFWHxJ9E*h3~!`kW!d$Sp9Yin$5Y|<=iR(Drf-QMJxbC0oGFZk%oPq}dUD#uQq zVCCo`M%x=$;aS!-Mt~~ANK+egg&k|5#5NkE9qW@R!dNc8cY!y4_j|5>eu<6AloJPz zqGwBHrbY=ttqn+pHilHgw`^LL%O+5@T7!%A3EmS%ZMzVOt*lO2nwHypx6lY4|IRbK z@cr*{_~cPs0Y*YGsu-yN(~3Q8v_ zG~B*&lYjr$zh>u~8yr~OVq>~RvuwC=>jt7IS=rdcH3ngQAS|+>hM{R18r@*6!z+*l z>?~$%9@^v&|MU-e@Zq!ExP5~IhqlnJ#aP35GQt?0*IuGf@xHoJvYxRS=*}JhpZ%Ub z;?zS(@1b#%Fb^E(coy!)g3}L4*Y~0DgjP5LkDtJ{7FtCq6kmOMnYUkmmwKn>(AHtr z#~Up77R+|%VK|g=ESF2Hvn-c2^ZA11V#%V`w5_3OL)z4P6-P3M*%3z6G^XaUryk&^ zzxWa79zBCp9_?CWr4R~a31E>j*(1@B`s5U8=X`}i-(Hclr?)oZuC*N2zYSMwFgAN& zO8fpgtQ4BbQ>0~D<$WS=awbJwn zf6{yU+{B$R>00^r(f#n928g?1Y+War7|gjOVj zkOHX!frW#RH&q3$DA27&c~4PQoOf?{8b<4D<5Z>XPMR^w#jT0De z@J>)xBk-_j46OuXcc|+cV;t@KA8_aPEgpLK950+X!)MoSaryI0xcQv*lgF6bkW(+q zGITBgiM}`OPcCoj39m?oDO#-WarOI>~KJ&(T#&Nl;Y5l z!>BUk#EM>|mMC)Z0i3Z$GZ~L*q~rF@>zt??782v!ue1%no>nkW=)(T*BV1> z9ZO@FHJa7gjIE7T7K?_(e8JY%cA!Arn=xKpVQp)J?>+u3*KXh7(@#I;#p90BIK^`>zsN&RJ&sWhTS_QH z%7iMABZby15xG60k`So)S~ZNwk_t3Tq& z=bmI%&sf=5VcyJ{Oh;H9D8*Bx7}`x!okkahc9G(}BDg;JPmk;?A$0kV_cH$RwD%(a z9OU(0-Ckja(%CA7K)3=WWQhE0hieq)Kl+F-KKqiw6`VYD5{zKy#tx>@NH1tw z%VM#>JI7)^XR(+wpD$>dP~C5>$9h3)O=$BI9&H*LyJX|=i0{AnJzoCa3mm!cAWj$z z7Bv!-BNWCHBzztH~WGwcbzqY3Z5rVnNI zTZ@REcfLl_l%gXk=!;nXap1KMg}viBi3Nc@h23`F;C+EpGBTevXnm9Ud_mjPG`l;TJ$sh>A2`QYjkxs94R&0HW>?rt6S`B8RXjAjulV{nmV*; zE$W(9hjFV8!l0g%KlP46hRAHL8}@dWjMpZ-{PQ33#0$?*u1{GiLou!J3W`x68j?kr zj3`CwRd=M?g;cW>)-XZ5-6DGgRwe={ky9NqI*?^qGF=(-(eK~po!`B|-p$(_KX8D>po?=w6ThCD|ihuRL{?B;jC$BIw zyLjc1r9}7wV{LR~g40JVHcjG`5v-V49>jBA1jClqX$qRU`4d_7-{k}hv}8}2e+xX^ zeaOHu5F(7sPKbkyAES*YS;KxjV<1kb|Dj=d`WHILB-@ zXEEDlxvZ&cjrC!Wn>G%E5AzGH~t&Dm2%vrwk{U>?)`9~=$Np0t-D$s~a=@Es; z;*d(Aq{KPBPv?CbGTj9PJ#R6e@8OwEg?~KQuq^(Ah8^eK}g2N@sOVzRoz(mEEl!K(@v z>l$PdJl{e0{d3&UA$7vPFRu4#+kF4*$0$3n;`LlzQVWysh0@-+Sa%@M-lM%|>+nHV zwl=A6@1hDtB?R6%w6Tn0UwFdtt)4j$(4!9#q0`4XSM_AZA{-N%s=C#VWVISOPbcu!lmeD?mkeDK!WT>I(@>*EPW z4-1xKPU zM`S}Zur``dA^GC`r@Zs}TgL$(r5tuskr5o>q0`Vbl zUlb)?SaxPRtZuLJ&;N^m#SQLo4eKmLs6kRLI7r?)goSS|U+3Mo-e-2Z;mGz;MzWyZ ztI^9AZv{?UmWwdlskMgrGK}u6mo;r`&?Xdk8VnkPjr2~9s~K-7o_h9CUism7IdE4s)wyTC3Cs=?0248|-dLhh$4h z58=Dig2+x?4^>FWxgWR$z50ya&JEbgIzq8j$e)q0eh|{%>SP1(cp3Cmaj(&Vy)!j{ zi+$|d?Yz$f7k991KNb?Q2iG!$MbZu3bpZCsX*ZL=cM*Tm?R^KL$GhlzpVi%1_vWmm z1q3hLhFqKqhfhTzaB<@W1*!~Gz1B*sFgRr}OU-0baNx{o#;dDr9X`y3ci&^VH)C}& z!88WxEK0cOD1|YnQYsp6u>!18(6kt5X|=^z&wSA`TP!&H=)*jI@-$yu|Aw!>_=@(< z9_z=Cva+^@my#t7$S@qnn`Cap-5aq#+U-kx3I>Lmo&D#f+Y(Ryj3J+O-vK0#ZLO{0 z(D9>e9X`aR8@E}lMtEz(z!%#Usp+=GjY_PwOeQN-evhkPe956RXDJSB#(^Ck;z;2T z+3zFf5y_M9p%VEK{NU01vYxQ90ZgC5_JK_H(g!`Y(hKkN+Y*!EU9#OzhYfGyt%o(K))UG$AeAE6sqfO~4% zfAT8_6>+VF^Aspbub}n#8a{aE13r5HLn<-m=;l#OZP{5a5eBfHdfBj8ENR=8x@lSJ zmSw%9X*KiOM(12&yrVG75QC?3wsMQGLIQFAtB3s6axBa~DS%B$ON-;VJr_OCL7KIieKZrv#jf zkzVgnx}ibc4JN%Rdk@p)RP3M{yN+L>uXw*v*Vw&wjn%bPoRauT zRbs*%_L5xhj z4+cxdVz;s^an1#r)7Vp&dY6r}__m>K+t6OuXy%K+w70#z&GyzN#(9>Frk*d+i<r1yebaag${`3!c@Ue%P99+Ye3Ri*}RmhQ~ zQZf|!$-ppJDur}`NCz3{@d8s@3IGJcbvzY`FI@_ObTY8-Rin_ak7Q*uVek4Ke*cfJ z@&2oCGVzMDM^7@614n%0FkvG(;7@;Fj|M&ArD@LP8=VNNKq&}imIyE z*xKNkXP=@iERAbWt0hh*gF)h$9TZ`u^ORXUeW$BBIJuiXH%#lvtkXna7<~^m{wE;* zK7zGR<@R5cDWa7S6sXXJWB~2iy|cqd?_J>PrK_x!n@mTmG_y9G>qg_P$F?R+>sv0U zo6s6s*GuZALEA7`%_Fcb4CXP?(3%>jEKfcEC_nv!A9Lc&aavoWg{7zj2#KtqtQ1NH zU6T%asHuqhZNQ`4Ig&EA1ooM22Tnl#N1CPJy36#))51@#=L`7!K4NW3-piDhjyh6B z_RchCAP;nl2yU*=$h9IJL!qZD5bVnCL`RLE>|`QCi##vszPd#b6nF8acj}bH`#tb? z5}c6?#~}1cFA-ei+xr^sCEUJpT#nizQp9Pq9>j zJ#R3oh=)4X0VFUiDwXWDW`**f2n7zbgU`a9{?^|)F9`WNJid_3nk8o+I>)QO`g`g{ zgOUY8gwded1fGP}85*M*nG)M*HYcm>-MYz@Pru}WqsL%%g0qHFm9f*n4ZXhvyYKHv z@CjyvRLs{!l3Ap)BFJrw@c?%0Up}>h2OQ5ee2CLMQ&tB2hUC3;ND~mEbpSBue z$ApkF6k5f0I_oE>uYQ-Yj$q$uyt^oS6+CD zudjT~rAuG2Sl?nc+rutvTCHiCHt<>a;6%4=i`E9K1N`3@gK-9HLpz}pAXQ-3L@3mF zgvW99#tjyx;fWWY=H(y0$mZc~WK|$nDnwbJ3W-;t8$k$3Q7WpUq>x24I_dn14E^W5 zgOH2vA&(is@t%SL(ZXsuM$cQ`_=n%{_CLOkXbmT~kFrvZncv=}MuGPj<1p5tUFgbb ztwXnlw$kuyH%03{_(DaPXwm%qBqtvk0kc>fV<-I8+>iLo-6rmUYb z${+vlF7$0b4&b|I?$`DVULO&Ykc~?o{l0UYjNQGE-~Jiy)otNG`anp%tFXco(5=t!{+>wK7{f)DMHSZ2!^PHGMu z+2EP)Jk7J;d6Hu%kJ9=YDo;_Wz|Bz<6s17Q5S&RVvr3Z!2JE&lH1wiN(=mA7dmPH1 zBM_O=$cRlg>hw(9eofe2qzg{MZ=FaJY<%v#8ldexq%b=HeI@LpGm=sa-ra2@_c?+0 zDw;3uwz)m6+A9Gc!1nuWe(G<`Jl^}Fok3ozAFYX=(eH4v{uA^icZinu(3<|pfm}?{ z`}{7}?ZG7}w>5A8dLDYbZmNR_5e^i9^#W80C=d!OOI)OKwZc+vZu0ndzr&%U$NBK} zH<;hN25pPgmXTDkjZEONSOOuAaG^lMT8%b>#(m2aOzNx?Dcgb*zA%S&uNe2$g%lNcPv z>d;S4FY;$7OD=asB!{+>zu^6=JnFM6;_IB>P+W8O+9YF?jQJqXnj@-ofV(vwxLUbh zqUVtM=*>$>A%Z+wYtgy|0R?5?fIuLMBJ1^5>o7rY46Sw405d_%zPD~M*A3gthOM;~ z)+QrnZNu%|T@D;P$Z}b8;NSs{9z0AvUvlgE4fd>~Z5njlfc41el(jm{V=%_jYJ)bx z`EdBq@+JgcL2V61p^#E=?bda!-)eZ^(G&d9PrlEohwevB$GAe^ONl8YMIo>OOrxwS zs!Y2f6UvzdyOlfeZlEtCt2N? z(#)3Z?(QHF%-bbG1cRb=i1dvK&)GJbMu+q4eUuplm5Vg~G3paCFp3HTb-m=9Yu|9_ z>`{ahx!pMHNT1r#2#8}wG<~N-d&XpNCifl8z5yFX`C{; z-r_`n{iSrsk>|w8vhnXuQifBUyC&0HB?A-^Es z@xb0i=b@+n{6349QP8`t35B?;cYGKf`rbdgmIl!o{S=AiNIVK@d}y0dn2w6@o|M1$ z`pWuo--4uz_nvU*fb|^?vVy&**DFMvAQ&UXI3)?`@ir(b;bnIC1OY`U3WX7Epo~-s zZxj>-6qYuU2c3N6Ay!t``0)3ya{H^xIM)DRbeIniyh(%e0^^A_2H*;b#i31LBXruJ z>y~<1GuxYU|AXh4K5&kYE`G^3ADn0XnJ1X6uFP5g=SbNKh z?+J5Sde(K{dg(ngi>b ze0}vYSHAe1Gsh26tgeI>Dha4iEuZcnJ16)^`r~jSD4682WC$=L03ttsLIuR&A^S*C z_t;ss`cV>H6xuJ6OpeN3es-^rO~f^qagU4*sgb?;5@TVq(y+d=LRnThpXd@AU@XoF zR9R3shnorNrsc*B#p-0lfdkuYZEaz$UuR`91>ok58+`WV7hJn`jrn|rZd<&ucoSLK zjKLG;TeQ}OR<{V%rrH|k9YzSsaYfy6N*rJ$+`%Bsj~Y~%i^vOxIQ`IGXxLS#-4T@MkU7naF|}?nya;v?3HOcHRg@ zSzv3;#fukt{G}(OZivmGKA>@-2UqkkBSEU>?xH@jEDWKoh)(4eVDdhM$nahRY&zLa zEnxUWhBd6b@{l{NQXV-Y4PFG=W-GXJ>kb#*{*bRe`HHpiI-BcTv~$aBzKciUw547y zX>?891TKqty`p5tBwPF%^b&com5_3zgy z4R$AWEQ!b+dpD}xSGGgl+tcqoVyFCC!3J*DY*%VO|cEl^LQ(c#DxeG&&dzja#=Lsh#ZYY|1x8u4G}I$QUA1f|!HLaHE`4yG!EYZ z3aBv@PLf+Zog65%#M0*osESJwWbU_*jZ7ZMO-)f%`1pGfAX|aVG_6_9_TjlS&?ff5 znv^DR#G)y3Yhs?l7mb$i#5GbmFKL}c6$P`VW#i}})(&oR_4-vVUZ1g2Dh?gkWF!mF z7MZ$NbRgdGro?JPTa`3Q(JYoM77e?*du(rSv$3|$-fV&MmgRhb)wZLtZCl#bU`;oY z*I7r?wrFRAF;fy9i`j~C=t}td=1u0U=Ij#>^4(Wn;`G@w$Wam6@Jb0PkZj39;G9Ov zlB!aaRp{||F0pm`K#G(EtcMz=+3X%rWrb-q!a52ssANIm1=4z6|NFn=)nES(p&gH% zet^Pwc5mE4I*E6L)QJl4L)~hev6xn~T-F#J$bF2lw5<-j76OEnIA;(^j#P*%PFOezDl3prhtl<60XEr{FpmeZ?jTtvNqae@AeXB zg7elygtOL~*_U&dSHW|9#e|hoE=&kkcH=F_-C?3AJlJ_9BQBeE02U z#7umi1+YK7llkHS4(&XrJ~=|BhRqm=%tlu9B|QdbsYv15L8$#-sm(#eYa~H;y-kSS z?*r5(-;b1~OVD`QI1!80^7_PFkcjPWL})M<9ma2~4PsOxq@Zpz<<J6vDHHo^`X7g6E3euUh2 zxEcc- zARNRbJ3b>pNz7z)dLt2ZJ`yq-o^&pV2VM9yudmNi79$m@(AIL~&^8Z0^Ed}~Pjc<@ zRW4olj8DJ1!I6WTY_G0RlqJIY5V;zS!vsZd9lnrw6^i28wq>zcva`C&`q~<0S<)_R z+Q!f{nr7KhYfT#!lrauGqcNqFluj^m zf-gV$l)wI8{*v8qu5t3{F}ByYnBUoDZ_%K9fpNjnu+GzJOKk$mq3f2mu45;Pj|G5X zl&|w1867l141`=Sc=G+|FQ9;n#ge9JDJE55p|jD65Q(jmuGYkNog^X1OyQruOF#8T z@Aggm{_cQIa{K=j`F_J+qJ!(xcH7whPrqR@`LF<;LZD@6<1!#@II0rHqJF7gcSt1I{{r8{XPyWR(Ir+eS z)OJSWmXwnU8=@9eAyBeJiU9Se(da3S8Z2~}&(L+vMSGQKdiyIQ0yjk8Gz0+;rt+o9<(5)YbF^IX+QhVnvkBsJIF1H zodeLjem;m@G#>^`KyFv)_b2w8P9H5rms{@)Lq;C59~KYAJ+l&b3vzxik(`SZ@pT@R z6Ft%oy2Z)@kOKR7ppt(QyvMXC-I2^tT>nxc)B&W4Zpo`h28hzzSRo8y;81+46pCiq zaPrY}Y#-X@gV$c?+83XJ^P$Zsju$PZ3@l^b;}mgVjti`CMu#>e7of@3w(QOKxO4js zXC8Wp7an|&3twO6^4o8-@xc9T9y!9oY8o%_LZQkM<;t+X)*(fYW-@IMBG38`W1&6x zfRCu&u^MhV9n_uVwHJgqLOQ^-hLyEd9)996e*MvBY*!;xoV6eeNuv#g)~K?e)|y4r zFj+1+R1};!agui~e#z%=zsu?8pT=v0jy?L_Jg?-eM4~6}DV)OkI2JY+hIY81O#j{| zD_QpUiKgftH{^Lq@P3~|+z;2L|3>oh8Wz0f${-))D8l>BI?A$Q>%caL4q76pwvL^dX4bU4@X8DP@E1R#TA9)cK`|bog+nS4sI?1) zDhgB)VRIp<3KgPh7yBZl$R2!vYCC>)p;Y+00n=J4saPLR7*VoPl-&CI8~)-i{)$gN zIM4Be2RU`_5%jWQ=jLs6tx;Zv-u=ifr>&*7mb%q6wMO`WPNgVQo7kS}17)>}edT>w z4&+cVUD(@XDJ4x^hq@OzCIt<56BhMqrTYEW`&3`f_zs4%^!voSV&48W2N&sAu_vUI zP*LvUwVX)gN`g`-TOax(S7( z##ovra8%T-#uy*DGb);k@)SHAxeFaO{rrt2f-&5U9sSXrG0s_HnXNveR* zW?fB3meW5vcb~b)n?TTY`K-n?UDp5oe19+Mhh*!Lb4KUwC!Z=8RQC6<>z4A#sOP`; zQCIO#T0hb&vTp9{-@a#Y@2lMXn|%g5K17j>`at;lZGQdYyM4dU3QhEtV>0l=1G4`< zyF5%k&f4cP{YO@4m?7zmklgpV=@KsORy1+}W|a9}#r{&<)N0iKm5g)KMTCFje}gbM zT#PJb4|OoYBGrh!ddc+g0iONQ5BTEXHeY^pp5?7Oh_=N`Xj>g>_p4ALuVOkwxmcXG zSg@=YaZtue$e*`{+1`xDo_vg#&OO9?7r)@EkItia_ZS^Lf?8ciD?w`=URFV&IX%dW z3?DhpO^;QUDgEN2Qc9_yM7Z&79UR@7i#WDe(gKe@^%QUX)!(x>YuFrBGSxoeEU7{jt| zLI$MQlIC0}Mos(l~sea#38zArjgForkI{Lwjajv&uRU3L7(PVGdsUM=v>=_drCmCEBO7 z^Up~hqpaQQ^?7E!%+b#j`XE z#?y+?YDJ@KgbFn+LtWn)@j+2&MkUkXy%(D8?=~-@TfadqZ@P4LGCBk$*^a!tgKPAV zai5&Oj-q!z+fCNI`>Q|i(xCmo^d4W|Y9qhRaAwR2=urU=gF!J|nefkF`|)poKRgQJ{}5*vkEUA%hpn^PI=(jXIR}jz-RBh$Bi$)#A_WR4sh0Eoeh1* z-s5EGS+!PR3WZ-T(KhhKYi()k1$#TUc=WNydHU=*4)5INgRd^LcV~~a`%g33-bToh z##)>#0+&JVZS4(sf*j4Jp-Y3ENrKMMpbb((2_8+wPlSO;D8+Kouyyzl=bn6mkAL?X zjd$3njEr?OtzlGZnxdeQnx<*EbLS4LYwJ96>NIzDclqeozvG2J{5jRuN=RdfI1Mo# z+N2nA%a~7Ie)7J*T`YnFxo=p}w;rO{y^+pHatwSQBiUD-dsoX%7ygN?aKd$pLb1BG z%Erb9t}du;ON(RKYBr7@;pcz)OFp~s37@?G5no)r%KB)^siQ|R%LeZ}t842l7jvu+ zWJ>`B&@nm>^#)({RF~9udU(!g= zu4ovqPFOTc#+z$wuTNRF4N`^aeN`&@>&b|7HW0Lg$ylB2#C`KA9pVG|5YA(?Wn*=W zTQ*#H`+a`%*S~_=@W_b=SRIX--QJ^_F9Q*f6X-UyGkT#|ECb<8YiyV)?_zy}OQVjW5nnhJ5Uta!(rnan3C7YY;fegvHP~YJ@Lll)5-a}EAVWM4K_x3(TsU1$0si+6R zT^~wKMuZL#=~b-{C9o&BNuSZW1Q)YLkl0Bzf1bw~wRCy=rX`zb{vQEGYV`_J*>E6;H1fx|R< zfwr)+wt^Q1?OKXa#2R~KGQnXCftrg|a>yIJb9h>fA(+UrO2Hnx;(B__S zoQw*}2@%G+X5*Kfp%|&CsOY02Q$_}%#e^X@&f=8-#yDxv+F?-~KKmfmWWuMTG1tHN z99u7O#vp7sXx@2@b2#a-%27&%F@cfII?&e9wif3mXxmc1`6lzd8E4Nu%y&-R&nH)} zar?q&jPGk$JANEhNfzEj$HGRowaz$pz40>U$M;7RQSte%a3!^%^bbrroJK?hKoVva zNI`4iiRYi=!rSjsYr}Xt!C4Cg1J#xVrmR@{hDAA|R0UVRzRa2Fl;`nEvF&ZC{a#w=lU%!zV|WTeEJn)X*jUDjn<(H#Cx!;q(c)5Ob;AAz)Ro%0WW_4S*9C`d2@&HN{R3#zKlj)h3bA;sKB-0yQz-B zpt|n-^^8k)1X9b|0LlF}bcM{VkPUYZhZ2#T>k);8_oeh`j*asqzJ1Yes!59T8?w6a zLroG)VZ6rR-oG6Y7(U9k{l5Rc{gHX6eAJ77_Fw+_-8xF-2k5s?iP*N_bKYowv@K$l zwTQx-V$AO6{97L>RBg!3>qc{MbDJC2zTx8M7b%3KEF|7KQeD6F1TKE> z7>!0Dak4lCdx_ z($AKv2(8<_6vt9GsMQINJpVM~?G0KHs-zS7Mn5+RH2(Ce;LU^7!PI7%`)Ot%*^PCRgiQ|BH;j4FhZltqbD5@Q|ZXoQ!7MjMXbcbtbG zdx)wUar4$KZtmPcO38FG38|xK`D9Tba+)M`vjhiR=HkP$sF+NqOs5kzHa3_{CM=hs zDD(N}p5u{69_IY{3;g;w|G?VXDko3g$7DQ4n-(EFMOjctK~+`MZ4>mFQeAMMa-Dxx zUP?*4vBAJLEmct%7##pr0SuZthi>ONEs6<=CmFu^dH=3uPe~K4hdV$UDDc5gaN6N77 zNw*ZKE+L^7!iSn1r&+X1o_yhHj-5JAts6w4_URCn&q|szLSHW?J(-P14{na{>6@r7 zbr4UE?|$yuT)X$66b=avl$W^1Q98w#irZh^;H`gnjjukr#7GoO%PHPCnp)#+sKL-C zbcM_oHS=YSwuahhmTemf{j8&D9bQUAC28#vUph`dcpty`qaX9kcb;IhT3~6YCIwD- zWEuX8bb+E*CDj_%DzMo`<1Zj}@<<_(Srzx$6Gd*o zBKQxfW@Xrgk+oy506t$UI&s-_h-6PXmcnrTp%d4)@qPN@Tt(MI&4T#&jMgSHzx-_Z zIm7)I1OF%&_;s-Gz%dXE{HX+GB*-`|SQkAF-=87+KFL#NF5LLnR5Fxhvbze|w@t7Ewf995^c>PhA!v;&BL+(|A>6f*LU@66T6-HRXX# z&aOSf`jG>C`1afEesLM;4890tIZ}ni*4j}N5+wt-I97r&2nu#~8?@P_^&b26Wtyht z#PQ>tJ$ahV)pg$d;xm@>83)guK};$ZN>EmTgWVV%+M}cjxllx}7daU=nb#&GIQ!B^ z*_lRU;*-34LL$owQ+OH+&%N?J-hTCUW>zz<#z+DwPzx-Dq);WLD!8*Zrz|U$ZOgT5 z-*D{MQJzxpyMKHYX)X6ZbdIVhm>G)|VGoQC5vCWh`rCAcK&gnRFA9k*urC|?362J< z5uMI{ZZTAVM2PY(q(KaR?)&7VG(kkTETookyp$AGiLx-Q3Y;-iRmF5=B@~9XElA12 z8OGy^CtrGj(`O&xlk*q&?1KyJT)W2h)&`@M3DQq#>jq~`%uNT93ug@4Ieb}RU5mHj z4y{eZI0hjlS~uLdagB55&hfwhH-E`fq>57oUE@cYpK>$Isr+(rWhVMHmz8 z8^&cB=0O-uSt?Rsn}#73N(D#RIHpAf#^ME(Mqrkjw_kmY-~R32QwqhCXC8sppl3Br zGe-c<1P8|Ykms*kjkboSZ9@k`jQXv0G5rx_*c#1vGG>nB>djls=kVy`5Aec^&#}3_ zj%hXPiy01Ry$v-Ak@Uq{3o4xKV4Pg+masX(lQCtdgzS|mcLjiXdgVa51T-^+Hzu z#>7Ho!`@=ad>Phv**0O!v=2T0j?j5xgk`zdVQq8Fb1yx^i!Z;xfumcfk;NA_?70d$ z!Ha-+1b&D(7%PrP&aqt7m7;5y%iUl}6%8WcK}vbQ!cT@$>|3VZ`t@y2M}E`U$83kl zMz@bTh@?~UzW43jw`TLZ{k_L4`h}18`uess$S?@H`xS-jc@#bt24!fs2j%DG>>wyN8pKFoGE1lH$j=qunb1h~t0 zC$vDg-j>Ac3}#8E4_0A>DNcqwY9ihtCJBT>IEPgNFGKplRe{4=$P(9jypn96xu0jZ zwz%}hdt7|)0~UL`j7OpG8S8@Kw~m&;8z1`IZ6GKy0&Qy=U~UbKHQd?TWp8iJlg~cO z&tG_f*Dsvs*1PYs@z4W|4sO#nn%1?9#v?SKjYgLiW}zu3qo6yl?>?7a~NsZd_7;V@% zc9>@lZgb-FDc*hc4K99hkwaStS(}c~IGlGO%>;}`V@gqCY)jiVp*_^tSZ@+4*}eBP zO~ZlhEjBkdc)w{lbm%ZIJ@-7%Kl2oS`K!O;fBe7yx7`2mgZ$uUKjz^2Dvj05+cvb; zNzZ6B3bhE{L*fyTGES27jEe#@ZhGwp?{MPCF;>S@?5x4HI&c8Q zt^w~o+Gy%lhiddjXJV-|O%Xur04rPXLW*Kka^>1Bt}o`CdFT``e)oCqJAOQOq(~IT zn=C77e6_=cRDiYE#8@C~WJq*_G1pym*|!zGGw42bF7?6SzLJe7s<1r=VZRbjJxAo| zt}mM5*D1~CQ9{ww4We;uO*UCv-{bt7@A3Kh&yh|sDN3Xhp>x6p{&=q~%cf!3v@F|} z#j;@$#~`XM#j1%bgATg;&aL(>%IX`K)S}=i=Pg_ zx8*ekn>LX5{=IZO_X962deVKG;DLWY_xt>MF)R?43WHc-V1hnd%5I-71`%VWO$oW13o=bnF_?>_z*?|B;-pJaPnGmh3GX z)M$h#6gtg}&JI(L`ZkHW_k%U*R_wk2B z8SK-r8y`6God8iNR5d~hf%PURBA2L6LHWpMuQe-M8%Ph!-8~G3qi65uzWYz}(R&~8 z>tFqvOW$1O*nut9Rwoo*&@OA1O-&&cqpAdFF>Q;LVdg-Hc0!s!H!Y^AX_iZ7yDRM6 zy3LiZE^_SnQU2&>Kj+04p5xcQ{SE)!|M~yQb1%NYBTqfSbiBfyc0n~7Gpk#wQQ1XI zHjpDI1j0IetJx^VeEr!){{G+p6`z0dDTg+;c>Mlz*j8hgO_<2nnydn>3G)e-ZNsu@ zFeVUOr74ps;hzV^D8Y1Pjorn9n>%-yZf)?d|J6@9`|ufxqNLH9)#)0hH6blj6&aQB zIEX2!G{ZyKXqcsoEsZ_>5j0R&UDfNP+Aj}5FYm8T>FLm12auzvY<#+Orx@toyJx4w z0!-}?4XhU{+_`*%cYgCaH!ojjrJA71g0`{LdWn!K6iK$4wzVwln#Hna*|scO9l9yB z4xg>!+>wZW8rkspQ;+cDpTEM%2M*ENIYv5A0ty)d0TrpZokytxDMJm695~$_7l{x) zk0__FxAT97?RCAJ$+y~|tiy*8_}~{kQh9R7gixS;5EL+WZb(Q;`dW`D8CghY#aWFo z8nolsp@Uqxc8$OJ)vtK^>8E-8{xhuIy3NO5eZ%d&B?nHQ!cRubv#S|BZ#y2obBsy+k_?ZG%z@ zpH3Z!T6%@l|*P*xGin@$h!`Uq0Sk%sPdAEoR;!1-s9WFkV4ML}7OP{QLy zVxF`4-h>T?x{wlU4BmN0>#G#nuvpd@tvUVpL!3B!nzvtlllNbHi=Evaw%0dUpG*TG zP}@?sIz;AzVDM96q%+vI#k3mT*34%!*4NkB*j%HnCoE>W?Css=p%HZzWn+t ze)ac%%Qu%U^X$vt;ozzJxYIUN2)wc2U6`O}9m>O~D5#{QSuXk2U;ZVp{_U?>E5sT!2F=bE$wnA&D+m>b1qD^2y1aLO4OA=EbjPQ76O5;4AUizA9wc-cA z_z90Z`6$zk3C@KUNhL#c>?Kr_GBA9ST*TPcn^RsL#WTI1gNQ^Kah;pj*IoBYD+0{PvU!E%5eb$X7lFC+G{_G;}z4{i5TQfGMYq-|Z)D4cv2BdX?X~O=4(B#XUYq^t?@xy!;5#yQn8+ zzJGU5DB{~5qBFQdj%N_DTf=ukk%grrV94-4-Opi@x=T5q`j5ZmE<}IP`l*E8$e0-Q zCU!uCj}-hp#(HnUNMIp?VO5}HfomPc*%0l?f~F1L_WJRoytui+r4K&h<2T=;xxEvL z>#PYhy4FT!t&mq$EsUgO$Yui&eF6E#d68&$`pL8 zrSKNLTryo9)9RYpY{t=}hdFWl82^X=^55{gH(ui}|NH-m`yYLXr(gLlUj1gi@L#i$8uS-SS-WL z0xvqAhm-=eE)G0;MoQspk2jw2${4FH(u86( z=YxapW8|L@B;muT@Kn^5K0nD$F3S2A<-I>LygRV%(yvKYJ^j(uV(|X%I$dHeRk%wL zCYM%aiO`nw@4mx@cRs=_G^>*-&V=?`d>lY!ELu0{rlD>Ov%00xkt*5*eh3pkPZpBa zv^ZyY;DNI|``xE_^g9nyO~5OIDil^Yq$)yv5urp;Nl+>c=8CwXPXn`Mj*RZ#-|H8;qQ4AIT*I{kRw_2Qi_@=LW*X@7@iRdjnt2S8-Q-yi7Y`}Z@v zLKl5@?-`^%7#OdBQYIvbdwr$%^gcgcqi|wh5u6YV;jGSj{>S`~4vrU{=Swf6kztwi zVE4Gj-MDg&kn-YW$EbJT2@U8Qs(ni=(l>Sk#m3hSPMlrQe*fA@@560 z^#qDWgY+Kfi%vl(5h~rC$2pxTM>P&1N>mYsx=c6MIr+@flxwTJ|BtURyMCQXsqk$Z zMihGoUeY>GVMCOpF*qlYs$w>;Y4nZ2`@UxR^pnq7%$7X(&^ewyeS(j#Ugp|+@3L~= zan_C3q@knLbNe0km@oL!V&jZ#34Kar0^8@SZy4f9U(zGOEs>jn77g#+_Sy^Tj1rCS!ybw6jG}UdtNqLWQsrf>AjFFDT2~nBo!#ZOhYVA7p!d zjsNhQf8gEg*Le7uXIMXW1RxEu=Fx9o2aEZhsFw7-~^M`c6rO^b%Ve#;RiP#txsqdx0}#&c-l75N2jTetqHA^i^Y;<-BQ~)6iP>)6Hy?Y#Vbo~<~Zee{Mm>3(NBNC=?71; zaC@{e$d6E>_nhHeNf8V`#F`)B36=d(LnlZ-7uEHwPC~Y${^?M(&Zvp*&taVgC~>rz zDS*Te>(}C&(-5a#uV2rB=ykF5?R3u)1j_pu81$#>_J10fznIj$S1Vz52nWzXv|Ta` ztxJwyE_Ch#8EIBaN0%OBHiYn~7yj*k_2)UMm^`cWb9{a;_TT;8U-xX48;}SE_$tBH zX%f=@??DSm0rBKIV1JjT<)@kIO)BYYiwB zXU2<|FAfDzHbLHm9&KwJQYsdU89O_-*jQcR^s%ETW4V6iGV{G%#*-0MRbj1zu%=+&eEt82%z$nC~q_$nPdjfS$AG;`mNaFPRLYb#v(@*+*sA`z6b z0PA{(Ivi#ljT-(~084JKuUAi(yO3N*P=1>Sr_plEHqVQ*RU@KaB6;(_~Vy+f!la#u=8AtXvD zlq#Z}$sj{gg_ct#ky3#VLv$!qST7+k-m9TTIZNI4fAC~s||I`NoyS{{G|#J zzH<&C6~(wh6a{x?Grqolll8;f{N#^+$;-d^K3gY`GIKRzS|Fy1a#B*omPG44#s~B1 zJvig|=Buyy?EDw3R3l1NqNJoKVsxq$LKZR27!n0_vt+b7;+3Dg!up|2mbQuc@i-ay zKLU6rxYWsR!my3@^C>q_U%LhSk z4B7JBucY-mdnZJ4!blNZervXGqPIT-l%b=M?~uZv%RA>yba1rT_cJ}@v2WL+Czu=H zMKAd1dI|IWhgYnN{6&Ugm;sNG)%6iappd+!^lfjsp|8+tR5gQD>L zy$gm`(5olxJWGiT18kzlE1VBeamwf0(2}L346wcw;4F#}PK5R^F{;=&a)_6H`~xl> zKguU>y~*t6O~%y-Z!CoqVVtlJ#f4r5idSQyZELJ>7;iDoGM!YkR)hG6<2ySXJ$aJJ z`WhFmT;b-0&)I(944VfIGS@9ygg$xWx@lsa^O9E<V2GKy@0nTra2!aTsvR%}3j^3H`!8t0b0$D1&)1kXWb$#VN%70R<$_1FZ@S!8c zD2r7FsRR3-lQK}&uCL#(w(Y7tEZdu=0XMJ@A?OIx++1=e?b8C~+_n+oRFaLnAZ(QTe z^B?f>n;)PTH4hv+g=;jkomrTE=>ptttfMuWrqwLkz&59~jsvaYIu#X0hZIFph^2zt zJ9pSyE|{*Z^Rs{c3!ZxMIaane&@xPrtkxz})6kLNoeStsQQ%{DhBF=tPi>pf5gFrx{|Rru{x-8)yR1!C0OAN~hch121~$=Uqk{t%yD0)~vc-##r?)QF zo=A;xE$1FR%S%6ck+YBAPc>CoWhh26&Jzlbl26l4g&Y{Wjzr5NRJX1fQ%&kNEu8OA z>S4sszO@RdTfehH>_6WT!R$B`6uBC|&-p*tADJD!4!qvCp(5HpFEYC9_TkFI$h`YU zLM!eS&JGkvPly7|@V*;}%&YxW!@Z;~uZjot!k_(De?FwF3=5g6x0AK*2zW$hyz9Pw zUX%efqu?%M+xKYtPuq6{(juokbk|4OkLJmchDhFHf`!t(43LDrgV6upH^^q+0SzyU zpOXq|vLGifwDU^)pO^T}yVQC5eH=3z-BBS$q@a{t3ngI^nk>S!Xdwm0IYyHS$4(w+ zWo?bUddbdwjx&}j9T1;t5duq@@iFI)%LPxVU%hTxX0thZ*|52~#<7D(sQ2c4een_s z!P?qtoW&ApP>IbjA{9u5p99bnaP8($F zxcccAENzrnN|gCLeP50tZjMtsV6vg<}{5ncom}j#D0=< zkiE!C$zT8qAp=~kVq0oNH&Ry$N}dMWpx!G z^twA237Vj7TC}k_2j4VJB-;sXafK?;%Z58QZekn5_QnlkTy_PgKVkN)+a z@aXeT(^L{Y7PzrOjtfRB6Yv)4ECqqxQ^>AmVka{-Foe;I_1#tO zA-*F2m|%>Yk{=>883OmcT^O{K?SD^-(eA1l=oUK*OEQAd1rz^u6`o2K%rP0jg05+0oM?TpT7Oz)Pf$x#8p-Sc%al%u^Q?Xh}65v)G$a z8^e8%Kf>CPL%j9ct6V?-33j%`XhWqGPDs47As3lOn0gC^Y~gB5z|7^><)(L#^DzsU7m86L|&xuj6%^% ztHelmG@`{abC&P@>}TBm<|enlyv(d^8B0ka3j`KxHBBA(;jxa@=?c2lSZhEC7V|mF z*@B&$w>WtCFu#29C7wTfj=%fuZ#nnz0sh_ zf$NJ?E)Go9;p~$UpIuc*kxB0$rCH^D=~GfrxWIBIMar87!|!Expt}$BkxDq;kW4%n z9+bdHiL@c&6GA{)U|NH1p{iCfb&Ix^1E=oeXGf3m+4+xo^>@GJ`eK)j=^EY{s?jL$ z4;X{778&oashgM@(2U0;+Ez24FPQDk*txaC_QnRQ(+SJnB{#ph!DMBPtDk&Dv$I6E znkEt%Y3pd(hGpHNb&yZz9o`4j!r91QfWRvix)<;it1EnS^9KI*4v#sG3xxI5izP~i`U@rd1#4u7H+7WQ z*rv9zy+Kt~p+&9~c|^90c4C02-s>wVXHS-kbcQrmFGLj_|Ss_}-?XR!# z&Z}>6<@3v|jaHaWr!4mtXwzbaLpK)PT6C+?jSkiRbwFJj9V+~VkfEbOK~+`E+ZhLr zZ}Z~!zQa>5Ji+?GRTgf}c(tUcB-%C0J*h`Y!{?Z8 zZLrh^AynYr_e5umskYOdH?_h12)>UR$2jN7_1%_Kza!RwTX}#s2{jdHNzxp5k zXFhxHePl7hIY%V~l`Qba;GJPd&oIuhzPiHg*&fd**Qt+;@bxe*YSmKK+6c&q`S_8CO)c!Ze{Z&v}n@0;fGo zy~JpXF^=W3;m++HHrLmv7d6xIh^@5^tnuvJ+QYS$b{QD^ycf*pvAs-dw6?M8K1|?C z>uH@sTLLe_sK6npbEkar|MrLMd~=Jf$vPudvDjUr8-q|P zjP0#knmW`3c`va}uvj*MwmY8Z5I%%CD_&aeJ98i3{ozYI@%&?m%A;wiRtmiIfiy{m z0LIvOjD*K4pKXDNqkN?Y*E1q22TNVvdf3&l-?YWwx?mepJw$F@M@9TDJWGn7_g3SJ6QpNh0N-Z$B%$ygB#!pnc6%@kMTM9}$utjGFCUAfgh? z=s{i+Nj9(j97vZ&$_FdujXHA7p_g_qAFHd<6!|mL>s-n`?fd;*#V3OWPf=aGAt5pe zP0l;{?k@WdmUOYb$b`SCqJ-F+Yh|c1w#MSi3bC@vPF+)tC!BujDJGK%pS=4%dsnXE z8qEl(OlkuPY+X`G8l%H_&N6VMTRirbi`253GlWt2>09WLH4U7k&Z9_J+U`?q?40+2IvcihUuYge)!M+fGb~I=pmR!4eo1L9qR;N>L-`-(VjhKwa+}XK<@g7kq7ER6Gd=Ux@ z36VZ7q=cLcWIRD5#J2~)Paz7A}O-HAfieVL4l$a3T0t-YlkmB{FqPP{}?lG*_v*G zh1q<8cL9N1EEg=Bnx@q_3pg2v{e+GSBf4pO28Wl9YN|MP;yzya$tyhY$o)`RTwy7T z5WqMrg;bQX3=UL+_#=9ivll6ioPw(iMceKfllIQ2bEnDE3Jn=vqt59W(cIoA`hhG- z({^@3bQ|EK0ucK)AVcsj@wy~?)a}-O^qH&=hA9P7aGZYcJLhO199e(J9>mcn9m~cz z-$tih`n&=%+nFKb(ad~ zDlB=sVb7!&VJemjtY=aZi|0bDfr=4<6qKrAP4fAQm#D2h1A!^Uv5@%z5ufmI6GQ1H;!^TWnn{iulEAwyMrEDqeVndI>DDxh5eD?V0k2}C~2An2*GG|jb+m? zIk3sgfADk4(U?!(dq~B`6Upn)hdZO(IO{-plq^`8 zPH@)n+;h)z?Ed@t%U}O3|LuSCf8wWq{6`!)bDFs`ELx3^%xR6*0bW*eP{doP0=&ao z*E2w|)k=jq6ha7WVKLgEDsa*w3QHkHK!_|HJ9CP|$By##mzVhDy$|{Ni;Jv}r>w6| z@wKKXN~|+1;{?2_D$%XMXiHTVVSn~!+?mZ#Qcjf*@n>_#03q1bpQ*0dEq_r(g$&pP6+U|ReJ*`+k;)aUPuDT6$F>^h(x~m0 zMcuG$LP4o@j;0ROzO6Q(LcY8;ZJ2OaN+zpgp8n30Jo)UC96ojcqYSd}P=F|6i=&W% z(KObbNYRD&G9tR+T-@zQhllF|yez|_(~7yP+jl7QVDWl(#EZU#>Fy%b5s~$CALr}Z z!S~;uAfY#d-wkX?4=G3vgy`?w@Vcq(Jdc+rBBD9k-)E!~AHDB>=W&RhQ;|HHL`>9u zW`Ck9^fgmh>yUmaxaXf4T2+~sxa$M&kdoed_<=(0Y!7VB}J(yR7q3o5dDh)u{!5zt2Quz=@xA@t>}r1dyD4IZH_au6CDUrbxExbfCF|=O zT?M`$?pe;s50bY1gB1Zf5$iS*(vyB3w2?+>j~9#?{h0oW|MCH8DvE;1Xv~?@r+Db> zIgXyZkEfn`g1`I6-}2Z0@Bfh_51i)N?|ql;g9q4aY8vZUolG%Ou&9^FqR5}Ay+!#z zPc58}a^^vV=5#3nAZw*UDupo;+ZwD6GbW^Ucw?~If*5i7;RiW&`V^mjaGtkbd!4Ut z-eh}am1!ZtmyC-7-8M8@$G-ePQLU6fs8~EF9m}>R4V6kPdoJn+ADFW7n7q!iED%M( zt-U+Avf`;1pW~?)pJVO77UjyARyddzFfKxkf;R{Sg)C7*P{@F+WU6P;rK^OLVVra( z<#9|#6BcvLS+(T&_epvB6CDSSoG;_)quh5H&;7Lp zz7OMzp74mlz2))tIZe=o`295>OaqMK+Qp=OLz_N7vA+4l_nsh}`1sy;UTy!s17sk% z6Dh(9nz%nfDQ|A_rU#cC!aBX1?=7ewP72)r{Q1}EAoslVtQ7Juy3ZE9e%#*Y4jh#J z@1ucF*Xy?pb``IE_}Hhqz>ItZ1nhtyw*MhzDPIp7F|*FFyE) z+0E;Wkc`U-?R*KXqbe0v`jB%KI^Ji9a8hrulnVRxRoZ34Ll0`6K6!!zD^q^|$w%z% z?Qr_pr#ZO3#-6rlDY4$gzH||yS{Xgi{iz-i)=QM4{N-*<)>W zh423SC#*~+T=@O#+}NvG8JAew1O!0~j1vUi?4kh@)OE|we9q0CT~;Pj)<+Ab)fiEh zRMRPq(V_h^a}{)Q?nRJom8zCg6}@oD&xz+wWTkV@Jkvf-i5^fH^V~igLN7p-1w~o1 zx3hz@jntgZ*XfR!au7EJ9;7&4>6w9GO+b9Ar}Nq6-EM{^ zAIN%cqaDs$N%A>FzZ2>v?m1X#xDTCkm9=v(9gr&LyS0~D+Yb#!{Qop(;hs26|7*WN ziL(%TjzCIpcLl#Nj0*P~3m62>_xiZOJ@21=5HFMrY8OuS^bq@AAHLM{fA(MhdGb1g z^6L{UB=EZz*@*7v&YSHP_FiN=+3U+8vdA}@oQW(fxmZTz&Fmom)K=HKerhR6_bJl) z^obLOugxtR@jXt)gXcw#wDY=&du)!NTch4J`}dTeyXV0TkdtWq`yAeVm@GSDy-~BZf{T<&5fHk5FS>_3aMR~Y9`5wEF@rKi=I$uXKCA( zQiY1>y<0bNy5+$KPIL6oVZOfj6*sSb!}@s2+GI6%RyYw*94835{djo0_8XBSgLL1i znmWOBQmG(f)>D>6Bp&hHck(2w8yj4?eS7R@kOkJcP+i^x zKJ(UC+Ei#3u>J@Y7bqd}zDOZhv<<6=w|VsWXDQZJFfyT3B1bz}B$9ISodR;sBaKJY znhS5f!|pdXn3SUk8OCmrMD9}-C?%=unyM%x8vIy;FQbAP~p*=4;ZbEj|^O5Iqp!=i{ znJi0q2?o%PkKTQs58wWPX*p(6Rwx8Y3WN-Wy9uELaNeT5L5vjN|M?F&e&!^N)2NXO z1%Rs475lYfRs|Ue=-R0V%%`4U{9B8yHB(igmo;zw{x#nC?eB55XJd68Z(zA-@lIf^ zr(QN;L~_$mH#JSuhHC$1nDpm*1N0~)wQW#S#naz;lJEcQdz?6P3^5VdDi%`43Ffj# z;j0Lf6Q#)gK0RIE&v%JvBD+Ybn_u7W@$d1u^qhgTRwCPszO9KVhOE1L#dwI^;U%(x zCnGZbXg!-Gy0ek%6g=dxuXjH=($2P^t3k-3<~!%NvyMLN8ARuJbnS+s=k!F~->Xpw zXDiu+VOw7?3tbT2=U3?J{4zd)dj8-3SAX8OTRAFE-_Y}-Iz!f>4gDTQ85MtL+`2yS z@ZZF#E%N_*o*p6#LH~jK#xZR|KeezQa7YGo$Y9ucd;NaU>~;Hr|2=q4vG3yjh`hJY z{eWw*KHc^ECqEs6{zj4EF`qvu9Su(+%97DZkuj-RgoIoWj8aisjaQ2G?F}}zHt^Q6 z+}*|Nz!zYJ$EsL-=0V!PpNk@5 ze2xU>dwVSBGn!@1?ycLLJ9~ylAAN-D*RS#B+i!E_`ZY$=G1HaRFjXxYHGCw3N{(uT zX@kNSJ*PYTJ`lCUO_3g@R7Pc`iczu@s3H+43C7b2C+Sj>BmDoU*P%<2Uz>+3xH)D!&VPyUbx9)AQ^NS0P3Mj_%a zMisJ1DKJ5)B!vp>h(&Cb^btk#5K>e_7WcifI*$z9NS13Ek_ZmhRyRbSj$YswCqR88xj(FKgB( zQx>;(`OUBXj`!Yr8((`iCYzy?r_neYP`$-`NmJKYPb}WZXrq5Bbau4M(rZ`L$$kgp6S{ehmRe_3&+jf9d7OIQpl206(|eBSSqO~3k5#pJy9NK zf|KK%$2*&mhhzj*Br5ST9QD!*jQ5PU*LmpqXOL@CY8(g^&wOa;8zBGQWdtCM9d=k_ zD64`?pMS|`7d~NiJfRX{d}=DdM1XZ+;EFb(J!^MohVUNUw$$?)kK@jrTNFa_!qd<4 zz=>0Q^~q;^{^5D*ojne1Z?m8bW`Vqh^UQ>^y>i@7Ai&7 zkswJH5#o)?O@_4+g=G8iAx@sUA6XRKxOtQLVhK`Elx0ZsI3FmgV|PP3H&T^IsSr{j zs){@Hg1IxCeB?o1{`pUM^5qw(Hm5Y+V1z}E6haA#Q4x-0%tfoRK&qHdQnKr@i9ZdtPo(ialPwjURsj}ALq-1WEoPFXP z&;Q^>jIzige7=w4z`I1I%p_R}fy~ArhC$A|5Mf6i59y$=9;q!-J7(Y9;f-JaBOku` z9-EVO4z3-dnYE!+*hAZB_GSxOtI^i7tV5TKN6@quYaOFvgpje8sPvekW%JlNKl*1s z)VBx6#X%kt`S$MQE?HCOG^>*aGQf=)m_~p;70bh6r3l2w5U1lk!@h z^6(4K!s>)Jxh+2Qj+0z85u6zBZP$hrr<)lZ}zwKd*+?JdSqAsQW=Al1pMF_tu95cLT@!j8?3d=7juj?w9A@$XOF{cTReO2QMN}@K6>Xp-hB1<;2pB zh9Wp7GNLwKNW3EVq9i%q#qHc@Y zUUan_*|mmsu7po13g4|qzMGz{O{hv|y=7jT)M4FK`jek2 z#GO54Bk_%-05n<-6zb4DM%eZ#~b--@{c&srv-Yr02=vDtZDi@ILo{cWI8h z?l$>0DI)W|E#C){Bo8maQX)3lcGa?E6oy1CjF0)bpx8IIx7ga+rVucn&sa2d7!qSG z!g;D94B&Cb1qL=HF~VbM9heo68mV*Zl^3b`5x%k!BeD>KFY;LTxwz3*V z+FFY&BwhumQAimGfP9z|DDp%#AD^d7A$49d5!Ut@mcu)owH!EbkkhB`XJvhzz4?q= zJ3BZjQB{SIlD0LtHuRGRHbIGyQ6ZD|E-1Fp!W1f*Rb1DFZjozK9{tX9FsU$jgeo$8 z?nN3<6(L^dGR*7oVQi{^#eB}et!+vKZ@u~&)5(O*wKYuJh82j+hQfojVJe$8fh?!d zhBkI&G);3cLMG4iDUQiooAoNY0dBc?$=!X{7a6kZgKqJ;ovy=5P>`IaFQ_T zPWU)HC^%R$w#bFRIy}3I=T9ZaL5k=k6?iFdIFMncdm25vva-st`|jiDv7^l93-0Xh z(ApMNl}uLGkfRD&mB>+vC>8U1$&K9^PrdLAfA}x{m{Sj)L5?fNs}n2^RYkbD2qTVF zp^!xpjek&tDGk=0(^x&zgLcEb`S4VO=*WxEN3Y@b)oc9a|M2hdtz&hv5)8H!9nhHw zmhc!81`*Y!VP$iLKltarWb@EEwQjIJ4BS#u4Qr#KE=#rEDLoPW?4Syqqf!cCz}1@4 zNzAO~gE!vcombz$E-hQDn|STfjYgpIyo9z5xqYJ@RvV1gG|QT1+2CC;+BQ1-t!Sxz z!}ovseSZGOzhJsGMU6sbe<((cgQld+Xk4FaT4rM$9L1Eb=%)GgY)Ge3@3J4sa3}OK z$6eW>=qX835q09@?*~w1QnD`4>ML=`llhWf8Q8dp#!l>OP=?Ifi&g+ zrfE@m!d9PKdf=IM7fzL?3EE1Vp1n5mAMgH7&zS_P=j;q}Se=RQgeq;Vka=hNQwWoD z7GUz=-G!dqs1)NY0U;&YT9A^->Kg0Y8;C-2Yj>AcxUv*Ke}1y2*3TKF?xrmkaN|k8qCd%}qvCf$@&kJG@dj9|xA$A>xz8 zCW~?}`7v-jgRJ30?zd?Tt#cecaUTayoS?!X(SP8eS4mKn7$CE%&kmUnC;CtbNV!UdowP7 z{WZdRCPnPR%>|fY->eIB*R?e?R#Q8JHilNWXdSrotqFUudwU00YhHZjIi7#)DZc*X zbKd!ff8^G+>uhapa&U7KXG02yLZY3CC`+7s5YMRez1k8HIqyl%L6_=6g*1tfsUR#C z3(78SQ;kQQedrw9hYqnbpKEq3b#7SB>Q+}ycC<17z7`8dD$lV9@8OD{0pT1QlY zv)@XODrNXCiukRv;m^@z&zKBZ`uaM>bC(`Sk(ULt)U1?a{-^)$f8g@x7g-;#GAgSW z?TT#ty$kDOt&LL`1-Eza@XU9g<9k2(9btCC|U|JdD6s0$+p{+G12vltmY{OOdPn6FSrn#)jYb2p)4F=kLOk2Fe4JL4S8+)c5b+KojuHOer7Qeol}v1-+QJGap(uI`|TsBXaDTq{`o$OH9R!? z3hlbz^>4DjNxh=M{QB^k9L)>5 zP0kS>xw5+VLK5*pPDjLr?x#{Rjc0T+(nk9IOP$xL6QrD1iao43x*2%YsV1XyDjXsX zjFEwcH}NVci7E@M2zg;SDp@m5kdLEuqty!W|yvQNy>pHZ)^#Td=e`;OtIuSI)}EF)&$OeZ9R2t?P^+$@K7(7+`9G+tL2EFeeVa{fAl`yd;4uZ z`Q!p<%fW-&jHe@7(*nV0cg<5G??oESqL2uoBGfCg;s~T^@9 zaVKlwNZjvu9sg@o10l(UaM%=dr(6CQv58CDK%;VOl%1m#LeIUV6e7%C&9;ZMe2 z$X<>)>3!ct{y81kgJ$y?&fPe{uuCrx21M)m?8A@wn}7H3seHluc!kXS7Ztqsp=&|P zAp5c?S(+9rEx-I1f5`pk&Mz{Nvbi?I(&ya)G&N)jVac8WFZSK7~0Wowqas;1) zJfH1bXUkI2qUh!&^zJL67z1b4C#13C;z`d$lCy!M)pafO9e{kV5%*Tl{O|tk&-)jM zE^jy>NkQ}@<7}`P81})Mr_JgG#eHWk_dfT`WZtB{VN4g2@lJY(LVtGhT?Ht8k8Gb{ zq?}N11VY@ja1YY=?jw1nvRel+*w7CC>PPn7|70g{+3BJCoPm5NBbXM-=e&4a9pmdSzvP>5uClte%IeB0##p3Kcw`sUM@J>`1f+a= znx^ORA#X1_p-4G%Z7p*2|0V4|`)#?d^G@_X=d7x=*3R)H;2hu}6OjN3W|0&{O0=wK zOK#iUZjqAv&HWVoCVtbm?{&9Zwj?W(A}MB2%oLG9fQSdcNjt1iRWtO98Efqgh`x98 zw~2jLsG2py2+tVf84X4Xj8aflER12ivChRym$>EPC05thuok9m%UmyfLZB=@c&Z4fkIiGU(0}rrw;XE2o=jltzWb!_JEZwC# zYwoz`Zgw{|Fums5(Gm0B!{qt7NnQM$^|Zvjv&{OQ*7#;E1_FnE=i}c9rqdZWZ`|PQ znKOL&10SRk@Wi*j#dFU*&Fboe^XJa8G9KZKCzcTeMJ@@6Vfn1dkgFkzGlmqteXH<< zL3LgEya45s8l8*=fuI?Wu$96J!S2~J+crj-$nt3wPYYZ~XReU>kuE8iPk}a>Yd!Vx_W7&W-gI z8bd3JgUfu zL7LNnEgTm=R{>|V7FL2J&jm~GsoZH*wuFJRc+RLx-!n4n_xv|0K+GZ&G_F)Pu z1=<=^Re9chSB7~+`a8u3Wt^M9R#z)JYdqtiQaB0K$SYB8G*w-3_QD0uUb@Ko?lz;< z5zTmlagMI*@J4P%x16Q z3jr%DE3}IiAtmG035U~T&Ye5Y{<*XC3JzvdW}OeO)b)r;DV+ADj52tL#`>f+V?Fo$ zqVow~3*FIb?GYcPFwS!I#xRp%h(_Xq zf$337i#wqNUAUa3krfpZ*BQ_0k7RM7c^tVH*g#i9@B z5FR1wT4vKZec$`en8BbHwS-!7*d4QT%NaiY8=vHTAAg+Hz11|=)uhG=N7blM^`R0k zg_JSo?q#6g3o(XW8Uj%d4CPMd_b;Sp^rX|@B$O$tmMCQlRXmV|rDK!kwQw3;aqXPN zmle9mH)82eQb-|=LKLr)zndK0Qa2Tdpf?l>-hkvCi}ZA*r=Op8$ym%sulRhqp-N*S z-aZSXK}cfBScqd#k9_`*zObw$qs8Gwj*$<&)v$PiVYYv;g0j-jMt}$&b3Blu$R>_( zn@ibLLm0jEhzG1%d6@?`!4Ov{UQNorglIT@yb*p+_(7@YlM!DmSQudmfs{K_*kTi% zL`O2Cqe#ynibGV^p9;4W@r;&mQk=nqPgY?jV~H@XkcwVgjD?M@Ew*-d5mm*(!J+RJ zAOy98I@Z>QjCC6X56<(n`(I0Mwa*REzEp5h)!cLEo#SUEO`)AQuj5A&- z#7PXvb1^B(1555T>_sH%!u)krH4&cm-RT-zDHm#wpCYw7xq zS=%!2I(qBl&aPdWv%bFJyYdMS|1K5_ zs!&$v`wRH~5GnCg5RAi6&o4qUUhu%Zap1l6s`Bl1WhJRb4b95fE1FuNMm5#S7&WdD zl|(j*s!^$@fvmioh*|#eT*g+@qJTZ)Irc`gPx7-VQ4AsuC#^s^iO`HqP6(g?-g#uld4G*#mbI2TJ|9nJ;=*!URv)q|_--@4Dg{rtbj)dH*hS%@WX$$(Fu zTaaB5?zfInXyQ{l#aL8aef15#`w!pZ`JX<8vXbqUO_ULIvmRjuM*9RmZG94A+iT{F zIg9xmt9=!T13KFyM>Sen-a5L$rF(AY*Z$>axc_|*Qms|AqGhzwpc)k#go!lfWONq} zO+r(H-0}8Rgqx%CF1T9?CusTo*r_!`{X=gz$|(^-X#*oK%HbGRa7)R6Nm=^)#l3=v z_le5cd&17;>mO>i2_B)hJkwYk3aW?W#~LD)ZnIhakI4&m41mD*Lh_KKPDsD;zB1oGd+lPd=>}nn#HJK?MVY*qt-O>qAIDTU4+FBGrTIzpu>)75 z7;ia4;eKfz2VT7hi&z*!8PHFZzaoJSc`joNHj`=i>&ck899V;d5INB%!c^fshZkHu z(5$YoduE@}WX$pL5%c3I%K40V?W`{$u`#yo{P%Pg?7>L2J#yjTbIC2`7ohf0*$$$0Ovs-ThB zT6zK>XIWiaWAE%4j*pLc;rZtfcrFBg;C-F53e0zt(U`ibG1hQAopbkl-ot2Zl@3pK zWTi|3MLJ(%R21#zUuRQUodvWFEqp6qVbSAQ-`?cRh4YLi6K)UM%L!<_k}F)b~hhIXXJ#;KohP?(g&P{SUCazR8dO@%udc%ri_T zV|I478IMNH=QEn7p%N0^X^%cAZv^$d&2$*y2_?SFG@pZzP#LNPqzcGDpNSd$DufffP>s-HbjsMSo`rnz|IAVWm7incc2fU)Ufuh<5(jR9n8V9xDjcW(|?!WtO9)A2$j{BJ} z=S)IA7=hSymgBjWPNJNL{9R|LjbK8>n=ie}x4!aqe(}r;tjIAd^#t1+Y-h23pzPL; z&RF`cXVJCH+m^0tvBuzV^j6bja7xfg!`!x9e$Qn-`@8>w+uw619UZo^R1<}&{T`2{ zA7w&XEEkJ1BbPgu1^`LfmGr$iAArGY-Z+lAUr~m7=TQ#Mb(W(k)4gC)&CU&3Cq+Xb z>Y^B<524y5vr9Sevd)TOM?}%SJ{p-(VMiS$BYR0MEhIf}Hi9CxyjSqCjdbA|F3*pP zhU3s^O**x3eG;fIB1+-X*t0Gy;@Bdtl^aZ8%wtgR{ru;@Fc4S_V^vwXyVF7xrMsH;-p~k0o47QlDB_o;u}~_P5U3NyI1{C4I7tzv6@`^pGOs!35V8Ul zsDF*29*x=C-)CcEgXwh2;lV+u_YS!MG1D7|G1kW#u^}$n~>&lxv z{=WBd?(7-9`43;`?YG|K?A{*htE;qK=eluUQ$|z&0ZgFzXgH;}N>=dHJPZpm0`7FGK;tHSzr(Y}G9z-sHuBW-SJY_-E^&0^7cLP7*x-+>fNkB`t@%bk}m^P$Hd zXLfYRm%sG)Tzl(H&hPE9yR%JGS4XY|a4y+tt8Lq7&3 zQ0do~lT|_SDc^VoBx@EerWJ+M#DHTPy2y zM|1w{KmQkg{?zkaI(HG<_0+PWRtlrFH;k=Iq*#PCq>{XO?Hae;dx78mxBm*;fL0y_ z6M-Qzi6$9OdW=(hgQP-2Z&*=dY9o012S4E(U-~N7UVW48$p)*<1k-7BYj7H$+}B%w zMzvwyceH&=r!@}WHn}rBP64F(>sdOtV6rx5v{FM%?hEK< zlnKds5wUBc$VT_O7yu`;{yF`%7!NDn2Tm~n%Jq(3ZB|&>9x{2-k}*+CQmQLQoS+=emT++|QQUdi07zC%_$p7Y*W!^rOjLkbp{pFF$3q4?KXPdpfT{>g9esoCRYbrrf zT;Rh17Ek7qn%X$%JD;K7n~qNR$g1M4D{pXicbE4+@(4eF`Waq$=2*Y z&=O{gITpuaG3U)IZ{W1y!S}p}#~yr`*MIQ}Pkj9ww8vAnHaFN=-$Dt6?sb@bnQ}Ku z!Bz?&DJ4}UkpNf^jjU)??UjFQ(&W5hi;Iqo@3Q#z(Gh?6 zM}NRQ58unwOffQ4K?D!qB_$E$i<2q5C6QnpW7%NmJwJKk`+Voi-(Yd$nEmx_8d=lL zT1;=jDf&*+Y2))&dQIE+w7L&x&l}&p(NGCG42Ru}t#dnk{MSFphd%KU#+wsVBN$B- z2!pYmXY(u0kBsO_Sl8${M5tXB%0ixo0KAhj8@x6Y)~6c)VsPd~V5}?iru-FT(i5eQ zS~dXU*>n-pKjkwSxf0>J5m6{J{gdX(=tFV+qToKfA9ZJ`;i6-k(UB;Vb7DJ#c`M8J zqD;@2MKo|C@lrSorx;uBWB^2@L_PZX&wU~5qx_HwYA6MBv5teRd$$a3$AcOzt5PKw z@U)1mJVxTISihGZw+kO z+}vRA%pOijrbh?3`NDTh6S>(6p|7|N3Q#!dIn~<*T5Fti%(^+PZh7nV*Ezqp%cJjk zfY)Dsjpv?!0h)%%_NM0va9**c=SU1&ab814a`35Sfc^!M!dE7qa4Cg{^M#}eMgfh& zI76)@3b=mdO6$U`nAf;r~G)yL|T)B3Q^OtX9yt_>+Kuc1RoOH>r z@X9hGOc53rsj;*#v2>o9u2B^Zhc+fO-;roza6-~dCS17X0=Hbeh0Yp|4iC_}^Iakv zl_-_LC*yf!A>7|Ov^CtE9dk6B`BF^jXxjyKrO<85jkn)sePxCBKm14wiJDRAdnU>d1`uB9J4r~ijAfU;iL44j zEQb1`!7g3NDi=Mq<N^WwoiUs5TBCo-~a&qUSq#|!@9@BW_eeEnN&uWm4^CI}-K zHDez#5dvd0+URtT7z&U|a_!&-4?X@MpZ)#c#8!@8nN%hl4S)e!4UA6XWGkP$ma48i+;yUNSmG znt?%xco0$^$a{BUPIA6ksSOK5q*T&_&|1D%R@}>8{IUTMC)E|7E71F*^u06yV!oMr zsPYcR)d_~|mSu^gu;<}b!YW4tJb zc5>`!kX>7RUkFbJDjcZFms+_{2IjDd_@mW5qsa;zDolyD004jhNkl;aMq#kkY&9_*o8y)oXcBr?)BjcMmI#!bWV;Q_C| z^a~o{ld|gI{Zv&&Rrv-(byK6Nn$^`+u3x`SJ!-gg`F2_yjA|C9_e#u3G!7%8R}3Bx z2u6$y3+)KTi_f^WfnBDq>riLz5dpv_4B{BCt#a#ax3RIY!J=Dmw3yLp9PW`?z(Dl9{%+2cu9A3Y{rSrG)=tB>qoaHCq`##V7?4Q_N zTjTuMvp(d2UqhT@GMa?k5gWoDGUddSJPK)_${>`5pi&h|DxW+kR5}8&5t9_d1CZmO z@wJQu`1|>P$s~tt%G;>x8q@XATPF30_HfQO|NbBN?pMFT#%PtXsL`!vT#vB5=Tp#H zheS)C+p<`+IA>6`;AlQWuGReO|L})gyyFr_iz%Y10*8h4IWn;cP&CZ&iHsOWjbtJk zx*JoT_{ukV>K}i^n3}z{9ZcKPFM6C4wA%O_4(s!7BAsv7_X(khVWqj%ETq9yg4^!7 zonQamf5F`k-9zgZ7|~IWBu-kIx}s|8kZ2WhR|45pa!Lvrl3o*q(?nDp%btE|eC6*h zzm}-fv--=jEqS+D51bUNCk1R$SxLv0UVRjnOF0Pxy-`5r=?)?o2^1ySh5RYhZ*-EA zP6*E&U1t#$b20AHWgH}2rX-Rajn-aHR@MBy5Cb(i}f9nKx1NhKV)vZZIjOeN`eA z(ZU-(PvM2959P@a#Q02Hz!G*mxd$CN=DutkocxUjfJ-)!3)8V&(NO-T0~dCeEXJP7 zqSA&VWwggmWu?;0ndpQ#uJ@*$urZy$CuxZ!dl9NaJAoAyyE}VqZEP}aTMmzoaj~3= z7)~HSrUu^z*CMDe#`x@H<73mpIgXBwFuLcV2kvKMRP*c)f5?riZ?k>=EThQ?OP|JC2}gKs>+MzhL#vx4h1N(i5X8Y(NC^|>w9y3m-Z#Y&iK z%fbAZkNo;a_}FJYMr(TrYvY6`*K$&z@pRdVxl{^tr%@Kx)R=?UuJOe`{Yzf_@zd;# z)>%;#T<;nDjK#OAHlE#5J4YWGAG;3InZf~)^v-c?TdJ*99(?@0{K}_4&V@T}p{K{y znrb8v%A+z>HFSyq8Tm8|ig1Bxi~SgG+ii z=n)+1k&*`>z86$}N}wyU7fQvO?Seu9XG17w^^-SRw2Dr`|0mq%pd4elhs(prv4`Ss z!iFj=q9VQ?J%(kFBEA_R{kU++LOboZn1f&Df0Xc+82-03Fv>@Z@-Qjo=eSIz%!Iqfwfgt;GBV z5!b^Tdrtbg@~WxW+TY{sx$~@VY_Mosj%QQAc_A-DvzJ({5tOGk24i~POsMZ!EEY^> zGun26(LUpS-Y&R$^=(!r6CQo^Q7)W2#|zIq$B(}M18lFk<@^OElZkIsBzy^`swCR# z5C#ZyS63cM61gl;g~mEo5cXO?1;W0|c`W{r+5+OG^dgfo$P1hpI0aZ?8IQ-hQ=2`djeUH`#Z9N*%cO8AFy%Fs|yB;fGVSDDLW%KMVkA3t5eE3&B!rs|koHU@U z@10Pq#G{~;r#5zu&=I$gbIHjnve?t#P|~m`NLgeev!S0=hF!%88J84bRDMbBEwc-T zLlt2Bn9Q8@OqmlBE1M=&|^i?S~OUr9`RFE}+|WpS}$WF^nq4`4iLE(t(W!v=B&XpGZgp=v(U_~(Z?Lt$$I8|Qb7MTku#!1LJ|Z@mE4NrL zzkhAA;z5K;237PUh-jG4ln?)|6$VFV45QT*cJ}w#J$nXK*Bs4eEEb(NSVm(6zC)ZN zu-Ap&0@g-0JIA7Jna^7mT}#*bW={^wwX4@Sym7#77jEVLyY6MR8S$g<{eWkmewww_ zRnDICVS!F}SP8OH)J>JBqn*UF1xi96fjk#+zZH!wQW;v}RS*CnLEgUk-;wIt7G9uD zMnirrR;mbKdU(XvWSvzip8DR8`K$l@r(AjA7hKrdVQF!_(6D&@>`6K2`OB4QOL9BPsnTdl`ZC@tBF3(`etiD8Ud0$i`6O9Brl%cHAp7}M5B>4y zzEB>zr1X{+yUa+;R#o<5vci`Mwi%H8l%`lx(o6OE#V^GJ32b3?4WlY$Eok)W2MRO_ z)L2dtfUUaR!(FSF$FS5K(-sG^P@KHC%-B`D82*E9t`D z0w|wZ<~YG{7>`FtU~6lO z#eBi_g9FZ8ycIEOSO^1kNKSNFz*4Mn78ri+EyBm`(`a+tJkEV$!;1z$rBLG$qE>Xy zU3cK8ldPA(aYDl3`E8 zy_dFM^m^idYx5gaD>Xt1dZRrR zvh&|pQu%B>wxe4?N|BESH3}Q6zBKO;aZJpeT7BW_q1BmTTN#*);NrI z^tz+h8WXmNbrvIhvY!}N-22D_eDv2o&fO2)3nPIMhI*tJuZ~co(7_LovP#W+5~qC> zi45hf4-2{_M{d~w7%Wq%2D08wsKPLLFFJHiWH}RMdUE1Qxti8E>Lq_Rt&E1E$V9c# zM;+)4Q80WEO=;^41iLaF(Dv+E|KJB2gzQmhiNhGay3dLFp=i zksvCCR28%N997lq?(VX>vCh0}na<|)y7#4D(E=_ked}E4cn3=QT5H{VWiy}6=-N43 z>#IC)-@Qz4+~gO}zksxk?Y$l3Xq4*ih47TAl5jX8=8+b*IJ8lK_)`s1CeKVd0miVg zvcl}>h__ySjmmi#vPKUwxJDedpVB zvnjhfyKJtmQVGy~pD2{Q@fd5(i~k0Mg+QJp!mkXksZdGc@g9Yh*>Om6$qAGV-!qQN z!AMrDHDmf4$2|4K5Bb{Pe2FX1zr@9zGfZ4fdoW8ap;aikY`YF;4K8{AF<>HSP0viX zT%YxP_V+%+Z~m*_;$U{@x$}iZn?9ABTD&R)KSUTQ=I zRV}H;6{_|vh=q)VNFlpFZpws^<*ff428c={E1`k+o*ads;7Uy)N@14WoG1f?3kGd; z2BQp&A}Yy@{99Hsc}F`SwS&(Gc^I!>=#wG(nho(xh!gJ}4V#!$R~SY`yqq9!b7p-u zVqBEPg;A7^s4|I0EK|G`w-$1KpeK=&nivNW{8CzDSCn2Ii!om^?P+BW#G1BUZf#o-Zg+#J) zGwfe1W*J6GmfCQcVyCfX10WupU*^{@!s*6>;FtJ0Ic0@qo9DGe0OAe?|M;Ps!%=q5+K{-1xy~P@b5Gr|D zN=mxL0wo37^c)`DWMw?!gO5E%Kb`a3Gf&g?9lK}u5u@5C2swwa{=3n$6~!hW3OEm= zBScD?G}=%rh3z%9QjDsKMpgX$nP=%13#vfVTFKZ5hqQN^s-aej)zO$y)9}U{ud}|h z&Bp!?Mtb5H4@G;HKof<9lqoC__i^s%RqmBwf<=-RA#w|2giovsN>zsLcuwYgf_l`j zy}QH4_BNtY930+cv6!(kS@oX{*SE&vtiuK6uVjVMny%|SsZ8f%(UtPX$MpD^>2!*< zhK=<#KJe(H?5%I`>_7dCXP$ftGn=!$w$Ap(CQ<}gy%3N|Nl4-IEP^5_6-Z<|bVP(p zrhOZgRV4(K6I2#zBqJwStH-P$Ilgw2w_kddAAR{7Jo%j;us>Pn?8Xk=(Tu|z2h^(a ztcjsyb<(hn5!E2%1raYJAs3WKLg>PEM)l)4B)(-EEYY3}i?4 z8jG;+05x5%2oNc0OhkhsA;TwSnkeLOM0HAd|Aff&mV8zLILgpzl7y!q*QFpGpo2?B zOFpAnH$nEy%hz+xK&dtgIeG%g7AdzXLHg+)!(4;%_562SOGjil%oPLq^?`yAoSY9g zd^Yt^Oad%ESMsnAJkwJ$*9q&AJn8sAE>Ci-3@H0wFT?on2CK^gF-UNK@jJBfh8tmU z)e>%@>@DC<{Y+_JknT6M82`DSh@_nM`4U?=?P{rFU}?U~N&*?IaVH|o>cX!qzMK=2 zB6MyGY$HNLaStxXSA`Q)R>qkHRiPzx7@DT9RVD9D2v166j0s^ihp`%CEN$O&yqMF4J^|WV z7V`y*<74z}&h6(f@X_~wfQ`v2PyX;Hy!71jn6_noWtF|%?T{4bW7mnP(18+akkA*) z=VCT_HdccHGC6=94>%H@ZbVgD$byfT(Ki7#Sy1>9dU2PPCCJbbo^N<_6}=*v!tFJUG#2qwLk z?}y9tO?jON_7+Ot#R(93Z2)Yb9rp;3%ZcBjSgP=0_3-CE|AnM*QlI9e>U{E95qBO~ zd{N;P8IIYK5x#RwdOcfX0~nuZ9At=k_?yeq2EsD^a^kp5Imc~uF0YtuDDIB6F zD)N^qBvmB4kzkeZEoqg9X{%Ag{+Y9kMiY*Xj+rm!UN8bCK%O$xlY6D3{XHeAJ6}~v zgi^e9{VGC9ZoB;w=g#i){F6^}bnPa4o7=3ftehP=Mg&+c) z^PS&T#uJ`>>S^?R;i*`Ajkdb*R$bz$pNvOL#v?9VxWJ7Y*LnGsUvTE!8CKWV>AK$6 zp}Q#HeCBn`Es&|BCc|<|BYyUipYX!7&+*okEA;c0jg=MFMiWL#F_H?~`&7K6lq(j;o zbm;BSS&bUiFshiFj$7}(osWO|SGnu{dl{`yu*#v8!&Ok#6?Ibu$JiE>=P4RCKw5_7 zaV6v&QOXkf_HsG00%qttl#C2N z_FQILddpFv##eGkA`K}fxfg=f>!d(Xl#qskjWo@X8;JQNc>8+23KIH9C3x491Rg1@u`c)xr`?qDu;9^BL=FYaAaO^4d$k zU?eM#GD*+M=dVX%J_JXt1e2=f&O2`BrI%jf+SRw&KXaC*83mR^MXxmoPkJMa&xlWh zNrF%o!ou_6N8>E@ZwSn05}8}$#w0)oa(de#4i* z)#Ju1C1a3Ep`^fCU)JU;2OQQy+jq2W7wYx#b?LoEcbcwk>ARlWZoSAyKKvo}Hn+L* z%4@v-;!8aLPfu~})z>kzIgK_bBRetgGvpoI7pYYW8f5i0ab+$$mE}y-HHCZ#gb`w3FvpAg6w_Vy_^S0$^I;HD6 zwD#mko-WxNG*wl3Pia)qImfG44|va`_wn!lshWIUPm?x*;Ht!eVbqeI3GrG zy=9_mWNZ1}*S^CS|NO7e2QzLvcMDQG+O`EDFj{-%-uHA}@Bf>i|J-%Z3Q&{AharUJ z^1XNR$=~=4m+!qBSAnYqMmc07Li^sRc%!G7+cFdOj7aijsAM999pzknFJ@aMD%=zO zT!u0BWr*38il$TtNh}pghyo!feB*cwb-LPm4gqzJ`F2q6BQjG$aLm{Hti17LW+ zGMQ2QyRUuKMffLLd8rXl7(=w=WPl2D0$-dKn6EJC3a|0EaV{ z=6LCT#bpzWQ#@-9W0an-J&_rk8q?sA*g?{*wc0^TzWpBIa{e5J=ro$6g6IoD?XfSQ(8O)gvk)SXrM?j}=?n z8|-Xsu)Ds=zzcH3n-n z#u~7OZazbG9mlV|!Jq%9|DFEr>+G+rA+Wfvr;&oyl`$);D>N%3&hGBAx4y~F+6K4X zaR+8p@pn&ri}A%94EEq#~H08#dZ}ZaA&+_Wef6iFd z>~3tJ1aylI73hgYtlbZ-c~zxoD#f^I*xA}(Z+nx~wN=(8V|KQ;e8Z&4n62F%_RgMT zyuQkfqeEVM{dI009PsAbZ*z2XNVB?%m^2^-s;;R+pv9+w0*t0Ro^f#PI`hM0`mUp$F92WHzvz3W^C?HuDGS}eXTXS6axTSMFRXk#(jVvH}5jg;F_)*1}1g4XuvO7hr; zKfotG^J|ROS84Tv(WJp(pz^JoEhhBB2nL}D4Z8|2GRnFn6H+$(ve6tqCv8@i;T%b4 zv!PJPzf#WTGH|fMEG zryTYpj$^)>qlu-U4S?OpnovIST7D>w_Xhgb;ys$yRX!s!Gx?7U=nm z3diB~YwYdraNDJeOs7+xeey}RcK4`u&#=%YbdAe`rrev^;0(=Oh)q=dy>;lK*DdC3 zOjhZpGhTk-MQT;~NQkwFkarMCYE&gLZA)#z>7EN`&vIsOj~8EjnMK>Nv9(1#nP386 z0Zs;?7v?{tW=J8^*kV^haDz}lBos!~!%t{(8Mzx^uT`TKuhZ)Kg^&fen3)M;epdp?-1^8`PAhcVh4Z878$!elm7 z*>t97ys^qhKJhU={^?JlR>!nP)2xoL!eT>Jil>tHO_#v;Ux>LAzB^?=mR!lJ5dFZ@ zVa@DVExn&I?@OmCJ1hfH80B1q-UXDQt|+CFL%1Xx3pU(T#Sn#RlBQ9n6`pl+^a>;( zznKIb?C)u(Jnqv21dbWi@H}vf|9o zI*h#!V5`y!68Sr)zMd@6A@rZOLs|L=gPm2@8kYCSTQzB#l>Jd`)))h~(kDo{;&oqz z=by2vsvyi92!$1bX0pQW?k-I;qU}1`uBGd{VaUNbFfjw$m%-`22Wx5ShPtlkjp6O9 zS7}Bg9=QL0%xuncPd&|Ob%o81RgCVj!Xm3GSn|H9j&+d8Qw2CoC?_?EArBDoEl+dGWL zV^61SJsoRIGD}(Gk-S7?;ZllVzjWS+hzXvNQX2o1A-QX4aDtylr#xwnY}_mvVQ-I%=gxE6xeHu6caHPB`<&a} zVQ+1n_0fnGRZ}6jdF?t^-@MA}FTcW-S6}DGwd>5MQ;!lD!+btxHl5LSEwi@e#_=IH zkB^wmXTBMb47?P+C8OtGP=elB#JJ|hV$PB7`1Ei6I=}O8ejhs$9Q9MgSW>T4XlFd^ zFMa64YD0TGV{5d+^zEDc&42lGp8VdAxMh2vjqxga(fOVj-Uq{U2Hl0GKGvec{2A-$ zjqlk&VglTeBL~i===?H#ZEH-mbCj&HW%}gYXM55Cf_F+Hs!M?1E6@$rF)h}QM`D0`_cfY zoGW9K9%sq^e6g5OGDRVk);n0#1JiK07;f;lrK|xkaolcbg{EW?B197>hQWQxza!*j z3guf)aJsrHCp2bO%KTjMn#J=*VYu}0#X$&fmyp|FCbJ=u?5E-<4%rG${487AgAl;r zwelz|o$kRrcwacyUt77NYiLZ^1tvxG+)!JvmD&>s;>nK_H>ShHu zmK+@%vUcVyANcHN_`Co5UpSo2*{o^|0%V2NFh7_hsktF$*foJVI6zhv%`?w)@BR1k zn~%SrFMan3o}15k&qqJX_WAP&497-;szFp(YpH|;3^>m~=nCV?q(nteog0@l?(OJ# zcq80;^q>+RO>uzoq(oMN5C)v28jlfFXe;O!9gA+xXl;#$-}inlUB1lEe)?11eEChx zO2uS6_MH%w!U*32Iq0gcY?ynvYp(QrK}2YOTsmJuVqYH6!3nQQ^O2(nPTJu>C8zXxg__p3J5M}fb4Bl zc({W4K8~sQwhQpMJRyw}Ln6YXKGESx+4-l)*Ho2I%70fV_Q)1m%($I~&1b>AlkWjfUun?+vc??qQPLrZybV!h%fZT6&h^0HppFs z!=pn?-*fAwTiH9a$J0N160^`;IDg)kPvNjig)D7BEv08Nj5KHg=Jq4>9=){=B^1_Z zoHd*|dxo~1^ZKi=V6^WpCm|sf+Gzi5A@kZ9AD}l*bMC@9Zo7OtufP5Vzxc&37>!1( zt*p{ibvh8E(CyC{lZ13(&qFxg!SO`mP8m58PXrWrG9y*M zkxmL9bFU<=)o2`|QA{>gSzm2v4~{v!IYUUtWMz`haIKVYR-_c(2ym&1@qaQ>3q(tYiW(9>ov34jQM=wO9~eqi}`~2qGi!`Eat6$t!@2l^94t< zIY-CG93CBVcyz?U;Qnch*8ar z=`q)jkGT862lzLi|DUF2m~?iN;?70jYTA+gRIaN1aUqeCL4rL!T^-}pR~uJ36kBdn4f^>Z%XeVNbx{_k+d z1NR}C3e{Ag1gOyZTRPwIQb?4l0>fWqk6dC?EfnFh$S3Z$0TfI?VTa+`(lah)Qk1cB zi5)M?n5<+=$UZA*F_cw>jHH0TQ-6tfKmf8X$OcT7qas%yAO_Dm)FFkJ9Yua|r6DX| z>V&26K$6pWJ~J6lah>A%{1~z)IxHO|y_d!#@_gneTONOw{i&iNRt*h85u~t!dhqjq z@`XIW@PO&UB9%#$0&1vsa?)U){~UYCuyxj0i6$}|V!_(Zn=0`Fh$6YGn4otx58vUv z3~A-;^H^q>8_5*U0Vj-^!Q>XPib$iG9*xA{os%marzd_%5vKgH9 z$O7IQWN>i&x-90iuxll=#e$m$2VA^#iE}%9{PcT2;P~bN=P#VcRf0YS+zCd6HK?lg zV-4_%Oo=d_fM&j!GaA*tbj%ud_I9{_^%^&C9)R;*UU8t5&tU)?AZGvE{uRT#n{mr6 zw{p+j_i%9i1}{GQJoK8awGCFslR$;+yRMm_xN}{6c*L-%vRE>KNVx;4iY7voQ6h%q zJwl#LrB=n}kIEPTsbsbJP_SQF1o#yc1fYr4X#^W&(n2bgPespWC zC$i}^UEk65nzq-px~J`1y0)k5I_B+y|a$I~g(@H<~DywdOcj2sX=$OND$L{npgKnv)x zym{j~YGur)KKmQ|&L93hYiG8ZnFUrsHLmDvhpapmHpU_?jAca~crc#&(NFl>KmRLk zy!ke_pTEdR)^zh0<-A{KtP5TI44w6fvYqbft@esM9J;Em=!~WnmiN5xVLtu)zs1=* zE}?}*RelqwkwR1<$xDS&P+1{WmDV%?Go@@Sy_Ldf&j|hyrq9k!{CxB?^LI)EHB|@X z1G*%73i*-5pcptVv7&1z6SFhrll=;LyetDx7yyObO-_x-I)*$46xU046j`!m!(cc+ zzpMd}gzI1#vLTTe8N^VdiWB!Eo$pk5S;*{nHUP3y9Pgcnb<(g=4-^PMnm7ZoLCuNGJ@#kv}lVgS(I*utH6fww#b%Qy|>p}5Mzua%MxWjglaeIaP zNSEq~qs2Zx%I?FA@LEZu-11c2Fs0WH`rWT=b?M= zW33tU+KWHujhA1cl8Q6?`>0BxjSe{hfV3gz?-$XEn6%}Rhfg#VZ1kYQ(>Sm6Hag)8>Z8p|7Xhsc9RV86!ZKMvi z`B&Ri%4V#^Xh)}ebg$`pL*MtbUC(T>@D#0;sk9nb^+ zJ7YedF`v&_EEaSzna=q5zmK(-32lmppYwpLbAo#lJqe1fn1@e z6*^%CZht8du1E}v$~2U(isJRsttq1RNghS`UKWC7pcn`KLsYK835XtSQA_V)pMet@ z-Z^nCDm5?P(!YqFd(uO3|B}`u?)8!a?d5uUSc8ceoW{^`1fI^4G zxhRGE3D3S9Z~Tm1G5`uB2arr@8!k0HWg%XR+=#xKm}2Wo=^vAtg7iU89@N87b+@Cw;2Chnk)94O@`3U5nKQB^C3d zDX!PtcK$qe} z$XgNCBZkkyualsqZ;|V5RzYPQV<{OK$10NT(JBY8U*VN!o};~a$oASgXZFsdlUG+& zsGT>VeA4E!%HSb`@9&_bqLLN0tne&!_{71`-LC63i{8)%qoCKG3%~9A!EYB{)4lfX za-*`3`JB#|zC{{ZDOEZ*Yik?y&S90L7mn+*W3EnT>|Hp^Z~orz@X6o&bw(R&9QQ4@ zmM~FtqNjHTRZAS67^-rh3~baZ=))P``}()}%HMnm*;zIx>x@Ljq-t=z!F0at%`^O2 zdaJ!bawork7n&cK8?a zy$jhXD4eLFoL`3TO9b64QYl% zRMKUbAnL!;@F|@+3f)Gr7Wuuj4^FQF_~S2>3X^=+(&C?VvrFZj+DHr(Z<^jyzUvAr zwA^6Ba6ul=@Zq!iIZbhbNd4^xVeiq$TU3e3apRN>D#evI~b) zM1{GGWRwSbu&hh374vh-GrcoWQu&)L&*&XwqiDDhlcgg_!nRn5yjfku2cps9l{XHW zrokey2&`0zBVSv~{{B9bwN-8&9Wk3tA;fNdW^;@SS>M||aLAj$re?K9Ifu5Iw{Bcx zXK$Ma?zx9wJo7BC{rp8XH#XTmv*%;4;0@8Rlr|U>QC8HdqHQ~{9`Uip-@DhE{k=V; z5WMlqD+p_7Dj%|lgfPZ9dTqRytqtw0V?Levu5f)%H=nbyy2>4wFR{P7&6QVQ<&~d5 zPkV4cT`SfmBUYOlVKnHT3W)h5);X+@IN{kAlN<~Ss-QoVq^>GY5){rwHobGwSjtmMN+oUWp`0mMNt1FB zNyO&w7BXkx*ip!cCBmB0J4!OBl$n8UH^`Dw77jw6@fk|xc$xyIyl$zJ^4n?DOW)6m zb*V2vn22BA04Nl$EAKxTM0&mS?2|*AWNayS%Xgx{X2~77v-(lrk0__u8`e8M%*>fsq!2!DdVi7(_^X3Nh+P zOB^4yY@=J=_ylxb#LjWi+bX>1u=!kpTEs-L*m*E3NR_O*q$|@npv(vG8TDmaj32}x zufe6MNQW-X!3o6WTjBF2NCx2S+^mRR73oaBg#pYp=h`^G`j= z)mL9d9~`nO1lyAdW2unZlQ1bEse}ScXyBs*VUA64ZzoC$Uq|d-=x`|KsEwxX4V$uN zOVr52Dc7HWk>|eq173gTc^YlGWp|HB)zEhxUDwhs7J)Udr_-J93>aECJL~!U5yB%j z)=@PzozWO)sYeZ}@|6w}@156Gg_0GKhuxFc_%KB!J)?wh1o~gUBbD>ahD!K`NJ3Qz zrBGEx)il(jG4*KdUuzmHFz-5!`F=C#_m-!1^8n#^_)G__)8e zIV@tkjyi-RrnY7CmVG|`yT8SQA9xHml2|2CwNI{;Qc$TN&}As)42oZdhFrM>xd<~# zm*DdVKSpD!ET>L#CuWNa->$h#wkyH?Qt2cMaUq&F0%&A2v81Xl*B=0`vhO@Rp=)HRk9dU?7JXkKwt|aFV2B0N-dI6 z0Lc3j$lcnP zh8zFCPy)rnhx^E+)wUAu>uSg)F8#g6S!E(=53dFcx#(i);4+e zCqKco3uM*c`qnpr5gtmmy}>$xa}rfo+>~?X*9|*tVY(JGZ*jM29(&+^^iO`uPyXgh z+%ucA|HuP~QB5xloz^Jn%klc&XN~8GNbshmZ&*`_5$#-K5q$8Ize*(pKmFFXkU*_K zI+K~!tYyAv1JAsnGd-Qv%)6GG(^-a5L;lP|o$OFw;* zgJ)h~vc1X1-Whf;+``7%8hu@1RE3igSygBuFh0dGAX5%&d>N%u-XN8#AQb95Wbc?C z&AIa8%e?;V3%FU!#7fqLX1Acg->Lglxi5aj$74MGEp$c;$aIM&F9`o zF&a@R*4Eaz<&N99c=u&4-+MPZ=g-g!nD#9$P(O)AQq?uo0;jy8q+|#u7=!2xwXE2g zY;g3}HNN^cU*w6eev`fREw)zHeYFY_r!CGnv^5?bvBGEg$I`#RX<@CQ9@Q-Rj$_?( z>7jdh{8Jy}w)fnHt|XmxRCQ?PBLdxd5bp6r4++S!jEZHtnUSRU|KMe({GesASc-$B zoJC^e^RjP<1!SAwD+ceF*z{gBD*SzImV?N|nQu$4JSe*)fnr`x*0F<1>%=pgs{NuA zl~I~43Av0AlydI`N(&U(Pp3%P|G}Tq>n#6$>e%AH<7+`DyyJI^??gRY?i9&Bxr6-zeCW}QV79_JZMR-5dgW}7TTvXmmJh#Ide{wDSQjEY2tkFOCSP0&zy8(dQ(HSRHFgp(5eJKP#^&tV2rg(N^&`b%l_= z{I1guCmNcqEiOO$D7ses{K==de(f6TN;0V{j4=U`a9}OE_e^RCUtcY+9$+?B5D1=n z<{A24^U?RcpGh;}2jBb-Z9nJM#~xuW8(a)W2#J)HM;N3D9*#sPi@@{uJLgbUgOZAC zvnlWU#3#^J^Rp+uOM_#rX^;rI*_=A?H*3?Q(e%!@OxD&iZ5Ld>ag#H9yByp+;;q-O zaAyB3o7eyb>u9@<bO#4qf9+M~H;>qwOt`$Y%V=BT+K$C^!O`IXv#!Gk zM{j+?o-rET_c`Iu_}X*d)W{_kJtZYZz_Bo}I^yp4Kg{`yxAMlDZ*lGFHI5GsvAw2W zw3r^xE(oZY;V6Ws^bPyTmlwtznfKe&v>5G`ZLfVPodw1#6V`WkxNyrYT)y*8_Rj3H zvcAU3&N{6#T%8|7qY$+Utc#xQu&#Z1osF+KfwB(M8rG_Y71?m()i?RdU;iyXdE)z= z-`;1X8DV?h;j-5~!r&AAVqS#v-TO>9PBw(Hnz~}vE$Ecv&ifzW z2oz`lg)ECQSR|3{?-gZr_}M~>((0p88V0vOa7i9c-@g0;gm`95M+*R$iT%u zP@GGKO@^Kd#ZL*15C5ikFZ$|oFy3P8#&ux$949!Y%V`?iFO&(EpDp&F3Er`co1A4M zV`+m0XeaYf$G2VipZL*C_##fu_VV$3H}v3Le~P{8D0&d2Ir4&1#fOja{$K#cN&zR7 z@3Kea43|EGSqPl)P^q-m!&XiZ`90)lgs5w}zGJTEOx9Pq=kdpJRmF2Z`XT*%f#`c0 zppG$jM@S0ukh^Ls7N)}nrRCOF`T0vP;VeA*z?1kL8p5UCt8jT%~x!!d=_@NI|*CU?&!4J7{?Hb$T5o+9E`wmaK<5+Y) zToF6Gt#l*iv!3IlIUDP%Y;SKeTXcw*USfT9js3lS*0(l!=#D#hKuYFa&%u1k+t;si z{p#D?eC-wQjR!PEN*N$y8Nv_VYZn17uj&dVBwNjhJ1*ZvB_-|AG1Hre93S0eemrHd zSg>e&TI1-QqwPJ5Uqk@PjQ@DS=XP9~k|F(a9K)!T7XF;3f@KU9q_`VP$=d)%7(-D-+J$ za)G@wXBdq~p3>P`j-}&Zc7Phy$ZuJqE~$!q*lg8sBQ5J?BcHLN1!KDfO&d9gCf@N`!*L+B;E zeA1GG)DEIREz*31=Z!Ic7aJQy4>V)v!@B$UT7!a%nEe<-IgiM2p98FPVNBNdaxfAleSBS8heILi3WY+gD!SP*^Sy))OjahW ztV~$jSZ8f>owf0V{Yw`ZPwvFxyUKYwSx>;@%NA`S6Oz(rq36a&j&{*<{pvNYUiHm* zthK%qUEBG#w4KKEE)mxlkGc==` zS+9|+4b4i!%Gn(hGGy~>blYLH&Lw?a?-8Dqpp}cUgoM?#HAa&$lhqZfrU~A=pc*$A zDL611Sy#xa_ObHD$JCJmDupxtocqv74l(%VIX+BP3&m>P@X}My^R>VJ5-&gX9Ot+9 zX@o-bo(k9q5t=TUz~%1~{)}^eEu6qui>ka=Z(UC%Bp>?J$GH20k22cXM2GS|i3wE` z0u@3kRtDJJd89-}&%bn!1>kHEMzmSs43tVCOXK+#Lpi)G3$sjKR>(oRoTA9m^-E!r zzESk2Pn83SKM+-3NR*21lo19azztp~^w9G6-X#Vqmi~KE?!vn%|KU4j8D9*2h^5i| zGcx&|>)3}d^=Y43wj&ZdVAjLKdG&^dSh`5%ib+dTdJ6nd6lfGN2ExOO!N-@ef|Fw} zA^q}=kZ_h9&Y+M)+)(0_v7Nk*d)Ij{Y7i3IJ%p2DdDXzEc?W|hy2TL=b3v<$Q`EFu zibV|8w)ls8hlz9LZBP9C^BceX$2%OKq}Wf~Ge8W>W}PUmhY&u49D?=WyytJdVdN>J z6-tqsp(v#=)aa&0$~9(v$L$Y2#OmrQKm6L)m|nZaYSTb(kXHL7JncIa%1Y689o9<3 zsA6tAw7Jf<*x|(&U*h=SfcM|~5Xv~d`P4H^4~}`{qo1T+X*kq9YP^azJ-7-{IfQm7 zYkgu>U2$}D%=-EU$I~g}^$oh?BM!CZ&PN_$b7O-aed8Ov{fn2Vouk50*S<%*>3mqB z*FLT;gk;gT$c3V6Y7XZ!R+@%!Hz^QZ+TkS)T_{*(3t30HJ(Bs|=n`OsLaVdpo_; zY_F{I($mlLSO52)@%nQwac*;$QB~tYbw_V{@6|g;XZ&1hqrnNRiFp{lF_yz|+|3!U zuJFDOeSo_@@)-60CRRcxe2Hl#ly4awy!>RiM>u}qhXXygh$~g+iOZhwlM{rqw4^j1`8BTG~2UA(18cU)*`Iv=U&fxxT>0-nE zQ5tLFUw!rKE{-sV0G2@JBD*yG9W&Eo7qL@*PI%Q2GDp3&l*opnEoI%w$xD33CzWTp z_}K`Eak2bn*#bBT8&Mb_kW6PnHB4P2w&+>S( z_bc4LcURnrOS ziF~ZZbqhv9V6~<*)_c{~;gs;1-F=VkIz%^TLn+#;Z}aSre#kGLd>T8OG7^GXNGd6j z)?xZSgo%9Cv6O+PSSdzLMN?HYRn4ern2g7)jVFx8BdV&VsVeHa@vys+7`*2ny`ku- zTWhd7@)G!#&CWS`V_E3lGv>7&y7vryUDu&|os?HhDAaf|9Ds2%VN}-$r+igN(_oZB zuCHLSJ}m-Inu|Lsr4l8z{J zNRbvVBg3s=@Onw(>q?mzl3<5&+=X>?OA7g#GW+Am)dK??`9UJUM9sDi&dJ zQpHx{B1qE_98phsnh^AC5M=ouTNVo;sA95Lwws2YUG)A-__ECXtLm;$MFpEKFWtG?%~Iqk&Br1zKmq$B)xJ$3lu0UYJ9$U$WDf2N=sy* zozs64Ti!chKDlfouWHD=)xwux z2^)+OVG+h}ev4wt3};P%p8fBA@41J6_dCDMfBLU~##Hw_`q_WM`o<A-*U4X+bqiK^_j&Z=zsl~}^Zevn-{R=nHAYIXq7=euFUc&SqaX<5 zsDwbbJ&UfTSBi!7-eX-=999j@$SeJ3)OhcIJff-_FL0M)^3J)Ct#7;`5E%Ka@kw)w zpzMv&o}JE`)Q!$2q$cn4x~i$`hNd1Ng~CaRPzqaBOtv<;?f(0?{Lll4)e*rV-H$$m9w}z7MKu*lRVi=7Q@RG@dtd~4BBCg3%N(h6 z%+evwt!-nTKsx7PQ8U3$Y21hRmd|#Ofi94~WnEAh6$L3*DKAAKC$oGTx_xd*Xf5ZQ zElbn%xl){-_(Ybo1BwGteqw0eoX}r!uELwcPiH2SV(DWQDDb4c0ftT)h1f+f6o*__(Js!|-j^*Yb~lk^ zA0&MTxmi3%x<-KjoN#VLKrI6o#tEmVKuIZNT%;>bK3zl_qC$>3pzydwOu$U?&L#va z-cJ@fv((uUQB4TI(gL}FtmJX}aYPg`KJjS?fGZSr(yzt3r#%qHCBx;^d;aK8z7V5s zk)^2YCO0hqi;YxHdX#>14Xv?s^U{nJ88TmXh@+xr>AmGme!^fFTqggkG!}%2L=&Qb zg^ID0p`r4cCBa3so^9~5mq~^O!4;RsniAzsQP9z_SvG14R4PF^qPS485$LY(~V&fX0sV#-2U(8vbOt}B9yLkTT zr+D?{m)PCiVP$=t-Z^^XkfRmfR@Zrw82@Y`X*ISlb|6%Rm6C;Z%&ld#HsRc@x3Yci z9P_^C+Rd9RI*pQE8C9yHQ8ktDrF;VqIPAF?5;4YL`kt=u>DrdXVnN$>zFS`Gp4Ya_ z+cy1o-ghiQc73aTBbwg$T6rBrk3&Ep)R9Vtd2En%?G06_m~5=mDZyOA<}K&A`>{v3 z=dnkqw>Rl3Nvj;LscBYM5UN5}3Zdi)G$HQc1nCR!#Vc8%D&^t*2<=N1y4*{5OA{%MaYkk?oNyBW#5yM~ZVD zOC5zMrYV>EMeQ>%gh~W3A#ox*NYTlNXZUpgB5T7af}^ueGLcAaZlgj>21God!O+ZD+`sLKJkqu( z;_-veC&d!tG7QlIAw+08lkZ(1+TL<ZI;9tJi>2hZBiMXP&^b98Ns=;p}2Wuz3UH@y7x(>(RPAJQKj()5}!g3ZyG2H!&2 zIqew=14=@G?rrdzi-Q0nb`Ep{*T;p$jgePZo{KOSIk~PHKG0gL&yh^E+l-~?1iNUB_f%Z zS$33y3%2CnP@AR2}f5;_HMhCPk#0@oVj=bTPegy(K>^Z(9|j$ zdP@R3J#O)ObaSKZqHuDg$h;w`c0bC!GISZ`(Gql?6?QJ9OZER@zc`nhD|uOF{e26> zH+i`ORCajwm;dE`2RrfMtxr6$gLR8v9DY7+p(x#&QXpNJAlAZvju0Z$_wOQNY zq~P2ww{Y9-cd)v#=2`Rlo_W`^uoh9*sHO`0Iy`6O%MXcbaqI$tuwm~8#31&9kNYns zVEQ@p^XjC)DdpS8)(x_$kadlyVr<`cO4RsJLa!w27tV73eoE*Qso{-?;SZ&VaeN^q zNJ;jL19M8bIcbDtnqE5 zO~@H>#)1t=Tfw@rSgeA%u(Y-0%pJG!YrpfGT)69Ybggie@06(;MKfwp(zj|2 zJ^Y1;>skduA~%D5Jw4kmmIFzVeMF7Jx#f zhe508F^lXW=H>TRavEB&Oj7)>nEYs$4HDZNiCyaSx_1{6d~DKjgG~7J%*!Q$!wpo< zb+ivuQ1Z^5B&qPX&gDtuui=Ev5Pf06%i!JSvl&g9uIU92V!U9^4 z1Q5t>3=R`KFpLIcux*Fzdur5KRTOhwP>B%3KAdMNrNHn>?#%BZ{yuqlXjsi}9Ny z?CG5UkmaW!X2&P_layrcH|p83BdF{PLq(H7?$X*K?}=57#6~E*Lxr4gTMZ(?B04FU5P|>D=QJ; zejke!sgaXN0$awap{OvD_h!8p7?ndftC3+#Ejj2uHQN}q#w@7G=?IV^%RCcx*il`=wj&sjw_(HJI8vR!16C^K^F zr=+Z$iZa@sL;#$Zz2)Z#pOMa2fI)Cg~Khc%7Io>=K5TwV4k@_a-C zU}-+Y^33P0n+{hguwlt)i;Ls1&ZMJKtq??HU_(gPqN2l%Q6gX)V&`*2=TvAz*E5g^kS#V_8bjwaoi$jGdiw-C zt#NISZCfg9eeBse8U)>Z#?{x~;QFhtbMV&NOm7|_fl1ZSNJ%3k()qZx!Yd2E4-L_1 zi*xSPZwRM|5R40kDOH82DlESFQb#bZq@Y<_Vf*YE_RgMRXMdNiogLJ8OfSIH3N1lQ z#;B(DaA|1TQ%PTzhw$-ii%rg?7>sLZsHUx7?&X0T$>msuV+ur)sazJ9FE}g@j=45g zYZOo+sg1=gTAupekNAuK{HN%HDfirZk@jfDNLEnEr2LF=z5>Abz7v&HSnCr3Rb3;R zngcyWtc|(v(f9J$$3Mc#-Zr`tp59vcz2;GfU@$AP0Z@2qA{a1^@;n8lLgB=v(!VS# zqSq+Njn(4$PEN`2L=LL6V)!+Azd@EHFCfC~VP2$&1UD{=80X8?PGu?`)Pxra*kwGk z2w}vUgB0>iN-H>gG2#(ok681S6@4TpOGrX80CEL`5Lq9T20$$9js}3g zMkuj+Hv^!2mVp!vApjS1<>JElhtAKDzwd+@j6FHp(YP+OSlUBT2P_)^<@&`H`rWU5 zzQV3grTqI@6`0hUsk#0QF>iJo^f48&X=nh%sW=4(DZH(vJ>gDVA#XybmyE^mcFf)nbLp&4tPU*lioK@h(pZ$zyfAAxY-+Y5LRU=JL}Epf`R zwlQXVZIv}uvAwd&op;{N%H9rt{lvF8P>x^ygMWqDJkOy4BL!9|3_i9ktyj*@8Vs7w z`o=%T2Cv%rgKf1zcO7QYQ8|k+7NL8ZN-?Qw+;onaFPI%2as92gx&GE$%npyB*GOZ1 zAB6-*-+3)TF^G$x++F#)$WR>;pXZk&iImUT3O1T&+-bjg*qQ3QdiyKaWoNFhz!h zNhx>foDG~7k$tG->Bc{EJe(jW2Ng|)q8zB;xL;g00P@KWil8(?l8E*)NG2~ndc$Fj z3y(dGe!1|yklBNb_b7IWUT}P7al!zgknMg1cHm>Ce3qn*V)Y6|2<)`4waz{*1ZeYKdD&rhDkgN zX@kb3L9z6FL&(#QM_>bVi1V8vbxMS6)jE-&DGwW-GM@4uLqk3j2bHjvC~Q4PD3$d0 zi!FHbGsXkqmAiBzhfJJ73QxF_sAz3Y612tNz3#DH4~sdXYuRbWTzlc?eD}+Lk3Bl1 z>N{NDF;a?AC=T}?r0*hVg=I9USs#zt8n3WcH|%b2apsou?B8}PU;NhBxalm9|Mu@O zI(weOzQc@H=$yb>fpQf>`=m&V!MGmndJLeghuB4E3v7(%B5-|=?pma^RDkU@HK44Y zqt($EjOO6_4c|zoZRr*Z+WCTZF{A5xgx07aY@%TC!bF0SKGVDoaegUj#$(ntH(1}? zWMyL=IjS*AAe$OFZs>9J&SI57)-_GtPzi;V($}t6m0ts68L27=bI(~H6UihZ;K@-C ziJo8ap#<>?FD#=HN{OjqGs+OAnFxtHn(?#me2*{w>0hAQmc5N_ zq!Bn{XsX7SO$rf004D7*VLXAAbq=c(3ykORA2+=JQy=4zk37!m<~lR0QR4=b&rwiP zqC`a8eBKBuAa!xRqHuCK4C+e9V}Ou^&jq9Bgx9<5eGbsX(qm*$+FK@Ir*gPtyy(Sx)l-B}3-?oq>}1FiJsrUP1%f#+0E(~!@%f@dNK%lgj5gUWey9$ceJ+<(oOp)#>7+=D?-T;I#J9=~>r{FD0>(=lQzQcb5qSnq zvv|VgqoRzciZg{p>C&7Go;%Eiv}6My2*KrN&R$rNU~hGN z=}`zDs=%WQ;R0A^d`V;9;f(Qo00{vC6>8*#l!!{=LJfH}s*!a?9~B(VCjbTrznV0j zU`WXnHc+xc)s^3J&eEuwS}Cs>ox@3wh&Uw@lo^eB4|_*gx0D^FY$(p)JIEK81me)p zP2Ny~Aq&ROn6>Q$$~e@b0i z!ITI{LeX}&l&97aVR)oF#Q@0H7A_;gWoRIJ)>%E420%F{VSg1>1Mg%2h*)Kj9x3ki zobNEuKV=A@e7-_ccta(4>~YQC(E!LHiOe>ba}|;SP=+@O1b&c%aEcyF2EcEB`JF-l z@sWqxA!c;O>)PT0a+YN{v?o#KJjmhxIq?xuj3qurhCYYFV|kn|(kU(pk-~8;hO%Vr z6xLE&pTT%tdSeLr=eN`IC(CuoNGfhWgwW#RM@F#X>5A(X3l%n7CWy(F@L-D4H6qk@ z^11Tgant9s><@=4E;fh?EPWR;gclXJ7|f|F;9{TDVy%Hxa)mF83%|yAYT=Y1XbjWi z8E(-i^n+ZrDE#3xw0zeJPZ%m{`&mj3nP+$FuFp zNG4!CtnakOSzl6UoeoKn4kdkGdZ%?Th6DX5q|(5+O=BrhN)`*ArGwB_4p1V5>OD)J z40Y(fuDYk^Y(c(dsH}u}#}B^tZNC1Oe~mjl=9Y~eM5__n_;ITmltgPCdP)RV zMS-U_UwrDc;wq!3yC6@hT3!heU7DPz#JL? zq1jeZRvVRBc_eeGn;V|pI73SYKo*y$=knxZF4F$OWe-;-2GuBMqTDISn-IkCWUgw8 zirEgzptAzAA%7|h)~MS35*kv7BxTgQ;+~M2lSM}@-nV$Z6g!V0)KaUJIaDEOQ93c$ zi!SUd8~3b?=tv>*)BL-k*h}FVk>|2B01~*eYyb?6y1Nd=VzRY6tZDut_ST&=LR!d1#Aqt#Woc12Y+RCP^N zkEp69^cH9W0go@o6IGS>RUq6^p$sqXd!!821)(ueC{t9$iaBIq;RVMa$c3of9R6B4 z?6Vr$9NX(ng3dF)p|#(nR9FJ@ff#uakp^D45*Z7~UsRiX8e z@B5JOjIiHRzc%Ni)`?uKkVjcW=Jy70arP9l6i$B!Ips2r66f8Ch{~#v=tf9}iy@on zFhPRiV@7#W^b|59u60!Bex0l=lB)&8a9FHlkntuidbIvrq&U7P#~L-T%sN1nnpLDR zB?@Vr-*a%n!$*j)hfc|Hi%3G0Pu4$~6f!B99Ey*x$rHvv%-KnMJWZ2}ioiSAuFwTU zSt%kMoD7O+@W+GYKjU?=-?st5BRZeq%tbk!EX(k^i*p>xc~4r4zAPiMO%1%sqP`<5 zDUz$7y6O>=D#}#0l9_qvbuUu@l*U_Bc8T#SzV7navJwv8E+*2t^lpJF~WXRUo1g-#u&@8#rs*o`-OHv;l|{fs9f`4V%BDuEtd~LnVeJRQ)DZ>m|bU!jh^Q| zmzb8tJ^>aijzI$KV(I2!A(p+daxPDMA;SX$uK`JLZoYk!~X-5ghqsG5-{k6Cmy(lZxY8V;IKrL;4_jf3MmR?;Dx@)p zw&$B){0iUw%GWW+GcIoLLuW9Z@51MtOJ#`8TE7O?8xn2bK_yd_MDHvc`@4MbQy=I4 z55A9Mp^>8+HL5YrEN%Im#2ah&MUab;yeTU5Wwb&J zCLqSROY(=PfKJqQJ(lWgY_Q7U!vuk){I~3C&`5L3`tB5ps`_?#zvDeg+3_$orG*m z>Qmv!NI_NA2q`euR|$;ABldQ7I6OXLu~?vu_2pU8_ic}K!IJD%x&Z%a7efsiZ4LLo z=K)^&`AfX{#ud)&pP_C>`Ortg9_u}PTcAwIqL0mLgs;hu^tU3>-DWO*RjHt?B~p3l zUZ}u>Fa2wBK%pC7uY7;`;`IT2uFO3KM3FNfi{IQ-ClfUdOV`AJXvhN^elhcBmnvyW zLnCeV`1dgREkUs&LdQPbK!iVI;#CL*D5cPgmW_Ihnzj7+>)+mHT6QodS(k)uwQrc*bs5FWW%lh69AN%wtdGP&@p&N;jAe!1IK;k&fkSc#u zvR{F<#=M}o$0_8PSP~9{^Pc1kNqZ(QooM`tQ{+nV6Gd8v=Zf%Rp~MA4r{l!+^D{-+ zkR+FTUEA)Wse5{Pob4UCAA9H*3(aeT{pCOL^xP*RmI@6q!0 zr0)v3HpthC<8@IdX6slKUrf?0?sYeKBdvui?=cXl#Tg+x8WGKitbs`v7tfGaWJz~A zQ1^cRPri`lbYAr2rBPTAMF3#1zlz2Y1N~JPHN{-wT!8hKi~tcr1Nm?NR!S<06O+94 z@XY`N<%t?9mketc@JcyBw&+~vN>JgHodNJ8<>RzNZmgop@o zN4HjxRhRjSGy`Z5~=u@hhXzKYFo1c6yk z3>3bQWl3LQw8kJ~5`F})UnK(}9AFT+^ok_90y>ajV3A?_LZFCfIFJQqPB06%5T3{g ze4>*o5=kt+(b3j;m1^GcPha~k-~8`?hnsfnOxArjwoX&43WW58KQ2%b6Y@@--v<_f zRT5oEItk})yOocA=2P7D@cqn1&s4XpZf{}(dZbjGi@bJe4dZ;uNE(yRxJ2eNUxxKu zKHphc$l^>y+)hM6=g)omxJ!S(>ra&LOJ_KRCtP_Bvyh60hY-=RE0I!>I&JO44mXp#(fv{NLIqpU`&Qn1c61C$?2LAb(94%9IqdprLgNfnl7>< z9OPHF72-4HFl-)683u{QSKRY5%|}db%m!1If6H>a%$>;wKsIu69|j+;4m*jmKSS0T z{_o1!rBxS%FBeKYY{aPOGK3JNg&Zitytx=Sl>RE2WFg%$D2@S_{@^=#B2&Uep@$L- zluB5Jir5vQieNr|Mf#%B`_ z=Yp>!oo5ORYZbjy@Ps?6s&Is^c&egVT}KPW@!=6PH7mRO-2cH3LsjwC^H0;Y3nWlW ziR*m!cO@Jqv0@lB9okvYEoehGZ`t13;zRe{%eSBW8Nc}6_qq7kqm1^?p#dvG>^;U^ zV{#D{IGZ}axuW#a;suLxGLgCXX%6!vU1C~82&A<>sn3OyGEoW)Qnq-CsYb;gg;<=s zfv31+c*R80WDE+jMlPjrO$!oxRB z+p!`mRNL``uYQxS|Jh$7rY-v$o1QD8_lcA?&WQ`eJaMjrF(B%S&S-2^Atw!c=k|E- z$3Dbu_uoUOz}6M3t7|N5hZXpq0ZAN)Ebj`GZr}xqNY&&R9L`_rr*t54NG)UE@jdxJ zaLw$*Wpc4_o(hFi8p(s9q-&JUVOi=uG$KmXBHi%2aqZJB(i_1lPaFKCz)4}RaL<9P zbZ#Km^ZR8OGdeTF*UNB6Vs1^Wf8|t&UqTrE^Khw4d1FPDLow-5_MW_4)B_1K9U9l^ zyBRSeFPK-T!AaPt7K2I^NXl1#=qYVp|ZIA2`pSXTn;5eT-96}y$Q2wU` zCyGVSWQ2vK=Za84yr0WQ;)I+jygZ+ikZ_0-a!D*5R5yU(PR}sT8z&ocX$wUeS;Wv> zahjwHn^fdI<T7>ZC4ojljd$KIV!to3puJeUp2(dOjFNP`=50@BkelHXAH76Ta5-!{&x z4{_wKX~iBC`TNmRi^|JI4|Bj>AI^ohZnEMNo*O?3V_EF)41*5$`ylM;3d4Oli#ZB2 zV~|SWq~}Yb9DEu8~bd^aZ`yZm2Kd^#eC&@952a_x zrExh58}&gUuLqklI~-}gm!AFP+7&uZWL+m*W~%*V*CWn|bENJ;g@zs8i)`>j&6aoq z24gOsF_b~3T(_+73fT_ouFwC;7qXlV&~V`uI}rtM6h3i*2_AK+#3B!|BlcznLNkLR z5|KQE=sgT;SCcgzH)fP4(c>t+?D&mX2O@>98VMQ8S!CwergITqmxaF1-p`=+z61u+ zxCF6UAl_#H)eBz%;jfVwFh)M&{u9NFp4@Rck#d+BE0QoT(HV+$D=px`=SqXgJXadh)`*ug25p&bRWCCC8xEBpAz5q4U}XERpdQQnp>B+?c>q~ghQ5lNf47+ zV=ZB-*hwpzg;jz~lilw(lI?rOlL;yAZ$WmNW}$id+u!4RU;GEAZ(V0^bpv62_(vc^ zR(Vm1=F$=IrBlk!PcLC1Ea&gIjSqkNlU%q9R9JxqkCBuG$Ig-~9u#7uP{hgpi( z26+JKZ00jHI76k^UH&7?!*Y%i#r!V$DktIl<#U;qB^r;>K`Kh&!ZlLcbfPRQjK`En zRszuR8KWG{A-njx48k>r6b3$EArys(2<{M}id-)-zs%v=2&b@am?ImcO>{JKm?0>V za3WJeq!Tz7_O*0_`HG)U;gKMpbGS90ZYV2SvXaVSpJ>8+tEHGDT-HO;!77mO$kUMF z_-w?AguEBhv(%wcZ(-=LXjO31}jHYWOeb z$gW?h-ZLv+e8(F=d4CUJ z(xtJ*B{$fJ!YNU4I3GC!-(SZThq=tIEuZt8e81-~vg{yzg1r+Tr1ke3XT;y!FD1 z7;SvFHzBD)6^peNr$Grpr!_M=dI_eIFrT5WyumH!Z{^X;ck;xu&mqSnZvW5+u#+Yj z57HAF$-tHGECQ9{?YY!4y1&DPt-DyvEtB9RRw%O&imt5oSjwDQzX`w1!5ZrQqD8-dyCU7nQuk#{}_x$JK! zAag=YY{ywl(9&kh^LL8jLMddkM_GO}{d0Lfmew>QNkthQWld+8>VhmKTdZ+BIf=47 zXz3nH6PfcEvQjwB+g}!_Cnq{X%TX}J$&PxyG$w~@N%Bs8f>t&*)7n^XX)EPRJYA$& zw!S%y6TVj7H9jfNbUoTRFpg$zlSe-CEBr)My!P}{2x|kQpYI$eA}gWv-2ZcJXxk3g zNDvNX9oOWWT)K2SkKS=7KYHdl)TrY2_dQ0ZpjTDsWC&E1FL?|CKqUVp=ZEBCq-=VY zUSGMdQ!;0v3z7#NNkvj_MR~-^l-8(pGoqB%W?-y|{23<(>m)OZvOUGpCEcMn< z*CULu%x%xPyKd)`zx7#mFPvrJ485>WDO6o~eEzbe0^E%E}zSP-Uv7`=B2Af+3imG?DFT9#PmR<3x*eW!=(;=BmS9j#_PM`HS#_z zox+0pmf}o>3zW~3!d}ICWNSGpSi3Zicn*d$QIH;<`Z#W|uj5y<^PKb93LYA1v+)w= z*+sM=Tq^Xh80@9!Y!^oV@-~U6y|;b*z13Zx`;T8JVUm)NCEa|m(Zc6SZOKwSrzo~; zil3L)9cInuUs73#7fzDMc*Lb!Z)J6Dm6v}0 zbDZv2-`u7ik3l+gxL--gk?dm;SmFZ05n)k*9Ky!sdPL(>#?VN(wv?&9J7=Zly;E*J zAxT`0>5PUm5ZAfn3MgUSWy3f_)WgFrLX!+zhJW(LBlo<>hG2|(#W_kcCv1A#_e`pW zk%8BK_8edSuYbY8Yj3gDtT3)>jI)SJvS?edqCgaKs7^`WNY^RF3_~j%x7~jaAOFqI zuzT?=Q@ub=8szBzVeZeGY)OvvK=4y@KPQ&E=e@aS0>}+JY5`DHAZj5gY>se7M&>7U zk4TU7@8GYQhk2Nhksb=!Y?57DR~4#QSPJ`^01`m%`&}a995>K&4a114XE z@T)Ed2lDLn5%1)!rr7cf!ZSJ3t`}HLOK3fH5UE@W?J}GkSsSzcZ3(pMkaBO{yvIskkQU8Z!mP-X$^p!ZVMSWrTa^5_O1V??IGCY z4IHH0;+jnxt|en1YVeFnp1Bc_#v4d8DL}Xh)b6fi@t9E%=}6!J7CF{N(`^8oXuT2wO2!V)#&4_M_lr7r^8N)MxjwR+cX@~}HQ8Gd|# zn#MIlBS$jSD>K47B=~9;J|Q}iujpQ6G&bVwTQZb9QrgV0=p+tL0_>IzP-<)HQcZGL zwtb)EG__j)X$Ce;knZ*i&X7dW|g4WIwRKf+WMZ~o*bko^wJZr8o+7Dl@$txONg zf{U{~HdS%H0Grwjt#AIrH}I+7`E7ja@h9+uZ+;uHJ;j|*d=i^$S1^^(@t z+HSdrhoW(#z0vFA`FWAnZ(jtP3cUR7@8fU&?f;DTe(@S^9bLiH_cN=uBY**TW1rOf zLwkomRn$#^Y&Ur7*{ASN{>4ATBhNmGyUPR2S5B~#ip{)%^uws8sdYMRhix&5TeXBK z`u@8&wb7tuje8FRC>wm4-35tplZ%-{q3roftQ`NvAIU>pKAO`1hkGQxb-Gc0?7*6n z+q(WfXW}2$A>(-C+$0g}ZwjmKb_(Iv#!qsUWpw+WMFHHAN(@BFl|&{<7tsEPq}PN@ zjp{s#>aAcVG+%MLncF-@&r{aMfV(it&S3XqtkflxY7!bW5o3%Mu2T4#uL%^3(}s3t zIEXTPM_4nA@h))T?};#d>wf6U(jLdiSb;=k%HmMXigYkAZ_i8>O{FosW`&7IhFvaa zRIwAKVj{jpkOT(J)s3_;AatO*WCZv)1(0Q&=&xZx3n9nfqwU5~qyqG2Ez-+XtnYh_ zXw?GJ@#R)`Uw2D7E3Nxuu{u~pLgw)i>IHCdae=GXZ{oAR|0VqG-MhH=#_O2s($0bJ zUc_!$Ak&0Nfc>uG!BR16%klJo3VGI667P zURodcNd(3B!F!?|06*Q#X%DVQMt+b4Ys>zQaGxprCIT!C$|73g33yG=m_YlPr zwUeQ$!#(YJUC9sWeB{1Uf6xv|v1nPP@ob)!oK%-R%6^Zl^AUdZ^>5>^{y+a7@BH`` zJaOX@l)YkqevZA?z75pjshvy<940Eg=4CtM{{9?Ke&l)lv;XtI!Xr;Vh7XoA;Ao4b zD5iOXMYXkOHorW=9AP54KIZEj1(e`bihe55{~#R>e3(a#XU2?g5dIl65)5{TD-S$_ zam>^LR@^A3m!{t(J(p=GRTkLalE=xqgSC9fCeCMB&tnCYpjlFY0ha8^jP}WDM0a2g z=pEjcU0cWWeRh7Cr-hz;m^tDJoHn1%$4(zUei-^~{$!|SD;v{`|LuSOuOkFx;SG%& zMO>J)cNsUg3#P0rvmO#*F7IJ%id=HGu2+vkb9mM8R>!WQ~ zq8Txl@7NrR3MThZ(Yw&KH53c^30elc0C8s%x<%}*im5AJOV->~U^+R*qfb7G4?g$+ zcR%M}%U%>{=IH+Cu`yT3|kXiv$lu26m$9cjIf@M>%n+1=*_!0cx zzxZQ3{^Cb)4?FC)0^QD#X-1jmMn@=^<_%<;yqd=QLG(5Nr)v!$^^0TVmFcv&I3Of?N}l$%e(3lTj*63#)oZ>700(%-;nIc zyloRMDHQHoyuKcBQH zI$oEU4;V&GZkY@$Tnp`G<4VuPSs77D5^dUBL#$kCUJQP#r~$#1h{ZjAqR9rlin%(z z$I-YpzB8Hcb4Nxq4!jOY;hE==@8#%*T^WO8ZZ(4~Tbo;EiadOcyZ%tfrr>iVoQCD2KjZrtNJ9z$^!*?$ccJJyflSWtxS@_vi6-! z?GPS?ph9qVUU72!Hh%Yy{uuwD74QG}CwQ>m;Ye#2@B*z0Oa&E!2m3t)(z5zdp?5#P z=FN7v$}^AN!Rz-v#4BI>1{M)K{^`%6Y$klT+hIDMAyvHN%>p7>L$kJ)uyj;Mz%#x~$b{ig(Y&rqRGE&} zL^;sYp|3}-IYg(caH@KUT<9KW8j^6DC{NOuLD;6u!~P@Mqp6Kdyv`9&lGrjZBX6OI z&oj&=Pe-!jIO&;D1ljl5?$SK2c_K8xs2JMeNxV)LMk8^AQIL=%CP#W`tuqLhf<-hb z@(>sgZTMgoRrOpd58aCNWGaEo?W8^_Q`=zBin{EfC&&2WpZp2FzU=YN&wd8f1-h@j zM?gi{0rO@?k%IHxMVrg%G3tJgw?6m)%T#b@p7Gd?M^N8+A8&pAyExsP;@Zbw#KjDp zFXt_pOayglo$X4QOa)#-@^Z=bxZ;OSrTe?-)`1?pD-b%LJD%#>NJM8$5S|Dtm&}dn zlfsXQZhKU0>Cv20I}fO$me!`XK!IhC;|g5CjC;R)6aVRd{5Sad_kW11n`2<9So%@P zcAi7?c;QC&Tqf-6f(uFaA&e3Xgu|NxXaS9l6EKG?Z3)I7xEYxVfQYZu5_Ax1J zX3Z#KZ31S+AP@Uie2jGLaas`5LoBS(2^(%kuY$hU0ZYaKv^TyXnk8>FA{82S$R&=4 zuDzGtJWrUWf+wGP3h#dKKHh%!JxmkObH`h$V6Ck!u>iZepiaQF-L#P7e!+wL_i^*| z3ZA-s8}-3C-hTTnT)BB2S8m?G{rv?lmfBhuS3!{tN{Kz=!~YpQcbG~=MoSo$7Zf%JR;b$kmHn_6*eKEl0U zzK%cpfBzf&;6Hx@SIZVxwnxz2f(e3)iwnoKb%9g+f6x8U%@!9@v1|&SeBn9#$-nxS zxc=xPI4>3Rl~d?;!X6cn36PfY&u2CW{q1Y9?Ihx5=|VuX#P5zDYw#k8Un7(oTUgwj z3rzdw1SCifa%A<)kZB+89sEf1K7_YPWADWbIeKrb!DNETe2KiO48;to5nNc&)UXo zu|2R5wrCFjwvhPfn5U2$m-$?J9OLj|WpBcrEi5131ljQTU?93`;dyF-O3lx@6&}x5 ziR}pcGS(|;Zb>=j<+ybj{<{gUu!TWFd+qZ{#1S&}#2A#2?PrYQp}!!v)> zj5#iSRSH4mE?v$$poIm3c!rWdpPn}ba;UseY3Qzcpt4}>gKomK?SXgis@A6TyJ66D zP}_Sia*Q(1IIjzEw8gAf@Yz596YR^3w}1Qtpzg7SV4g}l%D2zuLKp1M&Keyb0a68< zX~G+?zKU&`@#wXyxc|;Oc;jpTfTuSTZa;bl?+S3S?3?meLDh)1T<%c}FmpH)p&E|I z2+Q~>#CNG)T+*Y7KMqVSRjnNI>?CMM(l{h1pi#4|ZSTG;3r-Zc|Hhm6#-INczW0^C z$EnP?x;=&{Q1=V=BABPHywQ*ytxgLtwerhzEZ9wgr(b#=pZ}vT@6{H6^$Ew`4n~=)u~fvEdKz3dqm5rJBM;j5pd18{T)Vt$K*1w0qDSp!Ou)3NlIi~ zuZK)Bo~j=Yep1huL?~Gl=3Jl^)mf5(oz_QX{zVx+3)??;?^{K5tPVNRbahVoaxk( zPQo-$DgM*C>)Cw;RZAbggwvRkXiCfM9)Ea;PYV<=e*O{vPP)^dCqAjB@7~P?Sr&HRGdw0Dz z07^lbHz=DeblPA#y@LIAi{0@Frblk!vw!quJo4kZ~iAtyNWB@W2h>2yIso@s0(&=fq6pGX~Dv8djMy3fo>-}`Qr2V z-9P>^o_z6RxTkw8+ZlSa#RV!BRLDH__RE4&_!#6hB(t3pbjhA=Yf2NRu9<+2ehlHM znOv$QCyl47lpM0{%AXsa@qDz)-a+Gc&o4hmUprkL`UJfkmT^AD<#y{qdf@B+vr_(g zn3jkKOb**j)N=|LM~7B*`JbGhrS7D5xcaLaexj}(PJ5zH9>lAn-i`T*+Rwusl2u#UQ2QabOrf^E! z-sGryIgkk^^_!7?+AC{X27ng&_5GWS*;HXL)ajCJv%%xaw_h^(t z(~$6rZ6Dl`sysNy}*vdWs(<|lIr43Z2sYaDL_q9B23)`9^4RY3MZ`U zW@?s{XsKvD_G^!x?Dh+`N5^>dksEmPSFhsi{uyLZY{~>kQ$px@1hce~v1PZkB)08@ z2m1@`_j}yBejO*9E#7+VHOytkwVO8~n+-0O+B43r%D}c*4*z5~TAe0ZfSK5u6pfou zDnKDG#hfEnXTr}%2s_g&1qHe>R(xuC{s4HVrVFcfPqF->()d@GJvK|ll?A|iAL9F8 z`Fs5BfBI8gynh$hPp<-6u`D$iCT28FQvA?3>Dw0%>VgMS@yIhz;!FSXpX15rKZj3}}F;_bp|zuVUC+fhQ5Fw$E$>nemSnhmhP zr!|E#AI&MgD}04yTFkOnIe+1Wj<4$Wc?} zEj*=n_TMQ_$=rWF55}S_!2?E1p@4WhOS&NzTQVTI(WIBj6yN&naJOitN~|-@9fmWL zN8MNx>5Y-#$Elk0mgS^)lPllKuxpaxr~*ih^`Xo5=B9^E<&VY+o$tA7XM`E`Qi3Qj zJ^z3GAO3Y*u?5gWz7P#0lOd2!4Ko=dhF4QOA^6?E;3O>zTV3)gDT7k-_#G&&Slob# z`CS$SvOkIwZtVBD)!yIBClq?=pM#k0?*K3Y)K26EO*cBMK?KKKh2fpO2H(TCYxKV4 zxf?zVRpep2l5n9!@3H6uMLmRmS0ly&n7*IocrH<{sN}*E~!Ln4GY&Ur7si*L(U;Yxy#SYUnW4GTmQ1$cRty7$; zLZ{M_&!+aC^RovyIX=Rb<5T?V=fA+o_82#B-o{Q9%Vxr2L0#j-1IDij^t>=q0CY5P z>H)FhXU_N#e^=~R+jC(6I9%NU=ujsm5C$%h5%RzGOHrWIidq-!mOZ8-I1&JNAK>`j z4nO_cH}I8z|G(hFH{Qn8lao&K;SE+Z{6tV>!m?CM^9FleQ05tn2;SR0z|)_29{=QD z{&PI>!gJVfC)A@2bUOp{1evAhj0ElRTHHQ%r9x|QV-(Ks!PDZ;OQJ=tR$|E;a*`9y z;0~7%Uc<<7IYY((&nFpwd_PwcxJ>E_fy@Xdowj8g^S8AnWisI2Xeu2_=CmLL4%(Otq#tvu4nmS^>he2xI;4bf-`XX^28ZTOcwpj4b5BHsL}6~YksOW@ zz=?m7;6o+ne4iS&)n$I@7L&g*el`Te>0@4ZQe%x)eL?f%V~%Yvs7iQ{CTmmJ%^Xe&6Z>X>f&@Z$_gXg= zUt2R6=%fXr5kIA^11+`?0+&$D(qseMiT z{xVNaPX_gKEV%mQ)A)mb^{?=ifBWz8!8`9@17K68*5Ic$sMONdxZCd`4_ZRugL01h z4<0~E!Lv_2gGWzJ@vEBl^HL8 z>l^s`pZ^Ws`_=0>Jvzo_+Tfz@yJ4<91l@~owHa(ci^kN_y#M=k!6P4i3cvM-U&2Q} z{R!Mh#j=@z?FN{v*1DQ(MkHp{Fv9ZcANmpE2us;w<}v9cMKf9MR2!3c z8Y61DI^+Bdi%z5{qiv9^sCotOG(k>kpvaDm-DIse+H4zRN+Z*I4|wd{(5K0>F5fIs zvO7!hP;CYm!NZIJ!=E4GrV%}{ZG7H19<&yw=l&r&CKP`~j%qNBQ)>E&NYbSC?V}A!J4po+~-!`4c0M;SD94 zr?49v#AM>fSjv|oV{;@ByPwz31`I{2$lI_vN}r!lxK{?EFvNxcFS169!M3x3!_it> zhIJX1vTt&9nlJ(6{t2xo*T8qrTq3p6440@lp^&OFosvOF{|}|!_6^g-S(DXEh8KC26gIW%Oc%)^>C9~5QV(Z(10V`@~Z=Uj#c;TmX3Q>^^Qh{WyOAzxk(l?z5l5MJd?N0vv52^V|%Gt~lG#uBF?p;&4h8 zG895ho}9~rOuH^goFU9vk~Q5P;&uu84giMZ!KK-kR|kmC1;cOtoQJRN+7MlG85^ds zOOIrTc3ScvxqQU5cs9IEz4CQ z;p~A`Np6`sI!3*61#jGcfEPahd3@#%eh)a_ zqRg8f>}c!Q*NT0ukX^-e0o=QPhWGD3z`0gDI6ud`@4SoGUVj}=KJ_^6zV|L({@T}Y z{N9I{cRTk{)C>w(dZ^D1!nRHuVzvH3pCH&o(x(~uBZ63+#BFY`)6a<46^;iv zVLnKm1xwvS&(3ju+TiZ1uj4EK;m`2X@BaXsGUNE@7$OBl3YOgh0p&Tk5h$Jzs6}vr ziql7L;dj3L2YBIgpMoCExG0M4wNvaxvDkc)SLVXNjplVm_hlb*8G;YP>?8$kc}`Bx zCSzH)1bmp!*YSjiz;YJ28~V1wh_C0&c;~skcTHaSWzA_UGTP*TQiKt-euHJ^XAI*A z(*#XFg*y31sk0~O2_nXxSTX1-Orhth(5S_B(M=WfZwmWPexeaOfG=V7e{tzfDOUtJK%hPQyRT2Fy|VKO5VhAD0!y{! zFn|rFfMJ7u7owb{en3*m>WcBq(7!NMaA=8Zgu3|1N^j%e3H^!>aTA@|3EDJD|*68PSi$C~he}Yea@pnj|3(7oo94Vc&*yAeo&}vrZ%%GYn6}BrN3dF~A#Qxf&LawHTpT!)shM z*|2Q&i0PAYUV1>+OPAB@xj*c4*&T-UTw-iA-rx0`zvdr5fppK9Cv?C}G`(y;V8_Aa zG#dn(#y^+@XqbsauD0hI-evLct>J*}1vih34~{6#2m#cJjPVF>u~PCd52?r$AyA4W z^!HWRYm9(nZ{0nAD7@dg2$WjUwr7SP1D$yb-8wA<+)*{cLfL+txVlAW;bJFX8GaD& z^->u}OU6;L2nrEygfpXju^l(tb47(K{tqz#M=06^O!P%aIU*SiP2o}SUVZOtx(+rgm7@E*AnaW;;(n6u`P5M+*(3^d!Hwm?8qLf?5SP zZ$E~!{esuuej7{OV-m#{6`S22ivo2sHA6xH*(>%J6|-z1m~nBw!$yEBM>Fn!_#W!T z8SdP?j%mBWnH1Ec6D*ioZbPT%R)RG(;ctm+Zuv%HmZ+d|wm3K{)s14OtL_V@`ayAn z8AoQ1vpj3?(O&Ry}$W8eC0pOf#x`q6i8gbRJIds;CZ1v>RSVq_(0yjy1sv#cJ?}!=Eg1Hv&SY7(X4Z z4zTGthw?hik#j9<@h0`Z#pc@2-B?#9nJlL242uj1V3t*^-`*8Qs{zam*4S1Mk9>_C z1_jb(W~XoZRsl%i@V*ij6nsi;j0#n|*KBJ6v1qY%8AypapYHU^Xujo@9|MH;=kx~4hK7DWJ(DR%h8opxmC7AMh4Tuy$GL$O8 z(6*99D2yCsDN!nU*_>>zEnvvaYz`2|3Z`R;qZ=co_xY|0otn{8pwPLZE)}{FoYy_- zM)A_`eG$85hoAn#*Dx=@bg{>AuOq*x3#Q$IGPkJ0QWt#i;e8a$n55vHH{Zr1kKV-9 zlMUYg`ODZG9pTa6`E8udzy}W=K#osP0qhx$9zAKavOrscr@3>smpDR8M^Hr4r70DY zO6r0q&d~5yw29b8>@Y5oaoN59r7oy-j|~*tiv>r!ikH9l1N^W5^MArI3N})JrMC0m zrS)47X~L?CqAm-jrDBrVENASB;(RXnd};YCmZrOd(_Bi&crR*Re9e1w9sTkneGWB zSVOA04yoV8!_ARU!A_m)?n{6d;pzaoGl7M3K?5b&vSATOoDKn)q!TBo=r}jFF6}!C zlZDU1JKD>7qiUp@~jJMx@7mqx86Z16V^_PE!lbes=(dV8AaE`nCie;X#Xgg_es!=;1 zTPT;sZaAqlw(v3t-Sl<%tPRWTvDrP56cFWjlhJ1Xx*gYCv4=K~ObW_=hhr6-Xu-98 z#VgH9{g8?>xbuNF!LfmZ(0tVl;G_hza+5^nB&Wzy zsZ#vh#@H5gu8il+XgNSJyzf7#R=Q%IACR=Rw9Jk$;+t~uGbh}U0^G=Sr5x+f4wsQ% zlQCu*(et-r0gel+)fb-Y;SVd&U;jA-p*5|n{<_Q_Aj5+EAc|rpKdyt(a1f=5>otsX z3XI1VVRQmD{LCD}@cpDNxDTy?EtJNzt)qG|1R)eMTXr54NbuA=@BuP3p|rBrG<%F< z&_h@^mP}l(WsdcFkd76yJUjX?>zKkZZNHi4g~nX@$3nrj+Qk zH>UxB;QoEOJ z9sPgZWtmbREK zfyqXLU|2zTKPJnF4oq&b5%0pA6}u4KXr~()jCd{;FEm8VUCG!P@xgJHbj+-;( zXX7UuTg{Lfjk3I}Y6u5I6T(YLfay%zTV9mlq0HcE}xtKaB(W8DZ< zDCX={HAL0})S2;)*7C3ZRh>y^>w%H?ubRS!ID-L_n58=5rc8V+P0 zyTLh#+O1pW>s7P@5uzgR9399-8qh=I5A>60o5ewBIZmbn5sR*V&z{erPn2gJ9xK2p zc^+n5DB{$;j`uhT&IXP19t@rj=P#nTV#ST{rRkYL!6~Xz%1vc{r7rPxk zxO*2jZd}9td*_hyK5pK)j@`TO;;rv|2ag>U+Hnwbuz!TAD74-bwcIx3&7hI7Er;FhJYj5GJ z|LHIBi|_srcdp*R-FM%|wbLumNwHULTL3i60$^(!fU3AaMY(!{ThBj>PyWFdaPyg` zpr=RJFAE9;(`N3rUPELlf(UbiA^@gvlXZJJO{RZGMg+l;V3U-Wkhf1|tNmeDwj2R5 z6T`#thi7SyM`tq12MCJb|MOZ78|2!B<-lZWw7_HKNK zt3<(3KOML}W)h_Bk!}cTH+&+G?AI6p27@Gw2Riw+vhKiK{p%wL(zGIpkoV^XazNc889xp?TM^dpiu8ygWF0HR?MBWcXDHu@RzO$VaT*b(S- zmt=@Do+PDh5r8D>IIm!cz>HD2wSb_Jl##{PgHGJl?!UVcaPTu2Mp}^4w9Qj-0jF>c z=j#{*p;_i>dj>sfAzr>{TU1EKTfr>Aeh=)m0@IALZHi+7FhOwl>g zt+<$geFuYC{fUmGXR_PA6d6R-+B5@DEJoIT`dbKx>~UFBlDJYF-O>*PIarx!PNb1W zt(dCf2op|f#qO>5@U6f6TYUTPzKUa+Axp){@o|fiIIXDDD|+OvKu}e2AwWIe;PywK z#Am+rdwAyKFJix$u~&u68|)SBh-cknq+0Vz#}hYm{QFY%I$ScD*I*v@swJ;g+Ny~v zcIGwOgu$c*+M8U-$ka3sOK&R{awkJjAt-eTI#0@fbT~ToB>i6F9`8kOH&j@nn^))f zCUhS_^4LHf_`G}J9wEr{X>z9yC9HrS908sW4*X4oZ*y>$I2B1kd&~9grCW=tekdID zFgf_Eh2I+M;ONpJ5^^zVI5`|)U$3(pT9$MxK*@nnlDBrXlK3qY9SB&psR(9a6O-t# z+6dx3!}`Ns8J;>;#U2#PWlAIxvkjtKT!z%;3Stanj|>vTL>4qVk^XG^Z9xlB9waY` z{8pzaGA35`o(zbj+yc{oR+Nz5$oqNpxCuRbqjh>y-d^yvnLXPw-=$mcDZvI#=j3ge zffI{P5s^a{xf@AY3DgpF5D9v@vckf9%HI6Jj|~t8McNKXW^l}v4GrE)&Y|DPPF{U4 z5y3F})TQ-vpC@47UsX16V&3l-EV9AX$DhDUzxxIJ_}+bd`1TvvKyW-w5LGO@J+QRI z!bKHjQJkNh<3TBy%8d6vxQD4IHpesGdHLtS_5{~H^%?B19N~jw#kl}=5}-`b{T|We ztKR;vVF6f{~tV}%CLiE!Cp!^P} zv3QLpqiC2eJFCB0h+vpYe@7q29D|kG)X>!5AUslELd4A zLkzvaqGzzWvIg>uSfPVLiP~WpN{j_jP6Em0dCJpa9XLcqI2vG6&tN6{*~cNq58Cp3 z@*b#!!m;GVLy?0+rt-MRwBUhxJwzGY(1e`?{n;!BW$D!k1eu7aG|PKZ^s=%7OjCpL zQN?nx$8>T9kAC!{IDh9Y{NmetoWJ)TCQzs#Z+* z6xZbhvnt;I@z1b1x{jMKy@-7&!1f4xt+=SbcAl{;y_IcOU|PCDR#JMZfD~GbxWS+d z-xTrSd|@)r!^IsksQWWjpje2f6s3Fqr3#k!Kg8=l{RO`LcYlxl-FrAaIYO-!md+bqi3VY_@-2gNV&33)ktNS_Edz1br~O0n>hmlkE|(+qdzT1$*ou z^MpwXc6Hx^tCOJ00u;rq%?;>>ck%9ze~f2t-@>i!qtK$b*le*#JC>Ux8LY^y<`+GB zk|G>tc=msdrtAP!r#GiP^ES;Rr|mZ({#8J9Y2|wT-lB@KEZFQ7x29vf{pzduU;o{I z#A`4A4A+m3TT>t7n=YK4SF1J;y{}4(;7k>AGT=4lKbLbtM4=lL}{Gk&b+hK?Zm_TlUA3l zq0}i7U~<~WX+HZT!+UM)LCz}O6GwX+SQNfR;Cx>~Tn-83(S$7XzZpq~!un2u0{2|o zS2->kjyxyaVHhuKkkS8PTnq(r|CK(MD0Y&W*0<(2|5VaUyaG4Aa521ummt+Lc<^n6U z1Ijr$KO8)uB$`SLljh{(5VH)l7#?*KN{Qr?ETZp7Shwfsd~yXA*pZK!upLsCur+w} z(Ni7C`gC?-W#3^pmQS@Ct)UZ8dT5fPDI$GaMQQBIHq(X*4s`O2#l?2RdON^8QI58Z zz^Ao(5?~zH!OG6XBPTtmLMOC6!P?8MjQ*z5GS#J^h%^sfD~@m7!ZV-yE!@5P0B`-^ z`=*0+Y^Q?#UUC1y1MKS#^Hi`YGp?SV;{3h0@YWB$gFDBc#jP7R zaaRQQ%7nToN|`z{cYJfUudk#4{g`2Pp2WQ~UjHg9r7xeo4Rzbwh{(s$Ua#K|MA}rv zb^%To!QIzh$2b1`ukeGfe-qa?8_d&;-E!fyWo5P9^>t-#xf%N+*qt2XlfVB3eCiLr z2)S~KyLFFgo`KS%Fr82ASy57>U6z@_Z-8R6kBH|XpV4=fkRK8`b56RJJ0zElqa+B3 z3rsG#6V={X)wV|>fvrP-5X3P~5;2luI)1;|z|l}9(?C|8KAZH7TCsa9GH5g%mPe;ad${}Z&rv2|s!MBKi`K$cwW6RYFxf4r1vr0jfe+*!FjX8+$9VUZpWyh)7S})d zX1>>uVWjts_Ilz3m<0f}wAfhLfH>8T$H8;r{P@I8vgiC`c((CITG3WJw+ z0FI+&mA7OLJOYmH{W@>|A0G{{ZJ+#J8E?ve4%HqHpASdPz}{unQ-hZovO2t7tyvBV zg!%x`oFXg}3}j*RiSffmf{=AW`)^!#yhL6RLpIPVtw zx-rY4LEwU;F}{hcm|qe*zUZO;SuEknhCS?|nNn(f5~>>pYZyo(36E`VBXAFqyh_2HXG~#=+P1GUF>o7(MR#wFMJU%SKxzRyn<4uZa^$P#fxQ+ z8NfVkaB+6g)-wxmPf<$6TxY!X;~!yj?K-YJ|03>RoS|%vQ89J;?C|q&e~XS-{k6C2 z1^YX+L?ZG9q;7h+DavK@p0gkP)D`t2+H)h?-v6d5wiWo{H@<~``0Kw#*)2Fa-k|m# z{>6@*>@>h(X()hMn({x{;^@&^_{^980NY1zp`x~g!Kt9k?IgbiZ402lPO|h+N1{tM z1ek7_&5~M@NK+G{A#0@NNunbk7>%t2h1HHoazaAIGc%3?a^N#FFq}UGEpkSM+uazc z-OJbCRT4*8SQL{M30RG%gY*fIiR@W%5Lqj;obt=%!j5dh^Uu)G1hQsWk`kN zK^t5djE4*cGlUMTLoWSYL6$a=!XXn7uEVr<>N_wA9R7$e+juX5*T?P#iGzUOen|NV z=EVTkM-x%c`gcL;;b~x5P0r(k>F;bU(pRn#*5RslZ)4ix9!Co?HJP!tmCbYHMJ#r& z?{(7sw$3z?m4^%nt_0+fw&n7A`*a$jSa*6LLi`9zj3Og>m{^a^$&Pq5ug=lSrI|c7 z)@_ti#(q)`vGOvYGnz?U^6Aem&O{nB=l7Ur31iMNyEj)a6W02?iVJ1cP+fYEZ?YFr zHJHF6Dq|9wT?edSsCZkh(znPJGJGgLmJ>)$JBqDlYa5N(l~YJp)?iMODQ{ zff)t6eZ_L+2)KP6pZ{0?9FKhT8Jr6+Z?+95)6`FKwCyn=nbLb}8tn^JbPNR2@;hn^ zuWQgsR8Lsc2m{|sA2*Cu_38RiZECA@&{jXW(&euY#UCqExnhi_2{Rc4iO0S1JS_?Oyv%4G0OmqHkeCcrt59%Zr-CZ&B)LW)wK2_7qXS-P`|VSipi;3pI>lZq z&gX(F&peBd{MP62)31IN?|*O?*Ebu~eS1$S1U)}H%q1>4$AvY1+_)Jl3D^pf)T;W$exWN$4jFGb6PpkaiFM{jXm3$GWZwrm!;&1}iEa^(duP$)W`ta< z&RgM*N>pgB0|HW~!=XbQI{|Job^$SYa+fiYRZm!kKZ!{18W`5Da%*2oI@IC4`IEg2 z$AY+T6m-@@iY=Kb5?E8HuoOtG{Y0|T3b!kueQN+kFmGpQ-JtFir#Eikg-?G5cyNXv z{r%tLTo;_49OL4_Jrq&Y0xWivumVyA=NISLmV&z-$xq1~xo2%GN z4HGqxGGTZ3 z9=`gOui!i1`WCK;V7uKyYeiMXGy%(gj|l};6iaFJF?VY~H#6=+u{+w}xBuxM;l@t1-rdeUO}u(QFt0ntMOkI@|XZ*5t-Eq;jSWhB4Q&FUgz^Bd57E9okMM zYefc`A@2FPRHe6CmVC`KNt3c<;AZ>?B5x$$V{<+*6gTj~f5GRFu_8dUkq?#32UcZ!*IqWb7LAV}zUAy~o^Q`*syHqN^>!q{w#`9C#AYvWnEQ z{BvUu`5k8Hcr}|OA)Y?-sEn->ptx1@FhJ9|8cuB(gXEF=DE(*E)W&WK#I(O+e=Gm{ zuo;DLUp+h^H`Vwn0dg2Vl1{rpo!jPr!Z;nM&(2SQkKB1;wuJak0O^vV=b+U1-`L{vQHWOEoDdUh@@ zOBPe=!|m<~2}9~Ye2V@hjl6CGg%a)vrxhKS&*BsjdRMI*1SE@&=as@N1eBm z$|3w+LauYHBWiO!+%-IO2t7{JLy2D25RIsqG?Inx9v6?wyYiNNB58zicCl7TJno+B z7?tqHN=jgK9Fwqd{e&KQAoGuxylT+kkn71+6cI>~7DA#rP-0M(HGxMrE+%4A0E+0( zfXMvj=tTd&(p)bSZL2NOjLgG1E#!GwC~Yku`nRv|xuB z=x4%(QZR8aSbIXOxdsl=5*yb+Q;LQZ^I$eh#kECoykGG0KYSZs{focEy?5ThovT-S z8|6Ku^fD$W=BYqybhfk8GHaRe-hPKiUicWk^nd)9xVM=gQ-RDgv`noJL+=j&3I50i zJkyh*kNib3p4Iqnh-}6m?K@WfDa$=#3IiJqio%;vk#J+CAFZ^MjBVw-hZQSFArpcJ z;*KSAI0EZu+|C#Tn3(Lnl&RM5{k7kTnywb^pH^VypO5s+wta(Y4bIXkSFb{_W7#r%Xsm2=ZvAEFW#Vb8&(MF3Ic)4WF>=$-+ zgeVraGA+Z}J!YZ_)gDgg-Td(Sizi=6dJD%1ngCR~&xA$~YhEgt4ikm7SZ%Pb9u|{I zneK&~1zBH$4(!^tD@rfhsA8r{Q@)A{nG2SsQ_$%t_Gjm~FTmAjp28=-_2LA3h{@5vv;{;Dem`hgY=;}J9=ikXXkT> zH)NR`=p-i$N0ys#$RlohzLqiX2aESlZuDX#EaiZ=-+M-|^O|Mw7-h(@ymhPH@gu`H zfyd}BIrfB+t`L?mq>@rwuQeG;N_b56gu=HV6vKPlO-)XkAf$)^hntLqdJ?PWB8fR- z*#zO!Ey?v8N^_??m%#?$B<}{2pl9y$prq{$bP8&8OQ1AN&ZeFHAO=bhY3rw^7Q9z( ziF%|ixE35}AzMEbhczS-NVK=G<|gp4OLX)y#0tTOYwZJCZLVFQnKj+R>WlPdI-Foa ztpd#$iAX?%oLvueW69cNR%MnL5JxL^)2S~h8i*t_1Pf(b%O&t0w*%ZDfz`^(;OVo{ zhbvMGiLR1e+z~PlpdwBKQzxc_Gy!R0a&K5;@aT~xZTZ7N4t+;e7teFTF5*V4KahHnjwdwZZg=bk89&5MO`wg9?xCKZ%PdT1WN7TBRF_&d)%ho|3p z3*Y~{zlAOfPNxl~3M_T+XBJgd$TZ=6x9is6gnJ*}$H|pbEXxkB|L`Yx`s5T>uU-ZA zd+fFJ8o1JSdnt0{%|oh-qD!b055F$JBxdF=D9eIncaGylq3?f)@BZ!I~}5a!@=3-1Hryl6jf}>gbKlZDD>JXKJ(=-;fWVtz&$u-XVfnoseDUbs~uNp`KMr1Nc7@eug67;!E?ecem6TK)%%= zj_h^+W=3`>v9xN9UveZXI5R7Ed%d;Y?B0bXtNDV4torO82gM!wxFYShSt*CTj~Fi! z5D9R>pZzuB^G#tDk$m$Q21>t}VbfOT;Uy8bD2K%jYmzXuhD=|ecdhbhQRW0OD^-ve zMr&w26DZ8-RTAo)l?*?B-NV{^_=nc6$s@=%xxKr(Y>1}-liUm4P zfNpWIEZAPTg2!Kc33ordi(mcd`4u}{U)wHb%MQK0P}>MOf46npAEoCnchT%B1$U)y+k+~%@zT4QOJIe zdD&y$Em%Idi=Th@d-(ca|22-M30Jm9xVZnI8J6?Rel$ZAini^sOcR#lEuQ(*OZdbW zKaX;Hiv7hobWv=!M=0}*x-34YHMyG*j5!P6YmSBJAP5QHOqrDLkx4!CLqyg_K4Dp8 zd$;3vq+T?mgA-L(-8fe;Frv>Z$G~rKtpO@0gAKT6Jv%7Km`^;TN-ekj&M}#7{Ql5K z4u3yZWVnv7e~mwtux2q;)1KXduqEmUp8)}@?==6O5~XtG0GC51T6H}Hhw~UU&4NqT z=p=C;iH2ruWSN~}5JZ1EyxYY09ASOW(T=6lzM!3#T)g~2Tu8?K0WO=U`yJA1iknkn zUiA7zBaZ?YQW$v7R4fS&k(vb1+}dyRtd?XaBrJvAkQ5Frj5G9Qd?VqC4D6MnB*oXt zLI6L}FI5eQZ#_uQRQ7EN?UrBP4)D1;Mmnq=@Xg@zCN7;&ZLUTraY#&x&}Sl zLR>cY&KP2$uR^v+P2K65S7(Ncx}$0yo9CcVdt>1kmgX&h*jha#Xqxq|&YX+GpoQ-{ zT6*%Ug(p=iS=^oer(V&pboiH+sVlX%6W#VbU|I?=H$k~%xCYv!P4Ecd*2U9f?oEPLSIJzOim{deEP-~Gj3;=MQC#1oG_ zhPvzkQB2dE#uF8PbA`73{Ar5|0j@pu7(Vw$U&4IjD(){kU@F*dk5IQWE|xtueLV_3 zZ@>wy%ZpHK6Ge4Ii$_6XE2?>x5xuI;GoDmykm{agZp}L~w*7rs+ghVZ6J?{q(ul(K zxwSpAg#}Ww=W_{ijGsL?W35W`qEWm3XfG#G^2LqSKRwIBY=~?@_R1JOVJ*ED1?BqT+Tf*&d8#@ z(v13ETRKDv!kde*uTXeM)%K{V3!*{T!kSLsmM;)SNZy`cyiqpvq4g^pZ!wOI6iwjT zT&sl95G&W#;#DnkJMM>hev(6nY;iyA<9#Riv^Cy)?QE;mkYsEr>vtFFVSlQHmI)#? z0MbA$zs~CxKsPf`j&Y$C1zTKs>KQ!y+rNWX?%u=M>#t)j6EG=i-P`^T=1r@8M^#|A zM>)U1=D`M6%N3N}9&i5SWgK6O9qu&p(V95BxaWzU;T zh`eU<=s6^v_Naw^YWF&gURmxCzZ?=K+8Z~y@x~aW_owk~j-%RPyqZ^Rm$@W+G#m~I zImW;QGv2wB&YcDb;t;RFn_lhf^SkNqgT}s+mt}t=;KcRk?AVR#A*G`OJ{v#R1N=c_ zy1!&HgAKia=xBCZRa-v$Pb z;AoH9>5Rr&HRI6`KR&b`c%K6&ssIj$#{$VJ(RnHxHT~cIx8tslQ)}-a#q)LG#``YA zk*KMHVIA~ajEF?|~Bz zD~lx%71W}T+6ih5E;_L!P)7+yl?W}-hk9PcH zwAf+h&(X~F|hoX-WH`0OX~ z(&v8*_m>?m0Lal1CYSIX~(A@7Q zHzM<$c^nT5x916^YkB+kfN{5CeIdD!ogjlrx^FcQKT9}DA^vax*n5V{G;uN+aiIJz z;e0xC(GRRAeS&F?uS~z0Tgy>=F@pqSqI7UI17;S9iv~PFiAFgCj<~@-w%{1S&^YVB6@Klddvvdm@3b;nOsf$Z z&47{C5SU@=35HOR)7f!AmR9$krT{0AmW9eeS?pwB4aNVyPohpGzoArE=fy%_Um5Zh6Wq3JwtP%@XWBJjbj1)NA?VhPiR>&O$p*8QxkQu6(mG6zs?zARr0{pVY8ZFqLJ{=A%kkdiy9CM&#HI~t3 zH%>cG%&J3>!jj;8UV+dg^jWiZA!-@+sl$^c08+LoM?Gx+%e+JLUX&1KmErnueD`XczZV+Qn2~aoDFx1z!!a?KxrB>)tq0@{CU{@=q{W(53S6n-~ z2H9QU-Irg%)$6x#`_mtXoE+obxt)F;7=}~~@ zfls<%yXATteH$XcGzp|ylA-qFfm=kN?iXyd;HU~NHo*Hw ziYw1Nj?etzAK>)y+j#f<9Od`~o1^1)w!vOox4*6iY7Lxmt61CK3Z2^xY010ZwmuKj z0)5MpySc@7SwN~0@k+)y?S&k3hr?*!`6jj=%t)|&h+tzn-a3(ZtkrT^>T-4rgQPU35niQ!uGyo*qMApL2N3icKsZlc2*spM-N$h^EF0nU|wZH;P zXwEdZlB^IJ-ZyF%^@<;#u=yH(gLA0_%01Bnt$ht8cmdj)1(m+$Dg`pl z*w>1?n;ADg{&76_;TgXBAO9EJIy!;wA7EMfK}4#kwIzUJny}klV4eZp3*_uRuAZLa z?45V;#`k`J(`#38>$#6$zuDl!WrvH>*m`Ti+`M{L7JaIwBpW1pGy^jV3bZbmQE|NA zN$=%ye(=R@U zb5-a(p=`Fjgi+gDZQIAHGmOTIxU*nH?@_#iG}z(a|6Td0Y}k8Dgwx1`aGphiQ7j9) z+!{!N#Z)bmv3*N2H3%s4a#B!gxI_2kyGI_Boi&YJ^#nOmOk}hg69;X?7MCQ&0SJ2n zWRTl79m@oB`dVUIY`v~zBtJwl-m9EgR2|^xwUoK!lL8ERt_}uYlZ3)`x}vp9eqBV& zjUL1K4PBZDEz@vX$JzjBFe}Y4C(oZF0g?=pjz?21me0Tr>mVv;ZlJ-*SgbU-7C!b! zGDpO*r0wl~4)mpn6eq|aIND;MXVk1eep=#^M-fQ>dZU+tW=0*IiJq)8n>WodT8Van zF?h=|TniFaST-{3eF^_z5Lw2%rg7;W-!^EU(*3ubB&aQXjOw0D>Bfew#j{vJYfSKE zfU$SPgv7=f$ZP1?sy)us{we)D>gx2{&S{A4k9eI=)QwL`*1t8WvA^_ykrv;k@GsHB zf_}0edq8FwISp8dwi{ojREYl6=h`<2O0Vngv1PG+^8P@XCTJDN_6W~>;^TP#m%qZB z-~A4brUK{;t^4N9ssg$|(E1PTcTMT;&Mu(aBcKT0eDzgqe)JQ37V1`{(YPr9XF$A;;aCl`t9Grr#|;vsPl~dQn5WcZpM=fFjHD;#C^ax8*vfeN*y*6LKGLs!$Oyapp<6`~tvaun7cJs7+U@C{H$o!X9Fgic z%T+??V4q-oW?&=5AjW#xa5iFPg%#IZxc;yzH3KPo`3xIwY7}GiqlaDgJ=}W_C8aAl z8Y8-dd8)i}MA@7`dyXIqcBGuJ5t!agGc_whnZnkJ_+HRL`Gw{fI*|~501X+HBuacgsKbW{&?ad_G4TRzU79mey?oF4RT6C}36oCBlxNfgsMQ$f zsRpUKmI59%eUUZz1LpD)oF(A7AUmk1C-W@vjEtgU!Vvuq2S_thoj>e zdcMP(Km8f5+`NrD+hg3gc8d3xJ$5poN^#|0442xs>cYW9?IoJ3r62aAsJjJ6OU0E1 zSl)jhfA^<d`3NWz>SDYx)JH$`W1dblv+^ha2~&?;r~N22g~ydl?DZu+UVE9n z%YX2yZEtGOf;Wi~g>~X&Lpu^-X}`HMY;&I4{SwUK(ST%ob>n8GFg27cJ8rcjsvMA8 zEEkymgXZIf-O}U5Q9c9kppnG>y}-7h;Hq=t)cYo zhGI}D$Pp%K(V0>q$E`eYd+P>X{DUvzJOA-dvHS2tY|9o)y=Xh3b!h^AYCc~*Ur@^) zXZIhVOcS=-BkbP4i?@IH6I{D-16Q8^2+n1~QWRA-E?=tlQv+-Z#ur|D--f6%Rsl9r zQ7+CfpY8DNzxrGJ^xNOTt!vlt;NCslxOxpsT}O>d$8J%<@M#ZMBQsljl1+2+N<>Mh5mV%Abjm9LYK3?mW_zw^;7{fm`@P`9-2B?RO}U|^e*=AR zhU2TJIJ-EGyE!`H$hls;HX{=It?-?pf6y z-QZ)bEs1H815z>3Sgzv-xP@;hv)cQbc)FU)PVMwWO2-fOJ!D%IBZpmfh31u#@ zEOe=s8803Ys1i-ymY)3TaO13f!VT=#ZcTeM#ql7)t%I%zt~PiSM9%?!x5p_uzKZJy z8zNVNu%)Q6bT`N}M_-J_NC~eGa5}s-8MnDm1um& z&CwMR5mo2nC_Tz7++Y`tWzssk5isUTL}Cq9{ag1hm_mxTndRRMuYA;}bOEQHRJV4I z-HRecYh)YNdvqAI>#5r70Buz&$BJzPC9f<)Y!!kPi=2#}y?No6MM4gL;&tS$nZl-5 zG-I$pwFW$f^2GKbSW6dhG)^-p`vFd+?X9;m6Z4QJNC9>NY_?l0Wy15n{o8o(#@o36 zt6xIT_q_#gQ!Wb>kOd-wi@JyIE-<4)>OEZ9977kuE8qPdZhrJBY>o;}Za#u#1{PgV z%M?bMOwDlZ6j{5KTP;htR>)qV=V#dNclgV{_;Y;l<{LPfx7eLuVBTzSetrf>%Re!t zCQ{s(!X%LG1{eEtJoDlUc<%GRjr*Gd-5z1uZlPtyf?hJ&At|Lh9=?x{N-jU)0G`vXo0ly9P=3CQ8(B%C|L5 zDVs_Rg<+m~$Y+V>TP$C-kX%aP0gnW@CvU^|vn`|qZ#KuxA_=x~H>JELzU4XC{B5hV zbeW)0O@nsb<(ow@NOyD8LXy`#wVc5q}RD%uR5QJy@W zLh0qiD_Xj2qGOn3c+}+oZ{qZmxMz2Xd1m&c5ub5&s!vDfo4)<|KPS4oiz zBl?`&a+#VB<#*_Y+@{ig6M9(?s`W~@DjkLqg_KC>?dBh4RRR7{dh~ z-nLQ2Eqw4AyEh>Hy4?~z_-VYbL}*M#gr@l>BVpLPuMV+zhte>-6f;x|KbnM%86`wN zzCWI^&W4nO(x?5KZ~&u94d@*-&QU=%!UCYCu>WZ2@V1ioz&JqU)eO8zfCcU7U~QEF zo9zbMa*T_M9nM5>`|&67{BQjhzVY_ksLKx1qJZw(9{Dt3S1aaHP%BU`c2E(VE$5J3 z#p(707x(VsHQd537?kUe*nM+z;u3&lV!no z|Nigr-LHQQr&H@eQH@u+XJ_hGdL*exX{Y{ew>T?;qdT|pxqtE{ET^Z~Z#O904W!I~ zOwIV{`3Rn%Xo|$4>Tk&Vst0ht%2_3$6}bgOcL+i1;$Mx<6d=RhnybK~RuuVa<5)=^ zJfan35DF?AkYaWNLUBZLuJKK-{imfT1B8@PpSu?xXn?~aYUv$GP8fgLT*3(APQ4!d^sX6+6mJ04ZOC%O`}s^W&dXmOWPJs77=k> zB$;yanC|KK(aK<@HP1qN{i^}0<*ZLWw9vc6mlek7S~;XOkEIs~W)bun{D9uL#E@Xa zr)uvEn1CDJDVT^Qj(zm)q;64rBM2re7bJF_6s^rqjG21_9m*tb_10ZPdIFLCV^mw9 z635;aHG{+sb+6zv(k(mKN?&voUc?MaAwPpBlxwgx+ZWn9<(YBlUUT!fVykqB20&2D z)XUX0WqE_}{F{7?^o_Xe*~!BCV)e5_aum^fMQL-fEb_z$<^^_OIPpzgkSj2C;{qXm zw(}OdWx>U6!P#cQ<1f90TQ9$i*MIbVOnaa%`v%vgZJX?EOQ{O>yB&%w*lt=#cRO$J z)9?NOcb<{{kL+@ddoKJIAy+f|PBiA9c^jw&Ch1%Ki=!MX5Z*(8;)85Bh`tvURqt%1gzFW)m>RPAJCP1b61+=Y0 zo2ew@iE0jm^4%=(Cn%N>>ciTjF1$U}PGTimv>YVAM6@og-+a;9c{&^=6?mmi^YXi_ zce$f}zw@x4-%J${!F;q0n62s-4X|y)*aGx2PWRp{`bJHX(0HqTUkT<$C~;>id9~+eTAX_n-GdbwAOHwr%LN(u*-o^J#7%9YI(zh35zm+`}alG?q zPFb`B2xUtVgGc6sOw+Is(%=a?I}GdcOxk1!uon-f)>WP&<0^&iJMg=ZHHLTNg=t6v zyKbGjP*NBf1#yMl8xahe?7)n1zz5v>@UavL=Dxo~bULo7b_MFCAYy`p2#GxS+}+F! zFLT#T`9`=gUS?0M0PW!?x8=$Dj|c!UGGmU$jQ1k62lET`u2)BN%r z2qWVqW4ka2C6r^dqcPBSwQa_xdK;m{H|`gb5gfD(+On(A3e2To+MZy)03V)T0H;TI z@%O%fciw&zySLxM(dHP-?i|2^QpJs@S_S)E#UvAUvd6uPGi;_49E;%R-}nx0KJ^hC zUAcj2o}sm3Sr$l{+ye_r?oE-V0_+xSFLt={-~wO$Pk)9Fe*Ozw*-WT(X1sfK(qYt< z|5OUJ6zFz~yS3u>3m?O$|KRs=rUm8XDr%Xr@vRl@Nrx>GqEvwyI$@1N$HcH@w|0ow zKW9GR>X9H?_h%_nkgHof!sF4rfSW51v8}Q;C#$r`{r(RLc+(tXKTW#dDu!%N-}pX_ zLOlUi5i*y49)*jD2f?!6n(~sAd7y?Y7WjCA=1c_m8?466e;X*82#uPzuY~c?<$*ZP z7>;!MpnDubKictYxT2;x{ysW3I8j=5Dp}^mb&^$Ul*NjOPE#V~U>vdwJ5tD+4-S18 z4q1jdOYt_3j)wtR2nktHrhN?!LOC=|6#zAw*o+F$=INm)pYxhIm<%5J;l2D}Dlj>^VM?)-jW&8KKGGZ70bNP&Ot4g0W{G28k)m zWO9+tNy^H_DMYR z$&cfwU-b`mL5^PsH1EIk{eLZj3sFqhPVt3* z`p3YPQ|vZdV7q~}={0mrwzp3(4G)&^#`LsC7||-lGz5vZL(UGC0vm0vdq>4dywr_E z_6qG;cMe>3^!d5a&+B1lD!*^Ne#f_OE$9%Er}w8wimp6YtnQ&X8EvPxNBEz2dBH}c zfm7Gxu|vth2;=pvKnHUz8CUdz4)2_ImdA+v0FC#rXo{SW15_ugU$FXi1xd0MnJ)P- zC|%*0y>$k%(eB~z4t_L~HBW5ZgaUet?dBE4NAe z=~kDuENr^UtnGr@Lx+A8CjG=gAjY6=65h_WL)(tj73rsskwGU65DRk?e8k{HJqYY4Z`tQ$9+U`CO$kG+&x>j@`?cbN!fJ>)dLx2_ zduK3)DVUUkW*`O82q}yqmC3!hs?{S6w$?Vq@Hp(K**32ZquyH8>CpZwrS%6Wr62M$ zwFubM{)ASPG66?3c1Ih0pbK97+~@Gvv(MuGZja5$RV=&K4Xjped-=7uQm(+oZjS}P z`R)R{vvWLl^(J2a)_3sc&tAd)?mf)4Vk7MPbi8>6yg-))(|(U~c80(H_x}O+-*^*O zrwvLg(oaGp9EsYGAMRTS5S%RwUiz)i;mH?YzypzH*zA{XG)bEGM6#e8h^{Oq7X)JOF#*vRVzglS4QeH56zX@OqMX=kne)t#p_E;= zt5q8m7r|NWUGC=SCBMge%KEv1Z&rhttX;*$Y`Y~#cazi2e9Dftns^>1Qvq~J?{WQK zRuUsrWA+!r_~^pd`z(wLH~B9#nkX)_E2}x7{1bp`uuxq;2zC9(+R!3PaWW(Q*!G{+ z#s{?_DdaY~&f&$68q4OgGI8O?FB`J#(K>PXO_D-?cqJSypNL$7(O|R zHl42JLz)-EKu=_HP}z+Zj#-ChpyZRTI->nqwr#VkUsgcQ=#Jk6dWif62SwAHb2MXh zfR1~vJ(NfUtQNL6ojyDpDDyzI`vsoQ(FLdbn)GTf!2TD5Y zmqs0S6fVaw1XD=9Zs1K&pwt$khhi=p?4|_|q~PS*RebF8zl*oud^8xPu;Ct9U{W!|CD>$2HZ08MjdqApShM?A^ z$>&)h_s(&1x5F>L^Bw%)o8Q9KX@)?snJ4U)idvchq@9=+C@=%de!aUo^w`v&XeUBT-J#&)>gX_=tB<)nI6Fw zl5-09fk;L2n34^$a0&@59B9yx1U^Jx;}{7r=k-v}lS8pnHw2RW42SZdIY>C*6k6Nr z)j*g#Ts+S?HF0nujSlP#3>$mge~LE1BLE}_f;>bompKrUx%6}3tFW~-kOjcHYCXK~ zawsu7>8>Uu>Vda)Sej*bnN^t#t_j==O89WpLY=Ryl+5Nc%#(;Rd3|bO zJoTij(J~&x>ygVqf{T=Glu#dF8b+IcS92yU(NMHGj(%Hge|niJ&0AG5alQo^7_IL^ z7s%QSh>@nW#(QmC?P2_sDC*{jxQE5r%I*!2^I1IFVbO$kRiT(f z;-2nt?W51)sn32IKlsX5aDIM)ZJAI?gh4KrrR5OFgr!z&we{iu;QTI5w=?ej>?e5l zCr{zdt?QWQ8OwIUUYCAAN=0uCfZc9~8&Ke_xAFDA{0r1&hm)&Uv3qbAvrfHquA+)! zkAhkI!BkpMiekUNfNo|i+YLVc`(MO#=ML`fDx^#(Drh~7v>%d1krAVJWe{`uSSap7 zG&dcHHg(Qh(Uw^C31NzrnDJ5w>MpZ9awpEWha8J2o$jT@p^7ldL}A8YG8A>I-m>N| zmxbeZ9M#do*Hg&~8^IDVA_FNk8}nAaCilX{@PpT6?Tv?g(=?Y6bDj{oT3W^3UPnW1G4P$d36LCW7>XwWki~F;vw<20JYObY#QWnqg(Yt z3MYkOva#yxcL7WPS{Tz$4bus>g&>&P-yYhYdMIx4pBS_WHq{uzYvB#y-Ak~5znL~c z2m~)vxZMMZ_tjT%v@DqSJIn>BQ^ige zNGT|)n9ugu>=yj^JKx3kzx{2TY&Y0gOJJpKD>4#AfvGCyX~r@E7n9(bkH3VMKK*H& zU+huJ+?0RUY9eJtTM#pJ)wc?hVAS<>8^g8%#Gf6E%5I$2GIb-L2;QiSZTKiz8E7(+ zgV#}^(fDQ{O)!PG%5xh(Eg+H}AHKHu0UmZhLL~}TYJI&7b98yb@~H$coPUWgdf|z$ zyon>*CZ(tXJ2$+5)yJHYwW(v#O5-!zPW7AzonYGvo`xtSw|NcDgHs12RR}1cb?R$v zbXL35B$|JW@9ljiV2wwNC~eEve{B0R8K#@K=cCZCI+*5kgp~mY4XeB%qMZ}Nf#nk%57j5N& z(==h(A7R<=ac?=twa4z@=}&(OAHMo3&fj<)o6?f*thBPI0=0Q!RkiisS76bKqoWz` zyzwS}_7C5|C+|Fl%ih{eZzK(DG-G4^e?Q!MmRa~5(L#B2% zK&`d+kPi^dQZSc-eN`-*8S^7I@mpX163UfRRJG*5$$5-)M;K}@Oc}IUOLXR?A8&IDl7q4q4eJhm4|`eX^Tb8ry+;(J4C9RBMSp~tksf##uLmL9 zVLU2_hfk{^VRDHjBL|FK+cUInqhXAvD60iW zV7V|hmWH!o%MLq#g%{2AMFbpIm(UrNsU~^u`jhiIg2rsUvwKPh z6eL>|?eAN{^i zbiv8If#|*+8YDoO0M!-&*w+Oj6D}?;aOKJgPKx4EL3aBb!-L20#ATnP-ulCb46KAF9?|#} zrgl2XGr!mh)jVXZwsuBE%`-6L-<5n?Kg$3@oC>KrD(R+DM~G%QA7qeVL$|xb5v7!e zU=;Gi;tjFJRABB-*jU{%;(d)0@q}1@CX8%N6*mAdn-^~+XJtJxYb(d#G6IPSxEE`? zLg@X*`}bW7SXc+z&qt#@H#q>^ILb0Nl2D28$vQoOEggY1;wgwdM1zH8#=|T?BbNSY zjX8{ID<$ekLa@Qahie%0uD8S@?Gj6* z670;|Zgk<1H*!+!WHQT_FavMJD?#3aASXj$ph*`*8o#SF{1!DBS2yOPrKm!5aWABE z8jO&w`BJGBO9e`4`2o}M3C{Kxn66yKM?Uju-22rp@a}7`Vj~3`4JEbI3aJ%ksaU4A zC%BOb56;hUb$fyj?%l`BU;8RfAH9v~BTr$Pw%FGSsS8dN_~2(h$2b4tFLA8E$uvQC z7bry_1*l6q*+`8Jq(U&YN`$#!UkV<3{yDt##n0n>yTNXn0GZo1Td%kMA9N$$N+{${G9K ztDn?4_M>N?O-ZfYj2c+$#MY6-d&` z#^OdmL`7h2wSf>OvvNFb@G8JL;Bshhhn#m`s&b6hQNJ=n6%k@xycL_ek`|Z=aqmBT-Hn zaHo2XZurg8wgM^^l+6(?YDH1St*4*DV=ugbciwv!=ldNd6qM4&^nU(YTT5T9*lY`= z0=nDbO4;DGmtV%K-~TS2xpN)!d=>W|oZ+Mv;O-7T`TE!J;cKtq&ec;CRa8Ht9w?i+ ztw37I85Af|P^ND`CIIn{3#`13Z&ZuE-$W-lNz20T zk<&5u(f31nX#ZZ-_QLxfw`Be_^LmwxrZMJ7zwQy5d~gC7BT;k~K^p#$zfH0-S>^e| z^gKpN!b3ON6@*JEjOm@c?FAasJptztbLWDJ-S}4cmI!ZXh;QA+IQGJ5{u2@>yj+?u z%OLoa0!c0)W4&1&MlO}VU-*rbrb)R(sUOKWqRZs$AlW~c$-bP|6mv*PjF;d&M>I$W zj#p&>kFbp7*~Pj{9zlVb+iKdsihO!hBb5F^>K+yJCXSGmtdxNalW|2M^rSB&ggPsD z^6pl!AfQ=D*q^6JfQ@gAtNnhr@`=!zCCL^Yh8NR((P1<+vr$y{+z%`$v^NmRdMhPM z3y#gT14xA@_-N_pUyZnPVHFIWn)`@Zk72_{Xfg~EcRmnI>SCDSWXX2sby!qLhOnCp z(;%w8E&(_H;p0<@58{5Z745c`$6^NDL2mO9=XkUyIZyc=>A67Gp*OT>PDu$rO~LgF z5rcVYt%;YV?eAlnA)5_$y2o;KjHf>NDg5eJzrqJU{~1o^8PKNer3g^kyK9Hj+4%)F zr^ndsb~rhjaYcY1f8*=8{@l|z-h2c{=R3@c;O(FP5-)%ATe!ZRn{S~NlK@%@sw{we zw`71z!5#(sO~Lb@{3PzY@B;3k-~t6@vqejIjEJEQnyV7MGfd53A3TWm4A{?0+?6Gu z?en?*9HVjdkW85aQezt2bAhEUb?H`7EnWIO$&Eugd}=I1VHZ2M@SoiS`4>MJWp znsrvN2;SzSy0ZZiUVe<*{CrEsGno*eURNRs@sC*Ty>?zNO0ucYwNbesl9(*K~B z`E7X{fX@JMhs@-G(S#d?0h?%#ot1Maf0`@NXwnTVJ4R_Kax19C zjDqIbRaF;Fp06rB@bjEe^QxETQy{sJpE1IZu6e}ynGhxCN8m+Z7S7}65NF*Iu^O|S| zWr=#|w4u_fE!?B-@YB*O0U*6*zK@lPrUST)T0wzs6fjEb=b7A z7p@Z@uz=*^3Hp>u~TgCJ-}E0@-Oi2Yrn*dwoMVc zx#~P3wI%ccrByEo@L<{D+LKSEs-s*%J-N4tH!%j3D14&N{zq5 zc(sNE*TDvasg=&Jp=y#^u_t{CQK9Xy zDAAx_hgER}WWG&X)`XT>FC7N$i<-)ROp&qCqrK#zK%I|r`Sti8%cK?pw=pBUP3nP+ ze(gNgGUClJTZsRxQIsG1tp%dJQmo_H`Lpw}AY@-VrKK2Ebotff;le)^*jxFmbC_a5 zjmiN(%Rr-CP)G^DU~3y3S$4U-Y4g@rF=WlNny%>M)%MVhi8%LcV8*jn4ZeO)Rpb_>pz1$$i}SZ`c_004jhNklMSe+#$vino9G6MXNhUxO?cm}XN(0(2#BmT^Hr(Y8G?l^L}v=F<~= ztfQ>Op{0=e@97d$?ef!7x#XfP+Q}B@)2hkz6N^=hEsAkJaQw`bV zc=p^O8RSGnhurvZ7}}cKet#AEVcpXIOV`raY#@akiPB@%M<6*g5M%P<*LYul2K-UU zxXE%=E>ToBROYF`UMJ?!2uM zx5?^#VT)2kfkQT&^I(ZHmbhh3ws{#kvW**XDWg7iRD1Wgh}(tGb?uj#*h}S{=kl|z z96|M|wgwXBh=Q5w2p?69?rK6380`u~UwMY6FfbUp12n%7VFGj?>1a}%Kc zN?l@Xn1{(DDTAsfUO55}8Uf?}qbZt+_Xi2*CWrzUVlxRy8!BJ|nhYDU>f-`IZ9Nid z3+YQK(5ijET~LpXad)@F&D(eI>`R}(2d}(>i+dkpo+m8BVLG*MJL$6E?)d`6jHzDW ziQBjE+FS47um8>egpb~O9AEuUe}?UTk5YimcE*0MfD|vVG`g6iCz*AFuoS@)AN?pk z_FJF9#nA>2b`{&rDK=#b?17>Mi!6S!WlIcZX2;54Joq~+3zsWhxDmdIOhe(>7!)mF z+za2I#x|LQobNISt&ks=$e8ebNI4fk7XN}Pb3ADlE#d-ezBA*35`RI)CQ|roukW*%O!y=Lzd|?X6-5iOEfW%MT^A(!0tY%@(uSHn|A?`R)xG`pw zJ+cu=+qp(5MiUl&vgl)w!5~)%0?C=-?L)F*Z9T(QdlHbNVn67g9GDE#r3{z)yYrT2 z*X<;S=G!6?PUZh75hpve$Ft>)bXun>+_ zfkk>SZ&bvz*W8rO_&rwlvt1P8BjbT>Ro^>X4aG_T?u{;;Udr%HP+53$`G%>5->iF| z2ED092;7WisoMGhO@c`$?DtKuP1A%u1Upq+EDN6c=*RHxM?Z#Fzw=Ejwf0$P-zRTt zsI_h3mAc^mZjYm~!RBIzryseEfB4R?@NfR_|1Z4x)~mRFdW1X>&r#^*ik3EL>L?GL(w?F0sf3#<7TP8b;Pd3;qdRpt~#hM++vOocEYnD7z z^dMFihN}G}P3cE!I}HZEdiK6MJ4`fdD??I9JJafD%&1tULcii!*bHSi_1iOcK%Jd2 z-an0BdoGTW{8Y=y55q>fVr`~oZn0}?6b(2CqLOQD(JzVHv)4N6ot&?f`O%yvNl(za zWi`Uu=k1y|eXmx55UiMF8Oe92X`e#$@o@P&99`R5rLX6rQOM)Y(%>uP-%bA&uIysC zn)L)CdNNdK4x{-T!DbzoIy}%FkZ$PCV;#Ep_;abMZXvs;2%9`L+%b94BLi*-^qDcK zLnB;b`*VpvlVxCq9ESvUe;yHXYX)EJJ8EKJeg|nJ`!(GYmRp?mW{9rgE%r5-b$c+j z$i@Z5ImbxcnB08FRW0Wq1%Ouc+&OV<77rP0k*KgpNPyZHPedU+9fA0evO@c`)O06hm zhUFF7fg?**?DxQazsL2fH*n+1+xW(}et_qmy4FJbn+^8+JvK8SI$`Re)^CPbf31Qb{gY&W6dMP)OMj zaAKHuMRMIBawPlg!v|Tr-msWPQ^h+0CF>&@Ce15`dBnI>bHXi z06)+yaYEc=CW8HCN1n%?KO*OVEN)l8E+2vul8PbTwS$?QuT2KgYR%{&p%^?g;EkVa zh6bF!M%j4KLAH5_Wv0Osw>`lb#g&?X<-6%0=2uz+=_@rENL#mKrCG8Sd~7r7;zpM5 zK398IbCkxHOwMcLjX3^IN$v^#7S%PKT32)xhO}+-g6Js907>9_2QvvH#WE^wVe15) zzGp?sn+e^c+dX6&mNpSRO+G#aS{El=CJKvGu->uqYEwuY3U(_>Bz1aX^CP?!^du30 z6Kddsy1D_B8EK7LF#-kCx}@4?JCDGWwh1@Os|W$qjh%QQg_gr;NmQk+L!3yfcXmeU zgxI`s61W;!v0gW7xEmZ@$72${M65jo6`e-Ax5BuV%n+_R)t+FAVyiiSvT$aWZ&}Dn zH;z90x_?7>5f*ONfo(a_bTt=P^#WHruu!QUDlIw#s8CsY=e?dBS$fC6S}{!pz#hw{ z;NE`5wU0c9J1>3`uYBuknDhd(2z0l@w4G74pdEg)N3DWVXY6*0c{4%Ej3=JB3CLTR z=N5Y1?JkZ{z@&3fg1exo}!UZX-NnzIt+B;zwm zQ+v9fE4ZMME~rIP?zdvWWU|nd2v^JW2$bnd>xJO&Q8HFw@+CW8ZLTF8BW|!}a>Naz zL(lf(nWP{5)pbHK=f&}6N{I|M=YJ1^ME?)XMQ#c@`+@B1RySk)55j?IHb}_IRdjDe znS|3|?nvxVh7MyVoFz&&^DX2+y2u5Hq~~oS-s9iHHPz*Q@PbD3B&ogBmkcbYNs})f zuhJtqPDAYYuyNVGoH_h$drF?|+=ZVR0c3v?7y?S;6|>^v^rsc{`aEoJD2FfD%d;d4 z{IUplF_DT(-k_JW*ma7B*M3-xHOk5L=~?+53@sC3*&KL{k_4A2UtP^R zT0EHWGi;P@n3=U1T5^wzM$GCX^Eo}QfYDKfQTBN1nbE(bPz<$9r z?QrYHElj20?!5=7RZ&Vi-ES63Jd;2jppc^@d~mVHN1k~SAN%Ad@y^8pJ?i{J_%c3C z+t!^H3>%T^V%0i5E2Y2CA(@nGpoy^(hOl&HKSC2Zf2k8|CER$4p`vHE8|;EH6Wgq~ zQeDY~vysd3@+pK)K$Nc2H$|1b?-H;{gh;#+0LZXWt`)FK9vSe{S7^>ipejHLco`sc zLe4j^hb91ruCI`kFC~M1|JY!2xK-+;|t*XDLpD2VC&Lth^ zSspU5(}lx0)~H>E^%M?=$)PO<_T+88qXQD(X%d|bQ#Ptpx^3Q#GDvR)EG+Sjn2g}f z>kj!JN*#jMP@t|c;L1Tlp@i0jr8%c?EZu0KEf+*?>5V`zM201&ki;W?7g=_koT1dg zt9H*VbXO!o#@h1xQnYE9n%U7r$&?)oSV+>*Ot9iaN6`qOx?&rQsnLLlciSPiN_e&R zwDoZ~H03j>tz&JL5k+*1nuHhE6c2(X>T!c`#}>kjTMHR`LL`iV-IYl2$R`u(AhZuK zkbC!*uW|sF2R{01Zc0g;{_9#ersPecwU#&5yy&Tyd+ul8On1OWaP^7D@%VEe!!N)2 zF80fU%{;fRfTEa6f$GwET~U`7KHcqh*ldq*e0+lY_s{y_S3sHOz87Em(Z7wSORbR7 zI{ua0*YV`%K7-}x6nj@N07M=F1f~MJUFhGa9^xpM8;S>n@9J$VzE(Jr6-KBMPo%42*eE*BVP)@iPY(2$M4lL4xEU3w{gRxVrM z^EaUX^;m2Kry2YPzZ<+6)QU>W18YUn+Y4fDe~q{%T|uU*%FDt!@W zkg$`e1MTENM%k^0P{jEuzX|vc44yEdLC?k)`7oft{p0=SWU-~&>>f!l*LY1g0=QvA z0Ps*2>WHA&qbhmzP0B$OcaLA z<(`0$F{Em1L+tZao`uj1=pKz&3HnwREDAEvu>14_e};#V?@dPy57!)Vzv0J)LfW<= z1Q&7FRJ35~yjZuuP8Xb2!F+mzr$6y=y#Df!arVyJts-E*Z%KsKAHpJH6>S?t6?Iv# zEDNS-LeUl>C{mi=E9gBh8oVa7a?lTVdpz~rNAcLFKZ*Bi1vW=stDle4MOK!KC-(Xc z&f1MzsiEK_RI?I{qc^Mvev2#8-^aM`-;AMz!&rg|m*f#6{;(|s&SSEj{_He#@}PsR z99EWq>^%Ttodz>KU?ApPsX?|<$hFO7^w5nDN7x+j=#&oMcUR% zqOo2f^lLwkCX%m&CDWB=U>fhu2M01ZF~M1q9Wu@o)-0%fVF|iUxNar&zXX&$nSoNl z!Zky>0Z2NKlwKmfKO|jASTAi10?Cz&DXefhVN7OcxO)Pwa@{e{m9`Fk4FOv&0%z#5 ztY4(}G}2(;ymituylsod&qoL^nAeo-4i-$-n_VjjsqEcU%XS|;(bO8%@adjRHy8(^ zj+>{Rm`VNGwbh|U{>KtR&W*gj-fp^9pQnNkYXM5Llqt?Hj<;?|9M~E#D}A;9KP03* z>~~Ij`prJ%ZD2x#znh06zFji`r9#lky=0kyMImK^&KvAhai)r^k3EK)PdttH?%qRP zc9=^OgtazE>!Q8KP}|OGKm9mi2X*Q6ZMiNca2h`>Rk68s4bOb;v)ElZ#raO!JbH3R zlw5U$izK)hJzEQFbOS>={;F6b9fA6OXrtGnL`xEpC?)E!cdU~!G@^ad_saWIEy5U{ zvx$SE3hwQ15y)cng!WTxn}CegI6EK|Z;DWnHt~dC=T9yz1h_ex&C%gybW60_bZLQ~ z4X>UFx}y1{&|MhU;T{an(ceic3YexFFWPrCzw&_5A;QnL^^H9Z0-b`23R<$uJF*$W z*h$D#{fXq9qTUz>+%$Bq1_UC&Xi9y z7-3kL7t9_>2qbuhEZ@Z;_-dKhIwn?SxQ5U@z#3F4<;H@>TajiMf<4V;grUHnOXdi{ z#75#13J*}krJvDiU)4*~@2jvdPvh6VDC613Eo4b`$);0F%$t`9i!PX^84D_wWsh=t z1y8^50^a-C&rz4!4DjWmb$}#;#iB#1%>dxu9K||n8XuR2Crh(jQ1H}?FX8bQUciSc zz`OyUA#$+y`H)-VqE@W~on_Yt&{Rg;N=7Z%xn!l2gw? zCK;C0cG|`RtVNLwlV_P>_Wmkwh}bFT`bfIwcj&lX*=OK-l@;uu*eSxBJd(tVbiWCz z%RGGOz`Jx$5*lj*oVTJ6mQ&Na##eLFcfdK881oKX1}(|z6>{jUWcOtK)C?_$e|nH` zO)`(qrtrhu21AtRz|Y5<4^z3(G5NPdf3}^iKIeHQ%*GT*$_-#|i9_hD{4L`f!vri` z=plPzVs1=PW44%xIBmb!q6kf3aV=~hGxijTA>0cH#qO_i;>^3caiCs=gxI70jk?P9 z`|M;muD4IZ&*(+e6YknGwZpgcy?TXIX|?6P@HWnBi=z*pLP5qD{3RJbvG2%HlxEp0 zF`U|96)R>H2?Fyf0?&U?KUgHy8(S3w6c#FEM(|@z`^6~L6_iSgk~k?b&^9FFvFLaD zUn~D#{|RF`%6A|Bob}QO+BN0Z1xg>w(rOxNdseU%2$lxNQc%l`WutiVV=v&Rx4(^x z*MEtEg8kV8Secke>4~gB?L7mQW$B8)bYq~kAokki0zfOuJY!LToL<2bFT8+q^*WY$ zM!}3yEo`sud1QFXN|08fdGTg8T`1c1%C*#yj0hk~j_ExnK0$J!-Agp+bkp}#Nx?GA z#c#B6Vta`;mi$S_CqkGf$3g+AeGVnOFLDtFI_flBYS3a&8RszmxS4t=iWTFMLAj!T zN%vUZhr`(o3wEFeUbFE?);j-aoB+t}z_SKF9Nw0We_obFs~B9Suv0*g3^!mw>l4uL zE#1&`Lxj0-J&B;7&{YY#A`X)=-zbSUQ+=c_;7ce=E$F0ZvMq|v{rjM}e;@$@C!tnYG-QAl6C^#Pj~4!R z@VJL>N?0>7_dz1tS2`nwmE7RlW}S{$MTT{&E2MW=36Lo`A?sHGJ75HoYx7H@R?8|* zW;_voW-l$B4zv{th0)ZTSUIhg6}vkVGm|9x=fq4lewh!NBCPI?Jd7p;AppA3D*|9@ z4W1xSnIL8HCR*^az={b4Q#TZ)%vcJ5)2sN{r$3GFy!|G2`*T1h)MWwYsUOYVIY1Tr z{T|aaC1a?;6L<*gWVYL^VXkOw866kJtT10{0b%?$-^A>w4K&51}%RdLA zOM|Uu*_aWI<#{?GXoj8qGOVe2B*7p)f4?!j>Lw}`rCuIdOm-+=rzjGolw1;> zl*7)}VaiCt$_+dTK5479t(^*;4BvvO3PdKLD3%Ghm}flp!V7r$JKw_nU;PZHWrEg< zx-=zLO7RYn7XIh3eQ~5Iq%=h(rC^yR$mvzwdf{U@dF(OV)8;~{*s1IP+dff3XZQ-d z%7~OfPGBWX68jTcSP?qM@g*`II{a55S{t|$4Xl%w4{Zmm3GI;7CXGfquLQi&-MMwu5!Rp_(2@*uYc9lXD>-}IslpYqSFVR$;KI9$*BXS; zeK3D+45Ql|D|rxwaP!cQuRAL&LpV3<@JB|Aw+k6=%ga37A{&9MRqI^CQ!16yfOBUU zK01?eV}E+u4ks1r2s2A|>7Ghg*7+WVWp{I2!y7Z1ckg?|wF_l3ItDFk2`w#J(Txm+ zZ9QRzd7VL(S1oI$((?t<2aRIPDJ7znku)kSULdML1z z377>BaE@EI9>L=;Jdc;(dKJt01q8sdC~5&F^rk|nsCDt}B&hZ5Y4lSh4p0&(suWy( z;xRn>@t1IMyv2EK&4heOzjpg;h+K8y;EkpXbhY^Y{pidl#s2F6%dbI>0vyB(TbPHg z^YAP~hCS;jDK=B|A(CNi#$w~Iwma4$JVMt1P+;BRL=Q~Z0eHXz2XAN$RRC)41K6#; z1ijfxQz|!J8w^9K;;;E!`c};`SBcC17Q=y=dqxMA)D22BWiErID4R3Y#YQq!OiXs` zz@T_(;^J=rI)9JCjec-s3IJAmf@Irj@UjM=MH`cd*K7c=lJ*^@!2eiFSI|W$K4@9N-qHhiGbA}{eg((6(AYt6!^ydmI5e!27*Q2|! z2Q#>>i{8Alg`B9m5s<8Gg1;FrZUn?Fxo3D}66e(F7;h~~g3!_)>xypLy&M9|<(Tv= zJsjt@_f-t~)RWg3Ba%}b`F`J{GvU~m=RFF91gjv8!d^he9)dXg6*FKG)Y!<01s?{OEhQ_~l(po&?^!{-t~R zs%S}n>i%~(>I#Y!?67M`pOy*p$ti9<{WNZU}f`{z?2mwc=hN`;ILNEYo!{?HSWlgmY|jXW~U@c60(hlq0>DFzMz@)egAQpR*IB*KW+FQh+4hvoR9?&+T|dUXETNeIXtNiti~v5ITbO225RA^+oSKYaIv) zte%S@OeHu#NZI7fk)fVgNZI7RVjTUs%^~Hs_GEJXF}LH4r*fj%NUTW~ffUpDes}6Gb4fbf4!r0xUSiKa zJRxFui=eu7M=W;G_F?+(l|-lHQa44(Ax{?%QpD9BpfU)F?YmBR|l)h#HJ`*klc zBXLmv(h{P)3xgYbF^jg9AxV6+2t{Gw0hcuLFr5{7GQEbn&sJ=Au8Wo0_sLr;*EVL+ zf_+(l?FMJ}&vE#dgLfA}5+x&mxI75hpjGNZFKFQFB9X<3>2()X3)*n+7`Y{7L8w7p=iHz^b|JpOD#@j|s zk)%Uh6NU_rX|v!pMbwnL3^G*e0ZAfA-3%EPw!Q<;jCM2=#U+x|@tl+8xZ=ZTXDxMl zj3Dc}Buhq#$30Tmv575Cm#$hm9_&ypJ7vN^uQZSK`pj@nvn6m^xI$r$um-j@=*^Bc z5B*j!hnK_xK3-PrfD(IeZ!ya3;AdU0rX2{G2>VVZeE>dDZZsA}hVR7`YJQdPQ%ent zPpoN#MJGZ~X9Fr{_BZ%uE1P-UdH~pdVd~kxnxh&S3@W7C?1sw~v3HVGk5_~jkc=R+ z>^fn0LGMY5B0b4$46%|S(FxbY(aI9__3H{hF3@}Cy&qCyiFh#B)bX{{jHQbdJzxMz zoJ7aV&5ccb=B@nA?$^F`P@3~*efd|OKH<=;?Ffu&x~?G0oG@!gY=+?IJ-?MxVMi1T zs&?S2^tHD7^t|8Q=(9>~l`+J9G8gC`sPlx~e!-ompT#TR`vLa5_c7OfZ^X23Yt+td zT02l0fk{s)t*F@a6Uh$L~%H^wPj1a z$SB^LB&Z%!&6Ocdc3c)vZ!}X%>Bbt-f}n*)5~L8(AFD({ORn_j;UH7Y2^B}aU0hfH zw1iU*y_(GF$;!~!&NErD5@gv3a2WJ|OMnUegzp~VH{SO_DH=#ktJs5V4A@1=V7xiq zqtlNGG&1PWb%7xICLotS@@84IH>c1%;74HvzKI=1oWM?zJz&OAPKH;A3>8h)iQ(V~ zxrrF@9e0Z@8qR@1DJtJ`{|nJ}l(wzfjJZxJv4zxeWQlulCEe4(HNJ28IuzX!_#8w) zZi^9%^~rILNjtr>H5o`GXEm=Pbg)2Vb=zNTYZ$d>(1t~oD38h)yc-w>PYiIYCQAQ^ zHzhMf637x+zp-zubf548@bjo?o~cHCFv0~ST--`jQlv_ABr|eQs!sF?0c5Rf2#@0X zBOwyJr#+37>@fFmOj6VX?-{%$guqLg;+aVN)AQDS22p1iuQ5Vp8iBu+?GjkeObGg0us^CMl5}?cu=oj@Hq;@%p^k zpdM}T(NBIH+bdVP5i_}w#^k}XG^75}xxV%Qt*gLLxuHqF7;w7>vUO$~{VmItKhY3J$XlE}tClk6WTK7-wQe zprpYg?}iqaytYAryHT@_4lpj=&yWhS(@}ncy@k8wiI`Jn z&TbPeEMNN;z>3M%@^tm(*pz_RZwY51JlpH7TwIkcL-k2|q8kaN?5#z}eXWq;9wg71 zlLm8k=Am`*yUCj$;2?^YDJ=;*lnF}4kecB_5eWAJ2HNTb=6lxNdQZ)Iz*`}?Y*OhS zMxzP8DABR$QPL!B^YrZ~ns3L21P=VQ11?f~3V)wEk!$>t36Tv5!f}JQI9_}#_fHV3 zR1+e(c}#BZO#alk3-U=b2~l_D^31_Is2@u+X|RVaQqQF7TR%Gnax=1UgMPy?q-` zzW5w=rNOI+K&4tpiTylc6&W6IfJ@w6DTbp;A5?N z1Btm=$e8@6G)4j@R=j)(DVt);M!>-j%@KfS)LRnDTG3rDA@aEjV^*)W)6wZWUeG9_ zD5r&(pbG}6P8^*0CuG&CEUC1RNZcW8<%Q;jdfU^=FzX(qpk=5d3TN2c)onOv&#bn5`tP;RvnfFHHqezE$Y^VCoEjGdjTt?_6bCb*U|nTm^byen^k;2v zIOy9RxRg8+O*e~N2_xKiDdWAUHIh=m63|@8S4^8D)bk7IW{V32?mY8R{NnmIp>Mw4 zw$MbNMPQAjCQp#+#(D=(J4^`Bd4tEFe-2k3dmQg-s~}Jt11+pM5dk!z+8P6`1h{oe z7pwjWBP|@OFur`xJb6|ES=G;Xn&@@ZDe`EZf6Cd(^D%>iEIjWcQ}VL{760!B6 zwFbedws5Z>tKIj8Q~6^z*ov(g7Bbd&hyP=OJLd0M-8`Vp%({aSL$=>aQuOvIG`AHi zr~OX#Y5}v3tKXwJ)12Y#9#v+d2yN3lDSBf{j17x5T|~Zn8EDtuVXZl%=6}eHS9tkf zi@>xdN$tH8P=IB>plr9;?RR*fijzn0;N}xg;r(~tM!^DWK2rNy?d*vOW;nK7AFYZq zZLqm{15bVYC7f?2oCA!C>WSaip z)yEfNedr0;zO*vj8<7|{1VKMB6JRAZh-$E63{}69#L>wZG6>+DWunkS=0>TA;RRMHp-+e z`fOX=9woM% ze2)Eo!hGcvx1M?e@BQ$*-I`k98QS))E{yH(skf@0j*fBl&K=x*_8EK#U?+kttdhcD zYKn}jWz>i@!zk?;8J`Hvqtg@Z&qV@Qcx1Wx*8#fsaKF)tB*!5|oxt-kvm<1FL}TK< z>NLUVNn*lK%1|qa2;A&U^%REkxGsD?} zdabkBUmhMNtI7_l;V`>}4s()3tc^1)JLxecwy{zjb5{yU$xE~&Mdpw2RAr_74YhWC zkzu}UJeZ+lf=`;FsHKhFLeFgJ+7Xs`ET>m+RwmRkqqdqqCSuC`-fb9PajGZrk{&L_{jc(I`jt^{J@hl!Y~fHitku^Xwp4#lr(?&r z3KUE5h|2&<0=IFc(fwo+g8e%)>K>XLk!1sVV%{s$gi>jb?;Tq$5MD60VAQ zc$(qOm}))St;X9*6P*YGZ=^I>0CS0GI@pH8MuWm}+V!8|Y?(y;N*(+{Bef@8IoM?qO33ip(h3_vlOyFZR+7TU#kJ z&O~tX_~Y1Zx7bMm%7((_y`qAZoh$B8kl}H2iKJuRD|j+t1ydNuTSvm&$uD@RLzDO^ zyc_BCrb_e02FY5E1 zJOS5~k*^C#4kjcF1-rjJQd4gTGeC`6ni7wrvzs`fD1kKE;Q&Xwl|vm}SEy}_bt6Dc z7qo)P`EWRc8BBYwmDMC)E-{JCgGHgxuaaTAvM*-)fZ(A9e!(s^AkqsAH8Xns2>-JLvIh!67-9ch@3t_RbVR&(P zhUTQ?N=v#@Uhs(B12m5usi*{NghAp9MbK38{^?rs2L+iA0$}}JjE~HJ4q;*X3iBM( z)D4aWm}l&CkJB61as9C;@cJ)*iA5EgGPjOno{7?gL@A_x$^_jW;p*d$W4}2<-7999 zJprn8MyRwN-kaf>D`W+KF~Q~4G2=cz=sHD32C=~Vvr%G-bj)FdAi-JOtuB z`?p?pGetyPP6^s}nUcblB&*rW8#y%t+{82`M6aAgH8tZ;6}EPGyo31)R{BRq06{sD z0Go)hMnEk}(`G)0ppQZ0{knQ3dJ99LNPs1F<>ax!i%brAF4-Au%2lQ|g%;Ad_FYoC zhvq%VB0m0=ttds$L`53j5tjGuWW@r&;2qEn9>u^~P$cmrq+BU-k+4A74a&_T&3IM zW+6-SgeMoYNP?Ej7&B|cZ{?6-2%9b`-vf%?nn3xBQzq_#PqJA8zE<79oae@!fSPD& zt0e~WLN~|+&{9yR33ZvEM@P8+#N(K*Ud8V2U2J87NX69OtyNmoptR^w!GuL7+<5v) z9Nm5dI~2$y-BSPrwL38_Ayv`f?t)&0yxSlI3Vfr0uPD2cs&IDyX;j#~r=V8l_Lp48{t zi=95*=umh_SEL`AZ3)e5N7m$-&^*n<*S>V^Q4QPaRZEDrXnT__pwt$1HLa8W$YoG089{dXiKb5bO%DH`iY~vzL>(d8sys$Wt^i=d#@4 zawwyJL^?-)C=ipy7I`;`TdLIw}-qoI1L1x z`FP;m6e!@4&S~Je4!HpE=prYxQsjqWPu@XNPGnGlaO=j0(Mc&NWkQ`M=rrNxV~^wH z`VBm|e-A|`=zb5e?IHqyLq*FYc<~b-$MMZu_^>Lbvgrp8g}^DQSW53AxMay}b9DnO z(V=0|uH_iVTHHk*3;@*9!_Ss0a=_3^5sBe?qDzl1*u956^D(Lvs5q-Xnn_ z!pTvY5@l`=Q!1Bvn@IN`ZWP40`NtXo+&6#y{2{+I6l8V2_dXyHh+3w*?Tz=5SSgNc z=`zw!q2x*uS4OtLa1d<^K+SozuazAsaVNVuRFRE;DZu2CKl*%Z+mS2a)P$sWuv6-D z5_SIy0JS&mvgjy#k_aBNMBWyqHTWBiwRKgkZXyTcH~7u0Kw#DbL6*a^nPmfM%)I7R z`Xos(hIcqXl@qN@F&F|Vyuq%eg%TbAK4ehDh&z@?Tq2UZR=#8DlG`hF;%VRmNM?an^`f$tqk#0M+mgzjV+oCq{y$Z;qU!yz&t`8d#p zPbOKOY-#m*(giVRf)!}Mr9Y4t`jC&8ovxAU@6b{12(8U!R_I1E1k)KjLR;MoOZrD}L#hQzLgSv(~&>_82V*gWo>+QL48r03bYxAhDj#z85fE)m8Y0sEJ0-&GeE z0mbcP14m~QqatDE?d!J;Q_F-;hF!-=FD<+@Z0(`6V4@~_1)S#7vYJh>*dp5Qli^I9 z@%lLsZZ$CG0`<}K#k9*ZjWIzh_`E~W{)$M4`H|Cj#*>a$Pd zURBJS8T(qhU@EPQNGvg__PxrE1D7o1&SYYnn&UZ%9E_d4fkG|O)aB_qL$#pdctsGm5%N3GKL0y|THVNhERl*AF@>W4bD zY>debdmFU)cpwGh)kkXEuLiR=@lpA^d0|mgqWMGe$sM;Li9tGXnh|V9p(W>zQAqLJ znKn145;mko3FlO9$6o3orD|R+b8r$}!wN^k-QF`8{Dmq&q{}5Y+CxYC8yq&CyQP^V zYS)XtiqRY6g_-LmYK|lA%uLTIRz|>xDXv$vLt*%4>)jqvv(EU%{dKp--K!qn;f)>0 z6da9$1Q{NOoCu*Qq(&Ah34TLwob*hrZB10*@wg;%We7x#zBt_bJu1E@)t(*9WycMd z_K}r>p#s1NuYc#wjXcEEpRaHMSNLhMW<>_iwKXk1KlXpZ!|O$dizm)>P!FM_TI18z9rWVvgg`;PxlQdKrR9$BH~Y!7ew-i`2L>(o+JJ|@_>Zk zCVkd459Q%8?5er;K7Bh4EiqetervBaXU!^?%N};wuK&UQx8Hr)|M@@vFZTZ9AMF=^ z*}whczq4P>?Dv2B2m25I)4#L-{9paI_D}!izqI)Jo&EZLOZf?5kzlxfpEIrGs~&J< z#p@|uN>JGTE}>=<8*wnC^!H<5&QnKZ(|^FeeCKa`gjG%XSW`P@1|x0a;DgmoU~pA~ zE#N+`l8-vHTl%+cQKDT*v+D?6@4SzFI(FGlf2M9q1}s1rkcsIHOefi0?CD};WR}9v z&lU*0hOsPhWXYFzAmvv;fZ56d*iN=0ix+K#Zz)i{FO(`cQy_*K}3W<%}e#O#bvmB5R4D1D)Lnzfkw zqe?yq)Qui0(^4Ub!gjGx=BZ;l)%&}8VJ9!zl&k&V7A`OYdexj8fmVBGBSw=50_O}? zC)v+SDI<+bA!>PjM5y-hjja?{-sr=b&k>n*+5&+{^j@fzTE!FfBj$C-~A{5k^Qg#eZ4r}oeP zn}1<{`(OSu`@dhmvtRG9>w2wI_JZrQRCsofpiE8?Q&p?>g`8g`HIkIo%>egNye#CZ@ z$oNPTqs4|vFQzwn5ToOoQy&42hU~^)6?iT$hMbiC2u|A9T!B}%qw5;6VMn6*59%pQ z!7TEi#wDKI78@qKOL?BpG*2(;gm_t-OU}W|ZEODQT8DpP&Wa|h?XN=UKyQa}T+#tp zL2q`e@DZF8T82~8Yu5a6Vfzo6){9`Bi9o!$pf!c7in^FYi&Jl>#h2%Sd7io#EI@&0 zwRntgeog?G8|7{mwOu9+>x3)ky;o2PF~RWU37GzZ|Q8;TV-78Wf-%V|Dp`kx0Fi;eaqt_@WEWuGt+2ue{NrB z^BBMseKcyE?D(Opbz;ONtEv!{sTV+ArIwl~%rZXBvw+s>(inVAK+)DhBIuln*1(A8?o7bSjgcL4{S zq`F_W;lCPB!G&&NmlPsEloYq%6%c^PIhdR+00Ah{iK+{D2$FsZ9ASVECu0|~2L{f* z#mD8h3@xm zm8`z6eIIyX&=;mqKG)Mm=M-@2hA0&}T+=T7hXQAyB=^CxvRYZ$6asfiVazz*1LZw< zqg;M?gh6{#*MtclC>oDR`|0ZCf?J5&YOGbfDc`Vo;i`7kNCZzQudZ%iop0t83=o+S zc_pq`u?+9?6)hiTm%q&Hk9J>|{rdW{|Kt7l_PgKz-u~tfzqh~n-Ix6bzx-nU^|F6! zVSn#talKNNy1j3+JKpwseHGsTU0rI08D+t@*U`$x2S%Fv6JO3r(>-&w8pU$%L9ZoZ zYrd{FLF5H6L9=WzYff*-4Cbxj#8kb*N)JT8-~ARpJOe(TsZIjuB~YT@^Efw$-?K{V z>_}Wutfy_?0Q&k!NMWn&V*yjD7WY0lQ!8A)aJ zEHgma?5joDHx>yoNu&3<^f0Y89jlMk-q`ZM-^!RFQ6dOD(fFX_H zhe$WN@H!*c-co31cAkik7zDAt9&O4~HJC#23OUC7^hTC|yY6<6**+I6;3L3k#Dnlz z4lwMlaknfr;V1U1)CpUgOHA}#8}#UbV&4@|bXmCB*DLIA{TI9M+y40L+wALic3arr z-?#nEb=m(FxBbrCUayzEUYFVHstt4hl(rrOk#JZ2U2{L!q^)^bJN;b3 zT-gF(!=taJ8dr#cnjpyBTCI!5|0k{hFY#U7W#Su%#4iYszCpK^sj~j2H7}Jy;>v%Q zkwE%)odp^7HStKuf5^=0ewN@908bM)O{lwn#x0r|D%6Qf6pI08ozDyTjb42anek|V zFydIP`rFr-`kO+=BV(%Q!7{I+<#?Dj8EOupl zPJs=cD#$I4z7o_E(81rQaXBrU}uQF5& znKT#&v(hf5BP~2Lr+i*}0NqGAg@dCm27(eo0ZX zEaDSpda55%j_>peta=|QBa_JyA5i@422qy! zr)Bfbc`AidSMJ#gZ&Hx1`Q=M@BS-~4-T zz~TeUdk>CCzy)3wo+r4U%G21EeK6S6(EJ!UI=0PfZldOrYKw9t9zm&CCj$uXH10B| z{{1GP+Dy_VYd_zsuWfVS^!iw1p}`DyKf~Ps0>GWrZ`as@?mhjYa7HH%cn2s;0k$Z2 zdZ#D=^g+1f)Wxx>?FUn|gip2oK(OZ1=Ajjume(}6?0r1drPkD}0xWZ}?__FfW1r2@ zHk6=RJ7}fu5oMi=GNSM;X)Kc)uzZeusS))*yUJ(K(G6)Y|I(VBT2cN`q-#P`*(>jT zALA=d?m|r!X+3$T0+`!4a(^2~kjDKxYgXQr!;=eu?CYIAd@qyfC%ZTna~!_sD$-br z8l8)PaYOyNWvN}4y{;=y{H!D-F5%GPML6Es1Z2??eOR_<9ts^jc_2cvT*MO5y~=B5 zE0M{HkK$tA>!y;mu=MCLnxdmfCuJM~Ive3)#aIo^8(Ey)r})QuM2Emrjc)Kths z-f>s^Rd!gEFD+?W?-iNvVn=TgqlcjmuLg7doKw8j% zpl|Z=?Eo3xBLDN%%?@>BG^i?ZR`6_Iz5*oxxuQs`4{PFXk!;uG`7p5(sBzW)f+y#S zZiOk3|iqy;=7(j&>=?_!I`v`V}~9;2*$ZwA^e z-gloKExD&EiOR$uX!fX}A68>ycnI87T4%))hxaJ@v1+HWJ8lDr!Zd)dq|FLM7iD*~ zcb-X9^Lx1M?Oc`D{TA>F1I_J1^uF1mw}*M;G1?9Z=xsZ@8KlivNqL+D>2W1b<6t^B zy?j~&BxOqhV5qRn<8SnKdk5MfV2nJGD+E9;uK=Vwf&gK7V+)+w7-nH#7G01QK~Mg9 zvFf_DN``4}akmXMPC`90f(TzTW3Zcpe7UEi(9~orL(n_$Lp##dWC=8Db({if)Y=dx4cJoeARxwP&TG`d zZ&?XNCq5k_lv*;JtfdwKYtz{o`?vZo#g}*?r7w+pl$m zhutC|q&l8za-D%`!RD~aT~`N$=$v(ciS^fcGq(p`uhriKx7-&6_*nf~F)>g|=_roK z#2*oOpi6kYLtAy|f#;OrBf?(ojg&jd{rWg|S3~L6X^b-5rn*>{RW|gST41_;+j~ zbuwnz<4Rj~VqoX2>7r=xuF^5R09ClHilB(o$bJ^&5Z$|`=Pvn;(*eFXwM6EptcKDp zP`Ev6MJ!G`KTo6P(ZTiIrEYVLepd^nUZxDwN1+;ayI)=LRuc~blX-d!H!Uz5&sQJK zH=b{Ed+KSq2oyUWDCfdV`LqkMbWug#->Mb<_t;DO%X@j8bQz>L1?iUC#ubje#c$d zZq=(dRh;|Mt``r4zF6pmIV=z-!1o^8D+g9K1-63;Cadggxy>Pj~ghS17qPa(su_Vx0xt z*CGsySp;-M)THF}YfDTSlwdE1tHv00-qs~P*CM}7Gb2LU>OKSw){HtD*dpwe%t-*l zRZyjx?Soz=0Yr5?WRuvUr%CiyNRYo2DqPwD@ z-|jhDiV1Xj31u(C7UFujhud|B*@e_Ejl^IU6jz7Hpj7P4xCt_mEdS+LV$```h$si0 zx)x$=NH-2c5lO8xH@l^lhWs`QbTOD)4Jn!Hdlt^n`QIW)6( z%?j3>Tf|iXfZ$zhPe#^{ffr)YKQ{)lCc>J>%f1Zmim=KxSC`_nhPAG@E{&%>n_Ls@ zsP*$>su%=PtTLI|jnnz`F7IsHqoVvfr6|C3a@(^q7bmiZ?M*Kb5D)D7 zl+h8)IzX@klu>r*O66EbJ)@QK9EFA78X{0LU;CUXWL@sLt#nUK3bG40AzVPsgIB;@ z<6=gD*vTcE=^Z83oqSK`N|Po4p6SN!^Jo%ct?!mpU6C{D7uLEVcxDDjM-a?+0MF(-TR`|T+edcjj(jck@1-_k^|)N<|lcwuMQvHj5Y_4 z7mTMdHnX-`yTHI*Qq}L!CflLR^X)zw&-{+HSS*cjSoR@nWS#1Fmps#be^fR^kUWe5 zdl=-^O$D;h zy(lp=^T@)|KF82ISH)+9eyecFz3~>TgjM-ZEWf#xHLt==47O};?6P)O2Lh$v1%oa{ zb*JTJ>lqv&?E)&DZbu8cuX_S&a4pH4BgeU7N#tIQDXEgePa_uo!2JZ7I_JHGN;j1@ zNZIIZiP8*{ni9q_s6ua`wJbp|o|wSAaFMhFpjG*+0{12`u^?X;rwC0emCMBStn@;o z#d~I^Anc$_LpAz`i zFhWPIoj_ag(1RJe=yqVPLZZ`xRV!Tu2>YT8$$|+KfDw$;R#Xl$H-jZoP`bBw!rG#L zk%43g2n^f7MGe=jgMgX{DTFe{OsRkC5-k@1KtR90cw@|(OBwiy`Vr4d+o`-l`>|Co z+ZU~F+fZb&f2W|rxuw3_yvEe!6R$;N(Iy7WRSg4|-YM7^ft2cUg>a9w7OU_H#uav; zUDR)FD?rC4yo$_}Cg_X!w^^KP%lA}0f}axNNs9t2cOG9F%UZu+_y}9Ur461pQ(|-8 z(8F7};(GVEb+{r+@o%(>_US5B+dW8XWp|~7ckc!Pwjt`kGUXAmzkNKX`}!W5hrNJe zZIeb=T=3kjU`#juzS_9f_W+h9v>BAC?09Kh%9Uz3ln&Tzh*S#suWaE&Em*dxa=kou zWl@f`n1b+nlohAhvt2BpO))$bdlWEr9+54qDC?oB&PcyC2=5t`JYK1*nC-;_f?t^D zunI6ejCM2^ZG}VxODx~%_RsA@7}TU;Zh@xdzt&yO#hpcgk|%j)K+M6Iwn#tUO#r}c zYa)=a6qY57rV7#5(2Cc6@owT+4HEC!5>f;T`y{FnD%Ua!X{G^SAjxY zK-80@Q^6T6%$SNxiu*_-6;ZCe4ZfiQ|5}P15Mvfm5l|FxD42fOEN4d$Kisr_DqV7;pgY)=)Yo4teYRZt7S zBcMNItQ`RB*tq9v){i@;nJUW2x}5OZQ%I#Iz(V^jDqd%czsq9u=wqX6U)XYPC2GYd zeFn=hc<(X_Byh8V9rTwm1323Oh7{%1+4zCmS&Oi7os6{}H94e%$w4%-1P>wBh|e=O@XoJu)h-aQEA_JAveVv} zivqBgZnPHJk8*u@Nv3&!>&l_H1u?CB*Ji={N6f4f5ifTpCS`9YWZ^a?HA+!2`$1Bh z+CpOegl%!PG0EOy(MsLYCJUcKRW~-jr~AsQ&k#b^kkKMb)SNb+v2LY3UEBQ07rO1B zLVk5)TKTKTk@u^cyG4(G0~)6_2_J)Q0hn18xj~<6t0nr=0K{HW!b-C$=I+65wJ=0* z4KrvC0C5jR5V-yC2BtOLP}g1K2@#gGR>JIIF4Z1euEZ2SHw7g2d;7K-p@Rhi=*prn zy1XR@CrG<%D0F%eMVLYMaDbblX!R%5LnKQ6^3m1-u&c+e+K_qOeQB8cDMUh1r?f#O ztY$z4}3H4-w1Kj?!jmc-@{OZ>B!Ahi&CF88u6w7uw zG`G+8&nlp)e;lq!y-v%zPa70 zsO!W(-2%XOHP2$whFMrw^2L5z&iZ=lOI;>wVu<=#XL%751yo9|!0IgPL=mnmUq<63 zhBzZ)r}4Io^mat-k1Y)J$q#c<{TV1o z=InV3K<0JqtsY}bhE$36UBBlE=ayx2;H@dhrxmL2L&W|)l+mjW$srHwrH7APLy^>9 z8HK!cF_jTrj@j}1ZoF|>*s39a6#!sRAt|%tu@PBVlK4#v#qShOqUdhgAr;J~Z>aC! z%4U?gP5y@hD9=O!iX6jzUF&qsy90^oYNZS^zFT?gj#?86I4v?GqMjni?jENGHza8w z${k$o0Yp^avd?MJUjoQHP3MTPs=+8ixqBlJR}rm01Xl@5!$h9l+1JY=P}@PV&Z%pssLw}$EDIusuQ&*i*+HRi8He?~GWuF>tAAeF||6^fub*-QF#wZw_otnshCnhww-ox=mn+)4RkH~NQAC^O&=jX7 z7;5Sx3`YZ-aU8P`${3SCnoY3(LOKdiCIgJGo&!DO_&Gk@b7~34W$xb#Sq;GG{8|dF z>Drqh^N$ASP6ZDoOYLvt$&o^OK=cbxv=71L@+66b$9c(ra8t?h*97Iu^XotAEJyXWsA9q1UK6; zu8@N|B(*4Wf0Z}_wDBWPb6(gV3TF63GFPXqdz5u$oAr#myIul53G|6{g3N7c#4-6m zxY;u%Kood6OVb^_wu3M0mawokk`zUYtAeDfTA4{R493{E<=jE_;7BX4+=D*aldo@b}%mhbLw!+y;M&kJ=lQR<`o>xjZf^{`&u7R9OCZ#c{Y{`OkF_7uEbSv8Mk83M9I6pGLH3=m-O6vTrh`YZXNY`S>7V_4mI?{ zx$w%R0!+|+ zZG}*MdVZ0{AtQjh;NtcX|&H3xXR55aU>1+JP~B_bi8ztNNR z(h=xJ?<$o`=Oc~rfQLfs#1m)$WM3J(5{9(~Wnva_S)FF5TZg*+5nRLJET;`&v;y;Z zuDW{Xc0Q^T*!hj_7dhLs>hEAgv@O~NBolufJyQihxgD|vSA_WiQC%2fCO&E#i|${W z>l{&qMtZ6s?Pmwb7;8}HiwajJ{!f^$yc!JqQSW--+8b*~un)F+kkv`(f_ z5^{daO9HEI>J9W!;~cMircaC8Iw>v8{1yR^ppd&7a{b22AsCY_PSBZN z$kY7p;4jQFDxTn>K*0lxu*N_{ zl9uPRwc8N9v|%mnTmDmL7l;K~LO$DR(dY`mf_>>88Cc~>&$1eu3Q7PmPUS0iv!%Dm zx}a&iqGfCDc1zV_cduZK8*WS^?dVoeOUFz-V=e06-7IpAT-b_1x5zse+_)xyy3PAg zv~AnH#}H7ixVZhfl>#g6&iRC=rTCx)#bHc$KU1K_3-5t?M#PKP#$fV{r8Vm{GiAe| z*pykFA;I9nG(zsXPI&dPWynCrm#jN_xY!GT)@A4{!*=oYHM}X2-UXasX*D|IcnWDr zL66^hp@|v~0v$7B%Zz7AL{JCb>v;DH^z6Z77;WEPN?O)IKJc-H*BZVHTv%26tGR+K zO}>LS@G3qY03%igim43GEeH3Tg@71%WHM>Oj7A27M$s{|MCm|&C%RyGlSh9rPp63s zeTkVZ7gcA>)5VD8`1W3HAHi(u%IpPZ$V7c$2eb*=xzQn7=z4dD&F(~Fw*3`qeW-gj zW`i`{wmx2M5B4-M^Vc4ctUB|s^DVB`UGUC!`AQA8I}r5;-)&(E`h7zK4_hD)>35$y zg71aziZ(*ekRm-8ue!s_tr)h0HtekLd<}mR-Nox#$4je_TAiY++X#k*7*`5T>=kpz zLi&eC$844OOR0rA3`LJi6>`=>uucaM&W+m~Eg1PeSwS4#@%x(Z@p~17>>H)zT?#rJ z*TkG`dTEF+6sT#G!(pDCUO;0vHlAp3v&{p)kHf0+Avo}|a?^Fp+b4?=5}w?b)QW-YKz*r8!FStp$_$R9b>+Y{V`8ESg~ zAJnQzfN+<4M6-(|X*&CTLx0E`YQdb=I#x2_t0MAYabo?8Ym4b;Vx`fyMW)M+dYZa% zTzA5LnC8`DV*Zi=B#SiCrC&G zO2~KJjmg`v$H}v_m!(zSm}(C^ew(>Vz+S&x1TreBd0=ZGYIMklFWc-^faz7fm8o}K zY|el}uFBgk^HN4v?#H*pI9MdvpT)z_baz?kCG>r>%e9_~F|AE4GA>pE4$|#a_OY2? z@~$9{_2_&jO-mjjHHvFz{dC*yS55X+0Xr!C#5LcFK!w!-Qik8eLr@X=lLG}TGImCl z2L*SpKLEg=w3U5*yrO~BT*D=6&^K=qq3BUZI)Cz6H=sqK{l0GjoItS%`h$YK?|S)C0l18 zJR~|b@6)vUX^3Auz;T;QTHUJ9ZjQH=arX~A)1zt6cT9Vph}gpHoi4pgxdn`$1MA1* zdLet3O_fJcu2lE7LT5ygyX-%KJCm?VCzv2}83WOO8oM17&2I(qiGRny|VC*jkT zI9aDwHs4vh{O0>A$Vu;s3HZY9ZFUz?9RXj2`Ks{(qf3I5o2nLNSSMgpd(dC(L2VgD>u;XhQShe=C zrbW(`1>UJ>_Z2)c{BY6xkUR>g8Oo1SUU?Ralec0{>RByz1o~-RiouA&Gd~tnfAR%I z35n?kxwFD#bzVYw+V;L;WEDK0fCutQYvJ6XdHv$!%S_hca+hGAU<7mwEaF;p4p z*QqU7Ydi~FDnLI(vwxZ=#hgkodLo+dhy<+(A^>@Qkw1Kvenj_BRQqY=gmlGh_c;9Q z(ieOHEGk=vc1nIS)MNj2eEoMbw%@wl9hkDc9SAo(4%&jI%>~`Mm?+yQq@Pmh z7Jo82-HZ{jjkoHNt{hKZvX;~n@0>yr2lR)w-mffX9xb&fc zXCYE_q{pCW^?Hrr_TW7Tuns1myy5vs)G1fc^y=!q?XU+(oM@<0GJsSqVjr+q*uHr?s*0= zYw;`2k06Of5XfNu0Y%xIU zt5|a+&Q31(22x4quN^0%!R(Mo%X06g721N*CMC`6eX)*nPkoEt8KWD$`X*?22Vk2JS=$!CA>Dugl!zBfknM8yuF#0=7tz!T3 z@O@w&#$M{D5mNER`S*J+0xyZ>b%2a2R#JFp@AcP}@8q)aayjc9&79##WS%~@HcNgV z#+i!R?G)w{br?sdM{t`ZX~`7Pw3xCpdUUU5A>cRD=vZe#22x5@m>YXLjuPtJJHOsA#696znoB+=%P$Dco zr0lqJel&p1%-Wv6wynkv%V}e7Wlc$TR7(pM@7Go3p831R6*aq2gf$}I3mil2W*}tu z=#1hu;-6E6xgGQt+;V8ebq>n86&9+1N^9>@I=1Z&yt67u#!&b!pWnOJXSngdy*!LZ zANPJBV*gc|_3-%k%SG5=0~L|}SEL^*`mx+@R|fa#%U8ej800l=4DyrE!Q7yFC7<8N zz8;5<|I`QamtsB8LdW}cN}cr4x+4FgH$52pbMjrvnx12w?vP&C!fTHUZW4lkt99sm z*4VRMyVBQxkr&LvbDGFkh*dwR0zFQL)qdA^y!_D2^Hv8@d*hI1^6vnKbqo&^{Nb94 z`_#{43n{R6L%bu`b=@U2$Ef&?D!Ws5L_{4yd+ckRXvIG6MS*Uy!~k~g(VX;IVg+cL z(SqX#XdLpn_?$uu1hrM7B<$@xiqO1W_ftWZdepnc{1RLIl^k2pc zpm#+Fr)90LgEbz|NiO0HaTLPSDo5!V^a7#qj-1aJ(eL)pdg%;qb^jl?UocNxM&)fQ zTC&S3Ujv4~7~kn#Ynpzd{AF(I!6JH_3;Y(g->!70?&=F{E9wJ02=9{^Dy<%iMe{hL zYZ2GN1+e&?8334_Fzeof;YHe{Dq_iWL6=A9*hJm-72nZ%41PZ2l+7&NEY_6f?-7LR0c6Y=00?E-`=?7C9+M0j z^OXaw>7NX%PPbbI-@&R;PfP@3fLmdPpwb3S;|?-g)5j-wBUB^v5bp77*xj->!aQSl zn4e$1jW%ataUsr zQs%6{x(>iFi&z`Ga*s!aKlNyVLua4CbGV@ZQH%8=SOSV+@fm(UJq95>+)|P4r2G{y za4VsMGu*1mpIafI6;H(L*X^ubv+18MjHqYS^&i;kL%JzV76kxh$i@sZMF?ir09e8z zWsxdxw$Jbo1!-KhWmA-!vl|nFQ6&fwU#x$748YL2buW5yQ*m zg_1;BFer>m=@$o3QC1Nn|LFj{goAKo0~anrqAcTvIP#rw0urLAPZo;?7qu?s*%VH}}SaX@wSHZ-1|dakFZl z(f&-2s*D&J#|)}18v8AU;gpx@Qbz+295|L%rnX*in;s#}#pUIV%YT=jeSsp06RHiT zAQ);pGS1MyE0swkJuD4@>n5L7*=hhVSeHpNSnIW28|zFAD<$rAu&zr+%(bS?R(ba* zqo!pNVeTC~Me7X8X$jd|=5=Iy+~PG6B~?6Ku@LL~Kmejxo?&Z_mpr}8>a_HHAdOi| zB7@;8u*|IFv4nY=7Xw($?TXBo_=-SOInDnt&Q*gw-#hPcmR&>0wH_JjP0U^r`R72 znla#RyhDSy&KDIB1V)pJKkx)>J&wKz_wjV^!H3TMrt7E8?DQBG{nlRe=Nz!YYMdQ$ z{;U^n&vP@gGn)5J-vcEyey`##;uCEkY#S*G!q8>tBFIidbGt>6YA`D;b)YL8%UV{J zfS~G5R%5gp<8pZyi_~HhFeLX!+@-*(O}KjnVe+_>Tvu`PogTH{%>XU(0KK7FlOxI{ z=_(-t3X;!)rf*YknF2c&9VuajvcF;lw$ie=UlfJGx>gU19YDI3*yZ2i`iw+F>V>F$ zm>`fVZkED66>wH`uu_2MexzqXc&=?NKr!y_EBU{+CNu5qbM2wXRs;agdY7y_-`BO) zH&CGXG^V*lvgqpduaC7JA~(IZWb8q{0E~ou9`}y9|CsevZGO@iSP^lQ?nhk*Kn8gr zo|?`3oeyYX)fMOp*S-Rk%%02dn4tX>OelN;)%vit)5aXv@J@6pMG1Sr zwoZkt@d0cIk-<@}k!EK=HpJomW&Q6xZIR|9vh*jH`|~KnPE7a@)&3k{P|kkt`zaL;!2+&Fei|NHj_k*DA_LZ1%aei2yxOq9wpOWpep3 zsOFXT)s{hPKLJ6Ol3mM|ho6*}z}|*JO$8Q`*LB|)0YeD9Y{aC)d`p=z_}UUg>m26dTuSA#!Vs)nCv?dy&EVt^OFijLcsn=MyAInRGc!9y|8_0$CVBFaR?HJEh z?>oa(D#SHkl%w9p_q%k(2QA>{lDQd^r+fT2H2KV$FfDRs;?_7BERtW@RkEp63&l^IxF8?uosl?GU2# z*v|SP!N;)Lv~`T*m#N)*pHaPT=d&GL{!sh*kohe=cr)q+BQr2pB;=vr<4 z9khbPNLl@+KIpsz?@iDJPdc%m_2(`7fB<@#gQ!&1mzhuMq_mo$HeZNZVjhc@XVw%+A3&e*^$c;2ubL3J7!v8Yp{N5EM8A{f{=yY;@e| zL8v~dS?F8ujw-YHdX!0U?4vNFQ?Srh^7^bo$RD_K8tCjhyHGusn>A2sr}`w;4?w`A z37F~IN1Itp%0n~w_|Zg3#1L|`FH+(dxEKIKE%MdoK86BJg*vcygsekfKokNF_%56MjA6Adf>vBZzn?U$==e4q3Y)Uj z%3>cyG#dyeLetQII%KDqh2J%*y8sO+)aFSVazeaHWgtuj%l93DEg84-seFcDq(UPA zEaL-$TdZ82FIE06uz4s<&TF*p1H83im31wHulXXY>zs2g)(tc0nfLji#c4eVO%dp6 z+<)#K(kQtv%wpKTCY{uRJIFEJQi(7GlWPybee!$(dkzXS z)Vwn5-b>cS))Dz8qzpjUXf4RH4QwChCKH6`%;Y%WXX-s%pn&Tj0^+R$6jh6Hy;uMgwCd68Lsh&@Njt_ zbcZ7QvYwxmy8sAEEA;w2eL_!f&wj?#N79*;rnXtoJ$-QUla?C~L>C%^+q7L+oHfTO zJPLgH@+92m&0`P=Jk+wF+dpSBqtW-7>+{BX87B97UuPkFc+1+T=PjfC5zX%f0?1@t znY4eCklf%o^Y7`~g&|x(M~`XX;VEUN*gRiBhp84n{w0`aK&RegrfcbD$8hcg4*T5uaOe;6sT7{ zoR)j_7)zh`!&MBybW0P3__`rBM3dJ^>Q!&RZ$l7T?VD$c2`#6+G_Er2K3_oDuv|!s zFuI3Z>E`%m1<7rA3ltHfqSw)(OrIn1Lguhso9f~rnt+{>dE{Pu>Z}#vRGO)6+tz`r zTbp#d%35A-``cfoV3$B$#peBT))1iST3cDYjH_6NLb}_`{DK0{ez@BWx8!BD-N1LG zP`xNzN}ywWjx*ZT;$4c{YgU{EX#CE8-xkiI!kbV4Z#QLyqF8EDCx4ae*k!U609?g; zs7DVP!E#?Cevh*tz&!UV7LF)ryV?7wEsN72i#L;7%=o&ECMjrICpx?KfDfrnP# z?*g!RJ)^T}^<7xVP<|%-!gGn1jJcMeUvmw5X)0vW75%I^h+0<`UMEME94i1xtN*@% zA0(&^vK;HI#XBvz#TWulV;ph!q&Zyr7t%k0Q2hugK zwRLl`k|KEGX^_tjHWIuWZ=ghIkB6cBEA zS@V5T=M?|U>TFs#iE?!RD5}(dhu?!apHr~q6GGhL2mGXZGCGq=VP*av+8=<5p4L)I zS?=rUh0(^)Dk*ND&^bmaC+WkxLdS!4^qaXDa^u|s)!{{IrrN8;q}57h^HuHvfE%(*4<*vT(s`)6{}LK;kB`~NoGMCy}gdo z&M|?ux~&kVbQFuyxt=TEK(SKoO;5hgNd?0$My!?88jNeM)%sODQXur+6&f1nLaV=!gXi-RYcvUdA^ezkxXHT&UO3%kd zh&DMmAyEorQI5^!2Ty=^vX-?FQG3E1UkD++_gP)6aFzNtlYQRuWmgK1kaikNc(*Fc z8X3{RtG&!Ijw=J=dOkOnT$?*fE+45}8-Fz(UY6Ffpi|nEMd zo{OMcj`zOK1emCzulT+O3_6_^B+$AwGbs@anC#&^?)9*54I$&w{$fY$-!IVPA~;!k zmO@uu;Dt3)rY%pLJgXLJy^phqB10I*Hdm?S83avW5l%o>UJqR_ZT33&M!FrRh5%_{ zT8=f`B|}8}S4{ZL^+Ur=7xk38{f=)hH1Yjgsy0cr$9-x7F(p zU*&phf|s0XNB3q&xaIoFTR$C)cB1G5G24(8c_FK3v=dpcBv2YTo`L{>i=zJbe0^`E zo^LsD+P08>GSu%l_VM@5cvHEbUObt;&LjV(e|3K=hYcad`&tF82VlcWZ;GqLrDz$G zQ|~37y|hzyiN*G=MHb?Iy7WvqQB2yU+r2FM$g|=tY#lU_3eP*K(PL385~!sLY!SIx zy!eFFKebf21+YqYl#s~n0w~wzHofv_+_gu)ym($Kebx(iIITJyalV=mZOqx_OEMY3yCt69NxooZ6){4?OM;bj(IdFwoxqkyZjssO z+vjltG{=W~I>jTO^K`4-C~n1|g|$tW^Z#Z4|Mma5t3rwfm_7m+d8!y2h|~S?-p5}? zR4=PhQ5dU>U+_ZfN~Qa`nb}ntA|)EjbFoIGV#^CDSo20e$5cR#pcMCRHBqsn&3W>g zef-`G`;bT#Rg3qM_Kg)QD@q@3Hnu+=9oaZuii zvUZ$e16$UxPU#KsBKoR2C;bjS->iJ4ZSw#~|7aN391oQOr9mk#pt&`P{pv3E$J)L&TZ+9A# zm#ZHYz>)2M6{g-!(m-l3IQkN0MEG}P6+zoVc#8;1q4B8GV6hrE1+Qn@1kSkc#qt7dR+u)DhvI??kjH5POz?U1^k(N#J4TZ}WI%zviiV=kGi2 z76C0@jAcPWw1CKNbp)`PUH&Spaz#H6Vf8(+DA+VM(dfHkXI0BNJgy@KA# z;^%w%HjB&tIE1f)1B~-t_c>Pvg7<*LTK$4Dz~RC0TC(-LC%|wj1a5;6XxF*&wH4DZ zEGH-(tm{$>PO#Pj{{$$2HkD>R6@6nh`K=1k{A>$AHd%T=D>wsy>{jl&$|VlDqQTVm z;mzCDW_}r%FVDG2gQ9KQHSeA%Zojr-Ke!3IYOIw(FJTKq1`Q(>y;+`{A*NT$XgN&7 z_9?6tZ#(aNBnc!N3f@LDvq+g`W~fB?R|f#Lva`B}uF-oBY_p}K)c41iefaUuJ04gm z#cX4)Q6Bcbsl*MrBSC>RUW>e7^@1&T8uvR_GfQ#Y z@#glkiBOQ`a9^(#EF zHKRv!-}zoz>vviGe&jZ^>+^*}YEr9j>MHhYn$^>M!9g)u#553F=4a*}XV+!NJLb~2wa!&$tHArU7@dWWLbphw{#E0ovJQ;& zRxeeQw+^s|E_!UKT$MI=u^-J3Ku{aLq)qd51i@HbBI|aB+NaPbZ$YS z*bkKG%;_($zW`LQPDI$9DMQ}I)GsP?rPcm>jZwZYUljyPTnR?*3S2~t(qA0_cyc%X z)@wgJW4oc=QwLrA5DEVoM!C9xMIS7QTlveT7WSb}P$<5Cx4!@BScCzGhrqpwu&;@Z#m z>Sy*xs$Bvkg!mM~Y)kb7NzyAYEjaX#mSD*Ihh!2YE#vN!?*w+kDTe@GTvf&Nu!>1u(4`d)oE3AHSA7sUc~N$GxfjtV^ijmBU7y-&pKcLr@$FMC0!gp1MAJi8G4j~PL@-~t zhb6HJ9)-p77;M`CctXBYJW($F5d}L-v)1@tM%TB{5(%@lcvC=>qBXAHCD&f`;J7?% zblFDS87Nj-Vk5uDnRhFoP9oYB(p0uec>-RKJfK4VYVU}0l<2y;BXX-l<~=Rtdjtpi zc%y`Q81(VFw;xAL3vOf~h>|Lc)_aY7Y!B&n0sEBs^sev7M+-!zcOmyp^(a^$Zj;Rb zDa|hKeDJ0B@tcXFlX3N;NsW5jT(os4Mt=)>JApM5Tbp=>(EqEl1N^Ub3!o2}%-8FwyUjqD zKjq?)ymZa~Wt;$NPWC@7<^sk|B8xt>yLhfGt?#Iu{}nf6&|7|bTo;H%bYN0$Ju_6x zC?R8AXt=HIfGaIrnPC|_ElD%8>&ol^H`!~9TC9i8p82E-W~7yK!E=!|;!M@5gy6I+ zLFWVmSD4*-N*9%Nr{7Yn@}+9rrUQ221aFMODyA)fFAn8t-RqrQv82TqVPDbjU)~Ya zt;csVcMZtVO1!Xz;%??&#Sb2L@q}lpl+N)QEvx56EQNoek7b#^DEPBTjAy}^%F)k$ zz1%9t{_+>C;VaJu2!Oq77;5wYG-WMYCrkM!ji`63|FsTG?$2eR4vMvnwX;h7bX=?OyPxo+*U4*Q4FhN95dlsFk0718k1z5}UWyhFf-BwVAa-efn zt}_C^u4g(u7fp8s(BnwD^L>$lZdb2*-LYJu4aDuMt|I$Uoas6!py<5dgGb8sZd~UD z_%j+6)i%{~1>K>fVCA!Ixg$H~t03R#lwsy#lcol04O6E&K5bL+y zODw=6to42CXMfC?a=N?i>Bu;Jzi$CFkAT(=@!*^_51eFC9Ny5sl{?{yIrQ~(mFE#) z!N~()PoF?O4uP4SDt$M;=UAj|zSWQhIFAvI>)Hg?Zn={uD%foH6c&t( zofi5q|4+}a2Pq=cf?jMg`_@5#ZV9yaD_IWvkeec}BNg#{{(7Z_{Ll{hc+IV6^uF?U zAPCQJSQ7i7TV0-KIcU`T`Ylg^%ksh+L(qxKB8uX?ChxY}RzZuc8k$7itAHZ^ zNV!!zEWlK#u45YW+ZLzT)jd#XM@KkMe7V@RdJ^tgy5v}T?^|aJk0)9Rq7T1f`1sBz%)p&{#P1c z@doPzAU0;Q?>*+H>OM*KQ0P6WVD3wKnKWTuI=3oJBpmw8)I2D^4xS5=Z{AnRfpwAr z?PNo0kN!WF+x8D|>KVi}R{`Hxt&Nq7d*20;Vbkl~*XQO+WsCjY5eHf@# z2P;?eh^FsRy2niaNtMrZRBJb^F?rDmv>CrGcAkJu(~lN0B9 zce^qZ0Z}eWYn|m=cLmoh)j8lvCeg3;@9+xrAk70ji}^>F;<^jN18GpvPUd?`J<(FC z)MkEtJ2#xbxtmi+wL|gA&~(ejxvj zq?xR*{5@M0EFf(*7!GxLm_)guuKIEMYCFZ{J_toM@qnDk&cOLU>0^l9f z{}Os6*o^a-PEqd-49$C_!pw|EPymMC;PEI$@67zz-eanyrp)crEIU< zj)K7={ZydScc+2EcaJ0X^J%zPp#u#L1n}Cn7OKsw0Wnp}RCnh@>#84syT#oe8J(x$ zc)W6ZuSMp;BIo^d^Bd)yo5fAfWt~piS$wDhIn_~!z#z$OWIbi?;9VdO`1V`_AN4^m^2qvgMZVO6%U7kNW2GV$T6m{4YRoJRl`2a>`Iq)2p4NAq%4OJMM4*JrwK)fj|FjWeLcq! z^trd>6Dmz#R($KA7Y=Zm9DgK8gY^1R3$o4apK^WDwf-l!+Pp3E^K_at>ez#Y^YorW{_3Ces)+Sz zX~*;wxQtH(M{ulE23Fso07lU}xDL99WTECK>g^Om`i;2qUDkbl)>F!+(pop8K+1$| zz3_+jjRlD4UsAy%ju$D3472;b@OpzJUs2-t*ma=8lY15N5UW*wW@W{xjG z>q~9~Qb_yza;sR8dXEHhI)F}a!dsA`Se2MXmt&IBZLV~yI0>2C>mmcXFk^Syp8$YR zNvv-wTC_u%aIygVb1Gwos~YpmJ(cRuw*GP$Dx)-WB$Tg&N$5V0;#D8*oC>X1Rt{uk zV?4whke4nV-H{A}eLdd;qjRSxzLn$^~aROQ_?u6|HnY$k;nTIgUpjT+h zyIupKUQgZ@`h8V(C{sE8Cn)RhPM2z(e3H^nBp|WovAFVvx>uD>`~cPL^#qg{-#-^0 z!3I&Pc%fum!3n}h-03iKub2RdXUb>jHBeom(YY)7QxZ<6FRa}n(GLiw_H<2&JF^3Z>q1fxDQ9%$x2%Pc0yhxw{ zXjG6atP4hSyUQC9Hc_|3SWZKtj3F_$WL8Rv0Sv9z-ANA|w1l$C0Ji{5H}0;Hy^P?O zJY}nFbjgc1Wr^kKd>Qz5+y-#)Dcd!w^6FVr2A z|Jy)D5myAfZU=aKr&>%DWY>7*RN&ipAG-MTOkd1uVPBG})h%CTpfzD(I`K0Iivli# z3MEY|&=0w{qG;Xi6{v(2&Ek#GYco-Ba64xwHIS}6qDdC6-Rb)bOFED)LN$h)ZHw$g8!h zU$TAyu%@u{-It-ZeIBH9Tt1-Fe^-p7HQx+sNK&+!7h}7GUk6U_kiQS&>iK zWyv{MA!1B4eTA~w!cVdYv33Zt!BqgwDb6HQqOAuJuD4M>H&ADCY z)}HB>hLuEVg6J^c)t_p~i|=9xRooPZIaqz}k>C)_afdxp+g*ggSXAO$i)L;1NbL5` zT!78O(XrxV@do(>Z9u^muoi2vo^3%hBH)L0dSQ$$V6q=$wZT ze$n*49_4@F5#den*gh6-(tdZ@cR9Ixo1A?q6MisZ&6&=)wddMdA}3==_yOC80D~$I zjJ{3_U1*}0LV%_}Y~{6F_#7A3$lPAl{^{2NYh8xsjod>X8uVLAM7PG@xLf5fWw32+ zl?*#6($m5mFH)0{^PxS*y7XeBuf4_JdhIS3{o^NC;wP`5k|9t!Z3k?Tvp=}L0lo`C z^i%p`qqv9VxWeK%J^g^mGcz0o}3mUz=!kP!RlpvlLIw>=v?t@f`O-qIr&)lc$ z{ekBIOw^b9tt?nSU3MdAFBKuZ3Et+Hk40LJ4$Y8dIuSuN0{R-G*W)F~wbCF7%gS{7 zBt!53gb3976)|%3lUt950yw$A(QP=5uN@wg_rE=ZQl%Pai$OGv z4uaw31vL5;4%fx$`@^vLVk>>4=XpeqgOAWt=>BIp4e&{T{?L=~gKHjbTduC4>+1>< z|69WSLq|LS!>L53l81^~m9yl)qn*jB%Jhe>iHx;~OFV z#;RfJO(@~2Ss7VYRfRQ|`ML*D+NuupwKS=u7Snk!@k^pqng zH^hlt7x~o37}+PpKdh|~T7Xi(=!&8p3JWdEiv%sp2J@6ZT#o2#fEFnq1UF^T0VRH8 z@!%!&0cV9-2q3x`JtkIpQm=TK${{=mf@==)R7e1MllTEs&xL1XwE(Y1eCGc1zQaOo zyhMfA%%}l!n!NdeuE4XKX(rv#gMH@jv*6I0*QGqG&i$4t(m%R9uXQQZn!a8GbgZ)g_=@VT~d*2~H)cc1bjAL62uwq)96C51g3!sCi9B$_VAu2QlDAZec zZhYCda|-}_vd6`fB1v4mqyg#Od%uL(Ih=r7G23%)14vO=vcJ(5JSJ6N)$+H!^B&?c z+Iz2{;B(HWPD>S^X=BuX1%QOQH1&7c(5rQ)#Z+J^Hgd7^o--Uue~ytL0`rzZUV~pD zoI70xKS|#FqLErv=#R@>xBwRhzct+|U008m)@RN%O@HpnvyB}Qg{`k(%5WscJ&%pf$*BAqu zZ45eI;)_}LqjjwoMroc=!K_NQ-@XZxPhIrW7cE*b2zk{i-{wdblSojc(6l~5DLA%v zU|mAG;6NdGBq#t~EIkA_nyG_47nV!(LtxK1jvxuy`!4-=V}Yg1((=)h4a3Z;v}xGw zA%UtF3$)ajS-uq0NRkf=$;5T*E4b;E{@z6wlv-VV!r?p05WY?B0qzBaubYi+ibbb% zg-d|iY^~Dc#=GvDdH>kHTQZ&dwNx7L{>(Ghuja-EYjTd(Anv@+>|OiD0RU6woh5ZH z`8zx^Spg-_)rEW~@Ig_l^{#Cz&gcch@`!eyr?TxwBI~-@g+14j8P)~*$@!V-(S2pQ z5J`>(YG{}b`&jE?YfCOy%|Xs8oI!Jt-Z}n|vm2_-=OIl zH`5kf=`StlVLIH;g_=tXE$XN$ZmHzG$V&;CZ#SMOjfj5=?3AVIu7;*7ckRxjpnPYG zQ9VzzLd65rWZXpufCtEAY$euzP%5|aAtWE-0WMSXEUX`2ys9-beuQ0oS)C%;xc*Z7 z*Eml5-PVLA%?c!9{ztAKj8BiL^J9VHvSrprMqSm~Hch1Fv5;>#H{HW8JI z^~$yV;Z^S~mr-Y$O#ysVaL=9r$AS<##JLf3r^q^`1NLozlj#oT*#*A=Z3Y$^?{8Ve zxpqUXFpbJr1YKsRqUH|-H*52&&s2`N7E!6!bG&_Au`jmcR7`7g{3MT8#J7@n2+8)G z9h7X%+kqqE7LLU{Lm??x7NyWI@3p`JT;c$EWvRs0uNeJr)9r@_r?+IJqB(skHc) zrZ}=yrF9z?JQUH_sp2OT~a@faW!(}(MM3&2vbPX&Is zO@d&6gq3#ZSb(9uj+B&%!Jw2GWKR=)!k08I<7#n+_8lkRP#;8@P_MO|Q4*A+Ue zN%DlG_E{Wl?LSkoOE{2vP>!wX^YMHSM^}JwF1DIUAwC2x^v_=P`#hL!$9RCZN7}%X zQsP_f&J9sA!u|NYbx;A?`w$pL7TTvX`d!89qTZp5PJAJQR(gB%wbQm@k4%Mlf#|?^ z8%1A-y3Nv*`^UA?y&;=6R_iI-Z8`(X#KWG&Qr&c*^A9fXlcf~t)DeF|J<^f$Tn7bw zPLu&=8>MoiwIgpCialRRy`mzpNpXd1WBtPlMvat>bjS*d>hqcYmV6MSnV%{#^eoRe zIjk$(w;T?rLaA|Ocw>~uj!3)n^AbtE(W8JJ;yLm?-vj|37Ew^SS-z}Cr?gu~2c}~D zNV)N+e*+wTvN(3J{1Fr!gyz#vPl14+$NHiD;}E+qr}j?stC&J(8|�Yki&l|1B4l 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 Zofwzdk+WTyO5HvURh>IUw;#UzzW}$dO = Mutex::new(()); #[derive(Default)] struct CoreDownloadState { @@ -42,6 +56,12 @@ struct CoreDownloadInner { #[derive(Default)] struct CoreProcessState { child: Mutex>, + #[cfg(windows)] + job: Mutex>, +} + +struct GuiConfigState { + inner: Mutex, } #[derive(Clone, Serialize)] @@ -96,6 +116,127 @@ struct CoreInstallTask { result: Option, } +#[derive(Clone, Serialize, Deserialize)] +#[serde(default, rename_all = "kebab-case")] +struct GuiConfigFile { + port: u16, + allow_lan: bool, + run_on_startup: bool, + auth_dir: String, + #[serde(deserialize_with = "deserialize_gui_api_keys")] + api_keys: Vec, + management_secret_key: String, + plugins_enabled: bool, + routing_strategy: String, +} + +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +struct GuiApiKeyEntry { + key: String, + #[serde(default)] + remark: String, +} + +#[derive(Deserialize)] +#[serde(untagged)] +enum GuiApiKeyInput { + Legacy(String), + Entry(GuiApiKeyEntry), +} + +fn deserialize_gui_api_keys<'de, D>(deserializer: D) -> Result, D::Error> +where + D: serde::Deserializer<'de>, +{ + let entries = Vec::::deserialize(deserializer)?; + Ok(entries + .into_iter() + .map(|entry| match entry { + GuiApiKeyInput::Legacy(key) => GuiApiKeyEntry { + remark: String::new(), + key, + }, + GuiApiKeyInput::Entry(entry) => entry, + }) + .collect()) +} + +impl Default for GuiConfigFile { + fn default() -> Self { + Self { + port: 8317, + allow_lan: false, + run_on_startup: false, + auth_dir: env::current_exe() + .ok() + .and_then(|path| path.parent().map(|parent| parent.join(OAUTH_DIR_NAME))) + .map(|path| path_to_string(&path)) + .unwrap_or_else(|| OAUTH_DIR_NAME.to_string()), + api_keys: vec![built_in_api_key_entry()], + // Keep plaintext here for management API auth. Core hashes the + // value written into config.yaml on startup. + management_secret_key: DEFAULT_MANAGEMENT_SECRET_KEY.to_string(), + plugins_enabled: false, + routing_strategy: "round-robin".to_string(), + } + } +} + +#[derive(Default, Deserialize)] +#[serde(default, rename_all = "kebab-case")] +struct GuiConfigPresence { + auth_dir: Option, + api_keys: Option>, + management_secret_key: Option, + plugins_enabled: Option, + routing_strategy: Option, +} + +#[derive(Clone, Serialize)] +#[serde(rename_all = "camelCase")] +struct GuiSettings { + port: u16, + allow_lan: bool, + run_on_startup: bool, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +struct GuiNetworkSettings { + port: u16, + allow_lan: bool, +} + +#[derive(Clone, Serialize)] +#[serde(rename_all = "camelCase")] +struct CoreConfigSettings { + api_keys: Vec, + management_secret_configured: bool, + plugins_enabled: bool, + routing_strategy: String, + // Kept for internal config migration/tests; never exposed to the WebView. + #[allow(dead_code)] + #[serde(skip_serializing)] + management_secret_key: Option, +} + +#[derive(Clone, Serialize)] +#[serde(rename_all = "camelCase")] +struct CoreApiKeyView { + api_key: String, + remark: String, + built_in: bool, +} + +#[derive(Clone, Serialize)] +#[serde(rename_all = "camelCase")] +struct CoreConfigView { + api_keys: Vec, + management_secret_configured: bool, + plugins_enabled: bool, + routing_strategy: String, +} + impl Default for CoreInstallTask { fn default() -> Self { Self { @@ -241,15 +382,24 @@ impl CoreProcessState { return None; }; - let Some(process) = child.as_mut() else { - return None; - }; + let process = child.as_mut()?; - match process.try_wait() { - Ok(None) => Some(process.id()), - Ok(Some(_)) | Err(_) => { - *child = None; - None + if let Ok(None) = process.try_wait() { + return Some(process.id()); + } + + *child = None; + drop(child); + self.clear_lifetime_guard(); + + None + } + + fn clear_lifetime_guard(&self) { + #[cfg(windows)] + if let Ok(mut job) = self.job.lock() { + if let Some(handle) = job.take() { + close_windows_handle(handle); } } } @@ -260,16 +410,149 @@ impl CoreProcessState { fn store_child(&self, child: Child) -> Result { let pid = child.id(); - let mut managed_child = self - .child - .lock() - .map_err(|_| "内核进程状态锁已损坏".to_string())?; - *managed_child = Some(child); + + #[cfg(windows)] + { + let job = attach_child_to_windows_job(&child)?; + let Ok(mut managed_child) = self.child.lock() else { + close_windows_handle(job); + return Err("内核进程状态锁已损坏".to_string()); + }; + let Ok(mut managed_job) = self.job.lock() else { + close_windows_handle(job); + return Err("内核进程作业状态锁已损坏".to_string()); + }; + *managed_child = Some(child); + *managed_job = Some(job); + } + + #[cfg(not(windows))] + { + let mut managed_child = self + .child + .lock() + .map_err(|_| "内核进程状态锁已损坏".to_string())?; + *managed_child = Some(child); + } Ok(pid) } } +impl GuiConfigState { + fn new(config: GuiConfigFile) -> Self { + Self { + inner: Mutex::new(config), + } + } + + fn snapshot(&self) -> Result { + self.inner + .lock() + .map(|config| config.clone()) + .map_err(|_| "GUI 配置状态锁已损坏".to_string()) + } + + fn update_network(&self, port: u16, allow_lan: bool) -> Result { + self.update(|config| { + config.port = port; + config.allow_lan = allow_lan; + Ok(()) + }) + } + + fn set_run_on_startup(&self, run_on_startup: bool) -> Result { + self.update(|config| { + config.run_on_startup = run_on_startup; + Ok(()) + }) + } + + fn set_management_secret_key(&self, secret_key: String) -> Result { + self.update(|config| { + config.management_secret_key = secret_key; + Ok(()) + }) + } + + fn sync_core_settings(&self, settings: &CoreConfigSettings) -> Result { + self.sync_core_settings_with_api_key(settings, None) + } + + fn sync_core_settings_with_api_key( + &self, + settings: &CoreConfigSettings, + added_api_key: Option, + ) -> Result { + self.update(|config| { + config.api_keys = merge_core_api_keys_with_gui_metadata( + &config.api_keys, + &settings.api_keys, + added_api_key.as_ref(), + ); + config.plugins_enabled = settings.plugins_enabled; + config.routing_strategy = settings.routing_strategy.clone(); + Ok(()) + }) + } + + fn update(&self, update: F) -> Result + where + F: FnOnce(&mut GuiConfigFile) -> Result<(), String>, + { + let mut current = self + .inner + .lock() + .map_err(|_| "GUI 配置状态锁已损坏".to_string())?; + let mut config = current.clone(); + update(&mut config)?; + write_gui_config(&config)?; + *current = config.clone(); + Ok(config) + } +} + +impl From<&GuiConfigFile> for GuiSettings { + fn from(config: &GuiConfigFile) -> Self { + Self { + port: config.port, + allow_lan: config.allow_lan, + run_on_startup: config.run_on_startup, + } + } +} + +impl From<&GuiConfigFile> for CoreConfigSettings { + fn from(config: &GuiConfigFile) -> Self { + Self { + api_keys: gui_api_key_values(&config.api_keys), + management_secret_configured: !config.management_secret_key.is_empty(), + plugins_enabled: config.plugins_enabled, + routing_strategy: config.routing_strategy.clone(), + management_secret_key: Some(config.management_secret_key.clone()), + } + } +} + +impl From<&GuiConfigFile> for CoreConfigView { + fn from(config: &GuiConfigFile) -> Self { + Self { + api_keys: config + .api_keys + .iter() + .map(|entry| CoreApiKeyView { + api_key: entry.key.clone(), + remark: entry.remark.clone(), + built_in: entry.key == DEFAULT_API_KEY, + }) + .collect(), + management_secret_configured: !config.management_secret_key.is_empty(), + plugins_enabled: config.plugins_enabled, + routing_strategy: config.routing_strategy.clone(), + } + } +} + #[derive(Deserialize)] struct GithubRelease { tag_name: String, @@ -297,8 +580,451 @@ fn detect_core_platform() -> Result { #[tauri::command] fn get_core_status( process_state: tauri::State<'_, CoreProcessState>, + gui_config_state: tauri::State<'_, GuiConfigState>, ) -> Result { - current_core_status(Some(process_state.inner())) + let config = gui_config_state.snapshot()?; + current_core_status(Some(process_state.inner()), Some(config.port)) +} + +#[tauri::command] +fn get_gui_settings( + gui_config_state: tauri::State<'_, GuiConfigState>, +) -> Result { + let config = gui_config_state.snapshot()?; + Ok(GuiSettings::from(&config)) +} + +#[tauri::command] +fn get_lan_ipv4() -> Option { + detect_lan_ipv4().map(|address| address.to_string()) +} + +fn detect_lan_ipv4() -> Option { + for target in ["192.0.2.1:80", "8.8.8.8:80"] { + let Ok(socket) = UdpSocket::bind((Ipv4Addr::UNSPECIFIED, 0)) else { + continue; + }; + if socket.connect(target).is_err() { + continue; + } + let Ok(local_address) = socket.local_addr() else { + continue; + }; + let IpAddr::V4(address) = local_address.ip() else { + continue; + }; + if !address.is_unspecified() && !address.is_loopback() { + return Some(address); + } + } + None +} + +#[tauri::command] +fn save_gui_settings( + gui_config_state: tauri::State<'_, GuiConfigState>, + settings: GuiNetworkSettings, +) -> Result { + if settings.port == 0 { + return Err("端口必须在 1 到 65535 之间".to_string()); + } + + let previous = gui_config_state.snapshot()?; + let mut next = previous.clone(); + next.port = settings.port; + next.allow_lan = settings.allow_lan; + patch_core_network_settings(&next)?; + let config = match gui_config_state.update_network(settings.port, settings.allow_lan) { + Ok(config) => config, + Err(error) => { + let rollback_error = patch_core_network_settings(&previous).err(); + return Err(match rollback_error { + Some(rollback_error) => { + format!("{error};回滚内核网络配置也失败: {rollback_error}") + } + None => error, + }); + } + }; + + Ok(GuiSettings::from(&config)) +} + +#[tauri::command] +fn get_core_config_settings( + gui_config_state: tauri::State<'_, GuiConfigState>, +) -> Result { + let settings = current_core_config_settings(gui_config_state.inner())?; + let config = gui_config_state.sync_core_settings(&settings)?; + let api_keys = gui_api_key_values(&config.api_keys); + if api_keys != settings.api_keys { + patch_core_api_keys(&api_keys)?; + } + Ok(CoreConfigView::from(&config)) +} + +#[tauri::command] +fn add_core_api_key( + gui_config_state: tauri::State<'_, GuiConfigState>, + api_key: String, + remark: String, +) -> Result { + let api_key = api_key.trim().to_string(); + let remark = remark.trim().to_string(); + validate_core_api_key(&api_key)?; + validate_api_key_remark(&remark)?; + let mut settings = current_core_config_settings(gui_config_state.inner())?; + if api_key == DEFAULT_API_KEY + || settings + .api_keys + .iter() + .any(|existing| existing == &api_key) + { + return Err("该鉴权密钥已经存在".to_string()); + } + if !settings.api_keys.iter().any(|key| key == DEFAULT_API_KEY) { + settings.api_keys.insert(0, DEFAULT_API_KEY.to_string()); + } + settings.api_keys.push(api_key); + patch_core_api_keys(&settings.api_keys)?; + let added_api_key = settings.api_keys.last().map(|key| GuiApiKeyEntry { + key: key.clone(), + remark, + }); + let config = gui_config_state.sync_core_settings_with_api_key(&settings, added_api_key)?; + Ok(CoreConfigView::from(&config)) +} + +#[tauri::command] +fn delete_core_api_key( + gui_config_state: tauri::State<'_, GuiConfigState>, + api_key: String, +) -> Result { + let api_key = api_key.trim(); + if api_key.is_empty() { + return Err("要删除的鉴权密钥不能为空".to_string()); + } + if api_key == DEFAULT_API_KEY { + return Err("内置密钥不能删除".to_string()); + } + let mut settings = current_core_config_settings(gui_config_state.inner())?; + let index = settings + .api_keys + .iter() + .position(|existing| existing == api_key) + .ok_or_else(|| "要删除的鉴权密钥不存在,请刷新后重试".to_string())?; + settings.api_keys.remove(index); + patch_core_api_keys(&settings.api_keys)?; + let config = gui_config_state.sync_core_settings(&settings)?; + Ok(CoreConfigView::from(&config)) +} + +#[tauri::command] +fn set_core_management_secret_key( + gui_config_state: tauri::State<'_, GuiConfigState>, + secret_key: String, +) -> Result { + let secret_key = secret_key.trim().to_string(); + if secret_key != DEFAULT_MANAGEMENT_SECRET_KEY { + return Err("管理密钥统一固定为 123456".to_string()); + } + let config = + gui_config_state.set_management_secret_key(DEFAULT_MANAGEMENT_SECRET_KEY.to_string())?; + patch_core_management_secret_key(&config.management_secret_key)?; + Ok(CoreConfigView::from(&config)) +} + +#[tauri::command] +fn clear_core_management_secret_key( + gui_config_state: tauri::State<'_, GuiConfigState>, +) -> Result { + let config = + gui_config_state.set_management_secret_key(DEFAULT_MANAGEMENT_SECRET_KEY.to_string())?; + patch_core_management_secret_key(&config.management_secret_key)?; + Ok(CoreConfigView::from(&config)) +} + +#[tauri::command] +fn set_core_plugins_enabled( + gui_config_state: tauri::State<'_, GuiConfigState>, + enabled: bool, +) -> Result { + let mut settings = current_core_config_settings(gui_config_state.inner())?; + settings.plugins_enabled = enabled; + patch_core_plugins_enabled(settings.plugins_enabled)?; + let config = gui_config_state.sync_core_settings(&settings)?; + Ok(CoreConfigView::from(&config)) +} + +#[tauri::command] +fn set_core_routing_strategy( + gui_config_state: tauri::State<'_, GuiConfigState>, + strategy: String, +) -> Result { + validate_routing_strategy(&strategy)?; + let mut settings = current_core_config_settings(gui_config_state.inner())?; + settings.routing_strategy = strategy; + patch_core_routing_strategy(&settings.routing_strategy)?; + let config = gui_config_state.sync_core_settings(&settings)?; + Ok(CoreConfigView::from(&config)) +} + +#[derive(Clone, Serialize)] +#[serde(rename_all = "camelCase")] +struct OAuthStartResult { + url: String, + state: Option, + opened: bool, + open_error: Option, +} + +#[derive(Clone, Serialize)] +#[serde(rename_all = "camelCase")] +struct OAuthStatusResult { + status: String, + error: Option, +} + +#[derive(Deserialize)] +struct OAuthStartApiResponse { + url: Option, + state: Option, + #[allow(dead_code)] + status: Option, + error: Option, + #[serde(rename = "error_message")] + error_message: Option, +} + +#[derive(Deserialize)] +struct OAuthStatusApiResponse { + status: Option, + error: Option, + #[serde(rename = "error_message")] + error_message: Option, +} + +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +struct ManagementRequest { + method: String, + path: String, + query: Option>, + body: Option, +} + +#[tauri::command] +async fn management_request( + gui_config_state: tauri::State<'_, GuiConfigState>, + request: ManagementRequest, +) -> Result { + let config = gui_config_state.snapshot()?; + let method = match request.method.trim().to_ascii_uppercase().as_str() { + "GET" => reqwest::Method::GET, + "POST" => reqwest::Method::POST, + "PUT" => reqwest::Method::PUT, + "PATCH" => reqwest::Method::PATCH, + "DELETE" => reqwest::Method::DELETE, + _ => return Err("不支持的管理 API 请求方法".to_string()), + }; + let path = request.path.trim(); + if path.is_empty() || path.contains("://") || path.contains("..") { + return Err("无效的管理 API 路径".to_string()); + } + + let client = management_http_client()?; + let mut builder = client + .request(method, management_endpoint(&config, path)?) + .header("Authorization", management_authorization(&config)?); + if let Some(query) = request.query { + builder = builder.query(&query); + } + if let Some(body) = request.body { + builder = builder.json(&body); + } + + let response = builder + .send() + .await + .map_err(|err| format!("请求管理 API 失败: {err}"))?; + read_management_value(response).await +} + +#[tauri::command] +async fn upload_auth_file( + gui_config_state: tauri::State<'_, GuiConfigState>, + name: String, + data: Vec, +) -> Result { + let name = name.trim().to_string(); + if name.is_empty() || !name.to_ascii_lowercase().ends_with(".json") { + return Err("认证文件名必须以 .json 结尾".to_string()); + } + + let config = gui_config_state.snapshot()?; + let client = management_http_client()?; + let mut query = std::collections::HashMap::new(); + query.insert("name".to_string(), name); + let response = client + .post(management_endpoint(&config, "auth-files")?) + .header("Authorization", management_authorization(&config)?) + .query(&query) + .header("Content-Type", "application/json") + .body(data) + .send() + .await + .map_err(|err| format!("上传认证文件失败: {err}"))?; + read_management_value(response).await +} + +#[tauri::command] +async fn download_auth_file( + gui_config_state: tauri::State<'_, GuiConfigState>, + name: String, +) -> Result { + let name = name.trim(); + if name.is_empty() { + return Err("认证文件名不能为空".to_string()); + } + + let config = gui_config_state.snapshot()?; + let client = management_http_client()?; + let mut query = std::collections::HashMap::new(); + query.insert("name".to_string(), name.to_string()); + let response = client + .get(management_endpoint(&config, "auth-files/download")?) + .header("Authorization", management_authorization(&config)?) + .query(&query) + .send() + .await + .map_err(|err| format!("下载认证文件失败: {err}"))?; + read_management_text(response).await +} + +#[tauri::command] +async fn start_oauth_login( + gui_config_state: tauri::State<'_, GuiConfigState>, + provider: String, +) -> Result { + let config = gui_config_state.snapshot()?; + let provider_key = normalize_management_oauth_provider(&provider)?; + let client = management_http_client()?; + let mut request = client + .get(management_endpoint( + &config, + &format!("{provider_key}-auth-url"), + )?) + .header("Authorization", management_authorization(&config)?); + if management_oauth_uses_webui_callback(&provider_key) { + request = request.query(&[("is_webui", "true")]); + } + let response = request + .send() + .await + .map_err(|err| format!("请求 OAuth 登录链接失败: {err}"))?; + let payload = read_management_json::(response).await?; + if let Some(error) = payload + .error + .or(payload.error_message) + .filter(|value| !value.trim().is_empty()) + { + return Err(error); + } + let url = payload + .url + .map(|value| value.trim().to_string()) + .filter(|value| !value.is_empty()) + .ok_or_else(|| "内核未返回 OAuth 登录链接".to_string())?; + let state = payload + .state + .map(|value| value.trim().to_string()) + .filter(|value| !value.is_empty()); + + let (opened, open_error) = match open_external_url_inner(&url) { + Ok(()) => (true, None), + Err(error) => (false, Some(error)), + }; + + Ok(OAuthStartResult { + url, + state, + opened, + open_error, + }) +} + +#[tauri::command] +async fn get_oauth_status( + gui_config_state: tauri::State<'_, GuiConfigState>, + state: String, +) -> Result { + let state = state.trim().to_string(); + if state.is_empty() { + return Err("OAuth state 不能为空".to_string()); + } + let config = gui_config_state.snapshot()?; + let client = management_http_client()?; + let response = client + .get(management_endpoint(&config, "get-auth-status")?) + .header("Authorization", management_authorization(&config)?) + .query(&[("state", state)]) + .send() + .await + .map_err(|err| format!("查询 OAuth 状态失败: {err}"))?; + let payload = read_management_json::(response).await?; + let status = payload + .status + .map(|value| value.trim().to_ascii_lowercase()) + .filter(|value| !value.is_empty()) + .unwrap_or_else(|| "wait".to_string()); + Ok(OAuthStatusResult { + status, + error: payload + .error + .or(payload.error_message) + .map(|value| value.trim().to_string()) + .filter(|value| !value.is_empty()), + }) +} + +#[tauri::command] +async fn submit_oauth_callback( + gui_config_state: tauri::State<'_, GuiConfigState>, + provider: String, + redirect_url: String, +) -> Result<(), String> { + let redirect_url = redirect_url.trim().to_string(); + if redirect_url.is_empty() { + return Err("回调链接不能为空".to_string()); + } + let config = gui_config_state.snapshot()?; + let provider_key = normalize_management_oauth_provider(&provider)?; + let client = management_http_client()?; + let body = serde_json::json!({ + "provider": provider_key, + "redirect_url": redirect_url, + }); + let response = client + .post(management_endpoint(&config, "oauth-callback")?) + .header("Authorization", management_authorization(&config)?) + .json(&body) + .send() + .await + .map_err(|err| format!("提交 OAuth 回调失败: {err}"))?; + let status = response.status(); + let text = response + .text() + .await + .map_err(|err| format!("读取 OAuth 回调响应失败: {err}"))?; + if !status.is_success() { + return Err(format_management_error(status.as_u16(), &text)); + } + Ok(()) +} + +#[tauri::command] +fn open_external_url(url: String) -> Result<(), String> { + open_external_url_inner(&url) } #[tauri::command] @@ -344,26 +1070,40 @@ async fn install_core_version( #[tauri::command] fn start_core_process( process_state: tauri::State<'_, CoreProcessState>, + gui_config_state: tauri::State<'_, GuiConfigState>, ) -> Result { - start_core_process_inner(process_state.inner())?; - current_core_status(Some(process_state.inner())) + let config = gui_config_state.snapshot()?; + start_core_process_inner(process_state.inner(), &config)?; + if let Err(error) = gui_config_state.set_run_on_startup(true) { + let _ = stop_core_process_inner(process_state.inner()); + return Err(error); + } + current_core_status(Some(process_state.inner()), Some(config.port)) } #[tauri::command] fn stop_core_process( process_state: tauri::State<'_, CoreProcessState>, + gui_config_state: tauri::State<'_, GuiConfigState>, ) -> Result { stop_core_process_inner(process_state.inner())?; - current_core_status(Some(process_state.inner())) + let config = gui_config_state.set_run_on_startup(false)?; + current_core_status(Some(process_state.inner()), Some(config.port)) } #[tauri::command] fn restart_core_process( process_state: tauri::State<'_, CoreProcessState>, + gui_config_state: tauri::State<'_, GuiConfigState>, ) -> Result { + let config = gui_config_state.snapshot()?; let _ = stop_core_process_inner(process_state.inner()); - start_core_process_inner(process_state.inner())?; - current_core_status(Some(process_state.inner())) + start_core_process_inner(process_state.inner(), &config)?; + if let Err(error) = gui_config_state.set_run_on_startup(true) { + let _ = stop_core_process_inner(process_state.inner()); + return Err(error); + } + current_core_status(Some(process_state.inner()), Some(config.port)) } async fn install_core_version_inner( @@ -384,7 +1124,7 @@ async fn install_core_version_inner( let backup_dir = base_dir.join("cpa-core.backup"); let download_dir = base_dir.join("cpa-core.download"); - if current_core_status(None)?.running { + if current_core_status(None, None)?.running { return Err("CPA 内核正在运行,请先停止后再安装或更新".to_string()); } @@ -454,6 +1194,21 @@ async fn install_core_version_inner( async fn fetch_release( client: &reqwest::Client, version: Option<&str>, +) -> Result { + let api_result = fetch_release_from_api(client, version).await; + match api_result { + Ok(release) => Ok(release), + Err(api_error) => fetch_release_from_page(client, version) + .await + .map_err(|page_error| { + format!("{api_error};备用 release 页面请求也失败: {page_error}") + }), + } +} + +async fn fetch_release_from_api( + client: &reqwest::Client, + version: Option<&str>, ) -> Result { let url = version.map_or_else( || RELEASE_API_URL.to_string(), @@ -465,17 +1220,160 @@ async fn fetch_release( }, ); - client - .get(url) + let response = client + .get(&url) + .header(reqwest::header::ACCEPT, GITHUB_API_ACCEPT) + .header("X-GitHub-Api-Version", GITHUB_API_VERSION) .header(reqwest::header::USER_AGENT, USER_AGENT) .send() .await - .map_err(|err| format!("GitHub 请求失败: {err}"))? - .error_for_status() - .map_err(|err| format!("GitHub 返回错误状态: {err}"))? - .json::() + .map_err(|err| format!("GitHub API 请求失败: {err}"))?; + let status = response.status(); + let body = response + .text() .await - .map_err(|err| format!("解析 GitHub release 失败: {err}")) + .map_err(|err| format!("读取 GitHub API 响应失败: {err}"))?; + if !status.is_success() { + return Err(format_github_error(status.as_u16(), &body)); + } + serde_json::from_str::(&body).map_err(|err| { + format!( + "解析 GitHub release 失败: {err}; body={}", + truncate_for_error(&body) + ) + }) +} + +async fn fetch_release_from_page( + client: &reqwest::Client, + version: Option<&str>, +) -> Result { + let page_url = version + .map(|value| format!("{}{}/", RELEASE_TAG_PAGE_PREFIX, normalize_version(value))) + .unwrap_or_else(|| RELEASE_PAGE_URL.to_string()); + let response = client + .get(&page_url) + .header(reqwest::header::ACCEPT, "text/html,application/xhtml+xml") + .header(reqwest::header::USER_AGENT, USER_AGENT) + .send() + .await + .map_err(|err| format!("GitHub release 页面请求失败: {err}"))?; + let status = response.status(); + let final_url = response.url().clone(); + let body = response + .text() + .await + .map_err(|err| format!("读取 GitHub release 页面失败: {err}"))?; + if !status.is_success() { + return Err(format_github_error(status.as_u16(), &body)); + } + + let tag = version + .map(normalize_version) + .or_else(|| release_tag_from_url(&final_url)) + .ok_or_else(|| "GitHub release 页面没有返回版本标签".to_string())?; + let assets_url = format!("{}{tag}", RELEASE_ASSETS_PAGE_PREFIX); + let assets_response = client + .get(&assets_url) + .header(reqwest::header::ACCEPT, "text/html,application/xhtml+xml") + .header(reqwest::header::USER_AGENT, USER_AGENT) + .send() + .await + .map_err(|err| format!("GitHub release 资产页面请求失败: {err}"))?; + let assets_status = assets_response.status(); + let assets_body = assets_response + .text() + .await + .map_err(|err| format!("读取 GitHub release 资产页面失败: {err}"))?; + if !assets_status.is_success() { + return Err(format_github_error(assets_status.as_u16(), &assets_body)); + } + + let assets = parse_release_assets(&assets_body); + if assets.is_empty() { + return Err("GitHub release 页面没有找到可下载资产".to_string()); + } + Ok(GithubRelease { + tag_name: tag, + assets, + }) +} + +fn release_tag_from_url(url: &reqwest::Url) -> Option { + let mut segments = url.path_segments()?; + let tag = segments.next_back()?.trim(); + if tag.is_empty() || tag == "latest" { + None + } else { + Some(tag.to_string()) + } +} + +fn parse_release_assets(html: &str) -> Vec { + let mut assets = Vec::new(); + let mut cursor = 0; + + while let Some(relative_start) = html[cursor..].find("releases/download/") { + let download_start = cursor + relative_start; + let Some(href_start) = html[..download_start].rfind("href=\"") else { + cursor = download_start + "releases/download/".len(); + continue; + }; + let href_start = href_start + "href=\"".len(); + let Some(relative_end) = html[download_start..].find('"') else { + break; + }; + let href_end = download_start + relative_end; + let href = &html[href_start..href_end]; + let Some(name) = href.rsplit('/').next().filter(|name| !name.is_empty()) else { + cursor = href_end + 1; + continue; + }; + let item_end = html[href_end..] + .find("") + .map(|offset| href_end + offset) + .unwrap_or(html.len()); + let item = &html[href_start..item_end]; + let digest = item.find("sha256:").and_then(|offset| { + let value = &item[offset + "sha256:".len()..]; + let hash: String = value + .chars() + .take_while(|character| character.is_ascii_hexdigit()) + .collect(); + (hash.len() == 64).then(|| format!("sha256:{hash}")) + }); + let browser_download_url = if href.starts_with("http://") || href.starts_with("https://") { + href.to_string() + } else { + format!("https://github.com{href}") + }; + + if !assets.iter().any(|asset: &GithubAsset| asset.name == name) { + assets.push(GithubAsset { + name: name.to_string(), + browser_download_url, + size: None, + digest, + }); + } + cursor = href_end + 1; + } + + assets +} + +fn format_github_error(status: u16, body: &str) -> String { + if let Ok(value) = serde_json::from_str::(body) { + if let Some(message) = value.get("message").and_then(|item| item.as_str()) { + return format!("GitHub 返回错误 ({status}): {}", message.trim()); + } + } + let body = body.trim(); + if body.is_empty() { + format!("GitHub 返回错误 ({status})") + } else { + format!("GitHub 返回错误 ({status}): {}", truncate_for_error(body)) + } } async fn fetch_release_cancelable( @@ -523,6 +1421,8 @@ fn select_release_asset<'a>( Ok(asset) } +// Download progress and cancellation require the complete transfer context here. +#[allow(clippy::too_many_arguments)] async fn download_asset( client: &reqwest::Client, url: &str, @@ -551,6 +1451,7 @@ async fn download_asset( result } +#[allow(clippy::too_many_arguments)] async fn download_asset_inner( client: &reqwest::Client, url: &str, @@ -649,7 +1550,10 @@ fn current_core_platform() -> Result { }) } -fn current_core_status(process_state: Option<&CoreProcessState>) -> Result { +fn current_core_status( + process_state: Option<&CoreProcessState>, + management_port: Option, +) -> Result { let install_dir = core_install_dir()?; let binary_path = find_core_binary(&install_dir); let installed = binary_path.is_some(); @@ -659,7 +1563,8 @@ fn current_core_status(process_state: Option<&CoreProcessState>) -> Result) -> Result Result<(), String> { +fn is_management_port_open(port: u16) -> bool { + let address = SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), port); + TcpStream::connect_timeout(&address, Duration::from_millis(150)).is_ok() +} + +fn start_core_process_inner( + process_state: &CoreProcessState, + gui_config: &GuiConfigFile, +) -> Result<(), String> { + ensure_fixed_oauth_dir()?; let install_dir = core_install_dir()?; let binary_path = find_core_binary(&install_dir) .ok_or_else(|| "未安装 CPA 内核,请先安装最新版".to_string())?; - let config_path = ensure_core_config(&install_dir)?; if process_state.managed_pid().is_some() || is_core_running(&binary_path) { return Err("CPA 内核已经在运行".to_string()); } + let management_address = SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), gui_config.port); + if TcpStream::connect_timeout(&management_address, Duration::from_millis(250)).is_ok() { + return Err(format!( + "端口 {} 已被其他程序占用,请更换端口后重试", + gui_config.port + )); + } + let config_path = merge_core_config_for_start(&install_dir, gui_config)?; let config_path = path_to_string(&config_path); - let mut child = Command::new(&binary_path) + let mut command = Command::new(&binary_path); + command .args(["-config", &config_path]) .current_dir(&install_dir) .stdin(Stdio::null()) .stdout(Stdio::null()) - .stderr(Stdio::null()) + .stderr(Stdio::null()); + configure_child_lifetime(&mut command); + + let mut child = command .spawn() .map_err(|err| format!("启动 CPA 内核失败: {err}"))?; - thread::sleep(Duration::from_millis(200)); - if let Some(status) = child - .try_wait() - .map_err(|err| format!("检查 CPA 内核启动状态失败: {err}"))? - { - return Err(format!("CPA 内核启动后立即退出: {status}")); + if let Err(error) = wait_for_core_management_port(&mut child, management_address) { + let _ = terminate_child(&mut child); + return Err(error); } process_state.store_child(child)?; @@ -715,12 +1637,61 @@ fn start_core_process_inner(process_state: &CoreProcessState) -> Result<(), Stri Ok(()) } -fn ensure_core_config(install_dir: &Path) -> Result { - let config_path = install_dir.join(CORE_CONFIG_FILE); - if config_path.is_file() { - return Ok(config_path); +fn wait_for_core_management_port(child: &mut Child, address: SocketAddr) -> Result<(), String> { + let deadline = Instant::now() + Duration::from_secs(10); + loop { + if let Some(status) = child + .try_wait() + .map_err(|err| format!("检查 CPA 内核启动状态失败: {err}"))? + { + return Err(format!("CPA 内核启动后立即退出: {status}")); + } + if TcpStream::connect_timeout(&address, Duration::from_millis(200)).is_ok() { + return Ok(()); + } + if Instant::now() >= deadline { + return Err(format!( + "CPA 内核启动超时:10 秒内未监听管理端口 {}", + address.port() + )); + } + thread::sleep(Duration::from_millis(100)); + } +} + +fn configure_child_lifetime(command: &mut Command) { + #[cfg(target_os = "linux")] + { + use std::os::unix::process::CommandExt; + + let parent_process_id = unsafe { libc::getpid() }; + unsafe { + command.pre_exec(move || { + if libc::prctl(libc::PR_SET_PDEATHSIG, libc::SIGTERM) == -1 { + return Err(io::Error::last_os_error()); + } + + if libc::getppid() != parent_process_id { + return Err(io::Error::other( + "CPA GUI exited before the core process started", + )); + } + + Ok(()) + }); + } } + #[cfg(not(target_os = "linux"))] + let _ = command; +} + +fn merge_core_config_for_start( + install_dir: &Path, + gui_config: &GuiConfigFile, +) -> Result { + let _config_guard = lock_core_config_file()?; + let config_path = install_dir.join(CORE_CONFIG_FILE); let example_config_path = install_dir.join(CORE_EXAMPLE_CONFIG_FILE); if !example_config_path.is_file() { return Err(format!( @@ -729,20 +1700,1138 @@ fn ensure_core_config(install_dir: &Path) -> Result { )); } - fs::copy(&example_config_path, &config_path).map_err(|err| { + let template = fs::read_to_string(&example_config_path).map_err(|err| { format!( - "初始化内核配置失败 {} -> {}: {err}", - path_to_string(&example_config_path), - path_to_string(&config_path) + "读取内核配置模板失败 {}: {err}", + path_to_string(&example_config_path) ) })?; + let current = if config_path.is_file() { + Some(fs::read_to_string(&config_path).map_err(|err| { + format!( + "读取现有内核配置失败 {}: {err}", + path_to_string(&config_path) + ) + })?) + } else { + None + }; + let merged = merge_core_config_yaml(&template, current.as_deref(), gui_config)?; + write_yaml_if_changed(&config_path, &merged)?; Ok(config_path) } +fn patch_core_network_settings(config: &GuiConfigFile) -> Result<(), String> { + let _config_guard = lock_core_config_file()?; + let install_dir = core_install_dir()?; + let config_path = install_dir.join(CORE_CONFIG_FILE); + if !config_path.is_file() { + return Ok(()); + } + + let content = fs::read_to_string(&config_path) + .map_err(|err| format!("读取内核配置失败 {}: {err}", path_to_string(&config_path)))?; + let Some(updated) = patch_core_network_yaml(&content, config)? else { + return Ok(()); + }; + write_yaml_if_changed(&config_path, &updated).map(|_| ()) +} + +fn patch_core_auth_dir(auth_dir: &str) -> Result<(), String> { + patch_existing_core_config(|document| { + document.set("auth-dir", auth_dir.to_string()); + Ok(()) + }) +} + +fn lock_core_config_file() -> Result, String> { + CORE_CONFIG_FILE_LOCK + .lock() + .map_err(|_| "内核配置文件锁已损坏".to_string()) +} + +fn read_installed_core_config_settings() -> Result { + let _config_guard = lock_core_config_file()?; + let (_, document) = read_core_config_document()?; + core_config_settings_from_value(document.get()) +} + +fn current_core_config_settings( + gui_config_state: &GuiConfigState, +) -> Result { + let config_path = core_install_dir()?.join(CORE_CONFIG_FILE); + if config_path.is_file() { + read_installed_core_config_settings() + } else { + let config = gui_config_state.snapshot()?; + Ok(CoreConfigSettings::from(&config)) + } +} + +fn patch_core_api_keys(api_keys: &[String]) -> Result<(), String> { + let _config_guard = lock_core_config_file()?; + let config_path = core_install_dir()?.join(CORE_CONFIG_FILE); + if !config_path.is_file() { + return Ok(()); + } + + let content = fs::read_to_string(&config_path) + .map_err(|err| format!("读取内核配置失败 {}: {err}", path_to_string(&config_path)))?; + let updated = patch_core_api_keys_yaml(&content, api_keys)?; + write_yaml_if_changed(&config_path, &updated)?; + Ok(()) +} + +fn patch_core_management_secret_key(secret_key: &str) -> Result<(), String> { + let _ = secret_key; + let secret_key = DEFAULT_MANAGEMENT_SECRET_KEY.to_string(); + patch_existing_core_config(move |document| { + set_yaml_edit_nested_value(document, "remote-management", "secret-key", secret_key); + Ok(()) + }) +} + +fn patch_core_plugins_enabled(enabled: bool) -> Result<(), String> { + patch_existing_core_config(|document| { + set_yaml_edit_nested_value(document, "plugins", "enabled", enabled); + Ok(()) + }) +} + +fn patch_core_routing_strategy(strategy: &str) -> Result<(), String> { + let strategy = strategy.to_string(); + patch_existing_core_config(move |document| { + set_yaml_edit_nested_value(document, "routing", "strategy", strategy); + Ok(()) + }) +} + +fn patch_existing_core_config(update: F) -> Result<(), String> +where + F: FnOnce(&yaml_edit::Document) -> Result<(), String>, +{ + let _config_guard = lock_core_config_file()?; + let config_path = core_install_dir()?.join(CORE_CONFIG_FILE); + if !config_path.is_file() { + return Ok(()); + } + + let content = fs::read_to_string(&config_path) + .map_err(|err| format!("读取内核配置失败 {}: {err}", path_to_string(&config_path)))?; + let file = content + .parse::() + .map_err(|err| format!("解析内核配置失败: {err}"))?; + let document = file + .document() + .ok_or_else(|| "内核配置没有 YAML 文档".to_string())?; + update(&document)?; + let updated = file.to_string(); + serde_norway::from_str::(&updated) + .map_err(|err| format!("验证更新后的内核配置失败: {err}"))?; + + write_yaml_if_changed(&config_path, &updated)?; + + Ok(()) +} + +fn patch_core_api_keys_yaml(content: &str, api_keys: &[String]) -> Result { + let file = content + .parse::() + .map_err(|err| format!("解析内核配置失败: {err}"))?; + let document = file + .document() + .ok_or_else(|| "内核配置没有 YAML 文档".to_string())?; + clear_legacy_api_key_paths(&document); + + let content = file.to_string(); + let block = render_core_api_keys_yaml(api_keys)?; + let updated = replace_top_level_yaml_block(&content, "api-keys", &block); + serde_norway::from_str::(&updated) + .map_err(|err| format!("验证更新后的内核配置失败: {err}"))?; + Ok(updated) +} + +fn render_core_api_keys_yaml(api_keys: &[String]) -> Result { + if api_keys.is_empty() { + return Ok(String::new()); + } + + let sequence = serde_norway::Value::Sequence( + api_keys + .iter() + .cloned() + .map(serde_norway::Value::String) + .collect(), + ); + let serialized = serde_norway::to_string(&sequence) + .map_err(|err| format!("生成内核鉴权密钥配置失败: {err}"))?; + let mut block = String::from("api-keys:\n"); + for line in serialized.lines() { + block.push_str(" "); + block.push_str(line); + block.push('\n'); + } + Ok(block) +} + +fn replace_top_level_yaml_block(content: &str, key: &str, block: &str) -> String { + let lines = yaml_line_ranges(content); + let key_prefix = format!("{key}:"); + + if let Some((line_index, (start, end))) = + lines.iter().copied().enumerate().find(|(_, range)| { + let line = yaml_line_content(content, *range); + !line.chars().next().is_some_and(char::is_whitespace) && line.starts_with(&key_prefix) + }) + { + let line = yaml_line_content(content, (start, end)); + let value = line[key_prefix.len()..].trim(); + let mut replace_end = end; + if value.is_empty() || value.starts_with('#') { + for (next_start, next_end) in lines.iter().copied().skip(line_index + 1) { + let next = yaml_line_content(content, (next_start, next_end)); + if next.chars().next().is_some_and(char::is_whitespace) { + replace_end = next_end; + } else { + break; + } + } + } + return replace_yaml_range(content, start, replace_end, block); + } + + let insertion = lines + .iter() + .copied() + .find(|range| yaml_line_content(content, *range).trim() == "# API keys for authentication") + .map(|(_, end)| end) + .or_else(|| { + lines + .iter() + .copied() + .find(|range| { + let line = yaml_line_content(content, *range); + !line.chars().next().is_some_and(char::is_whitespace) + && line.starts_with("auth-dir:") + }) + .map(|(_, end)| end) + }) + .unwrap_or(0); + replace_yaml_range(content, insertion, insertion, block) +} + +fn yaml_line_ranges(content: &str) -> Vec<(usize, usize)> { + let mut ranges = Vec::new(); + let mut start = 0; + for (index, character) in content.char_indices() { + if character == '\n' { + ranges.push((start, index + 1)); + start = index + 1; + } + } + if start < content.len() { + ranges.push((start, content.len())); + } + ranges +} + +fn yaml_line_content(content: &str, (start, end): (usize, usize)) -> &str { + content[start..end].trim_end_matches(['\r', '\n']) +} + +fn replace_yaml_range(content: &str, start: usize, end: usize, block: &str) -> String { + let mut result = String::with_capacity(content.len() + block.len()); + result.push_str(&content[..start]); + if !block.is_empty() { + result.push_str(block); + if !block.ends_with('\n') && (end < content.len() || content.ends_with('\n')) { + result.push('\n'); + } + } + result.push_str(&content[end..]); + result +} + +fn clear_legacy_api_key_paths(document: &yaml_edit::Document) { + use yaml_edit::path::YamlPath; + + document.remove_path("auth.providers.config-api-key.api-key-entries"); + document.remove_path("auth.providers.config-api-key.api-keys"); +} + +fn set_yaml_edit_nested_value( + document: &yaml_edit::Document, + section: &str, + key: &str, + value: impl yaml_edit::AsYaml, +) -> bool { + if let Some(node) = document.get(section) { + if let Some(mapping) = node.as_mapping() { + mapping.set(key, value); + return true; + } + } + false +} + +fn read_core_config_document() -> Result<(PathBuf, yaml_serde_edit::YamlValue), String> { + let config_path = core_install_dir()?.join(CORE_CONFIG_FILE); + if !config_path.is_file() { + return Err("内核配置尚未生成,请先启动 CPA 内核".to_string()); + } + + let content = fs::read_to_string(&config_path) + .map_err(|err| format!("读取内核配置失败 {}: {err}", path_to_string(&config_path)))?; + let document = yaml_serde_edit::YamlValue::parse(&content) + .map_err(|err| format!("解析内核配置失败: {err}"))?; + Ok((config_path, document)) +} + +fn core_config_settings_from_value( + document: &serde_norway::Value, +) -> Result { + let root = document + .as_mapping() + .ok_or_else(|| "内核配置顶层必须是 YAML 映射".to_string())?; + let api_keys = extract_core_api_keys(root)? + .into_iter() + .filter(|api_key| !is_example_core_api_key(api_key)) + .collect(); + let management_secret_key = extract_core_management_secret_key(root)?; + let plugins_enabled = nested_yaml_value(root, &["plugins", "enabled"]) + .map(|value| { + value + .as_bool() + .ok_or_else(|| "plugins.enabled 必须是布尔值".to_string()) + }) + .transpose()? + .unwrap_or(false); + let routing_strategy = nested_yaml_value(root, &["routing", "strategy"]) + .map(|value| { + value + .as_str() + .map(str::to_string) + .ok_or_else(|| "routing.strategy 必须是字符串".to_string()) + }) + .transpose()? + .unwrap_or_else(|| "round-robin".to_string()); + + Ok(CoreConfigSettings { + api_keys, + management_secret_configured: management_secret_key + .as_deref() + .is_some_and(|value| !value.is_empty()), + plugins_enabled, + routing_strategy, + management_secret_key, + }) +} + +fn extract_core_api_keys(root: &serde_norway::Mapping) -> Result, String> { + if let Some(value) = yaml_mapping_value(root, "api-keys") { + return extract_api_key_sequence(value, "api-keys"); + } + + let legacy = nested_yaml_value(root, &["auth", "providers", "config-api-key"]) + .and_then(serde_norway::Value::as_mapping); + let Some(legacy) = legacy else { + return Ok(Vec::new()); + }; + let value = yaml_mapping_value(legacy, "api-key-entries") + .or_else(|| yaml_mapping_value(legacy, "api-keys")); + value + .map(|value| extract_api_key_sequence(value, "auth.providers.config-api-key")) + .transpose() + .map(Option::unwrap_or_default) +} + +fn extract_api_key_sequence( + value: &serde_norway::Value, + field_name: &str, +) -> Result, String> { + if value.is_null() { + return Ok(Vec::new()); + } + + let sequence = value + .as_sequence() + .ok_or_else(|| format!("{field_name} 必须是数组"))?; + sequence + .iter() + .filter_map(extract_api_key_value) + .collect::, _>>() +} + +fn extract_api_key_value(value: &serde_norway::Value) -> Option> { + if let Some(value) = value.as_str() { + let value = value.trim(); + return (!value.is_empty()).then(|| Ok(value.to_string())); + } + + let mapping = value.as_mapping()?; + for key in ["api-key", "apiKey", "key", "Key"] { + if let Some(value) = yaml_mapping_value(mapping, key).and_then(serde_norway::Value::as_str) + { + let value = value.trim(); + if !value.is_empty() { + return Some(Ok(value.to_string())); + } + } + } + + Some(Err( + "鉴权密钥条目必须是字符串或包含 key 字段的映射".to_string() + )) +} + +fn extract_core_management_secret_key( + root: &serde_norway::Mapping, +) -> Result, String> { + let Some(value) = nested_yaml_value(root, &["remote-management", "secret-key"]) else { + return Ok(None); + }; + let value = value + .as_str() + .ok_or_else(|| "remote-management.secret-key 必须是字符串".to_string())? + .trim() + .to_string(); + if value.is_empty() || is_hashed_management_secret_key(&value) { + return Ok(None); + } + Ok(Some(value)) +} + +#[cfg(test)] +fn set_core_api_keys( + document: &mut serde_norway::Value, + api_keys: Vec, +) -> Result<(), String> { + let root = document + .as_mapping_mut() + .ok_or_else(|| "内核配置顶层必须是 YAML 映射".to_string())?; + root.insert( + yaml_key("api-keys"), + serde_norway::Value::Sequence( + api_keys + .into_iter() + .map(serde_norway::Value::String) + .collect(), + ), + ); + remove_legacy_api_keys(root); + Ok(()) +} + +#[cfg(test)] +fn remove_legacy_api_keys(root: &mut serde_norway::Mapping) { + let Some(auth) = + yaml_mapping_value_mut(root, "auth").and_then(serde_norway::Value::as_mapping_mut) + else { + return; + }; + let Some(providers) = + yaml_mapping_value_mut(auth, "providers").and_then(serde_norway::Value::as_mapping_mut) + else { + return; + }; + let Some(provider) = yaml_mapping_value_mut(providers, "config-api-key") + .and_then(serde_norway::Value::as_mapping_mut) + else { + return; + }; + provider.remove(yaml_key("api-key-entries")); + provider.remove(yaml_key("api-keys")); +} + +#[cfg(test)] +fn set_nested_yaml_value( + document: &mut serde_norway::Value, + path: &[&str], + value: T, +) -> Result<(), String> +where + T: Into, +{ + if path.len() != 2 { + return Err("内核配置路径无效".to_string()); + } + + let root = document + .as_mapping_mut() + .ok_or_else(|| "内核配置顶层必须是 YAML 映射".to_string())?; + let section = root + .entry(yaml_key(path[0])) + .or_insert_with(|| serde_norway::Value::Mapping(serde_norway::Mapping::new())); + let section = section + .as_mapping_mut() + .ok_or_else(|| format!("{} 必须是 YAML 映射", path[0]))?; + section.insert(yaml_key(path[1]), value.into()); + Ok(()) +} + +fn nested_yaml_value<'a>( + root: &'a serde_norway::Mapping, + path: &[&str], +) -> Option<&'a serde_norway::Value> { + let (first, rest) = path.split_first()?; + let mut value = yaml_mapping_value(root, first)?; + for key in rest { + value = yaml_mapping_value(value.as_mapping()?, key)?; + } + Some(value) +} + +fn yaml_mapping_value<'a>( + mapping: &'a serde_norway::Mapping, + key: &str, +) -> Option<&'a serde_norway::Value> { + mapping.get(yaml_key(key)) +} + +#[cfg(test)] +fn yaml_mapping_value_mut<'a>( + mapping: &'a mut serde_norway::Mapping, + key: &str, +) -> Option<&'a mut serde_norway::Value> { + mapping.get_mut(yaml_key(key)) +} + +fn yaml_key(key: &str) -> serde_norway::Value { + serde_norway::Value::String(key.to_string()) +} + +fn management_http_client() -> Result { + reqwest::Client::builder() + .connect_timeout(Duration::from_secs(10)) + .timeout(Duration::from_secs(30)) + .build() + .map_err(|err| format!("创建管理 API 客户端失败: {err}")) +} + +fn management_authorization(config: &GuiConfigFile) -> Result { + let _ = config; + Ok(format!("Bearer {DEFAULT_MANAGEMENT_SECRET_KEY}")) +} + +fn management_endpoint(config: &GuiConfigFile, path: &str) -> Result { + if config.port == 0 { + return Err("内核端口无效".to_string()); + } + let path = path.trim_start_matches('/'); + Ok(format!( + "http://127.0.0.1:{}/v0/management/{path}", + config.port + )) +} + +fn normalize_management_oauth_provider(provider: &str) -> Result { + let key = provider.trim().to_ascii_lowercase().replace('_', "-"); + let key = match key.as_str() { + "claude" | "anthropic" => "anthropic".to_string(), + "anti-gravity" => "antigravity".to_string(), + "grok" | "x-ai" | "x.ai" => "xai".to_string(), + other => other.to_string(), + }; + if key.is_empty() + || !key + .bytes() + .all(|byte| byte.is_ascii_lowercase() || byte.is_ascii_digit() || byte == b'-') + { + return Err("无效的 OAuth 提供商".to_string()); + } + Ok(key) +} + +fn management_oauth_uses_webui_callback(provider_key: &str) -> bool { + matches!(provider_key, "codex" | "anthropic" | "antigravity" | "xai") +} + +async fn read_management_json(response: reqwest::Response) -> Result +where + T: for<'de> Deserialize<'de>, +{ + let status = response.status(); + let text = response + .text() + .await + .map_err(|err| format!("读取管理 API 响应失败: {err}"))?; + if !status.is_success() { + return Err(format_management_error(status.as_u16(), &text)); + } + if text.trim().is_empty() { + return Err("管理 API 返回了空响应".to_string()); + } + serde_json::from_str::(&text).map_err(|err| { + format!( + "解析管理 API 响应失败: {err}; body={}", + truncate_for_error(&text) + ) + }) +} + +async fn read_management_value(response: reqwest::Response) -> Result { + let status = response.status(); + let text = response + .text() + .await + .map_err(|err| format!("读取管理 API 响应失败: {err}"))?; + if !status.is_success() { + return Err(format_management_error(status.as_u16(), &text)); + } + if text.trim().is_empty() { + return Ok(serde_json::Value::Null); + } + match serde_json::from_str::(&text) { + Ok(value) => Ok(value), + Err(_) => Ok(serde_json::Value::String(text)), + } +} + +async fn read_management_text(response: reqwest::Response) -> Result { + let status = response.status(); + let text = response + .text() + .await + .map_err(|err| format!("读取管理 API 响应失败: {err}"))?; + if !status.is_success() { + return Err(format_management_error(status.as_u16(), &text)); + } + Ok(text) +} + +fn format_management_error(status: u16, body: &str) -> String { + if let Ok(value) = serde_json::from_str::(body) { + if let Some(message) = value + .get("error") + .and_then(|item| item.as_str()) + .or_else(|| value.get("message").and_then(|item| item.as_str())) + { + let message = message.trim(); + if !message.is_empty() { + return format!("管理 API 错误 ({status}): {message}"); + } + } + } + let body = body.trim(); + if body.is_empty() { + format!("管理 API 错误 ({status})") + } else { + format!("管理 API 错误 ({status}): {}", truncate_for_error(body)) + } +} + +fn truncate_for_error(value: &str) -> String { + const LIMIT: usize = 240; + let trimmed = value.trim(); + if trimmed.chars().count() <= LIMIT { + return trimmed.to_string(); + } + let shortened: String = trimmed.chars().take(LIMIT).collect(); + format!("{shortened}…") +} + +fn open_external_url_inner(url: &str) -> Result<(), String> { + let url = url.trim(); + if url.is_empty() { + return Err("链接为空".to_string()); + } + if !(url.starts_with("http://") || url.starts_with("https://")) { + return Err("只允许打开 http/https 链接".to_string()); + } + + let result = { + #[cfg(target_os = "windows")] + { + Command::new("cmd") + .args(["/C", "start", "", url]) + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .spawn() + } + #[cfg(target_os = "macos")] + { + Command::new("open") + .arg(url) + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .spawn() + } + #[cfg(all(unix, not(target_os = "macos")))] + { + Command::new("xdg-open") + .arg(url) + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .spawn() + } + }; + + result + .map(|_| ()) + .map_err(|err| format!("打开浏览器失败: {err}")) +} + +fn validate_core_api_key(api_key: &str) -> Result<(), String> { + if api_key.is_empty() { + return Err("鉴权密钥不能为空".to_string()); + } + if !api_key.bytes().all(|byte| (0x21..=0x7e).contains(&byte)) { + return Err("鉴权密钥只能包含 ASCII 可见字符,且不能包含空格".to_string()); + } + if is_example_core_api_key(api_key) { + return Err("不能使用内核模板里的示例鉴权密钥".to_string()); + } + Ok(()) +} + +fn validate_api_key_remark(remark: &str) -> Result<(), String> { + if remark.chars().count() > 80 { + return Err("密钥备注不能超过 80 个字符".to_string()); + } + if remark.chars().any(char::is_control) { + return Err("密钥备注不能包含换行或控制字符".to_string()); + } + Ok(()) +} + +fn validate_management_secret_key(secret_key: &str) -> Result<(), String> { + if secret_key != DEFAULT_MANAGEMENT_SECRET_KEY { + return Err("管理密钥统一固定为 123456".to_string()); + } + Ok(()) +} + +fn is_example_core_api_key(api_key: &str) -> bool { + let value = api_key.trim(); + value == "your-api-key" || value.starts_with("your-api-key-") +} + +fn is_hashed_management_secret_key(secret_key: &str) -> bool { + let value = secret_key.trim(); + value.starts_with("$2a$") + || value.starts_with("$2b$") + || value.starts_with("$2y$") + || value.starts_with("$argon2") + || value.starts_with("$scrypt$") + || value.starts_with("bcrypt:") + || value.starts_with("argon2:") + || value.starts_with("argon2id:") + || value.starts_with("sha256:") + || value.starts_with("sha512:") +} + +fn validate_routing_strategy(strategy: &str) -> Result<(), String> { + if matches!(strategy, "round-robin" | "fill-first") { + return Ok(()); + } + Err("路由策略只支持 round-robin 或 fill-first".to_string()) +} + +fn merge_core_config_yaml( + template: &str, + current: Option<&str>, + config: &GuiConfigFile, +) -> Result { + let mut document = yaml_serde_edit::YamlValue::parse(template) + .map_err(|err| format!("解析内核配置模板失败: {err}"))?; + let mut merged = document.get().clone(); + + if let Some(current) = current { + let current = serde_norway::from_str::(current) + .map_err(|err| format!("解析现有内核配置失败: {err}"))?; + merge_yaml_values(&mut merged, current); + } + + document.set(merged); + apply_gui_managed_settings(&document.get_string(), config) +} + +fn patch_core_network_yaml( + content: &str, + config: &GuiConfigFile, +) -> Result, String> { + let mut document = yaml_serde_edit::YamlValue::parse(content) + .map_err(|err| format!("解析内核配置失败: {err}"))?; + let mut updated = document.get().clone(); + apply_network_settings(&mut updated, config)?; + + if updated == *document.get() { + return Ok(None); + } + + document.set(updated); + Ok(Some(document.get_string())) +} + +fn merge_yaml_values(base: &mut serde_norway::Value, current: serde_norway::Value) { + match (base, current) { + ( + serde_norway::Value::Mapping(base_mapping), + serde_norway::Value::Mapping(current_mapping), + ) => { + for (key, current_value) in current_mapping { + if let Some(base_value) = base_mapping.get_mut(&key) { + merge_yaml_values(base_value, current_value); + } else { + base_mapping.insert(key, current_value); + } + } + } + (base, current) => *base = current, + } +} + +fn apply_network_settings( + document: &mut serde_norway::Value, + config: &GuiConfigFile, +) -> Result<(), String> { + let mapping = document + .as_mapping_mut() + .ok_or_else(|| "内核配置顶层必须是 YAML 映射".to_string())?; + + let host = if config.allow_lan { + "0.0.0.0" + } else { + "127.0.0.1" + }; + mapping.insert( + serde_norway::Value::String("host".to_string()), + serde_norway::Value::String(host.to_string()), + ); + mapping.insert( + serde_norway::Value::String("port".to_string()), + serde_norway::to_value(config.port).map_err(|err| format!("序列化内核端口失败: {err}"))?, + ); + Ok(()) +} + +fn apply_gui_managed_settings(content: &str, config: &GuiConfigFile) -> Result { + let file = content + .parse::() + .map_err(|err| format!("解析合并后的内核配置失败: {err}"))?; + let document = file + .document() + .ok_or_else(|| "合并后的内核配置没有 YAML 文档".to_string())?; + let host = if config.allow_lan { + "0.0.0.0" + } else { + "127.0.0.1" + }; + document.set("host", host); + document.set("port", config.port); + document.set("auth-dir", config.auth_dir.clone()); + set_yaml_edit_nested_value( + &document, + "remote-management", + "secret-key", + DEFAULT_MANAGEMENT_SECRET_KEY, + ); + set_yaml_edit_nested_value(&document, "plugins", "enabled", config.plugins_enabled); + set_yaml_edit_nested_value( + &document, + "routing", + "strategy", + config.routing_strategy.clone(), + ); + + let updated = + patch_core_api_keys_yaml(&file.to_string(), &gui_api_key_values(&config.api_keys))?; + serde_norway::from_str::(&updated) + .map_err(|err| format!("验证启动内核配置失败: {err}"))?; + Ok(updated) +} + +fn write_yaml_if_changed(path: &Path, content: &str) -> Result { + if fs::read_to_string(path).ok().as_deref() == Some(content) { + return Ok(false); + } + + use std::sync::atomic::{AtomicU64, Ordering}; + + static SEQUENCE: AtomicU64 = AtomicU64::new(0); + let directory = path.parent().unwrap_or_else(|| Path::new(".")); + let file_name = path + .file_name() + .and_then(|name| name.to_str()) + .unwrap_or("config.yaml"); + let temporary_path = directory.join(format!( + ".{file_name}.tmp.{}.{}", + std::process::id(), + SEQUENCE.fetch_add(1, Ordering::Relaxed) + )); + + let write_result = (|| -> io::Result<()> { + let mut file = File::create(&temporary_path)?; + file.write_all(content.as_bytes())?; + file.sync_all()?; + replace_file_atomically(&temporary_path, path) + })(); + + if let Err(error) = write_result { + let _ = fs::remove_file(&temporary_path); + return Err(format!( + "原子写入配置失败 {}: {error}", + path_to_string(path) + )); + } + + Ok(true) +} + +#[cfg(not(windows))] +fn replace_file_atomically(temporary_path: &Path, destination_path: &Path) -> io::Result<()> { + fs::rename(temporary_path, destination_path) +} + +#[cfg(windows)] +fn replace_file_atomically(temporary_path: &Path, destination_path: &Path) -> io::Result<()> { + if !destination_path.exists() { + return fs::rename(temporary_path, destination_path); + } + + use std::{os::windows::ffi::OsStrExt, ptr}; + use windows_sys::Win32::Storage::FileSystem::ReplaceFileW; + + let destination = destination_path + .as_os_str() + .encode_wide() + .chain(Some(0)) + .collect::>(); + let replacement = temporary_path + .as_os_str() + .encode_wide() + .chain(Some(0)) + .collect::>(); + let replaced = unsafe { + ReplaceFileW( + destination.as_ptr(), + replacement.as_ptr(), + ptr::null(), + 0, + ptr::null(), + ptr::null(), + ) + }; + + if replaced == 0 { + return Err(io::Error::last_os_error()); + } + + Ok(()) +} + +fn fixed_oauth_dir() -> Result { + Ok(core_base_dir()?.join(OAUTH_DIR_NAME)) +} + +fn ensure_fixed_oauth_dir() -> Result { + let directory = fixed_oauth_dir()?; + fs::create_dir_all(&directory) + .map_err(|err| format!("创建固定凭证目录失败 {}: {err}", path_to_string(&directory)))?; + Ok(directory) +} + +fn load_or_create_gui_config() -> Result { + ensure_fixed_oauth_dir()?; + let config_path = gui_config_path()?; + let legacy_config_path = legacy_gui_config_path()?; + + let (mut config, presence, mut changed) = if config_path.is_file() { + let content = fs::read_to_string(&config_path) + .map_err(|err| format!("读取 GUI 配置失败 {}: {err}", path_to_string(&config_path)))?; + let config = toml::from_str::(&content) + .map_err(|err| format!("解析 GUI 配置失败: {err}"))?; + let presence = toml::from_str::(&content) + .map_err(|err| format!("解析 GUI 配置字段失败: {err}"))?; + (config, presence, false) + } else if legacy_config_path.is_file() { + let content = fs::read_to_string(&legacy_config_path).map_err(|err| { + format!( + "读取旧 GUI 配置失败 {}: {err}", + path_to_string(&legacy_config_path) + ) + })?; + let config = serde_yaml::from_str::(&content) + .map_err(|err| format!("解析旧 GUI 配置失败: {err}"))?; + let presence = serde_yaml::from_str::(&content) + .map_err(|err| format!("解析旧 GUI 配置字段失败: {err}"))?; + (config, presence, true) + } else { + (GuiConfigFile::default(), GuiConfigPresence::default(), true) + }; + + let missing_core_settings = presence.api_keys.is_none() + || presence.management_secret_key.is_none() + || presence.plugins_enabled.is_none() + || presence.routing_strategy.is_none(); + if missing_core_settings { + if let Ok(core_settings) = read_installed_core_config_settings() { + if presence.api_keys.is_none() { + config.api_keys = merge_core_api_keys_with_gui_metadata( + &config.api_keys, + &core_settings.api_keys, + None, + ); + } + if presence.plugins_enabled.is_none() { + config.plugins_enabled = core_settings.plugins_enabled; + } + if presence.routing_strategy.is_none() { + config.routing_strategy = core_settings.routing_strategy; + } + } + changed = true; + } + if presence.auth_dir.is_none() { + changed = true; + } + changed |= sanitize_gui_config(&mut config)?; + validate_gui_config(&config)?; + if changed { + write_gui_config(&config)?; + } + patch_core_auth_dir(&config.auth_dir)?; + patch_core_api_keys(&gui_api_key_values(&config.api_keys))?; + Ok(config) +} + +#[cfg(test)] +fn apply_core_settings_to_gui_config( + config: &mut GuiConfigFile, + core_settings: &CoreConfigSettings, +) { + config.api_keys = + merge_core_api_keys_with_gui_metadata(&config.api_keys, &core_settings.api_keys, None); + config.management_secret_key = DEFAULT_MANAGEMENT_SECRET_KEY.to_string(); + config.plugins_enabled = core_settings.plugins_enabled; + config.routing_strategy = core_settings.routing_strategy.clone(); +} + +fn built_in_api_key_entry() -> GuiApiKeyEntry { + GuiApiKeyEntry { + key: DEFAULT_API_KEY.to_string(), + remark: DEFAULT_API_KEY_REMARK.to_string(), + } +} + +fn gui_api_key_values(entries: &[GuiApiKeyEntry]) -> Vec { + entries.iter().map(|entry| entry.key.clone()).collect() +} + +fn merge_core_api_keys_with_gui_metadata( + existing: &[GuiApiKeyEntry], + core_api_keys: &[String], + added_api_key: Option<&GuiApiKeyEntry>, +) -> Vec { + let mut merged = vec![built_in_api_key_entry()]; + + for api_key in core_api_keys { + let api_key = api_key.trim(); + if api_key.is_empty() || api_key == DEFAULT_API_KEY || is_example_core_api_key(api_key) { + continue; + } + if merged.iter().any(|entry| entry.key == api_key) { + continue; + } + + let remark = added_api_key + .filter(|entry| entry.key == api_key) + .map(|entry| entry.remark.clone()) + .or_else(|| { + existing + .iter() + .find(|entry| entry.key == api_key) + .map(|entry| entry.remark.clone()) + }) + .unwrap_or_default(); + merged.push(GuiApiKeyEntry { + key: api_key.to_string(), + remark, + }); + } + + merged +} + +fn sanitize_gui_config(config: &mut GuiConfigFile) -> Result { + let mut changed = false; + let original_api_keys = config.api_keys.clone(); + let configured_keys = config + .api_keys + .iter() + .map(|entry| entry.key.trim().to_string()) + .collect::>(); + config.api_keys = + merge_core_api_keys_with_gui_metadata(&config.api_keys, &configured_keys, None); + for entry in &mut config.api_keys { + entry.key = entry.key.trim().to_string(); + entry.remark = entry.remark.trim().to_string(); + if entry.key == DEFAULT_API_KEY { + entry.remark = DEFAULT_API_KEY_REMARK.to_string(); + } + } + if config.api_keys != original_api_keys { + changed = true; + } + if config.management_secret_key != DEFAULT_MANAGEMENT_SECRET_KEY { + config.management_secret_key = DEFAULT_MANAGEMENT_SECRET_KEY.to_string(); + changed = true; + } + let auth_dir = path_to_string(&fixed_oauth_dir()?); + if config.auth_dir != auth_dir { + config.auth_dir = auth_dir; + changed = true; + } + Ok(changed) +} + +fn write_gui_config(config: &GuiConfigFile) -> Result<(), String> { + validate_gui_config(config)?; + let config_path = gui_config_path()?; + let content = + toml::to_string_pretty(config).map_err(|err| format!("序列化 GUI 配置失败: {err}"))?; + write_yaml_if_changed(&config_path, &content).map(|_| ()) +} + +fn validate_gui_config(config: &GuiConfigFile) -> Result<(), String> { + if config.port == 0 { + return Err("GUI 配置端口必须在 1 到 65535 之间".to_string()); + } + for entry in &config.api_keys { + validate_core_api_key(&entry.key)?; + validate_api_key_remark(&entry.remark)?; + } + if config.routing_strategy.trim().is_empty() { + return Err("GUI 配置路由策略不能为空".to_string()); + } + let expected_auth_dir = fixed_oauth_dir()?; + if PathBuf::from(&config.auth_dir) != expected_auth_dir { + return Err(format!( + "凭证目录固定为 {},不允许自定义", + path_to_string(&expected_auth_dir) + )); + } + validate_management_secret_key(&config.management_secret_key)?; + + Ok(()) +} + +fn gui_config_path() -> Result { + Ok(core_base_dir()?.join(GUI_CONFIG_FILE)) +} + +fn legacy_gui_config_path() -> Result { + Ok(core_base_dir()?.join(LEGACY_GUI_CONFIG_FILE)) +} + fn stop_core_process_inner(process_state: &CoreProcessState) -> Result<(), String> { if let Some(mut child) = process_state.take_child() { terminate_child(&mut child)?; + process_state.clear_lifetime_guard(); return Ok(()); } @@ -950,6 +3039,71 @@ fn find_core_process_ids_by_name() -> Vec { .unwrap_or_default() } +fn shutdown_managed_core(process_state: &CoreProcessState, gui_config_state: &GuiConfigState) { + let was_running = process_state.managed_pid().is_some(); + let _ = gui_config_state.set_run_on_startup(was_running); + + if let Some(mut child) = process_state.take_child() { + let _ = terminate_child(&mut child); + } + process_state.clear_lifetime_guard(); +} + +#[cfg(windows)] +fn attach_child_to_windows_job(child: &Child) -> Result { + use std::{mem, os::windows::io::AsRawHandle, ptr}; + use windows_sys::Win32::{ + Foundation::{CloseHandle, HANDLE}, + System::JobObjects::{ + AssignProcessToJobObject, CreateJobObjectW, JobObjectExtendedLimitInformation, + SetInformationJobObject, JOBOBJECT_EXTENDED_LIMIT_INFORMATION, + JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE, + }, + }; + + unsafe { + let job = CreateJobObjectW(ptr::null(), ptr::null()); + if job.is_null() { + return Err(format!( + "创建 CPA 内核进程作业失败: {}", + io::Error::last_os_error() + )); + } + + let mut information: JOBOBJECT_EXTENDED_LIMIT_INFORMATION = mem::zeroed(); + information.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; + let configured = SetInformationJobObject( + job, + JobObjectExtendedLimitInformation, + &information as *const _ as *const _, + mem::size_of::() as u32, + ); + if configured == 0 { + let error = io::Error::last_os_error(); + CloseHandle(job); + return Err(format!("配置 CPA 内核进程作业失败: {error}")); + } + + let process_handle = child.as_raw_handle() as HANDLE; + if AssignProcessToJobObject(job, process_handle) == 0 { + let error = io::Error::last_os_error(); + CloseHandle(job); + return Err(format!("托管 CPA 内核子进程失败: {error}")); + } + + Ok(job as isize) + } +} + +#[cfg(windows)] +fn close_windows_handle(handle: isize) { + use windows_sys::Win32::Foundation::{CloseHandle, HANDLE}; + + unsafe { + CloseHandle(handle as HANDLE); + } +} + fn terminate_child(child: &mut Child) -> Result<(), String> { let process_id = child.id(); @@ -1222,13 +3376,56 @@ fn path_to_string(path: &Path) -> String { } fn main() { - tauri::Builder::default() + let gui_config = match load_or_create_gui_config() { + Ok(config) => config, + Err(error) => { + eprintln!("{error}"); + let mut config = GuiConfigFile::default(); + if let Err(sanitize_error) = sanitize_gui_config(&mut config) { + eprintln!("初始化固定凭证目录失败: {sanitize_error}"); + } + config + } + }; + + let app = tauri::Builder::default() .manage(CoreDownloadState::default()) .manage(CoreProcessState::default()) + .manage(GuiConfigState::new(gui_config)) + .setup(|app| { + let gui_config_state = app.state::(); + let process_state = app.state::(); + let config = gui_config_state.snapshot().map_err(io::Error::other)?; + + if config.run_on_startup { + if let Err(error) = start_core_process_inner(process_state.inner(), &config) { + eprintln!("自动启动 CPA 内核失败: {error}"); + } + } + + Ok(()) + }) .invoke_handler(tauri::generate_handler![ health_check, detect_core_platform, get_core_status, + get_gui_settings, + get_lan_ipv4, + save_gui_settings, + get_core_config_settings, + add_core_api_key, + delete_core_api_key, + set_core_management_secret_key, + clear_core_management_secret_key, + management_request, + upload_auth_file, + download_auth_file, + set_core_plugins_enabled, + set_core_routing_strategy, + start_oauth_login, + get_oauth_status, + submit_oauth_callback, + open_external_url, check_latest_core, install_core_version, cancel_core_install, @@ -1237,6 +3434,534 @@ fn main() { stop_core_process, restart_core_process ]) - .run(tauri::generate_context!()) - .expect("failed to run app"); + .build(tauri::generate_context!()) + .expect("failed to build app"); + + app.run(|app_handle, event| { + if matches!(event, tauri::RunEvent::Exit) { + let process_state = app_handle.state::(); + let gui_config_state = app_handle.state::(); + shutdown_managed_core(process_state.inner(), gui_config_state.inner()); + } + }); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn gui_config_defaults_are_stable() { + let config = GuiConfigFile::default(); + let content = toml::to_string_pretty(&config).unwrap(); + + assert!(content.contains("port = 8317")); + assert!(content.contains("allow-lan = false")); + assert!(content.contains("run-on-startup = false")); + assert!(content.contains("auth-dir = ")); + assert!(content.contains("[[api-keys]]")); + assert!(content.contains("key = \"123456\"")); + assert!(content.contains("remark = \"内置密钥\"")); + assert!(content.contains("management-secret-key = \"123456\"")); + assert!(content.contains("plugins-enabled = false")); + assert!(content.contains("routing-strategy = \"round-robin\"")); + } + + #[test] + fn legacy_string_api_keys_gain_remarks_and_keep_custom_keys() { + let legacy = "port = 8317\nallow-lan = false\nrun-on-startup = false\nauth-dir = \"/tmp/oauth\"\napi-keys = [\"123456\", \"custom-key\"]\nmanagement-secret-key = \"123456\"\nplugins-enabled = false\nrouting-strategy = \"round-robin\"\n"; + let mut config = toml::from_str::(legacy).unwrap(); + + assert!(sanitize_gui_config(&mut config).unwrap()); + assert_eq!( + gui_api_key_values(&config.api_keys), + vec!["123456", "custom-key"] + ); + assert_eq!(config.api_keys[0].remark, DEFAULT_API_KEY_REMARK); + assert!(config.api_keys[1].remark.is_empty()); + + let serialized = toml::to_string_pretty(&config).unwrap(); + assert!(serialized.contains("[[api-keys]]")); + assert!(serialized.contains("remark = \"内置密钥\"")); + let reparsed = toml::from_str::(&serialized).unwrap(); + assert_eq!(reparsed.api_keys, config.api_keys); + } + + #[test] + fn api_key_remarks_follow_matching_core_keys() { + let existing = vec![ + built_in_api_key_entry(), + GuiApiKeyEntry { + key: "custom-key".to_string(), + remark: "开发环境".to_string(), + }, + ]; + let core_keys = vec!["custom-key".to_string(), "new-key".to_string()]; + + let merged = merge_core_api_keys_with_gui_metadata(&existing, &core_keys, None); + + assert_eq!( + gui_api_key_values(&merged), + vec!["123456", "custom-key", "new-key"] + ); + assert_eq!(merged[1].remark, "开发环境"); + assert!(merged[2].remark.is_empty()); + } + + #[test] + fn core_config_view_exposes_api_key_metadata_for_the_webview() { + let view = serde_json::to_value(CoreConfigView::from(&GuiConfigFile::default())).unwrap(); + + assert_eq!(view["apiKeys"][0]["apiKey"], DEFAULT_API_KEY); + assert_eq!(view["apiKeys"][0]["remark"], DEFAULT_API_KEY_REMARK); + assert_eq!(view["apiKeys"][0]["builtIn"], true); + } + + #[test] + fn management_secret_key_is_normalized_to_fixed_value() { + let mut config = GuiConfigFile { + management_secret_key: "old-management-secret".to_string(), + ..GuiConfigFile::default() + }; + + assert!(sanitize_gui_config(&mut config).unwrap()); + assert_eq!(config.management_secret_key, DEFAULT_MANAGEMENT_SECRET_KEY); + + let template = "remote-management:\n secret-key: stale-secret\n"; + let merged = merge_core_config_yaml(template, None, &config).unwrap(); + let document = serde_norway::from_str::(&merged).unwrap(); + assert_eq!( + document["remote-management"]["secret-key"], + DEFAULT_MANAGEMENT_SECRET_KEY + ); + } + + #[test] + fn auth_directory_is_fixed_and_written_to_core_config() { + let mut config = GuiConfigFile { + auth_dir: "/tmp/user-selected-auth".to_string(), + ..GuiConfigFile::default() + }; + + assert!(validate_gui_config(&config).is_err()); + assert!(sanitize_gui_config(&mut config).unwrap()); + assert_eq!(config.auth_dir, path_to_string(&fixed_oauth_dir().unwrap())); + + let merged = merge_core_config_yaml("auth-dir: ~/.cli-proxy-api\n", None, &config).unwrap(); + let document = serde_norway::from_str::(&merged).unwrap(); + assert_eq!(document["auth-dir"], config.auth_dir); + } + + #[test] + fn legacy_gui_config_can_seed_managed_core_settings() { + let legacy = "port: 8317\nallow-lan: false\nrun-on-startup: true\n"; + let mut config = serde_yaml::from_str::(legacy).unwrap(); + let presence = serde_yaml::from_str::(legacy).unwrap(); + let core_settings = CoreConfigSettings { + api_keys: vec!["existing-key".to_string()], + management_secret_configured: true, + plugins_enabled: true, + routing_strategy: "fill-first".to_string(), + management_secret_key: Some("management-secret".to_string()), + }; + + assert!(presence.api_keys.is_none()); + assert!(presence.management_secret_key.is_none()); + assert!(presence.plugins_enabled.is_none()); + assert!(presence.routing_strategy.is_none()); + apply_core_settings_to_gui_config(&mut config, &core_settings); + + assert_eq!( + gui_api_key_values(&config.api_keys), + vec!["123456", "existing-key"] + ); + assert_eq!(config.management_secret_key, DEFAULT_MANAGEMENT_SECRET_KEY); + assert!(config.plugins_enabled); + assert_eq!(config.routing_strategy, "fill-first"); + assert!(config.run_on_startup); + } + + #[test] + fn example_api_keys_are_not_persisted_as_gui_settings() { + let input = "api-keys:\n - your-api-key-1\n - real-key\nremote-management:\n secret-key: plain-management-secret\nplugins:\n enabled: true\nrouting:\n strategy: fill-first\n"; + let document = serde_norway::from_str::(input).unwrap(); + let core_settings = core_config_settings_from_value(&document).unwrap(); + let mut config = GuiConfigFile::default(); + + apply_core_settings_to_gui_config(&mut config, &core_settings); + + assert_eq!(core_settings.api_keys, vec!["real-key"]); + assert_eq!( + gui_api_key_values(&config.api_keys), + vec!["123456", "real-key"] + ); + assert_eq!( + core_settings.management_secret_key.as_deref(), + Some("plain-management-secret") + ); + assert_eq!(config.management_secret_key, DEFAULT_MANAGEMENT_SECRET_KEY); + assert!(validate_core_api_key("your-api-key-3").is_err()); + } + + #[test] + fn hashed_management_secret_is_not_imported_as_gui_source() { + let input = "remote-management:\n secret-key: $2a$10$abcdefghijklmnopqrstuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\n"; + let document = serde_norway::from_str::(input).unwrap(); + let core_settings = core_config_settings_from_value(&document).unwrap(); + + assert!(core_settings.management_secret_key.is_none()); + assert!(!core_settings.management_secret_configured); + } + + #[test] + fn runtime_network_patch_preserves_comments_and_other_settings() { + let config = GuiConfigFile { + port: 9527, + allow_lan: true, + run_on_startup: false, + ..GuiConfigFile::default() + }; + let input = "# Bind address\nhost: 127.0.0.1 # local only\n\n# Service port\nport: 8317 # default\ndebug: true\n"; + let updated = patch_core_network_yaml(input, &config) + .unwrap() + .expect("network settings should change"); + + assert_eq!( + updated, + "# Bind address\nhost: 0.0.0.0 # local only\n\n# Service port\nport: 9527 # default\ndebug: true\n" + ); + assert!(updated.contains("# Bind address")); + assert!(updated.contains("# local only")); + assert!(updated.contains("# Service port")); + assert!(updated.contains("# default")); + assert!(updated.contains("debug: true")); + + let document = serde_norway::from_str::(&updated).unwrap(); + assert_eq!( + document["host"], + serde_norway::Value::String("0.0.0.0".to_string()) + ); + assert_eq!(document["port"], serde_norway::to_value(9527_u16).unwrap()); + } + + #[test] + fn runtime_network_patch_skips_unchanged_yaml() { + let config = GuiConfigFile::default(); + let input = "host: 127.0.0.1\nport: 8317\n"; + + assert!(patch_core_network_yaml(input, &config).unwrap().is_none()); + } + + #[test] + fn core_config_controls_preserve_comments_and_unrelated_values() { + let input = "# Client authentication\napi-keys:\n - old-key\n\n# Plugin runtime\nplugins:\n enabled: false # global switch\n dir: plugins\n\n# Credential routing\nrouting:\n strategy: round-robin # current strategy\n session-affinity: true\n\ndebug: true # untouched\n"; + let mut document = yaml_serde_edit::YamlValue::parse(input).unwrap(); + let mut updated = document.get().clone(); + + set_core_api_keys( + &mut updated, + vec!["old-key".to_string(), "new-key".to_string()], + ) + .unwrap(); + set_nested_yaml_value(&mut updated, &["plugins", "enabled"], true).unwrap(); + set_nested_yaml_value( + &mut updated, + &["routing", "strategy"], + "fill-first".to_string(), + ) + .unwrap(); + document.set(updated); + + let rendered = document.get_string(); + assert!(rendered.contains("# Client authentication")); + assert!(rendered.contains("# Plugin runtime")); + assert!(rendered.contains("# global switch")); + assert!(rendered.contains("# Credential routing")); + assert!(rendered.contains("# current strategy")); + assert!(rendered.contains("debug: true # untouched")); + + let settings = core_config_settings_from_value(document.get()).unwrap(); + assert_eq!(settings.api_keys, vec!["old-key", "new-key"]); + assert!(settings.plugins_enabled); + assert_eq!(settings.routing_strategy, "fill-first"); + assert_eq!(document.get()["plugins"]["dir"], "plugins"); + assert_eq!(document.get()["routing"]["session-affinity"], true); + } + + #[test] + fn yaml_edit_runtime_patches_supported_fields_without_reflowing_yaml() { + let input = "# Client authentication\napi-keys:\n - old-key\n\n# Plugin runtime\nplugins:\n enabled: false # global switch\n dir: plugins\n\n# Credential routing\nrouting:\n strategy: round-robin # current strategy\n session-affinity: true\n\ndebug: true # untouched\n"; + let file = input.parse::().unwrap(); + let document = file.document().unwrap(); + + assert!(set_yaml_edit_nested_value( + &document, "plugins", "enabled", true + )); + assert!(set_yaml_edit_nested_value( + &document, + "routing", + "strategy", + "fill-first".to_string() + )); + + let rendered = patch_core_api_keys_yaml( + &file.to_string(), + &["new-key".to_string(), "backup-key".to_string()], + ) + .unwrap(); + assert!(rendered.contains("# Client authentication")); + assert!(rendered.contains("# Plugin runtime")); + assert!(rendered.contains("# global switch")); + assert!(rendered.contains("# Credential routing")); + assert!(rendered.contains("# current strategy")); + assert!(rendered.contains("debug: true # untouched")); + assert!(rendered.contains("dir: plugins")); + assert!(rendered.contains("session-affinity: true")); + + let settings = + core_config_settings_from_value(&serde_norway::from_str(&rendered).unwrap()).unwrap(); + assert_eq!(settings.api_keys, vec!["new-key", "backup-key"]); + assert!(settings.plugins_enabled); + assert_eq!(settings.routing_strategy, "fill-first"); + } + + #[test] + fn yaml_edit_runtime_patch_removes_empty_keys_and_skips_unsupported_sections() { + let input = "# Client authentication\napi-keys:\n - old-key\nplugins:\n enabled: true\nrouting:\n strategy: fill-first\n"; + let rendered = patch_core_api_keys_yaml(input, &[]).unwrap(); + let parsed = serde_norway::from_str::(&rendered).unwrap(); + let root = parsed.as_mapping().unwrap(); + assert!(yaml_mapping_value(root, "api-keys").is_none(), "{rendered}"); + assert_eq!( + core_config_settings_from_value(&parsed).unwrap().api_keys, + Vec::::new() + ); + + let missing_api_keys = "host: 127.0.0.1\nport: 8317\n"; + let rendered = patch_core_api_keys_yaml( + missing_api_keys, + &["new-key".to_string(), "backup-key".to_string()], + ) + .unwrap(); + let settings = + core_config_settings_from_value(&serde_norway::from_str(&rendered).unwrap()).unwrap(); + assert_eq!(settings.api_keys, vec!["new-key", "backup-key"]); + assert!(rendered.contains("host: 127.0.0.1")); + assert!(rendered.contains("port: 8317")); + + // Nested plugin/routing sections are still optional for comment-preserving + // runtime patches; missing maps remain unsupported and stay untouched. + let unsupported = "host: 127.0.0.1\nport: 8317\n"; + let file = unsupported.parse::().unwrap(); + let document = file.document().unwrap(); + assert!(!set_yaml_edit_nested_value( + &document, "plugins", "enabled", true + )); + assert!(!set_yaml_edit_nested_value( + &document, + "routing", + "strategy", + "fill-first".to_string() + )); + assert_eq!(file.to_string(), unsupported); + } + + #[test] + fn yaml_edit_runtime_patch_recreates_api_keys_after_delete_all() { + let input = "# Client authentication\napi-keys:\n - old-key\nplugins:\n enabled: true\n"; + let cleared = patch_core_api_keys_yaml(input, &[]).unwrap(); + let rendered = patch_core_api_keys_yaml(&cleared, &["restored-key".to_string()]).unwrap(); + assert!(rendered.contains("# Client authentication"), "{rendered}"); + let settings = + core_config_settings_from_value(&serde_norway::from_str(&rendered).unwrap()).unwrap(); + assert_eq!(settings.api_keys, vec!["restored-key"]); + } + + #[test] + fn yaml_edit_runtime_patch_adds_api_keys_to_core_style_config() { + let input = "host: 127.0.0.1\nremote-management:\n# nested setting comment\n allow-remote: false\nauth-dir: /tmp/oauth\n# API keys for authentication\n# Enable debug logging\ndebug: false\n\n# Optional payload configuration\n# payload:\n# filter:\n# - models:\n# - name: \"gemini-2.5-pro\"\n# params:\n# - \"generationConfig.responseJsonSchema\"\n"; + let rendered = + patch_core_api_keys_yaml(input, &["new-key".to_string(), "backup-key".to_string()]) + .unwrap(); + let parsed = serde_norway::from_str::(&rendered) + .unwrap_or_else(|error| panic!("invalid YAML: {error}\n{rendered}")); + let settings = core_config_settings_from_value(&parsed).unwrap(); + assert_eq!(settings.api_keys, vec!["new-key", "backup-key"]); + assert!(rendered.contains("# Optional payload configuration")); + assert!(rendered.contains("generationConfig.responseJsonSchema")); + assert!( + rendered.find("auth-dir: /tmp/oauth").unwrap() < rendered.find("api-keys:").unwrap() + ); + assert!(rendered.find("api-keys:").unwrap() < rendered.find("debug: false").unwrap()); + } + + #[test] + fn yaml_edit_runtime_patch_updates_existing_real_core_config() { + let input = "host: 0.0.0.0\nremote-management:\n# nested comment\n allow-remote: false\nauth-dir: /tmp/oauth\n# API keys for authentication\napi-keys:\n - '123456'\n# Enable debug logging\ndebug: false\n\n# payload:\n# filter:\n# - models:\n# - name: gemini\n"; + let rendered = + patch_core_api_keys_yaml(input, &[DEFAULT_API_KEY.to_string(), "new-key".to_string()]) + .unwrap(); + let parsed = serde_norway::from_str::(&rendered) + .unwrap_or_else(|error| panic!("invalid YAML: {error}\n{rendered}")); + assert_eq!( + core_config_settings_from_value(&parsed).unwrap().api_keys, + vec![DEFAULT_API_KEY, "new-key"] + ); + } + + #[test] + fn yaml_edit_runtime_patch_migrates_legacy_api_key_entries() { + let input = "auth:\n providers:\n config-api-key:\n api-key-entries:\n - api-key: first-key\n - key: second-key\nplugins:\n enabled: false\n"; + let rendered = patch_core_api_keys_yaml(input, &["migrated-key".to_string()]).unwrap(); + let parsed = serde_norway::from_str::(&rendered).unwrap(); + let settings = core_config_settings_from_value(&parsed).unwrap(); + assert_eq!(settings.api_keys, vec!["migrated-key"]); + assert!( + nested_yaml_value( + parsed.as_mapping().unwrap(), + &["auth", "providers", "config-api-key", "api-key-entries"] + ) + .is_none(), + "{rendered}" + ); + } + + #[test] + fn core_config_reads_legacy_api_key_entries() { + let input = "auth:\n providers:\n config-api-key:\n api-key-entries:\n - api-key: first-key\n - key: second-key\nplugins:\n enabled: false\nrouting:\n strategy: round-robin\n"; + let document = serde_norway::from_str::(input).unwrap(); + let settings = core_config_settings_from_value(&document).unwrap(); + + assert_eq!(settings.api_keys, vec!["first-key", "second-key"]); + assert!(!settings.plugins_enabled); + assert_eq!(settings.routing_strategy, "round-robin"); + } + + #[test] + fn core_config_validates_keys_and_routing_strategy() { + assert!(validate_core_api_key("sk-valid_123").is_ok()); + assert!(validate_core_api_key("").is_err()); + assert!(validate_core_api_key("contains space").is_err()); + assert!(validate_routing_strategy("round-robin").is_ok()); + assert!(validate_routing_strategy("fill-first").is_ok()); + assert!(validate_routing_strategy("random").is_err()); + } + + #[test] + fn unchanged_yaml_is_not_written_again() { + let path = std::env::temp_dir().join(format!( + "cpa-gui-unchanged-yaml-{}-{}.yaml", + std::process::id(), + SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_nanos() + )); + let content = "host: 127.0.0.1\nport: 8317\n"; + fs::write(&path, content).unwrap(); + + assert!(!write_yaml_if_changed(&path, content).unwrap()); + assert_eq!(fs::read_to_string(&path).unwrap(), content); + + fs::remove_file(path).unwrap(); + } + + #[test] + fn startup_merge_uses_template_and_preserves_current_values() { + let template = "# Current release template\nhost: \"\" # template bind address\nport: 8317\n\n# Client authentication\napi-keys:\n - template-key\n\n# Plugin runtime\nplugins:\n enabled: false # plugin switch\n\n# Credential routing\nrouting:\n strategy: round-robin # routing switch\n\n# New release option\nnew-option: true\nnested:\n # Nested template comment\n keep: template\n added: from-template\nlist:\n - template-item\n"; + let current = "host: 127.0.0.1\nport: 9000\nnested:\n keep: current\n current-only: retained\nlist:\n - current-a\n - current-b\nextra: true\n"; + let config = GuiConfigFile { + port: 9527, + allow_lan: true, + run_on_startup: false, + auth_dir: path_to_string(&fixed_oauth_dir().unwrap()), + api_keys: vec![ + built_in_api_key_entry(), + GuiApiKeyEntry { + key: "gui-key".to_string(), + remark: "测试密钥".to_string(), + }, + ], + management_secret_key: String::new(), + plugins_enabled: true, + routing_strategy: "fill-first".to_string(), + }; + let merged = merge_core_config_yaml(template, Some(current), &config).unwrap(); + + assert!(merged.contains("# Current release template")); + assert!(merged.contains("# template bind address"), "{merged}"); + assert!(merged.contains("# New release option")); + assert!(merged.contains("# Nested template comment")); + + let document = serde_norway::from_str::(&merged).unwrap(); + assert_eq!( + document["host"], + serde_norway::Value::String("0.0.0.0".to_string()) + ); + assert_eq!(document["port"], serde_norway::to_value(9527_u16).unwrap()); + assert_eq!(document["api-keys"][0], DEFAULT_API_KEY); + assert_eq!(document["api-keys"][1], "gui-key"); + assert_eq!(document["plugins"]["enabled"], true, "{merged}"); + assert_eq!(document["routing"]["strategy"], "fill-first"); + assert_eq!(document["new-option"], serde_norway::Value::Bool(true)); + assert_eq!( + document["nested"]["keep"], + serde_norway::Value::String("current".to_string()) + ); + assert_eq!( + document["nested"]["added"], + serde_norway::Value::String("from-template".to_string()) + ); + assert_eq!( + document["nested"]["current-only"], + serde_norway::Value::String("retained".to_string()) + ); + assert_eq!(document["extra"], serde_norway::Value::Bool(true)); + assert_eq!( + document["list"], + serde_norway::Value::Sequence(vec![ + serde_norway::Value::String("current-a".to_string()), + serde_norway::Value::String("current-b".to_string()), + ]) + ); + } + + #[test] + fn startup_merge_without_current_config_uses_gui_defaults() { + let template = "# Template\nhost: \"\"\nport: 9000\napi-keys:\n - template-key\nplugins:\n enabled: true\nrouting:\n strategy: fill-first\ndebug: false\n"; + let merged = merge_core_config_yaml(template, None, &GuiConfigFile::default()).unwrap(); + let document = serde_norway::from_str::(&merged).unwrap(); + + assert!(merged.contains("# Template")); + assert_eq!( + document["host"], + serde_norway::Value::String("127.0.0.1".to_string()) + ); + assert_eq!(document["port"], serde_norway::to_value(8317_u16).unwrap()); + assert_eq!(document["debug"], serde_norway::Value::Bool(false)); + assert_eq!(document["api-keys"][0], DEFAULT_API_KEY, "{merged}"); + assert_eq!(document["plugins"]["enabled"], false); + assert_eq!(document["routing"]["strategy"], "round-robin"); + } + + #[test] + fn release_page_assets_parse_download_links_and_sha256() { + let html = r#" +
  • checksums.txt
  • +
  • asset + sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef +
  • + "#; + + let assets = parse_release_assets(html); + assert_eq!(assets.len(), 2); + assert_eq!(assets[1].name, "CLIProxyAPI_1.2.3_linux_amd64.tar.gz"); + assert_eq!( + assets[1].digest.as_deref(), + Some("sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef") + ); + assert!(assets[1] + .browser_download_url + .ends_with("/releases/download/v1.2.3/CLIProxyAPI_1.2.3_linux_amd64.tar.gz")); + } } diff --git a/src/App.tsx b/src/App.tsx index 25ed164..171e55c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,28 +1,80 @@ -import { useState } from 'react'; +import { useEffect, useState } from 'react'; +import { FileKey, Gauge, LogIn, Network, ServerCog, Settings } from 'lucide-react'; +import appLogo from './assets/logo.jpg'; +import { CoreRuntimeProvider, useCoreRuntime } from './coreRuntime'; import { ConfigPanelPage } from './pages/ConfigPanel'; +import { ApiAccessPage } from './pages/ApiAccessPage'; +import { AuthFileManagementPage } from './pages/AuthFileManagementPage'; import { KernelPage } from './pages/Kernel'; +import { OAuthLoginPage } from './pages/ManagementPages'; +import { QuotaPage } from './pages/QuotaPage'; const pages = [ { id: 'kernel', label: '内核', + icon: ServerCog, component: KernelPage, }, { id: 'config', label: '配置', + icon: Settings, component: ConfigPanelPage, }, + { + id: 'oauth', + label: 'OAuth', + icon: LogIn, + component: OAuthLoginPage, + }, + { + id: 'api', + label: 'API 接入', + icon: Network, + component: ApiAccessPage, + }, + { + id: 'auth-files', + label: '认证文件', + icon: FileKey, + component: AuthFileManagementPage, + }, + { + id: 'quota', + label: '配额', + icon: Gauge, + component: QuotaPage, + }, ] as const; type PageId = (typeof pages)[number]['id']; function App() { + return ( + + + + ); +} + +function AppContent() { const [active, setActive] = useState('kernel'); + const { status } = useCoreRuntime(); + const coreRunning = Boolean(status?.running); const activePage = pages.find((page) => page.id === active) ?? pages[0]; const ActivePage = activePage.component; + useEffect(() => { + if (!coreRunning && active !== 'kernel') { + setActive('kernel'); + } + }, [active, coreRunning]); + const select = (pageId: PageId) => { + if (pageId !== 'kernel' && !coreRunning) { + return; + } setActive(pageId); }; @@ -30,7 +82,7 @@ function App() {