From 4975d3505d9642d09e35351747f74dc40afb53e7 Mon Sep 17 00:00:00 2001 From: Vincent Driessen Date: Wed, 25 Feb 2026 18:25:22 +0100 Subject: [PATCH 1/6] Remove Zen Router source code from this repo (#3120) --- CLAUDE.md | 1 - package-lock.json | 1 - package.json | 1 - packages/liveblocks-zenrouter/.eslintrc.cjs | 25 - packages/liveblocks-zenrouter/.lvimrc | 3 - packages/liveblocks-zenrouter/README.md | 100 -- packages/liveblocks-zenrouter/package.json | 51 - .../liveblocks-zenrouter/src/ErrorHandler.ts | 139 --- packages/liveblocks-zenrouter/src/Relay.ts | 109 -- packages/liveblocks-zenrouter/src/Router.ts | 566 ----------- packages/liveblocks-zenrouter/src/contexts.ts | 10 - packages/liveblocks-zenrouter/src/cors.ts | 296 ------ packages/liveblocks-zenrouter/src/index.ts | 9 - .../liveblocks-zenrouter/src/lib/matchers.ts | 220 ---- packages/liveblocks-zenrouter/src/lib/otel.ts | 7 - .../src/lib/standard-schema.d.ts | 175 ---- .../liveblocks-zenrouter/src/lib/utils.ts | 14 - .../src/responses/HttpError.ts | 78 -- .../src/responses/compat.ts | 5 - .../src/responses/index.ts | 204 ---- .../test-d/Relay.test-d.ts | 14 - .../test-d/Router.test-d.ts | 151 --- .../test/ErrorHandler.test.ts | 178 ---- .../test/HttpError.test.ts | 89 -- .../liveblocks-zenrouter/test/Relay.test.ts | 430 -------- .../liveblocks-zenrouter/test/Router.test.ts | 955 ------------------ .../test/Router.zod.test.ts | 132 --- .../liveblocks-zenrouter/test/cors.test.ts | 408 -------- .../test/lib/matchers.test.ts | 69 -- .../liveblocks-zenrouter/test/streams.test.ts | 179 ---- packages/liveblocks-zenrouter/test/utils.ts | 89 -- packages/liveblocks-zenrouter/tsconfig.json | 26 - packages/liveblocks-zenrouter/tsup.config.ts | 17 - .../liveblocks-zenrouter/vitest.config.ts | 24 - .../zen-router-diagram.png | Bin 435372 -> 0 bytes tools/liveblocks-cli/package.json | 2 +- 36 files changed, 1 insertion(+), 4776 deletions(-) delete mode 100644 packages/liveblocks-zenrouter/.eslintrc.cjs delete mode 100644 packages/liveblocks-zenrouter/.lvimrc delete mode 100644 packages/liveblocks-zenrouter/README.md delete mode 100644 packages/liveblocks-zenrouter/package.json delete mode 100644 packages/liveblocks-zenrouter/src/ErrorHandler.ts delete mode 100644 packages/liveblocks-zenrouter/src/Relay.ts delete mode 100644 packages/liveblocks-zenrouter/src/Router.ts delete mode 100644 packages/liveblocks-zenrouter/src/contexts.ts delete mode 100644 packages/liveblocks-zenrouter/src/cors.ts delete mode 100644 packages/liveblocks-zenrouter/src/index.ts delete mode 100644 packages/liveblocks-zenrouter/src/lib/matchers.ts delete mode 100644 packages/liveblocks-zenrouter/src/lib/otel.ts delete mode 100644 packages/liveblocks-zenrouter/src/lib/standard-schema.d.ts delete mode 100644 packages/liveblocks-zenrouter/src/lib/utils.ts delete mode 100644 packages/liveblocks-zenrouter/src/responses/HttpError.ts delete mode 100644 packages/liveblocks-zenrouter/src/responses/compat.ts delete mode 100644 packages/liveblocks-zenrouter/src/responses/index.ts delete mode 100644 packages/liveblocks-zenrouter/test-d/Relay.test-d.ts delete mode 100644 packages/liveblocks-zenrouter/test-d/Router.test-d.ts delete mode 100644 packages/liveblocks-zenrouter/test/ErrorHandler.test.ts delete mode 100644 packages/liveblocks-zenrouter/test/HttpError.test.ts delete mode 100644 packages/liveblocks-zenrouter/test/Relay.test.ts delete mode 100644 packages/liveblocks-zenrouter/test/Router.test.ts delete mode 100644 packages/liveblocks-zenrouter/test/Router.zod.test.ts delete mode 100644 packages/liveblocks-zenrouter/test/cors.test.ts delete mode 100644 packages/liveblocks-zenrouter/test/lib/matchers.test.ts delete mode 100644 packages/liveblocks-zenrouter/test/streams.test.ts delete mode 100644 packages/liveblocks-zenrouter/test/utils.ts delete mode 100644 packages/liveblocks-zenrouter/tsconfig.json delete mode 100644 packages/liveblocks-zenrouter/tsup.config.ts delete mode 100644 packages/liveblocks-zenrouter/vitest.config.ts delete mode 100644 packages/liveblocks-zenrouter/zen-router-diagram.png diff --git a/CLAUDE.md b/CLAUDE.md index 48464427a4..24c1f976c2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -58,5 +58,4 @@ ease of changes. If you have access to the Liveblocks backend repo, avoid making changes to them directly here — prefer editing the source in the backend repo. - `packages/liveblocks-server` -- `packages/liveblocks-zenrouter` - `tools/liveblocks-cli` diff --git a/package-lock.json b/package-lock.json index 958213a81f..7c2ba3b405 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,6 @@ "shared/*", "packages/*", "!packages/liveblocks-server", - "!packages/liveblocks-zenrouter", "tools/*", "!tools/liveblocks-cli", "e2e/next-ai-kitchen-sink", diff --git a/package.json b/package.json index 51afab98cc..800e2b7c83 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,6 @@ "shared/*", "packages/*", "!packages/liveblocks-server", - "!packages/liveblocks-zenrouter", "tools/*", "!tools/liveblocks-cli", "e2e/next-ai-kitchen-sink", diff --git a/packages/liveblocks-zenrouter/.eslintrc.cjs b/packages/liveblocks-zenrouter/.eslintrc.cjs deleted file mode 100644 index 2b3a584c2b..0000000000 --- a/packages/liveblocks-zenrouter/.eslintrc.cjs +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - root: true, - extends: ["@liveblocks/eslint-config"], - - rules: { - // Disable these for this library specifically - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/no-explicit-any": "off", - }, - - overrides: [ - { - files: ["test/**", "*.test.ts", "*.test.tsx"], - - // Special config for test files - rules: { - "@typescript-eslint/explicit-module-boundary-types": "off", - - // Allow using `any` in unit tests - "@typescript-eslint/no-unsafe-argument": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - }, - }, - ], -}; diff --git a/packages/liveblocks-zenrouter/.lvimrc b/packages/liveblocks-zenrouter/.lvimrc deleted file mode 100644 index bde765b0a6..0000000000 --- a/packages/liveblocks-zenrouter/.lvimrc +++ /dev/null @@ -1,3 +0,0 @@ -" Needed for Vincent to have the Vim coc-tsserver plugin pick up the right -" TypeScript server in monorepo projects -let g:coc_user_config['tsserver.tsdk'] = '../../node_modules/typescript/lib' diff --git a/packages/liveblocks-zenrouter/README.md b/packages/liveblocks-zenrouter/README.md deleted file mode 100644 index c4caaebd5d..0000000000 --- a/packages/liveblocks-zenrouter/README.md +++ /dev/null @@ -1,100 +0,0 @@ -

- Liveblocks - Liveblocks -

- -# `@liveblocks/zenrouter` - -

- NPM - Size - License -

- -Zen Router is an opinionated API router with batteries included, encouraging -patterns that remain maintainable as your application grows. - -## Installation - -``` -npm i @liveblocks/zenrouter -``` - -## Purpose - -The main purpose of this router is to implement an API backend. - -## Quick start - -```ts -import { object, string } from "decoders"; -import { Router } from "@liveblocks/zenrouter"; - -const zen = new Router(/* ... */); - -zen.route( - "GET /greet/", - - ({ p }) => ({ result: `Hi, ${p.name}!` }) -); - -zen.route( - "POST /greet", - - object({ name: string }), - - ({ body }) => ({ - result: `Hi, ${body.name}!`, - }) -); - -export default zen; -``` - -## The Zen Router pipeline - -![](./zen-router-diagram.png) - -## Principles - -### Pragmatic - -- Implementing real-world endpoints should be joyful, easy, and type-safe. -- All requests and responses are JSON by default. -- All error responses have at least an `{ error }` key with a human-readable - string. -- You can _throw_ any HTTP error to short-circuit a non-2xx response. -- JSON error responses for all known HTTP status codes, customizable per status - code. -- CORS support is built-in with a sane `{ cors: true }` default that applies to - all endpoints in the router. `OPTIONS` routes and responses are managed - automatically. - -### Secure by default - -- All requests must be authorized. Authorization is opt-out, not opt-in. -- All path params are verified and type-safe (`/foo//` available as - `p.bar` and `p.qux`), cannot be empty, and are URI-decoded automatically. -- Input JSON bodies of POST requests must be validated, and are made available - as a fully-type safe `body` in the handler. -- All query strings are type-safely accessible (`/foo?abc=hi` as `q.abc`). - -### Maintainable - -- All route patterns are static, fully qualified, and thus greppable. No "base" - prefix URL setup, which in practice makes codebases harder to navigate over - time. -- Routes include the method in the definition (`zen.route("POST /v2/foo/bar")` - instead of `zen.post("/v2/foo/bar")`). -- No complex middlewares. Only the request context and auth functions can carry - data alongside a request. No per-route middlewares, no monkey-patching of the - request object. -- Default error handling is configurable per status code; individual handlers - can always bypass it by throwing a custom Response. - -## License - -Licensed under the Apache License 2.0, Copyright © 2021-present -[Liveblocks](https://liveblocks.io). - -See [LICENSE](../../licenses/LICENSE-APACHE-2.0) for more information. diff --git a/packages/liveblocks-zenrouter/package.json b/packages/liveblocks-zenrouter/package.json deleted file mode 100644 index 86090c677d..0000000000 --- a/packages/liveblocks-zenrouter/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "@liveblocks/zenrouter", - "version": "1.0.12", - "description": "An opinionated router library for building APIs following best practices.", - "type": "module", - "main": "./dist/index.js", - "types": "./dist/index.d.ts", - "exports": { - ".": { - "import": { - "types": "./dist/index.d.ts", - "default": "./dist/index.js" - }, - "require": { - "types": "./dist/index.d.cts", - "module": "./dist/index.js", - "default": "./dist/index.cjs" - } - } - }, - "files": [ - "dist/**", - "README.md" - ], - "bugs": { - "url": "https://github.com/liveblocks/zenrouter/issues" - }, - "scripts": { - "dev": "tsup --watch", - "build": "tsup", - "format": "eslint --color --fix src/ test/; prettier --write src/ test/", - "lint": "eslint --color src/ test/", - "lint:package": "publint --strict && attw --pack", - "test": "vitest run --color", - "test:watch": "vitest watch --color", - "test:types": "tsd" - }, - "license": "Apache-2.0", - "devDependencies": { - "@liveblocks/eslint-config": "*", - "decoders": "^2.8.0", - "hotscript": "^1.0.13", - "nanoid": "^3", - "zod": "^4.1.8" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/liveblocks/zenrouter.git" - }, - "sideEffects": false -} diff --git a/packages/liveblocks-zenrouter/src/ErrorHandler.ts b/packages/liveblocks-zenrouter/src/ErrorHandler.ts deleted file mode 100644 index 04774565da..0000000000 --- a/packages/liveblocks-zenrouter/src/ErrorHandler.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { raise } from "~/lib/utils.js"; -import { - HttpError, - isGenericAbort, - json, - ValidationError, -} from "~/responses/index.js"; - -export type ErrorContext = { - req: Request; - ctx?: RC; -}; - -export type ErrorHandlerFn = ( - error: E, - extra: ErrorContext -) => Response | Promise; - -// The default handler for HttpErrors, in case no custom handler is provided -const defaultHttpErrorHandler: ErrorHandlerFn = (e) => - json( - { - error: e.message, - reason: e instanceof ValidationError ? e.reason : undefined, - }, - e.status, - e.headers - ); - -// The default uncaught error handler, in case no custom handler is provided. -// It's the ultimate fallback if everything else has failed. -const defaultUncaughtErrorHandler: ErrorHandlerFn = () => - json({ error: "Internal Server Error" }, 500); - -/** - * Central registry instance for handling HTTP errors. Has configured defaults - * for every known HTTP error code. Allows you to override those defaults and - * provide your own error handling preferences. - */ -export class ErrorHandler { - // A registered error handler, if any error handlers, ordered from most-specific to - // least-specific - #_httpErrorHandler: ErrorHandlerFn | null = null; - - // A registered error handler to be called for any uncaught (non-HttpError) - // errors. They will typically be Error instances, but it cannot be - // guaranteed they are. - #_uncaughtErrorHandler: ErrorHandlerFn | null = null; - - /** - * Registers a custom HTTP error handler. - * - * This will get called whenever an `HttpError` is thrown (which also happens - * with `abort()`) from a route handler. - * - * It will *NOT* get called if a `Response` instance is thrown (or returned) - * from a handler directly! - */ - public onError(handler: ErrorHandlerFn): void { - if (this.#_httpErrorHandler !== null) { - raise("An error handler was already registered"); - } - this.#_httpErrorHandler = handler; - } - - /** - * Registers a custom uncaught error handler. - * - * This will only get called if there is an unexpected error thrown from - * a route handler, i.e. something that isn't a `Response` instance, or an - * `HttpError`. - */ - public onUncaughtError(handler: ErrorHandlerFn): void { - if (this.#_uncaughtErrorHandler !== null) { - raise("An uncaught error handler was already registered"); - } - this.#_uncaughtErrorHandler = handler; - } - - /** - * Given an error, will find the best (most-specific) error handler for it, - * and return its response. - */ - public async handle( - err: unknown, - extra: ErrorContext - ): Promise { - // If it's a Response, check if it's a generic abort or a custom response - if (err instanceof Response) { - if (isGenericAbort(err)) { - // Generic abort - convert to HttpError and run through normal error handling - const status = err.status; - const headers = Object.fromEntries(err.headers.entries()); - try { - err = new HttpError(status, undefined, headers); - // Fall through to HttpError handling below - } catch { - // Status code not supported by HttpError (5xx, 422, or unknown code) - return json({ error: "Unknown" }, status, headers); - } - } else { - // Custom response - return verbatim - return err; - } - } - - // If error is not an instance of HttpError, then it's an otherwise - // uncaught error that should lead to an 5xx response. We'll wrap it in an - // UncaughtError instance, so the custom handler will only ever have to - // deal with HttpErrors. - if (err instanceof HttpError) { - const httpErrorHandler = - this.#_httpErrorHandler ?? defaultHttpErrorHandler; - try { - return await httpErrorHandler(err, extra); - } catch (e) { - // Fall through, let the uncaught error handler handle it - err = e; - } - } - - // At this point, `err` can be anything - if (this.#_uncaughtErrorHandler) { - try { - return await this.#_uncaughtErrorHandler(err, extra); - } catch (e) { - // Fall through - // istanbul ignore next -- @preserve - err = e; - } - } else { - console.error(`Uncaught error: ${(err as Error)?.stack ?? String(err)}`); // prettier-ignore - console.error("...but no uncaught error handler was set up for this router."); // prettier-ignore - } - - // The default uncaught error handler cannot fail. It's the ultimate fallback. - return defaultUncaughtErrorHandler(err, extra); - } -} diff --git a/packages/liveblocks-zenrouter/src/Relay.ts b/packages/liveblocks-zenrouter/src/Relay.ts deleted file mode 100644 index 27b6e8f2ee..0000000000 --- a/packages/liveblocks-zenrouter/src/Relay.ts +++ /dev/null @@ -1,109 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ - -import { abort, HttpError } from "~/responses/index.js"; -import { ZenRouter } from "~/Router.js"; - -import { lookupContext } from "./contexts.js"; -import { ErrorHandler } from "./ErrorHandler.js"; -import type { PathPrefix } from "./lib/matchers.js"; -import { makePrefixPathMatcher } from "./lib/matchers.js"; - -type RequestHandler = ( - req: Request, - ...args: readonly any[] -) => Promise; - -type RelayOptions = { - errorHandler?: ErrorHandler; -}; - -/** - * Relay won't do any route handling itself. It will only hand-off any incoming - * request to one of the configured routers, based on the incoming request path - * (first matching prefix path wins). - * - * It does NOT check the HTTP verb (GET, POST, etc). - * It does NOT do any authentication. - * It does NOT look at any headers. - * - * Subrouters (typically Router instances) are responsible for all that - * themselves. - * - * If no matching route is found, it will return a generic 404 error response. - */ -export class ZenRelay { - readonly #_errorHandler: ErrorHandler; - readonly #_routers: [prefixMatcher: RegExp, handler: RequestHandler][] = []; - - constructor(options?: RelayOptions) { - this.#_errorHandler = options?.errorHandler ?? new ErrorHandler(); - } - - public get fetch(): ( - req: Request, - ...rest: readonly any[] - ) => Promise { - return this.#_tryDispatch.bind(this); - } - - /** - * If an incoming request matches the given prefix, forward the request as-is - * to the child router. Relaying happens strictly based on the request URL. - * It does not look at headers, or the HTTP method, or anything else to - * decide if it's a match. - */ - public relay( - prefix: PathPrefix, - router: - | ZenRouter - // - // NOTE: "RequestHandler" here is only allowed here to allow passing an - // IttyRouter.handle instance here directly. Itty router is not built with - // the same concepts as Zen Router in mind (for example, it can return - // `undefined` instead of a Response to trigger a fallthrough). Overall, - // it's better to remove this again once we're done refactoring away all - // instances of Itty router. - | RequestHandler - ): this { - const prefixMatcher = makePrefixPathMatcher(prefix); - this.#_routers.push([ - prefixMatcher, - router instanceof ZenRouter ? router.fetch : router, - ]); - return this; // Allow chaining - } - - async #_tryDispatch( - req: Request, - ...args: readonly any[] - ): Promise { - try { - return await this.#_dispatch(req, ...args); - } catch (err) { - if (!(err instanceof HttpError || err instanceof Response)) { - // This case is definitely unexpected, it should never happen when - // you're using only Relay or Router instances. However, it *can* - // happen if the handler is a custom function (e.g. you're deferring to - // itty-router), then this is not guaranteed. - console.error(`Relayer caught error in subrouter! This should never happen, as routers should never throw an unexpected error! ${String(err)}`); // prettier-ignore - } - return this.#_errorHandler.handle(err, { - req, - ctx: lookupContext(req), - }); - } - } - - #_dispatch(req: Request, ...args: readonly any[]): Promise { - const path = new URL(req.url).pathname; - for (const [matcher, handler] of this.#_routers) { - if (matcher.test(path)) { - return handler(req, ...args); - } - } - - // console.warn(`Relayer did not know how to handle requested path: ${path}`); - return abort(404); - } -} diff --git a/packages/liveblocks-zenrouter/src/Router.ts b/packages/liveblocks-zenrouter/src/Router.ts deleted file mode 100644 index 211517dfe4..0000000000 --- a/packages/liveblocks-zenrouter/src/Router.ts +++ /dev/null @@ -1,566 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ - -// TODO: Make this a local definition? -import type { Json, JsonObject } from "@liveblocks/core"; - -import type { - ExtractParams, - HttpVerb, - MapSchemaOutput, - Pattern, - RouteMatcher, -} from "~/lib/matchers.js"; -import { routeMatcher, sortHttpVerbsInPlace } from "~/lib/matchers.js"; -import type { OtelConfig } from "~/lib/otel.js"; -import type { StandardSchemaV1 } from "~/lib/standard-schema.js"; -import { mapv, raise } from "~/lib/utils.js"; -import type { HttpError } from "~/responses/index.js"; -import { abort, json, ValidationError } from "~/responses/index.js"; - -import { attachContext, lookupContext } from "./contexts.js"; -import type { CorsOptions } from "./cors.js"; -import { AC_ORIGIN, getCorsHeaders } from "./cors.js"; -import type { ErrorHandlerFn } from "./ErrorHandler.js"; -import { ErrorHandler } from "./ErrorHandler.js"; - -/** - * An Incoming Request is what gets passed to every route handler. It includes - * the raw (unmodified) request, the derived context (user-defined), the parsed - * URL, the type-safe params `p`, the parsed query string `q`, and a verified - * JSON body (if a decoder is provided). - */ -type IncomingReq = { - /** - * The incoming request. - */ - readonly req: Request; - /** - * The incoming request parsed URL. - * This is equivalent to the result of `new URL(req.url)`. - */ - readonly url: URL; - /** - * The user-defined static context associated with this request. This is the - * best place to attach metadata you want to carry around along with the - * request, without having to monkey-patch the request instance. - * - * Use this context for static metadata. Do not use it for auth. - * - * Basically the result of calling the configured `getContext()` function on - * the request. - */ - readonly ctx: Readonly; - /** - * The result of the authorization check for this request. Basically the - * result of calling the configured `authorize()` function on the request. - */ - readonly auth: Readonly; - /** - * The type-safe params available for this request. Automatically derived - * from dynamic placeholders in the pattern. - */ - readonly p: TParams; - /** - * Convenience accessor for the parsed query string. - * Equivalent to `Object.entries(url.searchParams)`. - * - * Will only contain single strings, even if a query param occurs multiple - * times. If you need to read all of them, use the `url.searchParams` API - * instead. - */ - readonly q: Record; - /** - * Verified JSON body for this request, if a decoder instance was provided. - */ - readonly body: TBody; -}; - -/** - * Limited version of an Incoming Request. This incoming request data is - * deliberately limited until after a successful auth check. Only once the - * request has been authorized, further parsing will happen. - */ -type PreAuthIncomingReq = Omit< - IncomingReq, never, never, never>, - "auth" | "p" | "q" | "body" ->; - -/** - * Anything that can be returned from an endpoint implementation that would be - * considered a valid response. - */ -type ResponseLike = Promise | Response | JsonObject; - -// type AuthHandler = ( -// input: IncomingReq -// ) => boolean; - -type RouteHandler = ( - input: IncomingReq -) => ResponseLike; - -type RouteTuple = readonly [ - pattern: Pattern, - matcher: RouteMatcher, - auth: AuthFn, - bodySchema: StandardSchemaV1 | null, - handler: OpaqueRouteHandler, -]; - -type RouterOptions> = { - errorHandler?: ErrorHandler; - - // Mandatory config - /** - * Automatically handle CORS requests. Either set to `true` (to use all the - * default CORS options), or specify a CorsOptions object. - * - * When enabled, this will do two things: - * 1. It will respond to pre-flight requests (OPTIONS) automatically. - * 2. It will add the correct CORS headers to all returned responses. - * - * @default false - */ - cors?: Partial | boolean; - getContext?: (req: Request, ...args: readonly any[]) => RC; - authorize?: AuthFn; - - // Register any param decoders - params?: TParams; - - /** - * Optional OpenTelemetry integration. When provided, matched route patterns - * and decoded params will be set as span attributes. - */ - otel?: OtelConfig; - - // Optional config - debug?: boolean; -}; - -export type AuthFn = ( - input: PreAuthIncomingReq -) => AC | Promise; - -type OpaqueRouteHandler = ( - input: IncomingReq -) => Promise; - -type OpaqueParams = Record; - -export class ZenRouter< - RC, - AC, - TParams extends Record = {}, -> { - readonly #_debug: boolean; - readonly #_contextFn: (req: Request, ...args: readonly any[]) => RC; - readonly #_defaultAuthFn: AuthFn; - readonly #_routes: RouteTuple[]; - readonly #_paramDecoders: TParams; - readonly #_errorHandler: ErrorHandler; - readonly #_cors: Partial | null; - readonly #_otel: OtelConfig | undefined; - - constructor(options?: RouterOptions) { - this.#_errorHandler = options?.errorHandler ?? new ErrorHandler(); - this.#_debug = options?.debug ?? false; - this.#_contextFn = options?.getContext ?? (() => null as any as RC); - this.#_defaultAuthFn = - options?.authorize ?? - (() => { - // TODO Maybe make this fail as a 500 with info in the body? Since this is a setup error and should never be an issue in production. - console.error("This request was not checked for authorization. Please configure a generic `authorize` function in the ZenRouter constructor."); // prettier-ignore - return abort(403); - }); - this.#_routes = []; - this.#_paramDecoders = options?.params ?? ({} as TParams); - this.#_cors = (options?.cors === true ? {} : options?.cors) || null; - this.#_otel = options?.otel; - } - - // --- PUBLIC APIs ----------------------------------------------------------------- - - public get fetch(): ( - req: Request, - ...rest: readonly any[] - ) => Promise { - if (this.#_routes.length === 0) { - throw new Error("No routes configured yet. Try adding one?"); - } - - return async (req: Request, ...rest: readonly any[]): Promise => { - const resp = await this.#_tryDispatch(req, ...rest); - return this.#_addCorsIfNeeded(req, resp); - }; - } - - public route

( - pattern: P, - handler: RouteHandler< - RC, - AC, - ExtractParams>, - never - > - ): void; - public route

( - pattern: P, - bodySchema: StandardSchemaV1, - handler: RouteHandler< - RC, - AC, - ExtractParams>, - TBody - > - ): void; - /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ - /* eslint-disable @typescript-eslint/no-unsafe-assignment */ - public route(first: any, second: any, third?: any): void { - /* eslint-enable @typescript-eslint/explicit-module-boundary-types */ - const pattern = first; - const bodySchema = arguments.length >= 3 ? second : null; - const handler = arguments.length >= 3 ? third : second; - /* eslint-enable @typescript-eslint/no-unsafe-assignment */ - this.#_register( - pattern, - bodySchema, - handler as RouteHandler - ); - } - - // TODO Maybe remove this on the Router class, since it's only a pass-through method - public onUncaughtError(handler: ErrorHandlerFn): this { - this.#_errorHandler.onUncaughtError(handler as ErrorHandlerFn); - return this; - } - - // TODO Maybe remove this on the Router class, since it's only a pass-through method - public onError( - handler: ErrorHandlerFn - // ^^^^^^^^^^^^^^^ - // Technically this isn't needed, because it is a subclass of - // HttpError already, but adding it here anyway for clarity. - ): this { - this.#_errorHandler.onError(handler as ErrorHandlerFn); - return this; - } - - // public get registerCannedResponse() { - // const eh = this.#_errorHandler; - // return eh.registerCannedResponse.bind(eh); - // } - - // --- PRIVATE APIs ---------------------------------------------------------------- - - #_getContext(req: Request, ...args: readonly any[]): RC { - return ( - lookupContext(req) ?? - attachContext(req, this.#_contextFn(req, ...args)) - ); - } - - #_register

( - pattern: P, - bodySchema: StandardSchemaV1 | null, - handler: RouteHandler - // authFn?: OpaqueAuthFn - ): void { - const matcher = routeMatcher(pattern); - - this.#_routes.push([ - pattern, - matcher, - /* authFn ?? */ this.#_defaultAuthFn, - bodySchema, - wrap(handler), - ]); - } - - /** - * Calls .#_dispatch(), but will catch any thrown error (which could be - * a known HTTP error) or an uncaught error, and makes sure to always return - * a Response. - */ - async #_tryDispatch( - req: Request, - ...args: readonly any[] - ): Promise { - try { - return await this.#_dispatch(req, ...args); // eslint-disable @typescript-eslint/no-unsafe-argument - } catch (err) { - return this.#_errorHandler.handle(err, { req, ctx: lookupContext(req) }); - } - } - - #_getAllowedVerbs(req: Request): string[] { - const url = new URL(req.url); - - const verbs: Set = new Set(); - verbs.add("OPTIONS"); // Always include OPTIONS - - // Collect HTTP verbs that are valid for this URL - for (const [_, matcher] of this.#_routes) { - // If we already collected this method, avoid the regex matching - if (verbs.has(matcher.method)) continue; - - const match = matcher.matchURL(url); - if (match) { - verbs.add(matcher.method); - } - } - - return sortHttpVerbsInPlace(Array.from(verbs)); - } - - #_dispatch_OPTIONS(req: Request): Response { - // All responses to OPTIONS requests must be 2xx - return new Response(null, { - status: 204, - headers: { - Allow: this.#_getAllowedVerbs(req).join(", "), - }, - }); - } - - /** - * Given an incoming request, starts matching its URL to one of the - * configured routes, and invoking it if a match is found. Will not (and - * should not) perform any error handling itself. - * - * Can throw: - * - HTTP 400, if a route matches, but its params are incorrectly encoded - * - HTTP 403, if a route matches, but the request isn't correctly authorized - * - HTTP 404, if none of the routes matches - * - HTTP 405, if a route path matches, but its method did not - * - HTTP 422, if a route matches, but its body could not be validated - */ - async #_dispatch(req: Request, ...args: readonly any[]): Promise { - if (req.method === "OPTIONS") { - return this.#_dispatch_OPTIONS(req); - } - - const url = new URL(req.url); - const log = this.#_debug - ? /* istanbul ignore next */ - console.log.bind(console) - : undefined; - log?.(`Trying to match ${req.method} ${url.pathname}`); - - // Match routes in the given order - let pathDidMatch = false; - for (const tup of this.#_routes) { - const [pattern, matcher, authorize, bodySchema, handler] = tup; - - const match = matcher.matchURL(url); - if (match === null) { - log?.(` ...against ${pattern}? ❌ No match`); - continue; - } else { - pathDidMatch = true; - if (!matcher.matchMethod(req)) { - log?.( - ` ...against ${pattern}? 🧐 Path matches, but method did not! ${JSON.stringify(match)}` - ); - continue; - } - - log?.(` ...against ${pattern}? ✅ Match! ${JSON.stringify(match)}`); - - // Add route pattern as span attribute - // This is done early so the route is recorded even for auth/validation errors - const span = this.#_otel?.getActiveSpan(); - span?.setAttribute("zen.route", pattern); - - const base = { - req, - url, - ctx: this.#_getContext(req, ...args), - }; - - // Perform auth - const auth = await authorize(base); - if (!auth) { - return abort(403); - } - - // Verify route params - let p; - try { - p = mapv(match, decodeURIComponent); - p = mapv(p, (value, key) => { - const schema = this.#_paramDecoders[key]; - if (!schema) return value; - const result = validateSync(schema, value); - if (result.issues) throw result.issues; - return result.value; - }); - } catch (err) { - // A malformed URI that cannot be decoded properly or a param that - // could not be decoded properly are both Bad Requests - return abort(400); - } - - // Add decoded route params as span attributes - for (const [key, value] of Object.entries(p)) { - span?.setAttribute(`zen.param.${key}`, String(value)); - } - - const bodyResult = bodySchema - ? // TODO: This can throw if the body does not contain a valid JSON - // request. If so, we should return a 400. - validateSync(bodySchema, await tryReadBodyAsJson(req)) - : null; - - if (bodyResult?.issues) { - const errmsg = bodyResult.issues.map(formatIssue).join("\n"); - throw new ValidationError(errmsg); - } - - // Decode the body - const input = { - ...base, - auth, - p, - q: Object.fromEntries(url.searchParams), - get body() { - if (bodyResult === null) { - raise("Cannot access body: this endpoint did not define a body schema"); // prettier-ignore - } - return bodyResult.value; - }, - }; - - return await handler(input); - } - } - - if (pathDidMatch) { - // If one of the paths did match, we can return a 405 error - return abort(405, { Allow: this.#_getAllowedVerbs(req).join(", ") }); - } - - return abort(404); - } - - #_addCorsIfNeeded(req: Request, resp: Response): Response { - if (!this.#_cors) { - // We don't want to handle CORS - return resp; - } - - // Never add CORS headers to the following response codes - if ( - // Never add to 101 (Switching Protocols) or 3xx (redirect) responses - resp.status === 101 || - (resp.status >= 300 && resp.status < 400) - ) { - return resp; - } - - // If this response already contains the main CORS header, don't touch it - // further - if (resp.headers.has(AC_ORIGIN)) { - // TODO Maybe throw if this happens? It definitely would be unexpected and - // undesired and it's better to let Zen Router be in control here. - return resp; - } - - // If we enabled automatic CORS handling, add necessary CORS headers to the - // response now - const corsHeadersToAdd = getCorsHeaders(req, this.#_cors); - if (corsHeadersToAdd === null) { - // Not a CORS request, or CORS not allowed - return resp; - } - - // This requires a CORS response, so let's add the headers to the returned output - const headers = new Headers(resp.headers); - for (const [k, v] of corsHeadersToAdd) { - if (k === "vary") { - // Important to not override any existing Vary headers - headers.append(k, v); - } else { - // Here, `k` is an `Access-Control-*` header - headers.set(k, v); - } - } - - // Unfortunately, if we're in a Cloudflare Workers runtime you cannot mutate - // headers on a Response instance directly (as you can in Node or Bun). - // So we'll have to reconstruct a new Response instance here :( - const { status, body } = resp; - return new Response(body, { status, headers }); - } -} - -function formatIssue(issue: StandardSchemaV1.Issue): string { - if (!issue.path?.length) return issue.message; - const keys = issue.path.map((p) => (typeof p === "object" ? p.key : p)); - let prefix: string; - if (keys.length === 1) { - prefix = - typeof keys[0] === "number" - ? `Value at index ${keys[0]}` - : `Value at key '${String(keys[0])}'`; - } else { - prefix = `Value at keypath '${keys.join(".")}'`; - } - return `${prefix}: ${issue.message}`; -} - -function isPromiseLike(value: any): value is Promise { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - return typeof value?.then === "function"; -} - -/** - * Synchronously validates a value against a Standard Schema. Throws if the - * schema returns a Promise (async validation is not supported). - */ -function validateSync( - schema: StandardSchemaV1, - value: unknown -): StandardSchemaV1.Result { - const result = schema["~standard"].validate(value); - if (isPromiseLike(result)) - throw new Error("Async validation is not supported"); - return result; -} - -/** - * Helper to handle any endpoint handlers returning a JSON object, and turning - * that into a 200 response if so. - */ -function wrap( - handler: RouteHandler -): OpaqueRouteHandler { - return async (input) => { - const result = await handler(input); - if (result instanceof Response) { - return result; - } else { - return json(result, 200); - } - }; -} - -/** - * Attempts to reads the request body as JSON. Will return an empty request - * body as `undefined`. - */ -// TODO Currently, this helper will not look at or respect the Content-Type -// TODO header, and I think that is a bug. -// TODO Need to think about how to best handle this exactly without breaking -// TODO this API for the "lazy" that never set `content-type` to -// TODO "application/json" explicitly. -async function tryReadBodyAsJson(req: Request): Promise { - // Try reading JSON body - try { - const text = await req.text(); - return text === "" ? undefined : (JSON.parse(text) as Json); - } catch (e) { - // Invalid JSON body - abort(400); - } -} diff --git a/packages/liveblocks-zenrouter/src/contexts.ts b/packages/liveblocks-zenrouter/src/contexts.ts deleted file mode 100644 index 6b7f5494c1..0000000000 --- a/packages/liveblocks-zenrouter/src/contexts.ts +++ /dev/null @@ -1,10 +0,0 @@ -const ctxs = new WeakMap(); - -export function lookupContext(req: Request): C | undefined { - return (ctxs as WeakMap).get(req); -} - -export function attachContext(req: Request, ctx: C): C { - ctxs.set(req, ctx); - return ctx; -} diff --git a/packages/liveblocks-zenrouter/src/cors.ts b/packages/liveblocks-zenrouter/src/cors.ts deleted file mode 100644 index ffc958d749..0000000000 --- a/packages/liveblocks-zenrouter/src/cors.ts +++ /dev/null @@ -1,296 +0,0 @@ -import { ALL_HTTP_VERBS } from "./lib/matchers.js"; - -export type CorsOptions = { - /** - * Send CORS headers only if the requested Origin is in this hardcoded list - * of origins. Note that the default is '*', but this still required all - * incoming requests to have an Origin header set. - * - * @default '*' (allow any Origin) - */ - allowedOrigins: "*" | string[]; - /** - * When sending back CORS headers, tell the browser which methods are - * allowed. - * - * @default All methods (you should likely not have to change this) - */ - allowedMethods: string[]; - /** - * Specify what headers are safe to allow on _incoming_ CORS requests. - * - * By default, all headers requested by the browser client will be allowed - * (as most headers will typically be ignored by the endpoint handlers), but - * you can specify a specific whitelist of allowed headers if you need to. - * - * Browsers will only ask for non-standard headers if those should be - * allowed, i.e. a browser can ask in a preflight (OPTIONS) request, if it's - * okay to send "X-Test", but won't ask if it's okay to send, say, - * "User-Agent". - * - * Note that this is different from the `exposeHeaders` config: - * - Allowed Headers: which headers a browser may include when - * _making_ the CORS request - * - Exposed Headers: which headers _returned_ in the CORS response the - * browser is allowed to safely expose to scripts - * - * @default '*' - */ - allowedHeaders: "*" | string[]; - /** - * The Access-Control-Allow-Credentials response header allows browsers - * to include include credentials in the next CORS request. - * - * Credentials are cookies, TLS client certificates, or WWW-Authentication - * headers containing a username and password. - * - * NOTE: The `Authorization` header is *NOT* considered a credential and as - * such you don’t need to enable this setting for sending such headers. - * - * NOTE: Allowing credentials alone doesn’t cause the browser to send those - * credentials automatically. For to to happen, make sure to also add `{ - * credentials: "include" }` on the fetch request. - * - * WARNING: By default, these credentials are not sent in cross-origin - * requests, and doing so can make a site vulnerable to CSRF attacks. - * - * @default false - */ - allowCredentials: boolean; - /** - * Specify what headers browsers *scripts* can access from the CORS response. - * This means when a client tries to programmatically read - * `resp.headers.get('...')`, this header determines which headers will be - * exposed to that client. - * - * Note that this is different from the `allowedHeaders` config: - * - Allowed Headers: which headers a browser may include when - * _making_ the CORS request - * - Exposed Headers: which headers _returned_ in the CORS response the - * browser is allowed to safely expose to scripts - * - * By default, browser scripts can only read the following headers from such - * responses: - * - Cache-Control - * - Content-Language - * - Content-Type - * - Expires - * - Last-Modified - * - Pragma - */ - exposeHeaders: string[]; - maxAge?: number; - /** - * When `allowedOrigins` isn't an explicit list of origins but '*' (= the - * default), normally the Origin will get allowed by echoing the Origin value - * back. When this option is set, it will instead allow '*'. - * - * Do not use this in combination with `allowCredentials` as this is not - * allowed by the spec. - * - * @default false - * - */ - sendWildcard: boolean; - /** - * Always send CORS headers on all responses, even if the request didn't - * contain an Origin header and thus isn't interested in CORS. - * - * @default true - */ - alwaysSend: boolean; - /** - * Normally, when returning a CORS response, it's a good idea to set the - * Vary header to include 'Origin', to behave better with caching. By default - * this will be done. If you don't want to auto-add the Vary header, set this - * to false. - * - * @default true - */ - varyHeader: boolean; -}; - -// Maybe make some of these overridable? But for now keep these the defaults -const DEFAULT_CORS_OPTIONS: CorsOptions = { - allowedOrigins: "*", - allowedMethods: ALL_HTTP_VERBS, - allowedHeaders: "*", // By default, allow all incoming headers (we'll ignore most of them anyway) - allowCredentials: false, - exposeHeaders: [], - maxAge: undefined, - sendWildcard: false, - alwaysSend: true, - varyHeader: true, -}; - -// Output Response Headers -export const AC_ORIGIN = "Access-Control-Allow-Origin"; -const AC_METHODS = "Access-Control-Allow-Methods"; -const AC_ALLOW_HEADERS = "Access-Control-Allow-Headers"; -const AC_EXPOSE_HEADERS = "Access-Control-Expose-Headers"; -const AC_CREDENTIALS = "Access-Control-Allow-Credentials"; -const AC_MAX_AGE = "Access-Control-Max-Age"; - -// Incoming Request Headers -const AC_REQUEST_METHOD = "Access-Control-Request-Method"; -const AC_REQUEST_HEADERS = "Access-Control-Request-Headers"; - -/** - * Computes the value of the Access-Control-Allow-Origin header. - * Either will be the Request's Origin header echoed back, or a "*". - * Returns `null` if the response should not include any CORS headers. - */ -function getCorsOrigin(options: CorsOptions, req: Request): string | null { - if (options.sendWildcard && options.allowCredentials) { - // This combination is not allowed by the spec - throw new Error("Invalid CORS configuration"); - } - - const allowAll = options.allowedOrigins === "*"; - const explicitOrigins = allowAll ? [] : (options.allowedOrigins as string[]); - - const origin = - req.headers.get("Origin") ?? - // -------------------------------------------------------------------------------- - // WARNING: Non-standard HTTP hack here! - // -------------------------------------------------------------------------------- - // Note that X-Relay-Origin is not an HTTP standard! This is done, because the - // default `fetch()` API will not allow you to manually set the Origin for - // a request, as it's considered a forbidden header :( - // - // This custom header gets set here: - // https://github.com/liveblocks/liveblocks.io/blob/862935833aa754cb419f2e5e8f7c32fb50e89de1/pages/api/public/authorize.ts#L69-L73 - // -------------------------------------------------------------------------------- - req.headers.get("X-Relay-Origin"); - - // If the Origin header is not present terminate this set of steps. - // The request is outside the scope of this specification.-- W3Spec - if (origin) { - // If the allowed origins is an asterisk or 'wildcard', always match - if (allowAll && options.sendWildcard) { - return "*"; - } else if (allowAll || explicitOrigins.includes(origin)) { - // Add a single Access-Control-Allow-Origin header, with either - // the value of the Origin header or the string "*" as value. - // -- W3Spec - return origin; - } else { - // The request's Origin header does not match any of allowed origins, so - // send no CORS-allowed headers back - return null; - } - } else if (options.alwaysSend) { - // Usually, if a request doesn’t include an Origin header, the client did - // not request CORS. This means we can ignore this request. However, if - // this is true, a most-likely-to-be-correct value is still set. - if (allowAll) { - // If wildcard is in the origins, even if `sendWildcard` is False, - // simply send the wildcard. Unless supportsCredentials is True, - // since that is forbidded by the spec.. - // It is the most-likely to be correct thing to do (the only other - // option is to return nothing, which almost certainly not what - // the developer wants if the '*' origin was specified. - if (options.allowCredentials) { - return null; - } else { - return "*"; - } - } else { - // Since there can be only one origin sent back, send back the first one - // as a best-effort - return explicitOrigins[0] ?? /* istanbul ignore next -- @preserve */ null; - } - } else { - // The request did not contain an 'Origin' header. This means the browser or client did not request CORS, ensure the Origin Header is set - return null; - } -} - -function getHeadersToAllow(allowed: "*" | string[], req: Request) { - const requested = (req.headers.get(AC_REQUEST_HEADERS) ?? "") - .toLowerCase() - .split(",") - .map((s) => s.trim()) - .filter(Boolean); - - const result = - allowed === "*" ? requested : requested.filter((h) => allowed.includes(h)); - return result.length > 0 ? result : null; -} - -/** - * Returns CORS headers to attach to the Response for this request. - * - * For both preflight and non-preflight requests: - * - Will set the AC-Allow-Origin header, echoing back the Origin - * - Optionally, will set AC-Allow-Credentials and AC-Expose-Headers headers - * (depending on your config) - * - Set the Vary header accordingly - * - * For preflight-requests only: - * - Will additionally set AC-Allow-Method and/or AC-Allow-Headers headers - * (these don't have to be on the non-preflight requests) - * - * Returns `null` for non-CORS requests, or if CORS should not be allowed. - */ -export function getCorsHeaders( - req: Request, - opts: Partial -): Headers | null { - const options = { ...DEFAULT_CORS_OPTIONS, ...opts } as CorsOptions; - const originToSet = getCorsOrigin(options, req); - - if (originToSet === null) { - // CORS is not enabled for this route - return null; - } - - // Construct the CORS headers to put on the response - // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin#syntax - const headers: Headers = new Headers(); - headers.set(AC_ORIGIN, originToSet); - if (options.exposeHeaders.length > 0) { - headers.set(AC_EXPOSE_HEADERS, options.exposeHeaders.join(", ")); - } - if (options.allowCredentials) { - headers.set(AC_CREDENTIALS, "true"); // case-sensitive - } - - // This is a preflight request - // http://www.w3.org/TR/cors/#resource-preflight-requests - if (req.method === "OPTIONS") { - const requestedMethod = ( - req.headers.get(AC_REQUEST_METHOD) ?? "" - ).toUpperCase(); - - // If there is no Access-Control-Request-Method header or if parsing - // failed, do not set any additional headers - if (requestedMethod && options.allowedMethods.includes(requestedMethod)) { - const headersToAllow = getHeadersToAllow(options.allowedHeaders, req); - if (headersToAllow) { - headers.set(AC_ALLOW_HEADERS, headersToAllow.join(", ")); - } - if (options.maxAge) { - headers.set(AC_MAX_AGE, String(options.maxAge)); - } - // TODO Optionally, intersect resp.headers.get('Allow') with - // options.allowedMethods, but it won’t matter much - headers.set(AC_METHODS, options.allowedMethods.join(", ")); - } else { - console.log( - "The request's Access-Control-Request-Method header does not match allowed methods. CORS headers will not be applied." - ); - } - } - - // See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin#cors_and_caching - if (options.varyHeader) { - if (headers.get(AC_ORIGIN) === "*") { - // Never set a Vary: Origin header if Origin is returned as "*" - } else { - headers.set("Vary", "Origin"); - } - } - - return headers; -} diff --git a/packages/liveblocks-zenrouter/src/index.ts b/packages/liveblocks-zenrouter/src/index.ts deleted file mode 100644 index 600ea93986..0000000000 --- a/packages/liveblocks-zenrouter/src/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from "~/lib/otel.js"; - -// Simple response generators: json(), empty(), abort(), etc. -export * from "~/responses/index.js"; - -// Router + Relay -export * from "~/ErrorHandler.js"; -export * from "~/Relay.js"; -export * from "~/Router.js"; diff --git a/packages/liveblocks-zenrouter/src/lib/matchers.ts b/packages/liveblocks-zenrouter/src/lib/matchers.ts deleted file mode 100644 index fcb18927ce..0000000000 --- a/packages/liveblocks-zenrouter/src/lib/matchers.ts +++ /dev/null @@ -1,220 +0,0 @@ -import type { Resolve } from "@liveblocks/core"; -import type { - ComposeLeft, - Objects, - Pipe, - Strings, - Tuples, - Unions, -} from "hotscript"; - -import type { StandardSchemaV1 } from "./standard-schema.js"; -import { raise } from "./utils.js"; - -const cleanSegmentRe = /^[\w-]+$/; -const identifierRe = /^[a-z]\w*$/; -const pathPrefixRegex = /^\/(([\w-]+|<[\w-]+>)\/)*\*$/; - -export type Method = (typeof ALL_METHODS)[number]; -export type HttpVerb = (typeof ALL_HTTP_VERBS)[number]; - -// All supported HTTP verbs, in their most natural ordering -export const ALL_HTTP_VERBS = [ - "GET", - "POST", - "PUT", - "PATCH", - "DELETE", - "OPTIONS", -]; - -export function sortHttpVerbsInPlace(verbs: HttpVerb[]): HttpVerb[] { - return verbs.sort( - (a, b) => ALL_HTTP_VERBS.indexOf(a) - ALL_HTTP_VERBS.indexOf(b) - ); -} - -// -// Subset of ALL_HTTP_VERBS, but OPTIONS is not included. This is because Zen -// Router will automatically allow OPTIONS for all registered routes, i.e. an -// explicit OPTIONS definition like this is (currently) not allowed: -// -// router.route('OPTIONS /my/path', ...) -// -export const ALL_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE"] as const; - -export type PathPattern = `/${string}`; -export type Pattern = `${Method} ${PathPattern}`; -export type PathPrefix = `/${string}/*` | "/*"; - -/** - * From a pattern like: - * - * 'GET /foo///baz' - * - * Extracts: - * - * { foo: string, bar: string } - */ -type ExtractParamsBasic

= Pipe< - P, // ....................................... 'GET /foo///baz' - [ - Strings.TrimLeft<`${Method} `>, // ........ '/foo///baz' - Strings.Split<"/">, // .................... ['', 'foo', '', '', 'baz'] - Tuples.Filter>, // ['', ''] - Tuples.Map< - ComposeLeft< - [ - Strings.Trim<"<" | ">">, // ......... ['bar', 'qux'] - Unions.ToTuple, // .................. [['bar'], ['qux']] - Tuples.Append, // ........... [['bar', string], ['qux', string]] - ] - > - >, - Tuples.ToUnion, // ........................ ['bar', string] | ['qux', string] - Objects.FromEntries, // ................... { bar: string; qux: string } - ] ->; - -/** - * For: - * - * { - * a: StandardSchemaV1, - * b: StandardSchemaV1, - * c: StandardSchemaV1, - * } - * - * Will return: - * - * { - * a: number, - * b: 'hi', - * c: boolean, - * } - * - */ -export type MapSchemaOutput = { - [K in keyof T]: T[K] extends StandardSchemaV1 - ? StandardSchemaV1.InferOutput - : never; -}; - -// export type WithDefaults = Pipe<>; - -/** - * From a pattern like: - * - * 'GET /foo///baz' - * - * Extracts: - * - * { foo: string, n: number } - */ -export type ExtractParams< - P extends Pattern, - TParamTypes extends Record, - E = ExtractParamsBasic

, -> = Resolve< - Pick & TParamTypes, Extract> ->; - -const ALL: Method[] = ["GET", "POST", "PATCH", "PUT", "DELETE"]; - -export interface RouteMatcher { - method: Method; - matchMethod(req: { method?: string }): boolean; - matchURL(url: URL): Record | null; -} - -function segmentAsVariable(s: string): string | null { - if (s.startsWith("<") && s.endsWith(">")) { - const identifier = s.slice(1, -1); - return identifierRe.test(identifier) ? identifier : null; - } - return null; -} - -function splitMethodAndPattern( - pattern: string -): [method: Method, pattern: string] { - for (const method of ALL) { - if (pattern.startsWith(method)) { - return [method, pattern.slice(method.length).trimStart()]; - } - } - throw new Error( - `Invalid route pattern: ${JSON.stringify(pattern)}${ - pattern.startsWith("/") - ? `. Did you mean ${JSON.stringify(`GET ${pattern}`)}?` - : "" - }` - ); -} - -function makePathMatcher(pattern: string, options: { exact: boolean }): RegExp { - const exact = options.exact; - if (pattern === "/") { - return exact ? /^\/$/ : /^\//; - } - - if (!pattern.startsWith("/")) { - // istanbul ignore next -- @preserve - throw new Error( - `Route must start with '/', but got ${JSON.stringify(pattern)}` - ); - } - - if (pattern.endsWith("/")) { - // istanbul ignore next -- @preserve - throw new Error( - `Route may not end with '/', but got ${JSON.stringify(pattern)}` - ); - } - - const segments = pattern.slice(1).split("/"); - - let index = 1; - const regexString: string[] = []; - for (const segment of segments) { - const placeholder = segmentAsVariable(segment); - if (placeholder !== null) { - regexString.push(`(?<${placeholder}>[^/]+)`); - } else if (cleanSegmentRe.test(segment)) { - regexString.push(segment); - } else { - return raise(`Invalid pattern: ${pattern} (error at position ${index + 1})`); // prettier-ignore - } - - index += segment.length + 1; - } - - return new RegExp("^/" + regexString.join("/") + (exact ? "/?$" : "(/|$)")); -} - -export function makePrefixPathMatcher(prefix: string): RegExp { - pathPrefixRegex.test(prefix) || raise(`Invalid path prefix: ${prefix}`); - prefix = prefix.slice(0, -2); // Remove the "/*" suffix - prefix ||= "/"; // If the remaining prefix is "" (empty string), use a "/" instead - - // Register the prefix matcher - return makePathMatcher(prefix, { exact: false }); -} - -export function routeMatcher(input: string): RouteMatcher { - const [method, pattern] = splitMethodAndPattern(input); - const regex = makePathMatcher(pattern, { exact: true }); - return { - method, - matchMethod(req: Request): boolean { - return method === req.method; - }, - matchURL(url: URL) { - const matches = url.pathname.match(regex); - if (matches === null) { - return null; - } - return matches.groups ?? {}; - }, - }; -} diff --git a/packages/liveblocks-zenrouter/src/lib/otel.ts b/packages/liveblocks-zenrouter/src/lib/otel.ts deleted file mode 100644 index 565add5775..0000000000 --- a/packages/liveblocks-zenrouter/src/lib/otel.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface OtelSpan { - setAttribute(key: string, value: string): void; -} - -export interface OtelConfig { - getActiveSpan: () => OtelSpan | undefined; -} diff --git a/packages/liveblocks-zenrouter/src/lib/standard-schema.d.ts b/packages/liveblocks-zenrouter/src/lib/standard-schema.d.ts deleted file mode 100644 index eba310cfcf..0000000000 --- a/packages/liveblocks-zenrouter/src/lib/standard-schema.d.ts +++ /dev/null @@ -1,175 +0,0 @@ -// ######################### -// ### Standard Typed ### -// ######################### - -/** The Standard Typed interface. This is a base type extended by other specs. */ -export interface StandardTypedV1 { - /** The Standard properties. */ - readonly "~standard": StandardTypedV1.Props; -} - -export declare namespace StandardTypedV1 { - /** The Standard Typed properties interface. */ - export interface Props { - /** The version number of the standard. */ - readonly version: 1; - /** The vendor name of the schema library. */ - readonly vendor: string; - /** Inferred types associated with the schema. */ - readonly types?: Types | undefined; - } - - /** The Standard Typed types interface. */ - export interface Types { - /** The input type of the schema. */ - readonly input: Input; - /** The output type of the schema. */ - readonly output: Output; - } - - /** Infers the input type of a Standard Typed. */ - export type InferInput = NonNullable< - Schema["~standard"]["types"] - >["input"]; - - /** Infers the output type of a Standard Typed. */ - export type InferOutput = NonNullable< - Schema["~standard"]["types"] - >["output"]; -} - -// ########################## -// ### Standard Schema ### -// ########################## - -/** The Standard Schema interface. */ -export interface StandardSchemaV1 { - /** The Standard Schema properties. */ - readonly "~standard": StandardSchemaV1.Props; -} - -export declare namespace StandardSchemaV1 { - /** The Standard Schema properties interface. */ - export interface Props - extends StandardTypedV1.Props { - /** Validates unknown input values. */ - readonly validate: ( - value: unknown, - options?: StandardSchemaV1.Options | undefined - ) => Result | Promise>; - } - - /** The result interface of the validate function. */ - export type Result = SuccessResult | FailureResult; - - /** The result interface if validation succeeds. */ - export interface SuccessResult { - /** The typed output value. */ - readonly value: Output; - /** A falsy value for `issues` indicates success. */ - readonly issues?: undefined; - } - - export interface Options { - /** Explicit support for additional vendor-specific parameters, if needed. */ - readonly libraryOptions?: Record | undefined; - } - - /** The result interface if validation fails. */ - export interface FailureResult { - /** The issues of failed validation. */ - readonly issues: ReadonlyArray; - } - - /** The issue interface of the failure output. */ - export interface Issue { - /** The error message of the issue. */ - readonly message: string; - /** The path of the issue, if any. */ - readonly path?: ReadonlyArray | undefined; - } - - /** The path segment interface of the issue. */ - export interface PathSegment { - /** The key representing a path segment. */ - readonly key: PropertyKey; - } - - /** The Standard types interface. */ - export interface Types - extends StandardTypedV1.Types {} - - /** Infers the input type of a Standard. */ - export type InferInput = - StandardTypedV1.InferInput; - - /** Infers the output type of a Standard. */ - export type InferOutput = - StandardTypedV1.InferOutput; -} - -// ############################### -// ### Standard JSON Schema ### -// ############################### - -/** The Standard JSON Schema interface. */ -export interface StandardJSONSchemaV1 { - /** The Standard JSON Schema properties. */ - readonly "~standard": StandardJSONSchemaV1.Props; -} - -export declare namespace StandardJSONSchemaV1 { - /** The Standard JSON Schema properties interface. */ - export interface Props - extends StandardTypedV1.Props { - /** Methods for generating the input/output JSON Schema. */ - readonly jsonSchema: StandardJSONSchemaV1.Converter; - } - - /** The Standard JSON Schema converter interface. */ - export interface Converter { - /** Converts the input type to JSON Schema. May throw if conversion is not supported. */ - readonly input: ( - options: StandardJSONSchemaV1.Options - ) => Record; - /** Converts the output type to JSON Schema. May throw if conversion is not supported. */ - readonly output: ( - options: StandardJSONSchemaV1.Options - ) => Record; - } - - /** - * The target version of the generated JSON Schema. - * - * It is *strongly recommended* that implementers support `"draft-2020-12"` and `"draft-07"`, as they are both in wide use. All other targets can be implemented on a best-effort basis. Libraries should throw if they don't support a specified target. - * - * The `"openapi-3.0"` target is intended as a standardized specifier for OpenAPI 3.0 which is a superset of JSON Schema `"draft-04"`. - */ - export type Target = - | "draft-2020-12" - | "draft-07" - | "openapi-3.0" - // Accepts any string for future targets while preserving autocomplete - | ({} & string); - - /** The options for the input/output methods. */ - export interface Options { - /** Specifies the target version of the generated JSON Schema. Support for all versions is on a best-effort basis. If a given version is not supported, the library should throw. */ - readonly target: Target; - - /** Explicit support for additional vendor-specific parameters, if needed. */ - readonly libraryOptions?: Record | undefined; - } - - /** The Standard types interface. */ - export interface Types - extends StandardTypedV1.Types {} - - /** Infers the input type of a Standard. */ - export type InferInput = - StandardTypedV1.InferInput; - - /** Infers the output type of a Standard. */ - export type InferOutput = - StandardTypedV1.InferOutput; -} diff --git a/packages/liveblocks-zenrouter/src/lib/utils.ts b/packages/liveblocks-zenrouter/src/lib/utils.ts deleted file mode 100644 index 92c83aaea1..0000000000 --- a/packages/liveblocks-zenrouter/src/lib/utils.ts +++ /dev/null @@ -1,14 +0,0 @@ -export function raise(message: string): never { - throw new Error(message); -} - -export function mapv( - obj: Record, - mapper: (value: T, key: string) => U -): Record { - const rv: Record = {}; - for (const key of Object.keys(obj)) { - rv[key] = mapper(obj[key], key); - } - return rv; -} diff --git a/packages/liveblocks-zenrouter/src/responses/HttpError.ts b/packages/liveblocks-zenrouter/src/responses/HttpError.ts deleted file mode 100644 index b5240d3295..0000000000 --- a/packages/liveblocks-zenrouter/src/responses/HttpError.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { raise } from "~/lib/utils.js"; - -import type { HeadersInit } from "./compat.js"; - -export class HttpError extends Error { - static readonly codes: { [code: number]: string | undefined } = { - 400: "Bad Request", - 401: "Unauthorized", - // 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - // 407: "Proxy Authentication Required", - // 408: "Request Timeout", - 409: "Conflict", - // 410: "Gone", - 411: "Length Required", - // 412: "Precondition Failed", - 413: "Payload Too Large", - // 414: "URI Too Long", - 415: "Unsupported Media Type", - // 416: "Range Not Satisfiable", - // 417: "Expectation Failed", - // 418: "I'm a teapot", - // 421: "Misdirected Request", - 422: "Unprocessable Entity", - // 423: "Locked", - // 424: "Failed Dependency", - // 425: "Too Early", - 426: "Upgrade Required", - // 428: "Precondition Required", - // 429: "Too Many Requests", - // 431: "Request Header Fields Too Large", - // 451: "Unavailable For Legal Reasons", - // 500: "Internal Server Error", - }; - - // TODO Add support for "public reason" details? - public readonly status: number; - public readonly headers?: HeadersInit; - - constructor(status: number, message?: string, headers?: HeadersInit) { - if (typeof status !== "number" || status < 100 || status >= 600) { - raise(`Invalid HTTP status code: ${status}`); - } - - if (status >= 500) { - raise("Don't use HttpError for 5xx errors"); - } - - if (status >= 200 && status < 300) { - raise("Cannot create an HTTP error for a success code"); - } - - message ??= - HttpError.codes[status] ?? - raise(`Unknown error code ${status}, provide a message`); - super(message); - - if (status === 422 && !(this instanceof ValidationError)) { - raise("Don't use HttpError for 422 errors, use ValidationError"); - } - - this.status = status; - this.headers = headers; - } -} - -export class ValidationError extends HttpError { - public readonly status = 422; - public readonly reason: string; - - constructor(reason: string) { - super(422); - this.reason = reason; - } -} diff --git a/packages/liveblocks-zenrouter/src/responses/compat.ts b/packages/liveblocks-zenrouter/src/responses/compat.ts deleted file mode 100644 index edec35fc3f..0000000000 --- a/packages/liveblocks-zenrouter/src/responses/compat.ts +++ /dev/null @@ -1,5 +0,0 @@ -// HeadersInit is normally a global from lib.dom.d.ts (for DOM or Node -// environments), or from @cloudflare/workers-types. In this case, we want to -// be able to use it from _both_ environments, so we're defining it here inline -// as the intersection of the two. -export type HeadersInit = Record | Headers; diff --git a/packages/liveblocks-zenrouter/src/responses/index.ts b/packages/liveblocks-zenrouter/src/responses/index.ts deleted file mode 100644 index 713230fea2..0000000000 --- a/packages/liveblocks-zenrouter/src/responses/index.ts +++ /dev/null @@ -1,204 +0,0 @@ -import type { Json, JsonObject } from "@liveblocks/core"; - -import type { HeadersInit } from "./compat.js"; -import { HttpError, ValidationError } from "./HttpError.js"; - -const KB = 1024; - -/** - * A simple shim for ReadableStream.from(). Uses the native implementation if - * available. - * - * This polyfill does not guarantee spec-compliance, and merely exists so we - * can use ReadableStream.from() in environments that don't support this API - * yet, like Bun, or old Node versions. - * - * This API is available in the following runtimes: - * - Node.js (since v20.6+) - * - Cloudflare Workers (since Apr 4, 2024) - * - * But not supported yet in: - * - Bun - see https://github.com/oven-sh/bun/issues/3700 - */ -/* istanbul ignore next -- @preserve polyfill only used in environments without ReadableStream.from (e.g. Bun) */ -function ReadableStream_from_shim(iterable: Iterable): ReadableStream { - const iterator = iterable[Symbol.iterator](); - return new ReadableStream({ - pull(controller) { - const res = iterator.next(); - if (res.done) { - controller.close(); - } else { - controller.enqueue(res.value); - } - }, - cancel() { - iterator.return?.(); - }, - }); -} - -/* eslint-disable */ -/* istanbul ignore next -- @preserve only one branch reachable per environment */ -const ReadableStream_from = - typeof (ReadableStream as any).from === "function" - ? ((ReadableStream as any).from.bind(ReadableStream) as ( - iterable: Iterable - ) => ReadableStream) - : ReadableStream_from_shim; -/* eslint-enable */ - -function* imap(iterable: Iterable, fn: (x: T) => U): Iterable { - for (const x of iterable) { - yield fn(x); - } -} - -/** - * WeakSet tracking "generic" abort responses. - * Generic responses can be replaced by the error handler with custom error formatting. - * Non-generic responses (e.g., custom json() responses) are returned verbatim. - */ -const genericAborts = new WeakSet(); - -/** - * Checks if a Response is a generic abort response (created by abort()). - */ -export function isGenericAbort(resp: Response): boolean { - return genericAborts.has(resp); -} - -/** - * Returns an empty HTTP 204 response. - */ -export function empty(): Response { - return new Response(null, { status: 204 }); -} - -/** - * Return a JSON response. - */ -export function json( - value: JsonObject, - status = 200, - headers?: HeadersInit -): Response { - return new Response(JSON.stringify(value), { - status, - headers: { ...headers, "Content-Type": "application/json; charset=utf-8" }, - }); -} - -/** - * Return an HTML response. - */ -export function html( - content: string, - status = 200, - headers?: HeadersInit -): Response { - return new Response(content, { - status, - headers: { ...headers, "Content-Type": "text/html; charset=utf-8" }, - }); -} - -/** - * Throws a generic abort Response for the given status code. Use this to - * terminate the handling of a route and return an HTTP error to the user. - * - * The response body will be determined by the configured error handler. - * To return a custom error body that won't be replaced, throw a json() response instead. - */ -export function abort(status: number, headers?: HeadersInit): never { - const resp = new Response(null, { status, headers }); - genericAborts.add(resp); - throw resp; -} - -const encoder = new TextEncoder(); - -/** - * Batch small string chunks into larger blocks of at least `minSize` - * characters before yielding. Reduces per-chunk overhead when the source - * generator yields many tiny strings. - */ -function* buffered(iterable: Iterable, size: number): Iterable { - let buf = ""; - for (const s of iterable) { - buf += s; - if (buf.length >= size) { - yield buf; - buf = ""; - } - } - if (buf) yield buf; -} - -/** - * Return a streaming text response from a generator that yields strings. The - * stream will be encoded as UTF-8. - * - * Small string chunks will get buffered into emitted chunks of `bufSize` bytes (defaults to 64 kB) - * at least 64kB that many characters before being encoded and enqueued, - * reducing per-chunk transfer overhead. (By default buffers chunks of at least - * 64kB size.) - */ -export function textStream( - iterable: Iterable, - headers?: HeadersInit, - options?: { - bufSize: number; - } -): Response { - const source = buffered(iterable, options?.bufSize ?? 64 * KB); - const chunks = imap(source, (s) => encoder.encode(s)); - return new Response( - ReadableStream_from(chunks) as unknown as string, - // ^^^^^^^^^^^^^^^^^^^^ - // This ugly cast needed due to Node.js vs Cloudflare - // Workers ReadableStream type mismatch :( - { headers } - ); -} - -/** - * Return a streaming NDJSON (Newline Delimited JSON) response from a generator - * that yields JSON values. Each value will be serialized as a single line. - */ -export function ndjsonStream( - iterable: Iterable, - headers?: HeadersInit -): Response { - const lines = imap(iterable, (value) => `${JSON.stringify(value)}\n`); - return textStream(lines, { - ...headers, - "Content-Type": "application/x-ndjson", - }); -} - -/** - * Return a streaming JSON array response from a generator that yields JSON - * values. The output will be a valid JSON array: [value1,value2,...]\n - */ -export function jsonArrayStream( - iterable: Iterable, - headers?: HeadersInit -): Response { - function* chunks() { - yield "["; - let first = true; - for (const value of iterable) { - if (!first) yield ","; - first = false; - yield JSON.stringify(value); - } - yield "]\n"; - } - return textStream(chunks(), { - ...headers, - "Content-Type": "application/json; charset=utf-8", - }); -} - -export { HttpError, ValidationError }; diff --git a/packages/liveblocks-zenrouter/test-d/Relay.test-d.ts b/packages/liveblocks-zenrouter/test-d/Relay.test-d.ts deleted file mode 100644 index 5f6972d8f7..0000000000 --- a/packages/liveblocks-zenrouter/test-d/Relay.test-d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { expectType } from "tsd"; -import { ZenRelay, ZenRouter } from "@liveblocks/zenrouter"; - -declare const req: Request; - -async () => { - const app = new ZenRelay(); - app - .relay("/foo/*", new ZenRouter()) - .relay("/bar/*", new ZenRouter()) - .relay("/qux/*", new ZenRouter()) - .relay("/*", new ZenRouter()); - expectType(await app.fetch(req, 1, "a", true)); -}; diff --git a/packages/liveblocks-zenrouter/test-d/Router.test-d.ts b/packages/liveblocks-zenrouter/test-d/Router.test-d.ts deleted file mode 100644 index 99acd68d27..0000000000 --- a/packages/liveblocks-zenrouter/test-d/Router.test-d.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { expectError, expectType } from "tsd"; -import { number, numeric, object, string } from "decoders"; - -import { HttpError, ValidationError, ZenRouter } from "@liveblocks/zenrouter"; - -declare const req: Request; - -async () => { - const app = new ZenRouter(); - - app.route("GET /", ({ ctx, p }) => { - expectType>(ctx); - expectType(p.foo); - fail("no implementation"); - }); - - expectType(await app.fetch(req, 1, "a", true)); -}; - -// With a getContext() function -async () => { - const app = new ZenRouter({ - getContext: (request, ...args) => ({ hello: "world", request, args }), - }); - - app.route("GET /", ({ ctx }) => { - expectType(ctx.hello); // "world" - expectType(ctx.request.url); - expectType(ctx.args); - fail("no implementation"); - }); -}; - -// With a authorize() function -async () => { - const app = new ZenRouter({ - authorize: ({ ctx }) => ({ - userId: "user-123", - passThrough: { ctx }, - }), - }); - - app.route("GET /", ({ ctx, auth }) => { - expectType>(ctx); - expectType>(auth.passThrough.ctx); // same thing - expectType(auth.userId); // "user-123" - fail("no implementation"); - }); -}; - -// With a getContext() + authorize() function -async () => { - const app = new ZenRouter({ - getContext: () => ({ abc: 123 }), - authorize: ({ ctx }) => ({ - userId: "user-456", - passThrough: { ctx }, - }), - }); - - app.route("GET /", ({ ctx, auth }) => { - expectType>(ctx); - expectType>(auth.passThrough.ctx); // same thing - expectType(auth.userId); // "user-456" - fail("no implementation"); - }); -}; - -// With centralized param validation -async () => { - const app = new ZenRouter({ - params: { - id: numeric, - hex: string.transform((x) => parseInt(x, 16)), - }, - }); - - app.route("GET /rooms/", ({ p }) => { - expectType(p.id); - fail("no implementation"); - }); - - app.route("GET /foo//bar/", ({ p }) => { - expectType(p.id); - expectType(p.name); - expectError(p.hex); // Not part of the pattern, so not available - fail("no implementation"); - }); - - app.route("GET /foo//bar//hex/", ({ p }) => { - expectType(p.id); - expectType(p.name); - expectType(p.hex); // Compare to the prev test, here hex *is* available - fail("no implementation"); - }); - - // Check body decoding - app.route( - "POST /foo/", - - ({ body }) => { - expectType(body); - fail("no implementation"); - } - ); - - // Check body decoding - app.route( - "POST /foo/", - - object({ foo: string, bar: number }), - - ({ body }) => { - expectType(body.foo); - expectType(body.bar); - expectError(body.qux); - fail("no implementation"); - } - ); - - // Accessing query params - app.route( - "GET /foo", - - ({ q }) => { - // Accessing query params like ?foo=123&bar=hi are always optional - expectType(q.foo); - expectType(q.bar); - expectType(q.i_do_not_exist); - fail("no implementation"); - } - ); -}; - -// Type-safety of error handlers -async () => { - const app = new ZenRouter(); - - app.onUncaughtError((e) => { - expectType(e); - fail(); - }); - - app.onError((e) => { - expectType(e); - if (e instanceof ValidationError) { - expectType(e.reason); - } - fail(); - }); -}; diff --git a/packages/liveblocks-zenrouter/test/ErrorHandler.test.ts b/packages/liveblocks-zenrouter/test/ErrorHandler.test.ts deleted file mode 100644 index 156f3234c1..0000000000 --- a/packages/liveblocks-zenrouter/test/ErrorHandler.test.ts +++ /dev/null @@ -1,178 +0,0 @@ -import { describe, expect, test, vi } from "vitest"; - -import type { ErrorContext } from "~/ErrorHandler.js"; -import { ErrorHandler } from "~/ErrorHandler.js"; -import { abort, HttpError } from "~/index.js"; - -import { - captureConsole, - disableConsole, - expectResponse, - fail, -} from "./utils.js"; - -class CustomHttpError extends HttpError { - constructor() { - super(432, "Custom Error"); - } -} - -class RandomError extends Error { - x = 42; -} - -// A stub to use in tests that want to handle an error, but aren't interested -// in testing error context details -const unused = Symbol() as any as ErrorContext; - -describe("ErrorHandler", () => { - test("can only define a handler once", () => { - const eh = new ErrorHandler(); - - // First call works - eh.onError(fail); - - // Second one fails - expect(() => eh.onError(fail)).toThrow( - "An error handler was already registered" - ); - }); - - test("can only define an uncaught handler once", () => { - const eh = new ErrorHandler(); - - // First call works - eh.onUncaughtError(fail); - - // Second one fails - expect(() => eh.onUncaughtError(fail)).toThrow( - "An uncaught error handler was already registered" - ); - }); - - test("invokes default error handlers when no error handlers are provided", async () => { - disableConsole(); - - // Setup - const eh = new ErrorHandler(); - - const errA = new Error("Test1"); - const errB = new RandomError("Test2"); - const errC = new CustomHttpError(); - - // Test - await expectResponse( - await eh.handle(errA, unused), - { error: "Internal Server Error" }, - 500 - ); - - await expectResponse( - await eh.handle(errB, unused), - { error: "Internal Server Error" }, - 500 - ); - - await expectResponse( - await eh.handle(errC, unused), - { error: "Custom Error" }, - 432 - ); - }); - - test("invokes the correct error handler", async () => { - // Setup - const m1 = vi.fn( - (e: HttpError) => new Response("normal error", { status: e.status }) - ); - const m2 = vi.fn(() => new Response("uncaught error", { status: 500 })); - - const eh = new ErrorHandler(); - eh.onError(m1); - eh.onUncaughtError(m2); - - const errA = new Error("Test1"); - const errB = new RandomError("Test1"); - const errC = new CustomHttpError(); - - // Test with errA - await expectResponse(await eh.handle(errA, unused), "uncaught error", 500); - expect(m1).not.toBeCalled(); - expect(m2).toBeCalledWith(errA, unused); - m1.mockClear(); - m2.mockClear(); - - // Test with errB - await expectResponse(await eh.handle(errB, unused), "uncaught error", 500); - expect(m1).not.toBeCalled(); - expect(m2).toBeCalledWith(errB, unused); - m1.mockClear(); - m2.mockClear(); - - // Test with errB - await expectResponse(await eh.handle(errC, unused), "normal error", 432); - expect(m1).toBeCalledWith(errC, unused); - expect(m2).not.toBeCalled(); - m1.mockClear(); - m2.mockClear(); - }); - - test("handling non-errors will use fallback", async () => { - const konsole = captureConsole(); - - const eh = new ErrorHandler(); - const notAnError = new Date(); - - await expectResponse( - await eh.handle(notAnError, unused), - { error: "Internal Server Error" }, - 500 - ); - - expect(konsole.error).toHaveBeenNthCalledWith( - 1, - expect.stringMatching(/^Uncaught error: .*/) - ); - expect(konsole.error).toHaveBeenNthCalledWith( - 2, - "...but no uncaught error handler was set up for this router." - ); - }); - - test("handles generic abort with status code unsupported by HttpError", async () => { - const eh = new ErrorHandler(); - - // abort(500) creates a generic abort Response. When the handler tries to - // convert it to an HttpError, the constructor throws because 5xx is not - // allowed. The catch fallback returns a generic error response. - let abortResponse: Response; - try { - abort(500); - } catch (e) { - abortResponse = e as Response; - } - - const res = await eh.handle(abortResponse!, unused); - await expectResponse(res, { error: "Unknown" }, 500); - }); - - test("handles bugs in error handler itself", async () => { - const konsole = captureConsole(); - - const eh = new ErrorHandler(); - eh.onError(() => { - throw new Error("Oops, I'm a broken error handler"); - }); - - // Trigger a 404, but the broken error handler will not handle that correctly - const res = await eh.handle(new HttpError(404), unused); - await expectResponse(res, { error: "Internal Server Error" }, 500); - - expect(konsole.error).toHaveBeenNthCalledWith( - 1, - expect.stringMatching( - /^Uncaught error: Error: Oops, I'm a broken error handler/ - ) - ); - }); -}); diff --git a/packages/liveblocks-zenrouter/test/HttpError.test.ts b/packages/liveblocks-zenrouter/test/HttpError.test.ts deleted file mode 100644 index 1f58945fc1..0000000000 --- a/packages/liveblocks-zenrouter/test/HttpError.test.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { describe, expect, test } from "vitest"; - -import { HttpError, ValidationError } from "~/responses/index.js"; - -describe("HttpError", () => { - test("construct custom http errors", () => { - const err = new HttpError(490, "Custom"); - expect(err.status).toEqual(490); - expect(err.message).toEqual("Custom"); - }); - - test("cannot construct http errors with invalid error codes", () => { - expect(() => new HttpError(-1)).toThrow("Invalid HTTP status code: -1"); - expect(() => new HttpError(-1, "Custom")).toThrow( - "Invalid HTTP status code: -1" - ); - - expect(() => new HttpError(200)).toThrow( - "Cannot create an HTTP error for a success code" - ); - expect(() => new HttpError(200, "Custom")).toThrow( - "Cannot create an HTTP error for a success code" - ); - - expect(() => new HttpError(299)).toThrow( - "Cannot create an HTTP error for a success code" - ); - expect(() => new HttpError(299, "Custom")).toThrow( - "Cannot create an HTTP error for a success code" - ); - - expect(() => new HttpError(500)).toThrow( - "Don't use HttpError for 5xx errors" - ); - expect(() => new HttpError(500, "Custom")).toThrow( - "Don't use HttpError for 5xx errors" - ); - - expect(() => new HttpError(502)).toThrow( - "Don't use HttpError for 5xx errors" - ); - expect(() => new HttpError(502, "Custom")).toThrow( - "Don't use HttpError for 5xx errors" - ); - - expect(() => new HttpError(600)).toThrow("Invalid HTTP status code: 600"); - expect(() => new HttpError(600, "Custom")).toThrow( - "Invalid HTTP status code: 600" - ); - - expect(() => new HttpError(650)).toThrow("Invalid HTTP status code: 650"); - expect(() => new HttpError(650, "Custom")).toThrow( - "Invalid HTTP status code: 650" - ); - - expect(() => new HttpError(1234)).toThrow("Invalid HTTP status code: 1234"); - expect(() => new HttpError(1234, "Custom")).toThrow( - "Invalid HTTP status code: 1234" - ); - }); - - test("cannot construct non-standard http errors without a custom description", () => { - expect(() => new HttpError(450)).toThrow( - "Unknown error code 450, provide a message" - ); - - const err = new HttpError(450, "Custom"); - expect(err.status).toEqual(450); - expect(err.message).toEqual("Custom"); - }); -}); - -describe("ValidationError", () => { - test("construct custom validation errors", () => { - const err = new ValidationError("Invalid value 123 for field xyz"); - expect(err.status).toEqual(422); - expect(err.message).toEqual("Unprocessable Entity"); - expect(err.reason).toEqual("Invalid value 123 for field xyz"); - }); - - test("cannot use HttpError for 422 responses", () => { - expect(() => new HttpError(422)).toThrow( - "Don't use HttpError for 422 errors, use ValidationError" - ); - expect(() => new HttpError(422, "Yo")).toThrow( - "Don't use HttpError for 422 errors, use ValidationError" - ); - }); -}); diff --git a/packages/liveblocks-zenrouter/test/Relay.test.ts b/packages/liveblocks-zenrouter/test/Relay.test.ts deleted file mode 100644 index 1544e60f46..0000000000 --- a/packages/liveblocks-zenrouter/test/Relay.test.ts +++ /dev/null @@ -1,430 +0,0 @@ -import { describe, expect, test } from "vitest"; - -import { abort, json, ZenRelay, ZenRouter } from "~/index.js"; -import { - captureConsole, - disableConsole, - expectResponse, - ok, -} from "~test/utils.js"; - -const WITHOUT_AUTH = { - authorize: () => Promise.resolve(true), -}; - -describe("Relay basic setup", () => { - test("no configured relays", async () => { - disableConsole(); - - const relay = new ZenRelay(); - const req = new Request("http://example.org/"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); - }); - - test("unused prefixes", async () => { - disableConsole(); - - const foo = new ZenRouter(WITHOUT_AUTH); - foo.route("GET /foo/bar", ok("From bar")); - - const relay = new ZenRelay(); - relay.relay("/foo/*", foo); - - { - const req = new Request("http://example.org/"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Relay - } - - { - const req = new Request("http://example.org/bar"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Relay - } - - { - const req = new Request("http://example.org/foo"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Router, not by Relay! - } - - { - const req = new Request("http://example.org/foo/bar"); - const resp = await relay.fetch(req); - await expectResponse(resp, { message: "From bar" }); - } - }); - - test("no partial url segment matching", async () => { - disableConsole(); - - const foo = new ZenRouter(WITHOUT_AUTH); - foo.route("GET /foo/bar", ok("From bar")); - - const relay = new ZenRelay(); - relay.relay("/foo/*", foo); - relay.relay("/*", () => fail("Nope")); - - { - const req = new Request("http://example.org/foooooo"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Internal Server Error" }, 500); // thrown by the nope - } - - { - const req = new Request("http://example.org/fo"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Internal Server Error" }, 500); // thrown by the nope - } - - { - const req = new Request("http://example.org/foo"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Router, not by Relay! - } - - { - const req = new Request("http://example.org/foo/bar"); - const resp = await relay.fetch(req); - await expectResponse(resp, { message: "From bar" }); - } - }); - - test("dynamic placeholders #1", async () => { - disableConsole(); - - const foo = new ZenRouter(WITHOUT_AUTH); - foo.route("GET /foo/bar", ok("From bar")); - foo.route("GET /foo/qux/hello", ok("From hello")); - foo.route("GET /foo/baz/mutt", ok("From mutt")); - - const relay = new ZenRelay(); - relay.relay("/foo//*", foo); - - { - const req = new Request("http://example.org/"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Relay - } - - { - const req = new Request("http://example.org/bar"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Relay - } - - { - const req = new Request("http://example.org/foo"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Router, not by Relay! - } - - { - const req = new Request("http://example.org/foo/"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Router, not by Relay! - } - - { - const req = new Request("http://example.org/foo/bar"); - const resp = await relay.fetch(req); - await expectResponse(resp, { message: "From bar" }); - } - - { - const req = new Request("http://example.org/foo/bar/"); - const resp = await relay.fetch(req); - await expectResponse(resp, { message: "From bar" }); - } - }); - - test("dynamic placeholders #2", async () => { - disableConsole(); - - const foo = new ZenRouter(WITHOUT_AUTH); - foo.route("GET /foo/bar", ok("From bar")); - foo.route("GET /foo/qux/hello", ok("From hello")); - foo.route("GET /foo/baz/mutt", ok("From mutt")); - - const relay = new ZenRelay(); - relay.relay("//baz/*", foo); - - { - const req = new Request("http://example.org/"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Relay - } - - { - const req = new Request("http://example.org/bar"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Relay - } - - { - const req = new Request("http://example.org/foo"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Relay - } - - { - const req = new Request("http://example.org/foo"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Relay - } - - { - const req = new Request("http://example.org/foo/bar"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Relay - } - - { - const req = new Request("http://example.org/foo/baz/mutt"); - const resp = await relay.fetch(req); - await expectResponse(resp, { message: "From mutt" }); - } - }); - - test("catchalls", async () => { - disableConsole(); - - const foo = new ZenRouter(WITHOUT_AUTH); - foo.route("GET /foo/bar", ok("From router 1")); - - const bar = new ZenRouter(WITHOUT_AUTH); - bar.route("GET /bar/baz", ok("From router 2")); - - const qux = new ZenRouter(WITHOUT_AUTH); - qux.route("GET /qux/mutt", ok("From router 3")); - - const relay = new ZenRelay(); - relay.relay("/foo/*", foo); - relay.relay("/bar/*", bar); - relay.relay("/*", qux); - - { - const req = new Request("http://example.org/"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Relay - } - - { - const req = new Request("http://example.org/foo/bar"); - const resp = await relay.fetch(req); - await expectResponse(resp, { message: "From router 1" }); - } - - { - const req = new Request("http://example.org/bar/baz"); - const resp = await relay.fetch(req); - await expectResponse(resp, { message: "From router 2" }); - } - - { - const req = new Request("http://example.org/qux/mutt"); - const resp = await relay.fetch(req); - await expectResponse(resp, { message: "From router 3" }); - } - - { - const req = new Request("http://example.org/foo/i-do-not-exist"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // From router 1 - } - - { - const req = new Request("http://example.org/bar/i-do-not-exist"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // From router 2 - } - - { - const req = new Request("http://example.org/qux/i-do-not-exist"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // From router 3 - } - }); - - test("catchalls (order matters)", async () => { - disableConsole(); - - const foo = new ZenRouter(WITHOUT_AUTH); - foo.route("GET /foo/bar", ok("From router 1")); - - const bar = new ZenRouter(WITHOUT_AUTH); - bar.route("GET /bar/baz", ok("From router 2")); - - const qux = new ZenRouter(WITHOUT_AUTH); - qux.route("GET /qux/mutt", ok("From router 3")); - - const relay = new ZenRelay(); - relay.relay("/*", qux); // 🔑 NOTE: Catchall defined before all other routes! - relay.relay("/foo/*", foo); - relay.relay("/bar/*", bar); - - { - const req = new Request("http://example.org/"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // thrown by Relay - } - - { - const req = new Request("http://example.org/foo/bar"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // From router 3 - } - - { - const req = new Request("http://example.org/bar/baz"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); // From router 3 - } - - { - const req = new Request("http://example.org/qux/mutt"); - const resp = await relay.fetch(req); - await expectResponse(resp, { message: "From router 3" }); - } - }); -}); - -describe("Misconfigured Relay instance", () => { - test("invalid match prefix #1", () => { - const relay = new ZenRelay(); - expect(() => relay.relay("GET /foo" as any, new ZenRouter())).toThrow( - "Invalid path prefix: GET /foo" - ); - }); - - test("invalid match prefix #2", () => { - const relay = new ZenRelay(); - expect(() => relay.relay("/foo /bar" as any, new ZenRouter())).toThrow( - "Invalid path prefix: /foo /bar" - ); - }); - - test("invalid match prefix #3", () => { - const relay = new ZenRelay(); - expect(() => relay.relay("/foo" as any, new ZenRouter())).toThrow( - "Invalid path prefix: /foo" - ); - }); - - test("invalid match prefix #4", () => { - const relay = new ZenRelay(); - expect(() => relay.relay("/foo*" as any, new ZenRouter())).toThrow( - "Invalid path prefix: /foo*" - ); - }); -}); - -describe("Error handling behavior", () => { - test("aborting vs throwing custom error (which remains uncaught)", async () => { - const konsole = captureConsole(); - const router = new ZenRouter(WITHOUT_AUTH); - router.route("GET /test/403", () => abort(403)); - router.route("GET /test/oops", () => { - throw new Error("Oops"); - }); - - const relay = new ZenRelay().relay("/test/*", router); - - { - const req = new Request("http://example.org/test/403"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Forbidden" }, 403); - } - { - const req = new Request("http://example.org/test/oops"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Internal Server Error" }, 500); - } - - expect(konsole.log).not.toHaveBeenCalled(); - expect(konsole.warn).not.toHaveBeenCalled(); - expect(konsole.error).toHaveBeenCalledWith( - expect.stringMatching("Uncaught error: Error: Oops") - ); - expect(konsole.error).toHaveBeenCalledWith( - "...but no uncaught error handler was set up for this router." - ); - }); - - test("same, but now uncaught handler is defined (at the Router level)", async () => { - const konsole = captureConsole(); - const router = new ZenRouter(WITHOUT_AUTH); - router.onUncaughtError(() => json({ custom: "error" }, 500)); - - router.route("GET /test/403", () => abort(403)); - router.route("GET /test/oops", () => { - throw new Error("Oops"); - }); - - const relay = new ZenRelay().relay("/test/*", router); - - { - const req = new Request("http://example.org/test/403"); - const resp = await relay.fetch(req); - await expectResponse(resp, { error: "Forbidden" }, 403); - } - { - const req = new Request("http://example.org/test/oops"); - const resp = await relay.fetch(req); - await expectResponse(resp, { custom: "error" }, 500); - } - - expect(konsole.log).not.toHaveBeenCalled(); - expect(konsole.warn).not.toHaveBeenCalled(); - expect(konsole.error).not.toHaveBeenCalled(); - expect(konsole.error).not.toHaveBeenCalled(); - }); - - test("same, but now there is no Router (we're using a custom handler function) #1", async () => { - const app = new ZenRelay().relay( - "/oops/*", - // NOTE! *Not* using a Router instance here, instead using a custom - // handler function directly! This is NOT recommended, but currently - // supported only to allow using itty-router here! - () => { - throw new Error("Oops"); - } - ); - - const req = new Request("http://example.org/haha"); // NOTE: Not calling /oops here! - const resp = await app.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); - }); - - test("same, but now there is no Router (we're using a custom handler function) #2", async () => { - const app = new ZenRelay().relay( - "/oops/*", - // NOTE! *Not* using a Router instance here, instead using a custom - // handler function directly! This is NOT recommended, but currently - // supported only to allow using itty-router here! - () => { - throw new Error("Oops"); - } - ); - - const konsole = captureConsole(); - - const req = new Request("http://example.org/oops"); - const resp = await app.fetch(req); - await expectResponse(resp, { error: "Internal Server Error" }, 500); - - expect(konsole.log).not.toHaveBeenCalled(); - expect(konsole.warn).not.toHaveBeenCalled(); - expect(konsole.error).toHaveBeenCalledTimes(3); - expect(konsole.error).toHaveBeenCalledWith( - "Relayer caught error in subrouter! This should never happen, as routers should never throw an unexpected error! Error: Oops" - ); - expect(konsole.error).toHaveBeenCalledWith( - expect.stringMatching("Uncaught error: Error: Oops") - ); - expect(konsole.error).toHaveBeenCalledWith( - "...but no uncaught error handler was set up for this router." - ); - }); -}); diff --git a/packages/liveblocks-zenrouter/test/Router.test.ts b/packages/liveblocks-zenrouter/test/Router.test.ts deleted file mode 100644 index 01d0ce05dc..0000000000 --- a/packages/liveblocks-zenrouter/test/Router.test.ts +++ /dev/null @@ -1,955 +0,0 @@ -import type { Json } from "@liveblocks/core"; -import { - json as jsonDecoder, - number, - numeric, - object, - optional, -} from "decoders"; -import { nanoid } from "nanoid"; -import { beforeEach, describe, expect, test } from "vitest"; - -import { ErrorHandler } from "~/ErrorHandler.js"; -import { abort, empty, HttpError, json, ZenRouter } from "~/index.js"; -import { - captureConsole, - disableConsole, - expectEmptyResponse, - expectResponse, - fail, -} from "~test/utils.js"; - -// Extend Response to be able to generate 101 responses. This is -// what the Cloudflare workers platform support, but you cannot -// construct such a Response in Node. -class WebSocketResponse extends Response { - constructor(headers?: Record) { - super(null, { headers }); - } - get status() { - return 101; - } - get statusText() { - return "Switching Protocols"; - } -} - -const IGNORE_AUTH_FOR_THIS_TEST = () => Promise.resolve(true); -const TEST_ORIGIN = "https://example-origin.org"; -const ANOTHER_ORIGIN = "https://another-origin.org"; - -/** - * Generates the simplest router you can think of. - */ -function simplestRouter() { - return new ZenRouter({ authorize: IGNORE_AUTH_FOR_THIS_TEST }); -} - -describe("starting from scratch gives guided experience", () => { - test("take 0", () => { - const r = new ZenRouter(); - expect(() => r.fetch).toThrow("No routes configured yet. Try adding one?"); - }); - - test("take 1", () => { - const r = new ZenRouter(); - expect(() => - // @ts-expect-error deliberate type error - r.route("/", fail) - ).toThrow('Invalid route pattern: "/". Did you mean "GET /"?'); - }); -}); - -describe("Router setup errors", () => { - test("default context is null when not specified", async () => { - const r = simplestRouter(); - r.route("GET /", ({ ctx }) => json({ ctx } as any)); - - const req = new Request("http://example.org/"); - const resp = await r.fetch(req); - await expectResponse(resp, { ctx: null }); - }); - - test("unless you specifically define how to authorize, the default router will reject all requests", async () => { - const konsole = captureConsole(); - - const r = new ZenRouter(); - r.route("GET /", ({ ctx }) => json({ ctx } as any)); - - const req = new Request("http://example.org/"); - const resp = await r.fetch(req); - await expectResponse(resp, { error: "Forbidden" }, 403); - - expect(konsole.error).toHaveBeenCalledWith( - "This request was not checked for authorization. Please configure a generic `authorize` function in the ZenRouter constructor." - ); - }); - - test("fails for patterns without method", () => { - const r = simplestRouter(); - // @ts-expect-error Not starting with an HTTP method - expect(() => r.route("i am not valid", fail)).toThrow( - 'Invalid route pattern: "i am not valid"' - ); - }); - - test("fails for patterns without method", () => { - const r = simplestRouter(); - // @ts-expect-error Not starting with an HTTP method - expect(() => r.route("/foo", fail)).toThrow( - 'Invalid route pattern: "/foo". Did you mean "GET /foo"?' - ); - }); - - test("fails for patterns with invalid method", () => { - const r = simplestRouter(); - // @ts-expect-error Not starting with a valid HTTP method - expect(() => r.route("GRAB /foo", fail)).toThrow( - 'Invalid route pattern: "GRAB /foo"' - ); - }); - - test("fails with duplicate placeholder", () => { - const r = simplestRouter(); - expect(() => r.route("GET /foo//", fail)).toThrow( - "Duplicate capture group name" - ); - }); - - test("fails with placeholder names that aren’t valid JS names", () => { - const r = simplestRouter(); - expect(() => r.route("GET /foo/", fail)).toThrow( - "Invalid pattern: /foo/ (error at position 6)" - ); - }); -}); - -describe("Basic Router", () => { - const r = new ZenRouter({ - errorHandler: new ErrorHandler(), - authorize: IGNORE_AUTH_FOR_THIS_TEST, - getContext: () => null, - params: { - x: numeric, - y: numeric, - }, - }); - - r.onUncaughtError(() => - json( - { error: "Internal server error", details: "Please try again later" }, - 500 - ) - ); - - r.route("GET /ping", () => json({ data: "pong" })); - r.route("GET /echo/", ({ p }) => json({ name: p.name })); - r.route("GET /concat//", ({ p }) => json({ result: `${p.a}${p.b}` })); - r.route("GET /add//", ({ p }) => json({ result: p.x + p.y, p })); - r.route("GET /custom-error", () => { - throw new Response("I'm a custom response", { status: 499 }); - }); - r.route("GET /custom-http-error", () => { - throw new HttpError(488, "Custom Error"); - }); - r.route("GET /broken", () => { - throw new Error("Random error"); - }); - r.route("GET /echo-query", ({ q }) => json({ q })); - r.route("GET /empty", () => empty()); - r.route("POST /empty", optional(object({ a: number })), () => ({ ok: true })); - - r.route("GET /test", fail); - r.route("POST /test", fail); - r.route("PATCH /test", fail); - r.route("PUT /test", fail); - r.route("DELETE /test", fail); - - test("without placeholders", async () => { - const req = new Request("http://example.org/ping"); - expect(await (await r.fetch(req)).json()).toEqual({ - data: "pong", - }); - }); - - test("one placeholder", async () => { - const req1 = new Request("http://example.org/echo/foo"); - expect(await (await r.fetch(req1)).json()).toEqual({ - name: "foo", - }); - - const req2 = new Request("http://example.org/echo/bar"); - expect(await (await r.fetch(req2)).json()).toEqual({ - name: "bar", - }); - }); - - test("test paths with multiple dynamic placeholders", async () => { - const req1 = new Request("http://example.org/concat/foo/bar"); - expect(await (await r.fetch(req1)).json()).toEqual({ - result: "foobar", - }); - - const req2 = new Request("http://example.org/concat/bar/foo"); - expect(await (await r.fetch(req2)).json()).toEqual({ - result: "barfoo", - }); - }); - - test("placeholders are automatically decoded", async () => { - const req1 = new Request("http://example.org/echo/foo%2Fbar%2Fqux"); - expect(await (await r.fetch(req1)).json()).toEqual({ - name: "foo/bar/qux", - }); - - const req2 = new Request("http://example.org/echo/foo%2F😂"); - expect(await (await r.fetch(req2)).json()).toEqual({ - name: "foo/😂", - }); - }); - - test("placeholders are automatically decoded + validated", async () => { - const req = new Request("http://example.org/add/1337/42"); - expect(await (await r.fetch(req)).json()).toEqual({ - result: 1379, - p: { x: 1337, y: 42 }, - }); - }); - - test("placeholders that cannot be URI decoded will throw a 400 error", async () => { - const req = new Request("http://example.org/echo/foo%2Xbar%2Xqux"); - // ^^^ ^^^ Malformed URL - const resp = await r.fetch(req); - await expectResponse(resp, { error: "Bad Request" }, 400); - }); - - test("placeholders that cannot be decoded/transformed will throw a 400 error", async () => { - const req = new Request("http://example.org/add/1/one"); - // ^^^ Not a valid number - const resp = await r.fetch(req); - await expectResponse(resp, { error: "Bad Request" }, 400); - }); - - test("non-matching paths will return 404", async () => { - const req = new Request("http://example.org/i/don't/exist"); - const resp = await r.fetch(req); - await expectResponse(resp, { error: "Not Found" }, 404); - }); - - test("matching paths but non-matching methods will return 405", async () => { - const req = new Request("http://example.org/echo/bar", { method: "POST" }); - const resp = await r.fetch(req); - await expectResponse(resp, { error: "Method Not Allowed" }, 405); - expect(resp.headers.get("Allow")).toEqual("GET, OPTIONS"); - }); - - test("accessing the query string", async () => { - const req = new Request( - "http://example.org/echo-query?a=1&b=2&c=3&c=4&d[]=d1&d[]=d2&x=" - ); - const resp = await r.fetch(req); - await expectResponse(resp, { - q: { a: "1", b: "2", c: "4", "d[]": "d2", x: "" }, - }); - }); - - test("can accept empty bodies", async () => { - { - const req = new Request("http://example.org/empty", { - method: "POST", - body: "nah-ah", // Invalid body ← 🔑 - }); - await expectResponse(await r.fetch(req), { error: "Bad Request" }, 400); - } - - { - const req = new Request("http://example.org/empty", { - method: "POST", - body: '{"a": 123}', // Valid body - }); - await expectResponse(await r.fetch(req), { ok: true }); - } - - { - const req = new Request("http://example.org/empty", { - method: "POST", - // No body here ← 🔑 - }); - await expectResponse(await r.fetch(req), { ok: true }); - } - }); - - test("return empty response", async () => { - const req = new Request("http://example.org/empty"); - const resp = await r.fetch(req); - expectEmptyResponse(resp); - }); - - test("return custom response", async () => { - const req = new Request("http://example.org/custom-error"); - const resp = await r.fetch(req); - await expectResponse(resp, "I'm a custom response", 499); - }); - - test("broken endpoint returns 500", async () => { - const req = new Request("http://example.org/broken"); - const resp = await r.fetch(req); - await expectResponse( - resp, - { - error: "Internal server error", - details: "Please try again later", - }, - 500 - ); - }); - - test("custom status error handling", async () => { - const req = new Request("http://example.org/custom-http-error"); - const resp = await r.fetch(req); - await expectResponse(resp, { error: "Custom Error" }, 488); - }); -}); - -describe("Router authentication", () => { - test("Authorized when returning truthy value", async () => { - const r = new ZenRouter({ - authorize: ({ req }) => { - return req.headers.get("Authorization") === "v3ry-s3cr3t!"; - }, - }); - - r.route("GET /", () => json({ ok: true })); - - const req1 = new Request("http://example.org/"); - await expectResponse(await r.fetch(req1), { error: "Forbidden" }, 403); - - const req2 = new Request("http://example.org/", { - headers: { Authorization: "v3ry-s3cr3t!" }, - }); - await expectResponse(await r.fetch(req2), { ok: true }); - }); - - test("Returning parsed auth data", async () => { - const r = new ZenRouter({ - authorize: ({ req }) => { - const header = req.headers.get("Authorization"); - if (!header?.startsWith("v3ry-s3cr3t!")) { - return false; - } - - return { userId: header.substring("v3ry-s3cr3t!".length).trim() }; - }, - }); - - r.route("GET /", ({ auth }) => json({ auth })); - - const req1 = new Request("http://example.org/"); - await expectResponse(await r.fetch(req1), { error: "Forbidden" }, 403); - - const req2 = new Request("http://example.org/", { - headers: { Authorization: "v3ry-s3cr3t! user-123" }, - }); - await expectResponse(await r.fetch(req2), { auth: { userId: "user-123" } }); - - const req3 = new Request("http://example.org/", { - headers: { Authorization: "v3ry-s3cr3t! user-456" }, - }); - await expectResponse(await r.fetch(req3), { auth: { userId: "user-456" } }); - }); -}); - -describe("Router body validation", () => { - const r = new ZenRouter({ authorize: IGNORE_AUTH_FOR_THIS_TEST }); - - r.route( - "POST /add", - object({ x: number, y: number }), - - ({ body }) => ({ result: body.x + body.y }) - ); - - // r.registerErrorHandler(ValidationError, (e) => json({ crap: true }, 422)); - // r.registerErrorHandler(422, () => json({ crap: true }, 422)); - - test("accepts correct body", async () => { - const req = new Request("http://example.org/add", { - method: "POST", - body: '{"x":41,"y":1}', - }); - await expectResponse(await r.fetch(req), { result: 42 }); - }); - - test("rejects invalid body", async () => { - const req = new Request("http://example.org/add", { - method: "POST", - body: '{"x":41,"y":"not a number"}', - }); - await expectResponse( - await r.fetch(req), - { - error: "Unprocessable Entity", - reason: "Value at key 'y': Must be number", - }, - 422 - ); - }); - - test("broken JSON bodies lead to 400", async () => { - const req = new Request("http://example.org/add", { - method: "POST", - body: "I'm no JSON", - }); - await expectResponse(await r.fetch(req), { error: "Bad Request" }, 400); - }); - - test("accessing body without defining a decoder is an error", async () => { - const konsole = captureConsole(); - - const r = new ZenRouter({ authorize: IGNORE_AUTH_FOR_THIS_TEST }); - - r.route("POST /", (input) => { - // Simply accessing the `body` without defining a decoder should fail - input.body; - return { ok: true }; - }); - - const req = new Request("http://example.org/", { method: "POST" }); - await expectResponse( - await r.fetch(req), - { error: "Internal Server Error" }, - 500 - ); - - expect(konsole.error).toHaveBeenCalledWith( - expect.stringMatching( - /^Uncaught error: Error: Cannot access body: this endpoint did not define a body schema/ - ) - ); - }); -}); - -function createMiniDbRouter(options: { cors: boolean }) { - const r = new ZenRouter({ authorize: IGNORE_AUTH_FOR_THIS_TEST, ...options }); - - // Simulate a mini DB - const db = new Map(); - beforeEach(() => db.clear()); - - // Implement standard REST methods - r.route("GET /thing/", ({ p }) => { - const { key } = p; - const value = db.get(p.key); - return value !== undefined ? { key, value } : abort(404); - }); - r.route("POST /thing", jsonDecoder, ({ body }) => { - const key = nanoid(); - const value = body; - db.set(key, value); - return { key, value }; - }); - r.route("PUT /thing/", jsonDecoder, ({ p, body }) => { - const { key } = p; - const value = body; - db.set(key, value); - return { key, value }; - }); - r.route("DELETE /thing/", ({ p }) => ({ deleted: db.delete(p.key) })); - - return r; -} - -describe("Router automatic OPTIONS responses (without CORS)", () => { - const r = createMiniDbRouter({ cors: false }); - - test("empty db returns 404s", async () => { - const resp1 = await r.fetch(new Request("http://example.org/thing/foo")); - await expectResponse(resp1, { error: "Not Found" }, 404); - expect(Object.fromEntries(resp1.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - }); - - const resp2 = await r.fetch(new Request("http://example.org/thing/bar")); - await expectResponse(resp2, { error: "Not Found" }, 404); - expect(Object.fromEntries(resp2.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - }); - }); - - test("writing and reading from db works", async () => { - const resp1 = await r.fetch( - new Request("http://example.org/thing/foo", { - method: "PUT", - body: "123", - }) - ); - await expectResponse(resp1, { key: "foo", value: 123 }); - expect(Object.fromEntries(resp1.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - }); - - const resp2 = await r.fetch(new Request("http://example.org/thing/foo")); - await expectResponse(resp2, { key: "foo", value: 123 }); - expect(Object.fromEntries(resp2.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - }); - - const resp3 = await r.fetch( - new Request("http://example.org/thing", { method: "POST", body: '"xyz"' }) - ); - await expectResponse(resp3, { key: expect.any(String), value: "xyz" }); - expect(Object.fromEntries(resp3.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - }); - }); - - test("http 405 responses will include allow header #1", async () => { - const resp = await r.fetch(new Request("http://example.org/thing")); - await expectResponse(resp, { error: "Method Not Allowed" }, 405); - expect(Object.fromEntries(resp.headers)).toEqual({ - allow: "POST, OPTIONS", - "content-type": "application/json; charset=utf-8", - }); - }); - - test("http 405 responses will include allow header #2", async () => { - const resp = await r.fetch( - new Request("http://example.org/thing/blablabla", { - method: "POST", // Method not valid for this URL - }) - ); - await expectResponse(resp, { error: "Method Not Allowed" }, 405); - expect(Object.fromEntries(resp.headers)).toEqual({ - allow: "GET, PUT, DELETE, OPTIONS", - "content-type": "application/json; charset=utf-8", - }); - }); - - test("responds to non-CORS OPTIONS requests", async () => { - const resp = await r.fetch( - new Request("http://example.org/thing/blablabla", { - method: "OPTIONS", - }) - ); - expectEmptyResponse(resp); - expect(Object.fromEntries(resp.headers)).toEqual({ - allow: "GET, PUT, DELETE, OPTIONS", - }); - }); - - test("responds to non-CORS OPTIONS requests", async () => { - const resp = await r.fetch( - new Request("http://example.org/thing/blablabla", { - method: "OPTIONS", - }) - ); - expectEmptyResponse(resp); - expect(Object.fromEntries(resp.headers)).toEqual({ - allow: "GET, PUT, DELETE, OPTIONS", - }); - }); - - test("responds to CORS preflight requests", async () => { - const resp = await r.fetch( - new Request("http://example.org/thing/blablabla", { - method: "OPTIONS", - headers: { Origin: TEST_ORIGIN }, - }) - ); - expectEmptyResponse(resp); - expect(Object.fromEntries(resp.headers)).toEqual({ - // NOTE: No Access-Control-* headers here: CORS isn't enabled on this router! - allow: "GET, PUT, DELETE, OPTIONS", - }); - }); -}); - -describe("Router automatic OPTIONS responses (with CORS)", () => { - const r = createMiniDbRouter({ cors: true }); - - test("empty db returns 404s", async () => { - const resp1 = await r.fetch(new Request("http://example.org/thing/foo")); - await expectResponse(resp1, { error: "Not Found" }, 404); - expect(Object.fromEntries(resp1.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - "access-control-allow-origin": "*", // Because alwaysSend defaults to true in CORS config - }); - - const resp2 = await r.fetch(new Request("http://example.org/thing/bar")); - await expectResponse(resp2, { error: "Not Found" }, 404); - expect(Object.fromEntries(resp2.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - "access-control-allow-origin": "*", // Because alwaysSend defaults to true in CORS config - }); - }); - - test("writing and reading from db works", async () => { - const resp1 = await r.fetch( - new Request("http://example.org/thing/foo", { - method: "PUT", - body: "123", - }) - ); - await expectResponse(resp1, { key: "foo", value: 123 }); - expect(Object.fromEntries(resp1.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - "access-control-allow-origin": "*", // Because alwaysSend defaults to true in CORS config - }); - - const resp2 = await r.fetch(new Request("http://example.org/thing/foo")); - await expectResponse(resp2, { key: "foo", value: 123 }); - expect(Object.fromEntries(resp2.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - "access-control-allow-origin": "*", // Because alwaysSend defaults to true in CORS config - }); - - const resp3 = await r.fetch( - new Request("http://example.org/thing", { method: "POST", body: '"xyz"' }) - ); - await expectResponse(resp3, { key: expect.any(String), value: "xyz" }); - expect(Object.fromEntries(resp3.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - "access-control-allow-origin": "*", // Because alwaysSend defaults to true in CORS config - }); - }); - - test("http 405 responses will include allow header #1", async () => { - const resp = await r.fetch(new Request("http://example.org/thing")); - await expectResponse(resp, { error: "Method Not Allowed" }, 405); - expect(Object.fromEntries(resp.headers)).toEqual({ - allow: "POST, OPTIONS", - "access-control-allow-origin": "*", // Because alwaysSend defaults to true in CORS config - "content-type": "application/json; charset=utf-8", - }); - }); - - test("http 405 responses will include allow header #2", async () => { - const resp = await r.fetch( - new Request("http://example.org/thing/blablabla", { - method: "POST", // Method not valid for this URL - }) - ); - await expectResponse(resp, { error: "Method Not Allowed" }, 405); - expect(Object.fromEntries(resp.headers)).toEqual({ - allow: "GET, PUT, DELETE, OPTIONS", - "access-control-allow-origin": "*", // Because alwaysSend defaults to true in CORS config - "content-type": "application/json; charset=utf-8", - }); - }); - - test("responds to non-CORS OPTIONS requests", async () => { - disableConsole(); - - const resp = await r.fetch( - new Request("http://example.org/thing/blablabla", { - method: "OPTIONS", - }) - ); - expectEmptyResponse(resp); - expect(Object.fromEntries(resp.headers)).toEqual({ - allow: "GET, PUT, DELETE, OPTIONS", - "access-control-allow-origin": "*", // Because alwaysSend defaults to true in CORS config - }); - }); - - test("responds to non-CORS OPTIONS requests", async () => { - disableConsole(); - - const resp = await r.fetch( - new Request("http://example.org/thing/blablabla", { - method: "OPTIONS", - }) - ); - expectEmptyResponse(resp); - expect(Object.fromEntries(resp.headers)).toEqual({ - allow: "GET, PUT, DELETE, OPTIONS", - "access-control-allow-origin": "*", // Because alwaysSend defaults to true in CORS config - }); - }); - - test("responds to CORS preflight requests", async () => { - const resp = await r.fetch( - new Request("http://example.org/thing/blablabla", { - method: "OPTIONS", - headers: { - Origin: TEST_ORIGIN, - "Access-Control-Request-Method": "POST", - }, - }) - ); - expectEmptyResponse(resp); - expect(Object.fromEntries(resp.headers)).toEqual({ - allow: "GET, PUT, DELETE, OPTIONS", - "access-control-allow-origin": TEST_ORIGIN, - "access-control-allow-methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS", - vary: "Origin", - }); - }); - - test("CORS response with explicitly allowed origin", async () => { - const r = new ZenRouter({ - cors: { allowedOrigins: [TEST_ORIGIN, ANOTHER_ORIGIN] }, - // ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 🔑 - authorize: IGNORE_AUTH_FOR_THIS_TEST, - }); - r.route("GET /", () => ({ ok: true })); - - const resp = await r.fetch( - new Request("http://example.org", { - headers: { - // NOTE: This is *NOT* a CORS request! - // Origin: TEST_ORIGIN, - }, - }) - ); - await expectResponse(resp, { ok: true }); - expect(Object.fromEntries(resp.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - "access-control-allow-origin": TEST_ORIGIN, // NOTE: Only the first allowed origin is returned - vary: "Origin", - }); - }); - - test("will not override custom Vary header", async () => { - const r = new ZenRouter({ - cors: true, - authorize: IGNORE_AUTH_FOR_THIS_TEST, - }); - r.route("GET /", () => json({ ok: true }, 200, { Vary: "X-Custom" })); - - // Non-CORS - const resp1 = await r.fetch( - new Request("http://example.org", { - headers: { - // NOTE: This is *NOT* a CORS request! - // Origin: TEST_ORIGIN, - }, - }) - ); - await expectResponse(resp1, { ok: true }); - expect(Object.fromEntries(resp1.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - "access-control-allow-origin": "*", - vary: "X-Custom", - }); - - // CORS - const resp2 = await r.fetch( - new Request("http://example.org", { - headers: { Origin: TEST_ORIGIN }, - }) - ); - await expectResponse(resp2, { ok: true }); - expect(Object.fromEntries(resp2.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - "access-control-allow-origin": TEST_ORIGIN, - vary: "X-Custom, Origin", - }); - }); -}); - -describe("CORS edge cases", () => { - test("won’t add CORS headers if no Origin header on incoming request and sendWildcard isn't set", async () => { - const r = new ZenRouter({ - cors: { alwaysSend: false }, - // ^^^^^^^^^^^^^^^^^ 🔑 - authorize: IGNORE_AUTH_FOR_THIS_TEST, - }); - r.route("GET /", () => ({ ok: true })); - - const resp = await r.fetch(new Request("http://example.org")); - await expectResponse(resp, { ok: true }); - expect(Object.fromEntries(resp.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - // No CORS headers! - }); - }); - - test("won’t add CORS headers if no Origin header on incoming request allowCredentials is set", async () => { - const r = new ZenRouter({ - cors: { allowCredentials: true }, - // ^^^^^^^^^^^^^^^^^ 🔑 - authorize: IGNORE_AUTH_FOR_THIS_TEST, - }); - r.route("GET /", () => ({ ok: true })); - - const resp = await r.fetch(new Request("http://example.org")); - await expectResponse(resp, { ok: true }); - expect(Object.fromEntries(resp.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - // No CORS headers! - }); - }); - - test("won’t add CORS headers if Origin is not allowed", async () => { - const r = new ZenRouter({ - cors: { allowedOrigins: [ANOTHER_ORIGIN] }, - // ^^^^^^^^^^^^^^ 🔑 - authorize: IGNORE_AUTH_FOR_THIS_TEST, - }); - r.route("GET /", () => ({ ok: true })); - - const resp = await r.fetch( - new Request("http://example.org", { - headers: { - Origin: "https://invalid-origin", - }, - }) - ); - await expectResponse(resp, { ok: true }); - expect(Object.fromEntries(resp.headers)).toEqual({ - "content-type": "application/json; charset=utf-8", - // No CORS headers! - }); - }); - - test("won’t add CORS headers to (101 response)", async () => { - const r = new ZenRouter({ - cors: true, - authorize: IGNORE_AUTH_FOR_THIS_TEST, - }); - r.route("GET /socket", () => { - // Return a 101 response, a socket accept - const resp = new WebSocketResponse({ - "X-Custom": "my-custom-header", - }); - return resp; - }); - - const resp = await r.fetch(new Request("http://example.org/socket")); - expect(resp.status).toEqual(101); - // expect(resp.status).toEqual(101); - expect(Object.fromEntries(resp.headers)).toEqual({ - // NOTE: No Access-Control-* headers here: CORS headers should not be on 101 responses! - "x-custom": "my-custom-header", - }); - }); - - test("won’t add CORS headers to (3xx responses)", async () => { - const r = new ZenRouter({ - cors: true, - authorize: IGNORE_AUTH_FOR_THIS_TEST, - }); - r.route("GET /301", () => new Response(null, { status: 301 })); - r.route("GET /303", () => new Response(null, { status: 303 })); - r.route("GET /308", () => new Response(null, { status: 308 })); - - const resp1 = await r.fetch(new Request("http://example.org/301")); - expect(resp1.status).toEqual(301); - expect(Object.fromEntries(resp1.headers)).toEqual({ - // Note: *no* CORS headers to be found here! - }); - - const resp2 = await r.fetch(new Request("http://example.org/303")); - expect(resp2.status).toEqual(303); - expect(Object.fromEntries(resp2.headers)).toEqual({ - // Note: *no* CORS headers to be found here! - }); - - const resp3 = await r.fetch(new Request("http://example.org/308")); - expect(resp3.status).toEqual(308); - expect(Object.fromEntries(resp3.headers)).toEqual({ - // Note: *no* CORS headers to be found here! - }); - }); - - test("won’t add CORS headers to responses that already contain them", async () => { - const r = new ZenRouter({ - cors: true, - authorize: IGNORE_AUTH_FOR_THIS_TEST, - }); - r.route("GET /custom-cors", () => - json({ ok: true }, 200, { - "Access-Control-Allow-Origin": "I am set manually", - }) - ); - - const resp = await r.fetch(new Request("http://example.org/custom-cors")); - - // NOTE: Arguably, we could make this an uncaught error, because clearly we - // don't want a route to be setting their own CORS headers and conflict - // with Zen Router's logic :( - expect(resp.status).toEqual(200); - - expect(Object.fromEntries(resp.headers)).toEqual({ - // Note: *no* CORS headers to be found here! - "content-type": "application/json; charset=utf-8", - "access-control-allow-origin": "I am set manually", - }); - }); -}); - -describe("Error handling setup", () => { - test("every router has its own error handler", async () => { - const app1 = new ZenRouter(); - const app2 = new ZenRouter(); - - // Configured in r1... - app1.onError((e) => { - switch (e.status) { - case 404: - return json({ quote: "One does not simply..." }, e.status); - default: - return fail(); - } - }); - - // r1 will use the custom defined 404 handler - app1.route("GET /", fail); - const resp1 = await app1.fetch(new Request("http://example.org/foo")); - await expectResponse(resp1, { quote: "One does not simply..." }, 404); - - // ...but r2 will not use it - app2.route("GET /", fail); - const resp2 = await app2.fetch(new Request("http://example.org/foo")); - await expectResponse(resp2, { error: "Not Found" }, 404); - }); - - test("multiple routers can share the same error handler", async () => { - const errorHandler = new ErrorHandler(); - const app1 = new ZenRouter({ errorHandler }); - const app2 = new ZenRouter({ errorHandler }); - - // Configured in r1... - app1.onError((e) => { - switch (e.status) { - case 404: - return json({ quote: "One does not simply..." }, e.status); - default: - return fail(); - } - }); - - // r1 will use the custom defined 404 handler - app1.route("GET /", fail); - const resp1 = await app1.fetch(new Request("http://example.org/foo")); - await expectResponse(resp1, { quote: "One does not simply..." }, 404); - - // ...and now r2 will also use it - app2.route("GET /", fail); - const resp2 = await app2.fetch(new Request("http://example.org/foo")); - await expectResponse(resp2, { quote: "One does not simply..." }, 404); - }); - - test("handles bugs in http error handler itself", async () => { - const konsole = captureConsole(); - - const app = new ZenRouter(); - app.onError(() => { - throw new Error("Oops, I'm a broken error handler"); - }); - - app.route("GET /", fail); - - // Trigger a 404, but the broken error handler will not handle that correctly - const res = await app.fetch(new Request("http://example.org/foo")); - await expectResponse(res, { error: "Internal Server Error" }, 500); - - expect(konsole.error).toHaveBeenNthCalledWith( - 1, - expect.stringMatching( - /^Uncaught error: Error: Oops, I'm a broken error handler/ - ) - ); - }); -}); diff --git a/packages/liveblocks-zenrouter/test/Router.zod.test.ts b/packages/liveblocks-zenrouter/test/Router.zod.test.ts deleted file mode 100644 index 8f98b6befa..0000000000 --- a/packages/liveblocks-zenrouter/test/Router.zod.test.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { describe, expect, test } from "vitest"; -import { z } from "zod"; - -import { json, ZenRouter } from "~/index.js"; -import { expectResponse } from "~test/utils.js"; - -const IGNORE_AUTH_FOR_THIS_TEST = () => Promise.resolve(true); - -describe("Param decoders (zod)", () => { - // Zod equivalent of decoders' `numeric`: coerce a string input to a number - const zodNumeric = z.coerce.number(); - - const r = new ZenRouter({ - authorize: IGNORE_AUTH_FOR_THIS_TEST, - params: { - x: zodNumeric, - y: zodNumeric, - }, - }); - - r.route("GET /add//", ({ p }) => json({ result: p.x + p.y, p })); - r.route("GET /echo/", ({ p }) => json({ name: p.name })); - - test("placeholders are automatically decoded + validated", async () => { - const req = new Request("http://example.org/add/1337/42"); - expect(await (await r.fetch(req)).json()).toEqual({ - result: 1379, - p: { x: 1337, y: 42 }, - }); - }); - - test("placeholders that cannot be decoded/transformed will throw a 400 error", async () => { - const req = new Request("http://example.org/add/1/one"); - const resp = await r.fetch(req); - await expectResponse(resp, { error: "Bad Request" }, 400); - }); - - test("untyped placeholders still work as strings", async () => { - const req = new Request("http://example.org/echo/hello"); - expect(await (await r.fetch(req)).json()).toEqual({ name: "hello" }); - }); -}); - -describe("Router body validation (zod)", () => { - const r = new ZenRouter({ authorize: IGNORE_AUTH_FOR_THIS_TEST }); - - r.route( - "POST /add", - z.object({ x: z.number(), y: z.number() }), - ({ body }) => ({ result: body.x + body.y }) - ); - - r.route( - "POST /empty", - z.object({ a: z.number() }).optional(), - () => ({ ok: true }) - ); - - test("accepts correct body", async () => { - const req = new Request("http://example.org/add", { - method: "POST", - body: '{"x":41,"y":1}', - }); - await expectResponse(await r.fetch(req), { result: 42 }); - }); - - test("rejects invalid body with actual error message", async () => { - const req = new Request("http://example.org/add", { - method: "POST", - body: '{"x":41,"y":"not a number"}', - }); - await expectResponse( - await r.fetch(req), - { - error: "Unprocessable Entity", - reason: - "Value at key 'y': Invalid input: expected number, received string", - }, - 422 - ); - }); - - test("rejects body with missing fields", async () => { - const req = new Request("http://example.org/add", { - method: "POST", - body: '{"x":41}', - }); - await expectResponse( - await r.fetch(req), - { - error: "Unprocessable Entity", - reason: - "Value at key 'y': Invalid input: expected number, received undefined", - }, - 422 - ); - }); - - test("broken JSON bodies lead to 400", async () => { - const req = new Request("http://example.org/add", { - method: "POST", - body: "I'm no JSON", - }); - await expectResponse(await r.fetch(req), { error: "Bad Request" }, 400); - }); - - test("can accept empty bodies", async () => { - { - const req = new Request("http://example.org/empty", { - method: "POST", - body: "nah-ah", // Invalid body - }); - await expectResponse(await r.fetch(req), { error: "Bad Request" }, 400); - } - - { - const req = new Request("http://example.org/empty", { - method: "POST", - body: '{"a": 123}', // Valid body - }); - await expectResponse(await r.fetch(req), { ok: true }); - } - - { - const req = new Request("http://example.org/empty", { - method: "POST", - // No body here - }); - await expectResponse(await r.fetch(req), { ok: true }); - } - }); -}); diff --git a/packages/liveblocks-zenrouter/test/cors.test.ts b/packages/liveblocks-zenrouter/test/cors.test.ts deleted file mode 100644 index 0e9c29632b..0000000000 --- a/packages/liveblocks-zenrouter/test/cors.test.ts +++ /dev/null @@ -1,408 +0,0 @@ -import { describe, expect, test } from "vitest"; - -import type { CorsOptions } from "~/cors.js"; -import { getCorsHeaders } from "~/cors.js"; - -import { disableConsole } from "./utils.js"; - -const url = "https://example.org"; -const TEST_ORIGIN = "https://my-example-app.org"; - -function configureCors(options: Partial = {}) { - return (req: Request) => { - return Object.fromEntries(getCorsHeaders(req, options) ?? []); - }; -} - -/** Builds a "normal" (non-preflight) request, from TEST_ORIGIN */ -function makeNormalRequest(method: string, headers: Record) { - return new Request(url, { - method, - headers: { - Origin: TEST_ORIGIN, - ...headers, - }, - }); -} - -/** Builds a preflight request, from TEST_ORIGIN */ -function makePreflightRequest(forMethod: string) { - return new Request(url, { - method: "OPTIONS", - headers: { - Origin: TEST_ORIGIN, - "Access-Control-Request-Method": forMethod, - "Access-Control-Request-Headers": - "CoNtEnT-tYpE,X-Foo,Custom-Header,Accept", - }, - }); -} - -describe("Basic CORS responses", () => { - test("default config", () => { - const cors = configureCors(/* default */); - - const preq = makePreflightRequest("PUT"); - expect(cors(preq)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - "access-control-allow-methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS", - "access-control-allow-headers": - "content-type, x-foo, custom-header, accept", - vary: "Origin", - }); - - const req = makeNormalRequest("POST", {}); - expect(cors(req)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - vary: "Origin", - }); - }); - - test("only allow whitelisted headers", () => { - const cors = configureCors({ - allowedHeaders: ["x-foo", "accept"], - }); - - const preq = makePreflightRequest("PUT"); - expect(cors(preq)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - "access-control-allow-methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS", - "access-control-allow-headers": "x-foo, accept", - vary: "Origin", - }); - }); - - test("with max age", () => { - const cors = configureCors({ maxAge: 600 }); - - const preq = makePreflightRequest("PUT"); - expect(cors(preq)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - "access-control-allow-methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS", - "access-control-allow-headers": - "content-type, x-foo, custom-header, accept", - "access-control-max-age": "600", - vary: "Origin", - }); - - const req = makeNormalRequest("POST", {}); - expect(cors(req)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - vary: "Origin", - }); - }); - - test("with expose headers", () => { - const cors = configureCors({ - exposeHeaders: ["Content-Encoding", "X-Custom"], - }); - - const preq = makePreflightRequest("PUT"); - expect(cors(preq)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - "access-control-allow-methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS", - "access-control-allow-headers": - "content-type, x-foo, custom-header, accept", - "access-control-expose-headers": "Content-Encoding, X-Custom", - vary: "Origin", - }); - - const req = makeNormalRequest("POST", {}); - expect(cors(req)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - "access-control-expose-headers": "Content-Encoding, X-Custom", - vary: "Origin", - }); - }); - - test("with fixed origins", () => { - const cors = configureCors({ - allowedOrigins: [TEST_ORIGIN, "https://another-origin.org"], - }); - - const preq = makePreflightRequest("PUT"); - expect(cors(preq)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - "access-control-allow-methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS", - "access-control-allow-headers": - "content-type, x-foo, custom-header, accept", - vary: "Origin", - }); - - const req = makeNormalRequest("POST", {}); - expect(cors(req)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - vary: "Origin", - }); - }); - - test.each([false, true])( - "with rejected origin, sendWildcard %", - (sendWildcard) => { - const cors = configureCors({ - allowedOrigins: [ - "https://another-origin.org", - "https://yet-another-origin.org", - ], - sendWildcard, - }); - - const preq = makePreflightRequest("PUT"); - expect(cors(preq)).toEqual({ - // NOTE: No CORS headers will be sent for this request! - }); - - const req = makeNormalRequest("POST", {}); - expect(cors(req)).toEqual({ - // NOTE: No CORS headers will be sent for this request! - }); - } - ); - - test("sending wildcard", () => { - const cors = configureCors({ sendWildcard: true }); - - const preq = makePreflightRequest("PUT"); - expect(cors(preq)).toEqual({ - "access-control-allow-origin": "*", - "access-control-allow-methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS", - "access-control-allow-headers": - "content-type, x-foo, custom-header, accept", - // NOTE: No Vary header! - }); - - const req = makeNormalRequest("POST", {}); - expect(cors(req)).toEqual({ - "access-control-allow-origin": "*", - // NOTE: No Vary header! - }); - }); - - test("sends CORS headers, even for non-CORS requests (default)", () => { - disableConsole(); - - const cors = configureCors({ - // These are the defaults - // allowedOrigins: "*", - // alwaysSend: true, - // supportsCredentials: false, - }); - - // Make requests without an Origin header - const preq = new Request(url, { method: "OPTIONS" }); - const req1 = new Request(url, { method: "GET" }); - const req2 = new Request(url, { method: "POST" }); - - expect(cors(preq)).toEqual({ "access-control-allow-origin": "*" }); - expect(cors(req1)).toEqual({ "access-control-allow-origin": "*" }); - expect(cors(req2)).toEqual({ "access-control-allow-origin": "*" }); - }); - - test("sends CORS headers, even for non-CORS requests (except when credentials)", () => { - const cors = configureCors({ - // These are the defaults - // allowedOrigins: "*", - // alwaysSend: true, - allowCredentials: true, - }); - - // Make requests without an Origin header - const preq = new Request(url, { method: "OPTIONS" }); - const req1 = new Request(url, { method: "GET" }); - const req2 = new Request(url, { method: "POST" }); - - expect(cors(preq)).toEqual(/* no CORS here! */ {}); - expect(cors(req1)).toEqual(/* no CORS here! */ {}); - expect(cors(req2)).toEqual(/* no CORS here! */ {}); - }); - - test("sends CORS headers, even for non-CORS requests (except when credentials, except when fixed)", () => { - disableConsole(); - - const cors = configureCors({ - // These are the defaults - allowedOrigins: ["https://fixed.org", "https://dev.fixed.org"], - // alwaysSend: true, - allowCredentials: true, - }); - - // Make requests without an Origin header - const preq = new Request(url, { method: "OPTIONS" }); - const req1 = new Request(url, { method: "GET" }); - const req2 = new Request(url, { method: "POST" }); - - expect(cors(preq)).toEqual({ - "access-control-allow-credentials": "true", - "access-control-allow-origin": "https://fixed.org", // Only the first one will be returned - vary: "Origin", - }); - expect(cors(req1)).toEqual({ - "access-control-allow-credentials": "true", - "access-control-allow-origin": "https://fixed.org", // Only the first one will be returned - vary: "Origin", - }); - expect(cors(req2)).toEqual({ - "access-control-allow-credentials": "true", - "access-control-allow-origin": "https://fixed.org", // Only the first one will be returned - vary: "Origin", - }); - }); - - test("won’t send CORS headers, if alwaysSend = false (not the default), fixed", () => { - const cors = configureCors({ - // These are the defaults - allowedOrigins: ["https://fixed.org", "https://dev.fixed.org"], - alwaysSend: false, - allowCredentials: true, - }); - - // Make requests without an Origin header - const preq = new Request(url, { method: "OPTIONS" }); - const req1 = new Request(url, { method: "GET" }); - const req2 = new Request(url, { method: "POST" }); - - expect(cors(preq)).toEqual(/* no CORS */ {}); - expect(cors(req1)).toEqual(/* no CORS */ {}); - expect(cors(req2)).toEqual(/* no CORS */ {}); - }); - - test("won’t send CORS headers, if alwaysSend = false (not the default), wildcard", () => { - const cors = configureCors({ - // These are the defaults - // allowedOrigins: '*', - alwaysSend: false, - allowCredentials: true, - }); - - // Make requests without an Origin header - const preq = new Request(url, { method: "OPTIONS" }); - const req1 = new Request(url, { method: "GET" }); - const req2 = new Request(url, { method: "POST" }); - - expect(cors(preq)).toEqual(/* no CORS */ {}); - expect(cors(req1)).toEqual(/* no CORS */ {}); - expect(cors(req2)).toEqual(/* no CORS */ {}); - }); - - test("won’t send CORS headers, if alwaysSend = false (not the default), wildcard, no credentials", () => { - const cors = configureCors({ - // These are the defaults - // allowedOrigins: '*', - alwaysSend: false, - // supportsCredentials: false, - }); - - // Make requests without an Origin header - const preq = new Request(url, { method: "OPTIONS" }); - const req1 = new Request(url, { method: "GET" }); - const req2 = new Request(url, { method: "POST" }); - - expect(cors(preq)).toEqual(/* no CORS */ {}); - expect(cors(req1)).toEqual(/* no CORS */ {}); - expect(cors(req2)).toEqual(/* no CORS */ {}); - }); - - test("without Vary header", () => { - const cors = configureCors({ varyHeader: false }); - - const preq = makePreflightRequest("PUT"); - expect(cors(preq)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - "access-control-allow-methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS", - "access-control-allow-headers": - "content-type, x-foo, custom-header, accept", - // No Vary header - }); - - const req = makeNormalRequest("POST", {}); - expect(cors(req)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - // No Vary header - }); - }); -}); - -describe("Invalid CORS configurations", () => { - test("allowing wildcard + allowing credentials is not allowed by the spec", () => { - const cors = configureCors({ - allowCredentials: true, - sendWildcard: true, - }); - - const preq = makePreflightRequest("PUT"); - expect(() => cors(preq)).toThrow("Invalid CORS configuration"); - - const req = makeNormalRequest("POST", {}); - expect(() => cors(req)).toThrow("Invalid CORS configuration"); - }); -}); - -describe("Non-standard, Liveblocks-specific, CORS responses", () => { - test("Custom X-Relay-Origin header", () => { - const cors = configureCors(/* default */); - - const preq = new Request(url, { - method: "OPTIONS", - headers: { - // NOTE: Non-standard X-Relay-Origin header works as Origin - "X-Relay-Origin": TEST_ORIGIN, - "Access-Control-Request-Method": "OPTIONS", - "Access-Control-Request-Headers": "x-foo", // Must be lower-cased, without spaces - }, - }); - - expect(cors(preq)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - "access-control-allow-methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS", - "access-control-allow-headers": "x-foo", - vary: "Origin", - }); - - const req = new Request(url, { - method: "POST", - headers: { - // NOTE: Non-standard X-Relay-Origin header works as Origin - "X-Relay-Origin": TEST_ORIGIN, - }, - }); - expect(cors(req)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - vary: "Origin", - }); - }); - - test("Origin takes precedence over Custom X-Relay-Origin header when both are used", () => { - const cors = configureCors(/* default */); - - const preq = new Request(url, { - method: "OPTIONS", - headers: { - // NOTE: Non-standard X-Relay-Origin header works as Origin - "X-Relay-Origin": "https://my-custom-app.org", - Origin: TEST_ORIGIN, - "Access-Control-Request-Method": "OPTIONS", - "Access-Control-Request-Headers": "X-Foo,Custom-Header", // Must be lower-cased, without spaces - }, - }); - - expect(cors(preq)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - "access-control-allow-methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS", - "access-control-allow-headers": "x-foo, custom-header", - vary: "Origin", - }); - - const req = new Request(url, { - method: "POST", - headers: { - // NOTE: Non-standard X-Relay-Origin header works as Origin - Origin: TEST_ORIGIN, - "X-Relay-Origin": "https://my-custom-app.org", - }, - }); - expect(cors(req)).toEqual({ - "access-control-allow-origin": TEST_ORIGIN, - vary: "Origin", - }); - }); -}); diff --git a/packages/liveblocks-zenrouter/test/lib/matchers.test.ts b/packages/liveblocks-zenrouter/test/lib/matchers.test.ts deleted file mode 100644 index eeccc5aba2..0000000000 --- a/packages/liveblocks-zenrouter/test/lib/matchers.test.ts +++ /dev/null @@ -1,69 +0,0 @@ -import * as fc from "fast-check"; -import { describe, expect, test } from "vitest"; - -import { routeMatcher } from "~/lib/matchers.js"; - -function _(pathname: string, base = "https://example.com") { - return new URL(pathname, base); -} - -describe("routeMatcher", () => { - test("simple paths (without dynamic segments)", () => - fc.assert( - fc.property( - fc.webUrl().map((u) => new URL(u)), - - (input) => { - fc.pre(input.pathname !== "/"); - expect(routeMatcher("GET /").matchURL(input)).toBeNull(); - } - ) - )); - - test("simple paths (without dynamic segments)", () => { - expect( - routeMatcher("GET /").matchURL(new URL("https://example.com")) - ).toEqual({}); - expect( - routeMatcher("GET /").matchURL(new URL("https://example.com/")) - ).toEqual({}); - - expect(routeMatcher("GET /foo").matchURL(_("/foo"))).toEqual({}); - expect(routeMatcher("GET /foo").matchURL(_("/foo/"))).toEqual({}); - }); - - test.each( - // [pattern, input, result] - [ - ["/", "/foo", null], - ["/foo/", "/foo/bar", { bar: "bar" }], - ["/foo/", "/foo/qux", { bar: "qux" }], - ["/foo/", "/foo/bar", { qux: "bar" }], - ["/foo//", "/foo/bar", null], - ["/foo//", "/foo/bar/qux", { a: "bar", b: "qux" }], - ["/foo//", "/foo/bar/qux/baz", null], - ] - )("path with dynamic segment: %p %p", (pattern, input, result) => { - expect(routeMatcher("GET " + pattern).matchURL(_(input))).toEqual(result); - }); - - test.each([ - ["", "Route must start with '/'"], - [" ", "Route must start with '/'"], - ["must/start/with/slash/", "Route must start with '/'"], - ["//", "Route may not end with '/'"], - ["/must/not/end/with/slash/", "Route may not end with '/'"], - ["/spaces are not allowed", "Invalid pattern"], - ["/cannot/have//double/slashes", "Invalid pattern"], - ["//x", "Invalid pattern"], - ["/", "Invalid pattern"], - ["/", "Invalid pattern"], - ["/", "Invalid pattern"], - ["/foo/%bar", "Invalid pattern"], - ["/foo\\bar", "Invalid pattern"], - ["/foo/:bar", "Invalid pattern"], - ])("throws when initialized with invalid path: %p", (invalid, errmsg) => { - expect(() => routeMatcher("GET " + invalid)).toThrow(errmsg); - }); -}); diff --git a/packages/liveblocks-zenrouter/test/streams.test.ts b/packages/liveblocks-zenrouter/test/streams.test.ts deleted file mode 100644 index 32fdcca8f4..0000000000 --- a/packages/liveblocks-zenrouter/test/streams.test.ts +++ /dev/null @@ -1,179 +0,0 @@ -import { describe, expect, test } from "vitest"; - -import { - html, - jsonArrayStream, - ndjsonStream, - textStream, -} from "~/responses/index.js"; - -async function readStream(response: Response): Promise { - const reader = response.body!.getReader(); - const decoder = new TextDecoder(); - let result = ""; - while (true) { - const { done, value } = await reader.read(); - if (done) break; - result += decoder.decode(value); - } - return result; -} - -describe("html", () => { - test("returns html response with correct content-type", async () => { - const response = html("

Hello

"); - expect(response.status).toBe(200); - expect(response.headers.get("Content-Type")).toBe( - "text/html; charset=utf-8" - ); - expect(await response.text()).toBe("

Hello

"); - }); - - test("accepts custom status and headers", async () => { - const response = html("

Not Found

", 404, { "X-Custom": "value" }); - expect(response.status).toBe(404); - expect(response.headers.get("Content-Type")).toBe( - "text/html; charset=utf-8" - ); - expect(response.headers.get("X-Custom")).toBe("value"); - expect(await response.text()).toBe("

Not Found

"); - }); -}); - -describe("textStream", () => { - test("streams from iterable", async () => { - function* chunks() { - yield "hello"; - yield " "; - yield "world"; - } - - const response = textStream(chunks()); - expect(response.status).toBe(200); - await expect(response.text()).resolves.toBe("hello world"); - }); - - test("respects custom headers", () => { - const response = textStream(["ok"], { "X-Custom": "value" }); - expect(response.headers.get("X-Custom")).toBe("value"); - }); - - test("flushes buffer when it exceeds bufSize", async () => { - // With bufSize=5, "hello" (5 chars) triggers a flush, then " world" (6 chars) triggers another - function* chunks() { - yield "hello"; - yield " world"; - } - - const response = textStream(chunks(), undefined, { bufSize: 5 }); - expect(await response.text()).toBe("hello world"); - }); - - test("handles empty iterable", async () => { - const response = textStream([]); - expect(await readStream(response)).toBe(""); - }); - - test("works with JSON content-type header", async () => { - function* generate() { - yield "["; - yield JSON.stringify({ id: 1 }); - yield ","; - yield JSON.stringify({ id: 2 }); - yield "]"; - } - - const response = textStream(generate(), { - "Content-Type": "application/json; charset=utf-8", - }); - expect(response.headers.get("Content-Type")).toBe( - "application/json; charset=utf-8" - ); - await expect(response.json()).resolves.toEqual([{ id: 1 }, { id: 2 }]); - }); - - test("response.json() fails for invalid JSON content", async () => { - const response = textStream(["not valid json"]); - await expect(response.json()).rejects.toThrow(SyntaxError); - }); -}); - -describe("ndjsonStream", () => { - test("sets ndjson content-type", () => { - const response = ndjsonStream([]); - expect(response.headers.get("Content-Type")).toBe("application/x-ndjson"); - }); - - test("streams iterable as newline-delimited JSON", async () => { - function* values() { - yield { id: 1, name: "Alice" }; - yield { id: 2, name: "Bob" }; - yield [1, 2, 3]; - } - - const response = ndjsonStream(values()); - const body = await response.text(); - expect(body).toBe( - '{"id":1,"name":"Alice"}\n{"id":2,"name":"Bob"}\n[1,2,3]\n' - ); - }); - - test("handles primitive JSON values", async () => { - const response = ndjsonStream([42, "hello", true, null]); - const body = await response.text(); - expect(body).toBe('42\n"hello"\ntrue\nnull\n'); - }); - - test("preserves custom headers", () => { - const response = ndjsonStream([], { "X-Custom": "value" }); - expect(response.headers.get("Content-Type")).toBe("application/x-ndjson"); - expect(response.headers.get("X-Custom")).toBe("value"); - }); -}); - -describe("jsonArrayStream", () => { - test("sets json content-type", () => { - const response = jsonArrayStream([]); - expect(response.headers.get("Content-Type")).toBe( - "application/json; charset=utf-8" - ); - }); - - test("streams empty array", async () => { - const response = jsonArrayStream([]); - await expect(response.json()).resolves.toEqual([]); - }); - - test("streams single value", async () => { - const response = jsonArrayStream([{ id: 1 }]); - await expect(response.json()).resolves.toEqual([{ id: 1 }]); - }); - - test("streams multiple values with commas", async () => { - function* values() { - yield { id: 1, name: "Alice" }; - yield { id: 2, name: "Bob" }; - yield { id: 3, name: "Charlie" }; - } - - const response = jsonArrayStream(values()); - await expect(response.json()).resolves.toEqual([ - { id: 1, name: "Alice" }, - { id: 2, name: "Bob" }, - { id: 3, name: "Charlie" }, - ]); - }); - - test("handles primitive JSON values", async () => { - const response = jsonArrayStream([42, "hello", true, null]); - await expect(response.json()).resolves.toEqual([42, "hello", true, null]); - }); - - test("preserves custom headers", () => { - const response = jsonArrayStream([], { "X-Custom": "value" }); - expect(response.headers.get("Content-Type")).toBe( - "application/json; charset=utf-8" - ); - expect(response.headers.get("X-Custom")).toBe("value"); - }); -}); diff --git a/packages/liveblocks-zenrouter/test/utils.ts b/packages/liveblocks-zenrouter/test/utils.ts deleted file mode 100644 index 3d7b1452fb..0000000000 --- a/packages/liveblocks-zenrouter/test/utils.ts +++ /dev/null @@ -1,89 +0,0 @@ -import type { Json } from "@liveblocks/core"; -import { expect, onTestFinished, vi } from "vitest"; - -import { json } from "~/index.js"; - -export function fail(): never { - throw new Error("I should not get invoked"); -} - -export function ok(message: string) { - return () => json({ message }, 200); -} - -export function expectEmptyResponse( - resp: Response, - expectedStatus = 204 -): void { - try { - if (!(resp instanceof Response)) { - throw new Error(`Expected a Response, but found: ${String(resp)}`); - } - expect(resp.status).toEqual(expectedStatus); - } catch (err) { - // Hack the stack for better error messages, see https://kentcdodds.com/blog/improve-test-error-messages-of-your-abstractions - Error.captureStackTrace(err as Error, expectEmptyResponse); - throw err; - } -} - -export async function expectResponse( - resp: Response, - expectedBody: Json, - expectedStatus = 200 -): Promise { - try { - if (!(resp instanceof Response)) { - throw new Error(`Expected a Response, but found: ${String(resp)}`); - } - - const mimeType = resp.headers.get("Content-Type")?.split(";")[0]; - if (mimeType === "application/json") { - const json = await resp.json(); - expect(json).toEqual(expectedBody); - expect(resp.status).toEqual(expectedStatus); - } else if (mimeType === "text/plain") { - const text = (await resp.text()) as unknown; - expect(text).toEqual(expectedBody); - expect(resp.status).toEqual(expectedStatus); - } else { - throw new Error("Unexpected content type: " + mimeType); - } - } catch (err) { - // Hack the stack for better error messages, see https://kentcdodds.com/blog/improve-test-error-messages-of-your-abstractions - Error.captureStackTrace(err as Error, expectResponse); - throw err; - } -} - -type Consolish = Pick; - -/** - * Installs a console spy for the duration of this test. - */ -export function captureConsole(): Consolish { - /* eslint-disable @typescript-eslint/unbound-method */ - const log = vi.spyOn(console, "log").mockImplementation(() => void 0); - onTestFinished(log.mockRestore); - - const info = vi.spyOn(console, "info").mockImplementation(() => void 0); - onTestFinished(info.mockRestore); - - const warn = vi.spyOn(console, "warn").mockImplementation(() => void 0); - onTestFinished(warn.mockRestore); - - const error = vi.spyOn(console, "error").mockImplementation(() => void 0); - onTestFinished(error.mockRestore); - /* eslint-enable @typescript-eslint/unbound-method */ - - return { log, info, warn, error } as unknown as Consolish; -} - -/** - * Disables the console for the duration of this test. Similar to - * `captureConsole()`, but its puropse is different: we're not interested in - * any console output here. - */ -export function disableConsole() { - captureConsole(); -} diff --git a/packages/liveblocks-zenrouter/tsconfig.json b/packages/liveblocks-zenrouter/tsconfig.json deleted file mode 100644 index 473131b356..0000000000 --- a/packages/liveblocks-zenrouter/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - // Use the same settings for all packages - "extends": "../../shared/tsconfig.common.json", - - "compilerOptions": { - "noEmit": false, - "outDir": "dist", - "module": "node16", - "moduleResolution": "node16", - - "target": "es2020", - "lib": [], - "skipLibCheck": true, - - "noUncheckedIndexedAccess": false, // overwritten from base tsconfig to relax a bit - - "paths": { - "~": ["./src"], - "~/*": ["./src/*"], - "~test": ["./test"], - "~test/*": ["./test/*"] - } - }, - "include": ["src", "test"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/liveblocks-zenrouter/tsup.config.ts b/packages/liveblocks-zenrouter/tsup.config.ts deleted file mode 100644 index b23301d54a..0000000000 --- a/packages/liveblocks-zenrouter/tsup.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { defineConfig } from "tsup"; - -export default defineConfig({ - entry: ["src/index.ts"], - dts: true, - splitting: true, - clean: true, - target: "esnext", - format: ["esm", "cjs"], - minify: true, - sourcemap: true, - esbuildOptions(options, _context) { - // Replace __VERSION__ globals with concrete version - const pkg = require("./package.json"); - options.define.__VERSION__ = JSON.stringify(pkg.version); - }, -}); diff --git a/packages/liveblocks-zenrouter/vitest.config.ts b/packages/liveblocks-zenrouter/vitest.config.ts deleted file mode 100644 index 20b769612f..0000000000 --- a/packages/liveblocks-zenrouter/vitest.config.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { defineConfig } from "vitest/config"; -import tsconfigPaths from "vite-tsconfig-paths"; - -export default defineConfig({ - plugins: [tsconfigPaths()], - - test: { - coverage: { - provider: "istanbul", - reporter: ["text", "html"], - include: ["src/"], - - // Coverage percentages - // <90% of coverage is considered sub-optimal - // >98% coverage is considered healthy - watermarks: { - branches: [90, 98], - functions: [90, 98], - lines: [90, 98], - statements: [90, 98], - }, - }, - }, -}); diff --git a/packages/liveblocks-zenrouter/zen-router-diagram.png b/packages/liveblocks-zenrouter/zen-router-diagram.png deleted file mode 100644 index d79c34dcd3e939c552ad78bb1bc3b00079f97458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 435372 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 z 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

V`2_xPFi~3u>D6l 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%0DD8sC#*3NsG#NeZA4887y?m*h{-vzU z7zAG+^UDH{yS%ZOz{o}o&GqpG_dkav==ucWsjQZnXWlGLzHygbmn^P8D;B4$I(~yD zw3y@u%G)C%BJr2OIGu~b=Cw<5yaRf*RkcnL75-i3xbWmU?fM;`Q<+}E?qEEXhML;s z{@;K94WgdqD@Kz14r+qK*f0*~pmt0gVR8X_@-AG*M@(kLv+iumrp(;_ri%O&iTp3( zn3IKlOT|<82u)2PTi+xM68&Hm5KPz!Gu z#IyvCqJj=dLH$X<+1{inIk|P_m)4TPVoe?F=ihLYZ+!B$>M!1jGbSeem|ei2&RGo& z7BVPwRt1ZU!|U=LKFp{>s_6om3O+O%3Q>4Ie^>C&?Bdco1P=V+$CA}*O;MSh7wh%K zP2Ldev)lnhTJm^;r>bAL$|P}f&2}Gu|0b}=HVn%17Gzv3-S&B{@#lqK*>f3w`F>w2 z(6RO_Zg@#|`8V_uAmj2J3u z+-ft@;e=rb=vWz%%|*pfdvC}izj|@`8I&niu}5KwdL^=j-&MF(6xn#k)hI=Oryf^t zdf*tkUPk8j=k_RBO7kSr2Az>Z8rs6~(aN7)bf3ctISgoK3KnGfifL8;#akmuy=xaS zRf2)C`mJESbigt|pvj1gG~x2#!D&OoZX6+qf;#_f40AnHhQfBQ+WkX!#WIWe}?v2U&QvyhOX{{Hwt=!!f7i95HX zFVpk^`k52g?+(mI)fb}TBcP|Q@7~zw<#(8}Chp|v(*!KS3~3;vrBfb=)1lmkW8?50 z11V58HgKBsy&Q)boUdQM;*v7U*I4M>_B0C{ulm3dN>1u=>mZ5>3CfoYXg4g4R5HqL z^v;|35dM3FlyG9i%Y`Rndb4(&$Y?ez;=#C?N;_EJz- zfzYZ-8N>C$X07!_&d$Ww$K%VO*VqEC3Qk3&!SqzN6J&pwFe1DW6e-Nj%oI|>oHM>$ zuGc@Ya$NQ-Unljt-^pHgKG4W-5OvNrdebB?DF_RhQDZ4%KJ=&xBc2a)D zp+0Lsas|yxe05+zz{?=g0A0@M`iTeagN8T+6gZd-x7+95RO(CqCirtPC_)e(@f(?# z9)`aaGo0?LTmDR@J5hnAP_HT!H!pHaTFG6t>D3xDGh(*)5&(xv%=`C21 z4FyCqN#Du&*qDvCW4ce!gn1AOq!_kHXsM~G0WHO|U14&WoFVm#ooh%gzwHC$HB(H( zl?)9HizmNh@|U30saim4>ak`T3_$p0vAl%bU6Hv5vo# zmFG^$6DLOq3o81|I#=bAn)LVuy~Ats*m!w0L!)oXhMlthV$hrnt)7ewgJxPaK`SX= z#;~sy)z#a{$S?(JA#g%TVzvhZ0voo|o$(`)q(I#dGN=qJKCT@Gzs`yKJb&JjsF?~T zYH-mtfBx*HcYNu3&`y`z{0IKR7w7RWI9oev`N|wr-d}$Hi$dV&JWrRiecAYySVjn* zjMmU(G3_8%la?-lzdCpBoZwYv>GvC4Lt zccJdCr?*dA>b-h?^@1KP$+&N3Y9}m^kXqB7%-x=kuF8aodUY@d37EY5y;h9L_5hmf zLt4)@kM*x5R{;RevHXU4Ou-Wn*MJbr*0{~2I7RS*z}vz}>0?d}v#N0qz~Vws)W4qT z_PB82LRMB*&*r(uxTOwvmoGHk=JsnOn};3DcOI0wp=e!C6-pmg>h9qYs}S^kXee2m z)5P4o5YpL*49{|sk?a@@3_9U*KRxF^J^rK@$n0x(H^r`98XkqzB$01?Yg`Ju+fJkU zm{&}FaP$yUfjn^}m0&tZo?4G3T+i+ziFkN;1QE2k^8NxRaL+;F;{h2E?X{#n9Q|vx z5z?5yhr+L@Ww)zCA50|%CtENzgc)AFbLYybjXdUuNarPUQTZj2X2WhGnk9u@__{^2 ztPWBy*jidj%E&#YZCL>HSHT~A0z01B_5J%42ouZzO5w7krKJbLaoLoVssVifC_16V zq_>8|ptSV^6vs%CJj+;%L=t;cQBi@xhTOb74Q)<{V)^*`N++ZIcVRazEiqw?iNC#| z_-0bm(8#jxR}~h{#?0~uB%V!}DBmD*-$Dd__{qEu5^!R8 z4_r~0Kl6GTAKwpwLWl!7IXU4Y!^|;abp+C%0s{5T%~}+#xi?}xJSxFdQ4S-r0@z5T z+~rseN9*kAC;KdK+|bRlHqq98&eZemo423e6e6vFz(6lHlB5$9nYBO~BPZt$wRk3L zxKU!Z^^MCK5a0mxlb)}9l8fFlgob%+hY=%~R4(n2gMccOn}U6OdIkpMBB0(_RaeI^ zC}@KrQOtFEyFS?`@)_~v_G1gmuadxGCg$+xWo2`t+}y}Smfu*7or9wSlYE#03=D^2 zHDkOPJ9Alg_=5QAm7vMYufqVA+x<^Bjj5(vA0H724?Ah0!KRL-jmx05Wf!O~5aR}@L zavX>T83vk_%_gahjg5gYglhM0EoEf}GD0&1UhT1`XEtOk(RMg{WBJzDojmE9nVHGt zCKqw*6(b1t#p=z5bcKKrffUh^~zyR65m(2Jh;e$JuerH1(3K~3KPvLn$Qbq6s zLqiqILViwC(nTs9R95%DbJyVTAxwclx-S=Akp9mLg5zZ1)yhLke%nby^J8#uAFQy7 z3M1L<+}vd&BMfmj6&Jf=RVMD{=FWoZLn%bGx4)mAj6kO#*MjUR==kvbE_urxMT99> zwxy7~!yNJ{2&I7a4+I|aQW!aH#UTLC&i?)TaquOVpwJf;6GOzUxC;KRIH%Iq;P=Dv zU;e=5VDNvoh1M5V6oCrDm4JZVReg9hTmxt_<4j3Yq`Uc^AqLF7YA`B}1K%|~ z{9@(W#!>!zFT#E)FWPyErPKL z-*s3(K+Qm3TYDA~s!)ms!@NH>Wc1LV4Ow|emktn~X~8LA#2cvy7Bc%=w?aj2OmQ=z zNJ<=*BicGTMA*pAUf$54PLYR6SXc#upwHj`G#)>0|H_doTQvq@rQl@6QbD#Ia((u) zW$)e@!UDixy?XFqBM$K!Tv>5(ClDmTPx-n+Rtvn^Egb8UwUIj;AK;*~~aN*g(nt~YA&lNIfuL}xb5jFJm2!mX+ z^WRsah7~CiB$cdh+>n=%dFr~AoE++!#1n#Vmf|mxi!HQ#0*{yg2xz411%t5X+)scH z8k*Da@HPK2o;7>%*toM`o8V$+f94A4;O*sw?CP~km!yd=zxViY6+USjC?UGK7|42m z{D9#!0!bI>tMIy{q5teG9UBkNHga<0qjaI;!34cR!Z~8-e12wzaQLPbot;Zyxqy)n zI(+zTSB*D@F%U`^B0T;>5&CLwcDzoCW zC3)&AnIX$2y9rN464(SEg?JDeYmjyhtbOz54H)%6t3d4Tz|-*XuRZ17kkh~rJPVnx zpC1pPb9=iu-X3Nr?8zzs3fJdZ&edVf8Q7@YL4NVT)s>2xT2=~qM-U!?x5)qTV{#nj zFbOD54}*6AipghWq+p(4q)?B55IM0U%>TX_H7;-fh}W`#fABh9Pjg~|1h4u@g^x~8 zv*MNNv%&ZQrDUb&d?jTvI_oK@se1vEiF(PiH_#t#cv?BW2f5e?CdPthf{|G zI5jpVCo79IjLV1rz|b-cC~H7k2@3ZhE@lb`RihPXFVfP|5E>AREb=ltn@~gp(E?~i z4w8XW4b=TNz+VFZ$3%SM{eJ`7GG%*v!o9SA`2yR+#0V6ID2kKH9Y>8gCp|2O4jnpr z^wyUgORruSB`}0sx3z^X{6Tq=%cw{#fbIixID(R#oE+DC_tZ5s@O>^F{5`Hj zU%n&@7Z;aWfp1QJ{?*%z#D4*XLGBgIZ~>vAse8tzr=h2J{rYtVd0d_&o9`W9V`CE$ z(dO?N8rr{SPyg4i$6=`)9xX>+|6JTR7d8Ly#cgeF9t5QTNal!(TO*0kg9RGL4<6{^ zz)As#fK-McF9z|OJnYz<`@gqC?9{*SEHL^a-fL;L+L=IbpRU{v;^4Tv5j$ zMD+fNTU_-2I7l@$wYV7eWi ziQG`z|0{x#3|%!@yXsGO3#~>mbZ*eSym@mPUH8ige1@AL2Zz}M)pO24>6#NZNFLExKNY~@mNtRbsn8N&FH~!q>(<`78Qk}%p zY5nKvoc`^B>!DhLOjC4BjDv#%VHU#5SE3gH(f_aLB`o|uyK93q@TZcJ=nB#M2wY$` z3C--XhZY`qwoD>&0VDtaBA3KGgG-22l=Mi;lj47^IHRy_5SdgHmb(mADA0&e($ia5 zSSaDFx$x}UzaM<0bUSxmFf-#O12hH$O#w8;ppHNoo#)F{Ws=LEvt|>Kp3WyG_NBa> zorUET1)qSxJ|qckZKnVaiJKc2-__NH)AbnoH|fyrbwuopydfDG8B&J~S5`st>SJ|% zW&f9_#R6lQb+fLerKcajmxtK`AxA_;CJx4kuAn&NT-e#zh<&kNwE%w}Y^kx*_3H`}$e_m1;U1@rMsL!OK2nTy@#Y-Tg>1 zT!o4|@>QUG;MHf>NEBxHxk-7#nfehzr`& z1CZsC^ykj691Ry8HZCqW>6G++Z{ZRS9Owq#!MhU1qkiM|?Vb=ZghoOfK$w>@$|Da6 z@~iP5`;cH*CIA5#yN6Yu)Lwbat~*!~DCQnGcu?>J2>v8)4(naNeh8T<(j*i?`cU0K z4gfS_ey-4E&4;KNObrYU4(ro(f8KNjjkyf}=We#OLB{v=>C-S|1X>(5ZeG5vABu}n zZPTZyC@=4CO6|nsd$_w}Rl9!uXBUWU=l{8yOes;I%-erYYUhp}l32Mnk<;j!fJX2= zS68H_5_pkhL|FiymQYGUcA@L=e?D+K&=V9C1;M`Nwmb#T)i5*8-lQEg;y46Hf+3MzoNkf3y*w`54M0|XFOyS7f5t#cBJf%r>7Fs3%r=+1BJ{u$e5X!a&mJ)4wr|NCGmlW|E%GPol_3U$vJ|vgu0rE z1~sVrwZfIpgovv1^#Fyv`F6?Ba13mlAtE4R14%|Yiqmwc;0vK5)xbxHfYSVxhl)X&0U2>0SzYX1a7R$>AU|naB+!9 zDK)F zZNnm#t+P0wPDI23*|L=^1F~#>etyK`2~Y_M2_d>Xg5Hk1ckeR!goYkNfDUzbDk>@* zDanHWyss1@ThOfG9(j9vGlwJn4H{u4u!fbEKEP_b+%H=RSU^~uf@{e{MM?Rsr-zD; z4pFWwj@0Dx01YyQtM;6Ug(WXPAL>bQ85wF6z&gipbkJ`QtE~$lRO1rx{5c`V34e<; zh?g?T8Zt66Kq=Il{{lv+-?;j^e@E$gjVuw^Nq_^u9vPUGOoZ1{1Z04(iTiSq3k$nr zWn&|5KW3z*r3Guj6b^zfbSNOJfuv_X)$@u0<&5^>p=A zSah1NBp6%@(=#&{k+XwJ_R!!UQ#hp7kwrvUgv<*3kYvce{Y;n&`@gQP(dxMsztz~; zNu=pqKAcD90~EhVbRXvPYD~Me86wdM$s#eizVN*2Sb2C3IC?d{TWuU`k_3r&|tUH^AZ3ea!yqq{pDjJEFXn`Qfm z6iP(}v}U}*!x?cBNROYVrTqfZquzY4sHlj^8eI$M0J~*x9~~7%9Axf)8+l|v{z*p> z7q{%wCmvh{7M2fqexATebXfG(g8Fw*v|Y3JUtV7S42UxpL(Pq9fEG@U||t|Aqp6 zk5?eEw8t)l=yFnU*2p|Mf$I+GX(Eg5G7PM9Y^Lij;2J$Wz3ghqr60!r)Ts^FFyqw{ z#wv_;p<8jfQ{&^6<>k*@TeHmeA}{z4@*$a){*xgk_|siMrU`x7In*5y`}g zB~Q@o-#>&*&YnH&+UBsL`}PF`b0RAX2tgWsTKpgpM4U!fu6RPok0K9|Px_@waH%3> zmcsoF{LlT!`M2j45f!C7YRiRUYHMpCaa`(sQA~mn5k|iD(Xdo$$Zz-c7 zNv=k?t5(!y11sE0W#v_f7%?+5gVoAY36UoN6*hs`4avnc)LC9#R`@@47MKQUw`>C8wk*47ef7?Kz*fEx&PQQbtJ%u^y)i^hc4U{nY40dje~ zZ}kJi)6-R*G;Z|ZA&4Z^KfYI8O-)7$y=8K^5x^(pbDzr|CW1{KHsb6*p)MMZuV25=c4)Fva)Dbn zymEzA!gr`We;TBoPhC+p!?8IbCFQ=1iv$!M*Pu*ElH9eMP*^0n1S3XAM!n?^Y!(uF zA>ouK6<#w~x(WZ^vjlRnNKvtz31H|S*L95Bf{?|=reQ&OBguH{R_1jbSR&k+l9Ce5 zRQ=@fSaIYUj~~BdY72@$8wtAXNvCVa@f#$;Xk|9kRTK8*)uIf8>?z?~Mw_WSPScU% z^07mxqvJW^_n1QTFFQLsH&+COZHHdu7DIhkGN+PNdPTRz5fL$_*rW3E0&ktgKzw%l zO76@K_SH~|!W8uZnBW-25L2UKEqxNhmLf1rqR>%>z{4fU&fdQK$GhiWhlszq{FCq$ zS#{hQZ|}%Gv{3!Ev&#ty*-xNW_|fpL=_f0{hJP-}|A}WqFDFMOCl8@($?)REcwZt3 zi6ZLCb1wgS7rJp){izR^uz*1D5z7dv@ZA!QM^-=h?S(^-s9X7QS$gL0FMQ#htE=n! zs;7yGSB;FKJUzFs{^p&CmAV4)yEV#UG%l}TAi;sxtMmOzXYi8o|Auzjk zZSeQv{GUVcY_$qR{C3y_!qPzk6}9qmtCh?ifi%z`0R)Sm8oSj@3Gs&s1#4^T>(@uY zozGN>FbeeG9S9gymk*cZ#pPZ+;`i{^=z-$4z>;j);>~68IjS6?JP`#V1BlHv?gJSw z-da~ni%oG6brY!87$bjya?X)&-up;)k6@4~DJY8HqS*v=_jeHOR}iU1n3BNC+Aah( zzafW#`^?SGzH@H|(xcs6gbLHut3NlS{dQC)9zppQ)LDLG=Y8r}SXh8$(=s!YYx#qZ zIp2oJVL}VK6Ocl8FD7nLTnMTXTlWfaA(xl_rKIE%SS4Xpqc)Lf-Jl6AU10s2(65EY zl#F~xGxRnQYFgzfg-Spvd*Gn{9YnDpAq^J4rNN(JShAUuGcnI87k!`5g5ivXIL9p7 zD4q$C?#?$z0RpO2@c?5Zg)^`{2cZust3jf`a1PC8juWw-z;-}q>LTq3 z3Xm!j{vHx%3-!Nkpk#gaOhsQmWe>IXB!0%niQM#f{vpE?%j-aivLg(2;@Dck29xOS zAXf!@WYQ>yGKv_ol*D1T_74q(N`l#*lx8#lz;S9{N{+gBPdcPYZmr!TI9~stAbC1k zKhUB&BadnL4hk%<3KtBP<}_goii;sX4j~*3dQOJ6am^E&s;a;R(7fSD`_tcCEYxAq-n~(^mMAh{0Z|%o?+0@*A-^z2 zx^ZJ18so=B3gGcjAZz%VSh=v!5a#BSf^&>^S+8Db5!VjNs9tLXlEy*P&$4*%Hix(} z_0i4E&4^^gAYv6oEb5zsuTXl1wv58(5^1zcKo(hk`}XZ)n5*Q0Ng?=+k&mu7Ta??6 zj;89eGUcj3kn7IPLGQK>6>Y>&mCnO{}&}kq(7VS0l zU}SHgID5A4)ASbpmTJHL94MKR+{L362WZ<6}iD;FZs=c8%>MP(~F$fHnC2V+y1Qs>EW`ga7SSeB*A3TTzGKfkH@tL7z4tBx9$gg`LZ7I25SN&6 z?}T2sxkbgpA%q{Kuuo37zDO7L5GO{mVDt9vO-a7N!WMMP-O|y(Z*ei9cHLwYYe{^T zs0ueoek2rs=$emzKejZh)LV>84fCV0_7dmOql5&QS{2dnmZu}jeC*gUR#w)AL1fsB zW@1*5uCg#x<5L59czGeJIgc8y%ocpFi^CYiP?Q1%WYY;%)xf`e@GQsTK1@?3?EOwn z8trpJgJuO8B_)!cp&KPS>grw*#m;`5Z&W<3*pv{YB$$At`katCK3BaC@mappeAbta zWr79Z?EBf-(`b203@kv7+hJ(|UrJJb0D*5&(|Wc^UP#E2Bb|dvmz)(&k7j)x$z|)g zoa>B7kLrrF!*nAy5+5}{7^8mgra#X)zzEjIV^RC~&y^#q3uv)@!5{T4Ri`WjX66z@|#A}7zQgBQw;$CbGg30>bQ~W$4(J0 zEUXmH_XlcqKzoulzpk$C#*Gg)ZY!VL1l>sj zN*`!DPz{?44+SU$u)Wh>2r-`-Cmyxv`q#g;?0e7Epq~3Mi&0f4`{zQA9te1Od6ixZ z){b#=arwBR3(hP#bo8AQ($C$pxXJ@Y+vf-aAom;B4Auhy8Wnkr{^>isTwGKZU!m)1 zxSfKRHP9G+bj9*b(^)%`IgcG%Lc@^ZjW2~xx*r3dKS!pbrGxc}Jb9vto6z;)FCx#* zSQ=9w&2PR65g+Azr_gwqTS=a)x@C@UE+!p+5|hj^^>N4waO`uYhoC=I9y zw#O>b?_ZJ^8-rk0ML(RHy@P|q2PR^F@O#}0%!-r;$PDWq-c4@qn=J6{T{3Hea68aa z@iyjGxBUEko}~k`W_P!GGOk3uas1t_77zx2RaXC`p{9mZiWxc@uz)s`6gVS5srQgz8~g`1dwg!SP?e zW}AwBHy{FT?L`jV49&TLm6RiAs|v>|IM;31`c&*YCR`3w8_sJqW%|xg)uOUZ=>3(K z%W5REVJlJm+gTlBPg7r9TnrE%m5~=34}G@@M6YKRQDA<(IMtT-+VJGbV%UwO;9X>U z4jY~nA2LT}yb1GZx8aXCgxzJJRa#ISBLF3i^m%0EG)1^=pLTVf{}qg0)Pzq%KDt@( zYPw_9^kB?ca!)J0JiX;D|Zb5(vZMi(wHPA%S9hfxo)X(;S@WXA*oM%L*wf(B|9 zBV~y%9MMvkP=lNA1*rl11!fSylX(g!VAAF+Iedza_7#>}5 zKD21PW#0_Sk0tsH>|-c{Slzry4?EN>X_M~DyrlcnBENX2{=OeJVp$KfVq{kkTdCr?=oP#fm3*1$jBDyf6rnzd={fjfFiIJzjURX_`3l0tb z4G?o#7_HXR(Lsys4M?pF&@u2_DpBu7s)86;K&b_-J82@g1|;#bs;Yd(H4MGNsvJ9a z?j&l_rm?6x!HA=hq(gTDE&<^lsw9AZuhB!jebybDJdYP5{27PGKs|eY1k7h|;0*d^$@5W**X{^LV_mH&xGW8{me1c(mti{*yyL zv#1drV=ghayCq?-{cF^Zb3dV|X&55N`5ZB!deFfY7w33B-hJjFem5qtq2NYNAjM-w z)X`p_=5|9eI2G4c0C5a#PTyE?cS~ccfiosv%KdPzP7V#rLspC!m2B|k^Y{WpTqFEe2dzcb$F3ecgGN5&Kc68$#2OA^} zh^eJravX~=G^n@rLt_PL#Ej``9r|RoxG}cyFDEk9zBSPQ`W&(5p=Rpv8swNaZris* z+X?q8lfFQDUM>2ZSo*2x0@xvqh98I#Ie(7R?Xe8o(H5PjT91^fB?X~qi^)u)sNeWi z<93-vJ}mEflo=HZD_Vfbja!7J)zbNNXp`q;>nbY~ZMDG{V%77|v=L_Deu4bwuLR6+ z5f!@parfkfwSK4lUAwnx4SCf!RWY2B_n#m3leGp-7~HofH%Y;y(n4 z+6-JxEjV={KK4jQDroQ;{4n~DkLz|3n+T0eM-9diEG-E zzq9EyIVr9dUaq43MJnGVEGS5=#Abip$|~J%6itZCl?4R_>f3i!N6N=qqsc~1{V3Yc zP+KefB>&FKr$O`P*?L_0CGjhUTu_< z(@?z@iI7dqQ3pmi6ElQWITb`QCRFfOqT%@^RIz1~ zqnd|_M(Bx4T54(&gcZBlnqiQcNj;7wiFvP5qmpHzy_LYnlaD$0uf3lTRc? zTtpj@WjcKE19n4Ngp-E_b!iENJ{z~SD2JfLfP`{f=Qsr~3XBXqn~)?Z7Ic)AEr&Zn z-W64@=s6U5AEJHUda(H!HxbG7JwTu$Q|L!@Ak59cnbymgnkLM>Nv%lpI%?e)_S!>T zMa2?33qibJa0Lk}g3}|Norsr**1a@+77!4pukjfe(Zz*?svpr){L`C2j;QAogUKi) zCOim%@CwS5qE8rgx1cRG5Di~r4TyYFbtFtaGpT24+pLR9FfZM+cdy4s^ew$YPvn7P zINF*>vSNl1gAKmhQP^vTKR~HcL9@EHRwdU#%F*#P#~lE{yBo+=#n1Er@k2c--ZOk~ zV4xL)N*gzBY{>a&I0*oEbD~dWGSr@xiRs}6<+>+gKVMQKSmK3c6CgEE0KwHtAvNuD z;(2H8jng7M*??&42stzWt%peoO_!i_l>yI~Fve0FjB%8t#dC3**Bj3^c^O7Bv9cy! z#<<7lRD)w_FW{UqwCsO%l-$~x80g~@C09?}B%Lk@lEwC#U`mCJFUdi%cHyL7@lUp5rt{D5*eKrn?h2wK1P_{uSNo||)vH*ZB%)|R_(Jq;8*4_~ zLu-RxLCrXDPxqScH)CZw@x~(E&wcBT0rRY*`!VxY~k&+(?PwaR(4~g+ zB(fCm?rpj1w1m+$l8YmeB6oP^h&x<-@BY?}Q|MTy8n`R{8@lmNzq}^OT<}>XQkt4g z@U55LzD0kVB82$zQ@n6(7NLYkK}mX@)Z*}2GuR|tz! zUW9dMhXrVGYu-c*`i!Sx5YQYM1|It}XzP)_kI0)xLf#RFzv5nRZ!c;Pz^8V4$udcg z9A;zevWS@1$#E1pD2|c8fv{!}3!at0dZK#R&2+FCE@uN^Yx#3_3n0_W9Ka}C9?*ANlwcPhk4dSm7G>ABsUcmV2 zn8tNfrBROJ79Bczy~}0BpdqO&!67;x_A?n~)z%@bu=?umhY=P~2D? z`z3aS(rgle6DDoq6RRvC$c2p?^ z*B9T;zEruZmcwUD$+j5)MB_albV`%;G&^nGY}v9>$E1<*k?u&~y4*0hQzJ@epHRcz zEO&>I7my90dVDfCp#J88XRcvk4C}NFR|*1?hKRoggawNQy>iYcmW&gz+`#m{klkX4wYB3Vq@w+X zr(vpap`rsDKJ$CqqGX$3<&I2WEj9O3Y5bXlo4>O)gi^w1$? zCpQO?^WrKa`-aiFzfb6zmW`(XnyUb{)8nFT?Ni=sFy(r;p!SEdc0!X}!rnvYU1p4< z0>$k{!xBu`ZTf1C7vv;V{JNlCpYJz_z8}BgI@5wwLhUZ01*nJUlCRis@wzkHC~^+* zw&cGUl^2~84`z))=QWOl2|=R+5(kNu`Zj1d442?aZC>ACro5AacY5@>n}^3)1%Pg} z?Wl=JdY6^M%L#5QOYwF(`I?5?smN{e+2Ff@i-Q%9o7s3@k4pKvQ3R!9N;jbe>CfaoXuOLn3Iv%dO;^IPwu1~hl|Jle6TbXaJhflgJa~>L zzU7)}p6}1mHXgJb!@z3@ChFTIE2{Iv-#)KNEt$xP-q@k`#>Pg${n^Q{UyB_$Aoc&S z_m*u{MqL*u1_p>hiUKO#D&3*9lynM8ZMs2PK|xZHMoPN7Q$R$TEl7uShip2}ynUYc z{cx`H3(ocOMK93J9c#@w#+YNy<$>2?t5M2Y#MFkd`A-q~jq6KO(=1OqabD^@$XMow z0uYi|n3$C1xlMn~!b%zROw0kHa#`Jf`uvNX4P)%mtF>!)(X#`dcZ z{l3T*OAiF+x6%3kpsvK9!HGrH{=Fh`L6q?PhbxRSm4uBx2I*%l9LoLMn&W-!og6)3 z?;Q42)Kwdxk4DwnW98@vVffQZY|se>9GCmg6I@o!36&-W`Qr}x@*eCCCPj7N96X>g z1XzUpc1#vd-Q0fpqm_7qcn!e!d#`5>HoH($F#M=EmRiPfbG2VCibOcGTKH(VCz4t7 zv*#CCT478~kD*ELSgENphkz^C!-xNdKW_}V8O)Q&X|Cq<44ytynZA0|lSJ)YCIEfFgA-Hv;Oz_E>^ z6jVx+e!IY~YdGk#mJmMZG!aq`4HCjy?S`QuLr~kV+jca@+?C6w1ow;xWZl#!#3QRdLfL`5Qp z=W(%>a#UA>NK^0)we&JZ#n67WW~07h%&vpG{%saIp+i=u< zP)`Y0GoVBJrTxG!P^;%UR5fpbaD=-%x4D)fe6kcL{1RIJUe+4)3I*L0u3wDvAr`Wb z76MPm>b1tHZ|h63IzQSa8;Ihy*>CeZSxjA(;qxRKZ;z-OB_fk-k}H9;;~|U?Y3L~G zHj}%+8MecI*{Bl+N9uL{^-8Kc1*Bv$-cM~@BEAk^K@8=wz3{k6)?{4(zJP2>cD4f4 zFF;66Lto=lCP+I@Fc`sI`xib~qlnYW%XdFNW4(HcC%gpHSN7`n1Zgga%!v1KpDrnQ z9nNz%@Peaz^^FhCGE9njdzpdYExN`RAP=Y9N_)@$I>m=M$`W2D7%1sY3BF(b!E&Fk&^qq^ zDm43iziJsoHFOaa7VE-ZRI!gcyhdW-_sgu|)?!PF+mWJ9+Wm}Xrb2K5lW?9ZK|PFu zQbtbNvu{VHF}VxExwLUU4JKE#_Wu+{*k3nAW3{4=QSRs@46rngg_(0`)XzBNolLY7 zHH`iSqO*98p1;vB+MJhX?#lJRsby>v64EwBpBeq=Sce|LJ?2lg?4zK6k#{kX_UGKS zs{D#NUDeIk#nlsroui7&>Hw5+`rgT+?rC~Db52AyBhIcJ8p)a#6OnBUT_pb17oYq6X1ZgoE(++= zy`~$atQR0hsiCuo$Wi=>s6S}dk4M+k{y-J=Dh}_^7<3)#K_4=Y+7fH7IO$9eqHQ+1 z2e9(-F>k@MgTqxpH%?r<*h=oKbDM@VP7#nVD^-l_tj|eCVCul0cQs+SgyIFz|6?X3 zp;1f++w%DrF1%lDM&CWk1GHlM0REjqUC`Isr>;`u&M8WE6WEqXS1eJ9%)0^~th}2L1V8%u^m)y94KD>z!^zZLa_^aDkqdsYLHJ{Pgp3 ztvj$LAITcj!YPUzGxU3q)UQo8oI!%rd%=k^ZUPIyn{-a- z(*Zr;J-I#P@ETBgS*sV5c_#5#gPI514B1WzOwk=ni?To^)DTOA-pR6hO5#P})-PPM zKA%gXJltNgA2x~_2YyQW_@-A5JM1JwHeOh5FPnYIq5k=JCT7|VrddR>Xz#*7lLdeu zpobSM{9Qk<4>5k1mM_Qs-QR!leJ!*tffXN{hAbQdr2?ie6a|!Jix8g!>*K+bOKSd^ zyuul#c0qRK52}Si_%763DdPWBEhOMJJ4=L+#e{kmP{K1OlWQYx@ZmmuExXz0y>m^5 zZ6Tb<-_#R=bFy^`6)jOA4BQGQVI^H%MGj{r4b0iUBx4fc1})9r%dzm*EQW64Et|2t zqD7&8mvM{&kwZ$%e%3emR}24WF--DN-?>g#mn%;-8WW^AvNb)+R<2v}enIVcU-dN; zcguLb18x7dC>$d$F3O2W4~Gg+*SUVfY005VbmvOLK1lD5TeEFb$VjTk?hvdO_k|DM zlf1a1&Y-cas;>K+@f8ihzn5dY3E_#aQU$jr4vaoae*&1guTY`Q8~(&reRK5mU34@p zoq>FY61S?Fiv+yO?mi0A2h@smi?9?$CCMETfgPw(xrz(IfB9d!)n;>LrA z^Kb`L5zxoTSot)HlH8M(xzN5J>Vxlb5R)fXK&(yqDAZ2!UO7~x6!lIG)NT-NZZ2pW z`Du&$y;1mneaBo@Ourmz1xI^8`jNFfPj*zf#F1`f#Zt!64D5BIawcTc5(Hd0lQy=g z`9oCvHO@&gHbw>U;%8i=VHb#mJzH)><@S%~CoLk)-u>?!st~nx%A>-@Vm(QQ45qm? z241+%qYv(BnaK>?>(ZhrQC5v+W@b(PK1OMDAq<@gahV+!BZLpe<;r%nI|4v_%2T)L za%!WA5)-Zh@SkG9F{`|5kc;-K!gWT@K49sCQo&iUwL8^e8%h1a6HUgoX$81}X+vADXI)FKI>yu|ElStd@eYIk6RDdPBW;%c=zy8on zJ43+hWJRxGE22PPyZ7nAD;juWqd+C}1J9a;kDGyT)OMIZcgP(rp6iU|1?cf;cnD%b z6tgD&sVP*+r+#+BW{}Oems45nr`NO3i+%Xo`DLe7XJ)(1Rc@mhK{%itj1hx~NyNSA zv)gKsq|G#P6tUORGrfT8Bia#K1}xwxJ+Q18C(aiE#YAYYs)s08&BEPkJm^RE=FNq< z2(KEaJkGy*Q+Z=z&NZ;vNb6q|>Wl94kw1;ee8x_8$;ofcy)dn*xe*GE&GbVEhDqH* z%0114;3P5^zx&JyY#m9w*GSoBVHJ6R&*hi(B&2Ydwm?EI_V93M43emd{-eNaXp`00 zsy+~xGe2y2Y`6g$zcGo#U;}+Ctjwfyj@^K|e&?v4!LS`&9Xfv9Nw8p8)vT3!9cFkj z8r*6etH;D|)Iy>}BX#=;7#Id+n7!rS<_!RNyv|OVUq?L}_^QN+A2zs!J-P_Yr~5<0 z)%J3zKQuNh*j89wj?b0R$EH|8o;zN5ZqUwB#hDiX@qZ!FOX$Q2x^$+R>CpY3 zXIej68;Cz0?ox)WOI}e8Qm4>HMP+eN#T&M?{{0pRQwF7P27M6;E(MOQj_hqQSQlY8a$~xbo^Ql zl~ZPAfCCXQ{L&OD3BU+ZfvI-{INLY5TD}#e4J1Q|^YwDwsM~w>W4Xlvw%Pls&j6ZW z*Jwk*+gtp2?xB~oSF|iG;HptE?No4)K#aq)?-sAI#Kkr6z;}G!B1c$FG6FCz+1f|9 z4ECdVLm4E&E#g6dJz%VPM>@`yoQY}Uop8Zfje-VIG= z*w)g2+OK71s-bNKV_XW^pipoMA36>m!fAKzJFKKSr?XHq~j8Vq&^1LSR|FtcDCnV)$I`Cn--o;=Mj&imT)OVZh z%jNF>hDF6n+eCZ`mEVeLI5rxh3GX|1ne67;D-AG%cN&4go6=oZe;*93Nk*{{q#d?9 zA>||WJr!mwjtoOKmv84T$GI+N=^eDIvqF&!MfV$;I-kXlLbgqryaO|AV6u?*eKj_q z3%;9<-B(fo{+5xY_VQJK#;UIU=; zdl@SlX4gWbehpyH{NNslyPJ+__$v}mgF8km(Kb^_jK4W1`W4gV+ta>6(^O@rNBJ3zZsVN%d`vPhLaexM%h3D;uUiyi*IuF5f z0XU+qfB2_~XT*}jdZL!+nP%;4TMiryKsvQ8@Rw8{gM}ufzHYsGrRf$sz@ry#Yh{3V zpg?^Bd%zRI9*zPc5<<=7oi)@!wU?(sY$C*K`NC!-gBCDEU-6H7>5g8^Z|b3@TmGe> zMm>=I9=FekX1Um=h19GZ#moJaWf>kO2O#skqC%Qyk;i{73s*wI^4hDJ>`D-<`6kuX zO5tV!u{r%r+jTKikI8!!H`1Z?8KfRxwK1TsvI2=y1L z3YAcG5_y3vz?2)`pmvkJxs84s3_O@%!S$%9l>%1}RKdq1&}NEN>JCvHhQgUNSAgB3 z65a?QE>;8)nK=NWT}VMJ8io4c>JZQPcs*8=qmV(HV?m8AhMCW18OjpuujY&G%f&C( zyFuD@5v1K`xJXZ_7PR8&24YlFTM{DE+v1n&$5vusZo)I^>OBb{R108fq zQO_SC-6~GKi2CDIo<#WrF`Zxm`w)GZG1nVbidjaI5 zFJHIBd^Dk_S=)i2GnO+)DG+zr5wvPt|wY+kq( z7LDCX4qv<2fkS7fiME|>X9x$Uze5ay$bXAEWN$78>nqY*73et!x^cXqo0H;wXeL_( zzNpKiQygS+^*maFhp%F}4>G*Bk8U&tCr>7_wWkh5cK?i^6}&Grf-9u2z=uj|`;p4d zJ7khn7h`2|$L-HGgQ4y61IPVM9F)^ZGyl zxK$4g1kN0{4ElJNGgF{mO}K6aY0%`YMGB;p;IOyFZ~i#rK`W#C-PNzaNjtf16=Qtz z29A%U6w{D-!cBP3K}%28oJ)YHd!GH8r*WJwjTYUPj0a{1W!nf1*#6P_xRs0@^feHn z$T*WPa0^5H1G>Qa$U|}8dE8NbzZ?`T#Ai!nqGiEOfu zsvrpiG8NV;VoygPMl(4~gF2XcX%1Q>`p4JhtN-MZQ6vPMWwkX9r1_29_THYcm)*Xjm%_i;X_d$Xe9WDTsDo)UHiN>mn%8i7D83FNpdfy|Ct)v)OO z=mi1ybeg2$gH@%nf?(NZwuIyuGCauMGhwQMGF>5YB6`gZ;KaLvNoXhpA>j;+Y>wRw zK3XIeQH#F&vvk740udST>Yy@neUeq9@DI?@o|xXp^k;t*g7v1MB-|`$1!z^2ci|cu z!4fyT_M6Z94mQ zynasD^j9jpAro2RU;?DQN=D9rOr;P-!_2>2s!G-nyKbex0Bl(<2FoiL1gJ5rYH2vIQmho(ttU25Nd1(2pCoN8-Ivm$JXa0wDUU#23xL7QYmoeKClkPq zfv)ApQe=Rd8b8ePZq|4Q3O7XdNd%^W3&~G&_4>CB~LNR#^ z-c7R(0;_ePKv;Ob(Qk@l>0IU6rl0Vv>_IsI!yujrsBZ^>?=4i4Lb?HOVE3}{ej_vu zedL+`pkI!_JQ%_W+R%&FQ|}!#6oBI5IJaW6L(&oCwix>4d9(s-2TZx^AoT&Ka9I56 zhgj(5tOuw*3Ty!<^SG@;bo}nmf-E$2cHW83yu0rRfF5EY%IS}K)?1;7JaM4rfA3n? z-jYD2xrzGNBZK17+5In#ZUY?m0_x=OgAspBqAz-)uV3 zs}b-0Tpu#-U%dy0+GhIdKir-`@NSfMJO@e+AnYPhL3+AzO8}AAVP7H=8&DQHiqT!X zLKcOeMT?*}g8GC@BT+w(Rv|$E)R`n4Y$FPbBtQ{@N2?{+_zFLq|Gd4N07K(NgXJ3V zj8D%_C(m$&u4dcvT|<&dBi}{KCuyJ|I39>K-$U&GNoXE$Z%YQ>A)>9r^&9~smro+8 zN=Y2v^IbpD5`w%5a0TpvUIa5pZujTwmm`#G`4^~&VOHA6>^oUn+zoT|ixZG%P6oYB z)D_=*lQRxs%aD6k1q@Ney8+M6vImzd`OaoXstP5M3 z<3dG$SIA_xR*gp@9fX`p>N0HUQ_We&s%;J7Ap z-BSycfOe*|0lQ>dM9V7a1@IrBScMZN)pM253rQ(83f5 zUAikEeAsSV0)mvqLQw)&M{@mbdCqnneoDp*la17Y6 z6D$>D_`AM>dUVk*`LJFg+;=b^@9a))GlUmpOmyK>3+N3QF1nJq|D6t5!jGuNA#ED} zZhP?-oMrCw?1@!N>0fXPOaN{*(+4DpG>PPc%37!T?%6tMCdjaz+gd8h%Iq+0;WEYR zBw#Oa7kKR^@akU*$R%5aFXOUS{-F~-kUm@ktmECpymW3AXCPVsu*Y+^1n&Q16JZ3< zrwKtv@52&+iWf`TLjrNQpmn1#{i%>X})**Xlz3*PivZ!<;r**7JI>2wII86 zXA(+*;F-I(y0law%6nWc@A`8bb=rhL41m^PRdJXZtwW?J_%ytgArR*K!2NpZNPg3L zGZ5rj^1RZ<5HENMXCT-^V0cDr_BwuXarWV0TS75B0(D)--%y27<1#S_PITpv5|y=yfD`yBUSHTc;OdOeft zVl!*mM=MF#h}g@u%9kKlIKo>M7nZ)UTMfAYG6m3d7=MZ>EAU|1=Z>#=%wiIxUh+E` zl#~s<(>Xnu@E7{mWs|_W%ILd{({le3%uk93Ceyh?#%-nJFtZMr+~^vUUU|~I9?X4# z!Y9HyoJ5VpzG4#{0nfd@8x>bpBn?4|Whf*0LP`eq7q&Z0Ep6?cjxrBq{HFrT@e~nmevB=>d}az4zbJQ-8bXd#n`nkCm-!w zJwYTc{U~0zT8L_C5G`9`Dgphf>)5tHAL>4kDB7xt+xlRNZ6dCof!lkWBn8evg< zH-z@}x7XllX*(E7W1)f|1;#@KF$QY3(XHhQP5-$&cJ=2$JEm_UH&@8x;5q zzQMvcgC}X6an)ile;n*HF!1gXXg3b4R#vZuR3Ov@# z5t|OQ%r)h{`wGu-EvKfaUk5Pw>zB-V#8UwJ=!{$o1B9E10>84M+{V!=cRYob+=pHaVAS?CTg&P-lOdwRD8<52Z zivdO_Dq5#pc)=~9*lJZd|KwgzwX=xJfx5JtF#-RlA&dtYqu`UQ2%fz<1jUCLXUVAy&O0skzC>isp;jR-DBA=`Mqp#S*2)IG%T7SnfYMtZV0XmS^!m@+17E&iQ^;S| zAb0_itAKs0KL=g~M6YK1!G#y_3WlPInqFKPh6~nLyG&*yV!o>328j_cC&lsI<4;Kz zK6VqJka@o{t+ud%WdZ{T!082W+wxHbWC~~SeD7avJOsfur}lyQ+1lhOOAuK#3>)=f zRNrQTLjD;$>;_OY&t`;A4U9U>jN-wdnTDGUp`lTMDVDJ;rVhkkq-_#}EgzOq5Pv}i zSb%%6sy-y(xFQ;?3#}H4wEwcEA=K{WNPfr4qafMTP!V4Vm>BM(v# z;<(?~&{%MV(GvQ|eV%mu9K78J(;1LaR{BgAkDeg=fC$$qZT^~)1yNb4lAMtuo_9Je zO4}R%x~G96!Ssz@&?qRRv zRFCx;MG z>G?cf?;w(`vOKT&xnFVrBnkN7nimq4vw$|jufjyMJiUffAXxyiv=7(7mx#0z>@z`J zMFUuf2ywXsW(25t5K<|Mz-xrItN!g3m~&AFgSoM3uir@nD`C1GlF2~~P=CXb;S})i z;<1M25cIY8m)4oQ-;tiAMlSZRE|M%vG zz%Ql;vf}0%#CpUNt$~HrUWim~v%^j@5TiImzeO@6hJn2d=+PlqMdWG20to4|fvS_} z*fb)<_RkJvO=QG72zo{e<$xd%rD$m|@pL-_Oh37cDC2*kGu*9H5y*^UNSC7uoKz8> z0kNAmQGgdzG)Of!?P-y82AsY{=KNn|TsVsRR{?@A{3`X3cspPdc%a2e7)X<(J%AcPRiw^`1SyUoQ`G(rg5?JB zYsmDAI|4mx2?*3}La-Km!ROs#WdKXMh=Ds~4n3Gm0WSb}M+4w4T z`sM5#q(B5yy<~w_z%{%q9)%SK<+(GthI)`bk!H`zA)5bv-qEmJ-{34mtNU}Sx4P4? z1!|$PQ6db@tzC!`KiAA^^4~EA`XmTb*v|Xcru!y<;6F3Mu~uJ!XkfSR3T@_7uPu=a zj-W&c3VaPkKzJzx1!ofhMiE!xTZ*>GMu)FAx=ZjB1MA0u+5W$OVhVu@UGeW9zDd9T zzaM6ZXgyf5Z~te9spJ2<1da>;^WgKtZ?O);sVcDFu&`8g_{HImaKjD0i1>vdQuc1X zmE6s>|DMXlXa<)j_mlOii1>C+3fUXAHU7ziZUk3tB2s`G#4IM_H!`8faS|xo&uyts z;F8B%K|M{eeh=bc;pj4Op6xZD3&5ior4a45a3xJCYf&4ynnLY=|MM4H6AkEhPmRti zivE+^bqnB(g+W@#QOaNqDLndFc@YKUFxbvv>F*(jn=Ot4QSN^1Y7 zav^_(uk5)0`w_AZ{`2*JPvigA#(xqnvL62byHjYCv%;0&4jGwZWVtZ-x}aN%bW9=H z`d8fD3#IhM|Bk*uo&gq?syq^n{`;jk_dl^7`Nsd(k0P8wBj;K`hV*830tlPC{YYQL zo^`#QsX%2O^m5sZL{C?HR;ypB((PnPZwwhDlyKm;8?oqA+JFk*RbC0Q>NJoe^;Hm4 zpBzI4w-(AEv6i;hwSOfb4H5E#zoZvYFu_zfuQLWpQ{K?It$z_Rvlgat>j2j1D#-;Z z6aa&E-Vo0L0h&1?$<{VDgzsQUa=$aplCFW*k zv96*B$u{Gj3Nr~v>2*NzhO{uP1&3%I1-+Y9hfU5UbHP|3CS#qNTn30M?| zED38Eag5R0_KIHC1>`GN7Y@kJ|KH^-0?VXeHrPPneHAbFzH9hf6x zxexPQ>;xJDuK$2LNss|%Ist=HMRrs}7C?el$ zq`y)>;>UwO2fi`=>ECrA1F71-`caICvBN}$c>s)rZ1DRu5Wg>CGNFw<0964%6J{__EN_rj!e-s?;X&us;L&jfD2~VDkC* zFakJq6L*1+GO6L;r$uf{r0?)oRDC~T$w|9OasP-k`X5$6G+; zYGzhv`ybEfkul|JX7J8nC{0%X7)aX8YWPXi|Mp_n6c`Tp7n6J#*>e78f26|426RS0 zp2;ogHam7l3bk-C9-s<7haZ(H0r|fTYeC$Y6BG@^EU)xt{~zdyZGLm^0%8~Y(X$Y3 z5ONDx3RYfsj7b77EU6zobd|X`;aeg(Tp&n-rLW;HCPu)eSVQ`a67m)m*-R7_6F^?A z0T&Q3(%_gjDA2kCYG;(C2iUH1MR6xC>paWwg&P7kP-Nn;qlNzbF>n(R(e}Qo+Ir5zCSF^fLzPMJC9mA$Vn%AQ8I?@B4kK-E(He1VpSU?qD_VBn#nNrZ4)e$aR@> zhzET_QZ7kmQj{MQasL1Ji<6b>DhuG?0L#6%{lq9t`BF~h6{0_rq)gmFG z>U99h%LgogtsWU|h_pDJd-8lP-kDcBXG?2}0~>3ot3`m^Zs1}>F({8f@1y><0RG>D zHK+1M@z&!Sw{0BJXMfy@GTGo5DPbtRz@QW0}V)QHU+6P>3SFTjZ zKz;nk`e5iiPNEIhd;wNXFO=kwlQ@2f2sfK(>(E7DM#C6rRyPb6f#%BTQ+Zyt2bh z$ze^|v1T9Qw0>nZZsxaYhM>8Ceq$=F=K?YeaLSa$H^j+7IT`2mY|F$uzAli(PC}|c z9EK6w5eR)8tF#TczJ-1&ADXw(e-UeFe3t*r-=$;N1C{v!DOe)4=1zY^OG9Rvd=-5@ z=Xjyzfco_KZ2+p1AqS(HG?$Z?CkQIt3|(|BSS9MA8Iy@yKZ=P8qxgd^zZ})J9oL-C z28C)UIozNBo)Paf0(^n+&aBFd1S!GU8eKtKCAd?e_LcQ46_cAc%OIJ6L9!)oAN-5k zh0Nj9#@6!E)`6baRb)C#2F_>XcB{XQvhXL7xN`Mdx96Z#6_R2p2_GNQQ zfx4MN=AYgr*k{H;`8VVaC*%BgsNf>AR-X7Ywc`f%Kdt|Q%D4irRV8%U-*jCZ~6GYT=NV$&GfzJ z3AohUWi-B*Bb5N(R#6&@kwAU`&p)q2^tRsz>rBH@sUkBcK7A#Q2Pl=T1(TEtb z4LN$KDk(FL&Vn>U+t&4`eL@1SrTH2Xo1AdP6V18~s=o!EFTsALRb@8^#63`c7xZ8` zXtlHz9o`bW_2nda(GS}g7aq^|g~tk-@dXfVpkRrVvUjC7pl zzC7UI6kOzJLo9_9hWYIJM^um--jB8J4ONAW0`3wru>BZlFKrniO!v z63yC$7{QcZISt+*m$#-6hB9YD`18xl)oewj*(hS3=T!L4;>) zTErWIlz(B20$kLKeG9o8E<^(abTn8ZM1g%XVdH4!(pI|eec$fl`{^tBHR}lN?-mZe z!?_F>rXmL0-OYOoTWsJ|FpFIpclTYZrpBe5>7YWPAz}Q8a z#|T?18WIvxl;Az%fFppQ7|KYQ^!|faS;Pholjrx;73SF31bb8rc+ofjfyQ|qLOIU{ zk=!WhvqJ@EZRLmJs>%*!rfV-^WvU%ed}7&Dv^e%mT=g>|aCJ}88Pu`wLfl+55EK zP3=YoEtZHX*29V}Ea?4p__9)i69)4wLC&;yJ=g&*sOLr&*ED zFHgK-eO7ULqfvNCfimawsrk4tp5CCx%cBPV`n&N8C*gSWB?hN1^Cc$*c<_zl)B{2d zOm#y)3w5`51Ny)@fhrrJLC{hNhKQ0MlzE#viY zruS33{p7n$Uu40a9#m&O%RHJs!AZG*DXMs~Td`&No;*hrb;{op%x)&7hSzE98@8vz z7vWfrR6s$bG(6r#8%S)Riwrc~oac{AyxgRXMhh?fU>IG!^SQ3&ZlvWp=Er`6p!ION zT^tRqmV8HyYI*Rm342e`-Q!*FG{Rw=oym6gGk5i;Mpo~itf_W0^^r9Q>ZmlY1WMHf zXkYkJZQ=YPqrYM{Ey8jN)|XcIW`E|UwF2$uVWUywg`MZwvfnmVxpI=iLqLa56*JtvYfnIt`{xV-Mi)VdVaZ&{#UbF z;gR5oZ&d#YMZu_mdV}KZDu;E0Vq0ChO9*z_@h({dD@LFSU2%u!Cmt1+2NYe zSiR}UBupe1e+5l>54#c*i#A}|WbRRdTck(dS8tDQ?4y9Yt45k-IgM2^Q+K)1nBC7- zSVU_KESsb3dm*$N)*p99+1m?IC(;~^aydA^6Up3AK^}B$Ml*L^$WetU7B7PCFfVT+0=JLPY9F@5M)5SHa_ z6j60*^f1S>U8UP7;)NRapw~k2vigI;Vw?i6d?OnC1J(qp4ztR)P7{1Gvw5%mI~fVp z<_#GKao)|v{><;(5q`8MuyW+j#;7r0d`E4*I5NVyRa(+F4ZkYtw|;^x)6=&*lYesp zA2L}P4Pgh%ig#r5-i?vqkc&AI4@%EU#qaLZAvBAXv0yEZRL!mWS(cmcR(kL~bS*z- z%xU|ZShG-)dzHdin-4AGH<)Bt!9J^ZnO_~z=`wwdp>@q1KcLm~2|E}J8kKKZ2t&Qr z`plcS+V}Ao(>9)IT;|x~r8SF@$XD8CrYTvIn{Bud&YNhs&Yr)>$5DA9s!X?dV|MO~ z!l|52)>dbnLNj~Oj|h{Ktk*?bvU53HdG!Kcj27DU!b(nK(LV_p(`xsy?K#wz8i-ko zwmH?!QMrs-3Fz2ifjLblxqN+>`620N*>8FG_Uz2%8V^nvP6C%t=ohG*|&hk1&b-kR>xcTJv9Wp)_iPW0Dwbt<#EoZhn4TVfWXC>-Z5m`io|81L>emf{XT>roHQIkKgW9#+xyO| zq^q{6PTEy4#t6GCXr*nz1)TD$X{z6B`(@osQ{!yKevs*u82`%&btc9jIE#;?@|Fu! zqD-OSjlWlq*WzQ(Hp*Efbt~p}h5Pe|DVT=uhqi@q+}(NhA?{#fU!V%(L+&+xpfMY= zF}p7ipGjq(;NNNeTd#_`sg)I%nJFfSl}YDJpaW;{5$Owq_1bSz5rwDzg?)^wmAOuy zif7acKZ-xMbTG!8nm6xQSLWsx2XwNx76;^c6;B#TdI`Bl*}k;VwtCLWo@02eJ&MHnHa5=nrFG^BUwL zr3|}F7Hl5~5Ohp@_y4J>DBjK_Tf7WkTuclCCA~60%@^Y@56#t8cXPyoelUjG=HE>zl3Dfs!Kl#DTbK}~nBZ^B*b^V@ zMLCIW%^qn&8ER{FFXOusx?`E_$jzTdPv1*nK(A=vUKVD3qfOw*t=WkRopd5AvC#LY z9e~3ji^jc--pxUpyQ}D_GKu2UEm^~GlVbE-%m>W`mysS7n)VXU8tQhY9u=zg5=G$fVcFX6gkN0u)g5*sFE7(cZz+FoVVOI@NJ z@pIQqBSoeW*!pho{^0tNI%xrUCt5Na-E_2T2p-F_zUl-$W)#UvPp`n+RFnL~RPK(V#3pRBl z`Z$xKZ^|t(7-s&SR|mWd_C`J*s&c1$^yWR3Y84Y&emPhC8fci~WW(;r{!^@El;>s2 z%NcmOd|cy1wI!xjD#}`5DnsbGT&>8Sz}s`F!)&sA{G-t5?%35fZ~TO$_q1Uf+hyNM z1Widi-8xQsh@>Q==$>nyZeKW<5BqS@*f>qO9rejR4X-0~nIV*Z$bySZoc)69O=c+I{;vFSYY@I!_c=Y>bAAXmlw=M9S^l>NHLS1F20u_^iEbM~zs0ymN+cN6MrWLWZtUXrrdCMbbQ!NBdOw?&SQshySc%nSo zCP@=0ZHQN&>Q~E&NZpxS;`SKA;D|Whn)zI>9LOax2Op-oTbq=!&M!@ud!?N|E-odz zaX;NIRXgXSUWY5nb0NhvE66%6N_Fx1Pv4b$9@kh&XC7B>kC3=tW2Lgy`s!fYcBxHx zD>aa5Kic}$LUSx0MvvGN#e9qQ$iL_mT`a>%pJSLmOT*iq?WySd3Krr(PG>8ictb&^uU`(pc?Hr$l;h zfxIzSUe6f}*?>pH2P3M%nN@5xNdARF!X_XYQMJ#?5M#t*Ry`wy~ zp~hv!Ih~}Q>a&LwcC38;LO(%_Nl9qUQWgH75uHu8wJZ+xua0=Ehea60&+Rc-4?|KeE5OY*5pZ}!%QT9hRVrR)o8!_otHxCm^7&Sp3e6K88-av#_79X zp;mM-+s;*ic^sg@TdnlBxNA;IHlfO&;JrN!t)20E<`)TB$*>dD>~ZOP#7yU6%*0%b z=SGKOz8IPe1S_?(lNv0@%nw&NMJnaTGsViWe8x~o%Gc+T&F)~@qUs*Xmv`3=*W8`d zm}6bjRZPI!TNJCuoCSoNa1?ljMVchf{t#Ahq5X{AQS$RN;b%z$i5d52ehdk%okdg- za|6E&XQx%K_gbd*dri{Zyfh8KYd1>Sjgt@k8VD z{i9F z*szjG{=>Z76xDeRB^UOW+^ZEg5(9t6ni%pMTg`QjL{kmAHDhMQoKAnnORmMooDZ~^ zi`OK=%%=uT$Vx}JvS*^W`ox;QXwr-YF?lLHxFvl)W=}}GRASCl6~9O;LTo^-TYYkC zFj&fisXzN&mjat4o$6`l_cq@JKfs6yf1{>%axNDLjVRf-Ih$M6H7tJZZPRxArxY?q zZmiqwb5W_Wy*|omH4}C=mz!my4HasmDD073_^9jLzUh3lJv36VU~Kd(E28LBoNZ;Y zJhV-q`y$8JSk;ZeQ_H?c;k@I;x9a6}rLL_P_FoF4<(#cO_D-B8tC{1ss3&EcOfLPh zPAPc1H7m;!BSlE+%kQy%hqra;bosa5-r{(Pc%uBO@tSzw?w5-6rl9MO1_GEe?mkde z6V~p!xZ+Oat}_ z9y@=9Z}cCptd-%FI9YxyOi&9W?~ z-$!50_J2t3H56N-M{MqwufPsm_Sx|xgq1(sG>`H|z*)6vt-7rOZrb(Vjt z<<1Vq<|SXq3G#~J$l^REF9xTyf%P%AMbP8V$L=i*HHL1Py zZa>CAIOezr&Z1u&6RPbg^00~Wsw^|!Z3@z+I`EzC_QX@s*_{})i5iRfL`6eF4E5)m zKV;I0Dr*^I-SA^G1B@HG2Q4X%YZik?0vnVGWTPp*Qtmf|tSLF`94u4mX;7=-zfsFR z`QRb!)Ji&TEy#i{vZQn$pyAoo#Y~oAqLv;MST)g{d&3xo9uNEZdm~I}@?@2zY{Me^ zuA^yd@3XASXD)vi8UBzEZFEtRb}JR%Z(g0FMPzaL-hg{0uO>Hr-|mD@H@Wgh58Em6 z)?8IztWqa8_vud*4T9XmdCj{9I()eMk$Gi_2X861mTAF?lu2=rFw^E4@1b<`J+Q2Y zRm$1O>IU&udH;-@Dm%lAM ze!5AI?SyuLIWvCw^c)|mqyFh9tg$L=ak5qDcaChkH11Bn-jaIdx|q7?vK_72QfE0? z;T%DY zSG>%6wC9mQu^!Lb8Uxkj^EX(l*GI_9ohz*6M?4*52X4$Cow%6`kFEaIL>ZF~`{Gw! zGU*&4X#OtlB!TrNk}^J?KD2hYIf^tm)B-&rn4dgl9$RUL{wuF&ACgt1yJg%F$N6TJDp%Y`<2Pue zF>$*6ZC4>7PEWtHGLCekDQ1bHUsFTqJF+0!9!ZR1`-U$nNX2-V!(0Xp;6 zpzUTxPIxsBB7WWqRoi!L!Y1j`6vt3=ccJZ1mBzzITcZ@P&pefSc(H!x%$QzK&Wcy4 zOSPjRv}sZ!N30;fnf1OKCQrrBH`Iq-qZ`V3*7aRpT(9`4j?8u#W_1X&1jbrmz^4ZTJUYA9M&Z| zpB%kNukqHw# z!TGv3adAmp^wxJ@`XSuR53g?(1ZZI4mYX-a5w$e=omXRi{XAcWAoVIeBjtGs*UL*^ zD?WYt#5Nf-ZUkpwI+aLswRLx&?QL#$${U+Njea=BV?l7?-R%d1CQ82LBGup<_`r2a zdiS)AOu{#zr1Y&FzRZG>FBX=G(zL-&c}Xl4-AQ8nyW4*sJi162WTcg9+q7Yuz9(8s ziQ0yVY&UPoavQ((l>S?Dm4;Hva(l(-+o)W2Zr@+A?sHgZR@$P{BGKYyk_RNB1*wHy zZ_~jH|K_QNkbb1RiR*?Q(bw>RDJNpAKPt9q+wi-TGgxYbuL_#ti@eq>yE1Kf5iX8L zNMYFHX=vlU(hD@o26=WgX+i8l@x!h7yqB@W>h_g{9x5wn@7|(l4<_Sw3k`ArYt_xN z<9l@4-Dnd=Pr+?C^^`fFMOm=#cb`}3t!W_0FMk%KlUy=zsK-Su!hr5|jWWqED+8C}*&X!z9y-q>3z zEjBHf4cajWJxS~HT;j+pu)*oLRO~5wPnG^1%vkPD(F$#5?mlCod%y4bpNn&QE{>ml zv-g(8eAY9^m}8Fk{>G${uGJpC-reXnr>WP5CMG1x=AGa%D{f2|wfF;+Bj5Fy^=70L zBV;7v$FlCbm-VJ4TI{Uw4JeYpZromfnZJ?d+H?0j=j}(T;HFA?q?*zKiTJ)jax(J! zS8#6C*1{YWD&k8Hl^K%4K66F(N@AbeB@z&w87=?9UR5D}nE}b|a`^GJ{q>h}=Rv#2 zrG@#IyJ2fTe$h10$$m*&5V2nA@Z#fkwyO*zg~Wt(eRsb_&sAWS5h5XRzBeNF z>ddoi>QuXTPdfn743rS<8mjv}*L+6m`_sXzNWaw^it-`&+EJ-`?27z+BdFI&pXL+I znhs*E$Q=3}m_N3;=#TLqo;5ubQMl5U56|{;>|W_hL33;}e`UmXiZntuSec@C_Brobt7MVaP7{$tSyM%P}_duWYSC_Cw z&e3*JL{o5A6Hd={$|k{0N$kB#NSqW@ZdFU$$FdcEXQ&HKEH3`d}2-GPK{+_k8o=7H{sqSdlbVTB=x_UI8!G zPktn%`R<$mb+k)7vh*pilIICHW^FI&eux-Zb;vDrlEROB8Jlat%+WGiFT^4`80ETlND;e#z&l^U?EUyZwd z*Gio)-V|{&%k7!S2P>D6ENJVe(lr-!8n8%_#pf#c9MP=s!K5(Ba2Sd)JaSYS()y5) zs4TP~Rc<2mEAbX$0Z5vv)ImflNNzgmKknSH@Vr94Q?dJep$^>5y{BokQYx77Z22`U zoe29QeDR6g1{tyI+^|uMP?K)ZBw!+5L0I}KJx$=_I(ZEF(MEXDLRZXMU)s5JA%(PJ zA-S=3-W$UD^X8a#UfjBaaS4f-Q7i0eAkDjLHHPqeFfHwy{n8R={l1`JAXy--O%cCC zyd1c$&@&PM z9X;>!lCoVabfdehSMJ&|61))aeG8f^D?+*9@UxFS`Y7o!9?9!Y3Tri%0M-%6A*1{zN0K3Ez!JjW1z>pZMH0 zc$=@ktX#V=O#7~v*N}c&z@{yq{D@cuC$FAJZy+9}yrUaT13;tuf<#g;>Q+nIWt< z|MRH6*2OkPI5@$AzCX_GlD{X(U!&>6ZN{N}br*J4 zy3mJ;EdW8BEgkj7Te%UmgsyX1D#1 z&2PvlpyGn1g#VQ1tNApaef5VrY(vrb*QI)oZT_zQ-SJzIaE9g!Z}vOcon=uD-m)^S z<-Lm^5JZ8G7eZ4=ra@20Q4B(SjaNeAuf@1sI0+_GQ7rfGw_wM-=0P9y)efJULG0jb zqv2#rX}Tcx8T}5m>F@rqN^b+wc`bN3yVtYKXzB~BIJoMd_c-yD}C}1u?^*@Rm})7HU4_c-&NyS z`rcN5mlH2p)(dYrRGj$Qg;_s;a`C(hhRyHOGW!r;Bk>bG>ZeqHe3t}~oDdn}ykQ(} zN48BQNa1uq>|jI~z)g$rLk3@;VBbY>1q=keGod7I( zw4UpaIgol8e{Tp z*jX7nwVz?pGyaH0E0j!eA^r8AVXA0QWHAO5k@|L@M>W&D44{wIX} zf7qRao&WpCp5?BC$zX@pHW3X%nV2qz}u z2L#E+;2QEb;CxdUiHI91(lCS<{@S9Upx2-Ko$!cCjTufY&V_Rj`rUvbD?(`vM>@tM z(Z4}Q#p{PxkSsVMco?(zi8v{VWAiAMUYAnnUb+m6F6aEmX z#qRHmlLN;q!NU5}>&(9QsyC1poG0ofc3yM7zjuTeAub1) zu;`PEMWZS4UiCs13J;$I3^?`kRIn+^6AYh;U;)wbQ>7i z&`QqmQmLJsrVj3X9;_BlBEdH37Jlj=o8y%>q39hwz|B$pMsh`kt_bd)n~ib>g&}_U zp14A@+zBp@mS*^}IYxtf+^0$Q)mjAo+k=m=%x+;aE*NkuEjxK;h zXW)>c_6D2pGoF#@D}RD>?kDt7QxRsC5hZ)q+x0*CSB!V9Q6Bw?5rnB(xtp}wQ#@om z{8ByK?;2Lm_)5q1o{@~x^fO{AEP2x1r8m)>?iXk+4HSNL>Yrd}(3KPvb8|GFB*Ezo zmewa)3>+#rN^|c2aqD02!_0FYj1&i7Mw&DVY=f`>*L^gATH*Jv!*&H#?y+1xe%2m8 zqw_uUuC2j4TKCHM?$P#MGc=`9tNXcM|1O)Km9?kPwNbuq4_ABhN>@?pf)#$QHj=PE z*vN$}wp&;ROPXl!P@(F5SFJA`DJI>j{gGCbQhqCV6TD1{Z43u<$t3vOjd=31t*$b< zNyF1=da<_!T&T}@UKl^a_{vF>;}?2qaJgdlUN|}ur9Qyk5Cc#fleIKxNM>;2QD?!1 zC3%BJ%%#PpCh5`@O=px;0Eiwc%-g@=S;+~cB4F}8Io7{{}Fc4 zMe4@hwidxp`j#xnQx_a2q_29-J45@&vG$lh%IMF#4IVq#^)K!$HrBnrMSl9F3EQI0 zX>;-3<^X;C9NrHxQu!~g$>jRaaliiRcrx|a?FL-B+-(eys9k_h?gAtpkOa)PS(FpM z>?ZwhXdx7VEYd!}fP*e@ZP7QvP`lY%HHptdpc=bc3WM#YlWy_B5m)x*mJM3vI%TpR zR1Za3K`ib|A1on-X8*@6B>Z}ROK54*shW;Mq}4@@Xpv&aD}Up%Y_UR`j`xCMTaW4x zUaC~Jmo*dKyshV`pe?t81Q`Rj^8^lCl$AcxleD$X63?rbisA`UO8imWrT`{U?F@o) zuo;=4ZsBUNcbq`W1Zp%lxqc<3*MjmOnn{=SdfE_ zI^{{u)5DuDiPAM^B%2e-St7OU$U-$T|LwEwYt~uhvrs3!u5Y@BM#DdGjg5z*N5VY$ zmRr$RH0g@Y$Rcf~9^z%+!~d;KhCMBvP7#njY8ohaH~2_;yt}v*KlM zO2j1JinrK38a~J@*&&rJ5*NK25JfTP(;rCht#x!go2iv3HpLI=``3SNiq7Ceg&VNH zrZRJquA_XbscGSTaB7@8BeAW$>`Jb2`*FbJ&2}tpYVh<(9DnXUanzil8Q~nNy0Nss z9Oc=)6U*CJdB$hjLV|C%cuQP8aDJULxM7_Zx7DZ{ke7RaCgh0~vh1K`c9!jy{rQp* zU&!l=GwH+UFlkE|O`{O;(={-VhdYrFy%i;vJ2?6PYOXKt9?|B?x?O}bxciRQl*y`6 z!Xw75EyP0%az)_=W~a3kMF;mS#~zyJB#j6ctNC1s$@8SR{`FTH;(YicD$k_Qf<5_Q z@GQ{4D<%`|V7yvMxz%K-jdwm8z2M0+NkJ=fEk?!?wsn8b?+Wy%WhE_1^O)Hpl6=U8 z8-lXmvPCmQ^)9`9I(-QaL~okGAwVJ(gE}D>77-DT(}Bf)D9NS$m5@-_eIhhSnjXdqh=> z>$9p4l4XaP83b5Z+j!H4txh(sJ1t<3y5ziTW!u|1n;Ok>A8N`-7lAntkCL%S8+|TOS70y_ z+cPcbWOSbqhkJmk^or6r zCZ<-k2u1=R9DvyX^5KB5;{XyjFcS{PL`(TVp&d9_-_>QbwG&2TVImR64*A z<;;F6uOMQ?GUG)$a##n@M?uKpo(!5pRf|HCAU2Wl>0>Du!inJ zH4AZ+6V!CoyaBU&jrH}V#!mrEH?ua9$zS_1b;W}nt&~DG{$arO3cWW!iLshSN+x?J z`O;#elm42ffo7J3*6Kt$#jqmDc(S`f$MuI*MUgtO*m1i4$V^@yn^jU%HFyCbG_-xU zcZWX~WF$J)y)#vnZLIUk3lT1ShI0MdJk1K$bgPXi^>-b|x`-a~_zG$*sa|7BZS?)x zna-QpRmpLfDyfy9YX!tOsz*xA6GeFv`0xVQ zpZBqomZa%AdmC_~;lcKpc+@Obg`vjUZ^^fHF>tHLf8{n?`}IAnYNwpjpBzi}`O5r- zoM@@rF{|kprX9BsK2G(I|a>>I}Cq%*{ zq{9HzJlva=uN!t(_303;Dwe%!DdsAhOgbUB_fMYT$MYv$_t@Cp0Ks)$v$S8#}7;b1TguMG9%>WG}q0=tsl`fjbJ#D@i-Belm2o7aG&fO*0uPaqH@WQjoyM#)+2*L_OL zChf4RWzT%?#Am4}B8K0a-!xOaE_LJegE_iV818z%<3@Mu6v*gfJ0^ z{rCX(Ju{=*^Anf$Maf9Ly_GXy2)F723Wp26pGeySkQrR!og}1LMi>aShGEaQD6D~v znLzv8GTs1g5rgg;r?^-Dt-I5f6wPocv=fV>)15ilxM_OhLEjx!CiTjI!O18_hu2Yf zj{DV>G-|@f17DqMIuxwy$8XFDg0@7g+^i%P78k^|NQUk1*$p=*n2Hc;bdviX*}iPoq8%y zyfE(^JI@2BB3dz?9QPg$rhcnu3^zsOyCxs3b_sqNF;_XbyR$FJv3TF?D2&}wHw@2e zqDaz_MO)P%TYoBn2l&tLztadOJCa=eo82dAP9ip0*%wpAewK*tI6pmLzx2xcK)5uc zA6>0opo~hnY{sv;PAlJeuGg4>dsJC+F)%l|@N0vTj8V4gn9GT1uX!d)5}NtGDzjZd zzv-)csWM({0v>M!yl!$BWBG>5k)!GAdBq7}XX;;7f85p=S<~$5Dv3963!UIGy-~T6 z_t3ck7KRm1kqrIGIwutq6}4Z%Q0S6|6;jjyjjjaOXg_%P_`Cy_kXUG}WSpq)wTFoPw3q@$?V51SW|2XZ#`%I|-wNo+3zWR;N3DA;xFo5h=Wc%)tc z?X}1t?Dj*J5Z*34(>nY@$^(O@>4h9Fjxn2{EUtHD`j0@At=|KSLXy=Ep3|t0R;O$R zh(ZY76O43T)r#U(Ns){oU)~Fn;U5Cyep3=U zI%F*x%!_7;7osjka-3!(KwN>t*s5Am)Yol*Ic|S=-8N8;RJT{hpV^7^YkQQ=~|nb zzyg#I*bsTVNcDKv^I+hhEl*Te>-n3N0cr$+(K;&)yng+93YOKZ2!bU0uA3V)dG-Je zctmwb`QSlA-N7iWfq?v~*q_s0YQa)~r z-!;IKZMV5MgBBFnDoETO$tK})1cU59m9d}slbQ}G%mDIVJzXxDoVFqG_MU2_7L4|O z!Byx8$pX|Ma9JSeGm+G7{q>6gLRetaedvt);$7AK_MZON<{b9RS@79kZkH?QIew?puk6%t(Md~D@tFw z6JTMV%(pZKc9-Vh&x%nd-isKq|;u=rc|8C3fy(#{aWn^d@WK5M;w z0>Hdd4f29$Z$|Bt?bJDSvEpYWS&h!I=FK55)G5M`HKY7iu_jI=h{nomeiAV&TGvQh&H9_OLBr?q2iBj8 zR9n==5^s1HaAO?DLk;9YT-*)nP9`g@hS}%5)3*!{v5z7f3nsebB?QcvS*v_@eHP*N+xy;JiS<$)Z$B4PYiaB_%SZhZ?TOS_GIJRx0-AxE zkYAQ0!__X%6?-}1u1!VL`+jI_g{RGu14lL|#-W3SODk$Dbt}bnrW8V}`t`*zTn2SJ zO1z2hg42^o!j4vjAbAk2b6n8QUwmiE(#lS;4QqblWo~Tca$%y$LXBiWsW?$}`CA=^ z!7vAL6D_h(m(2Qu8I~xQS@foUM9HQ0I+23UV&Kn^(`}fzcLjjoyYoPB^)5ioLEMZW z1l*5?p?*HN*#w`BB*`U<_d!thMGZiqhsf3YAR!yhH*$=bD;dE8T-SBLrobVCBP=E+ zrtJWg~1iFUrUkWo-SXUcd zfV+@)RB8Z$ob$}DfFqWa*5Qr*?vp^2UBKFwrNZZu571YujW(rh2?Y`DfdYcQu5JlF z0pHsK^|=IZ#x1Q5ILu9n9m{}y3>qkEz_r^A=($D09UL7^-{Aq~Oek{*e`QSL8*+e_ z-4W`GbUEQzV{m+Y&PN5Kfj}K9pEuCg2PsAGBWF{7p}U>-dkEEyv(qy`Z!0nh9wsA15)n9>4z-YF2ugiNUHC}k*S_(R zZ)vDgt_tJsFnUraKF>6zrw`aJI1y@}-Xi4UXcooo(ZWp^sT0fGX*Rl1$cRKC-zDsG z%M4#+&)z>qJ&HFa)z7H0pf9A~e8{#aTXc+l>Zh7;WzjHEetunSpX$`gTE4&~mYzDF zfjT}N;ip4R>*j+L4K1l&y8?&33FvP<=fb?u*b2INET22x-fS!$j-1tBKVV(QWjy=F z{yT&*w}O4awx>P8N@G<|x+s*m)a)JJeY-f4MXI`;bB}V7`K}vA&3L({rNvK+s#JNL z^k}_&f`$WBxkQK`KC)5a>yUr&9s8;2zbzbSSv|?28mEuOd1)K#?YuK~w~GTYGS8Ig zd&q^|zIH6WSayekLloX|tD)07Jbr4IWbJx3!TKMi{_?N$pbN>Fq zNV&W(My{8*ub1dI>_;^H!K$oDc(|HP;PoqteWZmUm7I+p&VVm3Bu8ijn2$fQcR`(F z^^z?2_%W4(`b7e~w*NhiuiRO4ou@ZF^`RDxTrnT;+$--i$x` zablM)iZmtug_V$QX^V0$%Y(zIL@y^vO;Qq}5S5uKF*h@ll$6w)iQoPDEu=b*&W_h5 zjARhhS)h6?Fo8K81G|&(DoKt)W;oj?rnL2 zr?0Q+x)o3@_yPBnm*!4~zY467W5A`IDscj>RVSg3#BOvG{+$T>ir%GhkS#$VwE?1H zx3;shwbjnEZnHkFu}&hNa}IY@cE6l6FiuS%7Bx@|g5m~T|JK3JH~`IQr=T7pa0GQF z)XgvxKtadH>*Ga?fC3IFPrv2Mz=4pb1bEmoXh(oQ7&|72rnl93ss?P%St4J;V!h_z z($QHE$aPuHE*?D&1RF+Qg@>khlIpakM8q!;iI*Se^Fs0qszx*8xU$TjB=qnnmri8j z2=Va;0LVX;o{Vy@nsVkmFBG9k+HhGTN1aRMIbhaYK&rxzbhltLs0H*k+6G55Ep}Hp z&Bu99^+0y%(@heiqhJt++g<3Ih6fDA1?U>Tbw_J^J3@;OD01&j0N*{l@fGg8q2=@~ zPfDIX0x#Ou+}s^@xYfc0%9+ctia4`SuX?12y5IVV@gnTL1^&^x1D^00)N{b0-CpP! z<6-ok1sqh!I-3g#V5A+ke7EcukGH1%hrh*wM?xs+u^HKmm;@8K!hIMaHM?a|J`ZQn z6Eh1qTXyuidwQVxH@!MIGbA@hC8;MXABWZrrB!4vbhWLUDg(7w(M|o4Z2!quH~Sm zm_=!JT-?z)h?`+7gRQDbmV&Wwi;9IPKpj3>Z+UB4zboU(^67zVvbOM8=y0{-SRv_E z7LATi-7>Gcwss`4M)yd@;ApQ&+>?h-EInbB%VQS<|r)DwOzG8a+@IVxP_{2gkx@c zqCEtUj_ZxkiJmA^+JNfl$u~FC^bz${>#QC>uaNrK$j+=xJh4Y};&;wEK1m0vQ~b?1@zTX9(St zlg-bD5l}8f9N|YTpvIvO+_BIYnr2fXE~_Mdf*nBq;L|IAJ>P}P9kXBQ38X(Fw#p_RBA8J#?ow&sGhnd?P<}D^=4E9JV#i6JceeejeybdhtyOW?N;{X=6lUuE4h(Yl1aYr}0BXejloae~KBSota$rw3&1q0Xu z`Gf^Fg#HEuI}aIjB=bXCAdX3V$1j>Q561o|b~rwXe;`eE8c1F?^WtSn-2jP}V5)qf z^%67~8pMgxSgt8m`vX)x+Oj=G%Hh@{n&ndXq6RXRnCz&&mNkdaRYT&t0pe*$x`C`< zgFSMNN`6C04OrmrIP|>M4ZZFys9*iyL6!VT;#q&yQ8~z^#-b>(Ic$l zir+zWi`LHya4J7J(yhk6>A!^{S#~%lz7$MgIfNwJ_T}!O9m|BEZ6dAuCh^|}vp-cD zvu?kr{8Mo%uUNstiR8oN^Lre$xG(uapTrSYv!!K(AN$!68x?1g-WCfH&+BAd$*#X< zv$cPoQF^G^6w#wyIH|Gv*6Y(eidvP;`;s}!^_Euo;paHE1y+6r_QsQ52RlymFLgV! z`$DFo(JPtGqvP4`FtTq6l@z#sM;TUM-QG&limX>%mv`;@8WZ}8a3deba<}%7sPSrm z$eX+3NJa6=l0Ra7C@jNh6^u51SCsFIO71MS)w4J-c0(rrj$SQ$*-nr$o_^c`*$h`HbOi32W1vSuTu!bVA&jkSDi!%?u|GTN zOzti(2Opm^NZcQtfEuZqpRoyVFeGPOcf!)sAqgqX#`qmPI|+~N0@JJ_3ZZ=^97%u@ zN7FP5dLY%!vzn<{S>}58-2*Tmkeh$!2#G?7r|BLZb|DaCU#mY=5=e*-8XNxjad7Cy-*)+T*lv=n>90%_AoNWeb;DdMH=eGqe}!;;rqq24{RiK8W%3v>uZIgI zTq6ty;sIICW?K?9kNV49j|BaN4WvbxW3Uu5l>NJvLC8?YY<9Aizv*hj3mu)th)@)J zgnl+$yg>v=AQm|G_hN2PuppWm|1^gkUpJWHZPeDU>ZY{L6FmAleVjf2O^uqrLga)! zSD7L+o^Hv*vNU7rBx);{FT}{3(GErJclRaLxSK~m+SYrZuI8iHWqMM7y!CT@7-{s~ zuePeGDqeQ;#<+3WE7{*oFZ^!FF%ebbxS#VTxBpW&OsUHTSiaD&fm0{#oC6zQj$-5U!}@FKJs&DRIBVEOefcq--IE_ zxqb%AHwsIKFXk{NddFE)>&*nssZHO`Y+BA{cs1a2?~PD%zYcrKt%|xLR2crAkFbaG zTgj9cB){ek@#H%kAkN6GH(QD#!N%4Z3Wy4z_j=4FX0|44IW}Bu?g}WixzZa5NGE@# zc0F2UDhCJOtn3nG*oN{PY+m+2R1ayCH$a|+s~8B;eI8{E3JUV|d=9&(%{nuZ!`w{r zbNAKlH^;O1>(dbK5G{?Zqui!mmMFHEeCm7z{;!pFKv5P)hdjn`8!ZbYj8Z0JeSd2D zP*ScG7QAExaZkQ^HcXX>-9@Ok5q!RbpQAekzuy0@z!~`4o81fv?SnifP|1jGxvFIV z8`%Yt4{!qnLM=kxr*I{N{TC{v3?Cf)guQnw(A}i9!p4;iMI|J6pb5-@@Lc!AYyxuo z8$K{>RbdTxFG%!+POv_Cc3VVuiiRh_Hv!T4ZXz)06Fslm>LZJ+5dM7NH`DX7Bn#ib zf*qpGzK7e=!tWFO2sqXVvM9t{SHHFC9F_=mZCS0iIH4@nk}{9yH}KpHxlJ)V!`%9w zo!&9xYo)Bo9{U#78&!`b->va<#c@Ro?E#|zlAZBFl>uHWzf86rX#)e{*M3aMQ*Zz2 zdo4w+o@O6ZRP5+!z-BfYl`UA6ttnI~I%vIt*?2wq$?9ax6vu?$<7P!HrJFt;37M)| zHtf7+t=tTARZ-Q%=`op3{fgXC=idXIS(aSi^i!H zCsWJ+IPMO9qLyUD-c~+LMG%N2>712fvX#DcV|f15^Bt=0X9ntjyW$IrdwX9@ixzT> z6Lc@wH%PbO2&Y3Wc4mFCIb__j?GBvW^U5Q+xw-gS#97&0TCS(bGImQi-Oi#Az3(Qa zt*oqoRL+vCxQq;k-{458^*DzkLOB3(XmE?JMjUo`xdu2*)(|{e2u`1~w+_nAf-Z&c zqF#d)`gm=E8aS@^HX}5~P$qHQQZs8HZUfii9(Wp>3V8&SL*qg3+@z1ip?Jz07y`wh zcSB%p;H#G7+VLyW0=Raw5n@>x8O+H%931`_*Hv@`51*z%Eru86?ar@bC09ko(9MPU znVBnERS?iWIWuY%k&%?dh_yGO7wqu^9k|YLW-jeI4=4gNDSxjCR`8_$`fu}eQPe|` z_Ut>jGfY;b!yb?3HR+G47)Z~=F(R_04)%F0UYCb&$#HIXY!NZ~(Rg}TuHqezq(3Jw zxN)P_;O_V?7UR9pR+AJV1Bn-y3c4XJE3&QLHApK zYv!T6HcDI=SCYiA_n*!oX7M|SCeMo|c_OY@ay;iHR;u{ulB0n4-@b1=iIe;EAZkcO zdym@scS_^SxZZ-mzD@nyH|hIf=WA@*v-FnZyYW@0Y5UiW$GIF3z7MC%^Rnvtr}~uj zsKdb*%a!BvJ-4}c3j27KOtj2oZG^Mc`zpei`_+2veg}+=FK+cc&8Y0VbA2%EKYh!4 zp@`bWZ81qnNbBfOuMg+xdGl*jyEv=uFqS%(?{jHG72~Oc#Fw0d?(S~ewbAtIQ4r1n z%^g7%139@sewKAa=z=@}y5yTwub`BPUKG{vE+0zXxKrh-#b((u26}ps!T%`O^@~JTQUlsIAKFw z-LKj*ec#mbuaLpv+1Z_+nfqoYBwH&$e(Wfkl5vXx#B?e;lOa)TX=#bf zo|^GU?@4c;5sS!5vM$BEk!Ha5z4pyL97ZEHTn=6amzaB@QkyDszio3(@)oQN?3 zOk894oxPs%#^eO`!sh}7CVg&nx$YRXsC3L^loUtn_HUWj-Z;7RJa9@xO7*i(4We}~ zc#pY!i#%kB)IZ7|^Cb~XXdEjOvHI1G0q7YMThB+#oGgX341$*xxM?%aubN@8r262UAKSBtdiX)d-w^Fp88Z1ea;Z_1AnUn?ssNX%72)f(};$I3Y< zDfJ*~9~v4GenEJWoSNEV-VWM8tB?zfYk|uJdJl3DbbF9765hS56@Ix3&PjOb;d%Oy zdmJcp0`);C4j?{ixNsScG0orRWWk(&d)W-Bgl}^ddoiQl;rx}i+=y&P-nnaLnzm5O zTn-Ew9D7YEqfaLv@ap-(6Fl39Um0 z!flLLZA=Uq+F9yKHmg)F{3E@bJo2s1BBRVdwK0uc8<51EeqBQD2_&>7vTQ9Gu=FI~ zxniutVrIGaMso3K<*85nS))5lRdSD0b)uF}LTB?0DwE)cDH3-+^WG$fW}5X&j5~Iv zvokX*P;B`!VzOfV&}MOQynG=k>B}0~2YSWtrq}XrPtVmiHZCWU&4)3EJlr9smoE#i zx;?EZEM4kOslj4D`LXzK1Y1{E_i^x2wq>xX&bm*7?;%3ltTp^qb2&qI^UDHg0|KZj zB8@vqVps`X0|_NiDq`J|aD-lmhMSyk2nh+jHJC2~gjHvaP%+kMPTr?L}=V$x%Q``$Kz4LQa zCT}oc*{Xb6I{QvH$?GS2RiNCAiZBOc2Wt#55W`0H4f^COI@l^MQcC$99@(xRk8Gy{ z=O-2-z7q>R@yGwjqP4EeOw}^gc-|foZx+iOi#xS}jnY5)%v5x(a+!~5wl0pfz_M&x z@#|gR6m3r$z2Zov&ba0V5+=R!%J$Sj&VUfC*<*t2|4Po~UL@x@mYD>JZ8*8OxER_T zMF8&__Drj(1ZD9T107xF#|i>el;WCPGNC^a%)Tv>wmlQ)w=xT{$3NN-I?GTK{&nk&gk~`i-UQ<(*)DN>OQo1e zUxG$d(l2BjJQ&Lz?YAu$*M9#q?AS*Vqjde4Q~7WSk5vX`;UPs|0`@i8^pw**RZlEF zRBxtF_Mb`4O%q;^$}Zcplzhyani=|m){*r2$TH=n%HowM+^}5qZr0R7b016{g@(D( zT=$XXm6fRxEghaQO#i${x;z#X6LHErS1x+pCzE|Csi=sqeu2D$A@w?>Is*8|Ahq84 znU+zd;cQhp1}**kw)}+GGf2BXtcvD!u!8U!J>Q|h?>Z|hYkqz{dZ-B%hva%SYuy-5 zPMykhOI@AN`BQXf_Xd;Ud*v#SN`b~UVSUr<=FE7KlR+fV)Pnv@agNoXy{^7~wlpa> zP0BgAnJE*{=Doog)OI2+C{5=?pbFV3yq>ZN$$hkSO(&4%0ev9W_5g#|aBj~Gq&Qx_ z0|M@;(j z=jlje&!uzSJ0(svjt&BgNKVUi|Cv6_cHC@L_=x;@Ch?CyW}d$>w= z0E1nHoGJ83ZT5)7h7B1Mkd+=+#41@5PTi!s<$k1+LfN8Nq(;fSQW!}mO@cL>@oA@_ zSCDM=4YiK))$6G4F_!Dnq&F8C7OAdN4&L#-ic}5*#VV5)xAQc6SM4_cu^DYltsHQ1KzV@Y(9! z=M=e{(u##u^{vyF$mgj})<$Xj_7*E1@<VU z%Uku5s-KD+V;9OfmFxSvK~vPFf@6OX?d+t{qZ+m5zU5Dpv*Jhz$Gpjs;0tdbnM zuPE6u&7g4SZR)=H&D{@s=DX63!Fgt3#7!Cf14q;JGk!`Lv&S5@GV9Mj9g6a)`y7wd z@Wj}@I1WqwFmgzq%l4lUgq4PHh?Ue!pO3Q`v=djNSF-3ek2-C)*$xdsccw^O|Mr6q zBL#-?Uj-C0UNnXCzBrJzBVspsO^h|jDf;#v1PY*IwGKkZkmw7CR=X0%IpglS<9uyM zypg$-vB5)fum&_A?AcT8CZS08^C8f?HZdGC9;)|X2brHLl@ zB*1?PjlqOZQ~ev{7-GWxqkn!E@$scA;O)mFx@+&QNBjER=9t~$h&--j{O_2dX3hp* z@sD=J>TCyT>7v1^QC`;5B;ki?lZWi%mcm$kSB+m`jjd~WPCs$9NFQkCakf{2`CO@@ zleL(fE}`H&wa@#Tdd@#N)XuLhYLpLnVbq4Z6-FMP6uvNAw~77mE3GuX!RKd!A}f|L z!FThKElgWmHm&=%XSBcn8H~!&NKQ$)W4)D^pTF%S@$6XxxWA<83J^+e4rMS7J6#>j zP2{hHJOxxy<_<&Q7(+Q+KAd+n|A|oReqJ;QeORDA?gV`ujZhr{?+r=qCD%YoL&>h= zY5xlIJ-C1tfH9$<%|OW3k5}>p-(WR!1;It1X*Z%4)22Yml&&wQ zF_2akHB$#q>wDb^g#2`(L9a}bOpr8z!VOxFV(~a@ZJ?=7LkIY<)&Bh>U zL+W%0&p^z#_`Cc< zuMkt9p9kCsWQ#)_=Bj-0(ye#`g>xqSBR|a_R?y3jC!E*6LC?B6-qeP*jHlZAt%n87 zpPIbEy@2NC^pQz`NS2_b6UHeSUCP@Y;}739w_UM zn$TYq^yCBbuB!K-eZZ=VQ<~AL+c)CyMiJss#ytXZHec>=e2?5(na&21`uKd391~6Y zvhkSx1=^+whg1owNFDF%pH4pY)~ddKKt}UB<4hVaRR(XOy`jOg0pFvo+CeiXnqgRd z)|xT=*U?MDs*f6Jb$_PW(H7g;L!zTiPHtF%-p9_)&hOJ?*i+K$EZI-p(GaiRw4fSX ze5Pt)2LI0$NYkD6%FCdrxIiTEgGU}N7n!lE#SoSv1SCKU2EFPAD7LWgEkJXV)}8a= zWC?t}&xYX9q1Q-s<6Q=bAEwF_8}&6;T7a9G5rW=y$1^2(?GOWBoydR-4q@>U1j+1Y zh0rzd)^7zwfPmv~1I$zXAVz2ag@8Q{0F5~rmp!Y9RrLqpVgq3nSF1Il!H#c5+s@V3q37RDWLhI!!A(K24eReKRlAFrKQiDbY>d>-IAmG2|_YM|Z3% zkw!NiWaQhmo!w7R>%4m7YSG)P>o;vUi|98c?~bQaenMrsVYo{iM}=?aKj&TdJGIEiF)+(iC(|JEJ%<>J$B^SUj=Ilblq%p2|br)$MQ9Jbg5huS(izA@cWQ0ju#j(2$N?d>kReM%p`eTTo;z*`Nf z=29{Yc?IxqGW>@^t_}!6Gvof&k{Z+EF~yAF`4mK94O|&|UJ(R5>GG9!B1dTp@LA>H zWPQpBEBssG56IFqDT}9E>PK|0t-RcVQgZMJ-fL4R^s(*<7^TClzd;63;s0QOkPw>~ zES^C0{45pbQh%%@NG^L*`2oXh@H^SBFS9Vjz!q!#B%^>o+rSp@4Ff|sgZ39P z2>fukP!Ni|5A{h8aR+LcU#fna6H#j@${< zjq|>~r;m<|G?H8jnYbMA9sL^C-|2cxsd8nX#u#4tlg(_r1Kb>p3Kertoa*CDeT_oV zJh3QJyh~{lRGxPmyn+lyM5B4X)(0^p2H@}cW&OMko9T<~2@N|vn$y!v?Q!J}*&wLZ zDk{xcyVl-e_M=JW3-8R1rr1L@V+jjla3Kh5oMWq&Yyrs#`-yD}sxQ+t+Udo8U())O zU(8pvH2rS?k;ryC)z;CS%!A*gs}te;Q^lTmweM{fv9m5E`>OLP*M(hwGwE0CQIhYU zr5oYI@zg}?RprcLkan}gROik0=$jngc?zxG^^^xVI+lLiBxOm>3EA;;7Ejv@>Dcea5n}3d!Au1WAVp0Ny(oK>n!5U^^S;AzK9|$M1~hG4_T5B?i$Q8Aj(@e%+7Vjd zrCNHkRJK8(zEca-#KrK+XNPADntTUXXJ&}tULSwH3yG!vo|YF1&Ilo0CQXylSU6u> z+6K$|9G4N|(-6f+;03AW6t4x{Jq2MMm6XvY=U~@n>!cN^72864h-)dd|Edfd8XAV8 zGr`;gINN@$2M-?HBzXAM-biB5dlTBVSgH^qfs1yaJ$%ig7kG0^x0t$veele_z0`M_c@%(d%z0=#qY$QnVlngy-&YE8VY{e z_oK#RkAERQD>jy%s*eUG``)?|_cY@2-u)`vC8aH{@=?$|(^2%iXs0{!Ze8O!&iekq znX^;1@_u4H%NsT5lX|8&iHO|o1$=NvvQ?*Mb-hd1J*scKaync*lN`)OYslazQ^$azagh){4}6n$bKP=25lzlpWrT?IuW<-SMc zrzbr{3_Z3R9fad49YYbSa|^*?_0h7bSHvgENk0h7QF>Rh_up0Vnc)9c=rC5PNECHE z$Zv|Y=AcveQH1v}F=QEM|4eiD3rDHheGOE~K_S^y5*l2fl?ECMq1pUP%gKKAc_sA2`0|n1F7-C` zIz(xJlHfD5(%3^P^ht;SU7@oH#&nk2rvk03AS8soglPy0Zs@r~49c#52I)x%{nnk1 zSBqhKBy~TW+Q0>Rlbw%tx<3C1frdoX^B)UIz3!*G$zS z69?#6T4K`6E?F%a(XHpS-}ve%EiT>+offpk&78;L(=%Xdt39)4T)v zjUcOl=-vcj={u}tu`WkYRieX}F}?1{%x>5%6qoR+F%j1iEBsNS5f;oceH!zXZA>Pq1S??0mjMu47xm zdjt;aH*`e5Z1oJDt+riNRe3dowR2vA2uvOs_5KR~QVE%zibvAi_QNfVQtla|D7>@k>+Di;V@Y zq0LJ80|F$T?%3lVmSi1DlXsR4hv`(iXWp5{Qm;Wb!}PZ)Z!+ylvg?JGB9>>qD2HF5 zx;=ecxFdc%7KcT~^PDd;d%N@Iq}dY1e3k|^zw6G5$A&}p_pw6N;*_#P$3l{G!wS)% zDd##01ICE^4>0f=F(QJq%eJcu9KB^OWb;j~{!qtYfFjc=`%_ zF0cqWnmT$#9{I`A+&W~iLWt-)1&&m?2i+RJH~;2dN$DZSYTSt!oDzAg74dg9vaRde zm^=nKmvQ?|tk`GBg!Ie$PkOVrW3V1wd1hj0Ic=?Kwh&*R4_CTj4&oAXVPPSgs$sfG1nht}cJ)G$?D-Tz|jy#u-YyZ`aaN+I5f zBpHcpLMbFvLdqW52^kq>Zz2scGm^dc-n*17BYVrqN-Z*MXE_2Fn;; z3ptI^ZZTfD^8Jeo{SaVMP@rFHCG~3ve>GuDk;xZ**ik=QH7b091?*$Cew6 zZJ=z%)~yI_vM_M42PyAhp=qRj^CL1|85kXzpEo)h8W~T4Sr(nIy)fowDK5fDH}^!DiVAl&5DX$ z%goMN>TdIPiGlM{ce1s9oD%4@gH!FIlfc;M=(x8|(U+m$@O~MZCHvR$hqK2w!iN<< z6re0yZ&?`oUKVxz-dk?=4Kj5~E}HgsarOe4o;{x+QtMTrBns*5prQ#JKY7l3_zY#| z#xPTRAJ8eB>kl$ySo}(z=d40# zqes;qJvNbE!4q9GJjTcN278YMkV)uo_ex-Bh}ILrCtTl3XbDKcMU-RTh!Y@F-e4+qQ~lo_3qRk#1KhE2z7&dEUgO(68>!jqy=4PH3 z{P0SKi2Clpmsb})uzEqC=TwCKB4@mBN{Zd;xVYQ}mB)`CLpc(5nv#r+Oy3<$<_pLv zf+E|quN=2p0_x=}9CrM!if+z!Hkv`d`noN&_HBHxwS=ao1UkWD1*m6s!@LztyL_W2 zGYbI^oIxAttX3J+KKj?BqlP$8%B-+jVPLT|Ngu5C{3}P{0u(h8)Wnsy#uJI){mu4E z2^-IBI4+x(Zv@?~v8I8nGr%*%qc2iz^=U8U4Q))MRZxLg1VpkFCc)j8z zUUEw+dX2M!nUm}i!e6Wp5uQI9GXFe~KIimm%S^^xSoi#=7*0H` zC#SERsegPhm}@Czy}_lLP&(&G9TCl~E~kFbnVcdw%xl^FG23*a>B8V#d|s-zz-CWJ z;uQAv#LRIJ23-aDJ9Bt=ANBjQ*nxaz<{k~2pz4NBNPygO-6Bgdj0(Z}h9^ft=hgi7 z#L<4s(Ynr_949)0VN$vfbkK-8D!j@{HaD2ntL=@o++0&NDW1@#-g{c>kG5CkykD3X zO}@{h@W6bMk4VL?HREYEZDr=T-rcnjGY{IpYw|Z^Yx35SF7vl}e`4LPUUCzclVBq| zW$!?{{WD}GWQZ`9hv;r4O;2)JcHVHY(sD72Yxa4TTer(YITs7A6Wry!+QUA_!yI1y ztKX%b`Yd7P_3+@u0*#i7NBvIU6JMOVFKW4~+x||HLh#iqyQCL2 z?hKZ5>EU;0G%T=?ci}AY-X0{k9-$Gn9d)17e1sVbOr|fROCiRXTF*2d?wVxbDQp|#fO&-0fy5%Z(_n-Zhqw1}fmkY%C7V@XQ z$J=9j4_~>RcV&CUHRz05PT8)Hhv)C8D>DI_vl0iJ85UP;?VmJ>>sB>?r`k)Tj-!&E zoqXB!cI3-T*Wn{ZfuwN{venJH$r&QMEr#|vtH7S|tuGq{!Iv75BlD-V-rsLs1 z?~*BB*IjuZ*QHpd{e0GQ0A82FRM-~$=Rw$^c{)%QwU;RL8|6OX)m#J7PBAuTV6TX) zcp*t$3NOMF@#^yo+F=NKqdoF4FRaK5SQoy#;yCY*QJa=76hLwHMrEpE1OL#9Hx}XT z5lHhStK%vkNi4lv!J^(4G8BNu@pe>j7Rq3bXBKogF%UCsAjxW!ZS0O!Q=7ns#ut>N*_ZUohJh4wyAU*KbIrP|8R- zbWk0O^C9l9J&o&ep26lJ(hj*F*J1%dI)Q8ExE?=pkkee$W^X5nUF!yl^dY*gA zugg-j^6^bVxY~kE65Rhol)mJ&*FSuBD$L_cDffm5NOzW?s<6rCBTG(OrD2k(>2Q(@ z#j~6(od+%6PAe-0HoQ;l;>O}F9GUX%Cfm~%9C=fR3-cTk zW=23se%VHH*@waPsPvY=KhF;3MX*jK)>7_o{cvNmPIetxH>oLN2z}iXHbS(8TUpLv zz1*C|{-sDYYs+uOkH#*eo4aOde`{nr6aJImW|rZ*DvNocLqF5^_dfVM{e0@r8u+X` zarQ2M_TF4tBs|>L-zQjddzYW5b~&Jb>GQZ*xy0M+zws~;`QrKA$8&Q@xs#KVU6GV9 z%*E%#?p$s=tMtx#|3Fwyaln2z@}76g`OI-CU{tR|Ji6f z=0=tI%+qxBz(q?wBMZJZ-`&g%7B?-Ur;*+}ED~;oO1N03;&E_Pz-9C`s6Qeo>C$HwdIZpZOi1oF88? z1_o~3Z(KN!ajw+j!O<`P1Dx}^GSvBD0Hb5^%N^U*w`b1ts4#h1_GrC7I9M_^*G0Vq z_wp;DxjEFylRrOB5yNF0)GA#`mvatP`2i;@xoVCLN7S$3EXb~)Qer10Sg*CxJi&YHDTXK|Jij>by(_GW`nB3o(G}ebr4O{#iGO;Lox|%uZ6V@HX zD-~E3JG`~(>}c>Y>34mKQoDFtXJ%sU5k-mkbu**uue%qCo)&4T^JNcweSTJDSJ(Rz znNj{rJE8A}9i`-BixD`#` zmYOoEEjuPuQeXAv-zHyW9?il<>cl#g1s>n~bmfPexINze;)f;|=C>;%GIU0wo`pI~ z94WEQp2AjL{Cb$FWK{8FxAIXzFVDYtjL z+Fvem?;a-%7CXOe^PC%q7BNjXhG9t*-CMf3VZ_(RA+Eb7QHnIQTxEUK+s4`xkK=mz z#Tsa2Tkle$x@p(}O1XcWSmV`mEIlLA{!p^*rV_l>x}7ZI9^A=AG@f#MaXQ7j!e5#{ zp3j$)ra9@CtIX0|e*W3Z#75=zyOn*d=rW#BJ(bI99@j!OJNRkE<;~2>1AA++wqJ!$ zj&SK8B+x#_^a;g6bm9_8Rsx8SGhP0;W=wCH{WtPT+zR`2T7C*Z_p%o^9R-qgF6oPm zIjw*wB6f<1j=}ZvWkl#5?mI;6cJRF<9>N~xph0!B76C6^LL~n_3;#`qLF)$`&k$lE zHuiHCP>R<-U+_3UTZ|3y2az9K1)G6_*UO3_Ffu6sJ5_=GsrTZSRB{$LdZ(`6S)ArINRgD#R)ig4%L0k}7D5QeZ)__4`_)l!a z@Zl`;(vS!I`K}M*ds=4NBN!<`vz55_9e4_^7-AU~EtGJ(*R+~gQiL}j56C4vPEP%t zh~v^19T=|C{u`?YO9i15(m#x+^L>Yf)ai@sreI_Fs?A75zX^)|`hYVt=~V9^J>0Pr z28N4D4E)jO2+g4{$q3z>Id$4;;4AiRnpBY-idX z8>0#ySw_iY`C_Mc^BWXgx+M*>|9o+BA@4dcX|ic;Po6W`HKiV)tn2kKCyb#%iXr~k zrQ#JNr}&ubo{X!E_&1eOHZEh(oTHUHckN9ZEEd;qIghu$?;>=;dV0})ZQM;d|>B|_!3ZwNn-y^=T5u4HD`KjIOdZ62mF(|2k5;i&{1HcHqZtf^U_S~fpMoK@(-^fboWR~M(JG^{Sky*rX=#iqw7e0 z;GzjIaCXvtvc*A!Dt|XfrW?#)%ww=2#5AAOR)~eH#SxcJLGlU5->o3Iq)(nAPO^rF zxH!eb_MA`H^Pa{b5W*}PqIW&Hu8!JYm#^9m6lh zG1O-3#1gsACgTV_7g-gOcCR(2kOLxSd5{0G?8n!gVG_A#K#lk}=H^NpSEVTtY9KBi zQO_U#`nV4JLw?6M?DVlM+C2OBQo~Q*R_RUVovFBLhk@mb7{2}(RZ0izl%*SU`Mx2B zuUfRCz_Gczks(pCZ?%%l9;OG*3MHSSIdkJY!}0SN#{|j0_(yyX@s;;8`bYlH>;8vh zpmiSqfp%(3Y409!=%Th9S zB6PxY8|LrKcj(Lg(qhpj<7_|`|t;Pqu zsBabDOSe1TOp^2(=A{L$%^C%AMb!yFoFcqdVKmJ`YX`z07A=KMvH0*$#O@`(Spjgv4`_ks4a2jcteUyh~2j@rQgMB_x%4T%S|Acs4KXU>VQcT2;zzfwP!rcwezbH3bhGZU_l-p1;4!&4F z@@D+O@&5n7x{uI>!2?m?vLZs&Z4HvY#J4Eh@GrVxOM9MpQ{P**^Ai`rMaJ>+XODOD zGLWwa(h}Sctf?MDGOq|6f4$f5g0VBG*VUXuki;vFg=O8%Wp-5;p#e zRw|j+zm0B69%HoybGt7@Sw%Xc;}F29@Xs+^`Q%6gT(zKZ#YL)hfU2_5TXYw^6efx%iG*uS4Yo`h~b(A6tIwHA8XTQ+|0w5XI|H9q+&mP|g74=OUy= z11>cL+?ZBU4vdqnCrTzgNfQy`HrtaRNtstF=;UFt#Q!5ISvzS z$&Zhr!jb7lE0_Fd#(!J&HG#@9PB{!Q%E;Z^KoFT**ho(!{7vqX?{>LURmPRJzdsR}pAr)nTrpJGQ{90`X#u;Du(k zRu@v9eA#ID4v=|HzA1^<5B;JWuK)RCz$73d!0>$q4`h5f3s6_||1qgU*XcTeLUU67 z3G}~tF?#$wQBOMj8whC85XtO+_Sm2FL6!lKU+3~&6!`^Fs!uD1esQXaCwtWz(pVmM+oyRT8%o!3ILX4sMwX&kJ3%LCey_7FRQk5veiz& z^u-2pvlFBs36aNk!N&jVSacwN!7TD+QT0^5!UhUr&ue1u)(&tP2pPqg{R&anQc!K-< z^LM=|ULX(@s;ZRk>@0tcK88CxF}9oPkQ@C+7$Z&jDx&e`MT9T|GOEQxyV0=a z@>OB7bs7sd@2EmIChP_50x^r_m8J$<5vai0fwMzGC9s#EVdDTSt14Gt9zW-+TOip51`t6*ijWNT@)SnOW3mvTW>3eOF|t zcN24`@Nz?_+t0HueO>#rs#?AZTKz`y(nZC^bsWjB(8pHDw7HqLeerYpPGoj$-=*MK z8oL#*@AvS~A1mW?6qzrwsL*~~tIF&4X!iaYiYLkUSx-`PJcVCLzA-(yO*=_i-=i?t zLe>ENIMTpcTrPF*ud0SmYF@fk5*BUS5Vq{wfbOgGUJgr6Z@BDH=7&S)7RAuO>#7n||7gVH5+bDgLH<|L zvx$K!>;2pX-iG!4)i(3S_vIS}LpVrBMuPqiZVtT!i(U(z>u9~iKZLJ-c{b)A7MO;g zvWV4iM)Ag$%%gvX_IjTF!K5+h65PC(_uN=CRby?jf5O7O$$3_Y@bs=&{oRJ%N`2>Z zyfomm4*)I{=LdyC`AFpy-6YR*P7G}@GMpx|BI`(36nB7(j5#4yCZ-Yh)0@_~yo z^XsO)RBLg4oOXSN#W-e3T2o?YKiQoA2comjA+x&@lhhu|xD|A0C zZ|($dMqaX@dPH+{FXRbZhR3l{7mapyb!ie(6H^`dt*6l%6A`$74?cSNTf&rpSOD>- zu`8YNYNr;{#O{v_H?|vQZzEKFhx0Sz0oQ3eb-$JOIfn)hAhY-QEHG~^8Q+|Ko|Lh& z#iW+9_Sz3OsfGLsx@SsjhCLjYRQMAj>wlhkKZNR|s^DaA*zvPv9H}6k! zaQnxoO+CHgijisB@T=O92{?91b$^1^a?ME#$1>ML(b&c|Mr^sO*IFH9S*WsZdG1%` zoKJW#(?sg~3~DY$nAhTZx;r}}rCBPMyGMi=)-@Oin(WSbbSaMJVPJK2JM%E!%+py} z!Aa6VJ@ex~p#f04GU4OeUS+tI=hfQ2I(EyMGJjaNw5-A|Y8pd2HD=?9>Ek2kxkY<+ zj~MTlBk%4Hk08b+bXVH%C2Xci@n!BbPCZ=W)hir6w2Vu_l(zpG zRKBvSx2R#?68U@V{#z}(4-?n*hs@@8-^F@L{ZMbdn#=W|RTXbSW9?xu!DUNGK4=Nd z>?3dzUdQ=M7$rCDghcjbH7Y(y7Z6j)!TodKe0lA#c*$;8^Tz`sm)ZP3nVFSVb>VYV z`x0~dm~2uw*iV)Qp8x25AK2s@tXABhL4Oh|-QPWIvHmeLSL0=35~38Rd+#@+%I>Uh z`IO|{i7xS$itF-p7)fV;H7ZpWFBfJyEQiifJ7YH?0o7l}vVBVN}I^VM^(hW4SZ`VlL>>>;C@Y zN&`pfO{7G!R=p5ZG%`-95TM_{?62Zy~LzY<-8Hg(Z&uZt93P`@XVrttp42Vj@z2 zTlrHjf5CN#@!Kdh*%24ftP}qm3ywn^!Bm~cd~Ch%SA1d;CQ@T3QoE040w*U-3yjTG z2Y!>4cC=V3IWpOF7fgI&RF3;jG;K+FvnNcm;IbR#d#&9ljqUQAv7&Ex7`(zt9@MV# zGWZU(i+xvl`CY>BP@Hw^=ND`LmbBt;2I=1n$5PvkQ@u*N^wN1YKMh(8owa52k-~uqc^H{myEpn(hUk49DSu&Y!`) zMK?**&6}M*_2av5Y1>W|ygI|=Af)S9|0UFWbU5|fIhn3Aannw$r2{pTiRv7Mx?w`A zjmD}DJSN3#b9)z93ablKo}QU8C|>9aNnhS6(B@dL31PDm3{p3-cltB;u$XPFs(WIo zKYp(9AxojMH9N&0hfwne7TE)vNfE7wAB~+$|0GvVI6sPx{+L51y`-z%z+{#_v$A=g zqo!*t#`LkO{eWw9YWEB3=r&i}YpmNV7eY;Q{s{C}6i(!>oIKSaJUZvUJejNMC z6QUJTKAHZ0OI0fhR^$AlnWcW2C1a_H0?Yo20$p6VTtv7R~wko68QZf#lZqgK)NXuPY;x44t`p9-h zCDL@MdV#3V)D-VfVP=72FVjqrg?UQV`Y^TZDe1uB=2PAD+zvhW;#*3_rMC$1O~f|~ zy&LwrC@W2mo=kcdt`Qotm4?{&HANNoojEe@A15?=BUsuU}bO1hCrPPG}|!9?ZVBIZmw; z&b%fmj5D<0K-{?N*kr(vIwoUe$ZuNT^I1dks%T<*L(5og2Rojz!+t3zh32!*W;r|A zOBedLqs-5yk7Uej=ZJKlx6&i4WmT?TA;8aM;E2#&2)^r~_jKsHg5n)*L3+J<$@ruJ zx726+`bGiI`xo$n#%UQs7K6rDB^9+Yf99$(q!!sc?43K;BD>PGu<`p=t-X`fO4#iO z6PM4af6&|a*OF!>)O}ciKh-ii^=Gk`J2AdYRq5O8M?LvGK9UP}oD+ta`LO*suO(x< zb4^hitaWf4IVMgnb!YOLd~emw1csYFqG%<>vkuesoRqaM9%FJdem$5@9T2P3&0B4@ zS8t5H&^T?i>qrt1i0j?=?n&eDRjoG57lUy>4;3yxh#xZMZL<{68p@uaZ+LjESiz11 zchKnCwArcrvhvG82TC%wb4F(@itTw{N<7~(Q?zBN2*%&P%UnACHpDTU_X?@1-ms2Z zYAh#vT2$^Mvc`vrS4-yf0#`FAw_*I!_{p!7{qxEJfOtjJ@S zkLmcZpFxq0^*k`lr*uNRccg;%<>rv(eZKdtt4cC2SwvrsR%}QX==S+B>f6(0jBN?; zi3O!MS{TXnmo7MWW;btsb)H-5=g#DfB-M3P^j%Xn)=WA0Y*rYzre`_u&YiNK`lqq8 z{Hr~;{RJZP!pgDSs)827;vLh<&c+=L;qNUTy@$<_omRs^2g zV{=B5>KHq3N*e{Lz4!r`qKm2WBMKCuwUs5ZwN=k_0#9gvqYw);~S`21?! z6juJ2wpleWBy-hp*!4>bp4r{h4e{@rSPTT*I2@a~T>ZnFIQ(~67%fJ0@WgB7K86#9 zl`XU!rP1~e7hiuX?6=?}_^PjkP-|v^sA`lU~c-?WSq+6E1+W@Q`K`+ti3Xz@c}=KoiF@rpKKSs6q&o!lU`NXd5bpa zK^IK5t!3*z)R!#D)QQ-CEWILey>)KYr=l76Mc0zsrZ8iFGkHk6Snb5!rJsTJJNT=T zgT}$DY3H?@4H9GR{?QG$G4F0SsF!5unU~PAnqV|%BI0+O$1K0~$muFt*I!r#>|Pb`imt+5j} ze$peU(e%q5B@gh{Ywcel;H&0t^0}|HB|%-yUFWUW^V#NR{C(%xn7}8q(bm^t4;Q4!ak6Xe0}QyD`6SK9LY&K{9#$-$8_cgG<8?l@ z^ZLUsV}x+OzJTqD(b9Q2x(L*lU!9phusNmfrDt^TU*V-edKr!~0imp3d{ZnrvS~7VOQpdSOx%U-w&4>xd3Z05a#~0ihBJjs zQp|s)H1>86nA>z{;5PrNnCucEH6C!4MB%d}N`)Z3E{H7>Lu*dfi? zue-aF%qfK5lwS@g4d$k2cz}r>U&pmZLW8mf7Mv zvkc1cEwg`=%to66L`Rte)w2yU z^9v7}x&{UYcDeUN4h2KMes$jN$53)~Uj7|C>p?_DW?@&AIW_jc>QYnM!MhvIr%Pz; zM?!K0Q;l7AT_Z_<64qQGv42+hZBvix>?e;JX6wDu1LXyYhuM*x8&63G52Lu`bDM);qtG_7X2YOOYg{Z%XJeLnLD69Rk(#i^=+^cH5D5fbOw>~_9J zYQ5}{OAK7wGg)S7~{5hyh_2dtql&VvB zJ`yjBb=%VL*x{6d_tDl0YCX)@tKiN)b3 ziga#M0ZRL$0)M#UAs1GX~vLI;)(>r=` zUv9npi2T(rN4KL5!=8mt4_bfZ8Q0G%`~04??GFhKWV;$j`I(;O&I?ttoJ?Ik3;qQ^ znh&aa0p_#|eSD3*jkd{4m`n#5>D*3EUuf+45~705UWeB{UI<+63Ve;*SZ7~5KT*WV zgdY?(ziZw**TlvfF8U8^cCe?UU4PETE4Hv2XhwbiHgW%eK z&bp>)J=hyfBNjYmIG{|w#iCch%$z0aTE(VlYyFQFZ?|{Ri=q+A*zQO>p?1H$w{Ex- z9bM1oOm`HDqQ12^r%(qrP5UE4qa?O`JbN217?!vTo%_oors`W0H#K{#2gi-Sx?%bp z;BbyTcyaCX2TDaY#_MTfhs&htnQK%+Mth=r1B}&oQ`f!(X!*Tq&nc{2yB|_aG#`|G zAT0WunVBlJi6iHf?ng%??^Rk=5w17Cv!X_tt3Ofbh5p0+?*x3#iqaO3e}%O)&~2}Z zzVUGW#APp0)ig~a40cRkqfEdrV0!6+dyUy?w=a|=Boqu>dY1#{TRd2rCL9z$PI2_( z-~YpT)0{BO`zh(2SEJer`?kY9EqD!7dYtop;@220{XaJF*T0RIB99c}titCfztEp&2fd#Ani zYl($?Z{FyT?yCRYEWe5FXL5pEQ$IJgu=vi7bQmNhHe-!c6TBu9e5F1#A{&pZfrm%L z*u(kIW(VuJ?k(q^-Y;a#9w&40FyS@q8SW_L&$kJ4jXiVE#?pI;WA((>GTh_&!#{Yr zR<9=?shi~$_s9^$YIy1S3O-cItmbCqju3XZVq4sSrOZx6{KtGnd_40f?ns~?f%hG7-^E$UvKwcA>fg{!_9CMH8Sl;!4VO1 z?)hpE>*Z|5y@HZD{qTw4@q4xQJx;ZKyV;yqd8#9B<#=y3PkBWx>xYLgrsZ~>*YUbX za%)s+^W5O;%yU*u5yFypeo)n-w}sOjDP#IG*Rc|N&{MC&&E`T_xr`fMpl#_nlDaUx zsk5gDPy1{?Yj5FDE}!nW8F@6_&u`KjpoEXdHTWLi2P@ceUZ;d6Fp^?M!z5A2qhea$ zSy-CZp1itCNjpc!T@M?tp{2sA;vq@%^rW|Om@{FE#hDiB1&(R8^QT9HfrYkyihUZ(0g&Ej)PZtfR%5>o;TyowI(=&E@U>-r$~4y z7tgV3yB5XhrF`KQ;$0w7Znvq=o9T+4OVqP^raV!+2v67M z*pLf-jjx|LQIfAx7CP)rJ9cRt#1~Q(=goZancNEeV<2B{ffIzbr6o%EzUjWz&avmzwDbv(x>J5~JS2$){_Y1PH zW;J6vQv|LQ8%w;ijqIe*OzGG%)YQ>-$SgAL{w$y{8*5G#%Cb{lvK&83_F>1+@xpHn z_I(^H#i1=c{LJES4SQSm8@7Kq)K5!L_Bn2s=hWcO3=%)h+MhbKr4BsGnqN{_Y;I^) znLH5h&zzHO>~L>`>RR?yw-s%(l6#Xr)XMsGpYPq5IQ4Zm3itWTtaKGkvP%>68>1`q zzc?zWxTzioL|oU-;*Zu7@@^Yr}vc9ph9X?gv#>J>kObLoYrvXdK%XmJPk z8qyoz#~0q3VkX}_AZsbFhE6v!CunkmiTp7fc7ZlY{)IdkyGnH0Y%XjbFd-Rei?5LB z-5Bo~B{N=k9IR-V&t@;#PUjEwGI5%_UU03wc9^f!k7c%|aM5dl$?D|=tJon`-KmfW zs@Ljlmf@9_J=CIVOOA791&L!FUsp?q4;H`UQmGyOUhR>+WwSg&5r_Np|l>K(Nxg%uGDR48pHpbEk~F@F)XuxTYusesm2RtTi;H{Bm_WS*l4tn)1tGziJ)^P-~qL`hn%ZDFOG7B*lLJZt)fS*`lG^2MZU70eoN zz~sMJPxjLym_R-QnbzD{Fx>eV8kQ&Nhb`?#KH9{MSstIdHX1nmOgU-yQc`|b2@DjN zw8eZ%hFu1k7k?DNU;(Ta6j|t6|y!*>PK>O(@ zs1Te{I@?%z#)D#?pLJ+JL;sSf_0#oy6P@P99VT-^p?D^S`&6M+96NIF%B=7{+Cfv0 z#Pci8}dii|t5IrN#*_8Rj)a(H*5zP0+d+Lv@2^>*?! zMhR6bIOf;f0onw7GWPum4rgWkH$G15v1o5L@Y_}6MNv>WZU4!1TzDxZupvKR>UQcZ z-+JqPDZZIFw!#6~G(++E1Ig&nw0+eS+FuLFWW6kBZWOi$+xheQl#elTn`=ya{|G;g zl*cb|jnh+G_+82D;)uw5i4 z3|9}Uo@Tm)wzE4*e=vU^?zT+SG0Cvcgs%H+`#e=gE9&a{H3=;gqu^@Se{Urc@7&Sd3ju4b%ILd0*o97T($G zLlSYhBv)3d(;6uG*&SOXG^{fdndZp$$-ZD` z#iMWVlWp~eF|V-=RhYX*Tlq?xXQA4p&l2&)f%wV&^+ZASqE}kce}0`JylewBspyX{ zzd#(PK-oeS#xgRUHd625JB*%>ygl}b8~EhOvQw-?-Z9Po(KdK9X~lCP#2hiy2<95E zo|+80k~v`(BMaLavC42^=3UgQ8qr^PE{|F}dmlECSeTq9&~c60vM>z@_Wux^NM~;|i=Xs~#*Fs7@F@TNWxe^Mz9z zbR^EF8g`ez*L8ouc6q5j@7{cgO~a<7$S|_ z8<;`?6m>_kZx1({xLZ)RUzkpF27iW@|6g!FKy*!#nj$wnlqhChZ*rpq_gzrj(gvNm zMziXhCSK$qnt^fh`;9May$Y)HTbiOXq)1*yT8r2N;?u=3+(>|K!Q4<{86z zZ4ebDRKUnM@QJJrTi7R%8*VZ1MPn38dZ2toLP7%CX9(+cIH!4Zsq`D@|3C+AkDMg0 z?%JJN`A!{*) z(2j?c2N?;~G(DrV&)G+vDxFHH)w>&Wm22TkYK|M7z_<@f*O4Tnx%)d5A~69m=OUQXTi;EpN|UpjJ)4;q>I`F7za*KUkv}?#eVdV zW-sW9mG7Q^CKedlZYTk-IwM=kRYWMAIbe%PaPR!jo07OxzBo~%q|OfT+NVdyx7&i@ zJho%{cT|6nEw zfeb(?=n;VQ*yhGucP;z!qIIP`43a?GxXV+8;C(`G`uA%@4W<1a2PD&$>J4GRYqTg* zRMq*)rP(BfBgoA(sJ%*SOo?4xN2J*rE^p8=hF!$-@V0nfcYgZn;4~+>Mf~EWJtp}C z7w#&KEJ_(= z86Y*o@|>&(AQ~p258XK&v_Ryu3P(B~m3c#FXLjc@HS-M><}p!uI3OYL=9^6dt`|Hd zU1r-Ko$)WWg<|;+MByG(=5HU&19`=N#_q_OLsC^>ksS+Q*jOJG3#ODZd31@Ly zW`5^lT)GlzcGuI(U}tp#{{m|fOz_}8X+mj_B7v+c@^C%zNfVy5JurG6|EY2Z zg~&(qnCK9kQpIZEdCA*afJjxHm5+uFEoQDs#PXAhz|%6r({ADW?BXK6mj}fTutg%h z6#_A%R!JMMN$u3R&XNF-P|u0G=|(lE(4%t@Fu1Wk8EUElI@W5!=Fo>%O0-J#+sSuZOPu3rhS}0%tErC)J_2BUI>U@Sky}+Wm(*W@P zHg!1Ac356A)_%mqvw;S3FE+m`iO(>kg)tES-Gv-UA`Pj7qMAduy7jNnTT97_5gx~Z4d!V^fxDX9Y2W5g z3icp{Yu#BgQVB4pOIPnpzKBeL&anWwtFkXKqk;lHkNTZ*ZHTT=@dD}*2RL3FPKydM z=Y12#rMzLkIS*a(A4m}qcoqQ|Q?~~U(;lXTP!3|H=twQ9Hj~EeVb5;p#(xem4D3^h z*{YbuM}*#+$a{4pAW1rdV$*dP!t`^76LPxwns-2I;_TV8L;~y5Xj(K614KNar2-0# zo}`Fw2^?i8C@7rQLWh4=@WZ5twm0wO{#r{UumL?ac2F;WZ`LAm(;w{PQN8c^Tu%i# z1X)eKis5_1Oh{TpUXi6s%4zj8=vBaUYUL-#!ibUy_i2o<=JVoRfQHsgw^!l2qt*|h04cI~peg|*9M(3!UQNca11HKCFVPnem zm%yxe>HsrpN;WtY=oJMana^HInB9RH;3BP0EN}bS4I@I&At}KrDrVN@mk1D{OzCvY zsF=D9m#Api1ov|b+h4l6hS%oT#KM;~NkMv<{;lodrsqof)fdEa0d z@Xp`WSI{(H!x1T>$B3#-ij&DQN{Rv+1O%}Vhm^*;a&HhQH3h&xvhjhEWaQ@e&fNjxRMsYvT`*^V2k7{C*j2LtmC zuzz8K&WGrba1Rcs1v&yx9mwc9f_!!r&bNmJ;IlO~HKvYps>%3@aIx)gxU+L}CoYR1 zzE9ES4)~Dd0{byKA?h!|u3TbaFpn8(T+oZcCB!jp$U>@cgajX{r(B|-fcfbzRMXSy zjWejoWoBj`wH)nBWy58N#h}R+J}x#dyV7=cyDOb~b%V>7tMIe&KT!)hK@N}@VK)n^ zoNw`6@cc@Q)GgXXZh<%{Xpd@>*+4!c0DpI%NZ=kqOR6DeT`2ul&~F0Lz*AHpD+4DoVs?aCZPv^RIMg_Rm9;ZPAsc_bXv`a^ zX%At>ZwCgXPLm;sbU)g00v|Dmsofc6s|{#i1-8Er>d)R&TInxHbG;f7`hywekp{#N zFcOPqD8MVFP4?x6!EaEd0(zrbyNhsvB(1+YAif2UrU~4;ntOfScu$o0Y*)uYA?FCZ z>V`TK()kkZ1rB2+kXoScCd&|w6h65blvzIW!Ie#_bE(@ zw1CP5o&j6|$X58~vwl=vCt*hng=YQHd0Tae5di7WAw0qyp|W1MC7d9DU;1$oY@5~l*@MiZ-Au6HpX|$rTa}d+6;6;ao`;L|LlO+y z&OtkCQ;F=}U^?X7lV~;t*8>6pHZ=qh%Kz&EVjg;tj+@|UWiY@C^QzCuwgFL9G&PS- zoJGvLLwBX}Xs?o^WI6^Go!#mU3>ZS{WdIM_1q}7>_^<;Se|I2%3AAz}0Kq_NOr7y6 zijXb90||nL&vBpw@z$+jKw=b`PYziiwF#3-C`T^HRcN5=Wf*s|Ueb-IHNAWH4rnnr zHV3a05b;e%@dAl*2$x72LgNtw2A7zf&1s2oayViLdsT&^lU5ZrYWFFgf0xP_#Y2iq zm#7?;zxP#FH-WL?8Kc=|< zy-@njjFfX3E}(PfUS3|n=jZKc4Q!_WfzK``V(L0mO(Et`j;O7mc=zYZ`^&#u zTeDy_A#x$oA%A@@*szkeHagv1+k^9th}sEwy#RxYfz^wQ9hr_s$6bN{bol6S z3;!k;M65_7ef=+gVL9;O-}_-kHx~?>3=j!eT+f$&gGow2>fzLYG1Li}#)dw}?S$RRz@Cp;eOfNQ1HpuPY~jo?`0OU_63C$Jm> zQcnQ$K4?ORJiGd|#9{^*#86!B(B-p2?Ml%2AEPboDVio z_KeEIjm#dL8n9eQ&LIFZ0 zh&H9dM><*&)NJ+JVp20oW`R8#TmvWs_@~0my`cgN%*AKO5cv=2F9O$PDX1+drK^yZ zeuK0S<=~0+<}(B_W)$X)Zv5*Or$A<~6tdAwIPKpXWCf%zg=7MymV1ta1RB6W3C<5s zp>#7Va&j1g1b(ZU!|CQUE`d8d0jT@(n0CLT{09`1X=4TsBp$X8W=&W+b2c;E&;O3ZNwg63is5NPAsAUIc zl(%Tf2t8NBc==nvsOhVJpXtB|hPMGdVXswzb(^~MoBigATszbZtbnTsRjPto%I7CMA;6Q1`hzzm3kv9&XkR~kdXgZbe}qj!bsMtl>j65U z*at{@k{fpv05!pq!xTS?!r%egWEVM~|71!GGec1rxKmLSruzN&T4Io8-+_#GZ>du7 z7>*#dSa-!|hr#xorx-$J4`eLB99tlpN4YTOF@aZg?{{#81!Mz~$7M6b#pG|GnKrN7 zuI50Y?{nln)Jg$C9X4|#(=#)N!Dg!Q5aKyp!EIqcB2(wR{vK;!D03KiUHc12DMo*O z1ZzVq{uTeIQ6Z)Oz*?unwMa;#jx%ozgb6Cy&)`B(%%1D9R-l3>`uAO&N4Y5eD{F_B z1W*CD078mncy#WKwjE>fV$~6QXgeK^3klTW@ z@FD1PhJe9B;smY%0lwu}LlB~>oj$NFqsl{tQ1ylaU=PmSRX?AO?(Re<6mot4=9*Fb z=;0YSPSnim=}!*Nfd43`92o3z=88;c7T3 zjcU-NI`_b$v~yAf06v9^-OkJiht+zpw)5;rln<+F!8|ZVf(~9N(DuO!0LAp&+#I9~ zG-wPz9x?(OSWQ>S2ayC3w4lI}Sw>v?4UXE5&2aR5Rdwbh|AR;XG)lma2WYzsKmC(E z3wVP-Ol}S2xru&AgLBZ-|Ml8Os>Nm#kd|IxSKEe^8B%Ik)krvVpf!IWhh|g*WZpzG zQb-Wt%sU9m%jBisfcS(D(Dtg&ot%se)Z1wO6^uP>ArWQ=2m?|_b#JfJ4L~ zJSapL0B>-oHI!&Z<|~BTY@q5yOUx;$8Fo;4(kANxJy)n84**G<({aTMLF)g;WZya9 zcPoNJmkGpDh=Mij%Mn{;df+(kFPnXU)FjXVjb`we5Y4jTB+-LY&}Wzm1f_dW4!F!` zk@N}!YEyr+YaLegk~}zFq8kA3AmEn)>Ch8ey_Az|8r&KxaE*pM2vmD;Xn=JCrVYKO zFRvkS^gb?2B2fi@-6;-8MdILMs>8coAfN_?J4k8aga*i@3HzVYh-Ls#HH2&!6$kWD zf0p};haYlbARSqUWEP?#(!qQJ=rl8^avq>1ns6Pv3a|zhLS_v~@;Md=4rql2je?-T z5zML#HUw1}pf%+I#;p!~a1xik*ppyP*A0AYZLO`Z(2{(^c{Fc&{J+?H%cv~7Z+-N! zKom^64O&1E1Vl=@yGsJVIZh@OC;7m4a1 zMB+do737_e<~jJe-<;sj^%NrY52Oy%C;I%JAKTr6A1BE*R4PIlHU@4G9-}7l{t}Sk zA#MX;VrFLwxCiL~g&$#Wa8K=k7P|_PbO5lhz4;>}M53UjRRzKb_)7pam>iz8NF=TF zKRCJn6)x~B?sxjTbc0h3v_^F&-Y}!n->aLOn?RT33o_-k3Es9bJm_02c;~<#n3~`h z$>~_ACk9TL=-KiYESza&a0_0Jkud2rU_dkg7AR8d7Amd>Mm*TjvGT|LdR?WOl9FxB zO`#U#7_`YoMA7sJoDM0Kx3#qufrvmUA*$un6Yc^`9sto(PuPvvpZmxT76Qr4^#AJy z!wR&P5I7-x4tStOQ*lpqGLM9Tq2V47-&l7F;2~$Y!15BZ%mMoi^5M*03p|4?A?ShK z(e28<;bG#kALjtwhh+s$Qw6{%;?~ZF$MO=?9Ky*2S_!gvRdoyx;e-T)Fb5Jq;uSX- zP;N}feJzi<9k7}xb?9lpy5sPt;>xTUZ&W(O6mzzar5+dd2d{--Q>L< zM@@?{`TYFfyH`tTV=n3T5r>n%ojHFuo|;ry@n@Az3E#ULcU-0+zVGyKtuw-zcaS>!1;3%m3Z7crAJN`hf zjT}W?0QRMuYW4(s==gy|2f(?gZruaS9GRkDv>~%}1R$9MxG>iVnT4S%bRiM6BRJ_v zZ~*%l96K?NiLiJ&;(2)YD$KWFexMqu}| z;GuXJ!E*E<%wNE4Y6|NCL;b>L4$6=0a7O6Y!)|21Qk{*~U8T%s5i+T*2x0`<)o>gW zNi8DjrS*t*OgQZpdB3{=$RKAYcM0L;|Ub6Jl< zu>WyPaDdstcjrEwl}bMbzo_8usgF1}n5K}9SS@5~;E`UB%VFp-U_8MJpH2-+J|JU= z&k0U7t0q`Om}B771P3M7yp8}4Qb6XfqyB9EqE*2JgYW$Wz!$)YsoLI51_~i37XqEh z;1yJyi}7&rD$qJrATSODh&2SNYHC%8OJLor0{BxGax=ZNn~fms>PYYacG`HPl*QZ= z^nn8`-0_CgabhM4H3tdasG|w)qY23Eg7LQ>#{@>213+Y*fFTZnabUH0$O2AR!deGn z2RwMH1nWpX5FyqOjIPIQgFY!c)H1n*>bOw}76x&L0gI42m%eXb35jWNQ$!Dp@I8SEz5=X1II<66fB^&uksh!^ z=7OhNQ-!Exx!ApK#A?Ce((tr6JdqPr&y5fvG(`eeKoY1{vk&(+Ic5`sftkA+&I~i6 zL%E3~=_WW(!4@Ej@Tk9Vf&voNg1?FE^^GfMlA6+0UkmKYu7d_CtudTxkM5w{UV|fi zy#=NUuWCnNTuV(=Rg&%Rd$^XG^%@GrAqDkV@Us!PQO2+YmKw=sf#ZOjgN>|^{C}G& zFITKzEBDBD8^E;z8bN;eJBpL?bb)M2kP89HasmLUxpf7JY2lzL7*uxQd6d2?#IOxX z;hLooZCgBc+WAFR3Asry-6_ZU=U?D z8^}-tJhp_;>h<<2?)AY&jfO1&5|)F4Xs%T3bTA9I0G91SmZd#5maXm3lePTsdhGE5 z0xknZnLg+Wr(#@T3_46n-MkiI zPK3P)Unb)^5Q8*1%xNv0cVh^5lzpI8=>!o9_s-Aj5C_Zd^&td=h(lIG#RU{0Fb!_r zXWPtd4+%lQZ9GC)fDeBof)5@Pqw8)nKm{K>&x5%}5aY=pu}T1cD37ec{sL~D;AnXP zT2jx%xDQF%YaPxhv6_vlGdn}T%K=$tL}q{}(TD%VNQmlQN^fs3fCmUo zJspVfe?;ag(68+y*#qEgq>d!@{0nf_4x}*`L2SB3Vb>%=nV2oi-ZUA2g7LHT^z?X; zi-a?%hRF2cA;NHu5+Xr1y-+Q~z1Qgv+@A6Jd*E$30wxR8yq%GkQEr-6V1W?F8}uh# zB$q)~BD_jrVWHt&6pH$6liM^Q6M(o2YK6u$k-*KJ0-@~~DU;4eN|=#8Fmnjk;r^nT zs~WR2g#7!+?svcTRQNWG=VoX>0x`r*14+4GmwF?3s)scsSa+KO(1-62Ht8v z+;uk`@W#57W1vKLs^=KZ0eXFjizt+U{OMjKEd|tB5-PdC)YVZ*Mlk6f9qdBL*}(<- ztJc3keAqN`TBu$ z4?#U(8wop&Bk6-S+sbvAa^&U#DW~#lH3TRR0tSN0oJx7Gy)y!wj{rz_u)zydz^oyO zFxKHWd`{y~M}m|^9FL40MsJ-%x$&Icp%1Y{wiWXlCMG7kG(hZM1&3jPe`@Co0+b0j z1lWEp%T|_EFHql35G4#A_rM$cc|DA*Wd{}nw6SnB0AYKmF?bl~OTd-rR>b!_-ZDGh z0%Z3ompOp^2nO2I@!y`>Tn~dr$f~(?0Rjcn929mA6-SChq!1SxJ2ipB>Ekkimt zX~H332OU#@i9%V=BZ+AU=0aVcg53eI^fd%Poyc`(UYPVxu$$M|Cj-Etn@m9}LXZN( z>WAI%I^CH)=}Kf!skeCiF9iv%A?ea}a_!k`USR-rW|uVyiw%Jp<;h}{fPB*{e<$af z5`s+!^O~uPLg`DMss{2_q^t)3*ZLHgm4t!>O@{bx&1rayItx4 z($4o~w{s)$z%7}aiyQD2q@9Ao$z?lK^Jx^;D6 z5CBEYuS)>}1nw8hRTK&*e88Ku-k$c^A zo|B7pfOY@u>Hxv$e}4FF^txj6yx2Hy;MXI~>w_^T-h@}G}^ zLP-dmZtMHhX$6lBy6&66AozyBrvo@W*0mJMUI6e>$%BVHJKGxP5r;rWN=DfcxOEL~ zqfn6_tU$OyT}y{B*ta~Y*N5K`YRHu8$aKK-2F}d5x5+^66zHfXZj#5Z#f^;8kqPOn zfY1~YKux+xrU{ToOngoc}tuuqC-1&JG z_Q1(aq_Kx_HE2L<6a44Zzaj6Zh;yk3`L;gkf3A_S7CD&<&nWW?sE+)z`FVtF=LTBj zUwzfHuYR6G<}4KXmzn%WCKx%;g*bYv3CxrEE!RKu}dND>Dj}n*c`)t)_r!>!d{HhI3g4iaQk%Tk)C|g`Et70Cm+ZsPRD%m0rkI+I-Ljj_kSnw z|0aRO554b#V-C2vr-yd`w%ME>?D0Lpu@7Z0H9&2IAY0_@=YJMZ0^60J=-aCtm8-sH z-3upQwLa5f1grq4akp_5FyVgjx zJurk+9Sjnq+|ZIvcaVfOq(}i<>F-(Y8XPP&?4ixXLh)!hz_+2|e}&5~0nE%2VEdha zV6#%68h`yO&T<<_SQANza^tcAieicArv=wXXP_RSdl0_IaP~c10BOgNGSK-jZa6dp z{AHvf^5m+moe6&_IEo;=vKAq{ML4~Y-`AbJSL;iqaF>H7rOLZXw*b*#gJMlcVdRR9 zAvxti0+gF)^63Ct5u7VQ$R9b-CQEq-5(Qz5T9x2s>FYu1!#L=0hi0|WTp!#c=v?>% zW9evs7i9j=3qs&u3O3QEvl`Og_mF21MnX*Y0q`D;{1rGMNBt^H;LPd7#(6`@tMA&nts(L3s&9 zPINX21e=N?4FJLziG!2a1o%4A>=CUciSH>2;|zetDHv_XCnplL!9~c+aH!y0K-`LC zZsK^|nJJk|9%8bbPrTv6H|7XZ<_}97t=<3!E}2$rD*9qLiyLF0%KT1tmX2HqkSi`C zfJ3x;HGqMWqUYcKxKPGJ5qWuU6bdM|00*|B!n1%JsG-P=qhto^`~1o5@!0GHUA0m& zGMa}a9M0abGw0USxJ^>5~E&Q3hz0!`2}1i6fODM9+g~HhJ|E2AS`gGckw39O}Wj z006OCwQC-^lO4POjH2&Thw{Y;RDh&4;&u=!Z;lx{A78o!{)H~=JWlF|>{c@!kbI`2 z$GD&75;AD_1na9>PW}&~xuzfrF{JE-wEPV?L7bHtm-_`uah`fVK1UvSGCjt=jTINTn0KT!50W}0jxOT7mPrRxMt{J+n6 zHDQURU@8$cCXXi8x5u06lOqxda!|Gz1nATjMDX2K(q<0C;#XMCkxQM9TYQr*&&!hV z=Os}rfDFJ@Om{f~#bDQ!C^Cpe9mIA`O zJv6AD?O=7lwLp(IO*MnU9WrEAY4u{@93ZG0OYMx4l(*!S+_VpVE`gfK2G0zoufKYy z-;fkt;nN^tuLmVFWNDxtB|Vb89ncBzdowdLB@%e$W|ulF_78SH-rXJ?{(WFE7)zLy zoV7tNlZzfse~#r59Q6aUy$YH9tk?e_zdPjm)g=VYcWS&P?qN4(&|T#_)TmQweI?BJ zB6z2GgEwvgOL`RQl_8)Da)Enc`XYGSaQrK1T z^;x0v6hSj)*AajSu!OS0^S2T{hQ!71Ei_uly$Ii$-teL^x8A%{luBf11l}Fc;!lE1 zcIhDi-^Oqz$ILU~TFq3H;zq*ConT|(KIu7H)`lKz#F}0xgR?HW*#|Zf#hhi)7#KwPHijLd2FMX>E@eZ#N*f&5G&DHKjLn=kTx{{o zxIv1>At3kt@UvBRy2>jy9;P_v%ckWd#dNIQ5lBe_r1g#=S*l{{30SL_^;gRAN7}O+ z!! zxzHT`hN2Oq01a}Xa&)}GbcFH@nFDegX0z_(1%%Q~j=alhl^-1)8c3`jzmo07VnH%p z;*rcWt5Q(n0#?8^!z)g)YhF|_Lo4Q%CE9sO)W?(P&rL8WhK|6sBhy@+uaE~BWz~uY zBdlA>h7?kV_vfd3=+HTfTlFy$J^Oar=*?>L<6w9SIr`$`S4-44q)$?W%H za4HI}$`7QC3}+244~`6Etu0r+Dtk#pAV9&%Zr<3l>{dIZ@aDzrzdPw`ngMnV-W5s_ zQ`>)j$QBmekGb46l-D#G#4Xa-?iJTpM2GnDAZ9zMkDrU+1ZFW&edU5 z=S6WOm;CCJ0R_zu4Lu==dF|(I?snxGcr{o0djl}$3@XoD179C1R z=fdM@w?6^;8eTZ0?aS zFDTVckI!-a4zX`?N~Sq9OexGCe|q1ZTC2i8VET-dTq2Jj{_3 zBQwB|L)V)ZCpOtj@61VO?WL*KPBJBE(?Y74V-%jD*Y!2`;4if`XPIK09V_EZsY0fn zK{)jyJqIZj36E$IbBU5tUa*btZL?)N11i6GO^u$Pg*u$;37sPI1lDbl4r^D+inei{ zjg)LIEUe4a1}i-ep9$T>TzAw`cHt~D56ZOQyxOb1J;iGE=?&f$+2z)XSG#C=1D9k? z1EOPYsO;ru((iGL4VqTD4oQ*etCc*ZWiJl(+K6Af`9gZNSk+;RhRu{}X=2L#S9M<) z=VLVOJ(X_<16Ar9vV`Keq`%`$FSXFrw@gw$qSXwh9W1f)5p|!gZqFKKr(67@_ODsB zpa%Ft)=|z z-C0NHpEqCiEp77FF0+G%uyMM{W_B()3cbzQxwIYq%Te1Uk&#5xX3(OrO?9 zVWs(Vj791QZ@EoYPkZ_^&r$t;R?xegT;kog9?D^ooepTQE{U0X-32kcC7UhRA1~wA z&(PW`mtI@l#I%89>XvUUDL*$oysDaz{!$;`DwA(u6O%Su4DO>67^G- z&Fzhoyt~+SG}JpwRW-7AU8{fNErD8AiStlX53lTf75T3PGuYC(w=Z3)@9BCa5RoVK z)4WWF%pd&&hF;N5xW^k&R z0z#j1xvj7lHby4H`rE z8`Z5FdxM`$z0Q&+VoFsWr_+w<7sUy06V-a&Zp61W=wK6?J9D5`TTM!_d`tepDvng} z+-sxvUKAb&$-4@K4`=nU6K_u-b$TE!zd6>TMpw?ZBGm9 zNc#R<#KS?jr&4T}A?Nly0rsdzo-tNbm#U|ThAq{+9IlB$#O8w~43T-2^7nRAp-iE_ zN{f;VVueGOyE5q)RZJT4r4makvc;Vf#x+M0HZjvjx@aA&rL)xaH-*wdHWzw=jiI2P zv){ED=LLiQdz%ZfRa_6gF{tFswfjv`Z}DZPDgWf8{zjn^>A2c&X%buIptfH%LeHaY z@rL0+WhkkPyvFADR0~ZJg~Fgi<_cW1uHE>(G-I0j{_kD(w3ubL-iU^&$TQ}x6w3?5 z5h*(JW2JLgDp>xL$gIUTo8F01Br5&Dxx}u^1%!~Pe}?6=;x#=AL>GK}; zxlM}0tLjhkvjNjlO8i`q2+Mif17dYpT2X2Yx#S<38N<(|mBT2v`^Zbm`6J>9wGHWi z)yV2_s<+#%dTzwuG?-VBf0~~ELR;jKXUHZd$FgkCE(UJc@$6p*T!xgqFMKkqQRF2z z1S)@MN~;qw{momNb?~g6SINERQM-PnN%+3J8b)bPH%3&4f>0urMp5cD3HdBfQRS}H zHCF2Mmz>SLDH-wK+*9+#_%$@{&Itl9{wPI17+8fKiXcM*w49e3GQ67^@p}xstm!iz z(Y2=T2h^`Ko{I-4Za*p^m6DkXC3i(%f4?a{+GU5+64xcED*LdwrOc`~4`aP2v^4Dw z?$%r!N5P$|eR=v~?&PWR9JF6Ob@8#Y^g1$wpYKZD$9zeZec&KSQBXr0TfRn-5+7u! z&_n#KtM~EDVz9Ba#oCoy{_+&_DyGYH85&A&WU28|L#`Ucd1~8~s0Inh;U3x!Iku0* z(5d`G5sgLrRQm_X@${W@+GkMst9+BcvA#4u&*?KUhE)&8Cz6CFlKQ3)Oh(rX2D}@| z#AQKka!FbY)l9AUxKCake2!2rc__*$m%`7_ySd2}%$<-r`B>Duw>s-`;>t7G6@sJ? zYbkD_#F`5T2ZgG6@+`UyNBby(rl}_GEsUf2)Q?Q&HT9`h^?xls+yir#}FZ%J0 zSb|42eUqy-?MS>gXG&>PT+-M*n~mVf;`~2GE}h#U%85#~nq=5L%&isqM4L?Mv%Vq< z*C#q99S+pxDT+4eY^wW)niMQvWlQ+qFT0zX=HH^bwa1j=zNXflH=!JA?P}}b^Ad-L zqn$-&vpy%Tdi&jEh2z9O6Qv{lbw|DYOwA}+Ri@PV)RH)CH_A>e#OO*Nk5~2MaxwtV za^XZaZ$0DEt1W}wmVMjnYr&$1;&rv@JfSVO8L4huyp(jgG$y3{32k0}Tq3y^OSZSS zX`uq!D{RVazBxne5S>&D1CLA@lc8iYC9`~!KBENEOupqJlh5UQ7()sILpHBiu4u)q z-Q0e|;xJrJL1tc^p0@u{PW7H{%GJF$+uuq}62^PxM{Ppo^Tg~GN*2?SP2BtcXtNF# zrtujy8eOF|=uwlRGx2?Y&#A}}a`VFqCh1Qc&BGj28*MyfvZHGzh6+~qv`p1X?;fWW zQX7g8rnf1rdObDcRNugNP!fH~FO#L?@=_*|bN+b5rggEzjw6h}z`2N1zdIQNJ!8yl z=Uh>SXHuH2elmcl*_s>>o6&ch)dI%kZ*n9XS7(*uJ=|t+Zg+ z@x2Q#>>>3Ls=C_+KjcfbLkHcv_fI`WW^i!0;!Kx$JskD>NV}so1EVzYj}zNsyA>(w zy}JwNzHrakWM96r_N#1w?n;`BO`ej~bgJ^R9LG-i?mTz<>d26CGuA!Vu1KZ5-risq zDeqD`*DC6L8X?X_9D(KU)-hL6Nw@p^*1%xJHiTYu;SP2=&V;7ZcDE!U$o`o6Ef7JJg`mh)D{mNk-~A(=EEbI7?p;`nnm!@yBhA-qOZ z;iMQpRm`wuHjdNzj`t@SJ8A!>Lv^(fW$7iC;gSf;O)~_DHcX_$q_L%1im#$%sO7vp zi{oWG%&-{iHL{s?Jkt5KsQrfKY7SmL6~NhVkC_XPwG(XQ!;QHW%ti?h_x{$bJ02+9 z6-Pw|pNfF$Y$mNwmK$ScV>b(5hYYG-stUy;!Jji1WTJaFtVYJLXfAo#!62zC21?v=Gr&$7yU(Z+sobmc6+UdVo1Q2-Y+~XL-~blh2?)Tpt*5Q5|k%P z-S09qE-4cFJxM_JwiithO%er}%M-;i&W~Ix$pwQqP;;$6Y{~jp?fi!pw&b2I9?ati0U zxY7Itj>IXfvgwKTH?3N?T^Z;qM0`LrPKyNMRujj{b7%ClkoT%A;v}ZI%r|Ts<*=Nu zn@ioB;j0k-DZclsT0Rb{`|F$TKUq8L?MAofMe50}@}4`ZuW0xhpUeeGO zR!g$r@=X86i$~uQK^+~mJ~zM1FkEKUE6KQ9Z>U<9QsK{LP)^JbLfLtR|wG$Ty*6*g~1s-QZjEPmf z?_76YG2JjZ-?4FelZRcd?GoY~m(K){fixnBLS+x%MkGbNwTa$RTUP1AHNM6mlypjU z_1wRt@R|Ez5!kNhJB&{+7p6V>OmzH{Rq43yBLhnM-X-miU-joyUT*#-xqc z>H7HLB&<~$3aafNEYDEPoTr;R#`GYOC=GH_-GT>&wX^5E{u=J(>xC_wHEvQ)^ic4L z{6Ho(ekbofy=;;Q>hj6h0<2HPqRJ%4?Y%=-3{QmAwgSBBoQgcYD_ZCk5lZ!Y=TH)- zWm+oIOCLr~M-qDF-f!tDXVx%{z~%373m#6oGzJ2t*{;hd{nN752ETZpf1m_D!7y05 za6A*kx87FD=%(?n8Y5|u4wQGA7;bH>*R+G44JtC=WPdZIPvDJ7BO36@c#reN``u$aht>Rg9}|@- zr>%Ve=i8jx@Is`{<77$B-y)1S8F_s5PF{6O+boKi?sU0T@R9sNxA(*M#)zB{@`zfC zGzOvqPRcCYTAF&Q9>re;?&^o{#gW{x8=ADd29s^C%@Ug1*<@$cB5Qq` znCRgpH-{ecNL<(RJQOG88x6VC2*{rLcJW?M^^M%ls8?rq`oB-k+uC%o(pu2)>E9n7 z!SN<17LR=B#5&w_8G3mR!&e+;T^}X$-=;0h<3xdGUgm2+I~fWxLp>+8H$1PW=Em?l zFQE+i@t;%jBhq&PnYOe$@DCKW%;7gT@Md zCBBFrH=v{8WPNYo)WxEB?*7lx;RZq^jdl7r#jGRWn;NJ%!S{D`o+rW+nUMr@9O3C& zW%%U`|F`YL{2lqAk3webY^48Rgrczae}&>yjr^}r{FkQqU!g#B31VCRS1A7f5sK5q zvQFe&P{i7}4cnYi|Y;yuUwO>nN@s{=Df|-%q;*P6b?hz(}vdtW;X515jPMA04pvJX`gD_C$2glhtdc>cw{=FnhrR4bzU0!;)+8{*O`^s+$_6q|``Clq4)!B7ruEbz!AEgCrN?zVh$bAwRGNxCMy!>j&n#V67LGBF%9)gp4ZoWhJ+xC^@vLxn_rt8KxQAbA zTcq^5r|Zx4ZFD-)t4Dj&FD8tBn!3AldZK53xcKV$4%?fT9ogH0PpY_*(gp^{a*ltz zSXuEi8PHR&w<*XLj~*&z-|5BBkUHKSe6dr>sovd0 z{ri7jw5YvfB{imUulx%0^dCF@Pj7qyA>@Qw0So_asAPu%)dwacP$st?;kxJtJQJ~O zJPGr{4}3zW+y!y68E7_H9S0#kJu>3W(kUQGptswY{^@-6okTXCxa;DS-?1VW?m@dN z+HG#^gI|q5fBaOSUtvstS5}4htg86MxM$zfBenJCD?8cmDz06oJRbXb?)F~3bD_!N zj@j?hKRux&^ESu6KSy7=+qzQrAHQ*?D&Z(NF4BGVeJS+CX6~QsRai&Udw$Hnx19A(p5J56fsbuXm?*}Dc(0H;}bB=IuD{!tuqqvdZ%ugXa zuC*<)4zN2%}Pq3zXc z$5jpmcdE%(1=nTNA`0}cE*-jj-w*inv9YyBThJE+t>TV}XJIBu?8G4Vr6^Wx$uZpF z-PS)?W|&)Y-@k)A^#^iS>`=kqzdPp(-9uc>kKE_TLr;SSde}<${vTTjz2i%K++K-e$ESzpujxcSAt|i|0#%g~wT}NtEMN6wr(>IY_4Ciy zTGx@>M?0H^ya1Jo_2?+G-^!_+ADT4JOUNuS7;p;-wEH8 z@wN&Wb;Mu^k(RwYyC2;+zA!K_@H|kb{&@NC-+_o|P7Y|S{&#2*wz8@XsAF=|CLxgY1qK(rSkKk(M9z@JX(iDlfdD9|^~X0H?YI zG{{05Byg}zK^GoLQt7W>zo1cN1k93Vg@b^QkXA=o11?gl3$2hqMs}ZqVs@4kX>9!b znR*B*kQEkg@F*;Sp0t4lXchJ&W{*b~4TEk#z7N+B@?vO5BSw#}N(9ymPeJI+eQZ6q z%jAkfD{luKX$NC(q5s7JgvPHP_$A7~aN|p&-qiMctQ!%D3*Y!*tP`I9h5c0lTa`~h zIQ=zKrmTz}+4uGMN|ZLZ>)bXf!On`r1GKcPHYz1%1&w9Q#iPZ^|5#K-mRjV)Lmib2 zF6CyIzo%vJQ6W$*FtwA(sbmXYAVyo$;>WBwe}H40wJwE1z3_g6SY?!3!K&U%I^`;t zihG2zY0x7B&A`{mxSjz4APDw{G7)G~njub_Mb?Xo!F6u#vi- zMBXc&Ote_#dT%$ zFVc*Dk(QEFU zI{dZl3`VcX;T&HuSnT>lpP97&KtTjs>ds9DpC!Hqd7EV6QA#FBgGT8o6~71Hus&H7 z)YP_eOOf2Fw=v2T$-#)X!jVZ5r#?*9;qdy`lQNB|@p!S@#q7qjJmIxS<1)rW&w5_)&a)8zlT)PkOY9-czfYhftmf zwVvFg%{pXUPCH0zD>PqDKmPN8h6ZZcH3v&9Q`$$^pcEOH7Tckv4tn^kM~hk-8t~z2 zppd9AvwzgTsv{}U;v>h;GJ&@@2! z#CT?%0%<~n>O{s>Ctnf{pxOdrD#5S^DooJ$3JqsOz2Tq$T#t_s3Js6CdrN}_^B~kJ zg~lqcUnl?lwz9IKn5oJMb?{h(%qw{XU%n8tUxWHeAx`@gS_THBFQEh)t|l)mFE-@u z0uzFG)DsD=H?E3)qokY;4epzd6%0*Hm!P;D8eYrX(R~Hzr@nFmrRm~OQB}w79ALvi zm=?gv-`(9^`Y-^@aKO0`2UY&AwH}N@%RsidKNYS8trqGUWZ2l#R*ux$tJ`lXce^)dG2~aWAM@H z{>5;X9E|a_y*gojDZiyhDk{lojZHi0`K3MfS#QnjHMAJG@B1%rrn7uAww{puH*Ijo zeacXCmg|{w|1Miv;xctUpIU9QR_zhi_yWy3*7N5A1^?phrDO*DmmQ|2ynU;@Hy_u| z-m6P#>ch?4Gm2pIiRymE;PW?!t8nb_gEEH%@hIh$PwP^dzl@4*_KkiO__)V+EvVJ9 zCX!%$IFo;G#?S}l7$$78cgEz}YI)@Z0{X`IgL*&GWXHM^ z-=rhmZ>q-_S@GFgqS9wcfwMectf8F}6{PPhtV3!g5mam3SMY&WsNtO!6fc zEV-Gpo&`S`t=v3##m;5sxM;R1LQtGf_PYf{e#PTV%Z3gtA|ekA5;OkWi$kp1)w^ot zpkPfwRRDu$LVUbr%rh`YqAaBhoSZ-js@2E(q~K-k36mw*o4rWrA1r`EVE7e(FiP$YBL7o;#mxvm%h%xxfY?qH9I2GjQw=q5v{Miv1ENdop|X$&>-;sL5h%TE|}@n|HnL z5zF=@?ai-S2`Y^YA~ytI#5SE@ZN?9@lvL5Z&B{q*L%&(%A@_Pc7C-OXH+tck5Sy?U zT*nrD0R5ZhykgRRQ`ye^?A`w~^RxP$P1 z0ju5cBI)vw!v`lPBNQ%#$t)I!ziRcnb(4Jfnm#dPy(@YjXFyfco=_WT5>v*k z;IlZyB$Zzwq(0JIuNM1^+J%%t^1l5-%fPGrJWI=A|2~QqW|MJBn>n$5UemU zF+nH6SH`yJ^pT6+zP`@j-#Bb9WhUc0L4QOTgT@}TUCsRU2WMxfz$iRrCk1+|F$tNe zSy}sXl)uR)L9B&DF`lg;|GPl#HT(5L?yA>qswS3X6YwD$pY$j<0vNyrP0Zjc$+05* z*Wh003LX3g`@XSBubThRq!2i6)|83;gM)&GuiBI?*MTBTVQeD#=;ej+@pp7&dw zPQ!ix9$z|p`??VN+z+rpw`540p;d>~X=jDVti1Dk&WNcikep2pl@yWT;OI8EQ4bM3 zv-?imxE8><*i&dS1f5lXNPp?+L;t*i;hXPx&|MmMPh~4+U;7_+SD%iaosV+_%xo!3~(_wYUZ{>jdpm>544h ze)qwO0%(Eo>hDDYKSrdd*wRoDLXOinu?TF>k>H?2)L|o{5B-Ie;B0Jo{{SA0Aw>5O z8V2DatyO^6b>U5=A3={tS-9`D>(|MiTIqv73Y*|t);2b}3ivH7>Roy%&PTh`KyTc$ zpJ=J)YUU{*D7YtXH685uPW-syV6EBkP1LhKgvxz?YjI+Hd~JPwN)BNq1S(6Xa-%+m z*vzS^sm8}ib)v|*2gs=ET!oG*B*!;;24wP(?D8eJXOIXssW*@95y5Gc0q2z{i^xKnAj`m#jq!}VB3K^j{Hn-hN8W{Vy&`boRtJUyv_ zU)FQo7+0={N=bz)Z9pU*^2Ld3>-jZz;NNPvesNncH#c`uCiRzyP29765)PY?iKf?i zjihQ74x7MnQ3MU8hZG144UkDdXd}VxBlrpbYgSPGR0&QHSQ-K)1D!>;>v5jy zwGm4R;o;y||CV5FG#^*qpi;Mh9X%JdW_ic0KV*RmLbnD8%Q5P=y>zw8GQ6^>2ghu+ zeRWDbay{NVh~whp8mI@yrU>i{)HoPRVAt72T=Cs7a%DJPVeHsq-~24Bnli;AF2!EO zMXhY*Eb3#rq4SeJT)8n#Lg06lfQQ4~z4qevPr<4ibEUBwK{Q!=GR$Qv{NYT6VWAAk z*KEB)GlqrJDKwJIwL90<>D?y=30{sFF4Ay|r62cPS*vYo9MqiENnt6gb(+Y({c>(z zl{_I!)iTqgT<~1)3baP-S+3#F$tL!$xdfp$Nh7*Sa4Kj?LlLLz?*|av^C} zE;2EM10e~h?HC+YGEHrOAjXd7510hreAMq3U|vX6kPol8&usuv14r0L7Vc<&kI-oL zZ9bX!jMUzi{_eIU20iuk;t`FIY|F~ANt7ge+-A>SZ1kPaKHPnVk@J13nZ5DGe~Zko z8Donb*}CW&zbl^F<<4%>=ie*J;>gyx2TiE;yg;~u=J7o^Y)3OsM! zfgSnMpkScG%?iTidIxqX-LL}l!=3rNw7!7iEJi|p_3 zhY-hVX;?*51^#525pw-?+ZUQXBF&@Kdb0GKX5h?m20WoVK!3O2d}~UV<7Lg|`VWE- z4gt^hz5S*e&*;l^f%DN}BW<_{6e-WDlj{g2dah>ETLc<0m zoA!ftpo$QM#LZehnaQ71!+f!q$ENW|csQMly^xQhRZI^#{UGDU`Kl?4w$Dw2&%8VD zv@CqHoNas4n1LCL^^9faTS4>79{C)b(#E~>j@s`dhCY-$dv7Y`Mc8L&ywdO_$2rh) zb#65N*I}K>OHm((J_Bthu_|oWgOzEHe_kZb{FW0nf)Do8eek*qD%A4lrqwYqdg5m$ ztFWp*+LIaFgfM-pKSIa+jgK;`2Hl6u(k+{tdRsjYN`5^SdJ6jV?=YKmw=KODsfK8C zX8#|D)gknkL+{qmN|WndD`v~D~q zXXVf_rDC5H{*Ce}XCldhl-U?VU%b_4_JkdgQ`Ve-))W}h%%K2)k&3t)qRKr*vVG!1BVwt=H; z)#=*mbsO+M3 zO&XX2V5hxTaU0BOy)ThozhGeo+H~WujgT~Hu1(-O+kJKw7{aC3&4Eg<1@0KE)C#mX z99C~e8^atO3F_U; z_s)H4(QT*r0X)srz$QS^A_?ifS@MSyaxo0E=y&i`901qbU)@(M1(QJ0hmC`SL#@Po zea4it3IryfR|4u?$+*euM())OQ*!Nxf9B}Lr&B4a&>tBq9~hzIU%NK_vX8e; zSwurPb>@k1cc~(`W!;x=@efU=DJfzd@|KW4Rm}5$K==ORpw3bovCH&KaCoa!EF+ON zIe%u`6IW{X4MQu1S_<`nlcZwMQqj`%s>IYslQ$KXj|@0teZn^M5DEN)^%u$8pis?S zOGZc-(ti?$ycuOT0#-u8s3{R+Q=241znxd4T!O#gqD{f)gI0 zy0s13ev9DUY^qU)QD?kI3Oz7bW^r>tNK;}-YK934(*fAx{OTcYFQ1O7TCI`8xVG73!fd*iSv3Qb4SOaT>p!1*_cco)g4 zb`8SOEZ13@IznP17joubFb#|H<7P&mu@ z5f9|dp+P^nyGvk`FT}cYx@;mqyXq6Eq;M_f3vu{;zTYVvk0lF?2fD@r6+|nPxS93K?EYHxg?Dg6oXJM>4 zr9YzX*U^pXdd?fui1w2guS3;E^XA6%H}`QLs#@=50nNgClmElmTSry7c3+^_frua> zAt-`?lz?=JfQWQANH<7Jn+Vd~Dc!wkRJuDhsdOVPeb+`kzx#dP8FyUA8Rz_Qwr@P| z^Q@d}&cFcdnQ3^gXP?Q5k)6)$hxhKW|ya3}P=T?&4jMKgrPP6zeZwb=(h& zO|0K6n=83?1vh&QXDp7SB3Z!I^?1Jf^EMD!ICmSg zDXixk1{7*&fp3mvHCuFXildakBnmpX878#e%ksET1*9-l7F|$Nhfu@GQL{MCqV&hbvLN1x^>L>dqqu3| z_k_C<5fNpM+r}>4PNbi{%^SxFtpJN^hMx%X7`BKw8|YZRId+f-UXQxEy2oXS32u4p zq`kKKW(gFcW9HPSTFX?cu0FiopvPOoTGM zJktVItQrp*O>C2SE~pwr<1}|z+%y_FkW2JV%M$yvlVi0)ua_^uMLI^Yo6#JCK|G3R zATT7trYE%BISL#$E27)Zx7V%MOz*mEVC!V`BlW|~6pw$*z=6Ew(Y?gI>_p>Uv=hU3 z9Mwb6CE+_e%P@OtbJWhGqRtnxG?r|JU0*t-5>P!8Ka>*AD}{EfS0GvPi$Kbds@=5d z@+)YH@EyM#uiqjNog3FTG&BTXSZS&T|K48eR1_0^{yal5H}-%P`eg&mYCEfABL;O^ z`H7@4x+-sx@!&Zi@#J>?mA6m`Q5u}z9(+`f#chXwB_9e}P&rtd=?0dr_)yYq1I(Fu zE6w!#{FOkQy;bS0A^7xZ3!=An0j`qVh+&|o2Qk;m+v|l8E}}g07KF7X+l?DNh67m< zaYrenVZ+~qXf&%U6XdGWp>47@Y+L;+p0Ew%bIM&RHt7pUG8Z?gCa0!gdu8tyl3Xl@ zV&viBA^OT3aF9D8@7%wi0s<6{cWw9Lg)xJe0*onEf#3FG7cRyR55FW+Mp~xGkmbPl z#}}g=ri!E8GFa_3op-**ztDO9Y*+3rXKx-IOJ|}{NB!HkUZyKDMU~=3Y@$dizJ|?B zL5UQ0CzVY7YWw1${2_-X${kNq4P1L)Y-tLyoX8=tjon{%D_ZTFJLK@x{T?x>5|2!& zZBe#l&lYPRHwtkqCW?BR?0a0bEvob3?d(pV>u7|Ir?x=N_+-XK?URc^cpFyr(#h<$ zAq~}08DlDk`^O>ZRXkZqpK_%Xz3jKB$>oA`?_EFI(~GTDRqF{*u%IuY<34#ca@Nv0 z7tc!N$e1n-$Bl2;&uBId4ei&HKYh}cWjin=tSp~L#M$;jC@5%Xmf-yFC*GYmhDwyv z?rJ}Nh3(SpTx?pteV|4$lE3{YJ|5m|m219)-&Pv6jeA31R zo#=@rK>r}Xrx_9+p7v2RgN~T{l@!L*X6i%>OKd3FpXjs_azCEk@-guU#dR}W14-)6a&u=+=O zqzkK)InF3=Qgc7AQ@oMtrG zsN|*P%*irX2ehBo>Kv!Uy>a8SYg8l(hw9RI+&_VfXkmal(`!9l-R04Rtk&7W((Kxu zm687aF?U*T<9dxfIcNnOjuNmat3P@2_HM=Ww+|f$T_ASs(^=lRYUY?;w<7h~eX}FY zsB{`=>(hh}c!2v6AHNd;{c6YnH6}fYpp*9Deo0$P3lv8bordBRkcq>!&IB>5xI zxTe``9Hpzu^VET4=E5x;92;tZCLZc6>g`vX8ymo9O?3M<-Bp2)+uH@74{O@`>H44c zxmIs|O$W84{K}l|$3G&N4S1o&wRq9Wha|KQGIr=aym_pH-;rzf@Gd`^Y@w*kB=c+C zXl_!LWON@K^|%cM-jURwhIFhFdLFSh4i6f2_1KW1Vfn*lnLBk$`6r8or_vD8X>8ng8?Dk)yntgXN>6 z=QbXA5`>h-C4I+c>UUfZ*7lff$wZuY6X&@fKPvAQMvrKzd_*(GZg_OJF{$eN;g=5X zl?}OIx8BsinOwC}-4yFU>Oh3a3B6pX=-4?raygB`!g0nFM;=?H1B6!S0Q1a}2O*tc zwgP^fGTxbQvz#YD50i2k;0f?YiOB8#^%qcl>pe#b?gNxJ^xQO(2W))({BmWIKka8l z=0H0-^mxsC*c5`;zSL=nj1RAYc796oowBmBaSJCDA%K*0khJ2XDCh~uN}hiO{Jp>8 zSbD#MZ#FjX@Cu5FaYws*N;y#*8WBg#y8C%sgwmBY;LqxPRhu;5v z@bJ*Nj2W^u-_7J)%qv&cW8>wZ*0mkB6JyLJBDcRp2*?!+TGjydkt#}X;cEzk6hbqJTk zmlD33YG$i5cCV}O*6fjT44SG^4Ud}@=qb1>?R_5NRE*}aUbhH~nsFw^A$#)e&{5t{ z7i&xGov+H{Y+?@I(yF)4j0Vw{ulEi(SrQby7%tB7rHy_#S9*LO8*fJO+>dU>oUrK} zjUBv2b;`-y9y0O%C(|9P)a;~TWm`0KY8#QfiLS!@%N0UM^*ONfUvU1MWtze(VCVBr zTYE>e9WNvC6>1iOJR?{?v7=7PVMn*;)R}MkCapiJbpm-H%bGQXzO;T_^WMkXy8BruEqirs7 zzS!xIh>82r-(Pe;DmH96HLPmlSjOG|_E9N4XRvU#sjFuU?S~H^(&MhBltXh4G%eY! zd`Wnnm0W4(19~CZ88B&we%BA^5*|gV4TjeKshR{Y?O=p%;pk*Mkpv*YDxcUuV=!Lh zZh2Ndz9CkSmi|`vjvt1Dq*<5~sn#~9kP z&n)s^f4xhV5UD^?<;ZOLB1ma_YG$;yD=%>&B685f7t?cs&+fV(^rkj7s>&L}rsve% zcl%A`iN1*(MdP`@*C?Ye-;TK`7tPZVw}8*F{)mdF54K#3I-Wq1RD|f58?l^vJT{*K;;_heh`+~aI=7h6o|%f zlJEgpto!@OGhhAJ9^R|Xjixbf5I)CpTL+Ld5RngxjtUg>GpsGS-8&{tISAc1^z^oI zzdt=Qqo=30CwqCk)3pM$icf(19H;r!PXfL9c#V!HBCJO2%8n}==*Chjs@wT-2HElP zU*bOdS2)5IJ7al9^4Z~B0g?&i3+*o(OX%t8%g`Ze5DD#~dw>x>%s@8QRyScu`@j$M9a`W!iHWL@3 zqJFYeg3l9Mm1OT{Bd#3jqL7KZDyuL%v;3x#o75@IfN15Ap*v}5#(61o(fEXuC#@fk zFOQ#iH0h{SjD;YsSJ-3Z<53J>Th^y#NbY~V`_nkrGjby-0cR<7>MYA-HN~Di`#C2M zIHTU1zv}Dj30llZ`Br5(yG|Ux0w5y$xD*0hcYG4|myg|uNl8iZX1PK{B_uka*}E+i z7gBl~BJOI-si%!oz_-oyjiRuy5Tplq8e1Um9*5#ak!Fnymuc>V+78%m<#lsC>W`!O+ z@|;zQ$caft4XKv)^mG6#bco?X|I#G)Wil1oA#;n>``dF`0T9lCtp;4pVzlAD+hmGC$Ae!K88XsXR%d&EL(?HbaXVS zo6SHT3ipjcO@v|eE1aZ_iN}Ye=3GSd?O!o3EGVI)R$qanh|(IQ{_6IRq2v z0=;EN?r6twW20AVeb>{~$_kE40U~DHZs@j8M?)iu@pIcMoXc+cCv)qRURZGObf-R~ z`@N))2|m6pYW%3Pe%l(V@?w_^p5KiVZyw*=6pv!F&;V8SquOadzM_^?5Pa?9s)6Ey zd#Td-8@5zTzk?p^{R1||aoVX0BkDz+3ULL6w5f`(!Q??qlPd2jyiK%k3fiQ@!L2k6 zNOxu-Yhk%#F(?zJ79K-_H+U3>P!d^KrrxDltt`zfDi|B*g2MOrg<2sF2{P?EaleWz zj#A~UD5Gjiqq%8?=phr=og;kJVLdtG-Om-v7bXP*5g6B`V;wkn3AZ#hs*5&OQl`z^ z_R9Qa1DN^+TSw}u);!H6D~MZtlNC~l?e0igSz^BICX58k{VG|l>i+*(N8ps?#W ziO9>#gFs*`@6BD_o;cz+7cN`?hP^&~lr|!OA!}I|tM&BvbEZN=LRdh~$%XOJqavvC zA8&aQw%9EO+ljJJP|QG2#Xf6cyy^f{A8(f$sEzGGG&D0e=QP1fN7pVY7`aTt@-->4 zwbu)*FsOFCfZ_|3h(TK~#gR4Ykx`;~`qM5)f?9~Mf>xa2(?YAfN++4q6^~9Oso}g6 znSCwRleub2tLRKG5ae7(MvhuDSPWM>SRYxMo9FOhJVzB&P%6wQMK9P(C{_8buX)yU z5;}A1EXn9H98ZrkJEQV!oPxCtyG9a6 zRs%n3?w4T_zp!*_wl!n>gxv1sJO7>pKM-Iau68-7w1^81egvWCDS8M_^5cHv$d$YDU^X7CN%^ni|?gl0r^^s*#zsxt%2%R(?UvHNCF0p@L0 zl8og>wiZH^CwG$ofx(z1PhKMdVvRw3_$y9pmN^>&-{0>4K=BwCzNc3!mD1>Qd~NFN zd{I0N_3FRO4sKD$N3UvoXwI*>%4>!r(CC#9mhCu}h8{}gHbnIdkLN;F8u3N!& zJKjT+tj+0C!mXE#q%uRAg=aEIeY#yuQaDXimlliYBYoRj@mgyvm1S#-C3`{`^y=01 zG~TG#zWmHS72WUgmV4@=ZO9G8SZlOU4iECDX#TA?F(fZVw!)(*T!~BylouW(3M$V{ zk_Ne4a?&&S#OHbgn!ww9UP3{2p$;S!CMS-Ti~fEC1DzZBZ|(}R&%8$XFv|+{a9R+_ zS^OZzwvx*|?6#LALFTASRfKx7^wzDBR=gKAKNfGhoqNIWel`}@;jfe+m65Td10!9E zYtE?T8Qg>7A7BP;`%}B-*TDe+`EU?z+ktC@~w945x z`%!(MF1#FfCf05LqhL z4H~~ayy%=2%5Q&JCM70J3HP>8-G683;M#fshIs9bH$?r$UE#)%tf3V0#;credqJ1=Eudj9`ysJiO6rt*LMeS{EZ4gV^gR<^^By_^lv~)8-#WBMRB{&9&$AP|s zg9G>~l=eHu(h+7DsC{OU+zN}0JqC;p$Jr@p2{^*%Rry|tNz5*V`3;(!dmxpjNBA6+ z46ycsJIm+5=_xQX?++l?sH8$frRCWTjq5vfi5|iSZY5>>ZK8S5-gJC~VZDuJJoe}<|6$L%~^egv4NH7y$ ziR~9Kl%qh==se@F(o25*9>xzWFLD0fpiBj#Po&e|qz%`VGSR4K;vDkxG47bJ&)l)p z&b538AD*9b^P=j6QGr#XHskS0ksIk2zG%%OYPzwMnzbySu$8M+H`%U9m(E7#nfnLzFI~Ntny3bxGZH{lMHizV~b^NZGNObI0l2yLa@Fp*tk-=axeU35M$(w=4zN53 zty=e{Cy*N##6TYtHKZ}$mEg#zmJaAH6n0(8fA2ODI#Zo-d?#=_U!gJt-^pQNyFQI{ zq9Bwz?Cf^FzPn`59!W70%_f<7Q!!J4&PAu}>nWUOrxX$(c5Oxw{0$8bCMRtg^aV+_ zs*P879stnU)wPX_RO9f07quD-sRC#>M%v7o7S|xf z_oJCmpJ>tvu1FyHEC7xILeun|fP2qLpb5adZQ~8Y63V476S&Vig!@K&S^4KGuc}q4B?L7(!E4Iq@oDLVvgvZ-rf(`pU5x$fW>K)eE%in zX#4Q3ddJ!LGC#XQA)zM5`_G@&O;-ph88^y(yuN_~^c#`K^M|gPS=IaSQOWVGdJ*$U!5x!)QQYWMeWZ=7wtU%TCAJg6W^|2c9ImYxk-JoEX$JUrKKj9J8Yz zIsd^h%4|=4=tS(C!^@zdDw)<^YA)tSYN|oj60Nc92GK*@jeFm^o^>zb(j9!}UuaP& zisQ|YB*h!S`}Fe}9d-H?Z4z-;$FE91v8Sd02n<#ob}hp+Cf4myF{^VIGJ5xrL6z%v zl5?TZ^$Mkm9pQWyutE*^ zXHJKI>ir$36iUac>8Pk)9_F@ob`G9McD7kOeC(BFHC`yph{QWVvlOt3#s3%diTnlQYM{{v*tXcMg z3+WDcFrWo6Usax8+c03m+FpxrgAoRBjZiUg-v)CBo}Yk#V3j2j1i`d+O+S=_rMgDK zt>ow4*9h2?Wf;}DW^`LeTN{u?OC(NVVPR~#P5zp0EO;A1wPMxeJUnAZl6ElafGSb& z_|yU-8`L*m4ASdFzcCfJizK8#mfM7N{@p`HugJc%f^C*knU7bQc{B6|EP6sCWxsrFi=S%)_qX}b=6LY zCINpg+Ro~OG?Y|G<+Sk_gg78X#!!nsQ^C~{SuSIqLRm*Ao6-i@q{+fdAfUj^q0+}< z<*$}AIZK6|&U10@`0!(FD1-Ib0sj?>8F|`Eg~v4=TNg|2s9}eBF7yqre__mJ70bpb zTw<%iBw-Upe`wW~GslBi+22p!%1CazP08A3r!31MJ-SY6!N5@I|QBx zYQx3pE0qtP3_R zDMd?t=BA4|()aNLDzO`n1ayfgn}r+0zM;RoE z_F7)r8`2~g>{K3(`)I~megD==6e?58a_THjzWf00K)21lRK85BdREc6SJs}PDo`B78Sj*31B8zBI{?1x~J zrd$!@x?uq(Xv>iuaI>>3smIAb(}W(!Az=5OhtaPTeubKg<8--GBI5g?zgVPYx{;^W{n z*gfwnSd9f>@7E}lHZ&~=>{6RuP z&9#T38VFVr*{yYe7wu#3fH^&Q3?-!@h*V=8W(gQ}f3}3u(fCaQr37nMm_ZAVLIE@k zpj5D{F<1?gZ_s>$7YY5bOthZ_h5!Y?`9QKwhZs$~evp<%)teP@nbwYi^9^*ihT`Ii z?8qqND>8EM3U6sPH|i%~O*T+E*FFFAtuzO)q?t|!Il1cT38hm$tv6^KjKbchjVgJu znyl^Ff7&^@;bUQ?EbC7xv*YzHs@S;6I7@fTZgLz`Fs6ha$+nx#XvAFb9nIR39WV<8LJG|C*(Tdw`NpG#*rq-z1W%q{HV9xj*3*1totA|_N987;M|)NI^d zeAj@GhI;Ig)T1?{O6RK^LJH*~;pwc76HGN8x|+qSosFuG3(HRDJJWBJqjn(L3nRPL z`HRsg2$d0Gh5g`aHmFzG3-}mX;O(SSrD$L*a1N;D9yC3V_;1(fLJ9`W7=Aln~-v_l;oE6z1IQCgPzm z43(>;u?hrn9L%VK%IHi~OBHJ91DboIY-w`oJs{~ijIhuYUU<0%%>q>G9K>|o;9Nm` zY|HoM_~-y7`or%!!Ii6Cu><#_++9HxFCc_8+UNtTyz>BukkHZLBR|XtqNY`$fF&8l z+J0l0s__s2;U@qN*RTy);})@+f@!)IW||5;7{iE&xG$0i01}%KGeol`F81VsUou?a zV55~`26+P89F?Gr-?eHSt+hT1@b|yNN3|tc7G+-E?5Maq;lCp=-HB#+pZxNRmWTH* zpOcs|_H>%)Z8?Ae9tl!LULq1Y<6>;HHN5;QuElsbw49?1i<*?7Zn+oGXDdRU(aQ>` zjmbWmw@JqA#Y^hvz3zv_m@MclB%P3xHrBGs-`sgZ@8`Lw=oJ#A{)w9Ffbwad;oZnF zvIl(}H7Vv!>y2?`7Y94Ko?IJqyXomM&=R?(nwgx#U0Q$ZBIRy|GNz?1!-RCIqDEL_ zJt+JPriOOJVx#l+zdiIeD2ogowLH+ycMTn|uq&KC(lhaR%4U3YbJFCPnk(<9Dv@6} ze~Tu2!#37r?^o$nmG|aTQDQAEQCF|vS7~<3yfB`#NzLCBxFSS*v3;`U0}K4!@$VFVsIO|Ra%>*u4ht?JR0bVQGU~Hc z5DZ5>Nn#vl-~5?a_+y);h}A>2M-zX>ny2a~Y*ICt;R3FUh}D$cZdu9P+}zpO8E_ww zkBqFSv4mib8JZS6HuF+XpFVx|?3tRH8dT2#`#Hta(p~|X83?M1tQza<>)Y7afH@{& zF@|Qold|IrDE^>8#Z#7H^y)CsqP44D4 zu5ooi{?g>R2&4Uw%veK316gZzO)gC;LAg-hJuCV+?g*?y(~>%gkb*)e_rZo33I-ip z>@|Xbn5hNxhQp5DL@2fF(^#fm=V<(Chz=(ZYtA3qL8a`;YE&`9%U01PM)tWm+5Ts zb+J@O>D9>$$9hJojl^axf7*{V;YQ7>H|ZbOd2SL=eb@CQFe)ZN?+K5!T;?YIrR+*H8b$_; zYw7k!;T6lTt<&JW(a@Ox6jDEZZpEdi)^rfq%qx2@`VAX0HUM=wZA^`iN1ask8Wv(Dl`dHBN1cWZ-;> zRucL09CY*&`Cy)o;kGu0F;W|4gxsEr4tYj{*4eE;ZssqIz<~aoFMXC4ST-o~+H*^Y zi7of0V!E7FYJgE?h=W&N5#PMoo2|;WUq@*Aq!~lR{?2RUww72k6G)5GRV*C>8+kZ9 zc;HA#IKJ8fFdryD*W=bIdJg~RHnxB3Ms@P5NEVsQtS^XJ=O$&H;UII#Q4tzuo z49FQ8&I4ErC8vcN;(l=d{%ow%YJwMS-P1bqtS>;3f`)eXOB|A7PYVO>HQV3%x9GuU z9-y!_qj8;gYZa z8}EE9=8aYYCmI4oVZU?~&jw6TQ`cggFaP!H7Z7P=Wzp8|1A=FJq4(o)J~myR*#9wB zprPR?+70eeqM<#6y?|PPFD<5T;qh((JfaK`#;9bBh)7jR3I?Cvyt{&lgzC$SQ2UkI0db6Fn(IO_||ABu`l{d*PUXB*(sqlz%kz6E;7pi_MX9sRQx zS}SCvOQU7XM=u=gejE;8{9QCp@>wH0gC-@0RQnHfkjYeM-Q`;l$iNIf82h=77<6=W zAc|1~UI&P4h=_-Fwskg(`11MJb|2<10e^nw z!_O#TY&0dI8zA%vfASuzG|<-rQ~6`8d>Uze6om{Gux>rRllMC=`{%$sWdu2IsYiWZ zm{14HF8LN4|1H!9bk2v=-0h#`1%NYrNvgBMF~(fIHVen* zqry>S{md_HR23EJE5tj5jR)r%U$ubToVAT zK|?!_Rsf^D-!cDw;pDN_V$^b@;b5>-V4^-E(eIo6rVsjO4jA=!;|S+v(=Qm;}YjV@;~qF~X# zuZg^^X$GHDpJ2lXanw4Y z;ozp+&AW(Nh#P4C3zxD7%B06wT7+js^H87lHQIlzYLQbJ3`fAjCno6cYCU<2hB_tx z7{I@foqtv}&->4Zz60{>pJ;vq>HosB{yxx||LBP0!|OdiU~EU(X3c+oI(BLcrOsbn zlVgT2{Fq}2ZVRGvQf-=FECzW5!qp?|^k zq2Be|DJTwQInhuXQS#}#Fr9*!WX0egGn4| zK0QW{f5aHW7jO6tzD8YB&)&HhPW!9B*1G5PfzX5m=v3Q&5C4mJ0zcFznyCMDkY=do z{`<2x-oH=Ozd2Dj9df@J%0TKH?bMVULtO}Es9q@h95m$dO9gNSTc21Wj>h)F{ zAE9`#obUb(0PMI>U-vN-c>3JG`!VwLfxsr{c}4i&d7X}=pk9Y} zwbc7>3V}bS7h2YPLn8d*@E*L1pb_R-<>l8?gm zVgC9x!#_VY2e2V5(Af|684|o7$tmIpK9n@rss9MT{@Ncsj*W?z!Z4$Xg9Tgv{OM=CjP@T^omR9W z%;c{Pup>oz!_y=9-$wE8s-9~F=ZyN$SH8iQDE$`*6l&*mt;)%k-1^IognGSyr2#@6 zqxhc^EdRLH(`y!RRf9S;TIJt>)ab8G2&K~pOPit}mQ)8pP<_aMM{j=&^6AeW|B3Ma zWl$dVp&o#p!uV}}ZWV}b$bxnG%Xe|Q&uTEhbCZF+JB5+{k73s{+O_&?2L2C$h>9p- zL}4%F17F47mFsA)eg87c{rQ;NC68`mw2>TZEj|o5>*H=O^V6gx7z{dY7#AR}MLfTNL z1eU?{|I0H_RiEp(KTrPqSV9bv`Y_20w)Ka<*Zu3mz^PJcR0@jDOA?Ua983O=vOAXp zSG$7_buXbEV*K^!gmZM`-wxRh$Nucj%WZE=Jfi`=4dR z4OhS~z|WaH^)%S@NSENUtGh{9RKz+goHC?6!;yu^QI)f3@k%XiwjF#knCndsj|h7A zQjN$d(9l8~*NRY<_w^U+yKW5-l%S!VbdFaw3MXEHePoxPU3_CV!E-n+nHhfNh8oA`v8z_gFo#>bVuw(rk;gGH$u40e zvlDvq{`vJyuk+t@XC3a}yi6Xk=X&y;nYk=t)Vkfe^!_f(pun7Ae+lJWKpq>Stw{KZ z#TL(tIsNEsfotZ=ciqvtF0fP{Xtfe>BW;d->(yL{(3q%Ed*M!8{n;_#nwR*w{-mfC zueXYI_%<%C5!>~JLKji<>bf~E`2$Z}G#i#?aZ;9?OtWUbAeRH(+z>goE04d*pxobM zwt?9RyC9L%tK^v_s}Md3yAi@{kRI`Dh2CM55`nK#SE4s4nav~h>`Z(na=(zzEHh-( z^`ZswR(kyQm9b>RnfM4R*hy#`g0o?>QKbC?SJ38hn(stdIdLuZ+EAz0-;CfhuC}cE z+Wh&th3U9=6v?64Ht&*&8gOQohx)Zr@Kx8f>|_=G*!pU;k|-<0lbD44`bj*>>AZIC z-Ipvcho~XuUTBYc0Ttqd@sQJq!BdlFC6jc&Xx>uBp>Fkpg>Ej=1%}sXUAB*^5qqCc zUYU)Mel3Za(8-^Uh(l*87uDa3JdcKReFmH)nvJNDS1BE43MRS@EFq_;BVnKek08x} zjdHr`LP+W$+nAX7gmzGf!+oU-UV;IT6~4kaprLu>~yp-fq6}=o&PoPKtw;_~`2m&9!j7j!GQk?w(A1SC-r|3AR4>MWgTMKm$hDNj&Si zCh0D-R&s3jsD8$Ke6o!aO}2uMF#_x1?1wPZ0Cr#9EEtAL1fluwf`%;W4Xlfu)y%59H!Lz58X9KZdQFE%eKuosfPDnZRYO%!mOjyY_!lg8e=sascF}FYsNPwy_I(~p_^BDgS<>ftaZ)o=o%NH zxSlU^U2bGH!juQ0usO>6Q7KaqpR;qtp360MM7vbydiv%yPx&RqLCZ}s^ED$J6COn0 z-m<4d$~DolsJ3WqH`vLg}MNN1;Us zC$`xL?@{udI&M`n>~`x`-p&$M&+AchJ4|6KwK^Qj!vvexxa6La`WAFp&zyu^N*`j-OXA{CqxeVrVA=@ZAWb(E9-f>1>1~t$ei~at&GgvqGBnX#h}$Jf)edQ z2dWl=Hs51)Sl~3jJBvW>%`H#+QuNH$*ts3zFVFHRQOc?=oTrPivKuueD4ZgQ^zx6a zsjFFuD9PnP9LiVjrMBNgFbFl2Xcj%(Mwmv8_{uNMGBywSvb+i98@C|pHNM_%E$ZT) z=WtPL^IAbWbD4E4e;>DMXapixXE|JTh*)NhVELF^)=kv(fca5pjr=3KN_?(a0@x_= zD-I1RvjodZXN_D-LL5xoo13kiS)9^HefUvu~q{C=pqH zbxFmnoPYm*fQE79CPm%wIJrtE^W`Xmt_E&q&4m&UL>nK4!U$XHs6fmVw`x^SjF&dS zrdWyvcC$j1V4hBp$4UpcY^*`!UGoEORX%}Pr`x=pvjtwXo7b#j4MYiaHm_=LZZ2~> zA~>(+q3>{QC03XIM-#l_Y7%YZ*uvI5OdGj^+mX_#&$FwB+~N`) z5QnyHY`mX11rfZsC7js?(Px?L665~cZWrJ${3so0Ce)vfoKVulz zD{5|Q+Qv;UbU!HD&nTj?s&AQUJ3Pp-#HUH=o39a9(9fUCj65A$2AyqLx&0s06+~Vw za?or>6K!i{Q;f8=#TUf&GEWl3NDI2MUv*o1o3=|eq|8vPGlIUC7j#TA6P#Q$PB_vQ zV7GuvG4e_%zfBP*mhz)>q(}0aCUSFRbZ5UWn;tI-2n!e8~Fn7XF8?htoK9EaQW^E$YI-+{?m2$50zFG7;nG=hR zppT||>xf=sio#%_i&`NtlYfSa7!`1!b>Xh4Y)0u9s}k}tCnoKkl=KrZ85Y(nHiZWp zr64+5j;~dW6BX3XmKBE7`^FU`hwe=w&YP9|dQKN)Z16}sf$oEyZEVHvwE!Qq&%<-e z!xlyd1S*Rzc9uay9B;DdSnZ8^F`hU^Ojj$f_HbJ}y2q&4QyG0GmC320a10vqakxmA z*^OlN%+qk!idr?_NfmQS#@ZB{!2UKHaeOU3Mv;v3WAR#uzLT)kA>E2&a>W1<(+F4K z$T)uY1eHtXc(Ox-l}j>*X+OVQMc1gGoboI(ffDJ#DpZko@|5L;Iqv)W7$$S|*Lm+0 zRp@Tk@Gof>e@SGyO~?H8I@2)1fYlOnWp@1VJ9_S=leuFT4c9^{L&X>F_Z_3e@6rxd1arEx%mGIKf_|G?3@g_D{ zaaqq;&9)DFF|u@|*E|~R<0)xXm8f$H+vYL0HUG4jHrSB$1ks?ziBm!_x2&r3imf`0 zWX|aqZt>=n8P`s3XcceOghQqadDD2RTiDM2ouU40#%WxknNETjg^?P+_m#p}C-#Vv z2LE3EMGaDPzS}limZla}iFZ6GtS78`G^IxreVSga?W`!uqGzREp&~-Gc$%w6t)_kU6U+w_rldD}CQS~04bW8w-lfwbBV0}{QoXDKYRkt) zH^w!{64Rg3nlRLMDd<+PclOO#iih_ld z?F5mh+ftr-rmyJmsamyS1CFSzFWdTquLNyKPhBon&lhtRSHRN-ahPFiRb6`*tgqgz zFjm;JUvYkAIT3%PdzsZxxn6AH#!cO&gInWgD6%)7cUfK7^mlNt>FJ{n=U3%2dRqJ4 zW1`@5oOo7pMNfyhM>b+Ho~P=rYA5qb$VL7xg|#$)lFI+)+_?J0PmW;Id-yn#e>^F5Xz)?3-uO`d?m3YxW?p)QwaR{g<<%hvw22bY zV#}<{fj=6{iwd1-xo-|3*B;K?!nGy#G9(~z$?|=ExsbTxTZe1}DZMt9mUr=Wokd3G zN^32qr3g;Zr#RE&49tf-&-E*XwU8>N1{ZtwxqB9QT6zX}4mij}dHpFOFk6*mIui0j z@fw=*OjGp~_@9f}>4zANRo~+>n=6`m?|RF7h)_UN`q}k}2)ZIyAv)3+CQa!mRSEML zer7&l(+P=hn>`Aoo4vfLNxF_4V4zeaduLCEeO)8UOntP}F=Y#5miMex!baQthVGJD zjI0JmZMYR01adK_Mf(2wGQ?;AIFD=Tl^I;$y^)ZoU+;Twe1V8UMI3Q@v zmsD(rex3K%&A8*OR2?p&x<^&ALUc=f)P-h>(bfdA!B!RQbGwP#7x9t?1ocafF7IjP z>-u*$Fobp&&_}FC=Xa&pP)kN#lgWJ)z0|88W1Ls$CK+nR{%o!FmWfUwCP5*(h31Xn zBleM;!;jv+F)hG+iiV3egL}`1e?EzeSY-i29OfddPRY(c*n<>^%{tP*D>|MO! z8I!@CF13<|J9>C-UcEgMt75@N!kWS@ zz%;~By%*mbZb|t3hG2S*ra*3RS)6$21s*%i3 z2iYN;UlKU&jmWB+Tk__u;~))UR>{3!rblhok=@Uc&tom>rXHS zR(vfnER;@{Z>f0i`AC)CEE8{N?|96yX}+DV3)ke0G75yN@HeaN=sCQe+a=qwD+32a ztqyC~V^jxR_bLvKXCEQd-AcA@;eDvOm+w!%A%0I_qeoXxV_1eXBJ^{L+NG*JKGq~x z2FsBZ_q1KaHf0xW<0tp&4(AP>gRL~8A-25*0V2QU!C!lljn8+*S7c+WKIqP~k;!x( zFv*}@{p5vGTIv!?)*#E9c^YbR!Ciy#q1od_pHRwcN9ww$`8l_fg9%MgJ`fidpMM<~ z7?|s_Vgk%Q`)vli_tem0mi*ifrxJy{NSuFuEiW(cIs@#%Vd{2BXzgNhOyBrnEIZp{ zwdhksvDn7S7cuz#`pOUd{fZa6dSxW`U7Sb>@mS`d#iC2H7P`$v=bBm3rtcJmGG?q> z_tkLBM(5OFJU;Wg#DX7EmKRwT998l-N`XE?nFeXawJp-)8Y9`Fe7NrCrdIm$$2m;y zF8%iQgpVW-)X>x$Q7rYZ)+bTy=fg$RHjhO_ngLiV>_ceVCoOzMF}UkVL(z3->CC|d z(LtjV3PW|bh&?B*-4C-v{B`(2Oqt{YCqCGMb3-!bXwQN|H}pc8XJzOK`t_NzwV4cE z%*;_KfY53FuP(PLTBiKzzCgv;bg74EhUW1`7!2k)0s`yv#jT}53xK{Ts#(^frV-)E zdVz%ly788P6I4)C6!ziR?n6y|IkZrxUWUiI7zEE$VHZ#bp@fszD#rcKOe?#25`ZjhUp6whvw1!qjq23pdbMcKBdzWkHgp_Nyw`K|zylv;1T3rtk_uFw_i9yC{JGZkLZ^Y2b( zlA>=Wxf!|pwAc#Mte0f_#g0mI+j-R%3^ck#V?66-j>72(<*O9Mq37dYoL17}y*@2E z-xO4%dDu8JLR%cjdoOhuW_#eDRhXK~$jC@zOpUP{#$X%m+RA--#zy#LTl0j)VjMW{ zoal|efN+N^Oe&$cgg7sy8V@eo&VRBEtqvT>MxqZ#=?m+P8QJ$9JKYG-7X|5AuQu|$ zDh`94>c9j^qWzIGcQpSzgK^=exS?OO+EohctPt8EzcxVg)xaGkv-H-QiN1K-hORdQQfv5X6iAymh-+{lb$VDr-#LH zCO6D1)_pM+>5JE|#M4SqHbP-|5>lEie@5zc!SpK*4Zn)^Xy(OM4l46t76U+jg`Q`pgMbT~L8WLOpn|P3 zG;Uun;KQ`%ECBH6rysAV{6FlyRX|tW)-SveTQN|;pp;NrRHQ>fN~A+lML_B9G7v0M zLIDYp4(SdR1SF-qySw8XYyENW{qDWL^Io2t^ISYCte9)e(Q}O7C=R=I;7<|_zGUkZ zUVCxSS>eYWw@;k6_5KMgUGL4z9xfSobw9eCXVAz6#X?yWW#Xgj9<_Nd5C@u#MJ-WrCbH z8pC>^d!*grWUpnT6jbnQKusLpuPgd^+#c}Oj$%ur?oYh*tK@#SRi2YsQPsobacgOP z!k~{9y2XEV5Fzh#`Re({ax#uJ9h52pJB=y54RD^8`m2d5K#8A}ZI?d+@;L%selz~D}A z%?Cb;4xi9KD$4R_i@4#%pdf9aKQsbgLPCPMXl(%C@QDR8ojhB`k9VZIlBwiH-^j=Y zU8m>&IAHV;a$QIKaC+i*fa!! zE3NBm?{YhcidVsRiUfpQyV-o)y!ICUkt>Md7mU)zl;v;W25a8~at!VD_1}PozkmM@ z)U>D5uRd}ml$KR1Ke~26bNJYTR@C}+TkFmxEe8A9U$eFI;fN~-jSC5tUA^H`chn? z5MD`g<@P4$?G}^4id!&f4a@uIxla-K-L6&iwR5>$0u{|Ds5yW*B*w)ZA(K&8=P_*i z1|Z{S?s0s#K2S2_06GKU*NdQ+ZewGk9uMUl)<>m4O=!XhlV&N&5Do;&xO(Sw>AQ9|q7sJtn9c zk@uXFiRrZWLe~6K9BFnnoda~HDBYVUOZMH;5MW-n_7?IqT0eqtNvuSV81)z}nju%O z{zgarjOnI1`Z8rGb^4{ z9}8`i@854%F5Xa7JBEY~Lz{F6G=&d(@sqQKL)AXOo>l>R?gzbXuTFKWwdZHuy9z^qAE*wV6Y*RhkC58F)3 zIAECPV?Er^@)-&LDSjO6nBb{MK)&Q0CHszDv`ve@CTUww| zKO3YtKAv8``o3N$kym*g_bg98ND4w}gK=`WMN?}li$-2XWaI#jg#l2cd~hCwGY=qn zE*})=f5Iintd_;-BgTP>7*a2biCRgIlDzy4mz}LCr}SE$#cC9VAozg5v#PI$7C|il zzE^jQGzIQe$1w7JTUAh229!;w@6Qjgv9aN-01PQGahg@6dQgJkp7jAENZUoUz#95Z;};QE4J8c?Ug$svyiUE{mhVQ{-M0WO z0Czc#er@UGFu-bIVF8%wy1r`yu<4AxzWzvEm=++;DJl}Njld|Lcjbdxn;oq$p}Y=p zCC13}z$-Q-1$rzt8R+S8+ydAfZ^{P&vQP>HT=+O*-fH<-BhT{bWgpYeQ2&EaisI<{ zqPeN5I+#5rEo}j+Vm&Wd{5r39_tQ=BRtBU^D%aAiXc%xYiq>^CLO`D&M?-M?e66{; z8Ppaavb1G9l^=5*7#M(7(u&5Vp)g(f((`V<&gNlS}@D;#v^P=(LDts{Ue z|3DWY6NK%Lz#$a?uZ7uJFzqi{0w0b{t*n+|sL^O$SlF<`F)&=?An#5l=-a~)920df z00_8$U?4xl2eSCk1Hx|H#nFl!a4q~29jyy+A^!gUCdJ#KW@HMt&0x&!S2IdBUZ!v}sg>i^?FYYUo!LkD~ za1rQq=$dguRawzegCxxE37~4JK}6}~8Fq4wB!Sk3rfEHp0j_&^0+(z7 z`QXg!Qk-)QiIIHZEfo9R?4QW4ILnJI)qS**)>a~jHh6)xc+Zi(^n`p_s1 z?nBpKu6@f=WD7kVMcgQT>!)$?VmR+Y1r-c#spDC^+k~|C?spYLHy%7g)E=Xe>H0!o zF{xKMG;O8;$iZny6(D287`bFTfHR0$G}UEg=V9oDFcw@^{r;U?xY7Z5yl>7SXFo+7 zKCJYmk!t?|GaN|S?qtE;Nd0@15`J{HfN z%(@K*I>I0@i~8G#j-Z181OmTeHbYQWQPE$F8qk##)YL9=h3Dh|W+4jz%1*#+08kcU znb4etYOUel{>#hD5%|!yQGA-}PU#?ub$Aqe6iF2JsI6?knSd2oz@-EP1QGa6>_x)Z#AeD@0)69Me5Qz*;mn zvyEO%DOiwb3L0@7gt~ha-^l~rK1*ht`SXXdkxIC*X0{_jMH>met>4&x+SAx>AOa#Gm zT+Q#*0IX0zc?Tg~>73n|ObNUBwBaxBJ($IGg+Mk+L%?W;(sK!`eMo&SP!H$=86kZG z1EE7OMnD5dh>ncgMiqr?;ayzGL>oHU7Pi}ACN~x@+35%}tEClmY6Za# zz>3gON^U3GK*);NdxBAeO~Uz1 zuE}FSdvvB0r1&V&z3B`AArjL6-rc$6QqyZ@~yn zTOM>~3w%1%d>ZeqXW<3K)&o#X#cO3Okq1f5D=tA}WHAt`^e9qs5*;rEw1!4S61Kj# zT3Z9)(lO@_`9?-w#(al1Hk_|d2=m&%xa_XFq{POqb&bQQ5R!f1WPsd^5APL~?gMzzy z7nB1yvO)YV&R9}bg>mJ*iQ^YK9WKx~n7c%YTi6t@6onuKBxXS&gl$jh$!ec~!~*R9 zdve}9aQ(pkK>)@L2{^Fy{OHhA?VS~qUF(J@aS{znS%?NPh4T{IzmlGBAarOt7(All z?P-%QzevH0+ao;A`=V5Ia@vM;A1DB@IOo_#ZiKB@L$5U;pKU;jMY$CH&IZf^JgDmc z_ZyNwvw4%r(2~mjZ!U4g41`vUEG+Pf@-GKT;UmDMJkM^d-bjGkK3oLBI}FXQU`KNx z`G6um*W=O9&_K^iFxUfV;0B#dX#-ubp}-6PCo(xPA$VvC#2EmUil?(W(JA-X(+*>z z{Ot;e=>{17weKgLp_t_qmIp*5E#Ms-@gKB;*IWl`erIbP^wn`P83hGP*f8+X;)8tEi<_45*;Om*<0f zw`ldN^&q(k868y1;8Y^`3-vhCXM^!YJK~Balk-ta#5Mvn@hl&Nl_rBKntBRggbJ5^ zP(KFp*VCOg)zE5R?upKz#f;!pQcM)vL_imT{{X4(4agx19RlQAb#x^26=`x9@qs=` z3TR)5`p1Ci0^C!N2TFSu#hddgM|;&U+8@Ok#SSCTD5z%$FqW9nf%pr}ivoiIgenO$ z;#!*qLzvJI4!|z4ycKG>3g&*q$;W)gSuSt{*)f7;{Dl0IIyi#xVRr~P20W->1gHy4 zR3kGjLH+W2qNbJ>W|eOb0PV&Flmo=7=D+FCS<|~)i`uC{7~k9BvZqG>W=ZOtW-MS) zkRDbP7k>>`TC#!jP!-5x@_P)%-+_+_*;?b@W3Nt9^du;=U|!S0JIvaowg0=1FdAY3 zK7w-50uj(+YyoTrr=|HJ?BX2*E+6zXC}Mn3BQ;g*@13F>=k%xrx) zP#R`LLjo23w88?IF>C{lGq~0$1Sk+4LLSJgqx16qx6X!3-x5aeeOUhw9E1=w3D;P^?cU3*62Gpryz zdp@mzjIwez0OP_I1I7{v2P7QMd6lQ+47~C6B?OvQ@B`5yG7zICWGR>vYzor$;?08K z2KAIMcO9P9{T8LV>vJ?T{#UQ|w{j67#NM2vr0{)L_oMzVa6258L@J#+0qK62sH`*9 zmI_W1W)8#iG0iL!9-oi^fhRGe$~SO$>hVDGa$sa98r;C-LG)2KVQvOk`9?TuNW)Pc z;2J$nQ-OMgHp#1~nipurQpMqY07Ib**8<<9q@?;HbTQ%K`?GPCgoD%nD<4PsY3{0X#dHhYCs;_TxNTpI_M45R4i$25gIl202() zcssOZL;mU-WGErUenY<+Hi!?n0cYsID`&$Z&I%WBn9+a{oF)JVZwk63^y&j>8IWnv zs$eYyq5&otFyA03-Q8#{hANV7hV7jV88jKzE-D<&U1ZM2O z;nlPo_RoeO9Dp^z+PSXS!&uZA7?cUo8|sST@)Vw==e^1g9Y05j5j_TTR=rJHV5}EN z0}R|QNKR(9#Ed#<1t~D3_9H^e=`GqJx-%!a^N~FTXjc8Eu(#*HR~6LO9t2gY|6!Kk3L#XM1+o<& zjROn=A`7{bmnR?y9tB^U7sOuMlk*O+UmNDaLYS;QKTrmvuVnvQ&g_9SM*8|1@PMp= z-ys2+l#pA!kqxr2Ni~kWE0BR=W%i6l9kG!*&#O*GV!NIXQEnf)vF0Fm@Vt z2SKJdaWs36<{^BtY}HX zzdbGuFN5&sT&9>=>1k0onb?UAHs*q35*%Bc!hK>SXxj%sF);h9Fq$~>*SmA9126=P zdn8C3CD+Ut=yVnqmN4)Go6tN83c2wa#*ba$n?HhmqO~8U|B`hUM{2-xcr6@>W2#lDJ&h@cNF(l<1O6IvGt7@gOvv|gbw z%q9H0i~L$P-BzHQum@(~wEevmh*Y)A%81acg^-JVkKHIR5R9$bNfUs^X%6hX&u%mn z6@W2m)awOkyMgqu?L_!Bc;SuyX!+WW8o&|+tbE5ONkeflpEnY;wkJSWDKS7>T*TAg z&rq)#2L1H|SJiHfqns1Xh|X}^hcfBVJsZ^S)XoD|m^yg*0Ocbv;&qQ}JZjc)lpCI; zECOjZ=bgncG&StKh^vN|mi_gLIfkYb zzpdU4y$p_b_3|`qW3AGdyF#8j1!o&+4Ji$ZoASmE&N-W9j%A1^;isBV$ zz}TUQ7l+6!>+76X(&3;+(-9I0t?00Ay%4isXst%mA;2xQhWr{}t$Un=M|l6nO1oFk z1Ym}0rO*jZVK^N^rlO3je(SWUM|5u83Ot_&I^rg zQO@$>969$L4{_~Yg@uHIZwFz&@x%)lvggH;)3*K0va$EH*8Sn@?oq4}RXL0GQB=7cK~+-*hwtD}u882B|1L zNJTT*Y%Yy2qELX4?8TN>4uvTkfGYv<*{+e@V-Rz2k-wnJ6S&lfw!4Q@Z9`EFxZwH| zR8lsmbe8lqeRvkb7PJ-PvJn%lu7NHr+#B<<#>Bwq18>8rs$1G|;0yqOkr2bzR6&Zk zGexU70OGRE832oViK-G@4T-BKjIeHK%HLg*-p#1v+dK@}-zgm_yEXouLH=ky-+%-( zHS0zjaF&C#r)8nEDQYCk^EGZDL7PoYA=i} z?%FsisPzwFqId_KsSklxP(ax)R0r%&Vc+v(sx!2H=tvUu<$o(X$aF!~$JwBHN>o>7b{-(&xPfFj7Aqw(r__zfd04rUv6!@RI6Dl`V; zTd$OUgJ${8QsQ*quQSp-J{xWs49Piy7&j-w`3s!tGcNnU3~mJ#xHSA4j-=;MWiLOQ zM+on>Jn;0RooWxt;d|X`WK>q|nP93x-d_d5rp0hWqQoBXh0K+)uw}1Hj4T{j#;Sc8 z(6?FW7oNdqa%suy?tnxj56?h8Lq%En3Yt5VaZT(2DqFh3xiXDa%`$j_X8}iG?6TbA zVsybaU^x=QKar~fm>uU5=pfq0sNd=n5Vl7hTv$&=Y4m*=j7$N#C=%Q`B`yZ%@ zwLAkU?b7`SlIP)fkBe^ESak*as>7H-kv)K@fGJy2QWCWzKs*(8Mu|+paY^!vbu-97 zMAw4KbIq}w?b&|d+y!1)tOa(hTxeuGeJ1wTG$=#L0;`jevDD|-1&4l)keHH3N#N>Y z0--%r-=3`1gBL!5q!TpKDR5)A(P1zbumFe*3VU~VRu7G)L-tlU5tI*dD&-h+PG2}p zPyy7fID?G>JUpvyI&hOFpYFDFi=qh(IC3CR1pfqSszyH-ii(;v)}sP&s|?*+We7y^y-+e>rR*Gh z%g6)!27PUCGys4*F@M3NVE)b{)Ypf7x`^8+*91WGA|WAZmF)-Bj6WU;W!1civw>qbp{K8OU>op15!r?s@D1K^d9zTECSnTJ>;GUmSf4((w8p zTV`xM+tUpPM<@ld+Q8;$LmjXJpkX004sax207t85)N~bVsWRQ+41$+s}_Nha018^70%URKso(s*RxU#dZ=wp1wkXN?=dbU=AU>Nl!>@ z1C(NMIIfvOnHhZj2Q-lj;9#%m-#1|wB2hFb>I8_8A*7$B6l5WUp~Ch=ED_F$*qJjYuFP9p3DjqmEWed`B!S~&EP z_D5fUc z;XQo{Cr^N6-Ll-Kr++LNCFNBRpGEq zT>Oat5lTB#w2c&@K8oT$Ao`N;1w)aiad4~+^MI11j=)plo5hru4tal^4v9WN*{%+O zF-T;x)DiY>%QLCIh%bTDHFyH0EcOjDLQ7veo9(mLG`ngB;fmB|s0OGFx-iwT5 z44#M-V89f8fpwl|wizf3A$@2wR*#Obo-ZO68zpo|?dh9h?-wN$E;XPXp{c zq?s*p_leygznHnYQrm-wU)4>?T)Baie7A%g;VzVcm=)?kvK3C1A|?=OFI93S(=PP$ zg)!Ync`KXQZ*Y21r;W6`i_&n!3((*=Drb%$SZi% zx!_Y1oWEYWy9F8T`*3pp@ZlxJLwz!FX36%(EhrmpRYe?yKX}%Pd8S6s^RwWIp>IDA zTA=PDjOew7ZAtIPk7Ks<|6`_>RY(9$UACK>Y-l!U?5Ws}Obohpnob%Ycugyn9 zt_n_8xUD7>l$1vFMo{s9YEOj=-Uqj$%zY^A3x>9-O--A^^BEkMYzxB^nn`@3QZO)?W62}s}2YHV1USD;cm6mn~)1w9|UqS&1hO1Z4 zfxi!$>x@M$RN4_x@P+Uq-sF!)bpB}ij;7Yk2Ho=|_2bBxZr`lT$;&4%+gEal6#x;T zQVvGkGmeBny4pfk_O!z_#6863v)CX_r{SM+GEW-QF?6pEW9lJizG&&9({P)%;I(V) z-ku=+aIRMYbD8YwR_a`K79qXxCC^o1$cgTcEnD)D+n(ao&psWHu(z=}(5;Gyqfomr zd12{u%(ri*XeG$STTyukHBokmPmkz%QhW64dJdx<7N)0^6Qc%&k}utodGM+fhdA762@T{k;KVQ#&w7lwQgdRno87ej`(d5y6fXGv=q{eyt+AX9JV{> z&Mza2_&!_pc|K_7?y>94r}xn^#ft+-a`!ixzl&4<;I8ywsjoqHPpt zReRiJ#9gK!)puu?s4E2xV}&oF4n;{VQ)bkv|6q`r-w&M+LI_=UY1MfiK+@B{=L0J~*GkQ2Eb zL+L5)+p5p;Pr<7mN0G+E9|FWCiBX*yrqVyDatx10`9PTi*hdukGL^R%5}4_=TnwiU z%ZLbcnC9P$+fH<6zWa(+c+Oq(Gw0H^rOCQwF;e>ZUlQgvr(7+~A&0m;_D35kC9_5$ zjtmV96pbMhSeWxukmD=$;6q+B*Vh@MFCD>f$XwmDbD~5OA6J}_Kf$wl+h4{l5)PS; ziUf=7vaA*NWwgv5z4|@y=k7r*|BWv5n;ZBSHt_mj@)zbKl3r*_mN_@JW_W~ zrs1GT_7>l_Vw))>M%#TI_YPA$XxV*y60EL&cLoGyH@hGP|%%_5I=0Ln)O6h zMP;m*bXU#YwAb%t_R{_jgBfL<(?0qNo>1u_crH5sGH|f$t!uK*ztyYrfvRhj zGXS2NGBSL4GvH!o*z2v|rS#<+4nr!Qo8*+T!)@7T!-~DoiDEG!Dh^1DIis4fQb1Ke z!?&Eix8?qaPv^#thfbEwUy_L_RPSezxW2JYpoTx|tWl_+-j>Di%_%#!jl@~8!}R6y z=&y}N7EUx4L8g-ihNd8 z4caCPvz(u+>Q#-jop2jw@19;|)g>r5)(GGn+$HW&^J~raNEzm4R8u#oH<<*Z0W*K@ z4XhFCG97Vu4v+j5`*1gjVd5~?=ibwo$iA=dkj2#m7$@Ie{ZbI?WJSiP7MX3i$r<)( zDxuJMP(Pm}zA}KEO;2g8Eh0*ciLO?^=h|e@z4p;13!YLB=c|th>T2*%kMH^!%!yFX z9qyC;@?ly*+0eVrcQTId>|#OuFi+aqi;qLp*z2n417ZUO)-DKryG!?j_S9=`)*gny zFRGUnriKswkc@owTR~9rBA@a_&4v2P4%bI~DH4l8dYweg3k9bFf(R!aYJ$ki?3265 zC#gdHm8M$BqjD|>uG-gVJ834L_p&>ywjOWA8QR0}ZgRsXTeN0S#_+L5ut{K#L0I|2 zdB)6%td=2F|5nw@28yqjHTf59Tl5R6D2p|mP2Q=#|6G3c7LV6b&xXVqn%0G$?arp{ z&K0r6im+rZK8nmkGNC;NPpOj^Ie2IF$R*d~TOD2)(dn+Q6nYPuUnAArK)C$)zx@e zwrGjP*oNlvx$fgWqcy~gQ;Tgq1~&`pd7f2-o_@2Wx!wFq#60y5J;_6?)7uBWQ9q1>~n=(YW>@an2o>=$)>E{N9*XEVQe#B^mz zu*u{}Q{H0s*35K$o3FBcmCS$|`%^7F;XgZkR7LWiQyEni zKkR9-ZSkC3C~ub_Qw>~PxLC;T9;9%|u&|fwzO(!1h;pA4qjmoa(;taaI0rjcjFJ-W zbQb;e30K(Fug)AaSl`}0SXQ|8rq?N4dABR?B#CS}M{U(?Mxcku`e3`e19P#_`7W=! zZp+N2u}-%80)dSycy*-A^&uP0a5wCmrl=v5$ z(V)?uLF6Sqnl5_$i4oP*C4E7*-1aYTi$*B_)Vn1#Dp<4GT66b^AX}}oL>wt#vP~nQI6}^^lAj`|k zg~}ZMEY%Almg^CY2hFSB9~M0(oIEN%%eMGkZPZ8qj*0=>O}bV%5E5yPms?a-EYMfH zI^P;^^!Z$7d`?q*l{NLtpQ`dqvNCc>5`XTseDX?UTU7m$VRekkOZIWnk%wVd9M`|M zJ)d$w%8G_0nt03|PB29}ouqm+_3&)=0u$SpAZ6FC)oYiP)&mN?)r;Dd6a#tR(WH8D zdgZ#avc%E{Wa_?DITpCWI1#C&ox;`}a>b|k*e{+F#m7d7*qWDZz9-sk&OU#%so|09 zZU+DF!M{2`{V>v*2Te zJ8FFn>pwZ)kp*h01ZZ(=YgQHdjP-g{IP+Z(%oKgRP4Irh`c2isG52BRq;d)KB3|t; z9*+&On2LRC*JA1}5*?DvD7h;^w@URSTlVtFnsCRyO)e&R^^!e5Nn|T40zdXKB&=TBt`erS`FW zUXav5H-@t?+o?ZoTC#9BsI$oQK6e1sZHHb>Rc^tYCGBm-;>j$Nb%Hkzy~C;2m(x3I zj~xkg%4y7{Ti=pvTHxM3xUS(0KPYGQ`FWmm(mta}zv;8ox&B|tqdp<4u|Mp2h#b~6 zCcfuwy;(j-y>VD_GbJ)@BPr!Xh|}y&|4Ahlb)%&gK~k^V90=;%K0b~feLP4T3Vf62 zZOGkxHSGD;&$owm7NSE=l$+e)En~vJ|9*k;SM~M?`^iWeFE`OUybmh_^qgM~e|9Ki z6$%=ZEAyAFE7bj<`a$c3DqHavuT_cM-XXgo$Kxl~`_GPZz0{t0DTa8_CuIt^=rgsd zCUs1FS2L(>UvnIuy4g#VY0YC{O>f-3pud#l|Kfg;q=V8x$BXvt1CyF!9ba?wwAom= za&>CVwp-Y00zS2=CVeNrTk7|;xlXe}HNm*}m=Ete1;NDL1N{todg=x>4lMooN+Rl< zw+*sPOjJH(kMu%K{+na{*O@;*VB~4SD~DNjslJ!Ka_>{#F=-AwrdYS;f(&1Sord8Yl{ zy|~n4V>kQLAl+KOa5^|{JG9j^_qdtSrd9eD+Y=4JTE*GiEwgN9icQnmR4JYSt=HPT z_Ol;D&82@e3d!)SKI=#oTInXy+uac?^YggyS?wA%9AO~W&%H2%BOP0_>I1{xEE0Ln z(Y%RTLH>R;1Qyz!N4{!3`b`)xs@Tk7kRq)|_l9T0^X9?WkCg(lY41`CGM_dFwOF_( zWZ6B}(G}riJ@rwPwU=D`qRPC}izZ%?W14AlDwy^Wr^aeFn_=PoH*@OuVw{RR{@ABSswF-;ugsb{*;H;K z?>MP2l`NBhztD2}@cy*45clP88t)!&agz?!CJo-mdguFV$wm@CkXJ5KC!gkz&vs0C zu6A_J_Tx4iiGbQ~M)$TY-cK1jze!{C-6oNmUo;rbI;k+dNn9R3*E3qKvctGaPcY*^ zwVuthsyuRCvhhcMV7F*-Ywtn=b1@yWlT~pQOEv8!Ln*2D)^mQ(8-OvMuo3`*Ne z0*;KulAY;{#j7Sux3#!g)#6OsFDtm4*vJI%SEX4Gs5$o+{Y*^?ZA)SZzwmlX|4*Ld z3=Pjl*vP^${-mm>b-Mh%X*2Cn>F3Q@;E7)>IwfsW$ehHN+~lY}j%;Tzf1PRdY*ixe z%`)MpF#i_7-(un|W6+exsQs>~&nCUrKu!(bj#l3|;`Y953+aOd{)V&&!aD zC%0vqtEuCx>xsX~xWKnDNA8QAR+C~$#+RJY0U0%Y98uAvch6t=x)gfo!f`J8K>7m+ zrG??7xz2;}j`|FJsqQNwzL_~1NkbbngjGpu3|)Q_zf*nr8IOf5y2tjkTOL`!w`iFS z&e|$DdC^~Npv5$CQIuaP)JAJ%>5%ZlXDhy<^-+$;A92t0T|+Y%A2GaL*K?#6b8X32 zFS5|}<4MKc0ug!3Iv4HnxahQxi@&KL$K;m!yVBdEwl?0Pi9^vw&-zauT$v`(y+9pt zi#eIxY2#P0bf-eG>nX@vy1uxSVCS#3g?*|s|S ze3jjG{m;G>-9FJ1NffkWwET0|Y^t@=B+z7Xz!oFGYZRf?b&W&x?!n78Pu=ganJ2*a zpTASr@#rr1fyg6qB$pB|89bNtk9Ft?{Po4+F5k+X2mShrr+qAi<8v}x+5=Y^pUA0; z=s*&RRMl>~iE5o>)TA0cMskn+S$;p3Hahz~s|YhAj{L)jz$+hfD+QYY{@fzuh=DT3Mkepx@yoVW`l^?rtBJHEZ;(>ND;jD91} zd`uBd=y-oTdxAL$4Qem*xx^gd`>0H8F zeVFsbFQ4OVnc`jQC@C&Ckqc*fqH9mo#J=Rpwh2p5zRE9v=7y<*w;E5>jdu$cYfBPP zc*Qmr`Iiq`AOG;qP7F=zMX_S9*h(W%)Ry`ogyzMst8xTOKIwQGrQL5^e!$c;w@l`D zjg^fXmqA2(&@uCbloobWA_wvF~1>Y$!TG>Zq&4tvvI-X?+Z&3NgoVciCzg*{pBYaw4JtI78=eI?qpwwGg?BXnxDT3Xg!7pLJMzJf-L6*s^0x!#<% zv?>ff<0rp4^{cGPCuQQSQt;kAp*b+2|I#^r`G1G`+eH+O(r8!L> z3()AUj{_Q$KDNBQ;U%hMv{GR~;Y32QxQb~ijyb!4`r}R>)yXPfuHXR+UQ5sQ zFcmGK`c7>s#z9L=C~HzR1-BobO7(XYy|Puw^L1N0yt+Xm3k;x{izuo+fYs zOYD}Ac#+Bmj6cZOkNf6@X~KBD8RG0K&t5buF->2y5C65`)KD$>*kS{+NtC&CcJ1+& zT-U#8d#PEAdkVvYkXjocuS%&^P|6XMURMBCpH;u;CsKM}9<>*xnd z3GT<5`Z4d(t>oVp6K3-g-N%gQL+Xky0VkgPk3@NdH7}vnM;|L$gWvY~Qv2RnDtVi1 z_v&mqi)0Fvl~Ar9$hQn&4(aNBOYYmbpm{=8xs#w&x&t3s5*^C|5C)(`NE3Nef`O8dBG zvL>$Gd$=}Zv@nN$mtnj5adlT=Lh}M^<2!fhb5m&{NVM z@C?c%Y#}lXD;A#LpBza;?|%w(h)mB#+%wF6ao);a1i~V|A1)I(X?x7mfT#GKvQ9`*A4RqB1$2E)0>i0Xsf}a#KE+IMz%hv{_1FFB z-4{;^$KQ?w+svA^7)~3jA~OWMXU$VqF0-PpjdfmC{KXSq}Tq zM6tK*Kb9o6Jr#weInRsw@2eU+OgY}6#}inh$ad1{_%x=)S%4MC8&4f?I2W-)`yxU4~*PUdL*dQ|a%wLNnLcDUY>XCg>!Un|HwN0ma2qTW6hstY$*rC~F^hnUPn!1>>7L%*p6H^YYT^}q7^|NlDw$>D!a3;bpu zz2=4^{}R<{|H0Gf^Kj#Q2rrpm@WnkcEtfJ>H9edaI5^6)&*w0XLVK6(y>{LD2-iNb z`If1F<>T=m=r@z&_A_d(UEFx!AVT@`>H_jh;ZVa%37ja>x6h!L_5O3)|DAP*gDrw0 z8_=GA-_Opo0l(+bB90O#c`ZU-whrZQo@c?26Vut>=3VE`U3=_ zOf7v7r#c9$t)#Wy>XB9sW~v- z^y$ERD6ONk+V3SihEZtmvc1<4bTMk|dLQO{#G~Ht>Mgpz~GAFRd6?ON_ z&w%rWsq<(qZ(4;5s6;QwS6YLT{|EC3-xHe9yK(@NI1VsfAaQiPAwSRhkDwB_wB(Sj z;3*2%?+w>MHCaXd-YzwIV@s_O-_sT2S?DGe;mm?qM5;*+#=KPjMTREOE9YXKo)8^??#~PhMCl1%)g#ub#wIGf{dzbCKwn*bSXpRCl?t5SrD8=c%8?OEm$}@#qTo3JWg`>4^FdXeyTzkXg z%G&(wW<&#~x5Ff|9N@CQ%mdOO$InfNDehmgUrVk7x37^yYsx=Rqyc zUljwie^rayrH`+$r5fJbV_}JGv>0XXJ??{!zIXbGshA7@MTX?j?R3SBWBG^b{9o3& zC$)-48NX1uelV$hcobtd)OOLAQ=!kp&1|6-9J+~3v#7ZH*y1)>97+S9tx%l4QDm4^S}Q|u`s zk*{!S4o<*!57U2WqU)A>yL1z`R104m3oGOqp&w*|vn_H@rY>SCrm^BbW#}_@M7)Lh zz<({U-2b*toYcnsQ=?<-Rw>O-DEl7@9T&A+4nEcp$94>p$BDz_uj?@i?dkphVffFQ z)OezYykc?^*E$R5y_wO9sJ>@=ToD#Jgz5cvmrp*pYegv)yQf=xr^(^6zsv*D&{TKt zD5i+a_Ut68i0Erj4KqHzY8>|;nkZs#m!dCWOAYqhW8nrPbdwx$g%v)6+P$Wziuriw zzsOJ%dSxGO^wn!z%;WdJtrI7;;y7mn)#!pa^}pfc@gE8uXQa-wt9#!|x?hjVqnzlR z*h?IRaAU3hzV^SE#rN)({jfgd{hTZT@3fgijn7*`ZdonThH}e^fHb@TIR8! zvt0LswsiGI8=1Ot%p%6Kj5^T~icLqnd%)BFYbhHletaC*zQS0yR4jZvr&P4_u!o{W zSv*Bq^w&qN#Hl7;r|^8Vw9c{-Cgpkjw0}dj@p{Vk9tTD2*{UK!0}_v#Dv>hl!jeRF z*%XzVPncD0&X9SYp0=l+QsZ|nD%!f_R7Y|}lg#GGjn8KndrnG^lDrPq{6cq$C~MWL zY}4h4G&|>A_4U;b;^%bax9cYe9H z>>uf5(sI!?LorqUB(X^s?fu`k^^bNJC*AoqsN{i`S0i1lXpfG-W#MG1Lxa>fTY?H< zJSMT6-7Q7}cU^vvN1SWiDI9pe`{#_@opOnesdjokXNiJk*Vx3lPez?w^FL-w*;C3j zeVG_aFRs33(R$d7CnoevfBt9wKyI&xRF!WeY1DOIKDoc_iq-S&`AOo$z;D;zf39(x z@)ZkgL2XiFwT;PJEB><8fcS0u#GzMZW(7KBr1LZT&2}h44vq8_-M&j2bFy&S@4~6{ zD@SRnT21?rQ;|)y$`!XOZ=@MV1g&RW)$nH=rYv)t?WMhkdj4~NwHVm8O7LR-)q545 zV9=l`+OX-G{lrUGq*Cdv$UnjAc|{!#fE4EYdj~xHZ#r&&deRswn~S%$+`CJ>UM61n z^2W}ktmN0M(uD^jt+MAV%?3XOzBnGPl8zaczituEt&e(Xk@qs@Sw^_8#&stJvQv!| zt-J55X0Fe7pLHKScJWQ}3*koV%coAMIiHr~vpDCpna?hgazkXBHsDI2bKDidw=Efk zV>|*kpF{_yJNu~csY%m6U2HEdC34Y`+E+n2ZU07+R)%1X%5pc0m7Lv<7WH=aRE^*e z*IuH){1(Zchfp8XSRS~WTq%?EmY=9uapg+qGNI56@w(f{4g5P}_|~1jQ#x1z94~Er zHnB7Re%xJ}(>iu7MRw%soKx+Yi_XOIJLTlh(23i05Ge`QvtW$|8*B?f(8$en>t|~_)1L~=Dj7F###j!{4(9#kK7e&#prE0Mm9 zw&bGNMZv*nLnOdnF)d9%sk8h{uyJpZ#%3C{_;nRJ*l22Mii-m*n-nyj+=nUKFB+f$ z<%^=~)2DGtiAt&fXn-QkLd!Rugw!oB=!{`f&3FQZvH<%vlgarVGSs%j=ErC!23gyvEFvI@4D8NNL_5ZS+ z;IE{h&;*JYTB)Auw2W^gB`1G|!p>I&7op!go(*mA0Px#F-AtPb<#GUR0Kl>$i_v>V zc!27+xVQ-OzoQCMp^KMIjp}j`hcz@qK~rMW?ew|!*lC4LwGK?!TX~Zg@ z;|*>nR1!!o5vA%SR8$hV(L}DFjx-DY6qx0l+Ln3$g9%A{Ze-5uC++ud8p{4`ur?$# za3Lh(UNZ04p})h~A!?#YmzC6P;ig1UudVm?!g#yDv5D5XMh1q`fZ<1-_F##6u4nr9 zYD;V*_5K#-n%Ie zliG4xWZN&uZoKVzmHDQjC{Rh{edn9#X@fMeL-b|QI;cs=SL;2RLAU_NDb0yOHLdya zZ{ACmW?5~-*Rh-xky=_-Y5R7s!^O(KEl0s5m56)!6CM4Z1cl9(M;W!D&?NmE&5L@fs3&Y`%IF3=Qsj#eFU1bpeY@i1C=Nqba%s_ zXcwdxK&3)eZiF7d#-JFCqbPm>3M#0|jCO!K4Zde@S(^rJARlwj3Hq)95aHCezLJs> zpnM!WNzMba4>cfK|+0&o=yLj%ulN#jNP zY(e6VN$rlX7w1A#X(kOw@hCt!6u?;e&gzcx_oSQ)P$ay1<}1j7yOIeYSV2#{=L&K8 zk4$#xKkkF7QnVAhtEf!qBySWE;ir~~D1em%_$bwF6pCtfraSAS7j(x%)uN(iF_iw> z!|DKkM@WreXms=>Ksa;~7XEyjnX(J5kos2Vw(my}M7iwl1ge{h!_DpZF_$6fkn{=5 zP{?=B@q9me14nV=7M~-5j!GHe9zq?wjnU6b)tK zI(hhDhKNLC^d$S+n34_mB8fuY-A>c)5!C%@ys|QVT5DHyYwIKVRo%weOpXyA-eO&) zEQ_c7F3dff^0pfC*u1z^l>a z20lBbYL{L@zRu(rj(L6F2Y;e1{rRHuTOwCxGmE1hzYYjpTJD?{cIt>xmv#JRk)EuX$vnk`@2kTTW(VC<)b4mgd~2alD7~^0+{TvH zdsVfU*Pm{d#N2U<;a)x?^!$*zTI-nF>Ko2T{o+DeHLE}DZJzf;X{0qG4k>lqby45F zVeKE&b?UR`#@8UOOFZ4-xj8fKIaTXh2MTY$dh&kg6^T>X<+@FQ>b2rI%SEcv3jUZ9 zuHUv2bBx5eka;fzhalnc*cA1B+XewZh6Iq|O=uoJS2r{~4BgnXC~5)V5J71(G-7Z= zBQ_cL(&QPaj0X&_<=_7OhFpO0)1Z6rb;^AuCFnKD2IEm-^a@6EbBy^zn<9YK*{{w_ z%XR>ez%PIyGU?&TKA$o12|!$+6V?Uo2nUdlo~jjStKLPsxuF2NP)`lIJD`d8E72w( z+UT=UEHcb?X3qjvfohRs?$!`s$pF@)a}`r|TTv~5?_YCRG0cW-?@eJEf(A`XKowI5 z^r4=x1Sb^kU=5&u@|qV%!CnG<%#*5H`c1L>lLs0a8URKzCusnFeqT)o8ik^>%)bbU z_~}_aVba@Ln^z?&OB||u{_6O7a{%Wa9xCPQLwhVUIE{`y2m+DJ;>wu4ZrUd>9g&5A zd*GF|E?NhbC7gh70$52C0Ci&g=LcuGml6}&W!iOFN=VDXz8)-exhGk0@I~o^RMdF9 z!N=NZe3+BaI4dS&!D!&;ZaR;A$}^5>TGnx97p6;+(tgp~Y^$qgaFF(Cqoqg0+Ve^M z-Q7j)&4cc1@dLE~A7yVHR%Q0~eKX@IDhL)Or2--%ARr~BA|N0j-5{VKAleEa!vn?DBM?G%xwx>A?Es?CGZntHMHT@a3zmUZBnz}pd6s5|iA3VUBbZg=K%%tTo#o;)cbEbqW zT@$j~=KUB#_PKjmA4A}%3%RMcPt2Rn-dKlQ_K#&p`-S~0`sgyLa>uF|l`c!cOsy|C z+c~;6ns~$7bl=pYgAJ3A)zD_;NZoxNy?v_ABYI1;`S$Cco{bvC^?e^F4cl~y3{mNQ z+D_9?yql!`4s-9~XXht|cxo6kZZX&9W{K`T$QdhGqf2?;E&r9=8nS&@cx5#bs;eJ1T=NH>C4h6OqXpR`b~^pWCf;9?dD)X3uxu+)(@u(elCoxMfNzS|rrW;gOMP83YZVA7>C1gk0S0<}pRv z)STmS$Y1CvMKFndSOla4fXsXKl2?GwWDhD1yfg90)eHd03mWMOeNjMlkJ~Ji0rmx; z>z)ZmS^X>ImhZrz@*32mo#MytmpWvGo3|?_84bnHoMb(y9dATmc33mjy#DQ@y>H0f zVC?nL;{Izjajn=2y(ZdL)yDK!uD4f}#l5eaJXt{R>rH48@y*7ugioJmW_rtBK#hqY z-d(&#m3V!h(r{p>2oT#4k*0)AXtJ7_2w8gQIfq7wjEyv2PlMEoj}) zrk*^{oI(<4T49@ET(!5vxBf#%YjUSB{c;fYnSV%2TW4PQjOey)KUW0 zz3@^_AbPhewTFfvd4UtPg~}}0s^NE{Pd3FU*CG&v-5L4L#L$bT0lkHc7f*0EN@ZHy4o_6ZA<*I-PI4W*m){uCXK_C z&-*Rcw0p!dSe)D3X&c;{`?#F8tQ|t8y)qfUb)_~w`|()f9u!g_`-vp=@E$|1<(nta zQz~K7W860NCO8`WI2X_7^!xk!uyx0Pio|W2`>}sUSd)XFzYNen1)Atn=dScD`6B$t z{!A^(h_=SY5*WT~zqgnUBr}1_C}m(XfD%Im_*6PB>!L4XAVLrX01>(@&Zo=xPoNi{ znMM=Nj~(--@>5T{cY`NlG!1w(g2jGMakn1hVsNtjYCdFXmTY99j?&h%-Hr|rr4}G- zA*j`k+~u(<6ri2~mDSVNGg>j8F9NXzB4V;yJW1rARSq~V9k+dkyU~%6FuFAaXfBx0 zei^w8j+;qKA^2P{wb)E2WI`)w+;fx8!yL1-jIfWuzs&dQAcV+g0T4pK&Y>2zmwNj0 z0BDn)5el5%EgVJH7zw2sE`ta6n=ry&$==icIVQF*SfFFF#)qa~*x_ zQ@kxglo_w_9Qs|v6p>|s2_dg%Pgh~a9soiEsY=Wl_4&ucaY)=50kbJCFysU9D$|!P zj;5kI00o68hV9lZbh%?*-^ClUF|TSL7_T0Iwu;E$&FOPf>kYI#G{z=4gs%)EEdYmO zuK^MV!at{APeFtOzKU1C{g~$?r@ZL!d!(h#d|=bI zaj2{pIS4iHuBm%a_lQKES%F=2!F}UyoJ|FJ9f$B`bhQ( zOl`ifmk*7Vwi?FHho@n2vA-iBT4>I$LFnLS@Ac0vmh)jw!3h@xl1N5VeMX&Lzy%hG z>bb;l@7BJlFc>i=Fe02-df88U z#8%uV>aS2IXXrIUy?yFwiTG`dSk}&3+K-!~^RgdwcY71o@l)&gi8bDGY!?V9>WGW} zpadtUm$GG7p{_Kxn)8+VHy$*>s&K6rxhuN(iMiG|$;g8(UM=%wcLu#NR>3X16&u0c zG+iuyTt7wJ{`d?h*)Z8?=$LcMtJotpcJY-Rik_9Ks8PeuN)-l`qn9i44zcu!p#mF! z$UP0_;2&)vEkzBH`$q~ODgD2TOV_NZ!!=2ES3yfGV912v88PanT3?qYtp@frdZZ+gB;Kih$)=M^@8c1))@h)pQdA zPK@C^e|i`gNn+{G&CFJS+-VPoxM}mQDS8XyGG4fP5HwE!vRu5k_ZERLOkBGH zJ$`Dh5Sbo>3+^tB-!Irzb6Z=e$}nic*Z^(DsI}&FYIj5{0GSrpU+3;vB3#;Or@l%p z@Dm{Nbb(v21z@dPQ!687!ni|gjgx&(lCKaD5EQ)N2R71lSibTB1a-pj@5mtVTsX+V zAQvRCPM)OpvV&L5*S?6%p*d~6)Zl|>%Rl*%GoNK0P^1WU$#+!<1~!2NG7#_fFegx5 zNdUVyxuH6Rmh4mxDtuhubZ)w^$8HtPb4AFdnB5Ryzkc@?Ze}nHJ52h1eb&@LR^%>) zD1%M?E-}$PpM6SjM4@Rk)LBZ#iVy@J6SBU=}>dPn% z^)1FTHZSmyBx&lX(C*e%QHy;r!!S#||AbP)uPwtZ-nqEjIh!DMGi045_3dvcL77X8 zI&4;nvDh2STOCCVd0Sg=#8xU!($<|0Bdimh?!81doYtR_ZcAp_`OfKLS;?wtVUo^CdoPVKf+4nZ)1lq&g^ZQ=uNiI)cCn>2UJcky++$4O>S4k3K8B= zPA5X`+S8D#U}Hssd&$_se{=k5dvESavoVBo4QsYS+U?TCEH1GjH2eeme^?J2XLOCa z_IwQKi4i_B5NuLV?osuZTXf6aTQhg^sQP5CO$M3JoeCD~Oibg)cej(-SdW5U4pei9 zJjj{jcuHlN?x0^zVZC!S#chA64W{F z6Yo-47@d7J^3_3SnKIfYdQ@{-Y54H;dYVFQQhWGsW9TA{y_^?@FF)F_6`eOFDe~r| z8bkm-nU}7%vM~7Yr=ivJN`4{NvO0t)qay3s=W&;D6OqyT2n4YZPklAwo*X z1P<)#K0;C5|GGmuG|=5>1eZ75xdhTc>Kr6xW-0^t+Vom6L{#X-2}}xIKY&z!@~i>Q>l!!@)2b385R5WD`TXqtiO`Uc*3axU%OWJAV41KJ zs_o$Ss2BW{?OHgH@Kgm674q<5lB^XEh=?@c*Oz??8R%2k`m z<70<2JTS`59is+{4lT04Dc%Qk7BQbPM*@t;A1p4jGeA_3LB(t|2lJ;b6c;P zUj>tg`~`sL(V>3uS{5x+QOqxu(iW|JAnjO~=G)>mu*l=`5$%TJ#eE+ww zUW@T0;Y@MN;1rpcew$QyGaAq=x|k$DYheFopwonXq_zgdix z(-3KIb>w96?zUN^C!8h<9^Sm$IhDOuBdD?cl3S#VX5!FNj*dxuOF%2iEolEKhSfTL zP!&{e@tJ?wuJCgqmCHX;pSYbzhrOz@5lO^AG`N;+Tsbw^d=oia8{Je;_{rHEK1LkVNd zsb9*wf66&MAw40H_W?9@C!(oM*6dsPiZmj;ADASItn_s=L}a|ojdA5LEmNUz4 z2}woS_?mp#?412@DT{;FZMQI{nNtqymg2Bf9&xyDlgp*tHB6qj#n$`8+y8LdQ>2`( zi~IcwV>mHc>sEy0bdiBszgWihIa;Rc#Tma!`TrEE!xuo1fgh3uljERuC1^G2e);m{ zpTtN0wXQFh(JzR!?En1!n?GM(UY__za!XLf1L-^x0R8pnG@$X7f`d$A;4(;xaY_|8 z`g-Uhwlxk8^{bp0U^YY8fe>M`Y+X_H7{Hd(p7pBrW)VE*fYQ_^TTPOQHm*&EThNi1 zaRg8kL9*PJGRaSbiSq;V*B=aZkqYJAmsiE*oAhP-yTDI14JR@MuBeQ@6Qtp-FtQ%K z>)ZV^ydl7FDA6BI9af%xp2#k&^+)`h>HA89P=t71E#oo6viq^#ctN=1HHs z(E?hhoH9>}M$w;qVW#@Z%j9zP#aNZ)!ENJ#hq4998SYpzA5OCiqUTt$Rz{YKqGTEt zDOd{%a5^d<6j02m8FCp1>OMJJTZzQ>3Zd&Nd>%LK^#|_eDMN|hTS8P4_ zD)i$;9+#FxOR~2ngg#;V(OJ~$NBLJD-7nK9e_Vr4x~<=1Bn@Hp(Z}~DK8BJZ7L6dX zc%>Vz;0OS~L9%DWppyRQdLrN~`K(6)$$RLMuPgw&@M z21E*XcX#iL`qsu>30{XCKM5BM{`~%iX7UAr$e<6Oc?rLTNRQNB`jJVCeHp)TR(`Xbt;k659O z5eK2g0|M8NXa^+~uXz-yRFs*}yukO1&cV0T?YS=T+%xWyAx^n_{q$}~!_5xoe6tHw zo<*+aIrjpST=sb;*7UUu&4$Hv@QAJQ6ARB?x$AQjf*~Sdo_SQ+W+r$?&M$&XyUT`; z-R{t2^+%kxt6Z15c};!X%Am2=DWQX<0jWfml0tH^ruvXEbus49s{T0H?VDoyA17ZL z4liMuTI*(}$L9wx)#+9|syNkVJwxVAuxihe)L<0XjPi<(+^#DB{X!as#rulr!PT$J zbNADgFEcyG^_fN5UQVofl)A{@DHQW;F;PciY+7-)CzWHFz>Z(SW#4>r(y#2!$-))Z z6Z(Wstc>&N_rBn!r)Zi^_7#5V8);l~m{w8BV~-Ty{ewXR_nWf7aLkuAE4b z|Eip%=H_zng&hZU8VfxfT;Lbcx4<416$yXBTO4a)v5*W!632l z=P)^ID=R8|S3f(@A%*5xt25UC0lIj3Dk)je`SxUil1c-)bvD%CXtJPGcUw(wCNgJQ z(#Gc1)0V+fyX6Hzks1#Jw}{V{ZbAhh1L3^8;#T?g0_#3p?2PRT=YK2;w!Ravvc96I z#KOiiNvP-dJj3*)Sqg&)1neIzV4n3Qa|0q)gvWq_Mn7{3HFj7pHiGpK9uxEJp7vZA%9sMx7|`r+I1wy^Lm=G#X^s}}|+?~=6=`)e6^#8h3s7qxdm} zY9bVKBTwowg8hcKwiXbR31F|0eKe_;Z^ktrvmm7;O+qZB6u&CkB<+L z8ily)mB6ObQ>dds^~axJW7GCyl;d@BjUB-H9_()cmV~?;$dUdgjZo%=yhk1cYk<54 z8u>GzOj}k|Kx{>mWz4V`Y4NCqTs#)?e*zaTdHj?h)vw>*pJG(*+Tj9v6bdfa)sO!8 zrna>SNvoqjJ+pJLiUd6h3d8dTg6+Bdfup^m^P zWQsT+Km~!weP{>pNdN<9%2|AE&j}sjUEjE%9d@N#}AtFFP+@i)_7DPvp2{7YMC3OWwnhDmek~|(imsOAqrt<^JgIlr8hTS6UPH4YbL0@ zoWZXLMos#(9wh(j5Qx;dQC@(2Lf|MJBcSHSasKq}(@qeIpFMl_U}u>h8WVv0(x^|> zJf#~C;lMsnU24n7p$K1?I1vOSPB*CYA{bKO07K=U+iW=5Rnjyy4gM#ZtfrEO?zYco z(Q7igs`lVRPZ|~iU99okm-O@&7Ms2=qgvU2dH}D_A8k~879QDn zlIJ(E=W}U9;P;8iq}uXbYVD>*lG)M3*#V#CNytvGrpPs(4oO#V@TY#={XPF}@%#9pvJ6Ef}8`jd_+cAY=RI%pujg=6TAt6uN!fljhAKUKW{ zD>nxn&-X53LF7)cd+pH&@{LXQA7X|3agXlY%@d*RoaYrh&)KYlGH+KFq@D>?a{4fp z$#QUdq;O;MBIi%GM{P{1T8a2C4_>u6+pE&FIhEWXU@EFe2vNB_b|`uAFluJX$LwA0 z@NP9RncFMkupae@3l=&(yerXsL|ky$U{KFNCZK&?afooix&z9rzCmv(?ra!v4LJ7 z=x5P+&i2LN=pzdH!8$|e13?rCFg0i+vON*75O}l* zocW>r6gShQ4iVzk&D6Ba(p2SPGiWq|P-wA?#|^S^)Ub&_uwWgq)2K#YlYiDK#RP)9GsJ{-)8;Ew! zJ{#mfDb0$naqVtFRRCK}R%rpY&<*5=27#XM$*75cKR3e156_jhjill!k96rYf{8&f!htL$4qn zS7pI&v!nO&D}kb`g`-!imZz3#%_v$isnw4wkM1X7{2!U=~=Fw4+1(t;= zB|ho?rqLN9MYqw6qjD;#`(on<1l63{YWuzQw&UM?OlbSFmmD&B?awB*7bC99Pmxl3 zy!$+gvLdOhgH?!J$W#r86J2djV=d2iyI=z8Bmf4lHtY)7F7z0Nef0H3@-k%;-T?Yj z%>nP@9A!jWC&HG8+K=lb<(R7T4Zf!t&VbGeXGiq0I9r3_aTR#Mmb#j!tgtlEEEYBBwUH{R z_K@L4|LWMvs?C7(hP=tQ#lh->5odbS+z#IyY%Q5$PgYpERt{cielJ^05w!m$vajK{ zPn=`yYI0V_af)`i3sZC7isk2Pje%s-b3=IUGcQk$kN4_9_N56_JY|hm)j4}D%9T=9 zhUuJQtnktEsJ62HjjidWd=rO*<_Xjy4Y7UZM>6@t-MNa^ybQOShZx-1B-dLlqb1{c zJG8U}MLNCZ)MU%Fc7yyhZO)@KmK4oshe7IT{~OE+2BLD44{BS6Psp}EdEc7uIG)u` z^I>G{8Iy-SgBHj8u^U|s=B35jAMM&}s@r_Hl*X8%Kd1KxDk~JoV(G>fawQt zr*>ov#KtkY7UJUKNR^?F#_rxl`}|^+V7shwictx=4LUFVY@#cp8@k*6q3UrfJ(k?tCRzYRHlg z+AGNqY9R+CbDK#9%7+V}3|a!baztIEM^c8AXAE$h+j{SI&Ho^ZoLatk@AoaoyGb$} z!>oLan!B69v$JexP<{KK1~tUM2Pah?3EW6K!t%agH zR#T=b9+7P4>@^kIt28l>i#LYX(yNlIo=?kCS}~9Kp+gN6*kzWLFN%CtQi?wvB8o9a{BRgH=cui{`B5@WxD+D>%vBt^Ydu1g7;uKv!`)BfsxO>pRv)X83$jJsNN z?TRN6-ZRRZvC)d2NwgsI#8%5;qMUi_HX_kS1K?P6&6xzLom{9KlZJA|)m+u7iXXAWw)1L+yvbKb@sRt`udB0Rq_3plsZO(zqM5T7}9uS%{gr z=~kk&!XS8Xj}PbNp&NAk5;IR%jqR|XReQZt~hB&9S4-&$(d#4*qAEun%`-Q zO%FwVP0x%S4y{e%DBWD`R2{XW3RV3|Bk*zOxy_F>UKq3y;S10mHu6_f;#ij49v|&v z%+AUR4E(UN(D&7JNepnyKPML=>PMX@-Y)R=H$S;pW7Yzs*_ld9W!iz0M zL_do`IRWH~;F;Uk|2YX~khu-Y;AA}<<8Z&mpw0b3S`EDgL8On5;7aji{m~*29NQ2Z ztkDSlI<_E76&hOwf(C){7h~_{8e}E`Z3}1lLRxkD@J(4bB;{9 z>+IK&4L2M{uORG9ua&#!SOPc0>P~$6dIp-=+vJ9Y8f;mzt0gWID6{&gY>U;kXIv@kq0JM)KP*RV zT?ex7RkRwm7_0sn-T(e5hP$mx`RLlP#xk1Z#H2(!Q$w#gMnfpPUUkIcaX> z{Wei$CQ&2&=DXQAT9ufwZ0=!8TZgR}hlHhGVvn#R5fK@~AT@sXOJi5soD`128&rt@L>?VYS$tGij-{^p!PBocr#y7?5I+2>J@Mk$ooV( z(Zh1gpuWD|ZS5Ux6v(zvY=XmcouUyun}?=OW#)d*jT%AeEsflBaFcAT8G3p~>YmMc z!`-!lG*32nBf42|zlBoMmn|!2)dU}=cVe1)HJi$Wsed~Vj93h+F7YoP-*lW6Sj?JC z$V`aWrifW@3g+|i$@9~s9J>NsojZaF$~-cT92XeJqqrW#L*Y3z=J7HcE zIq3pLlX0gp-*H2nW_S!cf17Z#n@L^KC(Xw!4eMT>lm?Mi4GwY_+!rZ>{2Rm?{Nw0w zw@qR+*v!eNU2rmI&yn)f3dx?UD*Ljrc7QvJI^4M9Tz+Ak4QEyi%8O2(CFcr=@io3? zyN2fNy>{qVVO7QK9gV-ysL4?2L6x;U9zII7!W9a@c+k%u&tS%WM3Dwl-`MDu4^9Xp ztu|ON3Qiq|ad!|&HrNQSr1Zih$1n6(RD!6fAz6DWs*xOR~K>!Zg`|14tnvmB1Zv)9um4l*Eqyr^T*ugOPT2B zH%HdS#<7vz@l*Ub&ciB&`hEMEv`8KMMn20G^)y?5Phi3wp2V){UqZ3f)#Ohz_R{*9 z5sl$2G+&u(rkS0?S&G#>9+q`n-x;J*abYvLGu=vAjbiY78Y;ka8*M0$T4`iUCjO}X zDl^v2IO=(yUOs)=MVf$MS?!s#lJ(4?$?n3=Zkn69Gr1^QLpggMMfog$!phl=1C60#Zq3c^_0Y|sgRSzB znqXs;xznUHm;ab>n-xUBni1?N#fiCEJJD-vTBfKnUE4j;>+4SQ7uK_vs2z><7C)Mu z6+W8c)wP}!9p3?p`?ZEX4gEiT=||_EdxXS(w+iiF4e(*cjw+n{skIxsvrror0*Mc9|ormtQtfwJn1^XO*GH%m7Rs}=`e<~ow%e?#noNU@|? z`}z5~?bXm`9@)XIhIBw%d4QG?pBnKhh`bzD9Sv0#P~z{W=e0?G^MN7(O#N^K2Pzx3 zBXE7q|Z&Pb1*wpAm;vVnGq)ii8m1?SJVcO+J&`m8!HJbU`+t>b`i zq+nk_FL8s&GjnnA@?_mRiv|Agtw%{%4~@(9QfMl84mW(pBT*Vz5)_j2kEZ3m7FBdg zk2|BrG%505)kN&6`1iRfeK6sX=~~)9cjg;}KS^n3#@%I@k*tMj5|NbZ3EHZ1$C#3` zS`tAMc*jF{8km>7yL8*R->k{F6sa`bTtsZ^r79^{kCcZVB>SNBUR-yyEIKi{5Gdg( zTqShm$vlx*khha#@!&dC|AH3A?>f(V{Agl3a4J4(Dr_#<^{{vmr{Vl`V!#+1=wbOu z(lNtZ~-_y}etp(ZqH7m0`Y5&b0FuOlA+hFsk7% z)qg?7og&dCTBLKyEtL1|=Ry(QjYQY-nx&qtg9=^U-qs--K73jYw%1OrC=Zt2xCBqW zgE{?wxnSRZ|8)~8g)QkIs;mkz8^O$3>6(2|6WCtV-YxAfpW#BZv&f)f12ts2e%=c5{V5@3k)VI9zh>(#`rb0X3{_rTMG`#Cn4mNXJ+r$Vhdk2w$MdiKsB^0qI+w03&I zXhIjHk*iK)X~?CWHv7uF;x%=-`r~f~DI-KpFA0PYr{DS@2_81LbsvPsy+7-{$`GzO z!0&B>NmZ#xEyl9Bj1%k*(9v|R28h$}L7g56Oh_4x^GJ$R6uQ>z#;6!$945jlw-V8> zdyv5(@XFj|V01MOl~=Fn3+lC}6LhZH-hJwyg-sGdQg9V#$N}$QqI{-!$%(Tzl1Qdx0Ac>o3hFOS7@-4hiVz zq0iMUJ;=(Pot3McC*G_T*uPJTzL@lCMYB}bXjy;#{&<)xe@rq{TlSQM)}D34p=j~$ z?)KUEB5j(=!+s>^hfk$M5$a^4U%Xjru`PQg_XGjmcx_Q4@eh|J%8B27{gq9gYi|`; z426uRB)zY|-F(7KqU65!fwZ@ge(@AZoQ3qIFU)$zyO{|N7*43?5 zXJq;LmRuiw=HhWP>ptLptrA7KQkjXZHsXJOX|%6g(o={{b9>S$S?8d2k3rT=ZopdY zbBVsuy4>(mktV69WJLhM_+0(_9>a2uVJEeyE_FrCoK;ue%&d~7;%o<;q&9jW6tZcS z=i1UxivHjA9x?d5Ae|Lhn>%>cM?6MSdGuzjyo#`_*ZjISu9mvLHaxiTVhGn_?9bu2 z#7KUcGB%mZZjwyi-a|R$nv3sUnP*6r-IkdgfNuCY2m{m{r&RofQravhQleITHabjX%z*5&* z-n>7IQ(u{P?(^EvCUaywsap-_#e=K2f_GF9n#on-`9N?co(i5zDSfWv+yL>g2T%Fe z(9K;?0CV}4VA}>7#5*vRit9-dQgSN>HEw8;+#SKV_Lq&?Li_%(RWr-9C-|W44baE* zvTih$5k@2AM4krlFSfX)z!;s_NVbp|YZkJIIaCfKLJ9(j!}eAb@>Y zCl}h1xdf5nwS5>K%Va1e>0h(Wat8JJ&8GN^WIRofoXv5xcKuia!eJ?UjBOynfF6r> zX}&xL>85Vs3J~Lj6kL;NrHQ2XCGb`$sHsg&!*`+m650JQO3H6 zB|18~jBxilgIBj$1_>hdp_^Fg;|*{pN0G&t64ySNq=ANLlfFh z6SFzRCzr!9k4qw?N(jEt-LDe2c9l0F%$xe&G@|yWc_A)ReIvnQ!?T)Ln1-9NOhiuL z)^70$>vpZn+8g%k9gRbEkjcGf-!FK@@TT@b#@<-Z{MS2)>%PHM8%w;M8O+~g2v7%a z*4`0&;+v-lB-Ij@|3(vys%Wm(}9*XR>%ZBzjihbtD$k+32d{{Sgt1`j% z<^04Zn}f<;8~)o zouykZW5o{VXF94bID}xiTV55Du#DOjWh5I4W|lHUZN~7XSU#k!J!`=gS*NDk@%nQ$|1fS$dnF@Qb=^ChXT- zy8+DvPL|^ly+5pj3UjB7Us3Mv>Hfvzp zar?qyTFO;!!}fHRVXYwai+Dz0+XuG}p@N7=oc4YEu2Mch61!K+2qTw)rTK`Ey&)8# z;Rfs8a{ytFek`;Pg+<6Z6d>hvmZD*KsWuG=|HXw5 zI#GL`C`1L`*c!w$6ZQ4AlEFIFAfA?yth0Lerb%DAkulN@OgcHDXPmNu~73v&R%~O*&&FUUonWd!BSQE9#BmV=SMD*G;P1 zHWcIGGA!|Z;v2M#oid;Jqu6ZF@`1xNj>T7a^s|s)DIbH16*gvk8h3tn>c!_O`tpTK zx>=z+Y^)hfDpoUo|6pQpK)6bb?QYw=jwR}B6hUvgby}2t1D%tb$a4lCwp1R zgr3~uUOixpux3bFJ}={9!po7dS+%rRydHV6EiPv-!&G%7>ME~&|JsIsJ=bjw%0mVe znE_YdjOMO`!24aT{)TNPlSNMO_!qbKSI;`rlUiYv)QsNd&3GtaRYaOrLql)E;bZ;% zAPN`oBzjfVk$JV>C4nML;FYO2MP7}Bxqq`YQREBXnx=jMtJy-;wiSF&cV`~f28j1E zf@#&pwh=1W{ZqZbt1C^hvXiHdsYIl6mqDNkkqKq1I^6hnHw$u^g0p<>d`DZ|Ft1z+ z?-nU;?WAE_jX{k*8kuv}Ih-IvvXF?{d{0XuRJsu#3Wc3Tx&8TO@?)Ld_uuecAPI@c z6=UIb&w}ExtQH!)Z5u0z9Kj)$SqWJuc}qUzbC4GGEVaBFw$~5`OJ^f6EZDQ&tuHSI zk<+yzMP$7};Oy;$U6jjY3!o2laN9aaSryrv;6kOG3((|*0=|L_-!x26n>O88Vyd$^ z>VtBKJ2*#hm6$eZuoRBM>C4Pv!nlb}85=!)7W#+zpcW!eF!my<)h)=-1g>LSR8E ze6@lvn}71X$$qBS!d=4m$ycL1``|wRIWnU8r-=Q|(~bJJGWReyddNr??-*J-4Wh-- zZG84&*<;-`x2ew@;G)I)T+Ifb+i-^ z+c8zCpVZ`Gu8kMPbxN#1u5=W;6;1$>`ds@8QA?j^p651WnOWSZ4`;*KUnGY*Y3iF380JNKokvEp?v z$P^kV*qpm^bXTW!>rl1t%#!Mrbm`5~-uZj=8yiPrwn%BuV<&W~%`2(hoF7Qa80Qp_ zEni~HW);ric)RZ=UVrk2I8S|d8tqvgohw8x2AG@b7iBPt#e0CFPQ=-7UFJ=@=Hk8U#Y#|{c}-~9uf_~=aQ8%~y^<3I*txlt-FW*D zP((p2?a@wfJ1*ZUCH{Q%NnCz+j;CyQs_QZYvXzh_r-7k&xL-kC-4Ob%1(vdF3|dna z&w@#FQ=lwyfZA>qR96oy@2uPabBG9?fuHZ!o2CMpeqCtQ)`Ze6$kGx)9`(%gNRlu+ z=JR~+M|E9a{#6a=QPG0%F##ECOVuZsyBveDhq{7WVPiwkgy6%*X7*vCmfI{! zk31bl(4aPVvobm$AYkGwm8yKyO2P6TXmBsRqdk1)=mZ~`?CVnjM-@?(2F)HOZUal} zB{<0NJtO(74QNgM^f0)cqAINdV(~A?$glaZO{LU>aNyP#ui)q5WjL z*heC)vnfR+xYc1wJ7m*IhhJg0^i9%O?yh}bsfjRWVgh;GbgcAQmWL%`wi5mc`&~)$ z&V>@wSX1Mo!oAHbA>9k!ngIop72Fs(!4Cp3*?}jVG}rq$?Dpw3ivV%ueWQ zR3Guwu@qvxvK{pg`|Y)<>_$*g<@JP={q7jE(`mF`WU7ZNL%L=IFJgJAv+r;OOs6~E z)t0ejFl-^>U%5yu9~FQeXhVxnN+!z+Jf+}tni;<1oRn>0bSSgQyy8Y%#wK9nTrO$3 zU;l9UQJ$Tj!Zn{&_M{09w?B!;$N4ADX=w&c5E!--m(lk8xR^^uBi?z!vZP_+_gU7n z&Qxgbch-T0AM15D_fq%FP0{C3mEO`hFUN}85{YCxQ#B^#`uhcGyc@VU?FlzSYxxQk zl1#U!qi`kJ8^X-p?M_+_XeL**TW|)hI>e-H&vyAz!FUUgD4PHW<{7=?;DyNh|P;*UUkJg#r0e zd2!y8;$^di{OtA%L$k8}PtKIlUc@biQsh;4C2e(Bc^kA7U|J%V9(wb4IhOGdIt%8U ztH3;1uX6K`V^XLIWURwIE?9J1uQDx<>Xf#8XlHtY`apB&>zHVWS>#1NJiI%VLdUc;uIPv@dgKraYlt`*@9-*fl$t zgTWTkl~>7*j8uD?5|VXV3z zMEE*ceYx@pf+^%6|48|Fih=4BkXfjxsaa%YV}&ZnJiJdmEAzSN^#Tf@uDmLj|KP+U z42B%dZ0s505jn@=p&z=tBKb{tAN(I(N6-YHd~77}UYjMycqnRFkwXIf*L#4F#^e$n zlFZh^`zx8Pegf}cqzZKt%GaMOMO1ekz|3Xuv$!Ic{T6!q(x`05E0Di^o0CBJiYw8JLUzek`u$4Wdl4tY|i>-5aKycjAl-FdRs` z_|GqYw>pH1jluOL%XMSqW9)v0NV~#5*!G(=VM0P8t6+ z`(A(Syg^GB_X)a6d*)*hT}&2~oJJA=2Cl)_ovRWpeq%zUU{05Hj` z@BV(Qe^P@B-R?5O+1w2+$K|Jf`;z`NWnMnq0mscEFCGCQ%I3lL-GqfeygN}7#;gTK ztq)?wteGEN7~%1f{?|Y>+SxuKG=x7JHqIj0jl5V?vHs|i(b3fhKDD}_J4RE zC%$LPwYop>Mov3KB8~wFF>mSyQv8gB1Bt*zJ*59}w|~Q%lXI6Za9)N+Ovk^Izp!|c zz!T&qM5i9n10&E$Cjku<*IyrkR8Zk2em#B}6cHfhj`>z8IKTi6mBjIfG4|ecKjT_I$hxq;-^rAHGRGG&zc@p!(W`O+cgvY&qb*T z@y`SQk(@iV3Gm61hdtFnV<{!iBNW@ zuK!(*K7N=95d`lpw?4RY0&mN|E8qiCu>SQMk;wNN5B`^lz;jaks<>Ra^Yqx>{W>m9 z$Voi${Sy;C{+&K5!Viy;52}2OoQO;GoRUo77n&G>JNIxbb7 z!>bYFB0I%|)a#IkDT**bKSds&wOjtKlgE$opTf%@cwfXxBzsp1fMGdx?Rdi-FJAF6 z(X(_u^78@DU_ZJB9GkOWA98G4FXDM91V6srec{V$O-bC<ZCJT`7dw%&^y@c*j?d)3ZNz>5TfwO#{WJ^5G12jbqR98_&2zX<;nhdH z`|ZM+<87OQkbO%ekj5XxsO>EscM5pO{IjO>XAJRP$B>Pck^JYPp6@Ru0Dkh>K=MrW zRZ+;#96!v*2!!_60hXT5F-N$qH8&i~-oq}SX-$DkU@Q4y3cA7$hM5J9zuvFK|F2d6 z{Dbcn-v4oT!G8Pyxv1b_27w`$zl)FTHepHe>&Iv5*HtDD@5Dplf1G^`TIBeSxO)7` zZXreLb9f@(K2d#FwZ3x|xotZz*N+=!c>YcRQp83RB5UgK`e#kZ#nG`j;av3JZqM7X z(Kf(4C8Rty1evmDj~^yNJ^t$erwHu$9zRCn$WFmEcA^~06^$@4Gcjx7FvvjXzA z5_se?a@TX7h`+8Rp7nlvyx-OX9#0`o_MP2L4x@sKWHGH~;hU|7Ip9^MW2AYr6N(njX>vY}-lOWmWmVEowS12mrgU zb>oi>!M4Ql!@Q1Qw*NZ7Aq|z5$YcCh3)kNU6AhrmjZete`?dI6|C<#^h2N`T`gb}X zxpjmtdLcO5`>cPP)L#$t*hW$z)(v-)+6!T7|MeRZ$ItqIo_!NyTg1Tsx{p(%e!cnd z|IJK3cd_G0hBb*W{c+5|L3A|UF?pp%vZ;TphSr2_+j=8n0CMU=UV+g z@1`ulp8wbDH{{m=7P;|jasFrB`_8lebG1y;`qLkPk-by?x1su%O?ZfMH`&Sh+jdUc z4xMHAiY5-`IfM88&hh<@m*j;N4P(VDN8#*)9{BCbnK%JG5h zFj-g2VC)%>`oCJ!s{H5jeQX5;$41V6CeC9rz|Uipo0|s@Pek=^tXHS@!#$ZX~`)GVkvE2wqW{Lwg?XSsvd2^ zC3Zm#yw@~5q$Ium;@>{uJ$2&YtURv@T4IVkiuPw~vDE91$P+s$}(`mA# z6_h6OWn_J5R4Ez!ACfLpU9n~`sWRdLyIzCz41ecEN8fwmr>}}SJ|&Xwk3yf9(0xKH zy{0*fu0JbM@Ik9sfhBbE8g*8=YhmHj=9!}KQ0kh5EjW~4o*=6(J)Aukv>))xh$&llUie}df7kX&{S;?itS1ZgknLQj5(dyBT_LcK^U+{fLiVTi;vY1IuW<~i?@sFQA z0dCd(Q^>91nCPe0Z4;RD^ooyy922--?zQB@(|-5Mm;)$wwZ3zo?aybPYfNbDkIjD3 z6wI3}mDpY5&a-SYbF$2s2bP)3;54y3>)x4DJfxgzCtUbyH799l%!%_!J+-DJFzD~R zLLTPbxmScM=ttY4i2>%n9Kw)`&8gjvi;|_c8vFWI4(xN8ht!{0jn#EB`weQcDkwS$ zIbryuP}XVJO29DxjPTbk-rsPRoV`XMcbV4z)xlaC=LTJ*(`)#CugB@(hP)bPH`%Wk zlQknAdUoyDa3yKBCUR)Ge%nd=Mi469t?s`}lAm(&M)T-VU~8ViBloVv-HEKiS4@YE zjKq96dwwJMKFj8})sMyr`eSXSnUpw!z2A}*3fMbt^_-Ajl$@d9gro2A9=Z025@HOW z$f%@BASOTr+=xezp9!NMtd!3ROH$|MahW(rDfNS@!DfB-(&D$MJueZVjT(lC3wY1? zuV@tPE&f(i9(@nmkKq+ ztV_B(<;**v*X*|Rf(sQ%j8$Bcmrlx3V#*YF#1exWyV{GBFjeg%)`R$=vGyZvl-> zr}46-eFe+SMrN~I<_2{JZRSU&Db<^1uf<0jm>#0b&idH3(RlFVHeuI)|7QF<-fP0` z+yJ>?m)w%?Q;$V#8&TMmgH^1tzU@x(^hf;~PWPr}$rmZc?fI^z$;4Q#s&@iCSmuPb z!L_0|tB2wnS;07$K9fZhv+)7*{AzM}OZn=}rjaY|!>c##P4Zg?vDCeNEEwu-^p5nP zv1y^XBz?Y-Z2DIh2*9f$5l=|gviba(fCZJhbv zzx#e(JkRHOJ^O_sp0oDeYhCN=_5GTmP^^&~Q42HC>h`na<3%;t{PwRc|BzBI)m!t3 z2yGe8-%9Tc#Zf#I;*;b1xiLB9)Ip>XQRtqcTh(Lh8k932(EU*CsAv~`SC>AoW8G#X zTLIT4BK0WJf86kaE*n*mg5?|5A}5=#9%^e(Y`(61LVGH6 zAOA!V9H{$s35fEb21H5I<(tUG&g!KMgO;C=GLT(M1@*SUh^bI$bV~NvHD)uLE(+)x z8!?t(6df+_uI={lb`FhDd8(_)<$bbMIA*N7Hk=oa8qqy8lSr4pTTiA|rrSHzNlZ>u zrf(xm!t~kYZk)X}d*lg+*4e1gwW+IydoCBTzGt8NSqhuX)|&!W#)~?eJXRY;XO@_x z&62jsZQ&V@8SC25>0z630+R<%UOw_`FKX*P9OBvP2_-*cCqnaSs-X{2$4@;StHzJOqJbRZ`?cSs$J2a7Od`aB_muPo!HLOckJZc%wAq- z--=%9*p-bez0z3VH8|9qwR|D%Q@7q)NTpZm3Pn9-sn^0gG+Vy7{T~$rX$AK6^`^Z% z<&mAeB3c9B&nrA+$ zg{OUl9HOfHw_C{vOz){bda9b7w<9$=kw4C58iyV^Ta!fDWS^!wdi(eDvu4!@AMvUl z-gc&18Xvl7QWVxW#m1MA}Nh-t;So@p_r^@eD&7mL951S;;Q4_>~~|0@4SOzTmQU<1%B>^IqMZjjbbFF z?Mrv_^h``>4_Fpz#;@w1>WCi96dZM;FVV&I8Oay$Wb`?9VBgr=PHvGcb1M(DI&-Ms zG{#BO_ljq4_eyG_P~N&5mtue5jlQ3nbz`UWrgwp9u@FD?OT&!L*B8I780XE3^t_?T zFH{;b9?pC*YdlQLA0qafTw4$a9eak0er&AKn?9aIg%uRqrZ4TFXs9@&bfr*5rMJRY z!PLRNUIE<_T=6QmP-U|HRn*!AA|sRhQ895VobJ1G&%$E#8RWjSkR@s1gzjwxy*nDt zl8*=-FHmUB>$NH}dP_dmn$fpj!Pv*K;*5JDC*gb}B!9y;E^C$d%Za2j=ipf|L^Xj(vYs zpiFyu4ojf*$?)Fe7iDYX0RtS@X;Z*CRLC}w_BG#kr0{xoF# zBBkfDaEok(!0VKXrNfG~M7^||mPBdI43F!XY2@z7#w4qV#0|Zj>E8NmCs*OcmvcPZ zpVSgO@Nnj6?M1AMa(v+K&=aEpBMhC4rc2yRgvN0G@u31XM&-8$Idv~43krmNj4nD+ zXs8;nNZGStdn=fl9dxx1DbTRi8AU7HNZop@LfJH$7Cdew-Ifvh&QurOo9Qm}l#cw) z*4-`@zBHF6>;=^XU8TYy-N7XLCc3_S*nSu98r3vV>@w0hdfx(d^^|o@>sr)`R(%9j z&z^uculUx7e>t`MIp?@j?ijE!;2=w zBoXRG1_eta?CNjFwZp0v;kcHyxq6Y#gi`Y=Z(?4^F5V!gevN;k`rfzAjjSCy^mtFJ zkEqLV;gaFY8{@PKM+1EoD6#ffUCq&BiLi9d-h9^-#eAc!(NA_KFRaS@*_Xz1BiWb8 ziTp3AIC^^9Htx5Ha?__|xEiRP_1X0&?wB{SiL0N9>L=_Rl}=AP2U~$o1w2Eo*t_x{ z7UK6>QK)iTN$lwskVWU)-X`@1=ju9my;vzJJ3cDtwYyYJx;8_2KM%&o|K>Z2Z}NL$ zza*U~|98tf(}tbQE^5CS4VRS2FQ#fHjcFRyPk8)+^hxcx#u04@@RdG|* z=3(=i4i1YMk5ukk&8f{7PZE|rh>UHM`fp=YlNq_Ai^dfq=3N~BQq7pjyH%f>AHG?^ zD2X;(S@YmI8pEt=agDoqMCk>LZrAlS(WmOF3y2XV`h=jwk}pxpHjA_KDj%0@;&{-Q zh07e$eUP)7_PxcP+xkkC7UMlVtO77}YZLF5wR-fwah-$IxC{FxFRixi0t7R9NM>DK{ z(lE@DoaOq!4kz}MN>6+=cYHF3YNcc*0Efu2=~S!TBjXCu%16k$34nN?t3uRdN;ha%&gKR(jV?oNa$dwGdM&V;X zah%~Iv2U|0On(vbj-JT%)N>FQP4MdLTIMKogS~daL4#q=BJNYV(8~RrD(SkU^~!Ss zyG@i?d;LC3Gln@s2YYICp@noZ8mckYWra#jL+lMo`gEa6UMV#NrYhd0!)9eGaF$Ke z)HHzqbf2Sg!*6Anu1RfE!60X`l5+5Efo*gD^&9=~C`+j@{nZjNf7iPCtI*Cx>-=^! zw!wFMxU7z7uOcd6N#8NZ_p`y!9{X8t(QbvZV^ANqS3%4pkKzKsrZWx&3vXA+2oHEGRw+-BVCETjr))ZCApo`0?w! zaTKFRA=wzSc5gkmF%Cz&a#`~SZo_-?+|rZ!wDvjKuSr|7LhciOri|-CJ$1Hv9G!AX zo3G}3eZ}j0^D_Ys)T<2Z;k#BCdb5K$I0ic~ptPZHAW}ek%Knwf{wG;%jsL29SwZJZ z&9RJAMl8ntYopOD1y{OGBI>4ei+0#3tJr)lIcz_l&z0 z1vm9~QL>T!RusYf!BNATXv&Vx-V2wpuC4@Jl37b@;=F9AXu`~G-t`HJFE!_>64e9r zn!8b#4zpq|dnap(o#_M2B_q>$=*65c1wb|N+Gk6K<4bu-f$n|=I?tK)4{oF`x>F@LDCUD)2WrRa47s!dKqq7 zSm?02;!SVkdU~>&?{FCLvXYSvrXz^y>nD1`t}dF0dt--lZ;XGpE{h9V`HN9mg_#Xb zD;GYpTv`HL0%}(qjBgL7XUc!ME9mA6=ouhG@>sd~G>pneruK0Q0#-|GQXM$7 zNu`gkf3a2eeI`_E9MyJ;n<sOGM_Zs69U!p4pA)xnoGK~f$SDq2S%2gT~-FJcqJ{LwFw~eUyWsKSHL`7 ztoPM2mAO~|vwL${#hm?-A#Cr*XyRkte>xW{)M$y-wW=tQ)jJEBW*G4e$)Fn^du!k0`~b=TO21wz$~(LyfF{m&pvwUJQD`qHZ;^F#U2@6W%-)srKC$TYTd|_y~_(SIKi%+oDY6y4y>5 z@pmg}0)=AX*H;*nE+z+C)Bq+Q5n_l5vQ$+YQn3yUP=_en9X z`+-}G}pYyLi2`4*Ds0nl$%X6Lii^BPC?@AEm ziz71gGRC&d=TL(vlni)8Vh1H57i2l=!fzJ1b_3(F7Z z2Lq#>0u-`6)m*3iSo*I7Efv=U`07}Qr zYPT2#9S^^1MQu8o0+MarkB=y@o>zSt=oRXxU1+%9KL10{w>IMftZL0|$cdWpBF{qk zu$^Msmf^zXfFH#lIOj z*1#@_8L*B%J}>kpSxPCFW?si~Zk-WnJW%d{|DO-3f&Bi!5TdtDWF;M{8J+U6DZ($k z*P2D&g60UUdA3L4$lt#%0u$s>{<+>?pn~`P_adJe^U*9cYbN#7=6 z5qnuqCQBHR?AX8;@h`_H@5gw5~d;k4+q{;I^%{o!Y{&&*;Gu zo~k{L=WU2y`1i7s1bzSS6=?mx+c^>`UH*GbM}o5X_qsoasE&WHXaB1a8lNFL_@C>) zTm3hIzeM3bvG~6&=zsg_U;TjfpIH2lSolnG_CYxa%TW66&IZ+?A;bsBRUrzM>VL2Q z@0#~B-^qfM@jnW_5%*jhe})5hePQGrmXj|{q5BKDDyTnBDZ%LyEV%(drZB76>8m_Q z2c&giYLgy9Jl9!+{Mr@nN^SoBV|C zA6@7C9C_aNa3p9ha_sbPfJIQw{Kv#>UqDW5VJ&jae{<7oj~*5K!7=d04H!49_SYwd zfNdPP93sx|Y7^zWJ6M5#4Cj{uY5pA=!WkHvR*1y179cT3r?jrzAljY|mNF|{NKzsA z_5H*5=igVBi>WUsm!txh&!|e|rii7WDZl_-e$9i9&5E;jYWdPX3ETzHan*f)i04pM~>4wm-VSUqw7yGV~ zeALgUDD}Qz(ESfwHlDsl>G6)efOe8(L&-()5U>oI0 z!TiVHhfLr|k-Fm)98F_Tyz|Di?-4)i@#AyRo@a(hQKDfjA7kU^NM*Xf3CD=^+ad=C z?Reo>-XlTZ4hJk&taQ;amlLv?d5pXi18}E&7bU(}^*W)>t zyyur-8%@i$Vyg-2>9924n7Wv)K*(*o46qJk76m|#h+z1dI}Q)$6MP>^#|#B7c(u}U z_(HQSNSgrM?jS_{F|%@;i%g;j7BkQOPq(t=T(O#7O7Sli3yEPy^jM;~%_5Y|gxKdt zC*WJ^kVSbeE;lh1n+5ji3-WM93jL;he=hqZ?N&u&U7l@32S0Q!x!u?Ne zy6ImpD4)EpKi_uGr3_)yOv|&B1pSz#*s$5loPTGftM+%bE0+dCMaivKbsR-!=Dle2 zRMPANz=h2U;mIudkk}tTsmbtCTK@fHRUHn)UCq{ynoF`W8^dR<1MdFnzCk!XQ)vNd zry(C_4a%#~MUN|F{7%#hC|c_^EA%#Rvni6(zt{R)sE1m^kel?ba)NY#q2j@CPx; zV6VPxQGiM54DqUY!`EJ1-e;t-ZKwW@-tlWQKuCawq|R`Qy|!a{Yk`q22M4YPxl zgP6m5qwU-66aqTp-JBsu6<61#y_}@>RJ}b8=TB+Fvv~M3dJKR09VuBKsTMG(SCQDI z2V1fy+LZ;z3r*39tQhujDrifU?Y%O%F)%(PRCv75wrswa*|^Z*d~ic&hb^v5aawQJ zPNMjsoepEDYvP))y|@PL-OF;*qLp^dg#jk2eYBVfXn+S5vIVuc`}{_sp)GBnug|t= z9!%hBid8X)QVMa)JXGM-hPd=Qc0&F%k`(xWroMrbJCjvYP?4pTi@l)l-%~E^@$4e zHn^RC8rf_TeZ64G)t%3BC39iFfXkj{vVT!>XDUl24|{{<^4G=dRVo`|R}!-iE2MWU zLR|E0Y!wwHi-u}m;nXuEI_uOi7=IPif5|Z^)GNf3r}#2etE6Eni?0kl)qsaz^(3u3 z-r=!}U_dLu^iq9R8+#^U)nu0fl?(3F^IR2b?(BLEJ5!RBfiw+2&8g<+_UrZiA(?gN zr_JK}RkS;{#~LTh3ZImR`!(zPLeNrf`=mEyZF`Jjuq}<;fK@jvfW>br*_wRGpGA3t zX7luj*=5-BD9dpo2k#Q4@x2Jzo;1~8`_ltau<;6;^#@HLstCckxNeRlsps5WWx@QTK7gXmtY8CRY%3XrQbgK zNHAkng|rIQ6DJ_^1D(1r&E+D;;j&T8;jgKL=PJ+7@Ny>k#iCMzgIrpFFW)0-siNMR zS4ETfM706L^#M(j4eEa6y}smG{xN(~Gyy7p8q(~`b`M=fvR--2mlA1H~o9 ztoJ3}aJ29Ef<`C)294kvSB8omi9ru~%B;>jZq{I~(nL> zkbwm~xwjdX)5Oiz?>C;vAm&%)YqPf4F{~J)vSF-A>cHX>E1THVJjuc9AcV%&Whb~2 zPF`_^tW0zGAo$94f?Je zrpT@3i8bEm&z))1Kjankp5pNv6^^LOEGL&{E8pRN>fP_XkM^OxC$kY>x}m7(YC^!D z`9ua#-5f4?h5Kr1^e5Z)77<;crykFCAl5Xl3I7O94>6UaHhRbY_9wGMg$w&0s6=$j zzDLu3>Y;|8Pwc%WG)^X;Hy1H~CL#Z-$+4Vsu0ZSlOxYlDi7jM6{r^PE7S#qr>ylpagle@<%Cb`24Fi`yQFK3_bLsqoWMk(kzIyo-v1pB(xkdD=1KxSsrsP zH7f-xdiAnNILHOIvSD38XO_@3L9SlN-x97N^zQ zub6v#$oEnxW~wP~T%4D z@23;hePDJFyem)ocRhLkpoB_q1Q9vk67$Ad*^D&Uie2`Nqnpi_(@I z#5UCe@p)M#l1eEl@A^k7_fS;gqfzXsoV{OV85VnPXYnqxu70RsTMkiRAhvZ_SyqiQ z3md#RC8)0{b%R@1UsKI-yv%u*La2NpFN;Q7GOVoi=WBv@k3(0nEn$z)e z#dc`hK2jrWxY*Q9f!=yFB~LNT5_+yOo>;P&VQnTI&Z6+L`b49}U#{vvfgoSBl-*YD z^e8dVK}jXn;rx^5$1NL^w`;W=^m1N5($0;CibQBCSZKOHNk=t87j(Ls@>W1a+Sxib zVz=LWLLM($A>~P#OkSzZk!yU)n=Xhk3_hhemBi)i#45xkl#85ykP>o+_lwe~ZZCy= zRr{(zgPcWx&wX4BV#7-_>rxk{kTrr*Eez=ZLk8;i?kF0yG9-=PuDi7515U7U51L+C z`i;zs^XEi;fMnuf#WJRP8_i~%^SGBHeiC~IHw3=#OjTB@6U#yvoJ)QFQEI5N-B)Cu zy-9OTTtP9+l;?{w$ud8EU&Te2%Vo%{ zypDSwet$zMbd4Fy$~AJ*p`R1=<0jqyIv>`jcBYvv@4;vgF*4vc^^vhoZA=A8><%#($<_8kuw$f;@Yeg)t2(lC)qjv1vnqiJ3fXVP+vqsXKS%N5W*_%(Dg ztn~X_(coXp=2L6)OZw;e;Fjq&X=!;OcoyCgNJLF{r&pQ&3BqImH!(%VMdRs{a8r`T z3oNvaoX={8w6wa+$6q=N2dNyB9(-Ea3WVE|!`JeK;b;N!ZLCrx7(@ns82qoWB%FTx zwK<}Z8h+EY;^JXA3;X}^vRE>~pDfi7q-EF##cj;z!;K=TaG9b~pSXXdBfgO9g7=$Zy||A$R85d^Ak;Xn3vGR0g@njsN}1d}Dw~ zjIVFpTOJMt+JF1zKb`jfqlWHI`U6X8$!1zeP%HIBa)grN!h8d8rEDOeUck0R&iLlL zv=AwqLC1a5-wp~bCaRaRs`zNH6SFS|zPQaHb6S~aQLjmoP;b6QRU^GZhnPB@cxJ>;=Pn}HAR z1VFyhH*kUM`ml|AEt04F^l(YYkEl1brYB1sknjM8GN7jV^k^-nSq(D`Isg1_Ng6uy zoVt4eSJyYU^>};u68622&~`}M1G{&;=2{y9BL;YsA)$b!zYXYVJN3yXxfn{oadlmA zV~5N=(1j}sE%qag*ocYYHLJgYwQ$_X`B7Z-w+>C-{WGt+0l3$(%g#!2$rwaxB8b=6< zS!p0C;Ijc`fTin*4+l^Q0C3tfs3ri-?9vy3V8H+~z`Atw@&MwQXv=y+q6AHvQ%-N$ z=3iqHz?gyIzP?k4b>5aj$kkHQMkpgptN;ydw?Tb>{On}>kw51oP@gN6qEatji(&>s z9AL$xqD8W{aKpUI3ssX`zs5twfb|w0U8Mhb4V;b+9H5>#1O6mxI;pSBx*gyCJh5bG z11Lj4XBp{qrzc=~TMInNEEC=G9tJo1h=zQS{ z$+th>(4ktG8qxu>R!a+zeh~)o%L~c>XWsuY?ItoXRkHxGSOPfEV$Dz`d8w)z!TzD3 z1K3N0OcoH(dZ2LXr#w0Lv0zRrguoj>O$!xD2^Nlf4<}5kEJ9ty88Wq@^y)(eMOjKY zlZjy(4l|z>9cQ$BJ8#;bnceHx{|#T!us}z|6JHV5(aOZ147w|UDeU3FWyc5<8{-b z(Zc-W{iy&=>sA1nw;Qkaz!qyy2dPE~hWJ2;$t}KLAU4VVQ!olsH)k)*j}X_ zAfAl?9$+8rE{8v1WvqblA~bYwKs#X6b~q#dnEz~xzX%Xr5yau;y!QIK%u2{fS8PSC zf!y*o07arsBk2S`*LQZBiO?<&SifG@8XVOq@*oXz97yNn5@!XaiC z2Rh~dGavuRIqaETN0^2+=qWFRxd8mK^)(Oxdm!9G0F(gWNxTY(F0ufW%?;jS6gJ;d zqFCkrq!0i84;(YVKU<6o0I_)o^%6vX7-yEu0$3XNMlEhcIgQzXFOVi6#B6|{nNlJ! zklpZ6uPw3!xK|`2*jIvMj&)ku5JH56OMEb#r)vz9-vEG?XZ`y{JmX4GCe}XHebKNL z)&L;?XeSoO?+n3p_NIzfDt~9mSqW^Yq#)ry^UN`15HDHxhu02*$qdV<2~Q8~mDdRv z-!uk3hyWE*Hnx)q)tStLm33G@w)`4EYF>vj6Oc2Q+XLESB{J^-6CLHZ)g{K@VXKsH zAZ_3d;7uOUBr43T3+%%t-Gh`8NNsPfJ%&7-gCq-B=ROC$fAPqUU6Qk70(F&2o1lne z6x9vW?|{xIT5S$nMP$Fa zk2TckD4P*TZk66)8h5iZfE)F6t*Lasz(W$X2Y9vV0J{9fQ+o70}p zM~(x8cQk6%RHtqOSJ|`3O{k#VB)%t!K`5<^hko3+=vZ9J3)t3RArQ#C@!i5AkIT!| z9k<=J=oYB7!fM{%6AWPVM6HOu;dHJpIR^RixPd(<$r<$`%XnoE1EhPQT@*F)KVh>zY)paIf~+7K0i zp^WHpGK69oLcI=LFrg<;LBx(RQZ9ECxS=#hY_`=5IGS}(uKaO@+{B6;lx-`H)6a`L z8WIhI@bGJZxp#}_$aV|_YJX&o&kmG?E%k&6lo^4YV{vxF;pc}d;Vn;E*8wwG&3UI6 zfgBH`RhBtf{KBM-?DYVEG9UaCG!4;Bv#Xo1-7)}qY?ceyFL{2xzliJrwrm3Zc`L1> z7u-v4t`!7}d|k(8z>j^%04NXnp)wne!AF>kU^+@~ErR|~trJ65ZyFPflv<)q2WFbX zyriz19s$cp;$g2ekbRSKv!lF$HM7^}7CT!B?<%ldIrk~+SFBfKYv~B%C@cZmKSG29 ze0es7H`NFbmK^`CO(3LZ5%eTmTZzp>h|`|XAw&@T#}hbt{M&#Ud(%za@BkMeaKQ|Q zm2boJTXn|0!dsGJpr%7076JIK`6?L^vJaerGJ+;^>f+_=1Ax2^h`G6~?8DowU*7?| zJi@q>I0Fc&S3mD@x@k;6g0(QdlA@-ff%6(5aczBK^VYZAeIt=)3d+?QJn3$ zo)wu4=7Nfl_`(>=wTZ9`?iOT?0!H@&RS~Q^BGyn|G*nep-A_k|s8&ZxFlg|L02)6E zah&u`)`8v97T{6gAFkrjg9h<_g#gSAO6(>fv(EST7tZz@_<_G{9V{2spbAwKN~Xf3 zO~Af%8o>DvLAy@-ag1GUUIRWPWbM5qz}DD^>6TW9i&(a1PiY=BDF*2zolfrbYn}my zKG?o~ooTK!sZJ0|1Y_UkWT!u?qzz`-_Vi#5;BA`+$@c(>TMcLcSoGU?0L2w7*OHQ+Pn z1&D7TUE=R?DhSE5fvur|>U=erLDcpagY$ye&L(HgDuCL?kaOFb7<`O28tAZY`K>Nf_u7`=?*RJ>F ztJL0vsl)TE4IjOKJsCjE*Qg}IQ9wQ=8OfPb(6Hx8Y{m)fEWr4CjR9;U;>~nRa7aY3 zn*xq`n?G)*-GrJ8*!RVZTbJW3FgHmTfG?K^SWNSz5*0P1ht|-0HJ^ZD>l={$ zLNxb=TC9uQ>O9A@O$!#jgNbyIkC5=yCE(kuQupaf20fgpw zKX!z00U=IIpdA4zh3Aas^hXCTR*Nk>ZWhQP847tSOWnle`5xq87&yFwS!)3|keOS3 z6C55fW<$@Lq+F&$`LN`9dU5q}uY3g7!A47oB$gT_CbUma;3=v}Ke@+v1US`7QR}SG zh>0} zLKV^OIsceJ;>Wociq}`N%Tr3v+*c0)3if^(;~3Z*5(OIhji5q`D)W(VDP~UPj@MC{8DW7$%J4a7W!go zMhWUGF1&69VYqNTOmIdd$yXHtVvumW)PY=?HWMH`8LH+LJ1Xy-;Lkp=l-wucoJR;^`L;4)rUPQQ2ng!~$Tb-xpFSwy zLi3@H`ZZm7OEmC5_8&3|w*fpf*!~+C(&pma&|89TpR}<2gOu6(o?s(mQm^ZRCv zqHbz=dVGLTIo4Do%xMT;#^hM7sj2CX46%O8mrv88nc#&1chW3E%o=WtaCsu^kS?&~ zVPpurFa#qzx!*Lv!;3lHPR7)j0~I6TP9hLZ+k&;yUt0#BS?<&ATu`#kaG$KNo6HW| z^WCtez<4-qwjg|3PNmbxu7xdTMixaMgVN$asJ;@cDQb2}YMrj7tR1T#BBBrU=v zgkxk)UmYdQDcJjGHNCrkc-v| zQJq+P@5GiMK;XXF0GJ;m`r@_W<3F6)%6UmrZ>@u8HNPxKuUbg!EVSm?yU;f> zB7aY^9acJNdm3~MkTnE^gf7k8rl+N*a|M8L5}@8hy!LFXf!U5{HJu{;4{uZ$gKbGy zd|Sxj&ZjK8jNM8sm<-F!I{3-L@Tw!}q3OZ|xSV(@oW6?A7Twe9ofC0^YEK3D5y#cK z@qt%Jld9(&x&8DfABIZKV^yPknQ;T}$BI^4tsF5t_EyD_9+G81JpxhGQMe9C%My$S z(GFW|+?cYiZ_;AD>L{mD3HNu%o~8fQ;rMT!9>VroO4v02pS*n@^BPip)s8|&yLe6_$z7DLWTP}8adKM;Q&q*{IfGnl83 zgl-F)AMrKbY00DjUAz`ZTL5($G2-D4--8grKFKnL- zK|C!5+C8E0E$6Mlg`h+=OlQ0h5;#Vf7AkK#8O%X`iUhF8Ws@Z(tlqBzEm{XLdX15| zkV@STA)Jh0HIz9dSW#jHfP9FgIaY0>es;VBCSoZve*&h5+nE;Z6zwmi?}l@+E+dfp z;97qUimRTB2BJR12^9R)2=W3xDZ;>&>NE<1L?HO3Ly@~I3Pu!hFz3`jBIw;iV-s_! zA$DFR57YA)&EC zyWe`OhReU36F@=ZZZM&Cb4r9Wtfui^TWZ%9*kJR_(#5oRf3CE*+DNJZ#nx>x6b)po zn8F(*oEDI8xJe~8ucxJRRh?eD3ZV&Gg-oBw*>$()wxv3Uk|Pk+zS%waQrW@_K3i`M zpE1&*iTK$L?cvNN*jO3eOm1V~t29tjSU**FrW*h^8Rlns)|vv$;5uN)v)F?&a$(|D z%zfSRL3qxQ0`qq-8KmX5%Sx;A7El;yhy;`Ib+AarFK%9a%|UUKG3ryHU`&yv6T%)I zuwYlY6}3oGCcsp|#wx%iwgyQ&k#<9!%VF`ox)2;!zMsA2LY z*axQ($EqpaQ{z)6zG^#UF{L;s+@}?)Ce}%JK-5Hx6mR*v*dEH6IXLdz-_0<0 zrir5YdNqC=HfJwHtW@m@OP#x4A(;ZLbCjxl;Gm(HPmtjEV?@B^_~qJZFNtIeKo6%U3HYnzz34xkuss`N1-H4_`>_ zp|yA+I);o!X{+vk3zZ#A!J~+`>M@X@GX|b2qdHSgM#c)5TLNYs;jP>BCDTD&t+sBE zH`|bnIh12r6V>O_9l@|-q-pNTQru(E7>SBfhpohAxAOfW&hZ=&YIv@Rj)xZ>(027X z0P#_`*A71rk}(%Lt^fRiODQf)MoCEZ1A>4sTF80Mg3Wi_oue$eoXO{uu>%U)1wz*J zy+sHn12buW4B#Z=tp_S6A7SRynl&pW4L5X$)S7-I3Q>&?Q)paIq^13_m&trbEE0^> z>jSI2^g^zY`mNo0@HT|W5CR%ivl89$*6Fia&Rw#hkg3*`q$kSBI$h8;5=4t zkFlx==H;lUs0O+-=EcoQNKlE)9n0IDjupb5(CNQ%0$j8qv|iW>Hl-HrqT}BkTD~w1 zj^1}PSh)y}A%sXQ%$c!T<)U*Dr^j>rQdLBmqy6f3>YEnF`x`sdykYJ>bqFcyv{rFK z8)%e@YKTUHDl3kF1d6%P6e4?mNcZL0S-_V@A?XtAwNSo(4U&;!%-20Dgk|!VyyNB} z1`%q_`HL+E=}ds@JgW;uZ9}Cif4d}4&h|_-1Y{|H$chHH^AJ)Z5@bmDEwPivDJj~G z_tB0ivq-PBbQm$i&;X6Zr|M&aUStkWoQWqPftdc)E)lJtC`;9^gM?_g<-H23NK3Kf z33zYLkj((9-zmM8FP5FJ@F_A_ZI=gbEy9jIsOP9;0?c*KN8i^cYPxa26RV`muZLKj zD5)~h=Mf~5Qzm;s4MUu@cHDk;+zv`?4iar<``!!3(Opp%Ecpcmy5?i=FI?9QenYzMwMP56yNHQ5XdFiY|F=^a|`= z^(T*&yWuv$e7AEI+l0)s?n$n!qE5&9EJ$uDet^*Uf&D(PJtpn3Q=*npB{QDR+}j_J z3W&!QJD7D+HY2%Ru7%++e&|77@G&o@Oj>&kWLaJu$F&`*eA}@&6gb@rJ9ygCoKwu3 zD0ETA*t^e}xb_er)Y+VxQ8`ns>RnF!$n=0$A$yj__OBjt)Va3putr*`j4PnOBWE!P z$h*SSAV)_f6+Mz#qzTCZP*${b=192(pUtTsomCm$_MkcCaCbq<)uAt4S!AaP5-OWt zwEYiisrZJPfdTdo5lp87{7L9IznV|!d0dBIUsWnf72mYlX6)fBP2doxt`zJfK%~6qkMQjO0BX}>pN3R9Hfh*cik-C7r(R5)OW{U>`B$8ZQh`) zyR$x2;aIfs`ex`eTwL5O$aCH;Ql%`ew3`nXn)-bF*cCQ2I9KOU4D|#(m(+L7kT~cHD>5IaulKdQ zytUo+$iIM6BD~n28X|2JoO(FSeV4>}hFa=toqYxvFjKKFytZ{Msn3)X9+zu|z1#gX20hU1D{SUPH2RE6F8w3M7AoH8tw2fP+geM<}2x2ken zP7d2#hCuItVmkwF(ogzpt@*dIV0-151wUtgrmsEyO0CT0q?Cu-6rP=?){NI``tO`& zX?%NX4vsw#gey2?BV~4L{_xhTBg!`&YgR@EKkh8An_cwZrHA~(e8+=M9QZ)tSN}fK zCbj4*gH`1di*`EaSuEx_H|639L zNV&bNBx`BPTh*_EWq#S&j752`!YtOq+%d;FPItInj^Al$Xc+dA7d#*@iCdax&S}dx zA0P8N>TfXz>2P@Wu6UzwcWvBU?R0u?I7eG3xGEo9#roUN$HS(kf~k<5u{>u|NScrBp?0#qoH<#WPg_j9%N}6 z-XoJwQ_$B zGPe_w%)}RQJOgwaGhTYXX$U}i`(wr0v|4Atz39T9hl>5c93^Ml4g5SaUO*$5el31< z*sTiXZD}xTXl2v;*I$1@s*>HPr;#{ID3ij3Ww4ZG@^|99cc;;*1FbqgcDn!iCx?2Uorgz2!A5F48$;^w6_6cV7=JJE`C34Rx2NvcLhDW2l5d(U&GnhoGL%Jx&gD(AIke^nfEqAd^zuw}U6!oXA_YZ9$z{gLLC zm0sKNSK0D%V8=a5xF}I6Tyk+HUWzZYmE4Z~gI@fnNp*)7o(#<@m&rr)m4Z4#24Kme zps3q7bZ{u$K$oEw-d6I^Sz{WH!|HrMJCRWf9f^OAGuN=CFr zMVrJJDyHi`q@-am7;kTH$OAyW(39jv534EUVYuy9Bl(<5eQFbq^@a$MVT zKjY#m6?p6^w)aY-%ywlaOj832(>`-OXhkXCnAOoTAwfYJk7Vfv@A3E}bHx@OA-tS9AlnfJ!b=8|+0A1a2i%FcAwgH!A` z6ACq_AJ{jqUVR7tpx1T6+&4e|0vIi&Xil5)N@vgmQJj`>d8RYP312Z~9#HW#g}UH7 z0$g0#2exR5g{+a0kxBBi@Li-k;^c5=vnia-xX^sO5*VO>QTHkiP8HO56DPCM9^{xh+NOXw8_8E|7wY+>F#!Ov{#bUH@ z0*>cBFP(!CV|F}N(~lCNHJ#C6VTw<2VuAu{A|pu-Vw1P}9a#&bPGq(ivS_`hM#U4A z?EOs+c>6NdhxdmsZmkKJN$_17EWZ8jF1bVq@ihkM{xW0gdujaR1AA4 z*g{pkEHxYnN-8R(^#B-^>JNdchSNt(PhWp+xTyWzz_&jyvQ!y>@)X?207WfDMRVr! zYH)4v+qZ8&f4+G{0v4j=Eyw5ZaO&g+l|qvPAp6~09UWG-DQe=1S%BshdVPxcxHx$1 zxwm|FMVNA#o@}ib2NRG|04rc!q`J^ObWdt!sKBon)F@T+iU#hLzc>{MVg-v>I2~>B zBT`KlDxM`Z(>>c<{YyNOc3n<2JF0i3ziq z+2yx%{<>aK%i*okum_!;V^s=_;{Mb&Gqa>;?j8bl*2*Ih*;i_}W_Ik?usPE#6hKCI z4}uR99x5g#Y5#ySo1H~@?LqOyyE9k*XHJjjfxPlF)!d_kYfQLI;z43!m#^(sw0j4!lVQm|*2i8%CW8~X_%J^9oGWV&?p+B&Qz zA;ZEPIun_K9ZV(V0{agNbDOYD$#@;)a_$ZvL5;!rl!Unmgw-6Me2gIsPiNZ#>z{0{FcE&jhI=j46!-m;|HjT_N6Q-@L_%! z^iR;4``R9)&pVu2YA4A5HC6Wr`U;q~@p!trjDA??~oN%u6vXDQ}MtWGq~BFybfXG!BR!RvIYA@(*5(63qV z|IRXfHx#*m_UVKFi@moD%W~V=hHn!U#Y9jM3`$zM1T2)4Mp_Z+4iyE&rHFt@H%LebBHf{c zf;0jO5+WcWqLhT-cV2|gdiT4Z|KE@IKK60!wHC^KU2~2(#yQS$jxhmqj(!nB*>%&F zEe;(I<-{uDYc!rBoJfgHqOn)mvPsi6?_GOb4Gb70z?*A1aF*F2=2$!W{AXI(mK9@g zCdO$J-Eg{uYNKd=s$KuSM{<>6SEU=jj{Ek)qiuaYL#XrWWHa&$MC^OcOF=7Y%=4!3 zWY2p8wl1VLy8F3o2dkjG$m=Mp-q>=ZSNw*xqzl!nSFd2_cGuYG1g#~+)@q+m)ptw% zROEa^=tW22jjNX&JMtVXy%IgY=#O?5GIp73YlkXQDAPFi+}qtwD`b00uPM*L?A)KB zlVVJPM;blGN^Q5a#4J@hA?8gu2r;j#J&#h;E})h}w$&#d3I?{uD;{3_y<(13w)&N) z?^iH#3|?9Pc_)*+(?r9Wic*3^=nPqC-Umo}iEXs2xXZ#X1>UT`w|C&(ty{Nr^6VAA z9eN4JXl<8PpOI2DE3JEp(O+|+lJc#JszXR(?zNx#hK7b3QzxCA3Q|L#Jo(Ij(?2*^ z(_61K+e+^+S8zmx_>C!ZtT3E2D%4S0h{-%iJGi}MszhWsUK-Wyi`IFe&)OzHan!x+ z$ouM~vdemJTAy#)w5h)?VsuuhN6Fzw_wg?m_4W0G_RFDgcT*=|9i>Re$ndYkj0|2! zNfY;DzacJZzeY_-$q={i@S#J%J%*ybS74UKy%Xyz`m9S72)jdw0$*j9-~eao^F+ zy?lm@2RQyrbk>^$KMUxzzX()V(S0Pu1>kp%OpFl~!khY?A5gxpSx*$f<@D_2kLrtNX;L}CJKH4&9H{*+-@WJ zF8QY}KYLEM9wx5Z8+%J9WE=Cl38|IP<-p+JS!DdVV*a?-{j?)*TlLM3w97IxDV&|x zzHFg7cp*ewhU*K6B`$v+ZtnZVO&d0EmX(*Eick3TNjo?AS)AXI&svE-e=WU|z~?22 zu3pj(l~pGm3ald|qvB*f(CWAYr6lp(2N%Q8*$xf{dJy|3mDj+O66KWkQ%}C({f0Sj z&UpQ_M&-SB(`%1s=8c!&1yQ_tTFOKxY(D_%P+*J!h#8fHv^XBWxllos@_a7Z@12EO z-}bwIPAn)WfUeEt&%*rd$(uL-fGZq)hp3}(PF?pKI~?kFbZ3VMur?v3;2+irIQE>m z4M~=`{gY9kd}mZ%i?#wNf7P&4w6U7FjKSdz%)R=4t;jP(YErpxOMp9Pgsxmr!0#Q=i7jD zyXKF4ZPkg_NPp%;!ImD~jn$uj5VMQ?nQpO*4zICn0$V<=OC-uw(Ptj*H7n!U&!2{K zJk#gFqnoOC4tWIa^?`$5aPQyEg~7N8VW)l&gh+H`c`Q74CjA~GWL-+1_y{1%ZxLL2 z$KKR*2=WIj(fbb{W)-)1?JRn-f$D)QAp1uLZ5lD~bb{91uBnpRRX8eE;~C(S+NP73 zUrd8wqWaU8eWj;tnw7fLp+-3!{p3M;g&wVK1#`&nJ5NW zuA}^SSYEvtmW@;R!eMDgx+@zT8GWIn+$PX_IZc zIgv(A3|w4GXJ==3^H+XXrd5|1BjYo())#<*Tgb_gAJ4+YKcW#zGpY+GK=G$s<#?hYmgow zISk(4FF^gR%wy-=F#+_E22|9)S^rV!sENz38{$MkYA>}GwxA%mI8ocM@Pr2osMzZW9jcbl(T6rQn|Zoe@(knCgce6AMQX_N~%G|*3-*( zAn2Uf%qceNbNl#AeFdraXIXeNeLcqEP*_TY5nr+!M-5?G*#*T*o+Wq@^Us|{L# zHr?h+jQzGvfPpm>m>PTbVN$yUS6LIwUsDAv&UyZ2iG`~~hB&AeA*<~6*OO}Cg82F= zvTSB2Ob%=N`T6m+zIHIfl7M~wGkEAB;~NIz_GlO6T(hjdt6qOp14?iq^u55!Hoq41 z7RCZ_=&U~FDBiq=_@vH`AiR6qw#Pm`m&SjuTC-jhdeX7rjXN2Wbn;u?-tuq(kNyVq zT~m?bi#;TyI=f^>Dq*aZeWV+|zB}VF-Gju( z;ba**bF{Bn#kwu*gD?1&uF#V-26FqO?2QqN)YMcQ#36unV4j=|UlLIXg^T5uX> zPo_F1x|NOx3Wn{?)Cn``Dk`MDQE~DM{cdDb%{egv?-Ny7xww8n5u<<4MSnXD&9|># zjr0Go2?=t98RdLd;?&CXOk2>-#g%uTRz$w@r6* zneb3I_VFx&Dv!{SA?tE~P*z?}lx(QpJo{PH$UgClb;`~8XoGy1u*dqof0EJ&N*6UI z$!S3mkvSdmV`tf0g)E^Y2j)WP`xAWg-Orytm7mEzNzv;mYm7d#^;|x#4)vssw|*l} z$#nDJ=YO$ZNB3Ynrd#%5tB(6Bs)SEnmwtWHv{ggO2>G4Kvkyvusd1PKlz-J~oLwFG z+iZ9+uat^OHk5vJ6z!>sam8lv1nd7r@7h zffwh`A8X4rk|~&8r6Y!=%Z)l9JdChrUN91OW2@J{%cz1y6^(k{-+J z*RRE}sngTfLMHX~-kHSV4-o zceWB$;R2F3jE&N8IsXy(h}@La*4; z$8Xo04vfcv*k+-wtE;$LH;{U>{-b+qx(o|*BH!Mafqx|&ozsU~rS4m);w)!2b3POc zNs1AqstFZpnlxzY;Xb&&nEJ!iXe%S@5&8WXf3xjIjmEUn&01gw=Ia%P0Xpeiw4P6X zqa<=o(^1{&&f~477f~V$Z@KF`-V^oe!-o%^*QQl2FH8U7Ek+mf1*ayROKGn?`vB)4 zaA)nz!afPiRAW<$k!sPoOkXrGh|v|Pdb%D1lSaG#5Ij+_*6+GbVsPN{O=#?i|LqRbOE;8rKetVM7N#;1&7KE_>Nn(m*U@GXO1Ty;Y6MXQ(rwPE;A_!m6hq>0+lvSUq4k4j%PWuS;z6jl~QQ% z4s+}T1RI!{|Q_HAq`SLuy6Ruy%x+1 zYd}s9GLP_ajO~sPAV5h+?kvQ}*bm3f>tYWWhaCs4%fiW-0#_GR!=aORPfyVUdd&SI zr&0*tzy^+6=34-Mn!6#l>J;ZlNB*ypTWe4=+|A?;&zX7-48u3!51KRgZn5VbWo2a* z5oz!0(z_oj`CxC*Xa)CSiqMhvY@mImZ-S|DpaL21W~=iU^^{P#7gOu>{Gcj6yP4~! zOnbJ~C|8`8KT^^^Fz|tQ0L}}DLBr1*7GOj873V@7%QhxkcI4riEl~LQId%n^#YZH0 zGvi;&4(A=;?h6>;~mZgx8^WNZj}gd8nMzF2CDt z^Un@v+8sL%)sBbLszq5Lta0oXgTx;2IL`h}mSAvg_^}(sJw<}aoO~gAyFEB z2PbJAc<*$s!+8ENsvGiLwEYi?#7F-~&T36-P?HNcpU_jVY_3v&u&!|30`=x)pklBJ z<;=(`R#~mY>to*gJgtu$I1rg}f+aDLKa=^Q2w3~0{si>>6Az?rV`HOgI{L{>v7lzn znl-ra>F05*i_$?ulN7z;h527ydj7>f<-Ke_P=X=HjJ8|4PBw#$vB*2D_wAc(G`6~| z$Rd}S&io}@)Oj{TKgjFTzQHIEKtOB(F>Xk5H1vM(hFKY!x1X~cO~Baz{c-I}-{5O@ z>EUmRp5w~HU#pcwEnMJHDhOfzv5wz3-NvIwql=rPn|yWh5?2=ur0D`FTeSD zyffe~sAVRXdg@S^^igOeXg?b{==zh>2niO$)MK)jV4oIZ_ zc&~hJ%U<4lpA9+*nHb1%fZ)FV{skoAIHde8yiU_U5JGRf*95f!>2nfsYNiGnZqvSq z?B%5YeUNJT6!>xweCV#uhXoEiN~)9(LcHU-($dqB0vL&Y>ns#;Uag{W{P=M~L5~&{ zPJawm$wfX2qNahJasKnxo5=Vkk@;&QD%ehsLB@R@b`Ky1n2XJAg%?2%Uxc>=k#~{J zk)D&&3Y`s8!>5fN?%}CuYJm*(I?B1_Nk_;p+GWS0?SsRgYgi+&@AY&h88{6c4r&=t;9OAn!;Qb#P^JFmCbAkDkH z9yH{fU#4kuF!yC?{GX`l5X=lMDop_Zu9d_;7g7fFrH4%{cX6T!)OeC0-kz`KKv_f4 z<}Hs6!Kv3hdUQoX^%qJvPmvJlU;I+>0IWgGN!PJzF%H7lf))Xx($@4$4B-eUu+VM$ zVafVz%HY0t9*pdNZFP%}&6=fZdJ=|+;Mdz!-n+L!crDnpx6q>VqvR7JKnRLL@H;6e zD4uCmDS4lcbrb=T`B>n{liw_ZEE_V!G^7@xp`lQ+L<3{8LmVq9g4#+r67usK$jNU& zF+4Nw;VJK<4sb8HB93FlbRHwOGr=&IJNFcNXQ&?tV8cyTwFkRKRpK%W5GzIW$NAa*S2NW ztU?Z737117a)oUke@G!{aTvv-MHaky#DUSCj&3t=wFD0H!5)eK>~z{LZN+ah3oTk~ z|5AD&qmMnpA6OclN&Msg6fzS(5wj^s-TVAGnHrbHEBJTm#SArRQ;zWx7VSQap9g3B z{r!AIA@s4Oq-ikLhWL$QQ9>HaBTY%ZG(>v4Qx5;JAE>A(E{+)`m7G}~>VeP`buLhvY%G=>Ob-WiHl;3 zCB#hn#UYy|WdG%tCsxTVE=bYE8QVki$5&iiEze95)1R@8l3MD3#u6wkKHQ*T z%(Ejah7kN89Pf$-gD~MA+y67%T>#@3yKDsiNq`XMwfstl|LZHg)#95Hf z_}e9CRG9v*m-k_!zN5N|3gQX;jO29ZzlsNz%K=1S5V0Rj}CNX)sx{fn*QYDPqJG&gFQl)<8yqJ!F6%Q=&lPHv_ zI3#Lb<9pAxmF<6tTPixIn>FCm6w-)r<(h)fw9AC-h>ys(ZnbWB=thaY@jsqe3OGxCFcdEPjwgdKpxHSzgCOLT$! zmxn;4B$8fg3Wv$~89jdpXc@>2tF} zy6DT5VA#vaK8c&1)7Iu-j-Csyu zD|O70OcF+HDI7^iOr&h~cpuQmS8<(u<`LQZcj}uc!m89Kq;fkbgC|~hoQ*5aVHnCFOI^XXTyTAD!Lmf&+&eaK3se!gs%nRGT0>o_x2{LY@!(dwMgwT+sCfBYNU zul5;+n#KOO8xzhM`zzM(_A!P(94U{i>pImxziaUP6;<%*M)0{`zEqMq4wn)&SxS$y zz7iR$(p7$EaOcK!5iir>uIw)b(oO{`GWFx(MJ$|?x(gn5i4)Q)-cOd^n52-nxbABY zvku1d$~4$n_6cOXx3a39o0?758qMC}?|;g@k4&jQO``ZH=R#&uZeem_Vk1v%vSn9X zrg>~vn?RF`;_q6Wx$Fpo)}k6UrMbqe*w!Nb0==zm0ducp=f?I9PkHU8`6FCD|B%(X zA*UcYWGd{tAkzp{>@n>OtEfw1_75|Xm7?|=rOmIt^s@5yr^$!Pp;M+(Z344RDs!jT zq|juI_8iD7Odc;yE-8E7nAB!d_(m>cblU!4@nN3ms2?-2?L`@_)!9};QOAt+I;&o# z8an4Gvqwi6v;G>93819Q=8UMW$*{Vr!B#l6zhJm$e;j{`w4#o7l1y9Cm)6mV(!1I1 zzpkY?{OkYpw`BX8sj~SzeDMGok9}3OlzTR4$ek1vZsB(An)c&bN z=ec!^FEoO0U;0Qs!a7ylAUD@C@>WB(`RH84_=Cj>;8^173m_6CVtWRA?fv;0Rjv+= z1bW%dP0b|Jy%i9#I>u2@nM~cjw_(!}>*%3Aw#;@n)6k5RwhSwW8=a@-vb$V$=4K0x z&y1K+w5xks%1~MMU7YjWZe~|s)Dz<@<9C#7WM6*LkKMM4bHPnhd^2tuBZB2`x%Z05 z^HsPmR7}<$z2d&zhJ7#f?7MVRz3Ug%Mp)(B)K%vmHhZqWJ3RGZf1EM?eb<{2v+VZl zPMhHNDZbN3@`kO7oSRLrQf(QF^537yIr=^7xbAyfsW$avro}J4eFmreda_f5Ec6^c z6m>{R95K~nH`lXq$)OBq4lQD7FHL4Xqd)nAZ)^KiCqY)pxvbGPn>o*hB8QYj1`|Dp z<|5OsBBcr0!3?Vm&Itd$DavT)a(v%2=lMH^UBqk2J<)3(nW9X|Oc6BE>ylPBZ&we^ z;I!&1axPbyd)SrP>=-#P6Kr}lbay6agwcKV%bOYJu39t|sTEAA3XHTneXzC;Pqoy; z|HfZBmz&JB&>2dPmnxZLjyAZ*HqLTA^X)ASRO;D!$uqsMzket?Fn`wAGDR%W&@SBO zLy>+)%K4SID>Z8w8Lu8GG;|10%{Ba(ZG}J4T-1*(cr(IEfyRK*k8$)CMIDcqa3;2U z(TTB$wq~z?5V7~yt}rSi#rs;Vv-3vt{qaiFw-qv@q&cte;hDeU@R^5lK1h-`F8=qq zhGc~rhdB&(tzb7|8et93O!<(J@-Zvr?Fg$<*r}QU-se-4>LX^SrJ|yy{MtuYX|qzO zM_4)9TP?FkP2Wg8ppskv{H>KX--$=39h@zXQf<+jVC$R^ot%YHjAUSSAe zFZIrDzdC+V_UCu^qp|kl_m9xJP_uHX(*=y?8PAVAvcB?l)!Y=H-AI@G*AO#3Y;8~4 zeAI`8MANajQ*)2%J@cn@bnIZ?BYdY7dGlpsR1SAJi+OKmSaysbnAyak%5r1WtG&O= zt>D0}UAqSURFS`aaaglhTyuWjRdHH6SI7D+ho{|~dcuor7N>`*CWoFI?RGo8>v@z| z-?RCss}_6*BM;TFTXqzgs^(W3%r%}1Gw(B*%f9J$TR@jL`o(<8%hB^p5AwgAe={P| zX;W_86*$_S{(0z`vnq$CYV{PKvPkXc?`qCXMT4JXSYEh4AL{<)Z!*X6E7)PKU)OJ_ zVf#gR-%~O4Bkd6eqNaMOVp{`^^@ddI+OtP*#*I+=Bbm%0kt- zsKmt73xCdB;Fppn=!V75g~P4{H=%ZVU3L;}RrU^tiwCRLI9nRAPX1wS8;Ro7R6Jh# zI(J)g;#p~*pC)RTf5e1DDh0(x4N~+qo@u$Yuf2W7jkAc0<5}AqY4i4iW4F>uEt15~Be`qU2ZCQ6`*sJ!c z7<>`dNopB$13Py2)9cHzI*IB7e@= z$WoMgv|NKzs#vG3MYWE#R$k+@@~bWv)viB3N)vpT`uM>>wZ+O9$!o~VYj{>F``3tN zUO%WdSKIq!AoFLpbrTau>)v0sTiz_RzV==)S2su0 zG^6JMS$lNF$mHv?$#?IsSv$;+If(`qCAt((&e>u7Np+ooqbiuf1n6%IwT5QrW<*59 z&)P*&(Q2%_^3{Fya8S(ybyWq9ltjjddt>97vzmt85)*45?wy>X@0D)&Gr`H6O*f>c znsGy`jqFe#Z%oZew|k2i4W^Joj60RM-2E~y=8&I%M#|A6RDl@@!Y032Ihk81Sx0Vi zRwaXRhsY#ZJJ%Lo8lkb@Gvi}bYRQ^4;m1VS*zPZ^5@itk^c}tPgo3Ok85JHa7nh=-Kn7AT=?POH@-+wK~Tq=yio8C_E@a~l@fYKQ2l@|0rTXZu32@lHdF|DVgFW; zgvXOWhVKo#&FurV2L9TjNWHYQ6cdt4ce88Oi%X>Hw`q!crfxw5hnMB<=L!7dksv7E@DfY1E@eJmliXbw7c=t4jK9`xS3VQBg8< z7&7GE_ZI*$34&BNRsXc1VLzI{Ys?$bpoc1RPEHPVTkF@aZ*+G(c=+(8PdPSY!610+ zBE%y^k5+XO(xLm*Hbd`^I9@(~{sWbs)A2nQB315vG3%@H0|T!Eg9$SIBy2+(%B@6s z%RA=kE3wzc5rG+;`v!%XP1snk@Ysv|E?jy%kTnE6x3%6Epu)zpwauN;E6lHVwdM=R zc@FdN@Ekt;1(j_fAt6J4=rx=ny3^LyMzL~GqNKCGCgjXRnxKFHqa?_D+0S?Bu@+%4aF>}Y@~QJq~;>&0~G1 z=pN-G#4HSbmWonu-n?OAWF!is69>Di(e;3itWZcrk~UIM$jix%yieE}wuVj^^+l9W z%{|H7@7$>lKbDW>o7k!_ROWU85)D|tCNx_!AM=JGvVnQV$HxZ-2BKD2|G?8{$lG($ z;1fU1Zf|=rf;x!d;^N{`G&6_r#D@F{ zTG`)GcZ+!ZcpDlk3a>lNZnGZ2F+gjT?IsP?W;88BveF>*BNtjYQ5Yni^@%$4@^wKx zaS&8ZZ0$aViiTdUZR|8D>&l4cc)CNjX)}wkurLctB8(m?*!Ui2V?7-uo1j4Z-2pKf zE60D=zQx7-%*BzA!^UOe-DA1elH=Ls3$UGc>?o{}`GkBzLok%I&?jIa#>dB_x31zr zVcOfrXDh8JbBYt{c-VTWuaTi|Yio(^p84`fyowbaFJd#jJ5Ll!?14^pTg029OfGS) zs}d3tr%s)cm6f%(w}*%-vDS!Zt~$#3=-H6&=%9Ns?Ty}>2wHFPV||CP$1!Vux@>)6 zUXwp-9koE(UbZavq(qC7+_`g*r{n~EotvBc_3a}MR!c}I7v&WD1Km$h7AMAhqIb+k zoluI5VloPoFd2>ot9sdaVn=IcAx#%#U~pSlRV8a_`JKfJKcW?L`p~O(@!~~AMa71O z1~?1I<6j7O^j(p*EI*Yh74ntY*MB)dC7mNUSruB2O|mTCclhuRQ|52X+0V!rmV8`l zpveM4CwqJyicCk-rC`&uzeXbLgVEaEXdUp=9g zy*`wHQGIV&RaNKFiMxI)t?VDtWloga4A;(57$wX@f111#?NUzq8tg2A5A=jK!tctRI!K} zaZ@Q&^>}kBDJir~8-I9taQ_D1dOA$ig33xocjx~7$E-R<(PW1QRYoxmB|Qi)ELw^& zSp_PZ$eSd+%DTEPIL1xnsTXXsENyZL9iO?mc`-U9QApJ=8oq-0^Qqz5?GCO=sWMVK zu!2jUCA3bNy^fKR>DF1Q?NUY#47qpxwRLqn;UWCbqrg&K%?LMpPF9u%N^Sf`81-?w z)v-N9AH&absy;q6gJNK)Ni5rhTh%FTFZ5XtLPPZ-DT4cQ6`H&T=t{n#9;goCtA4p> zb+s&x2^0^kI41o3{09#{h3)t~6QE(-tD_#Q5_*cha{1;klElx&t>$OkiPg1^8TO@b zvJUXaVI0_AdH?=>bRqGCKs1ng^Unen?%ut7-Rrp&@-Y7KInfd@7Hn7(>`_W|SjX5Y z9Q+Nz4k1LTsUjv$K@eq6q2PkoGoKmjgW?>nh8yPuG8f2iCK7!hbD=~D^X5O98%6Tu zWm%r3|NDdxb>hf0o9(9dYC?^&r={H0WjUg0KSEBXso93II&>q(&xR3M(Kdt;NnFPD zkwk&;ma9OLUa^>vkVg0sJ~lRUoG7eHl%2vYVqz^JPp_$h(7|gG&(?X*s}}B^haClQ z6$OP0hOE$+VaGYKXdE2!Y}0dd>XF&sxQdM7IV9Q5!3zP`RF{5^hLa;n5teFTbQ47>~QDnR6eN+km> z&YprL6zBCCnzr~^(R@6I#jF>S$n^^gE5v4QCdXd7-@RK=2F~m}!qU2`U-=LD^O*Su zzdb!c)IJwKqNnhW3LA4@tQ|CeWpP@HBe);de}tWV1f^$B6oS z#-X{7vr~9F525KE$Z=~f&r)G(5md{PyXoSY$HvErt%J=@OxP147q@UTWMWxymOWx#0$%Cx`f!s}-@49!IF%AgM0_PB zC248T>1+hbiGvCin0~c=-@bguaYM&GXpME9Csl>X{7Nuhi*RY^Cs5WEf-UCSef6)K z-bJFqxol$R=H`Y*&A|3KWDf9c*SuhHzT>|Jk{V;$sbjrxmBZ49Vv&k9G&DV#x8)2T zW&mwxv-a&W{%mNVi3*ZKyDJa&4@L#_q|`(H!w*^rj8ZU0%gk66%E8VU4n)tcU}9is zh<2lCoQSb1)cN1Pe~&i2S+e*@c#b$UL?KRN`0gR7oO;y&ePzy`&B0LL@?r#tz8}uH zfr0HKC#hIh*wCp(G%7@;F3h7!pR3SD48lSy2+$*XNP{6m&#wFR>(?mqL5Qm8u65tS zR3I;kwNBqLzLn@fEns9}F@@p)q9&M@43uW-@kv`wvzZYRetc__i2x5>NY`ZPpG+! z>s@P)Uxr%x1-|K{cDeA??*%yjV?s=vuHHmnM0m)Aan^ST=kW}HeT?+6e@Pj3F0cj0>`G2aaC19`*y%6ngS(u$11`x$SS3{R9%cpo+ z04Rutktjfba(O0L=BU(44r9H@iF@{JVrFG##>lAB6JAia1%0H)=g1LEPdE->)5%e~ zCh`t&@*IFCL>km)aOudzX!q}z`x?n2czq&Xa4mFvj49^OumI!${{S@jwL?TW@hQf- z_w9BcEewM=h7~z@@Ziy-$Q&N_^%ibhR2ASejQYdXZ=Ep52BH#cSwV$s*FU(bEbb!-%)4FIFkgYHj@LxQ?ytEj}+$RP|xzmsFTA1!&h zAAw0=!f^JX3#$_E&CmTB&aFg0Y;SLG;HN}Lv#wimqkHPx^Tr)dmO+5465*doWGufX ze*#+&V+Jv~SUu_dlYoG)Q!|N)Q2m^Yu*`=-a`V>6)k0UlYr_y1QD`VaJXD+~zeaAN zr2ulnKm~twbmJSt1EYyhV1A9tky-PO>-M(jD1l2Rrie`p7^tYISX)~U7P0*0;JYmd zfk6C@GRi*yk6IbV4R{0ynhXtn2t6Y`{lJk*Vt3so-0aW*^Y-mqoTw_+2(*R(J~Rl$ z2Xp8Z(NIxkLvrYN8TkzyV)N6JWbi7%y&v|W+ z5kWV9n?*)@53clj35hw85T3t&{rag>Yw_+jWE3>p=)z$!;Xy%;Gh>&1w2%{=t&^KI z$bz_T@#E^a_~v)+4`u8ZlmE4hDvv*Ts>Ntk~5#S?!>3T){PL=VFwdCzq}>#Nlg6QOM?tT6BRJ-Bp< zDv9JPu=u6)Wqi&^t>MHmz9TwF4!PxyojWIedokPy7|*W)12)Gni?Py7Gux7wc+;Gq z>|VR-4jRbd&e_kul+e{c-ej|-5JzN?j+6$d7u3a20+C-wrAYXdT!K;S9;$u6_IVQB$AA15_8I#pVpH<0)M`4EaNY ztB|N@Xzi-a>(;I7IU9t&+5#o*-I&aU&LYw*nd?bF7C9LiEzDb$l&pYuSyT*Q%Taq`^WjV9Fd8?DNzNbVsnAMrCg(cB9tZs$v12K<3TKS$AF; zO%F<6HSrU zO?vx4K6&}?wliN^+yO2kIHc&MoXf^^c6pwVJ9qCgGB6A_StwVokDqWsTMi=3*Z%&! zX20j>F+h3;9o@OFq}uyvWk%o0*j`mt$iveKeV7obdYgJDYyp7@-xTyI5z+7H(WBSx z)9|nMi#10WobM_kqxZdvw=yv?K@8aS2Y{=kni0CM_vBJQa$Ft!3a4qrT|^HZ>OnR< zR)tZQ4{47D*RImOf#LYNE;E-MA0#GX!u$fF!vGD57NbQp(+nyB2VjCANvv$2`xCM*Cl)m?v8$1D9Pu66pdp>->xcDa2^pm~@=p7o6h?LH?{(K@r%o(cV z!zoVqI!u)-ZV+% zR_ONm;B;mI3Vvb7F#};T2`ONM%Ruhe?HhaDoyxhjt|BRdQzIyr75iFJm`!&A$sk}8 zPz0@sK6X=x`=(2w1Y*ixnPsas}7!MV{SyaF+Cgy_ku&}TIX5k4Dg7@-O^_z`h zl`;2z4Zb=-&|%1Ty0;huoq;96mBFP03VWPJN67zt_o5VRx|*2AgLOv#*?7O)5(Yvu zzyb12)uj6Qet}{~Fou16AcxRU=?wQVNE1noghRk-+B#%-49JM!5mZ%itYc3%WnjB? zIfZfor6Cy(`B;UqMu!fasFU+dS&t^a3AoV3Pax51?8@yI5mAhubmzPgXb*!w(zCI# zEd^C*n`N`NNK6rvxPp15ba&FyLXcWPFgijKsj;!KTlR26;CW702y+|(Q;AGKoFv@= zw})X{?U=>Lu25tT;DZJ?~NL}AWd(cEH4?nUU;kyMeT1Nul93xF`4>5g$v? zIX+$|&Z&`Rfa$mx6+?`k$W?_FK0HMB?Adsoe176auf@+IN-pu5f}FlyA6VV+Sv%%@ z476vbgnOH}XR+_!P!fbeHf0qRRZRY%$}ke0*d%0pEd1sl9{c**BThK>ftdP(7J{{8 zWKH6vsuJ+B6Cd-4&BRayo{(v1Dn~mz0+Z1P5U~=`F7T)~h!V`j? zsyJXKxY=E|S9Q0*pAggQzkM^m^Z-*(pdwxb5u{jStS!J2+9Q3{(HV)o0Keh0uu8!Y z?L~}5`U8k6m_pKfvxa=j7CysajF!s(>rf96FlG?*WB(EBn8E-ub6d*V42yPt1_t6X z5CE|E&Z{moVpJ8;H1#v3z!u2@CfBYFTjQGt+*MvtL5!Rjt3qM~*oSficDxQ{aA5w6ZzG#k)qv(UTCh5K$=d z$g4-1>JMkg2IfP|EG*j}WcBe=c3JG2d^g% zg(|C_i`cpC0vB<7zJB>~lC+BVEu0NT9N(N6P_+0=%z49m@1ThcLdm77tE-Fc%*WPN zfg?vMOG|H0lX4y)|BC6AdlnP3i;8MkqrA3Oes+iSPz=yTaocj#tbg{HSmWEODk{jC zm^Hl7BmF+zGe7?Z%&@`O_vW7anDo$-@MaA7|QVo-c$PIA( zgxY*J1$yp5|Lf}NmXVcMFomrhJjk5j0~K(yWBxe~Sy;T^`%38CcdocIHR7r^(nOxq zjIBy0z&E-JhBPjtHLJoD4SA`VnGAPHd*x_^M(9}+xo#G@x?h1*LV~BK=R}gek&(c~*K04ot%PxMYoTp$@nc5ZTu#c& z0rJL4_8ZKqG3-q8a(90Nc)fZ3$@Ax_n=IBCYhpa}cXW6@Xa6}yGyzhjlh$N^fUiP_ z2e{E_c3&|Gj6OoQg~wLc-7*~3jZIB{icINgX^Dx66G_dvc1A!1xs4a;moEN6?}00^ z(hIFfAbfApf9dJL>pU~^gD>CvK=Sr0E`*?G?d$7l4jnqQFkHMK(~bpAXu=OK+-%H?fnfoIS*v)TXJlj$(>zsF;u)0IF)%Ws z0JoE-`^phk){tX2vO+!DPEb(=An+p)<9jKEu6zsh77hvxO&TY=G&MDasU0dxOz2Q6 zv8q^J>x@IVx{uTrkHEsj#KfxM4e#2LE)CFRR1$I*VO0Mm9S%G+f%dxo7qu; z+9Z-Pgvf0)-BaEV%aHH$TXiO}+k+r~QI1AethZWRRFpm;q$MwslHRBLhlGTv zTt_Bm>rrOjvHbO#Vz@$xWbqDg(QlWOPo>KF^YKQ0NUd3$Eaqlrj@oZ>)dJYZ_}Zhn zxw&nxiR<8DLQH}ZG774ynMms)ySI3H`*tagKT22l>Xu>Tf?)2YhkD_B?O*U+C~@uX z?gqaCk2W^Uz5LDWJF(!d{GY)~Nc)2nc~(1^g?E1;o81w2j&Aja?%mk6ALHX9$TPEk zV2pwzE(O|1QE&Tp-6Wc=ut3k*GqSV001&VM_qLK)t;c$$lrxd*Az2;JIGuQWu!1?= z;Srs9ctq%OgfteyU6Z8q$zx+<$gUY=xJ5*?>R7_V!>jDuL3(mq5<8t#<3>((=y~~@H&m3AgBs(DVzf|W!pUQ6aWd4!Ek#b{UzIdE+zW)Z}17TQBi z{q|AQ@+yDYz4)bNAf<4m(18&f=U``V9}4Q{)diwO35_qONvkrp0W;`;SIjcN#Sn<` zK!%5~$5|Ky02miSNmv{RdEQs6E|h~eyL9Q29HX+5QX_sinbZTPWYS2_;9v_ry1He{ z(sy_JAB0xE-V?3pI4LX|-f+nc>CzaIfCd-~E^16$2n!4IIOw{&F9oCM0WnetPf}G? z<(=o%O=9mt|2gf=-!|#bzYzmF06Ou$&Ce4P;cEi8dkv7}z;jL}^?mRD)n?cdhb!8x8~N3`ld%M>1H14aGb z^0Kn(Fp*aCLv3ITozUrGdu1mb$wCb|wv&_7i4(68IP72Gum#}c0{rqJN-;CXgL%EP zoJ&hYFRrr())_`ivu96GVBmQrr6?mmtkS+kr)~L3P?By{y(i8kRzq^=n8jy;eP`1+ zVeQ%?Gt1S;b9A@@k0EgA(Cb&PZXq~+!DfN|cvjuw3=S#G4Ba)jzUBBH2V&s&nE%;j zOklii@zvj=9*#XmSealO?d{z~O&t#xl5TWv^@hmiBmZ(CxKiT=`qJ^@ZP@O$>(-f& zJ)}e$fsrRzIC?Qsq~Og3Cv)>8EI3G4pt;&iP<^78DmF7Xqya>(ytFGVai%QOVG-y; zM<@n2gp>U4of#50$>^iZ%x^K~k9xH+Za{wrG{()tlj(*D8`Ee_r)HpfNkNoSze{7P zNS1>9@4!H6Dk`d;H6%^cO~AiLz_c|rH8nJXYAG>(gNlZR1|6h-{wF$<6E5r%Ej*6$ zvvzrDX%>v4yz01bUkGNdQ*T}$-5`jlhnLU9QTcDKcQbQv@CV7lT_YS_R|6vy z!2Q@jLE&+9^x>mxFI?_)nH#|<{Nq|ZeSL5|r*#D{B*R}}7kc$9J`)3l8yiKB9rM^q z8c@U%W7tw6BPRqmISO^fE__Z|utjXAp-`zL^XY?qm9_k1oAxGdByu0OH zPzD$@R%y_dYZtfhF%Nxn`;;Dh%v<(n!;-{;|8$w@qr$;LPp4l%Kx=-%g9kN$&<~m= zQS?W&I)Ya~Z}8iin&#av&|VDU0B%$n76~&%MJL0}($W$T1S}N{yPkd%IeDzEsuB|h zvOcwA7ZJ%v)_o+w=kHpdry~q|i?XV!ACRAHwlg{^k3EMH1{o+I8Itx$3l?T(YMfB) zSmxq2Tg2o(yy$TT28KpXc&S?&%iFbkcSS`7OOu6O!8OG?78r+Qbi)O%wII6@pR$rNGVGBk!baO(6aE>R2fSoD z=23`U{r(AV!{VurkB@yeF7uOeB1Hum zE?mSvV+ghYcqsJ@1X;GXv|K?PlJ<{DN#R_z))fc@`}U@y!jv4R5GefH$cV?*dVl0z zpKwlL>uo2<$jAnr-Q3*~E{xUO+}xI|87CZ(v9+M>W8Prx@`fgp6S&$=6B$o(eAy}i-glfNDX^m?3Kpi#8^{w6kCop>L$Z}B0vnCuhcWrc$OzUx2jh0( zD6=aNjsf4!Z^DW zBR{~Qy^F3A&K>Wfzky`fiCgY~Go-Y7Mn=Mdg3yb4^`A8o2i5xkwx$6^GTcymhIA|+ zNC@uZlQdolZjf8mY{0w&8U~yv7~QEIOJ8jqL|kf~^&KY=FO3OH7)X0`6$l)@;c}kE)vH(Wmj19-w>x)K z)YK9gpj`NXb--AY4HT}L%`}hH3jTsT*Y;uL5%3a>K1VQ76E=)d(gbM4x8i2o6*uwe z3fzRmK3g#Is7Qb}0iw{(vzMx4!Q2An_1>ZU7JHE@y2=9wZ`rT`G=vi2CZeOGk=AUW zAd#a`F^M@?L6pSc7+hg_K#)|w1BN_;X>DN`CA@3PCMzqe%ZZjV0V^)TwcQO_;!77K z%Qzj%NRAOLp+_lv*AAQjTCLI>fQK1|yuPxwmKKxxh&X4BM?|gmpde|8n39M16s(g- z@bo_C#PA>MqjphJCZs!H_=fCP&8(~}cna(CNlE#alog@;<2J(k1Pa7;$eQ_th8BQ+Cobd#e7f%cYif$9 zCxPas+_me}1gYE5*WX`0T+|U1@4x(o#BJ0KG)%Xq3+cx8;+icC)+aoo{*iPCXw*Vv zpJ89&D)ON;IQU2WuQdg4#Hqco1fXM!wz0tm?q%ZR;}aDv0Lax6#4z=N0b^9V;4G5Q%FEXxdSTWo(twG&7WQLOSngL= z`gP#nZ3 zay#K6T0Y~fW73Z5v-Tp}K4}_twbsD!Fstfg zcXzU%t4OSv7KZ8lm$-vaN~=-oWykIWVZtEX25!n-aU17}AfF)!mv~M}N->T8T)1e0 z5#`mZzkd9%2F-){Z0q-|cGWV3DT7|e**5h^PPTw}56si6RrMKg_I&8$2aEfELb~&) z%p_uFfO00R8f4(GcIws9PMF<4f1QUWk*~0q`t zLqy8)18RJOac=xmbt~x#iPs&ftHDWxb7?KW#dOeW@J?9tmbjdp^Fhg4I7#gl6_R-g zpf7o8{>J-wVyD}`y?t`{Ni)#N|Im1NS*y;1B_^-L;t3|LVp>}IQCB_W`Y2l?2G%fP z-~-0WHQsu^`?{kec1}kRMRbYq0RIdT+0%3f)&w8SFJQR8WL(By7QeC^l_98G z)zj!}D##KE&IFvq1Ig&$#LRt!gKR|;lRfiqS(*(=I|dJo~T7Ny1@W z0XK|`8swzHP!*&DX1;WZ=lX;(gF_?6aiPSw5_c`u!g1AqBPeA9DMJvas;bTTP5_x0 zcxK4EmzYf{<~+Mif@G|SEWf~I{<=jaR0WU}>S$}@)wMuF)ARDGu+UjNeg51G6MR8K z|6JwDKLEML5^6?`;C-%tdippLY2Wvis0DAATw3+>0z?ef&@OgC-BhE}o0wG-u8MSn zpz^q=QKx#FyUNvnkkCv)@A8cO=hRefRTYs336d;RK^~y!ju2{09u^u3B_5m);W#y5 z!Kh6z`V6|$xfs_kqK$*i16@mrQ3(rS(sF|k-r?k<*udzM@baZX9ZOMB(fZr3jCpZC zW&^?vH4c2{iZ206in-q(7vV;C79lJazqtSgFVpSe!-p6GxoPWGCNUBTjuP1*>{hrn zEj5+Uc6kd_t~imGjD!=}DR}M21%pf|8;>d@2FkXFD^A;l;3-) zmGC5CM)+)AB}|KicT&lW!2F*&77Q~91PS};gY8B}{hQ1geMMQ)I1_q3ltH!#6>OuVVSS~PXu7iC^ z1VGk;X*BTKmkkYv5`;imb78V8d>@pK1dxd1}YjD#*{-jNK4ai)hCeXnUfmo_d<1Z59o7a+&BAc+? zh$cpfM4h+Vc#gLI0Qq7^hM@&}%=!|?SEiH}v0$#+(^V<^! z4h@6rN`R<8K@fSkIH&Li@&(M`LI6pQv$Vf*1y%89Kp{Lv@DCVE1B!}Z$79)@F!oL@Mc3lerISu1(gUA>06>IjFqJ6|FJh}(l4Im? z+uc9Q>)g!`-zgEIrly9<#WvLu0B{f-9r@W$H5C-LMIR=)W?skms2au>lZ$RcU-~%c zN}}pk7oi7EkzE^8+4nC6}eH^d#N6Bq?anqg2)LKo-ly~E-&mI?WUl}a^RGsjR;h5ECM)~Yt+aS**9<4aL>a7f_=~`uKkhKE&J){Qn0Nf7qnXNq>Dw5 zZGWAX-2t5)t`1c-H656$hqOgsKkB2gaAsO&CK#K4ycsIbt|!&=hv5QD(41(`X?u+W z1n~q|Y2#)J8o_PU)W&MX#BJm#oi;c7!BYnNaTAH4BgU)Gv$CW+c)7Z|BJ^!rhM1p3 ziTCw`4?F`9B`Ilm`SPGf5jFw4an}?_gTa+lZ`k+sD~8K4q7tGtjr+9{Cn3r5Ns8&$sSXXSbG$yB{25%_wTwO^CLLE9) zNUH7NCw~4sO1)V!8e?e(F^8#a8>uZPDk=&O3UP!fITVnX%qWbc*A&%Z>FdRYj-MfC zKMS^MVgj73tCl$?buam2)b-$x@iyv)!xZG?msaFNyt`n?n$H1PEufLYP9XuQ({a$! zYDY`oktU0+`}psZR+Dyt55$Y(RoY%-u%L-P^jZk7W)Pu%86CZeh9--rj~>;5^DZbX zM23%i8xa5iRf%aUjbP->atMu>Ps#&)`mK12NHXG^cP6AEcPFwWO3KUp>(A>TEd+>p zAW2MW?&#?7`2Vy3*Rk_Oc%3 znScO9I2C+6e0=2An=dg=gOUtvB4QO!m<<80jEo!ve~wqTs2v>9xjz&OKzO7Nq8wOw z`TP3=BE;gp|KiXT@GD1!w9U z(}zGdv3dzzWgC=yXE8n7ReE{*_<-MA&np*>^JKb;ly#cHC1>UZL={Ji=JMaKWr|ww zP>i_3Qm9by>L3gx-MhoiyR|(zyRFfg~CeC;8&mj9nc!@qX>uu>#G9@`?tZtr3Nkp zbD^>EBaj{d!tsQUK0u#AI*b9JbrU#PTo4#EQSzLR;RDA2*?O6I+{mc?`SZhnxLG!b zXowwmYDU!9+RMW&LPFVI-j^?5 z#wh^84@(R_^S@THIo!lJejk1zNHfizBRvu-YZP5)O<*yo>L6vn3wwBU11Y(5=`iu7 z*B}Fxm~>hF$PXOv{R#Wgr9XZA4}utqi~EmD^C|;X|7ETq<2}f43`(emxPub^_n3x} z6H|l(4K)NxF&le(M|OzqCs2fkG?=TYDI?vzr-HfO{?y6xB`|7SM3F)pHINdts`NC_%4=b$(})Ows z7rngpu5%axDF-=>G7p<%5q6{_SbB5d)=aDbBCfM0L;1$+`FF-~T}4J$?2+ zs4JU;`}QYW|NM4hEa45-kJ-B*OX|X~-20KiVD$8qqiMzQ#=5SD=!4~-J2P>DAxO@8;RjJE zG(C>q5g0E4l6-?38ji5MuN^42JeZ(xHlR^&8XAp^ii(Ple}TUVq44dLBU7Wj{$Tf^ zVDY$kv1$4#>dhjC3PurB!|RpiE+|)Y;ni9M=CnT_@8uYx?u|RIg`kt&xG||La;Fk@ zEW`=F%+1Ipk3SUr`07;>AXcFMm?J{NypZmX>k*x)>9*me{&+Doe_vyMH;3PkkOeHX zo4J+?Yzuh9!^So=jud5J%+%FNKd2e;TsVbeK0upsrPVrSm-YP%hc}iOR}O^|l!0Y# zX66v?7{q$w26y-JO2A75caTe+5uSLAZ*;6$R;38R`~chG_{ zC7?Mp6g<4VX+DzM*FwrsG%$;Ma_VdQ1B-tllRuy5(XZzmbGeC8h1k@M&OK7ECB_^# zH6#`ontYMzzb-#AzpTs`@)KMpl=9-x1G35ZqJ}xfKk+Aq7L^NX(Y!@QM^hKC3X6zf zr2We6T6Ph`sEQL4q6Tnaop0H4&X|~(Ku$pT49v}a?=FsG+9d95EaI8`57YYRJId7( z+HTQ|?ggsm*M9-f#0(8i4@14wY(9v_Iu<6iqQUGP;5U1b+z-k~_K7J0dVfM`T>KLL zq-YfTYp^v9Ga5!zZOqY#z{PS8G+MItt#5%Xj}g-R-=FT{d(EE8_r=az!LXW~#`o{P z!)X^@0locRdwct7WlZX!6}wM`cuN1k&|S-C3Zx2mAQz3~CRg3`8|vhk^0kR?L&?Mz zxUE~E2vWgMX>FaPA7HmAu!S(mAf;3d6uH?Cg8_DUfxm$%wbU4Cc(L?qKq!mZRv2&f zl~nplngOkD4=H&KTI-wRLc(79wDP}oT=UaE{@dZQT_~kp_o#u9<$Z#Z)rU}wwIAt@ zMnH)?waYO@Rqq|DA(eW=2vc8E)0asW0rgJ|kS{2Z+@PET#&CQ*SAwSJejXtq2M?^S zhN}TqxydS}g{Co%M$G4O=wHp6Q7NB1d4g>|)mAyhWjy6@etk6Do%8 z>Rq&c!|T8Bf#STC%^2n_fpz*eX#VHRiIqNe?1WPj{kHc=e?JYl^!5L|R_Z2<= z)RhH=i|fHE4kJ_H5jnY-fBwA>|NW;z&IQwl=vS1mTm{1hnaCeFASBe;*(m2XlXbfD(5K&E@}0z9)jp-g>GdK1v%F0dy!KFQf*uy! zXtt|{h6XBf<@GE`-mdvH^3UI@pjz41JcNy=+NdKrQ!LNRMhXFtfG{B+^?dek! z9Cw5uFha4#?JMU21H;yJ*AQ=D>%HnUo5M-4vtW4X0#L;65&jItofxdxuxv#jGX(0ms3)A+b&a{y*0~;|7r4wXkz(UX9 zQ1d>%eVQ);r`d>&fA29y+?3fX*+9?I}A-6Yrfd8{XOV@UQ% z((bg~&f1RIp=Ta8gs%^82;XW&D)saAbs1}W(_l3w=3ZWIeN>*sIAk z7fgeD#|j2}z^sSu|Ga>0ugEO|V&=~i{mfiGS7h(EHf2!HXsjcD?78+e6lqAwIK{d7;=hfF`g8)4ARzw+cZ|V#{}I?uI|DVk;TVMm z#L$(^AJ$*&*I1qCYud0lf_NHG5|G^XegFRP`27td^SqtIC}>c;G#2NDg|%R(g|qdN z)vxiEFpBUcu;=1TN(Bq$0L^8qZzAUWwph{q7|L#ZWKxKsN$*?KkR^=NlLlAAF~b z&0o-Yg>LSB{d!$NKeHNPCywR&#W- zxZ|g^i?p&bS`+YQ$l##QJ2)$bahueQOALs$-q&9@@L@OsW3{`bq_1ar+1r~yq-wtk zx_*M22uyB98N4k|D=HQNucH~ejGc8OgBrgOrs4#7#qfI7{GAkV)bW%s6{BG{i3G&K9`Jf z`^}JZp!v#>hHR~jwVZr_zGD#UGMKVA%ro!Io3Y;l_tU01_;VR+ACJrRcRcewsF9Nz zyX&VCg#8VR5jXVYjyE5zd&lb5<FA4L_ap<*ZO=xXXjL_^pkp6MZ?=(`mNikz zjyl@YheN>@w!EM}T!WT%0p}WfXJQpPw2^D%=P&hd3`PFM8_M0{7@y#CykTMu_bkq$ zqhifwaD#}MXaK*LV5&r{+XXdr{TC!W7@sQIY|)FLI*Qd9|28CSS<$EQt;Q<(U*R82 zby=qzuom)MgVEnk-Orm)EyvF9odcZvN$8rK z#OU<{!%>>cXCo^=0W*vChBm=Nq~=t(F!vXUq2CzDX$rfUrEp2`OuSR%H)9 z*qUzp0oT!>+PVOuF*$y~*WH7Zx+UyGxHEOaA8#Wdwn11k@Iuf&rf%rmM%-{7<|4jD z=*jm83fA6lT;$&n^bvL4QE|Dx@)TBS%1cR2;10#AXyj>P&zxoK@;_p)p z-!6<4$?0kq>d&n3$%{u%1l0`LStyMWc|gB#2sWGSsSHO@0?l!Zxm!2XCx5>p1C(E{ z_&f3as|nYI&Rk%%?W zj0%4MSu^2ccbtzSD3t8nwNI^#!VXyQOBv}de1b@}b+N=^DlYc3^!0_F)JFelv27mM z{CVqJNXY_?*5p>RzuaV)zX2ug%Y%By;IcUp_V#}bCA8gzhQ$WN3$*TD6I3xJSI!dn z1&ZY;xa)(ZM6WjshT@S37R~NrH@j5e)@1?pBX8P=d+_5myhZ^-BvRYNKPO5%&~u)Z zj)@|}M<_KKuR4y<1P9MWpyuW;;^lU?k6>X(x*rV_`&jSdd@t@KIZ)B%B<~4v?kHO% zmdH$B!#maVLIF%hJRP7u#1HhY%!Sj%(fcZl413!mc#|pLyJbf>J`u0)qLEfTN{_I# zbemH~2a_oW{qEtztz2`&`OdRkS5V;1hq(mg4XKXo~9Q!LWv z&QdKXo9c-%33b7A(TH=tJ!eIvVrc86)U&&~dU~->BAR;B)HF0^v1Q9;vL3oomC1t6 zhun|}PQ%H`SW-kL-xm!w$x9WleB7D21Bb;NS;%Lpj z4h*C@AMStn8~#WrxI}#46Z0yC3ZzTUdt0<6A?LHF6b}OBG zv+DghqI6u{^5k`s0CFLo1ABH>v#8X7OAISy7aQ#gCy*4jXO9gO(6#F=aVJMiE4E%% zBl=A27)4?fX+$#`3jlQ$vn(dUomtB`AtFF!sr~A+@-L?Y7zkOFvePM;WI{*vpoznK zMXW0s9K$>L76zOygI+FVr2U$hm>3_2z%Sx8?q;a&CtCLWO`K6AJJc&$<9%nEs7G|3 z!DG$7$EIUofU{o=;CUCcDt6r4`GSa z7!t0}*4;KTFJ{s+R&DPC7S*9wU7wP77=~_ln!3-va)MUfJ?IFwe2tr1LSyo*Q1||SP zBKI`Y65fjjkI&F#Ihz$?#cl8KY$>>hiS}D3pjVAk0=sq{^KRW!9)bZ~b)3AerJ2Vf z2J*Y?2df8`eyNX6@my`=o;qgaE@OKh!2%P&Wm@Ir#t?fX^31xX;pwa#qaMTr}m&xwjd2}+rw6xSWG0t)98dK1CM%t|d zg7mf{O|Ztkn{ z#x~i)G$T|PaF!b>YPJWDj2u=8&I^g@*N-UDy_=r?{q;MF6C-WOyn9bC zG@`;Jj`XQM>QWKknD>)3Dpw5BW~fs~2D;iPb>((~ zX|yMl-~#jZ2XZcT3SR_^gByo>Qk%V}#dd|(nT?2Tuvw|*sy!^IX53$(#TW0$-blVR9LQQS2)SCqm0C5r5^+3R_PWO~! zH&!sDc>4%J*LnT=I9bAg-L{Zeh?y@X3)qVvyacs9ff$TVo;pR0surjHuBSCb4`IAQ zo`cIpo^bj70BnJRRfucE_0<}Asb zpA7wztCTk=mI zw1BmrnO>^!L{hq11P1DSCp+y~l@?U99lk$~J!56!Mu7Sh^ae!#ddeF&Z|1KuvsgN~ z#Q9;|DS%*gfUDqW#sgMeZe|qIin$QFqZz~ZRJ5V`T{qPxF4+^y*j3pL%+0&=W^}56 zRxSPrRLZ>TZRj}V??2s$N7u!8qw&E8E$<&|@F4;NgZjgCvr2@Z<$-7-k#R5^2FLGX z18G5vfQXX@cdMF-l`kJjp?WeZZK<*X1+`ERH;~Vg)UmcPEq1)UV!>d3O6S-uT+3=<#Si;IAji&nPthd9~Bg=-O-YZ@C zrWRIbu2Us-3zB(^nDasjVwVlIhpEZfP z1F&uXtpYyV#hCd=H&r$_SYtxaUFyKMqK>+k^4Pq=xwGJ;Ncck5fQOoblcjt(e`I_b8(`VKt# zH*X#8ofGiiJh?K4MGU>yfb&+ry<3>QQzXW`PW3JUL{lr4JXA3!k0A`8bwbvM+2X0$ z-l)1ogiw@ITB*CDV{qRndDvS-#ou_guzI5vsZR9G4om+HqVDt(A zadKWN?S1o>rpW;t5!shERvL>Jz!b4QY=NF>8y}xod3ec-+?Xfw5H|!p5$}5b?JMLz zJu~vVh~9-wGR*KGrx(&N*taSmQHKCS%YLIbX>b!jd;nI=nL6I-LSIf>PeVBoY+sa0 zFx!Wugwf(JJ0_fuAHVMNIWY|rQym7Y%L9ijOIatbK^IFpwc*g`;o)g)+hfEWX-D4z zSUbxVzQp?Pp4eorEbnzX_srPe$nk7k2Pn0q7ObzPfkEU<{Ct4pGF`bneop}YEOmtaC6=P@BHK?>y4SYusa_b5 z4mrnWX@fXr&loGRws;y24CC!@HSZr9Nzr59yzQg-pK;~!?%s;LR%gghFsK+`j)%aq zu%2s$gDH>)diNWGz9gCjP#e#{hYYWGa2J3`_X<`Qwi;BCGh_%-f!Nhv^3F1JtKP!R znZzMD)};7GXd852)dr|u&bneoqNXj?Yai2fS6`_XD?|-FV3ft{oM!4CF7C{+6@-Zq z2ljy%5!9UDEQnMoMt}8$Ckae#tKDm$@iP+i`)NISGkpm>Cvhdzc0o`K)Ntgl24)(> zvQ)>8Eu?L0SKOHKB+#>^s&(7IP(GV6Tz7sr*dZZ{Oaz(kPXE5Yb0d@TRUF_2z^m~QNWmV)xY^jUX5PrINSk|{q4 zI;N&87|<=w$%>IjrX7WxDQnJCuQdoBHgs6&%mvepd)(__09Qvk^~ftSB)|6c^|1`R zTiVt#i^U_7%EP|ud{GcKyU>Ht<$u0jjjdSzIo;*=VWgS z;i3%9j>b!uFALSUk7W6C8#-?4hnR|y5RzT~H)%Qf@tqljQ;;wBef^q!IrbI*d$H>pENJ<_J?}qOrO7UJvY1)l`=*E62J^F(; zC*E>cJ{$_tAWFEzXCh15|F{$$F_^u=JXtw-A{ePfc+cw-lzPY7SFKsY`dD5%MlgZ% zNzNJw0&19Ypl{mCmn!WxkIdY~M z1fH`uO#|!@@fKf%Ix=$g*X_k@&k>4+jYS|;MI+ql(k*Te63JU`aQ42LrBpMtoQMjEGwHnc97gQIF28CGFSS=#2a zas?aLu{?fOZRKXS=yYB!P)Z-hG8kR)($2~$^B0dd@b%DVD6*6L*tPP2h}18aKhlI8 zVJ>F1#dF5#XLUi! z(pq8+#(y$z2+Dx^t;8;KurWP^7ySJIw8B1%d6RZ|lj$sH9c}Hz`H=;L5wI-Y_VoCn zXBDXkUE;z|x=Z93+SG(9%@3cU1Tz_VK0nq@OkkLy3O+Xe=gXIj7m5fY@q8E%S^4_8 z6`f1zO4-12pQ-P;FY;syZ%V8Ap;Kg)J(W^RDfXQngFHO&)-58bS9q$tN!W|Dj!!XX zP+nau&yHU=Y}~tb!4i7`JRe04er<-}vBB+VYC_`t7*UND@;x7J>g2bpJlIYKKg)Ev zH_(=fO$+s@NXJw`B?EdwVuP%9#S=+`T1VL^tP5$_M64%4`X^n z4Z;SNOuKBW^NWp1U7(d+Eey(^{-GB8`wDvMcFW7iJ01hfNP1DIoc&QW*i)?TdrONr zv#ZPT{5iu0X}u_wGojg&`+yR7=rM|z_IH3Y`&_xPE2&YDU*A28%j;paRqMh`b`k}t*f9>i&V&CdJLy-!Dn}-prvA+{WZ3W z>7F$BT$94VY`vLrA;rX{J*LdAafNwa01@4Q7Dc09EJA^O4B-wEbe&Htt8D41h@)dq7{W?Z3N-qh5~$gUPaSBL%&)cJkI=5lyF zJWo=y8IwljS$u<8UAsj}I}I|zGcCACF7tn)^AN2xC+Ue=}h8L#Yb zdh8sI$`vAi4p#1czq-Xca4*>Xk~DxhBQi2x-b)mcSOo=(V#e-8VreucVc4lNrz9Fw zLLr>Ll&j`yx1conT|u-~+<#8##?_U7s~rj3=Y6i>v@(b8o{dNDk{oCD*EEkkHQga^ z63cwm_Mu9e(xqvkL`o->JP*+gb=wCSblnMyE$f4heUjY}aie~8{``xC%lVJ5SznE| z-fsCp$@gHC#8mgM7o)Q!d9yEirzo5a$0?|`Zkx-b)rndy%z`0RmM|vLt!0 z(licjKn0Pj`fFmpsHkDSwSicw+dllvs+ZH}@Xp-5vPza`{ ze9KJH;%b;6?Fw4Vx3yXN7+TpOG&Z_kTd3i{wMC}GeL9U|m#(^S4uiHo@KVMms$1H- zu=B@Q+30O^2j*e-BV2n(c`zuchkXU8KUoY51Q6ctR8w1>l;!uB=PK}6uS{deDFI0u zFI<_H9XzG(xu5%?*=!dr$p6Qyl|=FpL!&v)Pv>1-oyK+kk=fBJQ>6!TbtCj4t%$Lj zHJjvQFDi&xeonuEnXG}SWxqv>dhZ}w!JW2KBRGqz11vBdvgQhfr=v&Xvqsk{x)8 zwZpcsuEDkwwN+1{ajm~9W7n1fdrsxef_n>f1+rE?mfl=+SFI$KzOIif!DpP^z7|0k zxQs?Y=hK4YbyZ9|keg8ZAmXg&P~)pPe$D}xD)nCeT@lV%12L)!R^Q*Z6xeD=xWC}O zrFAYj?GYF=R#EF*c<+JvCHCciEoEb9lf>Q*DA{LG$Gy+~8lf_{xk#I#dRfw(dLl)GNVwjjkQa*q+1ik6I!&dK?>Do++& zt_7tfCoew>31sVc$C7Z1V_lFA+1RAcgaFHOl=)&)REBI>j*Nb3pG(ZwfdQKS)o2i~ znT2=cwJn5@=n;s03}(wlk^*<<=a1qB&}!e1PicWT|}{++3in3`ZGIJz0)rjxWa#mK>Ic`Rk7G}@VUO48X-Z$<*kTV z6iO5bN!ZU_l>99r z>-*mH{=*T951M*T1od@_L+~*6wZv;wbUqlW5hKZ@TsoKLuX+Dgp~xf0>~pzlR06X+ z;?w#h<{pQH=(v>FfXU==PUf)+ZQe3QNU+KX6&AXvv`{@b8DQfIhdEOMx~ViECi2Yf;e^4k++-R{JEZC_}!yQ6QPeFS-ilSR|V zVsj{~y7oOO%;e;fc7lLc>^_%NR`M>1fw%zzy@0K@Oj9fTz~i4S(4)WZHmApn;gouD zWVg0uyGrXVk^4U%zw!KPzB>5>ZDfbkmB~{6@c58R(BS=;rZpn~;|7s{FV(nRbfH`R4 z_01xIy5u4pq`t{IBIUyY_NRGF@+S~M1hxSv7#%o2NWd%yDR42+S>J`%$3(m+-QbFA zgJZQ@Q30h?GV;N5>H^Qm3Nk&x{@|MXl$8s@MvDvcY31>l;h@PdZqnZ8Q@#KJaXV6*_FbJJ%#$3*d~s! zb=;qxY~9Kc4C@wdaSnfoQzjIk15ef@R<}UHWjk?eH6KLWLv=Kz>4Ox55on>sR5kxw@|I zD*yyaN5bG$PVOx~#eN}c26BU+#E%~&p3Z+X4sJ{24k4dE`(qJ^OG_MGkSFQxH3o0S zH+_J2h`zrA!SGPem@^pL;XFbyphZEvqrJDf6hlCaBq`Zq2^fnCxkH);J@~K4Vr{jo z-Da}TRToS+b(av)*j}fY7s;-p@3j2 zxRFl5HpqtzLAPF4NrNdE0IcuMG#p@QZzj?dH`=C7M&7ZIz9#uI{R6k^(sHCbf+n=! zo$OLcjbYeL`ho|9b20b%1xE@=xWXvog`Q*ky@2t|kIm+_Za2O?2~+LO@!}lLQWLA& zKqK}9+&>ig=+VAd*VarOR$J>rdee!==TnpoGFo~7!(lq3?3Z5}T2g(mFhSZu53>S2 zFcAz=s;iT#_F;%nprz$89LtwJQ66{9A$pCW(oN?#=~6eG=+|uFR}fIg(Th5uAS6_` zFF5h}^Gnb=;?rVBl8~2dvuwzev2H`8*$3_sC4<@@+EuR*r10d!N6V3gqr4^Pav*_ zYmfWdXuE7F$rw0{DWicbc{{yl=HG?Bhj;E(i~1WM8^ADw{5q)Q7a&&`lX-f&d{rpC z4p@kXhQZWiL_OiB!CpzKkZIIv4vq+`D9nc;AwQ98?dbllIGn?K_bo!B7qOL_k1ru6 z#s}0VqO4%WcmOM3vKN;?;v>s>ozXU!1`4?&V5^^d8d3vf{^qf&|T%Q4dBvRl^g0m(@*B955WJcM0n- zqh!FVv`^BE^SF%DzARkvJxnaIEF(5rodI#CS?dLMsw1r zgJ@DZGVHKZtgqbGytaU&KW79ksF}V%J{sBN+;8wdV#ZGrlLb_5>NApKzHevEG7?DB z@A+qAeUkOVGKRA|A;@}AKltSfq5B

cA&6MA%#Y$8KvVL5T!PS`?Z` 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 E4*>Q!CjbBd diff --git a/tools/liveblocks-cli/package.json b/tools/liveblocks-cli/package.json index 9ad924ae90..9526445678 100644 --- a/tools/liveblocks-cli/package.json +++ b/tools/liveblocks-cli/package.json @@ -40,7 +40,7 @@ "dependencies": { "@liveblocks/core": "3.14.0", "@liveblocks/server": "1.0.12", - "@liveblocks/zenrouter": "1.0.12", + "@liveblocks/zenrouter": "^1.0.17", "decoders": "^2.8.0", "js-base64": "^3.7.5", "yjs": "^13.6.10" From 37ea7f77357d69aabd95e9cce98b153e519ef17b Mon Sep 17 00:00:00 2001 From: Vincent Driessen Date: Wed, 25 Feb 2026 19:31:34 +0100 Subject: [PATCH 2/6] Unbreak mirror script This commit only exists to unbreak the mirror script. Original commit: d05804fd54a9db0cd8526736a5076fa6b9c50cb8 From 486a9b33ae4c3ffdce82f1315d7843d1f925ce47 Mon Sep 17 00:00:00 2001 From: Vincent Driessen Date: Wed, 25 Feb 2026 11:59:55 +0100 Subject: [PATCH 3/6] Add author field to mirrored package.json files (LB-3372) (PR 1619) Original commit: b0ad9de82199886024d70b68eb3f3621bce7db14 --- packages/liveblocks-server/package.json | 1 + tools/liveblocks-cli/package.json | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/liveblocks-server/package.json b/packages/liveblocks-server/package.json index 20c0d570fe..725e96272f 100644 --- a/packages/liveblocks-server/package.json +++ b/packages/liveblocks-server/package.json @@ -43,6 +43,7 @@ "test:e2e": "jest --silent --verbose --color=always --config=./jest.config.e2e.js" }, "license": "AGPL-3.0-or-later", + "author": "Liveblocks Inc.", "devDependencies": { "@liveblocks/eslint-config": "*", "@liveblocks/jest-config": "*", diff --git a/tools/liveblocks-cli/package.json b/tools/liveblocks-cli/package.json index 9526445678..2797049873 100644 --- a/tools/liveblocks-cli/package.json +++ b/tools/liveblocks-cli/package.json @@ -22,6 +22,7 @@ "test:typescript": "tsc --noEmit" }, "license": "AGPL-3.0-or-later", + "author": "Liveblocks Inc.", "keywords": [ "Liveblocks", "CLI", From 8f130aa6b3ee3c124cc9d9bba99604dc5693e2e2 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Wed, 25 Feb 2026 11:16:41 +0000 Subject: [PATCH 4/6] Bump to 1.0.13 Original commit: 6ebb4c580975c3efe4c86230d89047114ccf09fb --- packages/liveblocks-server/package.json | 2 +- tools/liveblocks-cli/package.json | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/liveblocks-server/package.json b/packages/liveblocks-server/package.json index 725e96272f..7944ccc3bc 100644 --- a/packages/liveblocks-server/package.json +++ b/packages/liveblocks-server/package.json @@ -1,6 +1,6 @@ { "name": "@liveblocks/server", - "version": "1.0.12", + "version": "1.0.13", "description": "Liveblocks backend server foundation.", "type": "module", "main": "./dist/index.js", diff --git a/tools/liveblocks-cli/package.json b/tools/liveblocks-cli/package.json index 2797049873..2fc398d76e 100644 --- a/tools/liveblocks-cli/package.json +++ b/tools/liveblocks-cli/package.json @@ -1,6 +1,6 @@ { "name": "liveblocks", - "version": "1.0.12", + "version": "1.0.13", "description": "Liveblocks command line interface", "type": "module", "bin": { @@ -40,8 +40,8 @@ }, "dependencies": { "@liveblocks/core": "3.14.0", - "@liveblocks/server": "1.0.12", - "@liveblocks/zenrouter": "^1.0.17", + "@liveblocks/server": "1.0.13", + "@liveblocks/zenrouter": "1.0.13", "decoders": "^2.8.0", "js-base64": "^3.7.5", "yjs": "^13.6.10" From c58db2944fce24c62b292b8e52f2ab7c8b88deab Mon Sep 17 00:00:00 2001 From: Vincent Driessen Date: Wed, 25 Feb 2026 18:07:38 +0100 Subject: [PATCH 5/6] Remove Zen Router, it moved to a separate repo (PR 1620) Original commit: a421e45480dd348559586bb7d1bdcffef4ebc185 --- tools/liveblocks-cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/liveblocks-cli/package.json b/tools/liveblocks-cli/package.json index 2fc398d76e..7839504584 100644 --- a/tools/liveblocks-cli/package.json +++ b/tools/liveblocks-cli/package.json @@ -41,7 +41,7 @@ "dependencies": { "@liveblocks/core": "3.14.0", "@liveblocks/server": "1.0.13", - "@liveblocks/zenrouter": "1.0.13", + "@liveblocks/zenrouter": "^1.0.17", "decoders": "^2.8.0", "js-base64": "^3.7.5", "yjs": "^13.6.10" From 244a0aee58cd83737a742939075ba160c2b99fe3 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Wed, 25 Feb 2026 17:18:44 +0000 Subject: [PATCH 6/6] Bump to 1.0.14 Original commit: f273e0964798cac15b328f9ac3a09f56a24e8801 --- packages/liveblocks-server/package.json | 2 +- tools/liveblocks-cli/package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/liveblocks-server/package.json b/packages/liveblocks-server/package.json index 7944ccc3bc..6b78a4ee02 100644 --- a/packages/liveblocks-server/package.json +++ b/packages/liveblocks-server/package.json @@ -1,6 +1,6 @@ { "name": "@liveblocks/server", - "version": "1.0.13", + "version": "1.0.14", "description": "Liveblocks backend server foundation.", "type": "module", "main": "./dist/index.js", diff --git a/tools/liveblocks-cli/package.json b/tools/liveblocks-cli/package.json index 7839504584..de5768d48f 100644 --- a/tools/liveblocks-cli/package.json +++ b/tools/liveblocks-cli/package.json @@ -1,6 +1,6 @@ { "name": "liveblocks", - "version": "1.0.13", + "version": "1.0.14", "description": "Liveblocks command line interface", "type": "module", "bin": { @@ -40,7 +40,7 @@ }, "dependencies": { "@liveblocks/core": "3.14.0", - "@liveblocks/server": "1.0.13", + "@liveblocks/server": "1.0.14", "@liveblocks/zenrouter": "^1.0.17", "decoders": "^2.8.0", "js-base64": "^3.7.5",