From 2d633bd4e734c90a0da358e8774b163d21692108 Mon Sep 17 00:00:00 2001 From: Rasmus Ebbesen Date: Wed, 5 Feb 2020 16:33:53 +0100 Subject: [PATCH] added support for MS Azure Active Directory oauth --- .../Services/Microsoft/Microsoft.swift | 24 ++++ .../Services/Microsoft/MicrosoftAuth.swift | 16 +++ .../Microsoft/MicrosoftCallbackBody.swift | 21 ++++ .../Services/Microsoft/MicrosoftRouter.swift | 78 +++++++++++++ .../Microsoft/Service+Microsoft.swift | 6 + docs/Microsoft/README.md | 107 ++++++++++++++++++ docs/Microsoft/callback-uri.png | Bin 0 -> 63480 bytes 7 files changed, 252 insertions(+) create mode 100644 Sources/Imperial/Services/Microsoft/Microsoft.swift create mode 100644 Sources/Imperial/Services/Microsoft/MicrosoftAuth.swift create mode 100644 Sources/Imperial/Services/Microsoft/MicrosoftCallbackBody.swift create mode 100644 Sources/Imperial/Services/Microsoft/MicrosoftRouter.swift create mode 100644 Sources/Imperial/Services/Microsoft/Service+Microsoft.swift create mode 100644 docs/Microsoft/README.md create mode 100644 docs/Microsoft/callback-uri.png diff --git a/Sources/Imperial/Services/Microsoft/Microsoft.swift b/Sources/Imperial/Services/Microsoft/Microsoft.swift new file mode 100644 index 0000000..2279eaa --- /dev/null +++ b/Sources/Imperial/Services/Microsoft/Microsoft.swift @@ -0,0 +1,24 @@ +import Vapor + +public class Microsoft: FederatedService { + public var tokens: FederatedServiceTokens + public var router: FederatedServiceRouter + + @discardableResult + public required init( + router: Router, + authenticate: String, + authenticateCallback: ((Request)throws -> (Future))?, + callback: String, + scope: [String] = [], + completion: @escaping (Request, String)throws -> (Future) + ) throws { + self.router = try MicrosoftRouter(callback: callback, completion: completion) + self.tokens = self.router.tokens + + self.router.scope = scope + try self.router.configureRoutes(withAuthURL: authenticate, authenticateCallback: authenticateCallback, on: router) + + OAuthService.register(.microsoft) + } +} diff --git a/Sources/Imperial/Services/Microsoft/MicrosoftAuth.swift b/Sources/Imperial/Services/Microsoft/MicrosoftAuth.swift new file mode 100644 index 0000000..45d41b0 --- /dev/null +++ b/Sources/Imperial/Services/Microsoft/MicrosoftAuth.swift @@ -0,0 +1,16 @@ +import Vapor + +public class MicrosoftAuth: FederatedServiceTokens { + public static var idEnvKey: String = "MICROSOFT_CLIENT_ID" + public static var secretEnvKey: String = "MICROSOFT_CLIENT_SECRET" + public var clientID: String + public var clientSecret: String + + public required init() throws { + let idError = ImperialError.missingEnvVar(MicrosoftAuth.idEnvKey) + let secretError = ImperialError.missingEnvVar(MicrosoftAuth.secretEnvKey) + + self.clientID = try Environment.get(MicrosoftAuth.idEnvKey).value(or: idError) + self.clientSecret = try Environment.get(MicrosoftAuth.secretEnvKey).value(or: secretError) + } +} diff --git a/Sources/Imperial/Services/Microsoft/MicrosoftCallbackBody.swift b/Sources/Imperial/Services/Microsoft/MicrosoftCallbackBody.swift new file mode 100644 index 0000000..4b6ec69 --- /dev/null +++ b/Sources/Imperial/Services/Microsoft/MicrosoftCallbackBody.swift @@ -0,0 +1,21 @@ +import Vapor + +struct MicrosoftCallbackBody: Content { + let code: String + let clientId: String + let clientSecret: String + let redirectURI: String + let scope: String + let grantType: String = "authorization_code" + + static var defaultContentType: MediaType = .urlEncodedForm + + enum CodingKeys: String, CodingKey { + case code = "code" + case clientId = "client_id" + case clientSecret = "client_secret" + case redirectURI = "redirect_uri" + case grantType = "grant_type" + case scope = "scope" + } +} diff --git a/Sources/Imperial/Services/Microsoft/MicrosoftRouter.swift b/Sources/Imperial/Services/Microsoft/MicrosoftRouter.swift new file mode 100644 index 0000000..04426c6 --- /dev/null +++ b/Sources/Imperial/Services/Microsoft/MicrosoftRouter.swift @@ -0,0 +1,78 @@ +import Vapor +import Foundation + +public class MicrosoftRouter: FederatedServiceRouter { + public let tokens: FederatedServiceTokens + public let callbackCompletion: (Request, String)throws -> (Future) + public var scope: [String] = [] + public let callbackURL: String + public let accessTokenURL: String = "https://login.microsoftonline.com/common/oauth2/v2.0/token" + + public required init( + callback: String, + completion: @escaping (Request, String) throws -> (Future) + ) throws { + self.tokens = try MicrosoftAuth() + self.callbackURL = callback + self.callbackCompletion = completion + } + + public func authURL(_ request: Request) throws -> String { + return "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?" + + "client_id=\(self.tokens.clientID)&" + + "response_type=code&" + + "redirect_uri=\(self.callbackURL)&" + + "response_mode=query&" + + "scope=\(scope.joined(separator: "%20"))&" + + "prompt=consent" + } + + public func fetchToken(from request: Request)throws -> Future { + let code: String + + if let queryCode: String = try request.query.get(at: "code") { + code = queryCode + } else if let error: String = try request.query.get(at: "error_description") { + throw Abort(.badRequest, reason: error) + } else { + throw Abort(.badRequest, reason: "Missing 'code' key in URL query") + } + + let body = MicrosoftCallbackBody( + code: code, + clientId: self.tokens.clientID, + clientSecret: self.tokens.clientSecret, + redirectURI: self.callbackURL, + scope: scope.joined(separator: "%20") + ) + + return try body.encode(using: request).flatMap(to: Response.self) { request in + guard let url = URL(string: self.accessTokenURL) else { + throw Abort( + .internalServerError, + reason: "Unable to convert String '\(self.accessTokenURL)' to URL" + ) + } + + request.http.method = .POST + request.http.url = url + + return try request.make(Client.self).send(request) + }.flatMap(to: String.self) { response in + return response.content.get(String.self, at: ["access_token"]) + } + } + + public func callback(_ request: Request)throws -> Future { + return try self.fetchToken(from: request).flatMap(to: ResponseEncodable.self) { accessToken in + let session = try request.session() + + session.setAccessToken(accessToken) + try session.set("access_token_service", to: OAuthService.microsoft) + + return try self.callbackCompletion(request, accessToken) + }.flatMap(to: Response.self) { response in + return try response.encode(for: request) + } + } +} diff --git a/Sources/Imperial/Services/Microsoft/Service+Microsoft.swift b/Sources/Imperial/Services/Microsoft/Service+Microsoft.swift new file mode 100644 index 0000000..9341dee --- /dev/null +++ b/Sources/Imperial/Services/Microsoft/Service+Microsoft.swift @@ -0,0 +1,6 @@ +extension OAuthService { + public static let microsoft = OAuthService.init( + name: "microsoft", + endpoints: [:] + ) +} diff --git a/docs/Microsoft/README.md b/docs/Microsoft/README.md new file mode 100644 index 0000000..575b1bc --- /dev/null +++ b/docs/Microsoft/README.md @@ -0,0 +1,107 @@ +# Federated Login with Microsoft + +We need to start by registering an app in [Azure Active Directory admin center][1] as described in [this tutorial][2], creating a client ID and secret so Microsoft can identify us. Make sure to save the Client ID and Client secret. + +Now that we have the necessary information for Microsoft, we will setup Imperial with our application. + +Add the following line of code to your `dependencies` array in your package manifest file: + +```swift +.package(url: "https://github.com/vapor-community/Imperial.git", from: "0.14.0") +``` + +**Note:** There might be a later version of the package available, in which case you will want to use that version. + +You will also need to add the package as a dependency for the targets you will be using it in: + +```swift +.target(name: "App", dependencies: ["Vapor", "Imperial"], + exclude: [ + "Config", + "Database", + "Public", + "Resources" + ] +), +``` + +Then run `vapor update` or `swift package update`. Make sure you regenerate your Xcode project afterwards if you are using Xcode. + +Now that Imperial is installed, we need to add `SessionMiddleware` to our middleware configuration: + +```swift +public func configure( + _ config: inout Config, + _ env: inout Environment, + _ services: inout Services +) throws { + //... + + // Register middleware + var middlewares = MiddlewareConfig() // Create _empty_ middleware config + // Other Middleware... + middlewares.use(SessionsMiddleware.self) + services.register(middlewares) + + //... +} + +``` + +Now, when you run your app and you are using `FluentSQLite`, you will probably get the following error: + +``` +⚠️ [ServiceError.ambiguity: Please choose which KeyedCache you prefer, multiple are available: MemoryKeyedCache, FluentCache.] [Suggested fixes: `config.prefer(MemoryKeyedCache.self, for: KeyedCache.self)`. `config.prefer(FluentCache.self, for: KeyedCache.self)`.] +``` + +Just pick one of the listed suggestions and place it at the top of your `configure` function. If you want your data to persist across server reboots, use `config.prefer(FluentCache.self, for: KeyedCache.self)` + +Imperial uses environment variables to access the client ID and secret to authenticate with Microsoft. To allow Imperial to access these tokens, you will create these variables, called `MICROSOFT_CLIENT_ID` and `MICROSOFT_CLIENT_SECRET`, with the client ID and secret assigned to them. Imperial can then access these vars and use there values to authenticate with Microsoft. + +Now, all we need to do is register the Microsoft service in your main router method, like this: + +```swift +try router.oAuth(from: Microsoft.self, authenticate: "microsoft", callback: "http://localhost:8080/microsoft-complete") { (request, token) in + print(token) + return Future(request.redirect(to: "/")) +} +``` + +If you just want to redirect, without doing anything else in the callback, you can use the helper `Route.oAuth` method that takes in a redirect string: + +```swift +try router.oAuth(from: Microsoft.self, authenticate: "microsoft", callback: "http://localhost:8080/microsoft-complete", redirect: "/") +``` + +The `callback` argument is the path you will go to when you want to authenticate the user. The `callback` argument has to be the same path that you entered as `Redirect URI`when you registered your application on Microsoft Azure Active Directory admin center: + +![The callback path for Microsoft OAuth](https://github.com/vapor-community/Imperial/blob/master/docs/Microsoft/callback-uri.png?raw=true) + +The completion handler is fired when the callback route is called by the OAuth provider. The access token is passed in and a response is returned. + +If you ever want to get the `access_token` in a route, you can use a helper method for the `Request` type that comes with Imperial: + +```swift +let token = try request.accessToken() +``` + +Now that you are authenticating the user, you will want to protect certain routes to make sure the user is authenticated. You can do this by adding the `ImperialMiddleware` to a router group (or maybe your middleware config): + +```swift +let protected = router.grouped(ImperialMiddleware()) +``` + +Then, add your protected routes to the `protected` group: + +```swift +protected.get("me", handler: me) +``` + +The `ImperialMiddleware` by default passes the errors it finds onto `ErrorMiddleware` where they are caught, but you can initialize it with a redirect path to go to if the user is not authenticated: + +```swift +let protected = router.grouped(ImperialMiddleware(redirect: "/")) +``` + +[1]: https://aad.portal.azure.com/ +[2]: https://docs.microsoft.com/en-us/graph/tutorials/php?tutorial-step=2 diff --git a/docs/Microsoft/callback-uri.png b/docs/Microsoft/callback-uri.png new file mode 100644 index 0000000000000000000000000000000000000000..35f5a7442527e90b25cc6362692cedb89c248474 GIT binary patch literal 63480 zcmeFZXIK;M);0__6ckiILt^iUHO=}kns6zM(mP=nGt(tD8J z0-=Xc-^soAe#-Yf?{oY8`2Ou2$1syA*Ict^m2;hIg&-9r*&C$yNQsDuZoGN@QjLg+ zq>hM)IQZ%nU{4CO6bBK}bvY|(X_Yt9(hpReAQo1(=0rrVgQB%bbksZUB!kr+mJ?l2 zdjUzidVx6O(=R5?ya#L#uRZ>Hlk#IQy{^{Jijb>0>@{q2X*R@Wg*i3`RO};{sj1Bk zTw44)6RCa;Yonkj$mWTt^AhNZ^KvgyszFoqYbRBDqMhc;169QjS~I?CTv>hijF?!3 zi1xRBvO;5USlA^M|08(k`Z|&7p0+-f{!I9}cK;%onFP^iok0FWK0}7)W8xnn9=ENC ziC!`ff%~3*e(G?q`AF^VgXY_pd(~!vKPt0wnTjv&)6E$WeHN_Nx4J{5*Q3(+biw>N zLm_#fL5p|fT_QWa<}-v;o=UW-#&uyq_GvM5bNyWC%H6>I2QcfUh7dys^Eq>fI(UuYxxnQCmDBV)sA8G9)llAoLMPB`fD+;Q_EYBsOCC~2MMl2OX zF158>pH*N@%uJsA5zThWhEeWxzO8G0M*jUhfAe|X>$uO?d8vs)^`6QF`|FUI_~<#)`a@g|usZn5Zvv6FqeHk)_! zR@_71{6yxaFllo^^FxLYwrUG1T;9(e0@vx}#gRiucj6WM1 znH(a6=gPbwrg{DR&P^hk3X69#rA{xer);NQJ-HT1)b780nN{|3>diF}xs9eW&F9?v zoEp9D#1RjAFW!1Ua~8vH85B_e5%Tpy5jYOC!2@*T?*i~b{*+xAM7)bb6%Pe@%}oT<3B z(i&NWPCi$nkhqHT#eAj}ZdQCxCPjW^JWKqmjAW>E*pc1I@+46rfd4RU$yz*^{c>h# z>Ls=NsN~$mj78q=w49aLebtr(UVY7jt@hEgaigJlisL{8XGzPL6h^@9zIX_IV*=4d z@nAtyn&Ku>i8_A6Iz!FvviRMW#Qnk_1n^5$bjhJ z{F>1&IK}nA+(G>5rQZtF%3Pcps}3!`M9_U(cqK zxajj+@b0slpFaJ%DP|I?^Pn=2f6kxh7X0z0pqF!>sUFjJyl4)*AMeZYqBBzSHFYU% zt~Bg9Ia6C?*=unp%GDR1pJUs-sH6o|eTJ@ANVlabeD#w_y|zLnK$aAK=lhctzVh3J zub|()a9aC2Z>wDvxD0nhiY}CGarQKShm^SY0v?1re9aHE?Iu0_#hqkvYn~> z!PnbtS0}HMT+RMHIi%>W`1tmXpo5p(heBC5%Yw>+we1duXL5h<*dHzXSk?e$*Ixs%3~D#kf3Prx-dgXMOhWAaz66wSMk8sNL>S2Y2XFG1^Do?8y2m9vW#c}*b$YezR>7^0x8!96 zLaQX^!unsQKYR2+HNM|I-9`o*M%((ZRkW2oEHMZW5LV|hPX8rj86TM_$4vv9frTP%RpA+*WlM~ z64s&`l70Q+m5|7;9J6m`d%6jF{@_kdVQ{4`xz0HFi5@k0qq4?EvBE;nQV&sLU$I$M zQXEtoZ>kP)?us$#DyN<(DwDK3ZtX>LjcXkyWe&rJocLk3kAz}^@_n)mP6x%x(jtbt9_`9zv7;5=S-*y>kAm@aQSiVa~Y)H zkd+PRVwe^!&HT5vYpr(oM`xeo0(TD4>BIBs*|FI}Wk1W>x?0(%^IO-isHf0&>32%ZD{hhR zBx8NrkCP&@l|S?urZjjPcsqMTkECcJAVVJ5`XLES3#Q-D14}x)e(rM4cq)F8<6;$Y z1u^bo;YIw1$qS5S_jSh$3<{Q?7d;=}#R89S2F9lh>N<^(y(l z3Vt2^Lh(ctj~ll&UYor&%iaWW=oXPsqR)nW9Q{;HsU-7Grdd|w)l`H_@K>42m)}(> z)3ju#gDS)B$O^Z-zpK=}7FSzxP%>x=PkR0Bu6T*(TzXZBqw}0n+u(e53pNybOzUws|;CMTyTHytwp5;fbI=$N)* zu*$R=%^p*Z7hS|?MCDeiQz#E6w>e!QhjOvpmdGHtv*uD1M?=A|u4E&Tv0t%v^Bv6~L$d%&NGB|cGOA3{l1Eq+3S|)G zmc*v&D1Un-6%R=U@i!REaj-_aDBG;V|=*Q4x1 z!|YD$kFXnw-9ph2&-3(^w(uU~L^_)dYxc^UNGf}eazU&0)s#5UupR%n7HVVOZTp~? z-cej>#AA4PLtwhPj-fDi6o-+UbX{HkosvkWe@_T2G-ZGy!9-#`j^vNHM{zP3yXm&6 z(c&35cn|T>hfP>F#6N=1L>H6JPNw|hOkeb84K;d z`_s}-+a9-hMp)9re~A_D9|XN&DN6q4Ub>;toXg+fcjh)Hu)f#N53?js+86cOy1%PG z=+U|8RO9chN4{E{vw0OUP&kH8dcFI&EKk-_?e=WQ5;fTVBK4^p8#;SPZdM zk#6Z_zBAhk7MndZNK(j+DMN<`<;vd6Rr&FXk-w*s{ktVEOo*^kn_TOa^L` zW`M?*JNC@(1b3i4Z&-2Ab}-|Wg!BBZI1ZjiilcdFl3*z(XWKtQDKaRc8Rfut*Wp{l~Tp@l&FUf9=0OL=<2}bm^bxC;@B2=QFSnuKCCM;un7+65!iy zU~x~q@UOE;>QXQMYnwP2I7akbUHZ)%V6ATIWNvQn{0`z`@r$h#*m2F_wXQP}(VZuR zh4_uy<1JwPQ7a7{7ac_fF;j>gm$4bd#GK3B&Veuvk%YS#uxV%RV*J3}&eq;p%w3Y{ zuQSAeZNhGDrU!qW;$kDoq@$?vKpNs?{y>mRfQyGoiuA#Q2NF(Z7Gi2IW&U|N@J*8G zor{Zu7&kW*3gv?Gb3vRexp_rJMY(zSxcT@vfipOrJ?veK-8t=@AN^yHe~t6f+}YI0 z%E847V*h|JuCWQk)kTttiEyL;`21s@=I&Pic_(}4e?AuQfZT*5+`L>o-2X8)aH#}g zub7IJySc5-ODj7-X23n9ctu5cB>uYK|8?j;Z~2c)HJ#0!q#<^|l`c~MDfNF|{9h0L zKQH|2p1S{ePkvE>|9Z>+a^#;^N^lb%{lAFfA9DU{FCb_sQVH(=cxh6k)Pe!jzNp5=k8AtBT5yZyFy1I8@W# zUy4o*e5(D7xc)VdepN7OaBvXGt4pdcf8?8W+`e>Cj_1SGokv%5%pN~-BLDb);TyT} z`MzM0#YV#Bv@tfGzihd1IeryAtvRd-$<(Z1>mCYXe*1uk`06vF3pd{rUHV@)DL?(F z$DtGbT$riQl#g4kGXL+V|7$$6ODgVBxBl0W|8?rKw=Zr#o0WVR74}T}4<-a$Mhe;a zn_2&BY=zesp4PFLmEL;yM-O}R*{mYN-$~>jV}H2zhR6^1NkQnsjXx9Q)4Gm}|C-kS zE_j}Y*HX8VKX=HaKK!$njg922me2NH&p0_KNH-|xX*wxDYu(F`t@h>d*7HS@vmw9&0HwI5Rqc9#oJ!G_xF}S zxH+KIB>z_G|Fn>QEA@ZZhJP#de>c(pkDj{CxU_z&k!&{JGP&c0(5Sw%pRQ$+>wW(( z51#*tgNrKx475+@%+Kij4A;QuHfe{%OgpyG(@5bvl-09Y!ITdw`B{l{ag=>}bw~FxN5jdEamBC}+4aNZd0vE1Y9dbFAyP*^#^b}ktYahrA>b!eg1 zHoK}Mwwh6lDeW3*EEzTQ@(bard0OT*q$=yDsim9QHEorhbcY;tvQ=bxAdRz=kjRYt5dHHk=6-Akm(~m(p&q z%2ecec5xyL%;Dvn`)cl>tsfVSzx&1G5=RQ~ik(@q#w+{reE$^4v>V8J&zI^ezZ*HWP=n#t98~DsFGnS93}na| zn3u@HXX!@P>~CKJBzv3>8nf-zV#jAm{~$&VJ>p@dMl*zcEre;}+;tW=qSKz%`B?9x zQf`q#7}EeX&$hYHqOL4Sy_D=_5AoydseQNg2Wo$MD{hYzGV6u)nxX3zUH%rD(Yu3o z9W^*kpUAeMLT?cDzVpKYFJ#7*9B&?LaA(BOYono-tlJKQT*rEj);8K0?k4bM z<9B5lJRYCyBj7zJzjXT$J{vYop6i9Nr&jV11Qn;=Y@y}~h2)+}9Po;oV!-ya7D=un zQ&<{9_lGAtu?^QrvrkSD=SK)0pQAn7V>dr-x$z$18426Uaf@oY+Wwe1fYXT9_O}|$ z@{86s6fLNnu%4yIy36XA1U>22>syz^O+_Uc`83@S{H! zBN+P)z^rVl4km2);Rj=;5j?JILm0ztL#K`>&gayv+VyLicx+xGZQ+*Ip_Y-)J_ou6 zG#|>}NFudGJiXMKZO840teghzcJnvwj~bCn>RD06UmnH#+y+ti&uq;KyL0$W)Bak+%$c9knp)UW)r%5XU=h16NHQ zo5G5kkGit6J_B!9E-TjYz-uG|K`tXF^AVtAsU_jRN4L!MAKoCg?hqB`2`!q8)1uW- z_I2B>2Eo>>49kFsi!3{z!;c128YgGY4sOM-20jYEnsPj~T$9{I!TRPL(7DAv8ohVl zr}|*jXe|8vSoUdYeIq!(2MIV72f#fq&5VY9#Z~T17~XgIL0rv*PF_6%&J#}*_T)otNu)x3}N33 zDRA|~XG+YUjyd;9iaU0lOffo!Mlp-g*;g5#h0^_fDyU#_VY_`X{LJF^r<{WO_tN=G zE25F1y`xflzod7otmqt)cdCSRO zn_M=1k~n=G`|8D=;qHdh4M>G>Zz7`TOZlfG#MYjY z$;8Z*cN($d)CX<+kcT#c$k3hmUa_{ncPT^{7BAWQ;Z)e`y3)^g=#t7#0N*X4u0u0! z;6CfOyOA;9xm~{*uV)GFwPncBIR96bKMH*{e z{@g)ig!kj8Jp+Z^JqCcMWM(d?KbVNuv?GDzrlA1<92oxQoaB? z;Ah}A{^aLQr*cwK-S3ZN78HiKno&OhFRn+&b|e{TqI!fT&GM_vU**@&;7~a8N&rrD zIV{CnGIQ0!t*N&oV0-Bp;|5YlQd505UzZE~H>g2N*F4%`P*K>t!5*+_%+w}Rh+`s7 ze>;yFa8+mS78|SCDdd2MSKfSVUu{s8CyG>Y;8!5U%5zmeZZ2FSGr@PJ8MHqb|Wm%`8uKj7R!&w2w(mg;JyU?Tnb9&PloJs zk#t%Dc)&^rh?%uh$Bbx1n&y6I_RKLFR~NNa-RHwKsRkd`)ZXyyrT7E8cDoSuVwUsC zBEe%z6cXae)=vr;&o}2@(Q*Dly_g-RpeHfy8)H2Y@RRvs;5jGzCbS#w>9e=Pw|p7R z>?@qW;2<2IA?rj$<7B|YQ*^o2pq#c#w%gzgbjndy$2vE&k=F9ttxB}#I;NtxLTWW5 zN-aOSfh2be?J}rX)3QI|E z%f4d>TTK)rGmN4qm)Ls7_z7c(cRxSHaZ6ajKAAK8y@|fPeKYPWDI{~9zfXb^eX=CH z4EBVSwA`5$Zou~hJ_hX%sW%ZE5vH1Ie!`+AyuW$|2y{sPd~r;%bkTLG#jom(K!hG0 z3<20baS*hY(GN$5-tt$7G}_~3eOLbx4p=rvsn(%_9N4bjXQzXOgtf+8fc05JV#0H_ zI?!%>->39&F*dS~z3S%+EFfKWk+V=YyU`+-gDkl>K0s#XN3Esv5Xxk}AKP%Uc!F%m z-RZ&@I`;_9{`RHV)O&7^O=#|!a`=1u{lRlPuACI|WNBF2h#tL{CA_%mIboH($R4vX zyBKT4K*$R)*}aw{qCJW|fS0ArXpV`z?G1Ql%&MQ(dwE_iKq(<`E+lGqNL|^ldN~=4 ztmq-2`IGLo?c&U8ZDuS0(PzbH@JiwTwkZ_oRBPJn*sYafw znH!d{!g+0bQFPAxWQWFU&u4~vFIkiupelR*z^lIHql_B@9;8ld&iYAVXm1H>e*|1M z+%@idsBEcibGbO)GQ~%zo44)$LD|SKB&29JrB7_VKn)52r-JeUxmiG|y(}!tsn9$6 zVCW2>ZsSlFt!mbTG7`ZvNg#3=cYbB9RxHtT_<4DE#?}5xbt9PaPUW=QB&JMG-mYE> z$hY^exAwsf%C-oewM;#$9Fd+e62CH+{f3Iqd{w^<(e1mCqP5U4PmjH-o~_h_erK~g z4V{rJX;J&Os`g}%``MZ@AfVvgw|3=nvfoCTdAK)Fw&0{YoZP+g5 zQv~MCnjh^t=?{tsH)h$cT0=c7s+sr~rc*yk7etuU!9CqJx<@;Ym!NEEJ$=pSN1U{r-`}*J01yTO*S?i?r zbtN>GxZ!wtmMoJ4WCwHNUMN_?OAN^_thzm6eh!FX)02_9+yJ}LM#!P?vlQ?#d^3xb zaYX65Ja_$25Gi&lA_ucM<%63xaNB!SM84S^-BB&+_k^uZb}YowdD)Etfbd1QBfIUG zdc&oobwuArr=rFZbWUs8Pl>DQ_s3oWcnzOh=>hnZ@kLn;cPQ1&P&4PCIOud$d9W=h z!Utnoee8aA5QtM`Y`#WT4G$i~HJqO+Y1l?=$(%%UhelVihrW{0?@r$Iiq8q`-RSHS z`JUG0$=yHz%SzvD`#k_MqjqX6A}6%(uULWM)&2ub(7S+}a#ogw^9McCSi2Fnoo|=dyD3AhvD-kCU7~%xj6i;I(JK}z__fALZZdUr7Xvi`U%DLF9`$wk4AYd8Gci6h!-f?U9?Lq7HmOEe$ zBzRfIs-&GM#6?%rlg%eq&pJ1?90iazjRb<{hMt|ZM%SObRm`-;FGFnR>O(w zPt+KO<-8WdxV>k|#$$FTe4cf~fS|h!#F~VCgJ;c;3m$NfYUOx+}ZmP0NGJw z*GeI=^#kJ#>ALAC=rRT*%e7z82VC{2<7q58Kw=mkiMTIr2F9Ly{1sX`03pWn=|{+b zXHVN7MVJK}vTCfy0o+f(xJ6=Nm$kkogWHs2n*!_PJ`?_-pIhFR))fwQYoz8HA;q0d zXFPp}()73;dJ8m9dd6`AgreO*sOK;FHwFvOCTrN~dkzaHyzu6v5NB<-!il{4Zu-8z zXM%WaFDcAQx_}dm0Ez&A&<8MXx`j_pRNutc23?yD>Kx~SPV5{J$OINP`&vv#(HQ~7 zxt4Q6$4AC?FaRdOa@1lrV9WVkyCsyOEG_MB0FF+KeW;(BEQo)W`Y#0z}>J3s0xR|tCKy9 z0oGG{xuC3<4^j2^+}+y&%DWSsJ?S4Eh7`I5XNzh#J1cod-InD!N?rzbZt|FSe&rcd z;2%EP^reux3mmRV+OXTONm(4vV=8v zN8538!D9?PSCeg%0o~sMkkF$^2H4NbG}pIJwq<58)Lexo4I7n{r2=4={#Q-F)5Y4+ zp}TrQy|cHJlEeg0j%Uuv^;8kmTN4xd#(xm_2ne;98ZC{?#Ivg|kpI1dC4hGSNT70K zte`n}=?@sPX8;@mN{rWT$3Ojh*#acsT^WFE4B*uaqWpUz;Q`TyH_w1l;N#b3X;=Sf zE_Z?Q9z(0f6Q%#omH%IE#Y_yaWKjW0(7VYvs?Muf*kC13f$7Ki@QOhpl+v=P&S~C?NDb{59|7I`{~tC zz7M(T+5S;VVyxW)g9^p~wM7AB$)iu6wd{-FQqUF=`uy=ge4lUTZZCLPn_Uk3Zg*;52Qai z0Q^FLG`Z+weUHWH*?w8Z8-Fp5Qn>2A8+KfuH>K@*fdTJJ9gp{s+ex%BnKX^S!Y=cp zh(Gi*^SF>=cYDRT^?mk-!>W8%q!~M@K6_#7p<_VK+DIS{9OlD>g?3B@H~{8lhGOle zU1KU}_Zl~9>*A5273Ev3NE zZejO-Z`NYTv%fjX9c-$n9BJg%zi5-dFm2@BCR=n=)e!@1gcG zx&3^}#hyZi(K}`gJoc@ZKm3(ocyG7N5@4bTkQ%qWisQIR$Vqg7y=5r@jIhJ1O%8>O z;(If+j-2_~7B6)Um)>4;5lbpw%gevQdUIGQ38*Uhp8j~eWj8jl4&-@V1mc36fauGJ zQ-Nxkvwo%tcf7U!<*z>!^ezziVfVw?0Gs{!E5xe+2&KTnaJBphLJCJfYtP-qrB6ig z3sJsiWjBPUcnSc>W_r)xGTDRqHF|sgS{?}_{A8Q=1_>h_<0Y9#px6B(0Gc+tr2#$w z(k4&@rnuv_N3-?Rb#;(w9gZ{d*v72=n*A$EYk{Ji?FFF3yKf8t^+8z=Fpb*G3XvH7R?+P5b)&5#tbaT&rcl1Y%H0oO23x zyb<5K=7aSz>J#Zq#&o@_(;>rlUyllZN^a^W4TmeM)E;aOFHz)kZOch;qV!o{c7IqoR@iY-6+1l0(=;{~PUnfdN9Vt7Rol#;bz!$hQ}sBq?!1kDVg?9CN>DX2qxe+B zaB!*iPgP@4$E^YmK;0hc6z*7DOG$EB+_6Pl`)=n#2bcWGUD6A#JJN%JdD9h+$vIn_ zPExnbgNm+doUCZNF`IzWIi%(@8TCid4{+LMLl52QX) z5-U{1Ts_ZjgqK?e(qXIRy+LK}63P1!g+A%n8MtS-<}o#Nzq@n4a?&15yF%doJm_yi z@2{4E6vWbidVX%%(WbT~oW)3@(#M}G=j1N*(%eE*_?f@Vtj|KEtXm~e<0=BN78k02 zCuQ*LhZQ0BP4tA0@Z)q(zJsbhJ` zuNA*(PDQ>j88v`zOaW!+)pg!e$;d{rthe`I1qI30D?KXUly=u}u~!KKhXAQ)o->$Z zw;-^x4d_})I=M+?{JV_`GpP>08GJ7^IBl>R=uQw%D0tj59m=C=o*Szm_^7c<_~F}2 zbCszc=W75bT+%jPkvHY4Ykz1ub|rtF+?G~$-{6UQc(ke{_qf(+z>r2qRIU$9+51BM zj`ZZ1BJi%0O8Fy?Xf?NKDNcXq9bBnyu)CIgcT?)9KVqpgaH5>e12$$B$ec?Bo$t`y z0IHpe-<00fKCL5(^)?-b-O!trye`H>h4$@gYg!uo#ab6~d!-F@=7@eDU1%0ryDg-{ z`tv0mkTL|QB|O@Ct(qy&emshh_<~H)3b6YAlAGU_ z?*elfej*Zve8BlvlqQ#qXJqw2Qj7)iI~0x34=S3gogFtX9wm?2`c z)YDqR-&MxXYHa-*ZHudfH;o@|EbD@~m958a#m}3+nvK^9H99!m?CLwV2mX%56X6&( zJv+$@n?wxnG_x{O)>4NaC}+L&KZa_;-qCph9V5^ylwCnXeQ{S^f4-{}w%e83Z1w*E zM6Ot*IiW(a161rzv6;koWoXj`N;^UTT2H_-qf}D&Iw|&N=AKT4k?HrXJJCTIk6z45 zR(VUfC4G9e9fN!qOj%Tc+GZKBFMiN8N$a zQzOutK$|uoECEC>W1wAuJkhrFO&t6TFE84nnekT(1;FbnRsjinBao`o5HP~l2ofbo zKogmp!G>|CIa}n8iTzCM_%iq2*MW@+fy_Xkrs|eVM9E$d^Y_$jz9J%Uv zj39K{#78&UeDkmMM68u&bKuX^bW+#rp^V!4gx)Vf zI4ICXWo$2u&}tQ;yora~6Uu0*4M6RPn^5jsUFWcOY8Xd_xWR^nRDYiCaF4>k!TH3OD__9VMXaJEN#s|4KH-C4GCD6!ie6^BNiY{JPhW$Jho?zWPGIU3Pjijb&C8 z>ZGV*L~k6)Pqv-XNQn$51-jT2bb!Yz^BR75r0(&>$kCy!ytg2c+4pL`pRRUh=2|V# z&n5cwjI?%wESk{C)&%a^96ZSvGq4Mp_*&KDrDK&DU3%mJl+EtWYEk43r2XoLGfW`& zomKX2^psg|a83igI-_QGNfWP)XtIrM)y@jTqh~sIQHoj&DjsS+F_rYI!hlcH5>Zi1E53BNP4P<&n6L|a;FNq8NIiD>TWgb z^2LZ`Z&dUl(jQ7!zM<)mvF>}U{f4>RbIQ!DLpQI_Y~UnDQsIo%AYF}{UHr?fCzkE? z6SeMF3}ZKHtjzI7s}uRBO7lh<*f@@y;#{w>*0sk}uD7GQCLQxTwmPK9{`?M5EOgxE;Hw%GUeHjlMW9gZchfv+pmGUj?QI?G#{z z#`~V1*swW&157_2^LY6Se8}HD{XkFOEO_C!m|YTn6e60NnEa)7Sg1XxNEKyovep?g z$0Wt~#ncRSG>ov=DBm2;*7Vd#%C&q|ibzhh`a&{Tn#)J09dEv0v2zIYPg$W4>PB)& zH2gI-eSA_ptv8Yv^gGsG$rx+JtHM?H!y8%SU%3{nRSXGK%sd9Iffdb`*lIQL&rQXx zu|p|7d;PLyXE{e1xgKZuWoZdnVXuOc3l$Ifwx^cs81K-~eIk?|#+^^)&999QyN8Az z-2iIfW^O5Gy9Yz$+4Ib~KF5V8H~SKM2UM&wgrqk^T7@PSl4^W-{VbXG_}5yqbEbut z&ho^#7-qkO)k^>kSGu$VaUnZVVV4tpGNX18d5Xc;ZQRx3%7)FVJk^{SjN6; z6zUV6_g!^^BD$=2tip`KCZGlv z72yRWbB5#Y(8zO5zL!81?Zo~Od%|Rz%>*~?%X5Q8<gM!_ON%dD=$j?Dz@ zjm1!0jY7Z9H_@+CSuU!cF=0324GaiD$zooMZ4z{j?>o)EgB0A26jzPdluO@X4>vv++5d=sqh-sassti`&I7PDbw7aNblCAGn8h!ST;>BPAI&VP>8>u*hmYqdP& z`(_mm?PXMXi|p`Mf)F^t<{)uqOC>|{td z?l+vJr{2?@+N*aF@wqzFoR3#yEgUcAKy|5NSAaIQ>lmYEPN$ z0TSP&+K3AglAG7r=uIAd!82ZdKLvqPk}#Iy9958%;^k+WETm=hlG-OO;Ux+P-6(VZ z#)+b>vpJfExH8^Wx3J*!P*v^s=eyDvA)pyo4GD1n>rNv>u=~$w9o_2u2u(rvfA;f- zypV1iXr3C=w0r{sI0cU}m#m6<_L|lps_JP&VU}cf6JyB-AWcw?cZLjJi2M!}%!q#{ z;cn7JT9OFTQ!z|&lUTi$`}(&-kq>FV3U^%kJJZFC3H^hlrvklV+zQO3<<<2r%U4ro zOf7kkmavsPF@Cob+27V*2;Tj|&C5raZ(v3#I3vkhGLNH^{POa>9eYjXmziyW?jvtP zZiP?z_U9P+)UYc0NMK+oJ|UqK84Dh|XCwT(MJS zT8za_!pWZP(JPr{W_AvfRmCI+T-37n(Gm7wKKmpn>b$fJ!5MLwKjFqsV=~q(V7EL` zs?D%#tb|QB5htruPAU2Pa56(4gEg%nEf9xElY6lM>aJA+c$`#B7)JDlf%p zKtQsh2E58Z-F<-98)e=}o9PwkF+H-|aOxMA+%5IJFe*TCR7y)No+J{_$32KL$iW{IK>(CAdO?&c@?8roQrkhd>=VWyQH+W0-L4p|MUq8MS{u`}+pNb) zXX-xo9!qH41!qZdoE{Uhm1TA@A33q@>{B*fyX{mHewNVn6mHYuSr zBQ!I1Xd{HR4rNG-I1R1YUX5-Iw)vL&i#NG-%IMUi%esvd;UVq@2XeN~u5JMbc(~DWdDpuF1^lad z?bWJGpT2A_HfaGn*Up3~0YyZ4?}$$RvN`S^ zPTe!BH9#IaXNH_Q1vt1Ay*@b5iNn~3$;IBM-ox*fCYAtwy+@sM->d@O7~umO_dVY!T_FES zx7{{6#-0u3dTe~JIIf=SydICU?>@n~Wlf*kF8jAABq#1)<2W|I5RmErX z^hbl%b>9W^^b3pgnArJ80y~RXYlp4WSw^my?JGrpBP|rpQ#pMbD)#uE0)J-C)SG96 zBRZ~Oejer2XwrNicFlJOdEF9}_*>cnW~4&v8KXhjY;HbY*-38qj17`($zs12=kiuE z9{mc~(e_m!aTUNEuZ}OFo_|deX%eUKwV%6QGiCR!B)We0f+E|?tQ#2~79MH}iFe76 zJ9%TRNn~O|Z!@5dS*usE84q?nbe6xiMziT!DtKsb4z2PI4#D(2zVi1&-GDBO0(D01 z_=UbFE*|sotP-TYnEb(XVne#m{mv<}880JC+u4(&jrJAb)<4$oQa=5vJgjdb%VU8Uy2vHvIh+J zBO8s4M+J*CI(Ua})UI9P-CNB%v9f(a)OERiuIvp%!@H4CJ9I6K(TVlB&WoV)hk%=2M{ma^`>=*+|c zK0&+AhGDn~X3{MBB3THU6(P*Kgcx|~nsM^$*%y?tN0Ak69(cK2vxW`k+BhxL*8w+8 z$T9-Ktoc475E{y(g>6(>hOM23({4qaUc>mj8E=UK)Zp;ftQaXP7(FL#sbWoY^d%1i zyOXb2PAL>;$stt-qoLFn5aA~mT8LbGjrvp&1Os**$g|ho*;Y1ZJ6D=PTjv*wd0|Rq zS&A|?6I`+#vRgYp45ygye;cOGJx-fJNtV|b;X5W&qaIDP7h5ZbA|}|9I=IGrm@{Hn z>k173OsMrT>myr!z4yPZ+v*`ZSy>oE|#G+ox;|8j{KDD|!wdw#jX*4LTLV zmjrd|kJ@X(0&6drzcG<(@7Hi&m;N$ec>TD8P4~gsZr_^AK7Q@4VkZwM8u{cncN%#X zj6U580AY6W6w$epG=l*JhO~VI&$Yb)o1hpGUx(`$FyZB${K6m}en`7Fg*%z3>{fY~ zDc@LmySm&rUZ!;{AE#!RvARq9`<|L~Gg;(29-|RA#t!2r>T6sh{HjxI^mD&O+bvRn zsWQa6I=!ZRvVM8ZkbBUkS=DZw_6sMr|Mnw3?vq}Ryq=oV3$imu34el*@hx363n_5~b;(}e2K+rWaYCQ`Y|Du@{X$sB^*qXu(B#BPX0bG;hJ^NL&*gXD%twf$dIA1miBQ`*ae8 zM=ER^WNZmFRDyO!dWjpV^G)qBwG@)u-m&K=D~d#Z$a&MS9MVcL2WFAZU^Wid-vz(q z$M##buO>Jy^$;3brwsb#q#&a+lSmoqSC5;Jj}A!_`98dQK>Z zzUTH=D{CVw%NwYz`!J&4@ z4JTd8pHu9hxCXVfxa}w#Z;yU2-q+M=OGPVrLH7^B%1zTgXc$S=eR%=PRY(AX*1_1h z5iz{@wN8r!e}h%Cnb*}_%G?53^gdlSPKXcjRrINs)6>0I#pzj(v#gjRj<4lg=8}J8 zMRNSO{oC%x^N+=dwt8guLlSfQT2fF}Bb!3ci7?Nz7+*yCu_4za-WX{yC zlq%y@>kgO=e)wGc#^)TxZ5dZHv6TUV!UZEuz*XV+qSqKg63vQTJ|-^QRgYmS)Cll0 zU3`X3s8mKX!m*Rm_mHD(@#!TWI@*G1?|P>h^f8qg{&Y2!St#G?;HVY zSqM;_LD@cum$Vrixt<3~=Na>W)?Xp#gv3OP&m8PMa@L6t1b%hOLC-oAMYT?yS(_!?@dD&^Y~E73^Pb5GCpxk(>rg+mz5G|UE1jSk(-^Im+Bf1 z{E}x8U-@pdj;re&|6LQahI}WOBb;Zc8IXJbDGa?A1V{^C82rs!wj(eCZNdsPaaZ%Px`I`?Vc6OGh)NH?_4mNMj|- zU_o;{D`#HAwEHeJr2qO~0BC|sQa9$Z9$g;`YV%)M)SoRr^R3G1sc?I(4N|&?EbW`N zQcGY=R};gF?0*4=H8coCBN7%Ko+qUp=an)GOWC`+UO@F~d0MHt0l)pG81Jy|4uxMGs@i&KgR?24i2uNLiE$ANd6*ex- zbN&>8J<0&O?Yv}D;E=Pk@nxeCn+&&s=qa@{@Ci8xmpmmYJPdT9h|8dEajq?Re&}F- zR$(5ZX_i2&VP-4i-rqR^{7WPY7`fc6-5Iq(#l4Kz4|TG(Vs-{kSk>I3TUdRHKFI90 zQIONwT(e*ewH=8_NxUy7+l!f0gwS;F<{5Tx) zV83_AOzgMqW@nLM>b6@36(1UQQzyyNi|ctqr$7Z9=mO5-oHg9@IZD1hgJcLjV*9@J>nhYf>V1#j#evKxuN~Q0)TO;PF5`PN zJ4}W;kSufovLDMVtFhzN6);Tu?!Yu96$9u^JC-dKsyO)4e!_paOe3xf#c5uV8H=Fs zIUDY58_MYwB>sg61l&h%!-3c5{rr=?)tIahwAc4(ilK7ObFK3r!Vd_FlwD};Sj?wR z(kv6;fDUPj83N5;I(ZwkAa={Cpn2E`_p3P>IcCJgPy5{bFXbV z&ezx$VcY=Voje(PX<=`o?U>(5k@fDbogcE%#FSibI3@x3T^pziX>D}03QuT28JYIE z*d;<2D)TVy;Rx+kFHkz06lxkr3Za`$HjYe)|^^5yA>u z%}NQaIC{o2w)5f+8Yyj9WItekEL0qJ9nGFF z!mWBpG7ZOOZrMLd$(HCcv+t|x4yQr{mz@QF&4Ovug72r+*;3x`)S{7(w{d%XQHa;v zRW06o_%Vg1UwU3ag(A0+Wr%!#e=upHkC9tl$udf6f8!G~SEdYQesqzTVMY;cdE?}c zR)0lqc+OLDMe`vhP+qd2raL3_XMObre605WVeGx**?#~1|Gv9RRTr(@NlT5Ity%R} ztr|5VW>gimi$=_7tE#1FYg5#ykq|pUB2kLkHDV+rMePwgl1Ths-sgPIcb#*7=N~sW zx43zEUDxBfp4apFeB7@W#s>#6RZ*m~opVu36=nBNd3xbQN;^3#&R&7Uq;!d}hZkZoKw#&0CD+zhqDEHz%0pR6kz0Y`C zVlciWyk?K6bmF`(@oW_jyAg(PG*?`` z$hI(Jp-=a}iL45l#T=B5=qRXknQlsd+iKy?*twtvIxt??q-j2mn zY~ZqF|DG%j&>u`_u2I@gFLD_LsDyC_$)&EEU@ni?`Jq zkJ3>JtsRH6H>7)ti~iZkaYfrjv~Qs6PWgs5lT+bvrUF+y&$ET?6#0JSD39s%$Hk{h zxp=E8-@Gg|%Ja7C=ggKzo<(iN$|>%&dB{S0G>FS6%RcH)zjELspA{#Cv23J~aQeUj zPd+`(WjL(5VnwN%s;tFC=OAdrAE*gXqF9URc!|$xsU!FOqv#{r8BY%0eKRo&SYnq@QG2ES@5!+aNYR%AKA$!p@kx!2YNn_J`OB<_Mvx8 z*GjA{!1y3gfTgU@nG;(uCE*E>7E^2npFq|!Xw&=?tFFf*-KF|ik@_s(E8TV#>IsHw z{sZh-Y4NaBCLmCaTflA%*vi^diS>ppOpTrj|N2;w1qmcXMsUb1^znG52zn>yCB)HE zyz&~MN(uT0DIQoTDGYKd@!UHG#L@D{do8n8lY|ubQB|76r&mUdS>H6r`o`3|dU6&l zuj9zG@1h!!E{0DB=mza|NWSG^zKuJi1TcnqK9DMoZ`V4NLD^FC`n2O-s zZ_LN?ku>p>R;`VyXGqhwEv1N!a0=w>gFu^*zQcWMPfhB!o*=B~^P|J_CJ%MOHhGX; zbx7<1Z9u|JuXf=h^=sh*Jq8&caLMAX)jDtO8#HQ#|Q@-ycZx2z&F7LRvg*m31u%C&0c z_n&$-p!ncSt*4NMmZQai-ue%TO2laA5Dw^k)Q3JJ9}xa#zoK-fT`%+zu+5@h^#2X~ z-jY*vUx_CJ<2!~lRQ`*EY14IB@9Csg;pNmkJ3fwriMQF;?2wHmG)$MDulrm&TE~-J zwVp;AaO5&hbR~6fHbESUkSoiH_D8P&v!}XMJRG@GIHe*R_Uutpdkrz_q0&}w%F0LC%@F#F;sawb=Z*vQhkxTjvEGuh7T0ef|Foe4eUjaW>Jv#{sNsIPwy-#?@M{so8m-P{aKk{TJck{BsglPFlc%`FX72N zJuj@~4m89qMD5Siy!etoq2h_4_%3sty4e zPi5{p`vju<@eby^F5|nxwL0%h_DXF!y41CvVv3}cyJvsL(1>YTvOtzIzN`BAx6LB4 zuobmjp#O>5(P!aXHy>Hoa+act4a$QTW>$v8FMm|DR?Sg7&K&#up0uz1W^qv?Iji3j zSM-lXEW-{wokH^$ zyE?PrCU*(r>8X?z$owysZHB*5b{zozgU`|CWI zK~^3s#$W3Q=hVvXLgxuN%D0_9a!_kS1z292k$PDj5HyyyQTXAkK>DE!FKr7xF9y*# zQ|ciV4JQ?^DsNhzI=5SFs5ZnK9EwFX1{Xj5iJp5RY-sc>XJrd%k2~%F=eHy0CGHeS zK6F~eFvUI7`^y+RzxiG}O*M=rR~v8PXXnW}C5ym-x+cy-04I# z_Gxqlx+SbCSe1)l0;CZOvafir1om9J6yvK zc|EZ}{V=BsD)gP;Lx{yx8ZV#&^&D1iL@{G3`q249dY$Y8_*~ss}k6O-<=$`disw&t?#S%!g@NDmjID-CTOZU zYhwY3o29aXGo6-#fFmev%@yoldaP7FGh%7l^2cC`vPl3Yv2=bqJLfsm<)7_1kvPI3 z*U{t6s#ygB++bDwbtiNpci4~gHY-jlgSg;^rScOQMQQ{=4Z9tsG(f__Ogk_jVVgY( z+el$M5{PqtCB@3?{SRq0(-#ltO8AECRj0N>4xvYruj6Pimx%PNx}XS*Ma;QWjWC}h zT(nDad_BOa_KwB4ib(Os0Ug9I1ZPwtm}31cRnjP0xTqiT);J?`AOYlDA>r^t&>(~H zIZZMGv*=#-U?#yTU@A-1&~0G;yjDOVu~+%$+@xnCE&SJF`qll0q(C`;*8^4(#!T;7h|5b$!FS2_wO9UX?j!SB*rY6=R=nJ( zYXyR{h_!Jc$DU#^yyC6a(xMH-^h-VAdSwnZQrP!?x4y!PqC&3_@yr^=;OmgZ9}>J9 zhDzv;3QH{4?pKT}Snl+uI#lfxmbvmf@X-d0*{CyHXpvBceG+xksAcHbzl6%%nQ?h) z9k4?@9CPB<@0UB}u&kuON^`}>k7+MT;`u4?Aez;d8KIquo*P8(3>EFRAI>p7!GR?b z*a_JP)mCFgDN?NAcvURvZ!pkUsJHnjJ*cw)+#8zij}qJBYI+95Q0+48L0Qm&Y~86J z#22(N<6pHM=pid6@O+bD>*yh78YsVg( z%Cs^|byI&%x42kvhxx4JIEOoaDEZ6^T1!SqZ!ZnvV{^*JkAau~?%j>aMv=Rk`zHCb2 zLWSnRN{Ni#0k{^U7YN*)QH~f%Ez7W)#X_#q;`47B$+SxafK;nDwFYKN-OYzm)uybb zvM8#z_&xJ(v6zYDr$t~RV1sC(?g5ojEngj>>!NT9h`hIq? z?$!2WXM;f*Q}~9P_aFQRSO&AOaM#U2fTxyPQ{5KafC1>RH1Pg`x!`J zW1kH}*Y(ks3*)*5{F_l7xSDLiPj3HRKVc1mupSTq1Oa+2P$U!Nzvp|z?I5WjC6o&^ z+iJH5GVvSj*#Zz8qg+7pZmC#EPr4+o zTHiWq&R8tW=AW7#LxSLxuNRC)*euJ|toC;M^$_~_cc&4NzE^`%8?gqdF^yR8{1*KL zkl+Rr-?h7a`nBNlD6xy;n^hF*9!^1YUOAsAAp4vpjqie&wj1za-&_Q}nIB~u#f%P_ z1dw4bsw**5_8BF^T_v8MN?u8sL71`W86(o#_WBNtEPok2DUqEdkF;Y&-pF$KNg+Mi z8{ZD_*B?x)I9y?rS@nE&KH`#6anb5{|D87i>7S6euibYNT>T%HR4U`V|NonFVp6Z+2&KHYEH$+lSV!D3G19ZxGTQ#Z;#LQt<50^R&GB(pnV> zzpg;Z%)0ew-P>9$#a{Qo;jM1_;BOHa@C&VXOb`ccsM4`(*b$b&EG;yYdGb38#2_0B zAP|04s$FXd_5#0~Tn-eTu^X2bXqd20+Pz9n5wVX86rBqt|6e*(mJ??nekLTIareG@ z#5@)4dNmB$Zfdmyun}5s7=zjroMlUrNrQg%mK$!oU3TP<$IEP@w-1(RVKY^#UYReS zxGKnN3tfC~sA?|Oc6b{&1m3;?>(AHn18nb41AD}J|KK{kf)mwbA0EFuy@KU&op>Ng zr2~Sj_>%CgpuGQaMD>|^W|Oo15PB_V?Q`fu=p#48zX!DyTk<>)iL{EKJC28<97i4( zWexw~qX_0HE7z|TL?DaU@U`5~eiYEP1o20%g}2wGq>$xZPNqfO3Cae3>}Kc6dROESAH=il{}&B0PXSU<(g zTbV`BU5o-4$7!(TV7tU221{#f#}f4mzml)FKI8BAi^fSL=#6`tJMZuT&AZ`&0E;}2XytVqzHv=y8{Me7^fkspb=&IKU_*g^w={bA5_jeGq=Dbx@{{iXP341a z@f9w=qrBfoIB;VcY<>3aI|#Yu*-uJ1*wVi(r2 ze_5u43L3wNphuj8qzs)hT(~)D^1_q6cg7rlq=8iZDK#9jjaW-u_+<2rEqqrt5- z0?^nRHeK-Nm`L)~-G1GD&X`3>r`iaB!nQnLA>LfO8M-&#IiZW&m&Joh4sX>R)*82j>R7|xm1u#jpt^RBfdxe&pg&@VnuWLb+F&mMky+!Y~xIv=4J?IdBu;`Hny`cKC?Dc7s#wVr{>L? zrmoTV&|;mx!~nJ;XHT9TZy-G9ts`>2D}Yj*2TaPk9ZMAyJMnf(D-P6ns$k)-D7ouJ z=H+vc*A<}{gAoWQbuJjM;}0~RTc6Yig0vNFeTsW&y)s7Xdv8yYL85JK^J}4uFo)G& zpu{YdCk{N}BT|S_y~`qJPiQqDX$1!kYEpvitNQT&Qf+2D`lpiSX)l9opZh3i({eg6 zL#iqT;6bI`Rd4PoxQ!<6dYsHJ3Wa7WaT~#dkE}KLdq4KCffp(6jaUMb}@HMx@c}o@mH8kUa`^QP?ssPcuoyq|R`;k3@M^ zdV|w#FRG}k4(*%eR?CdNlp3dgIr{MN zw0zxp7iKWfBKpDy$P)089*?~t0y`ANwrlQswMLUYUe3S`? zzzF!&<71EOuH3My6Cq{M5VjmjbwqJBN zb+o{U4Iti9t9_sox!-+m{>oY_J8V!Knn2}BF5!5kTdWlzZX`C_&w1ELN`BB+nNm@3 z>+zJc_c2a9o8;1e?CUhXIJAPUI|NzE#!wZ-o;@-PoW~H@o)B~b|K~~Rm=JY!g?jHx zW?k1%?FFi$Ep%jpaf#@r)CRdqDSWZ#{t5YImC@(n#-trQVwA^v`eWzpk%w2~tTl@7 zRC_LvlH$eZTz`2;*=*{}3nJYUMWIdsjFL4+SIeqKo2drMxi-A#+E@HShjS|KTCi@u ztHxK&u2l6T=`6v~Wmb zz|}7;TnQX`H@_QH!3FK>IH+(0!xfx$!fKx+hw;K>mwfhVd$9lU_lzYz3j0q6q9XSK zrUXn%!oq>7(DsHK{oA#hcsF`zDp<=pu$4JWL5Yu&w?8DP4xVT)y%Yfh1)Kf*X1?iK zD959}oJ{yvQTWf~l9P;vN`Kz6NuYVK#GzEJ%fmbRrI4+{ej_*G&Xx*A%G3NCW9e07 z_CL*a?ip(&Wp>bY9A8rYTJ31U>VTR8bn$*>74xnWgne0ILRvu2@$lRe1!~VA;;DVI zyGJ)r2TLMA4TTtp2cifrJ*)buvFZnVRigLpZ)3i7cuO~!5qkR?>8YD|Nm~fyqu5#p z-FQmR&M|&vDy~mwEuy97D%D-7R*VkTYU^Nc#c0pHt72o<9`|PXYk2{|I^oLJd})e- zlYayMK#VnxPnp`5c@K56bHNS5bEGD;`W$#quS3Em+bBQ^KT)E-B!WLSY5e~DuJ?};XFsv+#i zeSvwH>U(WYihX7@IDiIt>23#)R7nxL- zvsQfkOI#Y4rAx<)KC>Yt5zV&hAyHqIrwB%D@SwO&N)!sZ<7xJGqeK-N>usEnWv*=a zSAo2Dd!56h05H)pZPXbWY#qn8Iz&gbu@47Eg|v(!CU(d$%uR?&>F@#plt z1%U)C2#-g%7p%|fX+7vrsPqN@G4izi1o-J{tW!;H5o4|FTvshpxAI+W6lOUeh*T%+ zRZyZ@v(qp6$oXrsXY{{+(>6^-|I-AbsKIy7&+H0zHuRIL)Lu$@vjno1M^Wht_nrJ- z>c611`0j+1-n^Klm|iHiJJmD-GfF}@`$@r)?gfbx>Rq1@4B;M^6jaKQx6G%GL=1Hd zMG;)aSz~~8PRbT?eTnQ@k91V*mGZnCs%~I{*bcb*erH*NW}cXV-i&G_=8tZE_WM)t z;hT%4*c$*!$?%{M}(Tg!Oz{p>~ zLjRP(pEf7E^6i$ILCE>`iH+Ez5Y+jE)s1qbquy5iezUo+{zDzBK}nK0P|voiuK&QG z4GX2*zz=PM*!ADTyQM`2MSMdPw|S-mF+EyLflnwt?#H7r-PXhA5go>gpTydGJY&wb zxiW2rcR=Gwm+F3667B?k?HuSm#h`tolMM5VK1k|f7-sYUqtcb6#@a<%QzZ4X-X?BA zRKUR-=;G+FlprAtmfaTapM1q#zU9XBCJRhh9E!77a*-r>%zue@I zEKZ>(S_tcOz=rPvslEUF^J)x%Dr0xx*}R8U_*~OBZFi7|VT?sfx)vN=%a}ZZP#U&& zzIRz9M7QKs&LzkF5pN0_t-IjFGBGt_L{xt>dZ_kv= z#hsp|f6b9cs3TtK*o&c$VVyOsGoJZWd!}6-7*T*K*I)0TIk(Q3Y2D5?OiRh~Y;s!$ zL5e@v;9l@`_)l_7lvdP9f^X&G7#I(?noJe8QE1t znVZhc2S|uhkt8Q=4iC7(q0K!Lh-3P234U%Q3dn#jCj65DCm}TqmQ>n~=U3CI18Vf(jW&;OFq8VrFx@Fr{gk?`^yyY{dA~E*sDO-}=K!#KS}p(l z!|L$QQwc6hskGoNw=)P5B%(u%;R8?&7fc*;mDQIV5d;J$o9cSWuDI8jQX~l^;rOCM z`hCHX)x>mN_6Nvb?>$%PSwBg8SNl5*U3RdRmEn|xNXN&!_cn7kX$eV1MQ+~h0YgP` z#hev3n8kValf8yDq`3FDsFZ}CMaw4zNdV!&YP_&wteukw^6AvoDXeM>?O@)jOlrjo zZ<1F>DY_zOG$~be3gku3%c5Fq+SR&`yI#ubFcdIeFGYz|%G$kd$tX5l1p_VV{NKdK zT>C}~V|(>~?;#-8jW-|svrxoGwl|uA20QKgH`chkr3ZUY@VT;Y7`033<{Q;`e9)Ww z8dM>c8=;(*kn+|9zL46&0iEdR{QBbWq=G0EiEX;+ACKSTt*6ec)_s@<(sHNC={B^` zy2`!oc|KzP&p~K`7-g`Q(+&3bOv0uw!x6b4DuqG{hVE887 z`3L@u54AYme6V9DHqmkqulpLM(09!s%H8~)vya^#gL4$%aa|5i2n(+2ySUqMi}3!; z)rzWA0B5CRp7#bY)>ZqzYnJK$(9x&lU-r7M8VqrF(~`8-Sxk6ac!w7-{ReER00f8F zqxQC;d^snxG{7PG2C1hfEFc$AGQ5>t$~N!r>ZLfw-o97!Q0&KB-~knWbUW>tUxlVj zB5q1%>YRPO2kI6847!;EtW$)|j9VW+wtBZ+P4@VqwJCSP{B3{{IK>;!Xw;V~IqM8S zi=)~@J9Y!!Yxm3NJs&FaE2bnAmyz6%5kvT` z>dC9^xu;`uf()GcNcn~DPMG{fo+W#dfz~f6Q2^=4<7Pw5wA>atgo|{F@Kk*Iv%HBUEd1z%Np?bD5htSE z*=jeZh@JoMB{BY5!QCGdfD4ZYz^i~Qp+rz+9pY`Jg~i03kav2LPN9Cpt59aXu9&F? z>Zb7Kstr+`mqygW=(`feGY3ImKRCt=L=#ryAe4_hOgmW+ z@ld`X3m)_i8^hBVyz_eBL9U};S7cr`UOsx~amdNX&;3L44rK4$XY=drOAA;+*W1DN z-vDc0>qq75$_$BtQ^K-pKdRnKd0mjB9J^o^W60$SehnS8lCb$Ciuv7{Ky_T78fQcu z7Oh5p_8)k!H}$3_bb00P*pxe8dH4Htte(V3c7;5?bYJX(kE-Osk1V}IQkejOF4y2O zU?s;I1IR;=e-19p>9)j+}09eL>+k}hzUj23YPQKuUPOj3b zuFBZ4PqhHFrh-}8c&t?9)xS_R-RRJPtvFJ<=z&*l`gd#~?#PWj7>~o=Jppoi{P~NS zR1K?7Cuu(V`)b3!h#&tByuF~)=XoM9u}6uk=@MU_-yH^0Jr%SCc%+E`tN=d*_|L*G z0{A&O;nhO`MDNi4Jrv?qC0RXAg z{Z|go0J8Y#9!V6q%0Z(MxSYZ(u6A!Q@9#@>J3Bt1v^Pj5msWs4QNb4Apr_KvK;0V6 z`u-$ZT3O$|$>wO4#LH1?rictMKmvMq&X`xnM}26K-ZP2f_X9bMJ$6vjIs8h5$7mD2 zH+kk3aFdqXsXOC#+-H*hH((a&bO7*_;o>s&Th*mJdvH`6@8?JU1EM9)^H-ZOujcmS z6nQ886aZTzZist7`$HU1M|pqTFW`zb_NiZpRlr|*=|Lqq=&T5QTtW5Fw&p*|{{Q7sS6zD9h~-lj{vSaJUp9OY2WHW|f_>D;|CFEhzwV#< zH)`Q43!r}-)A$w;^?wec`#*o0(z|y}(CpdYtp5@8@WQVsK#>;1&;LiH$$k43(twW( zWbB{ZV4VZXAvJ#nTbml!yG1n_-4U&>*CM4X&r#O`w)>^yA|fCPHp8oS(JyqDlY%pk z`E_afS-Q0g+x0O1dIdj*+c1>~p%-JrQ8uLtSNDw8?4VSv7Gr|dWCwVx2O-PE@iAm~ zvery~*nVTLk+~4Cg z>+f2I76rCkP;_LymnzT{kcn;Q)J~^d4GGHiatagtJOc^1E*wayADQeLvc7PG@KcJ5 z6fBx53g;vrF_myYTe)yWcWLQadX3+15=y=?18bS$eXAxGB2!$oJvy#|?9pn>atM)Q zM;KWKm%3LLh6bm9Yvlhl_qCIsO1N$oK!C+Cn&4u#L60a#L1C&HCzVMw=E_RE>{ABg zPX_qBlDH$I#3cHl=znvwV8f#`02_3mjjZVl)HvA#ezI=^bJkv5N|leG^LAq;c2?r( zP9}_Li-&J_;p^_L&?-`y)&`ya=8SBeY^VIX!8n3e3|#FRr@nbNU@^E0bqIdUyW$Kx^{CTu&Kp5j-w(?ro$?R@n7U5!i+M zJY2MdpHhTipWtST)eP~_;>savMe^Li)Fgu_9_4=x-T$qFe};Jzpo^k< z+)PKl6mrq*?KdCY+8GU=l$^6_6tK4qy!*{66}YD4*0+tpr0Fc`i*mWv;>&!|lNWQ? zWn#e6ewJLCwm$WMmsfK&q=r^L<7Z%6oK;U2YP_`Gm8sPaJfE`^j(59@&?s9PAm@Qy ze(f;S#ZP-u1XK|8F0_f7`$+i{*&AO78mBqW*_X$47NpM)!r4fyz48u-FH;+ibofp4Vup#U0eJBiIi^HsZ&=p+a`ES;u^P>B8idL3?C^*U1G0In-;H*O10&||Yqn~$- z?Pk@p_QfOWsJGyX`}g;qJ^2xJ3G~QuU^v(#>|ycytMBXSGEq^(Pds{`E!Ja(gTJG$ z@t^%DzP~T}n&H4MO{3D~RxoUNd9hO_w}Yrn5((_!7}baV_&EpY1+21=VA zJhZ3}$NesoBBZHPc|5A^37Df@T$W_4#1u~zc+^M7rO_AMjA;waO$|hDU6trsX zDO3x^Dt3=7ZFmR;2mGv|jjeS^&nPcY2DI>6&Zyx2L2`+w4yL0{D%mEZ?y;!6KZ^Bq zM?HP8HWR7jyFm8GxLV+arhOGaYfm}{4lOs`q+(YU`0H-3^Rs9eqnX6fAUg|$99VvZ z)AqX2;mq{ym`}yD63^ZcL>{VGnlpEf%=z%?i=fT9e)ka=al5THgzrAyOH_-D2O3&S zbSL>FZ@|;6!kAsW%dqJh-5zJoI$f^^>Q~aY(UL5|VrR>(FOI2h_b84{Yoy%{F02CT z_UjCl^-&izyGf!8CSp-U6Pa4=DUhgRQ8Jy!%1eJkXjBPoN!yYsY}Bo766X{jWW?G| z&91bqr%KP981n^TLPo06Adc?ty9+594r6)lTE*_HM{$WtF+IheqMELmEVs4&7`MtG zqgF%Oi5S~6!yQRih~)R9h0HT)J_dxAoK3E-yEHYp7@wtGwDu7Gv^mA`N2SXO5nz zAH1y*@b|Q^#sbI3D?9XDOdx*dur&LRsta@(aTTi=hp}lj;>E^#kP8B9-OICXG7El9 zDqFt^6U2vk+J!-vf{1V!zKWXGRvET2grSHClB+ASRZy`uC^q{~t3n38NmHnLgYZ|I z>t`ys6x#VLY{6Q=Vfrq0Qk!5DV@LOo+40uLvuk zM^`Nb_=e3Qwwix1wuII*(w`BU+|jPHVG?S^pE+v9v@J?uEl1eRtI2W$y-?V#SCamA z-~OW)Uj8Rv$`+3fv^4}%ac=eg>SW%<6FWUe z#g6{STBw~KgVuvSdt=3vFa5Irf)d+gx6LewIm4XE#N^j?WTmBqiez3}RCl4D@S;<}qbNDUHIwg*>+}!h zAEA)7%ez7G)oFD|-bHJf7f}ajtk}8bExdCLZ(BU~t*0Hz%d?*3>EoocpEErcVp@%2 zXQ;HelF(<0;ZWaIMY>-e%A7?WYA`A*x7>7G5zdrLRyT=NwIFq0;vd$|#Ca^n1Q4`nd50M}%&r}d^Z)`C_-G9Jc4^xiV z0vk7Xn-KTLm=rfoECg0(#)tRf+(#3<@d!0a3%I9XY<*A>3pd!%_VHyNmbx*6Qhg2; zyU?1|{C)MFyE2q5##H4DYtfvvsbQS*w}*bG`gBYldvV-VYntSr!D^+Z*2+ws30RoU zT$16aLqck2R;zDNmSeC=P!}yrA1ri~`eIgaWKtDknceD%`>>*}8Ry1iB7bidlJBvW z$C{Xpjxg>}nid*MxQ;lfGG^{Wtc-7**r~QwS^0qu-hVcegVpc`r7!w#=yKZ>B?+MMWfcl3G}ktMNgko3}`>*CHI&*}2mqHDC#h4uOA) z0=9$?OXu!%8BS?l3;u-rbahA(7x|w|%YUZoBiOGM`SE-BDK2jgLZ;o0PmH=IXZYGa7T~j1Kj}b>@M}#3x zgZW-O!-(~E6{X2kZS(GsGA}w3U{WK@1)HD5n(wrVSM=uH^xvWZE@@eYiS6k&x5|et zb}C{FOFo({MX|9pCBaJc9wbvQyZ0hL3VGdj-hnUDx>ORR^RehRqruR|akZgUOITfekcLMx-u)RbDWDq>geq<(+xD~cR30pbFv>i(OD7FmW6+x*?#oIi ze4n*lP^O@&8q_>Wx4_8!%@E_m7gykc!yd4;F-P{qCPR6!>D5-zR(6p3BeU6(eK)-5 z7`5@~mSET=LMA=xfd1oE2u1c~TeJhFw$L zi(WJRrR5WARPV`*U@GlBhP~{(t72Tq^|^=A+AdTBYb-}|b$wf%Yv!S$Z5Z@G!-?b* z>oXN07<+6jFAZb@n8K1?xYpxR}bemB;uS_A`1GIqFjxa1+#p2$Iz4bsEHHs~YNW9)mgm`hawVY6R8 z$HC(_GvZsPrCjK%Iw#)%PVR|lk6WnCx%_>bJF6&A@B;Ji-y(SdfA9P2;K@7x@0TQ= zSE^zG?kb2NkoL#4x>uTP&Q&|X1r7G9{l(Xk5kyh;VVBx6c z$MkYHHzoGPT{q;G`32N8wz9g+fUkevf;rM3%=*<8X4$4SA8Wzad(MXMu`&0VyJpYx zzuwahPonP#)HmtL9HflLJZ<2_9Fkz!YxVUYKkB@CbJx6@fgbfN*{^ue7NNQ%bZ8gx zLURsPu6b=><6=XvpXbAie3UeBNs3RNyWj5U7V~VuBk)qG5XQG)aX>TJ_UA$#w)LqL zf%_P)dX(qJK;4#i>f}{n~slpR}yKzkCI3(SEG*H*63XQPK+4y#);J` z4HaQr-Gal|g~K8b!gOsY}umY;KlQGLlUoHuQwtN3jDs9Nd{Qy-mJ+gJSUY!j-?lIWdifA@5lL9xaeZ|=e9xq3402+k zfpt=do0+mC=|3cVM5=(+M=6T-RSJcjc@ogKZ=Z1MgTJ-SrNPoAHog&*bi0*QjQPo} zpT|-|H{6fm+t z#!lOfBL#h>Y)Y+dr%F*npxeb;zkU3_fNpkU@>$h~D5QK_!|dw1U$F;v96+uBZc5v^gr#j1=YFph*osZPB1ZnoyeKoF=T z-9w?+RK^^06^V-P&#$+r&S=pWaiPutM+(5pAteVoM|1P}&2Fi6pAkN1*?*`twD>j0 z0GS6?8*GUZ^%!%KK(??Wd$rDKaAJaI>*qN6;TO+su4nC7@291WYB?5=eEgh zW0Zo62~jkSOE)Cmq$6@bd_EP;cGayH9}n*)W<)zKZja_JZWos{s4d-l6@Z<*qv-*I z#sQ4CojNp%5Epu@iT*VkT14KBE>X3oBvywUm`*aBXZ%tfs%X4HW~Rh&NQJvHQ6~Zha)9WS;f0a^xDbMQ3m&zL|Ad(|OYA%^eL*IKEnF z@I{xY*(M9*AKDja_}_^C5D;{QX0lJg>3@Te{;;DPzA<*iJ;bikI@VHu_9yH@p}|#u zTe}j(YQTqQU1u;_))6(5{Sy~1a1QK-wxU4Ujpk#Qyq$@G4D=cQXEPl1$miujsdVp( z7_7$Z>M=OZ_mEqywXjEIgUze{;6YtqYwqlh!^)zYF-Kfpe>myoL8>ppZhei)4z;vU zzqhf#CSDD479O(KNuE}!4Vz#?Mtsh+G)iAtG4ih$`#_A>K3|}QOWr!)crBt#$kO<* zn-3923K?go9mQ1_*A%=eTio_}3;O15XOWnB{27(uhEiJ_G&na__g8NH<`22=b$9T@ zx`d%e``jYEh%F-Zp5%Z}BQvhAFm)!BE-(LMGqL;qGRR@%VrYch!eXOjV9v)4)rCVB zU(95DF(0~NhrP=^GlEv;FsH(nPE)!y5!}orkMn<3*MKAB?44$w;0W=VBYb)4Z7SD@ zHLJUwFplNr5x%ZX)PD9@u~0v)vLM5T@?lbp6>V?Wx)% z$7i|L*qM=OG%)$#*#VDtv8_wOT!ycsQ91=1oBPh{vUfBCKPKnrI|+e$CSHLl0-Xz~kKfDvawDMsikB6K2glj;`|r zCuUj~G9SM6Z*x-Lox1^JhEDE~jV>F`h2{JDn|&>{ zRIJCBV5lJ;K6G_*vjzBPGAmjhPeb}9-lv?lSkb7RJJZM2Qg>n&sR zJj_t+NUOtcE0MJt5`^-}S5a5-3)dm}Bz%#;$y~X{vp!#rSc)w$3>J+gSM@Zpssq`? z)o<>Lmubel$n`jcI%kMuS21Z3$-55iPZ<;>tAabA2BW}HQOl@4zjR(bDmj(5_2U(6 zCm2M8PT(S2vA`3o=*Zwa9jlRm`b*SaWOy6H6)W%lE@5oil?FR}CIFC5V&Qi8trgk- zV))C7kDUwvUtWoAEk?Q7PW~d&wJrV%nmEDNdZTOe2&d+WQDSx2b)hqAOJB{e+Mvo` zPR@l@&Fe&1abcB2x3BYe7BS24ATQ)~gGYs5`Hx(=7(%>N=4}n0ag{#kwi(A~pRHoGFdig3 zN5Iry==rK`s&1qJ)_R=+s!=s!D>A?6#>(IfGc=evnYzp`goLz~r+rcC4pn2-=U)8J zvN(G`yCJmyAcc4oH~DyWAOq|dHdX`e&b^W;bK>I~<3QNak5b6Rj@rHi6{RF}%YX%z z*?{s|7wu{{44kSwBmE_Hp4!0|uy6qMM+rd)sby?D+0J8lQQae1^q#WiTza(+j%ZZl z_aS(x<2F2V$a9BQ)jlL=XRC{%3=U~5I1;{8ac$M8k-rH9xaV?>Xk~>d^nlN~bE+O& zXGK8%a+6=tBq82Y1sNHoA;ra}_6u<~+nMRb!~s{2sSxX%DndVqIf9pM`1)O!ijTA~ z%KyLi-ZQGHt!o?hU;!J5ic*BA97RAtqzR#@DA*`UlP)3x(xgKmL~N*(9F!&yP>~`f zks3-u5EKN2NDVCsJwgbfg+M}*Z*%T??uX-Z|M1i zhL3vZ&p}fvO6qL8hVFgpQ^UJ@mz=qsRx$gmXz;N$$5}TrIOQDi8Fj_#Y|(ERj!j`WgU*IRq`Nc4D}SHfzycyH9E{yJst$lp%w2qHjg0 zITPb0J#C^j$+1mH|4Wn`x<%h<+x3Hg9M7k6GuT@5rS{z#HFGLV&cjSQyCWHRZl2s+ z94_rV-J`YLYq#~Aw>#Z7&c^|gY<;>ZGFXj|z9PgFA7u4#Jt(^#npB6ygt_z`f^EUx zI$}mGLAEZg3pG!*l&`pwrK0<*#goCp>$Aw>u_>VlJYO;1hIphDrTGovX>0(+}Up|&g7rBqovRWY|vDZNBmDBcJR7i_7uOZS*;ZR zZsNxK5mvB6JpiAv3)7H-THW@WQx&AJh_lb?X@U5v^`KDm@O=N<16nq}6t-9fY}V&|L~Pi0W^2{#6qYkLj&G>Oqne^UYe9su2w{gF6aFcSdfg@h%^?eAV&@Q{f0lXLlLubc#a)@{(JTLA+bcFqxf z8~cJ-;wn=nQ(gtDP2;^1%6nMTE3dNEWI$JpS?+8Q>1DKyWP^{+>^Bl;-u3SM?xD8T zsf(i6e=uL$DluYc^a^J#Lfg?VoOyeue9iIXVeoXtb<*KNC7QC=rO0qTABDwAaAT#$ zQ&))7vxZ_Iiz=934lBc-#|zkyLW3Hj&QIst4ADw*da8giP^v3lxUPw!ii zQXTPDE>O6Ly1456#^u!l&Z@eX=z9U}r;{{Zs`s!c!nJ<4rtiTuEz(PBXZcM0zG{j^ ze+JPlW5a6CI!;*2**d*$$>Y26oX_->XeMnY=wnOw9W!*_4%4p244p=~=j2242($ap z8qQl_g)F5$XmzLYmzN zw$PCe|CTEot~)VX-2cL(Eo;;GT+v{)pn}95`ChX4#~}4z1w@*6jF>-%tSDp+jrYHP zLHlSNtAcEq-6lUS_)=t2Fl5|=nQyUKCe6;mD}S13N0TnNlWcKFu4UPcdKCL%tHzG= z-B0bh@%$&}Pa{h=%^u%5I=W1H0yRUcT(cTv%UCnSdTUtu^3^b#m8Gw2l_6p;C!oaU zj91NqW_yE{fpG@ixWf6Y#=c(%w|S`gHhB|}L!u2%;*#KebEEd$H|{VA(8_1YR`{S@ z9`t6Wl*Lrhm=cLO;?KxA<(Ap*y<4TVhg9nQUPy^*!0Ol+R*5X~H_4rzkyMnNeB^=H zN$)$uXdMh5V5g4M@<)#MP3(xtEcN$mNk66$=Em7U2&ko0H;xbJK4I}nT%LG0HmI&w z@0!l`wux)um&^Ru()0MEPAxMPsmPh8e!;~jP5nXA&#NC>)eKZ$ArDnwgQp>_T>H-u zcXa7@t-ikpLzq#MV;LR3^YtnoVt-xnBQEn3_Ja-rTki;a?zM+Q_Xo&+<~(_8iRI4IWy%& z&L_{Bp*CsVwJaUeBReY+f_grORlAS)gZTrrr&7ABOfPl$?HA;JoO7inRb5{;cy&I> z0uj1DM?SrKwSePjW@K+`l3w-I>O*izn%li<5y;Si8p$3_T#x-qa_{0}NRMe^O?!Mk z5?oHpp`+4{81z*Y^tQ)YapHb3f3=bi3OmrhTO`ZV-k-M8%T!ug`&#bR%v@r>AwLDO z2m|!nP|yqNaY6AvoAMv`zy2>Sy>jgAu)SPpZ}dN<`ERfH$L~xNfN@<9{}%Jd zuQ$5hRPGl(`iVM|rysL`D$O<2?mG2whWc@*z_W)t>t98g?3P;y zxiI?B{m(C5zss8gdqTj%Ke^xfPq(h@5WwV)J9WAJ^w9!)fP3-(b+5nX z>)#dhFP->(HvTWMp)$p}h?P(LIpdMv{}*R*%_7pm(jNL&)qWUj+DA+HxnH9R?+HOu zZccCix%U&e_TVhlAjIUsYx|%3y$5x_0^Z8x;iEU(|6N%(aI2>(AJm22SMm7ket(#O z|5N5q^zv}RRc~XVZ=uybd-sMZLD7Ru4F#Cx}*{G$e#t;-=k+DAH^}ugw+cp zspr>XeVSrBZP5;{=7G78W06dAy@vxPe-fsDkCJDpTidHg;{tjUgLA}`GLpEErr4Tg z<|vtzsaUnjEo+E5n5$1Jb0KJX*`Ap59u)2Y{WJjE$o#gMu0Tl5h=UBO+p{%Nwd}3Z z>vwJ?nXL@FYyH%6%p8YVVIU&{KBCOW5Q$^P?`MpP5o|EtAJ21KR*E>GQ&`5D>@ zz1fwLV=bg}Jy?-%YW`#~u`eQK#-T|3SnWu@yg8na?4})DY+7+_&SBGxiSFv1RDh%o zJ0Wly=;aFE`Z2k=v>7<(u4fN)L3S@Fs<=`^uMNXLwFk~?PZ{d5uG=_05$PnawUOU9 z2jS*oW0T^7(iF{ySbTS?6*y#;ztOZkNckKxEm z936^t7LV)&&SSn>Z$+I8Jg1yK0F3eK3(!_OplRL|(16KJ&L$naACjLHZjQNZnDnJ!VOu2$EVL9ltu2#XqFSg{sOn`&sZ6Bfjq=_D9$yDTa z50nG+GpJpl|6mEUp%L32ZoK*5W^Kd9H^#Q4C@qzntd=?^yhxoS|{lv zGQ;DNQDFeh#&@7Qx5~F)VJrRk2!H`}ntzXeF|GY{2b($s3+J}^M0Aza>^NFu@%m-! z@e)U$&{kXVhV_SCfhasPu+rnY*^OrS0elLAi2L>1_16!$me!m@b)B1SZZmEiF$#rR zMFy9CiGT@(5e?H44=$uRKyALZm4t0%W;TlVi8}CIw7_XRmDgBP5XBjuhScy_RO>P9 z)RSuLz27EG*JS3Tni{^-K`Vx(Y5wh+u6g3hVDs1{nl*DQ5jr9#YP56#ZpM7_D2zvLc)&lDK*tK&>t;UGW2vM%ES{5%G$FQ|DZgK-=JTU32xV`_wU zL_>kY@l(r;1bg*(PWAGDN7Sg{ZZdZnom)tF=mww%(2(81b=F<&nv_gxKpAs9G)TR1 zE4F^*Z!&Fc+wj{-20Lb zmv&+_2Hdi$+v^1}K!0~iwIu(c`)A2W$}-~^ zds7Hud?yM{-N{w~6YWk8qaa!nE?Bh35leElHMb&=4<>`_6d(VfNT!ZSYa zZ%1UW)gJmq8_;V{t8gwLY#X#rJK4dkJlNK!M9ISgcf2Odm7VYEK%iK~M9?j_VT}#L zOlB)k#fnrBK_)w_kE*NHTM%Q|PXs@FgnwiOc-=t6dc5!ghyxgGz}X$Okaq6^{91}SF`#R|S3X~J_3mOW zz>=001dsuj0dyq0J@mu#&NnY*@>VltE5Oc;F`>2iow}?Jc+M+hEm@1V7g=AFBH|C? z7j2$oxudYl`N_NyA=o7)NJsQE6KDh%qBWhDH67sq<1iKr5ALkbg7n_6o^O;e6M2vm zNU%pEK@svOj2|Izq5e!Z3ZO|a-Wtv3~?l>&Y`Ta93+VpZT+V5)2H*L-X$7{|8H z&v8V-9o58jETomXmZrL*dSZqC5jOHOM(jZ-ySJq#J*r=1<1QXz%bhZ^^(?*!=}IH1 z-X6@tIqmg=Ge+$~rmi~LfY2C}H;Tt0^Xx%2KlE2HGcHP3d-jj62UBBzN_!FeOzL9p zpysKtZNx^~cjZPvfh7iJut~%t-s7{$pRN z!Uw(3J=8{ZbyCO}>t-;?Y_i|9{EZ_{i!K4gU@NFs(|nA&)h}NDKG9xepjjqEM|Rf3 zqo~}H$gNZdUtOx138OIQt02n(P|{5)Gf!lI(pj-QYIc>?F#3-sh8!?#N9B zXk*G-0V*3E&sQD1Gfi0zg$F5thhACLE+jTge~H?uSoua*ZxqVdMPCoPje{&76AHP3 z6+I2pqGussxuaZ0Dgl#2C4a!go*PIZJSTLd`(RlK=zTC55NvIpHRi@WKEc53-4F<6 z)-jm6se*d+)an*Z&`{{jo>F9`G$L>U;oe%Flbc1VFyas$BWNWo##bWxvTc!$PGG?+ zjfLMMcnZgD;O`Oquu{eXDqglHd&jv1-@QK$bsWH}B7dW-D&?d@XR9cw*v0@daeBhV z!i~gaiz*~v)$~K|xLbof*k#rvP*GwobHNO~qqhb16q~8yYHX&IAvTEm+&$9~6>|5! zwSo9<$*gCKU*|l3bIhV~a#Csmhxe4Ukc3wC`bM1~0OTE5_ZAJ@YFh^TImgN=&`bj- z3tcP;QD6rwwrK_aCKC+@Ye<$j1m2sNahQlbxxJs6dL>cfXj@@Lf%i{D88 z*gUHzuXJ!i$>H23Fn_*jE~$}C=5aC9Ni`E&5T~HN`fjMMpz=g0YOl0i*6#UmdI=C4 zTA)q7c*<4nN3|y{zG|62dECaVa)?lHJ^huMNHGv)R+DgZPn32oMl)LDbCeYfHKE}o zS4?BoKEhpGC(3amlry0OtMcIGgV5b+Jb+JSkiquG-&SIiioBGi&nm&sWctZU=D+dJ zV?|!8xgQr!pbSMVOqiwZe$Jp1w&ag}}tpp$$^*d%RA-jY8qmYhfva5~zt)^{?a) zH-jSvM5z~FXD$}an0bzMo0)ipzXM6z2N%a}n6!-S5Ll8J;h=CCYGs5EdY~8a167|X zD@wgU!y;qk;Ic4DdD=uwCUOC^;{R;lCn6beMM4v|l=%63+x~-U@_jZB7)R`#pzs;|JrWg2EC3zPBReL9Zf% z7Dm3hd2FF)g;i|XAxo5_KvF}O+tnFqPeJg^$G7+Huuo;08Ed-qsgLPjquPoa40D@J zBK%G~tXw-ebuYlP)InQMV|m{vn=Ma!@)jYm{v%0N(&cHa`QvO$X-t#?9{M8C|0d|% z4Yl(jeWm%*eG0IdJrd71<$4AmBAA4a?qk3-SK4SZyQ~)c!^YUBw74r{QSZDo_r%bw zq*c@Wk1>k|SG(wkR)Cf^gNN`Y&}p;4zJpHe?K0`#PwD}v+d0^%nKJw~N^0OFHQXNv zNj+3UUMm1c<(c+v_f63s#MSH+kz~UYl21EGA%gyPgZ!ZIxsPL3vEM-z4!Rn*5#e^X ziDxv{iENyx5%bZGhbp|qj!%Mq`>ZKUSpvA>=bfB<*XrIlP7zSy4wS`Hx>nMIRDZcl z6`{LV9JKVgDv9uXqQ`T4L+WpADbDOk=~-;y@ZXLhw_Zg*%gUs%gj`~{mtSzYK^jzH8Gj#C4-X@JW zCvMmQ@)vFk(Di8K{wnk1TG&DA6Ygtd2`@3^h5HP!0;%Aus6BR5vM&^3;RnH$`IT+~=o`esds+)(Aja_e$p!e3(t6OaI!Io$6g_9nmP}I{t;>QFu^V z2HbiHzil>H@bg#JPAuvSW|*Dwz37Pw5%wOM7d_T+i6n zr{yxb=5X;m{pl6qE7tk$MG|QO4_ja2nM2F%w8mY6nx--S=v^Hxr<8l)Ak_rDlxJba zf)B>n?f&v;=l2m4i&_=MJT6i~P8pF$*_GQ`xlMs$tz$U1tJZ#G@MgN3$&y;{ z^I9wT;S*K`hPRT95rPwN`2``LeD~t0g;mLsAc~OJ=m7qgpc#$xvvz(b4pF1rtw(jc zLqQ0#hq_O&cIF6z{+u}5oNc@IKsw_6jiePj?%an|T^u*kSj_@zU8LSjaod7*k!4;d zy=nzOHXl8F4Ge9?nIZJ*QZv=#Cc;~x`8k?C?TcqJ0So!`^3#S(E`b>9v%@-P-U7+M ze<}h-r7n8+_^o60b?v7~k-?O&l^C3;vgA4aH7gxQ4JE00wTJN-2hAJR{$K8Yb+Wv+ zZ^#<*CK?iPj;Zfzl_UAgH{SGY)50VNRJK+d_*l;+2xEfk#b4z+dpcp%X4 zRG-pZ+=Gv$2_peprmH?LwT3$S+CdVvbwavhZz)|7+rikO1x6=t{?v&qHAdrmR4SuL z^KrqdUTt3OC}o>k$gF?qJ@-D%qh%k=v9gBtx(i=-nt6X_?!)4Sas((@CL`wCT36W) zlxyLc@avSXbK$j3L14rC6k5_-r)zqMt5q0+z^uUdg735IHN=)n9H2pi9UAf0ZAmi< zQJi^(u60%LfpoaS)!8uDVM%GEf7)0RpLAl!na_nnp=sA~w$HzV$!RSh$%*TPi4t#W zQ%SL1X=vJ*NC>k=rpdRJ5QYhAw~QY=JwWhNkMct-^o`#?Q>(<2THc9iTBMt!)+H3J zd+}=qzNqrR(X&gr8%dewi@FhK z5PRJtOF>!0do2rgt!W6A9y<9t5G#=6cgD7tF7j|f_!BW>s~s{kR|ejZS~V^^Cfz4% z*h8TkLSnDK1Cl_Z7UEe^{wEHYy-PmE|A@m!Zx%_?1wiz<#h{SrV1P)Z8TT>s;KTR$3GHw)leRC#kO9rqy(|$T`zl{gBBD#!k!_ zzi^d<)CX_}yH(wnH13XaHs@SAHr=FBtAt(Ze7hp7pOI0uIM7N7TUzWe1ktMcXGG0x zDL15;Ab=D#bY2@3I_{UAiEvR}mlDcU2YwW;9wfgGzoCb~I6RcT3*-Ml%B&imlOU+K z@=2%~xz`CM8XR|awlEzwXI7y`*1OHA)U5#;@&q;dwM}}(SPc{D8FnO4?IMCcZZEVX zuBZLttk&I(uavW*IzU>hEvUs=#ch}vTBIsbM2cCace@RoNm^8hxR!uwtAvpN?oJmK ztjtDB*}BT@0vP_>{UJi$>Z9T=fbzuEBm%sb=?iRPEM=(2 z7Rh4s-Ghqf~D}i|aqiE=Bv}4?TgzH$(L%=A+JST)x=hH{eU5ROIH{+vl zl2HhJX8WgGs5&rTyu-2cxV|9Gm*AWuaV|uIwd6tB+*rk2YoW0ctnzs^zE9qzJ3lW^ z0(-^XXBTzb!E{WCHLw~)VMR#Dn5rI*w)*E zSJ`XgoLE<7N;Lw7IO3p7Hq>fd9g@S3oW3@bzO0Fsaah#7(zM2LVrKlz|vZXWT5 zpLoV1uQY0i!~Hlz$kTIDH29GgT7n>=E0Y3QH59`dR8b%kg?yo`l@v?eOw?+4j4P~3 zNL;J+CaS-W6taaRO?)*LCAvBk1Imr5_{`IM7Unq>kACIY3i3{9%E5TI;8d^%A$U6Z z!?}Soy^9J=O(YqJ_|USLY2l6V{jFQSL^A8{=mXZ&W?+{^)|;aw!d4nU>PJ35+=T&e z?#J*#6dEQvjCqoH#W>gsT=*l$z|;|74mILIwgvzK$xD0mB%Y5EV&La}b=FEsk|btI zp@SXAsxX=XE$moR#T*Oxb)x3X)R2SVHZZh?@xeb+^QO{fxeyiFqBp$YAea)JK(py+^!eYIX%KLa-4ld#LMa8wO+oesBS@uN>!Q zn2=I+n6)SCZcSp!QPzXaf^Kp8vpz8|;ueqazGp4ojGG*K#+j&7&*8^sTcxDn@F>pt zzIc|%;EzBD3Jnx892tmP&kAAO`aFgV7pklxI*RCz?5Lr(+4^>X`*WlJGXE%ksP}YT zOnlA6iAg&dmT7yVvJ}Cymbt`={N#r0il1%vb^HoFv3c4%DAf8}dpsRl>ZRgxR2Xww!f)j>~%Z#3VKiBE{)q|Zn&4ZK5^G8 zs>Y|@w{{e-)&L9pIU(M6(eRO-j-oGwGhCXpiVp@16TKi4C6cS0-5NvR%YrAry$@7J)KpM`d`xI#by-_J4BA;8fsGHSd|Jz~pmSH+G8NwwMmmZ4Gx z-aOT@B;T9)wGP}4_tY5>JANhVw0Ud=K0$&2`}E$?Gl34@<0`cT8xODH!rky7o7!w{)anEB1Z5wZ)p4esoK# z6XBsCrq%T(Q(PDXJwg4V;=xW_(41G+39&A*M=jq;h}lHQsZw1NDP zc+;VW6t6~)Q0!;T*R2=mO3P{ZW>I@m!Fb1yjwWr9AZra1f0F!M90L-&C)V{H#UFX- zlcPh}L5C2hs+vjYpvm>q1tG_y0_}R)IO_40D zq1^mft{rZ$%95Msg5jeBtUyEU-mu(B^twvlhOj;N>2->=kyD0*P#cz6MT>yqYS|4K zQf7`@`lS*pzZrnKNt1}Bv`+1)D=w8U39YC!uL^695FKlvJUJ}K^{pMe)Dx27E~q0t z6dnIiIuW}(P(X6k?D0bfE|exq+kJiOiiT)DrtV7j+auzI12Q1hMOsTldIWmARK(gC zNF%UCHW92(%DFLrJnCREzTJ;Cm8-$N`8_gN?8=vfPsA%XC&x%)Im`K(?1SfwtQUeH z2t60#T5bB|>SUTvdvqG1ztmMjTEBIZM{l8Z?AT=)M0Ypdr-h=M9JvC>2l-sPL@f@A z+8YV0Y-GG@z}umB6@uZ{b;-`e6r(q`&0Tj45kR&m_rr~CY1q3)CvuT-6g1`Z!0+-& z$*TjyFTuG%X%Ic;5nPfWfLBjH(_L@Rli%RbDomfqqd6tM5Sm|Gb#q>00tx#ba!ivN z_{OkKXP{PUnBS0w-**X=a-Mp%sd3#TL-THxF$3$Ja^&w^`|b) zT^9@=_)-wTy`OBYW%#X%5qXP?nLLcO&ckLP3zyw*NGUBD)2tKjO>C83`RcWv6z%XV zSTx$gr}x4^e5Nw z)FP#HYMg&@C~1On!I0Rhgv0dXH7V&`Wk+gl0Rb)@d59iD3EaK?K3q{aVluwrI)#Aa z26FG6;Nzw2z^wV6J(D1f0mDL+J6F4Chn{t0R6%`XlmH@DR@7c!&v!c6>|g-st6L(J9vilz&{{b*T?!vAy+;#`Nd?-$N5ZZYB{f%xE|&bFDLWE0iGI z$@p>@vzW!dPywJTsd0MuT1ByH8hKG+wrIlt+nAx8?{2w`?NkXs1;a1@1`3=DBZFfC zzD1tLOwOUh@487{L{Kjx{LH-sk$xZdF^-yk{bb~TQn?fJA#^d=rSes7wqkPNqssA@ zS5p~d%18D4(9Sky!D*|0zVWNC>;`0I~noWW6R(~i8iES*OM%V?q)_y z;PIn#aq-EaFBn71XB;M!V_XT!1aH>~8d05Hv-3g8(J6NxU@u8x5k{7v^b-9h^Sd1sBlg-dNEq-3CGJjuos zrKFxo4#DAd*}Dq%Nk8zHeN-S2*mCwr)Q((4kPVWAF&Ok8PSbxX`b$dkm%Q$X2}wFI z&K%K;Iyai}=i|O-+dg+MZ8bdtzF;aME#C^-6o3RpI%z_^95fu9Kf4K9Ijc?qi&~X$ z%F`G2h)9E_%VO}#qg5w0Q*>8`AGLnbmuASyQR)`ftB@7m;m_h9`p)?GSyce}n=CVM zYpe$8CLA+UVSEkl7`Go!T?WId5t~D?A+g_!ceVIQj2!|4mA0tZ?+S!ykl6SGCDcBz zIEqn|c{8@s{FRtfZG;Q6SJyT<12CrT5=Q{p`m%w&rVnsb`;iPD(HonT7aA9Tu~TlXJz7+ZU0 zE$&wZ>{Ljl1%pxkz$;D7GXXT66H!G3{L7$_-)+ZL)=6qpIf3e+t4Hwkb`^w=Y0)ep z_PLJ$ctUFo9b82pW{Lgc-;X;Zg`l{m(|vhxv127hn)}Y9oV)0Br_fr?xQyOw88eYMfW}`B&q<{#@spyz^mVb5W4U3-<08~J- zvy&aPylPh`-2wjo^xVLnrSU0%!`c|wf?$)X>};^eF$U8T^5+yRezC~s>xP7iJk6f2 zDs>0;P#6IO*+FLLMI#a2UN-SwK~X0_2Az~Y^|31>Y}VQ;TD_>O^9rJ%J2Oimw5I10 zeW{v&MS5V*9kd)V&abDN$4(cpQ<%!BG;=5OYR>YYnaJK8Iql2qEZF(y%R()S_<%~B zr*RKls55BLD>=s~P2B|X+~Gct!z6eCtnL$3=ZYb}R)*JkyLvPU;z1+;MX%CXkHSIJ zk`_!0AL%`qSC3>>KK2z!$xgI#sIn~&P5M$%P$zqFFn>-%p>}0-v3siG*11_!YK}G{ zWc2w5@!beT;A`)iOjqmlWM6L!jgI|)BlHfp47-%#Uw#@3F8l>M@`GklJ>5y_m&NPqx1MIy6X6kCW;uy|41k4ns3W zUnI*0PSr*dDtWQl=6d%o_gve<_?^UmI_wfU%)JU;3Ht174fG7?1d3OLAwr85kt76Z z3mP;)yC4WtZa}ZQ3X#@)_ZBmT{%aQXo@y|$sgjU4l-QybwMsucDD|D>1fxNbv+CsIUo^;vtE>j5d$4Ve?cHY8u`f#685+}uuZyS4RK2E- znW43+jDU66UWeSrbwFmz>|KNSSk&=!GfyVnszQ**-PqcrPBfA&6q!<%D@9}jP)<8&w*?!EdZ@0qm9 z>kw)$H70EEVDGlAq@7nu5kKF?ZYq!v$s`T>n1-t?qh0NN4YBdk!Q|s!<;zROKKEaG zo*UM=Ecp2DA2u-lk5@Vj|Lm}5uZn}V0(4%SlCGK<@!DN0Q=jfbwS4a23jm7*AtbOu4pv4z|+@b=fvo-`@f4^`5 z@b7=!?vG;o|7`BQSJ$!UHR0t`D?fJrTx`d&bvxvdWu^ls<{VDU1pSFi`McmFmjwhc zgZ?KOkN-H%|Dn0Z&%Ozi#>mutQ`|5e{;zcFt-ZhwzzU8ONC9p@-Zr!Q9R{QII zf0%*4=I>9``!9X@A4a*ZIRC%Um!|uBW<%y)FX3?^hk+hgSNLfa#x@aCUktJ3luXc- zOfWBFKMJ;*Z_zdBp`bAxXz}a69Lh!kKQiIK>$;kj#4cGqtVSEu`$XGKXnz@HSxIVf z9ygQI)cK1m$;OA0n;GtI1I^Ahz_z(k1hcKAf-LNLr9R}tH12|hLHVo*S|>xXW~!rX z==9b197o(;a$v@5b~vlW#FY?8vhjj-sqqfwli5+OT{!LnbFmQD{W3ZmXnuCwtE92S zJ&lpuwg`2Y<0-;U5v{j!m8@M?%LXgtDPJ6Z4j)cA@kL)7wtw377QFb(tFuf_RqCoN zTJw4&Q;*w(ok~k4WhUJWFAkVcR-z8B>1iu#aPV2EB5J_XY1|qyed(==_f!pcTY=)M z+gR^UOb6b5=V}Hwx64D_UKtulHez`0+xE)JYqJo4-oupNeUx@h%XcACq)!LUwD1OHDw{DFsc zM}z2$EIsULLm>j+4jba^Y% z*2u(hz%|RsfRFBUNOwb(|A$6=+_UAt^E&poR;f!e+#eaKOioQcf+yt5Q+adgL=8`a zFdWCCAjgD9XBgbUQQx|DS_EsyBdZplmko7B=h8H6-jaHKykSQr?@tynSlEma&Lzen zn!Kxy1B(5*3!j_pb4G#ovEzk1YvF3nx>{nrDU0Q7HMeux4K@CcgGoFxl(~F2foaj? zm3)wZ`mg4~1{6ZR&wMpypSxC(qcbb1(&;^jOxFz=P?)kpw_k2OS#>it^m7HUCO<&E zqNkeBX{DHgsP*lDE{2058HS{fmRigF!9C=_ofxI6k&dP3uqquLtJtL3le`s}#uX4J zcX0a4E48@@yj4UR5=(8?O2;jo0@9oCxA>oG+ey2~UVc(kroSueQ=(Azu>+1LISXIC zx;ibsa!RREm-(&E1tj2c{sxdSb@^bO9Z?ZJmMnMy&lH9ZS1VzcrxhhwB6FDB9tHnS zNg-VoPeePA853j2?PW(yG|ImhD^N)D&fu6=FDy4j6@kSz(-)%nGDdV}?yvsTjnw@r z>=ro8`8Gu9ii>hIgMTE^T;y}dxc3a&beUCemjI;zyfMt? zrS?~jqGGiSNNX-?rslGZZ~w7Wh$G4X3Y%~(O~bnkbCy7vCN)w}FUUeah1$`POGi(A zbbZqFV?opMj zL$+4z1-7~|*sJ!2Lw2YRqn_RQp(kMK`hlQfqH6wF+YXC5UaXMk%Zi&}t8qRz_J-i~ zZ~yWqG5K#Rg?%T#PuH=DJ*71$RK|!Tez0~NXigF>0-vr$Lev?$Ju3NGGiYk+R71~V zWh+otK;|2s;n8W1>2ZA?oP~l(4({6;RA;Z&0bo@{4yX1mMU!=tdQ)o6S

