From f281c3bf2d8888607c13a3f2b11275697894bf29 Mon Sep 17 00:00:00 2001 From: Daniel Henry-Mantilla Date: Wed, 13 Apr 2022 14:56:05 +0200 Subject: [PATCH 01/11] Bump MSRV --- .github/workflows/gh-pages.yml | 6 +++--- README.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index f5a5f0f957..133963313a 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -22,7 +22,7 @@ jobs: - macos-latest - windows-latest rust: - - 1.52.0 + - 1.57.0 - stable # - nightly steps: @@ -62,7 +62,7 @@ jobs: uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: 1.52.0 + toolchain: 1.57.0 override: true - name: Clone repo @@ -93,7 +93,7 @@ jobs: - macos-latest # - windows-latest rust: - # - 1.52.0 + # - 1.57.0 - stable - nightly steps: diff --git a/README.md b/README.md index 04fc1bdc3f..279f7907cb 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ https://github.com/getditto/safer_ffi) ## Prerequisites -Minimum Supported Rust Version: `1.52.0` +Minimum Supported Rust Version: `1.57.0` ## Quickstart From 5fdc807b24a575e13fe24b400235b4e961b0af93 Mon Sep 17 00:00:00 2001 From: Daniel Henry-Mantilla Date: Mon, 21 Mar 2022 15:10:40 +0100 Subject: [PATCH 02/11] Basic implementation of trait object support - It needs to be polished. --- Cargo.toml | 7 + rust-toolchain | 2 +- src/_lib.rs | 25 ++ src/dyn_traits.rs | 207 ++++++++++ src/layout/_mod.rs | 15 + src/layout/macros.rs | 2 +- src/proc_macro/Cargo.toml | 8 +- src/proc_macro/_mod.rs | 3 +- src/proc_macro/derives.rs | 38 +- src/proc_macro/dyn_trait/_mod.rs | 379 ++++++++++++++++++ src/proc_macro/dyn_trait/vtable_entry.rs | 464 +++++++++++++++++++++++ src/proc_macro/ffi_export/async_fn.rs | 44 --- src/proc_macro/utils.rs | 83 ++++ src/proc_macro/utils/extension_traits.rs | 35 ++ src/proc_macro/utils/mb_file_expanded.rs | 52 +++ 15 files changed, 1310 insertions(+), 54 deletions(-) create mode 100644 src/dyn_traits.rs create mode 100644 src/proc_macro/dyn_trait/_mod.rs create mode 100644 src/proc_macro/dyn_trait/vtable_entry.rs create mode 100644 src/proc_macro/utils/extension_traits.rs create mode 100644 src/proc_macro/utils/mb_file_expanded.rs diff --git a/Cargo.toml b/Cargo.toml index ade21a96d9..45eb166e56 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,6 +18,8 @@ readme = "README.md" [features] default = [ "std", + # FIXME: REMOVE! + "dyn-traits" ] nightly = [] @@ -40,6 +42,11 @@ debug_proc_macros = [ "safer_ffi-proc_macros/verbose-expansions", ] +dyn-traits = [ + "proc_macros", + "safer_ffi-proc_macros/dyn-traits", +] + out-refs = ["uninit"] headers = [ diff --git a/rust-toolchain b/rust-toolchain index a63cb35e6f..373aea9757 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -1.52.0 +1.57.0 diff --git a/src/_lib.rs b/src/_lib.rs index b7fa4d5959..9d92fc204e 100644 --- a/src/_lib.rs +++ b/src/_lib.rs @@ -115,6 +115,8 @@ __cfg_headers__! { } cfg_alloc! { + #[doc(hidden)] pub + extern crate alloc as __alloc; extern crate alloc; } @@ -133,6 +135,11 @@ mod char_p; pub mod closure; +#[cfg(feature = "dyn-traits")] +#[cfg_attr(all(docs, feature = "nightly"), doc(cfg(feature = "dyn-traits")))] +pub +mod dyn_traits; + const _: () = { #[path = "ffi_export.rs"] mod ffi_export; @@ -194,6 +201,18 @@ cfg_std! { } } +hidden_export! { + /// Hack needed to `feature(trivial_bounds)` in stable Rust: + /// + /// Instead of `where Ty : Bounds…`, it suffices to write: + /// `where for<'hrtb> TrivialBound<'hrtb, Ty> : Bounds…`. + type __TrivialBound<'hrtb, T> = >::ItSelf; +} +mod __private { + pub trait Ignoring<'__> { type ItSelf : ?Sized; } + impl Ignoring<'_> for T { type ItSelf = Self; } +} + #[doc(hidden)] /** Not part of the public API **/ pub use layout::impls::c_int; @@ -288,6 +307,12 @@ mod prelude { // Helper trait to have `AsOut` when `T : !Copy` ManuallyDropMut, }; + + #[cfg(feature = "dyn-traits")] + #[cfg_attr(all(docs, feature = "nightly"), + doc(cfg(feature = "dyn-traits")) + )] + pub use crate::dyn_traits::VirtualPtr; } #[macro_export] diff --git a/src/dyn_traits.rs b/src/dyn_traits.rs new file mode 100644 index 0000000000..816bdf9c77 --- /dev/null +++ b/src/dyn_traits.rs @@ -0,0 +1,207 @@ +use_prelude!(); + +hidden_export! { + trait __AssocConst { + const CONST: Ty; + } +} +hidden_export! { + #[cfg(feature = "alloc")] + trait __assert_dyn_safe { + fn m(self: rust::Box); + } +} + +pub use self::ty::{ + Erased as ErasedTy, +}; + +#[super::derive_ReprC] +#[repr(transparent)] +#[allow(missing_debug_implementations)] +pub +struct ErasedRef<'a>( + ptr::NonNull, + ::core::marker::PhantomData<&'a ()>, +); + +#[macro_export] +macro_rules! const_ {( + $( + for $generics:tt $(where { $($wc:tt)* })? , + )? + $VALUE:block : $T:ty +) => ({ + struct __Generics $generics ( + *mut Self, + ) + // where + // $($($wc)*)? + ; + + impl $generics + $crate::dyn_traits::__AssocConst<$T> + for + __Generics $generics + where + $($($wc)*)? + { + const CONST: $T = $VALUE; + } + + <__Generics $generics as $crate::dyn_traits::__AssocConst<$T>>::CONST +})} + +pub +trait ReprCTrait { + type VTable : ConcreteReprC; + + unsafe + fn drop_ptr ( + ptr: ptr::NonNullOwned, + vtable: &'_ Self::VTable, + ) + ; + + // fn type_name ( + // vtable: &'_ Self::VTable, + // ) -> &'static str + // ; +} + +mod ty { + #![allow(warnings)] + + #[super::derive_ReprC] + #[repr(transparent)] + // #[ReprC::opaque] + pub + struct Erased(crate::tuple::CVoid); // { _private: () } +} + +pub +trait VirtualPtrFromBox : ReprCTrait { // DynTrait : ?Sized + ReprCTrait > : Sized { + fn boxed_into_virtual_ptr ( + this: rust::Box, + ) -> VirtualPtr + ; +} + +impl< + T, + DynTrait : ?Sized + VirtualPtrFromBox, // + ReprCTrait, + // T : BoxedIntoVirtualPtr, +> + From> +for + VirtualPtr +{ + fn from (boxed: rust::Box) + -> VirtualPtr + { + DynTrait::boxed_into_virtual_ptr(boxed) + } +} + +use hack::VirtualPtr_; +mod hack { + #[super::derive_ReprC] + #[repr(C)] + #[allow(missing_debug_implementations)] + pub + struct VirtualPtr_ { + pub(in super) ptr: Ptr, + pub(in super) vtable: VTable, + } +} + +#[derive_ReprC] +#[repr(transparent)] +pub +struct VirtualPtr( + VirtualPtr_< + /* ptr: */ ptr::NonNullOwned, + /* vtable: */ ptr::NonNullRef, + > +); + +impl + Drop +for + VirtualPtr +{ + fn drop (self: &'_ mut VirtualPtr) + { + unsafe { + DynTrait::drop_ptr(self.0.ptr.copy(), self.__vtable()) + } + } +} + +impl VirtualPtr { + pub + unsafe + fn from_raw_parts ( + ptr: ptr::NonNullOwned, + vtable: ptr::NonNullRef, + ) -> VirtualPtr + { + Self(VirtualPtr_ { ptr, vtable }) + } + + pub + fn __ptr (self: &'_ VirtualPtr) + -> ptr::NonNull + { + self.0.ptr.0 + } + + pub + fn __vtable<'vtable> (self: &'_ VirtualPtr) + -> &'vtable DynTrait::VTable + { + unsafe { &*self.0.vtable.as_ptr() } + } +} + +unsafe +impl + Send +for + VirtualPtr +where + DynTrait : Send, +{} + +unsafe +impl + Sync +for + VirtualPtr +where + DynTrait : Sync, +{} + +impl + ::core::fmt::Debug +for + VirtualPtr +{ + fn fmt ( + self: &'_ VirtualPtr, + fmt: &'_ mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result + { + fmt .debug_struct(::core::any::type_name::()) + .field("ptr", &format_args!("{:p}", self.__ptr())) + .field("vtable", &format_args!( + concat!( + "{:p}", + // " ({})", + ), + self.__vtable(), + // DynTrait::type_name(self.__vtable()), + )) + .finish() + } +} diff --git a/src/layout/_mod.rs b/src/layout/_mod.rs index a8a8cdb715..5075727adb 100644 --- a/src/layout/_mod.rs +++ b/src/layout/_mod.rs @@ -804,3 +804,18 @@ mod niche; #[doc(hidden)] /* Not part of the public API */ pub use niche::HasNiche as __HasNiche__; + +pub +trait ConcreteReprC +where + Self : ReprC, +{ + type ConcreteCLayout : CType; +} +impl ConcreteReprC for T +where + Self : ReprC, + CLayout : CType, +{ + type ConcreteCLayout = CLayout; +} diff --git a/src/layout/macros.rs b/src/layout/macros.rs index ef41457232..7f4ab3df1e 100644 --- a/src/layout/macros.rs +++ b/src/layout/macros.rs @@ -842,7 +842,7 @@ macro_rules! ReprC { impl $(<$($generics)*>)? $crate::layout::__HasNiche__ for $StructName $(<$($generics)*>)? where - $field_ty : $crate::layout::__HasNiche__, + for<'hack> $crate::__TrivialBound<'hack, $field_ty> : $crate::layout::__HasNiche__, $($( $($bounds)* )?)? diff --git a/src/proc_macro/Cargo.toml b/src/proc_macro/Cargo.toml index 6f2224b347..5c5e8b1676 100644 --- a/src/proc_macro/Cargo.toml +++ b/src/proc_macro/Cargo.toml @@ -17,6 +17,9 @@ proc-macro2 = { version = "1.0", optional = true } quote = { version = "1.0", optional = true } proc-macro-hack = { version = "0.5.15", optional = true } +# prettyplease.optional = true +prettyplease.version = "0.1.7" + [dependencies.syn] version = "1.0" features = [ @@ -28,7 +31,10 @@ optional = true [features] async-fn = ["proc_macros"] +dyn-traits = [] headers = [] node-js = ["async-fn", "proc_macros"] proc_macros = [ "proc-macro2", "proc-macro-hack", "quote", "syn" ] -verbose-expansions = [] +verbose-expansions = [ + # "prettyplease", +] diff --git a/src/proc_macro/_mod.rs b/src/proc_macro/_mod.rs index dbf4d82baa..dace9c8e71 100644 --- a/src/proc_macro/_mod.rs +++ b/src/proc_macro/_mod.rs @@ -36,7 +36,8 @@ macro_rules! inline_mod {($modname:ident) => ( include! { concat!(stringify!($modname), ".rs") } )} -inline_mod!(utils); +use utils::*; +mod utils; #[cfg(feature = "proc_macros")] inline_mod!(derives); diff --git a/src/proc_macro/derives.rs b/src/proc_macro/derives.rs index a4dd2486d6..f384721c97 100644 --- a/src/proc_macro/derives.rs +++ b/src/proc_macro/derives.rs @@ -1,3 +1,7 @@ +#[cfg(feature = "dyn-traits")] +#[path = "dyn_trait/_mod.rs"] +mod dyn_trait; + inline_mod!(handle_fptr); fn feed_to_macro_rules (input: TokenStream, name: Ident) @@ -39,11 +43,11 @@ fn feed_to_macro_rules (input: TokenStream, name: Ident) #(#attrs)* #vis #struct_ #ident - [#params] - where { - #(#bounds ,)* - } - #fields + [#params] + where { + #(#bounds ,)* + } + #fields #maybe_semi_colon } } @@ -154,9 +158,31 @@ fn feed_to_macro_rules (input: TokenStream, name: Ident) /// ``` #[cfg(feature = "proc_macros")] #[proc_macro_attribute] pub -fn derive_ReprC (attrs: TokenStream, input: TokenStream) +fn derive_ReprC (mut attrs: TokenStream, mut input: TokenStream) -> TokenStream { + #![cfg_attr(not(feature = "dyn-traits"), allow(unused_mut))] + #[cfg(feature = "dyn-traits")] + match dyn_trait::try_handle_trait(&mut attrs, &mut input) { + | Ok(Some(output)) => return utils::mb_file_expanded(output).into(), + | Err(mut err) => { + // Prefix error messages with `derive_ReprC`. + { + let mut errors = + err .into_iter() + .map(|err| Error::new_spanned( + err.to_compile_error(), + format_args!("`#[safer_ffi::derive_ReprC]`: {}", err), + )) + ; + err = errors.next().unwrap(); + errors.for_each(|cur| err.combine(cur)); + } + input.extend(TokenStream::from(err.to_compile_error())); + return input; + }, + | Ok(None) => {}, + } if let Some(tt) = TokenStream2::from(attrs).into_iter().next() { return Error::new_spanned(tt, "Unexpected parameter", diff --git a/src/proc_macro/dyn_trait/_mod.rs b/src/proc_macro/dyn_trait/_mod.rs new file mode 100644 index 0000000000..2561c70083 --- /dev/null +++ b/src/proc_macro/dyn_trait/_mod.rs @@ -0,0 +1,379 @@ +use { + ::{ + core::{ + mem, slice, + }, + proc_macro2::{ + Span, + }, + syn::{ + parse::*, + }, + }, + crate::{ + utils::{ + extension_traits::*, + }, + }, + super::*, + self::{ + vtable_entry::{ + VTableEntry, + vtable_entries, + }, + }, +}; + +enum Input { + Trait(ItemTrait), + TokenStream(TokenStream2), +} + +mod vtable_entry; + +impl Parse for Input { + fn parse (input: ParseStream<'_>) + -> Result + {Ok({ + let ref fork = input.fork(); + fork.parse::() + .map(|trait_| { + ::syn::parse::discouraged::Speculative::advance_to(input, fork); + Input::Trait(trait_) + }) + .unwrap_or_else(|_| Input::TokenStream(input.parse().unwrap())) + })} +} + +pub(in super) +fn try_handle_trait ( + attrs: &TokenStream, + input: &mut TokenStream, +) -> Result> +{ + + let ErasedTy @ _ = quote!( + ::safer_ffi::dyn_traits::ErasedTy + ); + let Box @ _ = quote!( + ::safer_ffi::__alloc::boxed::Box + ); + + let ref mut trait_ = match parse(mem::take(input)).unwrap() { + | Input::TokenStream(ts) => { + *input = ts.into(); + return Ok(None); + }, + | Input::Trait(it) => { + *input = it.to_token_stream().into(); + it + }, + }; + let mut ret = TokenStream2::new(); + let ItemTrait { + attrs: _, + vis: ref pub_, + ref unsafety, // FIXME + auto_token: _, + trait_token: _, + ident: ref TraitName @ _, + ref generics, + colon_token: _, + supertraits: _, + brace_token: _, + ref mut items, + } = *trait_; + + let (_, fwd_trait_generics, trait_where_clause) = + generics.split_for_impl() + ; + + let ref each_vtable_entry = vtable_entries(items, &mut ret)?; + let each_method_def = each_vtable_entry.vmap(VTableEntry::virtual_forwarding); + let each_vtable_entry_name = each_vtable_entry.vmap(VTableEntry::name); + let each_vtable_entry_attrs = each_vtable_entry.vmap(VTableEntry::attrs); + let (EachVTableEntryType @ _, each_vtable_entry_value_f) = + each_vtable_entry + .iter() + .map(VTableEntry::type_and_value) + .unzip::<_, _, Vec<_>, Vec<_>>() + ; + let VTableName @ _ = format_ident!("{}Vtable", TraitName); + let impl_Trait = format_ident!("__impl_{}", TraitName); + + // Original generics but for introducing the `'usability` lifetime param. + let mut trait_generics_and_lt = generics.clone(); + let lifetime = quote_spanned!(Span::mixed_site()=> + '__usability + ); + trait_generics_and_lt.params.insert(0, parse_quote!( + #lifetime + )); + let ref trait_generics_and_lt = trait_generics_and_lt; + let (intro_trait_generics_and_lt, fwd_trait_generics_and_lt, _) = + trait_generics_and_lt.split_for_impl() + ; + + let EachToBeInvariantParam @ _ = + Iterator::chain( + trait_generics_and_lt.lifetimes().map(|LifetimeDef { lifetime, .. }| quote!( + &#lifetime () + )), + trait_generics_and_lt.type_params().map(|ty| { + ty.ident.to_token_stream() + }) + ) + ; + + // Emit the vtable type definition + ret.extend(quote!( + #[cfg_eval] + #[::safer_ffi::prelude::derive_ReprC] + #[repr(C)] + #pub_ + struct #VTableName #intro_trait_generics_and_lt + #trait_where_clause + { + release_vptr: + unsafe + extern "C" + fn ( + _: ::safer_ffi::ptr::NonNullOwned< #ErasedTy >, + ) + , + retain_vptr: ::core::option::Option< + unsafe + extern "C" + fn ( + _: ::safer_ffi::ptr::NonNullRef< #ErasedTy >, + ) + >, + #( + #(#each_vtable_entry_attrs)* + #each_vtable_entry_name: #EachVTableEntryType, + )* + // __type_name__debug: ::core::option::Option< + // extern "C" + // fn() -> ::safer_ffi::string::str_ref<'static> + // >, + _invariant: + ::core::marker::PhantomData< + // &#lifetime mut Self, + // &#lifetime mut #VTableName #fwd_trait_generics_and_lt, + fn(&()) -> &mut (#( + #EachToBeInvariantParam, + )*) + > + , + } + )); + + let Send @ _ = &[quote!(::core::marker::Send)][..]; + let Sync @ _ = &[quote!(::core::marker::Sync)][..]; + let ref mut must_emit_generic_vtable_reference = true; + for &(is_send, is_sync) in &[ + (false, false), + (true, true), + (true, false), + (false, true), + ] + { + let MbSend @ _ = if is_send { Send } else { &[] }; + let MbSync @ _ = if is_sync { Sync } else { &[] }; + let Trait @ _ = quote!( + #lifetime #(+ #MbSend)* #(+ #MbSync)* + #TraitName #fwd_trait_generics + ); + + // trait_generics_and_lt + `impl_Trait` generic parameter. + let mut all_generics = trait_generics_and_lt.clone(); + let param_count = ::add( + all_generics.lifetimes().count(), + all_generics.type_params().count(), + ); + all_generics.params.insert(param_count, parse_quote!( + #impl_Trait : #Trait + )); + let (intro_all_generics, fwd_all_generics, where_clause) = + all_generics.split_for_impl() + ; + + let QSelf @ _ = quote!( + <#impl_Trait as #TraitName #fwd_trait_generics> + ); + + let EACH_VTABLE_ENTRY_VALUE @ _ = + each_vtable_entry_value_f.iter().map(|f| f(&QSelf, &all_generics)) + ; + if mem::take(must_emit_generic_vtable_reference) { + ret.extend(quote_spanned!(Span::mixed_site()=> + struct __GenericConst #intro_all_generics ( + *mut Self, + ); + + impl #intro_all_generics + // ::safer_ffi::dyn_traits::__AssocConst< + // &#lifetime < + // dyn #Trait + // as + // ::safer_ffi::dyn_traits::ReprCTrait + // >::VTable + // > + // for + __GenericConst #fwd_all_generics + #where_clause + { + #[allow(unused_parens)] + const VALUE + : ( + &#lifetime < + dyn #Trait + as + ::safer_ffi::dyn_traits::ReprCTrait + >::VTable + ) = ( + &#VTableName { + // __type_name__debug: Some({ + // extern "C" + // fn __type_name__debug<#impl_Trait> () + // -> ::safer_ffi::string::str_ref<'static> + // { + // let s: &'static ::core::primitive::str = + // ::core::any::type_name::<#impl_Trait>() + // ; + // let ptr = s.as_bytes().as_ptr() as *mut u8; + // let len = s.len(); + // unsafe { + // ::core::mem::transmute::< + // ::safer_ffi::slice::slice_raw_Layout, + // ::safer_ffi::string::str_ref<'static>, + // >( + // safer_ffi::slice::slice_raw_Layout { + // ptr, + // len, + // } + // ) + // } + // } + // __type_name__debug::<#impl_Trait> + // }), + release_vptr: { + unsafe extern "C" + fn release_vptr<#impl_Trait : #TraitName #fwd_trait_generics> ( + ptr: ::safer_ffi::ptr::NonNullOwned< #ErasedTy >, + ) + { + let ptr = ptr.cast::<#impl_Trait>(); + ::core::mem::drop( + #Box::from_raw( + { ptr }.as_mut_ptr() + ) + ) + } + release_vptr::<#impl_Trait> // as … + }, + retain_vptr: None, + #( + #(#each_vtable_entry_attrs)* + #each_vtable_entry_name: #EACH_VTABLE_ENTRY_VALUE, + )* + _invariant: ::core::marker::PhantomData, + } + ); + } + )); + } + ret.extend(quote_spanned!(Span::mixed_site()=> + impl #intro_trait_generics_and_lt + ::safer_ffi::dyn_traits::ReprCTrait + for + dyn #Trait + { + type VTable = #VTableName #fwd_trait_generics_and_lt; + + unsafe + fn drop_ptr ( + ptr: ::safer_ffi::ptr::NonNullOwned<#ErasedTy>, + &Self::VTable { release_vptr, .. }: &'_ Self::VTable, + ) + { + release_vptr(ptr) + } + + // fn type_name ( + // &Self::VTable { __type_name__debug, .. }: &'_ Self::VTable, + // ) -> &'static ::core::primitive::str + // { + // if let ::core::option::Option::Some(f) = __type_name__debug { + // f().as_str() + // } else { + // "" + // } + // } + } + + impl #intro_trait_generics_and_lt + #TraitName #fwd_trait_generics + for + ::safer_ffi::dyn_traits::VirtualPtr + { + #(#each_method_def)* + } + + impl #intro_all_generics + ::safer_ffi::dyn_traits::VirtualPtrFromBox<#impl_Trait> + for + dyn #Trait + { + fn boxed_into_virtual_ptr ( + boxed: #Box<#impl_Trait> + ) -> ::safer_ffi::dyn_traits::VirtualPtr + { + unsafe { + ::safer_ffi::dyn_traits::VirtualPtr:::: + from_raw_parts( + ::core::mem::transmute(boxed), + ::core::convert::Into::into( + < + __GenericConst #fwd_all_generics + // as + // ::safer_ffi::dyn_traits::__AssocConst< + // &#lifetime < + // dyn #Trait + // as + // ::safer_ffi::dyn_traits::ReprCTrait + // >::VTable + // > + >::VALUE + ), + ) + } + } + } + )); + } + let _: parse::Nothing = parse(attrs.clone())?; + drop(each_vtable_entry_value_f); + ret = quote!( + #trait_ + #[allow(warnings, clippy::all)] + const _: () = { #ret }; + ); + Ok(Some(ret)) +} + +fn CType (ty: &'_ Type) + -> TokenStream2 +{ + /* replace lifetimes inside `T` with … `'static`?? */ + let ref mut T = ty.clone(); + RemapNonStaticLifetimesTo { new_lt_name: "static" } + .visit_type_mut(T) + ; + quote!( + < + #T + as + ::safer_ffi::layout::ReprC + >::CLayout + ) +} diff --git a/src/proc_macro/dyn_trait/vtable_entry.rs b/src/proc_macro/dyn_trait/vtable_entry.rs new file mode 100644 index 0000000000..3b5621d867 --- /dev/null +++ b/src/proc_macro/dyn_trait/vtable_entry.rs @@ -0,0 +1,464 @@ +use super::*; + +pub(in super) +enum VTableEntry<'trait_> { + VirtualMethod { + src: &'trait_ TraitItemMethod, + name: &'trait_ Ident, + each_for_lifetime: Vec<&'trait_ Lifetime>, + each_arg_name: Vec, + ErasedSelf: Type, + EachArgTy: Vec<&'trait_ Type>, + OutputTy: &'trait_ [Type], + }, +} + +impl<'trait_> VTableEntry<'trait_> { + pub(in super) + fn name (self: &'_ VTableEntry<'trait_>) + -> &'trait_ Ident + { + match self { + | Self::VirtualMethod { + name, + .. + } => name, + } + } + + pub(in super) + fn virtual_forwarding<'r> ( + self: &'r VTableEntry<'trait_> + ) -> TokenStream2 + { + match *self { + | Self::VirtualMethod { + name, + each_for_lifetime: _, + ref each_arg_name, + ErasedSelf: _, + EachArgTy: _, + OutputTy: _, + src: &TraitItemMethod { + sig: ref full_signature, + ref attrs, + .. + }, + } => { + let mut signature = full_signature.clone(); + signature + .inputs + .iter_mut() + .skip(1) + .zip(each_arg_name) + .for_each(|(fn_arg, arg_name)| match *fn_arg { + | FnArg::Typed(PatType { ref mut pat, .. }) => { + // let arg_name = format_ident!("__arg_{}", i, span = ty.span()); + **pat = parse_quote!( #arg_name ); + }, + | _ => unreachable!(), + }) + ; + quote!( + #(#attrs)* + #[inline] + #signature + { + unsafe { + ::core::mem::transmute( + (self.__vtable().#name)( + ::core::mem::transmute(self.__ptr()), + #( + ::core::mem::transmute(#each_arg_name), + )* + ) + ) + } + } + ) + }, + } + } + + pub(in super) + fn attrs<'r> ( + self: &'r VTableEntry<'trait_> + ) -> &'trait_ Vec + { + match self { + | Self::VirtualMethod { + src: &TraitItemMethod { + ref attrs, + .. + }, + .. + } => attrs, + } + } + + pub(in super) + fn type_and_value<'r> ( + self: &'r VTableEntry<'trait_>, + ) -> ( + TokenStream2, + impl 'r + Fn( + /* QSelf: */ &dyn ToTokens, + /* trait_generics: */ &'_ Generics, + ) -> TokenStream2, + ) + { + match self { + | Self::VirtualMethod { + name, + each_for_lifetime, + each_arg_name, + ErasedSelf, + EachArgTy, + OutputTy, + src: _, + } => { + let span = Span2::mixed_site().located_at(name.span()); + let EachArgTy @ _ = EachArgTy.iter().copied().map(CType).collect::>(); + let OutputTy @ _ = CType(OutputTy.get(0).unwrap_or(&parse_quote!( () ))); + let type_ = quote_spanned!(span=> + for<#(#each_for_lifetime),*> + unsafe + extern "C" + fn( + #ErasedSelf, + #(#EachArgTy ,)* + ) -> #OutputTy + + ); + let value = { + // let type_ = type_.clone(); /* may not be necessary */ + move + | + QSelf @ _: &dyn ToTokens, + trait_generics: &Generics, + | { + // What happens here is quite subtle: + // 1. we are dealing with the function signature of a trait's method + // 2. the trait may have generic lifetime params, + // 3. and the method may have its own generic lifetime params + // - which we'll currently assume to be higher-order / late-bound + // since they'll most likely be (and writing a heuristic to detect + // these with a macro seems overkill to begin with) + // 4. we want to end up with a `for<'higher_order_lts…> fn…` kind of + // function pointer, but still be able to name the types of the method + // signature, even if those may refer to the trait's generic. + // 5. since it has to be an `extern fn` pointer, we can't use closures + // to implicitly get access to those, so we need to: + // - REINJECT the trait generics into the helper fn def; + // - TURBOFISH-FEED those immediately after, when instanciating it. + // 6. But… the outer lifetime generics will be problematic: + // - They are not to be higher-order / late-bound, but early-bound. + // - if a combination of both such kinds lifetime params occurs, + // no lifetime parameter may be turbofished, at all. + // 7. We tackle the former problem by ensuring the outer lifetime parameters + // are early-bound by ensuring there is a `:` after their definition 😅 + // 8. And tackle the latter by not turbofishing the early-bound lifetimes, + // since those can always be left inferred. + let mut vfn_generics = trait_generics.clone(); + // Step 7: ensure the outer generics introduce early-bound lifetimes. + vfn_generics + .make_where_clause() + .predicates + .extend( + trait_generics + .lifetimes() + .map(|LifetimeDef { lifetime, .. }| -> WherePredicate { + parse_quote!( + #lifetime : + ) + }) + ) + ; + vfn_generics.params = Iterator::chain( + each_for_lifetime.iter().map(|lt| -> GenericParam { + parse_quote!( #lt ) + }), + ::core::mem::take(&mut vfn_generics.params) + ).collect(); + // we can't use fwd_generics since we want to skip the lts. + let (intro_generics, _, where_clause) = + vfn_generics.split_for_impl() + ; + let fwd_generics = Iterator::chain( + vfn_generics.type_params().map(|it| &it.ident), + vfn_generics.const_params().map(|it| &it.ident), + ); + quote_spanned!(span=> { + unsafe + extern "C" + fn #name #intro_generics ( + __this: #ErasedSelf, + #(#each_arg_name: #EachArgTy ,)* + ) -> #OutputTy + #where_clause + { + ::safer_ffi::layout::into_raw(#QSelf::#name( + ::core::mem::transmute(__this) #(, + ::safer_ffi::layout::from_raw_unchecked( + #each_arg_name + ) )* + )) + } + + #name ::< #(#fwd_generics),* > // as #type_ + }) + } + }; + (type_, value) + }, + } + } +} + +pub(in super) +fn vtable_entries<'trait_> ( + trait_items: &'trait_ mut [TraitItem], + emit: &mut TokenStream2, +) -> Result>> +{ + use ::quote::format_ident as ident; + // let mut Sized @ _ = None; + // let mut skip_attrs_found = vec![]; + macro_rules! failwith {( $err_msg:expr => $at:expr $(,)? ) => ( + return Some(Err(Error::new_spanned($at, $err_msg))) + )} + macro_rules! continue_ {() => ( + return None + )} + trait_items.iter_mut().filter_map(|it| Some(Result::Ok(match *it { + | TraitItem::Method(ref trait_item_method @ TraitItemMethod { + attrs: _, + sig: ref sig @ Signature { + constness: _, // ref const_, + asyncness: _, // ref async_, + unsafety: _, // ref unsafe_, + abi: _, // ref extern_, + fn_token: _, + ident: ref method_name, + ref generics, + ref paren_token, + ref inputs, + variadic: _, // ref variadic, + output: ref RetTy @ _, + }, + default: _, + semi_token: _, + }) => { + // Is there a `Self : Sized` opt-out-of-`dyn` clause? + if matches!( + generics.where_clause, Some(ref where_clause) + if where_clause.predicates.iter().any(|clause| matches!( + *clause, WherePredicate::Type(PredicateType { + lifetimes: ref _for, + bounded_ty: Type::Path(TypePath { + qself: None, + path: ref BoundedTy @ _, + }), + colon_token: _, + ref bounds, + }) + if BoundedTy.is_ident("Self") + && bounds.iter().any(|Bound @ _| matches!( + *Bound, TypeParamBound::Trait(TraitBound { + path: ref Super @ _, + .. + }) + if Super.is_ident("Sized") + )) + )) + ) + { + // If so, skip it, it did opt out after all. + continue_!() + } + let ref mut storage = None; + let lifetime_of_and = move |and: &Token![&], mb_lt| { + let _: &Option = mb_lt; + mb_lt.as_ref().unwrap_or_else(|| { + { storage }.get_or_insert( + Lifetime::new("'_", and.span) + ) + }) + }; + let self_lt: Option<&Lifetime> = if let Some(receiver) = sig.receiver() { + let is_Self = |T: &Type| matches!( + *T, Type::Path(TypePath { + qself: None, ref path, + }) if path.is_ident("Self") + ); + loop { + match *receiver { + | FnArg::Receiver(Receiver { + attrs: _, + reference: /* heh */ ref ref_, + // thanks to raw pointers, we can disregard mutability + mutability: _, + self_token: _, + }) => { + break ref_.as_ref().map(|(and, mb_lt)| lifetime_of_and(and, mb_lt)); + }, + | FnArg::Typed(PatType { ref ty, ..}) => { + match **ty { + | Type::Reference(TypeReference { + and_token: ref and, + lifetime: ref mb_lt, + elem: ref Pointee @ _, + .. + }) + if is_Self(Pointee) + => { + break Some(lifetime_of_and(and, mb_lt)); + }, + + | _ if is_Self(ty) => { + failwith!("owned `Self` receiver is not `dyn` safe" => ty); + }, + + | Type::Path(TypePath { + qself: None, + path: ref BoxedSelf @ _, + }) + if BoxedSelf.segments.last().unwrap().ident == "Box" + => { + // generate a compile-time assertion checking + // that the path is indeed a Box. + emit.extend(quote!( + const _: () = { + enum __Self {} + impl + ::safer_ffi::dyn_traits::__assert_dyn_safe + for + __Self + { + fn m(self: #BoxedSelf) {} + } + }; + )); + break None; + }, + | _ => {}, + } + failwith!("arbitrary `Self` types are not supported" => ty); + }, + } + } + } else { + return Some(Err(Error::new( + paren_token.span, + "\ + `dyn` trait requires a `self` receiver on this method. \ + Else opt-out of `dyn` trait support by adding a \ + `where Self : Sized` clause.\ + ", + ))); + }; + /* From now on, we'll assume "no funky stuff", _e.g._, no generics, etc. + * since at the time of this writing, this kind of funky stuff is denied for + * `dyn Trait`s, and we're gonna emit a `dyn_safe(true)` assertion beforehand. + * we can thus allow to skip checks when we consider the resulting diagnostic + * noise to be bearable. */ + VTableEntry::VirtualMethod { + name: method_name, + each_for_lifetime: if false { + // Since CTypes are `'static`, we shouldn't need those lifetimes + // when writing the function pointer definitions. + generics + .lifetimes() + .map(|it| &it.lifetime) + .collect() + } else { + vec![] + }, + each_arg_name: + inputs + .iter() + .enumerate() + .skip(1) + .map(|(i, arg)| ident!("__arg{}", i, span = match *arg { + | FnArg::Receiver(_) => { + unreachable!("Skipped receiver") + }, + | FnArg::Typed(PatType { ref pat, .. }) => { + pat.span() + }, + })) + .collect() + , + ErasedSelf: if let Some(lt) = self_lt { + parse_quote!( + // ::safer_ffi::dyn_traits::ErasedRef<#lt> + ::safer_ffi::ptr::NonNull< + ::safer_ffi::dyn_traits::ErasedTy, + > + ) + } else { + parse_quote!( + ::safer_ffi::ptr::NonNull< + ::safer_ffi::dyn_traits::ErasedTy, + > + ) + }, + EachArgTy: + inputs + .iter() + .skip(1) + .map(|it| match *it { + | FnArg::Receiver(_) => unreachable!(), + | FnArg::Typed(PatType { ref ty, .. }) => &**ty, + }) + .collect() + , + OutputTy: match RetTy { + | ReturnType::Type(_, it) => ::core::slice::from_ref(it), + | ReturnType::Default => &[], + }, + src: trait_item_method, + } + }, + + // | TraitItem::Const(TraitItemConst { ref mut attrs, .. }) + // | TraitItem::Type(TraitItemType { ref mut attrs, .. }) + // if { + // skip_attrs_found = + // attrs + // .iter() + // .enumerate() + // .filter_map(|(i, attr)| ( + // attr.path.is_ident("safer_ffi") + // && + // attr.parse_args_with(|input: ParseStream<'_>| { + // ::syn::custom_keyword!(skip); + // let _: skip = input.parse()?; + // let _: Option = input.parse()?; + // Ok(()) + // }).is_ok() + // ).then(|| i)) + // .collect() + // ; + // skip_attrs_found.is_empty().not() + // } + // => { + // // perform the drain (hack needed since you can't mutate a binding in an `if` guard) + // let mut enumerate = 0..; + // attrs.retain(|_| skip_attrs_found.contains(&enumerate.next().unwrap()).not()); + // // skip the current item from the `repr(c) dyn` processing altogether. + // continue_!(); + // }, + + | TraitItem::Type(_) => { + failwith!("not supported yet (TBD)" => it); + }, + + | TraitItem::Const(_) + | TraitItem::Macro(_) + | TraitItem::Verbatim(_) + | _ + => failwith!("unsupported" => it), + }))) + .collect() +} diff --git a/src/proc_macro/ffi_export/async_fn.rs b/src/proc_macro/ffi_export/async_fn.rs index f2a747d442..210b2519e9 100644 --- a/src/proc_macro/ffi_export/async_fn.rs +++ b/src/proc_macro/ffi_export/async_fn.rs @@ -336,47 +336,3 @@ fn respan (span: Span, tokens: TokenStream2) }, }).collect() } - -struct RemapNonStaticLifetimesTo<'__> { - new_lt_name: &'__ str, -} -use visit_mut::VisitMut; -impl VisitMut for RemapNonStaticLifetimesTo<'_> { - fn visit_lifetime_mut ( - self: &'_ mut Self, - lifetime: &'_ mut Lifetime, - ) - { - if lifetime.ident != "static" { - lifetime.ident = Ident::new( - self.new_lt_name, - lifetime.ident.span(), - ); - } - } - - fn visit_type_reference_mut ( - self: &'_ mut Self, - ty_ref: &'_ mut TypeReference, - ) - { - // 1 – sub-recurse - visit_mut::visit_type_reference_mut(self, ty_ref); - // 2 – handle the implicitly elided case. - if ty_ref.lifetime.is_none() { - ty_ref.lifetime = Some(Lifetime::new( - &["'", self.new_lt_name].concat(), - ty_ref.and_token.span, - )); - } - } - - fn visit_parenthesized_generic_arguments_mut ( - self: &'_ mut Self, - _: &'_ mut ParenthesizedGenericArguments, - ) - { - // Elided lifetimes in `fn(…)` or `Fn…(…)` are higher order: - /* do not subrecurse */ - } -} diff --git a/src/proc_macro/utils.rs b/src/proc_macro/utils.rs index 8af16e0284..cb0cdc6292 100644 --- a/src/proc_macro/utils.rs +++ b/src/proc_macro/utils.rs @@ -1,3 +1,12 @@ +use super::*; + +pub(in crate) +mod extension_traits; + +pub(in crate) use mb_file_expanded::mb_file_expanded; +mod mb_file_expanded; + +pub(in crate) fn compile_error (err_msg: &'_ str, span: Span) -> TokenStream { @@ -20,6 +29,7 @@ fn compile_error (err_msg: &'_ str, span: Span) } #[cfg(feature = "proc_macros")] +pub(in crate) trait MySplit { type Ret; fn my_split (self: &'_ Self) @@ -138,3 +148,76 @@ fn pretty_print_tokenstream ( } } } + +macro_rules! emit {( $($tt:tt)* ) => ( $($tt)* )} + +#[cfg(feature = "proc_macros")] emit! { + pub(in crate) + struct RemapNonStaticLifetimesTo<'__> { + pub(in crate) + new_lt_name: &'__ str, + } + + impl ::syn::visit_mut::VisitMut + for RemapNonStaticLifetimesTo<'_> + { + fn visit_lifetime_mut ( + self: &'_ mut Self, + lifetime: &'_ mut Lifetime, + ) + { + if lifetime.ident != "static" { + lifetime.ident = Ident::new( + self.new_lt_name, + lifetime.ident.span(), + ); + } + } + + fn visit_type_reference_mut ( + self: &'_ mut Self, + ty_ref: &'_ mut TypeReference, + ) + { + // 1 – sub-recurse + visit_mut::visit_type_reference_mut(self, ty_ref); + // 2 – handle the implicitly elided case. + if ty_ref.lifetime.is_none() { + ty_ref.lifetime = Some(Lifetime::new( + &["'", self.new_lt_name].concat(), + ty_ref.and_token.span, + )); + } + } + + fn visit_parenthesized_generic_arguments_mut ( + self: &'_ mut Self, + _: &'_ mut ParenthesizedGenericArguments, + ) + { + // Elided lifetimes in `fn(…)` or `Fn…(…)` are higher order: + /* do not subrecurse */ + } + } +} + +macro_rules! dbg_parse_quote {( + $($code:tt)* +) => ( + (|| { + fn type_of_some (_: Option) + -> &'static str + { + ::core::any::type_name::() + } + + let target_ty = None; if false { return target_ty.unwrap(); } + eprintln!( + "[{}:{}:{}:parse_quote!]\n - ty: `{ty}`\n - code: `{code}`", + file!(), line!(), column!(), + code = ::quote::quote!( $($code)* ), + ty = type_of_some(target_ty), + ); + ::syn::parse_quote!( $($code)* ) + })() +)} pub(in crate) use dbg_parse_quote; diff --git a/src/proc_macro/utils/extension_traits.rs b/src/proc_macro/utils/extension_traits.rs new file mode 100644 index 0000000000..65f7de720a --- /dev/null +++ b/src/proc_macro/utils/extension_traits.rs @@ -0,0 +1,35 @@ +pub(in crate) +trait CollectVec : Sized + Iterator { + fn vec (self: Self) + -> Vec + { + self.collect() + } +} +impl CollectVec for I +where + Self : Sized + Iterator, +{} + +pub(in crate) +trait VMap : Sized + IntoIterator { + fn try_vmap ( + self: Self, + f: impl FnMut(Self::Item) -> Result + ) -> Result, E> + { + self.into_iter().map(f).collect() + } + + fn vmap ( + self: Self, + f: impl FnMut(Self::Item) -> T, + ) -> Vec + { + self.into_iter().map(f).collect() + } +} +impl VMap for I +where + Self : Sized + IntoIterator, +{} diff --git a/src/proc_macro/utils/mb_file_expanded.rs b/src/proc_macro/utils/mb_file_expanded.rs new file mode 100644 index 0000000000..428e4278be --- /dev/null +++ b/src/proc_macro/utils/mb_file_expanded.rs @@ -0,0 +1,52 @@ +use super::*; + +pub(in crate) +fn mb_file_expanded (output: TokenStream2) + -> TokenStream2 +{ + let mut debug_macros_dir = + match ::std::env::var_os("DEBUG_MACROS_LOCATION") { + | Some(it) => ::std::path::PathBuf::from(it), + | None => return output, + } + ; + let hopefully_unique = { + use ::std::hash::*; + let ref mut hasher = + ::std::collections::hash_map::RandomState::new() + .build_hasher() + ; + hasher.finish() + }; + + debug_macros_dir.push("safer-ffi-debugged-proc-macros"); + ::std::fs::create_dir_all(&debug_macros_dir) + .unwrap_or_else(|err| panic!( + "`DEBUG_MACROS_LOCATION`-error: failed to create {}: {}", + debug_macros_dir.display(), err, + )) + ; + let ref file_name = { + debug_macros_dir.push(format!("{:016x}.rs", hopefully_unique)); + debug_macros_dir + .into_os_string() + .into_string() + .expect("`DEBUG_MACROS_LOCATION`-error: \ + non-UTF-8 paths are not supported\ + ") + }; + ::std::fs::write( + file_name, + ::prettyplease::unparse(&parse_quote!(#output)), + ) + .unwrap_or_else(|err| panic!( + "`DEBUG_MACROS_LOCATION`-error: failed to write to `{}`: {}", + file_name, err + )) + ; + quote!( + ::core::include! { + #file_name + } + ) +} From 76e80e456fb9cccd0191272d066efce6f64832d3 Mon Sep 17 00:00:00 2001 From: Daniel Henry-Mantilla Date: Wed, 13 Apr 2022 16:43:15 +0200 Subject: [PATCH 03/11] remove `proc_macros` feature + revamp of proc-macro modules --- Cargo.toml | 60 +++-- ffi_tests/Cargo.toml | 2 +- ffi_tests/tests/csharp/Tests.csproj | 2 +- js_tests/Cargo.toml | 1 - src/_lib.rs | 250 +++++++++++++----- src/char_p.rs | 7 +- src/dyn_traits.rs | 52 ++-- src/layout/_mod.rs | 22 +- src/layout/niche.rs | 2 +- src/proc_macro/Cargo.toml | 18 +- src/proc_macro/_mod.rs | 94 ++++--- src/proc_macro/c_str.rs | 31 ++- src/proc_macro/derives.rs | 202 -------------- src/proc_macro/derives/_mod.rs | 116 ++++++++ .../{ => derives}/dyn_trait/_mod.rs | 39 +-- .../{ => derives}/dyn_trait/vtable_entry.rs | 2 +- src/proc_macro/{ => derives}/handle_fptr.rs | 57 ++-- src/proc_macro/ffi_export/_mod.rs | 98 ++----- src/proc_macro/ffi_export/async_fn.rs | 81 +++--- src/proc_macro/{utils.rs => utils/_mod.rs} | 114 ++++---- src/proc_macro/utils/extension_traits.rs | 18 +- src/proc_macro/utils/macros.rs | 60 +++++ 22 files changed, 698 insertions(+), 630 deletions(-) delete mode 100644 src/proc_macro/derives.rs create mode 100644 src/proc_macro/derives/_mod.rs rename src/proc_macro/{ => derives}/dyn_trait/_mod.rs (95%) rename src/proc_macro/{ => derives}/dyn_trait/vtable_entry.rs (99%) rename src/proc_macro/{ => derives}/handle_fptr.rs (94%) rename src/proc_macro/{utils.rs => utils/_mod.rs} (66%) create mode 100644 src/proc_macro/utils/macros.rs diff --git a/Cargo.toml b/Cargo.toml index 45eb166e56..99f99c2143 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,10 +3,9 @@ path = "src/_lib.rs" [package] name = "safer-ffi" -# Keep in sync with `[dependencies.proc_macro]` and `src/proc_macro/Cargo.toml` -version = "0.0.5" +version = "0.1.0" # Keep in sync authors = ["Daniel Henry-Mantilla "] -edition = "2018" +edition = "2021" description = "Write safer FFI code in Rust without polluting it with unsafe code" keywords = ["ffi", "no_std", "framework", "safety", "bindings"] @@ -19,42 +18,50 @@ readme = "README.md" default = [ "std", # FIXME: REMOVE! - "dyn-traits" + "dyn-traits", +] + +# Document under the following features: all but for debug or experimental. +docs = [ + "default", + "nightly", + "uninit", ] nightly = [] alloc = [] -std = [ "alloc" ] +std = [ + "alloc", +] + +# Deprecated +proc_macros = [] async-fn = [ "safer_ffi-proc_macros/async-fn", ] -derives = ["proc_macros"] # alias -proc_macros = [ - "safer_ffi-proc_macros/proc_macros", - "require_unsafe_in_body", - "proc-macro-hack", -] debug_proc_macros = [ - "proc_macros", "safer_ffi-proc_macros/verbose-expansions", ] dyn-traits = [ - "proc_macros", "safer_ffi-proc_macros/dyn-traits", ] -out-refs = ["uninit"] +out-refs = [ + "uninit", +] headers = [ "inventory", "safer_ffi-proc_macros/headers", "std", ] -csharp-headers = ["headers"] +csharp-headers = [ + "headers", +] node-js = [ "async-fn", @@ -64,23 +71,23 @@ node-js = [ # "napi-derive", "safer_ffi-proc_macros/node-js", # For convenience - "proc_macros", "std", + "std", ] [dev-dependencies] -macro_rules_attribute = "0.0.1" +macro_rules_attribute = "0.1.0" [target.'cfg(not(target = "wasm32-unknown-unknown"))'.dependencies] libc = { version = "0.2.66", default-features = false } [dependencies] paste = { package = "mini_paste", version = "0.1.*" } -log = { version = "0.4.8", optional = true } -require_unsafe_in_body = { version = "0.2.1", optional = true } -inventory = { version = "0.1.6", optional = true } -proc-macro-hack = { version = "0.5.15", optional = true } -unwind_safe = "0.0.1" -scopeguard = "1.1.0" +log.version = "0.4.8" +log.optional = true +inventory.version = "0.1.6" +inventory.optional = true +scopeguard.version = "1.1.0" +unwind_safe.version = "0.1.0" [dependencies.napi] package = "napi-dispatcher" @@ -95,9 +102,8 @@ path = "napi-dispatcher" # branch = "ditto/closure-into-jsfunction" [dependencies.safer_ffi-proc_macros] -# package = "safer_ffi-proc_macros" path = "src/proc_macro" -version = "0.0.5" +version = "0.1.0-rc1" # Keep in sync [dependencies.uninit] optional = true @@ -118,5 +124,5 @@ members = [ ] [package.metadata.docs.rs] -all-features = true -rustdoc-args = ["--cfg", "docs"] +features = ["docs"] +# rustdoc-args = ["--cfg", "docs"] diff --git a/ffi_tests/Cargo.toml b/ffi_tests/Cargo.toml index ee4a5347c0..fe2ee5a678 100644 --- a/ffi_tests/Cargo.toml +++ b/ffi_tests/Cargo.toml @@ -15,7 +15,7 @@ edition = "2018" [dependencies.safer-ffi] path = ".." -features = ["async-fn", "proc_macros"] +features = ["async-fn"] [features] generate-headers = ["safer-ffi/csharp-headers"] diff --git a/ffi_tests/tests/csharp/Tests.csproj b/ffi_tests/tests/csharp/Tests.csproj index 14cc317251..5dede5e0d4 100644 --- a/ffi_tests/tests/csharp/Tests.csproj +++ b/ffi_tests/tests/csharp/Tests.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp3.1 + netcoreapp5.0 true diff --git a/js_tests/Cargo.toml b/js_tests/Cargo.toml index 7803361b44..0557bce50b 100644 --- a/js_tests/Cargo.toml +++ b/js_tests/Cargo.toml @@ -20,7 +20,6 @@ futures = "0.3.15" path = ".." features = [ # "debug_proc_macros", - "proc_macros", "out-refs", ] diff --git a/src/_lib.rs b/src/_lib.rs index 9d92fc204e..7cf74df4d6 100644 --- a/src/_lib.rs +++ b/src/_lib.rs @@ -2,7 +2,7 @@ #![allow(clippy::all)] #![cfg_attr(rustfmt, rustfmt::skip)] #![cfg_attr(feature = "nightly", - feature(doc_cfg, external_doc, trivial_bounds) + feature(doc_cfg, trivial_bounds) )] #![cfg_attr(not(feature = "std"), no_std, @@ -19,13 +19,7 @@ unconditional_recursion, unused_must_use, )] - -#![cfg_attr(feature = "nightly", - doc(include = "../README.md") -)] -#![cfg_attr(not(feature = "nightly"), - doc = "See the [user guide](https://getditto.github.io/safer_ffi)." -)] +#![doc = include_str!("../README.md")] #![cfg(not(rustfmt))] #[macro_use] @@ -34,57 +28,193 @@ mod __utils__; use __utils__ as utils; -#[cfg(feature = "proc_macros")] -#[macro_use] -extern crate require_unsafe_in_body; - hidden_export! { use ::paste; } -pub use ::safer_ffi_proc_macros::{ffi_export, cfg_headers}; -cfg_proc_macros! { - #[::proc_macro_hack::proc_macro_hack] - /// Creates a compile-time checked [`char_p::Ref`]`<'static>` out of a - /// string literal. - /// - /// # Example - /// - /// ```rust - /// use ::safer_ffi::prelude::*; - /// - /// #[ffi_export] - /// fn concat (s1: char_p::Ref<'_>, s2: char_p::Ref<'_>) - /// -> char_p::Box - /// { - /// format!("{}{}", s1.to_str(), s2.to_str()) - /// .try_into() - /// .unwrap() // No inner nulls in our format string - /// } - /// - /// fn main () - /// { - /// assert_eq!( - /// concat(c!("Hello, "), c!("World!")).as_ref(), - /// c!("Hello, World!"), - /// ); - /// } - /// ``` - /// - /// If the string literal contains an inner null byte, then the macro - /// will detect it at compile time and thus cause a compile-time error - /// (allowing to skip the then unnecessary runtime check!): - /// - /// ```rust,compile_fail - /// let _ = ::safer_ffi::c!("Hell\0, World!"); // <- Compile error - /// ``` - /// - /// [`char_p::Ref`]: `crate::prelude::char_p::Ref` - pub use ::safer_ffi_proc_macros::c_str as c; - #[doc(inline)] - pub use ::safer_ffi_proc_macros::derive_ReprC; -} + +/// Export a function to be callable by C. +/// +/// # Example +/// +/// ```rust +/// use ::safer_ffi::prelude::ffi_export; +/// +/// #[ffi_export] +/// /// Add two integers together. +/// fn add (x: i32, y: i32) -> i32 +/// { +/// x + y +/// } +/// ``` +/// +/// - ensures that [the generated headers](/safer_ffi/headers/) will include the +/// following definition: +/// +/// ```C +/// #include +/// +/// /* \brief +/// * Add two integers together. +/// */ +/// int32_t add (int32_t x, int32_t y); +/// ``` +/// +/// - exports an `add` symbol pointing to the C-ABI compatible +/// `int32_t (*)(int32_t x, int32_t y)` function. +/// +/// (The crate type needs to be `cdylib` or `staticlib` for this to work, +/// and, of course, the C compiler invocation needs to include +/// `-L path/to/the/compiled/library -l name_of_your_crate`) +/// +/// - when in doubt, use `staticlib`. +/// +/// # `ReprC` +/// +/// You can use any Rust types in the singature of an `#[ffi_export]`- +/// function, provided each of the types involved in the signature is [`ReprC`]. +/// +/// Otherwise the layout of the involved types in the C world is **undefined**, +/// which `#[ffi_export]` will detect, leading to a compilation error. +/// +/// To have custom structs implement [`ReprC`], it suffices to annotate the +/// `struct` definitions with the #\[[derive_ReprC]\] +/// (on top of the obviously required `#[repr(C)]`). +pub use ::safer_ffi_proc_macros::ffi_export; + +pub use ::safer_ffi_proc_macros::cfg_headers; + +/// Creates a compile-time checked [`char_p::Ref`]`<'static>` out of a +/// string literal. +/// +/// # Example +/// +/// ```rust +/// use ::safer_ffi::prelude::*; +/// +/// #[ffi_export] +/// fn concat (s1: char_p::Ref<'_>, s2: char_p::Ref<'_>) +/// -> char_p::Box +/// { +/// format!("{}{}", s1.to_str(), s2.to_str()) +/// .try_into() +/// .unwrap() // No inner nulls in our format string +/// } +/// +/// fn main () +/// { +/// assert_eq!( +/// concat(c!("Hello, "), c!("World!")).as_ref(), +/// c!("Hello, World!"), +/// ); +/// } +/// ``` +/// +/// If the string literal contains an inner null byte, then the macro +/// will detect it at compile time and thus cause a compile-time error +/// (allowing to skip the then unnecessary runtime check!): +/// +/// ```rust,compile_fail +/// let _ = ::safer_ffi::c!("Hell\0, World!"); // <- Compile error +/// ``` +/// +/// [`char_p::Ref`]: `crate::prelude::char_p::Ref` +pub use ::safer_ffi_proc_macros::c_str as c; + +/// Safely implement [`ReprC`] +/// for a `#[repr(C)]` struct **when all its fields are [`ReprC`]**. +/// +/// # Examples +/// +/// ### Simple `struct` +/// +/// ```rust +/// use ::safer_ffi::prelude::*; +/// +/// #[derive_ReprC] +/// #[repr(C)] +/// struct Instant { +/// seconds: u64, +/// nanos: u32, +/// } +/// ``` +/// +/// - corresponding to the following C definition: +/// +/// ```C +/// typedef struct { +/// uint64_t seconds; +/// uint32_t nanos; +/// } Instant_t; +/// ``` +/// +/// ### Field-less `enum` +/// +/// ```rust +/// use ::safer_ffi::prelude::*; +/// +/// #[derive_ReprC] +/// #[repr(u8)] +/// enum Status { +/// Ok = 0, +/// Busy, +/// NotInTheMood, +/// OnStrike, +/// OhNo, +/// } +/// ``` +/// +/// - corresponding to the following C definition: +/// +/// ```C +/// typedef uint8_t Status_t; enum { +/// STATUS_OK = 0, +/// STATUS_BUSY, +/// STATUS_NOT_IN_THE_MOOD, +/// STATUS_ON_STRIKE, +/// STATUS_OH_NO, +/// } +/// ``` +/// +/// ### Generic `struct` +/// +/// In that case, it is required that the struct's generic types carry a +/// `: ReprC` bound each: +/// +/// ```rust +/// use ::safer_ffi::prelude::*; +/// +/// #[derive_ReprC] +/// #[repr(C)] +/// struct Point { +/// x: Coordinate, +/// y: Coordinate, +/// } +/// # +/// # fn main() {} +/// ``` +/// +/// Each monomorphization leads to its own C definition: +/// +/// - **`Point`** +/// +/// ```C +/// typedef struct { +/// int32_t x; +/// int32_t y; +/// } Point_int32_t; +/// ``` +/// +/// - **`Point`** +/// +/// ```C +/// typedef struct { +/// double x; +/// double y; +/// } Point_double_t; +/// ``` +pub use ::safer_ffi_proc_macros::derive_ReprC; #[macro_use] #[path = "layout/_mod.rs"] @@ -280,12 +410,12 @@ mod prelude { pub use crate::string::str_boxed as Box; } } - cfg_proc_macros! { - #[doc(no_inline)] - pub use crate::layout::derive_ReprC; - #[doc(no_inline)] - pub use c; - } + + #[doc(no_inline)] + pub use crate::layout::derive_ReprC; + #[doc(no_inline)] + pub use crate::c; + #[doc(no_inline)] pub use ::core::{ convert::{ diff --git a/src/char_p.rs b/src/char_p.rs index 0ce8a68ae4..5aa05070e4 100644 --- a/src/char_p.rs +++ b/src/char_p.rs @@ -275,12 +275,7 @@ ReprC! { ); } -#[cfg_attr(feature = "proc_macros", - require_unsafe_in_bodies, -)] -#[cfg_attr(not(feature = "proc_macros"), - allow(unused_unsafe), -)] +#[deny(unsafe_op_in_unsafe_fn)] impl char_p_raw { /// # Safety /// diff --git a/src/dyn_traits.rs b/src/dyn_traits.rs index 816bdf9c77..acdeeb1dc3 100644 --- a/src/dyn_traits.rs +++ b/src/dyn_traits.rs @@ -25,32 +25,32 @@ struct ErasedRef<'a>( ::core::marker::PhantomData<&'a ()>, ); -#[macro_export] -macro_rules! const_ {( - $( - for $generics:tt $(where { $($wc:tt)* })? , - )? - $VALUE:block : $T:ty -) => ({ - struct __Generics $generics ( - *mut Self, - ) - // where - // $($($wc)*)? - ; - - impl $generics - $crate::dyn_traits::__AssocConst<$T> - for - __Generics $generics - where - $($($wc)*)? - { - const CONST: $T = $VALUE; - } - - <__Generics $generics as $crate::dyn_traits::__AssocConst<$T>>::CONST -})} +// #[macro_export] +// macro_rules! const_ {( +// $( +// for $generics:tt $(where { $($wc:tt)* })? , +// )? +// $VALUE:block : $T:ty +// ) => ({ +// struct __Generics $generics ( +// *mut Self, +// ) +// // where +// // $($($wc)*)? +// ; + +// impl $generics +// $crate::dyn_traits::__AssocConst<$T> +// for +// __Generics $generics +// where +// $($($wc)*)? +// { +// const CONST: $T = $VALUE; +// } + +// <__Generics $generics as $crate::dyn_traits::__AssocConst<$T>>::CONST +// })} pub trait ReprCTrait { diff --git a/src/layout/_mod.rs b/src/layout/_mod.rs index 5075727adb..7828077efc 100644 --- a/src/layout/_mod.rs +++ b/src/layout/_mod.rs @@ -13,11 +13,9 @@ mod macros; #[doc(inline)] pub use crate::{from_CType_impl_ReprC, ReprC, CType}; -cfg_proc_macros! { - pub use crate::{ - derive_ReprC, - }; -} +pub use crate::{ + derive_ReprC, +}; type_level_enum! { pub @@ -752,12 +750,7 @@ fn from_raw_unchecked (c_layout: T::CLayout) } } -#[cfg_attr(all(feature = "proc_macros", not(docs)), - require_unsafe_in_body, -)] -#[cfg_attr(not(feature = "proc_macros"), - allow(unused_unsafe), -)] +#[deny(unsafe_op_in_unsafe_fn)] #[inline] pub unsafe @@ -777,12 +770,7 @@ fn from_raw (c_layout: T::CLayout) } } -#[cfg_attr(all(feature = "proc_macros", not(docs)), - require_unsafe_in_body, -)] -#[cfg_attr(not(feature = "proc_macros"), - allow(unused_unsafe), -)] +#[deny(unsafe_op_in_unsafe_fn)] #[inline] pub unsafe // May not be sound when input has uninit bytes that the output does not diff --git a/src/layout/niche.rs b/src/layout/niche.rs index f7851976b7..aa8462b9b4 100644 --- a/src/layout/niche.rs +++ b/src/layout/niche.rs @@ -27,7 +27,7 @@ impl ReprC macro_rules! unsafe_impls {( $( $(@for[$($generics:tt)*])? - $T:ty => |$it:pat| $expr:expr + $T:ty => |$it:pat_param| $expr:expr ),* $(,)? ) => ( $( diff --git a/src/proc_macro/Cargo.toml b/src/proc_macro/Cargo.toml index 5c5e8b1676..b50bcef814 100644 --- a/src/proc_macro/Cargo.toml +++ b/src/proc_macro/Cargo.toml @@ -4,18 +4,16 @@ proc-macro = true [package] name = "safer_ffi-proc_macros" -# Keep in sync with `/Cargo.toml` -version = "0.0.5" +version = "0.1.0-rc1" # Keep in sync authors = ["Daniel Henry-Mantilla "] -edition = "2018" +edition = "2021" description = "Procedural macro internals of `::safer_ffi`" license = "MIT" [dependencies] -proc-macro2 = { version = "1.0", optional = true } -quote = { version = "1.0", optional = true } -proc-macro-hack = { version = "0.5.15", optional = true } +proc-macro2.version = "1.0" +quote.version = "1.0" # prettyplease.optional = true prettyplease.version = "0.1.7" @@ -27,14 +25,14 @@ features = [ "full", "visit-mut", ] -optional = true [features] -async-fn = ["proc_macros"] +async-fn = [] dyn-traits = [] headers = [] -node-js = ["async-fn", "proc_macros"] -proc_macros = [ "proc-macro2", "proc-macro-hack", "quote", "syn" ] +node-js = [ + "async-fn", +] verbose-expansions = [ # "prettyplease", ] diff --git a/src/proc_macro/_mod.rs b/src/proc_macro/_mod.rs index dace9c8e71..c4db65d4f3 100644 --- a/src/proc_macro/_mod.rs +++ b/src/proc_macro/_mod.rs @@ -2,70 +2,92 @@ #![cfg_attr(rustfmt, rustfmt::skip)] #![allow(nonstandard_style, unused_imports)] -extern crate proc_macro; - -use ::proc_macro::{Span, TokenStream}; - -#[cfg(feature = "proc_macros")] -use ::{ - proc_macro2::{ - Span as Span2, +use { + ::core::{ + ops::Not as _, + }, + ::proc_macro::{ + TokenStream, + }, + ::proc_macro2::{ + Span, TokenStream as TokenStream2, + TokenTree as TT, }, - quote::{ + ::quote::{ format_ident, quote, quote_spanned, ToTokens, }, - syn::{*, + ::syn::{*, parse::{ Parse, Parser, + ParseStream, }, punctuated::Punctuated, spanned::Spanned, - visit_mut::VisitMut, Result, }, + crate::utils::{ + *, + }, }; -use ::core::ops::Not as _; +mod c_str; -macro_rules! inline_mod {($modname:ident) => ( - include! { concat!(stringify!($modname), ".rs") } -)} +#[path = "derives/_mod.rs"] +mod derives; -use utils::*; -mod utils; +#[path = "ffi_export/_mod.rs"] +mod ffi_export; -#[cfg(feature = "proc_macros")] -inline_mod!(derives); +#[path = "utils/_mod.rs"] +mod utils; -#[cfg(feature = "proc_macros")] -inline_mod!(c_str); +#[proc_macro_attribute] pub +fn cfg_headers ( + attrs: TokenStream, + input: TokenStream, +) -> TokenStream +{ + parse_macro_input!(attrs as parse::Nothing); + if cfg!(feature = "headers") { + input + } else { + <_>::default() + } +} -include!("ffi_export/_mod.rs"); +#[proc_macro] pub +fn c_str (input: TokenStream) + -> TokenStream +{ + unwrap!(c_str::c_str(input.into())) +} -#[cfg(feature = "headers")] #[proc_macro_attribute] pub -fn cfg_headers (attrs: TokenStream, input: TokenStream) +fn ffi_export (attrs: TokenStream, input: TokenStream) -> TokenStream { - if let Some(unexpected_tt) = attrs.into_iter().next() { - return compile_error("Unexpected parameter", unexpected_tt.span()); - } - input + unwrap!(ffi_export::ffi_export(attrs.into(), input.into())) } -#[cfg(not(feature = "headers"))] #[proc_macro_attribute] pub -fn cfg_headers (attrs: TokenStream, input: TokenStream) - -> TokenStream +fn derive_ReprC ( + attrs: TokenStream, + input: TokenStream, +) -> TokenStream { - if let Some(unexpected_tt) = attrs.into_iter().next() { - return compile_error("Unexpected parameter", unexpected_tt.span()); - } - let _ = input; - TokenStream::new() + unwrap!(derives::derive_ReprC(attrs.into(), input.into())) +} + +#[proc_macro_attribute] pub +fn derive_CType ( + attrs: TokenStream, + input: TokenStream, +) -> TokenStream +{ + unwrap!(derives::derive_CType(attrs.into(), input.into())) } diff --git a/src/proc_macro/c_str.rs b/src/proc_macro/c_str.rs index d5a5acc319..360925a7ce 100644 --- a/src/proc_macro/c_str.rs +++ b/src/proc_macro/c_str.rs @@ -1,12 +1,19 @@ -#[::proc_macro_hack::proc_macro_hack] pub -fn c_str (input: TokenStream) - -> TokenStream +use super::*; + +pub(in crate) +fn c_str ( + input: TokenStream2, +) -> Result { - let input: LitStr = if let Some(it) = parse_macro_input!(input) { it } else { - return ::quote::quote!( - ::safer_ffi::char_p::char_p_ref::EMPTY - ).into(); - }; + let input: LitStr = + if let Some(it) = parse2(input)? { + it + } else { + return Ok(::quote::quote!( + ::safer_ffi::char_p::char_p_ref::EMPTY + )); + } + ; let bytes = input.value(); let mut bytes = bytes.as_bytes(); let mut v; @@ -19,18 +26,18 @@ fn c_str (input: TokenStream) }, | Some(n) if n == bytes.len() - 1 => {}, | Some(bad_idx) => { - return Error::new_spanned(input, &format!( + return Err(Error::new_spanned(input, &format!( "Error, encountered inner nul byte at position {}", bad_idx, - )).to_compile_error().into(); + ))); }, } let byte_str = LitByteStr::new(bytes, input.span()); - ::quote::quote!( + Ok(::quote::quote!( unsafe { const STATIC_BYTES: &'static [u8] = #byte_str; ::safer_ffi::char_p::char_p_ref::from_ptr_unchecked( ::safer_ffi::ptr::NonNull::new_unchecked(STATIC_BYTES.as_ptr() as _) ) } - ).into() + )) } diff --git a/src/proc_macro/derives.rs b/src/proc_macro/derives.rs deleted file mode 100644 index f384721c97..0000000000 --- a/src/proc_macro/derives.rs +++ /dev/null @@ -1,202 +0,0 @@ -#[cfg(feature = "dyn-traits")] -#[path = "dyn_trait/_mod.rs"] -mod dyn_trait; - -inline_mod!(handle_fptr); - -fn feed_to_macro_rules (input: TokenStream, name: Ident) - -> TokenStream -{ - let input = parse_macro_input!(input as DeriveInput); - if let Some(expansion) = try_handle_fptr(&input) { - return expansion; - } - let DeriveInput { - attrs, - vis, - ident, - generics, - data, - } = input; - let ret = TokenStream::from(match data { - | Data::Enum(DataEnum { - enum_token: ref enum_, - ref variants, - .. - }) => quote! { - ::safer_ffi::layout::ReprC! { - #(#attrs)* - #vis - #enum_ #ident { - #variants - } - } - }, - | Data::Struct(DataStruct { - struct_token: ref struct_, - ref fields, - semi_token: ref maybe_semi_colon, - }) => { - let (params, bounds) = generics.my_split(); - quote! { - ::safer_ffi::layout::#name! { - #(#attrs)* - #vis - #struct_ #ident - [#params] - where { - #(#bounds ,)* - } - #fields - #maybe_semi_colon - } - } - }, - | Data::Union(ref union_) => { - Error::new_spanned( - union_.union_token, - "`union`s are not supported yet." - ).to_compile_error() - }, - }); - #[cfg(feature = "verbose-expansions")] - println!("{}", ret.to_string()); - ret -} - -/// Safely implement [`ReprC`] -/// for a `#[repr(C)]` struct **when all its fields are [`ReprC`]**. -/// -/// [`ReprC`]: /safer_ffi/layout/trait.ReprC.html -/// -/// # Examples -/// -/// ### Simple `struct` -/// -/// ```rust -/// use ::safer_ffi::prelude::*; -/// -/// #[derive_ReprC] -/// #[repr(C)] -/// struct Instant { -/// seconds: u64, -/// nanos: u32, -/// } -/// ``` -/// -/// - corresponding to the following C definition: -/// -/// ```C -/// typedef struct { -/// uint64_t seconds; -/// uint32_t nanos; -/// } Instant_t; -/// ``` -/// -/// ### Field-less `enum` -/// -/// ```rust -/// use ::safer_ffi::prelude::*; -/// -/// #[derive_ReprC] -/// #[repr(u8)] -/// enum Status { -/// Ok = 0, -/// Busy, -/// NotInTheMood, -/// OnStrike, -/// OhNo, -/// } -/// ``` -/// -/// - corresponding to the following C definition: -/// -/// ```C -/// typedef uint8_t Status_t; enum { -/// STATUS_OK = 0, -/// STATUS_BUSY, -/// STATUS_NOT_IN_THE_MOOD, -/// STATUS_ON_STRIKE, -/// STATUS_OH_NO, -/// } -/// ``` -/// -/// ### Generic `struct` -/// -/// In that case, it is required that the struct's generic types carry a -/// `: ReprC` bound each: -/// -/// ```rust -/// use ::safer_ffi::prelude::*; -/// -/// #[derive_ReprC] -/// #[repr(C)] -/// struct Point { -/// x: Coordinate, -/// y: Coordinate, -/// } -/// ``` -/// -/// Each monomorphization leads to its own C definition: -/// -/// - **`Point`** -/// -/// ```C -/// typedef struct { -/// int32_t x; -/// int32_t y; -/// } Point_int32_t; -/// ``` -/// -/// - **`Point`** -/// -/// ```C -/// typedef struct { -/// double x; -/// double y; -/// } Point_double_t; -/// ``` -#[cfg(feature = "proc_macros")] -#[proc_macro_attribute] pub -fn derive_ReprC (mut attrs: TokenStream, mut input: TokenStream) - -> TokenStream -{ - #![cfg_attr(not(feature = "dyn-traits"), allow(unused_mut))] - #[cfg(feature = "dyn-traits")] - match dyn_trait::try_handle_trait(&mut attrs, &mut input) { - | Ok(Some(output)) => return utils::mb_file_expanded(output).into(), - | Err(mut err) => { - // Prefix error messages with `derive_ReprC`. - { - let mut errors = - err .into_iter() - .map(|err| Error::new_spanned( - err.to_compile_error(), - format_args!("`#[safer_ffi::derive_ReprC]`: {}", err), - )) - ; - err = errors.next().unwrap(); - errors.for_each(|cur| err.combine(cur)); - } - input.extend(TokenStream::from(err.to_compile_error())); - return input; - }, - | Ok(None) => {}, - } - if let Some(tt) = TokenStream2::from(attrs).into_iter().next() { - return Error::new_spanned(tt, - "Unexpected parameter", - ).to_compile_error().into(); - } - feed_to_macro_rules(input, parse_quote!(ReprC)) -} - -#[proc_macro_attribute] pub -fn derive_CType (attrs: TokenStream, input: TokenStream) - -> TokenStream -{ - if let Some(unexpected_tt) = attrs.into_iter().next() { - return compile_error("Unexpected parameter", unexpected_tt.span()); - } - feed_to_macro_rules(input, parse_quote!(CType)) -} diff --git a/src/proc_macro/derives/_mod.rs b/src/proc_macro/derives/_mod.rs new file mode 100644 index 0000000000..2cc5b27ae1 --- /dev/null +++ b/src/proc_macro/derives/_mod.rs @@ -0,0 +1,116 @@ +use super::*; + +#[cfg(feature = "dyn-traits")] +#[path = "dyn_trait/_mod.rs"] +mod dyn_trait; + +mod handle_fptr; + +fn feed_to_macro_rules ( + input: TokenStream2, + name: Ident, +) -> Result +{ + let input = parse2::(input)?; + if let Some(expansion) = handle_fptr::try_handle_fptr(&input) { + return Ok(expansion); + } + let DeriveInput { + attrs, + vis, + ident, + generics, + data, + } = input; + let ret = match data { + | Data::Enum(DataEnum { + enum_token: ref enum_, + ref variants, + .. + }) => quote! { + ::safer_ffi::layout::ReprC! { + #(#attrs)* + #vis + #enum_ #ident { + #variants + } + } + }, + | Data::Struct(DataStruct { + struct_token: ref struct_, + ref fields, + semi_token: ref maybe_semi_colon, + }) => { + let (params, bounds) = generics.my_split(); + quote! { + ::safer_ffi::layout::#name! { + #(#attrs)* + #vis + #struct_ #ident + [#params] + where { + #(#bounds ,)* + } + #fields + #maybe_semi_colon + } + } + }, + | Data::Union(ref union_) => { + Error::new_spanned( + union_.union_token, + "`union`s are not supported yet." + ).to_compile_error() + }, + }; + #[cfg(feature = "verbose-expansions")] + println!("{}", ret); + Ok(ret) +} + +pub(in crate) +fn derive_ReprC ( + mut attrs: TokenStream2, + mut input: TokenStream2, +) -> Result +{ + #![cfg_attr(not(feature = "dyn-traits"), allow(unused_mut))] + #[cfg(feature = "dyn-traits")] + if let Some(output) = dyn_trait::try_handle_trait(&mut attrs, &mut input)? { + return Ok(utils::mb_file_expanded(output)); + } + // | Err(mut err) => { + // // Prefix error messages with `derive_ReprC`. + // { + // let mut errors = + // err .into_iter() + // .map(|err| Error::new_spanned( + // err.to_compile_error(), + // format_args!("`#[safer_ffi::derive_ReprC]`: {}", err), + // )) + // ; + // err = errors.next().unwrap(); + // errors.for_each(|cur| err.combine(cur)); + // } + // input.extend(TokenStream::from(err.to_compile_error())); + // return input; + // }, + // | Ok(None) => {}, + // } + if let Some(tt) = TokenStream2::from(attrs).into_iter().next() { + return Err(Error::new_spanned(tt, "Unexpected parameter")); + } + feed_to_macro_rules(input, parse_quote!(ReprC)) +} + +pub(in crate) +fn derive_CType ( + attrs: TokenStream2, + input: TokenStream2, +) -> Result +{ + if let Some(unexpected_tt) = attrs.into_iter().next() { + return Err(Error::new_spanned(unexpected_tt, "Unexpected parameter")); + } + feed_to_macro_rules(input, parse_quote!(CType)) +} diff --git a/src/proc_macro/dyn_trait/_mod.rs b/src/proc_macro/derives/dyn_trait/_mod.rs similarity index 95% rename from src/proc_macro/dyn_trait/_mod.rs rename to src/proc_macro/derives/dyn_trait/_mod.rs index 2561c70083..6e32ffb2e0 100644 --- a/src/proc_macro/dyn_trait/_mod.rs +++ b/src/proc_macro/derives/dyn_trait/_mod.rs @@ -1,19 +1,6 @@ use { - ::{ - core::{ - mem, slice, - }, - proc_macro2::{ - Span, - }, - syn::{ - parse::*, - }, - }, - crate::{ - utils::{ - extension_traits::*, - }, + ::core::{ + mem, slice, }, super::*, self::{ @@ -21,7 +8,7 @@ use { VTableEntry, vtable_entries, }, - }, + } }; enum Input { @@ -47,11 +34,10 @@ impl Parse for Input { pub(in super) fn try_handle_trait ( - attrs: &TokenStream, - input: &mut TokenStream, -) -> Result> + attrs: &'_ TokenStream2, + input: &'_ mut TokenStream2, +) -> Result< Option > { - let ErasedTy @ _ = quote!( ::safer_ffi::dyn_traits::ErasedTy ); @@ -59,7 +45,7 @@ fn try_handle_trait ( ::safer_ffi::__alloc::boxed::Box ); - let ref mut trait_ = match parse(mem::take(input)).unwrap() { + let ref mut trait_ = match parse2(mem::take(input)).unwrap() { | Input::TokenStream(ts) => { *input = ts.into(); return Ok(None); @@ -351,7 +337,7 @@ fn try_handle_trait ( } )); } - let _: parse::Nothing = parse(attrs.clone())?; + let _: parse::Nothing = parse2(attrs.clone())?; drop(each_vtable_entry_value_f); ret = quote!( #trait_ @@ -365,10 +351,11 @@ fn CType (ty: &'_ Type) -> TokenStream2 { /* replace lifetimes inside `T` with … `'static`?? */ - let ref mut T = ty.clone(); - RemapNonStaticLifetimesTo { new_lt_name: "static" } - .visit_type_mut(T) - ; + let mut T = ty.clone(); + ::syn::visit_mut::VisitMut::visit_type_mut( + &mut RemapNonStaticLifetimesTo { new_lt_name: "static" }, + &mut T, + ); quote!( < #T diff --git a/src/proc_macro/dyn_trait/vtable_entry.rs b/src/proc_macro/derives/dyn_trait/vtable_entry.rs similarity index 99% rename from src/proc_macro/dyn_trait/vtable_entry.rs rename to src/proc_macro/derives/dyn_trait/vtable_entry.rs index 3b5621d867..72ae345812 100644 --- a/src/proc_macro/dyn_trait/vtable_entry.rs +++ b/src/proc_macro/derives/dyn_trait/vtable_entry.rs @@ -117,7 +117,7 @@ impl<'trait_> VTableEntry<'trait_> { OutputTy, src: _, } => { - let span = Span2::mixed_site().located_at(name.span()); + let span = Span::mixed_site().located_at(name.span()); let EachArgTy @ _ = EachArgTy.iter().copied().map(CType).collect::>(); let OutputTy @ _ = CType(OutputTy.get(0).unwrap_or(&parse_quote!( () ))); let type_ = quote_spanned!(span=> diff --git a/src/proc_macro/handle_fptr.rs b/src/proc_macro/derives/handle_fptr.rs similarity index 94% rename from src/proc_macro/handle_fptr.rs rename to src/proc_macro/derives/handle_fptr.rs index 091c73c825..64f55f0aa3 100644 --- a/src/proc_macro/handle_fptr.rs +++ b/src/proc_macro/derives/handle_fptr.rs @@ -1,7 +1,16 @@ -fn try_handle_fptr (input: &'_ DeriveInput) - -> Option +use { + ::syn::{ + visit_mut::VisitMut, + }, + super::*, +}; + +pub(in super) +fn try_handle_fptr ( + input: &'_ DeriveInput, +) -> Option { - let span = Span2::call_site(); + let span = Span::call_site(); macro_rules! error {( $msg:expr $(=> $span:expr)? $(,)? @@ -280,7 +289,7 @@ fn try_handle_fptr (input: &'_ DeriveInput) let (intro, fwd, where_) = input_Layout.generics.split_for_impl(); ret.extend(quote!( unsafe - impl#intro + impl #intro #ReprC for #StructName #fwd @@ -298,7 +307,7 @@ fn try_handle_fptr (input: &'_ DeriveInput) #[allow(nonstandard_style)] #input_Layout - impl#intro + impl #intro #core::clone::Clone for #StructName_Layout #fwd @@ -307,7 +316,7 @@ fn try_handle_fptr (input: &'_ DeriveInput) fn clone (self: &'_ Self) -> Self { - impl#intro + impl #intro #core::marker::Copy for #StructName_Layout #fwd @@ -318,7 +327,7 @@ fn try_handle_fptr (input: &'_ DeriveInput) } unsafe - impl#intro + impl #intro #CType for #StructName_Layout #fwd @@ -428,7 +437,7 @@ fn try_handle_fptr (input: &'_ DeriveInput) } type OPAQUE_KIND = #Concrete; } unsafe - impl#intro + impl #intro #__HasNiche__ for #StructName #fwd @@ -461,8 +470,11 @@ const _: () = { macro_rules! ELIDED_LIFETIME_TEMPLATE {() => ( "__elided_{}" )} - impl VisitMut for UnelideLifetimes<'_, '_> { - fn visit_lifetime_mut (self: &'_ mut Self, lifetime: &'_ mut Lifetime) + impl ::syn::visit_mut::VisitMut for UnelideLifetimes<'_, '_> { + fn visit_lifetime_mut ( + self: &'_ mut Self, + lifetime: &'_ mut Lifetime, + ) { let Self { lifetime_params, counter } = self; if lifetime.ident == "_" { @@ -474,7 +486,10 @@ const _: () = { } } - fn visit_type_mut (self: &'_ mut Self, ty: &'_ mut Type) + fn visit_type_mut ( + self: &'_ mut Self, + ty: &'_ mut Type, + ) { ::syn::visit_mut::visit_type_mut(self, ty); let Self { lifetime_params, counter } = self; @@ -493,7 +508,7 @@ const _: () = { ), counter.next().unwrap(), ), - Span2::call_site(), + Span::call_site(), )) ; lifetime_params.to_mut().push(parse_quote!( @@ -509,13 +524,21 @@ const _: () = { /// Pretty self-explanatory: since we can't do ` Ty as Tr>::Assoc` /// (technically the result value could depend on `'lt`, but not in our case, /// since `CType` is `'static`) -struct StripLifetimeParams; impl VisitMut for StripLifetimeParams { - fn visit_lifetime_mut (self: &'_ mut Self, lifetime: &'_ mut Lifetime) +struct StripLifetimeParams; + +impl VisitMut for StripLifetimeParams { + fn visit_lifetime_mut ( + self: &'_ mut Self, + lifetime: &'_ mut Lifetime, + ) { - *lifetime = Lifetime::new("'static", Span2::call_site()); + *lifetime = Lifetime::new("'static", Span::call_site()); } - fn visit_type_mut (self: &'_ mut Self, ty: &'_ mut Type) + fn visit_type_mut ( + self: &'_ mut Self, + ty: &'_ mut Type, + ) { ::syn::visit_mut::visit_type_mut(self, ty); match *ty { @@ -524,7 +547,7 @@ struct StripLifetimeParams; impl VisitMut for StripLifetimeParams { .. }) => { *implicitly_elided_lifetime = Some( - Lifetime::new("'static", Span2::call_site()) + Lifetime::new("'static", Span::call_site()) ); }, | _ => {}, diff --git a/src/proc_macro/ffi_export/_mod.rs b/src/proc_macro/ffi_export/_mod.rs index b43f35e711..ab6ec103fc 100644 --- a/src/proc_macro/ffi_export/_mod.rs +++ b/src/proc_macro/ffi_export/_mod.rs @@ -1,59 +1,13 @@ -/// Export a function to be callable by C. -/// -/// # Example -/// -/// ```rust -/// use ::safer_ffi::prelude::ffi_export; -/// -/// #[ffi_export] -/// /// Add two integers together. -/// fn add (x: i32, y: i32) -> i32 -/// { -/// x + y -/// } -/// ``` -/// -/// - ensures that [the generated headers](/safer_ffi/headers/) will include the -/// following definition: -/// -/// ```C -/// #include -/// -/// /* \brief -/// * Add two integers together. -/// */ -/// int32_t add (int32_t x, int32_t y); -/// ``` -/// -/// - exports an `add` symbol pointing to the C-ABI compatible -/// `int32_t (*)(int32_t x, int32_t y)` function. -/// -/// (The crate type needs to be `cdylib` or `staticlib` for this to work, -/// and, of course, the C compiler invocation needs to include -/// `-L path/to/the/compiled/library -l name_of_your_crate`) -/// -/// - when in doubt, use `staticlib`. -/// -/// # `ReprC` -/// -/// [`ReprC`]: /safer_ffi/layout/trait.ReprC.html -/// -/// You can use any Rust types in the singature of an `#[ffi_export]`- -/// function, provided each of the types involved in the signature is [`ReprC`]. -/// -/// Otherwise the layout of the involved types in the C world is **undefined**, -/// which `#[ffi_export]` will detect, leading to a compilation error. -/// -/// To have custom structs implement [`ReprC`], it suffices to annotate the -/// `struct` definitions with the [`#[derive_ReprC]`]( -/// /safer_ffi/layout/attr.derive_ReprC.html) -/// (on top of the obviously required `#[repr(C)]`). -#[proc_macro_attribute] pub -fn ffi_export (attrs: TokenStream, input: TokenStream) - -> TokenStream +use super::*; + +pub(in super) +fn ffi_export ( + attrs: TokenStream2, + input: TokenStream2, +) -> Result { - use ::proc_macro::{*, TokenTree as TT}; - #[cfg(feature = "proc_macros")] + use ::proc_macro2::*; + if let Ok(input) = parse::(input.clone()) { parse_macro_input!(attrs as parse::Nothing); return ::quote::quote!( @@ -62,14 +16,11 @@ fn ffi_export (attrs: TokenStream, input: TokenStream) } ).into(); } - #[cfg(feature = "async-fn")] - let fun: ItemFn = { - let input = input.clone(); - parse_macro_input!(input) - }; + + #[cfg(feature = "node-js")] + let fun: ItemFn = parse2(input.clone())?; #[cfg(feature = "async-fn")] { - let attrs = attrs.clone(); - match parse::(attrs) { + match parse2::(attrs.clone()) { | Ok(attrs) if attrs.block_on.is_some() || fun.sig.asyncness.is_some() @@ -95,10 +46,10 @@ fn ffi_export (attrs: TokenStream, input: TokenStream) | Some(TT::Ident(id)) if id.to_string() == "async_worker" => { is_async_worker = true; }, - | Some(extraneous_tt) => return compile_error( + | Some(extraneous_tt) => return Err(Error::new_spanned( + extraneous_tt, "Unexpected parameter", - extraneous_tt.span(), - ), + )), } if matches!( tts.peek(), @@ -119,16 +70,15 @@ fn ffi_export (attrs: TokenStream, input: TokenStream) is_async_worker, )); if prev.is_some() { - return compile_error( - "Duplicate `nodejs` parameter", - kw.span(), - ); + bail! { + "Duplicate `nodejs` parameter" => kw + } } } }, - | Some(unexpected_tt) => return compile_error( - "Unexpected parameter", unexpected_tt.span(), - ), + | Some(unexpected_tt) => bail! { + "Unexpected parameter" => unexpected_tt + }, | None => break, } if matches!(attr_tokens.peek(), Some(TT::Punct(p)) if p.as_char() == ',') { @@ -153,7 +103,7 @@ fn ffi_export (attrs: TokenStream, input: TokenStream) input }; let span = Span::call_site(); - >::from_iter(vec![ + Ok(TokenStream2::from_iter(vec![ TT::Punct(Punct::new(':', Spacing::Joint)), TT::Punct(Punct::new(':', Spacing::Alone)), @@ -170,7 +120,7 @@ fn ffi_export (attrs: TokenStream, input: TokenStream) Delimiter::Brace, input.into_iter().collect(), )), - ]) + ])) } #[cfg(feature = "async-fn")] diff --git a/src/proc_macro/ffi_export/async_fn.rs b/src/proc_macro/ffi_export/async_fn.rs index 210b2519e9..647479dd8b 100644 --- a/src/proc_macro/ffi_export/async_fn.rs +++ b/src/proc_macro/ffi_export/async_fn.rs @@ -1,28 +1,33 @@ -use super::*; +use { + ::syn::{ + visit_mut::VisitMut, + }, + super::{ + *, + }, +}; -use ::proc_macro2::{Span, TokenStream as TokenStream2}; - -pub(in crate) +pub(in super) fn export ( Attrs { block_on, node_js }: Attrs, fun: &'_ ItemFn, -) -> TokenStream +) -> Result { let block_on = match (block_on, fun.sig.asyncness) { | (Some(block_on), Some(_asyncness)) => block_on, - | (Some(block_on), None) => { - return Error::new_spanned(block_on, "\ + | (Some(block_on), None) => bail!( + "\ `#[ffi_export(…)]`'s `executor` attribute \ can only be applied to an `async fn`. \ - ").into_compile_error().into(); - }, - | (None, Some(asyncness)) => { - return Error::new_spanned(asyncness, "\ + " => block_on + ), + | (None, Some(asyncness)) => bail!( + "\ In order for `#[ffi_export(…)]` to support `async fn`, you \ need to feed it an `executor = …` parameter and then use \ `ffi_await!(…)` as the last expression of the function's body.\ - ").into_compile_error().into(); - }, + " => asyncness + ), | (None, None) => unreachable!(), }; // The body of the function is expected to be of the form: @@ -75,12 +80,14 @@ fn export ( }, })() { - return Error::new(err_span, "\ - `#[ffi_export(…, executor = …)]` expects the last \ - expression/statement to be an expression of the form: \ - `ffi_await!()` such as:\n \ - ffi_await!(async move {\n …\n })\n\ - ").into_compile_error().into(); + bail!( + "\ + `#[ffi_export(…, executor = …)]` expects the last \ + expression/statement to be an expression of the form: \ + `ffi_await!()` such as:\n \ + ffi_await!(async move {\n …\n })\n\ + " => spanned!(err_span) + ); } (stmts, async_body.unwrap()) }; @@ -90,7 +97,7 @@ fn export ( let ret = if cfg!(feature = "node-js") { if node_js.is_none() { // Nothing to do in this branch: - return fun.into_token_stream().into(); + return Ok(fun.into_token_stream()); } let fname = &fun.sig.ident; let mut fun_signature = fun.sig.clone(); @@ -275,7 +282,7 @@ fn export ( } ) }; - ret.into() + Ok(ret) } use ::syn::parse::{Parse, ParseStream}; @@ -293,8 +300,9 @@ mod kw { } impl Parse for Attrs { - fn parse (input: ParseStream<'_>) - -> Result + fn parse ( + input: ParseStream<'_>, + ) -> Result { let mut ret = Attrs::default(); while input.is_empty().not() { @@ -322,17 +330,20 @@ impl Parse for Attrs { } } -fn respan (span: Span, tokens: TokenStream2) - -> TokenStream2 +fn respan ( + span: Span, + tokens: TokenStream2, +) -> TokenStream2 { - use ::proc_macro2::{Group, TokenTree as TT}; - tokens.into_iter().map(|tt| match tt { - | TT::Group(g) => TT::Group( - Group::new(g.delimiter(), respan(span, g.stream())) - ), - | mut tt => { - tt.set_span(tt.span().resolved_at(span)); - tt - }, - }).collect() + use ::proc_macro2::*; + + tokens.into_iter().map(|tt| match tt { + | TT::Group(g) => TT::Group( + Group::new(g.delimiter(), respan(span, g.stream())) + ), + | mut tt => { + tt.set_span(tt.span().resolved_at(span)); + tt + }, + }).collect() } diff --git a/src/proc_macro/utils.rs b/src/proc_macro/utils/_mod.rs similarity index 66% rename from src/proc_macro/utils.rs rename to src/proc_macro/utils/_mod.rs index cb0cdc6292..59c7f44ce0 100644 --- a/src/proc_macro/utils.rs +++ b/src/proc_macro/utils/_mod.rs @@ -1,34 +1,17 @@ +#![allow(unused)] +#![warn(unused_must_use)] + use super::*; -pub(in crate) +pub(in crate) use extension_traits::*; mod extension_traits; -pub(in crate) use mb_file_expanded::mb_file_expanded; -mod mb_file_expanded; +pub(in crate) use macros::*; +mod macros; -pub(in crate) -fn compile_error (err_msg: &'_ str, span: Span) - -> TokenStream -{ - use ::proc_macro::{*, TokenTree as TT}; - macro_rules! spanned {($expr:expr) => ({ - let mut it = $expr; - it.set_span(span); - it - })} - >::from_iter(vec![ - TT::Ident(Ident::new("compile_error", span)), - TT::Punct(spanned!(Punct::new('!', Spacing::Alone))), - TT::Group(spanned!(Group::new( - Delimiter::Brace, - ::core::iter::once(TT::Literal( - spanned!(Literal::string(err_msg)) - )).collect(), - ))), - ]) -} +pub(in crate) use mb_file_expanded::*; +mod mb_file_expanded; -#[cfg(feature = "proc_macros")] pub(in crate) trait MySplit { type Ret; @@ -37,7 +20,6 @@ trait MySplit { ; } -#[cfg(feature = "proc_macros")] impl MySplit for Generics { type Ret = (TokenStream2, Vec); @@ -149,55 +131,53 @@ fn pretty_print_tokenstream ( } } -macro_rules! emit {( $($tt:tt)* ) => ( $($tt)* )} +// macro_rules! emit {( $($tt:tt)* ) => ( $($tt)* )} -#[cfg(feature = "proc_macros")] emit! { +pub(in crate) +struct RemapNonStaticLifetimesTo<'__> { pub(in crate) - struct RemapNonStaticLifetimesTo<'__> { - pub(in crate) - new_lt_name: &'__ str, - } + new_lt_name: &'__ str, +} - impl ::syn::visit_mut::VisitMut - for RemapNonStaticLifetimesTo<'_> +impl ::syn::visit_mut::VisitMut + for RemapNonStaticLifetimesTo<'_> +{ + fn visit_lifetime_mut ( + self: &'_ mut Self, + lifetime: &'_ mut Lifetime, + ) { - fn visit_lifetime_mut ( - self: &'_ mut Self, - lifetime: &'_ mut Lifetime, - ) - { - if lifetime.ident != "static" { - lifetime.ident = Ident::new( - self.new_lt_name, - lifetime.ident.span(), - ); - } + if lifetime.ident != "static" { + lifetime.ident = Ident::new( + self.new_lt_name, + lifetime.ident.span(), + ); } + } - fn visit_type_reference_mut ( - self: &'_ mut Self, - ty_ref: &'_ mut TypeReference, - ) - { - // 1 – sub-recurse - visit_mut::visit_type_reference_mut(self, ty_ref); - // 2 – handle the implicitly elided case. - if ty_ref.lifetime.is_none() { - ty_ref.lifetime = Some(Lifetime::new( - &["'", self.new_lt_name].concat(), - ty_ref.and_token.span, - )); - } + fn visit_type_reference_mut ( + self: &'_ mut Self, + ty_ref: &'_ mut TypeReference, + ) + { + // 1 – sub-recurse + visit_mut::visit_type_reference_mut(self, ty_ref); + // 2 – handle the implicitly elided case. + if ty_ref.lifetime.is_none() { + ty_ref.lifetime = Some(Lifetime::new( + &["'", self.new_lt_name].concat(), + ty_ref.and_token.span, + )); } + } - fn visit_parenthesized_generic_arguments_mut ( - self: &'_ mut Self, - _: &'_ mut ParenthesizedGenericArguments, - ) - { - // Elided lifetimes in `fn(…)` or `Fn…(…)` are higher order: - /* do not subrecurse */ - } + fn visit_parenthesized_generic_arguments_mut ( + self: &'_ mut Self, + _: &'_ mut ParenthesizedGenericArguments, + ) + { + // Elided lifetimes in `fn(…)` or `Fn…(…)` are higher order: + /* do not subrecurse */ } } diff --git a/src/proc_macro/utils/extension_traits.rs b/src/proc_macro/utils/extension_traits.rs index 65f7de720a..b8cd7ef427 100644 --- a/src/proc_macro/utils/extension_traits.rs +++ b/src/proc_macro/utils/extension_traits.rs @@ -3,32 +3,30 @@ trait CollectVec : Sized + Iterator { fn vec (self: Self) -> Vec { + impl CollectVec for I {} self.collect() } } -impl CollectVec for I -where - Self : Sized + Iterator, -{} pub(in crate) trait VMap : Sized + IntoIterator { - fn try_vmap ( + fn vmap ( self: Self, - f: impl FnMut(Self::Item) -> Result - ) -> Result, E> + f: impl FnMut(Self::Item) -> T, + ) -> Vec { self.into_iter().map(f).collect() } - fn vmap ( + fn try_vmap ( self: Self, - f: impl FnMut(Self::Item) -> T, - ) -> Vec + f: impl FnMut(Self::Item) -> Result + ) -> Result, E> { self.into_iter().map(f).collect() } } + impl VMap for I where Self : Sized + IntoIterator, diff --git a/src/proc_macro/utils/macros.rs b/src/proc_macro/utils/macros.rs new file mode 100644 index 0000000000..19bbc02002 --- /dev/null +++ b/src/proc_macro/utils/macros.rs @@ -0,0 +1,60 @@ +macro_rules! spanned {( $span:expr $(,)? ) => ( + ::proc_macro2::Ident::new("__", $span) +)} pub(in crate) use spanned; + +macro_rules! bail { + ( + $err_msg:expr $(,)? + ) => ( + $crate::utils::bail! { + $err_msg => $crate::utils::spanned!(::proc_macro2::Span::call_site()) + } + ); + + ( + $err_msg:expr => $spanned:expr $(,)? + ) => ( + return ::syn::Result::Err(::syn::Error::new_spanned( + $spanned, + $err_msg, + )) + ); +} pub(in crate) use bail; + +macro_rules! unwrap {( $proc_macro_result:expr $(,)? ) => ( + $proc_macro_result + // .map(|ret| { println!("{}", ret); ret }) + .unwrap_or_else(|err| { + let mut errors = + err .into_iter() + .map(|err| Error::new_spanned( + err.to_compile_error(), + format_args!( + "`#[::safer_ffi::{}]`: {}", + $crate::utils::function_name!(), + err, + ), + )) + ; + let mut err = errors.next().unwrap(); + errors.for_each(|cur| err.combine(cur)); + err.to_compile_error() + }) + .into() +)} pub(in crate) use unwrap; + +pub(in crate) +fn type_name_of_val (_: T) + -> &'static str +{ + ::core::any::type_name::() +} + +macro_rules! function_name {() => ({ + let mut name = $crate::utils::type_name_of_val({ fn f () {} f }); + name = &name[.. name.len() - 3].trim_end_matches("::{{closure}}"); + if let Some(i) = name.rfind(':') { + name = &name[i + 1..]; + } + name +})} pub(in crate) use function_name; From 273cca1421188f089a583b58f495008f0cd4c2e7 Mon Sep 17 00:00:00 2001 From: Daniel Henry-Mantilla Date: Wed, 13 Apr 2022 16:55:08 +0200 Subject: [PATCH 04/11] Update CI --- .github/workflows/gh-pages.yml | 11 +++++------ src/proc_macro/utils/macros.rs | 13 ++++++------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index 133963313a..810ed16a6c 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -51,10 +51,10 @@ jobs: needs: check strategy: matrix: - feature--proc_macros: ['', '--features proc_macros'] feature--std: ['', '--features std'] feature--alloc: ['', '--features alloc'] - feature--log: ['', '--features log'] + feature--async-fn: ['', '--features async-fn'] + # feature--log: ['', '--features log'] feature--out-refs: ['', '--features out-refs'] feature--node-js: ['', '--features node-js'] steps: @@ -73,10 +73,9 @@ jobs: command: check args: | --no-default-features - ${{ matrix.feature--proc_macros }} ${{ matrix.feature--std }} ${{ matrix.feature--alloc }} - ${{ matrix.feature--log }} + ${{ matrix.feature--async-fn }} ${{ matrix.feature--out-refs }} ${{ matrix.feature--node-js }} @@ -116,7 +115,7 @@ jobs: RUST_BACKTRACE: full with: command: test - args: --no-default-features --features derives,std + args: --no-default-features --features std - name: FFI test (C & C#?) run: make -C ffi_tests @@ -158,7 +157,7 @@ jobs: uses: actions-rs/cargo@v1 with: command: doc - args: --all-features + args: --features docs - name: Build guide and documentation run: | diff --git a/src/proc_macro/utils/macros.rs b/src/proc_macro/utils/macros.rs index 19bbc02002..41068aa432 100644 --- a/src/proc_macro/utils/macros.rs +++ b/src/proc_macro/utils/macros.rs @@ -23,9 +23,8 @@ macro_rules! bail { macro_rules! unwrap {( $proc_macro_result:expr $(,)? ) => ( $proc_macro_result - // .map(|ret| { println!("{}", ret); ret }) - .unwrap_or_else(|err| { - let mut errors = + .unwrap_or_else(|mut err| { + let mut iter_errors = err .into_iter() .map(|err| Error::new_spanned( err.to_compile_error(), @@ -36,8 +35,8 @@ macro_rules! unwrap {( $proc_macro_result:expr $(,)? ) => ( ), )) ; - let mut err = errors.next().unwrap(); - errors.for_each(|cur| err.combine(cur)); + err = iter_errors.next().unwrap(); + iter_errors.for_each(|cur| err.combine(cur)); err.to_compile_error() }) .into() @@ -52,8 +51,8 @@ fn type_name_of_val (_: T) macro_rules! function_name {() => ({ let mut name = $crate::utils::type_name_of_val({ fn f () {} f }); - name = &name[.. name.len() - 3].trim_end_matches("::{{closure}}"); - if let Some(i) = name.rfind(':') { + name = &name[.. name.len() - "::f".len()].trim_end_matches("::{{closure}}"); + if let ::core::option::Option::Some(i) = name.rfind(':') { name = &name[i + 1..]; } name From c37f20b67b5f8cb9edbb794932f99546b5840f2c Mon Sep 17 00:00:00 2001 From: Daniel Henry-Mantilla Date: Wed, 2 Mar 2022 20:04:33 +0100 Subject: [PATCH 05/11] Fix CI failure with `concat_bytes!` macro --- js_tests/src/lib.rs | 2 +- js_tests/tests/tests.mjs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/js_tests/src/lib.rs b/js_tests/src/lib.rs index 06c37f5489..d6088c1c54 100644 --- a/js_tests/src/lib.rs +++ b/js_tests/src/lib.rs @@ -63,7 +63,7 @@ fn concat (s1: char_p::Ref<'_>, s2: char_p::Ref<'_>) } #[ffi_export(node_js)] -fn concat_bytes ( +fn concat_byte_slices ( xs1: Option>, xs2: Option>, ) -> Option> diff --git a/js_tests/tests/tests.mjs b/js_tests/tests/tests.mjs index a5e7347f36..184c655fbb 100644 --- a/js_tests/tests/tests.mjs +++ b/js_tests/tests/tests.mjs @@ -122,7 +122,7 @@ export async function run_tests({ ffi, performance, assert, is_web }) { ); assert.deepEqual( - Uint8Array.from(ffi.boxCBytesIntoBuffer(ffi.concat_bytes( + Uint8Array.from(ffi.boxCBytesIntoBuffer(ffi.concat_byte_slices( Uint8Array.from('Hello, ', c => c.charCodeAt(0)), Uint8Array.from('World!', c => c.charCodeAt(0)), ))), From 2af634099186d8d4ddfc7abbccf91d4d630edee6 Mon Sep 17 00:00:00 2001 From: Daniel Henry-Mantilla Date: Wed, 20 Apr 2022 13:39:50 +0200 Subject: [PATCH 06/11] Workaround for nightly regression - https://github.com/rust-lang/rust/issues/96018 --- src/ffi_export.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ffi_export.rs b/src/ffi_export.rs index 5203f36d2a..8811b3798c 100644 --- a/src/ffi_export.rs +++ b/src/ffi_export.rs @@ -159,11 +159,12 @@ macro_rules! __ffi_export__ { ret }} + $crate::paste::item! { /// Define the N-API wrapping function. #[cfg(any( $( all(), - __hack = $node_js_arg_count, + [< __hack_ $node_js_arg_count >] = "", )? ))] const _: () = { @@ -259,6 +260,7 @@ macro_rules! __ffi_export__ { } } }; + } }; #[cfg(not(target_arch = "wasm32"))] From 0fc4fb7fadcb65a611264a57534ca6ff4855a1e4 Mon Sep 17 00:00:00 2001 From: Daniel Henry-Mantilla Date: Wed, 11 May 2022 11:41:54 +0200 Subject: [PATCH 07/11] fixup! remove `proc_macros` feature + revamp of proc-macro modules --- src/proc_macro/ffi_export/_mod.rs | 5 ++--- src/utils/macros.rs | 4 ++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/proc_macro/ffi_export/_mod.rs b/src/proc_macro/ffi_export/_mod.rs index ab6ec103fc..96944c4c2c 100644 --- a/src/proc_macro/ffi_export/_mod.rs +++ b/src/proc_macro/ffi_export/_mod.rs @@ -17,9 +17,8 @@ fn ffi_export ( ).into(); } - #[cfg(feature = "node-js")] - let fun: ItemFn = parse2(input.clone())?; - #[cfg(feature = "async-fn")] { + #[cfg(feature = "async_fn")] emit! { + let fun: ItemFn = parse2(input.clone())?; match parse2::(attrs.clone()) { | Ok(attrs) if attrs.block_on.is_some() diff --git a/src/utils/macros.rs b/src/utils/macros.rs index 1234c6cc9c..a76e2118fb 100644 --- a/src/utils/macros.rs +++ b/src/utils/macros.rs @@ -313,3 +313,7 @@ macro_rules! match_ {( macro_rules! __recurse__ $rules __recurse__! { $($scrutinee)* } )} + +macro_rules! emit {( $($tt:tt)* ) => ( + $($tt)* +)} From bb10cc3463530c39ffbf9c7d291692ee580caece Mon Sep 17 00:00:00 2001 From: Daniel Henry-Mantilla Date: Mon, 16 May 2022 13:54:51 +0200 Subject: [PATCH 08/11] I'd rather WIP than weep --- Cargo.toml | 7 +- ffi_tests/generated.cs | 3 + ffi_tests/generated.h | 9 +- ffi_tests/src/lib.rs | 10 +- ffi_tests/tests/csharp/Tests.csproj | 2 +- rust-toolchain | 2 +- src/_lib.rs | 178 +++++---- src/c_char.rs | 16 +- src/char_p.rs | 2 +- src/ffi_export.rs | 15 +- src/headers/_mod.rs | 15 +- src/headers/definer.rs | 4 +- src/headers/languages/c.rs | 123 +++++++ src/headers/languages/csharp.rs | 121 +++++++ src/headers/languages/mod.rs | 262 ++++++++++++++ src/layout/_mod.rs | 185 +++++++++- src/layout/impls.rs | 134 ++++--- src/layout/macros.rs | 67 ++-- src/layout/niche.rs | 6 +- src/proc_macro/Cargo.toml | 4 +- src/proc_macro/_mod.rs | 78 ++++ src/proc_macro/derives/_mod.rs | 57 +-- src/proc_macro/derives/c_type/_mod.rs | 49 +++ src/proc_macro/derives/c_type/js.rs | 0 src/proc_macro/derives/c_type/struct_.rs | 260 +++++++++++++ src/proc_macro/derives/handle_fptr.rs | 79 ++-- src/proc_macro/derives/repr_c/_mod.rs | 53 +++ src/proc_macro/derives/repr_c/enum_.rs | 341 ++++++++++++++++++ src/proc_macro/derives/repr_c/js.rs | 0 src/proc_macro/derives/repr_c/struct_.rs | 136 +++++++ src/proc_macro/ffi_export/_mod.rs | 12 +- src/proc_macro/utils/_mod.rs | 69 ++-- src/proc_macro/utils/extension_traits.rs | 36 ++ src/proc_macro/utils/macros.rs | 132 +++++++ src/proc_macro/utils/mb_file_expanded.rs | 81 +++-- .../utils/trait_impl_shenanigans.rs | 60 +++ src/string/_mod.rs | 3 +- src/tuple.rs | 16 +- src/utils/_mod.rs | 28 +- src/utils/macros.rs | 263 ++++++-------- src/utils/markers.rs | 8 +- src/utils/prelude.rs | 44 +-- 42 files changed, 2440 insertions(+), 530 deletions(-) create mode 100644 src/headers/languages/c.rs create mode 100644 src/headers/languages/csharp.rs create mode 100644 src/headers/languages/mod.rs create mode 100644 src/proc_macro/derives/c_type/_mod.rs create mode 100644 src/proc_macro/derives/c_type/js.rs create mode 100644 src/proc_macro/derives/c_type/struct_.rs create mode 100644 src/proc_macro/derives/repr_c/_mod.rs create mode 100644 src/proc_macro/derives/repr_c/enum_.rs create mode 100644 src/proc_macro/derives/repr_c/js.rs create mode 100644 src/proc_macro/derives/repr_c/struct_.rs create mode 100644 src/proc_macro/utils/trait_impl_shenanigans.rs diff --git a/Cargo.toml b/Cargo.toml index 99f99c2143..8785dc2ea6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,11 +18,12 @@ readme = "README.md" default = [ "std", # FIXME: REMOVE! - "dyn-traits", + "dyn-traits", "csharp-headers", ] # Document under the following features: all but for debug or experimental. docs = [ + "csharp-headers", "default", "nightly", "uninit", @@ -88,6 +89,9 @@ inventory.version = "0.1.6" inventory.optional = true scopeguard.version = "1.1.0" unwind_safe.version = "0.1.0" +fstrings = "0.2.3" +with_builtin_macros.version = "0.0.3" +macro_rules_attribute = "0.1.0" [dependencies.napi] package = "napi-dispatcher" @@ -125,4 +129,3 @@ members = [ [package.metadata.docs.rs] features = ["docs"] -# rustdoc-args = ["--cfg", "docs"] diff --git a/ffi_tests/generated.cs b/ffi_tests/generated.cs index 2d1874437a..27947b84f1 100644 --- a/ffi_tests/generated.cs +++ b/ffi_tests/generated.cs @@ -32,6 +32,9 @@ public unsafe struct AnUnusedStruct_t { public Wow_t are_you_still_there; } +/// +/// Hello, World! +/// public enum Triforce_t : byte { Din = 3, Farore = 1, diff --git a/ffi_tests/generated.h b/ffi_tests/generated.h index e8af298c65..11f6ee3baf 100644 --- a/ffi_tests/generated.h +++ b/ffi_tests/generated.h @@ -39,6 +39,9 @@ typedef struct { } AnUnusedStruct_t; +/** \brief + * Hello, `World`! + */ /** \remark Has the same ABI as `uint8_t` **/ #ifdef DOXYGEN typedef enum Triforce @@ -46,11 +49,11 @@ typedef enum Triforce typedef uint8_t Triforce_t; enum #endif { - /** . */ + /** */ TRIFORCE_DIN = 3, - /** . */ + /** */ TRIFORCE_FARORE = 1, - /** . */ + /** */ TRIFORCE_NARYU, } #ifdef DOXYGEN diff --git a/ffi_tests/src/lib.rs b/ffi_tests/src/lib.rs index 75520ca711..756e9d1f4a 100644 --- a/ffi_tests/src/lib.rs +++ b/ffi_tests/src/lib.rs @@ -1,4 +1,5 @@ #![cfg_attr(rustfmt, rustfmt::skip)] + use ::safer_ffi::prelude::*; /// Concatenate the two input strings into a new one. @@ -127,12 +128,13 @@ pub enum Wow { Jenkins, } +/// Hello, `World`! #[ffi_export] -#[derive_ReprC] +#[derive_ReprC2] #[repr(u8)] pub enum Triforce { Din = 3, - Farore = 1, + Farore = Triforce::Din as u8 - 2, Naryu, } @@ -148,8 +150,8 @@ pub struct AnUnusedStruct { fn generate_headers () -> ::std::io::Result<()> {Ok({ - use ::safer_ffi::headers::Language::*; - for &(language, ext) in &[(C, "h"), (CSharp, "cs")] { + use ::safer_ffi::headers::Language::{self, *}; + for &(language, ext) in &[(C, "h"), (Language::CSharp, "cs")] { let builder = ::safer_ffi::headers::builder() .with_language(language) diff --git a/ffi_tests/tests/csharp/Tests.csproj b/ffi_tests/tests/csharp/Tests.csproj index 5dede5e0d4..148801f72a 100644 --- a/ffi_tests/tests/csharp/Tests.csproj +++ b/ffi_tests/tests/csharp/Tests.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp5.0 + netcoreapp6.0 true diff --git a/rust-toolchain b/rust-toolchain index 373aea9757..4d5fde5bd1 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -1.57.0 +1.60.0 diff --git a/src/_lib.rs b/src/_lib.rs index 7cf74df4d6..f014ccca49 100644 --- a/src/_lib.rs +++ b/src/_lib.rs @@ -22,17 +22,25 @@ #![doc = include_str!("../README.md")] #![cfg(not(rustfmt))] +#![feature(rustc_attrs)] #![allow(warnings)] + +#[macro_use] +extern crate fstrings; + +#[macro_use] +extern crate macro_rules_attribute; + +#[macro_use] +extern crate with_builtin_macros; + #[macro_use] #[path = "utils/_mod.rs"] #[doc(hidden)] /** Not part of the public API **/ pub mod __utils__; use __utils__ as utils; -hidden_export! { - use ::paste; -} - - +#[apply(hidden_export)] +use ::paste; /// Export a function to be callable by C. /// @@ -301,49 +309,45 @@ cfg_alloc! { pub mod vec; } -macro_rules! reexport_primitive_types {( - $($ty:ident)* -) => ( - $( - #[doc(hidden)] - pub use $ty; - )* -)} reexport_primitive_types! { +match_! {( u8 u16 u32 u64 u128 i8 i16 i32 i64 i128 f32 f64 char bool str -} +) {( + $($ty:ident)* +) => ( + $( + #[doc(hidden)] + pub use $ty; + )* +)}} -hidden_export! { - use ::core; -} +#[apply(hidden_export)] +use ::core; -hidden_export! { - use ::scopeguard; -} +#[apply(hidden_export)] +use ::scopeguard; -cfg_std! { - hidden_export! { - use ::std; - } -} +#[apply(cfg_std!)] +#[apply(hidden_export)] +use ::std; + +#[apply(hidden_export)] +/// Hack needed to `feature(trivial_bounds)` in stable Rust: +/// +/// Instead of `where Ty : Bounds…`, it suffices to write: +/// `where for<'hrtb> TrivialBound<'hrtb, Ty> : Bounds…`. +type __TrivialBound<'hrtb, T> = >::ItSelf; -hidden_export! { - /// Hack needed to `feature(trivial_bounds)` in stable Rust: - /// - /// Instead of `where Ty : Bounds…`, it suffices to write: - /// `where for<'hrtb> TrivialBound<'hrtb, Ty> : Bounds…`. - type __TrivialBound<'hrtb, T> = >::ItSelf; -} mod __private { pub trait Ignoring<'__> { type ItSelf : ?Sized; } impl Ignoring<'_> for T { type ItSelf = Self; } } -#[doc(hidden)] /** Not part of the public API **/ pub +#[apply(hidden_export)] use layout::impls::c_int; #[derive(Clone, Copy)] @@ -412,17 +416,17 @@ mod prelude { } #[doc(no_inline)] - pub use crate::layout::derive_ReprC; - #[doc(no_inline)] - pub use crate::c; - - #[doc(no_inline)] - pub use ::core::{ - convert::{ - TryFrom as _, - TryInto as _, + pub use { + crate::layout::derive_ReprC, + ::safer_ffi_proc_macros::derive_ReprC2, + crate::c, + ::core::{ + convert::{ + TryFrom as _, + TryInto as _, + }, + ops::Not as _, }, - ops::Not as _, }; #[cfg(feature = "out-refs")] @@ -451,54 +455,50 @@ macro_rules! NULL {() => ( )} #[cfg(feature = "log")] -hidden_export! { - use ::log; -} +#[apply(hidden_export)] +use ::log; #[cfg(feature = "node-js")] -// hidden_export! { - #[path = "node_js/_mod.rs"] - pub mod node_js; -// } - -hidden_export! { - #[allow(missing_copy_implementations, missing_debug_implementations)] - struct __PanicOnDrop__; impl Drop for __PanicOnDrop__ { - fn drop (self: &'_ mut Self) - { - panic!() - } +// #[apply(hidden_export)] +#[path = "node_js/_mod.rs"] +pub mod node_js; + +#[apply(hidden_export)] +#[allow(missing_copy_implementations, missing_debug_implementations)] +struct __PanicOnDrop__; impl Drop for __PanicOnDrop__ { + fn drop (self: &'_ mut Self) + { + panic!() } } #[cfg(feature = "log")] -hidden_export! { - macro_rules! __abort_with_msg__ { ($($tt:tt)*) => ({ - $crate::log::error!($($tt)*); - let _panic_on_drop = $crate::__PanicOnDrop__; - $crate::core::panic!($($tt)*); - })} -} +#[apply(hidden_export)] +macro_rules! __abort_with_msg__ { ($($tt:tt)*) => ({ + $crate::log::error!($($tt)*); + let _panic_on_drop = $crate::__PanicOnDrop__; + $crate::core::panic!($($tt)*); +})} + #[cfg(all( not(feature = "log"), feature = "std", ))] -hidden_export! { - macro_rules! __abort_with_msg__ { ($($tt:tt)*) => ({ - $crate::std::eprintln!($($tt)*); - $crate::std::process::abort(); - })} -} +#[apply(hidden_export)] +macro_rules! __abort_with_msg__ { ($($tt:tt)*) => ({ + $crate::std::eprintln!($($tt)*); + $crate::std::process::abort(); +})} + #[cfg(all( not(feature = "log"), not(feature = "std"), ))] -hidden_export! { - macro_rules! __abort_with_msg__ { ($($tt:tt)*) => ({ - let _panic_on_drop = $crate::__PanicOnDrop__; - $crate::core::panic!($($tt)*); - })} -} +#[apply(hidden_export)] +macro_rules! __abort_with_msg__ { ($($tt:tt)*) => ({ + let _panic_on_drop = $crate::__PanicOnDrop__; + $crate::core::panic!($($tt)*); +})} #[cfg(target_arch = "wasm32")] #[allow(dead_code)] @@ -511,3 +511,27 @@ mod libc { use ::libc; extern crate self as safer_ffi; + +#[apply(hidden_export)] +use __ as ඞ; + +#[apply(hidden_export)] +mod __ { + pub use { + ::core::{ + self, + primitive::{ + u8, u16, u32, usize, u64, u128, + i8, i16, i32, isize, i64, i128, + bool, + char, + str, + }, + }, + ::std::{ + self, + *, + prelude::rust_2021::*, + }, + }; +} diff --git a/src/c_char.rs b/src/c_char.rs index 05b019af5a..459665fd59 100644 --- a/src/c_char.rs +++ b/src/c_char.rs @@ -38,7 +38,7 @@ const _: () = { }; unsafe -impl CType +impl LegacyCType for c_char { __cfg_headers__! { fn c_short_name_fmt (fmt: &'_ mut fmt::Formatter<'_>) @@ -59,7 +59,21 @@ impl CType ) } + fn c_define_self ( + _: &'_ mut dyn crate::headers::Definer, + ) -> io::Result<()> + { + Ok(()) + } + __cfg_csharp__! { + fn csharp_define_self ( + _: &'_ mut dyn crate::headers::Definer, + ) -> io::Result<()> + { + Ok(()) + } + fn csharp_ty () -> rust::String { diff --git a/src/char_p.rs b/src/char_p.rs index 5aa05070e4..49cdf5c00e 100644 --- a/src/char_p.rs +++ b/src/char_p.rs @@ -442,7 +442,7 @@ cfg_alloc! { @for['lt] &'lt str => rust::String, // @for['lt] str::Ref<'lt> => rust::String, rust::String => rust::String, - String => rust::String, + repr_c::String => rust::String, } cfg_std! { derive_MyFrom_from! { diff --git a/src/ffi_export.rs b/src/ffi_export.rs index 8811b3798c..3f4fe42037 100644 --- a/src/ffi_export.rs +++ b/src/ffi_export.rs @@ -18,6 +18,7 @@ macro_rules! __ffi_export__ { { $($tt)* } + $crate::__cfg_headers__! { $crate::inventory::submit! { #![crate = $crate] @@ -97,12 +98,7 @@ macro_rules! __ffi_export__ { { fn __return_type__ (_: T) where - T : $crate::layout::ReprC, - ::CLayout - : - $crate::layout::CType< - OPAQUE_KIND = $crate::layout::OpaqueKind::Concrete, - >, + T : $crate::layout::ConcreteReprC, {} let _ = __return_type__::<$Ret>; } @@ -114,12 +110,7 @@ macro_rules! __ffi_export__ { pub(in super) fn $arg_name (_: T) where - T : $crate::layout::ReprC, - ::CLayout - : - $crate::layout::CType< - OPAQUE_KIND = $crate::layout::OpaqueKind::Concrete, - >, + T : $crate::layout::ConcreteReprC, {} } let _ = __parameter__::$arg_name::<$arg_ty>; diff --git a/src/headers/_mod.rs b/src/headers/_mod.rs index 243cd41e00..7b419f4def 100644 --- a/src/headers/_mod.rs +++ b/src/headers/_mod.rs @@ -112,6 +112,9 @@ use ::std::{ use_prelude!(); use rust::{String}; +pub // (in crate) +mod languages; + pub use definer::{Definer, HashSetDefiner}; mod definer; @@ -472,11 +475,11 @@ hidden_export! { { match lang { | Language::C => { - ::c_define_self(definer) + ::define_self(&crate::headers::languages::C, definer) }, #[cfg(feature = "csharp-headers")] | Language::CSharp => { - ::csharp_define_self(definer) + ::define_self(&crate::headers::languages::CSharp, definer) }, } } @@ -522,12 +525,12 @@ hidden_export! { } match lang { | Language::C => write!(out, - "\n {}", Arg::CLayout::c_var(arg_name), + "\n {}", Arg::CLayout::name_wrapping_var(&crate::headers::languages::C, arg_name), ), #[cfg(feature = "csharp-headers")] | Language::CSharp => write!(out, - "\n {marshaler}{}", Arg::CLayout::csharp_var(arg_name), + "\n {marshaler}{}", Arg::CLayout::name_wrapping_var(&crate::headers::languages::CSharp, arg_name), marshaler = Arg::CLayout::csharp_marshaler() .map(|m| format!("[MarshalAs({})]\n ", m)) @@ -553,7 +556,7 @@ hidden_export! { } writeln!(out, "{});\n", - Ret::CLayout::c_var(&fname_and_args), + Ret::CLayout::name_wrapping_var(&crate::headers::languages::C, &fname_and_args), ) }, @@ -567,7 +570,7 @@ hidden_export! { " {});\n", "}}\n", ), - Ret::CLayout::csharp_var(&fname_and_args), + Ret::CLayout::name_wrapping_var(&crate::headers::languages::CSharp, &fname_and_args), mb_marshaler = Ret::CLayout::csharp_marshaler() .map(|m| format!("[return: MarshalAs({})]\n ", m)) diff --git a/src/headers/definer.rs b/src/headers/definer.rs index 740c5cedbd..f1583b856a 100644 --- a/src/headers/definer.rs +++ b/src/headers/definer.rs @@ -50,7 +50,7 @@ mod define_once_seal { self: &'_ mut Self, name: &'_ str, write_typedef: &'_ mut dyn - FnMut (&'_ mut dyn Definer) -> io::Result<()> + FnMut(&'_ mut dyn Definer) -> io::Result<()> , ) -> io::Result<()> ; @@ -63,7 +63,7 @@ mod define_once_seal { self: &'_ mut Self, name: &'_ str, write_typedef: &'_ mut dyn - FnMut (&'_ mut dyn Definer) -> io::Result<()> + FnMut(&'_ mut dyn Definer) -> io::Result<()> , ) -> io::Result<()> { diff --git a/src/headers/languages/c.rs b/src/headers/languages/c.rs new file mode 100644 index 0000000000..c62652c6e4 --- /dev/null +++ b/src/headers/languages/c.rs @@ -0,0 +1,123 @@ +use super::*; + +pub +struct C; + +impl HeaderLanguage for C { + fn emit_docs ( + self: &'_ Self, + ctx: &'_ mut dyn Definer, + docs: Docs<'_>, + indent: &'_ Indentation, + ) -> io::Result<()> + { + mk_out!(indent, "{indent}", ctx.out()); + + if docs.is_empty() { + out!(("/** */")); + return Ok(()); + } + + out!(("/** \\brief")); + for line in docs.iter().copied().map(str::trim) { + let sep = if line.is_empty() { "" } else { " " }; + out!((" *{sep}{line}")); + } + out!((" */")); + + Ok(()) + } + + fn emit_simple_enum ( + self: &'_ C, + ctx: &'_ mut dyn Definer, + docs: Docs<'_>, + enum_name: &'_ str, + size: Option<(bool, u8)>, + variants: &'_ [EnumVariant<'_>], + ) -> io::Result<()> + { + let ref indent = Indentation::new(4 /* ctx.indent_width() */); + mk_out!(indent, "{indent}", ctx.out()); + + let ref intn_t = + size.map(|(signed, bitwidth)| format!( + "{}int{bitwidth}_t", if signed { "" } else { "u" }, + )) + ; + + self.emit_docs(ctx, docs, indent)?; + + if let Some(intn_t) = intn_t { + out!(( + "/** \\remark Has the same ABI as `{intn_t}` **/" + "#ifdef DOXYGEN" + "typedef enum {enum_name}" + "#else" + "typedef {intn_t} {enum_name}_t; enum" + "#endif" + "{{" + )); + } else { + out!(("typedef enum {enum_name} {{")); + } + + if let _ = indent.scope() { + for v in variants { + self.emit_docs(ctx, v.docs, indent)?; + let variant_name = crate::utils::screaming_case(enum_name, v.name) /* ctx.adjust_variant_name( + Language::C, + enum_name, + v.name, + ) */; + if let Some(value) = v.discriminant { + out!(("{variant_name} = {value:?},")); + } else { + out!(("{variant_name},")); + } + } + } + + if intn_t.is_some() { + out!(( + "}}" + "#ifdef DOXYGEN" + "{enum_name}_t" + "#endif" + ";" + )); + } else { + out!(("}} {enum_name}_t;")); + } + + out!("\n"); + Ok(()) + } + + fn emit_struct ( + self: &'_ Self, + ctx: &'_ mut dyn Definer, + docs: Docs<'_>, + name: &'_ str, + size: usize, + fields: &'_ [StructField<'_>] + ) -> io::Result<()> + { + if size == 0 || fields.is_empty() { + panic!("C does not support zero-sized structs!") + } + todo!() + } + + fn emit_function ( + self: &'_ Self, + ctx: &'_ mut dyn Definer, + docs: Docs<'_>, + fname: &'_ str, + arg_names: &'_ [FunctionArg<'_>], + ret_ty: &'_ str, + ) -> io::Result<()> + { + todo!() + } +} diff --git a/src/headers/languages/csharp.rs b/src/headers/languages/csharp.rs new file mode 100644 index 0000000000..9c5374f960 --- /dev/null +++ b/src/headers/languages/csharp.rs @@ -0,0 +1,121 @@ +use super::*; + +pub +struct CSharp; + +impl HeaderLanguage for CSharp { + fn emit_docs ( + self: &'_ Self, + ctx: &'_ mut dyn Definer, + docs: Docs<'_>, + indent: &'_ Indentation, + ) -> io::Result<()> + { + mk_out!(indent, "{indent}", ctx.out()); + + if docs.is_empty() { + // out!(("/// No documentation available> ")); + return Ok(()); + } + + out!(("/// ")); + for mut line in docs.iter().copied().map(str::trim) { + let mut storage = None; + if line.contains('`') { + let s = storage.get_or_insert_with(rust::String::new); + let mut parity = 0..; + line.chars().for_each(|c| match c { + | '`' => s.push_str(["", ""][parity.next().unwrap() % 2]), + | _ => s.push(c), + }); + line = s; + } + let sep = if line.is_empty() { "" } else { " " }; + out!(("///{sep}{line}")); + } + out!(("/// ")); + + Ok(()) + } + + fn emit_simple_enum ( + self: &'_ CSharp, + ctx: &'_ mut dyn Definer, + docs: Docs<'_>, + enum_name: &'_ str, + size: Option<(bool, u8)>, + variants: &'_ [EnumVariant<'_>], + ) -> io::Result<()> + { + let ref indent = Indentation::new(4 /* ctx.indent_width() */); + mk_out!(indent, "{indent}", ctx.out()); + + let ref IntN = + size.map(|(signed, bitwidth)| if bitwidth != 8 { + format!( + "{}Int{bitwidth}", if signed { "" } else { "U" }, + ) + } else { + format!( + "{}byte", if signed { "s" } else { "" }, + ) + }) + ; + + self.emit_docs(ctx, docs, indent)?; + + out!( + ("public enum {enum_name}_t {super} {{"), + super = if let Some(IntN) = IntN { + format!(": {IntN}") + } else { + "".into() + }, + ); + + if let _ = indent.scope() { + for v in variants { + self.emit_docs(ctx, v.docs, indent)?; + let variant_name = v.name /* ctx.adjust_variant_name( + Language::CSharp, + enum_name, + v.name, + ) */; + if let Some(value) = v.discriminant { + out!(("{variant_name} = {value:?},")); + } else { + out!(("{variant_name},")); + } + } + } + + out!(("}}")); + + out!("\n"); + Ok(()) + } + + fn emit_struct ( + self: &'_ Self, + ctx: &'_ mut dyn Definer, + docs: Docs<'_>, + name: &'_ str, + size: usize, + fields: &'_ [StructField<'_>] + ) -> io::Result<()> + { + todo!() + } + + fn emit_function ( + self: &'_ Self, + ctx: &'_ mut dyn Definer, + docs: Docs<'_>, + fname: &'_ str, + arg_names: &'_ [FunctionArg<'_>], + ret_ty: &'_ str, + ) -> io::Result<()> + { + todo!() + } +} diff --git a/src/headers/languages/mod.rs b/src/headers/languages/mod.rs new file mode 100644 index 0000000000..a3ac65c8d8 --- /dev/null +++ b/src/headers/languages/mod.rs @@ -0,0 +1,262 @@ +#![allow(irrefutable_let_patterns)] + +use_prelude!(); +use { + ::std::io::{ + self, + Write as _, + }, + super::{ + Definer, + Language, + }, +}; + +pub use c::C; +mod c; + +pub use csharp::CSharp; +mod csharp; + +pub +struct Indentation { + depth: ::core::cell::Cell, + width: usize, +} + +impl Indentation { + pub + fn new (width: usize) + -> Indentation + { + Self { depth: 0.into(), width } + } + + pub + fn scope (self: &'_ Self) + -> impl '_ + Sized + { + self.depth.set(self.depth.get() + 1); + ::scopeguard::guard((), move |()| { + self.depth.set(self.depth.get() - 1); + }) + } +} + +impl ::core::fmt::Display for Indentation { + fn fmt ( + self: &'_ Indentation, + fmt: &'_ mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result + { + write!(fmt, "{: = &'lt [&'lt str]; + +pub +trait HeaderLanguage : UpcastAny { + fn emit_docs ( + self: &'_ Self, + out: &'_ mut dyn Definer, + docs: Docs<'_>, + indentation: &'_ Indentation, + ) -> io::Result<()> + ; + + fn emit_simple_enum ( + self: &'_ Self, + out: &'_ mut dyn Definer, + docs: Docs<'_>, + name: &'_ str, + // `(is_signed, bitwidth)` + size: Option<(bool, u8)>, + variants: &'_ [EnumVariant<'_>], + ) -> io::Result<()> + ; + + fn emit_struct ( + self: &'_ Self, + out: &'_ mut dyn Definer, + docs: Docs<'_>, + name: &'_ str, + size: usize, + fields: &'_ [StructField<'_>] + ) -> io::Result<()> + ; + + fn emit_function ( + self: &'_ Self, + out: &'_ mut dyn Definer, + docs: Docs<'_>, + fname: &'_ str, + arg_names: &'_ [FunctionArg<'_>], + ret_ty: &'_ str, + ) -> io::Result<()> + ; +} + +pub +struct EnumVariant<'lt> { + pub + docs: Docs<'lt>, + + pub + name: &'lt str, + + pub + discriminant: Option<&'lt dyn ::core::fmt::Debug>, +} + +pub +struct StructField<'lt> { + pub + docs: Docs<'lt>, + + pub + name: &'lt str, + + pub + emit_unindented: &'lt dyn + Fn(&'_ dyn HeaderLanguage, &'_ mut dyn Definer) -> io::Result<()> + , +} + +pub +struct FunctionArg<'lt> { + pub + docs: Docs<'lt>, + + pub + name: &'lt str, + + pub + emit_unindented: &'lt dyn + Fn(&'_ dyn HeaderLanguage, &'_ mut dyn Definer) -> io::Result<()> + , +} + +/// Generates an `out!` macro. +/// +/// Important: the `out!` macro accepts a `("foo" "bar" "baz")` shorthand +/// for the format literal parameter, to automatically convert it to: +/// +/** ```rust ,ignore +concat!( + "{indent}foo\n", + "{indent}bar\n", + "{indent}baz\n", +) +``` */ +/// +/// where `"{indent}"` is the first parameter passed to `mk_out!`, +/// and the second parameter is the `impl Write` the `write!`s will +/// be outputting to. +macro_rules! mk_out { + ( + $indent_name:ident, + $indent:tt, + $out:expr $(,)? + ) => ( + mk_out! { $indent_name $indent $out $ } + ); + + ( + $indent_name:tt $indent:tt $out:tt $_:tt + ) => ( + macro_rules! out { + ( + ($_( + $line:tt + )*) $_($rest:tt)* + ) => ( + with_builtin! { + let $concat = concat!($_( + $indent, + $line, + "\n", + )*) in { + ::safer_ffi_proc_macros::__respan! { + ( $_($line)* ) + ( + write!( + $out, + $concat + // , $indent_name = $indent_name + $_($rest)* + )? + ) + } + } + } + // write!( + // $out, + // concat!($_( + // // "{", stringify!($indent), "}", + // $indent, + // $line, + // "\n", + // )*) + // , $indent_name = $indent_name + // $_($rest)* + // ) + ); + + ( $_($tt:tt)* ) => ( + write!($out, $_($tt)*)? + ) + } + ); +} use mk_out; + +pub +trait UpcastAny : 'static { + fn upcast_any (self: &'_ Self) + -> &dyn ::core::any::Any + ; +} +impl UpcastAny for T { + fn upcast_any (self: &'_ Self) + -> &dyn ::core::any::Any + { + self + } +} + +impl dyn HeaderLanguage { + pub + fn is ( + self: &'_ Self, + ) -> bool + { + self.upcast_any().is::() + } + + pub + fn downcast_ref ( + self: &'_ Self, + ) -> Option<&'_ Concrete> + { + self.upcast_any() + .downcast_ref() + } +} diff --git a/src/layout/_mod.rs b/src/layout/_mod.rs index 7828077efc..3ae5194f36 100644 --- a/src/layout/_mod.rs +++ b/src/layout/_mod.rs @@ -2,9 +2,13 @@ //! Trait abstractions describing the semantics of "being `#[repr(C)]`" use_prelude!(); +use rust::String; __cfg_headers__! { - use crate::headers::Definer; + use crate::headers::{ + Definer, + languages::*, + }; } #[macro_use] @@ -26,10 +30,116 @@ type_level_enum! { } pub -fn __assert_concrete__() where - T : ReprC, - ::CLayout : CType, -{} +unsafe +trait CType +: + Sized + + Copy + +{ + type OPAQUE_KIND : OpaqueKind::T; + + __cfg_headers__! { + fn short_name () + -> String + ; + + #[inline] + fn define_self ( + language: &'_ dyn HeaderLanguage, + definer: &'_ mut dyn Definer, + ) -> io::Result<()> + ; + + fn name ( + _language: &'_ dyn HeaderLanguage, + ) -> String + { + format!("{}_t", Self::short_name()) + } + + fn name_wrapping_var ( + language: &'_ dyn HeaderLanguage, + var_name: &'_ str, + ) -> String + { + let sep = if var_name.is_empty() { "" } else { " " }; + format!("{}{sep}{var_name}", Self::name(language)) + } + + /// Optional marshaler attached to the type (_e.g._, + /// `[MarshalAs(UnmanagedType.FunctionPtr)]`) + fn csharp_marshaler () + -> Option + { + None + } + } +} + +unsafe +impl CType for T { + type OPAQUE_KIND = ::OPAQUE_KIND; + + #[inline] + fn short_name () + -> String + { + ::c_short_name().to_string() + } + + #[inline] + fn define_self ( + language: &'_ dyn HeaderLanguage, + definer: &'_ mut dyn Definer, + ) -> io::Result<()> + { + match () { + | _case if language.is::() => { + ::c_define_self(definer) + }, + | _case if language.is::() => { + ::csharp_define_self(definer) + }, + | _ => unimplemented!(), + } + } + + #[inline] + fn name ( + language: &'_ dyn HeaderLanguage, + ) -> String + { + Self::name_wrapping_var(language, "") + } + + #[inline] + fn name_wrapping_var ( + language: &'_ dyn HeaderLanguage, + var_name: &'_ str, + ) -> String + { + match () { + | _case if language.is::() => { + ::c_var(var_name).to_string() + }, + | _case if language.is::() => { + let sep = if var_name.is_empty() { "" } else { " " }; + format!("{}{sep}{var_name}", Self::csharp_ty()) + }, + | _ => unimplemented!(), + } + } + + #[inline] + fn csharp_marshaler () + -> Option + { + ::legacy_csharp_marshaler() + } +} + +pub +type CLayoutOf = ::CLayout; /// One of the two core traits of this crate (with [`ReprC`][`trait@ReprC`]). /// @@ -73,11 +183,14 @@ fn __assert_concrete__() where /// bit-patterns for the `uint8_t` type that do not make _valid_ `bool`s. /// /// For such types, see the [`ReprC`][`trait@ReprC`] trait. +// #[rustc_must_implement_one_of(c_define_self, define_self)] +// #[rustc_must_implement_one_of(c_short_name_fmt, short_name_fmt)] pub -unsafe trait CType +unsafe trait LegacyCType : Sized + Copy + + CType + { type OPAQUE_KIND : OpaqueKind::T; __cfg_headers__! { @@ -130,7 +243,21 @@ unsafe trait CType fn c_short_name_fmt (fmt: &'_ mut fmt::Formatter<'_>) -> fmt::Result ; - + // { + // Self::short_name_fmt(&C, fmt) + // } + + // fn short_name_fmt ( + // language: &'_ dyn HeaderLanguage, + // fmt: &'_ mut fmt::Formatter<'_>, + // ) -> fmt::Result + // { + // match () { + // | _case if language.is::() => Self::c_short_name_fmt(fmt), + // // | _case if language.is::() => Self::csharp_short_name_fmt(fmt), + // | _ => unimplemented!(), + // } + // } /// Convenience function for _callers_ / users of types implementing /// [`CType`][`trait@CType`]. @@ -240,10 +367,20 @@ unsafe trait CType #[inline] fn c_define_self (definer: &'_ mut dyn Definer) -> io::Result<()> - { - let _ = definer; - Ok(()) - } + ; + // { + // Self::define_self(&C, definer) + // } + + // #[inline] + // fn define_self ( + // language: &'_ dyn HeaderLanguage, + // definer: &'_ mut dyn Definer, + // ) -> io::Result<()> + // { + // let _ = (language, definer); + // Ok(()) + // } /// The core method of the trait: it provides the implementation to be /// used by [`CType::c_var`], by bringing a `Formatter` in scope. @@ -364,14 +501,17 @@ unsafe trait CType /// Extra typedef code (_e.g._ `[LayoutKind.Sequential] struct ...`) fn csharp_define_self (definer: &'_ mut dyn Definer) -> io::Result<()> - { - let _ = definer; - Ok(()) - } + ; + // { + // Self::define_self( + // &CSharp, + // definer, + // ) + // } /// Optional marshaler attached to the type (_e.g._, /// `[MarshalAs(UnmanagedType.FunctionPtr)]`) - fn csharp_marshaler () + fn legacy_csharp_marshaler () -> Option { None @@ -406,7 +546,7 @@ __cfg_headers__! { #[allow(missing_debug_implementations)] pub - struct ImplDisplay<'__, T : CType> { + struct ImplDisplay<'__, T : LegacyCType> { pub(in super) var_name: &'__ str, @@ -414,7 +554,7 @@ __cfg_headers__! { _phantom: ::core::marker::PhantomData, } - impl Display + impl Display for ImplDisplay<'_, T> { #[inline] @@ -432,12 +572,12 @@ __cfg_headers__! { #[allow(missing_debug_implementations)] pub - struct ImplDisplay { + struct ImplDisplay { pub(in super) _phantom: ::core::marker::PhantomData, } - impl Display + impl Display for ImplDisplay { #[inline] @@ -807,3 +947,8 @@ where { type ConcreteCLayout = CLayout; } + +pub +fn __assert_concrete__() where + T : ConcreteReprC, +{} diff --git a/src/layout/impls.rs b/src/layout/impls.rs index 457ed90b6f..886ef3bf2b 100644 --- a/src/layout/impls.rs +++ b/src/layout/impls.rs @@ -1,6 +1,8 @@ #![cfg_attr(rustfmt, rustfmt::skip)] use super::*; +// use crate::layout::CTypeFmt; + const_assert! { ::core::mem::size_of::() == @@ -93,12 +95,12 @@ const _: () = { macro_rules! impl_CTypes { @arrays $($N:tt)* ) => ($( - // CType + // LegacyCType /// Simplified for lighter documentation, but the actual impls /// range **from `1` up to `32`, plus a bunch of significant /// lengths up to `1024`**. unsafe // Safety: Rust arrays _are_ `#[repr(C)]` - impl CType + impl LegacyCType for [Item; $N] { __cfg_headers__! { fn c_short_name_fmt (fmt: &'_ mut fmt::Formatter<'_>) @@ -107,7 +109,7 @@ const _: () = { macro_rules! impl_CTypes { // item_N_array write!(fmt, concat!("{}_", stringify!($N), "_array"), - Item::c_short_name(), + Item::short_name(), ) } @@ -118,14 +120,14 @@ const _: () = { macro_rules! impl_CTypes { definer.define_once( me, &mut |definer| { - Item::c_define_self(definer)?; + Item::define_self(&crate::headers::languages::C, definer)?; writeln!(definer.out(), concat!( "typedef struct {{\n", " {inline_array};\n", "}} {me};\n", ), - inline_array = Item::c_var(concat!( + inline_array = Item::name_wrapping_var(&crate::headers::languages::C, concat!( "idx[", stringify!($N), "]", )), me = me, @@ -153,7 +155,7 @@ const _: () = { macro_rules! impl_CTypes { -> io::Result<()> { let ref me = Self::csharp_ty(); - Item::csharp_define_self(definer)?; + Item::define_self(&crate::headers::languages::CSharp, definer)?; definer.define_once(me, &mut |definer| { let array_items = { // Poor man's specialization to use `fixed` arrays. @@ -166,7 +168,7 @@ const _: () = { macro_rules! impl_CTypes { { format!( " public fixed {ItemTy} arr[{N}];\n", - ItemTy = Item::csharp_ty(), + ItemTy = Item::name(&crate::headers::languages::CSharp), N = $N, // no need for a marshaler here ) @@ -178,7 +180,7 @@ const _: () = { macro_rules! impl_CTypes { " \ {marshaler}\ public {ItemTy} _{i};\n", - ItemTy = Item::csharp_ty(), + ItemTy = Item::name(&crate::headers::languages::CSharp), i = i, marshaler = Item::csharp_marshaler() @@ -241,7 +243,7 @@ const _: () = { macro_rules! impl_CTypes { } )? - // CType + // LegacyCType /// Simplified for lighter documentation, but the actual impls include /// **up to 9 function parameters**. unsafe // Safety: this is the "blessed" type recommended across Rust @@ -251,25 +253,25 @@ const _: () = { macro_rules! impl_CTypes { Ret : CType, $( $An : CType, $( $Ai : CType, - )*)?> CType + )*)?> LegacyCType for Option Ret> { __cfg_headers__! { fn c_short_name_fmt (fmt: &'_ mut fmt::Formatter<'_>) -> fmt::Result { // ret_arg1_arg2_fptr - Ret::c_short_name_fmt(fmt)?; $( - write!(fmt, "_{}", $An::c_short_name())?; $( - write!(fmt, "_{}", $Ai::c_short_name())?; )*)? + fmt.write_str(&Ret::short_name())?; $( + write!(fmt, "_{}", $An::short_name())?; $( + write!(fmt, "_{}", $Ai::short_name())?; )*)? fmt.write_str("_fptr") } fn c_define_self (definer: &'_ mut dyn Definer) -> io::Result<()> { - Ret::c_define_self(definer)?; $( - $An::c_define_self(definer)?; $( - $Ai::c_define_self(definer)?; )*)? + Ret::define_self(&crate::headers::languages::C, definer)?; $( + $An::define_self(&crate::headers::languages::C, definer)?; $( + $Ai::define_self(&crate::headers::languages::C, definer)?; )*)? Ok(()) } @@ -278,12 +280,12 @@ const _: () = { macro_rules! impl_CTypes { var_name: &'_ str, ) -> fmt::Result { - write!(fmt, "{} ", Ret::c_var(""))?; + write!(fmt, "{} ", Ret::name(&crate::headers::languages::C))?; write!(fmt, "(*{})(", var_name)?; let _empty = true; $( let _empty = false; - write!(fmt, "{}", $An::c_var(""))?; $( - write!(fmt, ", {}", $Ai::c_var(""))?; )*)? + write!(fmt, "{}", $An::name(&crate::headers::languages::C))?; $( + write!(fmt, ", {}", $Ai::name(&crate::headers::languages::C))?; )*)? if _empty { fmt.write_str("void")?; } @@ -294,10 +296,10 @@ const _: () = { macro_rules! impl_CTypes { fn csharp_define_self (definer: &'_ mut dyn Definer) -> io::Result<()> { - Ret::csharp_define_self(definer)?; $( - $An::csharp_define_self(definer)?; $( - $Ai::csharp_define_self(definer)?; )*)? - let ref me = Self::csharp_ty(); + Ret::define_self(&crate::headers::languages::CSharp, definer)?; $( + $An::define_self(&crate::headers::languages::CSharp, definer)?; $( + $Ai::define_self(&crate::headers::languages::CSharp, definer)?; )*)? + let ref me = Self::name(&crate::headers::languages::CSharp).to_string(); let ref mut _arg = { let mut iter = (0 ..).map(|c| format!("_{}", c)); move || iter.next().unwrap() @@ -337,9 +339,9 @@ const _: () = { macro_rules! impl_CTypes { .as_deref() .unwrap_or("") , - Ret = Ret::csharp_ty(), $( - $An = $An::csharp_var(&_arg()), $( - $Ai = $Ai::csharp_var(&_arg()), )*)? + Ret = Ret::name(&crate::headers::languages::CSharp), $( + $An = $An::name_wrapping_var(&crate::headers::languages::CSharp, &_arg()), $( + $Ai = $Ai::name_wrapping_var(&crate::headers::languages::CSharp, &_arg()), )*)? )) } @@ -349,7 +351,7 @@ const _: () = { macro_rules! impl_CTypes { Self::c_short_name().to_string() } - fn csharp_marshaler () + fn legacy_csharp_marshaler () -> Option { // This assumes the calling convention from the above @@ -503,7 +505,7 @@ const _: () = { macro_rules! impl_CTypes { )* ) => ($( $unsafe // Safety: guaranteed by the caller of the macro - impl CType + impl LegacyCType for $RustInt { __cfg_headers__! { fn c_short_name_fmt (fmt: &'_ mut fmt::Formatter<'_>) @@ -541,6 +543,13 @@ const _: () = { macro_rules! impl_CTypes { } __cfg_csharp__! { + fn csharp_define_self ( + _: &'_ mut dyn crate::headers::Definer, + ) -> io::Result<()> + { + Ok(()) + } + fn csharp_ty () -> rust::String { @@ -558,7 +567,7 @@ const _: () = { macro_rules! impl_CTypes { )* ) => ($( $unsafe // Safety: guaranteed by the caller of the macro - impl CType + impl LegacyCType for $fN { __cfg_headers__! { fn c_short_name_fmt (fmt: &'_ mut fmt::Formatter<'_>) @@ -579,7 +588,21 @@ const _: () = { macro_rules! impl_CTypes { ) } + fn c_define_self ( + _: &'_ mut dyn crate::headers::Definer, + ) -> io::Result<()> + { + Ok(()) + } + __cfg_csharp__! { + fn csharp_define_self ( + _: &'_ mut dyn crate::headers::Definer, + ) -> io::Result<()> + { + Ok(()) + } + fn csharp_ty () -> rust::String { @@ -594,19 +617,19 @@ const _: () = { macro_rules! impl_CTypes { @pointers ) => ( unsafe - impl CType + impl LegacyCType for *const T { __cfg_headers__! { fn c_short_name_fmt (fmt: &'_ mut fmt::Formatter<'_>) -> fmt::Result { - write!(fmt, "{}_const_ptr", T::c_short_name()) + write!(fmt, "{}_const_ptr", T::short_name()) } fn c_define_self (definer: &'_ mut dyn Definer) -> io::Result<()> { - T::c_define_self(definer) + T::define_self(&crate::headers::languages::C, definer) } fn c_var_fmt ( @@ -616,7 +639,7 @@ const _: () = { macro_rules! impl_CTypes { { write!(fmt, "{} const *{sep}{}", - T::c_var(""), + T::name(&crate::headers::languages::C), var_name, sep = if var_name.is_empty() { "" } else { " " }, ) @@ -626,7 +649,7 @@ const _: () = { macro_rules! impl_CTypes { fn csharp_define_self (definer: &'_ mut dyn $crate::headers::Definer) -> $crate::std::io::Result<()> { - T::csharp_define_self(definer)?; + T::define_self(&crate::headers::languages::CSharp, definer)?; // definer.define_once("Const", &mut |definer| { // definer.out().write_all(concat!( // "[StructLayout(LayoutKind.Sequential)]\n", @@ -641,7 +664,7 @@ const _: () = { macro_rules! impl_CTypes { fn csharp_ty () -> rust::String { - format!("{} /*const*/ *", T::csharp_ty()) + format!("{} /*const*/ *", T::name(&crate::headers::languages::CSharp)) } } } type OPAQUE_KIND = OpaqueKind::Concrete; } @@ -661,19 +684,19 @@ const _: () = { macro_rules! impl_CTypes { } unsafe - impl CType + impl LegacyCType for *mut T { __cfg_headers__! { fn c_short_name_fmt (fmt: &'_ mut fmt::Formatter<'_>) -> fmt::Result { - write!(fmt, "{}_ptr", T::c_short_name()) + write!(fmt, "{}_ptr", T::short_name()) } fn c_define_self (definer: &'_ mut dyn Definer) -> io::Result<()> { - T::c_define_self(definer) + T::define_self(&crate::headers::languages::C, definer) } fn c_var_fmt ( @@ -683,7 +706,7 @@ const _: () = { macro_rules! impl_CTypes { { write!(fmt, "{} *{sep}{}", - T::c_var(""), + T::name(&crate::headers::languages::C), var_name, sep = if var_name.is_empty() { "" } else { " " }, ) @@ -693,13 +716,13 @@ const _: () = { macro_rules! impl_CTypes { fn csharp_define_self (definer: &'_ mut dyn $crate::headers::Definer) -> $crate::std::io::Result<()> { - T::csharp_define_self(definer) + T::define_self(&crate::headers::languages::CSharp, definer) } fn csharp_ty () -> rust::String { - format!("{} *", T::csharp_ty()) + format!("{} *", T::name(&crate::headers::languages::CSharp)) } } } type OPAQUE_KIND = OpaqueKind::Concrete; } @@ -830,7 +853,7 @@ const _: () = { }; unsafe - impl CType + impl LegacyCType for Bool { __cfg_headers__! { @@ -866,7 +889,14 @@ unsafe } __cfg_csharp__! { - fn csharp_marshaler () + fn csharp_define_self ( + _: &'_ mut dyn crate::headers::Definer, + ) -> io::Result<()> + { + Ok(()) + } + + fn legacy_csharp_marshaler () -> Option { Some("UnmanagedType.U1".into()) @@ -898,7 +928,7 @@ impl ::core::fmt::Debug for c_int { } unsafe - impl CType + impl LegacyCType for c_int { __cfg_headers__! { @@ -920,14 +950,28 @@ unsafe ) } + fn c_define_self ( + _: &'_ mut dyn crate::headers::Definer, + ) -> io::Result<()> + { + Ok(()) + } + __cfg_csharp__! { + fn csharp_define_self ( + _: &'_ mut dyn crate::headers::Definer, + ) -> io::Result<()> + { + Ok(()) + } + fn csharp_ty () -> rust::String { "int".into() } - fn csharp_marshaler () + fn legacy_csharp_marshaler () -> Option { Some("UnmanagedType.SysInt".into()) diff --git a/src/layout/macros.rs b/src/layout/macros.rs index 7f4ab3df1e..12bd167cc9 100644 --- a/src/layout/macros.rs +++ b/src/layout/macros.rs @@ -74,7 +74,7 @@ macro_rules! __with_doc__ {( struct $($rest)* )} -/// Safely implement [`CType`][`trait@crate::layout::CType`] +/// Safely implement [`CType`][`trait@crate::layout::LegacyCType`] /// for a `#[repr(C)]` struct **when all its fields are `CType`**. /// /// Note: you rarely need to call this macro directly. Instead, look for the @@ -234,7 +234,7 @@ macro_rules! CType {( } unsafe // Safety: struct is `#[repr(C)]` and contains `CType` fields - impl $(<$($lt ,)* $($($generics),+)?>)? $crate::layout::CType + impl $(<$($lt ,)* $($($generics),+)?>)? $crate::layout::LegacyCType for $StructName$(<$($lt ,)* $($($generics),+)?>)? where $( @@ -258,7 +258,7 @@ macro_rules! CType {( <$generics as $crate::layout::ReprC>::CLayout as $crate::layout::CType - >::c_short_name() + >::short_name() )?; )+ )?)? @@ -273,14 +273,14 @@ macro_rules! CType {( "C does not support zero-sized structs!", ); let ref me = - ::c_var("") + ::name(&$crate::headers::languages::C) .to_string() ; definer.define_once( me, &mut |definer| { $( - <$field_ty as $crate::layout::CType>::c_define_self(definer)?; + <$field_ty as $crate::layout::CType>::define_self(&$crate::headers::languages::C, definer)?; )* let out = definer.out(); $( @@ -295,7 +295,8 @@ macro_rules! CType {( $(#[$($field_meta)*])* ); $crate::core::writeln!(out, " {};\n", - <$field_ty as $crate::layout::CType>::c_var( + <$field_ty as $crate::layout::CType>::name_wrapping_var( + &$crate::headers::languages::C, $crate::core::stringify!($field_name), ), )?; @@ -322,7 +323,7 @@ macro_rules! CType {( { $crate::core::write!(fmt, "{}_t{sep}{}", - ::c_short_name(), + ::short_name(), var_name, sep = if var_name.is_empty() { "" } else { " " }, ) @@ -336,9 +337,9 @@ macro_rules! CType {( $crate::core::mem::size_of::(), 0, "C# does not support zero-sized structs!", ); - let ref me = ::csharp_ty(); + let ref me = ::name(&$crate::headers::languages::CSharp).to_string(); $( - <$field_ty as $crate::layout::CType>::csharp_define_self(definer)?; + <$field_ty as $crate::layout::CType>::define_self(&$crate::headers::languages::CSharp, definer)?; )* definer.define_once(me, &mut |definer| $crate::core::writeln!(definer.out(), $crate::core::concat!( @@ -362,7 +363,8 @@ macro_rules! CType {( if $crate::core::mem::size_of::<$field_ty>() > 0 { format!( " public {};\n", - <$field_ty as $crate::layout::CType>::csharp_var( + <$field_ty as $crate::layout::CType>::name_wrapping_var( + &$crate::headers::languages::CSharp, $crate::core::stringify!($field_name), ), ) @@ -422,7 +424,7 @@ macro_rules! CType {( | _ => $crate::std::panic!( "ill-formed enum variant ({:?}) for type `{}`", &self.0, - <$Enum_Layout as $crate::layout::CType>::c_short_name(), + <$Enum_Layout as $crate::layout::CType>::short_name(), ), }) } @@ -912,7 +914,7 @@ macro_rules! ReprC { } unsafe - impl $crate::layout::CType + impl $crate::layout::LegacyCType for [< $EnumName _Layout >] { $crate::__cfg_headers__! { fn c_short_name_fmt (fmt: &'_ mut $crate::core::fmt::Formatter<'_>) @@ -925,7 +927,7 @@ macro_rules! ReprC { -> $crate::std::io::Result<()> { let ref me = - ::c_var("") + ::name(&$crate::headers::languages::C) .to_string() ; definer.define_once( @@ -933,7 +935,7 @@ macro_rules! ReprC { &mut |definer| { let me_t = me; let ref me = - ::c_short_name() + ::short_name() .to_string() ; let out = definer.out(); @@ -988,7 +990,7 @@ macro_rules! ReprC { { $crate::core::write!(fmt, "{}_t{sep}{}", - ::c_short_name(), + ::short_name(), var_name, sep = if var_name.is_empty() { "" } else { " " }, ) @@ -998,7 +1000,7 @@ macro_rules! ReprC { fn csharp_define_self (definer: &'_ mut dyn $crate::headers::Definer) -> $crate::std::io::Result<()> { - let ref me = ::csharp_ty(); + let ref me = ::name(&$crate::headers::languages::CSharp).to_string(); definer.define_once(me, &mut |definer| $crate::core::writeln!(definer.out(), $crate::core::concat!( "public enum {me} {{\n", @@ -1135,7 +1137,7 @@ macro_rules! ReprC { } unsafe - impl $crate::layout::CType + impl $crate::layout::LegacyCType for [< $EnumName _Layout >] { $crate::__cfg_headers__! { fn c_short_name_fmt (fmt: &'_ mut $crate::core::fmt::Formatter<'_>) @@ -1148,7 +1150,7 @@ macro_rules! ReprC { -> $crate::std::io::Result<()> { let ref me = - ::c_var("") + ::name(&$crate::headers::languages::C) .to_string() ; definer.define_once( @@ -1156,10 +1158,10 @@ macro_rules! ReprC { &mut |definer| { let me_t = me; let ref me = - ::c_short_name() + ::short_name() .to_string() ; - <$crate::$Int as $crate::layout::CType>::c_define_self( + <$crate::$Int as $crate::layout::CType>::define_self(&$crate::headers::languages::C, definer, )?; let out = definer.out(); @@ -1212,8 +1214,9 @@ macro_rules! ReprC { )* me = me, me_t = me_t, - int = <$crate::$Int as $crate::layout::CType>::c_var(""), - int__me_t = <$crate::$Int as $crate::layout::CType>::c_var( + int = <$crate::$Int as $crate::layout::CType>::name(&$crate::headers::languages::C), + int__me_t = <$crate::$Int as $crate::layout::CType>::name_wrapping_var( + &$crate::headers::languages::C, me_t, ), ) @@ -1228,7 +1231,7 @@ macro_rules! ReprC { { $crate::core::write!(fmt, "{}_t{sep}{}", - ::c_short_name(), + ::short_name(), var_name, sep = if var_name.is_empty() { "" } else { " " }, ) @@ -1238,7 +1241,7 @@ macro_rules! ReprC { fn csharp_define_self (definer: &'_ mut dyn $crate::headers::Definer) -> $crate::std::io::Result<()> { - let ref me = ::csharp_ty(); + let ref me = ::name(&$crate::headers::languages::CSharp).to_string(); definer.define_once(me, &mut |definer| $crate::core::writeln!(definer.out(), $crate::core::concat!( "public enum {me} : {int} {{\n", @@ -1260,7 +1263,7 @@ macro_rules! ReprC { )? )* me = me, - int = <$crate::$Int as $crate::layout::CType>::csharp_ty(), + int = <$crate::$Int as $crate::layout::CType>::name(&$crate::headers::languages::CSharp), )) } } @@ -1423,7 +1426,7 @@ macro_rules! ReprC { unsafe impl $(<$($lt ,)* $($($generics),+)?>)? - $crate::layout::CType + $crate::layout::LegacyCType for __safer_ffi_Opaque__ $(<$($lt ,)* $($($generics),+)?>)? $( @@ -1449,7 +1452,7 @@ macro_rules! ReprC { -> $crate::std::io::Result<()> { let ref me = - ::c_var("") + ::name(&$crate::headers::languages::C) .to_string() ; definer.define_once(me, &mut |definer| { @@ -1460,7 +1463,7 @@ macro_rules! ReprC { ))); $crate::core::write!(definer.out(), "typedef struct {} {};\n\n", - ::c_short_name(), + ::short_name(), me, ) }) @@ -1473,7 +1476,7 @@ macro_rules! ReprC { { $crate::core::write!(fmt, "{}_t{sep}{}", - ::c_short_name(), + ::short_name(), var_name, sep = if var_name.is_empty() { "" } else { " " }, ) @@ -1483,7 +1486,7 @@ macro_rules! ReprC { fn csharp_define_self (definer: &'_ mut dyn $crate::headers::Definer) -> $crate::std::io::Result<()> { - let ref me = ::csharp_ty(); + let ref me = ::name(&$crate::headers::languages::CSharp).to_string(); definer.define_once(me, &mut |definer| { $crate::std::writeln!(definer.out(), concat!( @@ -1691,7 +1694,7 @@ mod test { } } - cfg_proc_macros! { doc_test! { derive_ReprC_supports_generics: + doc_test! { derive_ReprC_supports_generics: fn main () {} use ::safer_ffi::prelude::*; @@ -1715,7 +1718,7 @@ mod test { { inner: &'lifetime T, } - }} + } mod opaque { doc_test! { unused: diff --git a/src/layout/niche.rs b/src/layout/niche.rs index aa8462b9b4..00bbacfdc1 100644 --- a/src/layout/niche.rs +++ b/src/layout/niche.rs @@ -81,14 +81,14 @@ unsafe_impls! { cfg_alloc! { unsafe_impls! { // @for[T : ReprC] - // Box => |it| it.is_null(), + // repr_c::Box => |it| it.is_null(), @for[T : ReprC] c_slice::Box => |it| it.ptr.is_null(), @for[T : ReprC] - Vec => |it| it.ptr.is_null(), + repr_c::Vec => |it| it.ptr.is_null(), // str::Box => |it| it.ptr.is_null(), - // String => |it| it.ptr.is_null(), + // repr_c::String => |it| it.ptr.is_null(), // char_p::Box => |it| it.is_null(), } diff --git a/src/proc_macro/Cargo.toml b/src/proc_macro/Cargo.toml index b50bcef814..8a61be8b0a 100644 --- a/src/proc_macro/Cargo.toml +++ b/src/proc_macro/Cargo.toml @@ -17,6 +17,7 @@ quote.version = "1.0" # prettyplease.optional = true prettyplease.version = "0.1.7" +macro_rules_attribute = "0.1.0" [dependencies.syn] version = "1.0" @@ -30,9 +31,10 @@ features = [ async-fn = [] dyn-traits = [] headers = [] -node-js = [ +js = [ "async-fn", ] +node-js = ["js"] # legacy alias. verbose-expansions = [ # "prettyplease", ] diff --git a/src/proc_macro/_mod.rs b/src/proc_macro/_mod.rs index c4db65d4f3..5ca7b3d664 100644 --- a/src/proc_macro/_mod.rs +++ b/src/proc_macro/_mod.rs @@ -1,6 +1,7 @@ #![allow(clippy::all)] #![cfg_attr(rustfmt, rustfmt::skip)] #![allow(nonstandard_style, unused_imports)] +#![allow(warnings)] // #![feature(proc_macro_span)] use { ::core::{ @@ -35,6 +36,21 @@ use { }, }; +macro_rules! todo {( + $( $fmt:expr $(, $($rest:tt)* )? )? +) => ( + ::core::todo! { + concat!(file!(), ":", line!(), ":", column!(), " ({})"), + ::core::format_args!( + concat!($($fmt)?), + $($( $($rest)* )?)? + ), + } +)} + +#[macro_use] +extern crate macro_rules_attribute; + mod c_str; #[path = "derives/_mod.rs"] @@ -91,3 +107,65 @@ fn derive_CType ( { unwrap!(derives::derive_CType(attrs.into(), input.into())) } + +#[proc_macro_attribute] pub +fn derive_ReprC2 ( + attrs: TokenStream, + input: TokenStream, +) -> TokenStream +{ + unwrap!( + derives::repr_c::derive(attrs.into(), input.into()) + .map(utils::mb_file_expanded) + ) +} + +#[doc(hidden)] /** Not part of the public API */ #[proc_macro] pub +fn __respan ( + input: TokenStream, +) -> TokenStream +{ + use ::proc_macro::*; + use ::proc_macro2::TokenStream as TokenStream2; + let parser = |input: ParseStream<'_>| Result::Ok({ + let mut contents; + ({ + parenthesized!(contents in input); + let tts: TokenStream2 = contents.parse()?; + ::proc_macro::TokenStream::from(tts).into_iter().next().unwrap().span()//.source() + }, { + parenthesized!(contents in input); + contents.parse::()? + }) + }); + let (span, tts) = parse_macro_input!(input with parser); + fn respan ( + span: Span, + tts: TokenStream, + ) -> TokenStream + { + tts.into_iter().map(|mut tt| { + if let TokenTree::Group(ref mut g) = tt { + // let g_span = g.span(); + *g = Group::new( + g.delimiter(), + respan(span, g.stream()) + ); + g.set_span( + span // .located_at(g_span) + ); + // g.set_span(g.span().located_at(g_span)); + } else { + tt.set_span( + span//.located_at(tt.span()) + ); + } + tt + }).collect() + } + respan( + span,//.source(), + // ::core::iter::successors(Some(span), Span::parent).last().unwrap(), + tts.into(), + ) +} diff --git a/src/proc_macro/derives/_mod.rs b/src/proc_macro/derives/_mod.rs index 2cc5b27ae1..20b42fed7c 100644 --- a/src/proc_macro/derives/_mod.rs +++ b/src/proc_macro/derives/_mod.rs @@ -1,5 +1,12 @@ use super::*; +#[path = "c_type/_mod.rs"] +mod c_type; + +#[path = "repr_c/_mod.rs"] +pub(in crate) +mod repr_c; + #[cfg(feature = "dyn-traits")] #[path = "dyn_trait/_mod.rs"] mod dyn_trait; @@ -79,28 +86,33 @@ fn derive_ReprC ( if let Some(output) = dyn_trait::try_handle_trait(&mut attrs, &mut input)? { return Ok(utils::mb_file_expanded(output)); } - // | Err(mut err) => { - // // Prefix error messages with `derive_ReprC`. - // { - // let mut errors = - // err .into_iter() - // .map(|err| Error::new_spanned( - // err.to_compile_error(), - // format_args!("`#[safer_ffi::derive_ReprC]`: {}", err), - // )) - // ; - // err = errors.next().unwrap(); - // errors.for_each(|cur| err.combine(cur)); - // } - // input.extend(TokenStream::from(err.to_compile_error())); - // return input; - // }, - // | Ok(None) => {}, - // } if let Some(tt) = TokenStream2::from(attrs).into_iter().next() { return Err(Error::new_spanned(tt, "Unexpected parameter")); } - feed_to_macro_rules(input, parse_quote!(ReprC)) + return feed_to_macro_rules(input, parse_quote!(ReprC)); // .map(utils::mb_file_expanded); + repr_c::derive(attrs, input) + // // | Err(mut err) => { + // // // Prefix error messages with `derive_ReprC`. + // // { + // // let mut errors = + // // err .into_iter() + // // .map(|err| Error::new_spanned( + // // err.to_compile_error(), + // // format_args!("`#[safer_ffi::derive_ReprC]`: {}", err), + // // )) + // // ; + // // err = errors.next().unwrap(); + // // errors.for_each(|cur| err.combine(cur)); + // // } + // // input.extend(TokenStream::from(err.to_compile_error())); + // // return input; + // // }, + // // | Ok(None) => {}, + // // } + // if let Some(tt) = TokenStream2::from(attrs).into_iter().next() { + // return Err(Error::new_spanned(tt, "Unexpected parameter")); + // } + // feed_to_macro_rules(input, parse_quote!(ReprC)) } pub(in crate) @@ -109,8 +121,9 @@ fn derive_CType ( input: TokenStream2, ) -> Result { - if let Some(unexpected_tt) = attrs.into_iter().next() { - return Err(Error::new_spanned(unexpected_tt, "Unexpected parameter")); + if let Some(tt) = TokenStream2::from(attrs).into_iter().next() { + return Err(Error::new_spanned(tt, "Unexpected parameter")); } - feed_to_macro_rules(input, parse_quote!(CType)) + return feed_to_macro_rules(input, parse_quote!(CType)); + c_type::derive(attrs, input) } diff --git a/src/proc_macro/derives/c_type/_mod.rs b/src/proc_macro/derives/c_type/_mod.rs new file mode 100644 index 0000000000..360c4a522d --- /dev/null +++ b/src/proc_macro/derives/c_type/_mod.rs @@ -0,0 +1,49 @@ +use super::*; + +#[cfg(feature = "js")] +pub(in crate) +mod js; + +pub(in crate) +mod struct_; + +pub(in crate) +fn derive ( + attrs: TokenStream2, + input: TokenStream2 +) -> Result +{ + let _: parse::Nothing = parse2(attrs)?; + + let input: DeriveInput = parse2(input)?; + let DeriveInput { + ref attrs, + ref vis, + ref ident, + ref generics, + ref data, + } = input; + let mut ret = match data { + | Data::Struct(DataStruct { fields, .. }) => struct_::derive( + attrs, + vis, + ident, + generics, + fields, + ), + | Data::Enum(DataEnum { enum_token, .. }) => bail! { + "\ + an `enum` does not have a *fully safe* backing `CType`; \ + did you mean to implement `ReprC` instead?\ + " => enum_token + }, + | Data::Union(DataUnion { union_token, .. }) => bail! { + "`union`s are not supported yet" => union_token + }, + }?; + Ok(quote!( + #input + + #ret + )) +} diff --git a/src/proc_macro/derives/c_type/js.rs b/src/proc_macro/derives/c_type/js.rs new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/proc_macro/derives/c_type/struct_.rs b/src/proc_macro/derives/c_type/struct_.rs new file mode 100644 index 0000000000..b17c23069d --- /dev/null +++ b/src/proc_macro/derives/c_type/struct_.rs @@ -0,0 +1,260 @@ +use super::*; + +pub(in crate) +fn derive ( + attrs: &'_ [Attribute], + vis: &'_ Visibility, + StructName @ _: &'_ Ident, + generics: &'_ Generics, + fields: &'_ Fields, +) -> Result +{ + if matches!(fields, Fields::Unnamed { .. } | Fields::Unit { .. }) { + bail!("only braced structs are supported"); + } + + #[apply(let_quote!)] + use ::safer_ffi::{ + ඞ, + headers, + layout::{ + CLayoutOf, + CType as CType, + OpaqueKind, + ReprC, + }, + }; + + let mut ret = quote!(); + + let impl_body = quote!( + type OPAQUE_KIND = #OpaqueKind::Concrete; + ); + + #[cfg(feature = "headers")] + let impl_body = { + let EachGenericTy = + generics.type_params().map(|it| &it.ident) + ; + let ref EachFieldTy = + fields.iter().vmap(|Field { ty, .. }| ty) + ; + let ref each_field_name = + fields.iter().vmap(|f| f.ident.as_ref().unwrap()) + ; + let ref each_field_name_str = + each_field_name.iter().vmap(ToString::to_string) + ; + let ref StructName_str = StructName.to_string(); + + #[cfg(feature = "csharp")] + let impl_body = quote!( + fn csharp_define_self ( + definer: &'_ mut dyn #headers::Definer, + ) -> #io::Result<()> + { + use #io::Write as _; + #core::assert_ne!( + #mem::size_of::(), 0, + "C# does not support zero-sized structs!", + ); + let ref me = ::csharp_ty(); + #( + <#EachFieldTy as #CType>::csharp_define_self(definer)?; + )* + definer.define_once(me, &mut |definer| #writeln!(definer.out(), + #concat!( + "[StructLayout(LayoutKind.Sequential, Size = {size})]\n", + "public unsafe struct {me} {{\n", + #( + "{}{", #each_field_name_str, "}", + )* + "}}\n", + ), + #( + <#EachFieldTy as #CType>::csharp_marshaler() + .map(|m| #format!(" [MarshalAs({})]\n", m)) + .as_deref() + .unwrap_or("") + , + )* + size = #mem::size_of::(), + #( + #each_field_name = { + if #mem::size_of::<#EachFieldTy>() > 0 { + #format!( + " public {};\n", + <#EachFieldTy as #CType>::csharp_var( + #each_field_name_str, + ), + ) + } else { + #assert_eq!( + #mem::align_of::<#EachFieldTy>(), + 1, + "\ + Zero-sized fields must have an \ + alignment of `1`.\ + ", + ); + String::new() + } + }, + )* + me = me, + )) + } + ); + + let mut impl_body = impl_body; + impl_body.extend(quote!( + fn short_name () + -> #ඞ::String + { + let mut ret: #ඞ::String = StructName_str.into(); + #( + #ඞ::fmt::Write::write_fmt( + &mut ret, + #ඞ::format_args!( + "_{}", + <#CLayoutOf<#EachGenericTy> as #CType>::c_short_name(), + ), + ).unwrap(); + )* + ret + } + )); + + let each_field = + fields.try_vmap(|f| Result::Ok({ + let ref docs = utils::extract_docs(attrs)?; + let ref name = f.ident.as_ref().expect("BRACED STRUCT").to_string(); + let FieldTy = &f.ty; + let emit_unindented = quote!( + &|language, definer| #ඞ::io::Write::write_fmt( + definer.out(), + #ඞ::format_args!( + "{}", + <#FieldTy as #CType>::name_wrapping_var( + language, + #name, + ), + ), + ) + ); + quote!( + #ඞ::FunctionArg { + docs: &[#(#docs),*], + name: #name, + emit_unindented: #emit_unindented, + } + ) + }))? + ; + + let ref docs = utils::extract_docs(attrs)?; + impl_body.extend(quote!( + fn define_self ( + language: &'_ dyn #headers::HeaderLanguage, + definer: &'_ mut dyn #headers::Definer, + ) -> #ඞ::io::Result<()> + { + let ref me = + ::short_name() + .to_string() + ; + definer.define_once(me, &mut |definer| { + language.emit_struct( + definer, + me, + &[#(#docs),*], + #ඞ::mem::size_of::(), + &[#(#each_field),*], + ) + }) + + // #( + // < #EachFieldTy as #CType >::c_define_self(definer)?; + // )* + // // /* FIXME: handle docs */ + // // // let out = definer.out(); + // // // $( + // // // $crate::__output_docs__!(out, "", $($doc_meta)*); + // // // )? + // // // $crate::__output_docs__!(out, "", $(#[$($meta)*])*); + // // #core::writeln!(out, "typedef struct {{\n")?; + // #( + // if #ඞ::mem::size_of::< #EachFieldTy >() > 0 { + // // $crate::core::writeln!(out, "")?; + // /* FIXME: docs */ + // // $crate::__output_docs__!(out, " ", + // // $(#[$($field_meta)*])* + // // ); + // #ඞ::writeln!(out, + // " {};\n", + // < #EachFieldTy as #CType >::c_var( + // #each_field_name_str, + // ), + // )?; + // } else { + // #ඞ::assert_eq!( + // #ඞ::mem::align_of::< #EachFieldTy >(), + // 1, + // "\ + // Zero-sized fields must have an \ + // alignment of `1`.\ + // ", + // ); + // } + // )* + // #ඞ::writeln!(out, "}} {};\n", me) + // }) + } + )); + + impl_body + }; + + ret.extend({ + let (intro_generics, fwd_generics, where_clauses) = + generics.split_for_impl() + ; + + quote!( + impl #intro_generics + #CType + for + #StructName #fwd_generics + where + #where_clauses + { + #impl_body + } + + // If it is CType, it trivially is ReprC. + impl #intro_generics + #ReprC + for + #StructName #fwd_generics + where + #where_clauses + { + type CLayout = Self; + + #[inline] + fn is_valid ( + self: &'_ Self::CLayout, + ) -> #ඞ::bool + { + true + } + } + ) + }); + + #[cfg(feature = "js")] { + ret.extend(super::js::handle(/* … */)?); + } + + Ok(ret) +} diff --git a/src/proc_macro/derives/handle_fptr.rs b/src/proc_macro/derives/handle_fptr.rs index 64f55f0aa3..aa39803ab3 100644 --- a/src/proc_macro/derives/handle_fptr.rs +++ b/src/proc_macro/derives/handle_fptr.rs @@ -88,25 +88,32 @@ fn try_handle_fptr ( } /* == VALIDATION PASSED, TIME TO EXPAND == */ - quote_use! { - // Fully-qualified paths to be robust to an weird/antagonistic - // namespace (except for `::safer_ffi`; that's our path-resolution - // keystone. - use ::safer_ffi::layout::ReprC; - use ::safer_ffi::layout::CType; - use ::safer_ffi::layout::__HasNiche__; - use ::safer_ffi::headers::Definer; - use ::safer_ffi::layout::OpaqueKind::Concrete; - use ::safer_ffi::__cfg_headers__; - use ::safer_ffi::__cfg_csharp__; - use ::safer_ffi::bool; - use ::safer_ffi::str; - use ::safer_ffi::std; - use ::safer_ffi::core; - use ::safer_ffi::core::fmt; - use ::safer_ffi::core::write; - use ::safer_ffi::core::option::Option; - } + // Fully-qualified paths to be robust to an weird/antagonistic + // namespace (except for `::safer_ffi`; that's our path-resolution + // keystone. + #[apply(let_quote!)] + use ::safer_ffi::{ + layout::{ + CType, + CType, + LegacyCType, + OpaqueKind, + ReprC, + __HasNiche__, + }, + headers::Definer, + __cfg_headers__, + __cfg_csharp__, + ඞ::{ + bool, + core, + fmt, + Option, + std, + str, + write, + }, + }; let (intro, fwd, where_) = input.generics.split_for_impl(); let mut ret = quote!( @@ -211,7 +218,7 @@ fn try_handle_fptr ( // // for<#(#lifetimes),*> < #ty // <#ty_no_lt as #ReprC>::CLayout // : - // #CType + // #LegacyCType // ); // Iterator::chain( ::core::iter::once(is_ReprC) @@ -244,7 +251,7 @@ fn try_handle_fptr ( ).unwrap() }; // Add a PhantomData field to account for unused lifetime params. - // (given that we've had to strip them to become `CType`) + // (given that we've had to strip them to become `LegacyCType`) if generics.lifetimes().next().is_some() { // non-empty. let fields_mut = match input_Layout_data.fields { | Fields::Unnamed(FieldsUnnamed { @@ -328,7 +335,7 @@ fn try_handle_fptr ( unsafe impl #intro - #CType + #LegacyCType for #StructName_Layout #fwd #where_ @@ -338,16 +345,16 @@ fn try_handle_fptr ( { // fmt.write_str(stringify!(#StructName)) // ret_arg1_arg2_fptr - <#RetCType as #CType>::c_short_name_fmt(fmt)?; #( - #write!(fmt, "_{}", <#EachArgCType as #CType>::c_short_name())?; )* + fmt.write_str(&<#RetCType as #CType>::short_name())?; #( + #write!(fmt, "_{}", <#EachArgCType as #CType>::short_name())?; )* fmt.write_str("_fptr") } fn c_define_self (definer: &'_ mut dyn #Definer) -> #std::io::Result<()> { - <#RetCType as #CType>::c_define_self(definer)?; #( - <#EachArgCType as #CType>::c_define_self(definer)?; )* + <#RetCType as #CType>::define_self(&::safer_ffi::headers::languages::C, definer)?; #( + <#EachArgCType as #CType>::define_self(&::safer_ffi::headers::languages::C, definer)?; )* Ok(()) } @@ -356,13 +363,13 @@ fn try_handle_fptr ( var_name: &'_ #str, ) -> #fmt::Result { - #write!(fmt, "{} ", <#RetCType as #CType>::c_var(""))?; + #write!(fmt, "{} ", <#RetCType as #CType>::name_wrapping_var(&::safer_ffi::headers::languages::C, ""))?; #write!(fmt, "(*{})(", var_name)?; let _empty = true; #( #write!(fmt, "{comma}{arg}", - arg = <#EachArgCType as #CType>::c_var(""), + arg = <#EachArgCType as #CType>::name_wrapping_var(&::safer_ffi::headers::languages::C, ""), comma = if _empty { "" } else { ", " }, )?; let _empty = false; @@ -377,9 +384,9 @@ fn try_handle_fptr ( fn csharp_define_self (definer: &'_ mut dyn #Definer) -> #std::io::Result<()> { - <#RetCType as #CType>::csharp_define_self(definer)?; #( - <#EachArgCType as #CType>::csharp_define_self(definer)?; )* - let ref me = Self::csharp_ty(); + <#RetCType as #CType>::define_self(&::safer_ffi::headers::languages::CSharp, definer)?; #( + <#EachArgCType as #CType>::define_self(&::safer_ffi::headers::languages::CSharp, definer)?; )* + let ref me = ::name(&::safer_ffi::headers::languages::CSharp).to_string(); let ref mut _forge_arg_name = { let mut iter = (0 ..).map(|c| #std::format!("_{}", c)); move || iter.next().unwrap() @@ -407,7 +414,7 @@ fn try_handle_fptr ( .as_deref() .unwrap_or("") , - <#EachArgCType as #CType>::csharp_var(&_forge_arg_name()), + <#EachArgCType as #CType>::name_wrapping_var(&::safer_ffi::headers::languages::CSharp, &_forge_arg_name()), )* me = me, ret_marshaler = @@ -416,7 +423,7 @@ fn try_handle_fptr ( .as_deref() .unwrap_or("") , - Ret = <#RetCType as #CType>::csharp_ty(), + Ret = <#RetCType as #CType>::name(&::safer_ffi::headers::languages::CSharp), )) } @@ -426,7 +433,7 @@ fn try_handle_fptr ( Self::c_short_name().to_string() } - fn csharp_marshaler () + fn legacy_csharp_marshaler () -> #Option<#std::string::String> { // This assumes the calling convention from the above @@ -434,7 +441,7 @@ fn try_handle_fptr ( #Option::Some("UnmanagedType.FunctionPtr".into()) } } - } type OPAQUE_KIND = #Concrete; } + } type OPAQUE_KIND = #OpaqueKind::Concrete; } unsafe impl #intro @@ -523,7 +530,7 @@ const _: () = { /// Pretty self-explanatory: since we can't do ` Ty as Tr>::Assoc` /// (technically the result value could depend on `'lt`, but not in our case, -/// since `CType` is `'static`) +/// since `LegacyCType` is `'static`) struct StripLifetimeParams; impl VisitMut for StripLifetimeParams { diff --git a/src/proc_macro/derives/repr_c/_mod.rs b/src/proc_macro/derives/repr_c/_mod.rs new file mode 100644 index 0000000000..f6d38c3503 --- /dev/null +++ b/src/proc_macro/derives/repr_c/_mod.rs @@ -0,0 +1,53 @@ +use super::*; + +pub(in crate) +mod enum_; + +#[cfg(feature = "js")] +pub(in crate) +mod js; + +pub(in crate) +mod struct_; + +pub(in crate) +fn derive ( + attrs: TokenStream2, + input: TokenStream2 +) -> Result +{ + let _: parse::Nothing = parse2(attrs)?; + + let mut input: DeriveInput = parse2(input)?; + let DeriveInput { + ref mut attrs, + ref vis, + ref ident, + ref generics, + ref data, + } = input; + let mut ret = match *data { + | Data::Struct(DataStruct { ref fields, .. }) => struct_::derive( + attrs, + vis, + ident, + generics, + fields, + ), + | Data::Enum(DataEnum { ref variants, .. }) => enum_::derive( + attrs, + vis, + ident, + generics, + variants, + ), + | Data::Union(DataUnion { ref union_token, .. }) => bail! { + "`union`s are not supported yet" => union_token + }, + }?; + Ok(quote!( + #input + + #ret + )) +} diff --git a/src/proc_macro/derives/repr_c/enum_.rs b/src/proc_macro/derives/repr_c/enum_.rs new file mode 100644 index 0000000000..9058887e14 --- /dev/null +++ b/src/proc_macro/derives/repr_c/enum_.rs @@ -0,0 +1,341 @@ +use super::*; + +pub(in crate) +fn derive ( + attrs: &'_ mut Vec, + pub_: &'_ Visibility, + EnumName @ _: &'_ Ident, + generics: &'_ Generics, + variants: &'_ Punctuated, +) -> Result +{ + let mut ret = quote!(); + + if let Some(payload) = + variants + .iter() + .find(|Variant { fields, .. }| matches!( + fields, + Fields::Unit, + ).not()) + { + bail! { + "Non field-less `enum`s are not supported yet." => payload, + } + } + + let (Int @ _, repr) = parse_discriminant_type(attrs, &mut ret)?; + + let EnumName_Layout @ _ = format_ident!("{}_Layout", EnumName); + + #[apply(let_quote!)] + use ::safer_ffi::{ + ඞ, + ඞ::{ + mem, + }, + layout::{ + __HasNiche__, + CLayoutOf, + CType as CType, + OpaqueKind, + ReprC, + }, + }; + + ret.extend(quote!( + #[allow(nonstandard_style)] + #[repr(transparent)] + #[#ඞ::derive( + #ඞ::Clone, #ඞ::Copy, + // #ඞ::PartialEq, #ඞ::Eq, + )] + #pub_ + struct #EnumName_Layout { + #pub_ + discriminant: #Int, + } + + impl + #ඞ::From<#Int> + for + #EnumName_Layout + { + #[inline] + fn from (discriminant: #Int) + -> Self + { + Self { discriminant } + } + } + )); + + let impl_body = quote!( + type OPAQUE_KIND = #OpaqueKind::Concrete; + ); + + let ref each_doc = utils::extract_docs(attrs)?; + + #[cfg(feature = "headers")] + let impl_body = { + #[apply(let_quote!)] + use ::safer_ffi::{ + ඞ::fmt, + headers::{ + Definer, + languages::{ + HeaderLanguage, + EnumVariant, + }, + }, + }; + + let mut impl_body = impl_body; + + let ref EnumName_str = EnumName.to_string(); + let enum_size = repr.to_enum_size(); + let each_enum_variant = + variants.iter().map(|v| { + let ref VariantName_str = v.ident.to_string(); + let discriminant = if let Some((_eq, disc)) = &v.discriminant { + quote!( + #ඞ::Some(&(#disc, ).0 as _) + ) + } else { + quote!( + #ඞ::None + ) + }; + quote!( + #EnumVariant { + docs: &[], // FIXME TODO + name: #VariantName_str, + discriminant: #discriminant, + } + ) + }) + ; + + let ref EnumName_t_str = format!("{EnumName}_t"); + impl_body.extend(quote!( + fn short_name () + -> #ඞ::String + { + #EnumName_str.into() + } + + fn define_self ( + language: &'_ dyn #HeaderLanguage, + definer: &'_ mut dyn #Definer, + ) -> #ඞ::io::Result<()> + { + definer.define_once( + #EnumName_t_str, + &mut |definer| { + <#Int as #CType>::define_self(language, definer)?; + language.emit_simple_enum( + definer, + &[#(#each_doc),*], + #EnumName_str, + #enum_size, + &[#(#each_enum_variant),*], + ) + }, + ) + } + )); + + impl_body + }; + + ret.extend(quote!( + unsafe + impl + #CType + for + #EnumName_Layout + { + #impl_body + } + )); + + ret.extend({ + let ref EachVariant @ _ = variants.iter().vmap(|it| &it.ident); + quote!( + unsafe + impl #ReprC for #EnumName { + type CLayout = #EnumName_Layout; + + #[inline] + fn is_valid ( + &#EnumName_Layout { discriminant }: &'_ Self::CLayout, + ) -> #ඞ::bool + { + #![allow(nonstandard_style)] + #( + const #EachVariant: #Int = #EnumName::#EachVariant as _; + )* + #ඞ::matches!(discriminant, #( #EachVariant )|*) + } + } + ) + }); + + ret.extend(quote!( + unsafe + impl #__HasNiche__ + for + #EnumName + { + #[inline] + fn is_niche ( + &#EnumName_Layout { discriminant }: &'_ #CLayoutOf, + ) -> #ඞ::bool + { + /// Safety: this is either well-defined, or fails to compile. + const DISCRIMINANT_OF_NONE: #Int = unsafe { + #ඞ::mem::transmute::<_, #Int>( + #ඞ::None::<#EnumName> + ) + }; + + #ඞ::matches!(discriminant, DISCRIMINANT_OF_NONE) + } + } + )); + + Ok(ret) +} + +fn parse_discriminant_type ( + attrs: &'_ [Attribute], + out_warnings: &mut TokenStream2, +) -> Result<(TokenStream2, Repr)> +{ + let repr_attr = + attrs + .iter() + .find(|attr| attr.path.is_ident("repr")) + .ok_or(()) + .or_else(|()| bail!("missing `#[repr(…)]` annotation"))? + ; + let ref reprs = repr_attr.parse_args_with( + Punctuated::::parse_terminated, + )?; + if reprs.is_empty() { + bail!("expected an integral `repr` specifier" => repr_attr); + } + let parsed_reprs = reprs.iter().try_vmap(Repr::try_from)?; + let (c_type, repr) = + match + ::core::iter::zip(parsed_reprs, reprs) + .find(|(parsed, ident)| matches!(parsed, Repr::C).not()) + { + | Some((repr, ident)) => { + ( + quote!( + ::safer_ffi::ඞ::#ident + ), + repr, + ) + }, + | None if reprs.iter().any(|repr| repr == "C") => { + out_warnings.extend(utils::compile_warning( + &repr_attr, + "\ + `#[repr(C)]` enums are not well-defined in C; \ + it is thus ill-advised to use them \ + in a multi-compiler scenario such as FFI\ + ", + )); + ( + quote!( + ::safer_ffi::c_int + ), + Repr::C, + ) + }, + | None => bail! { + "expected an integral `repr` annotation" + }, + } + ; + + Ok((c_type, repr)) +} + +match_! {( + C, + u8, u16, u32, u64, u128, + i8, i16, i32, i64, i128, +) {( + $($repr:ident),* $(,)? +) => ( + enum Repr { + $($repr),* + } + + impl Repr { + fn try_from (ident: &'_ Ident) + -> Result + { + match &ident.to_string()[..] { + $( + | stringify!($repr) => Ok(Self::$repr), + )* + | _ => bail! { + "unsupported `repr` annotation" => ident, + }, + } + } + + fn to_enum_size (&self) + -> Quote![Option<(bool, u8)>] + { + use { + ::{ + core::primitive as builtin, + }, + self::{ + Repr::*, + }, + }; + let mb_signed_bitwidth: Option<(bool, builtin::u8)> = match *self { + | C => None, + | u8 | u16 | u32 | u64 | u128 => Some(( + false, + match *self { + | u8 => 8, + | u16 => 16, + | u32 => 32, + | u64 => 64, + | u128 => 128, + | _ => unreachable!(), + }, + )), + | i8 | i16 | i32 | i64 | i128 => Some(( + true, + match *self { + | i8 => 8, + | i16 => 16, + | i32 => 32, + | i64 => 64, + | i128 => 128, + | _ => unreachable!(), + }, + )), + }; + let ret: Quote![Option<(bool, builtin::u8)>] = { + match mb_signed_bitwidth { + | None => quote!( + ::safer_ffi::ඞ::None + ), + | Some((signed, bitwidth)) => quote!( + ::safer_ffi::ඞ::Some((#signed, #bitwidth)) + ), + } + }; + ret + } + } +)}} diff --git a/src/proc_macro/derives/repr_c/js.rs b/src/proc_macro/derives/repr_c/js.rs new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/proc_macro/derives/repr_c/struct_.rs b/src/proc_macro/derives/repr_c/struct_.rs new file mode 100644 index 0000000000..f83b88097f --- /dev/null +++ b/src/proc_macro/derives/repr_c/struct_.rs @@ -0,0 +1,136 @@ +use super::*; + +pub(in crate) +fn derive ( + attrs: &'_ mut Vec, + vis: &'_ Visibility, + StructName @ _: &'_ Ident, + generics: &'_ Generics, + fields: &'_ Fields, +) -> Result +{ + /* FIXME: should we deny zero-sized types?? */ + + mod kw { ::syn::custom_keyword!(transparent); } + if attrs.iter().any(|attr| { + attr.path.is_ident("repr") + && + attr.parse_args::().is_ok() + }) + { + return derive_transparent( + attrs, + vis, + StructName, + generics, + fields, + ); + } + + // Add docs about C layout. + attrs.extend_::([ + parse_quote!( + /// # C Layout + ), + parse_quote!( + /// + ), + { + let line = format!("{} - [`{StructName}`_Layout](#impl-ReprC)", " "); + parse_quote!(#[doc = #line]) + }, + ]); + + let mut ret = quote!(); + + #[apply(let_quote!)] + use ::safer_ffi::{ + ඞ, + layout::{ + ConcreteReprC, + CLayoutOf, + ReprC, + }, + }; + + let EachFieldTy @ _ = || fields.iter().map(|Field { ty, .. }| ty); + let each_field_name = || (0..).zip(fields).map(|(i, f)| match f.ident { + | Some(ref ident) => ident.to_token_stream(), + | None => Index { index: i, span: f.ty.span() }.into_token_stream(), + }); + + let ref StructName_Layout @ _ = format_ident!("{}_Layout", StructName); + + let ref ctype_generics = utils::ctype_generics(generics, &mut EachFieldTy()); + + // define the CType + ret.extend(crate::derives::c_type::struct_::derive( + &[], + &dbg_parse_quote!(pub), + StructName_Layout, + ctype_generics, + &Fields::Named({ + let EachFieldTy = EachFieldTy(); + let each_field_name = (0_u8..).zip(fields).map(|(i, f)| match f.ident { + | Some(ref ident) => ident.clone(), + | None => format_ident!("_{}", i), + }); + dbg_parse_quote!({ + #( + pub + #each_field_name: #CLayoutOf<#EachFieldTy> + ),* + }) + }), + )?); + + // Impl ReprC to point to the just defined type + ret.extend({ + let EachFieldTy @ _ = EachFieldTy(); + let each_field_name = each_field_name(); + let (intro_generics, fwd_generics, where_clauses) = + ctype_generics.split_for_impl() + ; + quote!( + #[allow(trivial_bounds)] + unsafe + impl #intro_generics + #ReprC + for + #StructName #fwd_generics + where + #where_clauses + { + type CLayout = #StructName_Layout #fwd_generics; + + #[inline] + fn is_valid (it: &'_ Self::CLayout) + -> #ඞ::bool + { + let _: it; + true #(&& ( + #ඞ::mem::size_of::<#EachFieldTy>() == 0 + || + <#EachFieldTy as #ReprC>::is_valid( + &it.#each_field_name + ) + ))* + } + } + ) + }); + + Ok(ret) +} + +pub(in crate) +fn derive_transparent ( + attrs: &'_ mut Vec, + vis: &'_ Visibility, + StructName @ _: &'_ Ident, + generics: &'_ Generics, + fields: &'_ Fields, +) -> Result +{ + todo!("transparent struct"); +} diff --git a/src/proc_macro/ffi_export/_mod.rs b/src/proc_macro/ffi_export/_mod.rs index 96944c4c2c..6f372febed 100644 --- a/src/proc_macro/ffi_export/_mod.rs +++ b/src/proc_macro/ffi_export/_mod.rs @@ -1,5 +1,7 @@ use super::*; +macro_rules! emit {( $($tt:tt)* ) => ( $($tt)* )} + pub(in super) fn ffi_export ( attrs: TokenStream2, @@ -8,16 +10,16 @@ fn ffi_export ( { use ::proc_macro2::*; - if let Ok(input) = parse::(input.clone()) { - parse_macro_input!(attrs as parse::Nothing); - return ::quote::quote!( + if let Ok(input) = parse2::(input.clone()) { + let _: parse::Nothing = parse2(attrs)?; + return Ok(::quote::quote!( ::safer_ffi::__ffi_export__! { #input } - ).into(); + )); } - #[cfg(feature = "async_fn")] emit! { + #[cfg(feature = "async-fn")] emit! { let fun: ItemFn = parse2(input.clone())?; match parse2::(attrs.clone()) { | Ok(attrs) diff --git a/src/proc_macro/utils/_mod.rs b/src/proc_macro/utils/_mod.rs index 59c7f44ce0..46fb0e81a5 100644 --- a/src/proc_macro/utils/_mod.rs +++ b/src/proc_macro/utils/_mod.rs @@ -12,6 +12,9 @@ mod macros; pub(in crate) use mb_file_expanded::*; mod mb_file_expanded; +pub(in crate) use trait_impl_shenanigans::*; +mod trait_impl_shenanigans; + pub(in crate) trait MySplit { type Ret; @@ -131,8 +134,6 @@ fn pretty_print_tokenstream ( } } -// macro_rules! emit {( $($tt:tt)* ) => ( $($tt)* )} - pub(in crate) struct RemapNonStaticLifetimesTo<'__> { pub(in crate) @@ -181,23 +182,49 @@ impl ::syn::visit_mut::VisitMut } } -macro_rules! dbg_parse_quote {( - $($code:tt)* -) => ( - (|| { - fn type_of_some (_: Option) - -> &'static str - { - ::core::any::type_name::() - } +pub(in crate) +fn compile_warning ( + span: &dyn ToTokens, + message: &str, +) -> TokenStream2 +{ + let mut spans = span.to_token_stream().into_iter().map(|tt| tt.span()); + let fst = spans.next().unwrap_or_else(|| Span::call_site()); + let lst = spans.fold(fst, |cur, _| cur); + let safer_ffi_ = Ident::new("safer_ffi_", fst); + let warning = Ident::new("warning", fst); + let ref message = ["\n", message].concat(); + quote!( + const _: () = { + mod safer_ffi_ { + #[deprecated(note = #message)] + pub fn warning() {} + } + let _ = #safer_ffi_::#warning; + }; + ) +} - let target_ty = None; if false { return target_ty.unwrap(); } - eprintln!( - "[{}:{}:{}:parse_quote!]\n - ty: `{ty}`\n - code: `{code}`", - file!(), line!(), column!(), - code = ::quote::quote!( $($code)* ), - ty = type_of_some(target_ty), - ); - ::syn::parse_quote!( $($code)* ) - })() -)} pub(in crate) use dbg_parse_quote; +pub(in crate) +fn extract_docs ( + attrs: &'_ [Attribute] +) -> Result> +{ + attrs.iter().filter_map(|attr| { + attr.path + .is_ident("doc") + .then(|| Parser::parse2( + |input: ParseStream<'_>| Result::Ok( + if input.parse::>()?.is_some() { + Some(input.parse::()?) + } else { + None + } + ), + attr.tokens.clone(), + ) + .transpose()) + .flatten() + }) + .collect() +} diff --git a/src/proc_macro/utils/extension_traits.rs b/src/proc_macro/utils/extension_traits.rs index b8cd7ef427..2974eb0a73 100644 --- a/src/proc_macro/utils/extension_traits.rs +++ b/src/proc_macro/utils/extension_traits.rs @@ -31,3 +31,39 @@ impl VMap for I where Self : Sized + IntoIterator, {} + +pub(in crate) +trait Extend_ { + fn extend_ ( + &mut self, + iterable: I, + ) + where + Self : Extend, + I : IntoIterator, + { + impl Extend_ for T {} + self.extend(iterable) + } + + fn extend_one_ ( + &mut self, + item: A, + ) + where + Self : Extend, + { + self.extend([item]) + } +} + +pub +trait Also : Sized { + fn also (mut self, tweak: impl FnOnce(&mut Self)) + -> Self + { + impl Also for T {} + tweak(&mut self); + self + } +} diff --git a/src/proc_macro/utils/macros.rs b/src/proc_macro/utils/macros.rs index 41068aa432..b2c14b7392 100644 --- a/src/proc_macro/utils/macros.rs +++ b/src/proc_macro/utils/macros.rs @@ -57,3 +57,135 @@ macro_rules! function_name {() => ({ } name })} pub(in crate) use function_name; + +macro_rules! let_quote {( + use $($contents:tt)* +) => ( + __let_quote! { + [ + [] + [] + ] + $($contents)* + } +)} pub(in crate) use let_quote; + +macro_rules! __let_quote { + ( + [ + $fst:tt + $snd:tt + $($deeper:tt)* + ] + { + $($inner:tt)* + } $(, + $($rest:tt)* + )? $(;)? + ) => ( + __let_quote! { + [ + $fst // duplicate fst + $fst + $snd + $($deeper)* + ] + $($inner)* + } + __let_quote! { + [ + $snd // replace fst with duplicate of snd + $snd + $($deeper)* + ] + $($($rest)*)? + } + ); + + ( + [ + [$($path:tt)*] // fst + $snd:tt + $($deeper:tt)* + ] + $last_segment:ident $(as $rename:ident)? $(, + $($rest:tt)* )? $(;)? + ) => ( + let quoted = ::quote::quote!( + $($path)* $last_segment + ); + #[allow(nonstandard_style)] + #[cfg(all( + $($rename = "__if_provided", + any(), + )? + ))] + let $last_segment @ _ = quoted; + $( + #[allow(nonstandard_style)] + let $rename @ _ = quoted; + )? + __let_quote! { + [ + $snd // replace fst with duplicate of snd + $snd + $($deeper)* + ] + $($($rest)*)? + } + ); + + ( + [ + [$($path:tt)*] + $($deeper:tt)* + ] + $mid_segment:tt + $($rest:tt)* + ) => ( + __let_quote! { + [ + [$($path)* $mid_segment] + $($deeper)* + ] + $($rest)* + } + ); + + ( + $path:tt + /* nothing left */ + ) => (); +} pub(in crate) use __let_quote; + +macro_rules! match_ {( + ( $($input:tt)* ) $rules:tt +) => ( + macro_rules! __recurse__ $rules + __recurse__! { $($input)* } +)} pub(in crate) use match_; + +macro_rules! dbg_parse_quote {( + $($code:tt)* +) => ( + (|| { + fn type_of_some (_: Option) + -> &'static str + { + ::core::any::type_name::() + } + + let target_ty = None; if false { return target_ty.unwrap(); } + let code = ::quote::quote!( $($code)* ); + eprintln!( + "[{}:{}:{}:parse_quote!]\n - ty: `{ty}`\n - code: `{code}`", + file!(), line!(), column!(), + ty = type_of_some(target_ty), + ); + ::syn::parse2(code).unwrap() + })() +)} pub(in crate) use dbg_parse_quote; + +macro_rules! Quote {( $T:ty $(,)? ) => ( + ::proc_macro2::TokenStream +)} pub(in crate) use Quote; diff --git a/src/proc_macro/utils/mb_file_expanded.rs b/src/proc_macro/utils/mb_file_expanded.rs index 428e4278be..f376e7a36b 100644 --- a/src/proc_macro/utils/mb_file_expanded.rs +++ b/src/proc_macro/utils/mb_file_expanded.rs @@ -10,43 +10,50 @@ fn mb_file_expanded (output: TokenStream2) | None => return output, } ; - let hopefully_unique = { - use ::std::hash::*; - let ref mut hasher = - ::std::collections::hash_map::RandomState::new() - .build_hasher() + let hopefully_unique = { + use ::std::hash::*; + let ref mut hasher = + ::std::collections::hash_map::RandomState::new() + .build_hasher() + ; + hasher.finish() + }; + + debug_macros_dir.push("safer-ffi-debugged-proc-macros"); + ::std::fs::create_dir_all(&debug_macros_dir) + .unwrap_or_else(|err| panic!( + "`DEBUG_MACROS_LOCATION`-error: failed to create {}: {}", + debug_macros_dir.display(), err, + )) + ; + let ref file_name = { + debug_macros_dir.push(format!("{:016x}.rs", hopefully_unique)); + debug_macros_dir + .into_os_string() + .into_string() + .expect("`DEBUG_MACROS_LOCATION`-error: \ + non-UTF-8 paths are not supported\ + ") + }; + ::std::fs::write( + file_name, + ::prettyplease::unparse(&parse_quote!(#output)), + ) + .unwrap_or_else(|err| panic!( + "`DEBUG_MACROS_LOCATION`-error: failed to write to `{}`: {}", + file_name, err + )) ; - hasher.finish() - }; + let warning = + compile_warning("e!(), &format!( + "Output emitted to {file_name}", + )) + ; + quote!( + #warning - debug_macros_dir.push("safer-ffi-debugged-proc-macros"); - ::std::fs::create_dir_all(&debug_macros_dir) - .unwrap_or_else(|err| panic!( - "`DEBUG_MACROS_LOCATION`-error: failed to create {}: {}", - debug_macros_dir.display(), err, - )) - ; - let ref file_name = { - debug_macros_dir.push(format!("{:016x}.rs", hopefully_unique)); - debug_macros_dir - .into_os_string() - .into_string() - .expect("`DEBUG_MACROS_LOCATION`-error: \ - non-UTF-8 paths are not supported\ - ") - }; - ::std::fs::write( - file_name, - ::prettyplease::unparse(&parse_quote!(#output)), - ) - .unwrap_or_else(|err| panic!( - "`DEBUG_MACROS_LOCATION`-error: failed to write to `{}`: {}", - file_name, err - )) - ; - quote!( - ::core::include! { - #file_name - } - ) + ::core::include! { + #file_name + } + ) } diff --git a/src/proc_macro/utils/trait_impl_shenanigans.rs b/src/proc_macro/utils/trait_impl_shenanigans.rs new file mode 100644 index 0000000000..832c99668b --- /dev/null +++ b/src/proc_macro/utils/trait_impl_shenanigans.rs @@ -0,0 +1,60 @@ +use crate::*; + +pub(in crate) +fn allowing_trivial_bound ( + mut where_predicate: WherePredicate +) -> WherePredicate +{ + if let WherePredicate::Type(PredicateType { + ref mut lifetimes, + ref mut bounded_ty, + .. + }) = where_predicate + { + lifetimes + .get_or_insert_with(|| parse_quote!(for<>)) + .lifetimes + .extend_one_::(parse_quote!('__trivial_bound_hack)) + ; + *bounded_ty = parse_quote!( + ::safer_ffi::__::Identity<'__trivial_bound_hack, #bounded_ty> + ); + } else { + panic!("Invalid `where_predicate` arg"); + } + where_predicate +} + +pub(in crate) +fn ctype_generics ( + generics: &'_ Generics, + EachFieldTy @ _: &mut dyn Iterator, +) -> Generics +{ + #[apply(let_quote!)] + use ::safer_ffi::{ + layout::{ + ConcreteReprC, + ReprC, + }, + }; + generics.clone().also(|it| { + it + .make_where_clause() + .predicates + .extend_::(Iterator::chain( + generics + .type_params() + .map(|TypeParam { ident: T, .. }| parse_quote!( + #T : #ReprC + )) + , + EachFieldTy + .map(|FieldTy @_ | parse_quote!( + #FieldTy : #ConcreteReprC + )) + // .map(utils::allowing_trivial_bound) + , + )) + }) +} diff --git a/src/string/_mod.rs b/src/string/_mod.rs index 15c06c785a..5b3057ebd9 100644 --- a/src/string/_mod.rs +++ b/src/string/_mod.rs @@ -3,8 +3,9 @@ //! compatible (_fat_ pointers). use_prelude!(); +use repr_c::Vec; -pub use self::slice::*; +pub use slice::*; mod slice; cfg_alloc! { diff --git a/src/tuple.rs b/src/tuple.rs index 4ec17da7ad..d7ee1709a8 100644 --- a/src/tuple.rs +++ b/src/tuple.rs @@ -18,7 +18,7 @@ mod void { pub(in crate) use void::CVoid; unsafe -impl CType +impl LegacyCType for CVoid { __cfg_headers__! { fn c_short_name_fmt (fmt: &'_ mut fmt::Formatter<'_>) @@ -39,7 +39,21 @@ impl CType ) } + fn c_define_self ( + _: &'_ mut dyn crate::headers::Definer, + ) -> io::Result<()> + { + Ok(()) + } + __cfg_csharp__! { + fn csharp_define_self ( + _: &'_ mut dyn crate::headers::Definer, + ) -> io::Result<()> + { + Ok(()) + } + fn csharp_ty () -> rust::String { diff --git a/src/utils/_mod.rs b/src/utils/_mod.rs index b32b445ec3..a93a3ab211 100644 --- a/src/utils/_mod.rs +++ b/src/utils/_mod.rs @@ -1,5 +1,4 @@ #![cfg_attr(rustfmt, rustfmt::skip)] -#![cfg_attr(rustfmt, rustfmt::skip)] #[macro_use] mod macros; @@ -18,40 +17,35 @@ fn transmute_unchecked (ref it: T) use ::core::ops::{Not as _}; assert!( ::core::mem::size_of::() == ::core::mem::size_of::(), - concat!( - "Error, size mismatch.", - " This is a soundness bug, please report an issue ASAP", - ) + "Error, size mismatch. \ + This is a soundness bug, please report an issue ASAP", ); assert!( ::core::mem::needs_drop::().not(), - concat!( - "Error, input has drop glue.", - " This is a soundness bug, please report an issue ASAP", - ), + "Error, input has drop glue. \ + This is a soundness bug, please report an issue ASAP", ); ::core::mem::transmute_copy(it) } #[allow(warnings)] pub -struct screaming_case<'__>( +struct screaming_case<'__> ( pub &'__ str, pub &'__ str, ); const _: () = { - use ::core::fmt::{self, Display, Write}; + use ::core::{fmt::{self, Display, Write}, ops::Not}; impl Display for screaming_case<'_> { fn fmt (self: &'_ Self, fmt: &'_ mut fmt::Formatter<'_>) - -> fmt::Result + -> fmt::Result { - let mut not_first = false; - [self.0, self.1].iter().copied().flat_map(|s| s.chars()).try_for_each(|c| { - if true - && ::core::mem::replace(&mut not_first, true) - && c.is_ascii_uppercase() + let mut first = true; + [self.0, self.1].iter().flat_map(|&s| s.chars()).try_for_each(|c| { + if ::core::mem::take(&mut first).not() + && c.is_ascii_uppercase() { fmt.write_char('_')?; } diff --git a/src/utils/macros.rs b/src/utils/macros.rs index a76e2118fb..14c5410a5b 100644 --- a/src/utils/macros.rs +++ b/src/utils/macros.rs @@ -6,76 +6,60 @@ macro_rules! use_prelude { () => ( use crate::utils::prelude::*; )} -#[macro_use] -mod cfg_alloc { - #[cfg( - feature = "alloc", - )] - macro_rules! cfg_alloc {( - $($item:item)* - ) => ( - $( - #[cfg_attr(all(docs, feature = "nightly"), doc(cfg(feature = "alloc")))] - $item - )* - )} - - #[cfg(not( - feature = "alloc", - ))] - macro_rules! cfg_alloc {( - $($item:item)* +/// I really don't get the complexity of `cfg_if!`… +macro_rules! cfg_match { + ( _ => { $($expansion:tt)* } $(,)? ) => ( $($expansion)* ); + ( + $cfg:meta => $expansion:tt $(, + $($rest:tt)* )? ) => ( - // Nothing - )} + #[cfg($cfg)] + cfg_match! { _ => $expansion } $( + #[cfg(not($cfg))] + cfg_match! { $($rest)* } )? + ); + // Bonus: expression-friendly syntax: `cfg_match!({ … })` + ({ $($input:tt)* }) => ({ cfg_match! { $($input)* } }) } -#[macro_use] -mod cfg_std { - #[cfg( - feature = "std", - )] - macro_rules! cfg_std {( - $($item:item)* - ) => ( - $( - #[cfg_attr(all(docs, feature = "nightly"), doc(cfg(feature = "std")))] - $item - )* - )} - - #[cfg(not( - feature = "std", - ))] - macro_rules! cfg_std {( - $($item:item)* - ) => ( - // Nothing - )} +cfg_match! { + feature = "alloc" => { + macro_rules! cfg_alloc {( + $($item:item)* + ) => ( + $( + #[cfg_attr(all(docs), doc(cfg(feature = "alloc")))] + $item + )* + )} + }, + _ => { + macro_rules! cfg_alloc {( + $($item:item)* + ) => ( + // Nothing + )} + }, } -#[macro_use] -mod cfg_proc_macros { - #[cfg( - feature = "proc_macros", - )] - macro_rules! cfg_proc_macros {( - $($item:item)* - ) => ( - $( - #[cfg_attr(all(docs, feature = "nightly"), doc(cfg(feature = "proc_macros")))] - $item - )* - )} - - #[cfg(not( - feature = "proc_macros", - ))] - macro_rules! cfg_proc_macros {( - $($item:item)* - ) => ( - // Nothing - )} +cfg_match! { + feature = "std" => { + macro_rules! cfg_std {( + $($item:item)* + ) => ( + $( + #[cfg_attr(all(docs), doc(cfg(feature = "std")))] + $item + )* + )} + }, + _ => { + macro_rules! cfg_std {( + $($item:item)* + ) => ( + // Nothing + )} + }, } macro_rules! cfg_wasm {( $($item:item)* ) => ( @@ -120,6 +104,7 @@ macro_rules! const_assert { } as usize]; ); } + macro_rules! type_level_enum {( $( #[doc = $doc:tt] )* $pub:vis @@ -129,56 +114,56 @@ macro_rules! type_level_enum {( $Variant:ident ),* $(,)? } -) => (type_level_enum! { // This requires the macro to be in scope when called. - with_docs! { - $( #[doc = $doc] )* - /// - /// ### Type-level `enum` - /// - /// Until `const_generics` can handle custom `enum`s, this pattern must be - /// implemented at the type level. - /// - /// We thus end up with: - /// - /// ```rust,ignore - /// #[type_level_enum] - #[doc = ::core::concat!( - " enum ", ::core::stringify!($EnumName), " {", - )] - $( - #[doc = ::core::concat!( - " ", ::core::stringify!($Variant), ",", - )] - )* - #[doc = " }"] - /// ``` - /// - #[doc = ::core::concat!( - "With [`", ::core::stringify!($EnumName), "::T`](#reexports) \ - being the type-level \"enum type\":", - )] - /// - /// ```rust,ignore +) => ( + $( #[doc = $doc] )* + /// + /// ### Type-level `enum` + /// + /// Until `const_generics` can handle custom `enum`s, this pattern must be + /// implemented at the type level. + /// + /// We thus end up with: + /// + /// ```rust,ignore + /// #[type_level_enum] + #[doc = ::core::concat!( + " enum ", ::core::stringify!($EnumName), " {", + )] + $( #[doc = ::core::concat!( - "" + " ", ::core::stringify!($Variant), ",", )] - /// ``` - } + )* + #[doc = " }"] + /// ``` + /// + #[doc = ::core::concat!( + "With [`", ::core::stringify!($EnumName), "::T`](#reexports) \ + being the type-level \"enum type\":", + )] + /// + /// ```rust,ignore + #[doc = ::core::concat!( + "" + )] + /// ``` #[allow(warnings)] $pub mod $EnumName { #[doc(no_inline)] pub use $EnumName as T; - type_level_enum! { - with_docs! { - #[doc = ::core::concat!( - "See [`", ::core::stringify!($EnumName), "`]\ - [super::", ::core::stringify!($EnumName), "]" - )] - } - pub trait $EnumName : __sealed::$EnumName + ::core::marker::Sized + 'static { - const VALUE: __value::$EnumName; - } + #[doc = ::core::concat!( + "See [`", ::core::stringify!($EnumName), "`]", + "[super::", ::core::stringify!($EnumName), "]" + )] + pub + trait $EnumName + : + __sealed::$EnumName + + ::core::marker::Sized + + 'static + + { + const VALUE: __value::$EnumName; } mod __sealed { pub trait $EnumName {} } @@ -193,29 +178,17 @@ macro_rules! type_level_enum {( pub enum $Variant {} impl __sealed::$EnumName for $Variant {} impl $EnumName for $Variant { - const VALUE: __value::$EnumName = __value::$EnumName::$Variant; + const VALUE: __value::$EnumName = + __value::$EnumName::$Variant + ; } impl $Variant { - pub const VALUE: __value::$EnumName = __value::$EnumName::$Variant; + pub const VALUE: __value::$EnumName = + __value::$EnumName::$Variant + ; } )* } -});( - with_docs! { - $( #[doc = $doc:expr] )* - } - $item:item -) => ( - $( #[doc = $doc] )* - $item -)} - -macro_rules! with_doc {( - #[doc = $doc:expr] - $($rest:tt)* -) => ( - #[doc = $doc] - $($rest)* )} macro_rules! doc_test { @@ -223,42 +196,40 @@ macro_rules! doc_test { #![$attr:ident] $($code:tt)* ) => ( - with_doc! { + const _: () = { #[doc = concat!( "```rust,", stringify!($attr), "\n", - stringify!($($code)*), - "\n```\n", + stringify!($($code)*), "\n", )] + /// ``` pub mod $name {} - } + }; ); ($name:ident : $($code:tt)* ) => ( - with_doc! { + const _: () = { #[doc = concat!( "```rust\n", - stringify!($($code)*), - "\n```\n", + stringify!($($code)*), "\n", )] + /// ``` pub mod $name {} - } + }; ); } -cfg_proc_macros! { - doc_test! { c_str: - use ::safer_ffi::prelude::*; +doc_test! { c_str: + use ::safer_ffi::prelude::*; - let _ = c!("Hello, World!"); - } - doc_test! { c_str_inner_nul_byte: - #![compile_fail] - use ::safer_ffi::prelude::*; + let _ = c!("Hello, World!"); +} +doc_test! { c_str_inner_nul_byte: + #![compile_fail] + use ::safer_ffi::prelude::*; - let _ = c!("Hell\0, World!"); - } + let _ = c!("Hell\0, World!"); } /// Items exported through this macro are internal implementation details @@ -313,7 +284,3 @@ macro_rules! match_ {( macro_rules! __recurse__ $rules __recurse__! { $($scrutinee)* } )} - -macro_rules! emit {( $($tt:tt)* ) => ( - $($tt)* -)} diff --git a/src/utils/markers.rs b/src/utils/markers.rs index 58dd90fa72..642d0e0d4a 100644 --- a/src/utils/markers.rs +++ b/src/utils/markers.rs @@ -14,15 +14,9 @@ pub struct PhantomInvariant ( pub ::core::marker::PhantomData< - *mut T, + fn(&T) -> &T, >, ); -unsafe impl Send - for PhantomInvariant -{} -unsafe impl Sync - for PhantomInvariant -{} impl Default for PhantomInvariant diff --git a/src/utils/prelude.rs b/src/utils/prelude.rs index 7e92d9ac54..d7a0ce55cd 100644 --- a/src/utils/prelude.rs +++ b/src/utils/prelude.rs @@ -8,13 +8,7 @@ pub(in crate) use crate::{ tuple::*, utils::markers::*, }; -cfg_alloc! { - pub(in crate) use crate::prelude::repr_c::{ - Box, - String, - Vec, - }; -} + pub(in crate) use ::core::{ convert::{TryFrom, TryInto}, ffi::c_void, @@ -26,12 +20,16 @@ pub(in crate) use ::core::{ Not as _, }, }; -#[cfg(not(target_arch = "wasm32"))] -pub(in crate) use ::libc::size_t; -#[cfg(target_arch = "wasm32")] -#[allow(bad_style, dead_code)] -pub(in crate) type size_t = u32; +cfg_match! { + target_arch = "wasm32" => { + #[allow(bad_style, dead_code)] + pub(in crate) type size_t = u32; + }, + _ => { + pub(in crate) use ::libc::size_t; + }, +} cfg_alloc! { pub(in crate) use ::alloc::{ @@ -43,13 +41,12 @@ cfg_alloc! { pub(in crate) mod rust { - cfg_alloc! { - pub(in crate) use ::alloc::{ - boxed::Box, - string::String, - vec::Vec, - }; - } + #[apply(cfg_alloc)] + pub(in crate) use ::alloc::{ + boxed::Box, + string::String, + vec::Vec, + }; } pub(in crate) @@ -58,11 +55,10 @@ mod ptr { pub(in crate) use crate::ptr::*; } -cfg_std! { - pub(in crate) use ::std::{ - io, - }; -} +#[apply(cfg_std)] +pub(in crate) use ::std::{ + io, +}; pub(in crate) use crate::prelude::*; From 807e717dd9ff4de3f5a0e3f950c53dff8ce26f0c Mon Sep 17 00:00:00 2001 From: Daniel Henry-Mantilla Date: Mon, 16 May 2022 19:37:25 +0200 Subject: [PATCH 09/11] fixup! I'd rather WIP than weep --- ffi_tests/generated.h | 3 +- ffi_tests/src/lib.rs | 14 ++- src/_lib.rs | 20 ++++ src/headers/languages/c.rs | 29 +++++- src/headers/languages/mod.rs | 3 + src/layout/_mod.rs | 33 ++++--- src/proc_macro/_mod.rs | 31 +++--- src/proc_macro/derives/c_type/_mod.rs | 39 +++++++- src/proc_macro/derives/c_type/struct_.rs | 97 ++++++++----------- src/proc_macro/derives/repr_c/struct_.rs | 71 +++++++++----- src/proc_macro/utils/mb_file_expanded.rs | 5 +- .../utils/trait_impl_shenanigans.rs | 13 +-- 12 files changed, 235 insertions(+), 123 deletions(-) diff --git a/ffi_tests/generated.h b/ffi_tests/generated.h index 11f6ee3baf..3eac4155f5 100644 --- a/ffi_tests/generated.h +++ b/ffi_tests/generated.h @@ -76,6 +76,7 @@ typedef enum SomeReprCEnum { void check_SomeReprCEnum ( SomeReprCEnum_t _baz); +/** */ /** \remark Has the same ABI as `uint8_t` **/ #ifdef DOXYGEN typedef enum Bar @@ -83,7 +84,7 @@ typedef enum Bar typedef uint8_t Bar_t; enum #endif { - /** . */ + /** */ BAR_A, } #ifdef DOXYGEN diff --git a/ffi_tests/src/lib.rs b/ffi_tests/src/lib.rs index 756e9d1f4a..aaa9858aa9 100644 --- a/ffi_tests/src/lib.rs +++ b/ffi_tests/src/lib.rs @@ -92,7 +92,7 @@ mod foo { mod bar { use super::*; - #[derive_ReprC] + #[derive_ReprC2] #[repr(u8)] pub enum Bar { A } @@ -138,6 +138,16 @@ pub enum Triforce { Naryu, } +/// Hello, `World`! +// #[ffi_export] +#[derive_ReprC2] +pub struct Next { + /// I test some `gen`-eration. + gen: bar::Bar, + /// with function pointers and everything! + cb: extern "C" fn(u8) -> i8, +} + #[ffi_export] #[derive_ReprC] #[repr(C)] @@ -151,7 +161,7 @@ fn generate_headers () -> ::std::io::Result<()> {Ok({ use ::safer_ffi::headers::Language::{self, *}; - for &(language, ext) in &[(C, "h"), (Language::CSharp, "cs")] { + for &(language, ext) in &[(C, "h"), (Language::CSharp, "cs")][..1] { let builder = ::safer_ffi::headers::builder() .with_language(language) diff --git a/src/_lib.rs b/src/_lib.rs index f014ccca49..82993d242e 100644 --- a/src/_lib.rs +++ b/src/_lib.rs @@ -533,5 +533,25 @@ mod __ { *, prelude::rust_2021::*, }, + crate::{ + headers::{ + Definer, + languages::{ + self, + EnumVariant, + FunctionArg, + HeaderLanguage, + StructField, + }, + }, + layout::{ + CLayoutOf, + ConcreteReprC, + CType, + OpaqueKind, + ReprC, + __HasNiche__, + }, + } }; } diff --git a/src/headers/languages/c.rs b/src/headers/languages/c.rs index c62652c6e4..196a9dacd3 100644 --- a/src/headers/languages/c.rs +++ b/src/headers/languages/c.rs @@ -103,10 +103,35 @@ impl HeaderLanguage for C { fields: &'_ [StructField<'_>] ) -> io::Result<()> { - if size == 0 || fields.is_empty() { + let ref indent = Indentation::new(4 /* ctx.indent_width() */); + mk_out!(indent, "{indent}", ctx.out()); + + if size == 0 { panic!("C does not support zero-sized structs!") } - todo!() + + self.emit_docs(ctx, docs, indent)?; + + out!(("typedef struct {name} {{")); + if let _ = indent.scope() { + let ref mut first = true; + for f in fields { + if f.layout.size() == 0 && f.layout.align() > 1 { + panic!("Zero-sized fields must have an alignment of `1`"); + } + if mem::take(first).not() { + out!("\n"); + } + self.emit_docs(ctx, f.docs, indent)?; + out!("{indent}"); + (f.emit_unindented)(self, ctx)?; + out!(";\n"); + } + } + out!(("}} {name}_t;")); + + out!("\n"); + Ok(()) } fn emit_function ( diff --git a/src/headers/languages/mod.rs b/src/headers/languages/mod.rs index a3ac65c8d8..462f751813 100644 --- a/src/headers/languages/mod.rs +++ b/src/headers/languages/mod.rs @@ -139,6 +139,9 @@ struct StructField<'lt> { emit_unindented: &'lt dyn Fn(&'_ dyn HeaderLanguage, &'_ mut dyn Definer) -> io::Result<()> , + + pub + layout: ::std::alloc::Layout, } pub diff --git a/src/layout/_mod.rs b/src/layout/_mod.rs index 3ae5194f36..24bf88ca9b 100644 --- a/src/layout/_mod.rs +++ b/src/layout/_mod.rs @@ -2,7 +2,6 @@ //! Trait abstractions describing the semantics of "being `#[repr(C)]`" use_prelude!(); -use rust::String; __cfg_headers__! { use crate::headers::{ @@ -172,7 +171,7 @@ type CLayoutOf = ::CLayout; /// /// - This crates provides as many of these implementations as possible. /// -/// - an recursively, a non-zero-sized `#[repr(C)]` struct of `CType` fields. +/// - and recursively, a non-zero-sized `#[repr(C)]` struct of `CType` fields. /// /// - the [`CType!`] macro can be used to wrap a `#[repr(C)]` struct /// definition to _safely_ and automagically implement the trait @@ -183,8 +182,6 @@ type CLayoutOf = ::CLayout; /// bit-patterns for the `uint8_t` type that do not make _valid_ `bool`s. /// /// For such types, see the [`ReprC`][`trait@ReprC`] trait. -// #[rustc_must_implement_one_of(c_define_self, define_self)] -// #[rustc_must_implement_one_of(c_short_name_fmt, short_name_fmt)] pub unsafe trait LegacyCType : @@ -930,25 +927,35 @@ mod impls; mod niche; -#[doc(hidden)] /* Not part of the public API */ pub +#[apply(hidden_export)] use niche::HasNiche as __HasNiche__; +#[apply(hidden_export)] +trait Is { type EqTo : ?Sized; } +impl Is for T { type EqTo = Self; } + +/// Alias for `ReprC where Self::CLayout::OPAQUE_KIND = OpaqueKind::Concrete` pub trait ConcreteReprC where - Self : ReprC, + Self : ReprC, { - type ConcreteCLayout : CType; + type ConcreteCLayout + : + Is> + + CType + + ; } -impl ConcreteReprC for T +impl ConcreteReprC for T where - Self : ReprC, - CLayout : CType, + Self : ReprC, + CLayoutOf : CType, { - type ConcreteCLayout = CLayout; + type ConcreteCLayout = CLayoutOf; } -pub -fn __assert_concrete__() where +#[apply(hidden_export)] +fn __assert_concrete__ () +where T : ConcreteReprC, {} diff --git a/src/proc_macro/_mod.rs b/src/proc_macro/_mod.rs index 5ca7b3d664..2e620d87f7 100644 --- a/src/proc_macro/_mod.rs +++ b/src/proc_macro/_mod.rs @@ -125,47 +125,42 @@ fn __respan ( input: TokenStream, ) -> TokenStream { - use ::proc_macro::*; - use ::proc_macro2::TokenStream as TokenStream2; + // use ::proc_macro::*; + use ::proc_macro2::{*, TokenStream as TokenStream2}; let parser = |input: ParseStream<'_>| Result::Ok({ let mut contents; ({ parenthesized!(contents in input); - let tts: TokenStream2 = contents.parse()?; - ::proc_macro::TokenStream::from(tts).into_iter().next().unwrap().span()//.source() + let tt: TokenTree = contents.parse()?; + let _: TokenStream2 = contents.parse()?; + tt.span() }, { parenthesized!(contents in input); contents.parse::()? }) }); let (span, tts) = parse_macro_input!(input with parser); + return respan(span, tts.into()).into(); + // where: fn respan ( span: Span, - tts: TokenStream, - ) -> TokenStream + tts: TokenStream2, + ) -> TokenStream2 { tts.into_iter().map(|mut tt| { if let TokenTree::Group(ref mut g) = tt { - // let g_span = g.span(); + let g_span = g.span(); *g = Group::new( g.delimiter(), - respan(span, g.stream()) + respan(span, g.stream()), ); - g.set_span( - span // .located_at(g_span) - ); - // g.set_span(g.span().located_at(g_span)); + g.set_span(/* span.located_at */ g_span) } else { tt.set_span( - span//.located_at(tt.span()) + span //.located_at(tt.span()) ); } tt }).collect() } - respan( - span,//.source(), - // ::core::iter::successors(Some(span), Span::parent).last().unwrap(), - tts.into(), - ) } diff --git a/src/proc_macro/derives/c_type/_mod.rs b/src/proc_macro/derives/c_type/_mod.rs index 360c4a522d..8b4c92483d 100644 --- a/src/proc_macro/derives/c_type/_mod.rs +++ b/src/proc_macro/derives/c_type/_mod.rs @@ -7,13 +7,47 @@ mod js; pub(in crate) mod struct_; +pub +struct Args { + rename: Option, +} + +impl Parse for Args { + fn parse (input: ParseStream<'_>) + -> Result + { + let mut ret = Args { + rename: None, + }; + + let snoopy = input.lookahead1(); + while input.is_empty().not() { + mod kw { + ::syn::custom_keyword!(rename); + } + match () { + | _case if snoopy.peek(kw::rename) => { + let _: kw::rename = input.parse().unwrap(); + let _: Token![=] = input.parse()?; + if ret.rename.replace(input.parse()?).is_some() { + return Err(input.error("duplicate attribute")); + } + }, + | _default => return Err(snoopy.error()), + } + let _: Option = input.parse()?; + } + Ok(ret) + } +} + pub(in crate) fn derive ( - attrs: TokenStream2, + args: TokenStream2, input: TokenStream2 ) -> Result { - let _: parse::Nothing = parse2(attrs)?; + let args: Args = parse2(args)?; let input: DeriveInput = parse2(input)?; let DeriveInput { @@ -25,6 +59,7 @@ fn derive ( } = input; let mut ret = match data { | Data::Struct(DataStruct { fields, .. }) => struct_::derive( + args, attrs, vis, ident, diff --git a/src/proc_macro/derives/c_type/struct_.rs b/src/proc_macro/derives/c_type/struct_.rs index b17c23069d..c16ef3a4d1 100644 --- a/src/proc_macro/derives/c_type/struct_.rs +++ b/src/proc_macro/derives/c_type/struct_.rs @@ -2,6 +2,7 @@ use super::*; pub(in crate) fn derive ( + args: Args, attrs: &'_ [Attribute], vis: &'_ Visibility, StructName @ _: &'_ Ident, @@ -111,23 +112,23 @@ fn derive ( fn short_name () -> #ඞ::String { - let mut ret: #ඞ::String = StructName_str.into(); + let mut _ret: #ඞ::String = #StructName_str.into(); #( #ඞ::fmt::Write::write_fmt( - &mut ret, + &mut _ret, #ඞ::format_args!( "_{}", - <#CLayoutOf<#EachGenericTy> as #CType>::c_short_name(), + <#CLayoutOf<#EachGenericTy> as #CType>::short_name(), ), ).unwrap(); )* - ret + _ret } )); let each_field = fields.try_vmap(|f| Result::Ok({ - let ref docs = utils::extract_docs(attrs)?; + let ref docs = utils::extract_docs(&f.attrs)?; let ref name = f.ident.as_ref().expect("BRACED STRUCT").to_string(); let FieldTy = &f.ty; let emit_unindented = quote!( @@ -143,72 +144,37 @@ fn derive ( ) ); quote!( - #ඞ::FunctionArg { + #ඞ::StructField { docs: &[#(#docs),*], name: #name, emit_unindented: #emit_unindented, + layout: #ඞ::std::alloc::Layout::new::(), } ) }))? ; let ref docs = utils::extract_docs(attrs)?; + + let me = args.rename.as_ref().unwrap_or(StructName).to_string(); impl_body.extend(quote!( fn define_self ( - language: &'_ dyn #headers::HeaderLanguage, + language: &'_ dyn #headers::languages::HeaderLanguage, definer: &'_ mut dyn #headers::Definer, ) -> #ඞ::io::Result<()> { - let ref me = - ::short_name() - .to_string() - ; - definer.define_once(me, &mut |definer| { + definer.define_once(#me, &mut |definer| { + #( + < #EachFieldTy as #CType >::define_self(language, definer)?; + )* language.emit_struct( definer, - me, &[#(#docs),*], + #me, #ඞ::mem::size_of::(), &[#(#each_field),*], ) }) - - // #( - // < #EachFieldTy as #CType >::c_define_self(definer)?; - // )* - // // /* FIXME: handle docs */ - // // // let out = definer.out(); - // // // $( - // // // $crate::__output_docs__!(out, "", $($doc_meta)*); - // // // )? - // // // $crate::__output_docs__!(out, "", $(#[$($meta)*])*); - // // #core::writeln!(out, "typedef struct {{\n")?; - // #( - // if #ඞ::mem::size_of::< #EachFieldTy >() > 0 { - // // $crate::core::writeln!(out, "")?; - // /* FIXME: docs */ - // // $crate::__output_docs__!(out, " ", - // // $(#[$($field_meta)*])* - // // ); - // #ඞ::writeln!(out, - // " {};\n", - // < #EachFieldTy as #CType >::c_var( - // #each_field_name_str, - // ), - // )?; - // } else { - // #ඞ::assert_eq!( - // #ඞ::mem::align_of::< #EachFieldTy >(), - // 1, - // "\ - // Zero-sized fields must have an \ - // alignment of `1`.\ - // ", - // ); - // } - // )* - // #ඞ::writeln!(out, "}} {};\n", me) - // }) } )); @@ -221,29 +187,50 @@ fn derive ( ; quote!( + impl #intro_generics + #ඞ::Clone + for + #StructName #fwd_generics + #where_clauses + { + #[inline] + fn clone (self: &'_ Self) + -> Self + { + *self + } + } + + impl #intro_generics + #ඞ::Copy + for + #StructName #fwd_generics + #where_clauses + {} + + unsafe impl #intro_generics #CType for #StructName #fwd_generics - where - #where_clauses + #where_clauses { #impl_body } // If it is CType, it trivially is ReprC. + unsafe impl #intro_generics #ReprC for #StructName #fwd_generics - where - #where_clauses + #where_clauses { type CLayout = Self; #[inline] fn is_valid ( - self: &'_ Self::CLayout, + _: &'_ Self::CLayout, ) -> #ඞ::bool { true diff --git a/src/proc_macro/derives/repr_c/struct_.rs b/src/proc_macro/derives/repr_c/struct_.rs index f83b88097f..6ef3299366 100644 --- a/src/proc_macro/derives/repr_c/struct_.rs +++ b/src/proc_macro/derives/repr_c/struct_.rs @@ -27,6 +27,14 @@ fn derive ( ); } + let docs = + attrs + .iter() + .filter(|a| a.path.is_ident("doc")) + .cloned() + .vec() + ; + // Add docs about C layout. attrs.extend_::([ parse_quote!( @@ -36,7 +44,7 @@ fn derive ( /// ), { - let line = format!("{} - [`{StructName}`_Layout](#impl-ReprC)", " "); + let line = format!("{} - [`{StructName}_Layout`](#impl-ReprC)", " "); parse_quote!(#[doc = #line]) }, ]); @@ -64,25 +72,43 @@ fn derive ( let ref ctype_generics = utils::ctype_generics(generics, &mut EachFieldTy()); // define the CType - ret.extend(crate::derives::c_type::struct_::derive( - &[], - &dbg_parse_quote!(pub), - StructName_Layout, - ctype_generics, - &Fields::Named({ - let EachFieldTy = EachFieldTy(); - let each_field_name = (0_u8..).zip(fields).map(|(i, f)| match f.ident { - | Some(ref ident) => ident.clone(), - | None => format_ident!("_{}", i), - }); - dbg_parse_quote!({ - #( - pub - #each_field_name: #CLayoutOf<#EachFieldTy> - ),* - }) - }), - )?); + ret.extend({ + let c_type_def = ItemStruct { + attrs: docs.also(|v| v.push(parse_quote!( + #[allow(nonstandard_style)] + ))), + vis: parse_quote!(pub), + struct_token: parse_quote!(struct), + ident: StructName_Layout.clone(), + generics: ctype_generics.clone(), + fields: Fields::Named({ + let EachFieldTy = EachFieldTy(); + let each_field_name = (0_u8..).zip(fields).map(|(i, f)| match f.ident { + | Some(ref ident) => ident.clone(), + | None => format_ident!("_{}", i), + }); + let each_docs = fields.iter().map(|f| { + f .attrs + .iter() + .filter(|attr| attr.path.is_ident("doc")) + .vec() + }); + parse_quote!({ + #( + #(#each_docs)* + pub + #each_field_name: #CLayoutOf<#EachFieldTy> + ),* + }) + }), + semi_token: None, + }; + + crate::derives::c_type::derive( + quote!(rename = #StructName), + c_type_def.into_token_stream(), + )? + }); // Impl ReprC to point to the just defined type ret.extend({ @@ -98,8 +124,7 @@ fn derive ( #ReprC for #StructName #fwd_generics - where - #where_clauses + #where_clauses { type CLayout = #StructName_Layout #fwd_generics; @@ -107,7 +132,7 @@ fn derive ( fn is_valid (it: &'_ Self::CLayout) -> #ඞ::bool { - let _: it; + let _ = it; true #(&& ( #ඞ::mem::size_of::<#EachFieldTy>() == 0 || diff --git a/src/proc_macro/utils/mb_file_expanded.rs b/src/proc_macro/utils/mb_file_expanded.rs index f376e7a36b..6086e98756 100644 --- a/src/proc_macro/utils/mb_file_expanded.rs +++ b/src/proc_macro/utils/mb_file_expanded.rs @@ -35,9 +35,12 @@ fn mb_file_expanded (output: TokenStream2) non-UTF-8 paths are not supported\ ") }; + ::std::fs::write( file_name, - ::prettyplease::unparse(&parse_quote!(#output)), + ::std::panic::catch_unwind(|| ::prettyplease::unparse(&parse_quote!(#output))) + .unwrap_or_else(|_| quote!(#output).to_string()) + , ) .unwrap_or_else(|err| panic!( "`DEBUG_MACROS_LOCATION`-error: failed to write to `{}`: {}", diff --git a/src/proc_macro/utils/trait_impl_shenanigans.rs b/src/proc_macro/utils/trait_impl_shenanigans.rs index 832c99668b..4d54f90d6c 100644 --- a/src/proc_macro/utils/trait_impl_shenanigans.rs +++ b/src/proc_macro/utils/trait_impl_shenanigans.rs @@ -14,7 +14,7 @@ fn allowing_trivial_bound ( lifetimes .get_or_insert_with(|| parse_quote!(for<>)) .lifetimes - .extend_one_::(parse_quote!('__trivial_bound_hack)) + .push(parse_quote!('__trivial_bound_hack)) ; *bounded_ty = parse_quote!( ::safer_ffi::__::Identity<'__trivial_bound_hack, #bounded_ty> @@ -32,11 +32,12 @@ fn ctype_generics ( ) -> Generics { #[apply(let_quote!)] - use ::safer_ffi::{ - layout::{ - ConcreteReprC, - ReprC, - }, + use ::safer_ffi::ඞ::{ + ConcreteReprC, + CLayoutOf, + CType, + OpaqueKind, + ReprC, }; generics.clone().also(|it| { it From dc43528973dfa93946015e35563498e2cadd0e10 Mon Sep 17 00:00:00 2001 From: Daniel Henry-Mantilla Date: Mon, 16 May 2022 19:45:38 +0200 Subject: [PATCH 10/11] fixup! fixup! I'd rather WIP than weep --- src/proc_macro/derives/repr_c/struct_.rs | 42 ++++++++++++------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/proc_macro/derives/repr_c/struct_.rs b/src/proc_macro/derives/repr_c/struct_.rs index 6ef3299366..3d8264c0f9 100644 --- a/src/proc_macro/derives/repr_c/struct_.rs +++ b/src/proc_macro/derives/repr_c/struct_.rs @@ -9,22 +9,17 @@ fn derive ( fields: &'_ Fields, ) -> Result { - /* FIXME: should we deny zero-sized types?? */ - - mod kw { ::syn::custom_keyword!(transparent); } - if attrs.iter().any(|attr| { - attr.path.is_ident("repr") - && - attr.parse_args::().is_ok() - }) + if fields.is_empty() { + bail!("C requires that structs have at least one field"); + } + if attrs.iter().any(|attr| { + mod kw { ::syn::custom_keyword!(transparent); } + attr.path.is_ident("repr") + && + attr.parse_args::().is_ok() + }) { - return derive_transparent( - attrs, - vis, - StructName, - generics, - fields, - ); + return derive_transparent(attrs, vis, StructName, generics, fields); } let docs = @@ -44,7 +39,9 @@ fn derive ( /// ), { - let line = format!("{} - [`{StructName}_Layout`](#impl-ReprC)", " "); + let line = format!( + "{} - [`{StructName}_Layout`](#impl-ReprC)", " ", + ); parse_quote!(#[doc = #line]) }, ]); @@ -69,8 +66,9 @@ fn derive ( let ref StructName_Layout @ _ = format_ident!("{}_Layout", StructName); - let ref ctype_generics = utils::ctype_generics(generics, &mut EachFieldTy()); - + let ref ctype_generics = + utils::ctype_generics(generics, &mut EachFieldTy()) + ; // define the CType ret.extend({ let c_type_def = ItemStruct { @@ -83,9 +81,11 @@ fn derive ( generics: ctype_generics.clone(), fields: Fields::Named({ let EachFieldTy = EachFieldTy(); - let each_field_name = (0_u8..).zip(fields).map(|(i, f)| match f.ident { - | Some(ref ident) => ident.clone(), - | None => format_ident!("_{}", i), + let each_field_name = (0_u8..).zip(fields).map(|(i, f)| { + match f.ident { + | Some(ref ident) => ident.clone(), + | None => format_ident!("_{}", i), + } }); let each_docs = fields.iter().map(|f| { f .attrs From 7d2fc6f28d986465c470e30577446f06e9dc05e2 Mon Sep 17 00:00:00 2001 From: Ronan Demimuid Date: Tue, 17 May 2022 14:13:56 +0200 Subject: [PATCH 11/11] Diagram for code layouts in safer ffi --- docs/layouts.png | Bin 0 -> 638303 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/layouts.png diff --git a/docs/layouts.png b/docs/layouts.png new file mode 100644 index 0000000000000000000000000000000000000000..9de815d8ebdece496128d3a8f992af0e06c267ae GIT binary patch literal 638303 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

aC;LH$?Z zuRtS}3Z(Rj;DN1HuPW@&aX*y_2~9!%oZEBwwIml&!kCGQ>{Z%47TsRNBa9(Px3uuXNbiHq3A>@i3tR|PCA$@7$etCfh9inJ! zPNl|8L^)(J8^J6aIioVFvI{&}2z>D?iOu6(>m$4_kKV-yoZ`o>t zOl_X4=G`4?kaxw8w_Qx>1mA8DxJ(r9?nk~ z#$x>?&iOeFC~|JpIg;IziK-HU8*fV+YfpQ$GFTIESv?}B>TCnw8Hub1qN+GPyJ=b2 zc_K$JerX};wEV7?H9bECqO{se<{|x33QM>PwaTDmI;iLa&`x%p^m>9n?Y4_Wh%M1S zlO>%1#rmbsjVa7)HZ5gNJ1Zz`2PMR?tr8Cn$tx-NnZDdhJ4(JC-gZ^O=1M-kf*L8Zi$w<}_d0D?w zpv^z9Khwd&fuogu22hXu^v8H~_nXdC3l_&}FX``|jqUhp?~FG-dE;?kQhKsLiV$W3|jpdSF=Zq5Z&1G(=Tq_u!_M+xbe zs>_@S0qZ%jOaw&?MrgENQE-?ndf$$YJ3imS5Sdy_h?#bunKr%Jd*Z30!JS&%mF7<= z&`$h|j_0iA@3?Q1_WqQ>%{qISkOq8-&})gor-MHxCU6Z;<*?)|BAVsWN-NpTQ9+19 zJPBdi3gGbhwbM2^6P8)z!yqrW2bjcTx=nK=R;*|5J1{NY1Uk{It)Mkc`whJBG$|jM z+W0cEdcDbAvi~$xMM_>RW~xpv+FQ>DK3X>K0@;5a#*>rSA4by>;dETK7O2x`zC=W0 zdG>xBEC1+^1KW~A)!^I;@MJ};?$fw#trK{+7g)YDmFC$D=7I~vf_NcfPIDI+X}Y!xdL>~+zXBj3W}s>;3t)r?03Xy__XCoC{vddWk$ijlH)J8Q z0rmo~(fLj1?;GG{E5XZF7R3hwmkpr-u>%3eNKddoks5wC#mq$7Hw-PiP26&~D3Oc^*&$HXFQwa%+YA>Tf`E7Pt`wK+Bs{9@s3r z*Qrt5z+J$DlTY5=zwY(WxLUydp%v%M$owr{iUx!0D3xQJ_7Km&SB!mN)lkl{yYD~q zh2+TuPZwT=9k$6d*{52x1=u@XSpR$`w)De9a*8E30p^ zkmnJ*>_lH>MJDhBFCRccP$wd>v&AMW54zDPN;le7RK>+E1TFFlxO9*yLRB5(E$u2{ zA&h#;t~{n8k&}ifo3bh0-2AhPd`_X1@3E6g%bDBTFbK0d3GvVlqDehp3dT7K2_@MQ z&Ql5YTb8M_BAA zv%~Ea>NwYGw&oQ-7((|IGt^fUPtf#H(c{n@?4mlqV)8mb6^Rm874uLHVY&ug_S*I3 ziw8oil?vQNNxvMh<%lTY_x}AFX|I6Fr3dgi7mt~hJa85NvuMD&fp`SYZy|i8Gz1pw z->+gH@KP|fy!Wj_KP|m=pOk}UwTjXWTvH?c1a7o);!nq4#?n$7a|o>1^$N1ezawrP zU>POu(EVbH#LYL}GRM)BN+mZC>t8RO3`s0asF*P~dW+u`GMrhrNCcVv=-=NhT=Bws zNm?CGjAlWtFM=_LQDBhp3D%n6F7GPUdNrh9!r73$eHvZS^-I9hFAAXENoC)t575z z?=ithSlDV0-9v6!Tm#-7q?Gq>Sw8?om$pBLfD3s)2DQh{_AK&%o4o_y$4LM#9pdVp zfo_-dQI9PfgY6l1#R8dy&AUlog%JY1W0#-Ps5%H~z$qmCvO<+Q26P&|uBb8`Bz@YA z&z|YA!fPUi1yFFY5eC2WY5&5vH@G)8iM0lup0;sfH!Pnt+w<$+^_>4RrJXw>Y!>4x zn#kUk=#HB*YtQ~;WNbW8;VaSTn?*CO7E(d3 zT{So0fjX(_AwYo^_ZGbATfV5L;JW#P>jpfj{Oi}R>zkV`A5`%I!9LrRiqB z?;|t@`pVr+lfd*og3ub!8y(ln+=1JXHxt0muNF!O&q!SfD z3k>6o@u@BLbI%lng1Svv6;U>ES85N2xKCJ(*Q8gVaey2+x1ugOF< z&7nzYM^anzi*n7GY`gYOeBe}hCC<28@usO7{DaO1Sp8$5#i6M3P|s`@2b=HWTe*N1 zShN_}AF&VC#wNg$^MPa~_8z?dH)Q3_7eIs;&UrYS_|vFu-T6X~vxKk=dRIZ($U~dZ z!BBEJS?Y>DpPJ{6-F7KN#Yj?CkkPZ(`_yC?7lx5!b9KeXG0rq`bikdz>2k7agu!9P z$ppT%Zl*|QY5#m|t*DpzpnKAmRRLww^qC<3Nx9Qg!p-s+TPlJE3mM5TiZ!d#tUjYj zG58&#n+zItEV7ehig_7d#*4Z(8N)SJy5+Wq!u(pcS|1Ilhn_bY*Pewemex&quTfdi%S4*MHlh>(H)}*0Z}m zJ7}J$CL8LZ(oztgf1?yV?8c+KqjQ3vRXoS7$f)QRtbI@pRkBUTD?B~O{7QT#H9-vf zy5UEG{<|#M6&E*}nN8F9eC-Vx=>V0Yt)k4?wN1JYyLldBiIz$?spQdrM=HH7L85C( zL3{S_Mzs#GL-jg`hgv`&xF@QyLBGIb7`;K_{AMd*6zDWDDS**Jfrs|!pVpxzC{487 zqIG&m9R9{tko%+IXUzZ|pEt06rQq(x5>dp?GG_``5Ek1(bEiTv_mdMXzVvLU-Zjl_ zuJ}ENVO0zvw6-ajz&pWrm`M;P^6w8*6bj`0hJSG7))8BI9L6d?x2jxnbbh_rUyx>O?KLf@p28KlUWKEUMotscQ%!psGd57jw|@d1v!4TvL)Q{ zCHZ`;**Wk6xn~UTcZtqkRQhj>UeS`hU2%bPxG9`1T<}x!sjbV}lwT2@R9DPfh^kbr zV_tV%E%a53WtJ?GL_8}4-Wf}kkF~U0JX!0Y=CRNzb4-@of!1Z3rWoY&O69RH0$ZOU zmBnDJD(%qs4WDc1&$~|Te8&}TRN!=+-G-%@RK3^%2IV?C?SRrwzNT@HssVThoOfBL zWh#42w**3x|FE@YAmW(*IhLe(*r4@vz@4tvUa0~&sO1GloI7H1IADV&RDe)4F|N7` z9HKz_SSC*&8IMtq?1|9V=RMK;rL^jt7LPJ>2Gy{^hpDF zFO?5>!88nVz+rBhqi5ccpczI^Yl1^EZ^D6vGN!n%JM3d1u9N1FJvLlNE$j-V5S$h@ zG^8fMPH)~i(uSS*q?6u~@@qsq_$gJd&1qCW>vI*H^76848vL(tQC*Tf6g>SQHJ&ha z$-JYE=*MwO;(-H3x5sQPk5?v`uKOKlP{k&dlx04TaSRglJd9)l1mJ(z{$E!4XA0ou zM^l&Gvmgo6b4G*(<~p6tBwm2)|Ib$|cv)Uh_Iz9l}sA{5n|FO ziUYFSy;O+wczVWqo5}4&4$0!7=S5MIs3Jb|P>+lKh5N9u`{1l-j$OgHkRvw9V(M2z z)l!j|+!cEjy87T3H4DBgcOf})kYAQ0zv;=zca3y*F&jM;F^lN?s{t`UEFAgLdw9LjGBhsO6X=Q`6Q6|OuOApj z$peASRLN|Fy_s3q>KGrEm61Ru^2Lh9lsLpiUJX{-+|13&s`<>?Epz3NFlg2~hELua za=aSR#5FpmE+wUiyb_AP*a9-*HUw-Sk_J0)iNIk+!JkB(nJiZk|Ht zyt1_x`MK}e|1gV1rC|wT4E{K2h`;jqKuB+z`@v>-)LbMpP;aJ9{A;6pN#~rXsua8N z$sc)QMt{I?n*l3f)zhQ`Papuz7p%RQfdSQQtGZVeFdTa@y|X{nHhDNp;@)z|!9fS| zqD6Zq7@B9Bh12 zq*m|fX(^@G;Lm_#(#yjkb800jIitCwt~X(Nq@g6&ot!mG<48s{chhca1snVgss48k zoMN&S80?5u>6LEa?mwTF%2(R4&DW#J;K9TVK#9Hd1_B150=5NxyDL0qn z{n_BuyRtRu@nQSJ&sp~nftx;8e$>8~>vPjC8{^M~P;i1V9T#ks_BUEf_U9I!I-U|( zJW*G~IqZp#i!f%!aQ#^=O7mmeaOq5Ujs6Rb8+LTud<$#1%&Y!FRVOJvr{8i=_YvaT z>k+x%oloL!_C<+Z>{tvLG2IL2&oI+Ht0TRxEWLuIoAtE17XgXHcQ2O1Uo{1LDQH*ofQ;<3w(WO;2p zHs3Q&c9+WCb}`QR=C9uN>lOns12+uBh%oKQq`#nZpWrcoDjxNFnJkb_0DyvDO9%az z7-M)xf`Ws{dBeo}anukFkVsdB^|-$!wE^G-7e%DjkF5@A@#L0^+U>sPd5>^6kX6G0p@)H+}mOISFU!LhJ zXqxMu;}`7zY}q(~g|`w@INMFI7hCFdK!1J1x0En5EWT2Q@EgsZTKQt;d`2Zd2;Xen z|4VSVv0VsWDo5Ba55;mF?GNoqIdk7iy>{sk0R)P!)j8tQ{4ot{P08 z;lW)=PHK(w{C?{s#nabmnWyNu+?&?-O%vy6dkJZ@vDyd5pN4DHEpI|rRfn9JZ`l+ECNIx!^qyj2S(*t{dpBA6Oyyf75hO!qqlb1nGq$_%BvzMSe{BgB>FA6u zw|GI@;kd}{_-SCCt6SnrLxbOH2W5Bi$;@4W*J_m($wDQ+U2X#E2qCqXDu#4dA_Tt%Fh}oIV}?kP)p86LVF9WZ!seLcKhZxqQg1cmy=hBPWj51=8V^tle2>`EB8xEs9XPD_-0k*;F#812_ml1 zwJxCkh>;7@iP3(E*?(i%OQucG*fup7u)w4^7BtP+_wf?{1#AHzumxD=N#B!1(FP!B zi``&iJbH$R3m751bip@yup|K@-bWjj`y*H2)%Db1Atz)Q5FhoxcfAtHZ~Ci0`>J>d zNw_iXkS(dR@c31c*S+S8?u=Yja2#XDBoYX%sJ4$1c70PnZh@cF{abq?;7m%e|FvBQ z;|f6!iJ{$+#vJ4CpHoq+9iT{B#XCi} zpijGL+JbIqD}kJcMX^81xoY6<7SfNV4Y-OZ@%>wE`MYXJi=Ix8uU%Xu%g@KP7aAj9 zOzy=+xnDcn9(L%@@e@z&k*@ita}Hl-vR@l1AcyT-ogbCBIZEv`ZpUUf#ow zP`|`)a?6YO@uLzALjuXJe@V5Zx8-II+5PsXz7C&jpk|(6|6ATGXV^~9Q*06sg)XXi z4~tjdBfOklk&ruHj8rekU2i4JkFYc=44?&zOBv1q&eSE+ZiQZQo!)05U*(jyehf62 zHAgfD38$OGZ|hQI>&|-6Lve%2oG9*2!tuVv?JYO!jvpuy|DK62VLYmuR%>+qTwAbN zcX!FWB|y7Ms4k7h8c+Xc?XCjjW?bNC!r`L6qR-UbR+}GbleLxEljyDebFDp9)IntpU9V-ZF-a}xjGBj?RSb_)(CZ8}roD_hOsW*3k zElvth)kuQrNO5KJcSO4+1JWHb;zX9j>5leiFY-Gl=R!hBuPKoOO&C*CcPb``vnz~P zrbm+12lp-G4ROPjIxbq+k1MSYb=fA+CC{iu%dA7biBUq)VbvGp=Pjc8<#lB~SEfOI zU^ck57>LpoY(2*o2uX|_EZR;m@4zJV%czT4^$=L1rs$f)3;7u(d%Y~?%*7ft`EGD` z?BlOb<@V$h7hBFN(#S`IiseOg#@LCsltvxI9#%GJR)1{S_dM8&k zp2@g6FS{mFi{a01PjP6)f%E1{8e%)^sK~E~mS^gVJ_mSRBJ76JXIbre-fm?HD{=m| zb?XnaFDhF@*p50iPFbP?aVp_kssX~oXH6G^ z*r9t3-F~5Pg*?L&!9?yp<#4-|x0dgAfztILctqYQmL$V}*SxCd0DP#QBZ^o9@u68B z)J(pPS;70yMgv)n2AJh&sDT#&c+dY}#Q(*VF+j~6N{p;TD)1?CZ4fWmH3l`m<9;yO z{ie=a{W6Z#ny-`L?p1wa@WtEW*l^CqzOb^FvMz-7wKKRVWCjcXwZ?r}g8olm#Sz22H#*-0Qk_X-DHXQ5LPhZ=LBV=iMc4kNS5f1k)m0G(8Zw$d7 zSGsZ4T*1wmC5wz#XjU5w5guff9Bh$aY+JKDBVrC7b8-*HTULD67@UI~{b>#CJ^ zbn$0w?1U6-TFT-id`1q)p{UXX1bzO28YgvuU1DUq;=(TNF>Z+vZ0maw4eTn;qM zMOR#E>b;GZqRmob4*beHCbhybz$k!Gjgz8ceWcUjQ))+%X!eU_x^!Oul}4Fs_fBj_ zC(4KzM}#J|1aY^a&TX!$=x~j~=Km{q%43@EjX^p)64|77B)st*2ttPJun3*MpW$(O zM%(GU{`<0|el$f$%;qKJpmaT#Q(Q1YUTlg}rSTCv7q2p5|UX;DOn z9L)`x{%sEAv|HyCrU*yc^}A0B^2Hb}a)9OQ%%c3y!*S*4Q1*Awdfy#u;uW^RSiWS5 z9}Fv#og)XUstTI3eq}!jTvvTmJbNr!t^7jp+CHS0Je`1l8@H`TrW z$QrK?xO%Gu7(Vg{6duO6|0Yky0Ps`y+*jO1eVPXmAoOouB}Ita|6*Rp%p9`(`2{X? zwXk{swHVFDVbRL0ZD=rHV4=Ru(UQgX5NS9+XFw;gpgd-LT!n@puOP==ex_1(NQ!ZL5ap6(Zw96iV%WD%og@q_?-Sw6(ksK68O~G`S3UoyU_PD&h zesouMLGH*sERnh|>7Xtf5Su)xf~}nsczn>xa%y8T`y`*gL-@u_ z;RYXVID3wMr-bT3{0{nlp_$0tbW9=c+vuO)M^H~ql$<7vuLLtMY$%+zu$EIu1g+fg z;8w6PS(Xr;;uV{2;XF?=LZeTJzjo*fMjX}LY{T&yF&WRneyFo1WPT$lN++0_I$AQ@ zO_d{OTRkr6U~1hk@v^HX;yl}qJ6{tr;&}?`7tKcwo;;j-=HTCb1gJF6pBChmSmqS} z_;$+r96M$C^V!v|u}i8?O1UB4TEW5}2?AnkxrmXa^{-iaMCm)$E8>$Ex2FAx?c2cV z3-~a8%!YyE?3n76p+EQ;Oiev`UZAddHLV{C_NTd7RA{iM7V7QB{2#8qIxOln+FAuc zT0!ZQmX>Zox&@@WyK6{kk(7?1ySux)q`MjE?)rYC=iGbl_dMu7!vyp0cgNamuU#%B zi{L-|)-Hs6^6k6R?ZDhw6a-JppMz?3APYf~DqHl+rRLCXkitb!`IgNNf&0IyqlaW#~P2)bOd5hnt(bWZJ zIRxt&$yE8yU-9K`FOBxs&T%47qMgC@h9!w@hdM{{o{3QO;!aLzK5t#~k#-zA)$Y#oazH(B^dI`cRJLk(W~9%0B{k>cw@0Qzrx=D!FQ@e5xXMtmRenl5!w-450w2fhE$ zE8cc4ewkdD*6D9D)@`fydS{CEyKN#)?ze<^F`t%H1J>|2&&f*G!-V;D#hYM?dqM{b zn`W=>f#nqf2j1Gp?mce5=vs(7t*C{Z!f1($G~=F1*%M>C9%@b&BNF*sp~|8#cb@(?9I{q91Gc~)QqbiW&;TDRinJ<889R4B@DVxM!^SO49ZD13Ex zba_2f7V&1Yf1wJfZ=I`qG{^MqaQV80&4I#X@T zzgb)bSTGDO@-E0j4WZgRJW<@tjke&~{>-O}sPzGvi(0ZxD4HV$t%;0QvdsS1Y_R>I zRh7SV95plm3VPEZ*zKOX(!OEx6B5!tch0zC+1S1OwQShFjZE^sM@*;+p|}wvwfJ4& z67ZcDg|(C=?BWq#>{K$9s(l(euz!_~gG6VdLC*@iU8~xz7SOuEV(E4@(Qx&Q{vtG7 z*+!}XC1n993LpLO$d^--%(EC zoH*3g-6kWHHr>b^UFjuYPi5LLV(h*}@cKZzs`K@wCV?eYLhthNj18Jy3HXfhEE!ML zx!~KHn%6MiQR@0I zZ?hl37rxqz;`vzqviFj=>C}s@P+)HPTji;n*wxc+DvnJAGf(6kP3&><(Ng!~;V5W# z)Xn80^Q;xcp<6&EnNYAp_42ow(o*!0hBnF5#ir;!&xFW@$$hZ$Hth>isIDz(*3XY9 z|FOm!s5Rd3#^OK;JkK=5BbfWpd;IDp6Br>B85%c!&Q|I9^F5Ck7*wWx1|z>zwin+9 zrn3?$@5q>qf=Nmd!)7jHS{MPDO->B^1x%>}_2cQ9^`aNfQ5fKZRkO^-224>$y5&Qf z#cf&O&8=!r??WdlwF6gso6$g}_z_ zLTP~N4dw)RqW1FdRTHrV8-(X1E3f31-|Y6N#fYl!pne#M{;7=M@8PB7i%#r7JO3Rv z#FhkGpZ0g3z#wc$LQuSsNM^7}Tlo_R4E&w#!Qwf8M8>_Lv%_sWF^Ydz!j17m%bQX0 z5-2U;5o%J8yb*}ds)$RAWBi(X%u5bUr;eB&DG(Nci^HO`I}l zuM(qa0v(m+5Yl>tpue90tPri{*sw0%6raHONQrMB#GMaAI0Xm_#&h$3`5 z)2^=&;eB3GZ`C~r>~6BJyOIYQQ4_?J`LuQB2;ujg(o!XwqY4c8>(!yGkXxuNMXwZo z-z;hMiufwI(SN|v#sBaC!Ou6zZEp2a?RSKxZcr*kX9>A{#D6RQZfNCC^Ka@F1B^Q8 zqpRGm;>Plo1u!k`iRXC*Ox(~FEmedhcL%FHY@8HnF%#N%2hKY2$gX+A6b%NB%ACjC z3j(5zJHH20MU+pF!#WTxMBBeGy*ec&0kqFh6^>l}aM)Ld0kYCrlvLe^m9&FRA`X}1 z*VY#PD0lGfA3j;ViAu>ll;e6BIjUgn?(;E#c_VV{;&JT`xtgEc(or zA4gf3TR$o9-s|>oQXcu)z?>_RDV#ZxjuI}?c&=^|w>qtNU3VNT=Iu21Dx$s1u{eE z-D>NDPK)#%mJa=4d5J(Bl&JoU;mG^f@qoo454DI-0blC_P+J*46>myF?`U1@i%#l3 zoX8X2SVO6GQ6@k!$`)^Yhejnfrhhgv_4H1UU397|j_^AP6I*0_88K}D@%FI04|NXP zqO==mO^AA=#5J*~Skd_+hr&KS(t{ao#TMT5tND%jGU{|Jc&9T_!eWz$@U90YYx*fc zzn6b~Zi3f~hwn}xR!U>!^BVkh+%OS9b&J2=+~TR%<6~k?qN3sNQfmCkSzj0*!R2k@ zMPBn6z?XP(-f$l}d2*P)M{rEaFB;mgH$T!}s>4sNno=6yzZyS7JbZ>?S0fz7WX-01 z2Pw4;w&&*NTkI`NQqPmpYSUjyY3Gr|Scc(tx#Fne{@9nolXBOB(Vl;$wdyNtKIcXe z&7_Lphs%mx?J@t+9yKaAd~5ADMNP3sINIf8S#HJEXrO(B0?5{hCjVAUEDS1fa^_C$etmPP%PYjnzaj@Vd{&7SSv3bTpWa@Nut?quNDn4=?%lE;fKozB%nktfp#`a!y9@2kE-Yo;HH4O4L<&< zpI^wW4)}miXg!VtX+2i&$Q<2;q~IZj7oROp~sz|Gi@K`0kmQZPzy?MxA zCN_q(;a+KmP$(@kh6#Pj{NiIjuqFz6vbxHz1@T+ccv0~I$6Lr$^b;Q$hZo9`-ZQWA|=-$q%==N0K@Nqd- zZ$7MPI5BsCL(PoDMC8K~fo|bI0SIq&GcrkkfR z<>md%O*j_P+%&kWiKuk#B%dTCTu$&8lRT_X z;9mmYXZM@#U7j7@ao^&v9@KN&kMc4UAwH}*EJpzovB)xHr9km8fB7m z_eYDsu8v1~?BsSordgkHd_VDAU|?hh;PMM2e3-=_JJ>&3dhrA`SnJ9$`F@`<#8cGm zlheD#IorJJMOetnnI&eC>-WVhonKAaziE(Wt1lItN*-jm(c>k=LjUX#XlElVUTHw+FW5B#AXo~q0CVb78UT4R%W;uA0+x-e2*g8} zm?&GoiN9y8gF0?g1OiDZF{<);R2dd-1jHcXo{Z1dyyE`Dvbne1=n}seVxzB3^g4Za z8X?-HA)`v79>z#9)63SzbbbLsQRrBra?W%Y(@JKR9@+{PJtp7DSV`VgR^pl~lg1dc zBO;@UzaK#VT#@d(9xF26&^W#`uN}R{5YNXo-R4P)~~<_ zLbhAAEY8S61rP9iru~f`6_20UYhsyGU-I*m?YNurCpMOVQr4-5>*$*OoQ?D37sX}i zTuo6M6AsgQaX&9xQ5pBTq5}sdWxE`deXRSikc7Nz6Zv1H2<0>KT9(-*7d}WOZ8Uxn zV`3k3{Wh%gGV05t63>!kwOmpoYy|Z)`lP2O91FsFa_AFV&dJDC@Wt2TspNmr!BXpP zFlcO8l&0sW2Tfck%NeCgq6i33>5jY&#?v;(W6f2cT$%Z;`9Y$NlgXaPb{w-~bfVDt z_>RYg+nl+6iZYbdvINAin^rRNDAB} zOE7705cvnbfPN;dn;nNLg_W^^{8P#2XhWYxpsXGus6Qie1{M70jI|>FZ8J9g>9~%D5mX4m53hHR5&9duDv5WI9 zqU?i>gJ>*F+p5Nx7j87~90_7EsNVj|1pq`MR~@opCdP9|dz#FiZ!hFzGI-%?b~AGz z(v%Ur6!mgW2oYD>3l4onx}-X4T{Wf9P|XIfd$dWWf1N35B|r>lwzy;tOo-Y<+Sn9h1E-P<s6n;1CUQ|o;CoxrlVTfoiR-ALuFmb4JZ5mv`1}3TN&4E)-RrKm%qoLvd&tss zs0B%@8auoEtyeq@6eQs2bGeN7&5#o1lCLt2%qq#LoE$!W;|LZH)e{J6itxk*EUr$7C;vJRxX~VEsXF z#{Q`C?#2<{)~!!r1*gFM<(sf^{Pas+Cb~o&-`KR4vs1VBsfoLSh7?e>W6A?2@>Xyv zVQbx{j{L;1ijO0Q8gCt!yPwd@H|PX@%W1-e?vSl3sujZ3t69_hyv*v16sJaC)HbVE zKF6@HWDP8;QmUv3Zc)){m}NAQ`G$7V<9q$}#?0heYR7IhcAFQMl+p~WHSx{`1&}8fi*u{Hxy6_c!yg)_LV9rO>ta+SxCL>CD*^Rs+um= zqy{txPO<03YC6mSsXpAQ_KEzT9RVR9puViYY0v;jOn{j#XwOEmN|l281*sskI?M?D zhyeKgK`1#i79h6(ehm#8dGQI~|Id`l_fKBX&Kwc>|54S{!G^vTHj97+v{v^vr?;6S zhHMHm>f=OJepF#)i_Xq}BScPykq{9wJ{PjAIg0g%j4~`jz6iR4^tHO0jnd47 zs&haw7K!X>PyaCI`5sq_!QQ#ulj-sM7e%vBZRTouR_Urq-5>< zlI7e`C{sbn7+A2Jnct9o=u~OzJl-Q&r3%?aC#b;qQSESV$#u9-BmOSXneo;yT5yQI zSNLlDBv()Mnb+QUD{sTTqD`?D)qV-SN@PjeeDXs_MtZ3}5Sly<|(?EN-$00x4u}x}IQR~3^efF#=-=29AA`M>sHsARP(tU_;)wm=gU&;2CYZL6`z~+*4=1+} zQbdkG+sOT65*DM_AC*gTiA*|-#8jTPodk|Gr0|ThZOLzRTx_kkk+VgYJr`Gv`Xw%H zc|`fM9){IRaU&%ewl^BTqz`VDij13tig625(p^Iv2$7fRFSKfUB*MI!k~&Ztscj9u z3^+tWhV-WN&+2bR%7s{pD4TQ%8l6&&I;U~NQg*Y(3;Y6N5I#5~l7Hm-KHEj?Q)Sh# zhqq&8AEaKOypk|?vGFdG%r>hqimqQ-GTVMRqTbf@8;P~)E ztP(Tx(C(VAX~e2wLCv(>*L-$=%=MiCE*)$jI>8$up|UlayUnXxflLAWIpN*jBgYLB z^Yo?d^g+jW7yVGO#D6~Z-v$V@TD*Yv*e;H|75}isX0%p;PHn=V?qTu}m?dUv14EUQ zE%sQ9SNDtS{WLv~B>_h>u0^|Uoe!N5u7?oLeO;r4L#_IbSxMKtjbBdz&+@W^PpcK5 zfW6!4)Jx84SH{2sV}vN+YSdg>8U^3;DnF5nrm_uk%$wSvL zU-+=HLn;fdapzDerC!;1z9j2M9Zcuqkv4~0;fs5Bmf#k~`oOpLQt-2LtXXs-Q_{lG9uwjz2czS{m}|6G8hhr%^;e>; z`_(9drfMrZQ175gEmzq*{E;@8foPK_e>&sb;&P^S!d~XPfs7FEPddukdkEU(S>1xK zpb;9btk|r3?#gm)7oLk9b6OX;nXXmEg$* zP8bge<7E0H>Nh;wxHQPHXM-ZYNjn}nQxW-pD9ZqO8j3MEP$>4rx}b5 zU8DrRO_2%Q#uuVM1o57r$yWp-ive)`>^Cpi-_wQS5qdl3YwQnxuSGEpvA!+XO<h45jdHqM;_}#3mws$)i^q6*SZd>)KT&NuV4B5 z{|hK&`urCawZb0`iUjl)W}QTU#pM@;D1>En%_P_=u>zURZLv#y1i5Mn(t1j^6fbFU znJLQ2rn}d%DJ^?tY+aT4j3p%U%BE~{DpN8ljDC!;=sRa=YDO?q;mhX~K$`H3%WO`N zDFW2Q&3XN@^W*Q$IMh&50RR`!ndO-bDvMGyQSln;Uy;)?GMsvPbpq* z&2|S4U+U7swBJJSEZO=}nj?x-gI`%M3Ya`#qVDr|NT!1IHardCB@JtT8T4!k{bc3* zF&nQaWq^Uhm7*${5#P*#-h1L~vUGtjN{_o4qHx6Ic`9}2zDa1+Y>j|mnHn{Fi<4?e zw_1NCTTWA&Zrn`eJsZ71Vn|-Q7(Lush#rrzA~kWxFjjR)&Q}nCR@k1(61YF7t$!Nw z5)yKHCJE>hza1VP;3iQh_oMjesPtCBSVZ30uGP$e<%py4tdK*^{Su^HE#U^I&DRGK zDHcw6st7#X+zvd{>*3(#Y+yDq4?Ec&!~>me$>v?Td}*0}C7UF0xnIg`+M~BEyT9`g zlre$N<^Cf;guE+BLeAz_J%}}xuOp#};O*wSyk>s)3JeuQ+Kn3P?K0P47bB_KPnwjE ziAww3lx3+OGAg+J{c1P|W z>+(+rH5WWrws}*M_Wp-?uWbca(s3885d)&3h8d-!x>knOnWTjsoe|8{>p0GYUaO$> z5d^E|G`In;O=IG`Mbg^pRlWPOnbP?omu(C74-ms7L6B`1r2r~kggp`Mqz`P!WiUxt?= z6E695>Vh1NGHe>t%qd3x@MN4xV-8q#w9yk0L)hs@h7=bp>Vqb0j?-;83@%dij59O| zPwNv~x3lXD`=!sMRU%6WCK#^5Ox<)LbwFJ>kSlGIHU3toND&rJLP{S$NY8tJt)a!j zRqU#Dd%SM%JfWl^Bwn1Xw)bw56uNE&Sq!*kFnUn}(9-$epU+T=YdU)zB@{Jk8$;4y z>jRa5X<4fE%SkZ`DytP{!IsmK9=tAY_?1TwC+E<*6Z#?HYMtIdo5nY{r|^{4fLYwePSrka4QM$tl9l<~Bcp=?T|Ym$sy zpTnW2MS8=6k%%0*t#o4^S4}EpWppDZJUT(TcLlh&cyWe5^-iPo&NuRw{WHzjQ;#^h z&h}3G3dhUN+gWKfAM`19CFA=L!VXsknM*CVAEZGAkrh~*H=oPZL>%s4D3$i>T!i;# zGJwz)N+48qCJ~j!oAHY{w3^KU-B&z)Leg(AsMjY(oll1L)Msm+vTl)EWlC{BJ`gGm z5p?P!`6ld?W}hciM?a3L)ueqHo%J77t+^GYRjG*Ac(S!~?*%;`Sn^alA@xeecx9x> zNc}=7a-ZCdVv+2{*#}B&ZoE9B0FxJtXQ;;(dMIyS#$DAEo(*uP zYcPj?kH?#Ap?M(Mqj_HfLVF5tzC$hDZ2+Wf_=KCU!afPIyn8K7Ojf`+HQQ4j>Wg&A z0Vu|-;EZY*pBfm+Q?MuWKNucn&GwTy;V;at20WigG7)_H+)V5RE19>ewdh6kN@eZq z?zc!0a(9Q6G@b?r&6jGWM_iAe@7ym3cxM#uMp3Csg)~BhQS4;4>SuBp*_UzHC3#Vc zw+vdFgTVY2>n;h*fe9kLS*iu&yKzQ^d;?ru?)$Vy7SbDX-X{UX#>Ax~NCuH{@7Q8d zLoWO^#9iZPdY?K*&N(e4wL_dIrBd8@!Q_KQV;U}a^i9K<8z0#!P@RwZoA_R)*c4Gh z4nhrR_L|dGHIF1FFWOOoTl@z&t+m{guV*4^3Hz&=(H6mig%Rt>kow-S-=|} z#SW8A)z-6HQjyLzy1Iq6=%Sdyapp};OKXyXF@roJ)t!?InQXt zDw`54>x61#NB+ZtIH#@8nPJ{A$Cj0Vj3_!nhf@!-QfmdcyD-C6g8zp?&zsBC#8@OLQkFxL>wwT^>ma%tckgZE5~! z?tOU4xzr>4x@Mi6f|92@@*5Z7Nhv90^@~$WtuID@g2wX!Mq_E9e@a2z zS7!Z?K6p0{V0q>#g1q`{hYF#aA!m7|?^mMkonZTV3$7$t?*>xiXJN}2K^l#bebqGa zdvXQ1Q`xB-gVLgNwd`M$qdu}vz?3}g35;BHHL|~kEPoOfM-Ydc_S4BPXU;O?uvmj^!qTk1tJMDQDMr)=b#frdF!R7eV80d*BL{%AujZ)Lu} z4+5vp)-2d&y32L5yo-;cEd_PDPtyYv4^K4kw_@_}(5 z3jgm*QvKa>&-aQ4aCsF|u|IlSKi@_6s_bh>`PehvIZ>XBh{AIuD1Ac@+;1?&N5kB7 zK*JW@pYW30XZ8}!VoMT}8mx&JFQxI=Ca%Y^@J&n%WzD&>mj*srj@83! zFyA`a!0*A}mJN$ zS9w`UUY@{!#yT-+6r4U7hER!l+!tK>I`y@vjlz5VMAQ>ib8Iiu(4M(rb-*jORBirM zwDEoeofv;3FP89!ruDrIDg`;92S8NV^iZcr9}{T{Bp8d(Y4syz8R$d~Kv#thV?Mb` zSpVxk)u2-mY9Hv%fGXi%CWj#-cMoAWHe5l#pf%%f!!#a)o#Tv!T#c}AezfOA3H-O5B zbCu;@1*f_t`$3+tHnXORba?fU>aC)aS z+g@Ebv~q}2NsKk&(BJbCuHd{e0qTh;YzJkS4u%m*l)?BGS1#Gr1 z%s0Z2LrP`n_MK-_)gs#7xljTB-M9S>$gJkxP&%gbc8N!9z4;9Kn#N}ph4+>(bFXc* zNr(<^5x=p+UMYJjsS8C$c6z?{q7;8Ye;2+}{fVlP9X@8BWcNQNZD?{GJ9T(wA zn}C9M8RgQFvTbT^l5z=K+I@Gt%R}V87ir4zXnZPrsB6zvC+V! z>9wQ5#!Nyd(*o7yY%lui5ug(TuWDfTcQtEU8I&AQMxTld2pd65ZZ^O;qYZ&69YzhP z?P+`<-+)%AP-nYb3fB0epZ@@zo_)NCUjAFF3h7iq5!fn4we7#MwSO|{PH3^-+2Z%{ zkLCXMZCe7^d?$nPH72aO>2E@8&x!k{P@c-!uHhGSN(yo+>%jC;u~sWg@w^^3GdMOA z)nC3UNQkQdJ@m;+p3Dw7FA9dA3Vqy7d0VYChUPT$MbVbE!^9FP z<@xH`D7G7O`z1xyur!NCepY#dcg}LzT6M#cal{1IGcZK&h&j->g`j)h@n_u(nI7MR zG2%#8B`0sRCRT6del~1uYxJiw3iz2O*?hj#E(m4f&AkDV9}i-Bp(-}f2n`L4%ExYj z3#ORpFV;1AA_UDFiXA1&p*|M7ikS`3(a(|XN+_4Je{jr5AkuGEY}jytrk4DA=qU{j z5h)hlGW9pauWwM!-mURPqAN^&+b3`1vGV7tt*cj<0u{$^hty{w+uL$pP(*Q+UM_=n zic3cZQ=cV?_!JkIj&R(46Bvp6ZqGou-0UMM8abP}ua@{ldaa7}ZGnJ{vQ{$0$L&#E zg8v}`30N-fdZnA?D?^_6;^4MMna?!CilT+{Rf~6NNqA-)l16uyaE4-Y-e=J4E z06J=AF#Xl&kLGA5bYXU8{q0BRH`rQG2d8xrISzGjjZg=-BvtYUocD&VuKbiIk@~NL z`#X?h{&yhfuaEoxJm=z9z`>2E4yKY^24Mw(xndZ#DSdbkY{u1X%0Et6nq+3qee2Ko zytnByvizJzl3QsT75TuC1+O4qN;+4kQ+d;hvkhT28dnkj1-ISpC<&7*N(vJ*h;BJG zHjZEPcX2$=7|UR)Kl?v+_$;tV+(io#*nk_@qfDcHb#ZfssRdBh@kncXdlV zj4$fqQxEhVcgS|@&;9iGUbpWmW1jt{34S%5(pG%VJ5a$;wk8Ivof5XGz88b(Z#*H+ z71k=+pOCrV=dFpw^7;W*O1*P^?oAWhXt<#+y-A|FVlHa1Fzd%s*&E2spLLmRlk?0$<3GC9fZZ27y1A7!Ul4o2s$V2%bmI?*~7a zFdL&$*f$W!&$qp;#?9evZ<P=u_;_M2lf34=^mHbU!fnn%K2i-aiu|6$vEn9$c#Gey)u>qV5UtRk7-wK?u3hH>Oc1bb;)wH@w zzpE5-DVYhQ&~BhL3=}PeCwgQP+c@*I^ECP3i)Me1U&_#*Q2H9YyMyPRIpMuPp4(; zBHVp4S#658dw>mzT1k)*J)#NL%omjjO@)nt%N+)0UqcfIXcRMl_{f`mGiy8lMwHk1 zk~2JueS_B%MJrwQbXFcqiNUd_{H$_ zXn!%c>wc&|+NeK85Jc(st0AvE)A?}Z8Pk(cWJimMq(ZCm$r2e@O6J!9v%ay>Kz-jy zQB6L>W`j*tr=K5vL#0rmQ*PpILMw#9o#g`_SY=h2<7D(0HWw-d#c)2SSl>tb&B$`9 z6w6Gs$$4fL5-_8ewlOI_($W}eA2=Ebm!)cjY!`4m&jY`HU{3Ash7tEz7DT!v;uzR> z%7=5I*bI3h+6TFevA@DcrP*_5{`H43VlWH&tgbtb0y7Ixqm+NXs5^Wm|D6-@P>i=c~Iy%r& zsI28zTgzQ!N^EMQul&`mC#g<2og{!NL2H|>VLX?J&AKD6of-W#|S zrA$)s2$CtC?DXCwY&} z??&R?NrF{(Q!{IRMN6T&CkhPY51M^1e~SW3@k#E**?K3)(~%KLFzsN~bIMfx(2xxh z^JUV&B`-C)5uP*Vr|dI|iqkDvr6zFO+ZBm>+^b)z@m-g6!WJuPLNTN6W-xJ#tZeed z50U*!Rg{-Q<`929;1wcg#^wV-)Qu_h0oI6iyZ3GO_})=D?l{Z2lRT2n#0E<;-{#4~ zB&6(?6hGGoS8_d}xT)O?z))BCnB;YuLyTe?7;;QHX{Q<21lM$^5@0+i{R zOBZ+!oy;kljjA@W+Vs%rQ;KNoMu&x2-Hp}nt&J#LTQ3jUmpd1QbJIfu1~BK#dfS(t zv!kgOO)3YhxMMHinpm1<=hT<_PG*juhm0@FgrhUGEa_TUr&ZU-Bx0h_FQ;(KE$Cfc zMA1tsZJ)-WqTe0op1a(_v zHCD&oZd<9%yY=k7Tm9BK(__B-acoXr))6C*h>jER?g3Dad!Xfx!RkLj9Eksn^U&Zw z|AGDtP%*+zesT476Wka-^H2y{D*e&S9d>dk3ZFM|`}%5eZ%C~?^4o6fs`dl@UF3)B z-=E-3Z+aHe_*5b$ro3pGQ}5}STQ4+?8kL!Pt3w*1qsUrnqc)qd>f7+`;)mBA$BR4- zahWrc5o*lat9KBwmY4hdYuW6oNd1J8uy523l}e?S|mk+h#Q3Bl~NY=XjSmVh!sTs{%53qGgT->*w{fUfblDblN=}NqT}7 z!TnEq{P{=wn?v;)GB7(TFi}&O%+|<~N_QK^GeS3EzR`!W>o4*SrsGS1kXy#M`Sy?3 z^%j7VXNlJbi~pi;{|(c~-+*(4fA+Njh|bvZ&>RvB7^%J-Z5g2%xkY+-jRzGPyho6*Yqr>J_ z`_1SyUSctpkDp23X9^En{-{l)-=A^fN5y|hSp2RED|M6TX%884hG&CKmsZ$97O&K0>?ete$Rf_dAM zdAn$gKj#&{a-`(|RX(ZmKLjQz8kkf^OmMZ@Dj1>%?gN(}hNF=?O3?@o5=auYJ8_y9=K=wSAw3wJ3Ak?gK_8d>#_+reulK=}3zRzZCNV@sdoz zCdcnZPJv~QhW0w9%Ntyy&_Z*p+Zu^eH|I?YJIbFY@sv{JR#W(TSfU@hGlQs8q`{KI zx<_j)c1VNPI8F71@9d39i|M4Jzt+lqDQq$?Pj%X?s(@qHwz=wD8BZjJrvVrFOg<(r zy%%#?O!cF@ACDy;|5=@s0f3rViJZ!l!lL>($)Sdm)eZ_1FN%|u150YX$2hQwdP(gC zLAtuH$2XcxKXQ!yGV_-{bW?$}^!5+Yxc`Ks?q-((@i3+!jE{Gfh8RvS%1w#dN=OaJ zg-Q(WS+VX~bS%yZDJX=0as0fpLU1FUS_{PF%2G`}zC%z?Z|f%uhu4ztL;Td@>~#m} zs|gAnASTslm%3|R#UX~5O+ho;F%BQ2ngb`OTkOm~O)bt9jTF|`8*6>Nh{bc-M26JQ zbbe2n^kFi`I#3NF!xFT6&eABF$NK6O!Qd}j0$M`-G!BoXd6}HAc2w^w5?>JU^nn~N zA2&LKv`%5i&(PyBwo~DM?{2 zi#X7$WIC|has%9b_Tn!$&41IvRVWf*^RRXJ*N;Cy0m?`A7(&1`z==T9_l*zDKr)C- z01e#9YJFmW^B1WFgvso}h}ctO&K|wf&iL1Lg7CWOgI&(HYzkWLt;4j$Ha^WH?@q}I z$lQG$3RUalr#svH6{}rQS@uoe*_Fqd05G3t3J=MXM>3mVRFRQd% zJ@F1^;)cT3opSvpj?@w60%vyN{Z-(SQx*h47rI!~aHZf-_ZumZt z5mETTuYbZWOi2}rS0*1$5S?|x9SA<9ZqyLzkzS#!U(h)iGxPYK0tqh7r8`VX@uSxq zaDP$?seg&T^7Avvn4H3=xh?q$i3^^)GcSGNEW*-xDLyVaNjJz8Y(+kvzDGK4U9+NY zunfO9rDs*NFh=5W-k=`D^tT+pvC)vGiko>Dy$C1_iKMfbql2TlCHI@A04eGQB=u`(zi{Q5$7TG9@{` zJ-h4`W?8sC{=HJ9ce49RLt?ojd(-lg97Q8yVqh8rtF^oCnojSg;H1c%#gEvSIk5s! zs(P4Zt$=NB#A$zC-S&8Lodww2?SU7!vfQ^-%N98a8&oF;!Sz|0RfP?d*4GtGn`hC4 zOQbRXZBp;ZFQ{OTu;hqEML%Ttl>Z(zx%rnD&}3BpuJ%j;tIQw-uh0h{2l5-vMbC0W zK<7J*_XhqL_5jmV%-Euetgr%mjHC4A)_yLVG5?PLF!+PdV6*j$$=$X&G!6HJMw{n_ zsVc%!=WiE_8*RHk4J+g2J(|H#o=VJV!tBtod%|iw!_wfTED+IEcwdTBJvB9<@%6Lv zLa|pq8{1}~2$ucXobxVv?nvCl0;Hf+KnAOIs_vS%XYnQqWEYB7nS;#)=Jq3D{YjT= zcC)TX;7Fl;?_-Sqk@|>+pERD$6o)>JkFs&Z+cmepNbR?z z<*BC~;snQnqJ)Sg3;_iikH*6*q)WxrUuGxmy&fNfjYox(ZuC)&l6Ca0u}5|B`K&yJ zT+a{BO?qavWEJK>^p5eSAD86Rj*L|p9SQk=R7c!DTF<&=e`nS%Y^sjoeeOANY+Kd& z1+-E+=Xcs1D0#seT~(#Uzc3B&misA(yGq{LsUypttgqhKTEt$R6$Qo6V478@f{K9$ zE_oT%Ih?AeZhph4kjG2u(Sut$CN96|L+1HzD^8QY3vV9|`z2yP=h11DY;%l~A9xum|l(ROKXA=cWNJVgxQdAv@ffp{I`a9mp4xE_Gu}+|^ibx|I=dwj+Fh)}dPAL^0UH8+;s;a;@sys0E@)Jyo8k zFPM|al~(N_?mCaZOulW=u&WhJl?q*4=hOunKQ>k-s|IhvDo+FoN2mRxUpZri3|G!kww zEUDYoy`Zmbi+MM|?Cwb%EbUfFP5YJ5-GAedAbVOm-z%arM$Ij7VX~!hyNRpx{M>l9FFi;@fAO29h051d82#5FAwE8=g&G-#! zKA$vp056lK4JE6Tf`0)*v2CxRUgkCJ4`g72mX6{dFH_9!_ek)>XpdOf)1Yr&+&wub z!|pn!s#{t+HZ>*g)~$+Y=X4Tm&&h%V`N*yJrj(EAopL5Zv#_s>xqoOi%GcZ{{{tL} z2n8fHJd4jW#BN&wGg!abl5A~Hjc?XdD|L$4)9GD{s<=Yxlde}6nb@|d@7T0>o3P$+ ztWkU7sYx02s;Ct`fXGzfxwxyo=GMhmCZ$s3j+uSb{iU|H`c`TmOjPdLgtcZh7Wy)| z<)_bv_Rr|5B+Fz1hk`pY)M?v5Vq?h&+{L>)?Ghu6WjHp^#2zdx@E!gpk6jhvO6nt0 zA$T;(mMTHJDN4dT>5csn7K|0QCU8w9BbW_dD49>6%=8x7EPDBPw90N)PRk_H#Ws4z zt(ORlP}_DDgL}QajA`TeZ!y%bHp?#Du?UuU#|@x(fk+r|OrkP$h7|w73p$_(Wd{=N z#2WPWXxpXmt5gHGG4qwweKllLMiM~{2{T> zPwl=2;;!Atv%>xlis*@a zyDs;=H-#S8H|e;)@h0lze0Im&_u#^7J7&2)9UEXX`~N@I-ZHAHEo=i7L6BBKK#(v1 z=?2M72uOE#gLF3tNT+nCG)Q-McXxMp!(9u``Mz_%aev-1_F%x?z*=k0x90Q4^IZ%s z!*O!iIJ2RLR0hvJn%cTzNHLO2$bhI#W^YxFXAhaGe|N8u_-g=-RK^PaX0W$0oQdq- zX!^Q%R3wjr6d7UTp4y+R-QKN0j}j^kDaYD`{L-)6jn_7O`ER2Yd%lq65~L-^-Wtw$ za9qOm_qRbG6n=5yZW&|1(jWV-V8EQs97R%3Lct3Al1M!dRVu@gnrIRsHeQ|1oFN;NRee*(x9M6eBxIzqhdH^c*{6^ZA+sgn-p}O4?<~kb&h*`>H8lD z1zCnN1{cR6JwW!GMk*CPkrtPVSc%Q3>3-T``z}73T6%3rGEzW>x2oF4Zy%c_l3>H5 zKy&MnPY9se0ROKrWXHaOlE~M3^Dy4Z=XsNvcdc5BT7dg8FwD z<}z9JmB0cXHp`YYdy5pfs0!0nBs7}9xRwVLI&j ziS3BVqIxL)!q^Qgb`kaz^<2|<7mF1Z^&%_d>&?|Fv{sF33NLg<@?}}6HC`@mIZ;){ ze`4kMl-mL~5}v8>R?{Oa4NlZX^l~c3AUiiTJJ-LwA2y4*Ln$*jOjaRCR4*{s@|h^3 zYyfI}Q*8{@Yt<58iVag>?9uV_hJ>{M=NTPIgpte7thnwIN0)Y(y3qqAcVP`?e`?}r zFJdkO)%qIx&N5k72x9CF;)kcGNsd{2Z5WoNZQVuS8a~eG|Irx4SjBaZS1syQtNN){ zk1cxhTdhRH5~YR;?t;0q%HEW)imIWzp`+@JPQCE-(Px+QOe@kKj`;TrCe1*A7DbRL z^334?#^r2*F8b{xpXD*L&7Be4jUsE+hfpUWsD13!QXHXEclrA(h%8-3el(dks+rl0 z2BR*w<3%!sYE=~gs7R-Is)%*_z#-Vfr5n`({I?in%)-ChhjqA-O7y#e{~E44b+ zt0B$W?Po-EU!t5>Qjo-Rq4O~kG;@ZOaeC$oWY!HNtLE6UHg=XGza26CWo0`%p(}5+-vUrfOm^#?nObtDQPruT5?lWMF1CwnyHsvc zeW80YWMYVhBdpQDuj+a6eBP=|iMxO=hRYe&Dek1E@?$9@KSdP=fJb-kT{qk*6Z>9A zOmZf9E%n32`flN`?)G%immU71su8{N3MrtpLkf9S`w7_d2Ge%lqLfTvZVdqN9!tBa z3$4ImjHZBN++`Bn0!FZ^`+$dj9}GS(uw#B3#_LW;SUW9cQ5$;5wk{W+$Jh6XC}>bCuKt%x1|^(oYnWZmKl@(EeHou#TzSAY)FeV% zQSGkEe`xE^p!5syC=)J#V~*-AZcG1|@CQ-d?7U+Ho~Tr1wedIFdx6}{VV2SXu6{9& zs>ZIa-{dI1>Iwl&5+mfFi6b=i^D{p@(Av)ocZsW!x~vQ>aP@z6xz~8V-=-kFDiOY@CfsTE%hF@u66DpiO@b7)$r{6CYn;yWMPAJy+RWCun!)-$;nM=0kMx3M?A%gtb;GFxn$qvK3z}zR$ z*r}~c5wxsCCDsae2w&JDt;ltce-6yCMA+Dw&aT7wvU@)WrtYER&TJ5qcbaK9*R6|JEq0Rk*x9 z6>OM>ovbw9KQ-;QV2E&Q_=WDNK%^2ZS$b@{`hS&^T!7VWHxXewfG~Yac75T+9Wv6V zgOnR}uZ9tP@?n(MgAY2oPku1@HdzM1%6{AaAohg|F4S7aacV&2>Q@orVk_UB`26LL zMTuI;!QJS~T`E`Zn7GTf+GHXPFcZ%AtC(t2b$U-`?A3HMcld0dd&7Um*)7lzR!N4he-Vq zzNop-E!mjnA9i2cu9|?Pd*G}pGycUhKF7PCI1tijJoO@qV2+`=5Z;?knIu~hl6g4F zwBIhOx^?nG&Nqm=JcF}8;8yv!7C^ztVe^_X)fwI*Cy72ClCCC4<>MT$mKUr&Hi>~v z8+_b75K2-x92dQ}@bFgvtZzjHoAyvU6!!n6j|Fx7uo2itCw1TRLC+=@XJXd}2#=q|`szEkO{)CM3IiDndbu1kZ~?sz7n+N3#Opj%(#;n1MzK z^-2)JtdtRMf8xFYB}dTIJ9y$VTYLUzM(yW@cd=i?OM^{<-@ydFv&jS@VRP*zmsFCD6l-J*m06H}y9#sqvnpa=wkOar#hDTN!T9=Xf<&lQ~&fV>_d` zX$Zs*J`oI+*M-}xVkfO^_!&03$GNVveZI@Eq;NVEJtDwfT!X}wcPU?-LG}Ol#RdbI ze-0S!sz*zKRNbf!$Gj)oroJGP%ovM|h0`=T3+pARU&k%QhtU_KV8t|lI`P0|8wNG2 z(&#LVwW1mMiq@JjY&Ji7Q^T|D_)?wQZo+QZ2#0`RGq9vca$Q_wb?Im>aXyZ_}4XIQN>O zp}VqIVGX%$eE!v~vkUc%x6eNP8{7LB_Pyj2<;LEw;A5*w1r-?vA{Up=;V#FZ}OHkrsi`wTLuBq`{ zHkP_XJ=c3vava+vE>WkLlTGgX^`xjbDkWhH4}_k<=i#ckBkXX@L(u(smzkLMn!flW zNZGf$a5vvcOjfTsl6Xv-dVT`dx*lW|EdB=C?SEfhk0jLsDcaGG=7sY)Dx~w>^KZ#G zXn}jjSVs6UL1_#>M$TaGs$)|~P_Zqu*&X7m(>k{D{yHbycekO+HQEj%eU#%68+Dgy zy;R8UlP#$7=92$OSvICJ$$zyK+$G4~mq`BAYzeRWU7^(8PrEV-7pLc9_kHpiFfzlD z$25T?YB?*jVeHa2sC8m61z0Z?-DKpE`bX}}6W9G2)L-b+U^UW_C(FGUg0Y7HD-~2=6SVghUdokq%1$-V)$Q6 z+nWWk!Z731#=M8bVcy>ftdH*L9+acsJ5&Z%`@+{=Ny3y^5sto}Z1FY_U*Pb~ivF&8 zl}RJLZ|6_JN@YpVgJBE7+_l2CVsg3r-~vT+BxPsm#7YdAZH(flvfPwB==F988Nt(I za-3xgk75zqh;R+ma1f_C>)_bfn-iBE`feyhR@QeRC-6^ref7&`7ocl-aFXUTycx?^ z1`d)ysSJaSI`wwZiCIS(#4r#e}7c{y}SCVnWbijSR&LS(l!NXH*?>n}3}-SVkWEW&kH_choXa&?^ijIdnv= ze&DzJd(pGVdmNz3^2kE1*ET7p1qRb`_LOmQ>Z^vaNm^Zv|9E?k)vD=Q!$`lSDB9Qt zz|fpVK}q?cH}S4P0dKb(Mz4g0`)o5Wx%LuCZT~hLN$Y}OU)?T~AQL6GYss#zFleDe zNyBpgnIi z_gg$B-3OzTJqr}Ma;H}O;POx@jX!sae%4=r`o4<%0nM{(W~ZAm5*T%l++5^whfnK4 zvavJC%e#8-=Ujg+?A10rte-M;RynACk?6;zFO4mfAN35bDv3Ccr?@>D@sH2C&}r|X zI&!Ln)=~*Kr98zO-;71n?}Ri4KM+SD^1@ED6u@#dkaRMe(iD-cAMIS#Go5BS74Qc0 zIHGvJk-8j98W1V-kkR6lP3hfQX_yNID$W=6gcqT6ST(Jw;$x; z6mhZZj;XmbVZWLNT`Dwc!ukV9&95o_U%9SXxSoXAky7LO)|+{GLtAH?^w`!FV~)P& zs!63U{JVUnMm?vrQ)gh>cU&#;zv1XGvKR5yMPQH_QYZ$#5LS^Fo||ZA&WpBdbuit&HLaaeu5G9Jrhnj)#4dG z84Z;5z%%Lddp`CFZvzt|(vy-ZP5qSf49O}DJ)G~~qNz;A9ZY(0Ni!9yk)yGxe#=S; zm9-(mO_=xE9AuOiM-N|PZ$}W2a>3l(yxIJbabrPxwMT?4oIEkJvc#TX{x`^Oa_&&% znG}xKIw^wRNfyJxt3#(vq3`zWMW4d-JQw%$8|8lsZ4>ItZ7(nTxhQ`*d7fXCO_g># ztW%uZi2k0t6U#KiQLRGG#$z|HuC*&(c02CuYnA<**EoLO`4~!`8`BzpN>U=HYZ0~O zcq}&p8!Q`{CWGN$b9}8p4^3F$lxPznp7jVqq}-qXHgM6Z9M6BX#)7bYU{>XiX#&O3 zDq5PcB>Y-V5a&zXnsmAiM?l1SMSzFpVb|BkL#EH`X)x$Iq+6&reLmRG_a^Xq_@_Alx6n_C8_zdEl>w!dVlU) zl^-;|{YF%`VtDwklj>jmem6ImU$C@8*`A@LWZ~fqmVv#HR}Do_tyg4C3kA5wW9XQ2 z7L1wu_e7K+ts)W$Xtc5|I@SLt-T=PYCkH9Ca394T8wSrM#F9R%`~6e+_w;*s<$z}3 zmsie;J=${hWKbyvn}-{K=|QgGB%y}S=>R*MTM9^5o}&2f9l-Dh5W8Us0&F$9RA6N! zcz|_V0xs0Qq|E;AsXF^H9R6p_mc`?kEk3ZolHYhsXZb%GmCj1?n3W9LP@;_lI-}T;!aW7_Ei2^zc=k~Q5F^vE2|j% z>(8YuxDKpJM%LJ+3*y9p76YBmK_=8^;l_6O-A-rYlT({TL#`{!(Ee-NUPC17d(ry&IEBdEe3Jwr5} zP7kMXz%ShdO0s~3>;FMIsW-vjJAKpn>~Y6H-`lD55)hAX`AQvVVF~XJG8%edYBu*7 zhX=L2{YzkRc4`#pC0uEu!XPtE_dzCtUZioNa1w|LCG??sn$AUQKkg4~Rv2)$I%ite z*)b=bO7Bw!IzN#IWDopZQ$pK)X;!VYSsIohG^IRy&KyUZ^5-Z8wd}!EUkeprqHFf+ z%JVyy+_B1R(JUV{-u$MQ&#z}$aW*SrYlv*G1kt$J!WNA>e<(}`*r(m%0C6HAdqmv+ zkxTVxaC4*41-%{{^iV$of&;f4=Ko)z^a4vQyuW|Y#(EN#I}l%UNec%in!>=!0}=p@ zL_P;jN(Gzz;p$*$pMlFN4vOwEhI@V-4pfOQP2U6t)lJQwjefH>?Z~)^X9C6MLFDf= zTppdbQ8o!1+!emw_>Q|;3G|9D;~Pu6?t5RFw{M$7DfC*&>4Zh92>hr|31-@C7JxaYuKPlG9 z8Uuv#(JV??q7WWkb246J4@OoX(-43SXlYQaWY4$%ecXSzwB^LxAC0^-NS&${zWV-u zB?Ztv5C~6E{qQd7DWg;eL?S1uZL3be5;uX|8|qy>&cMIK1JMBd$kJJUP@DIGzYByQ~~@{jqJc~ zp5PU(N&|PIK?2;Rh63ZeQs9G^V1oK3d5$m;IX#|$@Z7&wEbKQRg{R>A&X%Di;7$M6fIeA4kp3X3x4Jv;f1gPm28<+O zFk~`5gR@>LfV-8#_*Pj|!99eUM* z+UMk}{qt$TFTmnkN0_h?K)_(ZXZ7HtVgf9g-FILSoW2iQ;DBp-2`*swn7X35f!yaDRu)x{(>I>1;Q!6Vxp9F8FZsBq54ie1 zD61Dg2{XY8P9flrQF@BIl7SESl7U<1SC`Nc{O3Z4uK>BadKI$vNFVv{_3uF9gnRLD zj>nzKLS(xo$ix_Qm-Xf=fUZO7lle36>i&XUw=714kDL!po}4GaVlq&yU_w2ef301+ z$w>CW%^XX7#|k? zx%G3L{eVG#QY5=haK$wgCUs%)&WTYe733K&PLz^ zzL>^B6pL-;p_xF!?uB=9`ED8Og2SZUR}WJ)2bWp>tUzT|cI>;edCyycNHM%#9j94%)-(Duv;;EvrY_K&f+%OO02h?wvFC1PFSY?H4{2>zg*sK=J#ZWpJ ziGp3NR5d(i-V%X|njkD}hW5t|9Sp1*}@%w*B|3_dRwQN=xSiNH>@U2D<0_tn7erf`2o$ut^r{6{m zj`U>~H~L0ZL@cWF)b~yU-C`ACb9T(;Gx1>q?&;QfWs{{zyP{J+eiHGV-)1Ox0)n{!P_~15bbhA-`;W)zc7(AiO~Rm0&l3I@>b=Pe6Z*~DQM>mT@sz~p zhHA-qNur#)6PGt<3c^wo;x+~l$n4z*o2U!p<|IgXxBM+K;$?qEU$4MRV(z`hE%x*? zbbJilMKwgxIkU5kKBvgBDWT|vii8GM%b>7)CKRXn?IDTm47yKR%maB!{Key5qFc>6 zd+w2Fw|gmb@kV(KV-!TI6Zm&aCv3$Q7$;ic`e!W4GBuMAT~PNk4MCYMnIVxSKN~LF zJ`Uen|GKVf8g6bgraC;nXGD<}`|dyjlrjOTTm@+C0dtY?zq$!3E;TKZB!<=0s{@rXum*K&!z z{ZSUnFZ;v!)1LviwOUWF9vc*!mZrZ)a{;!*{Z*FG&YuL92vX~k?lBOPMw^KlTJqVE z<$sYnQF9Gz-0Pm0#}PUT3VsN94u&b+kn;_cO)E`==a#K>0XikTfRD^NN@8f>CB z-)*M#S*=u{21|#~>2x#6$0iJ{uezY%-TqANmyMkjH9H;A-)+%u7)jvhxIn|f#u52$ z_Kb!`Bkz8{q*pRNW4Y4~(PDe>-E$uy6zsluM-+dOF+5=d^>QV~iA7~F5_%LucgAyO-upGZj}I$P3KuKu{kAUA>D2m$|?+4H8lp?o{TGH98y2oMoBD(jC=VTOekR;(@h5rfyIjM=Ay)!}y9@%z`%QQ@eGt9&lio&gExvTmZPWnP&(_>!BYlOnFHSyNH3UH_zL;lgX{F;5RXd7Bi7~gkHubQ%fH$eR;k& zNv75;arJQ>u`U{+X`aOb&w}_LeFiv)AH#8n?zty1Xa@&PXf?n}x&ga=2#Nt4F|*L) zY5@*^`EP&ZyqO(^xzNBVqtN};EITTnT12Qn%u=;V`r1zCQ*_d4k9!IEv8ryV4t-o|49Cx7?* z3+9dfD=4y&%&-BCd-DO&e(TZ^M^|=1rahw1M6tvV=dOjbW{F;CD-@mf##<-ycdJhI z7Ymx3bLY<+egiGjr{RLRfGSpiiN~3@VJF~T|NCkON7QM-P>q18r^YN$07f8R17gUS z=q%TWQjI&{cU+>@Nk2Ib^sREQSjn3B>8-7QE!`t7QoRg`6^i<*2>+sNqWtuVAann> zg8s}r@60`A&@?0Y+eLkAcgttNEdgnn6HK!rGOc zWolN4Z6Y^(lK_i*s1^BlnPN)h;Zn++{;4b$y)|K~_Q3zo{#O0jDy#2Rb;d z1PS!s&;p`BEEEmSE{h-RA#MXSX_o)_%E!*^QTGqO{}4daNghWt8Kb4hx$tW6Kf`UJ zv(pq|GrqAES5{~>up}OHzPp4YdWC@{T4-ZNGh2=)oI#lrK*W|v)lP@3Ev(v|vF6&^ z`*&~m3v=_iUo2H#D#A+wQu5HkMoy&p2SjZVg`W6UVcO}6lM20l^WrjSap~dMl-1SxjL;-Iq`- zZ#^397onnJ_A~INWBag%UPobzCM&}8k!@GLx}~4DRIyW*t){9No;O|dpPQra+}ePX zDEi}FDe>;cAb+RnCea8J3dR$b&cF}S9|_A+O>Tu^$9~qD$@dyh_tGk%(XA{qc%RI; z6p9fE>$&^)u3@b`vlQ7Jc)#J5I>n`8_5H21s^T7|feqIe%j;aCJa%6-et&2+xX#Ww zNXs376?_ZBABw)h?=vHKu<_&N2WC1L55*|^I;=^bDX#-Ss2IzrTlK_l?eoTX5Wx{5?vB?#GI49oxpu#xOd-1oHK%y#;?fu zPab=RO%*e|FmCHOJ-8DS6vI4hdON9PO|ggR9&dOeK2h(Jvrm|ZxkHWVR<`e^?B_UL zIxglbn)#7Xpr^YHHnM+YWkQ`>$#hxUGtBm{-PaMPTwA+&E?+^y&08*0&L~#smf0#8 z5kJD-0TG|^HAllNQ`s_n{WH5+KDG>6<+><+_WAEKzI=HqjI%aoHD2o%x{`H3V-164 z#t(TWrJmlG;>zX8wMH7I9^Q3lc-XLw2uP6U@hdYFvSD-s6-s#~8t-$aqr}JRe0bgC zZ3{0geE-Q{27uJV{1ZyLPZYP67l8EEUbNGC0Q%kuin#XsHGr1=`3eZbtk@d=0rEm_ za6;~q!wO6ZRl}3XuN5z+lVzo8ZFwGX;`m2IeUN8Trni#5r5=+*gA1_^^uHAum5Q0!O>^r zXUw}^C5~YHJ4?nos)u;on%v99V!ZF`HLedZJLB4+`)g;od!q-Cw!a%{8x+aEg@^Te zmkZQH(~j8Dn!H}=KB!{Pk3>MrgzvL<^|;>CWd7VA7;`uw*a+vx(^y;gz7(BQaJfY# zp0ZAbKXofKgLW+^bmJX&2y$|*De!`&jixnz?Rt02^9RlV{%9ikL9Mf! zJKRo3pcPmlkOYc4hmyF#BS7$E+4mm@Dm56AC4h}Cje5^3FjoU~r$!dErlb}=mEU}7 zCVfcAL1e$(AGHu=0H$~N8coIeq^c9E%&4s`XIt)WySK1U_yN^jA1E&k-ZO)2G+idhUG{dwn|pGb?lwokGguwo_1?cE(sQ za;9nMgfb}6)*^j|hi;Hzw;b@fMx@LD2=M5&+EW05?pR9wE&#@t1kY^=0l!xB1UK=4 zaC({#g%lWZgSpv`Un)c(py{>))6N?rwFL)7^2du@U1FSmobqM5!2yb2OaLoQ@WCJX zuPzq&8-`Sp^9$V(^Bm9JLw%8gK9X_{+{O&hj;ZkKo$=pZNNsq#$9MgL?bAK!ejob$ zqt8(=!3R9j)G6O%3bBpJSG(&Odf z=wTaceo@pWs1b#dP55J;nZk25U4C9@>L~jdUv19{i>p@1k;{tJ^Eb!x%v2sP-M{BsVHZ)kWFvTbGej#MbfSl>tlc)-3-QpT{%G;QYgz%1s z)#7|aVM4&NE&(s}$|H%r-_PFsTiL{jyiIsZRPU*`uSff`i$Xwbvui@ux4CEx`s`$bHm%hl;w!ni|rn1vIgBuY%)QZsPHAzWF%? zc6wiALpiEFLXr9fy~0odJ`)azy$;7xoeEa4TB_y&VbJTgcoDizfl|%+8%Ea$7o4a# z;|Xa%3G}Y3t@9jiHR>^KA|W?Z<~Dey&pntrt9lX97{XCF6(ehis3`j|TkJeg2!x~&Z_;g%ROzku29NDc17_qJdK^(N z%2?${z320?In!m6#lJMNOZ#)XH7hL)vcny$Hz{S!tR0W79Nk}xDVmH%^>}pb?FlXI z^vUgKij9?BSlDOY8F}|mvDt@ZZboyAaPFfslr+B=Mzt{0U0D3GZzZ+vII>dKF-R_$ zUf|tCq&z?2eSKdy&wotPG8k(&AY&&3w{vWVTU%qkPWfxr>5UWtVOKzEnVZ*zzdo}W zJn^L$F%fjA1$=a@;BKv1s>Ll$(vVTSnwv=G8m%`X5UgXkC@>Jwse1L98?Gk$`Qk7f@b2zsxg zv;|Nwse@z7k3T=2|1VzwbUgiHB$3p5)7z z_SDo*Mqm#ow;wuMycqM4Ct#Vi;1Qy`hwTkoH?_VaiF_s_^jy3r3%8}0nBNH;WY#B} z5i!V2h-_4Fy7*lXGHBz67=?0N@HWbst}pJ2Jhvo@y1|sy)pq?oam_~`U&a2Uyd=+Z z6RJ!qJWWR)oRGfdD;)W-FizbQ*F)EVADaxVv{b~NuReBt7u1q0#7-!3N6X(korEpK zj?=HZgwMQ5DE-=gZts&=pLiB`Z1=-6GOET% zm5a?U3pKM7e{VpOe3EKI#lE!|2+lM2vlfJ#CsJd$KA1D+`Dv*Rh$h}ZFqv)J?E2b1 zVXg{a-}M+i*i^p@wY~j&%4A+u;k)c-Ln&RZQT`d)K1*snbtXF4#29aT8dGAd?$?ua{-`|#!Z>vo^oW%Pb07**p*M!2oL54xWF_y!RZ0*YN|%pGIW#ebzOY5zk;=yo?Y2Ip_JRUUNf=5G=4gs zrG9M%!E^XN5b&9hh7ad;9b*uBjZ@n2=8-e?&;_#%don*RZjhSd``GW0@b(`Ih2=Fx zRzG`at=y7ObZ$Q{ygbDr5TEnTEeNik#uMff@3()s7VqsFToU?z$}=-N@>)#LfJOOg zDkz>S`xWh59$nHQGA-X|{D8Gy4)V;45!Vs|y%2FPgIVKMm~ zQmiIf0|i4YZ*R3j1^+oHE}nz1){U;k6QbRC366EVRK?E*GI)!0fQ{`Q0R+XY0RY!e zT+}qSfXt(M>dOFcf=t2e4+I1Vu6@sSb=Qwt{a$X*J4fiYkl#vS9?Gl3KR8+7XXX@8 ztJ5ye5g-5HJnZp^pZLp(F+wMM*vAhr@o2D`V&Z8y^7iQwUs4fp*waCr$$iG18`e0R zBy5nK&#DPBnG=2q#9eMlGRW}Wd^N9X#r%AV=NmRbXM4ZAPbgkHkN%d1lW@CH8qirWw)o_CrT(0KJObs2*4U?J8_9 zT*VP&;paHs!FamV(8Il)y^aK=?f`GC&lS@3I|WnR(UeY-tKZ`ee${0K$LVD0SuK^~vaH4p>OU9^Ef1}ago7o~KNXP_J)RK6Pk2qszBvb1StMe9AOfw}g zmZzX(2HKMUJJa!F^A(E;_ItL(;?+iylBp@GQagnPAk5 z^toRnOS+AJTlSAzAmW}4O!9g~%iBy^TYozyB{`K^m{k{Kx_2A}w>EtnY5ZvV=G@Y|6(<6%` zSiM?voYCeyq?dKJX3R~B6%qX7CQngMoq1r!no`irWP?Y#ICc?anN#Vo>HkAL#gtq= zvA10>wKH*BjKAsGo*sp8EZPoElLkwv98dbWY+;4jeSTfMvomU&Oklm@kGmGwo7n1D z5leUbA3=#(4rJB^r6cy!#|mn0*lKDlQC+t9hH?}y3J%tH&)LIIv79fC>v>K}S};H8 zEU{4p=a11)V9a8YPg2QGj_hiPg?Y=8)w}N6I`3DD6Cll%lECEkwuHR|qFW%QrOjPJEuktC#%KLSd9Xpw`SEc+TWb7?63K2K>o zxVRQyhZo{GhQg8MNvGyCwiV^#C=gT=vE{1p6tq&^0Xv%OSR+M{J|oCMQQMt3?k zK+L-Y=DIFrEx^fltzho1RhcOp>}|hC!vadl7nAK|Ic_2H;aCIV)R5aV()e{3WdsO1 zHZE*>AcrAt)WGiYWc|gIW1oLCKYQm^HxbRw&h1Dl7I%bA9tx{mn#Yeahzlj1SJ0$3|X#n-O+;m{13G`j~ zvROm0u*a9E4K3TAQe8(Si*rn)lFlKYZh}uL8tSnjb-W=bMQrsLN?ijFm(b_vW#VTB z1%SIUV)`7C$P@>;Rof9bvD7kSE<&;zvfJcUy{Zhn!`yF3A|3{)k{Uh0lL4GzUAodg z5DyR(MuR2b@s0kE{7F8Ig)dC7S9?`o(%})Y8nf)Y2~&tg7vuH|`lSs~&fk+a#HL|M zruztGX-7|TPbrBcN^YEBHBmM=rYxi<_l_bzYRWk$mOV3PYfG#a&<`{6RTKBwK(?AM z0UH?JuV&Vh@6trCDRG9V%x=7<-UM}Fxp5VI_%OtmTpdwttGY4FT3}f_-}+m0Q(BCO zR^tVHw!eH8%kQ_jXwFNc_vNB_ck`~>sC?;21VppKM!#Z~n@e`*EPdQ9F|!S~(o*_v z26lVg(#aK)+9LA>dgCwyvhx<0o}bDt6lULUe!`0C=M=7uoBWE(z-lXXwnU5`9&TBf z9{jPUX#&kY&W;5Vx`E*tGP`knHl{S|ZIVUh|0&!>>oZG!1}rOrj#tqe9o{2_sT`aH^|msb8@q%qy#JlP;(SeulR&( z{eMNfgtG^hCXlADI1!GUu$EJ@!lbA9#k+l=^X&9?e;JpZ{?Peam_JDU?_SF+6yw2; zU;!(7JuZJ*>L|JW*APNfxL0!qAFF%5Nkn)sQ8|27Jb1T$;Q^#R;R!RrlQ0;nRDzmN zsfie07TWFT)#|AiP1y3rtEl4m zsxV1;%&~#4k`6O3Z8Y4d{#CaTCvi*P)NaYx?cD4JB7(2mz}##UUj?zFfs%+)xrEF= zMP6QpDhaY!`fEm((D_6M-bZL!{Qc>WOCClFB;w42&jYt(G}}rA_wKD_eRHIpS2C*h zlkQgupK9+4I-J~QavKzCBC`3YAsjiEQtG)*Gtdu)w{j;z_H zNlquY%=j_wk%e#WZ~1S&$`1GI-J}I6hm=6!x}_|wl7IiiUBHd`j$d7o1xJcCi`_Yd z{f6>*Na3pJF?WpyB0*@jdw(qcS8ePXfmOQtNl{q}Kn{mL5oYN--(e$b(ENhc`MnA8 zCNUpTsQ(b4gVS7?z$S7LbT@iRM$)UqH&SYEjvef{VEozUwZ9LbVzq`M`}#WPU^)fql1`{ z)`k5iR)i+~PD0zOkzVD}pecCg-k^iDtjd5nIR8q?HDrT~lrtehR~g!?TuJeFR3ole zU*!DykGhTo&*RTsdd(R+nG-0KMigp4BN?0GPbaFfpx|EwlHrn4hIrAC2Hut#tQH9H zNVvdsqezI0x8ii!-x9N z3Bw%cS0ka_%N4^BwV9pLs&kVjXQN318EA}nQ!N;1r9z+jy^Dv{5}r#T%tw?K4R45l z<}Y380gFdfI)2>ScsVsUdzC7L=H{{9#GL~iDRzuvHVjH>=1Xh0IFGkXMu)H>LLnzm zcQjv&pRzu)#9+iAh9NoqbUwZWlS0STfL;ir15uo4ctj`*n3MD&!YUkvMB13H{F$p6x{a>}G2Bkwy7w*u1jcRn7KN8stTm3N#b3}q zb;ew;GTAxVBkXYR*ez`wSQP&Wj!dK~Khxprf7N_)+&NdBh|j08+&n{kbyh$niK2X$ z@2>HJIjY*{t99hWg9-l45iu~HFFm+_31n_odVfn`!c`5 z)QPKm#4>alA{G2q@*&P|Y`GO|-D!x;F=Hn*0}m~45qb)oZ_cOz*G0bKNP~H~^}x~D z!CzenLmYZ?X3bVY^sBU;?EU4wsXa6Y{^1$M`xt@V-H6+fV7)gI4@CU)3vCa_CQ4v! zHL$kg;Mxv)h86#B>SeJBJU@9#MVt?=O3skvnR_+}xgC5QjhpsW#(R8`;wYV2j7>f6ZVn7r$DI&y`I z*wsYtP{;n0rKXYF;})rS%9Hvs8brv$ds()U@V5ixA6T;@q(>C0yAkZpZ1pDZ?_U^^ zcXUhQDJFG9<|~jZ;0Z5svO_^zqu1T0n4(LQeQlGzCR!`npVDEw&e!=I+y8pO(XS*E z;WF5^|5!p}fPt%DJ5edTGe95pha+qMzMz`e{5(oTM$yBt6B3DsbG{=Rlt>$6X~fLs zsu^O#l;N7w)nd)Zw?AIEY_Z%9pXCXj7ZP^yF8>VEx_SQ|vU=!@B>^?Nc^Cev?33Qe z6^hS*dnI{u37StVo)Bj=@){>|;{1VI z7O5r5@&EV-VMhaYd*1i4N`@K(jLs0PV*s8tb$amkVy9_=wDHfEPF0O|2o^b#i5d!u zjIP+uG5EXF0^g6*$VGaH@~_3N?5jLJs;Nps=^u{#7|aUaEQQKbIY-0To+)BDSU>1j zZQL)^v}Gx(QsxQNqhZ&2vEXzn5sFiOVzczRTy9j^Ba~PAk~HyQ+G06QE&X&EPt};3 z+Ic*wh?Fdj8491GC zt3e>p2>H9u9S{hoMhxX?0F}1me6i2isbDxNS+pN#MWHm%-ig7; zS88?~)>3=aEh?Hw)^Q^?KbKU3dquE;uEPFz9NJ12cVjU{5(SSmt(YM+wjbtA29^3< z1!Ixb9@0le+gDTN9vA0TS7RNpyG_|f4koY3@C5j+?NGOQYNq65+YY*MNVW~zh{5X1Fc6$ImasT|!vlQTeX)!FgwqbdA4-WU54 z?*0zN=Do%75KX43O7%}1Q!8d}R*OVqx5k$*1HR$E^K`XB_iBA*mF;l5Tso+6hAi_F z!@3fsqQyNu)yu8hL6`wI`Ui`-B5wVw%!86ND&|ry(&o%<_@3bsn)WU)EI5@hQ5#$< zvt@UG-NV4RIcPAlxyK4Gf3nW|kNQiDNMii7YfeD9hp0UkaKa`6JL-tL1qBiS)wcz! zKv@6j<5kyw(JmE2N4Q}xE7GM=;`#wHDZ|Cxt|_bc3r+Sq^Y*qIpe7+Gj6M_6E7AYK z_8Wol1D7uhDQ+ch9eoUJ;rRaA;@b21zd1O~)iNPc!R;a3r+Ej*`KQlx;aIl{t7(u* zCAWOiCsH(H)^P9tHsY+(r$}_5;U2vVrs`JL6(k6P>dExi+{yn_clkoKz|yR(VrT^h z-r^b#EjFPiV9oz3Yz_8S8KDaT4_+^3utq1*6djQ zm{_@5RU{G52+;_tJx3l-olYD=V3F>f3pwQm3!f-3^O;vMw$;;1Z& z=_bP)jT@*!2g~UBDP0Q9smT1*0%e|@tFPJ69rm`t_%k-YmQZ{(d+^(fbpzWcgnFpT zEsIOMp(pk~ZtMMA6KguAFiOPk9PiQ{o+&W9jXE&D9h*Zhj^~b~wY;M*HxkiNHG!;a zHMBYz;jkhs)qT`It}{k+*9z;JImJC@WaoELuN%nSoqeZzz2{;R|D!dm=Jhe-kySk~ z7X*fOl()Vf+kXLj*AQ}w>ijp9*7X~(b*m;uPjH72f~ zB809*rT45tW6%6htt0++eRPb;!DT9qnVYMB1la@aOYK24(u?M!o_Ov-t&^9kj0t9t zmlN*Y%HF93?)5!uqr3Tkmh>s=J9Iavs@9mqlM#lk>W_^4{Pq4H%KieXs_hFLg_TBH zq&uXfyOHir0qO4UMnI%HBt#?yDe3M8X^`&j?zcC3@9+MJ$t(!J(BQt$C&jVQqiZ0eGUPCg>1MbpnfBF*JD=x#KaEXg0`$5MH0Zx z|Gg5#76sRlR>?fg7vVs|mKPlQm_PIFgJ?{ljlQk30Lk*P4D!^Lmu5=@p->Ax6dqTHQ#QTuE`9bpHgUC zARx=`O-t)t(_`~keT~dkIci)P(Y(n_9@`>WP}Cbnu2LelUi|B}9y$`aaCkyNZCo0? z*Xz(!zT7J@)h`(0LKpka8{zUTR$?Nv3)b1lVL=)6_pwMyCI~IX=jw%4Ki?Q8S96D82fhd_X~}9Imy&hn ztB>SBx)-IuslC2iO9=X)l9uj97=5>->x;wk&snpQ17V`94r^wm=8Aacm!X*n5(jfs z0U;ML=l0yzoWC3Nr;z)0_z|8(HHQe&0K8`d7nt);E&!^(78r7#6m$492J0UeA9USo zG+?No^3o5=S_T8s?9FG$O@@fM9cc9HoK^sIohzVLV8Jd^QFpqn;ZxM7`fnrH8_O7$ zSB-Jd>(q6`RJ_)vq0On^dXb(~c+_=``+W8z3|F?hjXjiox~bV>W5g%2%+hT9#Zsj8 zS7hjvas0O=6sAUK`XwZ7IF&S=?85HOZzCC6R! z*`oRJMgh~UuU(jA{%T66;g;Cc?9Fv65^EY?=jW0=gUe%FZU>IhnCj5HlT|kxMJVcA z18x`F?3-W63wS&Iyg$87+~&TuHkIeydYoLSsV%gGB1DW=A|CVdgj=Fh@9&a6p$5%;t67pa2V-Wbi?MD6KM93j80o{>QJ@8k%zsLk=41 zt)8yGBz+tpHv(s`GHu^l4!i9Q0=*-84&GKOr6ZWN!&fEF^ z=B&Nd#yuQAKFm@So5#>D`6v=b?DST@E^E=%GQCe);Y{{OTr7^)Lnly#ndqVAB}A&a z0%}QkhxJe)C$V1?0!W^n`9o28!e6kCX=yrL3J&GloV06g({Xk_JbGmshP6q{i+r9@8Ec)e0ySB)3Azup?P%9Zdb`rjO?w)=<)cB)dm4K3ZtSkc*LmP;8 z!GuE~e-5l}u?>@!0}D2VL5WP#Bm?wQVWa^aCk&Gm5%6lm2CPESdf5w~31C~9@Tn{k z)qfZWNm0uKc})Kp*B@J;fJ&Q9sCR$oS|3O)nFtQ0iGEKhJ7XHn+l-CJ7gy4TibJGd zWUO}iHTEkQ5-GJt(u_2lsm9~T_59bugpjZ$%em<5abLUW-`zWLi zp!ge&E19bM=PL^zs$n{2R4wn;DfJnxdj9=>JZ6G}<@p%LhXCS@K@=m+k8xHL&%F1u z@z-b%#Mqqq`wC7&hY%^)g+nGsBo>2&v89I$ijcoHbHmAczyx29!SzK_vI@%DC5JWL zQ!*V02>J?hbP@7Q`hV_VJeT@7Ayh=9n^~}A>HfmW8M#lOO3`C-838R5XpUz`M8Nf@ z!Vs{Gzk!zVTDj!NA5p*o;31Ef5O_fcr)8oW=X?XFW%7WjwdsGSWipn7D1JBW=~_)p z97fqB5b@3(?ZdnkX*FI0L*Zn;U`|7Cipzkt^Z3DyA4)&Iit}Qj2jE#tNi;omDnN+^ zx%}HiqR#)UG(92k%0q}D^VL(~Rr{-&cR)cmMaiRvCbiV4 z%si_p`0#^g5Q+R^M`_Ri>a;`f_kkz@&Sr__*5I&TdwaZY1oEwyIwo-1ky0vq7 zEbi!B-t3NubmkrPj7ipfl6T1Y=FcK~=^`~32vU0kxFdw)}>3>aDm$3V*L{mK87q;xvi!@b?@jdFiV~yhB>D7B- z4CGX^yU|g&cO0LWj8nE|<*&qS718M^J+{8zoXD%j`_uf~=Ki_uks;@B>=cWxRSCw{ zUcKU>hFt_0myyu&?{GeV;qyU;-)fVb`NQzKPfju?Kp+2)PBIVxE6;G?_)CCp3gD%} zm!h9%e~M?G^fx+~Z;$Q+pYv2k=x@u#UlP zt-}jEo{%h#0ie?r{7N3$XRf$zH9CX#zD|+zebTSHWJ4L$8|x^z)9$S-D}r)4VuEgo z86OKg5<5KIXuAaSdwYKbBD)aT-?$K*BhMo7+jP0BC%0)FKW&-gm6e`Z$x(!E_@*7Pp@G;IaRG~+QT#_g4z)7N?%l8*nze)+xZ zVPt93udO7)axwrv9{=K}3#`rV-XE0!s+OOUB*9W7o)2;T0EWcg0}#%Zqell+aCkYe zP8>%&7mQu{GdziH+&>=y{_6^sY4ZH(Yzlnv&%Z9vp)&NNSN>BnfH0>P?bym()m2r> zmYaaW&)p|ovY#i7(_T)e)vH^dI6axmCR zX>~#-05jt+UYTJpz!TWiIbZ}>7fRM)&nVSll9^#(EYloj`4Y4n*t$COAd3v51 z-;CgC89mI;V@5-gx-^_`Mjv8h2|xYThHO;dqCY;UyAC4YYM1HQ`E0M6Fm~jFMh8p3 z47GUFVe(dq{<-p4XgZes*-uof^-R5ztK^K0C*?`Aa`_z`4;!}%VK-$AQ z$58EC#DXyOBO^CR`CzuA192?(?P{#836YA86v}tyHvIY#3@;ZLvDfbQeW-A&f$na^ zG0Bq3z3*A0=B~$jr2|t66qHq^TWjC2vO8;6f1sDfvT=O#p1?YO!pR}$2Z{zVt#R)S z4v;@A_W*(MsnC#$CQ5l6t`q6k_e`iz7P!y|eK|KW$2QzrZMP3$o5+e9qireucD0la zYd|h0w1_#0Qh%Qno0dsIa-pNLXPeNVIYRf%k{gkeXI%Ug!E-->)NrS>YsaHuNz(D= zbjC-Q0X7O5RTF$EzK*Uh;gM~quY&nGUjAULrRa=bw>5Tt3ZQ zUaU+Q0&olictq6lPqB$`6i}r`IY-m{WhK3@U_ZC7#mVEqo$9~7OA+w3MAJD*U7+tm z<-ZKYm7PaNyjy0=Vz^DC1~p#FTN+#~V6~F7SoP}=tJ82%XXq0W4%B3Wgx;X^9yj+w zV49B~vViwXf0Bxiay^EFhsG5f$5ul3yk>MJD#*9a!~PZZ_@1-weGKoH_Pvv)?Q3pQ ziA@Q$s!Ym^-a$QwY=qME*s5N^Yih}+M-8gSGw#=-(pp?uB}?~m`}VoNlKo~tPi--f zI1l2N#oO;Dz4!uzx;ds|tQyic+YC&{ihNBYHnk&UB@il929()-$)Wr#>05hm4RT?= zme(pGaw^u)eqmic{3(6qPgwrba$^BNd7O#QFD+LaCR-D;tP>>t3pf-RiuN8&62po=Mk z;<13v5zHZf;!mOX8&8$=yHCjcx2U@%9Y|w6l^b8f{Yw%cE&QKp1B^Qm?eGp_azhl> zBiy5oo6*^p6k1aQ%jn*F(~D86ctQ_#_$GAWf>Y&??@y73;?K$+c~#gK^V6x{67Iy; zZn1AyAV}z2Ie1Wgw(I#_VdDnq zlgI$y`fE14sU$Sg$E%%PC46jD$afz3X4loO^jD|9kl7A?syGp%d6<`XaS#02ImUvv z=qYf?Pe6b5lVR3cfMnrqZftGEdC~iAd7JXsFPP{znCO}DZdWxOvfcv8es~MB^~xqr zxW7M0elQh7&A^FND|ova;a(@RwAH51GG>kVwI5rgG&hd1nH`^w?q`PO*Ha}9R4AzI zOfKm5Hd+V@QPd*;XXodGoHBHXtQlQ%c7%o)P0J1Xznr!-1zvBdl6P26mr5MsRVkrY zF{1~u$+@t%U;kMC3S>*wC^=;O^%29xK^E**jd_Y40I>&fe2{B4+@C&@^NyjrGV(YIicrE@97BdCejG>B^t{lxZ#S^ZYbGbue7*^5V3$9K*+S~)v# zNnssXjKn zoK*%nFqtJet_c@;dY*utOTwicwCIQC=nQ!;yWf=2&{!KhF;z*4bfCe-rqz81{jio( znEdr8bFcO4kv*k&Bv0+!YAc>(V=DFi+$&8;>;Od=sIMp!SqKx^DsI_XUye9ij63%o z^eQaNepi~QsyP)tpEF_EaABDwv<=i;R1gpT5{V>=o-h6#Y7nWd+@>BUuNFz%7uJPr z`nJWfLd7N@*Pv2HYVt@WGBz)_AfI19YvV&gn;2H!fZclGG2K2OZly`N{juytU|vuk0L~1PVM2)-vK>QqgLHIAjYUn%(FgaJWa6RJ>mQ?pz(Amm_en zyNM2rb>T?z&()U)rmO2K_k!(^!GDa%;FU5mmZ%hXCjm5QcmvSw0!F4bIOFIO=(UMj zr2uJ8dNP1|;-c7N26CK$-cpnRaNw^L%$%>TVVPfx1kIXt7&)?hL3#aqF?7r*xF=l7MfyCQ=NO%nKIO0`(<( zt!--CoH3(zH>~OeX^;y5(940QqA3H*e`}8a8}b1R9q<~h{#{Kd`Whm#DmqRM3E#W^ z_F7y_SyjUZ&bPYT&!C;@FIYXPwrlai6dNY%d-I$7IF!a%*9MQsDAfclGSgMEBZRTu zm1#VaNYmJP*tJ`Zb43T}6ncW%ZM zx{~UvKgY`suNRN>75OL+SE|6|GjOBRphd8^XKeCcjWP>%gR!>n?R`QyxJP#m1P=Rv zv=>1TIZBdB0f`fDAT+M+o@H6zf2g{2yekjf?j z062#Y{tw^nF%oto5bw{3QgHW7DMF+d&gqnu#MeJndih$?w?f`>jS#HteGR!@$558p z;~TUrsXU592~1OSaGdjU+4aE0Fj}tq#=j@uvh_}fZ*15SOW^9orUPNED|GY4H8*db z?mEM$;1G<@VHu3rqED(X=R&t*H4tL!QY}x_y$Vd9Gvtqa+=KVI^YM#OZbbA597s6q zYTETye-56FSq9iMqUFavV9(^>;od^LykZ5;RLKFp(n9&y6Rvq#@m++@PgD4cHTb64 zafpbMqNeyALA5UU2zf(x1hyhtb&2+`cbUE3h^Cz+IaNn-ZTqa|*NZ*Pa6Jd99v zYptFIOGL>uA&OC%+bPUNciy~k%V(8yXYNWtk2&Mq4`ks_{`B4w!~HD|j3;~|H`WF> zhlwM!NnvUHl>WPUzuGRbulFSqKObNFE62$Yh4koA^yjlb?KZll4O1c7QU6l+dlGO4 zMj{Y7QST>G$r%N}$4u{uLULmND5zI!<2E2Rqj4Y*NPD)gDMT-M2S&RGoE~})nMUo= zd`*rPH8C=zXfR8b7+mU(njAme?~@=iG-WR8@O4hNIyT&?;n_Z8N>fQlD7SaV;7O{% zJ`KjX(1|R?6+%3BvTv#kAzMY2$2|F!n{aoMEn6f15Z}yiYRcT~f9O*d6FTM77A22z zG?u0HCMk_VD$#cR($^Lz@iKF>adUCQR&IVp+e7Aw;{HoX|6rx2$}b@8HwlO|%z&18 zWCs&(7c!uB+~k!orw}QeWHXA_K6#_H%pOn2)q}7|R~Jhufg^Q~d+4wMQ_N?>)&$dK zmdn&>`x5w5yLf+L68em=QrCd9p0$1>=28=HWJ`9Vv3QJZer#ec%$4&*5sxc_Z{laE zu;G)>@R&AATFbJLyG?h>X49s7+tSusl6Rphq7-&@(VC8ut}xaH*66Z+|J|xNNIqy! zFM3VzR6Sga+=b^7dJivvM_~3oV2ccI`Ix33GNHjD7@!9xoNz#?_6jL9zWNu=&vlBL+}%kD-$JZF(%`0Ut(vk zlB2`FoFuivWWvPP&VJ*JQLG@wScf^9c5SQ1O3>|%&@xY;kJ52Y^s!CGEr`L`qIbUllt8z%8~k^ z>#5XtlyHiC-G1avY}p5whfMa5=0vOS z7iA}}TlXj4P|e=J`94@*tF8Q2 zP|g|^WDW$ur6E|ZH-2I=Int#I%@DI2Ih?fLLbd}@u)mHi?UHWq>YW^woqY^9HK_Xq zRRlR%Y9dWA+pIAZ+x09l7WLJ;n`6j&L#upl4BbBj5)@=xiaC&q4u94xP(B^BS__aWK!5LAsLhoSYWEXK3kTvi=Om7LP&bR~ zN0udw3`@NHR&=j$**08qBVESqNu{<+_$A8n zP?IKtx%%JEaftF_l1bvjjh>$zj=AojuEs^4H7g$N-I1>2sVOITyHkdz>)-9!AUEAe z-Eif%#5Sh@Uq{Ia`^aP8jH0{mt0#$LWGZ@eNtAaQv}kNbB}DA{W+<1TyzEE9fdZML zDZv}e*)eq3`bFcbj(*ld0YTD?!gUJzK=`Bzx)XT=!~Pa8_LU`8Wt(P2`#RI0@&262@Q^HPk3 zOOB;i@1q{8+|fxkhvIgQ7RDMd(3S5=pV7ksoQYNU4fjdC{h_3101qR9=E3bK3Wz5WyMX1iFE>m1`UeHTLwT;S2E5|O;!3W zBo3-dAzp(~?vV9t-p-7ja-Jiw_?e@zjmNjP;sUb+SoakpUXi&eDX+SOX`}dQa&n;* z+U$QM4+2OfLG!-FIsiAcc)bGXgx^KgGPdOoeDt|c{SI8r@B`$dTrUW$cxwV@q!c~Y zbT<2{q$cWjDr#U}6zVZoX^n+_aRHg#9(Az%p<%u)#GEBn<0TfgC2b3VcS41HbH_Jx z^q~a#(mNdvbXZ-ztq!g(@fA*Wm8GM(s5}=Y<9^xjrfZk$gb)AZ0=#S*(I@?;6w1`F zACgQ+KyE7hlx^0}v5sWhS7_hy)?+F9?s ziiHisw5}Rb`5LA?>`kxrt!>(G&yR}jn&s;EEQE7Lq4F-`8Z`A??I@ z9%XnXI36BKXXcpOxW%qG^O$M8AKE$<=tyeDm0q>55H7L5IDe1m>gxL{^2{slt0$q! zwxJ34IrpizEg#w!N6|Dl>cBHulUvfHX98rcNY-bUu>QlNVWw~yFm))c4f z9iobNNN$L_vgVxd?d2l@SrcQ{XWsbJ-?yyJ@#gf+HwZj#`BZ+(ZS{APxBNHv6*sYX zkE-U{vey>`cN0m)PWMY}E_|LJIBf3B=YcM&AmC{Lzz4I783T&(AMtnB0BU>mKiVF6 zM9Avb%>LIxOMV2z-q0hVWzf@tRB%D@s%8n)#t-1pvD&pz8{%aR6NrofNmuY|Yvv(R z(ALiUj=!t;S|ZI1A$L7qlq5rZE$G~&56*cE9<coz3uA#(s3VyV(AJ~RZ;rV z)#DX^qiLRm4zj}}jyxLg^-EZn{W>StiKL?f0hU-=7RpXWwX-jWs&tA1-tm5A; z&o-Pmuuz&f)}~57f$iWEaCXq1EU_nM6B-mt65NeGX1qT1pFR{No zK$->bNuCgKDhrV8^`v64IK-(s_&BRo3>aiJ0Au921OQ*^KY-fvkvOjw`{dCS(|en+ z4~wS^86{VKUM7f*$=E+T+)8tM@$#-aAWiI6s;IMBR|~p=a?W=L7y`l)RTy zNxNtyi=3WS^2gifX$WjRDO%6^iPokBW?T3s;2{k6@7l+@%>+0)Iz*N>f zN&vXpXaZpQOfd!tFfu+mAX6jRWY(qLLY%4*lLe$DzNC6cqIEaG2?|n%Lf)6nth?4v zX3ilZ)Gw?LT1GHs2;r43O|&Ah9aN{H30rl74R!yFb2H7#lAH$M&IShyIn|M)?SQWe1Bx^5dNnifO~hnPi^pTDhsPJ32}+?boV;XJM2GmQ$ib`{v7YGlDk< z5@;Twf8>@NNG5qdHh`3me@G`;6!@DdnzAy;K0O-13riIn%^&;xY0VM^2qt*id73BC zISK)w;Toa90GRsO3kM54faFf!gH*JjUn~z$-x~-Vv^7?&fLnDlH-pzdijXOM?xxNn zB2hny@F$EUpQ8RyjZ&&KB#WumCD!@vSKBA6b4z4@+{oT_>rDhLcO&;d`Fx{$*wI?yg9Q;V2F|G~WH*Q75$t&{j@o zCp)Lz(-RznGYSxhFm`K7dY@LpVYlGll6v25Th}F)WUn|z9S2&Iq(0ur>fH6hU(DyK zn`=IiO^qYKHw#>rjgtS0CkZ_Z#ed$?0S z!M<*#*Lmy~zB^-Yl2Znc9^I0TrVxEP#JNlNkLU*Q&H{R*T^~}P7T}`-FUYKtuK_;! zXN@)}UUpw@!#n{j*${+ZS#W_iJgpu;Xjpcql}_-qsNkbSb|nB+;#Fv7vL167?P;mQ z_Qn%_8g_b6K__(-zMICa#)xjIE0~}j^A<)GEGLb5B>k-O*9E`d=m*Wm0(cB z&H~zS(|Ubk?H^bH@N|^`z{LYqJOzsJ=oSJ%@|;F0?ur7>h@g*8@`VtvIGA;SRpGWV zFX90g`Quv?C@z5(`fjzV@CGD2s-J-qXNu@;-muu#0{uM_aMG(u)FpkLn7qS1$4MzC zg0yNMIx9Xj41T6|a)YlXFx}en2}m*si+&$gaEFGAS!-{kMgKSjm))(S_cbrVycr{( z#B_qMX7~H?w19^zDWh1vE0K3GfsDK+qcKNpwK+mnL3QXEzUkf=GV-8SK(QAK(uAPc zFrh)w_XzBQUpp2jYP6*Fq;hLLQ7NgP&_d^OkxctLRTbLMzxN#(y_1NeKxdp8TA0+o zaLN1nqxxDY`jj2g(gUOyS8?E+^{YRs|3gr7KLH`lA)5;eilzZjsBh|xsg(aK&7xZ< zL6>t<6RU1T(+z+h(ZU;0;syA};p0+~=Zbz+IrT9PFnE>!M zKJ@>7JAeU+qc-XBDCv6{(G~Trj$6p1i-S&yMi?;Nl)RJ}IHWeJ^(5)P zo=l4u$bS4zik9GS+3^8eDWUw9`NX?_g#7?CxILjHl|S~?TsR2H>>N+P)2yckfHOZn zRS!J#kO0r=3X?qGk+gMzGwPCeuuLVt}`C@jo+8Rc;CINN=EVE@|$ z81Dndq<}9X1wQ;(meZRI>^Y< zZc1z&YaHWGPkoLxzku7h2G4c3_g(FOT7M%8*uZINfo3eYKpt+OmN;(&B2l|^O}~Po zZ003-wjk*k|JN*HNeL9tj5mJ%ouKI5bcIz-y4nf82_iXTG&$xO`uQy!Oq-1O)0(G~ z*MjVvyRvc`SaijKj-zuI#u<;urVJ8Iu`Fj9i$CA*Ukh@?+myCU~e*x^W0_!JJ=98iK>`u&g^Ks#!^I=MP<}#4)WV+?V_MM|+ZAqY3LaV*Ezn z#L!`~(E^!5N1lahq#4l)GP_5ds+V{TMYotq#D1hKd7Nv=VtEE5qZ-CE0Zaq_WZy*#ILheD2G<84xu%U3t=Vp#?|35l@k^KcFix@IT3el1}Wp#NfX zZ)f-w@poV00A;bPYJLp>AuOR64B`Y;AqrshYFb7vF3FwYFXNTYyK36>Q*4`c3B;y5 zhdIiRsJ>&lvMMSna}LEG3Qy`B5ErL%RJ#P=*ZyDt&Uzl<6!L^u04|w896`BW=wCf9 zp%)3pPQ-C@m_g1S0QD5k@%Azgi9!WjqBU`SSwP_@;&oAwMAYDq0X4ipAa8Ayr9)-S&KdYaAxh_ptj! z^{qWEv!?L#=r9-Nl%f`=jP(fPyr<^2TQ-JnCdXew|A_>EeHs-$GFftl*Hb^Eg{aL1Fml<0|Btfa|lx7IJ-w5H10Gx-Br~ zAs2PauQeQ5!ltCVMP|Q3a7T%9yitp7TP1QF9Lq6_G|%t{#{WO=hK(XXR$3p%41pbm zL;IX%6CLw3pYjlW-qh3|!b5VvYpJe#txi7Uz9Q@tmCL**iZ1egczhqdyErb==h3qQY%yRMJtE5Q`iQyzoWs4@1DdTee(slixCWcI6rMP4rq$H%R#AREs zG2)QPX?jiuRqslTa2Rn{JMQ>b#`s?*;>T{_%b1|EJHCv=F@Ql}%Eqa9KF~$ptC6O` zDMp&nVOF76p29?KxE%ur8wz#TA=G*{l&q*-YJ)?&C^B^7VS$O4UnI?ZwWkxDF%x2| z7l4XdtI1%AsjuNlH1zs>+zqCH8oOadWazDjE#3gTjJw)^J9{{caGfd9#T!*;=F|f% zCvK5(JaR(0^L~+0v)1^}K}=KrOlTkSql`FZctt$CPNW8{poMqdtI4=yN}Mw?$}+zq zCG_u59m}t-leB*8?J@UQYvJP4_zCwCD(l`enbXOynrCTW?kGp8wC+i80#2(4KyB`$ z5_F*W2g0SG$omW!g*Bfc)DhnMXeOVE0n&kGabCN6fexV8B@2N6EObHH(1QrDe#ty+ zJs(QmgrHhmzXp{EW8%#vUJ`>L`@1SDUO9v=4ZngfnFU9x0@HH7KddXbd;5pFEM)Gr zqQ_w$>_0-|z{{ZD9WCM;bv6B~a&`gD?W<{=6vQGBv>VUn@ zoHbf{*?P{=vSw*@(iKYXk<=fi4sP+GSxjvOoq6;X=-O{uD$@eeh(&7`oHXocl|Be8 zcdfFo+J9zDp)YyEnUO)sywG~}E2nm)Ov8gFFdJL>*n>8x|7cq5NFyYLaNn?|9&fSZ zYTY6{x)N?LtcQNE{k?Uk$?38!SG!X`&etCpBHI1ELxZ_gltNWwe#1L$ruH$`5pjm0 z=$FvPNOI^Ikp>Kd?K&%MFE8~&<B@7h( z25lJ@ov=B%0^zALQ3a0PGHH82T@tw*yQCK3yYCidB|kdxw_90#Qm>YtjWwcfHUHLB zuFpaZEQ8zhK$+R)#cmVs;L-eeae;;(@@pC~oc}lFO}_xM!cvWvH5|ffU1n1=!FV!Kt9L(_#fmbn8yG{^mYN+0XA* z@2P$5PhNG4@n2Oxe|wN^rBR;X>+TDEkrl}6eP-?Bb#ay_Gu^UMcYC!Hna;}Dl5+Em zj}=)M_NsYdaWJbXW5z6R<1eAkfkD_q>`EQ-Kaw5%Gb0P|H`9&0yeE?Z$=?!|OL@5; zx7;EruG$!K2FV#47+zOPAZ-YpSSiaXbgein1%A)4ZWF%| ziyNDO!|T;rQRt`!0jYm_lOoF4GOtwsKs<0Mile-UU{1WTPche=xt&3FmSHPD9K)U9 zaDluo1N{a`FTYz)JFL;@b&wX8;*}nHZLg7s#;7ST?#B?|E{{kestLjROvkEQV7uN) zGiL(QI7;wZ&LXUl6%#3rb$0t?iW#%yOW~Z1a|%wyOgw)9%f{~Ox$4Zfha?`uuD=|c z(j~4&YvaW(Noi$uTXi0(CWhE8@QcH%GIP&6n1Vg)7_4OiaU80I4uoIPQs+1bW6E_? z8P>ZpRo$`$tnrE`G{OU?k+JVgBRZ{1sT@zb zj8d#D1oo&h^PA-&;f*{2NvcecyQv+GsXduWNmtpo#Bxvk_@Z*=<2{`&paGh%U97^+ zno{8NKoaK*OJ;9obLNNM$}OIo0eH4kJT7MV$$Z0U}67A!rrqqEH`#}B1thM|5A1>&MrRs_A2+RG)PWw+aqWz z$T2)af_cQNa`9gK%k#k6=fmn2M_!ew&Gq@4dmSRw#p%spGF4v0C{q(gALY->=9J{8MoPCvJNvIQzYN7jnU0{IUg^!y|? zRcs|yW8MGacJ^)v(U{5VU0G%_&>> z(1~qmK^yMdCr`>NM#>D6s8p(EQ0C8P31`^wIc5wNo8QrI$?2oYhW!StV=hE$0k$PQ z=CG2L@#PZj_s;idWX-fzX`1MWc+PGoAWm__%;ZbDFnR{sPz;=wP5%Ko{38SAuF@g2i0+mU6 zP!MP~e7v5;#HKB8^Yhcb@g(tz6Z7SAQzq}Ek}HnHBRg;>O(|P&$)~LIdLKsoYBUX3 z7!Rz}=X!@!S(9q89fOU8wvP~-CU?$;5XgpL8G)`95h$VcW;t$9rW%oP1f!M1y!Coo ztz4iU!}Ke3_mPc(H60=mGPB3Z3H5iP+iXF>q1t=OoWehzaV;_E32wz&0P!{eRiD8? zsL4;K62PYBf&PKjb@vl+o-*pw+5XZU7<90*_;cA)jYE$H>qrv zzH$3uQzxbOsE_LjnRa$&epy=762l;E0mQ@%S~7^{ANrmM>o3WHftD%s(cvfI3+s=E z;P8XgwjWdbP2w^WbT0?YQDtMdTR)x~?C+F}U-+w$%*25S$Y^l#TSxpcUXY2gy=GL>@@ch*){~^2F0`U1L71XHg^6 z)9`iZB-Y1D-fkyXSVQ3@ByF@ctDd|v>JaVEQPU!ntuZbhT1vYX6p7U^pNQI2bp)Md zlSwbhy$>5w2*<|wm2`Jfk^xeCPkM`MrmDHaXjb~eiR(+6JBY{zh!+ItoL^TF ziEvG~jyT_am$I|@;im!H+CGfN*@$<@x*a1iM|xfvkY<9Cm9xt@m7u(hlhel{cIlaZ z)-WZ>+00I`=0sbZ(_{C^V3iu?LUhZQL2BT==ujk*QAsg5rB`rT4^EeSIJ1LMK#N{s ziH%Hcr;)9$;1JoH-q4F!7N3k?*X(tRyFk?ARpjs1A zd*duXLKs}0CqFrN5=+6LV%Mjc|8oiL2x6FPlq!MRADYyzSYhL0e^wy(*UU_)P#S`f zp;^jH4PrpV&_|0|rU0>wE(9a7=&@%Mcs*~ROhq1 zE8FQQhuF)PibBVnz29)+dc!9SNY5pmb}WP9dZE7g5Qd@4Q!w05jW=|Wiy?|I>9Yll z98q5ybQo0Wv8OQRP(V$V+=y1uEwtT)M#-(QVk=$F5N*c?|C0;Ago8x1kQ6Q++F>Xn zaQxiIf|P9b;C9jNTW;iQL-|u%6#P8n6^l$?(>oVM|3CJwKMHW@ag+a0@&9?_!t%1_ z7-)E0lgQA9vD-m#XmoNX2&66;7nZ>Kq6+nDTS+&6a_&{9c7)D%aEis}k)Dkac1q`$ zj;$ou2(+9heNjEJ>f{-U?~`~`hLwEM_6^0LOj??0eQHJHUbbA#7b(h@A)|#q*K=sZ zGb?b!9x`44#u(`4H;`M#gy30}`SudN;eForu32_TWBLbY3?pmuY9H#?m*dg8Nuocm zbIy{n@eQ5G-!ew?H#@*2!4F8cmdDSDN*`Hi2+4)w7;fHT*DsjX*nW(8&~IxUFGzRR zI7wRiU5<9S5n&Y3;BR=Onp;0Sw#d{uT|>}E7%b_&*!V;Fth#z+YD8|J zmhhx{xzPHnNo8E@4ky`RQ#@f)FZCVM$91~4(KC#_^C+c#tL(0kKC@eMO?iC7n!MXl z48WGYzUqvujA^Yy9lYbpi}muP#^mQ-s{qG@`i zTwxDmGuUA?RMV3p3oE>cn<#JlpLY#Mus94!+tHpsSEcVtBgNO^_!dIxn<~^zeEb91 zL&w}?%T8d!I?BM^jgsDzA>&B@<$LS1!*gaQa=)C8h}w=IrtNlYd4gsoR_;lr zc@W1~?lF=(W7!h^u%%uuz-2=!3d2uv^|!fz!Wv)4jOxNwH5g~{-hW>={@eMraw{W-0*{Bb>ORJpI+2Yges zOWT_yE2>L{FESixV*mptiEbP)B3vt&+?E^tga4c3*X42&lg=uy_O9l*vU!?R_qk-4b}Vowv^p= z&lQ3O%EeY9xaCXO(9Ytw$hmX4c9Ci{FJZy2GrOT7~kI-{3AE6ef$rql9RG2dLyn8Ps z{64^I78vZVn|*j>NsiZyDBUb5_amb13ckDnXpLSq>e(lCkgLf%yHhq`5#^eXyP`e3&L#;|T zuy0D;U*v1Vh13%djceT=KUfhhEI(`Ng^RJH=`nAOP6%H$60y1vb5 z(HrPa{+oWud)wP9L<`q`D#UX?tUGA!Qbi2 z>qOmSUcEl5@(5S?!)iy`LPN#d_Ga_Z?c{w%-7kChT~;Oacf-FsC)SkOPU>Ed*A8&z z4wdKG`i&^~mD>8nB+lcfM>2U`Bh+E_HH~pU`RsZJ;9bO}XFkSX^9`^mp}~7I2=kwb zfFDn5=MThhH&_$&_wUdqf8-@^oifd#JYO_!8HdG8lJ6@jEE`k6Yg@6+wmh`)h{7l7 z(EK8wTEC<`rt|@SW|1e z@mDCv`CuYTt&*VJ6noFCn7%iOYQL-zPd5&q&&QEfSV?c67+fNw_3%i80k$ZEAJ>S+ zRdRh+#aFjOcE?vtHy&LAFC5e;&5Mv@v27(wzCVtSoTVx`zJB+jsPkQYcw5M>eThq+ zd{a2S56ohZ(al=_M?=iOv;;z2i-4Med#3|mp7&AaGf8Dd*D$qQOUH-p>&i*>8iuZdThowWhQ@T^SJEWx~q@`QBJCziaZlpn^yStGPkPhkY^f!a? zetrIU*7~l;wOmVQ=A7C0-q*eNwPWT)ela$3z&E)xR<3DRthy#&6JCtIT$WV9A4%Ha zVcI?_oU*0j|1SG!Fubq{LRCwUaHm9I%z)I@DeNLaX{;eXxH9G$yXU67kNa84pSW@X z_RYLihkw&OS8!~iara9t5N0x%?b!_#gL$gs0GwQdsfgEB_B7apf%A`mckqF)|A@>` zb0jRNHPlV=KgKx?7kzr zn?HDBYlG|#?vP&vrSSS5Gd*n0tT?F?e)mZkW&AOaSD1gb2uwtL^#1b2J!Vw+Y~gHF zU%(M~P>W*slg;v1&xDs@aTu-;wvFg==0S=X86u3p%ks(7Jbw{>iICn78wy>><$T-~ zZDQc?Gnw;itN#QVa43s+K?ob{9xTJc*viFJF3O0DBUxoern@fY9xg+4lu!*3IGCME zj99_)R{HB$f3)gbJmQ&Eu(J2OTuq-FeEEYBmiMWv$O_6k!hyoqJ8fwsG^}I5n}}G5 zm+xl$Lvd)NG{imDC0_SOrkZ8%RslKGLa{LLep(t2d*N7dxG??&%H(MS+R|=Q);H|Q z;he2$&sIuQ#1x`GFc$T2-gCLP)Z#~$8SpgVn6;$LHNangLbyp6P8Dir$9nhSW{B=V zRPZ~JLpnv%0|YtYv)uAAIY}2dsY9#<8XF{?p^oOS7?*jnCH*K7Z$jatqu9A-`nt@a zOm>IjOF1!lzxQk@p|CsG3EnRzc`trM1;+E0`@Wq^axjket^h;D7S>2>%V??#;#Cb)Xp$4$Kq*#Oix~%yRBGhoa{FR3^p4${&gU*S*m(znyOA9jJbe^Q!ou)BePj-(U ztqv-^aYS(G5v?erKEEcigM{-c$V9d(=JN6Xr&Yga`GGQaIj7yhthe9&4nM)%Vc?{S?(& zSWd!&t-@{rr-gQLiqtPCjk@9rSu&>obodirg9NSAr||bk7nn+v`vH4Pr)~KAH(lr{JzMU_ zJc7c4qC8mlGYCZ_>3v#`*AgSh8mWEtw?yqzui;DQ#AMuq8nO-L$Ki=_E4KFsdM4J} zCgOv;x9~VyK`=OA?*5LViR^-UhJ^6RYK{{U<(_#&mwH2-#zyE{a=HfVw|zFFaRae zFlE?3)xu7rYQ$K8v$mB0N^0>nCqOz}C+aT`?_kRRwBBs^OL`)!k#A^R{)i*+qgzLWDLZcEtUb#HEO7~~*58eWsYaU<-)-MFxvU~T zoJs6%kmg5v9HKw0bd$VAN|Xh3Rdf2Kr8#ztuyr&Yg(6f(e;t)%)a0o2SNlQd;qjbF z>uXd8pRp%!7f?PU^E zSr!oj%aA?~zt}G11=S4L&wa`+7YRw!0DkEONsf23yay(bX2l=o*6_)^agOP7dzyB8 zG3L8NJ3dIVMfrb%CMNG4V{GT>GGP+sxk(~=@Bhytap|l?O(@JfIe%$u&x zD&DPi%SR`~9P$M6?;;)V88yvbVm$W{!e3{kt#cyJcP95H*i=_quj0?L5ah7QbTUEt zSj?E%dyDUFO7cdSU(WtmFzC~~xN@3*kv0j=(=+Eryo1r6jdb!+!QkDELV` zEM45|SxwJhxQqL>)uY_FaI*U}aeE_f^(xvmTYQ$Iallc>DtFRFKi|gWEd~BEt*s@7 zl<~w?z6ml+>vNyz@c2_71E-jV4rA&66!5^p>(3^qS^&_l&}BFvpbyT(>;R`|n*joP z^cDLfpz%RK^Ht23Xr55Mx8yEwC`mkb7uD7t{b2tpHbGxX<_a=2M4NZPE9|t?J5}$D zxTUfz)w8l$XREFa9Q_>De$OaOh0(4TDo7uvw4BXCT? zyBYXB8DQ2DqmD^*gn%EJlZ?@ytKs4x@3Id)yM(HP;AEOf7VbXP){burSLgy#RWI>O zl+ndvD(_C4sJK;Tdgse$rLi;Ui{}fDQHxKBBccd1@4lYVC7w^A6IcaEz@|(dJfZ{aM@6qDI?dU=YPEv>U2A#>}*!PD?D14FJlNyox0|jlamdc+>Cj zZ^a|RA11>SHsaNyRdfVp$@60nCLF|+Z)pNkB_$`hsE=pzwtQWLp@bKeNb$(L>dm%Q zDpJdh*h}W+fpL1y_sE(dp7>s-Boua>m?gS$1-48ua{KWt(Qk&U+4xdNyUe*}$4`xW zwc9Mnb}rDk8jesm(1@H>l=-Agw((jV(|`=cKUNiL`@1gZk!R=a#0NfKoZ{gCie9l# z41}ugP(3HGT+=^h=FCa$tix&&6vrBFiOk3ZP4P@xR(72JJczKY2=>ir;?EyD2^e+Y zxZ0wOO*4=XCx*9u1j(5hd7&8)UF3mrB6d~&9H7PQA50yCAUc9NY}L|T^O^9;w@(`jgk_lMhcH&b4vhchIGzg*UNVlEsKK)y>{m?FsW+r6n-f^wOegcX zz^4w)$0rF~mRGedRAmBs>C$h#pL5DFt{X=_ci1DAif-+!5)Knaqr{O*t945o{8=w3 zIx^2}>Ck{@#V`6}Ts*?*JdQLWcRaY-NX`R`V_o%|G39%R5Z6N^$~DFHAt(V&E6cw7 z4s8dQvJL@`a0@q#H+7g4OcHtdcvfE&qd%O#m7S&`{o=Q6j=b_@Mq003=niphQ9a^% zI!;|%af*-TS`wXlX})(o<@Olm_E|FhLIdo1;2-c! zlk5s`7XGwZ>%>7Ul9@OE9^5%d1l*Tvgf*uXSDW@c7L%L8fSdxGE<}twaF;0Vs%H`NQ8+XYp*Dh?Og{-4}>|FmXe?TfSf1wNN%e805 ztE=dIC@rJ*y{vC{WD*JbUe_i!Ia~FyRIj{+VRh%npKpHeAA#&J{oyv)vv0OOq{QHf z=NPK0S$On5&5UrHrX%qivt3#*j?fP2%IA%O68GJdc^!#TdhPLu4lW$er(3YBOo+Rq zKdtGRQj9lcTqQw8q!F8~mn1AFqW85YzK(d)OHK5Hd!+_7CWA+*q&d>RwgHciO)A?1 zIh-LN^#YP%aoakNrj!zu#E$|_MosO*d>w+gv*6D#1i3B|+Y=(*DpvQrltouKd|__) z`}?<*u6Q=UPz8~K^@8%qW(IB6fKX4@=%UG1v-loyz-6ex&9~#~f73JIV<7J1QcS;x z1j_)DsQLq(G5~vI0LsAWw4`yk$LDiM;{sAY%RTV^AWS%ooR9O`td5K466(5;G{MTa zWqMfkipSiJ_A3?Pd~aFnu(aAOF#iNMRQgz&oP^7<;vPovqUtTHeISiPdVQbOu}O*7 zGOl~JK>%9_?=ivmtOkcrpq!e;>a(+!8@gyWacESq>rBo7REMO z!dzc|q0Hxb_j!|QNbt+&O?;AoIxFO#Mf=7YCE2-?qHn_kHGk=4-{0cdw93X*Qj5N^ z3A%D)XzoQ}bvR}$v^KS*e99$y3{@xlw2=1cY7HuT`5`gvMXLfS7A1CR>f0#HiO}5v ztqQEspC;?-{Qb#%!QLkvoj`ld`3&O(PG}`P>_$c+Po^uoYb}O#bTvHn0(Pi6`c1KW zP|>$1A3sCf>6+p3`1pmV%NQ|I*=oPD^0x6QVz_evc-uAQ z@CGzKOScyh$#QF6{hDpWJgOV0@LqN`m7~6G;j;NgsW9RFnIXRB<);b?#Ec3$M0)y+ z0PE~bAKHLS@&ZywUo6QQmCTo!ObgpBwHDu~6)F#RGn7X+IwR=Xd7``dYKyNX z%h?XwlDjIqv}+Rem+=RgdiNcH%L??mb>9#Qnk?*3k;P*T*X&-}C|(}W^kYMTkXV^d zU}#y@pz+p;=+oAPXhk3pU$#-Sk9rwxxOwx^mytS{mH0O@L;AoC&W-&mU7tzlIga* zmI3yB+J2~my6J5J5|zzySaedvAZ~=Di(1_~3lEaA1L~RL>6PklowOFaPe_;EjC7ZT zvp;`6?3dVc?pB>kG}V091hpjfdo?1g2&{eh@(V_#j|&G^OPULVw~n-Z;dqLbDbfd@ zDigzQYYnm5@E-k#F4F4+Vm7pK+xL($?^qQC&c5!C^*Xibc%r45c#f+(Vx`#-vsTN+ zJjWJ6?2uNJT(9E|8AbB!(W_5M~ zsaXp;%(cgs?*3LmX;5K30<%b3m@I7eH#E~j=wy_(Db0vaInra=S|}-4V8Qy zLQ5L-9jb_iL+O46hO=QxuH;+`2-2_Nh)VbEFWGJ;zSR*goc}PiwGq?cAKO3DkC`C& zgrIPTwDlpMtdv$aP5U*WPUJ^>XXnmf%DNbMvpR^fBYQkd{}~S4jv;k(&3dGBQMC1l z@6Kd;-w}2nbj@`uVQm^waw?zer9Dqjk{mLbK;vh`|4P7wlxLdwE}>JWiO7a(+*}Y3 z)m4Iv91#(Xm;UM3Yv!(>{416fZORkKt_f#TVXWRfNJ-kx$#QaI^`0zza>a&42O;(S z$X!toM(<*H_%RD{^T?^C;cUzp#^%F%qFr;2a~8_YenM4_1irOK|E5A7n{4dYe4)x? z`6|a*iD{=+b4>Z7o2D#%YS(Rk7|G#g^aF!3h*gntc)+@hX+~*})*aJ;faSfV@7{ex z_2UJ<5Lx?XTU&I}z^nCPAnE#MzbCsB1Gol|;0GDV(nh+ueCdb%7y7{AGZ{b85uxYD z%M;T zXt23M5}MOgVT8}|uY-^KhNEwdl15}R&q;?&*)3lN5nz$`S3Q&YiM&;^N7bj57!)v$ z5EjYaw*LzCm~RfED(iksankFCY^T=NZ+2g*_Q!tclg(pKja$S)am^X5pnN5ffjhC> zRAGX*w%o?9ix~ym^_9)*oK+-u+}cq@Qg4vQrZ-wi^ScS)f;Pl3)1&LOD$#|la6Wu^ z6N7OeRi(FD%vG1_!ts$K>uWB4gBz)-6Ld#M@>r7tesUmbUlP`0Nbb?AM6LtT{oUR1 zJ1qo8c=1|7R^|pQbX;aB6+J|@)snD^@7eCBG&_4dt75(AZKkp?9Vb~zOd{Vj5M!Kd zAdD!S!kiloUn(F%rQ&2ZtEElt$|^tflT{Jh@?MnHpNnWh_<42dvLg0>j}-IDLiuV# z#me<5^KMO?_E!Pcr(6MpZ`NHAgn{z`ZV`C+kx?H^wrIUcN<9h2nkFJg-aTA}!Uv|_ zXAN-DJ#Oc6a69ikl=D6AcpgUp1Ecd1uKz6R|A1x?Qz@)gPYqMwg3tJO769;U?6?Lo zr$fVTaDUS`8tI~@bIaUZ#7dmKq0ty)6G7UE8I2pIC)YYRPnwK(>Z%*&)2lX}rzuk* zT)D;U11@;uHEf#NR^zXhBA6ZV(718JNZ!X+ndjz8cbHF}8;v2iMI404RuRv?k9x<} zH!n_i+10nH1#vN-3Q0=XFk=`-C$EveC$DH@H#KD^>3WZom`pfM2UHxCMeca2Yu6>X zRX*(5r|gXByb8G3$+3sr0e-K;5ve~3_@LB!`3oNUnog~+#Ge$|8<_kS$dnYs5}9Fo zVkr!Xl0vt(;3anb;Y;@xA!>j4k2EklO*xBVA_V0VqTx&KGA$ly&TJc0KYr#u z^-X=-ojxKbx)ePrFZgTYvzrkQ4q|hOQ-9c*92Gx93iQ|{|6DbS4<9JT7Rqryg$S~0 zxMmk4me-u&uOcxU$DAUSyU{(u0|^}fR_F_gdgMo(ZJ`^)#IZpAMGh7`5^x$S2el*s zjG+LI;Qr$1NYYPKQGe16_20FbZKQzT;)UPxq6CilL*Vknk(yZ>a*^*W27bNpcA88X z`}V}ivm)6RcmBe*ZqJlwk87sXr7pEMJG7Trn<6thM9MCxJ=33Tp5f3mzviTfwE)xbW&eQL@ysd>!K4Nl|syE$1?R_aXJJO;a5g&rN`M*d+u)#+!{ z@;g-)Q-z#6QxBa6!mr|{pc8=izy3TWyB#N!{}M{w18-A>t{sUv$4aAP%0NVH%F}35 zRBMEVgN>}<6j7v`?<~IN(l%?u=Q6htaBucN7c$$4}NAOrwArap2sx1^{Ws0 z%nYPtCY8u8amb1(W)uz|&vZQQukTk3$M|e|1sbf&ldSEnkVPaYIaXG7yuTB2*lRZ~ zS2(v@I2UAPs6_ulh2_1s8^HeUiN-)rbcXU(=(i_Q1wD~k#CO#{v`WPP0o~lfqCHO` zWpWi)*9o12;JO6{_3>gnbKqh)?bOj6z|#P34G9@Un-od?)5p^wX+whqSXqcjT)iZC z2!zZ~fjnN+-P4eF8spjv;UNTV^D+_uzd3@YH0FbBvmeq*jecLoB4Vq;PxM1bbTcYa z6DaD^!tgQqYw$8;|Gv=`eH&^17l)?kN9qTu4mdoKeWcw#XJ3*|Li5D3Px6i2tN20s z1J{~mx`a4C2Hz(zkgtKO+YV5R{|F7b-2d$h|CfN@Wyfk55)4WAdnQ8Q=QPyh#)zZG z4dHGC;#H5JC%UQl6mz8n9g&pP6>8_`BQvS+xXwg1O1M8dEq<;s5~?vxUqNXKe5etJP91}LtmB{ z@w0$=n)L)mOb0L>nlD71_it_aMFT6lf$#nC*J}ZYgVhGE@yFRbeFS6(@a2J7BW5ZF zq|hBtf<)tV;cXTvu_6h>twv@tg`?4 z(t9A!F#A>Kp#FGIJOL2$qv=X{zmW)7Xb}+N#QPEK|4l(a(mn%ZEJ!s`U-kZ37p(%^ z57xW&Z$VBEtw_8s4;_Q#?Z8ETdWs&4gQ|OKHpXQaP&gGZ!qsMqK*wzR39_9gCI*Gl zjKWcqK5wJ@&D{~6xnU>{ij(@soPGP}mh^=7}aoAFZ<+5?c@0(325x#QGZOp9j)_=KHdvF4Ji(8 z*Da`GP;@Zk`*+3*2xb$woQvZBj?l8g14~1J@+{PFIPn!wjTu|<*l>kR;-05&UhajXQO{^ThD^|oO{i{IMte}V(R(=Vm-+aGO# zhnqlwZy!k=7WmO%X2y7Xi;)=%jpyz>m zd(2WgG}1VSo3(6CbAUglq_$2N7u)$_SFVSHV)=QJ2R z`P~E~e`-f1f3W*&D%q45u(kdy(GT=;%i0|Qk2+gs1WYO*C$gyc?M9a?tvRG{ea^TH_U#NnD#RXhW> zK0J&f@IJNunv}PjX-mqYK$Xz<*eGZj>& zh^L_Ky>GYMc4b3)#egp`86ku2|B8ASaJB*R0Q{B+dr0#SU7F(l0tN932%n0+?;Qjm z^^a!_y2C~&FCkDd%b50!3k9X6>cM8l#-xmlj8|Ok@95C{K!0PPstI^_v=6|)LyUja zTl_X(n-*Yx_vs*=e@F!Oi~*oLBD~EO;f>hK=;f8m=(G8;yDK6}sqNdACttvLus}tP$k^1|g;bLd=?40ry8K6VCV_wrR)AfNO5$yPtw`Lw^NT%N-2}zwbu#8{wc+s09u`;B0t2Vw`mb z{1z9ut2+@)`+A)i;lZZ+iyyIxiD3zP9tgk#@=vSSw3OhV?kzNGG-r5T?6o_N3Wn~M zHQKg`#}jhfb`5hcm2`{*s*A(7LeAfyfrf(TPIwL2EkG6!KGPES{U0v~4XPSq0ue{- z-)5w>w*&;f4gn1U4+H$u`;ZNg`Ny&1U!Op`YzG{^XBs$v+|UMKwoSB$a&+xaO)6Y< zKl3JfC06>GsIoFT=pN)VgapS1j0MT)m!0^If2P>2*8H#yoU-hG%F>jX=YVp?A%94^ zx%BJ7RmXF`8cI(*tOauZ0;DRAVcdy7K%u2Tp)IhV{uMeN6nY8;=RdK@-T@Ta<^M0C z#}*f(;7GjCMg>lhdZJ0bP&+6lu~Ge&*`W5vakTFplybz}xc`Pr@GKfFX_3#4=n&6^|twvtE;Sb{W0ep3$` z{Etg^#{7R*Gw>rHhpi;O*Ms`3jz8tGRS5ZAtTR9Mdx(KQ$37}}Npt{syWG6IqVQAz zGuwWlw1T3F*Y|9ioIzU*Z8oTH0d0l41=a(8hSVJNrpd3qzWi-p5fM0W}gIg6;y`cz%!%0LmtovUPqZ4X|Ju(0=eFgTx$i5qRg; z>1Oemj*pMeZyDS8`*@AI;IXrH$_*eoIyzw0jBhXY>oz{U9-ExZ?HEbWap?E^&YDU1 zvy+xp1l$a093-HzfnW%*L2ST(KHjwr7lfzs8bJO3$q`5j2EfeISnwDuKxq}1`kMn& zZN;I{h@aX7LBK{Ldqg7Fpgb)}dsVl`yhPIRKM(f=<_2`-8HsM_k2iph1%M_x$@qzn z6mocYxNbAu^Jw)w%PR162-k_%B|NyQVBVm`CPheyV`3l;o6l)P_jn_h*Sz-fh5wIT zu(slW&wCrKN7kJ zfT&({plyRd-qGSZ%io93GTZx^_SY4fyt8hLaFFZY5Dk3j z|CDL5;K>1H1{P>BI*ULz1*U%2_Z56N3Kb@0Vk%V{tc~4=ZwPZ zG-XLbR#tZO9>cPvprEbB<_D|$iShc+pEp$YbidLYOos`YZgz^@)*`uM($k~z(>-Jr zu%|4my^DTzy}zl*h-2Dws4sUt)Keeb{n8p$R75ZEaJ6=IQQL}~Gd{EFk*Y{jV?CQa zt<~UESV8#QC@A^Gb)=ma6aoT*x1Jm`N6K(Pak03R6f6M&!O^T)hT%-PAUlC9N@!`}KL9Tg zS!uppRK4ZIL)y8&K5%XIocCS?ex2Ian0zx=CN8S@^$?f!Oy**{$yQ||~L5%}m&3)<^yj8SiK;DuDj9pHo5H{9J!+d!w}VTn4cY_Z%2p1ar7Op|J%8jdBcxV% zgMeQSDFN&yUQ<1f_j_w*>H|SxPeYISKap@*7%<4aS^r1Sz|de?-*Or9{~QTp?3VyX z{06(I@%m@VaTlf%DKGDJm5J=jW7pPO;&h*z?X|Lx+v&o$v!iIZxcNTKH8nV{3(g6M zH}|W!t!;oZZa*8m(a^wsRi+c3BOP5-n2Et5Ff|T1|JM6`JGZT@P|{y5JG`bNso`5& z=GYkV{n@`OGQ$>^Q`%46@2SAz1E82yU`4cN`{!sLLHz`YZQZUbM z2|TbJk3abg-kuzFq84w*M@B}vosCORJv2pImDR&430>!UlwFdwfBUZIi5x9(5{6iq z?l$iomGB*)|+$sL`i(G68JVc~?3YQ#IJ%7(zg+pmc)Hy5HK!Vkuy}9xfUg)uY5cBb zh-~j7<-hF>AF3V3LGyn8f?<6&`P19m#f8flaW@!OuiyrokkIqnhDXXg0X}}=4PBNz zf}Ua`tEhs^$6p~azgXfJSennirL&eoLwCsrWI7DP;Ob-sG#Z_cOOq6CC#dwEjtYN4 z+KBO_oS`306!sNL_dMWT-`u>Mq{HOTaQ}&q-IU61hVpRpz13*G?yaDH!lgR3vuvWe zSjn&3)?dZbAJ8oALgiQEt3NTlhCPmT98DLrL@a3P1Tx19X;i5F4BV2?{}ZA8?0_(E z^RuV%j}fy#?_AIdF)#c#o@2oifbKI-oe``gwP^vBt8IS0Rv6wln0|GXct$yB*ft^( zxg*6daG&6&E~J%Lb9GG5AvNOLCqmSE$wb*xpk)M=&$vlQ@}XmI1TE}Ix$-YNS)ivI zNVthXud_c?J2dAImIH;2ouK+fXjSoq@2Bf=mpPf?VIhW^NJyR8S*T9~)y}#jp5QL; z!Rp{>?))$;vj|*R_aj{KTZGp&g*?L#AFFT7tgLC9nhHLkW+<_7`LekMftMNnE<}hO zy{DKFO>rP9A3a5{dze3^-@!_VCO@B42DkpT0-j`l`&tz zxVb=~AIt5ro_xRu5}&Iq#17doHONx7&ra;bgQqTKEA^?i1s-Gh*I6&FIIr zeEDxf!^7&$r$S&X)OAfuuAy5|NpebxiOIa67EG{6!3c`CFV$Jw&bf2#X86*S9T1Pv z65m!Xpaj{7@$=*53l9dt`!$kZVJn@X#l471-te0Y%Zo98yCs~ zvQ+Yk@)0KowAs|p0iRS06#DPsQBiw=k9~c+CZ(RybjpT(_Cb!Bccehrv(Gn7*?<7#^H4n6EHH>0cJ8@b>0k33ODm$!{G*txgt)Z}Xa9;DiIm0nZ#K3xh z=2m6JWVN!Y<5YD|6x0@@g~;h5P-%3%U1VJRTXSiP0aKs8+C)N-T%$Pv8#P2{uzqC% z-VKh4%8zCOF(*6Qqgk%w9R|JEZfPy6!}<$>^GQ|BCb#ER+NFpNvaDZPTJ&HxDf?&) z+b%9#u%qJa^DZSM69$7nGH9%NF5RYkOl!2>s8^Q}En*4^2EQ;@>F~hlD=sbVR^VR9 z6-!NjS#Y0#-8cPC&${J00QwYS;^`6 zDCr<1c}IkQd2uS7bomwS$x){av`{+H$4PZp<>ZJ5lbfJou*S=L#PCRCGZ{z_`{eE3 z-+W8zjbn#ED=VTlB!J0p@*z+DMKh2D#Kgx>RysL4R_@%tXK8^)aFAW<(xnz zadHV=yUcd5{H45nyf73@m*t-zS8g(hBLL6>`j>QvkHv6d2_xguwvKqx;Q5j5*6@oiMb}=e5J@n ziz7yE7LX%>Xl{hz3x(z#RIWD?rq>|yn*@G=GYS-wu-!R`*D`cP z8sD=F<<`D>e1>T-Zi|UJy7TH{NsqWXl_qO)p&+;9&a^Q@-r=gv%9-E$e{#B{!uC{# z5(o`~SIdDrdp7SrLvw6cVSI|qObNm<>Bxg#pnO?tyTHd8d%D~nc-76~1{o&FeZLS^!I7GV2BGjYp7Z{@4kuT$poC&{v2 zCAH9vo=q}hic!hat1@iFSW#wrEV^$J<8s8aZln4fK>>wOBvj!$*0QD(*%IBxSHXrR z$fJ6cX!NS&%?cyy8y6@J18Pd!CdTVuQ5)h&KSJ|;u4S`OM?qK^m>k-k$S*eYSZXyN zC$A<+dPz5-NtKwCl;r-+VO^hrFk6(%*91yctdn4wXNUOb z!ynG@e_J;I@dJ+kx86+p1o*&NGo25z!%nAvmo+IJ;n%oRG+|EE*ykvC+Jl)krT(As zcbsHiu=B%(Xd)YR6rtOeNv!R#ad>;+ePU*y+}+*-exgp=HeEE$HU&A)lzr&jrkuDm zurv>%tjoIYLj`)0t%z416oDsH^0bZE#GJyGZFtCMUV`KZ0X!N-3F8&kuFuuv%%w03 z8@j9{2LU%VdBG#k)PkG-UM5=I%U4J6!y~_C(+Wx^?w}!5wNWO zrzr0a_8m4~?$Ta5)V|F?4if@0=v> z7%vk74DWY(?qs>n*q*HS(+}~yU6tUBR1Jt?Gduxez1n5}q&NcB04K)Ksk{l`^XWO< zfQWuBFW0pGLCzz<3CJES-{nF>eHJQ|4)CuSDbcEI;b=dxzMycHwO4}-Q~4r47=N>I zC8qJOTeFH~yr(BWB_kb~B!ZlWQt#R4O&Z1ZJ)4uF zIxqpc0kR(An5YPH zvicjkG4~!y6Y*A`sohyN(&A(?RibH1=nR*EuTz5YH7Uw3S#zh^SWHePxC2Tjui_L0 zL!mjS+>%pM=TEJ=ySwS-84lBfg1dXz71ZX}ui5C-P`2}fV!t$BXixR}?`5%gZwg|; zI|1$&s#&}Qs6xSG1OFEPJTd>L%-YrpQr_=z#eWJAAd1gY03vZOH5mL@n~ec8Qtr+# zq9b8=q-GU-6ZzB>jzIBYI%jLH3L}lbCi9ebOc|o?ga!)Jl+4hY%K?$|g;GW4LFD-k zM|JYpKI|S{dU)z4sjHfRgESQ>c?VK$Bh1gvjRMa%6g!`615K_ZoKQ1@u4HEWQez{w zu9y?Kd;`ju7{-)i1EO;J$0DBv)-jBT4&`D=aN3GFO_&w@m+Ew z#*oO~27649ETxw0cylY(21!D;sU5#lC9Vj!Cm9>texITR1pVO4dMCJ@SI_(wka_0) z_#HV|jWDu%*9)8Tqn>A5ogz97JjlHse~VR4bj#}T?6EEcDC1=&I4gH;^qA+hy#(9j z1U}GUDI*TTbp>9eEr+G@1$`o%}}8ZvCxFh zd<$>=yIY!|yb&Bcc9yEG5)dV2hgCA52{)3`MLuu3(_CcN^5yCwXvy+S-p1&8uMsZ2 z#N;utEOPZz4JiMn@s>|L=5%X3=W6k?C6v=@x_~twT2OFB|Ii{81_ow8`C&*epb7&~ zK}JS-qpxeUm&8{`LHuKQ{>eeV{^w`g8$kQ+xYW+O*o?2J>2h(Dpzqnm=h3DR$ab(l zS?(Nh4)9)aaO5IuPV3qaw}e4khI35vCQB`tT7Hbm+-V6~wPf zEMCa4Q*ahyN1ZrKHZ>APrdTZxB%!z-@V-dL3y$d5HXoiczc!}O{(dOo3TLqWB!(Tr zaLts=#fhsziZ3>KJhG?y^;o$nyS#c@c@3mX4_C$>otTYgIr4Z}W{u-0H8AO6s9gB{5<9 z3@w`B``|v5F4#zOMT7Z#!-`Eo8S*3Bit2%Gqf03w>ccvXuqaR@QffA9Btf_g50;OK zKPsdN+d)Vh;CP9^EOfJ#16G%&oY@N1@_1wo)bm{PfGU2>atJcvWbObI97;jvF38;@ z2)PyOQ+bk9xJXyjv>XrS>**PH-G6R-FzO###i*8jq>ICN74P%nrFusshSwRuJkI2| zyYH?~Jxixlv~YG3@`2^7<@j{@6bIFKrr=4XHeDNxR;ZYQyn~< zt(3m*uRhTmPGZl`$3bwHg;y7Atk6?cjnnS+EXqGK01Ee($Ouca<(dzR>{F_cpV`7y z^L%8t)B@^Hd_1U&Ejf}Q_6_xKhOB7OtU)&Mx>plu(6g$6Y@#S_qvbD~U;yy{>&C(P z5#4{-1dx_*bIUS=)p1h4M>fIx0Hj0R)FRxDLRIXW6jV2~DxIhuZ_nU&roU&pn_=pp zv~56V%0VD)hvDh^129AeMLCY`B}UDZa75q{M%5iDaxg9U z<+*aV8CP@~JGYaai#(O+5mRM_Ne<|LK}g~sfxwqpgE4I96EdwHYJf~qIuaDz8RI1h z3%rX^ldDARa#~@l1d^}VzkGZmE5%)C6_JgVu?5FsWvbvR7f)IPE2pu)%8mS&Wf;P6Tj^A{>Od0X-@=1_+JOF3oFi))>J(xeRw? zm;kWXYp{#A3s$&`0Ea7HT{(~Yr^4+E0CG=XzwEyiZf?K{-AnZcgP?{kf8-Or0H3&$ z!28J*@X#drBC0JaY8q|F`qr?baaM*J?k=a}Ogx2T_L1Obc zm_*`q(oK%_pSzQ@x)p@TR@0fzu5=9q5RPvWwc)}f-B#cwMrb9jSfQMdUuW6OgpAb9 zZbhU;1{sF;4ZD(~3>Ub+!L(eQhkoCQP<+>xkY5yLZqQ}yoTv0&w1-#9oSxRaPlTHd-O&(z^~ z$@35bO@8YZ?(l!@7c@2yk@Cg$%HRej0|zMjs*(x!bJ}7lq}4PP^5i|>c&TW?G;ZGK zcAvhFx_uBx;&7ioKQYtylb_T1Y7~rUG_c-5lkNst@kwWmcs<_AWG5@=8s(WlL4X%V zn3atU*faJkRLw6sHx9@a*zH6W-YXQRcJKho7n$+pYf~EfrH~Oo9g8mdVKNf9lOP5tg&t-SepkcTHjkEchWye&4S zl6`gU?q?~4ep&eMl`TQCRAY1y%a}CHEdV996h!zYE8+qa@{2|rUG`N3=@}SQ+l`KK ztbl5Wh}vQfScE$&Piz4O1KgJV;U?(>KZxI)ev@Mj7-U!covrPFxy zIBviPZWb|pVR<9Vegphyr3+!^ZCdq#^VnW0?F1Pzls<~ddH zyS5UEpYbo6X3L{fBiHA7)_-cFZ`z7Y{rK^++L*x_1(#BLmYwu8UUWpToD^drEa>eb zl7ucF>Nq}u1ZPQTmMQ;EtytPk{~DTeKZk_r4%%B|sI!gNV_t0$KkrRvhKahjZ(k4m z?fGVbINdr+<_AX$(C9%3%jVaQwjdJmIlTy;dR40JtOM|YxK^N{HuWWqr}QPHHJhQb zn7u=5e=S#?zq#BS}QKQ3>C8(4*)`;R>76eBH zO&5nl#lh|Pb7&2~E9^&3z`Xt-7on%cM@P?sO#jkyLl2S;V`JkpXi9+Hj(7-bX=!OT zdsHKu51=;6Eh}Hp8%iO39WegJz33)BMeZpF&`d+&BsMxsMk=&j1a?`pS350-Ew_q< z>+!5Pz)j8FR@J_>TmXGkIx^`b6}k(6>Jrpi&jtXc52f=lM;+h$bNVAXQJL8k;1p&k z`3~MVyY{OpH)9D%+kB{+B2Gls;vBwY&=K4=fv|USysSo=F9%hY*4s*cJLk}LQD)Mao;9jkqNXT_D-wYTQB*Q z5oA`v+MlFAx3uQ|9aTdU1Gmb{%KFE-T{3cD7lm;o|JbYabM-s9Z2i@oY>)r!S(MF> znw8f}H=mMiX$^&vh%7h=)Q^<%xCVm65Sa8_W=-673iD&q(n>o*nqhc1LK`TtYK{9b z)HUodiK+1DR|bJXmVEFbB?ryu2Qy)i8}AeqtD&*7v#TmJ#gF9%(Kn07Rn*L{C9P^H zD`y3S1G^$8`ICFiZLGnT@53nx_Q25KplX&70{TFeOraJv4@h}=BkW}54> z^`&#+hpRU)Vg_zw9v+Jo{!>*|9OqQUQ*#qbPnqjPrpO>hRf&O$Nqm1YhR(Ts^V$5a z;IJCx|Hs-}N7d1E?}7;s!QFzpySoJl9w5Qp-CctdT!TXh!GZ^OcXxLS?ryg`dGmhX z{mradGwaSjtn|t0?o(B}wmkc(z3Wic;+%!TfCLPHWYge#-`kRskzGJJS=a55v)L;8 zri>9JZBZQ^$5APMc%~?vi9#8_)RP=bA*Zyeb8`VCf!{Wwx;1JwQlOloDVNU{Ub;O! zTost6g6ZKpv9`{iP1_G~TJUfG0@WZ_UWKQ-4%}SiNG3u=NOeF%ylijqKc%?YKexc|0?N(QrNdpkiAAnN3ma*yX!{c;X8g2NXY8E@3mZJ1xcZ2JUt~-u=AP{Z$=J+~G)03aXidv_7hMbTP zJTN0kx@#ui_#$r(;w=U_;mLx*uS&dM8kNYJ=GB??sHF}N#g7k5@kb2L{-yE|eg(&n z=TwUIdkn{ZVEiw*fg&O)NG{RW(ZAWBP;k5(WIWY=y2We)Y-@qe zSAS%_%=b6WRR^zQu! z;pin@`6I&ID~AciBC6*yNhVZ{QQWer0HZ1$3+@Zm*D=K;FX|v^>-cAR4aTPk?|Kx; z8$$+Dtef)Nl2CHuM~qZelVFObCMWavI@KT&m!`YAyRW28A6EPjKSU{#$4b^H?w)DT zv>MKq7t+LX8;<2Rh?g`!*18Qi@W1^yH>yh7rrfCQre`W3NUm@q*iuP6>We zWke{O*J^*7pAL!KyR8`@gyPB_*7EP~>d^U;i8lO@3x%Ubo42E1tF7UbBP0t?9RBhx zcEzXJFoYl+CGEW78rdZf{9D-v#EX|lVCf%XE*OC`>Hvd6z+xi+18^NA&>O^S*7i*W zPJQ~C6QB&F=+N-_Cp!+BEKE8XiRRo=^>Ep;D}=^G^S}hdnhP!N;k>_FhX3WnIq5%` z?qTS#u#L*Qt#eJ;SjWHr3wh$fnePq%>>^9_IG^L<3ZFra$OPE z#~R!9Cf2kuo>b~#SHKtlu*f`nW^u`4Hj$Tp{B^(gE~;gZ;OSZ%AT^R{C;!-K^d3I% zNlnEC>AL|Y(k`lQ+u8&#V0t~-pb4qCQ z20@v0S_51yYBbgN@4u3ViHVD6I9LKncQa(US~=e)=8IE@pnZ{?ioOfGcRfIa^FZIB zK(5^fC7X0erKn}7mIK8`M!5?eoh(g`9vAN{=0=t0l{IDr*5I;Ti0%%9n z15}x+(B9;vqIsg98ufh=C!+JR zT5#WVdRH(pV!7L}Rt!4eMSVsVq?p*R|kdBCy2T0HD5;hR)w6CFj&2abO zR$NbsMplJ4zR;bprWHFI0%DhERkAGy4}gweRN}^IhkNp%TbXMjQmU& z#T=_Xri?0$!>6c1w!D_{V20ZsQZP2t!x_`xUFFpXoV&Wp()FypHS+OiUNpTCR6^Dh zLlp0tcuN`{A);J~nnO(i7s!pJPqS*0C%pcHnzf`Pz~bW&LlDzu3iRpcC#rV@=@AXK zNj?neA{HFlRx@7}6c(N2ixePfV=5 z61aZ874W}WeaVxpTzJ}J1 zOBXd7^o1&A!UyugaTGkVa4+49W1r<4a~Iwx`!gQZ?a^OESk6^Q1h5!N7HroX*6mHO zp%h;5lP=J(fvMcnNB+D0@~EBE<-4V;51thGV-(QwAgwD2AitCVgxQNbk(@vTAe8yP zp#>lz3CViWMpYqUZsx2nq-wwoV@HM-!do z$=`)Q5ZO?ppJrPTw_V2iFbP>NI?WOEonxT~%T5w`b>D=<5Wi=o z#eSg*&B%)1)v84EV?dzf4Kk>Z|{P5 zMx$cj%%xc!tX}Elcct@H&NzO@6QBI?(f|`(cdJ9brgi3X+MTnWp(@@KTY4*rD|kfQ zM+k5$?U6=q-u=h#{NGN4y=Di)!lOh1ztrH*K}Ne8{xW=+?RIcjOb{a#UouU{)hhO9 zJ{OyPEqG~ju}OmVfV=@m0Pl}U?Bs^8P&^>I-~w3@#35vV&BAJ7Ew)(2?!eK@VTJNl zrcd}hn+2)Sg?tT{ESTlUH~X5=OlkU?sropkuCxdYQu^oMHeON<-siUV;;lNB`QwXq zsKq((j0t#R<4QDYPIz}O-yNZ{ZQ`KnPjKxlNYosg1Dy{qUw_B3*e#sDeY0ED7)a+H zv9=D`G9 z6vMep>7H|b1L{nFQbXS?=U_Pq_fz9zN8IMPj;-m&Ts%?r}qx_7$o$YWgsiHYyKNs z;&}qFkpi8(D<=0#3*MWJSdjVcc1fWqZ)gb(B?W&<3mprn8j?UXB6)pLQpl7URkZoe6 zJ5!NIrus5{<~H~qF7C0%9*6IOi0Dy;$3DHCv4I;{1;E9IFYhCRvX)0Nmk3QI_i$ zwpZs!rN4ppx8gjInQ3gmQs3hlMal?H8sFB_lZ1j{S&K?Tfz?z;k8qk9)#1b7tyHq; z4vBeLSZEK)BvGSx`8G8n=@T+NjoF4@5y^TKieb0OU}iedM#u$?nMG_hu$Ck$*5a*u zF73Dn5U+fvf&$e@4u4%Cba0 zH@oPrAF(Xuc@T6J0!v-WKI%mxGakm@WEkh@R2Tl-D09QBm{1OH*LMaSU-=NMOztWB2UTp`{ z38mJ{{A@l>kM}obYK2e%8D6)hJx7p9Fz!Efih1QCmLTdON84H2w*D_Uh3Ci{`||t* z;LX>T4PB(Z*9i+YMob z_oK{@co~o#-fTePG7fZgoFuIE)~Z?DTxFcJ`e>@4ra$)_jkLKsM^3bw55yzjkHA#_ z)Tf^j?=jXcASBC!&@tE@Y&*SPW^a*qef`m+!jX@EOzc_KVVmVTbLo5Ul{3Oz*d0;j zwV$)qI>nx3kGHdSv~;GzHM%fXjhB0g*j`XYLCf94>=psDJG{L?K*_W;MtFxgD1+>< z4!I^a_$-T{Qp;{F-s>`orkhSaMI)`?epq5g_`8$#?D#yB>U_j+hY!K6sivqW0jqW_mGSaX2s|hh8#M_noZb)R&)Al|xJs^-_qwXTi9--l0Lb04`>NnSxHlSSKA=%NxWF9fKgYOgrwO*QbaTvFK7>d7d^2&7C%PByM97XDEc3}$8kx8|Qp7?G7bU9> zS--S(6n=&baqdj>#f{$`J!k#=NZsKxwJE$$+5HeVA9DdTLjKveuTnj}{8`VsqGy9M zFal~!Rc+l$KwrqCBT1LK8Cu4&ISK zkn@j79rJ3uHuM(r}7j(rIS5H^Gpq0J!Ml8)|Prl*ZJm2aE8 zn#g32LH{Q0(;1%naWg@6*4PgbGhtS^;I>WJ9DTEIcymASuFvRE-_+sRsMP72nTn+0 zm8Ooq9U|7?V8OqXQ(m9+q??)8hti8ZzA!K8;)?Lh~BL1p7x_x{a zu6I0|Y@Ad78AvCEf2ws7vL26w0$~b~jrJPN#OKQxIhwHdLv^#Z6f7O9<||4|NhwMi zNEE$pr#0FVmtLu*DvRE!^eeMP&!=rISISli1JSDD!f8zUjhW?Pw+4X|35VvABMK*o zf=*faThhZs&4I>Hg&hI+C<-U-jqLKH>(XwUg2Fqnl4#fupx|j%U;fbVvZ8K9{=6)H<+O92q;I$N2 zD_# zKLqCGFFpmS@zCyH+)HQzl`O3LhQ`l3RqQ0+)z^njTqUeBV+ZreVuTuYl|&&nRG!GK z(&Ld z8K*U;8kk$My)t)FbpH_;E7Ej_uM}0@*JW_T?{&NIq=4s5 ztb>eBw&!v^9(rPV^Ri^Zp|rgsS>Sf2F|LAdu(h4xI4w&goy{dkAwo8)9ObIw>SX0- zQVpVK0EH~;i5ZSf5n=8PT zpzY>I+BL|~oU;+QSFI$#b2Vjn)%WU+`WxDql?JG`J;&`=Kk#jP2qnL)!#3gS|KcW4 z^dK@GafGo^(JeQ0zt(+3es+CkA>a|yZO#CHH$|9B@j}WFd)bvRJelA~cRW+9N~`XI z!#A}{Vjxw%SD?gJ(ffzrT$K+EhN`Qmw8UqHQSCuYFHavxnKGABuE(`KIf0r8wpy9CvFQX|7vN%mE{ER(%9#c3IBsiVm|7CR!E zjPGG+3S%+voHRd6BkZtTintI&>j-#K;Oy{Bz8fJ3d&No;vEkybZ-ijw9EIi_EGR|6 zXFPvgdC`G*fjiZYxt_)KiB-BcpHxPsou3V_fXJzsTtiit6-^uVQMLiI{$$E={i?|m z?MyPtew7$zT#ZW7Jlnq8mY&x;aY$e0gbnVBCNS>CyvJ)C0yW)Uj@e#Oi=s%zOlgiS;iADA0OZSw)Z1N#{CAxdal~iK>zy5 zG2p_UHXeC0;M;{`FYYt$3~H2g0kyxof`Ip}XUQgK11%2rU`d6e#^Y1lLpr^C?#Ezq zjL8)f(Y_aD#pkiblLp}^=cU0mZgVL;P~SN<^sukkyu>bR~+fiJm8MrTq;;7{cC zX{3d&j+JP?Az@#-(DvI48ScK$ zkq>l0Cu5Iqy?}eXnAcSHO@+mH|0^%6M_zpXkR{do1P(8EuEg9eaJGQ4@BvFPVQC06 zm+Pk86oKCA={aWg)2osrzIF!0Hk^cIUsp}OJ)=Ke(|~150hg^vFBxbp3k;|MygVZR zzMRl?k6H$UrcNS&}HNBu&=b zk2k(`7XQ=9>vrG?sYks#&a_|U*Uby>>XPI|89M*=%xl;%25(1xZlNKuDx5DTwTRwv z-?pAsY-GN@;@Upjp(b$8xaMGYthBfIr4%Bdjzo?I)2aQIZ-D|kObnG=@r`Q|8SlM& zXdYau(UZ@crboSTHjW>oCLKVHgAl$`LH0AF569vJ1#ONlumbb;=@haZvbABF`T);K zb;udhW#)K6LW_6w#whoig$Vh6_1*qxRL5&OHGKxml8xbIf!L4viw=16trDg~}730pcM0iP-$}-#X>*R;IxAHdA?7N}zgLNdqhu?hS&gV$_+8 zP+#zgco(P=`^$^NO7ZbJhYN>>_X zWpl9C4kHuT1uW5V`iHfrk4i8L#*)YNYS3(jDJsCFJQ>-zz1aKAr^Ab(tgepZ{V?r4 z*!;NH+!f>vn9(%~`#FoM6#lfPCjQ4$hNqY#k8K`a;MCWBfAc+TZEY=wC;l72PDZu7 z2X;v%0VrRjfr7*U7WgjC!*^2A_^i^`{(dqrw-j@+JtqGwarBtOqdq5Xcc{hsYq)IG z8KZjpW?|DhP2r%aKPN_4tfS5o(P#jy9g4$DzD$&@`b8_tJM zbQtjadd`EkO^wZn3L!Pls^|oXt9oBf-~{eZn5x*xbSY`JOT0=#e3Z2|vUkgQ7cFx= zZh84DzQ$zdKP1XpZvl2P;@nt~DLeJ)YCaYk*Ts)+vXWPR&;3>I9#`}@)QoDm1G|0y zSZ|nvVza$KN!7VMZMt@NV@^XbVsXjJIH+sI7=EVgmePqghLc4IR{#hjo@2$gqd465!;9Y&5CH%@oYm2p) zxKkSH^ugaZhrI%%s#_$URs6RutHB2@OT?wFBy~Jqza>WgQBbfh)ESP$(M9nvS>hF6 z;{C8!vv|m)`qtBv@97xvsipa0zPYoz8DQ95=X&2#0C-E60l!zX0RQ83(O{ISE|@mBj&mI&QXxu>M*GLJV% z?)&ozU#;i&&4kK_z8xL!?EITIKTf$GAQwVh?+?d6O z_bz$fpVvNRzd0@q4vBH(z2E7)uJZ6xHghW1C5)HIzWP~ZMjv1GY<0Yz6RJbcX;hFQ zvv_>p(lRT1IfBF#rJUwWqFR-*hcee}S2GS_f752&^ird+-mN4*ICYKZy6?xl4LfdT zW?2Ag7xC5>=6ir@sGgU8>k>6Cr@V_toBSw`U%0>C(;1uk3r<(ESTB<&jcUj9+#T_B zTm_)^iP()2D}A8TcYKa($vwDJRe;=YV@+~^w>`T!Cd+ww-07%YhPg`07{sFsUYKoAN5k8koZ{2ktkRomuQxfBME=uhTk!J90 zH5p`M|K@--MV5Uz|UT3%y6@zJ4#8BldlO#&SgJ+TNE_CUOTV{Z>L5@ zoiebtV|cG*6r8*s-1*<;ClUe zIW+ZGLStVHv2nmL19l}cxNY^g+2RC+VO$!u(p|Tbu6q+ID=Sa9_>Ws4PmnfM{K@s7 z?i(!U*&ny89|LDHILgd{b0{Z@TnY4=A+1R6U!5(A)6?&}tF}u#YXAdY+Bs5(YeF^pA7gtuI!Yg8NSc(e~)a!@Cbi(-Cs0_Ywf<*n_$H} z7IN(uIhe~lC?rXXivzvNb3-kM-_WCItmiY%%YU(=@kMznN)*XtYh;MtjgQ}mHmr1Y zmSx{+f3tz*Mb5ysc_@rZ@}B?5Gu8uRb7zc2{u&aGPtEhw{k_FA8v1Ml>zS{%e(I?e zE*B_k_q)>XFLhiE3tQe}2di+hB)vM)>at9FKHylt{=jdos=)n?`@Aapr}AZEjj1&{tic z4BS45s;ZMu$XO5krc^Xc=rHm34 zFq$Z;n-u!3*GdC{1cMmso)69;HPZVH-^c_!oG z;CF5J984%cd?rQ;7yHaddAXMkAlQ6xQeFG_AzJ> zvN9qbk&L8J5DJj9njz&FLj=Z`Rzbr?J!pYyi9R#A|s#4dg7 zaejG$!V}Bn3m-Zw^kZJEqB+#(Q%1jQ<29}YLJXaVRvQX5GW6xx=Gi)I3S$!P_qu(R z@W5+}C5OhHB}TC<>|7Ga`dR2tJjR#Nf16c8ay5ywunTC1~-Cjt05DpEaf$^6MP?GjoaJ3sr@&8d! zvp0lS;b_UwHwJpijI9uyQj%t1+1oWM&!?<9-7n$mB7~;pUpHTfCXg_Ms{Pa8l9W*h zbhN()O#l4d-n0#f3YOYBC&$SB1vznzfI^V>y&3n=xpEm^IRf=63)k@)^QppB>!(X=)lwaydtJ@n&I#$U5$I);{PnV5aG{F4E&uDK z>2Lz?LlBp^0xi=&ACi6ob_Dc$C>gMY5|C&BJ+}@ZboJ9zV6L%e%rRW+vyV>A2%9ws zYc^zE+v`|%{UW#x0Ny%Z*)B19qo;-Fz@hwpqM)>(kn92E?~9sAAm(kDr2cUs&FV8F zknsqVHR1td#bR1Mr&}Z17T2T3t2GC1YibGFo*SV4-f8WyXGC3H-Sy1Q&d&X8#shZ7 z?L= z@4)y&Tnp<3*K+HS&NDxzMP6CkXP^x{FrviGwCc}N_`C&dD2qIGrt5#LPD3a# zU(u6M$jsw1I7@bfroH000$L67*LR)PXS#&=hf4eq1g&#pN9agvvQq&TaykTu4ZA{ z{i^!UJpK=G1N=0x6d1Vd%$WHquqgjTD@uUiJDCA((EqtjOdS~fD8@(c-@k!z3Y;p( z7pzTxy(<(fG{EQK0k;j{^HBCAVL6V_{^NPA%K-PDC@~HG(|8k*PiYlk;1m`+l{Ua6 z3xjRyPwi-Wxa@c;|6kvHSmxkV)j_<`243+;sNsOc$xj2f8zB?0 zy`;mqO)&oapU(+7aIZ^2;ug?D`JWMx7Xp)pT6L~g1BglHZwRUueFL{P?O%07=ran+ zONHoU#_wT;RRVYDYd#ML8(sg=5ifzMo{$CKAB6=>0l63+E9{^DYjHsZ?rr!eefFPr zqNqy1z@gRM=rn*yeh*Gr!vgSULH0jN;(vsXU24D`WyPPmK%nf8BJl(6Got|C{|*kA z0@N&oWd;1P%Kg{qztgDz<;7C| zg5vkE^ucLXQ5IbPog)BW>mvl*SBd&ZYXVd7S^gD>+JK{GTmmP~8hza3KRe1F=(cI! z_C*U8_|4>T!1qZQs{fC+rH;lcF1i;p3K;gwg&Htnc&uz0EBX53uSJPD(59{A^e@lv z@_QU&RAglX4&xnOkcPallr`VEIjX__F#XJ_%& zgb9hrb0xsJ$6^ELGF$=g-~M!fk_Cm>y0F9zT&&;n5Yd3}f3&_nZ(;4Y@sc)-zQitQ zi%69uY3Z|XcAEOD%Z+Uve52y*7~~J#Xox(kzLL%A^N7&zu0Ewm@s=UPZOW{X6@MAJ z#sBuBEVUvtORo$=yXzsv{gKb~O>e$^7Dp8obdFcj@W6n6_$H?u?+xdjZ!3{**C@_z z*M$K&30puLEytI`&arALnbDB$FJF6oZPNTJ6B(;+F>u+Dwnw$&)wHtBlLtjQ5H`Aq zeDZr}KN4~VWfcn%+zdg~z{#Y4_A)TXfaJ`*1h4;p(d~qzzNw0m$|sNUh>BWw=8w;Y~+$`OaF%IQQ_mr0!V{C!WJ-Y;0B9aA}PV6;7V0&ws*aMfyi$*S#- z@U)FTZ&UCp+nc}O3V%sLUJk9uiYu_m%KFVuR+CnpF=bhm5B2IX<18ynvtfpJpz$d} zXoy#dE~(X+UqwjhNM6frl@sT(+Q#PhL`@m=q_;lRGo-Cu8fiVd8o4iPSSrX3!pJFnBL@wSN8+O5Q_wqNd#~6S6uo6r5t*U z*i0&e9bPEb!GVl#h2OTxf6JsCedl1{B1V!(hc#dn_LA`p{96*DZ_$LKHi;&Q*W&+X zMo|6(6#);9YHRiY_3fX}5TNffc@lBdvy zIY*6u^MMRr?vbU0K%l2Tljw&S1-Us!=MDnyOM-`o#nin+;y3QUR>(E0?V`#Vy-{c| z8T5^Y>8mnK_114z@w2(mp2UFI;Cl`3h7osZz}>Gy+^^*vf=BQ6_<>^`6rn~5We#@K z`>uZB2f*nBu{xwm(8k-GfsU2y)EkL^&BD7CK0q(tq+d^{fJ5N~90~i4fVxV*RD_lY zG6q<4QKBl1S5rPO3m@Rmwf3{N+n%*9WiIo=F9Q_Vz_L6vdm&`2gwJsXEUQbf*F3W8 z=GM8**dCVcM{>V~_qW9QfGu93TvOgQK;TIvvq1Kk%~_+ks$K_QK9wO?pR>VaMgHp+_0jyZ9-P@2W6z~^0yNM2E(GR~XYnR)NZ!u)co z-n6#e`wg0A3}_eVO1zsvcOPdsJ8mf(UhIg%3-*5fg6}t zcWo7cEqad8$~LdY%N2W^-?W+phRr7?;1jhg4x-BO4>jpTDJ^iuz$9@rhIlBW^p?@< z8*^Sx$a}8By-LAZZf6f~Or7frJJqvFVfvh%o$s(e+nJ+CXJHAewL2{-??qppD@#28 za!UpE{%srn&_R7mZ}D^9UV7@>q3^VlvL7YrKW5L)B%5(g?5|z z?Q&F?hK1ZqQ;!w-t$*KqpKNMWSr9?+cnuI58#PLKdNV!@?WdCd#5H>Ts>R(0Z@Z3j zj+^!27a`x|;OPsh^NHKCq=StwhC0vTT4m?d)wn*43z1lbP;4{T|9n=>5;__0q;Th+ zUtqe$$td{Arx-ykBE!&HzyW^GHi8If*euyzZp&aCt9ZhlnwUj&Ty3-KfJ1@fW*WjU z(G~Y&hc<;Rsa}L`pWiiAd2cQsf7bTvQRbx?HL!bEZb8B1XIP~B*LfgiGy-=tcH>LX zE4M)f%`n$x5zxft)tE%Grq5pSP0bHxTc?BWQB|3}C8y*o2j&s(m}(W@vQn(GZ}Br* zbl(W4#k`8+bZ*W0pGEzr}NdvGv*~_jhW9&Mj<3z(WD=cs^yY8kGAei;C%&Pq8~Btx2ujb#O2

PS}ys1R~mmf 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

s)Fo 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 z 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

OWI)xkJOV_U^(9#4iodiyVBpuBmD!4J zbY<(W#KNENF~O{ii_SQ;ZtuTUknq($J{HlmJg7lY4OC3{J;ny7l#IuoL-C3&Y-nB} zJgZzxDN9Z+HPCG^&drI}Das?{{OrF9#{&XRmH8#kfqNF&f#N5$;V{8X0{-Wl;W z>n90)H3sp=j&(!Dc*DpmiC=hatuUk>i@qin$wegnyII^|k>*;KLDF4+?^}=>ojn(S z=WLqAa$#+plR7c4=kC&OhZnVyElQdZUs~UQEjs z%y_9Gtt)SD|Io=G6Az9symz78<2Z)#*?n$)H}zD%!`}=bglV#~NZXH$6t8+qwuTU; zR_w5ZXitK7{A|s6Gt&0Z$fKT}c8P<^GF~-WS;fH)HL+xq_c{Hdb#W&LBHKFJJ@u8M z9IE(XILvV+RiV$01mF}h_lzS3Pd&-Yi zkvarlt+t~%)9Q|@@8ISw$t6XFjzL3Vg?tc~iH5(-b`pRVy=*#|8Aygv|)yHm^g4aPOhY zfA6jTN;v)}91E~>8*=|JfA`K)cG&wWtA8?WKb8OpFGmY>eGOCS@v+CXY-hg$xk9mE z`>sr&oz?U5S&KG?Cau1XswK6c4cBnw|7rmWCcUi|2YI?k2Dqy8K%7d`b5C7ECk_(m zUX@5iERqv6NJ*#0S(0DJRl{7S#XzR-7mcRs3I~O{UIk`l43vzWS;t#7m{)+)i>^G%?;6rNxrd42#{SF#5~emvJM6ydmTRq&3>l z&Zk2nSo6eBMqOBrCGS1r9ZEj<(L^GT=_b$%!e{t68bx+DEb%fbS<=Q04q&s`(e7p^ z2|Y(YdHRo3TkZ;4HR#L&Aa?P$m&I}gvL_3@+i4?T=4Vc?AdeosLn|#<`Zij-9i(AY z6)gbg4|}WLXDcYP@#S3Q&Xtf&>e%wg3~sJxbVd6?Vc1`jM8e2(Fk97QVb8WyOz|w& z=>CkeiX;(LO-7WAB^A7M8-<5zN377V3CtA7PUe01@B~xMa`|h5n6hp|jfVR45oxb} za&uF06Jb(l9_JKGCgb%s5>n_U>7Z$y2ClfW#9UZrmgpY5)nE4j^>?uVE)mV*c zwlR#Kyr7O4xCV{3y3uLdo64~$m(+l~U)lT7Z?p}THyA@S=y3D#o^Dh+Fh zE?-XDT@Ykh{LuS(hN#))L+5Uc_N4{$uD(;2=^M;J9FK(!bGTqOGzEODS3c>4n4|Xv zlYE^Q1YJ%A$(~u;Eru#qMYUII}2S>Y9 zMh%`0i~v~e=c*J`^%fsC-!yC|Psz987(wc>8nUyE?yov}-Iz4SIe=N(ub#dZxRDAI zB@Zr<+Hc4Zg{94rc=Y5)30nD&sKzPM^ZS}lJ@>!w%J%&ar z7yEx^liCP;zA7MIG_=mrSTT2Bw`aj95A;pIZ)vS67JXvV5Et6dOAg{ok_xp-*Suc& z<++YQOzuV(Ab4&|J`5V+@!X@8KoI#u@g zk_mcy{4yWu_^_B1Cxx1J31fz*t_2*}srO(B13qB3>Q;?&@y=7Ei-KYmiwg&Z1TQn3 zo35S`IA=(%&Z+~;2A(H8%48KJc=yaZE{r=#WYm1ryrJ4$9IPZu%r6o>jto865b@PE zUVGf>FB!`}5Dh|aEnD4#bTl2A`f9H@$Ku!JAi53~eNW6LLSAR^ESu4#zel>6U;@`F zH=XOGOG=Bx8AOQ-BZa8s@u`nhx@)1Fg+a$6{9~1xv#(P%Wc{D4NzfL#4DuTqMcZt! z4cU%qiPBasBuOn1;I)RdJ$tbkvHS5ozbeRUe!MPa%4f1ea^tbOj`-uQC{bh}7O%NR zCEX+mAKv1^o77suKwKJYXpq%6`arakl4&DE7M)ZfgfVQ|B`^Td7yd}dpz-SeYo$Rw zjr3)K{IW{ay^h}Uf`QR2g_0hcp{31;ZD+PrgZTW~!;_mzr{5|6jnMvG3Jt_^&jB5Q zMJ{GI5Q+UO%o|q*Di75DTk#tHgI1bJ;*QfumEyn|u6BOW%7x4xGYQG3hR;+R`@!zL zX9fy=kH6Ywu1X3Z=NRM-2hn3kEHZ)JA$BF;HB+ozdqi2*hfC5IEG|Vy#~6Lz)s7uA zPs>{I7--B+7_d&rO@iH|&&$8TVI{`h~<;rH6YLJ-RI@21{p2jc{?BSWgiws(QR!R!*jDmTbCqL7fu-WXZ-jH!ewIdF z-OWB<)$HmgehzUP5O7hTVWUAwJ%X%DQ`A*zE)m40Upt*_inSm@1jYKCk8u|Gw~d0f z9j$?DhY70OjjVMVIJGt>En%ZARO|Nq$Ts7`>d=VnQsAv>-F5{DL}QNn2y+utjqHp- zFUo?}u?u%4HNFXpJCz=p6b%D4>I9`s_NK<`EPmf(r!FKeq^{BPq0q`iT>_eLB>Mfr z4w7F=X)lk*K}n~TiVl)YT5M34@n6W0F&z`X&QSQq_rlhvy}tlp>eUCe_D$ehvkOlP zWoIhdYqm~dEFmNjX-lb(I|}H|J}>^^ts+qmtKP0TvHee>=Cc48FY|bnaV;)JwcZ2zil?B=_8CMQUICL-Nmn5=m2%Pu^n30hP4k>b(S! zCUaVMb;C8;Y;=gHk(BL#opG7v)W`=8Z%vF)XfV*TzL}R+9vBY>!Cf3koogxG$6hMm zxddwW0p?Zx43TkbDD@PdT?6Z6Y9XCdlFZ2$>FxL(r@;0z_VT%vkpu^na&%KTG1^m%7CBRw` z72sgkZWpm{{tzo_nk(mE`m~9|tQ8)(Ii8S9JWlny=a1^&gN5#gqFcBfCb!$^Pyf5S z=f5Da6Q~&U&U#@^DNKCz>IIQ~K2a2D4ddtc-fq}_Kl*-6Zxh>7v`4ITzMZAlkUyDl z^+&@0;3ZHr@&B{DF6TOwu}hkN$)F2C(|s5M1K^#x}$#E!n(Qc{bgDv99^OD8rRBW+viHueM3z z1>av0rkU~~+7WZSm_X86CBXa4zV)lUG0+(PNJXbY0J_z$)h5lHS6@a5{JqBmVs;wX zn*D|gEU>Ihy-@LOw@|5@yuHzvjuT17WV|E<9=4_@yGio3Or(wS*pUOb#v5(6Ow+jRJM`B z3LlGqljT-7k?nN`ggQ|~X)f0dRXp;s$uyfg-4NPdwD{9~n|PeAP=CL8PN9&;zB_aw zYSbb%k94KnRR`X3;I4s4XJlOL4Vu~kvheDB=U~8$#aD85Au4zaxeE&kWB!`b-S!fa z5))Q!BjN?CyAu4vJ2hFnF$T~I{qDEdY6Gz(Q|Criq09kHPm}zNxN5#Y^)r~C0=b5Y zlOi5c4Yd@49RtDAWVs z{bjBW+@G}{4%9bZNtQd{0QyQP)uqYzmMCv2^{*B8mngNzWS*-&><*7(wECP(vjnw| zPnIVxC1lKo%&%MN>gx7{Oy#+}S~XjEeCOfC?@wRFinQ#Sr~eqPUG54@iuIqyx1=XG zEDg7>j#{=l)Lgo4>;2?K?fa`rN=nxgdmZzoCCFMmTfn~tg5agQCTe6Y^43A)(FzqT zI$)9Bm!?o@JYkjvo_?YiF(16Uey_G3I!k}c zS*OvgRp$IGqk=ABpag*%6L85s*A3&+(pAbc^*lh`P6IP8U zlH-mFKUz>vKSz6&(~a@U>lwo;=57w{RKq)A4%o;*bEw0!q9XS={JTw1uyftsl^tFLjQKlufkJb6j4UE8P5WQ1aTKlSr%|y0F@+%i`O7Sb*>~=%_ap z%tG2?;GJ&hm*2(NJ%U((xB%*BH?!qE)$|LfI$UyzcEkA}d$2EvoYKLhm4*0F5rRX9 z-p^!d)PryLHXK^#*uarf7|s>opb?m%aW0<05X8Lh<=-YR{&BLH0rhDcFSTqCbka`d zLFa>CpOZ$>_%A#se^9L-!FLPvB};?w| zgu(q~qfn<*e#9VZ*lVLlrEMvthY(0=oDX%EG~5|C09hW1SQz#qI&Z9z!rfNb^z7{C zkwxxRR4u0Bl7rap0jteUtdYJ`tvy6_ax$suqsQZ{lJl9K=Vo>^-U~mG5m*A5B^LI# z%|GJWlV^QB10zc1-e|3pV7#KjIV=`t5}?xO0G`ztNj12CJEjpb^0fMVRODd)5(v0- z{)=1u3#-vtvKt+I7_h!Nl4@LSQ2KVSqy1Z`077+sp|e8$RQ8NlI}FA%_2Wgbd?sl} zBggy9Q|V+wz1--1r@mS{70XP|hZ}W+ll^%L#5cjwhkH;|K0?(FW~c9>OT0#XHiOYS zxk!~orca8W_~fBvko{oJSCQP#QU#WHIU^N*j1Yv7oVbvE(l&9E(a_rGVOMM2Y?lzk z{i*ww!u#!SwvX%{l;x3A4HENmmtz*1*d8ArzXRP64D|H>suME+%285fg0d*(C|X&cYm~c-ncGv*<0wX0cP2W` zWE)q;ZMNi`0o}#TGC33arZIu;L3NfvQ6AnplaB+g|1asBK&hKvl=j!5R0$fJ0JVMi zfmzp!`9LMQLtuBNA*b~@p#EDx>%ACI4o!FV3O$tj2EiU)Ht*P#=B$nWy$Iu(OcuDE zsF>QLMGkU+I1NREOaq#gMy&QzC*79^-W#%8j*G)DN>4Xh;VctUISCfXbO^*Tt=!C` z{&#NL`TT2*bB<|J90E;XE+91)yQC%_y!FYi!SmsJX0i>yztXg-Y6G|Lgz_r=qsvAq z`M#40q`w9N_A^*co$Xh%9%pyZDM?Ppj^p`ZLp=svF^i^RTo4z;9N!oblTfG9%4k;U z8FMxYL7uRe(dZr^!4fFBrKa{$i$ ziX5jg;51yoxw-9$8Pcbn`?{F&SCc$Gys!hRM#$ zq~EP8+uWS(ENfSgyhHvlQ|P3V;IZLh>;C`-(#y^Gkq~T&jcnb$<*-2r___zMVFAMb z@Mc;->w{C`qf&~TqqWlMX&PyIp(L<*4%a6Cc4}a}>T=5S42B$j7?rybb1u`4pI3sYEVJ^ zR_p^co(i!)GHHL^{2hvF;4sGck2aJwAY!HC-TBr6V3Gg1qZrC6DGvC=1Q@Cn@a?Tk zd7l3YC|Og=y>IkQoBm}zz?G>}MBpB~vQi||^0lnLvdtGMe|bK=CC|KT?ihY~aF( zDs@fBjnNzQf45!%H8K>LfO?zaKlgPXXg(_JElwJVPznl}H3=kK^URC}&y|o;0`_uZ7Vl{ zQ$Qs~OKJWQ0;r<^_1xRHhVRbum47lyt@X2u5$}*?G`N5DTfw}A0dJ6dX_>&~nS`6Q zb*B~1sRhk?(F*+7j3>94(?>kiagWo8erL3hAo`M(I!Kk!A0KeV=ia0Lgo^_yN3HU3 zZ=fUT&rCo3Tn}8>TqcVwW!PVlYw=zldJw*XfvzUn#*wD|*LunUYq>z|%yYjeO% zr@JFFfnMZhO1*+I<$Si3o3WuuO#~M``?kVwWnP@&--tj&SW<7tlP8&sDz@wiVNMMw zE;}`u?k~4$$y3-fV}7W$$K>Z8oxUO$@0pkBvDMDXSQrY@U1=zE3!+){2pzcg4F+5~ zup0o&SFB;K%ju6#qx{|tU=GusKX(PTimPu-tn1ke-TI(*#WhNr_H;|Dcp-~a0y3(K zc|h5WQR2r=^I`C71NKeW>Bn&Bc7<=6wd?x??^q3~5DmJHXxPC{gG`l& zRz%43SYY=rMZ>Os7xB7AWo?g!0)65OrN*aw7vkCp0|HnF*I=o}K@gWFOx`VGu4kht zXljY%{@`w2Xq2dbGrf^{V%}jmk+3zXzt>U^m$7gSYdRKnGd061TAHG==;Iwdbm4wG zbz3?ej;_RVD#{kd3EYr4qoms3dtfKf8{)LOR~iJ|;vLEG^~j7_0b&vKsM1tU%!;Wj z-npbnKfbXSp%ywN1RpCpc_Sxz1N=`Q^FbGIX~AN)t$&P`9x#p>YG5MJz)+dGLXJ=tu?^^jW0c<+%2F2L0WwJu&7oJ291uYcf*E}_oB2J7z`fV)Ek!K$R-x*-REuRZb!ysnA^#eC#QOm5RaN( z9_t6lXNe_qhKWIT>Rs(*#O&fDGde)^q2(I$^Sn!#Aj0$gcNvm(H%B4{a#mpek3BJ*bRW-hABgSA#ai;uro} z;ca18xHzri#_x?RN%Dq$DXj2YOfa=Nh)p9eCkO{V(hKjqc1~5EN+o6fW`}!^o@$#w z6BM@iNnn7r*2DNq>8W#v3g^ze4`YXv|Bsus%_ZsbjSZNY zWl4SFb=d5)B5_$|v0FW$quF;xuvtUPX`R<`tAz3kM3pPp9z zNk_sk+O7wi%=zHs=MQS3YsiF>X>EzMQ2i*{iniLh^fbsCyuqc8M&ZbK3;n+D^CzFs zEroXoU#I1Tch19&W|Pukxv#f5p>y`6wl-10)NIVl;JVYwZj91fA848yAZIK>5}|hm zL5tMYNWbRm+U>GjqhWeyqO1rd^VR&jkC=_`E~*lOeHuvMA+#J$Ty3Xb>6|JJnp_a% zyXDiCYQf%hd_&M&3}RSFpH<8&fy%081C6COf&JIoYu0D5#{I40+hWxySJk?&*t>UT zit9CMHx)6UCFkU%r8f#(%v(+~z0=Nt4t1kx5e9qn;`4|-RI0p6z(_N`iw3VKdUvWw z?Prl|)TmXUL6@+{dozRMNDox5sBZH&kHrt}go=GC0$BPcO&l`lU<$SJnSDE>DA^|o zG1*`+GFtc^9*S61Q2EwZ?BoKf`H7XV`|Y*OI*zE~)Gq99(%aLNLeo4H4lZSJhmChB{|-9A=5f{ilOv)@5TD?4)5Unt*PtU4zDoF2r{}=R1=y5r5{I$ z_M|g9hggMVHt-bAxW7jqeF!{wS=Musa?8RZZ@hFxW@o{lFrRW5u3@Kbg6-Emr0=3? z%Kg%yyVTo#{v3UnrT`d@MhzCO#+{kx<;kl4L5ZSV4Ra?L<&h zkwHM5<+c=avbb`<0BNSp*JS~7K$z?;dJ0$GsaN4QJqRFJ&KdgEXh*b;acM&)$2(va zq?EN-L#r9)R4%pc^V+rRw_v+8ZIYgkm06>VyfdjXEy{cw^ErDIcyxCdXRWFp5;m7+ z23_g8vU8S|s=s2e&YvI~2ayt^L0UYPp*mUC4-1>D0v3t>r5o^x{0)~OWZ8T`EH#ab zxM{=r*`)y8k{ex&KCcVL?fA0|a}F0fU{-ZtxHcQ;C(8%sJ}he_Lbf=+E1*&=fx zrc)i-JzA95b&|h-oQ+({ocDDNGaJNu&f0^7)ACTz>_FO;*wAp$1|KuC(OOm}V2Q_JpaoUcNm%k@kQ z-TR7Vu}S6ICe-zt#c?b#!TQku6PPJiF(pf#yfY1SdveC(*qp_qsrZzCmH0F|&38qE z0QN!7Lc;P&dR1q;Opr(c1Rq2KpKide*8O3SoTVC>Z*8r|$wNchO`>&q@B^+mC$(#f z8ulzljGN~DSUXN1opjL)^SB#V{~0@{IxF0u2Eno#4Q!IpUac;Do}1%VcV~*N0xE?% zJm4HGh;sO2TIEMiNN}E7A}v`L%fDRQ_ntDrmCKiujooj*IdjEMt4% z4jtIRla_akGHwr!gkZuA+Di~z#rzjGWEV(azF%0?w$;{bb)Ym8+kx)fjLgXD*DdlS z$fseW2o+1znU1dSb6p_lt$kTgWAS5Y*^?)&)i{%c9jVa|2trI8t3RSOwI7H~`qV%~S*IJ=FD@A-RW9?_YK5!dKL z*wZ8h=mBQ*fnYvy1?a=g*%s!~FMVGz(0rprQ>8MT_D| zG}p{oN=QJNeacH75GXN*C@ue2t@~dAHGt{G_g@VID9Id9icj*VJjLLCsJor6TI z3qFxxY7nC5p|~YbyWyetGgsTxcsrWLZ6r4faqFDzMd^>U2YRO!J;DU1)ls)Qw}H<6jFk zUvmw3#HsB5dS$Q7j=jyJ$ z&sWnQbBWFrr^{=?h0_bu9cJ)-Qy(K@F@Zl5G^s-#1)Q1xUedB_+aW|5GG!o^Wwg2C z`d{5`$}s-u2do<|X+z;Wtbu}ioz0$v8~QYY%_WGbXjj5RSWPsO^Oe-D9j~wzM0}=$M*v0!D%)#z#2F zpGUHXuEbQhEG*n0EnRfHXCTCV_%0(cV;h=`Fo=aRIDM0#M}qYPaV0sj~*a z|E4Mhvr-7|40h|91n-?#{>F7S@v(z9GJfuab$?p(A007}BF_=+G${G}h}9&@Q|0yH zxl;jI`&iP-x|8?@vi&m9nw0^=XM4Z19}huStSF+fU$EhwvXu+v+l)ag?7kjBmKG5u zn@v0fAXe?8_ay{on_BL^PV=wNeQ%wz%*Ccph>Sl3A z-koR?fc86<82d(S+?u!{Z#MR>$zUK|*l9-Y;OI_n4Bt$>Y5;?W(@g4GQKdH315~oq znkr~&7mivzOx0Nqv}}!goo^CW03yz{P1b2s>nifXgC2kBecjY<;@LrKB-LOJ3yELK z#0X~|@-Mu4rehgAuu@HGNtM)I3pKO~a(;*@u|BfBFM$u~5N!;UL(g^tOyo=m@b3SaGU)DfVuFQrO}T7ukqLV( zoH85uO}0>xje8nV%mY}+mq?Gr4aRKds`I`qL7;=I=f;o19{zkn@DEQIX#C9zvhb<~ zmoN{#4?9w;Y#2kAmc^nD`sXF&D|EB`vxmCpt1`koUo$1k&R@nImMk)cPG2Am@5uVn z&LSN*PYA_!a5TP3H&b{Lop;b8o*Yt61r7#5EHVoxiJ>16E4t`9vdxg*Ehm)!W}NLjrUg#Qz!fpIgt;aQLB$&%jggUYqo3HsgsdG)5{?J51E{?}=# z4Q8@od&<;X+Y7m|t}$U(Anv0@U7MMvbaF*lg~5`!(6AUt8RhXLPZWV&b}L<)=a2Lj zWyrOFD8;G&OQ{>MknRWppVrhE|D)z%4TuHmM9@UK{ULc`01X`PaUXMF%Q#Qr`4+5) zZvh(tASJe$`1l^>Y}_go&P&igtBkbTTik^PeUL7`0#Vy~m+`al3`wqDQ+thN_j5BC z`Z{Ct#6Un&JIVHUHEDAD1&xObh}VZS7E`F)y}ga%+jRVh)PKJwFd8jDM-}7z{6LxX zpx!D%2&>fXgioziuXIU4<;$os9Idd)@hmL%ISyz#OFw_C>|Q7;07h-hDS|A1zSxM! zWMsK4aGN=$$usBW2EKIOQeu^D;A5d`Do6lSOL8ZGV)zxkf6Ty@@)WC8WoglSBUUbV zulBZ^-~YlspFCzH;eaGL(1q*@No(dG@=-|~Yh(shArP7(Hg0x9 z)R%e&cXl>qs+zWEMorQ|UVEoOf}M%D1D}n}0$ZvJxWU8a8;lFCaPpw#3LTqaGk!^8 z1uqTtVb&j3MD!YGD^0ACdb?SmWODpcPtPpTs&MR zDg#y;tgvI`&q|}bXi|7N=L}|woKp>;^vHuf5A0Nbq6A8Q@1iv3zDoC>KRtmI6VDnT z?PaVDzzF9XvvL>n;{lMi-H zUOKNE(%#4CgrEX)I%Okbp!Y{VZC_?t##YuNhRE@F`TKXx{E*C>3K*mqzmcgcx#BFJO-}PL$ur#_=&Pzm=)Q$tYZuE?@wR+nh@PT*R-2?|gG_ z1ybbSG&xnN`K=_}E9V+C?p^FVV4Z4H;JD9kW+n>Ep!m}J*}&xP*|)?|+WaUFi_b`>$~nx))gc!x_dDuz1((^K*8GVjjOX zaD{1i$MF+Q_ez&%^H@UFb~U36j8%0FDl=ma!!Q#iS3-XmMh9ON+jy-TdND)Sy067$ zyYF?asYj4i*!n{><3VuWF8u!!rv@-z-ziV%`mg-~9)^;;X}dH0$0i?s1J#l%%81>uJ_|TXPOWg@88{C)fUCNJY;ORDS`>K8W0>whai8?J z?nBy4_=ApJ=`befvR_X8e0&D~7kh6VR@D~-iUNXkNp~qogCJc30xG2_-QA6}fJjLy z(y5?`lG2KF3kMKsq*J;Z?%E*WukO9?d*6Hi-1`sTK8LgSo;AH@X3ab{6Qjr#P0gW0 z=Ke7wu%8OjVtcD-50&SB5pZpm-R#0Q{iU)j_HnDwaW+WUcXc>u6JW^uPv89nVSl>! zRrLT=SJ87ZN6Z2%GxKA#Kk4)8!v#Qcr2=?_##|^TT%Wl`?Fnw^GU-VKGZjKub#o#L z?#A7|_wX|a^1Yh*$kFjutkIgHZ_9t^(xDg1B1@$4P@Uh5wk#(ITMk+0TCa8>b(^N+E_PB)i@SC52$%zsl6wy1%8p!Xx_Nm-E>SlM8PTMeZGKS7z)lSB`Y(8W@0Ls9O@t zFWOGg^G9MBdJ&|yu0Ul5aFW&#zKFGfWm%!q_r1^noZ!U`-gT$FQnM!`qq3{d=zkgD76_9|Q1b+}zAH)JCFnFgAn1omsU_|$lo*-bC zV(^32(Bud%5q9MhuvAsRKR*{to%WW71PqdTRvyK$KV}v{SU6`*YTYXUACVZ(tw5zf zD|jBKQa;ExV}QPTW_dn&01GnExT_s0g(i{|qK_wf?td;y=L`G;fjAsNVEK10*Ykiu zR>t6Yv6-rny9hAP-6z%uFrN-}fA>gZm<(wT?mmI92l$eOOP2g6IpY(`aRNw#F<(vm z0sX}~psPQMCvXbD^I9LWfRw8*WaccXEdipxD}yjoMJJwp!%RIebb#CDp?!&SapLKe zKEQ!_u>jKg%Pn^Qx(|G5Ijmd*k3=nMwwc{9>MdhDZ*N382 z-ri1-3=3*Nt-ViiuL@C7|I!rSpQQN9V*aRosDp;GaS@<{6JNT3LYK)<20;$K5a1`o zW&?15YyQd1&8pAfpFK&er+v~PNLe5%=KI)_|49nyALna}1i}<=sAvhMZs`LR5EA#? z4~Ph8&?xVV`D_tbt$`Eyar@tupT8{OY;E3m0B+=NTrUQtDV#tHHOSVB0|gBsy83d> zW1#7+0DdOOg#WL&{HDzRiQ>|Z#_xb06`Anyfr&rhV zn%n*)&iVdA0)AfwLRBGbY=m^)-l!0_a$GG23Tg((*knBvUaer|eML|Njl_%9WALAa;*C;aXr^yLER-#eVMIR(OiYGN$P9 zh}WC;k#!@h_v8=0Iq?4SI&utna`43=CR*mR#PKTf_H6KWPRG+$w#CEd#!YtY%ItmT zx)Oy`lS3T=+#i@Bx`Wp_PJIx8#-&GjIryK7ni>bR=QYvPWC6Aj4^lz8GM2#0yYRw@ z!Ra=x3jRa_d+lR2EvG|zPY1jF9|aoQqQ$qdMGMx;d53oTD?2uMhtsd!rgW-YAKBRH zsdbyi9&h!yqcXR}Zu1?Jx2=bJ-#birUvy*gqx8o2v7N2vQ>Bmi5>&LrS?VpF&t#;I zpa!cz1cNirSMi6IJpB&pFdPyb3^pUWpbktP4blv}w1)#Z9J%oHkHYTykh0J@UR z=tS?sAw+|F3V-nNW1R7#t`WGESs|w2!aMvMmWUx6URt1M0@Ab~D+gOGvm*fZ5ja9z zn_RlcK&gsBBUCH4!Jq$Y_fL@bf0*6p5N}dbQp&dRm}oBoekq}2# zMfD+I`!~K*swn9`KsS(L#L)q-iV@Pqob)^=MXlc6W8fnu?-iauwu?{(W%#6)_WZSf zIyi_ApfWr(r)2PiW)Me~eaE&f1?OW3+!}hN7-xLDq22*aaU)BhV(!yL z{NaY5fA^O+{OK}^0puV81)&U}Dv%HJ1m@&?%XG5%s!5js|A%7#!TgAMfAMl4sxMLYFV9G~Np z1B}4U=%lX!ZS{5EAb7lRc=J>fDCta~MrEUf+My^6jF96&lbV*O#JcfAi`!1c(=ev! zlKlJbk10DnL$#3_Hq~G(ca$F4)^iiIGTmPSN0si`e>|Q#v@h9YT=RN+5R*jLrv0Yn zGlmh?=6m=3`$$2mN+N_jrD z8M6VF45i+YUCy5mdftXiJ8u?cXs#hQD%lgtd{%cFDVHkZ?RoE#Dt&~@NS;YI74_ro zgy>F^+ZK7(d)#StO*YR1N>;6y%*1I=x9vfN+s-66YKHrMlXC{(cyxrCuS^B=L3B5cHIX4DDV<|DU* zbl$s%Pf`d8*QGwCGeFz*B~_r0Us3Ui;2KLGI;m8qb_G)3TrdT@;4M^u64~nvyeAW! z{zmfCkJM6tHHcrUf*sO3+*nS71~qppbMqT*!~J0NUwR492yX2uT|k`d5JQOVTgD=K zvbs{*w=K#_9_hH|Sv{qhAtiwQdNngfmAP)!JTH*qRh;h1^wrAeuFAvAm5nQ2xk8O( zKQ?9u*N~nvREEv9MjGcl*c@<+YP%l2zA-RHh{;R-y)y%w89#7BFrJG|Wp&NIY{ zS?=EQzKf=hf0Z$B??*tJW#7011A&eV$crEXK`E%Iqj3`XK5&enY?l=MuZL3Bq4sQ* zw{KE0KGL(28IuZ6_b`(C7G3l8m-{TE)53g*Oo|rCTdqg8y~f=vXdkM^?x(iVXWr#6 zdV+KqYW`$J4U_zF^ZZ)l*5_8$oN*(EM_=vZKV`Is`6tHFT_Sbac5IsKF|~-47g}MW zF|mA;b<*QI7DO&#cf_V~FNhcfRWU!K-Tqhlok;MXHTM5e5}+pmdt|X`5-hGhX49)P zJi_8kEfmIn|5Oq*KaTGnt{qK}{P?P}hIxBI;sGCZrMv8F+c(2ihH^1%gB?v!;ykhr-vE-zcMt$pe)1W zZUNz3crI)AyQg}>>+N4Q#HrJJ`of*er{*HoNxO$1e!QYmiIDby?>ggbv=o`+P5}D{ z=d1@|WY(R}+v-VOM(-rKm2$Te^qlKv>UZ=b9MV@=9}#(T^x`hR^%t#s%AXy_ zk1~E#Oi_fE(&os*?v}bN;@aOd6@+> z%@+i>0}R+uUk@s_{)^;SK(SXGwTv|gdiXWDgiA>nh`&Km+N-G0nvG=q z-l~_sS60zd&Uti{rydZ$sculBEhI!9PzP3h_fb|pvqL*inFf9+Kf%_WBkfH~n+};N z@hQvUtfG0T?yad zSS1}j^eCq<{Zm4Z#UfJ-mdE}br}F;mI^E zZT#w+=t{+t%1XK8if;q~)pMZ6AI-$6Wql?5$8PbY@HXMSUdH1djiRmRxJ5@hBt=36 zDldAt_B33Ip4*hF-&<}~nFnQ4M>0*WGmS;%`nh38;{-P=`%*hH-xhE3emsb_D0EW` z$2tJ96LMdD5R3(m87idD`M8VE6Sfy;_5NuNPRX4PYD2lY@kVz+R1umYFBxnv3Th-+ zz-9BxX@2k{a6SWr#9n~>d%V-$dQ{v1@j^$tmxrnilK8JM_gK4Ui3y?~ihA!*9Pjs< zA1=yc`Y8xo{-lrcG)(K!CR45ji&z4S=uJ}B9!Y;kCHgU%b$>E6r>NPkYw^R*tdqLP z#LkWcY;d{rJ2O{QSGmIeQKJ$m`n<0q_tJ#JZ`TMqk|ayZR&t)E#*s+}YM1tA*~Pe^ zzbRSZ-a!#8rg{MoaS8^`g&KXm2(H*Dbns*t6>xSHF@irhB!*Pf()+HmB3I4RC(pw! zvYyzUkVSFpX=wa@$+t`wev7_x28DXv4=rq*Qz~y{|iWXj>1im>p(tZx_!oVeq~` zoDo%7-hXMsx8!@iLZCKf1vs%UxK9R5dN@K0%DiDj*sjzpo%^WXKIK!5C+QOt#Rr-8 zgpxMACRd|cI8EX{*px}tPi42*7FkT%g6cz+tpi!3Nh+0gyzq}+USh)) zE?Z2D%+m3nRHK}=GoJ7IwOF}oEGaW`@G$8(XSnGMG1yS2>n4^MLGuLx6E;J(#Gh&V z!V#1KB_AeN6wAN?y9;mTuU9dE{N-11!Pw&}L$Ek{GU7on#0ne8qU%YahyjYK;ACs0 zV;R%3T6(#eC+XnY@-KIVwX$}T6nFDQ^G8~OkKSg)l!lqwj<7B6cU$`%ypB9Jmw#Po zoA%C1J@wb_R11Gm&tSgNAt(#%)G1-cCsuHATayZ#=lwYTi<$e&(MFOMDZjm9W5qsM znJ4^i=<2ULbVxn=a6^P!C-R=Su>X)kY|rXDk;#7}oOcvt|GDL0U@R0a#EzE$i-OjR z8EOoT6(H7Yj?ja}Z}o!Z0ZAEF{{l_3;D-nuw3L$k1KVujZ#hlJ1c!dUX#1XP?yx2X z(D$K>@e7v{NgN4P4(2Yw+CDyU(kL%iQvW9te#4TK;oGWXx?9imq#Tk+lLrRR!E5+XM?V1fTiRD!KZ`iBQjQP<*?qQU6_!psj}?l(Gr{kXh97A0zE+34VG zl5$hW^(FxmQ=yLG#0$Re+_8y(N&Zgu+;5sDh9xJjo`V8J!|O8}XMlJIf%nRBvlO2k z1U`r64+hnx0W?I%j0Cgr#K2xQk_c=eTcLbpPjkKv$ScHqzYvG*TBuk|{Br&5X&jc0 zwdghNt?f1zoBRTwo5Z6>Yuof!H?w1ZNRt}d2D%LC{XrYAoG_Iwi_ySltmeljsh97N zp3ZJ;A3OO3*<~&u{PAY$3k3hMITfoC0J72(cZ~t$3?d<&fcp3SX$Zc(@yyf*YF>?c zSjcP)lXO7CB;}g9%!A3nDC52UyDhJxQkYGYCs~O0Zp#zAw8>L=vi<(4Hdj)_*Ap)J z+aXE-2nRSFonae|jdZz%wy>XO^!5l9#u=+3g$N)PYl$9H53c12>~48Okmr z!7%x`3ex+@tXh~471PF|@-7c{-4EdUEx}cO5U258yy1_$&xLya%hew#J;|o#dw@%f zp}pYzWFIe7Bm-qh&1WV~B@Y-{a=`49rS<^C-%s)R%W2X-c_pz;jflf>7%#aVu^i~mgdq?kp}~&)Fd=aE^fy{`YXC5K^pltWV+jDEApj2!ZF(%2oM-^m(fq(@Z?OePtuUGgPjhxXD>aYz!_%J1<-%wLjRo>f2O%VNk*H!b0BBviRV8tSCH_H$DfEnx{|qk>e&Ij= z?d4);k!VLBuF57?w_KuNegjPYb|SkRwF0Sdk-hhwccAkc7h!j5T>-$eU7;bErv^|L z9Bh}D2=S4-Ahss(KGwfWW&QnK=Tag@y$Y}r#5)xRjEAbv>(?|tL1B`B<7|f-Z-rtj z$-O4mia>{>gWb-+g1kJAeB@DUAOwHzy=6c>s>w^AGT~F;Dm6R@_kE#JI*e_8s(KwE0Uy@oFuxOXVQX(kI2mw8K%*x~P zfU6AM-wKu7`7`EApYt>P9iZv{C+ayJn*Rj4C4%~l24e~R_j8A9sfwrLW z39e5>#-N`=rUqpJkOHI$(JRk2Oz|LSh0y zDZN|Y;1@gtK$i)=;;-F+E*SLp)i)?LVf>05(WelvRI$~S5rr0Z4|R1LsG~;!y3Cg| zWdL(k{ouO%ECk8{%r|WHy&V{F_**2z(12hndBf<=tl>Y93QY`V2hodIHR|Em$iS}F zF5_hsRRDk29@q3UU^XuLv_Q1d{51E7J3#&k;`0pHex)h&>U@7m!lT1MU z7A=x~D1Q(iUM37wnf|TM3K1Ir;%Edb$v>k(mh+* z-?CQce01T6{sB1%4Y3h8T(Mib3_@ch03~f4*S0|Q#2mHl>xcr~!^T&YTgHs!%Ex%3 zueSS+97jh(e!mAN4M=;4BFn`NPzDSeH~GL&wf>(d{SLZkatY7CGI8_XRQc)4)5Y$stz&f!KEd zYoye-(2I9nfvmKu!qR!6)&(KXXb$Q9eExiJkfoKz*1Gjhomp5}KJbwFpd!%(2tmXW zz|-fVW6+sOIeusOEuv&M;((%YO87BAGV#P&T8>x>eB?;er8~npNaz8rbJ82*KZs3D z0P&{cOdQazmOeTM<3#2b7G1rSM@|HUg!KD%Lr@nR8ECkqIB^*`+fB`(=Oc>3U$Fjg zuQ|7Q&{4)GnJ4PW+War~9d}Z}PbM|(<7c`@mjcqOtuG_b7fc9%Dcteqr#xr(zj1;0 zEuiQy1&E7JN}a*N&7h8BkLhNr03$2%m)Qh_kytVxjz}CwMs%gF z8)%#^I{hx7<)bwrqI349mIp${SFQR-6RN+xR!kgF4X>t2?o1&5;+3G{f)d$6{!gz; z^waDKbCsm5UxVJ%KW5zp@rh^Uo7NvVMTU&4wZyv?yz4e%94e8^c}MYUF`{NHc=@_T zLsUyHs6T3#cOtjwX-XB`qLYn#_p*N7u{Y%Y&C21_Lu7$&!u{?{9ku&!v)+E&XeLP` z?H@`1YE$%H?ZNd;!F%Ia&u=<(8mSl9RhTEftfg<}P1n^)qjb%=W2HrRobq))Ea!uI zFW-T2%vHg!+n1lg(QHr($i%S8aS1%`LkL8xlzMc z&+8)4`O0s~@;4p`u9nXKRLVdgP0%lNMqPOD+;%|>7Y5h#CBb5}AcrRPseDGm$}Q6O z?L=exGBi(TC4J0MI3}|$6SBXBL%J>okEZC2fdBpuyno`&%yttc@FDf$`#&$mY6*0k z`fb~j1v7sCAoVdSc#_skbvJkhrb?=PQ|5QIs(p?Z;jfi-qYzur zWHfxFYIXMtVOwlf^cWMATt0#yqY-PC`yjbqWoBzGN-UD;U}rxgaB-=d*%4}+5$cbM2V87hSL=8kE3iX4bai0H3|zE#lPC)vfE=MUg?#i4J@iqYZEuZNDpIl?lXqvP$HAu$Vy-cU zm`wMWP0PuuhwwYzGl_iUV<*_n>}O2E3Yx6SHxQGtKiN5Z{={Ohf)w^tWS zZ9;!aAX!+j4!d=eCljsNE!hZ9-^Qmy^{!~>sYC9)1_SGj5_Q_U3PaLGq*Lhwmtm$lr z(ep z=2W>1F7;Sr)~?Qr@!bV(VCQ#G1HJ>4;J1) zbk#LZ?8+zc0iyTrm%Kw(S=?~xroho{az$2jy?2fkF&{yis)%*@_iM@j#i$T!d=da_ zmdD|E$)Dq8DGV(3%S3Ai#PFqYVp9=aGH?BRvN>fB2de8zFhhQl(oB`K|MF-uGc-po zvQkpj$h;pzA4=D;v`VtryNrDE!h#Qupl_k~H!f5NsDN6Dd#>?%K(S*b(o--JJ}g z-}08=Ep`9sT^KCGkN4&v>){MG7m*I%UVkmI_uU-UR`?rqIAoO17aZ?&%ffT}KKdq= zx0dHu_Q_Y=P?}0wYVywHR(YBLl7YmfCy}z&iAmmLt7vB>Bcm~)^^kQR67oK+ZL1)7q^rQw9TSxz5 zIWk$t@apEJ@dcR{MtBca#~imJ(adW;b`pkSKN?y_ zWTSrVu4&Vy`7p{Q|NM~KP4_CEJ&Ty&yMi9OyHi~fM<%oe)7=i@mb`}lN+Sp8lC5n)cjCS8yF%jYGE#lj z!6?Ep>4{xa;Urm$Nw2t^ID4yPS-t2h;ne~MiTqcZG!vb-Zy)z;*;>qFw|mpajz$JV zCcs7=Rd0-A^e$mH?kd@#JjxvHsSu9e<$IGKx*%sw5a6K4+2>jKUC`1Hv2>R_)f*XqVA9q-{h)wy4?lQ#|*h(*8l zh)QsY9rtl}bSW$%MfG|+_Hp7`Uy3Rx4)?RfWV7Ii&zvZ@WaGK+wo;G7ItrKI7?2HO zrVn994MW6^q=le|{lKogLEQ`|82@Nf*;8ZGY@Xg<$++ zPCsSr_jg-gGci81yN@DoxkC{HOOkq$jOq<@W1=k$5#$5EO#hKlxVTme-Z&dw2Ufp-*vQJDo!-0GjQu>a|#xAWI ze(B_?O+$#c@65a?Gh?hc=E9s7UcP;7C(Oa&&VRJNNMb2W%gpOB)KTorE4y!qZ@Kj( zFv-W>!Z)=;Qy>x(E zuCC=+sTg)?S>n(>bYwpoVD`(rhQmjiD>@pKyeG4e_!;qDC&kZXtKfZlemb|?Odje3 zRW03U^`xwt3*-3~Ft;qVCy0ZudRvK=A8VWTXHq14WMf<2LwnuKUVej%3%**^x_0Z3 zv9B|SeVBX@(JH>IYM_Oja=N}rwn^MrS!C_iZagYV@;dM1EMXs3^P2;*aZjs%9&~)k z_q(Du@Rp)3#p3ZqXl{74Z)cT^5$eoXEvH=`dqYtt4IRaGMo!agye9hM z@MF2xq)W`&$7z1bzl!gp9wu2CnG{Z4Ii#?+~p5i&!MVONPtHsqqrOV5~pMh z)v}-1KaUtwR!HN`pw|;IGG2{RLK6vW3)RxW>efR1Ynd~+`3^isnxAoj-8(2CW-xGE z)PLR|9yi`n4)?J|PW}-acL98Z$Md*wteQd|x6wKU;{83e1JC!Gw=^~v*IV4E zt0D?0$!SY298^+&po#qLU_;l=HPJtvksmye=dvhSN_pnFkbZz}b6XqYMY^syh?qlU z|EnE2jhYFcrUSirpASL;~h}^1cQKBcW!`KyM|(luT>wY^gWdZ1|mm zJY!QSZ(dW0;6_S2HV7`tMUZ)-=p1|*?rXpDIasf6z2R!RmBUtm~(L64~8# z)yUOMP(hhnE}Wk3Ah8&oo$w1&5b?PqKVxe=b99#`1CM(E=CZl}#MH!rJm^c$_GFf5b_h+6{6$!X7rT^xa@MEuj20S`5_ntk9~6uGv$kVDugPEq ziRJh*b4)%#bjpy9B&8STMEgp9YS#}CF{^A2In-J2Pm{r;6NSZ{W948PFg zKHNl?*LVQ73C-Mt8))d?Se4(3C-fM*%n%^QF3MK@`s%u~>UfRBKhb&V7`vxakZUq4 z4Y|?iJhXdqbH%K%P&7CzlFZI+p1w)5 z_8Z=I{H<&<^bsO=F}x!3xhV;GE%aCyEU~Vj!`E190fiC?I0Sgv9^Zs)NfQUK{S|&` zCYDDXRFYZrkXL`|n)5aglyxh_rpL(vb^ z7)W->n!=W9CaB0IhQH!*xWMD>1S0rNT z+$wJ1UK%8*<+bOkI2>_JlxdYV=kkh`i+zUlv+G5nemkpw;!m8ut0b8T$2INfFuJSV zTg^5`9Tlie*Rd%sbrbhER#`xG1p!XKhllMSI zat<-Y7-srw8PS37&G8PK>C_`Qr%7Cvp;sZVWQEtdB41p2jAil?F2?->p8aM07GEBY zfqc@+Lwl?*@`Nt+?RkF?qUzekm*Mr5s}%g8g!RdR(w78r%a&0Ci%$5 zme>xO;H(t3w}BUPpVZ;=j+8eMl*zsixHR6!Z~62}XzAwghc7%5rCH)ojPNYjP9JJd z*!Exawnix(xqQF9{r1{x+sTI$^HJK>b!Vn8CcXxQ%GGRI%#r|EbsMsCRWyT6mq>sueb$ajN_;i~L=s2uB z915Rnhp1Evhg19_Tq(0bB;4qwe!Od*rAF{bF5!Z_2*RDXC{MH zt@RX1p4ob4ZZfax#W!>)NcZA}$A&c(}6^eu;|?oCb_IDfEl;izxhpud}<=G*t_U3%1~c z_`P*{X^fzRs(@XNAF^q){R@T4=)Az0M-8yx36AAApM` z7T4AH?vmzI(n50BDF0yo{zJ|mUCFf%_a*v18H-k^I=W(A7r<(0>danMx6$pbMbBdr z!VP#8q2wE9!~Z%>0Q>$IrPVbyYNaP?%$`T6{On?piBA_wy~JUOO-eFY0|6oEp}LzL zrhHok{+n_Ad|xf71w-WAQcTsIhKxXkZ&~>E2%!le*bA6Y1FNauO5i*`++fB;S=A^$6_MlF|D`0_eWm; z^!bYYXB`B69vai1R4U?fa6CsG=7(&bom+3++G$WHwMTnR`ZXh@_B|&>C#xOJ5tkr> zAotNq*%i;FV>fi=Y=Iz&-XA?ReYuz($e2|okshOlA8y^zL)A4z%!XmSBQe4GWTTRV z#^38VaNTZVREnvTl!#VZhm(?-l}W61OHI`tM)>-3&d!$JO`eLB%cin8JEg2>kMdPH zc&SKsqg{5DoDoGo;gE$(>M0Zr_r#;}>+I1GQe-GJrY9GhMpC{(EcsHfW>thhQAk6jB!4>`s7!L2x*)QaAi`m=Lk0ME8P zpQT}z@4$PwcXni)%U#cDGE|O^BMNuXvsCRDiH5SixwwezvQjQY1l<$$3iS=%9>rL? z-5yR~-OGr8a7H9~n4XvuhJ|PKDbKZ%ayhpW-D_E8e)|IIdeT zcGWHTu;d|*)#t-ZH`)r2upVOFFY!G)-V2g|( zz&8)B48{ldxm~?PiicO2EJWg)Fj+I{p_qihzpu{=qu}#N>0wZI>%DtFBFdZlD|=#s zbB*+f8;#>VRF)g#IHN>TI z$vf|)Nw+2s;@JyqmiSrq2_+u!6Ozn0z{kR^c-MYZ8vQ|-CuD)b|D~ovh3zhnmv@ts zn0!__Mi1QQ>WQE5d8@&aom=tAP5q<-`;5dZ^`552RAGq|Wck*sJX6^>u@g~Je6|f@ z`{h}VMz#s)?T1+=9~M!f4(?Z0tshe8X~c#l{;-_Y!$co6e0EfX=>8<$H*XRHpWxd_ zJb`FMg@DjrESH-xgTY~i=7IBmckjdb-seQU?ts>tM}cLx&KW{c2TF#;L{5tQb2D+F zsjQ)-rN&Hs_ZgEYdO<v#At8rcHvXwg~n3LwEIjB-=vXqV+MCSHY=OwIQ-}0t6=l@;;lh#B~WD@0GLQCp( z*%9qWL%O9y=h`lyd6(0_xLKyunF7n%#ywU$Hh7d`KLS5N(J25+t7W{^Q^%_MLpOt+ zY8ukORwEtWpq^!A%4avM>)fVRo<|*_Oyb--(k31w4jM%o z%!g7OpRerxB(J6vb1q-iVkj&U2u2SkH0Tkb=0skZA3(($P7F)V49++2#yud_51Ve6 zuU)TL6_deJW-FU_ zszQ2;b!}v5AJ|kh*{eLHn@sGWQgBUdP~j@kKMa#K9N53xmMbk@f_{#8xTh%W#h+aQ+pJjxGV}Jg-fBMe2S;@5)k3oJ4N;Dy=T~KQPp!*q?27RAJ4^JOb&8KP@O~~&z%uX)~bj|8zd+{v%OHACugw3OB!*E;*s9OVb%%y-oe3lcHDItCDcLW$+wM*2ptHIZeZxG%w}J#UDIH)$Jr!E+*`V zyZN*wonfdEQ7ozykH3+J=2|v!+3M>K6M@tpA4G?!NRju4Diz7|saEspJ9rY{0;G=e zy5H8$9vo<3@GsXt)xKStw?(|Q5L(5bO*lJ+*ak^1G6!jb%oCrGgXz-xKw&bYO*VSU!(__X0(*@Czx;j6mxEx+Cc^pVY>>xcgx6 z&f_u0tNlFU>)wRKBP~d5J-B^0y#%9w0;>_=`BrS?RxD2z$>+?8*P?}F%nI;xcfYBI ze19pFp7>ls|D7QDpkv+OxnWA?3*R#ZtyGFfNzDhgR z&f004+PLB0PTeHOrj(qy7I!2@sd$yqBIxxTqmZD=ugyWhT^fw7q*sIF{3bB zE37M_jw{wn2!do3;i9FHj%VycoKGGjEOsvvJt3B;Nb+CZ99vb%m+7N zW7p&gdY2yP4|B`X@Hcr^5}Dvm$WGOU>5>98rk8hLB!xE%6d# zUHbAmzY>>?bvSe(IOzIg+h?mCW425fzE5m$V7Yu*vg=<3Ov^hzb`gKx`Z>A=!%>xH zl^)JVNoPva2~JfAx%I^UGTNt)d%t!iW;n18D_t=v8oX$i`RyZgs(ac2!d0$9`XOY^79Ls5SU7OetYcO5dWz7dW@A1s4*Kqp>>y+MZbjaF{ zgYvU;vFpGA)|Tg)(lq6H9l?c+o^8fcw;*flX;MP~9Q+d-+`$2?El;b%Ob#QEL7uN+UC}6PBx*~ z#v;tX(mKp#9aN(bNa6hEh+epQP|7d#1sKL9W;$F_{~8+Rsh(!1L#WLBI=z=m7(&H!)C8*p>qwyG!2ibNC?3)Cc>#OXCQpyNqoyEZDr^c7V&Zn>fwuP zF4Nyo$gyMMe7koavQ8oldzbw<9@JZf zH64CjS%|?cwPmD&Wq%;D7uRmnR*vma2+mZ#-FNhu{t1lf_EdkxBj7ae|02xR+uI2? zCDMf#wAjrC!Gce?U)PZ9EHT6%tcc3QEbsFi{Jf`UMemi2OyezaO-4xmEnC;qvyurhKvJ! ziw$qoM(9kX=^eKwI+ha{#-ffzuUZ`;Fh^_7EWy+1-W=m9=WfEIEcSQTE>ouRtBYXW z*(~eDjf#IKnQKJFi-&kQUVm7Elsxf85J4ka{?Z3&RRkB*Tn`??E^RXmc1gX7Q3ejL zF71OS1#N3Hn-4$$`>T+$_49Kp^g|kwqt%CH4Ciw6PxJNu5bUolj!EqN&b(G`3~(Ff zL}D2zgi75)*JPe_1SxrZdPy45U*wKQS`kH_^;!u{sIj#&ix^xs$gv;R72~6x6+T0J z6|Eefkm2N;Uxde!)D{(}R8#Q%jS#*OsD-#mfwYU{txj*x;}ey1t+jRX!x~kY4yye` z`>m8X|EDiodZQ6so0}Lpq;BPtPM1DgD8#^@UH|yxy>d@S86REMF#bDIiCauMy>whR zQ19H&EH#Wpx!x-vNL%#|XYM|ujBJxsgHv*PL4j}57iOVs?vA@G3`)%R)?Y-u^(lTB zF77EH@1K#@*NK#aCE#MV8OR?Q_~U?fvKo=8h}Gj#maclNf7ZP_fwIVV?^=zHnxot3 zFvlV&zJ_z{N0RyS5K%*gnwgOzh?7JncMVY@2;Hi))Q^DWCVx}#muG>Fsj0*q1^NCK zbT)m24Ky^Ic%4Bvh;Y3Nm^G6uM=cCAt!H8w?CAsQXlM$E-O!nL3T^$O1hC73G6REK zB|nGal@Dc&>MK8c+3J!Q)+(WF?WgAZh>z#fYdxqtruMJ;V$wF^EPQ@_G$v zM1=`V($;c@hRBVh?b#l4^b#{JZ%nDZa7#~7kkr?7^9u?fO~T?C9$v}g@qe4YwiTn5 zfFBcz7}wNaLx5E*F#F0meJG=lxanT)?tAXKYg0@w7%USPH(wL9fKC)z|u9{(V)$rlJGo)sp+p9E?nvPaWr=O}I zFMX@bE+uAp5OMmQw{rih#J80EV|E=3CXW)O)cknU7p^4nk4|Ed2`UjMG=&<8_G;I* zSzDxY`sX`q@C~R{s|S5zKR!(Dy@cfI{gwyQ?!|o>1y=vN^BDVtlpL%nKsg6x_7&stgKC*)$u~8BT+;S*t15}1xLf=rDBI$wp{(G(k@M{LZ=`ge zJ(E&pzu_9MvL&7_4=oE!guR?)OYUM1@dkfXThp`DoVH{z48Llv{1@) z=m)-m+k8hGYE%Du zBkvOygK7Q;b8i_H<=Tb~D}soMD2ONuh{8|;N(x9wcZalqeQ{I9YL zwm2|z7dXsKBY&B>H!3vXG6XR;f#CVeOpo6HpD9mmU>y6hO9#DG1tXD?_Qst>H$m4| z120N0Lh6<^ZaseE(|)g=c;>O>0UE~|~`{>uH)8))*8!%oB>n_p6JT-WZIE%r({`rN)>WJNRg&X(ykn2N<&c^41WaNhI zOfF7JUg$ckzV*qf^YhfjMM_~VulJKs^O=6iDe{^AUf--;H6kVxp)Ws z9-M})2Is(KcWX(l{J_Xt-1SoGsouY)*uzC)F=S>x*la!DKE|ee9|*@g`0-#h>@_od zIkq#k;tHHeuyb_o$-Z?m8RX^II{!`lv1zQgg4DHLcoKKnK9t3jF|hT{IYMb^1!NX5 zJT=5Wml+(zxlg(X)PBEYj!5)-_%c}Gy`R>%cju+0<=FLDq}d#5i}Ps3#hF=SAFIYj z`nrc*O7_-GqFkl(ZYr73nLM8@CA3=+{k1iDLVVD@utzwM)4kD;Cz!z#ajCwZ+S)kl zEp_#6ADM5Ls>1a*IItCgzwn#P_9TrV>SBy5)JN;Q6K`9H)iodiY41~yBAQ#$s# zpe{SPT6O`%AFh{x%=y2U&>GM|7Zvl>N=8tg#OF_0&G7~H1!7yBT{L_PTvXx}%=+<1B5f}ax?uYb5HtiDIPLGO9p z@9ZAKK*}-I^2ZNI3!yF#_LyKeW%+4(@`reQh(~2A`k2kjr}brNeN zL06o!T03!JZk$p3DCb zoDa3x!1Gn&GrOkcT%MYmdbzdG_bxE7;VTaJRZL9p@^bu~ifdOI4@zD&;XY+&*IxRb z*Ew%(W6!F_jzMY80mwZnDKU!TWNkLEag{b4uD=R6ok6IqajIu_^o)f(ak$_X(gOVa z{-F3DWc};q8^?#>&PVT&vs&W42?@c4Yt|6UrAd0l#Sz_l^x|~@5l6Q_T8YGm($d?X zKYxB|vvAXKbMCyEnc3|-cN9w9TwS@UkN2UK+k?>CjCxnA_h#;vmX(bZGp`8(TQPDA z9H68lFbhS)K$JPMiWtWFNwaZN5IR)G3_9QXlZN1NhCTYVU4{QiLt50W>$1D%1z~Te92Gw6wJBXQK5{OYGm@W5d;SUdMnj8Omxk zG590*W)m7VrdysE^-?+?ESH$u+2ytkO@J}qHx-oN`3X90qzp<-Ou+mQ_ zRP5a)`hCDRgy7K17v`MFe&5J%O+BSIYA^?v>E@gF@2^&FAyju)Dpor)6=-xH=pSq^ z-)-J5>!`SY9S_eVQo~WihiRJ8YDTE?MXwlVuj?ACbByXqCT--gSqy7F~f-sZckAn7iJMMONHroJo|@#u4kSma~9 z*4vwNT^Eds%9rMU{PQBjYz`+bI zfuFkjg~}@Mr%t{Zq6Y-tj@bzKLr3lSUz5%fX-!LH^8-{EQa15%jQ85Z;$4*v+~W4zWUwHs1r^^L`2am8?}pI!m|gE1-g&E>x`1K zNN~yxiBm}$R|JO`^(Cx1HC5o3r7xg9e=aWYf7rP5K;Nb~I$xrPgods+)8xMV@x|*l zv(e4!qixmFii-Y>qsWK|>P2P-hD`j$9FxTie9Cj1j+~ZOR$5S~Q=f7iyUpc5?&GKK z?(Sp*?WywB!AU$NBwo7>{y?QfS$OG{rO;L6SNGDRxtDO*a_>C^{hqyA!|qUIY@BD$O{k@Q01;#av2 zmKb%LlO@x#HXMEZ{4C}=NvFA>{W%Itl~q;i8!hxY&0$oc=nfoQ3_c2oGSd-u<5N_O*pO`O72it(M>ZI(bSP?n!pTXrT8X^odbFkFyw#@^ zWG9i-6=ss++z13%oSZHvK-ETk$~b~nHFZgIbVxtm;Uc46Yw5fb{i>yb0p;-_QtI0W zrCg0pqaxkFh=QR?2gX~pD#?e$n~VLcZ&wqCSHE~&c~NPfXDP*Ir=z1Yy)!qTmhd(( zP^##CmQF2{O1d8<)J1rcj=+oWQv+{M9sg+OmqRWs0D`p&r(ga3m>8w`5J~`9L`UEK z){Nh*I`yg2*nqKpwG$~eD)*l}xj|pG8G;+i`G+;=;S{;L1CBBgV^*DEo{esQvg3Aw z357zZJLuKRJqa}I&)1wBSKw|`9q%tHVK@#94D13dl^gi@DdHGgYip%HkcHR--1wMD)Bi&zg(#>~^pD_s4-c|GrI zM4ycMsL6wXTvLlnNaR)!vt3c%p-6C+)zW-Rf4Ea~@(tO+eUghNx~2Bz!mT$yj{Ly_RJt?az} z!&`Ut-J=IjpT6)RA>R$(5zS$K@+9L^^_MTaOT%SydA2q-3ORO`mYLmq%>uYX%}3L* zWIQa+Wbt7;lFtO+-+r?*=2pY|-ndk9o9_8?2)S5Tr>vT>v2pXtLyZk}wi>WDma^uq zsi|qdT7ozvJW9U(x%NnN0w#&GG}fD}f*NYRHQvj;&rzxgX8m5FR1=lAM>aG|{8Gi0 zQlOd~lC7Ah>;q678(hzL-M|gT_gnsi|UJ6+Atx9{F5qwIL?;^3=>kTAImzJnk z#ZxcEbJ$%otKNes=7Pt;UOeF5i+yT=Mypa-3+VcuPQ9EmI6;j@j*2|QY5Wc5+BX7C z`FB$j6BBEL&|E6g4ChhDMcTtz?h_gJR;bG>_w+hTO}8VPfxrtFE|4Asz3y2Hz7M=i z0{rolb(Nj06<6vpzEt~WSKT&-GFh%{l_FUPjVP1B?rmMcGY-kg)sr6naL6>U}7Tk`ew{bV^Us;ixj9=>605jm?k z{qROwT@3EW=F#bgPtp?-5^%i#H?%>>^B+aN~WayHEv^KAHNO2z}SBf11 zuA#gR2Fi^Yc>`7sT3k~@weoJOiZIa&Wu>r=;f=E#^) zwm@)iZ>@q-nrkXdSQ3J+qN1W~@LnM0G`fcXM@&q(HwzuqRa_SH(l^1O&a5=VP78Ttk}z z+F;Cb2y#4J-H9Y;z4lnF=xdoh^Ep`#GzU~}j93p@O^4IP1H<0QyDLURsI-!nh90ZS zRWn*l@Pqk-f&!$%qKKH7oV&S)0t7;zfH!R6vW&YK(TG0R`Z-`!mlt8m13FQ2+&MAW9-e+A(T}wewrZkzv7td zK>eL@2z`0>Iya^xH5J`itgMhwQ%!9FpUXrgVhFzCV zeI!>}S4`WM%2?MFjmlEK$1RW5&>yzOJ&1r}HQeSz=U}_b%*|S?vBBtFWznF}E0P$f+af1$uD^CZYHX+zwh`iC5l3vRb+TxCLD$!Jk( z893=~9D}Ye?n^?%qix)#=CF3?K;!8207zBb)6&vFP|qupt$1ZU(oS$2l9zhu3_^nD zu-1*8a{KiMuQC@>C1UP>%vgHPtNK-_nuatlHqto<-?Ev*YU%qE-OSmKeBL)Nl%*}n zK~kFSc2-8R(7SOh0`4%T^0umsFwSn>OqT+TUhFZnqz96rj>^U&r2?V9))Vx`0z&~S zm<|0Stj;6{I8 zMAMZh{yprH1X>ZN(>5g@TSpv+x80}%W^T=Kxh2V7U={gcD35&VGg0*Zd|ff&?-Xxl zL3EkUAJ5Pw1A$z`#H7g^Tl?|#qija=AsJbiji@k%90$4m=FX0iE1k?-g4?k&%MJNs zW8mkTUG6d)S+_Bk_8r|ejfjuWS&~DL%4B)I-4Oo@)8$RCd-MGH^Jb+fLM(Zwtpx?r z>tRvWgN25`*m^K1SWYztf3I>X!Ts9IdDSVnR+jhM21LQ74D8?ur^=Ynk0PY*x$kyz zWTz{!5loc;VlU~d+1c5-w~NTxNW zJw~BkvA8VF2@Q31lsk7=P1Tg^>_K2j?i!}w!a?>t%QGK0mYB_wzpTbHhk;fuv3)}@ z-%dH#S(6LbxtU2;PEKyxje?w>af&u2FNEen)(>4FfG=?Z$;Y&Y&@(_0Y!(u9{QEufAkEPdQ@ol6x|?&c?{0ygXmnu!hLU z9+A9^(DdWC!hHma12Lj&6nNOW4^n-6d@Q5IABMee>lehXkPba+ST`+nu zL!LaBr5Tpy^azK=geR_Fj%JOgqH0cPI-u4{gZF`GagR~iqtZ>AER(H z+EPAtG;U;rVLPg>6jQ@yx(f@mHTMr6U@W`_EM+$rR(k+eXWR#@WO=7E1No) zHldit{=*imyayL>Og2}X#SQ<>TbMpVjSUI&-6&OVR8~`i^T*?U6%Z1lkz>;xOhxzI z$hgPcoDhz)HFZ#PxN(KpVd_SqK^Gcuqn-%~B(J_qv5q+>iBE-%OF>>WGa_=-v-qvR z3M_*G{<;mkJLD5FY*r8u>4wd=9DyV!+gXX1KYEJl#yqgmIhT2{`%eIOIh(zc7`)_C zE%x{KsTYG^N~JQ0evgie^9RKgteWF}8rzlO49`y+fn{Z7mL_Uy_fSb9K8>Qh{m85C zd61$#HXrAC`t+&%ZZvu@p?~V5#Hs-&YA%raDWN^bQo|;Zl9HN^74#=e@hq~G`kI!W zE?lMvh;H4I2~g=Y+4!)e$t{`1OTuo;@@isHW#L&uC@5&OQYu*)OyoxWU%!5xU*!97 zSV>!JPdJSFV@g&QO*3YZL=1~U^-zh~SiZ3AXfQ};@6aga$ghxgrPb9W2?Z*;OJhk- zKb)luW#T?LL}sNTA`2(=x6oqHBD_1hin)N1%Q?N&gH{*L9HMX@E(!UGokW}*F{1gf?sC4lH>W? z=#Rezj$_aL56%APOCwafMj{;<%}k1l4|!x0*}lFKQI;|=NN4ad2T|T_HcPVV!ws?B z-Q6%+g$YR?{Fa7y(|nv*oc(a+Byqm5U0GhX=v2y+p^*`FtTj-YL)*hCk9S&O1J-~f ziWwTg@LV?aW;0X!K!HAu)(6iIxD6N=FGgUP;a+L(comX{9?tMXuDZf$$CMlvD&5iB zTWDN$V#|%Y;^XBRjGI8nE1#{H^^6Zq7;BsCh4Z98YuF+gZWvW4F1&eDl7fPQe0R9S zEP>&p3>q(%dP5*dF2C=DWwy_IT;gUDl%vVQazbN^t2!&rv00zKyjs5fprzFUiL0U^jJ->}L2uThx=ux1?#}^*4J^>Di6> z;D=!BODB-3hn4((1Xk=@k?6PITI|RQ!ydmtQ}7WY|HNsx5{ug_%1?u*I$iPhobnf0 zEIRUYz?#%B%*&-(HCK>Xq{J$Lh&EhExRho!II1zhuZq+eUlYrFngm$;)y9I@xVUhv zybZ2qp;5WKphkswiq)D!@rgEQT$1=+*w_W1{#Wej;o%Arhg-G!vL6sAtIsU-*$Xfi zTMcmYg4_AhU-j!+T2y^j;Hj(sA5vk8s=N+OI1~S`@*xk(O>i1ef|{G8&j1-qXs0X} zZm5X;?)H!w&GRw4F_$!cgSS-v8zh!32~{9tE}e~c3WJi3-eon7W$5bs_Dulm7I|iv zv`kJUcVv_-#Ho3TA8UTfpiA%1RS8YRhiA4e#v24>)M8BhwHvFrGNR(f_9s`Jg6x)nTT^tG z`g*eylh~dIi#bg)?lLH%1NQc1MQ*s>PE8eEqv66mhjWL4Kl&NXkL(wbZV_6mxS!f_R$h!-RiWGR;bJQ!STb?=ZJ|=eE)rw`e5sju)Ws9P7BhIhB zfO(B_C){pHWqm;cC!Rq1KUz07sHRsOCp+D*rk8XQP<3cn0?x0n5T)qp<-lHKs;-Ov zE_46W_SY_hzKp}cBZss>+UqxNd_>n_(9L&lqC)T@oTFYELB-ua)?bR6F## zTy8&2&#h??ny_~{cB`Yh(BP&(5L(KkarsaK#((+p(uWkYYz`e&vq$7q%_>Z@Ojaw3w~7N)OjT5} zFE>kXzx_mdT~HWJIq3Oz`|7?kDU)~;=~V1jhxo;f%n;;}EB9E#?1dxm*)2q<6qg}} z^RmY?s}oSiQJTk#Ohs6cSs}Ud#l#{nPEn6AE=x5lG*YpztxAV*t6#C|adWJjH%)Y2u zNwzZe7gI$q_mAGseTSZ4I8O5IFPdek)_gi!sI??Y84+ zC*zUwt@jz9IP6vmueK2v3Zz0Hw2vMYy7vKOT<1`x@QZE6&2ybG@g#8$KIzyLb32znxw);N#KJQFg5rsMsUq z>!PBfdfp^sq0{fUfJ#*%s36mHGP(Iwx%BEkP{i9hnj|^-gwP(%1~Q9KX|w)T-1v!h zf>A3;xdiJnH~kb-sF1|Hy{c6gDSavOqe?u)Em9b>+M_9Bl0;ZW$TGzXn110{!ZvB5 z4{cjVt80`UE2-&FL+lki514TGl3%p6;r4Wds%aitTQRcBHBrw=3AtLoPEfP!1*#^7 zai8nz>Z~*d;Gg0B{8c6qGfp$Z&inIe`smG&5GMWolt_*I)E2`2Hy1Efc9`U}+Bn7U z507S=!1PpK8MzPb?>o}mWQ^R#nm*y1`iIfA*m08&wv~>`LpNr?;Lqr+nsMUv_uxY4kWW8x4>1BckQ^!2abHM*+r+^(7Gx$W`XxvHh*ZY%CwW{4|FM zhhm=<(~4yln%92*{zVWCm_avx_;Qkn)#|p)OG(K9{7A0daSue{w-y%?ytnOf9R0ow z;D@tH##~h&3I&8k=Nll5dA}7*@)V?Q*XupV*vpA#8Dt6Wsmq4!Glo)2R1O~Za4j+R zJdwB$jsGz{Z6nf<;==DV8)vt`TC?Y`Yrma#6eh|T+{2#>sbxCQN|k{H4(z;rd(oee zx!KoIBCPb~XLqX=T{M2HYprA=j9$IYtxl~mtR2308s6X0sq)4m=@@0Sa>H91HUElD zO;2CKtE6KEdYFrLH3uUO{nh#%#5B|_awDp##e&VMd zA|ZN~AF*5n77V_Z+gLM|*Uz?*#N zE7#mpCF6{~*)=saA(%m|7m0OSV%LBRa?EriE;|1E_CUU_AAU)+*#C zv)sM56FogWl^Q+X9uR^q)*LU^NMgP**%{2!@y73oUX8ln#qSEKtsLH&?@8;J&j`72 z@#?2k9@y&2s)R?QIlyz+PiFyTB}4W@qB zTql1e_rX91lXl%DntbLH=$9{`e)9eD%QgL^)QrBJpD-k&2sPV604z(HJ8c6`=picSn z3mc;s5)_*Y(YWy{qA7DtaP^FgGVu)rg@jbsQ+;~GrFD1(@f0OvSlVC@43A~)R2vO> znejRRd!=-BQ}7$2p=}N5eh@mQQ0^h%^>EtIn~H;a4&lr3`k_%7VKaMr3{wL=R6`9J zGi;DT#txQHPWo9FU~=Ngo)lhA5yjj>0lhaEyL*x^!Oa}t1R3jrJ_(60dqAvF9TkL{~zC4`mpS zpyY|25`-4dA6Kswqv7M@?{@{dzQS;Zj5D2|*_`jm{!l=B%yBR+-l(6*i#JguVGGaA zElFgz^2gd258JN2fb*i~(vVO*cP_Buu&Vf&m9(x*=L|avR zz|%Gr;HkDqPS!~rSF3j5RDm-UtJMdlX_Xxy9!72WZt?UsAz@VRuFI%jUV7K#+)!Dg z>;aZzOc}L~g3crjSLOEx^kRtY5=i;@v=V%DYPO4Vm9^%)xIlwRkqOG%QgA`Y%HM}T zV!YINfPu!=8RY#P2RQ^zfo(CYsynO}>Cwgx4McXa)k3zm#rP~RW>{nI;qX#!^f_pv z7-QFlHVLCdui6+3RYqOCY?=dFc-EdoI@f>UPRCQsVYTD>~Y3S6te!C68?5 z+`1LOLjhKk+cJP@DnR{v0BXtldO*uh4z8I4)y3gHS9u0OH_nAp?*b+G&401|JmW?H zYpxPz8){b;_1dQ&Wmah(Gu}vyer*83hGD&d7%<*=c@P+FZup?7+T|er27Ym2p#f+{ zDNY%n3E)|_$8!#qr(rRJT8k@tH{%nXp*kTeGb9oe@Z>d*HzLC$BkkCyn4W9d*c8pQ zM(YSz<>lom-g8{cF3AM*83fL>jM-iA9)1VNQzp3^pw2!-wW>pGgfL1J0&2N6Y}LUj zDlA<3^3?#>E9T%tEMeV!trJr;;8*NYR7)1Y?l3*Pr;GP`&BSi1%KHu zuEBYr1L1)sjMz{56U1f?+#y9(^x;UYL-BEgcBLV<$8uB>_lyx*sV>!Ez)Dm~N=Zj2 z=@|Hr`Ixc8ROaQ4rNH&W?UEW3jL75T<1{zpQ3r53#dAp*XN2ly zreHC)S@Yw4ik{1L@f>i?fQT~5r27n*)*RVJQw2tDJn0$%ZTmzp_R;G*)@m(=_Za3A z8{pikdF^09sm2K7wcdUr7MsNGfWoTPHcTSfAk_kPy;J;wNes)tHYf79-fg7ZX0XgE zZQ3l=jBpjqf(h)#}=EdcJ&8VIOuB1z)yzTc^84z?-YRUj@_onoS!k4bv&?&v&xnfXGDKP z18^W51RTnKA<_K`xK9J~zy2gZ!6_Ns?<_(S5D-ATYEDgspe8mHr5ENJ_}%mdllEK= z{mq=e!qx_q^Aa9H8MMais*yy{FOzWP0(eGRmD7&xl%ixsy?6=J$7~<1F=wO%v^)h% zl4Ji#UTX9+LIQ$W%dW)es6B7)!_U6&Kz9Rd1Qy4vlKwQ%WjA{OQV0~{_T*291M5_9 z5Bf%y0Js8W#h(FihaSK`*0Zp2SPlHAjWuZc7jo6#7N&zgOEbXN#hBh}*|tB=SY^?b zD4+?l| zXxfhD^Kwb`7A;hJAz37JbAK^c^*IFzkbV^IAadt5KFS|~z4oD2r}PW}xhi{NJ@aoe zO9J9rqx~=Fl3Li5{&7gAk9|l;$aMhV#Cqc~9tkRhSmZuIa)*b6XiF%735vv?RB9Gh zRw$Twas&=rL0Q>Qz#X*|e|mX&8Inj5=`dbOQ|@k4hFOR@heo5NHnY{qw#R zUtm9vX6}MAS7Q$q0ZhX$*1QCoV|o4WCr3%#uS-yHHjF4_oq#J*?|SNDAdl5b%|C*6 zH{8Io{{0gpO$lOCG$%yQ}-ej}>AwZ9(d1~+p% z7`lAvl6kig`%WH2co&&)Vl45)*udZuB(Qq3TMXm_bHkVxtU$C-Igu7S9SZ4&UEy_5 zfgD@eou6kW27p)dPgL9d&Onw{P}$ZBN8|p#vSJvZNAz&+_$xT2@`#D~6&nv|W4whh zf%K2ib=7H14ixR>q`|D;R+i?G=*iL8i3ulwXEp1~%B{|D_0$FlP$zJD6i~;^$jHc^{sy%Fue`-W^Cna{ z_gAdd6bZ(;@^cu2Kl)I{-H?F!1Y{{@=YQcr&c55bdY7dY*39O5sF<^naykoOU*dnE ztxgWlN>Ndfnu|-Ly1F{DQYdFv0PkdFv`Uq}<}iQM^}qz`14da9y}eGWRZ3i3Tsfu2 z2+!9Iz+E{mA&?WmTxo;Yg|3+N5ekb2hzu(#(+&0420#_3hQKp6_EeI7%hcJcSOC{H zf7K@5r#1yED!ua%;}d9p3FlUA!$8lj(pGb1BI@!nIN`uADd?$asDL5r?g)zuoHj9xg=1_m%DH+lJZd4W{X&$nnE=cA#a zsqJ9AxPwLvJi+|OyB$yfE8c?g*TWH??*EkbVSu~SLtE@4a3)%pguxx4o$CCVR{WPc zn7zUTtP+?ib=)4%FLFCMW~8%U%4^v4AUWg#p5gfLu1zh=M2o*b}0oVsZaQa?|}t^~BiinHwQsb;^f#Rrf*mD+{FxBry|Z~TCvwtRNoT;dI= zz#IV`?d_4`c5!^8x1Wmj6jTrOFfcG|=D$cZ0&E~$muVVJ8BinIT3TB(cUe>&>jrrx z9EA6_^N#l4y)g3g^Ed18qzphYA+6@s@j7Xsnaq0DxXlEN52*G%gS*0|;8b zB)k?M6`b>a0uQtNn~=Qm0~%w=^V6JyZ|O&QLVuT+_^9t7rO-bWs(UEy;rEB0eGoks z07uQETND38JUTPke~(ga$6yS{+Pe1s7p0hd2C>)G3!EO}9GW_y-@w+)vm5_Pk@Gh!EiawjCIRZcgZ*FL z0R{zyBS!3oe(tA!)uOOfy}y^DfZ2Zj=fffhrz=KdDSj*HnW_180-naEJ3l`R2&*Ol z6k5U7-3G+wX&@_e+{YR}`spRi0qR@N6V{x+aPR-RV9pX$?CB_G-~7IpzrT7H6v}r> z)k~!y_fE@NLSF<|OQEQ;iC25@GZ-6>0&nSI*oihB40>ADK zM4wmB?uHKK;Q@?*N@;4TmH3~jS$q)JLlurNriTAbO zaSz?&5Kw!_1OXNg2(W&A*gOQBHFVtJ5fEzg2q2L{Xusb2zmdp4CHlHK3gDPv;8Fxg zkBCufwJvn-+|QrA2lU4Joxk62B9vrJxh9Y_XokF1gMta7Z|JQ;8EWpLHTa83Xe026pfT}wF z110gU=j>g6k>x+i1*qec1N6OutZxqg3djUP@0WWU(+qAR%*@ORz-N3o6QWB`MSzft ztUW_nr>9~-ryu@IRL`OP|IQ{r{-lr+ib6kY=Hv5#Lh-I>_HMr@1iXlKtAExRHPOpK zB2>`Q@=E*0b&7hnIj{Z6*z9QWRUq)W<2wFYX@a3zb0O8tjS zWP(4QYh5;>?*8E`s=&m=ZvPey|K9DKxklp4`C_*8BDDUpE@jukiIg1F<2-h3mRlUj z>S!1q$d5QnyGy=zI=r?lt#yn}63!c3{H`gzLC6P zz8J*#@{@ZaNv9v{R{#A~W8D??OtVKCAKuQ)Air;h)r<*qIyP_;j!`ID9H&*wmI|)w zKSE?J_Q&>HZGNIRtgme%w9?Me7!Lc0Ezm$@y_);^D5rj_uSdLv&a!-Z-@l^Gx+I3a9_f_hanQ{C|z!qgQVN3riP z9^PmZk4em(a^-7 zZ^vfKFEKRqX5T~c^)9XQnKu>8rG{|~N{{;b-Bv|O^*_1ue(f_8E_GkJz%&E9*;Yx# zgOOX4S;9@z-OZPi(+VQobLUYlZ}x_`wBO#|8svoqUtg)6IpKehjE4eTWQzts2Tna4 zJAei)z`I_CB336Bidc}HXt;7{ybSM*UExy>@d48Qg}XRuSyLV--5Z>DR9+0Nq_}8L z6R^t`Toj-}C}w_1d{k9qR{~R2X%F@ZOh|5;tVxQw&~J2v@Y-)EzDo3jbawW(tzsjn zko7Zh+N9^?<#w6fa!r=_CO|#!d1Mu->M0;JAD`f?*^gl=GpeF=g>8r?psUrXe!(YK zDC=-bX^Q}q9@w<-QL zSN5|9Rc$9MOI9wctAMDzcA2l{k= zULVQ6wP|9AL0k%B|o4mHMasUV93(H*m;O<6l#=T5^zjsB7PS zfqrT#@AFDt1DK*HeW$x&xxW>*&y{(?`bfE-La=#^Rd~Dpav$qZuQ5{2{6h&0nk64s zqpa-2-PKXDB)c%~&8)j-LpU&*tfOu1=INSdE{?%-Hb_kVxH`9pCk-fy-kPq=`#rY=K zHQ)2au+#bhV@srJR2lctsi-@``PxSp?y#zK9682b{DzSktJnqP-^5)cb&N(<66{d+KRH z*&NKPHT?#D$%H9}yU9QH7o=ouCUQ@*yjpOeUFRnU#Bf|zZ%M?!;AEihn8q)pq-!u> zH`b3CayblMZOFGdoQoHJB2vVAq1><$&L5pSWMoxnHm%pTH=l;EYHokA_>HeUc`>JF zN?B)%=liv)-9ZTLkUS*@y4XYgg^VE`=JMlogxf5q3ni7NOP_x2ZI{XLJkiVBGVdHD z#XP3>npPthCj++)vY>}gYN=72_6AHO(w=;9YPHY3$pMMNlA~4p?+V=Cb@{9j{FkWw zM>iPoeegoEsiElV6T$vXl60!Cd*qcjObPnJ&}Yn+d`RmZ{!utZN=h+d1)utO zjbwi-WO7imx6?F*06c)*21~hPCyBuO5wq2%nbSo94G?`p+PyolzwNOOlaEZo53I>5 z3po_j%%WnXn2-PAy)^*S8FVXEG%|^RHHQ~WzPqL$+5GCWGfD>Rz|@d+f1J+9X;kpK z0oCppjzE4n{m)rEbt+7BsLC4dQ0;@C_6B^*X?#s^!`vqbS@`XyKjAZtz>a|KWA2(n z?9rrGcOR>Bi*hCQ&vx|XFFl%0n4X!v3s==U77e}NCm-3*HT7QUMdRZUCf(N)?v9i! zWTGzGI{0d#S;HIJ)AEWcr25B*ox+q4Y6EZP9jEHO!`0$HjvPcRuvXZ;kRtqh3_+$Q z!N%0`i6xrlj`NEgx2BmHsAkKYAycvG1f#I@^vR(@yHTU6ody$?EMnM3ABXi~ zDml2(s{8MiJW^*K}DkdWCeAb63oj?z|LE5E{*1v(ee)uBV*&BI~oJGE@?cSGCtYA z5Ejoafiq?uii?~v7)6A`3dUMZo^4?frj^zWZ562UD(uczsFWLq--_SwVk6bJ@pas) zmf(&t>WTM97C9@uwN2PJO$ehma91{4yLdESu%{C4^diKE#CyK|j-8QSNX-MQpD8iJ2AJ_59sZvhRw@g8ypm|d z!S7i0@1d#r6X5jQF;AHb{J3XqP96>%Rc@kiga97LDzg~5V7ITN)aVH&c&*uio-9JZLAn`0;EtDfa~qs34w$f#xy78mUb zQPv^g@46NCS8#VOvzZ-l_uDLb3X?~|`;=-*)RZw4W}_|l97tzf9HEY(u#;*vl0(z7 z(NOpt!kL|BD%P!0>a&bY`Qph)T80N+*bB`ZSu0{o5bQ2UIO=Nr$e?hQY;9xIP{q8>ZR7@shj`I) zu3PROcu|wjvy*Q}r{7qwVq&gTQMEHsv=ZhP*c6vvEnnVWYUDB*E0OTtS(S;fW@lL1 z2r94%n!p^*RTA7^s0-#CREkO~w(cB6q^e{v2({$nQ09ISAF&SfiS6e+DAWrK?5y1= z+V93uqAB^b|11sc$!!M`*~{M7uA1R?=o)@Y{Y?-OY-rY5*nP6l&#GAE?m|v(u>0v2 zhNCXD&pT`L^B@C$*rvil=epyM>?`6^vEezG4{YZT#?%tSIsD`;_f0qe8n4`kFAtKK z9ra+^?v?nrZ=}@jYQS(Ucq+hb;e@WTN^y_Z@#DV|M;=U2^WwNv-~XFv|4gs{We!S5tmF5|HoP>YZEz8wXC^i#OnT;P4Ij?DB>*cxKm8@lF=(uq%r-biX07*ud_A#g4rV;y#*P?Ns;nWpNtVtVq% zQh&L0;~jYCCaI{)AD@9(nbk)j?pDR=6b};nf(olf!ci!GAL+ZIqM_fw5 zU+(X280%9LanMH!;7D&q-PvzreM|LBKS$B|lQexha*5l`-U+C)8Bq0|QEtVb1K+?s z+Xn$kW16t!`u@XL|FZ5tjzKrA@XjMt%7#i_pMlC>Pf|%jB$x{&z%?%mVsr?qCaRL^ zpgR;E!8Pp)oBAxuc1U|1ZW{hT6jagQw7k|8HQzs1QA3oJPGq&&uF1IRjpNrlxUwO3nJsrm?n}7@ z?BuJ|CM)^eTQgw1R*5p1PAr%0j})q$M!}%Nlz8vaSh+-jz9*&assL|0{JP#Ubo8WCm3HOv!d&pOv4mV4Zm8_@C3Mb{8F_#4Oogp(?ENWT z04qVV^*#o8h-29t>^!$KoH<)w&C~&(2(&KeHkeyoIzi9>d^FQl@ zsMv|{;AaG{beYX5jWc7u$z#haDBDp_D|KRD0`a~#-gg*@4M;zk5yU9mZ6I-%n?Ff5 z5r1A+Nj~tr@2CE(vYZzO&64RWjiT9{pZKm=2E-1IpBI&iOZ7G@7x8hhVlrD4Z5v1! zF-7uC5%fxl=#X@|RH=q9Xr>Iq6m6iU(!olx3o$7c3MZXXt^DnY?0b9LGP1dgHZ6@B zqW;BMQ*|{$N-XlP7I)*h7r!R?vm0P9SO*5lX>sB+zKRl*x|<~=#FYLqQ$ZI$L`5}u z@Sd)7r34MZjA1VB)-L^OSF2C3Z)S7fv2#W>l{_gIv+u^x$CINL#q43V z9{^7DU8b67nUm-cLpy*H@6SG!xZi-Y>6l(U?pvC-3Y$Cwvy8r zwIV9KA*W+n96+2azdibhNbQ;C>T0kgda^-hY2N;zmCj9h`P6be>`ddWP${|4iGv~e zgz%JY38Z21ZJa~Koc-q?UJ5080xa&jr(UW7<)sd9oCC_N#$OxG+dfwc4I6x@c%jN_ zOJfGhONiWvCoJI*$=&HYp+}U>Y;ZoLn+d`xaKT9^bI9S|UB6l0@0YvQ`^9xUBZn(Dn}G6@2KbUnGxd~S zi`^A`@5roP$zw>e9hO?GiR5bmi&q%hi!yg4nQ|z6UA5B{5$BUre#_CT7oD1$6e@{X zi_o607{^B&=K2{|%{{AsH;O#yv%I)dZ6+w`D-aX&f zrGsA8f?o5u?~b|Hq`3UDD|Quuw-R^e%xvaWv*4#)J*;-Q`I_S+L1a8va}sg}Zs=4i zRME^0=GSc*joZX?bK(mo!UY*Oj6+Mfm0z5X6>$Q;sz|4lfcDf$&Q{BsnrHBBBTN_1 zyd&oE86<$2W~}{=I10*JiA|dvnKoi$`!L`7V-GlY^@?d*npeY?K2@c%B{-mv3)k(u&;uu%$Ig4 z$8R}2{0SmNL3JW_14EPRVh+W!4Oq_V7yn7*;hjIOh3HvQh#}Y<lI%C%q#Khz&}CF7lFRFgS^vUZRx=?pAZQ}nc;Hk z!0bLE1*##aU${$&pdJQd7yOqNu7u;NDn0pRx+0G)ygVwu(is^+>mD}t^Y>NrFSjV- znA!}6n%K4+0%Kj9Wfwo6l#tbYo=z-srV+az%9SmZhw-)(aZ^40_22(-+XMOl)g4PC zLw>K4)`EaOp*O^l6BP{5k*M(e#+R;gfr^ zyxn<#abkU(@jo#FPhJuMEnh?5F&uH~G;qsR^nh`HmC#3r2(RDY|EK_H;^zLAmHdAQ zZ#}F`=K^u7#2MgS|AAKkL}EZ4V9%iEE5ad5nTR|oG;Vu&_~k#7NF2b1b-{LS9w^pX zaX<F;x<(4!`{8Ej-Z$*qGYX z_VGa5g1UgOFq{D7u2$r@3D?-_>G_Zo(;iTp9gA~7*Iwn8oZG(>eegJR7z&&zGFMx zEj4!tAPP9bPQMvy+E@yZHmI2h^x>7^KQi)Dl7Jo-6i+B0u>3#umPoN305BBWbx6Da zpgTaLxxjwL3a7fqEgDM@crp6B01sv)y&t1KGjJWL6z4-3iSsCZHdRYs38^l=UEj|b zG7?Z2jtzJ&FIr&Gu_rj5@JOQ|@7Ar13+Z|GPIK%vAE>QcT6C~hq;DquDne9PJ3U6f zo(+j(0`*joG%bqhD{S}E=<8*u2jZl~(n}SlpQ8A-f4`*3MEnmY1qz^zOe{ zqTAK0_z>x&yMQI1=Y7$MHr{FqunKb(Tj-iVGI~F*T-+kNyW}ryXO&8)+Jp&knT8H> z@+)5X80%r|6GF)=otZkTqUT{}u*?UD!`}d9D>Q&Y*KEEw^?|${Qs}T|vJd!|G2z4i z7W^qD|G3T0gZ0YS$vP&yymgAaWf+zZZC>q%vVp-8i++k>qSvh+Cs8Zb+nczT^z004 zTQ4GXEFV3ocuk+#P{GhgQl-}s_&l>D-vGm>h6}nM&O1~POlGVX@ZqhJ=hmIIj9)@t zYZ{~&MAN;#XuH0!r4gu@FxcL2OnwTNQ5lNJt=9425w)F_gRS|Yx~0|VWaYgy7INAx z%kkAWb-nFkMSP-4Kb&4hZ;d0HVp|ix&!ora4>d}63p6cu^MGJGj|wSyTOrD9^gARM zk{A$Is9wdjZFw}cHQ>zLVpjq_Tu4jFQy!*;{YZ(BL?cX$BR@~)`07~8RvCur&v)V} z7^7B}W3KvgzfG_4@hs)C&q9T2I_o&97MD0V;G(W{E)7DtzZ!T4HKGH^8Sw_y&X+S* z;Vt;;%)7pxDJd#VM8IZQC(#)hCH@XsBC^08fCAZY$hp!VdXK-j3rWE5_Fdt}0^s7G zVs8RewOV-;nm*ktJ&h@29G!1@Z@VUWnKdvXiZoRfp3$2gl8 zH#JG!r%ioydiaM^c%W^3=bRzD9|HUQ5-#h@cU z0rIB%3huM7oXGhl;e+W`T+UyQt6%;O{gIhvw3lqkeN!a5i)ji~`|R@P*Na&j4Y%&# zdJuI<3r464OQ>Xtw6QN$FRUoX5Ze(QUgn<^Y8S@s#n=-H5z#;6?IgpH`7Zl-#OB21 zJ60&&))E~@fmdB$lyt58Yd~QJ55Zk)l;TNI#Wv`zGZeb=@)_J~8{GHfx~DkC8J+a~ zZoMfIyD;6J7QPae5_B${IXzEK=z(6PZOGbUes{-r%A4sZq8m&AubHe7eBkt3io=42!R%D+UlU_(vbKI`Fb=#kWfsWO*Nr97l~d1~bWC_% zs_vP5O1UK$#HZc@c5=`!CK#C&dG}kdV;T!Ciiij!%3%bn+f(y=&d$kIj!3YbgI;k$ zY1N!4>1}siRHaQ`&2GkwP%+wl8dhrSsIBT&OgE$H-RH2pT+-az&t4o?GASk|Y}6($ zJ=J}4c)?maw@|ytx8JI`-^#SJGdrg)UUzYktulRg3?)|D)ZELToRCnJk1K)03Y1$~ za(jk4hRr^9iMYEbvVVfuH`*IY>fFmsDlU~~(NekFi79>7h#Dzd+Y?e!Ql!9%d^Eb? zl6f~B>wS+VCaKDSe2x+Ni44`7mq?9s{L)!hx<2zfTQP)3lI=FDvm>seh6Z*GWk!A) zqDa;2Xh~<)+}aDTVbnK_bzg|z<|*@fb;8g3=?AKO{rhz;*5mcIJH=e!zG8z-1f|_D zX|A`~@oXEk52boXzV8-K=P-Xwj|whs3_RXeI&~`m!{1HS9}|NMbQg~o zA;4$zq=t!J|362|i0uD2STVpM9gb=IXCQDBaN5gD`t6?z>0*a6^R@tX2fBg!yM5}q z>x&gyJEdvyr9Lm?QDFTQiP0+p-*%2~s7{jz-@g~9<4c-Wk)cRxT#OFfy~5a(U}Qvc zL89vQmWHNIxGUOMJFTb$g1|eK7BI^2>XTITB5a$%j3=40e|$Bgi@(e{+;E*VPXmeZ zkkoboyKqG2iO)t|(Sip zdMcc4gVaaG_)tV@r|%8YeC@o-*xcQN*~BN^pD;YZ?cymL;_ch$nW6W#i!4tmFI`?Q zcOrBYzowt#>dGTW@&*LEaroGhItFnqNS!gG7?!^t@fT4o6NDg`)9+V`_)->%<R}hW?9{O&TRVg-5&zuVQ92+YV=Jn_f0=$ zpjt>AaS&QhEj+onVLrA0nK6@y7#!2dJPs&Zly^%bXWWTX~DUE7H z4*ONBK#B}jt@BXaavL%LZ>s`@qgkNd4>bN+0)m{`{A*YXrrp9Xmu^&u;&MpHxIxDE5OwU%BB5Re;B@e~V{1=|=4*H!@4a1S`m9gSSUlPU^u67X zV2#JkxyH|Z&de4xk=kR#vhHrb7WMcAK99hX(?@51qCWw)-IR1R@&wk=EA@!Ek%LXS zx{iQTKW~Itah5`R=@ydn2zc@&Uo-zaBq9g%Pohbv0j*3Lz^VqKeM(7GMJ;tIl{h^u z%D!)hHs)Tvw`6AqF6rgj*MiQ0teXb)Gk4~|saL*@TAGT@wFZSR7ihN>A)CGqXUs^F z<D&~6%9|7?} z({U5gu`0r^{vHo9>UtKsr~-e$$mx?kS|5FioC|Tz^YdBjS*^Fk`TclTbjfD=R?wSJ z?`8I(x9?{p+)^?T#begaTK5;-KRfhiY(?4P!tQWyO-arV4d%y`oQhBQ;b5%xs)9-SpqNj%G6<^Lj=|L*e$|Y@$dEq2qwqg_?`DfOeXGC$jp~{ z^0jnC64>Cd$~d039gUF&VZxh~e8U$?n4LBvMpli1}i-t0i<`*q$Yx6t4pzUEj{PG2ptjc?-*@vNco`NDu?lhiHoWP zSay00Pmwd4zClEsKJA_f0?XF4H#@}|*dv~jt?3Lnvf>jfC_`Ghf=%xB4=d5d2kg*X~z5N4C(%sCs|%uBFbN$$E{ zpX)-Wrpy81e5|@K_w5in8u`k=4k%jOmp++g=9njO@|2#daDqGePNG1B(o!(O3~j`Bb_{2>5eY zy>+oNk`FnVBDKi$jl6oAuH{v$?s%FB-^R#STAOl(w#jC|Qa=d>%r@l*m){5CfIGJg zfXaaK^oh zm_YkzN~Qw+?X*>Z9c8``!R;dpGr12KWd<@rLxt*J=+lhBHY^G#AFA@PhS`0ZI;%dV zow->fm9aBQkQ7T_jlYopt9d!FW-BU6oprlWkt%1%4mqHst>-{0m(Do1l?q^|VKe^f zvV$^Zipl%Vxt@;v`Yt%=yu~e*%uEi7&Sz%jO-6CK()3O4FA~h~B>d~f_d8~8xO z=|0|4RgChm%_)E1ePc!?GV#wfRnTex_hmNr}5vKLgJvMVPh`0fQxJ z8S#}NoOAJ973@%*fUsiBRGY-48WR1Q`R%vS2f|khG>rGK`o8Nuc^mSi2%eA>Gtb7# zv zh-IlhI~cWI3kTBA;q%}Ri1v9s8Lt9ERRU%?^f$uU)LoId+qBB`S9rR2Jl6Y@{4LO z>R;rZaNb6doVk8k4fs9z?Bm)ONRI^z2CpwNFf*U3ncTkFHoHx~yDnkA{^MR|0=x1l z?#=G2<73J|fbIb_Tq}H?lWWDb`Ch*Ssc9rl6!7S2S7{cSmHLn!=IJ4fWHYGT;#FOvLI8s=vGa`h}{|DW=%W(eH73@u+1!JC(vWWA;-9 z7A$acrgC4OZe!EjW`h&sQ#JnGxym`U_$U5~xnDebSL>YnX)ZT;3n<7bdA0gJZnlWh z5dxL4YOXYW0dH^q3KA~EHHx?T-WmfPKYJ4Ti(IP~Sm*Si8?iV>deT*cg&%q(7Jt#V zzeWX$SI#!dX(*uYbhw41x87c3Q(T`~7Mkq-%1#j}Lm^K7p33_(H7m^}TRXe(<<5Lo zGfy}QrcP6X(yrvtICWYGguVjeG8K{ZLhE8gf@2yvY1%-B)4Vj$4dHu%$~GEQdB~RY zm+840Ggm!An%<=6OWw~f2Kk=kU#3*|Se-8|tBCdX|}4KwF%1XMK_VHUhf6rNaqJ$dyiL&7_p@G~SE$d}nfmeVjUX(I{ouqk>qH-qZ(=r};VTqs6Qyq3pa{i2ecp~t8qx7O_nC$o zeV9k>`7?>jL`BlQax2P>ySwk8DR=gk#hGKrCF-BlQ6Ct&zY_hgdMFvQOiXIHP_oZ3o+Ol zXG+SRF4A?kDY^4Y&@|tzsPX03wg*@MH=p&euA`yJD%M+3v9JFzVEMcKS%67%ETg&{ zitT0%YT#i-#?}?9IoOSA?sAeYw#B7W$A{HkxP%K)sVX>mcvT11jY-Fk5tM1Jb2nXN zwFl>`kx0|cF!yBG3sPC=s1=#s&<|E?H6svI(`v7G!+g%1c%w^g6|vkTE}W6ZgxXo( zD^7%W6$5Rn+ZljboOIweI2`A_s{4e+#%c{>e6*h<1Ncu@-&n7wK24c^8Ek`h*31Z#e{_6* zL$i~XLDLt;c)ynD+V==_tlccm_5|%Nyo;=Qq_}-;^TXG~te^FpvoDAbFGLI+Vt=3C z{q1((j*U)r|aEW3E*@ z$I>97E7>A_U{8YHU1DjVUE>=&*yjKJ5+EZi1J09>xJ2qQyD!9}fRL zD+ca7T41vI#}?*6K=ucXx+({-^_qLM)K3;(-vo%lF`UA9u-IRZ*IffNQ_X?*P!j&C zb%(a|kR2!A0BecT*7-SV9z@FqJVOza+FPNN+_kWzVGNo|L1dq?w$n*cgl2( z@+TA2u)s?i#cY%g_Y-vE)Y&nH^YnihgZ@9C`s;Cdc3>@5aTk8>&_WS-MvC_QM9~4O zZ;78iJ9cJr!Nv3NMStD#pJ~fNef*@WqWq*{t^@gtgcE5+GwSZ=2Btbe;0a_$$Mwd>(b>+8td?QwkFO^X;ZV(W$GdKZPREkGMYP*2trGSyBVa#4dXA zzcE55pQ%|?kV@#rEQ3-?&0vE92zXa!Yo0vPJPG=3#vg9y*llglP#^=BN5sp(Qpb}q z6dw=-VP-vTttnNOgND;oc8=4E{(gGWWG74L%^=S#(OP2Gn-348%o9N)5~Hrr^uI5sS;Rn zRbe7hXzOE0mQQ)bawO&=-)3e>0)H>%w%zX3=Ah&N{@TMw8cqUz6vXwhpn;_+%qoi< z3VYD0^8nTFqc0qm!vBR*oxKdHT|MpU)J{Ubhv?MYN%twfVn_j_CqUXR!WIl<+xMDn z2t9dDG!+R8bYsGaR>GHQtcC9eq*uwLR|O0+iVasSG~?q9vX>Wzr;@`oXI#BdJ8z}f zA-~J6J5e??T0@V>W=UM7sF?nLCmSjjM#m*ulyxRpeX7J&jhBl=q}a^k)5tMYip|y< z9Rm!NC+JWxyL4Zu{<0etqo)YU#4V+gveUV*G*`UB#-PrVt!_&gJgJZM#`E7E~sOW9)3~h z=P5x!TtxrEHs^5E(tNZCaBy+()o&-F{A(xk_Cn%Cxz?%2c54?M+l=AJJDc1B?_iV5 zv?AP~y=(@@yB>&&9Qj_l)+v>)JJpXI@7mG!qu*wm^uLs@80ak617hC9Q4v{~p>O1_ z;x?cJ5-I#G+cA4N0|k&Jv(y>krg5jZHc=(6wc|+9ly*&Xe`RN!scx8r;id$0FYD<^ zZmAAb(%Ke_+g84yb)TaOtRI>iIdsz1i0_4w)>hsGw9bBEPHo(pS6^k9e|P3fKOO|~ zEtW2CQfbpS49Ix^K|E^T-q2xYn z$69LjHI#8{e5Iy6Sp)*V@ku2|WUFhQxg%b!Mh#L)2u!ceMnoQKY3YO4?2M79V0Rej zrM$HEhvFWwHk4;-t#i2NjW^A1Rg(CEXsQ)YH#4`(Iu}lTSy;5!yaR1zzc8b@uwS8{ zr(=LH?=5}JbS4dq>*T-``xWc2FLahVosdv^(ALtQ9aiecy0Jbf@al}KQ}@grd%{M~ zrb@yc<&t}SSrLNX3}9x4n0~QqHvQJ7{wuydIbBE|1xu$Zr++uV)PR!derU}(QnGda zTTv@RE%%P96aON5Ija&h%`lc7ajSOz_x(e|L9pJn zxz3;~r9jf5qHLOtp~t?h&kyt1YD(VP+YF_bYYi#nW)#mFUfjeCc~Zbtc|bbv6wG&5 zA4r((kfhn+ax}RBTD4B2fBEkMEb5p_ZSzyo$AV8B?s+&97+F2qcuH4T)`LERpAX#l9 zX^uiv*F*K5@5`@YR{Dia6WK7~ww$4+m6_KX2JR1X!XMz>cecD!rMc;qBbXJy2 zW}7t&VrFs9_RdJ{dTQn_*_+g;_})O6*z3jKwB$^H3`5`->Ydcmg`=nDdEaqjoJz3) zV`%OQ-}(Wei$9~X>x@9eq7labhzL6SDeghqCxLj1lp6J4#RF;?weBZf@s2Q~!i}z^ z^ctukHYWd=tTcNi9CHW(AC zL`Tq@n!*YB6k@|zCXWY5#r@`b68iwfwej39KbW^+IjacV`Iu+O@cSY0hbuqyw11Z!>5%WKKauCLpo| zvUl8kEIPoBDvbK8IMc04Rv>d)3#?gl8)kfVmt?H}6S^Wr6LSw^|^_^!c0QatS^|*#(v|jcdHe+<6Is?irEctH`0PTs*A->ajt!1|czyDV@j7A#F~v zbi!jtabH?Ix-0LVadZz~ORs}HT9De67#_YUI1LA*y2>Xcz45KnEp_Z7t7IRbz(Gm9 zKppiY%h@*oS6GWt1LOw+_WTxL8P0vxD*#Sp`{%v=Nq?R}h)LrFjZ6WJA*qpdLHE8d z+H|^n+z4VHi`+6_RSQdwHL6fky38jv-Hp8HJBBgi)rKWNa?UsdRkEV z0ByKUSP54#om0_w{lLB3Nb(ZGY!kg(;d-S_1B;l$!i#|pcbY~autE^$M} z)>~H=s|T%+Qa?+95D5GDo4xo#jKG9;Pmlb5NEDExeg&+>nPhzzt$(G4KV_Fio-{`{ zs>|Yfqpfh$we(Q`0NOK(KqB2J%lle$xh9uPk(MM-jMlmgDHf2fBvYelRwE~vc)>dE zOh8SQ49f4lSHyd~Hhb2E$GwxWVp?n)P8ka=PXo+<_}2`x#8xeD>@IIYYb8jw=@vKC zH-fLU(=QH57Ha2M4Az<+3tX8_mAy0N^%?VXnepW#RCnG3)(NRnG22UUciAHW^jH2=}=e}2YaR(oppZ z5G_z{!ocz0gejYqFOpU9s5pUATO zPh@ZX&&odepOyXPe^&OFWB&^bj{h$(IQhT8;Qt4KL6xt-idzqyH|ySJa6O?DBZ-sT z8aA~s&iwGjRaz@4b83i3(w*>>QmiNN)_ZsB9Ek0FCba2!^aHh+&~0cM_wL@Zx9Ri@ zL$8wcb3raU!ZGW6+cbkic`K8q%RbKWufk(=9wIo0b8TPiCTOfi*b7`_eNxLw`uzd) zDFffTQh3ehxA>%Q+I;A?7M+5SIr z^VgAT7PI$QQBVczv($6qys8f@wIv@DiZ14K&QEE{;>&A!v zt{?q2B@1AIkF_*P6=o{(a@$h7p=%|D=@ODgIiHTV?018$&tMunmNO|+F2`}y6>P-W zva#QRWjV*kBiFd`!WsSoYpXA##SX9lJkkoTUX|Vb-#f3xV)xS~Y`G+q-xTwP7b`|= zR4Oe5ZMf#p7E|sEw zNIY$BnRxLKa<1C2RDseaF7qK9=Y5T*)S1^lGFFVZQGv@!6>v*W`?gJO3&a`?Virsf&on2E-8@p}YR@87&?dt2tehSN! zYp_kYZZJQpO0d!59jCQf%=hmt;j~LL?}{~BBRxHi7d4-H5uQqeTHT2D-yf;iqmo4B zn)@^Ef>F#Thx}Jf={%&A_A@&;q1Ws@s|;=|iHhW0u(x>_A&H`z@`K9tt;u0TE61jG zpFGNu);FY|fZ2NFP-`-EH=eJCJF_=PY@PTqVFgH3ikjovQP=u%7$9~oBZdF?!%%-G zdMw9}b@4SACe|2IIqejMgZGlx^f;!%t&_3KeGs~@D~{FPONnW-6z`#nZ$Fs^r<{6i zJHO+&HRJDHB+T3{5Q)vnZA-^m5|;0nx34YZe8i#h`+Hy7Rz2N<3kE+*ENp=v#C-W2 z;`3wa9t8ue3ufruEqXpU9j4m&IIksb-kF4>Ga(L91m$5HWqc_ME@BkEX^6 z+r-4*>sNWfTCmAhu)!*>$_cd-V3&t5l)gl1*OnH5LBEpGN+@!Hg)`rKOF?T!>$hit zG}i2Y^ARrYuB@bSoH}iq+aImgEF)^*7D}=>M1J+e8W>leD=@P|PXQLBrSaPL;WJNz zj(dyJs2mha7OFG_a_lIMwqRms?tVo8}7G9RG@b96eAp+ zHdh4Wwnii!dC=U_{4;~K6SpGZlzOvBbFt$!lg1xy6$s}mb0u%w=!CQ3btJRTphUgGnVOxtlLatS-$^GKo9QMl+IPeoCZ#Xp-Yll*RDWcwI!|@1OB*OU zxX+Q>97$|h@Go*2GN%vC zu?&+OXH$igP9?{K-M|>S*CNxaa$%vzL@arWtaEHVz2h%_Y3odRW&5T@VP<|tfA=&^ zg;57I$7#Jgbm-V*70sB*w62iwufYfKnIB~fv?9Dq=CUYVea2cF zyT9+F?{TFjberPfGd!gk{&b$@!tH&zza}VaFNqq)Iu<2gQ?QE;zr<#5R~OZ~QzhRk zWjaGB8>gMp)hsn|TA#9!KJhfgtu)RSHjCC^oY(Clc-f>^r25mjpUFe*>qix9LD$*9 zQv}_Lo)K;5z>)l*>d=EA+ z|BDLPtxx1?FIjB#^5ZHLXNz?(?5KNpBzUZx@d$fL1Vf1l(l8}IZKWRMJ0I7IHtm^> zXmO>q;Sxe>@l4wAnCY;bnDAN$m+hvkiHgDs18EcjTNnDV5PA>hf#pejnwW7p-|x+JMtDc2C|gULen)z1Z~jUc$gM~{0re`8?v0@8 zsqs5LKSo!CIc_LkL@A{0+55}~nrV4p6y8dHE(>5OeVWotHdg6s>g$Cg<2ak7&#%`Q z${;O1>|xoI6GJ0}XR*lz<=i3l`Jqb-_T78VO(izfBsD6v=!&O#iLp{h5}l+xv0jCr z>z-$1oHr$rYke9KV$_Y%^fjOEz#$f-c&ll~c(s;%k}EtHyT;-7J^b!kW zHnHtiCgGh4WA^hlP1z*Qu;m{frujSXlyiO!6K?U%Ry*yFDPUbk+Ugz~Ne;+l(c^#frte)Dd39FcR67YDbLaislNVmi& zu;_*_!hM!Lf$8a=UEfuUZ z>+)Kk?+Tjj6|o36aP6e@cW*J`Yf0v-*{;j4`TDgle7*95n@7UlLPG?LO}>ALX#Q4J ze2cR7eU+-12VGX!3e_5MLWw5`H?(s+ChlxP9(wG;8&LkXzEe*V&}wn;R*`{n}Zw7zSAVZ7Wzx%Y^aUrH+14Ts6i_TOSr@^vd6gbBVZ=-FSPJCcRpR_wYIv= zQ}-2>Hlb)5kflukQF?e(E}rG2?>DTgnjv|bQb%(dR3u|e1(Cw6r?=)cMO~e>4NeJO z3OAE5crAMYu{CT?8G35gi0o;s%AzDPnq_h$IE8Dv$s`)JEt7`A`g7>H?Nk()d4MhM zE(fygg^@|bE*Qf)Mf&gz23fsn2wj|Yn2)avFN@>^%60BE$$5#%8pdqFF%A>bsowvEnm%NjDCbC*K^ zS4xv%NzvW`}!<^I87Z2jAP=&-FLr zbZ*r5w+Tp3^Z%BBH+D0G$P^C@g=|fg)T5<`bNbZVW?+^!9#FCCjc&=<4H&L-DR*_N zoE1M9AkwY0H~ocCVcsf;F~Xkv}cl%OUwkigK$I zMOA602Uxriw2u3Hfh|^BaO0-yw%_vh;EcUQZn*4Db-<8lwrWA4f5;j^6;vX8C;2-H zyecqV;GMVY^V5YKdTXp#)YjWAdcb5yk)fF;2 zt|DYu8s03|`an?WS)er@pXqG_z4MTqPaP*DPW;@%`Qa&M(-Qq1x}Hb@l>{etYP`&HUkSl?dN7-t`DkSulQ^|)DYvOvky z_mK70^AW8ox*wE8r-BR(aPDw3XDps;_%g}Ry5GZ#EY}qQ8)Es)@@RUm)(XIDrZ~8) z{qywR-^BWlQMIclU56yQ9wP6((@)>FO)A(~t*o#$WL53+^uID1gDsvkoJUo{WpraM ztUud(pc{ShlkilxaZTrG(`qn%B*+I(KL2%()RA^CIMQIDt47a#II*Ez+)%ZO2EX02 zxN2hj(&!aJ&!|i{aJ%p-rfNgeC#yn}<9z894;3lhEm=F)D3ENr)YzeNH(bYNpO?>g9)xa$`3p!w;`u4o z%ZMrJ550X(CsK)CHqNf^y1pMR9;xK@iRNJ=HB4m&^5PL162-0%8NiuY*D!b{>rAk5 z*;~GuxYiHpo^Q{{E=Xzym+7IxdA!OVKMzj1BX!AM-6X7{KXlyvgwOfsUnt?54w#u% zF~nQxvleOw(^+grt9RqS(@Txbtv52-h7Yrr7tAgPJ;a$z;cB0cDz<3oe^5w9XXWWG zobE-hPx}y5Dkj^eq>sN);clq*jdGjU@pm=Nr}ks=5P7}fd7@Id-2}1g>pS*n!#c8* zD`0^aib~7fF?nYjvZ=Fcp6H6e zs)4;A=F3ol&}1aSOvfSv+LHEmZbu2NQ;*sIZojqgW(Gi2k={s}6@P0ky^q#Vp24ZK zH1`(>$d;=V7}OxEF^Y_;ero$a?p7I@?L&udV$FS>JpJb6T8-0R{T-Nyq_EQEX2(M= zKGkNXhK`gCIn2BSTvbG8xB)$kT-MgsX>y>M*tS{|_n5vtEH0Y%1PTO9_VX%2KJL|? zS_`X&O_B3j=GMr)AF)OR)#WeAh%ee?5|ucYmAn_tDiFgccuF=Wmw!BUnDMw%eit;h z1zstd9~5-%Tdx+GM5#bGw|%h@UD(*k91kFLx`Ht+(A5PcCrLSzN=({)Q=ly}wbR!` z85GyW)^E` zIYcg7nQCQM?O2UN4WVVnq4)}suLJo_qv{npA}qZleB0W`C4v*gnk`-#d}}p<+I)?( zc&R^Eb*)?jhZt8&1%vy$abBg3>F0m!4k4{f^7W#!NY^eB#MWUYYa|c48jB%VPGfr6 z_^h={RPYJ+GhMCSj=2SgQmw=62nqcpRnNi~i$=zU~3io^vU+F^SJH5}dMTCvz`_+WhE_nWo z_T>Ds{&?+UeER;<}A@<>L9DI+FIc6ob=tYWs{7mdosH^cS#R&=7xx#zUd=q3KT5n|~lt$M}u4ZqY z9fK)%E?{POQzM1&f) zA7k<}IWEHTt{I)0q@2NtrGkZ^T#kkXOq=&oxcA5N;Z9Vp1sc7UD~wwo*Lgs?gUn}2 zu#-0~UsHYMDpO=Mt{Nj8IFcQ(>yDtCA<-U5rjpZe+`zlOX{&+acX5*551(1!d1>qE z#?E|IQsVKb=jJn_Ly&fO_JjnZ4jJZT-@bz6G%Fx&+0P4<8P1GN(ZuD*qV<^Cv%RcT%s%}j^O`-WH`N03~@XqaWHJiZ9U=DL!0e`XU zGIK}doprnBlzVKrc>waQ2|&KLeYdXv4J44z$Zq!{?d#Gr&x`lsj7p8oWnGPE2AKt2 zmz)Mm>YLKi--@JjMo&9HlPGaBejlI1V$Lr^)hs&tgHtN$#6{LV0&28pxHx{I2!9Lc*);%$e(KXX1WNrIE?Nj5>*8vlHCUa*>x-KQM!Ra8$NhM)cypa5wZ7?7Wg6PuvzpxU9FZOh)lexYLY7x%u(gbA97R zGW#wxQtPviciE~3AE}!u1@n8Y=QYzLu3p|^$>nm3j7ez4DH!{~0~X-?SX^d7hp=x2 zb_L5~Q_T=lRbJj?oQh!Vk9GH7KV>R2s%NYQZ<49L>t@m`-2N51Wgqk;TItQ8ovD)@SAj!Ypos5 zv}#k+^E1k)J_dD?_CyE^7(kWzH|gm-?hn(5pp_LYNfKAhpTBp|@6IGODt!+Zc21!5 zTa1ys7Lj;PYTD+3!tsSW0Pm}9m-vsA`2w+sFYi}!2u1rhSznYeFmlLtdhcaPD_^f? zGuLj5y?WD|Ql0*nmNZ`9lDB$!K1!~qU5Teh=ldaK)(b&N=U+Xq-WF!`RS`&)g%8f# z>3o|c^p4+XT9kqg@7*tLz3XaQ9`0H?^)lUzzn6YLzf>T#{d7T}P6zNY9+lNwPE}*{ z@kvxu$bt(v%6o)7vv%3kn@CH?Vi76pFzm)O1-Cky>stw`p}&{Y;Is4U{P|pue37$_ zMJh(wN~JPzr1wQ=&%TBxqb#B+?UtSk?`ydd(vYSBot#t`8p*O;=?oJ>fAG zn5M5j`{e27w;MMbXD{&tItER6E%x@K*7Hi%G^Rf!|5_KeqE}W2PqU%S%k;UI>a}t6 z413o1h2abuo+31_&DfqOkM!D-=whrdEpHi>5qSu;Lt+0=8d4z%8w+5cS zY}0_a;2!KQZ3&Nmsc;PR3QK7*Ku?B=RHVgZeZj1(Zs7YC4eYBkR>%;9<(H{mXVrC= zNZ7dh<2mPtv(77pb$`9^nD1;4hG($@$~|n9x9pX~v|-HhtRK~s5IOTb`UJ?FSs^RO z;f0)HB}nlBfO$sN*fSj7TX5AW@fV294*!$|JsIxcj1s%bWQbGhI45Ss2Zct1@ zhLT2*7#gHo91&?z=@O(HhHey4DW#hMq=xS1y|cS2yRhr-{?2>ebKc{BoEhf(z4t!P z^LgrX@0Dvc)(9LxzcS5K!*_DCIaFCnNtgTLEy;Oh?`PIl$?4@9?vck~w6halcNA9Q z9bXEC$0Ry=JVeQ5Oor7cqa(Q@3xZ-_$MF=)-go*Otx|egywWyOL*iN&YxbLW?`I~0 za%^t+3PtH;F|og6O5tSU(dJmgBh=3{m5DgbUG=<1DU9W)_4zLE%jEr(BTGdaoa5wj z(oLs(?@wpfUT3DOxlp_8T-YmAI+jz6gGjV3W|=4J5+qn&u^q91=qdK2*gu9+oi!}E z8R@HzPq4x1nDB}M@ACO~%xqi|S+6Q=IEUsp&kaOx@TpGDo+jAn+a!L&aNB!`WBM{4 z&y^9gBp01_PCn%)VEDxK&pgYFT?R58XGE=#1tY%C0(kqATh}TsF6Pxvzi2_p+H^#S zrD5Tu7QZS%JExGJe-%k-3v<4qJ5`Pcd|G{4{W{eWS zn2)m+_q>$zkIOxgqIweD`e{^QSF<2I!t#u3MKQMSwR=M^iiPASC*?FGJ-Tc7c1RTt z$KL?hNm7}^`dy7n0d|7sY5%|33`~TZ1}bjN_7WyYhHLi@wNPk3V5jJhcx;z&%t3Hr zvt;3F?csr9W9wlD1zV3JS6XM~6oV9Z2q~0!Ps`vR0im;OY9C9_w6@ZKrBKwCb3T>N zHU-s^{=yiu#CxOs!F5G%qgzK0IdJ<&>-;DCV_9Q?a)Y<-I?Y`$Nw)(cB zix=2rJXvB-L;WTm7x1BIHPe9mz-?M zmF&lZsemR04%f4N*PvlCPz5y+gZ`Ntd{9#H?KAJ&Kt~GJbeo6tL$s%FF-pB?&}mll zI89LOPR#4kKz8lajL>v5|6sF-O@^|vz`}YwdqO3xid4}FV%BHHDwERc>rQM|3RWrQ zrb^<0&gXMjJgwi5od2+)1%AFUGBpF!t{#c9c&&u()*}-2e5gKq04eR}*T9_dTFCKC zf}x0bsamCJ>vUw9*0AU0H*DD8i0``htKT=05&gFvFJN`PcMvKbV?qWQ^=IF?>W@K8 zsW;A&^l$cO&|V_@HDBgB^@3VY?u9uEx8_$5aR*U>@>;%iJBou;CFjC7d;0}@6>Jq) zRL`|N`7hjt2<;LkxJESo{GHRwUYWYKS3-T_WHZ@aUX+% zk{&KQ<9EvUHzEJEMqE1L26EKZnLcf$Q$^>GlEuz2U-_uZ^*Ej3WjsP8I@b9n&C)Kh zRb5iI&FdL)HDG0$e9)_;Mz83&jQOa2IKF4Lw3lQ-L2KameeHY3_17=|%kfU zxUatLwf`{z{x6^9ih+lJv-p4M;58p%_Ae2!Jor~xBGO;G4WSIIn2BM{RZ`KnELOR&+RB?OTK94i*HBi|J6GDlb7IHEa3mui2s$Q5o1oR zc%;er?R1R)<*7s?Bb4A|uHC58V#2IkCMq6h-BGDx-*u1BM@96{8PA*u74v847B*2@ z5!3OH%hOGYL+UPxrI6k)4kkD0Ub)ZQeeC$nID`)UXRm8yUyi}AK8s6#b#J_^p?=#u za=>(}@3hTI|E9odc;RYflWS`FD(@I?l;!Bo>K7tf5!YX^un*(@`#;>SVv99i&3tnH zKR*HUUT`VFe|!DcUx}Q-qSHI0RDI&V&jdW`ad_i@T!!DrK^x%e&v86e>*&8<$geX2 z0}zwa`>*2o?J52@MCw9t+cW=*K);WJE`j5J5-QP+bF?FO4jU@{C&l_Y4saUsssBl+ zxaUp~SiYcgteSAn{ddor;mE4iR=E!0goFf*o!*fVosO*4B{xq` zPk5^OsM_RqXi3G;x&!CUYwt6g-Ih? zr1)8l`ihXL2$gASh(fw*p$=YgLgGUrI+J{TtKdlBDD3|3mTFjhzHM9Tl(q*%i{B zdXLz7XEBP1`2oCv6wrU#M2; zUwD=2w7Ej(0?PpBDE|I1O#>{tbfS(~oPYE1ifqvL2txG5oxL#EEKZ2Pr{sE!Lv2ed zusM};c6CQR`0LYMe{su(Og<@r!Ac>Sx1CHZEV7Spy?uLCAE_MEv8uGyC0aj#?v02F z0~(!cLP-3(^~sx^B>2h&_~Ascu(i+Aj!>mc=LQFy=q$1_3=RuBmXnj?w9P9lJYXBa zZ!^>Tpx?Parq6^>XNS+wZ}wD2`P#O_DQ5dkx;@ck1p^e<96ha!=Y}X)o)WnBZHa#H z$04BJ1TR`N595-YrF}asEJij&wush>+2eB`;sRr-xIp_hjb?~TkkzEsm}%T@k2zXk#%@r2JU=ol;UBEn;Ti>?(RnI{ zTED(U^A6;3fmkoQVE3y%)2?uZNN~Pwa5_6XL}@jQUutDC5fKt{YL0;7A6U>OF3?@e z>biC8>k@mrx)Lcq<;SjVW!}^3x^x&@tT!o>C%doD<(Rq0V5U7}&#VrdNwXTb5xB4J z!k#amVvDKLr4Jn5`_rW}v~Nj=RxG3(pM2NGgOnTsx*Ny3jc)ISQxRh~db-)h2>$A+ zDWl-9%>nYf#etJMCP~6Q)7H~A>b92}2aF@%?CfrBZHbJ|>NU)(z0RlE`+61+SE79N zr~JIUUHZlJ^z>EW9!*OdXA@oB_)jI&zahsS4cY6EX}v%z?pV&vJre|WQE?d~;^B(~ z0S=yzfQFU|-u$jWA{+qeOxcZ6+Pcq&lMZq5+eH4&E5?~h5W+Y92_mSCWrP<3w%PG1H{BpFtKOEzrz>i6I%BQ29E+syU_kb z=C{U0haxY08=8pbi^I3@%(cn+pAy-cKc&U)HAHzTxkatJev8~r zWfL=R*Eg-aqD~HRy<8R8BXrDUbepeRHdl_wr4ot8JZyg*FKhD#qU{|?+X39lrLSuEHjGxtK;^{*N zZ;5)x{lPjcXK|MhzT<3KrMBi+ay);c$@et>s}fHeMla)@JkE%AaIxL@K_;FDp!rUr zuMREIYi}KS=KJ7WE1n+1<-P8Bs8r}r^WO76n1L|41*zK`yeEGs9RP13;_~e?J=}9D zfvc~K{PPO&4x4jFJbIR^oG5>Sz#(#vdWs(NhCl6TrF)W_rjVj=2WS>6&;+bKnjn)0 z)^}<<-~KPx_qWH9AHkxVQB9)-_=%U$!T)`7wEi%Wr~GX;{>*P1?8F+rfp_L((0u;1 zM;-UA?C(>&a-3)gY91C&)3itNWPE?cuAZgGZz=5(;y0rBXM(}yoJo~u1`}c+Yn>V}F19xIS*e5plM(hhvhPJTgKd7BP0|rvK1jML;)``FX zXu(9AzD6B;l;*&d6LAK>VbVhRV7MVy(xi2otje0Qcw*BgOyg;E!Fj^kGYIq7Fz&2rjw$CLtvyp)7PcU&EcL@r=RCpwi7YKs) zMT6*HY0@60{BAy)7CC`@^uqUHV zB{u*I;P76MI8ff-MDq0yTI6qbVUka2ESXPfhbZx}6}*Faxj54t;-Vv6xYJ6P_=feh zvRD2&b;kMnKQQZq-WsikiO2KDs)yXc0Lii4(CNi&;dY}T;&b%ss9higU+jZLd7uFH ztjrpS9}oq@4n=9+6*G_-u-0a4D39S&)L3+5b5jWJzjQA@P~B(%LCkNLDL+M36plqw zwx_9d42TOwC<7voa_8E=U*)euZY~$;^S80K=BjU4K3Qok)Uq2kv+)*042g>b$7Xv? z@;B`f3Mr%nf=kV2AiwcwOHo{1P9@YkPGq60#dY*QEz<9jmU#_u`K?;M?tc*A*WrsC z9L9asrEmZCw|}^u08aA!OcCcl#i#=xe-CKQy&5~e!ctHFU-9VI)wu<#Laz$Y?Z2Y)f1Q%fPbm4b%KU_qKV#QVDETuS z(f)*zeW3RfO8$iMSlB1pX`IDG_`B^vF2Y^3Iu={!>KTELt!pWad@)Jt-c$R%3 z!LO_H6H0zU$-Y$lCzKp)EPE=#KckZWKcbRM7VIYBT}N9K;$#(_2i1xAgoL0kr|;YX z3|}cX>*CXq_LE7I83cUe(U;iSv7YXmv}OtDWDl2?D}1LO@6nP!ChrW2gXO#1rUgUK zn5&jMG&Hs?8+pgh`SEH;FE6!7dw5XWGrWDe)T!-o+lCk-dNpH0_;Z0# zBa42IhK!C?Ps5$QS?7~%MdPpMCKb#199MFp@Dn2KlV^w3v7G))dnJzpPp4d#sv!>n5+98W+SE`+6C*&87_j36Sp;>yBi(l z>XBo;mQDCkJ4*@GX!X^ikt~JmclhfSfaHgYbeK81+V5a$JFwY*(wA>CQLxNBu(Uf% z`+C9pXjlpl%Z>wH_5J3;OM2b{E=#dA@}j2R9vX|G9e9P29Uoce5`?!I!)^NQP<}33 z+65EwVO3pvQ4v?zz#>@o;8~Obj@DdD)XtS~m!0)C{KQ%+%R8L~=Gr{q>^Y~CgeSU{ z{uC~N-3?-m>Mwr8v;Fl~noEZx9T(o4RYFca=AS7z>p030m9*1km{Izi;Gtd@q+Fd>3}|(z&W*)zyT;s*ob{esMy<-0miF-#+Kf>9&FC`~hcF z&%ll~59%@Tkpfw9ANLAV=f$u&H$ungXHLZtfY3K>-Cw(1Y_Pd9jS4E?da$-NCQReJ zjn+^!w<-}`bv;C&e+#{bzx3OZhzNs~aL#r7Cnu$7K0M4P-e`qxM@Ty_1l|;DB%kfG z8;d|y)9jepZq3(L-_wgAWh+}7Vj3y_@=B#jUQtax=Cs{N0P53q8hi&RS?&UF612i(vz)CSSrsL+#()UMW)SPm#|e!2H#Mk>|Io zjPv`*`ZxPmpImfV|A-oNCv;xtP{}t*Gtu!8odr)n&1Kq8B_%Nb7FD@GFHYBd%EEb= zasYSMd9^sOx2_9qN3%K`j|k%(o_$zS${m`aUaEXYn4}zE{m~z_AMoKvSaefZ|G|z3 znP3sUy7hM#o!L{>z>)Q;g%*R*U9jfWUxGBK%a+qj5iQcff{tI9HI4$)MW@(B0!kDU zt&gb2R&g!0L+Zw+Er0KWAhlQLSWd5DdpK4A+P}gIdt9GhlvDBz!=y{;9i(Qo{a~O&)aA$#n@fg!(m~E+0xaD2K*a;hBhTJ za0-w9zHs3H@9CWY7NXF3dxL1Wo)eurxF( zicom{y>!+3Sd@m=TeBr&Q->br`=1*97r`#5G$EU}$FJjYN9TWJGuz!>Rb-#DY!Xy_ zSC*of;r!0dctcjQ(V?Z#V|o2LwO!oCY3I30oWTCae5vSF^*`ZZMK&M?1-%>?`P1ir zG>+fr{T_n?=#28RXRKfY7!Kcn3)sLkSJ>plrV1PxDq_}A&+6=0vV6)BK99;37R&~o zOrV~b*3;dSPfE#K%GMi9ov)F1=w$Fk2@ZR6hzUp+ds%4bZhA^Pp6PwqB8dVnlTc%` zyQ9ibV^dk>hUQ5(gg-}Q%A2a;c%83v8jErfQgvScBLCKIxlPgI_QleNgXX)L>3t5E zeN=k~{*jG#M0JIA?uQ8z=2wS^JM)ZH)__?bcLtsmaZ1#(@Eq%J~(GbS1nE#q>XTk<7gGRyoS>RRi(H$8XCiZGs_uny(KILXn zx9)n-#$PggdN#4K4}>t6H9zH6zuSH$9FhM493INS^Z{Rb~l5(ov0n> zDw%LMrcGUnYb!36HGxQJHq)f9$m}C)z8tr0q*eR9m^Qe428A|~XN+cN&cm$NycPj~ zqs08i$=WU8_Q*_1m)m!>W~HKylQ)HZUA%M{@Xx@W)KHPaN z`&#ys$X(AX#7vftWdxYc(aDY;3Ay%stXybddBA4cVFnz>XW3L*IO8;nOchw2$yuFU z?Jjp}oKIckrJ)pdE@`@`QRcV;pr=!CwO1R+PI8SZNln3y?Oyg<*6V)M(=HwH6>mcC z#v*8|YoCqTKXwn#hMgS)p6}&-{dv`tId?)T9!(mjr2q|#vV2l^T9!{yE4G#^HuHyd z*bG*v7haAud3_gd*?8N_1^3qtje=cdTnq+bFqVL+(>c3!oWB-D?VC z)4LYFd@L8rS-gz1K6- zKITE=ToB>BF|k8MCZIQIcMbh;Z4RYS?(AgR*&5mqCG6754p(Co>4}%5Op$%_4F5D= z>xZC=QFD$w2ONP(1TMO4B=_%x{KMlXX~T{g^%i^*e-5p@*7F%^!SqY=fbeoFj9TBT zmjqA#kaq4bAyonS{q`xWDtYxyeE?qM+)c~37QAS#SLOmI))8qtbd-NISbOVX7?<$^ z(PtbQ$HB#M!0mmuINgo>*dx)Fn~+!g`OWPFd->Ll^_|UG2k}Jg*8wUYU$F|3Cp@XI z?|tOj{_$eDk!jhw?lbWOuKYRQd38d_ktnB?d+4s5gtlb)j~VV_$^j|@9ZXwF$O~}% zrHPhWlfo}#!iqeqr+8Put`2)!1@useUSt-r6c3%+eF$kA!P=15Mfx7a>Bvw;g*4&_ zBM_l+>C_RS0sS|7`Qpb|U%n636-B}nTt?$sMM`-}W5m-+ML5FiBg75>vW>rdczLs! zVaax-ORp!GU0ZSu?D!uyPfFTr+H*tu#09r6@ zj2`ik)UlPXxzq|osd2Wxn;a_bHas;6)D=xSJN&fVTV8k z(Y&yx(n@P!#SWQ^HI$}H+h@5?&w5=fn_C|zhdOm6!7hBno}N!Xxw7vdYBwrY5r2;B z8tU{O2k68B$GnbUy9w{CRZ}}mv70)`sf2Z(&}$5z*p(;l2eE;`(|G#2IC9S1A-f1VKU|M=mWHmV{U(fy!pe#?VHby*v{4%OFVhrX;Q5S40Wzo@5)ryFxGhpl=PWlbF>?d@Bb;zJkJrfxX`u$pSKTU(pOvr`k=J51zE0zmt7h^3d^}OIm@8DgJ@M|@wm~_GbdS*# zqI9to5cX@ezAClNkVnGXo`>!}#Gfsm6$-ng^~mFGcb;+BQt^!vGg_&%gzb&x+Z?U& z<`dnkVW>INh%Jb!)@hJ8 zlGznj?Uh9vuZ|MU+DlIt-mDF|{NS0e&7|EOH(kU9cL}xaoiNj~`AzYrmqi1lLkg6} zx%3^jVhhV={)qed5rgXx?J5_m>^#Mb3R6 zv;B8p)p3HOfGr!|=t~y_iGCa)~19Nw{FN)&P%Z z5-oMx`96`4#3Q3CGPu%?s+He*$+TXuu`-RG&gv$4p}?=7tI&OQl$c8{3_bEbP%t`y zCWE@Ym zdI)k5`m+sn;Z>qiX^Qt4^;5@m5Z$D-ZMGyN9UHBSS&`^A9xCT_Lc*(+Qy^gJIh0%! z1roXGrgfwJhXIR_fm{FT?`snH{WCNHG)`=n-R*o2JCZF~hp4I>&~XN%_-21>3Fxu` z?CGsd2#Oj})9RXNmaw9DR%^J%M=*62;|MBXqAbW##;ZwWH#w`4NM+KV!Y^;3JZJ>W zxV3A%AL=P3NS!7mXPk?hlhH8@?`GjtM{rc9J%?UST85z*i~$};_?+UX*`+ptx9%#~ z8ltKYCed>-k6yyrvc$En*EpHz)yl$)#a@catD{X2(*uD+jwkVj?pQw| zI4IpLACW|iwhAOjHh4jOlO(0-m?8XDLW1;ZX`o=&4^5^W>@Rf?e32lM=$oJ!RTUZ_ z+UR=1?!#9ufEoE+KSFGGlt?mlg02K2xNLhxg)p1b;PW}gU*i3vd^3Itr#MD>LT+5n z#~1F{8lQI!Qr{XJ0wU5oh1L|Y6bn}(>*7BtN&5$&k5g>|ceh0Jdi0IiByi38&~;%C)|vdzg61eA+Jfuk{b{G7h<7T$Qtu+dG1%u|ndTZ0qkqQqbUVPZPd zJ^8EJ2F{{k4|G)<&8j2B+~6jyw(dmg_G5M9%ecOj*7#MgFhymt4kn&FF%76H(-pGY zU?@MHP3^hHt+1rRXg6D0Mc zygCUVit}n211`ILMb^`ktNt|!^9;YFE?e)ck0mJad)8kczH25Ys-0#CS*mI%+9<7R zhKe%-`b39d@?cC=TP=-C35^8$CR)s= zp!*69A}^zGlp^Z7#4G{`Usgs1Ejrw~=o2{xzT#}FN!k<_9R^z~8>2cFMjH&zN_c02 z$_6(I{hD?RL}#h;DGFs=k0j}wAo*TotQ50fZnndFz%d%=fpVAZvGoGNx6tWC6-G&*G(1%H+cirkh_H`cr9@ZVmSSuV@ zmW0Eg8;;S^_^0>raT0GqX{6sh=0docSoQ#8YP=;QZQ><009xCt1CEP69^S3wiDtbZ zV;|kT+EdjK5FjemU@%e_5U&{!DnR;J_L96$G&G6e)aAFzx%yggAvxPg0N_&ALO#-1 zw~!wZ+=wI-kf4|j%7xwMsYr4SZ&XQ?iFwSHCO|SNtIygw*_x#7L&=>7IuNyuJi~aV z6Sr9fLhF`g*4ULnFa#3;K?zgv^#Y$uNKIYxi>0&)C8P_joT?xpl*MJ!KkSXiIoXLq zJ|E}%G*40h)3=!EEu`jg1de?Q^e>hT9`~F>TDPusXJ`nUisRvUxbt4%qd9$nic0=i zf>_v>k3p-j!wtn0v*~KZC3dT6`TYxKQ8RkmN83$bqZwkt26t&v9aJktkXy;`6`PK3 zWVDx!F0?6X*cIzEZ=|5p=~W>9q$7892<|QSp0h#Rjj|g(RXmxTvbDirmb|GJW8Sxk zH0)T>)e$@ia#T7^B#vRfXZ_99)gTS$iB;E7AEbPuOr_dIP^7_we6DUfdCHim(HmLC zzE2})JHX`&^;SXQN59`Ja-f^|8nAj4xIPkvJ}lkc*`ywovt`#Wff1Q(tl6~{~h&#!BOiq^usvp!0P#n%6 zHZ?fhBaGWL5}*811xOPN;pN_W(_J~W)iUrCK6n=JUQ8{4=5`DpVwB|m=iT;#)^@we zq=ZnhWT*@fGh5est3pD}4TwP7v!vQ2QW&a1zfu;`c%>iY$+qH}AgUl%CWShbg7ypb zhF3do@`^0v0cmRrfY#>$RmPs`ga}Ue_?Bq)IZQ;z9%Y*@KQ|cVvePB*2aCURb9G~q z9Yvdf{T$>PD|2R<+jG@~&Jhnw09M%-YjtHm2z1UcOK7*|(V zO?wsLAfrNWwGkv~=5+IWkus0cy}#OV7mhWhWQyk_T4^Gf&!Sq;e5iB7p*c6%H8zx| z*k*PH1@Gf1@^ja{%h{AZXW^cTqp=wrr$ zH?Y@k9+0`a3Iny}m9zMPh$cL>9grUOEZ1*CQ?i1AkHZeR#H zbXTSm>=;=RG?T>SyQS$0L94M&T#lj~TMHFE2weB{@aHB{YuUtGs5E`7syU^HY>+G+ z+pY&eb|SagLb8kp%K9jmMq>QCpOG@lQYlPFLvt{74wse?CPT#Q=hx)@VGYnyCMReuP$oLtcGKc6xooP z$qlkADJtWH@cv%uvL}%1lxwmK4N4E9;1=Fqg1JN*w#NRLQy8GaIqI-DtsDFBs%;mcxS{%s5 z3F#c&27y5Z5Pu81i-`jhE6g8c3{I3N0bPvpezQcP=Z_3PM!R5r8%coaI8yU~p03wx zF7wG?F#bS~^KE2_&9a!{LW3>{OszrI(S=Fy?sTT9nGzaL*rLqTGyS@^ zNR(vP?gCG54+?&5wV3+RrU_~hA}Yn{dL-=${GnXneIhv@iHzu%RZ7q?0|EFGysF0` zwn=xU11OrFpTE7um&hm|!(t4--Bw6ibBy8)hrJ-l5jk>sL%K9tJx~K%2-PPLwY;zF zR&M65$D^NuI`T-L)jd@weK# z=0#?=2@pfMrHK1VJG*vGLF~+z==Hm+3cCFrrwR#4hT2L6t*4aGpJF|BKanF19HGLK zWhFZs=6)*Ok)+!6xx+8Fl^#zs=WaJ7Bd}mHO5UWk#rIq$pE{u2r6U3&&m+yY zxclMct3&xiBvK)I0`#n7flW77s|HlQ2M129H<5VTgJpCQM$opoo;tim5)NCt;p0C6 z!6Bt+%Oa_JW^@rRo`%{_%m&VZSEUkg6?&Di{*6fMOGWjGX(!Y#0odWtnB)-Huw18< zrOfzceMwa${G~^wZhf$p)5g;LiZFy1Q)k>=H!a_OrR&c@)d^$Z>~#%p3zAE7A*R1$ z<^WkE>228}iMuso&%hH;rT`IZfm+m9reS-TJ!N@CtGBiRO5jDWiqtpm>8QktnZbAD zaAi8=V{R6XJ1Q3kXytgP6C-Fn@F_=QM3FH}R})3j8Z(+R8M04x)2*9qDREo367y1;(=A8ee54>J=;Y4w{u5@({#VLS%i1fD$ZcB}*!}i9+tX zH)lV}46)PD8&StqHYbgKG0oYb8ra&OVihAZ`3Q2%F@ot_%Gfc;8F#DKmfw8CdjTpE z!pN{IgosCNMyXC!bXpA>Smuzc#1XJHYB@7S<1D+y(T2M73$=--6sPMqF8@No%TZr< zXrIB;Is+(}51YsRC-)$M_`}WpeDp8T*j^lZjZ0i*w5`Mh3}m3lA9jdT)&a!Wg6GI{ zDKPEZoA~C?a}(qnYC0e9uh~MNBy*W4z!M37T?mtm00}`paOO?!woo*L)hj@PZxqyL z9Jc`VU`hKGvm%>8J~#x$w$re;zl{her2kMc`YQ$*h#B5_C;euL|nUX>SvRl!RN8h=AoDX`DJPii%YumEz)be=a;817KoojHjQUYPt zrkPyJ#FNO&V3f+$h$-|{`$4r*NV#$2(7X&BV?<5%(zAs(vE&eOq>*j$^nGUHS&wpw zFGww|Gryobe9x*E7`k&K43^sNwRO3OQI6HJPmjCT%pFIP*kG-GoX3`GpE-~40WBz; zdCsBr&(vU$hz!@mo`g&`EQ(@_L;~h7i*+4o&J-L^)CN4ygHnf8DL5ydNA1dV&zPU$ z*~splN0O+s$oov^;(v+sO(?%^*xg%Vm$NISbro_Y%5mW)V5JPdhB8l)T+xfP_`pd0 zI2i6DUnyCp$ z`bsqtCR!34ZpfoD35B6QV>Dk?r9eMkGvvb`J=uhWQWLA2if(Ev(_QAgnLICB z*&Q7tPbZEzffOR?Z7V9pl!!>+6>?847e?Mw`?gS#Ec6xIn11fYFk1xIl*=6LT<%D8 zyazfJh;3vc>n~X;kajk0QMVy7cVaF`(M(ikX=_cgth-xj0^wVxdb7!sGfGq_ zb;8L6I)KBM7pc)EMD@7c-HwSoofX$&a@Mnv(Q(G?qp?I({?O3^-6bjkg8dP~(=#Ie zfe*glf_Na@f6F<|#&I9JTjcjzcyZ$<$4Ik!L$@ANZnff_Jj`p@miz^E2Kmq#6lSUO z!axO4T2)I7Qq}q)-u0!JE%X! z5=dStH8YH&CL%aD>2m!TD`R4EZH7|TnWXp94Zall-IS!>E%9>$m|iC-v%->u2&Y*x zmfW--=42W!sgSpyxyWZHn*|<9aXvdztJo|Va}BX1w6mt2qETMvN5_#~JJVOZU9gZW zm-HM5`)svKs5l4<*nsc9O>rOELzH?Nu_VhAhAXpnm&Oy!mm`yn$pg zrvge6!kur_bsu_}NvSJZ^pFN63Yj7jJsRh9;@$;&BQxQvz8b4OjV?8(^x~9=Q4Uh5 zYHC6IwF1yWL-(JG@N173^M&pjG(6@;+-!^Q0YFG%T!`9?)2e>roB>)$T(B9#zF3rX z53M&P>)X@R8Po}L`4n1;8S2xO^?)1a_6Dz639yU&A5$DRA@(wihvoYBi$ z8|VxN9wFQUrn>b;{#hkVqp-WJUh6-();+czI`d^LAe9?EZeOj&$vh6M!aruouqM?I}TwUsFB9uRx=(>XupG` zPCg|qdJZ!4xtruIOk^pyMd~)^T%uVt1u5w*xsP8e+zts6g?7h}%0SqGHw|N%ircP6 z2|}ny`;U3BR*T9&@Tz0zA?MpHl6V={UUZY4BCoH%ojjk!o(mddE2{%84%$(nCrESU ziDWC~jRWXPuV#2Ol3r1tTuXwm4VNnLDHLqWx``vM!9Y5&!*4y630lXU;!mL^6BNmx z?z%}qjAM;4G$Wi3lWi$MB;J9ZRnP6cDFjKYFtj69)BciE>KCBVM|?8jNIWj2C6j(K z=SkMiVo*sj>`4E$lQI{&Zj;kF3 zjj{fT*vZP`-Ae*3pf7zp1;I%kHN%fcu%eMLp-6~4+bFPjhnoP0H=}5hNrMJn+u+T6 zc+A(PG-0`ygjYRn)~rBnHCp)wslOkd1wBXzW04X|RIhbm2pxC&X4|OpB>`UNEn7m1 zNoSdsw5p1G$MyYejHdSYBY4$8wC7v?_72g0JUA#ttP{nC4kfZnyD=h8xld#KWb+qL z1&JUj>IOZx(#@G-YLltn!W_Z5ibK}*?6qs+fIjmDRSpViy;U)JgSK$$sn#S|vSfIr zGu&M+T2{1Vv?0u4P0H9S$rz4?FNlyjUEm_S=96?X8!vOF^`3WN>MU@dFt#zjeCeB+3 zj=av3M%0n9C=J$jEPEMEd#x%P5I|!XT@#SeuV6^wZ- zdp0>8+5Jm(SWS}uNK!&%D9fFADBV}Tn4xl7WDy}JHRQFl(E5m6wH2x&XNDN@fOMzcd(-~? z^YcO%A-73izbdW@$}$4#yu97kP0;vq6_Yo)?xL}3A{HK$(!`uvwU#Q~-6y~;7taM>JH+n($PUQH7{rsbU5YL>F(k}hXfeZG`r z&BPMD5sT0E?j@;*RiuF^8$(J-^tc1!{LZ(rO@Piwd1|QjD8K-F@0umRN^@|J zq5$pE`FC+#<*llihy{IXIs{5?sAkZ>M3ty;8^Y1%oMfd?YQHSkLrrQT&mdcb~UAD7%(^l?r93dc3ks?qLU{S z+&aTdiWuXcwALBMZQf{#g1S%M{$|Z4akm0bQ%!$`2YY+ihW2+qk;3AKWH{>IO+_T|@AaX3NXma=QiLAw4Ir zeP6(>AT<~!k^ZtK%eaS&Fn}@qWZF6>b4}1T4S5lH;{tfF0HD;J;GGh6GLmR_kcbK!$$vN@ zYf3I(JO#)frif!F8*|suh1aw`f&55!JQ!-;7$rQ=kUYSutHTRh(C6 z1tuOlx&o@QN}wu)5ng_g6`DHtm+;V20}iu-Fw0SJ+A|3M)E9}&`%CPIFN3F~;mBRM z6RZh%m_dS|kA*Se$G&!%G~spj!kyaEOIz^Sa31s5`FT>20=yGu%GFImo2ec%i=d7) zZeT00FSns3@&l5$&F%chS75u{a0ArF9?%sLsIUV?aGJ}k&V^|Kuntzx%f6IAafilk zJB~@vc6f1Cct%aY5>TaiwtKZB20FHkZweY8anY@^oibwYye_s-+Jp zi_)c95r(%(bGivq5hb7IMgpZ*nn&IQsl!2Zv?dxd253w(k|7t%)?P=sRJdaG*8^t! zb?O)MW}l~+qv^ZAfxYhmQ&N=q?(4_g6Ul{0o%heXY?{6C_5~CcML;Iu&WI42{qp)6 za_(^|zu7ENib(G0C(w7e2U>xtW~izxYI@kJ3Q(El*@1y-yY5gfWB4H)f?Tlvx|4Q1 zN{uIE#+5|}0JCN^)svlapKb7vKyWRnpDFsV|HJmluR{u9jehb8RPJmSzkt|qdkzr( z(>xdmCG;%@%AB|yR*cXs34RUXye+k`QhO`YFMwO0cN#FHLnJHa4-B8{pqO%O%m?;; z)tSElY)lgYcXp^{LB@GBSKK=}Cf z?{z-dfLr7z87a_(VIKiRxFcbPp?QK9O4^-}%exdlVs8N32`Lr9*9F4Bz=&1AG0X$K zmm#|3S#!&eFZX@ZLREtLf}NV#(8#GiD6HfGcnYosYt zMOWNSVrIF-=5oFZpo|Dg?8PA3GzPJp^9<-%_JbZW9K@J;paiv@GK|tWaG7*4p5@M? zkxK`Dd$7Bypt~>!nylS`3~4mh7-2mcqNfZB;%Pvsag3=!M<@@&*#LT+3K|LufVu-1 zfg_@ngcl^fE%2V@rzHk`VO{Jq9(z7J=>PuNXRkp|QAh3IaUUd&zxnJQhRx!o$;1ycRz8pP2C!p1NUIfeji8pa8?a+H1Kj4Jvw< z4qS~t%rd(e2xrO}LH;A4;l1|Fo`Cay5aqm)gyBP3&-8}GOq>Q4O)x0_Vo*&_1Pz)bwjnCh#1<(!=6X1(ODAO-nUj4%$_o2d|CUgrZDcBJt zK*?nkj87vZFe%eoU^iHS1(;?LYG5Z9#?dm%M7!=90lrC|ZUe>UN{{I@&?%{vwNOsO z?m%fF1HjP85wKgJsyEPGFC-n@noP-<0(hOp2#a4^2L+G&(!$%hoJO6OYMX>Vy76ND zKuY({0%;nm@-qG4|8Q?;0wZ4mZ|eq|2K@2jMBR^oTVgmca!Ui!jL(yTkl+9W0(pA* zGN2#(3T=#&JOwjD0*}~>VJ3zN*k$jQ0chaTZ>Hr34YX;n6YXQb9MoJY_)?`Y2^`-P z)OT!#DLCOHo$F(DULWH2E#e=R*uo3wL9fM|kPAN;JdU^~sGPSKTIx}<-+v6a08Q>s zf30lYd_s98-*mu)P-rc>6ku#SAQ7Ycit|aC>LcwwU4K7pA`w~@Op9M3$i4Ch7U^Go zm;mthF>xq{1sOkD2il<$#y;NMb&T|!uzs5XCoWJ2FzhcW#MCksN^Iw;==JkV`uNbD zS+PFUg5AKI>0vYilVau>cCZm<3jv9NERh?-^A1IIP~lWR{=s;8t^g>ars(jzdu9({ zA7B>#IS^2sM_RA^F8?bRO0Cce=>F1T44*W;WZ@R&6@CAgY-)VhMYl1w0MxV?)D%D^ z)nWx~Qn?30uW8W9&)?o$?V&U+(E@``5L~D`OFdfe=@Z90`RMYgeGY#wKDzZX0Cnb8 zw;KHc*G|NmxU3zT#16zYH%1oeX18EVc$)K{`QW!4Tw~ zJ{!ScgNRG~_JH%IvFV&@rluQ4lfW)YEMX16I4EV5+XUUi_uyyRAf3ruUmWYfP{ct+ z7G;E?!Iv znXd6(j&2v&Z(;-@Xi0cq>pTu2^^^iMhs)se+opF<4iLZ}#M5;P)PC}csPK;L3)TK0 za5q(^OovqyLJKDEQ@8zLk}ttVgLouRWD@<>VUkG!u>LSy&Dl`Lz#Phs|hbRNG> zrIk^(k?bLg*^knaAiX*`3OwTT8jC%=ek5W{2{2cL0q=`bz$|$hbj7nlK-N&3>N;j# zdphX0B4Nu9yacTZhN9aZ=Hxsjx5?5g zscnI7YvAWpK=p6>(J{76&_QVn|T1@t~9+22^5 zHO2HoqZ9#UtJ)9#-rERd&lZ5QWDP*rVe<`z&}`ut^}sC11CbY^96y7M*AT;rCmO@l zN~g%}w?LVB)F%|`3`$QO(35ON!2RTaCPUZO`eI;BJdpuNc1pB3$UUetE{%gO(TtWP z=Mxj)ZhCkw7EfJv0A~X@ZgrDL$t&f^CCOTYjWKIYBx0upY%@J%K=7b{v3x5#0`%0n zrjpsI{uU9zl06j#T7h@tAZGF(-OoK1A_5B#pY*!>zVkY{+AaxU@*p@JntFQim5Rx{ z^~Vn{nR~Q6PQSYUuqWSiRVJ~Uj}&hjs3<19dqPMvBN^5W@{H%((F^0hac9w2nwkG(of<0>zV9T0hNcr|kn6Ua7%nWk`!LmdHEp8E@gPRV93p(Vb z-OH&F$M9)y9~Z(W6ag&1tk`@TYjk^q{mRsYn=IFlrp*I(japD!1bJiqAQALG1Ob~Y z=5#?*Vj4K1W%>^Qw)+7UT^FP>lA)kjpfQ#93NVN+L0EtV-)#(LuLiA60u_)6K2swp zG8!l=#cVjo-1nC#+H6Jy+hne@1Auvf|JBMmpzD_iE`c(^{D9y}r?#^Zf=v&^qJTrZ zFsGZD6azzjdVS3+-j0-%uWgNV#}P1A?^L$cwSS^2zzaU{BZI#SL@QO2Tz~WjrXem# zOEu!nwE~Kl?Ie%300CMX^zUz2+GElZj0$foO#~VVbHe)_7aRI3>^?9ioI7R)x@a9? zT)==w{5;RsouX15gMEw-ji?Q=)26_qE~K&5{Q98ED#f6EwyDwlM@j*v8vu3Ce_ zOpQPt@Sh*R{2pKuZLnj%9>8Zf+$*8`;#gDEtlOuLY{m7!L=3K|q;_fg;J^YJURi z*2GyP)C9|+49dXbqciWCvUtJcd2rd#1U03zNR=;HA;?X?MWyS`u$Pw(wj$gCFnb_o zjCl-L&0-?cC~(H6Mk1`1To5M)+pKKPycr~`0%mS83GkUOg`AA~GU$1D>C4B-Pt8cq z1+7Y?_w``)`P99N$^%HI2v}$*D4I-Q!KW%|_l(LQmB?v4d|^L56Mnb%rer!QJz5>? zt^`f)%#8bRO8fist_8+u>AyIzDzNJSfACE`Z%~srDLZY8U0rerV8ET8ok*|rj%38mkdKKBdg*EZVnb>>-HIW%|V!5y0 zUrOTYHcIrv{bl!A--9BN-kLdV&u?O>Z=SoS4w8m2CDZZ(G0YUg+ETy}Lbrq6vOumr zgc(TcISJSA7*{AH_m?|sLBn~O?Cd$82HP?y5LSH)I}%gLN0Iw{6yZjQe$Xtqu1RKy zZkv-0=DY^6CKpi4q(i>p{4Z_CuOd_tqF}bER3o&T%jpf^^vUMaoN}%}il2M?k8V6i zx2X`Qj9$(+%!4(7$+-9WEqVY1 z_{?mYp`1~wA&8$Pc;kaP5V;HH25YpzU*xJwO8<;w^y$g;+^eqp&V1XILn0n(RwoPh z&%0g};C&S-G$U;G#&5w2r&PSF9H8t$62vy;vm;|5mC@(WU!p=l0syWfWA*hzzwF!} z_x0(sc$DeL)n2HEy~WK}k`lvqRtTi6PLmmh*XKUJVKc?Bl#?D7));@6G>yc+&IW+t z@7z;rjH<-gK#lm0!Eub4PSi0ENiF+yG_fjd%5)>d+$9D`fuyeRDIZWCO(d$(%tBC? zTM9)ul7;It<>GI|S{35wT;NjPs{9ItuhaWH0C^BGak4N=J{7h&*Q&p)tQoF^jjA#9 z9usM%Ts+Fpk)V>z8iw}tu`}tOL0WfF==Rx`=bdvY^%wB0a4-@SG3mP zWM@YGY)iXR8s-B~pp)sWn`STmwTD+${Y&lD`m?UDM{mBZz7)#etN-GzSOp|s0 zzlwCSlpi$0^FLMjuFrsRgcO-QsFGW^Hs&u|4M5R1qOu}q83~-;OGGi_(jTLQ?JfZ} z1)`&GI4)#%%a|slq}iQ-o|Us~n*&D`g$N-VOd&Orpb=4?AaA3(B5MdJXz5{3qX1pEXGlD$mL94L zEu$~-d%6)xacLJ=V33h>P{vh^0;A@0K^iEcQ-{@-L%)P6D+s+II>y)b zumnf2(~13y5x$r8y16zeJTEwz`M3`~U>Z=a33?13rV)h<(q(ST9GbB*z(ivpkSA1BZn&eSkMg zuP9r30J@Oni&E}oSI?ZP%!L9o@wETr&41r&BF`|fJy2~kQjf#cHl6wMOAg@1j>;)o zD1WE}Lm%G)#4v)_$fsG7p{HF0VOlwAD3`1EeuC!Kb!ZoCt;2$MOGmDeI~t!cmt!?y z#d}At=wu3vw9+>PdZmt-;BJWe%?NYDVjcWm=CiFKGNglOw!mfG-U$wcs4;yp8=hmU z40V`i*P3#k`4!MHrHQMJ67H2MKJl**@cM{EDF4BvyM_LG{r!%UTnODS9l{`QIcrnh z{=Gow?oD1i&Nt`x3DW6;ROMvH`4z|oXY^?kFxLN&y;n34Sm*5fVPXGa*_oUOICWpN z-zeX-w|eErTDu77VkpD<$J_ngG-i>X+!pvNP!e-UyYu@^~H9@A7zTxgt zghc9TRBDy=NH0vf4QT$tE|8{|xCrDps4Z830DoxNG>Bbw3N!(EL{#i|4hdNkdww8d z;W&mBxQzSOx95^!2`pMgB^6VH!_7_QGwaZVAJ%{IuGHyvo6{^@(GHVKm3^K}$z{%; zVU3mrZk85aG;VWZ*mN=liPjQiFFo>tA74AopOtX<1$Y;dg?-xeBD&#sK##P#0i*;B zdz2}Xw$`B$=xA~INH5UQ50g`mFBGQ5q=-prkCARY&9Dr^x+}S2~d?*_nHMn1KK0_)JVM{N5 z$hT0p`q&P{8YIaCCVk-`vf|Rr_ihI8^O4gwYa~pk0R;jlko9r_U_P4gjH2!@fZO5r z_)66@^v@A$R-XW^g$*b*lwNkh;h%ynKBuN6D|b59vp?#9QHUFC4@fF`?DD?Omk zQP5$y+{? zQQdpu@W8x_5ui3;ru*&T2V$u)BG%{9DdLgIHA5S<+xUEu&u{6ouII7`y!zZnJ3#C^ z3$65#-sQ|PY|i&^Sf)mmi-sV%%>h*HTe)8T5}eHV=>0lfgh9)Lpx?gIM+>3A=ni0( z7LjZER@elfaJ!E;q;emC)ZH7tTBCNGjYV5t-_ew)Ekwt?OthwSZ-AIN#}xmyeLGWa zu~7}F)ldltMGiPxWi0Q43*vG9_3n55%KI3_J}kUw{)cjDqkNa7LNM;nQTXSC!TJOeuakA+H@rJ^g&zz{UMv{EOT*M2V=H$sFncD z%aXg6?iX1Pb}O5%h`bGQu*T*sxa1nqqwE8q)(pH#9osLNr$(~1vBB65;gfuMN z{5*Rgi@R8fE$Br!z5MD>r)1oj`^<}fhH_v9Fx`)`l~DkZXhTLiK^As8G;d(@Hy6ujvGf18zyxq7;`8~P(; zWr@^7I;D>Jd!<2bXKGb4=Tm5jjpDZk@2UQD$SRf~lsMfRK`s`xUZhwBFN&)m+Q^1t z`fOC-tHa^j5X*+R!c*~Y8ZRPjt-;Wd_*-m#T1Y|{aNZt42qBEF^mnvSaoL8CXVW9> z#o9Nxnlzwq)XzGMHc)9Bf`-@>#4v$UpN|M;p_p;b93`6Oq13#Npkq)Vadpp^hi5Gg zGozD0fLo5xbNX#Sbd$9eu2yu@knAv4QcM42Eccn!LV-tyz}f+av*hmktkI#iTKQFz z#0&@yh`_mBWoKqe+UkP2=oa(2_&p<^-$@>h@4D6~({&XQ*V=d3)i+5tfx4lnFuWBM zo>KJ@f?00NGHMxQ8QP`dYtYe{26Tc?cLws=m7dP^3V;E(wPge5e?|iW+7R?3kE71{ z*Z2D4OJus`0m&_+o?4(j?DE`W6~Qa!LQ*#H zO|xUQsk0Ye+D~6^2;~Jt%3l-Gv<#Rq%vPPeYkb^#=sOqSz7z{l&j&EB=uEyGlc;tD z-`odK5rleKXg6_)D1-gkH@6}l*7teM&=WKOcTe<#*ax^&M5jv-qUbKS&-YnN?%M#q z#qiky{QNd}AXP4M!cZ$U9xx_Fr0+vg9_a)&6U4ZBj^oFjKtC#%74!tj7ss;%iAwPG z@5N$95apmYWD+<%3$8ZMa_odGP`Q5LB5Tx8jp}>lEGi_CMY^M}yop`hN~7~2%pjed zqO8QGMaTxqXAHV=qOKRa2Uv4drhEpu-z7X`@Du>a*~6; z>-<1sc3S2P^dEw*iV*FeEH!{gwjy}t!)+$ApHFZF)LA*?zuOqQJj`(sixju)H2^r~ z$mI2H8c|nzw_2nJ`YDTU4jhSCtr9qsws1utp-R*Kx<`qo{o2jIBu`c}F#_%93^@~J zr>rV5Kd#L-L9?pVYI%_3AECUdc=H^IISBs`tZg=g@r%ArWjf!&LPct=XV;<15PRhz zMgXNW?jRu_4LR<744Zk}{E7Eb-1=hMVUKy8S8kG}o^YOr7}<*?KGT|&gOsjUh(kw0 zpX^eIA0y%u6*nqn!)rh;g&_eP(PbH@EvJOxYn@oNxuVmQ#wsWDan4&hW~E>nK!&n5 z`38{366Q5XnDYTUb&QC^jUig$_^=H5o(6QzMN^94J|(+|WzK;dm!Vzdrt*yF;v1YN zjZZ2iAUIgN9e#mmLhAA3^RM`_CXpv=r7RBbMK7yx*g5Je04gQfQ*f*%Gd z8-bCyR?;4>o36oYh3%wfJaGuSouMZCh%2X9yD=JZLLg7oyGv!>;pB%P$I@6~AKVPs ztSN9tB5Sd^xV-=*n1oG$J^_46EEzy zA_g5q{5Lss**5_uZf5c1=o&wCdAFtRLxmw@xk>7ldXAiw3v|$!OtP?RkH$(vBUvs- zPg$Iu(L8m|Me_|@+|H#Fq5+x1zzm@2a;a+i`4VLs01G5df?xjnm%{TDj>~`+qe181 zltr9L=!Bl>=sbeAe?<__r+NL2R(Y|=xQgcC5f!JZ zeC1xoh3f02Azk^(1Xr>?I$Ek{ zt7T2*JaI#lB#o2k%&-FXHjT-7+}Tbm=0hvgk)6uzqG+I|FSmcXo{y4T?T(s0CT?z$ z_y}SYmO3dt_|!Kup^qO0-O4CR+YTqD4CzN#g00`J(`GpQT7=!xhDzdtvB;0W&Ch`d z{;#!nh4}V{5u%?VYfp>g&e1)g&cyTf`tev61(dZtU@bK?hCG zc}7ZJn1|G0ncU|U36ZRi^dTaT6BTjprg;U~8lI7rMSxU|aTy9XgZb=89G$lnlmf#F zXkB7~d>1y2gy75hwm!Sbh-A$5Q8ruJ%^WrM;YPj7Q_X6VVc%#J-I7e5Y6_*?^w5Rg zOG8X~!T_#fPq+IO;C?64kP;j32`)(OlhRNQKGpN5tX9^@fp#QAsLCD1M~{SqUp+yu zOtr*GKVZV>JrrM`;!l*FV?I>RxF~J$}OQ7pp2uE{{Snh><@b9d_m<&J6nj6 z3|b$d?JDSY0};BP=*TIy9e-!bo%<>VO|8nK0wO6%md}SH6}!%vqR*1N%5mHb_SfQD zJWjTTdq1z|YyycZbgLL}J4zOpW*fW?)|$;)>0%*1qCd-G+2D-!R()m1$Di z#{7MDTvilx+Sgpeo{QN=!pm#xa_<`)6BdD%T-iBLriuDiV(iw)Eu&3 zQt?DeNG-AdupfT8l?D{|n=g)7)A7!P7*{nu;7P`%JbM1|LadJzGt&QeOA${i@B^c# z;8>K3;X!;(Djxz|PRR;MX4!mW;Hkgeor)$Qeic23CsgG@7$yDbV7_XqrhLYAVOPjp zO2*Tn9n!~guo%CRvRe$825jN=Id#jegyPyWgyLo$pM*}rv){Zxq{89yjBDbSf}By; zoB;7w{Q7G%~u*dmqdPKem>raEhaM*U(8SH*bQY2m*jR@F-_#qZd?olt{v! zXs_6v&te0sms#>yfzs%)l7#dAOS~y|T9tLsJYIKrEV`u8f7vpUD1a0So81qQ+_OAd ze4#~pO9roJ!GwTlQWsp>`qWb84dq<+doHPu@essfA6?1Pe_|-+((U04Nkkwf88-+z zf;mX}0Ey@{7#YnCm<|P}+&)e40x0-S0KIJxA2g=iQ237Yw`_>5e@D)9rlaZCrj z-EIf;yUQgm%9EEOT(cI*yPX-@8mkn3xe~~MmubxPbEf+9MS--2Zk{0ApfhZObgFxx z@@^@!+_Wwc`Pkh}&3t?hIq$2`0A@hSe?c`&A)9Ti`-4||h=fms#^3Z4@Ft@aR#ZHv zohN}7k!-qo;;cMcI5WHfJf&U9G7~#es2Yr*+CqpIRy@jQA{e%8S29pN-IDyr*AkCVGVz?=Z> zsE3>7l_GF|8IdWo6F7ntGI1iBrVr#p%Le0l*V?AQVt?MRbTSd2H1g@0& zw|q#@^_`U%-h>|XiW3$7H9K9~P0;*_kR=0+-oF$24_1~PA?Ht|&}F!2*MyzA_H?gM zM-Fx|$%5_%RhI)bx8C*JA8z?_X=GPGn{aB7v~Tp-3$asHnko1BHTFKCP69Zvtf0df zEA;#qqKt$T2P=Qs694e>>G3?$No~G>L(JWSP%dWslKbqVxe9mrV+RaT`iYIy zU{-J0cf_100lcf)2bcLnj@s00U#;r)7pcK~`A^wS#WP`P`KfZ+`}0%T5YXO>Gg*>GXA?;gWs*K}2)WA&Tn8%{2`fcXkYWiQ8oyP?~H&7 zIPfS#xS#+eJ!_l5p|L>lAOE8{sygK%$<@biTM~VmaFNf(9MEOlUTt=pLYSkp(maCR z%2aEr*#I)VcuQMtr+|uNm!r*lSnXo;^&2++_sY^b3*l5cO@|5n68wJ&0Tpqa0YQdM zXv@#`=(z>SOauQWL12Kw0 z=gMx=Y_{0BSH#>JkdOtsf^o$;0skA_Id6bIW{yyG_woo@_6+$e^PH;;hK7pMiSv?8 z(05Cwkx-pAgk#u8v;?i4mvFN@Y1HP$$)!M^SmFh47}e)}w1*aT%CC3xS-_Qx^bqVp zse9)hch7v09(OxI26?3CL&*WIjpKyqR5|W3>dT6knZ7j=1%SNmvv*fVe9Eq*vU?I4 zPg=uc7vB)Cecp|_1Nwb61(#3mdW_)C z_fyhR>)}h~2hmg=2ZgH7cKMF1gA-#ne1TyxA`Xkj6wOmwMH-`lsny+(z`g`@?Xw>7 zcwf=f&j(VX3F$58W^w24+*@W^CIU`Pm3TImtaYNQU@q_8FiZYGRVX?{2vUL!P+RuV zSJ{sdoyc1Nl1DcX@65Qg@-B4x*o-wjcyiQT0*$LlHG){N3Yw)JSGEi%@=9stE1mU` zVnWh-w+ivg(IN=10KpfZ_LM6{oNu|5WO^cBJ~fW>!$?pkk>b%{u%e^{CuIdiCY$z@ zD`M37n&Yci8jauzS=^Iu^jN5xGPq^+R1H*Mj^rxh@GlRjN-To1*al3P)Q+L7^_-^j z8A#cnrg~5_zIjjTsN~V)k>p$1--4NOnS`nLX%wG}kcXZ$Wq=Bkaz-%pN$s#%7LJ?F zU`@Z7FBf;Al(B0vP5>njmgKE&SzP>dLU-M|kfNmE&fHb29-xw7{hffswDqC~u^0x! zX`*TK$2V6Kqw1f3orLh|;>J@7dBtt@J$#jffs% z>$dleyOwadvmEudM#X^M=2icoxp*V*li;^Evz2D}-)VC=HYYA$M2|h**TYVL^-(R2 zd50Ouss=qnU}8S?t7G{ z`#C-TSI_H*b6o)EI?}}@?C{R#x>y;yRJ##EF`3$lV@TPa1~A%}*B8t>(fDn?I_E)a z+Gs*l>7^|paV8J%6^SDfNZnRK$miqiNNBilY4+DbrYAPLjevS7h7b<>j&%boBZWl1 zGISgK3#}%VB$Og>InhpF(XIcY4NOO~5Zk=I%+#*qQ5?}-M;~30S907W6DZA0wUlM1 z^frB!WdlI%QZS#lYFqEgq5)hojT1wfU`20isf&~!*-hZhn{oF30fruPIAA&M{yLPW zrXkIUa#`wTIN0h&D4xjLJcD!wR`B`wU#I5!R@npNDW{MV({UD&a;;9jf)sip>pt`y z<}aRz1@j$7$2-dUJhAc_zTBk?Pg8k?dqT#&?mG79Z)awJM)yINKVX!-pl~V0(XKq3 zZ#2)AG31KkyDfGltPFfq+CuyBCNx3-*jUX#B(S-m(yZUq6suldLOrtttVz|bbRLW%TF=){>e zXb5`KP~xf{eg299AxrONr-}ztO1ZG7>5t?LNl};BDzZT~A^r$fKrW+29vr39omanZ zjRGEj!R`Zih6Fqs zNN?3~Z&=ksa3@k>Cr|0(bt!h23aGRgfeUHV40u`d+%zrJL~@{r0x|crp#qBe+@6i2 zcO5^Gr}m^QzDVv0K}>`YMs$d_K6@17_fd;WMjavSW2KcawdISxV?a+x>gxbvRg(OlwLT_#9x67H!Gu5D^qD-+K2z?+09uAFn~Bf zIdy?s=V_0Dal*~Vui{fJiSAFh+}E=)A}M4MaUeym(V-&%N#AB>^lQ7;!H%NT zbF!r%J=8ON0|qbetHOw6CS><7IH~|eefuL~CmE%j#q4OQXpyTI)2`?OvM=Cww{2*k z<@f0sQKhH^CP{fZ>OTCiAdJ9HY1)OEXD1h|qHEnC+P z9NTmPCAPQHqSXUn2CRfq5j56fxJ6q+L>H#I+uE(Uq+RAD^SJg~p^_$ukHbd|27lTk z>wOW$h<|L+n+PFU%~0UcbR5Den#E_ef?6R%(ApI&k$Cf+(H~Pfw7b?Ib(B444gLp3 z#np$mJh29%@cP?}fSjjRUPe^HenJ>H3@H}J=oLG)4vE~kiS6P(I(fI|=L9g|zroc6 zul2RqII(-FWDgN$vG|GxXjF9gx9_mfo{CK^<;;10EP9ZB%4Jc~JU?V?clC=tNHS`J zNSKMN`|P@O1#W#lTfUcXu&Q?NdXKd$keM$tizUdXNXcvt%kx;N($TFmTNyWJHZ%q)hQeIVUv4aeXVXVEJ^{z$m6Nd?2G@fcg zYIq$Z3^CB(JMJyr;g`z&{0?l-rwVBnSQIY;Dc{yzA;!MyVky0aDG*yYy}8Y@_LXF_ z6~RikuRffmzIMVZty;a5tR3TKF-a`?*&!yR@6f8~&pAXf$V$ylzIZRUvlFF<&d~rW z$tI>mUWc#7+X3mc9F#Y@vkmVahWfPc5{7IB+bv~DgSG(L!zy5$mSDM5;C4q@lG0ne zeI;q+AS!pPs{H;9Un%H%m2_+@;wa%8w|8R5j!sq;2=+VYuFpX2DZYY@^%FBsCmRKa z3a+pxViM^*PsPa7ERxB%(yj~vCu)%_9)j`vE&tLp9tFABnLQ-qq*|2&sj&Y0?RK2dIZJDp< z!0O^weG^)}L2$*Fr{~nM8!b16@h2lQrLewen_VKR>ef7WTqnzm?nY97T)H5%;u#av zUB0@RI6CqOk6@o~g$0I7-Sy6_Mcr5BWX=WmuVK&XA_!xT)jnxX?hIggJ?BW~wd^PVnsf_;I^0rJ|S`R)?nAa#lNo^dg(j3=-z7YAa^CFiolBQ~B7R=Y)+3!URyv@9}I`y)nQL+C8(i)r>$DQOrri5`aQN4I!d7q9YjKAaaKGkNNLA8x#yo-nHeV%X%ogqRteU$tN@bn0m32tUtYU2YY085R5H z9^Za;+4(btNt?W222NRC1aIM5li4uTC&00Ppx$24Qx)Q{Brntap|>$;v{>bsd1E0Cg{dn;(rYl#6j_zQmEy-bh*V zy=wf(SNVrAk1PAae^<1W#w>O$!lI9w35Y`V3T$6e@m<6*OH&O4q zgpGUar3%@Dj_-QUHt=+UDb+d*%P8aw+D#T;6`S{`TwhM*$ab4XSRTAMi*XSvU+c(1 zn-l=fU8Yt+<2Iaqi!=g*uJw0aNXP-l&n~8x6={s-Jdn-{=xM7_WBv78HrzP4n^Y^c4cCSfZ_Cf5wt4X$Ah@V8 zJk0Ippb6Hs)Dz85qJ{NqBj(Mv$y{ge($c@ZGw%>AF5SDEds;Q)E5Br4prYSHWZln6 z4>Zs*o^*Cnx8wjR>GN6EqH(R;YDt_S01SZVdTS}nIdf? z#J754xW78Mfw5;hx3mUe6g61wlMT7jY0V9T>;2oVn<7okBMD!OtloTt>I}`ZN){A@o<52vA{$*cz*hNj?XknMX}*`ep2x!Ze}XMQ;FgD7YB^x@}J?++az7O#Hk#`qAIB*!xGn{ zQu5a09sN^<0ert6gF)$M^)klR@ zoB4*JWe?dH2CM5C!R_!?cB16Kh`fQI@1yNu{jH=g_cv~nJ~g{Om^PD`V}@NjW)QJh zYuM{$xIHhvott^9=Rzz>9h-VgA{@;TSlTz2f2RITp(tN>p%Wtxt~AT+qvb69r5@)F zX1b2gbP7(W92Le0{Q&-$@l}510GqiC?_dZe*+qCu!t0sVosY=;QROMpkr_Vo4WZa) z4q|Vcy9TrHPR(n+!@llz6m8x^=&lFjf))$)7P0CbqgWCBA)({q{U8WfUF@S$*Lf~h zHAI8TTBL2S-(3A1EmD{tjnh*T#a(!@d=)ohPW7nr#RZUOWKfBMp@`OKpJTyN zye(4Wvep)psn2lg%3>>ie(%&zAfljB;MVB}Bs@SW(p2%5Ash+Z0Wrs>(2ivp;Au z^JV598j5{#inlg`s$LM{vPguwo05894s=7QqLT^3bFIObxp2l09f^LYna)Ds|#e@13Db-oYw#7lUearg7@LX_VKUC?XpTdypF@b2>Rk9#;UG z{HcZ?kdb~U<8U-<%vyUg8o!?2xX~h2?P-7+w&a*WxT0~IrvkR&SazVhrBpyMs}0N_ ztG7^Gg29|$oP8q$OkO31O>VsM7b<$0Eif(Fq!Q5BSGQs_aAq%-VyYo-T;*D$8MDSI(N&mtBlYLf`$_tBnU>RRZoe6(jb#^9-r5VdTy5Pa847D!I!$2 zwT7r-)|POyyu#9H%f;>+lInte*SOtS18!a~BR|pn9{!d3+gzOy(Xx2+wb~B(q*eu^ z%TD53bN-XLI?nUyJ(fYuAoB=8?v2InFS#+B*Ef$ud!c)mjncl}5v0=Yt%)H@U&T${ zh&oq>cLJx$SxCtc9tl5ahKp8oI;H*sqRMSk;@wFCN-OYe zfjVT0W(_ArVuQy=70$Qs53tLdMC1kCttYHvIdMkpUbpK7;mU46eK92qN!%IBI<~Dc z!)i zJGUNk6@>CsybnKH=FGZ`%(~2{{fylBGc%*ei0!VqrkVPCYeK=tGqPefr_4|b>oAr$ zd$5_ODqB1_55=qhW3Jbd0ELvl`wdo!zqZ7Wf7o*@V0RK>?{UTASPq<`&86NfwWk+? zo~i6d5}g`PH!!D2?chR$ZjKlDm@8Ez>D`W>2=9WqCgDA1>_=JJL(@d@o}$Bm3s|So z@yL&#N?YkI|EB;Q!b6yE_t~BW>*E2-&^;=9e6&OAz!c)oP!GewG&y8OF3I>c2<>&( zUY7R}_b69k4m&XxQZaI-f3=C0uTeY;h6=~1XYfkCZQvfP52`TiQHbR;vd{%fW@8dL z`7e zMVLH(n`FVX9Db#$%R%F?2mG25NKNx)Gd+1=#Ra)q z{-BG>mbPIg!C_Xpgn1aHF-S>u`(}Lv+aH8n8wK`kis9S5pvBstDh$o?E0qyHlb-u_ z$sF^SB~CHdsPs(P=Bp21FWq{eUJ}3OI0eyReHs3lYh>2dFWZ>MOF#_zC3T&Bo^Is0CEI~UfMB9tA6E>!%Uh@0hh6!kTr6) zWY;Ev6^S%*>^$}#G9rc889SW>~pckj!KN zcz_BOEPG*IJqHC~q1u2P>dg}G@$^vktJ8ahsPi}u$DU zkVJIC={~w3sf%0NQfa!LB^MrmP760r=PL)Vm|~+lIc;|a=b!jHC#scSFSm!$w_iit zRzvc`dsYlS14CC6SlxWhB|T}@m?*EygJ;SgJPRbWE~pON;>)7PAU#)$peDEmu|B>p zpTE_@uusAC_u=PkH7LpVYWdA`Y5<5`UxhfM$JKK;2c(M^NH~w*W3L@=zKAR9<4!*6 z*(DS+4-IbZi*^%8rNix9Yj$ouD25K1G_ED1wc_%2WxJXa)}Mz6ce?om68ZEMpK)Vo zwq>{zc&LqZ?szyeE0+z7J>bYZ0g>5h^GFKJez!|!UN`zA|55VCSF?u`j_Ck?i|7w& zs#R9BA0qJ>`*bsDB6xM-DE+BU^+hpy6 zU9-wA`8&L-l**dCm32UQ&+`!k1=08@A=1HHBsXK%XW6y#E~G5a;>{8}Bm8D(FqOBs zGj9{KuG4LBmjv4Z#kRoZic=n8Dw7*6zG5m$aeOv!MG0%|CDg;;xT>9O*x;Yvj&l>3oz)g40M-*?J<+! zA$wEW%hjrva+m(8JgCuL(?b$#~-dXjn8;^LLo)R1r2}r z>;F`f*?0tbdpQKVjRR>TP59x<3=6`Q+n4JH`Rpajb-6Zd7M@ROx0 zKAaJtI@&S7F3=@}9%$I=9~R+<yZKp@nKa9-lIf9ny8OdJ~4I)}0|daw2n~EwWKYX#AVX-Tc0K^NyJ^nosyGW&>k3 z5;G;SB_{pX;nn0HxJKH2GF_fM$93+Ze){%M4>*LNS5WIlhFSLOUb2^k#}l>YI%M1> z=JC8vM-*aA&wksU)x>b{4lh2u5e?nUr`!P-O~$=9bEvTiYysS?bv8G)T#x8)1&$6b zmo1mhs~jv8KWAh4=*Qp_tbvq9_T%!AJH(_@8cZG){LLb{YIos|A(_n5Uw+Zmc)ObL z>WC;IdD+%tR+eNVOp_~O2$p}-fQLUnsT1XSAGQtNnso&q6@Rrpp_D5ET?QS2(XwS< zzuYc=={zp0&o1N~RtA(C4=^f8_QR(+LvmWO6s8JeVSu9$imA9w;Y_38*y*t2Ky+TO z*Wc{W4}#mv2}QY%ia=dLoSY|U(M&AbqRz{6eB$!Te}xji1UmFgp? zoPVmTUVrN=dOh=YsYUeNtc>S*>O&1PCgRs&qIdJ;8Jm}2H!w+yaWr3&?PMm^th#ai zK%QU6sQC6Ot>3hX?r1}pa+(vQyi(cvt99yi(8m@F%NPIz#V-J27Xepr+yP{3dobXA zy*>~6qfWCjRHsHlvROHU&!W~Yi`NEVx4wv7JA1)MkiQBlI zksphTzoAqAlt3IZ^`JN1@O4}9&4JN$oe~4z@g{syp$;C3jgq-)x_XEebF{b!GXb5{ zgvY6^?&%J_S8Gim@7K6yiPj21@YG^60TYnLMLa^~(m8BeCOhmh2DXNsBd|seLSPSGFGH=XayN{S z;;}e=51Ly5skDkAnVh6omazqUkmkuRNS#}UvzK0xEV6no)aWrAm?Up_RXIYB0*(Jx zMJDP*ZJ2~fCv#<+zw^*hyARw>-Sucjp{elx`beech)rp#WCvH_hnzKx@Z<`+z~J4; zY36s|U{YB)yB77pL(uQy?}8;(<1qUI3j5*y?als|1)8Q|Ce@yi#LAU<6z0|8buEr9uicFv{2%GIA;z(Ci+T`&lM)FeJ%oFvv?dF9Zz z2HUZ$ESSjzYrt}$2m-nIj7!v>k9tq|AJ0!Fh_*o2slBHrqJLxLMH!@1IwW%i*ykhp zU?LU2=Msg4JozF>iMU{Pfo(BtlX^cIen7z<>%v>Nuxr=RtWpuZNc9d+qeh?bqU)3q zBZrmqAl>8#$LDWDDK5#I-;t!!WzB7wYZhw~>w#Mj`w6Dgoe9$}^@V(F|N9|;4l>BZ zc$>`yqYHG3M+Ul{4JV6<>xds|7&Qm5K z*m@hY@m3?7*J!iQZM`rD(wcUxztx>8x;i9l{yL#v?wJ0zgw>ZkKi5AR+sYP zO29iy;Vud?ojQ=ZhW5J=b+?a1 zWm})A%Tp@b{RV*^klvw6G22k`IfR3`20{BGZ@wZN=FnfgL~>^Y=9$smC^95T+IpkE zA>%M@p|7oUkzYMaAoXkyku^qY5-CL9sSB!Ot4uA$Ha?Ms$P08Q`uHh(w8PECkJnT( z_bF$&`*tHg4Re!edWPnXhvU&f@}cVsU&HBl$hI^*@ee#k;5rMLH$Y^6j&u+x)UxE5 zxDD&zZwnFpco<26yTOpE&dPN@;%gqO1E;~UE*lGjdICO&6V62z?SD3o)vQ=f8G(ycn$V=1BNlo@D> zSS-FhJ&IPn+PIk-5MEp|E^mcZ$Te#|$+$Uo-Xf{9Gl<6&H=QunRKAzP>IUS-!**Ft zy1Fk_CUk%aRtKzu5xPBJ-e5$XX|ks7LdIzu_d&}_p#?>CQCSEDO|Vy053gp~qL>8t zGi6`E&nzCDzFt^>OnPk^6- zd^fSfw1P(07D)LSjsK?8Zb9)p+8!!7h0LCcWu$F$~EIe``u}^%B zBXdddL5<$F%&y#ndiDZbSs$w|L|$i{chYydce4>#)&{fOam{$F%1>-1)v^A_L@E@4 z&=soox#>jVVHm)QedC#lcfB02Bc!qF#+ev;(~R8~^UhQ%JoVBl;6kODPJS?P14}z5 zKir{{ddLxE(w$utpEqIeDDDp6c5Ho!4(i~7Zq2)r()Y)l!^o$Af2rFE)r^)5e~{)& zLj3~u1Q(d9%5wN>^upQFC%Zg6h@BUD#W~#8tM=AMM`UR!ICd@MY_zlOW(>sHar@&D za4Jd!wC!QuX~o0YX4CXHvGmrp%)=$~O%d7ehR)(ncZeb^f*gdFPLVhT!F#K%8l1&6 zAD{kw&l<1~QL78!!eAr>j*S*c)!roMPnx@Cum=-j!8am-V$U{GIeqPJcC}A;99t;> zHuV6lxeFZrZdG#LY0{2(=_dX+2kUyg|hcZaKlBvrk&;3kyeKU z0l;ETd`@!;u4m8bOL zO+~DSXdc44Cpgv|2@(LUY~S-E<4C4z-6FX+2<&OH)jCAL90PqC=_4Gr5L-V|uzI@( zt*WL=DcNNEE~6393FVsT=a~3080IS)mNdB%4bc5-TKq-^=6C2UV8Syp7;a3)W)mvE<$l9xHWSWlQ;xcfM>;rkaP?$A%aKf1|i)S>Sr1SuwRQ*bU{(F zX}|7b`aCe>^x#p;wTkV?;jfbTukZA`{=H%v+3rlqhoyF0KaBthCz&RY8>d9xs-`jV z7hO7m;OsRw)?>C;W2|9ggnWx!xs3vgUC=c;`F{TabNx}3(MYH`y6t-{>xuPdJ@3MtSJY*Sq-UnG`5+H_ex+cqkp6m4 zS1_`_O+Y~;eTrB*>_RML@@7quwC_Ixl3AxD%Y|yq(AyD8{=RjH50DS#iGTmEU(Xo@ z;Ri^LO=4V@*pRHE8#=pn@cY#eHp%neEw~2@zg2Wo#jWS)f{;S;I?!DxP?L+y6mZz+ z>R=0LGW-P@jHZ?d8&{#|fAh8uk-!dV)nH9Hwo{DU!!`>wT#ni&5pXoFcbv>n2NtJl z!3XR5ub$K;v80n^ZY$Eofb-Sw6`S?ogPYwNbT`icuXG8J?z~Nn3(TYQ-Jox;2VJYS z0{EXjoxo1%mTc$jEzlR^HKt0AERS5rm(dvRwHpnnsUM6Xm)){_cNonb`BNJPbG= zf5e)9_ftRb{m>XV5~V*OVgIxfqC2=*zH^&>N$6Op?^L6!;2CDHoTQ+;0^q4FZ~xQ2K7JL??3CW5B-Nf91L`48olb- z!TG=Q7!r_5GJJnW|7*{~$%5R+cxjsd8>=DV4#7n9zgVvS#{c^NGk_dQuNb^6uFl{# zQJk~%fSX}TVqxcKsP#(Wxr#bq&ePA9hAr<+Jo~GPu@lds1u&>aSBH2P=r^l*z$_6LSIP<0EZ&K}D z9+gD4M7Ijg9cvJJpWk|Brw4($5kf0la`o@lVV4IX{z1ym*FSPL2r(xJ?zn0R%+PqD zoiu*7(^vR@L}O`i0|{>xn6fu?`=JDhcUa79FJcI}pXe$Uei!>C`tc63yzZub#$(nW zeE$4SA7Al#Kg3RvOs(I?&K`Ugy3fwt?QFw^m&FCiqIr@_{{`d!!&>=4Habec9Ub@E z_ws~1RR7*Q-Hd+ul*^Lte8VT!7)Raik=NSZLg%lVkUagqK0k-lP%rp|V*w@JJN<*d zLdKYqfh2QNsepcd$$-1X$hFn&$O8G|#Y$E$p_dExbUSSY9$PpQ(uK$N?D!?WzjWFo zJXh}Vw@m?LJVR_FU`!FZXQyBK-;1da^$dWovLIZ}WTrx;9V zZ~vX`HIuAHb(g-G%diq8^Tal;_P+V`qxKpv-2&SvcK9?V34>3_nd@sfywe{2>kU_I z;ORLGJu+Fcausi`pC`UGA`e~J5tpb}k@c6Ol(yE#8fCYpk9_~if9-(pf7q7_dnVwd zpW!#k!;TLG==T%K_pk-)^S2jQ-oK}&{M-=1LO0alRO2hOy)w*wGS|P)`B>DxA6rp> zI|dq8k#=BclE9Un-rM)>+_Klhi>rUGchni{*uIw&vLTgOi(h~RDKw3SJ z;k$e_$36dAg`fY>k`M2z%l5{OrNmzk=6F!!J(F4UVf6P;|8=EW^x>-9a-4kh^QZjs zPtAcdo5%Rq@BZlz9zGDL1e`tO{eSn1_QB(iDsuZ*?)Xwl;a4r)NWuTzT1v!f!^7Vg z{_qoh@;{H}cMm@69_KT|-({>o_=U%})|7v+)8mJ7z**io?*Fxy?^2Kt(MOg>?{t_v z%HVQb^44Vi>nC>lg9H>s3UqgOdLZ*6*alV9?-%~_b-xFwAOEI85!RD*@#~?T;Ay6o zm+-4*e6+rwn}7a2$b-C~A|IMkYjWA?nJexgSAVS(4aMYD`KR3cQ*HvJ_6Je< zgQyVvpO2{IM17h6&IR}t_xb}M0_5`tK>PzB0^Is1qW{6j@%}G}=zpU4_kP9?EAc0a z|B2#%qWGUq=eIWL|M_|O53%dpGyloO|K#H2f13H<4#uBc{7)|aCl~)i$@+hhk~OfM zbGyGa`0?`gHn-Q9abD|vN%FG~89c`rQD2T?m;Cg5-Rosp>$h}aLSyFNRfd~761CmUg6}7HBq{!z z0p}sc#WXb4)@yWYCrX^e48B)nsi5uN-_seBaiyA~>sEIn>N2&kz&{Y^K2iT$>gT2s zJU@3~hwP5ezs<@tWJ|jf*X=I`okx~}!J|M%E_IOwN8Jj)-PK&pq?$u%+J3A%GriB1 zx(C>_N4)qg{hz5t)gvOtF^%4-?cw5J1Q%a+I`7Po?k2W*$H&I&k%VtX`qCJjqkl~i z|GR%9p-n^})N9?#xg(?ZA4}-}uf6k(YBKHmy*i8<$3`-b1+Y=VCFF2@1s*5(0R}E;jFV3 ze#(lZ+}FLYeeIV2?{5=^mP;0HAuIM=BYbPR^vi0__P}oI=62gkyDZCZ+Q-~eyu0Ez z@C49$@2S^+{Rg$Peg2=;@&2tdSF*Ne(-YyECZIEkW(W-b!8 z5MkMt2Hm%qGXQ)%gIP+9Sv=?e|4&?M8H98XbwC#`&kKXv?rg^;8OBfi_W2I$ZBjGF%ip-KnDhM~H$XZu_Ta6Hq{dfm-tXn+ zD_z&%^X+o_ayb7gnO^q+*}<*F)4DxjYD_mMaQXe*1cK|l+ zCr~+U?)307P)Q=TEA`&5sQ`_dX34z_kTOk~gyq=|v`6hm;3Zbd){tt#C+gzXPJs}1 z_*!GH43g|iHD})v0jH{sMSUPJ^D7djMxryJ@b}q04;qYy4FN?xG`ya;YD`qeYlxP^ zj?EJX{d)5k@w-2n+klhz-!#;}q%0qJA)DCLxU_P%z4FJh?<&H5toEJO838RP1%1bk zFkK1wDw$WDg!A4mCCcRN*un<+M&_L}X_6an1HLsM@l?z~!hIX?nSKJr4hwzjlv_NW z-Y2pK^XQF=z;;$QWf&s$H&8S3t~jitQFr$@AJB*CfNw7bEJ2T{DRR0~kPKs|hy(jV z+Hk!=x&RPCntd#?*K|JnQ~L1bQs9Bfhowu2`!8oD{rSm1uHthh^^PNYWvMN2rz8QM zLA#Q5@lDH8B2q6z0yVnXOwyj7R%Xf?UZC^-=UJgF; zTD$)q01I=FteUfyg7MiUt0dqH?q3g@TAWQHue@LbRNT0%aumyE#i>P8Q>m-RV2w6f zr4kcFkb;);@7(1wRXdh3tG0jH#(#bASa;jz_Q_wyl;@Hi{r6=~>AeH}Y{?}XP9Gw& zBFzG5$KJA+Y;=paeb{K>?0?)eH|)sKlopNKlU&~!gFev0;&W7i-7)Mn*+W(p135zZ zyySMXyQ>cz1`W~aOaX8r!y{l}w)&uoT?w{(7?DUafk7IMG%Bk=Kx?>~pF9lWkzFH> zNA%6ZGOMI3YbmKAB|J%apT@6e(t+gqT&qo33N^oL4N8q$?M=vsDVi~0EtE)lJS-9f^6z)NW+qxB&n{lE4TM+i*6%!J0@mtT;kRU? zULxRjkw|MOQfxDh?e%ey&0jgY&%VS5K0Vpt^xE0I&6l0nDc=8b|E4;ti|=&0Gd{dXm%d4Ne}tszSIECTgf#$3^IY@7F&2M^&NjH1 zF20jSAOPlU40=&7q@Vw&b2tGVBS?w2<5q;x?JeZQ6Rh7g3SEJ#UcWU;zX1e{^xNnI zrJHmv}mD-ot@ z1cVK*2GS@`k;5H?eO13yTxX(Wqi2sq!BN2sWFC`n=BE4UnP!ld(O?Pot$S~7+6lVc z`Upp&5VWHjB#DcTX@Y9-;EhdFmNyp~#{z0}G#m*q8@hLdeey)$f6N*|5x)ZD2M-qx z-?a}qHRaAmik+HU^I<~-j@$OhD2O_;KB<5Y0*X0QBwR0nB-eQ2SSGjYJlwaiOnAqL zA0!^d_cciRj#XauaPH7AXbw?o10s1U`+e(0$ux&vq!>18c{?Ssy8;_HMhyt|oow4w ziS)Y8R)G-PgH$j-A=;jC_`3+>sczklD|=UVJz|4wyT0bm_W{zN-{k7P9qyaeirr52 zNLNZ>OV(HgSC;GpddpkkE7%`v^Z!BOwZk-jjShHZmLu>nTzO)T8SUD7i`ZT@stMjW z6BJ)BXKr@Z<9-A&rBLMGND#CPXUA-o+v1Kt=Q7L0bv7hk>t>wl7R9_1>PTQ7W9m$#p&h&)0T92qOW8jYo9B8aNVsLkIyrC%VxCL8mAsN34FI@neByhZq^t9)f6X830 zvWuqdkepv7oLGam$N~<q_;yswi)wY9@(vVyr;~JXvN*Xu0A6&2>S%5SAg9#| z9`qqbG40I0gA7vvB-O{KB9{g(F)1~pgs%g_Br&2cy=L3~hwn;MHo?)+fzE{PSgmeYA=``P8IvABGq5jk4m#;H!Uj*2y9xQ}^EouqDhweU!-Yo99w8@e|Y2syN_tJc> zdBm|J4YZb5$Wsr(u8KfHrpWUX0yaQsw(p_$v&kW5Y}Q8Q+K9iNN}qjrd^41odkfFj zYyH)m|Lw2+3b$P`5p!U{r5pHwoNv9QJ;Ws&D(S`f5Q*LC0X@aNKSz%3!aK5tFuO{@ zi61XC#k=7bRLPc>xMF|DKT`LK(6c?eLT=r**B;>bIHAwbQfwF{bv^(lSe>OUI4!Y> z-fZKTxAOU7)f!b1A7yp-6q7P0;dWMlhc*zMu>%d~4sb*3`#wA^cA)IU?PDDqszy*R zQ2plC4Ugj6NlI>@##iSii4$3}eBGh#M*t;%e4pEx*VB5W5KmayBQViXjl{V5COVq2 zc^3X{Aeh$BwyqCQfp;fj^`vwJhl;*iva)ADyRSD^SeBH(K8qAz6?QO~+U)^?ji*y> z^w@507a6rBV7obiSE=iw#c%|iW(iT-GNFn=-rk}f@DcDhshZaeea1RCYA;l- z_6`YC0J5tb*_r@a<7HBnKz&_gGSw-p>rqYv4~}$5wJ9=`I$_ajndrdE-jUy8s3reX zA(2BlH>BwcOJ4ZlO^+9smIn-o#QogJmQ%42GBH{8;2pNJ&`Eyz5QA}C zvFYZ5t#FnZKdVkN)OX!eT6_bH$A+5mpo2sEw39qWG64f}bG z{>{b7F`{Ak+PAh@bZhZPfXuBscqQnyLzqF*A?`?w#i>s2}RZ#7A`{L)u|puJ*e45sE*WlSp24s(L5?d7f;cT*na{7GIBa z%#F;RxQVn^wO1C?F*~#%K9lVInPKJs%1d=3taB$@cp_pZc4)9|)663zCFopT0@Tmk zL=Xr+9Z43!*$*j}-G51{uZkLsF{B6#@sr-ts@s_%8glxVM^395cMCYif)}cDRnw8m zlB8IAjt2)_837etNfbGhb5H8&`jn1&THJk5e_N`jU$7pwzIJeT;Ov3+3r%!jH*L51 zx}MK2MU3!G1#bS3wK&ocY`{cQ5~V3J3oZOB4Jj-LPNVr=5VThH2$;$-r%-tPq!Apy z(Tq-_BmR=QTjc9)yd6kVSSTk*t|@t6IGoN#D|X;&=n#OSC@^&)>z?4t_v_`gei5+G zAF#fV3%bvt=!ih%tKn(Nb8N5qE7L_U8QOX(p0AIeuVa(DEmX2we;2Ed??vD%?#l}p zEl@4YEs-h}$f|r3Ya(&oLa18bt=p~u!a0=a+pNIop|E7pSC)~XQ+^BX$Re-l+>$i1=cNVq6* zyJi)vcMTuG0{ae*9b@d{W<+P05j|ST#tF!kTEz&x;JHd!&R-)0yQMJ`@ggHL++Ud` z3gS!hKo;HR6tydc>fac1$Ng8+#B~-BoVgeffd;}6t~5k}M9hy-nBQY=j`s4?q5V<=S&i$->+Ub*)FQuwZmR6ymGuZ|U0d>g}?1SkK=mfP8$*JL8C z!ZDUk2wh3=wu_}wlwN-0QZLA8+vB}ro$K|7<*!=Z zCAIK#Dcxt1)V)GH9WlFKacE`6H~LEX)!$u)zc8flaDtsyNKg^tFT%yNkF`FYbl+1JU=C@OR%x_|OFn`^#ECAhJY7I)vLRKg3rCbkQh%au z^~7WjR_#8!IPCl;pGS)m+)w&5lsp61TXbd~Wxq=wT8lz8h-4dYr4~((8%MDkKK4M` zrkx~<7f`qL=zp>#V&Qj-YgILEU65ojiV%ipR*4PrH=5!qo88)ioSV!RJtD2CYJasg zF)|?^{1Jhv1p56PJFL?*3LtrpC(2k{vs&~bzz0!YgH~ldEb);Y>4qHa?salu$Y!Yw z1FbaLS+z$}omOSUZ6ocF>!h={h8)1H$BPH+rm?ybF&CY@Ax$InR2gYNRBr4s%<77z zMBwx+`0RwbQ8rwG$WaLSFy368PrQuT;p7ALlF8g)wGv_;g(!2^Sx>h0CDQJYX-m3N|*%&@~(vRd+nqB|Ldt}4-Vu5!Y}hmj5ZMR!>gP$drP z&l~7bOPiS}nlT7mzW!GT3o|my1TWSW7=UsGcmj85@2b`j= ziM+Q1H-r5bBK8svsf$OZTt>NZ=`XlV7TZpk(s?dZZHeW=A*UzZ@f+~Dl|NQ(n)z7z zDHPkLWD`6%c&k_sgTvK|99DXF=DP|2Nxg6=Lh|xRR2rqDcjBykj*trju23^yFYV{^ zEd=5Cy7F+qTzJKpGT5_w4a ziB%#mzLT`zV?)vOgT)D`OcygwrGzL`-|gJChXGMOa|@TcPWrloICe&knZ)}8`L-?o zJj+X@)4+*NxZ}h=NOe!5rN5QrwM}?S3n~e%>d}h5YIQG2tcXGzqg~ZCa=*2h3PSgq z%32sPGK3%Rr>|vAPc9y5@tt{}mg4@DJjC51Zx`%}Qzb9!xZv|$!I;>sq%CCo7Ac#P zv1Qbco_brzDiH(~h<}`YKS9_$tI0!eI_dUB@+S-D5DA^y2lEW}4_{sUdZ8@-GDi4P zE|8DA1D@~%ePT6lS+Y_QKtl<LX;NH1-K|dZNrhW$fY}U7DVWoQjnr}?Jk)XU)b-Q!&Q@>tp$dZI_y+0Bw^;j zG1`Wa0Q||If|Ua>x;FNyl`uHfGPvu4mwP>7)hGn;*I#wVjk+K?wJSS`p_as_JH=SCt5hdX1zF$>R<4)6sbUX#^3P!Tr)N5W7Wk`hG`k1lF=r2QLVG|CWjT&wp}}u^Z}ZSI2gC>zvBZS0(>m6P2jKdWqi>lCKo=|E4^@X_Zo&vMW$`3VFNU{+a3Z)0TLjs)t zvlz8TJ$uuB1C!vybx6o6txR$;svfh%Lx`d(nUMubNQ05?^sJFN_XC<-yiZ#u< z8*Blxir((4BgEOm_RbdY1k(jY%;3+Zo!L`-4liPr4Ug*HL(!3&h9(#n#!T`1+7BgwhQ|mb z(dSk~Dy{lZO?s&W88~WZ{w6AG(d-^k>>5;lL&$?dN>+lzv-^Ijz3;>u=Uf&PO2=-! zzR%lW@zi8d)4oFyo&DfG?}RMDW#UKFcSaJPOG{ZfMMkUgYl|yL_d_JbNzKwE*aU_ zB65kY!k!39iD-=ADH$8eW_sN5kOZoSvjTZ!=av(U1N9-RKR^XA?W!I7^^OqvtR%{A znGLdBl^T*vomEEAF6odxI5$+VCa6?#6UMC7Zcq!O#EL>nWUE;_9*9k&PFYNQ6y_#X z;EhtuX}uP%Mp)!G6R9AaA{OM2^5Em*@55|1!tp z^+TQ$VG0NqB!S2S((jp2U(=6uYo#ch>xbn|xkHzI5^#jNvhfkt18MYGP*j#Gh3aec1H5HEBx#(R&q)h4c15Ll(YY@!Xz<%;+>eNq z++t*!<0TrRh~Oi^>oSS=CIJa&{ZnMJWX(<)E7>O}S_?_GJp#-iOLbg6K3RRoPQd8Y zU6HJjRWwd77&%I)Ca;Aukb=}{6jW|fe-U2b0r)%4j4|Xw-Es1X%jA|gW26-Kr!*5C zl`%wIyZNgVt+{G$K@?gulyjm0Ic4nKKr*BMSORFABH^d>^}hr}uakReo@mBOWm&IW zgu}7N^wsfH)?0j_T`-^1#!qcC=&(cpSEZ;2?2WLR;alx%vyzCblS`-wU=W9b&dBS? zOFnw%ukb+5&vNJD6Nf*~0@R1S%a+O*LA{ny^}~%`E7t9ZFS!jsA{~T)J0B$&RV}hh zLkV14HG`YXt9RK_a;SiGhvXGAih{xY;{~)Bv9w1Cfp6^#$1J8iO%VLr;#iKyU@#^L zr=to+D#G6G8zEfGXyKJAm>%bFjz*;eZz;1+$Nw!!&MtPcDa5J%^^LUr8`ZPNiMxu{ ztacpX^bR|I{S5i|`}bgv0cR;ii&yX+PEy4$@I(RJGF-LD;b`FVDjuQfae;8N9aXJk zHc}5r%*4Ky3i*JI6-iY03ZwW3?UFry%s(T*mhu6s<3dRO<At*M|2w`0kxp9@sp@oL{tT+@sm3|uSJF?HlM1VDG6KRWQYhdE zwhF?Lc04)YDh1|O0HxNIuGW@M8+Mw%GD#yjlRD)AIa5C~15~!(vekTZGB;7XBhTC& z2ww3fP-E!y%c~NZUEc}8;n*wn-UxpdfBzG5{P3F#er90>!P;6Q!q@x3(Q6k)|0I=R z{j`kd8inF?61&tM@J!~A-*xFZCz`T~L`!UG9i-=^brV2IOB4q{2!W}=6E$_<5Q6!J zqegpRF142UY`M&*j*Qu5ew^S?EK!$wtx<_Ws3sLtTlS~*7*|DqS2n4My=1}V=RN6z z8}k6y8b8wT^ijRsJ}rNHVkU<7hk0xx-a4 zb996~y9vCohZ*513$cQwvo}LO8`gOIE+@!lB%aiwg1rO;@xgT#gD3E8Z@^;mb+3pL zx;?o&Aw%s7oG4mE$lGn)BFp+w5s=p~p?u$F>ShNZlca88{UUZ(_HY^XC-Dpu{|78g z0A?F55?|#B5Ju}-H&g@MdVzw$RfsI83bP7EsJ57y}O>XuOlw&Rqt>eW1h7HqFs zg1fQNtN)2P)PmA=u(%Z#f+nUF#SZS8PVEuob{W9wj2&>5t1jomR*0N2gmke2QLdoT zJ*{9R?O;(K0T8;(SdtH^zu^($j*bWCXia+xzJ`z_N2upwFM5M? zrzZE`+YcCjm{DDVvBSBHoX{G)gqrw5w4TW-(muMkQ*2Z^u&YuRUy#yFrTSLS;6tn2 z8KI0w(UBmXNym<&P0qF29Y7M-R6b9KUmBFfbqL5NKE|ISiAQ1L2M*@1=h9MM%j2Ep z(zn02G-W8sbBq9g-EA*25lha80So6Mtg+l4dJh}*hHi8KhI4=9yWKKyQZ=W~Ge#Kp_9gkFOfAZ(@M+ zXAYgyv0vLG*2(AyCP8CTqW5T`p2f1xveq)UQeka_p*n$etVXIdb=?C8g4R?I9LEB0 z@XLA_VfSQlKf{C+laDlVS_|7!vQ1|jzb>Qg%9g#>H=|QxV$xYD*MbhXT|c+x_HJvz z(&NV{9x_BZ9ZP;)!B!>37AjZ~M^RY3ijCdBlH+m8ijKW2gfVq7}&ot@(2 zZj@+?=P*&gz}3`S+r?pJOC~4F{lnRBfkb503e5fi%fEilG zT0mfLJr3=NG`-Pn8IDh1l@Oqi-SAkZo~~m&#KwGw)5PPAO#Hs@wikTgj*z`G24>dQ zD$$Q+-XC97e_W$g;AM_wtfeAUR~xeOpvdRdC5AcUR4?7(qNe+lJ{b;&YQgc?I9_l0 z8d6(mi+N%({`Mtj!7irZG51nvROuUQRqNX`>8^9t0%7uPqRz!*{p_j3=l%FW+b_Tg z1xPV#sFsp`tuV$W^Qw;JNtqrj;31<{-HOL+AjUtgIZ(9%C%^>TBpg7%Me7BTciaZpL7qL~wS|&B260j-M@4F=~t|`Mq6w&IPZI=dX;->E}z7DaY_DW6#@nAb`>vetI zp|CR9>oyFVw(Q!F?>prCi*Z`DqviHRN$k9_Mz{;wypAmD4GwL%xZZX4Z4_Vq1Kfql zHTs*seugf+B<%+!kb8lSs3!tk_-P%XDw5VDQ0;Y}<-I=_dBb+0o!5<$A1g^ms@kjK zpxCq^^_>@;fnSK#5C=J6LmmQFSB}) z7fhcxFEej_j`|{mbeJD9hZ&UaEStW*r@4c{(5HlRO%Dn+#$hPv&$~S6KF211!4DHX z_8+_=zFr@I01!$E0Jc9KV?o_YgF%>sD}+`d-W~)x!(D4p99{uqCfYC-duI@uap9;6 zQj(0O2IGueUDq^(xq5wWqYJ%-I5kNC_;Tj&9{V-BU#gzt_ilbnXjgcObxzD4e||1w zfv4Iv^JAH8sTvK&V^XBrVZ29Mlh_fO2?GWZQYGtdR2O~NyGr@+L#7AE5zT?2`ZOZ@ znxiJv5T}o^X#Yqs6g3@)Bd^UWQMiY!zy)STq@VEMPP2Jc<|wxFc!;7n9_J^;n4+miAokIxLkTwgBgdVQLyzPMJi7*VP}4F`*76l2ktuN`l^ z%aUv{?ng8=jHZf7FwA8R0dWtb*LyBN*QI4>4)M_GRdd|-Kb9_j>U-?>OxTFfGJ|re zq7h6N;DoalxR@~|I#-)M8^+Qold&uQa#HCn3MAyCj=K_o{W56pxz zNc|ab7o|PZbgwx%8=L!m7wyqZnqy%0kN5waKF#{f3qkmv7fqVyGJvnX_{-ggU+gZP z_3gj>#kU@8$HH$jm)6_O>Wshj;xERuN0a=B;DiI_6KA|2SplHj4R^D3 zG)sZuj}Q5#`KrP6-O_sTKMy4QZ*TanU1eS0&F(4w;TQ2cu&ZqSlc=x%Ea_XTy_D$v z&8z)W5#~R?+G-el64J~1udZa_mZVi*{gD6s*uOo48n`?*|84*F!+&){&+HQ3+gt-Pi{@Hua zJBu${bKY6}v3=&9#h2|f?<~H!oq1<5?=1fC5nm?t=AFg7v-sj8zC4(B7GIo&$zI0$ h|1RL%d`hBU#n7KzwNSsfcLDr6__L;3+8z`C{{y`o_#OZN literal 0 HcmV?d00001

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