iyrz?V zyu*g4mSD!1Vh2?~x?a7RNwuq=jHpw6tw9tfAN}M=;?Lk~rSUmL-C!t< z^|CzqDvVRDHmR&TUQ;^lBK*t|(%0L@R2EqU6u};*dk1I?2oAO@T1AF0E~ZHt@n?kE zV)J%kf_bC6r;t$@m%+F@*#Qe-8j4o#q^1BWN^9l`^qa}Bq(t>}B`uW}7`FI*%)g5Y zud3kY`-A@Ov>j3`Ij?+dHHz4yE}cY+G<@X}H-MJ~D_6S!$1OGzA-plzP+G0^6Ev{3B#>X)dzd^p$z)*A4CDIGn9CcFSR=M^J ztqB1-FK{Ms>XRny8gJ}aSJ!1a)F~}6dlYtiOGwNXc&8?-I!_%xc=`^H^o!DEWeC=) zs&dD;-g53)uAX4O-0uM^A1G?&?a3M=vz|zF`s0Oqx=MKLPqx{|l21%NLQM-`B(C`U z0fql#uK(dbZeHRm+J$L7g(fGAJ8_XpJayuI{3|uyH|dJYT}h!%pO@ryp%#)WwX1*! zapv7K;6N$7LqW@uQy8+gos!~aIuy4IbO^SF=UQ0V$#G_0DM>ER%wb|dj-05aW_nw` zp5We)$=I}MCuW`AyjoSx zFoY8OPrHT<@nA)X%P>yrY5@y4SM><;E zi60)+4(e6&?aQIC8W)?e2|f5wJG+t-ncI~iL%Io@QSS_YUk5e_##OmF&$wczHOW65VtWl7RLRKZ01o?up})_^>C;pE znSCWlSiccGdviOcJOU(Lj$7s$bvAmOw1w5qlVrLKYePLCEAv%t6|JV)Nw|?p>a>@^ z323+o1UHhcq|L8g8%>FD^r!4=tA4bFRD2^w4&E_w{Wd#uz?rx-&}MbT!`QJ}utNzu z-?3D+IE!S00<{{ZZ>rxImJC$H1sV^~%WOxz1|ZmpF0>vdl%vZv944BEY;^qWpT4W^ z{9ZTvVUCgt2s0ySCTp5*HQ};;Y3Z2z{~I ztkVDnc6qhvt+m-sf7jAw%Jbs_5lgcKq^?O~$NF$JZMZ2|jY~fLvs+CfncD9U{1l0u z`osr_h0KL(WRrWCPVQG>X(yGN^3nbyzy284q zdKL>?OB$E5JIS>!#Im*1(FAGiSj|pdMknhv(FMB`1^X464>4w{_!sQvd^m|)8g-{z zp^|hL8p}HcVK579*{+xV*bYqNCAw%c2k{{p5QE`1?~-KqHzYD@5rSi0*2qqC)k_S@H%Nl5LM4KclPW(A zds_}vo~829w;r+FJ#CD(z<;i#$GcKLVA(qRFoRrYtnDmJ%j@Qo7HU8!DF_|7&H8|J zyH7y{FG^-I2Y@WEdaYevo4a)G`1wO@6o4!oW28s(r(j#4%p(9`covf$E_SV z&D9fSMfs_>JN(_@m&o8Scu~fNTekk`9N+W+nM6yF148;Ae)1nV#y@Dw*)X7!{_<<$@9L;C;O^f|CaetHIUlaGAw(*z7{ikjGWvc(_ vOaAh4|LKJP3J(7n#{S=qs*#66crej;efy)?C0(0