From f4ad53af6a00d7b7098ed44746c5643233a9bdbb Mon Sep 17 00:00:00 2001 From: Maria Elisabeth Schreiber Date: Mon, 23 Oct 2023 18:32:42 -0600 Subject: [PATCH 01/16] Copy edit --- docs/source/caching/advanced-topics.mdx | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/docs/source/caching/advanced-topics.mdx b/docs/source/caching/advanced-topics.mdx index da9e1cfeeca..3e98d273c12 100644 --- a/docs/source/caching/advanced-topics.mdx +++ b/docs/source/caching/advanced-topics.mdx @@ -2,7 +2,7 @@ title: Advanced topics on caching in Apollo Client --- -This article describes special cases and considerations when using the Apollo Client cache. +This article describes special cases and considerations when using the [Apollo Client cache](./overview). ## Bypassing the cache @@ -97,7 +97,7 @@ function Foo (){ const client = useApolloClient(); useEffect(() => { - const unsubscribe = client.onResetStore(() => + const unsubscribe = client.onResetStore(() => new Promise(()=>setReset(reset + 1)) ); @@ -237,19 +237,25 @@ Now whenever a query includes the `book` field, the `read` function above execut ## Pagination utilities +Pagination is a best practice in GraphQL [for several reasons](../pagination/overview). Apollo Client enables fetching and caching paginated results using the [Core pagination API](../pagination/core-api). The API includes a few important utilities, including the [`fetchMore`](../pagination/core-api/#the-fetchmore-function) function and `@connection` directive. + ### Incremental loading: `fetchMore` -You can use the `fetchMore` function to update a query's cached result with data returned by a _followup_ query. Most often, `fetchMore` is used to handle infinite-scroll pagination and other situations where you're loading _more_ data when you already have _some_. +You can use the `fetchMore` function to update a query's cached result with data returned by a _follow-up_ query. Most often, `fetchMore` is used to handle infinite-scroll pagination and other situations where you're loading _more_ data when you already have _some_. For details, see [The `fetchMore` function](../pagination/core-api/#the-fetchmore-function). ### The `@connection` directive -Fundamentally, paginated queries are the same as any other query with the exception that calls to `fetchMore` update the same cache key. Because these queries are cached by both the initial query and their parameters, a problem arises when later retrieving or updating paginated queries in the cache. We don't care about pagination arguments such as limits, offsets, or cursors outside of the need to `fetchMore`, nor do we want to provide them simply for accessing cached data. +The `@connection` directive lets you specify a custom cache key for paginated results. This is useful because of an issue that can arise with paginated queries. + +Fundamentally, paginated queries are the same as other queries except that calls to `fetchMore` update the same cache key. Because these queries are cached by both the initial query and their parameters (which differ for subsequent fetches), a problem arises when retrieving or updating paginated queries in the cache later. Namely, the initial pagination query and subsequent fetches are cached separately. + +Pagination arguments such as limits, offsets, or cursors outside of `fetchMore` shouldn't be relevant for caching. Nor should you need to provide them to access cached data. The `@connection` directive solves this by letting you set a stable cache key for a field. The `@connection` directive also lets you set filters to specify which arguments should create separate stores in the cache. -To solve this, you can use the `@connection` directive to specify a custom cache key for results. A connection allows us to set the cache key for a field and to filter which arguments actually alter the query. +#### `@connection` directive usage -To use the `@connection` directive, add it to the segment of the query you want a custom store key for and provide the `key` parameter to specify the store key. In addition to the `key` parameter, you can also include the optional `filter` parameter, which takes an array of query argument names to include in the generated custom store key. +To use the `@connection` directive, add it to field you want a custom store key for. The directive requires a `key` parameter to specify the custom store key. You can optionally include the `filter` parameter, which takes an array of query argument names to include in the generated custom store key. ```js const query = gql` @@ -261,9 +267,9 @@ const query = gql` ` ``` -With the above query, even with multiple `fetchMore`s, the results of each feed update will always result in the `feed` key in the store being updated with the latest accumulated values. In this example, we also use the `@connection` directive's optional `filter` argument to include the `type` query argument in the store key, which results in multiple store values that accumulate queries from each type of feed. +With the above query, even with multiple `fetchMore`s, the results of each feed update always cause the store's `feed` key to be updated with the latest accumulated values. The example also uses the `@connection` directive's optional `filter` argument to include the `type` query argument in the store key. This creates multiple store values that accumulate queries from each type of feed. -Now that we have a stable store key, we can easily use `writeQuery` to perform a store update, in this case clearing out the feed. +With a stable store key, you can use [`writeQuery`](./cache-interaction/#writequery) to perform a store update that clears out the feed. ```js client.writeQuery({ @@ -283,4 +289,4 @@ client.writeQuery({ }); ``` -Note that because we are only using the `type` argument in the store key, we don't have to provide `offset` or `limit`. +> Note: Because this example uses the `type` argument in the store key, it doesn't need to provide `offset` or `limit` arguments. From f928e0cfd8f08794811eec3f4be9aa1f981828ff Mon Sep 17 00:00:00 2001 From: Maria Elisabeth Schreiber Date: Mon, 23 Oct 2023 18:56:28 -0600 Subject: [PATCH 02/16] Copyedit --- docs/source/caching/advanced-topics.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/caching/advanced-topics.mdx b/docs/source/caching/advanced-topics.mdx index 3e98d273c12..524cde3098a 100644 --- a/docs/source/caching/advanced-topics.mdx +++ b/docs/source/caching/advanced-topics.mdx @@ -237,7 +237,7 @@ Now whenever a query includes the `book` field, the `read` function above execut ## Pagination utilities -Pagination is a best practice in GraphQL [for several reasons](../pagination/overview). Apollo Client enables fetching and caching paginated results using the [Core pagination API](../pagination/core-api). The API includes a few important utilities, including the [`fetchMore`](../pagination/core-api/#the-fetchmore-function) function and `@connection` directive. +Pagination is a best practice in GraphQL [for several reasons](../pagination/overview). Apollo Client enables fetching and caching paginated results using the [Core pagination API](../pagination/core-api). The API includes a few important utilities, including the [`fetchMore`](../pagination/core-api/#the-fetchmore-function) function and the `@connection` directive. ### Incremental loading: `fetchMore` @@ -267,7 +267,7 @@ const query = gql` ` ``` -With the above query, even with multiple `fetchMore`s, the results of each feed update always cause the store's `feed` key to be updated with the latest accumulated values. The example also uses the `@connection` directive's optional `filter` argument to include the `type` query argument in the store key. This creates multiple store values that accumulate queries from each type of feed. +With the above query, even when multiple `fetchMore`s queries are performed, each feed update always results in an update to the store's `feed` key with the latest accumulated values. The example also uses the `@connection` directive's optional `filter` argument to include the `type` query argument in the store key. This creates multiple store values that accumulate queries from each type of feed. With a stable store key, you can use [`writeQuery`](./cache-interaction/#writequery) to perform a store update that clears out the feed. From 79e5b3bc33934277ec64ba15d2c7f91af5987b4c Mon Sep 17 00:00:00 2001 From: Maria Elisabeth Schreiber Date: Thu, 26 Oct 2023 08:36:14 -0600 Subject: [PATCH 03/16] Use "cache" instead of "store" --- docs/source/caching/advanced-topics.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/caching/advanced-topics.mdx b/docs/source/caching/advanced-topics.mdx index 524cde3098a..ab2cdcd8c0c 100644 --- a/docs/source/caching/advanced-topics.mdx +++ b/docs/source/caching/advanced-topics.mdx @@ -255,7 +255,7 @@ Pagination arguments such as limits, offsets, or cursors outside of `fetchMore` #### `@connection` directive usage -To use the `@connection` directive, add it to field you want a custom store key for. The directive requires a `key` parameter to specify the custom store key. You can optionally include the `filter` parameter, which takes an array of query argument names to include in the generated custom store key. +To use the `@connection` directive, add it to field you want a custom cache key for. The directive requires a `key` parameter to specify the custom cache key. You can optionally include the `filter` parameter, which takes an array of query argument names to include in the generated custom cache key. ```js const query = gql` @@ -267,9 +267,9 @@ const query = gql` ` ``` -With the above query, even when multiple `fetchMore`s queries are performed, each feed update always results in an update to the store's `feed` key with the latest accumulated values. The example also uses the `@connection` directive's optional `filter` argument to include the `type` query argument in the store key. This creates multiple store values that accumulate queries from each type of feed. +With the above query, even when multiple `fetchMore`s queries are performed, each feed update always results in an update to the cache's `feed` key with the latest accumulated values. The example also uses the `@connection` directive's optional `filter` argument to include the `type` query argument in the cache key. This creates multiple cache values that accumulate queries from each type of feed. -With a stable store key, you can use [`writeQuery`](./cache-interaction/#writequery) to perform a store update that clears out the feed. +With a stable cache key, you can use [`writeQuery`](./cache-interaction/#writequery) to perform a cache update that clears out the feed. ```js client.writeQuery({ @@ -289,4 +289,4 @@ client.writeQuery({ }); ``` -> Note: Because this example uses the `type` argument in the store key, it doesn't need to provide `offset` or `limit` arguments. +> Note: Because this example uses the `type` argument in the cache key, it doesn't need to provide `offset` or `limit` arguments. From bb1da8349e785c54fb4030f269602c900adf23a0 Mon Sep 17 00:00:00 2001 From: Lenz Weber-Tronic Date: Thu, 2 Nov 2023 16:31:33 +0100 Subject: [PATCH 04/16] work around TS 4.8-specific `infer X extends Y` (#11337) --- .api-reports/api-report-cache.md | 2 +- .api-reports/api-report-core.md | 2 +- .api-reports/api-report-react.md | 2 +- .api-reports/api-report-react_components.md | 2 +- .api-reports/api-report-react_context.md | 2 +- .api-reports/api-report-react_hoc.md | 2 +- .api-reports/api-report-react_hooks.md | 2 +- .api-reports/api-report-react_ssr.md | 2 +- .api-reports/api-report-testing.md | 2 +- .api-reports/api-report-testing_core.md | 2 +- .api-reports/api-report-utilities.md | 2 +- .api-reports/api-report.md | 2 +- .changeset/stupid-chairs-wait.md | 6 ++++++ src/cache/core/types/common.ts | 8 ++++++-- 14 files changed, 24 insertions(+), 14 deletions(-) create mode 100644 .changeset/stupid-chairs-wait.md diff --git a/.api-reports/api-report-cache.md b/.api-reports/api-report-cache.md index 34278f0c522..e10f450c8b7 100644 --- a/.api-reports/api-report-cache.md +++ b/.api-reports/api-report-cache.md @@ -885,7 +885,7 @@ export interface StoreObject { // Warning: (ae-forgotten-export) The symbol "AsStoreObject" needs to be exported by the entry point index.d.ts // // @public (undocumented) -type StoreObjectValueMaybeReference = StoreVal extends Array> ? ReadonlyArray | Reference> : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; +type StoreObjectValueMaybeReference = StoreVal extends Array> ? StoreVal extends Array ? Item extends Record ? ReadonlyArray | Reference> : never : never : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; // @public (undocumented) export type StoreValue = number | string | string[] | Reference | Reference[] | null | undefined | void | Object; diff --git a/.api-reports/api-report-core.md b/.api-reports/api-report-core.md index bd0acbce3df..c5d9202d915 100644 --- a/.api-reports/api-report-core.md +++ b/.api-reports/api-report-core.md @@ -2015,7 +2015,7 @@ export interface StoreObject { // Warning: (ae-forgotten-export) The symbol "AsStoreObject" needs to be exported by the entry point index.d.ts // // @public (undocumented) -type StoreObjectValueMaybeReference = StoreVal extends Array> ? ReadonlyArray | Reference> : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; +type StoreObjectValueMaybeReference = StoreVal extends Array> ? StoreVal extends Array ? Item extends Record ? ReadonlyArray | Reference> : never : never : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; // @public (undocumented) export type StoreValue = number | string | string[] | Reference | Reference[] | null | undefined | void | Object; diff --git a/.api-reports/api-report-react.md b/.api-reports/api-report-react.md index 267adc1a330..3d605b0c75d 100644 --- a/.api-reports/api-report-react.md +++ b/.api-reports/api-report-react.md @@ -1859,7 +1859,7 @@ interface StoreObject { // Warning: (ae-forgotten-export) The symbol "AsStoreObject" needs to be exported by the entry point index.d.ts // // @public (undocumented) -type StoreObjectValueMaybeReference = StoreVal extends Array> ? ReadonlyArray | Reference> : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; +type StoreObjectValueMaybeReference = StoreVal extends Array> ? StoreVal extends Array ? Item extends Record ? ReadonlyArray | Reference> : never : never : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; // @public (undocumented) type StoreValue = number | string | string[] | Reference | Reference[] | null | undefined | void | Object; diff --git a/.api-reports/api-report-react_components.md b/.api-reports/api-report-react_components.md index 1c8651938b5..fe5cd1acd2e 100644 --- a/.api-reports/api-report-react_components.md +++ b/.api-reports/api-report-react_components.md @@ -1594,7 +1594,7 @@ interface StoreObject { // Warning: (ae-forgotten-export) The symbol "AsStoreObject" needs to be exported by the entry point index.d.ts // // @public (undocumented) -type StoreObjectValueMaybeReference = StoreVal extends Array> ? ReadonlyArray | Reference> : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; +type StoreObjectValueMaybeReference = StoreVal extends Array> ? StoreVal extends Array ? Item extends Record ? ReadonlyArray | Reference> : never : never : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; // @public (undocumented) type StoreValue = number | string | string[] | Reference | Reference[] | null | undefined | void | Object; diff --git a/.api-reports/api-report-react_context.md b/.api-reports/api-report-react_context.md index 594fb04aeed..a7d24173bf6 100644 --- a/.api-reports/api-report-react_context.md +++ b/.api-reports/api-report-react_context.md @@ -1529,7 +1529,7 @@ interface StoreObject { // Warning: (ae-forgotten-export) The symbol "AsStoreObject" needs to be exported by the entry point index.d.ts // // @public (undocumented) -type StoreObjectValueMaybeReference = StoreVal extends Array> ? ReadonlyArray | Reference> : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; +type StoreObjectValueMaybeReference = StoreVal extends Array> ? StoreVal extends Array ? Item extends Record ? ReadonlyArray | Reference> : never : never : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; // @public (undocumented) type StoreValue = number | string | string[] | Reference | Reference[] | null | undefined | void | Object; diff --git a/.api-reports/api-report-react_hoc.md b/.api-reports/api-report-react_hoc.md index 017659e7ecc..e3a06451eb7 100644 --- a/.api-reports/api-report-react_hoc.md +++ b/.api-reports/api-report-react_hoc.md @@ -1550,7 +1550,7 @@ interface StoreObject { // Warning: (ae-forgotten-export) The symbol "AsStoreObject" needs to be exported by the entry point index.d.ts // // @public (undocumented) -type StoreObjectValueMaybeReference = StoreVal extends Array> ? ReadonlyArray | Reference> : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; +type StoreObjectValueMaybeReference = StoreVal extends Array> ? StoreVal extends Array ? Item extends Record ? ReadonlyArray | Reference> : never : never : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; // @public (undocumented) type StoreValue = number | string | string[] | Reference | Reference[] | null | undefined | void | Object; diff --git a/.api-reports/api-report-react_hooks.md b/.api-reports/api-report-react_hooks.md index 110739c8df9..a26e8bd68a5 100644 --- a/.api-reports/api-report-react_hooks.md +++ b/.api-reports/api-report-react_hooks.md @@ -1752,7 +1752,7 @@ interface StoreObject { // Warning: (ae-forgotten-export) The symbol "AsStoreObject" needs to be exported by the entry point index.d.ts // // @public (undocumented) -type StoreObjectValueMaybeReference = StoreVal extends Array> ? ReadonlyArray | Reference> : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; +type StoreObjectValueMaybeReference = StoreVal extends Array> ? StoreVal extends Array ? Item extends Record ? ReadonlyArray | Reference> : never : never : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; // @public (undocumented) type StoreValue = number | string | string[] | Reference | Reference[] | null | undefined | void | Object; diff --git a/.api-reports/api-report-react_ssr.md b/.api-reports/api-report-react_ssr.md index 5b11d65622a..5e51549fce7 100644 --- a/.api-reports/api-report-react_ssr.md +++ b/.api-reports/api-report-react_ssr.md @@ -1516,7 +1516,7 @@ interface StoreObject { // Warning: (ae-forgotten-export) The symbol "AsStoreObject" needs to be exported by the entry point index.d.ts // // @public (undocumented) -type StoreObjectValueMaybeReference = StoreVal extends Array> ? ReadonlyArray | Reference> : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; +type StoreObjectValueMaybeReference = StoreVal extends Array> ? StoreVal extends Array ? Item extends Record ? ReadonlyArray | Reference> : never : never : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; // @public (undocumented) type StoreValue = number | string | string[] | Reference | Reference[] | null | undefined | void | Object; diff --git a/.api-reports/api-report-testing.md b/.api-reports/api-report-testing.md index bdbed73258e..9d175464835 100644 --- a/.api-reports/api-report-testing.md +++ b/.api-reports/api-report-testing.md @@ -1548,7 +1548,7 @@ interface StoreObject { // Warning: (ae-forgotten-export) The symbol "AsStoreObject" needs to be exported by the entry point index.d.ts // // @public (undocumented) -type StoreObjectValueMaybeReference = StoreVal extends Array> ? ReadonlyArray | Reference> : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; +type StoreObjectValueMaybeReference = StoreVal extends Array> ? StoreVal extends Array ? Item extends Record ? ReadonlyArray | Reference> : never : never : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; // @public (undocumented) type StoreValue = number | string | string[] | Reference | Reference[] | null | undefined | void | Object; diff --git a/.api-reports/api-report-testing_core.md b/.api-reports/api-report-testing_core.md index f5de976f0c6..a95a55f8e2a 100644 --- a/.api-reports/api-report-testing_core.md +++ b/.api-reports/api-report-testing_core.md @@ -1504,7 +1504,7 @@ interface StoreObject { // Warning: (ae-forgotten-export) The symbol "AsStoreObject" needs to be exported by the entry point index.d.ts // // @public (undocumented) -type StoreObjectValueMaybeReference = StoreVal extends Array> ? ReadonlyArray | Reference> : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; +type StoreObjectValueMaybeReference = StoreVal extends Array> ? StoreVal extends Array ? Item extends Record ? ReadonlyArray | Reference> : never : never : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; // @public (undocumented) type StoreValue = number | string | string[] | Reference | Reference[] | null | undefined | void | Object; diff --git a/.api-reports/api-report-utilities.md b/.api-reports/api-report-utilities.md index 742cf060348..90e3cbaae41 100644 --- a/.api-reports/api-report-utilities.md +++ b/.api-reports/api-report-utilities.md @@ -2298,7 +2298,7 @@ export interface StoreObject { } // @public (undocumented) -type StoreObjectValueMaybeReference = StoreVal extends Array> ? ReadonlyArray | Reference> : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; +type StoreObjectValueMaybeReference = StoreVal extends Array> ? StoreVal extends Array ? Item extends Record ? ReadonlyArray | Reference> : never : never : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; // @public (undocumented) export type StoreValue = number | string | string[] | Reference | Reference[] | null | undefined | void | Object; diff --git a/.api-reports/api-report.md b/.api-reports/api-report.md index 3004669da51..c73cfb60ec7 100644 --- a/.api-reports/api-report.md +++ b/.api-reports/api-report.md @@ -2462,7 +2462,7 @@ export interface StoreObject { // Warning: (ae-forgotten-export) The symbol "AsStoreObject" needs to be exported by the entry point index.d.ts // // @public (undocumented) -type StoreObjectValueMaybeReference = StoreVal extends Array> ? ReadonlyArray | Reference> : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; +type StoreObjectValueMaybeReference = StoreVal extends Array> ? StoreVal extends Array ? Item extends Record ? ReadonlyArray | Reference> : never : never : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; // @public (undocumented) export type StoreValue = number | string | string[] | Reference | Reference[] | null | undefined | void | Object; diff --git a/.changeset/stupid-chairs-wait.md b/.changeset/stupid-chairs-wait.md new file mode 100644 index 00000000000..fb7c32fd1be --- /dev/null +++ b/.changeset/stupid-chairs-wait.md @@ -0,0 +1,6 @@ +--- +"@apollo/client": patch +--- + +#11206 used the TypeScript syntax `infer X extends Y` that was introduced in TS 4.8. +This caused some problems for some users, so we are rolling back to a more backwars-compatible (albeit slightly less performant) type. diff --git a/src/cache/core/types/common.ts b/src/cache/core/types/common.ts index 19200d4845e..9dc18d9197f 100644 --- a/src/cache/core/types/common.ts +++ b/src/cache/core/types/common.ts @@ -106,9 +106,13 @@ export type Modifier = ( ) => T | DeleteModifier | InvalidateModifier; type StoreObjectValueMaybeReference = StoreVal extends Array< - infer Item extends Record + Record > - ? ReadonlyArray | Reference> + ? StoreVal extends Array + ? Item extends Record + ? ReadonlyArray | Reference> + : never + : never : StoreVal extends Record ? AsStoreObject | Reference : StoreVal; From 8329f07e544d1c70a0e15c6a5ccc1d563ab72f8a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:50:49 +0100 Subject: [PATCH 05/16] Version Packages (#11298) Co-authored-by: github-actions[bot] --- .changeset/good-experts-repair.md | 5 ----- .changeset/stupid-chairs-wait.md | 6 ------ CHANGELOG.md | 9 +++++++++ package-lock.json | 6 +++--- package.json | 2 +- 5 files changed, 13 insertions(+), 15 deletions(-) delete mode 100644 .changeset/good-experts-repair.md delete mode 100644 .changeset/stupid-chairs-wait.md diff --git a/.changeset/good-experts-repair.md b/.changeset/good-experts-repair.md deleted file mode 100644 index 37aef92f934..00000000000 --- a/.changeset/good-experts-repair.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@apollo/client": patch ---- - -Add an explicit return type for the `useReadQuery` hook called `UseReadQueryResult`. Previously the return type of this hook was inferred from the return value. diff --git a/.changeset/stupid-chairs-wait.md b/.changeset/stupid-chairs-wait.md deleted file mode 100644 index fb7c32fd1be..00000000000 --- a/.changeset/stupid-chairs-wait.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@apollo/client": patch ---- - -#11206 used the TypeScript syntax `infer X extends Y` that was introduced in TS 4.8. -This caused some problems for some users, so we are rolling back to a more backwars-compatible (albeit slightly less performant) type. diff --git a/CHANGELOG.md b/CHANGELOG.md index fa43468947b..7db41c5d5a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # @apollo/client +## 3.8.7 + +### Patch Changes + +- [#11297](https://github.com/apollographql/apollo-client/pull/11297) [`c8c76a522`](https://github.com/apollographql/apollo-client/commit/c8c76a522e593de0d06cff73fde2d9e88152bed6) Thanks [@jerelmiller](https://github.com/jerelmiller)! - Add an explicit return type for the `useReadQuery` hook called `UseReadQueryResult`. Previously the return type of this hook was inferred from the return value. + +- [#11337](https://github.com/apollographql/apollo-client/pull/11337) [`bb1da8349`](https://github.com/apollographql/apollo-client/commit/bb1da8349e785c54fb4030f269602c900adf23a0) Thanks [@phryneas](https://github.com/phryneas)! - #11206 used the TypeScript syntax `infer X extends Y` that was introduced in TS 4.8. + This caused some problems for some users, so we are rolling back to a more backwars-compatible (albeit slightly less performant) type. + ## 3.8.6 ### Patch Changes diff --git a/package-lock.json b/package-lock.json index 41db6d1fd79..88665d8bd41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@apollo/client", - "version": "3.8.6", + "version": "3.8.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@apollo/client", - "version": "3.8.6", + "version": "3.8.7", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -100,7 +100,7 @@ "whatwg-fetch": "3.6.19" }, "engines": { - "npm": "^7.20.3 || ^8.0.0 || ^9.0.0" + "npm": "^7.20.3 || ^8.0.0 || ^9.0.0 || ^10.0.0" }, "peerDependencies": { "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0", diff --git a/package.json b/package.json index b5636e3c7b4..23178b8b3d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@apollo/client", - "version": "3.8.6", + "version": "3.8.7", "description": "A fully-featured caching GraphQL client.", "private": true, "keywords": [ From 71e4194571d0ec07be9f1759601e47d5a6b7547a Mon Sep 17 00:00:00 2001 From: Maria Elisabeth Schreiber Date: Thu, 2 Nov 2023 15:48:18 -0600 Subject: [PATCH 06/16] Clarify @connection use case --- docs/source/caching/advanced-topics.mdx | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/docs/source/caching/advanced-topics.mdx b/docs/source/caching/advanced-topics.mdx index ab2cdcd8c0c..43a741228db 100644 --- a/docs/source/caching/advanced-topics.mdx +++ b/docs/source/caching/advanced-topics.mdx @@ -241,21 +241,27 @@ Pagination is a best practice in GraphQL [for several reasons](../pagination/ove ### Incremental loading: `fetchMore` -You can use the `fetchMore` function to update a query's cached result with data returned by a _follow-up_ query. Most often, `fetchMore` is used to handle infinite-scroll pagination and other situations where you're loading _more_ data when you already have _some_. +You can use the `fetchMore` function to update a query's cached result with data returned by a _follow-up_ query. Most often, `fetchMore` is used to handle infinite-scroll pagination and other situations where you're loading more data when you already have some. For details, see [The `fetchMore` function](../pagination/core-api/#the-fetchmore-function). ### The `@connection` directive -The `@connection` directive lets you specify a custom cache key for paginated results. This is useful because of an issue that can arise with paginated queries. +The `@connection` directive solves the problem of multiple distinct copies of the same field in the cache. This can happen with paginated queries because the `fetchMore` function sends follow-up queries to fetch additional pages of results using arguments like [`offset`](../pagination/offset-based/) and [`limit`](../pagination/offset-based/). These arguments inadvertently fragment data from different pagination requests across the cache. -Fundamentally, paginated queries are the same as other queries except that calls to `fetchMore` update the same cache key. Because these queries are cached by both the initial query and their parameters (which differ for subsequent fetches), a problem arises when retrieving or updating paginated queries in the cache later. Namely, the initial pagination query and subsequent fetches are cached separately. +The `@connection` directive lets you unify paginated results by specifying a custom, stable cache key for a field. It also lets you set filters to specify which arguments should create separate stores in the cache. -Pagination arguments such as limits, offsets, or cursors outside of `fetchMore` shouldn't be relevant for caching. Nor should you need to provide them to access cached data. The `@connection` directive solves this by letting you set a stable cache key for a field. The `@connection` directive also lets you set filters to specify which arguments should create separate stores in the cache. + + +Starting in Apollo Client v3, setting the [`keyArgs` field policy](../pagination/key-args/#setting-keyargs) is the most straightforward way to resolve fragmented pagination results in the cache. For example, setting [`keyArgs` to `false`](../pagination/key-args/#supported-values-for-keyargs) indicates that no arguments should be included in cache keys, causing all pagination results to be cached together. + +The `@connection` directive is useful when you still want to include some distinguishing metadata on a query-by-query, field-by-field basis. This enables you to keep multiple instances of the same field's data separate in the cache if you require it. + + #### `@connection` directive usage -To use the `@connection` directive, add it to field you want a custom cache key for. The directive requires a `key` parameter to specify the custom cache key. You can optionally include the `filter` parameter, which takes an array of query argument names to include in the generated custom cache key. +To use the `@connection` directive, add it to the field you want a custom cache key for. The directive requires a `key` parameter to specify the custom cache key. You can optionally include the `filter` parameter, which takes an array of query argument names to include in the generated custom cache key. ```js const query = gql` @@ -289,4 +295,8 @@ client.writeQuery({ }); ``` -> Note: Because this example uses the `type` argument in the cache key, it doesn't need to provide `offset` or `limit` arguments. + + +Because this example uses the `type` argument in the cache key, it doesn't need to provide `offset` or `limit` arguments. + + From ae9379b187f3d25cdab855737f567cdf46d9a1b2 Mon Sep 17 00:00:00 2001 From: Maria Elisabeth Schreiber Date: Thu, 2 Nov 2023 15:51:56 -0600 Subject: [PATCH 07/16] Align admonition style --- docs/source/caching/advanced-topics.mdx | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/source/caching/advanced-topics.mdx b/docs/source/caching/advanced-topics.mdx index 43a741228db..6e8460b4077 100644 --- a/docs/source/caching/advanced-topics.mdx +++ b/docs/source/caching/advanced-topics.mdx @@ -22,7 +22,11 @@ You can persist and rehydrate the `InMemoryCache` from a storage provider like ` To get started, pass your cache and a storage provider to `persistCache`. By default, the contents of your cache are immediately restored asynchronously, and they're persisted on every write to the cache with a short configurable debounce interval. -> **Note:** The `persistCache` method is async and returns a `Promise`. + + +The `persistCache` method is async and returns a `Promise`. + + ```js import AsyncStorage from '@react-native-async-storage/async-storage'; @@ -60,7 +64,7 @@ function Profile() { } ``` -> To reset the cache _without_ refetching active queries, use `client.clearStore()` instead of `client.resetStore()`. +To reset the cache _without_ refetching active queries, use `client.clearStore()` instead of `client.resetStore()`. ### Responding to cache resets @@ -174,7 +178,11 @@ In these cases, you can provide a `refetchQueries` option to the `useMutation` h For details, see [Refetching queries](../data/mutations/#refetching-queries). -> Note that although `refetchQueries` can be faster to implement than an `update` function, it also requires additional network requests that are usually undesirable. For more information, see [this blog post](https://www.apollographql.com/blog/when-to-use-refetch-queries-in-apollo-client/). + + +Although `refetchQueries` can be faster to implement than an `update` function, it also requires additional network requests that are usually undesirable. For more information, see [this blog post](https://www.apollographql.com/blog/when-to-use-refetch-queries-in-apollo-client/). + + ## Cache redirects @@ -233,7 +241,11 @@ This `read` function uses the `toReference` helper utility to generate and retur Now whenever a query includes the `book` field, the `read` function above executes and returns a reference to a `Book` object. Apollo Client uses this reference to look up the object in its cache and return it if it's present. If it _isn't_ present, Apollo Client knows it needs to execute the query over the network. -> ⚠️ **Note:** To avoid a network request, _all_ of a query's requested fields must already be present in the cache. If the detail view's query fetches _any_ `Book` field that the list view's query _didn't_, Apollo Client considers the cache hit to be incomplete, and it executes the full query over the network. + + +To avoid a network request, _all_ of a query's requested fields must already be present in the cache. If the detail view's query fetches _any_ `Book` field that the list view's query _didn't_, Apollo Client considers the cache hit to be incomplete, and it executes the full query over the network. + + ## Pagination utilities From 6c3e533debdc78be015d57950e8cf9a87444ba86 Mon Sep 17 00:00:00 2001 From: Maria Elisabeth Schreiber Date: Fri, 3 Nov 2023 12:53:57 -0600 Subject: [PATCH 08/16] Add advanced usage --- docs/source/caching/advanced-topics.mdx | 54 ++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/docs/source/caching/advanced-topics.mdx b/docs/source/caching/advanced-topics.mdx index 6e8460b4077..d403ca25a83 100644 --- a/docs/source/caching/advanced-topics.mdx +++ b/docs/source/caching/advanced-topics.mdx @@ -265,14 +265,38 @@ The `@connection` directive lets you unify paginated results by specifying a cus -Starting in Apollo Client v3, setting the [`keyArgs` field policy](../pagination/key-args/#setting-keyargs) is the most straightforward way to resolve fragmented pagination results in the cache. For example, setting [`keyArgs` to `false`](../pagination/key-args/#supported-values-for-keyargs) indicates that no arguments should be included in cache keys, causing all pagination results to be cached together. +Starting in Apollo Client v3, setting the [`keyArgs` field policy](../pagination/key-args/#setting-keyargs) is the most straightforward way to resolve fragmented pagination results in the cache. For example, setting [`keyArgs` to `false`](../pagination/key-args/#supported-values-for-keyargs) indicates that no arguments should be included in cache keys, causing all pagination results to be cached together. Additionally, you only have to set your `keyArgs` configuration once, rather than using `@connection` in multiple queries. -The `@connection` directive is useful when you still want to include some distinguishing metadata on a query-by-query, field-by-field basis. This enables you to keep multiple instances of the same field's data separate in the cache if you require it. +For example, you can use the following [`keyArgs`](../pagination/key-args/#setting-keyargs) configuration for the same effect as the [`@connection` directive usage](#connection-directive-usage) described below. + +```js +const cache = new InMemoryCache({ + typePolicies: { + Query: { + fields: { + feed: { + keyArgs: ["type"] + } + } + } + } +}) +``` + +With this centralized `keyArg`s configuration, you don't need to include the `@connection` directive in your queries because the `type` argument is adequate for keeping feeds of different types separate in the cache. + +The `@connection` directive is useful when you want to store distinct data in the cache on a _query-by-query_, _field-by-field_ basis. See the [advanced usage instructions](#advanced-connection-directive-usage) below for more details. #### `@connection` directive usage + + +For the standard `@connection` directive usage described in this section, it's best to configure a [`keyArgs` field policy](../pagination/key-args/#setting-keyargs) as described [above](#the-connection-directive). For an example of storing distinct data on a _query-by-query_ basis, see the [advanced usage instructions](#advanced-connection-directive-usage). + + + To use the `@connection` directive, add it to the field you want a custom cache key for. The directive requires a `key` parameter to specify the custom cache key. You can optionally include the `filter` parameter, which takes an array of query argument names to include in the generated custom cache key. ```js @@ -312,3 +336,29 @@ client.writeQuery({ Because this example uses the `type` argument in the cache key, it doesn't need to provide `offset` or `limit` arguments. + +#### Advanced `@connection` directive usage + +The `@connection` directive is useful when using the same field in multiple queries, with no distinguishing arguments (for example, `type`) that `keyArgs` can use, and you want to keep that field's data separate in the cache. + +In the example below, the `@connection` key ensures that `feed` data from `ArticlesFeed` query is stored in the `article-feed` cache key and data from `ProductsFeed` in the `product-feed` cache key. + +```js +const ArticlesFeed = gql` + query ArticlesFeed($offset: Int, $limit: Int) { + feed(offset: $offset, limit: $limit) @connection(key: "article-feed") { + ...FeedEntry + } + } +` +``` + +```js +const ProductsFeed = gql` + query ProductsFeed($offset: Int, $limit: Int) { + feed(offset: $offset, limit: $limit) @connection(key: "product-feed") { + ...FeedEntry + } + } +` +``` From aaecbda0518ff65b47761ce540e8461487055439 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Nov 2023 16:22:22 -0700 Subject: [PATCH 09/16] chore(deps): update all dependencies - patch updates (#11342) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .circleci/config.yml | 2 +- package-lock.json | 48 ++++++++++++++++++++++---------------------- package.json | 10 ++++----- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index aa78388ce83..7259abaf3f7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,7 @@ version: 2.1 orbs: - secops: apollo/circleci-secops-orb@2.0.1 + secops: apollo/circleci-secops-orb@2.0.2 jobs: # Filesize: diff --git a/package-lock.json b/package-lock.json index 88665d8bd41..a8f3079375b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "@changesets/changelog-github": "0.4.8", "@changesets/cli": "2.26.2", "@graphql-tools/schema": "10.0.0", - "@microsoft/api-extractor": "7.38.0", + "@microsoft/api-extractor": "7.38.2", "@rollup/plugin-node-resolve": "11.2.1", "@size-limit/esbuild-why": "8.2.6", "@size-limit/preset-small-lib": "8.2.6", @@ -43,11 +43,11 @@ "@types/fetch-mock": "7.3.7", "@types/glob": "8.1.0", "@types/hoist-non-react-statics": "3.3.4", - "@types/jest": "29.5.6", + "@types/jest": "29.5.7", "@types/lodash": "4.14.200", - "@types/node": "20.8.9", - "@types/node-fetch": "2.6.7", - "@types/react": "18.2.33", + "@types/node": "20.8.10", + "@types/node-fetch": "2.6.8", + "@types/react": "18.2.35", "@types/react-dom": "18.2.14", "@types/use-sync-external-store": "0.0.5", "@typescript-eslint/eslint-plugin": "6.7.5", @@ -2111,9 +2111,9 @@ } }, "node_modules/@microsoft/api-extractor": { - "version": "7.38.0", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.38.0.tgz", - "integrity": "sha512-e1LhZYnfw+JEebuY2bzhw0imDCl1nwjSThTrQqBXl40hrVo6xm3j/1EpUr89QyzgjqmAwek2ZkIVZbrhaR+cqg==", + "version": "7.38.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.38.2.tgz", + "integrity": "sha512-JOARuhTwOcOMIU0O2czscoJy3ddVzIRhSA9/7T1ALuZSNphgWsPk+Bv4E7AnBDmTV4pP4lBNLtCxEHjjpWaytQ==", "dev": true, "dependencies": { "@microsoft/api-extractor-model": "7.28.2", @@ -2121,7 +2121,7 @@ "@microsoft/tsdoc-config": "~0.16.1", "@rushstack/node-core-library": "3.61.0", "@rushstack/rig-package": "0.5.1", - "@rushstack/ts-command-line": "4.16.1", + "@rushstack/ts-command-line": "4.17.1", "colors": "~1.2.1", "lodash": "~4.17.15", "resolve": "~1.22.1", @@ -2340,9 +2340,9 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.16.1.tgz", - "integrity": "sha512-+OCsD553GYVLEmz12yiFjMOzuPeCiZ3f8wTiFHL30ZVXexTyPmgjwXEhg2K2P0a2lVf+8YBy7WtPoflB2Fp8/A==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.17.1.tgz", + "integrity": "sha512-2jweO1O57BYP5qdBGl6apJLB+aRIn5ccIRTPDyULh0KMwVzFqWtw6IZWt1qtUoZD/pD2RNkIOosH6Cq45rIYeg==", "dev": true, "dependencies": { "@types/argparse": "1.0.38", @@ -2817,9 +2817,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.6", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.6.tgz", - "integrity": "sha512-/t9NnzkOpXb4Nfvg17ieHE6EeSjDS2SGSpNYfoLbUAeL/EOueU/RSdOWFpfQTXBEM7BguYW1XQ0EbM+6RlIh6w==", + "version": "29.5.7", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.7.tgz", + "integrity": "sha512-HLyetab6KVPSiF+7pFcUyMeLsx25LDNDemw9mGsJBkai/oouwrjTycocSDYopMEwFhN2Y4s9oPyOCZNofgSt2g==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -2900,18 +2900,18 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.8.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.9.tgz", - "integrity": "sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==", + "version": "20.8.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", + "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-lX17GZVpJ/fuCjguZ5b3TjEbSENxmEk1B2z02yoXSK9WMEWRivhdSY73wWMn6bpcCDAOh6qAdktpKHIlkDk2lg==", + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.8.tgz", + "integrity": "sha512-nnH5lV9QCMPsbEVdTb5Y+F3GQxLSw1xQgIydrb2gSfEavRPs50FnMr+KUaa+LoPSqibm2N+ZZxH7lavZlAT4GA==", "dev": true, "dependencies": { "@types/node": "*", @@ -2931,9 +2931,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.2.33", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.33.tgz", - "integrity": "sha512-v+I7S+hu3PIBoVkKGpSYYpiBT1ijqEzWpzQD62/jm4K74hPpSP7FF9BnKG6+fg2+62weJYkkBWDJlZt5JO/9hg==", + "version": "18.2.35", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.35.tgz", + "integrity": "sha512-LG3xpFZ++rTndV+/XFyX5vUP7NI9yxyk+MQvBDq+CVs8I9DLSc3Ymwb1Vmw5YDoeNeHN4PDZa3HylMKJYT9PNQ==", "dev": true, "dependencies": { "@types/prop-types": "*", diff --git a/package.json b/package.json index 23178b8b3d2..0ccb9c27923 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "@changesets/changelog-github": "0.4.8", "@changesets/cli": "2.26.2", "@graphql-tools/schema": "10.0.0", - "@microsoft/api-extractor": "7.38.0", + "@microsoft/api-extractor": "7.38.2", "@rollup/plugin-node-resolve": "11.2.1", "@size-limit/esbuild-why": "8.2.6", "@size-limit/preset-small-lib": "8.2.6", @@ -121,11 +121,11 @@ "@types/fetch-mock": "7.3.7", "@types/glob": "8.1.0", "@types/hoist-non-react-statics": "3.3.4", - "@types/jest": "29.5.6", + "@types/jest": "29.5.7", "@types/lodash": "4.14.200", - "@types/node": "20.8.9", - "@types/node-fetch": "2.6.7", - "@types/react": "18.2.33", + "@types/node": "20.8.10", + "@types/node-fetch": "2.6.8", + "@types/react": "18.2.35", "@types/react-dom": "18.2.14", "@types/use-sync-external-store": "0.0.5", "@typescript-eslint/eslint-plugin": "6.7.5", From 49086d9d24a1f36f8ba9f8f44ab018ac6e161854 Mon Sep 17 00:00:00 2001 From: Xiang Ji Date: Tue, 7 Nov 2023 02:05:04 +0100 Subject: [PATCH 10/16] Fix link to localhost in react-native.md (#11346) --- docs/source/integrations/react-native.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/integrations/react-native.md b/docs/source/integrations/react-native.md index eabd1ec6076..68dfdd23bf6 100644 --- a/docs/source/integrations/react-native.md +++ b/docs/source/integrations/react-native.md @@ -17,7 +17,7 @@ import { ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client'; // Initialize Apollo Client const client = new ApolloClient({ - uri: 'localhost:4000/graphql', + uri: 'http://localhost:4000/graphql', cache: new InMemoryCache() }); From 26f4e5debd2361555042d604b5fa929e55e83bbf Mon Sep 17 00:00:00 2001 From: Jerel Miller Date: Tue, 7 Nov 2023 09:20:39 -0700 Subject: [PATCH 11/16] Update ROADMAP.md --- ROADMAP.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 081d877de06..59a9e819500 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,6 +1,6 @@ # 🔮 Apollo Client Roadmap -**Last updated: 2023-09-26** +**Last updated: 2023-11-07** For up to date release notes, refer to the project's [Changelog](https://github.com/apollographql/apollo-client/blob/main/CHANGELOG.md). @@ -15,11 +15,12 @@ For up to date release notes, refer to the project's [Changelog](https://github. ## [3.9.0](https://github.com/apollographql/apollo-client/milestone/32) -_Currently in planning phase_ +_Currently in development phase_ + +Tentative beta date: Dec 1, 2023 Features we plan to tackle: -- Introduce a suspenseful `useFragment` that will suspend when the data is not yet loaded - Ability to preload a query outside of a React component that can be used with `useReadQuery` to suspend while loading - Introduce a new `useInteractiveQuery`/`useLazyBackgroundQuery` hook (name TBD) - Improved testing utilities @@ -29,6 +30,13 @@ Features we plan to tackle: ## Future 3.x releases +## [3.10.0](https://github.com/apollographql/apollo-client/milestone/33) + +_Currently in planning phase_ + +- schema-driven testing utilities +- Introduce a suspenseful `useFragment` that will suspend when the data is not yet loaded + _Approximate Date: TBD_ The 3.8 release was a major milestone for the project's React support. Feedback from the community will have a big impact on where we go next, particularly as use cases for React Server Components and other React 18 features emerge. In addition to new functionality, there is a significant backlog of questions and fixes that we want to categorize and thoughtfully address in upcoming releases. From bac34d76c6bdec6a1644e7372dee383f7ab360f8 Mon Sep 17 00:00:00 2001 From: Maria Elisabeth Schreiber Date: Tue, 7 Nov 2023 12:03:57 -0700 Subject: [PATCH 12/16] Add Spotify example --- docs/source/caching/advanced-topics.mdx | 56 ++++++++++-------------- docs/source/img/spotify-playlists.jpg | Bin 0 -> 305410 bytes 2 files changed, 22 insertions(+), 34 deletions(-) create mode 100644 docs/source/img/spotify-playlists.jpg diff --git a/docs/source/caching/advanced-topics.mdx b/docs/source/caching/advanced-topics.mdx index d403ca25a83..3e58414e730 100644 --- a/docs/source/caching/advanced-topics.mdx +++ b/docs/source/caching/advanced-topics.mdx @@ -259,15 +259,23 @@ For details, see [The `fetchMore` function](../pagination/core-api/#the-fetchmor ### The `@connection` directive -The `@connection` directive solves the problem of multiple distinct copies of the same field in the cache. This can happen with paginated queries because the `fetchMore` function sends follow-up queries to fetch additional pages of results using arguments like [`offset`](../pagination/offset-based/) and [`limit`](../pagination/offset-based/). These arguments inadvertently fragment data from different pagination requests across the cache. +The `@connection` directive solves the problem of multiple copies of the same field in the cache. This can happen with paginated queries because the `fetchMore` function sends follow-up queries to fetch additional pages of results using arguments like [`offset`](../pagination/offset-based/) and [`limit`](../pagination/offset-based/). These arguments inadvertently fragment data from different pagination requests across the cache. -The `@connection` directive lets you unify paginated results by specifying a custom, stable cache key for a field. It also lets you set filters to specify which arguments should create separate stores in the cache. +The `@connection` directive lets you unify paginated results by specifying a custom, stable cache key for a field. It also lets you _intentionally_ separate paginated results in the cache by fields that you specify. -Starting in Apollo Client v3, setting the [`keyArgs` field policy](../pagination/key-args/#setting-keyargs) is the most straightforward way to resolve fragmented pagination results in the cache. For example, setting [`keyArgs` to `false`](../pagination/key-args/#supported-values-for-keyargs) indicates that no arguments should be included in cache keys, causing all pagination results to be cached together. Additionally, you only have to set your `keyArgs` configuration once, rather than using `@connection` in multiple queries. +Starting in Apollo Client v3, setting the [`keyArgs` field policy](../pagination/key-args/#setting-keyargs) is the most straightforward way to resolve fragmented pagination results in the cache. For example, setting [`keyArgs` to `false`](../pagination/key-args/#supported-values-for-keyargs) indicates that no arguments should be included in cache keys, causing all pagination results to be cached together. Additionally, you only have to set your `keyArgs` configuration once, rather than using `@connection` in multiple queries. Refer to the [usage instructions](#connection-directive-usage) below to compare `@connection` and `keyArgs` usage. -For example, you can use the following [`keyArgs`](../pagination/key-args/#setting-keyargs) configuration for the same effect as the [`@connection` directive usage](#connection-directive-usage) described below. +The `@connection` directive is useful when you want to store distinct data in the cache on a query-by-query, field-by-field basis. See the [advanced usage instructions](#advanced-connection-directive-usage) for more details. + + + +#### `@connection` directive usage + + + +For the standard `@connection` directive usage described in this section, it's best to configure a [`keyArgs` field policy](../pagination/key-args/#setting-keyargs). For example, you can use the following [`keyArgs`](../pagination/key-args/#setting-keyargs) configuration for the same effect as the `@connection` example below. ```js const cache = new InMemoryCache({ @@ -283,17 +291,7 @@ const cache = new InMemoryCache({ }) ``` -With this centralized `keyArg`s configuration, you don't need to include the `@connection` directive in your queries because the `type` argument is adequate for keeping feeds of different types separate in the cache. - -The `@connection` directive is useful when you want to store distinct data in the cache on a _query-by-query_, _field-by-field_ basis. See the [advanced usage instructions](#advanced-connection-directive-usage) below for more details. - - - -#### `@connection` directive usage - - - -For the standard `@connection` directive usage described in this section, it's best to configure a [`keyArgs` field policy](../pagination/key-args/#setting-keyargs) as described [above](#the-connection-directive). For an example of storing distinct data on a _query-by-query_ basis, see the [advanced usage instructions](#advanced-connection-directive-usage). +With this centralized `keyArg`s configuration, you don't need to include the `@connection` directive in your queries because the `type` argument is adequate for keeping feeds of different types separate in the cache. For an example of storing distinct data on a query-by-query basis, see the [advanced usage instructions](#advanced-connection-directive-usage). @@ -341,24 +339,14 @@ Because this example uses the `type` argument in the cache key, it doesn't need The `@connection` directive is useful when using the same field in multiple queries, with no distinguishing arguments (for example, `type`) that `keyArgs` can use, and you want to keep that field's data separate in the cache. -In the example below, the `@connection` key ensures that `feed` data from `ArticlesFeed` query is stored in the `article-feed` cache key and data from `ProductsFeed` in the `product-feed` cache key. +For example, Apollo's [Spotify showcase](https://github.com/apollographql/spotify-showcase) uses `@connection` to independently cache lists of playlists. One list is in the left sidebar, where you navigate between playlists. The other appears when you right-click a song to add it to a playlist. -```js -const ArticlesFeed = gql` - query ArticlesFeed($offset: Int, $limit: Int) { - feed(offset: $offset, limit: $limit) @connection(key: "article-feed") { - ...FeedEntry - } - } -` -``` -```js -const ProductsFeed = gql` - query ProductsFeed($offset: Int, $limit: Int) { - feed(offset: $offset, limit: $limit) @connection(key: "product-feed") { - ...FeedEntry - } - } -` -``` +Separately cached playlists in Apollo's Spotify Showcase + +Without caching the playlists separately, loading the next page of data from one list affects the other, negatively impacting the UX. + +For code examples, see: +- [The type policy](https://github.com/apollographql/spotify-showcase/blob/185f7b8a155209e9a099490dbc5d1e3bfba4c32f/client/src/apollo/client.ts#L105-L108) +- [Playlist sidebar query](https://github.com/apollographql/spotify-showcase/blob/185f7b8a155209e9a099490dbc5d1e3bfba4c32f/client/src/components/LoggedInLayout.tsx#L75) +- [Add to playlist menu](https://github.com/apollographql/spotify-showcase/blob/185f7b8a155209e9a099490dbc5d1e3bfba4c32f/client/src/components/ContextMenuAction/AddToPlaylist.tsx#L17) diff --git a/docs/source/img/spotify-playlists.jpg b/docs/source/img/spotify-playlists.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c2584c38bdde4cfe786d88825ac114fd9e78b6f GIT binary patch literal 305410 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

yQOhyXTV~k>VxnGm+rXgtiG~?L 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%0DmHtV{mCO#wJo&0*A~_L0rXLHx^d|-lofFD zhz7G{S4q<>A(>p|+h!zABd>?}-Cq))WUtxldMy#R)H0C%q+Ax!j|7N?UmGO=v$=x; zO5)C5r7;@%6$pB#My&-~rTxz9eP6(?t#3U8Y1Xrjxq}GChqlknX-Pcq7OH}M=rc=I zsFPFLmmgsZn7{pQF6P$lXIbZzUMn~@tEo{uIbrOUt52ND74+TroH`nOKAbl;YLxLQ z*Z$+02o2qV&l*B*_3O8{my_<=hpMGtytC=as&`4bE9cu=?i)W;c~Y70^!~c{TJ64P z?{xtIp*kj6*4Vg+q-G>KXSMKy;$)7&*%R)Ll^~* z$tKKkDi&Z85rd@L=}3QKD>w{P@fo!vxL67FyMmwTNI`ZzTuz_kfNoTaB=a*WNH4gbX_{!eX{j7V`p9W{9E1J&GI6aJHOwk>WTX?iG}0w>rKCnG z-O(`UWAz94udj$6(A3>n$WYcz!0loLy8c<{nAwW4LjphXl=j68Pb6-EL~3yexKUh; z$f&coN_ft5#M{y++9PIG%5}MgEh9~U*RPfoQ~;0}$tsq8r_W6SLR)R$;Dhar>7AqU zb0CQ6XR&~Ph66eqg%_uJMO2Z{&a*h!$s*D^aCcwOEvo0HM=0%y0Pf^I0#S?2fn5Z> zCM!APRf1g_-EoOgjfQ!m0W#!3xl3i=osv&5fd{6KTdmCN&z^D8=Qq^0yHxAzCMGU0 z&c|}W_if2u@~rpj&t>y`ZmREN5B5D@XBx(|l$!-0NCIHVK=ZU4cAqk#@@-X6?Z7{*6#Q>{x+=6CU9w*wmF=u?@H*u(c zi}-vCc8ST}_lj6pVjPxcsU98e7iKc@%D$P?9c*VHG-+930fg3zZ|YH@LqS#JWi(HSVo^51pb} z$!9U>{>c>+hgJc1zVM}L(%6Nsfrn5;7Dvo{TA_0m6Q2I7*ynMRarZU#zK0P`HgVS; zSYGLy1l^h0LSYKpM5id1SURDAQ53w&I)m_qyLH&IWAS6MryXDaWKh86Uwc^(=Bp1f zjjU|FE`FcikMpxO_1IPL_f2nq@v+2d`RsJP<>0WFdq#8iI1xvD6dC0@Fa9BovVmgu(Jfxj)tB9ybqBK_#ui=HJK zR?73@mt=pnb_O6*-SS+W$eWIEBYi}?f!6F2K-rdNz(=cNw!%S-0P}a6BDg|wyexiIAXB-vvBIN~8 zC1%pgpL;=Hsx8t+^CoNevgw&He-?v3CAi?$IRH(id4+)$^p=qm(Q)sZ<;c+_~;#)GdH!S#Y|t}a~7d-Gr*!+9ToZN zcfV2us(pXE^POXVN09kDl%fwNc_tlD%7uROj~VFzRSZUd9hv-^u+*l0MH#PC`1ZM9 zH)=u2)njSmy=3p;%!t!;#ixZj8RpA_EvX#5?1 z78cMC(YRl*;8?oGubj`yIy87*i&M+4>q3z7ilZfZ235^F${NdJrI_@Edfz5x2<|k9 zz+W92tW?o3(ljDrt<5D{Sz-SCyncV{%&&7Hx{zT=Ps{zPVV^$~%+BfWX=!Rkmg9f& zS2&BL3_f|WbCdI}0P;M@e#3_r6cHc9&^4@Fc)Y68**dTKokvt?;F3}XXUWmXv3|>h z1FoyFz-4hsP_N=OA}mhFQ(TkZZh7rpCPZps`B`Rhfk?@rQn`>m&|(it@RS6+G#gAK zl%@UYRk3PW*<4u-?g$U%oFGMgUd!8US~m>dPpk#l`x+J(zs~VudhWOuFL-P-(WI2S zWlc39HJ&io+VD)q{e)$h_j6b%gh9286eR8QWDnM{SM(@Ra^5h&!PcR7tD(H z@mb)ep4#-pC+O2SjZC4nax6dp?s*w+>g@LJ-JJkx4zF&+U2J%zf5Jqkvb5@(Z)g`b z(g30$BZag?$=lB;eqPvtTgB3R?V8`n?PGPI`DzadV6W*O`Dc2?l z99C90a)alBRdG_t1dy{cKZQt9_QrPA9J7x+-uAozuR^LVSBix^L{u z5<8bS>saBY+6NsOO!iqOB0bl>&xCCZ-rNM#akQ;xtMS*z73bX5BLosG>+R}m_qC?8 z%)4QfUlrpx_JzKz%9_=7U)%}twP>8dG4%2;e6fgjN{!i(y41C?;pjb|HjBiTbfPP% zfBIrUUFgX9J8YuwU&TUQEG!gz7|jHE;165M z9Z$0ew%D#|<8O+x?YZ@iZ}yk?jT(w4fmZ|8#yp6e`FN9lgPrjQiQ#5Baq5aqJ5xW6 zx-cK)Zf^W6*RcNHLQt#Euqh2apLkIm)L-?=m@Y~0LA{|CUj-&T-)Xhq97? z7jAY9nU%{3jN@~i3GqA zm&`&m{7q!X4ARUyO%F6Bx;(W+ci^6vUVNn3&Eq5fRo0eWi;a4^gTvG#HzQ+fO4Qwe zKdoCV`r$e1o~wb^rn)3rZ$-Z83UHYyGEkH1EzlK7C=iT5^1AFa2er(Z9<2w!qFOkC zMoVPavW1hc?~fVTb2T)#FX@C*iU}rWF0b7?r)ZkJF4Lmjt(>{BGEm+nEy%C_EbeV{ z*wtJN*B1|bD0`#sb$8FC=lw!=A7ABfi~AtGoYeSnC3;YH$2^efOI3O->Rws>)5U8d zSEo3A6WFP6@F#E8gS@uCAx2lfI4bm5Af+L$syw_^d~XuX4CI({*e4EVG>+IDie>ws z@N?FcE_k*7RCrwUZS3 z>Rf*T+CnyoJ=U4+uI-zll!+_3fnn*S0zhEC(9B(9`qR108x&L7i4$taxtYWodx$=L z#u?n$dEs;OnmP3H$@kM)>y#W1DH8NE&TN;yh`pCq*?wxBOoA^!{fw8;RV>>CY{79B z-n@v&g-7L~ik;4quBo0|Z56qsmF-EB@J#Stdx7c)O+cmM;4w|z3atkHL|hFH!9$W& z^ZXMg2RUST?*DF((BOAJ$LFaTS5Fldmp~U(7G%ARnUere{{Zy@XEox8#wlQ)$zA!E zfwMzQ3wCl-D4GhwrQiAdp#9LO)?Zr8ANoSUBl=_Fz+odT2sH4omiU5ixJB(}uFx>~#@zhdN&uiP!;pyojHc zsETZdHN^@2h4{Zi7p5cU2ui`~pd&Hh!gG7U!#+?cIM(gD;IThGPM>t;^}lfY0_y~G z@(%r0(E^U180Q*DeouA+Ev$Gj;ghxS64;rxX*c5WnR`hwx_PC_lPPAg4D-Ho^^UAt z#HVtvP_J=hs{T|?hdeA2>V&4i$7+1+^s!x167kRU_20F9c@{(df?Qb57s8?!ML_Gf ziveHKLck~oe|4Go2Kxdqr`i1ixRTO(nUV}VOoFeCp8mNW5Idvvm zBde%m6*VxR1VFnd6YH@yTFu^UjmxjEPs~gCmGTy-f?J@V{z`FG=&b&)hn=EU;XHW| z(Bm};Nu*YP$6aXddzjolI}-tYnRt0(Uk>M@4)m8US@IyzS_9{^h5%?!GTmnzG>!5- zM{?+yA2~XyMMDTVKG8?gk7gkECRxcrC82uN#9nA?FHQ}Z+Mq?Bk#o&H8HaSU7vIrv zCtQH)O8tGc&#iU=(S8N`+x-NH^PgyaRs=dKu}-b_-ZOz zy|M0HP1EaNJsLJQKDZJqg0+_5*Zfi7W*j(Hv|zMaN!_uop`qUE{)o=4UWG;m^G}&c zy3iuT`#LNM2UL0lKo1$gD{8AUr+`hiiTM%GuIhkvHG!sf4~>T&V+j7h7$gXnRvZ9FEf`O&t5@vJvl~Zf$`FP$pjYvpYStIcjRGY7c#r}$aC++ zDUe$NE{cCz=DxPy418H6@Q997Hq$mBdO;6fO(|5a1qjBZ>sLlBL*75$eY==0#up*D zyDPitdb&yqZ_+Kqn;wthb;~x~4V{RVIjB~?yTYSy>M$JQ6;yr~ks;89H3y*(tP%IY zUt?`lM?y-NesjEqv zx4)8*XT}u{`0Km4lG+au<)HhZo|xl@qPHmk=_yp6ybfAGtIq)&!*MO}<#B-$^pFuk zQ}idISs-8HWLl-DqbKpz^(Us+a<;3jTZsWr5a-;zUPD9SBSg`KnpS z-<{#z9}2@G6!~K{)aHoz8n}Z>HFl`6v-D?xTh3u#$rP~t%;oJ92a^`Tr#IV&$QlQ3 ztAvTO5J(?-A3##+k=qu-(8E+S5U6?pk(GR8L?uz&JmZ5ND%D341)PDzDOT8>K2tjkdEm%BOo z=jrxne<{zkW1x3A*}v1`jO1Iy54cVl#ve5jVWQt!T1a6n)Oh{l1X3~3I>WE)I6Z=# zQLI+fd%HY^CuVnHRI76&=!OPUj4-z;0b&qlP4738vi+&Q?#VA&|~b6!WgzXI}sNF-){YuT(Iy=&od zVarWVsf`Vm_(O3?QJw-PfuCAy(xvmp_)h!Vu>A&~_6Nqh10b61!Bp3y0H{(B{f-jh zqW(7*`DbVfQ@v5QSHUt1pdG4;hO9-z5jT@XrnO~sngESE;}!a}m8zk_IJ*c6V%4{n zlNKOac?}sFM_=>ti1g*tZW*mYGEVwiNQdr`xQ>GeT6@Er^QMng9XWHkf-8SL<@Z$Y zc$pxPaZHIXDf5qN8wb%!?a}+AALHz%Q<{smYw`uc~b)a{a{b7GL6+)Pq%W`B<-ST5w^9)rJY$FW6Lj@weN(C4Kgp6cHdeWO_` zyJZXYVcSl|D_X+sDgJ#fWE=NNf)!*CO$WI|WW!68`Lh^~1giurmGPN2jaE1Fx)$9( zqOKhi5nlAxsar@APUP+S_2T`CmOcM25BJ3(aAgZCDV$8*joa&l(;fDMOmX=|Ie5O- z7M|b1+^!`v8-c0yA&3nNpQHU&#hU%oZ&T&D-qn$OiqTbf6*%B=kelTGX+f07j0x)4 z>$jVa$2n)yv&;%BRm9So(XjCSCFeawY=uR%eW+~St>8jGCW;9D1xn0ip&cuYRuCn~ znf^T+ee2+4Z!6^1u%b%grl>1bI=S90h;A&s$V2&cjc=?AuDGgF<`cH`#o@Gh11E?~ zvxU>?%({mih{aZRkZL^#Wg^qeV&=ro`omiQ!ED3HlDUWNeEgawRKuiV% zAsQjfOXCBpj0^#_etr&`A~`ABg4 zgng_m60~=HX3kP2+j-yLTA{!|I0F!4{vL1(cN3l7nc}iHPI#2lM?q};hSUgVBuEC| z#0_o(!eZF4)4b4cL2TYfF4Gu~J>d+MF{yfymvI}?$2v}x(N7o@OYSs%D2)D$F$RgQ zF;UzwQ2UP$rVS+ZRb{>n6uA+)UVsos=-`!sN@P9I5kTy!DS0jZp?GHmti8UbWP&R3 z4RPqC!}E&qrxn174s~nBgh5~b;LNnG3iA7NHn2Ev0?R+!Bj}@c|*&)e8o^YGZYdc}Oz$2E?kNUcq-4B`5opzHeIS&~_0_WIQGFn*~#k zdIZ~FOy))@#6!ksyB+MtY&tp*z9n@EPq5$S|T-p}!9JeJeC? zw%6HW2S#1l3rzVFB<(7MNqW49gLw|w}Z$0FU+ID|K z(DZ)|a6fD0q<(NiP*fR&34+q#uJVflv_8;{`(uQpVXsz18er1^{V92iDpeBlX;xP)dK@a?3*Uq~>I4bM?lk z?OnPmefEIx@VPIY?dM-#6xtOBilsVN@a8Y>)EE0l$yw&*XhH7w>UG28adR%$`c`)G z++FSot=)q!!^D19(+EzKZJ+CVI+qi4n#4qxNM5&?$NQCc0=wBp;7nOxt4CU&+4Z~+ z*-tM$d!F3deObbaK9bC|`9fnU)=K|Tkdynk&Q#85Votb7=R-3Q8D+5nF_eX4IE2|h z{;1AFBv|9?##84Nk=44`r{>G?SEavv6{Jgfp88bA5#HdxpKxi3?PlC??dBm!`qvo7^TS?hUzfZ@=L;ZY`rTa zn+_V!KjB3B)oP!@P+1CNiWe5ga2MYvHvOUSsI2bzH6v}U!$F^*af_e-1$J^UFT@hN zx8NA-vv)lsa-!;s4ZGQ@a6rNH)9_!o2A+GWDg244_d_bje~2P&_TF;|Rgrsfk00b! zO}qhXtypt*-_DL-GVare^iT7vP&zFy?F~IRtBWv9rRfaPPC7B18ldx;(G{MGP#n3R z$3ks!tmV24PnxiTXe{e@?M>EVYInj2ni^k;N=Sllq7##Qex16GE~h!)ZHp(|Vk?A2 zM&X1yR=zW4ye-gBPzrBJ5P?rQJ~7GAs2eG$Y|4E5W47D3VBmAZ;^$8(TU8X)6sB$j z5ME}9KD274pStUsMY~(GUF|ikRXM)_63PYlwvOn!p2+xsCx!%ni?@;GC{7#a88ZcZ zV)-Y0?DLvVf+{f*+nf1(*B143l0-J=g8xvI!44Yn(F+6^C4R&Rn=&=0oZ+WbTF5#F zjRSmn&-mspRHV;-$O8PWi&l(CAvF&amVW_tadYV7C=F@|Ql!JDq)Pf`yD!)HCw5lwD`8%VX~Q&ZgYcZ9kq{xxpp3lO!s+uw!Gz5^o# z=!$`2aDvhnH`D3}lhhZmN!F0)7wS*Pulda$zp~@`ShJYP%+=Nci@>_Kywnx_aoU1u zTe_lO@pBYurF^gfn-GF6*QmDeD;44uuT62aJ=X6cU?T$0Wa!$ zb*4p*cY7!PGVx@WaZ)xGEJ`kyMXd}4OOPrQS+Ot-eFXWgzcr~t-X!~#dy5Ip?YKVP zhFOJoR0+Mm+9{xsNYxH?&q#qAWTDcY)y!Sn)JOfR{2pFiuWvH+hb4|O0@}+#QuZqdTd*%)bO{-ud?!=K8GsSC^b<#t zvI0{yI3L=(mDB7}Taa%7DAC9geN>AmPOx3{=B1t0A&a29C)ewAI67|rw2_E3MNuNG z)s_ADQq(N&892KjDW|*C6BKAHJj_e1=Zu2RX3uDWPFkGkm|&(nd{*1)iLSGwj^%sa zx|bK)B0lCQ2C#Zht1rpXq0cwPE;_zbX4P4w1u@K-q3*}K{Lt}won52-l}4h@>!kJy zl!hy15;8S3E!e8WZvNe;&hm@)wMc=1XYF^Xu0*T{#YLP=yd)^DOM|ZwX%<0rvA#fC zNRu#aSnm}=%gCD>m)M0qJiK3!6}4d<>1QnP(QnfPtc4QJ&-SjL9#K7G#2W)?=sB!I z^8!7+|K2k^ti-7yf(&;J3UEp_@zn5;Oe}?QxcA)T6?-A>m5`6Tt!O~t0tg;n{6yId zxrgfl(CJq{vO!OH3CGl*Yw}=Im}W+*Gf{|5hlcN!4WGynK&Z{Qo;8rlk zE;?9cShU)T{@GZWH=!Byq&hVyBZpV>x8>=ZWv041&9C=54aT3y^k^cIpfAx0aE2pM z7?MTN828Aml;~VmlN{u=$fqzT8Yvkbsktr8rp9Hc%S$7eDjUhtcOgMf2=hP+muM`c zeYZS%2bqHG4j$SzF*7$>{pd~9heH=W!hv=l;b1oM#Z7n>v?E@eeaF_YVf66JIgylU z_Degh)k%)ki&s_`v^^I-p3~m3(GAdV_rUYDL|_LOWq=YbptZ-SqEU9RNDO&=8l^Jw zwX$I}_j}dBE-yo$hc8@ie)e9MnWEiM8)6Rn9dNi5c09g?Z(k&_F;$1ibhgM>$6x#S zO#Jzvc*O3z;NR5LO#3q1oH+WWR3I9lq8lS>VG*WqeVlrHzJJp3JXu=6yRNn&YoX4z zZjbLRJqKYK1KtuZF&Q5DBIMh=Q;tlWxcn^TPTNF`E3|K(^c7?aoy=H7wQ@(KXJzMa z%8Pcu-#46u^TxI}3?SZk`EEf&oP1~lN~6s(HO?hEcvOD901d}Nev+!H>4El#!uS=e zUk5~FSeQtkJ=I$7!u$qrq-}=qq0`WJWvQ+7a=iIr=6jO4HSc53ZVrg88Yuf*3r`pY;iTJzElC6)< zyaR=;yOOkT%w{uHLV-T%J0%1IC+=Foom&L}G90qt3cIk8uAY9TW9^ct-jIb@eZn7| zt9IW;GewN`Hf*5xOZ5WIl{s-1J-yz8n{#`e_ghna@Dt{PSr8^H6W$2Zt*ZTzG)}Y2 z+N;Z<(xZk9Fq920R1CeDxc<61>Vj=v`>_Mg_@hdjdz@SAuaJybp6zp(59+Sd`OT9f z`DHgsn?Z;TZlU*OI|7@7UXhKK^^*1@2)C*HCyI7=W}*!|JKn)EBa{wMUkA9uSK!Z( zF+!g>iQP!w!OZ1=@X*%-xC^8JH5HCKFOMKUsrGM_{dp789Pxa(yaz!l@UuoWy3Y6g)zi;T> zU4pASLacQ`pWS7{)fI(Z?W*KUo-Z(0a-m}c>|qzOxW7krh|XXzUuxUoR|8U&xkqZA zZ=Kc5=6%Tz6!DkP39S(HN(J4k;9if%LKnH)_uc|3a7mAFFs`IO2mUNwC?%lm0psu0!jKDD4J&JrW6`zuHc zk=s3Yfn9J9fB+Y`&vm-8%18Hr8Z0f1H;Dk^J9@fx3_xe0^5hQgYDf_%hN$vYXVK%@ zY|`*%7N<{TlB2th&UKAYb-|=nrL{)WwN!v*z4#k4=zBKmCy(xcUYm2?JoV=doo6)< zQ5@!=FYh6ztRvL@*%*U|L+cj|2HsR+Pe%qAS;m0{9a{i|@rHX)RF5CxiPv zh)gnM+F0z#;z@*${#$rO4T7tFsbqbA{G`Lgtz}SGHr2shORz`)`4GDBnY-pCDGHG7=`t>j7h4e(0^{>shtwNCR}oST2a4sZ zM2hZErcTx3OIE&5Hrk{(9|Z!F^NS?No#thapwaP8X_}tERggc7;rwj1oi3#CNzVI)Se{zh*|kfbdmk|M0nv*x(gjd~x#>@VRY=*Q z+b@Urq+H`4-Q9j+v-QfYJTIEj>qW(W%FUXKS_9N75lreIo8y(ZjuphbI+tD^HSE;Q zPe7HB3*648r=H{?fNWr;#SB1KZT?kp0rVj({zD-=IIV;tN`hd}?SKBfe=r!yEwLdh zHl638b_O2@6WJBL2ns}vH4x4KKoWAh!NZ*Z(SUu`O%3!AOoW}?1n%2mJH&=(Ge<3H zntQ^iZHfN$rpXcMIH*KEb*5yWR|qhKNQ;v1<;L0rh}`{J&%=BzFpY>pj7NRbZ4(0zG)A1 z+a8Cf!B@g?00_ObY%!AQKFZ-Wa7LLxc|BSWfRDvZ_ib@*D59_jBY<33 z0OW^;64V@wef5rdk)`uF^tbIl|J7{|-E&<#cR*W3SR#-_^8M{t;CP@zxBwzL z(zotHSG|8D4{PrIp?ES4U<irlygbFb5Uf7ve{&q* zW63wbf)2$NkWrj}Nu$3c2M7%=CMKQ){2j|rXF3OoWcZBA$~)E zN#fSfc!0O?1$YZ{0J!Rz{Xe_~`MQS{WJ;8j_%79sQTUyIh}) z+jrc^Gy^8p6rZ*US((5A;1ji&G{{Lm5+e%;(R?w$jb?%TVL_GxEv(v5@6cjrK!+l; z&`-;yCuCw`+3FiDho4?blb3MW^zkFeDe-r8`MFgmfR(;Sy z6p-g3lx3_SL!e5)T|sh(-EutVos=8M?7(o^{DoSyLxP#1iJ`6Wl}K?KtC@OUl0= zorH#9E6zpJktCHX4CXg$1vbuC+G*!<#-huG4s4;#P!Ax?dQ;F=iJ_l_Y2y=JnKy{s zOYF|M!67r2qd|T<^CnTl$SAihu;8bc81>3<-(l3oDf3H3>+8madqM!8jL>1OB}^DC zz^MEI{5MW=5K!8G&oCaZ&iJ%*zf8DmLm=HK;;HOrVA4a%q=)4affMs+tWFd)`7%59 zJ#@6wjpUm8QLf--OBq*!KxKip5A%l13EvqC*r8qkgC!WuPPp#x&J6&;jHzf#{FlN< zk8AJAwC16BiN7rw$9~Bsy*iKfd0jt84hD>-k*AubC>Y^R)}22TBPpHGvVrUqC_p;# zd*JV&iMc`;6zQY>4d_PCQpW}@%tn@- z&{`<$NOZ{tS}-mLhNuS6?Sx-tvcDec&Ff^qYK>pYKqb<;RY>i+cX#`qGufJ+sLUQL2X(tOJ)UtvX9v_eeGaFzT@%>yBW*fbf?a{YPFiyc z1ui?hWgtjjf=ed=>Tqzf(|g+Z=Hr0IT>>+C2z?2->48Fe5%h!E@y1wqM>>5w`241?vM3H3Y1wvGcGT4%;_Vn|^1k0QJ)qM3@!rbC zrzfx*h79Xrmx{0}H=dqT`yV{46R|L|HZvRu;GjTxL&ii-uz)Q7T><rfV`1U-uW=UV3wQ6SqVjmUYV8PJjN3O!Mf6?Ayz zFJnVYnXf(rRu!tBz}6mvAp-_hURE~&Tf@IBjt(guD%#KeXZ%01I6`OPq%i1e8)z3u zb9MsB)?0_Y3y#DaVa9lXAG$2KO=gHS0AwftoJ9jlX~1@pa)4(dq?roF0Bd!!7!m@C ze5*u_0mUC7BEjDg+s-)dc8`@!`HR^YPW7?MI9=D$R$eHkN2mw6P~36}kYW?SoAB$w z0-t^>^KTq0i;r+~Z`~RLMAGx8ncA*vh!{{+1iE8zs&~YHFO^6dUzc<1y1 z!DYi;&vuduVqleXWu`Jq-l#YY1*9Zs2LB^PxnfTGZFxobH17cThZ~zu z@!G&lC41dKAP(%Xm8uLl7k5CXV`dg=qsq$nO1+_U-HrwA`KTZUo7K+cL^lhW_&C>w z=bwHV${evGI(Jl;;2k@rnr@WOa9l-RFV^{7ojq>*Yl}R{qh;cG@xtcEPOt|?htuGw zSJ?WPeaf73mtjdQC7t&&!@}-uO?Ewh)Qxilg^N)+7J$k{4TtL3yS%}NqQ`oHC#p#T z82uP_uR;q_S*eJK@O1+QXSbYCtsD24sl>SD1T#np+4z*DdZGd@wkuJsY!biKiPEk6 zK1}2**wpn*b#|$}8={~dYwNt+Bc1y&nb0j=E;E7I8H^zs1QpM1O{AxcPE2fWc)dPQ z&=K!>u%sdAb&=x%|FTa}6@nGt{s{O|bJCkMRaP|mBn9~k`Y)x7>{fpJP-)sv)ms3I~Q|q}}J7 zxv1*!f^P_~QTb-!b=W8(udowO+@lr|g;!iET+-BTGBS&y%TN5Ss=Mw_Z#^GJlr2{_ zH)T2HeJQu%Qnz=WeDO;~Rz%|hOrRN#LbH_yt6&RM@WKo6H=N{|Q(m8aS#V8l$ofO^ zES*1Mm*2CH$(Zq#*uA9({i!w`zo|q2lYQKOdj0=uFXscUI7RI+Edp#B7?9ZsL(r$8 zNP4K91ZYyeVEK z`4lIRwz@UX90q|}UE3P!L1o*2tEKNC zJ6Pbg%8U9}j$iwOvk4rs+*Qa3m5sGNkSssbQ7zy>nXQWrLd{G0YmI(QpYG?MpS;$z zzTGHM$zOO{(HQ5*VR{G(k0mn{BhCVWlYI|=kB_}gDx!mQf=F@_1HqDT8(`mxE_I8& z?~yaD*;|)c`5dTE5NzZKbW9NPYjanJExmgC2=DtFrhimpoRV{k+>a9gLMoD)zFLKIIfwx-kqzMAg;G6Oe06s z=la|UseTMd$-7~bZp$MrBJRe#5+bwxCAl?kYphDs5E$0#yaRd7e+5)3!y7_w*DAkea|l z&1(Q&RJ8mS;h}5LCu4fukq%rWXg8H^FJ{^971k9qb@;14^StX8Xlmk^6W>eF@s|L! z6W5zK-M>3!-Tcu|m$YPE%ktony`|Gr&jE}F$Va7H?k7mFVfPne+lzeZ1Un#lncN#XfAR(ow>Me@ngJ8dF>3*F-~FM^bTc|<1Q>?F ztWQrvx0;j#ZROSbfd1|m&O5wo7{Fkqx^wH2fL!{n$@F~GOQW#KRb&cyhJN8{EkTO> z8*ri3FS)j1>uFb=qRwn-4h%o-m6OSzGCAkP-+-%-SQYNr;$v%BJZI3YIri2vi@S<1 zqmq@C!&Ofw5N(EMHBRfJ7LBOYY7)IfG~ZDia(cv1d-xRkPV!Y+HsE6o))lo%$^Egk!UNuhF^<+`j>^LJ4PqS=!sKSOhU{{%+1H za&u3&+OM)V8+4$uY_aV+dP)xSvmggU7xK|pOO>xfW>^B}liuAY+B!1lRK32??r@hv zme7X_h$4|cNu4PWsQsI(U^h1bnau9zrK&OE$RbxZvGaF5 zNPfdTme6n0H9G0(-8gc!ghYK#S<2Co zJQlWK5~(G-nPRf>&N#k~2^{{Bu<(c8hR}0kAOps~vq?1KE z_QDZG2%=6lGJXHZS4?GDMKZC4`l*2Cb1vl`G$>j$%^~5JZasoGx=K|9{A31 zTzwlj+%=ji&`j<~AxS#^wtZ8TllIK}q(Fw-)D2iVev#84g27f;y)R3mmvols40uM2 zOa+|Rd~{x~j<49vYssGCs$_6(Jd|-{TYrV)ViF8wH#kGRbke2I7OYn>#)A({cSSko zs|jPKrNXU^N_Q^*Nb~c(SCVvH%dP%=3y@ca*7$FNu9EwYvo1yV=r1X0-!u=rPFE-) z_lqw#^i~{KH5RoEB{1V*n6>cj9c3;eD5DEH zDhvBD9_+4U-eKE1@y7>~E>7W(%XsP0!R5Y;bzvVaQNemeC)bWgNeGa={?zo~B6_>A zXya*qbD@5amuray>TW1TK)~rsml(g(yP>fC&rcW@NJc;u*9r(lJxb`VZuSK$gxr%P z9pws@ZTPN;d=yPxZ`)3>f6ZxG_#$9H=m4XEcU%I6O_-wT$h^p@qY!q3<`EH03PzNv zv$>;4@{!X3YJUoR^4@n1hl*0vWgSV%(Up__0&gl!wm1&VTFx_J$!e;#0BMAjWv_!6 z$V$*w6{xE)rCu0@x?`)iQ77n^Pmm7#<7=v%9di5jupUeMK0Qix^_|?^=Q3cWAu?02 zE)I|YX8f%vl$`J>5?*u01xaYf^uFx~=oj(3Qof*qGKe#+_YXX1WwUf9bL*72Nt(C2 z+rHH-yZiK0*OC?$1eI#nl)&9lf#>xnVx}UNa2C0_a6*I4lWW!1k zTy{y@-UajR?!DUC5eR#hVi8m~Df+1+zMrwiE9uf~Q|60<9V1JB zN7bnI?^X@sKPLo0Vrc`$#vd?*Nx7d~O}LE_J)O@k0ZBi?>epI$5|p?OUa@H1N*()5 z$#c1HYLlgwQ+fXYroAgUQ<4!Rq!G@pFJ`tAd_knnut)zP^*JrUtfhKz^t5#vS04BD zEwh7zTXB)MYJ;bg9xbo&QD-`4a)vPK)s9K7ixh}ew%1igGDv3RQVLS?zY7~UC)n&` zm?l{z{?U{-5kJJ3K<9+wDK(p2+b|izN`ME2xkuk5R&c})o|02UKPi|5YW3@^a*at# zKKX5aak}2VaNc?14SM51iwgVQe>py;;rqJEO&*wmIjvytH2fbax53L<5(^=JqT}>{fm3(nnVRwXS8M)BgY^eOv+kgUMiAC$<~`diQ8ilTu3>l1 zMt1!!{Zt)Dn+QE%2WWt^!ha4W{!6ZE=DMWq-1$tcb6Z#T=lhTzwtf3uTR|X}vj1>W4FVH&WzYblx-Sc{TqZb2%~bUD6=*@x?sT?SGdX zmvwZ2{x|XT(>(s&td{)UYj2j{m~4jx0f6oi!3#R%fEy&=koiMFgtVBC`dF!&jtY)d zJFhe}G$iJyJ3ntq(p*k;u+aj3_%oBuxon|8;%oe02ZoP%I0a(cjg9t&80)AyppR`X z$O#mh9x{-O^*~wQ!hR{+4t0I+?WVWXC1+<)B~dEQ<3RaVQxH%@V$tAQ84|Mx#~+GC zRp=iI)Yh`-zs*B>=I{?_w0MrT-hQaZ?_(qY0#@mx2IFhSQ^Bmk9teC5r_z@l+i@SE z*p-M}3b8nSzKHu2RB?{yn~K|wT88(sM-RJmYwK%#Qt#T>z}T~Uetd7Gy8c0fXI%f^ zM#gY=Zt9Ie%u37;Wq>b?JR{X3*DL)2u=X-LuyBJkh%ys9fKFa50|mlAMFXxPXQ#CP zHmfDa$z;cqN>IrVS?z>RZ|`a2sK^QunX;DU=ggm^et&n{(>!`PDS-b7VF75d)PtdT zK}Wv=A{%b-z2a>T$ky#X3+cQ!Hp%i=gyh?KFY+*)ljAXs4u~g1NzeZE+xYUv9GjN9 zPOA3$*$J6_>v$D_8u~GC;vE3O#ghV}I`*bz05H6(SI9~RBbpGbvNRLK;_UWq+(#jH zIb!zZXJ%)PyF4!vL)H9Y|90`u)}%|(OOKs~W1C(iAIfu5cUY`NR5yYc{T+@mdZSgR zIrY_z)rr|zG~Zry^Sg(O%YVNBc-qCqoO%5}&m%bEzgB~P4u)}g+z~UY&o)Njs2e2x z@>~)yzV3Hzo$~O#m{b$0Yr(1z6>9R#L=Ttac=3O`+-F)nU`Ax$txKwZ@2jR@Nm2pG z2_1UIKhK6&0xpxm-$<`6bGFwtXR}uNLDP0|q`Ib^nuxKn&h^YYoD>MP|Ceb5-}>(# zFuIzOOw>wYGxYn&2#Km7KE;!8C`^zUPyxWY)gmJA`04&Yb>SfN7^>j$dF6DMAhT^X z^X5yA(uIKWScEGV`?#>8+TvFIwiGQ*PJK;%ZQ{3d)_;vqu6V=u3uf0;See59Z7`lS z*80`|z0Gt~x6pVG#7qV`Rwe=Zzu0^4s3yBNZ4{)bASk_q0wP_y0wxLyA_Af!9R#F{ z2uPEV2uN=N0!oWW?;yQKYA6Cy1gRmR_kVb2td>6Fam!Na@kRSe|J8J!#k+6iE2NYqEw?{S)VTnO~ zjSiyANxGGO1V5rNbR2fJRZZhEHWwooMUu~p`g=f_dge>9U-CYAJy6byWDh|a>QQqX7Y3McNbORJ^zr}WWsMG{0A0}!eJ)gQ{ z4HRp9ILlKh{%=mSxT(KXm5|K)^y?mX9+?s9G@0ze2SPrObHG&b5isMbaZF~2 zfL-*PEoTa^L7U4(otX)`@aH(EHWo8iwC!?{R*z&bSuS zF~jy8fK7l;{#8e*1&k=ld0O7q#23&o-t;#3XmOxNN+@l=L77F>74C>T&X@pmLZlih zQt8;iw>o_#sqY(qX%H}JEMNNI`-1nx`+u7dz9oD4CAS=@Np!MLNnc6Y|Jkq_=UbN`}TQfSNOvl=jGT^DV9ffDlGnS%L`f~*pp;xe|qzL0wqbkKGd}MSUw=}o30Ap}=z-mgi zuBfkA)_jzsqiB+sf!p@Ri-D;wkn~!Q8bC}aEJhqETJP#h+#J};!C9I;xR`I4B;ks; z)~4h5Nzm&AN#c&9$}~6@-4(XXCY5!^W`=tQxEh-p)3w6lZ~Wx+wf}BRo4!MlC7mUV zVi~MLyTE)JG9~`cD7!+n7G1@&x2n_mQ&2pwX(|?d|e zB{5>!V4cm#xY`UYm9#HG@STH*N0*5fA7do%JI;Mi_{i_qL*@1K+0I%RNw1I))+z!k zwCpGq?VK*l3!7YgXh7?zK(i;h^hz=P(1VXMjH+em0&{J^SlUGheBHeCZ53ySvjDb| zLr?kqS~|r%;9@^-YX*Fok9yE^Dw+y6AT@{F?jSx8iq={5AW5NEfkd)vbyR#XImL%u za779cP`6K-&$#bCE8mcb$wJFb`{6&~j$@A!B0%&6Ka9ImH%L%g*-93v+uYb%E%_kP zlgab*72#Oh32&r16}CjO=U4f!xQSHN(ON~#9?`gtXWCCf&T53P&srqrsxyVTr1-f8@_qs#_at}c?gw`cmlxc7 zX7c@EJr-unQkXL6_s_tKI<+N7V%=$gb$b7ydObpJs_X-@?|(a(Bh0~zX$q<&6Y%k0 zz%tww#VE7@pvXu7Mb5VQ3q_v#XB626yunmlGSiYtEy)VIWOMsJhlc-W5c7ZjA4^mW zV%fS8pvAz}HJcx-LaYbcg)-Sw<$L5_!EU>|j}MkeO{wfq26_aLXtrCOCmIke?ZLOEgz!5uLGD<^jwJsCB(HH;-A+mzC9#yRX{RD< zDgAC_PfG0Bffg2-j>iM{V4D7V1;)meCxm}sZ2k!x()}tkb=TT7^3~tmVnC|~Ls_>{ z1!YE;ahAsox!M7Yve~v5EoS=p_9VxeK7_|nSyuA!>?%=sAgTnHA_7hC+dY!lo=E34+M2A05fLtFB`S9x}d% zpkQ*QT>B-0Tn{h2+s%-zZTYQr+KRr1SYj}KH;S?NK=i^v5#QU8F43vUQ-&Q|Y^e2^ zvW$&kQ=>#)@6{~cD?)>^A_K9D=uc-96VpjuSk(KxM!Rr~_RP>r(4M9v<* z!c@7D2`SC4`0iJU^p6|l$}q?h^Yh^Vl2Ob-1v(rNgZ66aGB3z1=WyWAqY=jG4ZqVL zSGns-p9H#OS9+{!Sm1th#eE-nr1&!$V@l;`vc5;+U|#F0qD-cz1#4VBZ?OToG+s+) z9cCw1Bi+wr<*pC^I_bZH=QtqzP{_4@^8_K)Fc)~kb+?>*!gb1o*vFN|eN?$Oi+_Yo zX$S^HbEydizi917G^?Ib*&oN9uYvbODU&$-b-IozlDKCX=qwqg2DPvWmC-9lPAQ$& zgdV$*S!?4I08fFP+7{zkj#gb(=GjNjp&{*i@0=HWHZ5MHtwQ{GjBA~{h7f&}H;BbH z1nuLkJ6PBbUBPYI)Up1rsJ>jRFrj+Xd(-=@YsSQ!UlPTou}FDsYdmsL&O?BQ}F zcT#tV;xe<^7z!&W(;$UfoK6f$btyD4`dmJUN9 z=ib0_K^KvjZB6aDVV=A8w1SL+pSWq6;xngyc+&Zi%dH9vRoA0B(5Q*$W0R=Wpi=B{ z&odZft4EH1@hcjOj=<`<6`_H~XAR;EVj(BdYf1NwvfXwO@f5yh!XS3A8+PGH{NU@a zvb7NQ=Vt=Yex2P%k`+bMn`aM)pv;6y3@8huueZ%6<-qY(rp0A#kN>dWI;)B~fP<)m zjaXU@UV?|6UM;>EP`TO=EtT|CcI*9s-cDC3%;4y#RWZs~VmSF%ApuMfA9ni0e~(Lt zO<%q6*uwZU4J5dc4(>__h0>BUTeaKu+<0}z1^G)lhwCZsWBeS%6VGvt)z$<&JwXk1 z_6?YKW6;x+eGnrRbM{kG*v`wwSR7JDq+!YCGIR!2TSnm~=YWJZX99;jT+nkio*~Gg z57Ielx6a=+Q9jM`z}fXO-ak6WdDDG4%;6v<%}x5#HT#!z4oIzjkC!H+VvPHx*0Q$se__A9ux_fSC(#k#oK>vZpjBTzxAt} zPaufugqM*RiFY^Jc_PmLB&a^RYx?;Uo!Q~`F2g(T3GetUx05`=7VZp76u5q9HOEK8 zYkFhKXy%Jd$~gya=}?cG2U@Sekwp%Q49+REm_v6-6p_}JR!We`}Ew686A|F$eMSpUAmO8s-Ezkdbn zz<5DK2Z-U#DL=Q+;uCU*dv#l@{kxyzx)TixzHf*y7+p1ZL;SBaLkd06#hEyYC}2X88&Tu3o|PtZjA+1meRJ59o^#XU2(EV zNNLdc@L5YLZqqO1i~R>G!5*R!P|)pOxYOlAlm=YVj^EdU>ERsyt_(qncN=OZ+L2x| z4$XI4-}R`Sw7=}s^n-*l)`sZIg*SU_TP*I)NTCZ8C>$g`pg!u`l=ZQhzRrWj+W5(t z$psV5GiIf=ah~5eANRc8*)QflhOxEZf=B~F;bIN~+gR&%Qpa+kpeff1(wUtK$`~gd+!OYBUipcb_TrMxy(?bm#asieWA`(^?%i zb>aX%<2pqEMyL5ptyj|@jhC&tR5~;^WDMCAeF?d5eAjsJ=B;`XN`jd2YZCc4ousqN9AQR>$PtyKp=)pa33aiPeeXwb+*_<#QXe{(-_16azR4n7fxmrs|LwH;pL zpXzRx1j?!5kAWq}UyE!Trxx5KQ2M1qik(Ry2kHNz%1OuX+r(Q(^m)3Ge}PR-gmj_Z zYJ0#6j)^jEEieV5UFTeo!bwX&KCGwd*D3P_>|BlBoW7kT!LwQ)V8qGAmMSvvBjX;l zz?{;9V!4bX2|5oGx?yM1 zkPT^SuM+6W$Na-*=ssA^-han;*F&7e-EDdHy5H3+ND(Y^G!-SZ)kv;$ ziNqs=2nL-au=So=9<1YZy~&6m4|Hw%WOpziW`9=~UecjArnwOH}?)$?Uu(XH`pm>dcL}@qu9#t6jgB z)QA;sB8@gd3Ri$bQD=w5QCT)& zc;|^|l8M4V&*ykuanW?sl~hg{Mh;O9QU2H3XGuEr??AcaCXrUdS#?ayrWzR@U6GIT ztx-B{hqHFL1u8W>)=0j`s}ULfL-%}=T72~Ob>zz52+v<0c1^iT|l*t6^1dMAU4KjbI0{=mdqqf9F*Cz>?_vxIx{gq-Le*t2l zv*nTwa%zLt!#ZRv{7B-KYm_?x6VB$tXIJuTU~D#Hg`w3($eI98e6yhwd0cwB?zyS} zGf5jf(D?(T>%pg6?hu!bu-R@x2g5@B2to-MtuYB+%LFIGaK>Y>P6i+sJEDsKxM&z)E`HAf#7Wu7 zP=Ip@kduJD{?F0==T835Tk=2s?f>*xQYK?zJ)xXLH%nF8cW=?Lje&CUmJsEw{s|D$ zvRNV{TP2ku=~i;nVs1R2*M@$i1{g@+JdsE;4Q1gUq{WN_I;cE!KwL}$*N0)sE?#%}W=ig}h8dpb59eMw-9kP%NyGC3RRvbRp$8?_|G4?#= zJvLot#n>Gf^=&ALG}sYV&yVY?iE9SCNp*;xM+7bO{Cpgs0XLrr(k_L?0i}2z;0ja}419A+Mex@VP z!~Md3ImzxOcwF?xqphn98ju0-`Q7K_G$@N~j(1VU&H0MM^}}L7)ndjSV>V5nfPq3}fLL%RClt%j%qTKWu~a9x!}ddKXEB+t3zGO@ z4)lsaX@~)Tn;?UpmwGZ*=3X)9`ZFeAIca4uGPHC@Q@%mEME5U3$b_WV_~{Ns``d7l zYuT|?Ybz;X@DEi)e=z|>e9}JZ80Z#^Uf;D#RjivB;g|cMBeKVfubkF)DIhE-dz`F| zEeF&uzOuWRm_`O&Hi%f-Tmhm0_vl35Rn>MK`KqJ#;j?R2vK6DcCc$F-y-Zo z{It2RJ!3L`*NTNzc@VBPM8g~_xuL_p&)_vXpT_KJQ&2`@tDoj9&8-HH8x)gz_+^b6 z=>pH36-spAmaxZt%XGW;fYg7~wwHr9%a(Xvl^9#>-8<=)Up_(61UuUZ&6Dg12N;hi z-j$E(T5f6|rykE#$%%bydHr7A@*5M)xTtUCh3q~aF$)vcv%QN$?*|fY8|dQsr;d(^ z4zLbU4GE$F$tVqjdJlQf&W&h~quZwcVX37Qg-loJ=XquuH$99|>=+I*!9#$)Vgmhv zU<3(F6Fe{`5w!?zx7YoO`o$x!Onxx0B>E~=ov?=;_qx?v@+Fi;r6)gYfs8oqo4n0* zi+=rPUArH3Z=e}6P4a?>Zvr=gz!^_U4xaL*yo`q-h`=% zL3R~fB>GWN>otBVh6h9gzJ4i(k~~*^WhwLd(f!Z6o_d0d8y$swyI#Bt2~OoM4QimT z!HZ2%=oFSWA1-#`=n+wS08G2BjAohE!^Eec<=!`kt=6~|S%@Z=FZGV!QToOackbSu z2=3XG<+W@nVo0OpU^HPI-$PD}34s=TumpjWTCv2TOW z>u&MnrgkblBKKxC;5U=I1)ddh_?ed-KuY#lC6{b&V_Pz9b!cCSF5Re*!{5PGWR$s` zPG%K9tXBQ~Y9K^2%HbuX)t=_v?G6q8qa|GI00$??v!Yzg?Q~iw@A1=>;K#XTRy!Ns z(-7AgB>ck4(Dx)&Cui&fjwj-2JpD^_Pm{buhw0B&0t|Cte2rh=!>-1aZJ0E$-E$F` zF{u8em1btd9ya%#|D{;d=AG4c4jiZ@Z%{-VhkW_;qb5J+?Iguwsrc)8%(uYjclf&1 zo@eOC=!V}PeDsQU@;^9+^EA1UWKmpQTYg-i;$ZGA9_KRbpOAFP!2#`@b~C zYrk-&^l8-5#xA%2>|&tus~nW0(*YG?26w!;6sW>dm4m+YOTE*2QQ23*e8+YwdPl>g zV%|ls#Qa@#Q1gwvM@@_Hltzt&#v40h?J+FrayvK21HEQfEB1~B2$^3~eDuyweyE2} zq4w1fp>Ez45GxNZ*AE$p2Fv@$m*PWo`|V6t*RT5z2fjF}{F%|_dI7A%mDriaNBg?3 z$IIaQZ6?sMbQ2(ONzhy5%=bXYeEd~+ZFF+;#Wgd=Z_*6X9Zxd(_wR3ej&tC%Mq)^c zrPh`%3qo@yUfM+i?4X`UiW5}RG>P%d%)nHu@gP+elJw0A4DQ`t9=?3jPC7NpVo+_xq;R;YnEdUZ4!)e4XB~x?gIhqKH!`OVjex?Thhv=MnuL@fyQjZ_8P(JR zSqmw$Ymn~R)cF4T?U^<=oC%(q;E8>Le@8AMsbUY7^1q^-xsZ>(5!us{rtje+-ARYf zuIsX?L-$^FK2S&!4F;d9Y#eNfYG%&afL!| zmHSs>P|@3C0HtiQY;1ou(A{p;Wj=PF?Mj%g$o&DtK%P5Qu#Jlgtcq*9oM8trT4Jyy zI7-xJj4*D@WOC|zdwrc;c~xPXg1+)-G>Xk}F^?%e1$z_`-Ofrf0|FIC8MaPqFt$Dp z+(j&B4RTi=GG7>5{q8b&DeYL1!|(YOpL;W^ubvz$bRDV!3PxH)Rni0Uw^kn*Q2WmB z>?hx|xWo4#1lFL<>6QX0xqO!Cuw6ZI9sPX%6^{c?Uyreg*%M!{c0lJLr43xM<`(Pl zSU(TYu1}_%>i{4HHvmw-huP6hGr|pJ9hxY(PNp3vb}s}SdX`Z`I?L-B_Vu_s?2~+x z6P@r_VEDEsabXQRT5J+*7~ZIN`JtzUnxxd6Gp` zN`j_u*=k3pwGB4wtca7?NAR}@cZdr93E!VUM`m8mm`#427&`=r$-YAUfmV6v@*o^$ zqWqUW1ZJA7y-!yzfI}wz(j*yDY3N5Dd&W}tp6y@a5ozEc0-yk0ep|@E8XEpt)J-Ge z>HTAs1x9lKuh8~9!Eb`Ow@ETWv4ZDvKghIoyN-P{rmehiT%FCx1cyW)?oU5>bNQy; zLJcZt8so@bX?!51qjgdi*EnQpMlU5JSeDE0h+uW5yn8soDl0Ltq3XteWaBja6jz@OvyNp_CUG`AZD%KVCJn?^wkcds4)1kFjhF3r?6Y9`$ zeD`o%Q4pCjml;?Tm74yqq1c~YP(E&=Vl!RFP43?oMU|yW9_$bnz&TRUKdq}-HD;US zR!mqWcKM0i4;kK{bi4MZOX=98I~T?IzR^N8aC_`jw@{UaF1)ovI}#rRU9(K)oJhcvKK{s_PeiGpz9mm z-K^K~9MLg=r(Xfsfh80qQv>f*<;oVu?uOw)AL1Tz`pN4m|2VyuUz3+CHNq>E@{zLP zC?WDLf5M?EkQ=6okt_d2F*&w4rPP7d>*S^Zf40$9{d|I)DONnPTsg~2PF=q$<6%?$ z>b`~(zS3**mkny>pRC&&Y_ulg4bt{Y6po$LOtEOR#Y_+bzwC-0; zzwmVQU6ORU*Fw2ki&OMAa?|s0L?~uW!d_JJuOs+C!X&1qiI*0S2|l)^u3Y1#y36{4 zi9AWh??29&z3Y5s%(E4ZyGJm@8Mg}x#gwAsObPmq#G8|0A5qhtFL(AS<23`QY?a+% z{~jn%!~qN?VH?&eK$`Q0=z>UX#&_topAcQ!F9YdHkA^&D=ICVD2kJ|GTYkSYe?~)G z<3Qda-h;4PsiBrc{5$Ach0f1@*I$&Yu_EUmu@$Jm5q`;dx$2A>a?uN-PR8nT0MwDU zHbv48Qh7>gKR9bweNNVS%K=qC3jkfTkbYb#UJ*Ca$-?N*0GKw`39sWc|UHYoa zk;l28`0d6kjozdHBXdQyle5)49Dec|1cL@5nDiDqlwDWkpZuL7JibFx8NFI5Go0bc zYO3^|yJt}8xu&H;3QNOl5uTwSR3YUTocXYly`yp?Tdc7jkjby{e=LE~`{;jEP%F>P z{+{Wa$HxJ%A7xUqCt}BaQ7;jFOVJvqKQYPc)S(aSRJ}gXAjj&a`g&8(!=uKQ!TVN$ zC{=Ic!>Zp8;NT>(rNbH>H261HHVS4)`^@(iu zKHIy}*G~qd?+a5+V+tlgOe8z(-g^rS1HkGnH(i%f00h}Eo&IIrW7pnjDGDceOE8tT zi1Nov9fm$6)Dflqh46MblQ4)X;IY}J)dOeVRw`_0OfZ3)sm=NMnmoB9kw~9$Ax}X| zZu%jQT`*&nU1t?k8u|;y3~?)mylfB@0~jZIIB-`b<<)RCZ5!YGhf4K02nBCm>ww2vb79j+;tOKf z)Ve}vYyUdRXj4@-pW&@=v{2?cTL6F9u;;MU55TUh7{!Zl9f`2MH37Y)#TE5RnNf%n zAad|JMdYT)KG5^YpWjf><&`SjZ7urJJY#t!u~9-r9!1E>zm1jRq`Zn||bRhdW zVd={q4C4iF?VlpQlzp)H==9d{yEF9_ecytT=6aY0%4iemlh8R~Ox58ZUM*FTLwpj# zvRMfustN5j;+%hs%YIu125!B5fZH-Qokq+ zgr!BXi1#F+MV3gYdd;{!U@v|CxQ8*o!v!Y&b~PhFF#DTKB{ju`rx#>l zOzRYZwHQ*(fY#gP`k*&0w$)AarAn~~!|N07H|X8z_imF9+{^37hfZzuAg8~vaApz@ z0f`~HzdG)OvQF0BhbZyX1;|K?XT8CGo_qD+^2Ok~npO8+mVEJ03edX<5rzGw1e#9s z$tD*jZ#~hOp!dh}WxgE`%gmLYb6y{?%;tJMtRQuW>a^hlJ9bZygoNI;i&zolvdR*JS{DXrW7Wf$RNgHr;;(PXA%CXDll~7 ztTensVX}~6K9MAO_SIiUzSW;hr8j4p92W~e@~aM*_F+2$EluEhpWn(Vt(QHJ$4Ly*NnZ4b0H5$a!IQ`oSI$ zQW^kXBSmZcbtq0|yOB@V4(Og8fJaW)|8AG&?}1-8T0LLB3WM)o`@7xrW(??g?hg)& zf1JbLKU8`D7fw!jna`Ew@AG;XaILB-Ea~1X1=iVq11CQcr3`?gh6+GQvvzxP(!)yg z6P9iWAso26@ovQFrAjw(!pb@%jiY6(5I|N%c>gx?eD^i_8r6UIQ-MPFBV)@($Z!5o z{p4+o-lhPmtL;FpYs!#J{ePv^Y5;oY+rQIlryZhJh&7UA-v_&INd^qc?xL9Xo4H3m zS5Tj%07Hm#cEAd!6JQ>{M*Kw^w)y*VZ7OWAdi3)^b_zuXlt=KJ^<8ocBFWd&h#KuS z>EJ)3|4bRSrpbl%*^N_Lfb3Sz`QuHhYhT;MyHRJMBL1rAwQ!IWA?;zH4GUpp2l0C< zY&3O?sAhDbm&3IA#Oq?=+ls&!-nRwa|Ct^9f8y_dW*C#KfOqr=NdlgpCOdTvQ8E+q z_NO5^2nN*H6S*xhf4LdMPvm&H$ZdZ&oi(NIf$Y9SK-$31f>4YIycsNtaz8on>8rJT zO;bUA?PbA~mAoJ}Cmpm6mw&|f_N(7;5n->)#~+Qan0-mPEoK!Ie}^H5A%vNQ<9Mfm z#G#Ils)^Jhr+vA9o2tfQ&Y^8s_BQEVcdE+@;G+truSm<4BZfNB-@n%CU2LL#Hp^$2U!5%6sDX8uft|ZIa{c|rDYq(MCz7AQi{W8*{fRtq;e+aT*2IpSRz3ApqdI`!B$pOWI%I z^$yixRaF|9+5Hyvh*fA23qcCCBMDw*1k9o7f$(R!#E*1~h)>)5N&o`a*>Zq*B{sF< zl^yH!&33V>(3hflRn z{z`C5IQ9K&x6P!A{UJfKT(Z|NVqF#%al%M8><0{-z)`2ED6EOijB%qHI2^c<|9Awo zaO^Y049F;awDl&z!txK*zA@DL#4$m7l+xs6bI2k09kvP8|LZA|436>DgoH}y?*)}w z+*wovXdF4=loG`CQm9jB2-V{rbXgcwJDOw}gq z-EA}DUk#A*OovYmkM1mH-$YipPUd4Sm^`W1bIF^z7_^LzIvNodhmUN;0_VJv{%O@T zMb^P+Zrb7Zi{0Yf+@BgIB?MoI#oGPl_$9L4KydI9LpF;@rP91#4{uuJW99aI9Sqkun4|T(ww<0l6mSRt0Od?ITan?m^N@+oazwuu_;T( zODqNbVm3u-H;B=N_<(?)hBVYxW%+SlabAAyB_ID{T`d6`m|kj2)bwxf-PNnyCaV}- zwzE&=dU4X$Ivmikrt$9WRLBWzjg?0byHbZH58b{(A2#Dnq361-- z`e$cXL)aH_#No3d!trG9WD9Y8Hz5mDN00EcFVOdVb@8(Qs>rz{hSS~8qGWx@M|#(% zk8hR+^a6~5!L{Q={$#4GU+h60WzYo}56~7t5h1w4?DGJ-M?&`K%iX?cn7omdrBXm< zNy7lWZ}zQ|%8^eb_9tfgUIG@6qA(xzc||*n`0eR#TgwN>zWH8J_mo-Rpmc81SW)`v zQHu6(bbvK0W2(}xgc1z7qFo8KG4l$(bm0!^!JAL-Rg&G<=Bx%;sY1^Wsq*ZP`!f7^ z%9cduYl3PJLNX$ltq2|lZUXXh97{=o_stw<$f1f=v@aHe8=XSGBYT|vOP?=4iT8+& zwG=VVv;0=ZKjWR3)fz`@NAEh&gyhI9yi)jB-r6BSUtzOp$gr*SrUl3KD=E>da?;LwkIyD3vzz}|IF@a$Sd)$$&IHivvo_; zU&gAyDv6EthE^NYWNDS3KYHKhUrun`FEHv_Y3;v0k9^zt|Hni9e{y}mK>^;Ic{yr}y*3KmykM zcbv0n_*)0f&{-J|xYNo-fOtr+vnjKkCXY7#-sUyimspkY28H!Z%X8^+`P%Yx+~g0O znmE-Vv2}G(xX5s*I$>mqxdaaqBLtPst}h6r-aNB0PELL{UgjfJjN^}=#K;&-FFKD5 zHGO(D8;bSYUc+Tj*co~PJ)!{SCt?QWRQ2m6bZ9MrhcaH>_-!6xzchGoyyP*|@JibY z6h8&_fJND`L3y{p=OBIs({oui9crq<(iJ&r+itYx&x)O(4QbR}W#a?&F0|h`W2EY$ z)UPk#a85BKU2-x-3L-k*8c^)Nx1H*SC3gSxHy}gChP;c0Wi1&kWyPZG>jHQmmb`Z! z0ojFam>X`h;OtFDAs1jC75)LrERm_;nN#hL$4QJM+ePhTuRM0aUbYSObrxpXPU%n8 zpML7ju<cKX=!l_ ziwO8gZS;|#deoIjExeX=oRYQqjYQpYG|O*43mk;2UDzYW5%F$}t5xypCgGUL`Odo9J|g#x%h*hl2(W9ybOowI4{Otlx}cn8 z|2>^6(x!WX@0;M2cmd6Y-OZVq89d)?P9b|!eG8GFd61*6HZkRjDpfj_VFVbfpAes| zmWtBH(O07P7+llZ6(*oU<{QoARZ};<3$M#LaM3`7#NGV-VZi(IbxN~E3 z7rdBDk->4rw~FBuk?n#pMw5puF*Aidr5nOcL?x33-dvY>{QYnVrn7N{S>JY(qi#>{ zJFG)k$p{$Qz?xupK)D3o5hCb-u2>U}g*^5ldv&uq9(cnemIjZsmZ6iH%$M9lRL=hP zlyh-7sooK^4MB?{?9cZ&0coPDW)fj7pbZ2rE^fYIcbi{Gy3>$z9wt&tl}tBe2+oGK zc`pgll4C$3{s(A$*3u21a<+#Pty=a)u24ZN`Eb0TwA{=E`noCo*JFlYW9tR~B`&tk zab32&E85%@gNrshK%VRTGs9p*z;6tRhm$01_)-4j6fgw71Fi>s0+a&**Ex#z$o6&s zqHQGOn0_Rq9lJ(icj~E!)o3SRxlG$|^`AY_R_c$&Y6D0znEp5VY8Dn7g-u39zZqR7 zS8}p3hS@iTU2LV;G9|014%(b3=ZH9+y96JHz`Y=BXikYO*fD-zu#uw;oBdm4tf)i>J1PIo|dl_btSry)nA|F^|W8JNn29wXDy`&lmEkxE?0;4&hWsxP!>oN1Ds zJNWnr%qhBZ@xH%g9+awQ`Z!=krNi;LruL>ruCSL*9t21dhUB;a7=U+)zj%ir%P*zm zl794HWcjNjpa-ruKg1@9KqL)bPPd zb#i43AaGN$hb)4no920MKa3x_^RAxmBwbJSU3kH&=YK{jYrUE@bQ$)MCK#~yWE;d( zd@gl46$grd(Qx(=@n~rXPbnaIHb0`U{&pd6N1&ApK&tMf%-p=4JuzpI%ocq4IW>?s zj0abv;-K{YXTXtD?IHj*TH1DU4ZBc~E-=v`SK#_n2f){+(b1~X!O?mz4?1VL8TxvH zH~@JIGIpfH9OGs~(=K4;%ver9Y2!ws7TYH8?av#2HI(V*R1r1nbeDnjuh=;dAI|kM zCh{DB9B~ah^1uo>p#w;-iBP(MjG!p=2EgDP*@3yBmMIvFP)z{Tbe@9n``j2b_i{~` zW~}uV0DKb&IT#xT=eI`@QKak5fWL>TH>QoH%fkiwTvFdNwzkS5jZY5$&=R z;ENGni=H5~5tT?Pf|3MJ^d5`bTkyLbA4J4kxk#T|S{B*+dI543$I@lRv?ggx`|_6e zXho^cou|6m9)~m8@x;n4u7yG`5T-iRMBA?rKBM=-S-#G=db-KO99>LIrquG}@TGKh z0oI!fe4(QDJDwG5aoH-25&L`8z;ttmB!X^|mi2+3-NY`;0(R|KdBEt!Q>o2-`f#gS z&C1kDIR!ZlA+TFmUhU@@U7o#C`tl1469G#Aq%_ZGkk)xB5T5*H zVRH*s+>fceF!TFPuJs)rM$gO906$1!7#BIonJyx7e-N?c5ejaQsqBQ)5V*S17P!-l z5m=3OrAu>+I3~aA{#_3_nFN?vuO}_sS)*sZ8|};ShPNaQQ29&s?z^{x=|oMjlR7e%eAwC2E;dEXKE9|tj}X7 zD+2-xT+>ymh48zLfD*2KP~KerL>jL{!tbw10~Wo8vR<;8+|v``a|Pfeurnf3h#3e< z9H%H^5cyF#l6t|`l(*{z+aeUQSdaZ!cI*MC^G^AlSjCI)kd4<)KF3k{r~GB4_V0as zLDV;J?m2(+vuR8OtUQ7ZG>lzgfX>NJ-l}duRvenJueSe(>bS%PldzglXgoq+F8co2 zgX`awU2Ni|mU+QX9wJt!wi-yR6%PSS30Q&ym{M~ka^yNtpFTxm%>nxGxm80lpdR}# zh?3wRDo?qz)r3D|{~@9zbt+AUQ_ewdl5;_vlrA`ZyNnqq2TgXOa5~MDkC_C+w-0nR z{Qajb?e0%twLL?7U}`>OHE8GC`V>GLg-HM(^C=hT#4I=&d zjA@fsI~j8e{B&xY%ebn(DcT}KJP~8@$tc)Arq_5vEhPVAI8UGO)SgbS&2JmL8NqC^ zlAkhRE*N`?3MM(_u2(^1#@eSnS3%X~IZPG(*HRWnbDiY-mO1RoQ_mpa1H>huP^CV^ z74Z$$fq1vTTh&xM3D~hsofacfel2F}#S}J1xcUfMFEZ~zJZ}ru;ec7#2*-tvc&A}p zHtj#&b^3=Y1|+nBb#0f#_JsC%D9!4Q|3I~U)R9Y#fCPJnEwiNzftdgff4hi3e95p2 zn0e|c;^THLgwVxxl7qX~=-|riY+o#fi|R!qV{E+CG!(!uJ07*O_!oA;SRwA%K{RRg2R3(#q~KaAolcnNc4a@fq{ozHdkmc2{tq=n8+u+4CiOg74$lt z5Id|H8-E?T(C&BP1G|}@=~p+GE;*lADiBSw2z&VapBh%g3;uj~gZi*Zr1^d@C{uoGi-QAa+XZ%B@7FbKSR%g#OM(?6|ZVh{`SaPk^8FX%}XU!vTMSP z=eaXY`cTY&s9qXQdn~HPKrhch7_in&h3nQguyn^^_v*-peu_Os*6NOn?Ns|AFZmd5 z(jHej5Ojg}Tauj7Dzb)b^A|W*FKFM8acpmT30J!n3#qQ-F=g!t zKDn<%eX!PvB3!MECfQ?KEC>jkc<(98yIK!M|B}7V^zqH@le(swd(!ZaOjacj=+rMz-^BE*wG zFE9QYCJ^zM1dPdc0tP5c5+BP4i2~Bn>Tm(e%}Wa9MXH{3{vrJBe#@bm_R&Ouq=YpY zd7sTlF#h7NFy7I8R5zTp_!%PNY422=XU?6NEaa|tJv6AhGGzb$Y>KW?V^TK_dNzR| zzP%tw{;VW7lYwFB7GS(R+Nzg7zp#<2coGNm^LhCL;ShfL`1cN7Uf+ly_zS>m6eug3Kr!Xp&d+ZrWN*Iu1v(tn>`H6W?|@FDhrkn28dh6Q+^K#G7n zGd+~nCEd6u1=Yo9WzJYyY-O&VTQtZNZBLUjb47R;;HaTyT9&MHu`tTHLckyu)@vS~ z7J%dHzBp^{ z6rfw>oZpbj!1)0t7eZJT^4Ul9@a;xV+^i<}2#7NC_NTVc-eU-1n8QIr{97KNybewl zPeoWUX4f5@G~m(-H%A)Lg_J=#9Jrq~l_vDz0dJ0i<0s3hPeC00deoDpH3$8xANse9 z6dm8|_f}hn=iJyalx1;^B^qBb59Imndp-Rshq7tTh@?Bs^>;{KG5%pF>-Gi35>5*)|pN7soQZk5D zH~t9IdfJ8Wc~Bl-ry|{2KKC?uIG{w+pfitI$6V`Sa~aE(JeIAeceBED+lrZ2hPJei zN&;u%c5d%lF4TIM7q%5GOwbKxOvY_JJ+9-MdDrCqcC^hk8=o8ah)dSPT($hk!i0zG znSZsRWmB8;LY-ltQCksXnrb=UWbvM>Y8|!L>QV07U$=I&@n2;B|G8_Icv7IT`_4m` zvx`5u1Vl510E14eo0EGiWYy%qAgaUn-}o=tsJcP6RGlapz&Mn{d$gYrtuyEe#%`P< z`Uby7OU;9nu6>OLQdIxFk5ma(7a6saKmz>3`LcKT7-+1B9d%?RIMmrZJz=}oxb2cKqXrhP^e$(zYpY4Dat=atznY45N;v` zz}?Cw5{rRd0yy};e64VezWFH7On?U`vq51eB@lqRD&0Wx1n_N2{T}G4;H1tyAOaOb zZ~nC*u#ZkHUsxE!;{Rgry`!4yx3y6e0Z|~*krt|`G^I+7jV7-kAYF(^CjufMEhGv8 z(gg(+geXNoN~CupU3zapDWOS|gc1TI@muPC_ul86`+aAhGwvPZ+|JkLb7*BqQ(yhw>gklK(>E8o0Y^+kpSFPM!K0ygbvvS zIAX}=AOtv}CtCb@h%s$IGf|8i5eY1sMP)mQxegp~jE>{s+yCZ@8ilcdmY=Q+g?$S$ zuk+{9g(uD~UfFN}4A*?c?;9%N2MsUe?`M10Nas8VCW`#?@PmIpTiDTGMgas2|Gc31 zKbN-PFzO1$eg;hax9d?r{(b3BnQ?%<{^`nc1cmFUtH9;MP{1x(m}n;OwZ!dT_W-zR z{h9B%fU#<@XBV##OI5GnV1wjyfI)Kp2Bm}w#*X-Su$ zHREt~lK1>fwC%-GQUJa~r*3@rt6sYMeJK&w?`JM%={B(*v9I8KHT&R*;t2Vzm5rqJwU zt44xz2tsf*)$bWue0B1EXAhIhVWQ};9WSv7A?@*eS9n5-hC727uigfTtnhXsQGRANE)Q>kl^~yOfZ8acc35dM?r!(=oRFO*3t-Qz^ALZCMSUb_RNZ3t%T*@=# zY&xLpR}7is_!!-CaCuyz!TNT|z(%H$RZ(TGcj=Jz#5)j2JZ*L?yRJI!dd%rYw?o)m z@Md%ONoZ)`a+puL6(AG(C<1?V-U#nrw|cQHbJZkg`a`Kz=l#m}IK8paVyCE!5A(gn zV2nm}EJw%_;|>19M0?Uap4ifQkQ<{Q@5~VDG~~V;e)tDlaO%y6+|{K#dOVnP4v)$B z2Y=WR6OT|r@m1?}?(eBhn&N3V=kOxgq9u|mcl3_NqwZ$n*w}z=#bSLzCh1uxv97yc zJSS?kM>gTq^u=0@mRizbap$ZapkJfiI3P^m41ZA!=Ob{W2JZ;^rW0Qaraxdzvb3}s zb4t9VKkq7+#~^iL74`^2AI3o|zull57P4mw%7YI9wg zO{C+@B3<~H3QfW%bTz~i911xObQt34T)@m!!8Z52?s<3fTZG2fA4&_pf*5V-BCdv^ zlC^!TU+2dAiD!wy-=aSFpeFZ-F_dJaQ#6Dhm{5Fz;8B)KHX2ozE+nPhsvDN|@JZ)x zKCl_mz+k^)l_EA$921O17N(|RW0d<#XdvKv{X=y!0`E8zQK$}`MV@jsA=Mb|oZVEI zdImPJRC=luMF_p*z7{Y0$dAdFGwTDQ2U4C9K~U)2@@%4`O{!k1siPUi(V7=leSBJ@0N$&_<%-25ApXNQct8ZRD znsN(MlJ)@PsNkoHSbK>Se|}EJltmpyd`?LP`aGDUz!YK6^{gDSGNBRu-XC;hq{!B> zq<*lNY`Sc7vdBqV=*!f8BDP(^;vQ?0JV$SLTjUKIP{)iQS)H)gjOMcSXTTvMkaN9$ zhIgy19_71>=Zr{wy1=G&zM%Mah#WltW-8Xi+`!D{B`fnH+re~J{q|mS3(=oyr7n=5 zx0rklS*|gpF+JkmQUOV~k8soL=)TTMhxnd4sz@IFuL($0l&jT9`RW#D(v*I04}5sM zFtzHQmrw2*xd0GjX-Uaaec&+><$2h>tzii_MShz485raWN@BoGKewtE?{AwFI5m1E zfRR7n{XlH@_cuP}B~b6tC53!nqjE94%2WD5*`)*r5XnO22Th(K z_3PM6k(#jxO}WDK({POZkCFd8@&@o#CtR{xGtLdeRr~C@_ijyb(~85#PreCq!swOv zPXx_X%nJHa^EWFkBB+CkdvAp2+I?Hg-EeZB+uGCgYV>r>(C=cc@VNwV%5C#?r8FQF z*e2-*#48(*X$PMP{Xr9B{?-+P|06!c@71=ijgRwC5R$5cepfUb&u&7>GWUFeCRhY`IY}^F^ z(KLW5Kf4D>OO-qjBP{}lN03+n_}45nx)B)q0VOaH<0E{6dW|{jQn42NldZ!Xj{5#n zOUKQH!x{TEB=@J#@qG`a%*>4yO7v_B3e?g$yiR>cdu*h|InVdMtv~-~RfT`v|9`45 z(1D&XfH}*ve$W8H*N*=9H_T7CDZ0<|i8Gi}0Vuux?PCNHEdeHLtx%mu7UK8VfN`d< ze*i_#7X#U|Ipexb@;_l)Km1CPA6fkabz1N%^`89qU%bWbi2euC^+VmyT>Y<==>D?P z|70(?@aD}3-%n3{^CZpJ+r(QQMU3?*%Yf0_I@*7S4Rlk_2@3jCJ_jZYYH_ZDl`LW1 zRRDO?Tu%4+BPqWN9xR6Ny*ym13r{)AXWjER-Z%&zKVTip%zP})-XpBkG}SG|Q;fJ1 zCm;7ZFE8`4n5(1zn8ZC(`EvG8{ddg9BX(N{E7qi;Mr9FZRTZfc$?Y3CTzf{>=VIhu zIYb%p&BFp7iay!1G&tUr`B(!wZ`cmug8LHI8#M`m*4BDNm^GiZ8V@;5O;VD_cp8hH zma{0l)fyF@>~!hNdY@(dOCv2BjfKR^?u1plr6?Njy3b2` zj8686hGH*n{uj$a=SNZ8k^qqPe1XXnzdHug0Yyh0)d2ODm z!(56l zd}r~Ui;bogweUa_*N|))2i@6%9Ox}98BRZQvEnvNZb-X2Pzx{L1d)Ole6C-$cuqqr z_5xai;0Iot7s*KEQ7ckZu)S{8n8fvj@*1nl_dqcPf1E1bWmr0*`&sDX8uYD~EZ6Kq zDztd)*776swV4HU!K9$iIfI;i&UM5eKTnGfHd!uxGPfIwfO`R}y2A}A>EsibQ^mfL z8XnE`*BcJc*J{)}4>M~4y;eST(&3cu{P0rI$*U_{iV85n=Idb89^lTqyAcfdCSdX6QzUQQ3zQ`x%ucc>NIyJLOe9>ufKQ$VSOkhZe7Jnb%f6v73_^mUXU*(~mw=GbS2k ze=H^kC#QWw<*KqQgJ{$O6=*EC2JWrjBy6`Ic$9G_quxToxb_T#HL;7Ei1DEFI;E>x z^4R@9a^jzNFNIcYy*<%GNkYOPC#n67M@f z<#QH&@L-nc8S1<4l|Ln~^_e<^!~=D*)6{;{Np)mUz9nf1%ubdXdOPadU}%c3uhcv> zV$pky+YD>_eu!Nmx!0>k%zsoS@tmd7<234B5+GVer$)*rta^f7p&SaYe4#9)sTM4K ztY@~Nw`5zEt-ljiGU((Xm&(N(Y0ff_k0r?DUe$DOc|v)QxsRfuju2CGvIFu|g(9zoejC!gO51>DcWzpV#0voT&61OB}<=62xx}0L^ zA6G;}Ozo#9NwUO1QVo87PWjpHX{sbyeW+2)C9vXkS@p*e=bEw%P`ZOR3$&8d|3AZW8J!&A)s=7S$a3Y3nTS*vo}>ccigR8YE}Ey zu}N=ut=sH;z0S~;iXHuOT8Z(h(q6IkCotXs84BpC$2J~^p~}#)6_M~G1n&;}xs4s{ zQW|q3`rYbh_w=eZ=GKp2w4@t`Zl27J?yA4fk>@mA*9 z9L2u*qrVI;C~Xb4AcSOS=Mk;LkI zc&UZZLi8p~=N9*7`!BV8vf6@S9jr|A>qe!EJ*3gn0y4#X>$&UR1p#aPkB>bpsLnhD zZ!iE)+I`9^fHfvV%FSD$DiEywv*vW-6aXl7Rfp+d(YjB;SA*@1n7vcgwTZr!vG>p1 zs}ppOJ(+Z5LZW?!378?;?b^s@gXo%;*SC>u5tJr9c}pt0J+=^~UsZBbNpeaX>}0q* z_-u0_;W>O`F-!oq<4wd+sv-73F&|(E;Zh?&fp575$OE!S>oCizt(4 z8gBx9d&}=Ncj=3YML70mwTkM_n_beP0p2In6T*kw z@Cc^?a3WzoNxh^xV0e8ziGlj`EUo;kYe$>36u?bFQrLD6xPMZxB)7X~13KCS{{AWR z5@`De%_>?_z|*Ax(sOXcY~N=Lw=^G606MJ$C>~PYJB{F7VK`I-J7Cl21GtP5MgpF) zE%;fCzVhQik70moZsLSrWX`-vxYj;y&i=8xEyp_hZ0>-b@+<4LMf4EnemMyA&6Z=( zyt&E|NJ!E2gOjgSj|YW z#cg+l9yq=>m&_VU3``w)AC2>5weF1*43K^g&_ik~2`F+PfcTmOt~-P@H>Th6k zqxq6g|LIBXn{nCPo@wP?%&_(CnHAC+v=2r~VUn@Zat?a^U`J@87NUmo@&`cmA@*|6i=}szX8% z{0h?lgXTjjR3uucI&SjxPGQ7i=Ux##JjTrXVe2@80hfSVHvAHihm~BFofw{-c}j&K z25O_A?7d}X?%tS&<&D%VmCeNIb zRreS(8zid`=+NPwlTK1qe&ZpFxWm(oky$Q94rz$n0gim65pX4${ZNYfIYacttZWmA z-J0~`4?=u9wTzegt^xSK)5XD4-z_l`(sjC+l7Bo1C z+%5eR-R($rKw*Lp!|b2dvfP@%UpiWGjx4i%C*4Z_CaYNT*7eEzV+D(C9ErylYvS}c z^{#syS%b{YU^sMIUd(6VpiJpk4Ufn3Px%LXo^dyuzjk~3OuEtC3!+z_yaw|A1xIa{ z(GiEoa8a$`{Cq_742J?BKX5{+;$1IL%;rv)n(!Aqx9sktQ*;a_@iO3OA4Ew-G^HE% z?!5MDUzB8DqXMMr;7pM#CRt|7q^NyE#dOD9_J?h){``_wju=Rch(Zuk^SJv_1|_JJcc_mEH7z zaRZz_;!8>Voj@OmHoY+~?JkM>LF0~Gk%&!&8%Y3AE{*ga^G6u5gbO})lP?#*eV7t} z93@K3$D=n?@Kk97dVRxF6YbF-ES%}Y+L;pK-b<+GZ|oUrAYV{^rPn~)n#mW%4c8bK zCCG+&E)Q+an`vcyjnW+FvHN~}g959I+p1M*<2-$1R2X5tR*Nv`?nQv&nWKFi5iyik zfQ6nQ2C0IA+;zZ^+p}u{dDG=k>_g!$YaKquV*%i;!Pn-ZBy*L87=$r!9fry8hsq10 zyTj}1oRTdq>gp1EdOE~_5s4Y^8zO#IAu0$HZVC^3&bJu*thlt6DkM(<2es>?kki6GLb%uL;^EE~AnAOq8rflr@nRPYM1IbEvQ9GXxKw`YzAKie+X4pbvdrsH&J5?oGI2y1Rf^9WO+D#xQ8| zlHsJaY_b$7AJ>NWNc-R!r?wQ`GxN|t>XhE`aP3P>%O3u#m(iD9ka{3mJ6M}Chw*+<`*+0|0(527K>Q$YN)Kxk$#nc z!&58I{Y_dlRbI5#hQH2Q(-a!6*9h_}`j+TAI8|A|UwXxl#`SBl^hKt$1<8{%M~-`& zxgn57&`fYy$NCrbi}PP)wsE8NY&KA2Gb|T*&t|Hyj_=x#v-E?*NND1>_4viliClND z7+DB1QC@@Etij=_*Y}7A{^Rx1AJ#6uf1SI3kTY32f_A6&^GmDWBW_(|+&xJBVn-c~{!w$^q{+K3sX>@oD1D0`9SjmE?~8 zY{z4Dy7~CWW@A9kEIs#whR=USH569slpo;hUL*zUtxvt<^`(j9Tf*X`sHL+U{g-g{ z6AO(3h|hwj2}{wlC-ulq_v;M_s_ozBuMX3v4mA;@Vci7^;Y-VXP$@(4N>QIU~1(Fd@&45Kj46v!v57d9}e+OTNjh;&7)eBW?7&|AFqB>REP-UY+5 zY!S}eEP3Kmg^M%{OJSS`!EebTq=0$!Bx=sE1Xot zUlwcP#ir2B&zgN#^z`Ic#2w}4Mm3V1^5go`bFyr1eoxSFQ)jQdXs}d)HMYY`y!?-i zj6cv!h1@R9bRO4E&}`M7&HUFU>@EGX#slY&xiW5ZpSu_`3qCmYmI)bx+%hTeKXeE1 zXBmx@Zu3tNIs?r!t`XEanZnEP$*Z1AzM(KaHf+Qq0Z0&RL zsPNr*UjN*i_(zX3+=)fL%;~krK+7*8ptfh|jpf;nW(*6Nm1La>m&AXdD;q2_rkQ9; zHYnAd+0b1~Z|FrzK=B6BC#G6wDlw1Crv^@o)>YR6StMczYdJz?=24_Xj&~85&HGQ- zNFxWx?Cnxr*(E&pk0Ms%)wbQM(Y1Zkg_8SKlnS63hXy*a$dX@!l-=_LHAiIOA;@N{1KLDQvE4>ZASRSl^LZI%y~ zxROQL&--TicKx7HfE&^-lHg9NJ{K<-$BWL4sTTM5f+tYxS%d93GL z)NOp5u=jF)$*k++Y>4Cm;BX-x$fgJPsh3F6*C;5Yn?AUNRA-vO47oYBE&_}V7?BZI zV|5M-2r<9UJQ&I@FDODoJDQ3gy}>xzayYOtibO5>5kN=Ho6p_5V3?6QiY`xCZBX1= zMQV+bfjUT&6XNLPH_dYcNEaJ=R^GLMVMVztnlH_DZ@pLh*-B9^ZOH4U`#%eocLt<= z<0rCOt&*BU4sK4T`?6}J7u$zI_Ie5>+q+h4{qw8~s-^?#8D8IRT7KnvWd$g;C~82| zAh(fcUjOMMGY`uShF_tiwXNR%1l+1vc(X6&b>IHkRMC-Sxd*Q}?H2kIa=U2PW0;&J zeajQT-0~NyL~e~ZeqaVbw^>OM7d5S7Dz5zODn9(UBmoR{$x{Xpy>Vvzt$%u=QCG`f zhxotSP-443?c598jHjI%ZZ!)_DFN@tJs5*}2xSreIwN~ClhO0>Wcm1ZcL;8i2qpGU zxGSnbO9KEAh8aqhqejN2yu+)>WzY8EI*%_g3xPYRN*N#sZm*mvH6-%G@{4c)YNuIy zJm?N7*u$2hP{w%qn7wgQanJiZ&Ti{GQV6lk2KFY%O{6C@jtgL(x#R0*kEw>gE`Uw* z3>h!C^Jc_8N*PP3ZEoR0xr8i<41D3cc^;Txk|^OLU%zOPsQ032rm6#oU+GqmC&;ca z{MgbV&b*1j>=R3CUOzUv-&HNGjPS>vxOVi$flE1iVG0*s%-g+@vAQlZ z|1NtM1ct;`AYEy5rdIr@YKdK4u;}D+LVUCXLH$Cf=BEM|!Lf4a`lgkE!>xJ ztN(qqrCeF2bLGzbW4;K+KzX<_;oT}mZsP%k2nVFVU+KZobf+!Q; zki5C~>W#8Nec#VhXMT6enmj|{mPP)cwgdAxxUx{R(V(XgrsC19CZ|d-5jM~#jhTVi; zy+ES-ui&4s?Fu*%o`PN{Ec!b)54?Q#?QDzX zWAUc4T{B+-`lZl|dnl|@*gK#7U!A@0j%wZtj`z< z?;XD}?@TRdqS8RDnRR~9B%5yePYdOmkz=24)nEJ8xP5q(QorLVNoAxEy6yzeL`ulyTrc zQh)!mUd(eAZI@uQ z|CG7Kq@tp>lt^r|rLC{M7`yAx>wAgn7mOeD#gt0so2fe-)tJKRY?u_05z*#=*j$c( zP_xpsB7qb2OtHcE_$Dxf;E9L5d}l4J%HmmFQtH`z!VlET`NK)rD4N3=9ME@;4n`j8 ztw1^Jxjw?o5T}PAA91j6wmiGy)m6#T+DjJmJ_)=BL20i^zP{V^x^}i8JHnRV5cy|l z%R{o)A#kP5NuOEPDX*+Qyd9KT(~wH;>UZ~M3UN&KGj(vZdBs%Jsd+?;CKx&o!Y;Ri zPwi~-x@xKq?4%pav@0tqH}T(jH(b0k617-d7no#v8LtNv5#a74~px0!M1x?dDjdP*pq zA5IILr{x?7JKvsh3g7-B_gdzPa_VOIx`#q9s8yL!WyEJnKTA}>>)31eFYi)KPWCdz zvwD}uoM|VS6H5uur?aFWU)Q&;+^QWdI*vmXdSeTH#8~w`kueATr(rnuJD=yC!eoU! zu@?}g0IuP%1K}j?)tgim(pp6Jo3T=s$Xok@s<{ zhmd0!3R^a>f$Ervw-q8KWlm9|^=e+<9hR;iJv0XK_(O({s~;k@EERzz+JL7u~xGGWCV|OPYgP; zv=uCQsEMBCo!-I?;nWH&c~$P+{kHm`tL6EX^(*KNFj0zO>rq=^%WkF;F-BE z2VIy@;H4$wNzM*xo7tTQ$RsQLrj%Lp1nR^J72Ni$-lzD&oKNEy zy!Khu#}W!JcRxTkWI7tX8a1kNUhd#*dp@6Ucag2Ya;0m$?;CkLbQ`W|6O$pzHX|!~ zqidrs*R!QKVoUar7kF+#0Q&ZnUmNXBl6g*=I}77cD6HyT*2hYLb~3xvs}+8`w1o76 zZF8daArtV|(hz6xL`ata@;U(Cdz#W7u2Dt`y%h@|k-E?g150{DWQ1i4&80_h9`MZ> zGLoR5GWg5z5h3Mk?xHt_=UJ^SCtE)@odC^Uzs#vKV1C8)_3|#k?`iPFBb#98O38a< z`=$E!op;}jsipwuf_-hJs(22Xg2J1lc(EjBBBU0-9(Qb7WMsW?-geQ{=KqlmRJMUGsCb-reHG(BiOO{6Lt5epB(m?9H3q&`vLK9!QZr= zy7+s_fY^A{`nT9q+^r?YbRcg2F#TKY>0yMt)K7?>*>Ab0td}aUoq>4!L)CA+C;oRm z-D*HAZu&RDr$rVg%b#)jPst-d@k!^bx7wmu4uP*bCA}<^aarXzR zX!VG8_8Oob1fP$*pW(KSTpj-=Sw&wsxv*4Bcy=H;h~Ngw74HaTZM030S z-dL^-ly3(Z&3n6FHlWuwYzTrz{-Ck*1k%}0*r!n@n)gx$0olK z7&pbBFg(Ldbv~L=;I6D3d}3b1Kk&}kKVCg)2J(ds6EdV7eS}1aa^6%)CEur zU4z4Bp`2v3F_8hdqs#r`rLuC2Znxyp^Z`fpldZ6bevYV#KJ5pWRXC1x8fkIR7-sJzgl{9Wkm zJ(^3rl0}5^CvbE8aGN=Tk%Hw`Lm^g>66*L;v4^3<>qIF$Kj2z z!aNJvn+NV*LN)Z5;=rs3u=egAYDj9&T10fY8d!g^bgo?J}RNZ=f&k4z0 zS}IT0oHON^BJ}VO1fZz0{@w3yflOhnp22SqoU&uS%0RxT)7*b>+zqow1XJa8{_U@q zkwyM2o8KX_-_V0#F!eJOL{^@SwQjZ2e3!?Ut~msI$*%4ZyO0k*Rg%BJ`#80>Q@BjRB39UHs-y%L}ynoOzU>34mXNXfk!A2vv6Usyu zxF1WmI(6gwQVuizN6a>Q_!=Wl5jZP171D!-a)8uiB6z>v(6{$WHZK#kaPgr>4 z{CM?-VC(o`1^F1DSWOkeCzmihgG(a4-b1I9zInJixH!c&m=1(9e1q*s%LaG|5IR-+DZkfq2)-5Ilc!E1{IbrrSgr%8441oio5x7Dl+OUp}0sU29? ziUQRYJnm~=S6@E7;n0Xl5(?pz6-&HuTgxa>Po0Lr7`E>?ikvM+RlLt~bKd|ENz4-} zJll86-c;{VHhQ7~AkTOU;6oVL3|5}_*sKERK6Lk9?Ma`xcU5{rPSuI$sx1tihI@&6!OQ7S@LBTtio2=Lp9W6WKoSRoH^616su?n;{Ppr7*+ynW4{rn(?Lm75 ziT;H2Jt25nnve8li>YPNXpd3i;SU;HGKMMxaC?Rs(06ULxlk} zy9HMs#YYD_O4OtL4y042Eiw!CLjfViz;URg#?*fD*$>pafb^nZ`NNNx*Y~2(zn9UG zJo(qI|94v>#H-gF_)k{Mo)6VIdnYL2%~anAGPY9pxHkdq{F2yn?1EXZmXM{f4! zr}_+wr221&R(JK3h^`wi-^+A2+GpgCXD=+dXl8s|Xf{MGO2;p$Cy@Eer5 z1LTE|%%htwEhe7ka#RQ4yNw$=C6@A#i2id=l~# z(Cm@*!E8v&@l6Hk_rkPF6N$6dUGEvi(ii-m|B)zK$K@z>1pHLt7Q;^1J49a~BK=Sw zV58*#JfNo3o15W9xp?&yEM3G?clAHUHgM9yijtX?dvVDJwy&#u#Ou~r>~$+2x5AeX z%}7CW==F4bTHAqh^ClfBFlYjy3crqj$qTG;E&onSrpw?8{q!hv*XOtN&lAqfD9X(V zTu<~Q-_&!AwG_SguAPVWv9@>U+UH(9SA|F8MtAht3`%NC;{I5F!1Abas3>$`HuReo z4WfuTg=En@PCidkM+n1}hVF|-&u27%qUsg$K5V%(3Raeb6yHd^;6=Jj_c}~0q+i%B zUu;|>NeAIeoBN5#v3f}MYHdV&FKBj@nm_B$XA~#EZQKxQF-CCKD8*K^zTiO&i|JOK zPmz;)w5YvhIE!iDj1v?mt>6UIOvmou_i=|@8-6#W5G$%5J6|$fXy^R=+VNyPN8y}A zJ)6a3JwZKz$;f-Kb{E>cJ)l%ux>1>Sc#M<^jchz!-cXe`mu)LMu-h$ra?0A;disCM zupGs>fFd$PNX~d}VkSN%1Oax%GBlqA(~&$NbpDCsdQptN-De0~A!`qPwXVoyj-P<9 z?CGCx5<|=}QD63P)i#NV^hzg4x$+6LiPbtIILMAW=nB_q!)!Tu?>4&oLoO5xGT- z0LC4d)h&*f*l;A!HUTWx>~KTI6>M*-s(&SF2vN(2EgX{6Q^Gl<(UQ#(vTK5~qt@ z8bAi~mRKDvzu`X(1RR93Nc^2rp~dEH&VvHj9I zWNq~}ZChZVH^ZKB5O&)mGu!Y^-MFvRx3zv)hp;nI zjPJ|iIFsP*w-cUTuVr}fF6x|Ay%vVdF$^Vmw#r5e3X%3_-6h+m`A9W(Ij(!t;Hv8C zp^Y6Tms+Ws@Flt{=n#wp3JV4X>tS3`wA5ii zf#G+foAsbVYuG8vJ9T0v4P_q3*D)6uYWT;81&>p*F%Ef}8gLmx#8U*<6?`9v#lK&B zbl1jK+WyvPKQTC`xxRDZCgw5Ci;MZ*WiAYt-m+}Y%dVe0R9gWvH_Ex80H2Pp=x6m$ zo0Z;S^-rF%7<@NexLKGx!mSUBW{CQZGyG!H$yRFc%vMFcsXQcU2NMgKMO9)>16pdB zm|9>I1^b$&)R_8_cO*Bev}jWxUDO(O2x?)K9CTCZocr6YLXqpyGBL0boscifc+t_zC_6wdZ(a4&YgEm?e+yj57N0y zv9`Aer)kgc8|#Ev9PMb?oRlYe3^$(gk0zohZ`GkVcjZs4{$2A;w)|B?e21ZhkWV!wJF;>B9{X%+u$+Jzm9>1!Cp5R8UEw1o{7XeG!}j&(b&Sdvzg`9- zfX2!*h5jjSKwn)4zdgG+-H=bxZ^qC7bM$Nsb6t@43Cv@!T@?mJuH-bS6{ftnsea)p zH@$+CP4-0gcz8TXOgkOCab$MpC@E^MjmkY(?>T1!Z4LAY!!fgHD7Pzf*QzI8$6n`B z=4Ne??(G)obQgNbC<1>fC!35228@=QO3fm~-ykejwS1+YYEGU$Vi+D6|I`dtHM~hy zjr%U*nqlwD|DpXHo8zn6-V=H+x=Y(XJ6Ckm{Fe`hKe1X(Z=zp@A)jxcC_@+M&hU9cD$X+FG z-#3v`=E_%S;#D~*q}JqnBuZF~A!d98Qn9>o4NV;fbKywo#jel44O+PJI)&Ofa}0e| zf268aYSpxSr>|eJwe8et@#l-L@SIok_5=Tuf(!Z<34%vr=Bn zcud&99q1jppu@de;x#W>a*IdqJb%W*5tyiVz=cV=)Zf! z8Kbsu$!mmdooUOs@ZeLi!MI6_jNvWs5XmJh1r9t+OW{}Wjb%9GNr0fW7#FOsqn{St z`;`57%~q?+#J5)AdmtfqjW)!U@f~Gar|O<=(dK!t)lsMPor-m=ag~9?i;dz`a3@uK z!Ji2g=~eT{QgYyFQUyjD_a+NbU+SUyb)}%88JG@KsLAnvlGai|KaBvND&Ge1q{tnU zactu+;zQ#((jQ&~T0?;DgE^31+Yo53z6j;r(THiFZU7XTl%8M1mwvKt&PzAPHrK58 z9VYIh{+yzuRc%yl>gMkW3Hn3HQxdrs@soqxYl^o1JPpL~$t zhw+7R***L{Jm}YSr@X2Y$|t0n7k;1TZvuyr2ZslTWmqTtAJd{TznuMYw(R6z zC-s-5n*X2lDdV4x*XFlWtB<&QjrzIR=!-}3hbgKCfFbZfo?mS)vRqmMeT`J)FtW*g z`QL$(|NHN78k2CN@x%M0wYhoxmNf^!j24qQM0hze5`5b(Yuor2oIEd1-o%4*u{@ah z_x}W93faV;=0}$DJba4W_=*tm;5__EYV-EoKMM#8{;Y71n%Hj17gE}h|AJ!je=$2j zRKr;s%7&>YzxnxXWwT0SWJT$WQtUb}aqfeyQ>fwu`rI7sx0JoaZfA#_yJ2Yym-WEVuJ@SnMaP&bo0@NzR)#(n+^?d?SNjio5HYy#rY8*EaPX-E?8$y|B8D9~ zaenUy&GiNZc>Fs<8){!1apnijN7GGeWFQ$*yuB0mJDZ{V9|Y?L%lBr5xxEotG{ScE z+XSV*-eYZ%^?GN(;+s91<@~|ZS`C1NAu0!`=kw56K$r^KoZP-md0VfQPwg)02Za=$ z(YtS-&Z`mg`MnV@rmuuiIl%6*@PmuCorhv%`C)ZOV8{m~Y7QTlfZOoAo~9MoCE&KI zukVss7xYBUQ@`L!BCFTyOC3iWth|>)(o<_Ezc(1ZduNU{i8V0i%U<7cqkvOa;it6_ ziEvXuDa>4po9j(R2@e~F>cT9;-?5}41DJaArYxuBb^DLrp^v$gu=jzf{xO64 z;_~{n_gCf&nMg~9Y^%IZ@r9&N1N`pBbXBHau8s$`@L?z2mm|54s>@sDJf9az(Hs-* zwankAXd#{<`oU!n@E!3!b^Xz1cs<`>AYm>}r$qXBl&-sj^xjmod>2RPXO%)yM072m z&}rTEmnS+vIPW8PUD;=*R_1N-l?8?EsZOZn)fA_09D=+`Q-+(8RRb;1H1npYG z*#&7HEW{^rHyvb=gvki;ibD>+?%Y?@VKBCSJT{w2=q(D*ISkg7CVO0BK$0tBXDP2QN&Y0V|D`DIDTUL#e<^)RQM-hg5W(T0Wd* z`2=P*g1V92t0QnDBAAafe>2T&K*7$zu`+d9De0bdG)55~S!~64?Ci%b z%!AK_@cD6djYBoEu;zIRYUc;d5x1MZXwv2%afi1m#}xY23?9KKSLqWz)qQEw?0f#q z^p@(|m!)MdX~3x*<}1WdeDvIM9L5P524R8=!=2*ok)C2z=3`loIUg~u zH(Pawr5*gWzon=Mr{RmHLM> z&9cYy9`w?^a$+I)U?n#zPN3tOFn=a^FD-_i z`e^s2iSgL(x!rW90GZLrj)|+r0p1pHbh6n82TM+UoNdy1*?qt1i^%Qmx};8#Ur?9NYxzDY zx;}1Ms;47SZ{fx5vzeHDQBICTGhOQ0mv7Qurca$XoB3M!{|qYXCZ7dVqp2-apy~dt z5?#6_IS&qt5LEvN*&PQuixt5UOJE@WT`gAEX^pq00R&ORAL4*21V=8F(i%EX;8;0Lge*ZzfQ`05>H!OxL*Awbx>|fvb z*ufCm8_awtx!TA$2uJ3x32NMiT~ZJ*<+P=*?kSrpKYz5SH@{QPe)G*T&CzScpbbbN z$~ z7BK9aR0&sh{8+QKclWWb{nqk3b?>X@kN9&Oec;;xS#AeDWlcy|1_Rfdz zp766zX~0ZO@a8e)`br~;=_16Tue$V>Z~X_@KXqTAePP=@2W9)RiYeP{4cJ{Uk| zWI^V{cY%vhk0emmU^yVEvIX?{>gA;SW;2XTFkZ9F)qRHV&r{3hFsDd9?TtboYf9u6 za?`{>D&8JdZx*AQW_#W&di4Z6TiNp!k>B0xe2U9H zR3s)U|F?@|^+1+?(2N?p`dEL?68R7i@tarv%ZqMtYt=`|ozMMk{`kN7%aOnS@-Hjp z{eI5;5AYD}y9}J>znxh3PU_Kx!pY7}o3LD^5)_ep-~4#rl{P;!Bw?BRFq&MD3#wBm z2kqSp_B}iW7s7LQcw+6Zl3WQIGK&Mn?!MM_dFv9^un1lR%KK4XV*SGp9{#u4>^&H9 z4Tm==@dz+=#P$>(8jG>7R+MJjYi*PZ{ghJ69qEZ{v<|*OW!HE~fL?*YY8i)Ak`gvr zS_gwyXcrN8C@&gSS5QEmz6dC<{RaJ5j4A4tZXsX8yJsX(vgpHL1%`h9_dR`Uo~yYMw{)Bq z7aq$6jPq%|3>rv_EejrSa*-B|$-RrQp25|tCTjlyK>OVm^NtS;Ff;fQ$*5*mcerXe|ZF(=#5K(`7yd#F~U ze$jdUTFzHDW32#i#P?P$^#5Y-y`!4y_H|(_2uKs8NDT;xN|TPXh)5F=vCtvXqzOn5 z5(tXYArt`t0YQq?NG}4B-lRyCP!j~CCzKFKh4CD^ z*Hj}*_U{>*Dj{}<6?NOZxD%`VfOAtx5S0#|`=BG3A1@N4JVW6b8`W$~ zS=t*grzMYisHjS7FU3pixn)5u?5GYeAahX|R0|hT%+kPh!N0wv?1V3h=jYsYyeem7 zPm4v-p59XZ%dU=SC4+oqnri7Clyk=0RxcrS$FFk=#|2=FG=RN_zk+|y2ADx#A-X}h zv}5F^3ORemQj_2z)z5>P+}c%S{v7-62USq)0%Qt708jWJrvScD$2bYHejyaO7#2;) z$4ivwyB`H-zUwj0(&*dy z2lyvQ?;Iy?A*<_SHEK5p_e^JWSjDxKCOFhx2RwzZMKmx$ejs&miklc*Ay6YA>SM12 zb6c*VSkxI-nG1e$=P%cmh4lzM=^PKQKL#fF<$y z`i(JLVmO9Tv+ZbqFvnKaz|Ax8IMp>UUx&9&VV6#Pu~Fu#0gEPkQ>5Zs)s&=neg_bo zA#)T#T^3Ih?m^bWl(-4Cw{U#I=d}oCtzr3Of|!jOYHOmFK{8YBdb{okcNpEPQjE1? z^8nB;up_BOhOxxYg+#*6H1<++0eThPoaYIR?xrywlPih6FA^(R9oXQrAYLv}@j5v- zZ3fg7bBalHk(11(4vuk&NZt!HRkr-SaiIJJ=9HVV9mY<|(W6)`T)6LMlsjFUF+9$BKTxLo zX*%e$Z(}P$e&qV=>d|V}YkH4(H%pXPHd~Kt0W+11SKv<^dk*~q>UVjbSj@Ia!CN1Y&G1Pb>7pG7HdJiEq~Jt#rmNXVJ|0#{G~RNP zd6-5S%2)fq+oP@WpP$+2n^*hof!qO6|;C$~1}@<-i=7B{*6WHVHG#cQPm9 zHrxBqfwPck{b)PY_)-H;?xi}-6@c+>&{PKb4N{HT&{}|;f{A5x(_xs|U_9fC_~h&` zpLH-FL~PpC*hJ6Ep`}*J#!k-2OpYZe_h!{Ctu~wFR7N}`6kyZJCTfA7x=9hLDBUC- zf=A4Iyg$JNt+2i0@p@$n@WjLym8O;hbU=ZQE(h>alsV<#45?R7h(!z0aBjsHs_w8y zxyOy$O9;cp_<_Lu+hq(dO-0h|(m9k&MRqOv*nj)@4+%<=zS*H`Ao=5tGoJz&9$}Z!c`Ham5Pav5>oqQSgC{Pu~Oern1X2BBxZB+ z1*$^TH>d+3RXl}abc%%Gg?NKlQ&ZpKL z^}W(0_TGvJ>EIW{5n{5gRg4csHr@4AgBXv(>>Qn)JvpbT--vlg)Yt9`_`LXL`q63H zl}mLHGCc|i_f^B0iBcFyh=ivln!j1<~f1y6IJU>O{ve4`)OHP)& z+vUZaSG|6m>XQUN-j14>XR^n8uXD5DPpk7nF6d)Ucq$S$f17v5$_Gzhh65<@+9X^Tbio)_Z_cNIUk89So zZ*#w+&|l5I=1Q!b+I{l>P*(x~yg5bhOn>J)P1Y4neo@84vcq@TWr=3_AgslE6VX%xl|J|pzIk1nTy z-Ta5+Ul2d}Z!(`Rl@-bY->-9|Z>6_NiWkH|-^PUCKRGCE_aIAjHp}q$7~qbpI+Q7c zUsT;6)eR$dVA=}#*YDLN0xeMQzd=#~{R|*3WdlM}P(FOV2u0in{qqT$L3r_7O8++a z-eqJz&{pCGkAm+pkD#{4=E=_y|9BVz1fkN$sdK?0FtcA&i6&SN5;YJl{Y*u+A035v zf@@G6L+nJqgLV_Y#-JueTobFRv@Xa#l;O>ivMW;jV!#LaiW=}T?ug20{UO$~j8qq^+fuID?ED=%C=-8Wq) z=6LGDin^!PQ(ykVg`sHk?Uzl|SV(w^acv!kwWuqdL%?`Uyg}h@hbUcKt6saZOiy{f zDL$U|z#|e=1E2tpBp|KN3CWmk+G*%yhjFmL#J;W&Dj}Uh-4HW$X|;UT_TrYYQ%=O| zFFV6tJc~d>>oy!f&D2T&U3QzI`7mRgd25*&(NUMu9*N9>+Kr`P=S*vO((GbKZn>^* zxjSOUC%B=BnO2Vw9=7$-U}?v`l+3 z#ty&H-t!8!fe|8NAu^91GTTDXlbS?0E(7D9fm_!Z*=~Yh3{E|$Qtq7bhddpT+?Llr zeDmdWubU99s2x(Rp*OEj$(VqjKPLGr}uI zqi&KhG2c2^9qPQoobO1<$*5`#j$F&&!9dXcox$frF`MHBFY+wcL5zH*?d!ud26cX67uX)-Uly z3cuLmbEj7dxxLl8_$Wfy$ zi*{!$S=-^>R+qt@rxgm-!5>J~jxRw4)9{Du2gxtI5U}^mRtr z`R8J|=WvhC#S@5W55n{)AQx9jRwV|A`&(aYL@c}W$?bWz*Z;H^dZS6%^$eLG zoGU7JF`vs$1JR{=P!`aw8S~ z2{TJ+Z+G-m6I}pg+`h1FZsP4;P$z3rl2_7a8!fg6!oM}B{g?@5OH9->ck+E0bUU^v+YpQ@1%*)6O^CyFj^x zSTR?T105dL1Ik`vfN{9I#AF-(_uBWP<8)>+c?Le849If4c{&VVSze@&fe4KkXg`bk zGk>88!3n&(3ovB{19maas7eD!MP?vKJ1DXj(8zZAkBXq`@6tGA>isXOp@Ht>LkQ)% z_5ckf*d4qLaC6}Mu4}%{`TMBhPXKoctOz<-f)kf`{yoNj&m$H1$G`XEzweoUKYRYb zF8yEmd?fyto%!U=Whgp8fwwiE>CaFyB+-*gqMi0wy3vmRX^F&Ys#&6SU)@UnUN8JO zA#PC=l<9MC_MPeER&FN%WD$M$&!Ck5lVkR@QeNju0A0^sXm<4RMX4~Sc+Wfg;w?2D zTbA^2-M-wX~2J@9IIxItU@9i+eGqY1(WikDt z3RMJR(QLn9&Wc*%3p@zR@u5uks+6P;DN~_uLa$<1?w(%ZjH-*FmUEr}oaH_9ZbU9> z#G4`jwAsFN0B|n*cz|N-%yYoPUv>IL6`>4XNQ3XG!3=@KUKZdX^rZuJO9f@IV^J`c z2|>IBIcA2O2SQ87eE3cQf*AUNLI*^env=lfk-1hO~c|!VB(cfh7-mEkWtNHpx`MKijq9LC@mENVgueV^bf3CDVXZR&; zk5CRfd2}($^R3Q#9SMVO25f%8Xfk?ye`)k??Cc)6A~=>8oNP!FG01(tOWU1$o7Sr! z-Rkq|`QeSN)O)lrxG%BcKJl7tkDA83q3P z(gmnP9iPd~K04@t?16xdatgjIMGUhP1>|dib(RGG2!;XjR+Vsv?8Ch=I8GYXhWN+t zGx;gc21mjG4_jj&j#H!nwd`~KuYlx%i4Kr~>i&xZK;NL41pk0Z0Mof~oB>~%z6ZPwU^~u&|M|Lg zj<18@Ny&op`VAaM3#n=->0o;!^bzOnaxYO5+LUvEjeUy8@r#mP};0(}%3mzqbdj^j`+%x9s+yRGWi zaN0$=E-A_q+YxznV^|W4o7COdANBPygGLUz<2)B-Ix3T?K6SbUcPMXn0`1C_QER?Q z_0vB&=EU&gS77l!Qw?h5c>*>sMXgQUNW8+eTpM7-!FfJKsPAirR&a$As0tBAVI#J< z>9ncy;-y~5BY9z$i7~=Nf2^ZxtchOAq+zOEYvW~6SBo$9P8_BjkeS|;c$*=OHn`fD z$@Vs2Sze*45TW2FuJ8>6oojk_h!j~6(_aSeOm_?wM~{q}eJ1fhtPHU}&8`i+mh$6y zwX9!+A|qmLjAI?Zx1jS2Ive9gId#zI;zakA+$K>YV(;z#fSe3#~AMop>UbJ-_$DVn>s33cyy-daX&1KSwZXwnZH3b9+sZ zT{Ca(a|B-x-^Wu663T7ckH!Q>_V#u~8xm||z0Rz7QE@4q5-mP8=$%O#O;Z85#Vo zNes8%mOdDkO`~dHSJ>$)+05Jcjzy=+=$4thZ{tY1>vVXEUJPqjz4WQ2Y!4zHM^AW& zM{Z7n2?14;WD&(q2v_T3?EReqyJiTdK4CgjRNqE?c=1lwEqy3WHr3}$$vbf`Y^6is z5_=|lLM22nCMy;@;BA7RZ!7ui!9n!E)J4_=EaLrNl)?BM0_5`tP~Rmljy&CR2xYDz-v$cg|*nX)XdR)uXz{8GEELd|`yTkPc=Z=%Z}YEY^~EU4T%i zV(;Ki&XYE8U25}H5_*YQPJB`ur~5@>rAiVJ3-lF++L;qwF+=DFZ7E0MX#dV+T+Mh# z3r{Uht+uexz*VT5_S|jztSiU`LGb(w>|AWsBO&eQuK z&kPlj9mZ|5+fg`#MvjJjCTl zkiA&Dg`o)5E5-9LJ$zYL27Bj3Qc1hWS`X-vz07LmR98x@t4rdoI+5W@gO!Dl;FJFo zHWp)b6cGNT!56?s=gOiw@yz5G%K-8O@b_*O!09EkyP6HbCcQ;}=v3aj`{roTX}=*l z>yQ2*)HBpV%;skbht6^9FDk+giox}OlS13q0dMQ+J_bA`!p=M6yoVmi*?&P_j#NdV z^8|nca>tqAjY1;e7u~HLrwk@jq~SPy#Gzi{#wwtr3T^`*`PL!{KJS_NiJPPwFit>w ziF+OfAs%A&rRbsFchQ%cTas*3y+Q;8`lSKTy0MzD0hgy+*(72U02-Vz5 zSNcqPG9}IR%xCe5l$VRTH80oi#V%DuCc_ex=vAw8MS}R0-sznpCJ96yir-)s7zf#D1*ol)fB|b>klG2B;>=ap|xg=TpoE0*tS*xMOuB(>G4}v0tg(Z?63}< zo#UuBHTNFpn?I98^2^JsQmeUs2tP3ISu5O1qy0%m1^Na=nCu{mQ7Q?DBc`t5{VD0? zu4LPFU~v~d{-WB6L7}B6z2VWQy>V~IBIgZI4!8mmCeP@KL3CO(g(-#>1x)vSc3Ghl!r>^0cl2o&;0(N3nHXJfQG|)#24Saa`)_l`%5h zabcag=0qU%v=$qOU;LZb9g*`vX@=HLLL3br<9VLL2Kn&|B2%sUM2Qn|34 z_BQ;L=?vZ2M_#^;$162~kC2;iWIt8~%nHrWs2u-MkNb{8M%?#L(5|!Lf?Qd)7aYNg z#GR`Wa`d^}alT$L)%Z2s_39gn6+ypcdUbBdZUuiq6;fAZ9({ZJE?};W>-=2x%$&E) zHoc4S*&E@`3)zub9Ju8Q5A1iJUsN2cqY!iF`R{>EHVDI0`Dq;5}ru?4zaJPP=Nf*lo#{9sNeR2NfqTwB8T* zK0k`uOf7C*1Tn6sgI`zoTk&Y%#=BoV`Q|?)Qnr=sE8kJ6Bi0o5c#{yiTk?|cR7?=s z&6d)?x&+)<)|n;{!M^LslVX8thp^4@sWQ$-<1OLdBrqT|mI!miZgWRU!8G9?RKAH;c^TLRq9IM!Hu{tXP?n;T1P!rLr=c9^evL67i&=W3kt_<<@pB!@ z#Eh@}!jgzp|EI2~50CpQW(=uu>x+WK2iPGNV%3);+iCrh)yB9~o0ca5a^LsarDeM> zop9zj0}bT`y{j`H*REV~IdC>7d?UB)=E~vq(e-m%VyS7}I>i(7fm=;Obzo=1DU=DZ z4j+iAMdG$wQMeGP4pLFIX?0Pl#oe%xwZV-q<+hje#LU&I%Uiv+>{V-BUKfUe9Wyxz z*2JQGvK*cXS!!xQ3~eKzUoS0Zv)9_{d1z#fiFD+rXf&02J$-!gM`nlAR{%%j${Yz{ zhDkW&pcSW)J|3*5&<}bopA(i62e*2y_^3n~+1Bpq<{|c7&F7Sk^T}eRWF@>}J0!g2 z)F@fZ89Ti$p-s`1ESCfgRyv!pN{g}U>ZDKKlf-0M)pvtGmA`RrPO`AbLzeA-b84C> zw?rZdn#S=!o-mT!aCiel~Y#>mzcLTM~pPmK)_YQbA7Spv_bGI>mp^+s0M6ATk z>()FaK4!}v;%`magM%Fe5dzOzt{#^+xndCv#8VnU%7a&$=sl^YEzgbc-3=5Dqc?6a zR=P+JWo0)CG4WjMstFdQOmM^FU}9L*S*S-Vp^=-|Z&o!~qw*oZGr(J9wy0jfJuNC? z_ZjKoWt*gi>=>7nt9Vq9-?SESZL%!(18>*f;pcT6y07E8J7*?VYLm;hL|jiGo8$H&YVsc)FUyVP!KJJ){5*vw6ei6YMSB;!(og?=(V+{c8EKiVj^`}DZ2s7 z#@E1G2dcM)1tZW@jClVpDMT9Ltgl!1HvH5pcaL)?H^BPZ z&a*Fdv)}1xIQ7{tizv(orFy8}I!tc;=ys zmMLm9?c9!lP~sgOXZ!TbY(jXlP(7%z*48#r2Sby_`*x`Bls6;*I@Ah33uDI9V^JN= zoEjtUNEjpLm`x#RDLV7wWXJPRv;|}%GFm)-`p&@#A-8Xl*RDOf0T!eTfI)JIsl|?? z@EB2C2R9|((}_@PB4gR>rjX@8ZJ%-mA@by^UupJp_1ov}YR5&BZV*-4C|Adqa6n`e z+BPRVf~u^EWwIbePAuK(e^w>F1?ySTvy1%}cH>Hq;9I`+(W0xdU6K=4{^M32Q)bVb z8~3q4jWYw3G|>GP$UxKDy3t!Bqkj7qsJq0X5~w#OI|e3%S7~iw{3eN14aA748ThPc zXnH$1eAM%lD6OaaWbrAWX#W<5Pfb=ly3yLW z&5-(Zxo?;ke%<0SfH!OTIT9j#dsCp@tvjP1AG$CzC!1lFfhj9RJ8XW?@O4x#3J~w| zOZrN>V$7JXY@2aQ$QK)kxB}K!5W?k8eTS_`WRu%EXm|jogXVIg)6A)NAME z?c!Mi3P^svf~f#5SQNK>L1>}rlz}gXM4x$cQRhaw+Wva@uDj1MO30%2~-6BVJ$iU7HhTGZYYrOxNbzwC1_DD6!Kj4-E(^e#yS>V~FNX&`{5s*ca?wo>oWbmB$qoje+t_5IwB}GWWNiK{~Xa z!FKHdF|xdkeu*PSaE8SR8LJ1R(Q&g6ByD4pdp|W!+p`Qu#Vu1e)+SD+z0u9r7h<7J3&=CQNg2b%MhY9<)*kt#1b>)($ik&<2fGR^G^_6E^ca!IsQYrM|hv(I0hb}hczn##hvU5*~-+w^%(pa z0{%0HXCb9*3A9I}4^#`<$x*+kEM>QkE*Jy90n{vhAOZk5`4GusP5nwuRSSN(P}~sZ zm14;niD*;6FT1CTliphgv!^NT7-3gC-|q=A_4s@gn(uNP86#`h-nORwUVAHWZk zAw)^g58r!O@_x5v+usJQ0t^~X(uWT(euU2hBj^AEk$*ff`PE_~b{#-PmZTXTpZL#9 z7lQA9R{cfw{%D@404FExZU5^ybpG`eMB2k#u?)1f45Za>_@Ho>;2!YA#x5mv9lkIH z1UWjRC>*dr)pf^A%HhX*D6#?QpN?Uj%}#UG@IMbl;1`ue)zA?$5P5|<{-Wvy0l`B% zgfcR}r?dt-0LJ@!Z~nuv{4U4-hv(lYvM)3U&!$mi_{vG{gK;mg6)qD(P^&*NL*c@@1$>PtUzfo)^A(VB}0 zgsPe+#_$3(W%u4_IU!(T=hJ111&!r`p92jJ$@WKqf8Q`1Wyc)dB8F0igxgm(HA+@= zGn{d@Pkx8FdGV%MG(Xj;OD%{`K#fm@GIKD;H3oZ3;fWeD99aO`4fK1t$H~#IzKw~u z;vVV=8=Wd`(0W?bQ$8bk`%?u0>T;IFoe*VYf+iSGY7Ta;j7#ql>Pv4G_ljBHz3=Sd z`gyg)Zx<|0{yUdRBb*;f-vMWmAH@K7MTby^`<}yfotwISi8NfNy-t*iJs*9?YY~&2 zE*rBboX=+z_$PK2D>0o3`KceZ!<(0y6E8T_CkVvm*@v+MogwezBi>g@V{QoJ%`ztP z{H6X56Em8t_AsaMI`|V7jc;9h|GlL3-^&6Ye(zrD{<%NNZQy1*@$Ug;?_B<4d;Z@u zLmq!Dv~_ahejm!mMRO1q@nSfT5!I%LTq5YAwLIdzjcS zzP)^>bDGK_?k?3A@@pL}Ds?^kG;*(L)ias9hP-FJhLmqk{M-=oqQ9)ls%#(lB=;|B z%l&33|NYm2=jw`;{zc^v6z$pTOw~n|hF8E_zf-brY8^DOI%#y*0muX9!5>x8K^@Bn z2W4LTvHy7=q5xCA5HkWIHe3KmUBHyNKogALK5{0TC`3m?;kXN4WBx@|muxhX*3A4D zv_t>ye(s{!Tl$lVl2|TNb{`Sbb55toKi~@`z*Wp|9FPp)tyVtsaajy_gJSYU zyml()*j?>zARV`_D^!B~(@bdkYL8<@9Gzz3$9srIQ^gO#{lRj>HBwZXxb=?MkIuE; z&=e)~$kB`?lv^c;(=Z}Bx}?M+Q+XLZWI}rCuiIrTW2M2BXm-L2hN7H31zfK%5l>>R z&f+2V7V;T>@ski3fk7PEHuJU4Hw2aWo;HzncHf$Eb^U2yH8=Rp>e3=2p2A7_3aM5@ zv~Id$3SaIqs$k30{C_CKdW#EnIOkQWsD?3bD2&^P3D}-h{m33EqR1Qa+W~Oij(Xm_ zgLXB3M(j6*&=YC;vLE6fRX?|yh$q}U(6)$(rz?Evc7Ne;L@w#|PW0!znBs4ND`cKb z!1a1~9E(~=M9~6}_gw;_v3Xb30FH^ME)&yhs2ksxxT(u|Uslc&IW?k$VG7d|@wIFW z@ju7>V=@AusX(Gr^{e2_WH0=?;BzBek4fj9p3PVgz2;1X+ul;zrIO%cyi{$BGHcpY zOo73GNR=#V;X5P(UgIC(gNn$m_R9=h@CZ}Lx6Jr#CU>m!Fk0a4#?viXZ#J*R<(3wf zuRS-Srl^>xz*SP{R6-IEt2_q0LsoSu$|#t+{89rB71P23Mc(@q7!f0T+D&rR%w99I zJg&4`)r0cL(X#Pl>KJS6xm@KHf^MY0gk1k{>K^lpdKsTvio)++SZiUm5! zMZdXav_bQrS2fF(?D>-_w`KP@F_>#LONOYA2X#Ip>geMA>T(ToyB(Nnd`0rBjjWo# zWY*=6zwf23|N74Eg%zR`5}r-%0|^Ill(+CsIq&ev5#_>a-nyJyoji#DijJ+xT$GE! ziF|Qtj|4q`-`_*!b>gs2D>!5hDAd~Xv*Cu~?D3L01x`mp5pvti*0bx+h0}ffHjBH( zhB{kz7iL|v?mbBwW)jE0%+~qKX6{mo;N@W zMv&)F1c3=Z6sFEJgy(#qT>AWVd8jK^&uA~;fsTU7%PXu(`!Xc{pPDi~_yCPFT&Kgd zu9y#y=-PepuJ?(W7&yy3^d;aUbK9qPN5Ctqoh9vSYru}@L`rYkh|G2%ydv<}%ZsXM zW|}e~!Oy=za-VN+%zNPMFe{zSVjUB)0iHDBa*P&w^<#U#s484IzRj%}|D0Zk|2%!? z1T^oF-)TpN9u3v)*6o+-XNbupK4Q0Zw4n@iuHSgKI{KBrj6QX29a^&N)#D9;>BC7b zw8b?lCc5{`p&yYGpvd_u|Mu;(#KqP*dH~X6!#4(IYBKaM8-gMN8RtsgUn=4I@v+7B zwVge;1%EyI(1t|a0opykq3js?x zA)8fgNHoxu)@)iyiojY~arehnv_y79GknI{ zK4_RBA&w}9frkWN12K!kbms&n%ATQLcH6scmQ9#0rm*Xo8$0usWM2z#`FP{(j{U-^ zmFIsmOMiYn_B?)ta-YBjnvpq(qtLtYx7!QW9w;h==XQ#L4jra|G)KwLV8ez(J}oG( zUOQBLn_8ShLDBF@UG(bZ79h4US7ZK&VUqd^^^gv;OT9Z{ep?Fj?s=DfG5q=S5;?e2 zU*8%Ztw796WfsfsSQtA79?`e0BI465vmhYis*HlYR(h8jOh75o=eMuLI z9|%r(L$q5HU{dMld$eNlygBPX2I5YK_^8sH68doUcOJ$WYbguWk@%XIaz%o_FBd}c zT5H^D%qJ%=fNkWlA~WT@k8 zWXcd%25_nIO>KGoY&`X{ptnE5x|fsL9u2=Qx|BpI^BA6_du0l(@0t>@ za*xjW9Vtur7x12-m56t+BoJFZU!QXXe#)|Gx!VDBiJ!>57hy=2wpF#8L5N8xXW zXZr#(9|p5_vRg-my5|0VIr+0f%Op3XQQXKn66bmY=NLt~@>89Y7&2Lu=VDS}K8Oy8 zu|!;dDcLS?S>0AfSBYz3uNck&6D=gtV+$jj81s6CYa1m?0&VEOY9xH9O@KYx#%wJ?}$zPYS$&Z;Wr)%RRDudZi|C9%qnsH^6G7wa+W{@8fCcRex)fxM?h24{o9<8K%1BbWe!B7%&C>Or#jF-XHz52BS3XnfH*^LG zM!WSlofqpFmV3I}vt;yRhW0zES=>8|i8^RQroPc7H_9k+$0~Stv88dz_?eem>uUbo zx6dv8))B|0;gqumBxxwq?mb*VwyR`aUb}K58tSdD@2VK5GJl<2^dx;yu0l5}%Zr*y zI`$QQf#VuL_4hH+u?Tvp9kYyN%KQj*S-)F3E-8s=XlcmWHnft3zj-fkU&7w`Y~SrI zjP5c@xf*m{`&;)%s7HH(aIQkFa~`_DI6masSBEq+)5I{DcQ&_^2cLT|5tFb(;Wnc% z6$dGTrm3kGcWOu)nu~u~%lEwCqtka6c&`baw&UGxLNRiA4;21DmGHlj9v|aaA1jDUFZzCgRr=)?pDB8+6ldedI9XbbWbkLnR$ZCl#f4 zfq;t#aNAI{Qffe_~8O`;>7rUOD3EDVKXk)de0ak6ZY zxyyvXRgW0UsoPcBW`=WCKV?*+h~gtxl^Ua@^eN$^OSMqb=b&0e2wMv{cw)Xzr(22{ z=0eO~a_B>imM}XGdE(dDAnU?h}bM?aUWBpjoEFr=N1j1aI$T zx4~;TJ3Xk$_wlJ+d`zwm6HNgH#L(O0W*9~u3t|dg+4jv#&tkp}l4wccr+vx`+rYKi z-OQ(n9~M@k_pWSA94r8=m-h*n6t%_}^!wc|cpxQ7HT)f{-g>;%yP~{%GMfrzBNaAZ z%^5~Hw~l7tAAci59J-Gy?C3?`>n*e}%^91#7xJ`E`{<#`D>07ar8lu(p3(x*Q zDv)Ary{D>%g}esR&m-bx7`)qHQj6Q9amA(Bk4;?3H3d1kD~+5!V~c#4KU3B#kYMo9^kt- z7J=f=0l|XUn+NkI+Sek=ocev@^T{Wdr$%<>EX<5`dru_iCU?osy*L2tm8(mT4UVgU zA!dR()deVH>96Lb@KWuJ-fi0$6r0NpgAzyc#5MXdb&IYut`T{0($5n5HkYbJQhDC; zS1lqoKsb+fz{^?bFpN~NW*ZCUhpuCM(%B}JpA=&I83T zSqq{)m4iFVl8Y*td*+q zd|PDA)dj!!_Pc8(-S!@vYB740I|#1WYO{vw)J-&&r5hK7;|}ccdm}~4Carg z=>+q_Y{%Ti<7)8q?QR$=tCa7w({}@*61uUnui%n%;J4oIvi1v$gJ;1Us`|JGhD3?Q zSk89-iHnD9mC3%+y(=h1DYmz8_MkDASJD_k65+ofm~Zr**OSs(Dgcoi;*1 zOz;+Qh(IE0kgib%Ir({s*Krv-6XmK8;F$Td(Ch~jHDY_NP*iQTg==qV+2(!rzQd}> zTicQg%x{F+4iNy1h7Am4aU)S&6n@drU{NP^&I$R1LbS6XwqY;AqC;ltJMGBnKor&| zPB?n#3Lz}wsWa^Ww6F_kG*wqU&QW#tSlo^n(Y%!7n&+&1@q!SG=#-p=(o=~SM&z5c z=VamM?GJKd1G0<&OPpY$6?L_ljrtoPSEO~q2hex=cEgI}a`7I(d-eazH*O{RA)k)G zf3O2HWSMk$7FT#(3F!lr6@Hv|13MZ8qu14t3!QPhkt)xJpovB91dtx`YrVxN0BAA7dIm! zgF!BYBgJrsxEqZ=0D5A)dY$j~8cav1rat;XEtFe!*Zm1k?ZQuQP*SxCP!V8-+XDs9 zc{;gmeiv&Ml1MsP9WTd!9tDxBvRspmPCYqEA8Bj4X|0`fHHTYv=0KayMY&sza zIR%+s&*C@G#EKvYEeZK*KVI&Vu1ZyBWRMUuZ-J1&c)~GlIhkqvlJuoX^a zg9T4-Ik8y)DET$X7eke;xVItMT}Fof9Ffj8Hp=K3RZ38v$w&N*9@|Y&C6~Q(?#{Q4 zC<71L;P%G(=!ItdN!U%CUnVAbd~sL~c@APZ*Iu};oEP7Hy$*P?Y04JGUAL3f^JQ$h z#%Uy$V-wFDaTz&`2nXW~5OG<`Df0&SGf2!fjZ12a%vdnUe6{iTN4&KG)=J(@f9k3x z!*|I^&#o$IQ}$NYUVb~NyVDf9Q9QzIvWW#VMB_TgJz1{mfwY1?;%+-c^Ql-=>gJ`4 z?3lb3VqmowlVg#YXz1t2@Lm}D&1bQ#PL-@+o08Pn<}VZvM3(rY|b| zxm1L&nx;k8j(&ht`GI(8(P@)Zh8<~3t<%C(bZ4mmfiHC@WEDk}(mKx{%wg?f?*2YS zxojd0YoOT9s!{NDRQEu67CG(H8!sceCG~!0Sh_tihVNVqs3`Y1N>%K`PdIav5Jyr0 zF{zVNxv*msY}OF|u;FFbAxzYP_fs!JD-S&#Yd^>L2SX~xH`$hMfG>VT4ogu{T2mVV zfHa45HY?c|v(40tS9g=7#Fr|4c@i=FZVXES~dh>WeYQE;bmc4&Ri%#s^*8PE~^ z@Bhl-o#34l*%TmansfH2SSH?)93lx`03DsnBU}Zss-`JFSWD+07kTVA%OQ3kMxp&O z4aWcvvl-AYDi1MSEy^3b5Iw(pAHMZFXZ>aZn>73vMD9sQ3Y}LU3ikj!HU4&iIdYCg zIGc2K+JvM$NwkD|cbIR#Qq{D<4$)id7p^_G>M-&1H{P;Kp<8&2?}@o?tbO85oCX(i zji+@U=RZVd=K;8SD{vIxnG@b3*iil2HpvKJ1Y2rsaJV3ITcYNIAj7O-Dy!u46E{Gs z!T7w7cJXJ7F94YfMi~2Vk}n{rIz2@kDAmJCMb4ju(U-W$N(Z?A7~bRvxNs1_D(|Ph zVF0Ix;4l1^^`X3ign@|S+7mDwxU5Vik_82!M|8JPJb zjD10hm8@D>Q&V4wS25KW8!WYd>8AWZ{Ju`u*}GidQnY-pcE^P1q!`@**^_mTi+xdu zZ!Q%2$!a7sRC~Ispnr_x z2*9T&jkJhCB_2#)fPLj}{Qrzg=0RAg9QA1Q2^C8{KVuQ+xi-C8%itun$BcXdQM`x21l} zM;)#KgLnabSro)9Wf<-Q<%0dRm^3R_wuJm{+Wgd zDm{T~vw)0FA-=i0vl)(UsVZ1aUF`IOOf?QB$$3T7_p4PfUwPSg$x@Z&c6pLmX#|(4 z9s904+lj4jFs~qm{w`(CFqnM4v$9Ui9w|s2+csOCrQ+!-XTs7?53mTfIHu7`EUV$IHpW?fZRxT60_yp(}L%vQrgd6%Siq-T|N~& z)^e?;rlKa}_GlqT7Hb3U>FbHdj-N8~eEp{{cT~v6#$-I)uv(i}2zCG#bhjJAZ%<6X zhy{susb3h8+$Xt;8C-|yP~N0RTbLH>oNO%nQsb{{WV6dX(-6auI4|!B;t0O9KF_5t zum)y@88S9;qSIpfQi}V}?R+rp8s6AY(s);~+ypGd-+G<@`BiMc`!D4xfB3R5c#1ME zR5h`EGW|ZQmOdwymrJ5B{xA04GpMQd-4{kdihxM(pme24R|rH!Kt!t2n@SB;dXSJP zNReIy6ckiIL`tOhgkD9YL#PQL(i3Vh#j~FO-g9Q3J*U01KfN>O0|RRk0$FS2zV7S# zHP1tx!k5?4O4!z3{uDDIHeicip_H<*Sw2cBl$HGwd?`wq@wZ-(h#KBHhAKw1 zJL!O{)};KUF-9l#sVZM!+`hHRCt~@6?jqw2WRK{K(eaKyLtR0Kf3n8Q4Z3nozhadj z&u4NLz!H+}n3ehm6}L(%X#V=&N3zbnAk!}XxC`zgoo$ovv1-9ZnWH76m1V)?@})nQ zJKlL@1%y5%Tz7pxEq^btCcxL5U!m&REN09p%;?mMf<(9rn;yFm<3y5$b|OA`eLdL7 zk-N5b@%iY$&+zoMKm)pq&;i=jO^PS5Hz)_vpZgME5Wv39j%6Sy1iRXld-^k$eJE%x zCQ-alCN(JaIHytVRMB}xi2036z$_0h_Z#Hmpyq~mSslMUY1EKBvaHCd{H{d~2McAm z684cv);l;aAus{4kQuOB;SSgqL_+W{{`cjD(x0(+||K~%IQhZ#m z4l7=|TVA7A=la-QNS?N`=WfPS?~$AYEy2K+ z7`?o6_25p!ROM$>_So@};(~NzXohihaoe}qCX}U827{Gf-3qBku!o0x)Z_aJauQ6G zI_bFr=VtYG&eTopR?nF4;O=?XVJnfu{iHI9G5G0u?(09i_fw(B@q!uV?q;j>BClL{ z@zvW3M}i^q;n!!NwDajsv6ip?)Jt*a7*VhGU2uK11f)Gm zefz|ukYDYO)76XF7r66I#45{=rvEhbpR!!IT2vwcA1-xr7_Ja5N1qC!Rkn?dsOOnU zAZSEym?kRqvuWwPomYKBT1i~(kWI`&kx}swhY=_iBxl66Y5htgMzEfT;ULI~pcvok z4-%0eEDSIFstDs_nGVeHO(zJs`aMcWfIif+u7k(?E}%s*5%bK(VP?5{MM?3~evf!Q zqK3b9W}f4t%@0N^mW%X)@$0`ltzJrurEcwOzq8bwEF1{V85Zp=A#-04go1prH$M0u z9rJQryb$o#`(PbA-8u5AfLF~ZnHLL>i9{~Ub{xOOetS^@#j=#PMMcNVZ#IEkUo4{U z1M?f?pU}5OFmrs}=cKuEYES5+)rMVwVWcQ=7VZG7Q|NCcaelDJ*u5mUa1Fk`aK%;u zB&6OjylA8@!|yRN*F-Pn&7=N^&wnAekXey``Hke z)au&o+WPqJQ#OWzGO8*xqDMrIctQ~E<cI_!&0M_`%H?A>{Z;{1gdcNZ{H#$U}~1td$N^Zh2`_$TS;!#QmQXD%X8 z>GLpl5}~1qfDK#y*moDxY#H-k>3RNxukx=IM!$yj4Ico(;_8b+^@PZtcN@h{4#tpk zbC)j;XgBxn_ac8*%T;C5rU@Hv%IdbGmi?d`8N$z$B+ z?a~>thtur{CizxTU_TdKKnG9`k|huATabLjG7C+8Wb;6YLDl$^YED0y0soM2zsDSI zx-x+kFVYvuSMWcI3(2-bFm5CX&R&B@bTg6l%I1cObxRbI{DM8@&AL>l%*w?;Cga_i zboy@}u2vaO1Tw!PKR(d@eW1N{6oggJTvklXfbkMWl0ecQPn$ni;3x{zsUN*sTJ|lD z3WHO)S+^9L7w-ku`tl0Yo?HB|p-1MxK?|N#1qwieC0kN^#}3~+TeMBr&V3&9!Br)A z`Us3JD+*ox;&`sBG%b1egP)wf=bEU}zT(?GgSUH@4G9_vH_T4cfi8`Odid%+Ys>k+?|Xy;qM-~FD7qrT|_$h!$&3a_T>{x+Q* zS5aShRrWk80EPhb@6=>sZOR{{%m|W#~ti3rxAERhKm3LE= zfep%YSWq>=|D_H;nY9)@9^&ZIi2+&bC`{Bw6t&f~O=B44E>?8weQLZ0$yPTXknT+jZ!>{HhL?bE16cbM`D;JZb@S6xAdI@e3xPNDm9{51H53vDr~7o&@N9{o8`5!V?=^Z*iqxq|EA`eW z>Wy;6+|KJePJ)T{VdtmD#kU_V$8`oc2~oa+-CGdn6gv=tFx9D$)U%#Wml2#$zkX=K z^$_NWmNIW|?-_r;*moAcFniliwdAah$Mhe@&!6=^z$DO6qyfHfR4TEd+es6j(>)?W zd?s&T|5HcNtAGbt6t%uR>NM|_{8?*OjIZdLn0kKbP_v07t;aylN4(K7u!V}b5rIt{ zA>IL~(Fm*%@m0jid?b3{05$C^jGhHg=q#X|_B4L|2>9lrb~>U*6S4uLOpgoZMDHVN5TyulkK<6#(&G9sDcWOr2^vH_uY#Kc&lVaG znaiDsbN3tZmG8em>_Ai=f@`zXd-;mP@%b+kKIdw;0)LJKNRJ4msea3P^@H06?g8|c z5ewA0zcgM1ZYmmxQR!W3fXUYoz1JuWTJRwkf46^(>UZ}wPWkv28opm2I7A3jm(Z** zk5A;=1Whuit$`R#Fzw9F=bJuqsg&LLSm9pvwz8re-Yt>5?oFpGzHs;B+XP=eJ95XT z=U@k_%s+5b?Gg|9#w3VyIhA2E*KpDmzt(Nl@C+bPA392zvfa&)vvYr!{ZziL^?SJ^ zOXcaKunaylEpCq}qY(Xg#WY?-lgN!_9=WhY-0FSCkZO4(Z=rn`@~1vIC^B?_&q&K( znMtzs3^(BOPIXU151nQKH_``yIfHNdBhmE{#1==q}rwiVr8#p}xrld0rL~V(tfUznhXH3{B zxUn&Ad(k;t1A$!ldbNbdjJif;}%&Q+a#wDQoy*0Uz~$! zSK*Z=gM|ZB+w5i!x2iN9Z5-9I`etE7E_(;50shg|Ik7Sy(`ov*=kGpgtRvm8X?>y=^EtkMOnHwu zw>+{lenx=oobf%B{f}!67 zBPQ}a+8!7PLP$LxgDI7+wm{830aF>9q{*)<0SX2^Fhdz6OE1cv7*H9j+ktmC_?M

UEG9by`2;tnr6QJiQC5&cibsVxTo{E?GQ8ksMC9!B=z3a+H8 zQkT@5Do&2lscN@Zd$?{zoMi%kH)ALpbut2Osb4@73c`}}0EnZI$~o*p4evVD06c(h ziqz?aE0U#i`^X1z`~K9csYFw?)YEmg)g`he&9h1FbpeB9zumo+y0&EX!H!$^qnI`( zau1*VFZ=TU+^7G~j%BB65vk6Ctzawx>&VuF>B-M6^qT96xT;_F`-8@ycI>%udG1(o zX8mS!j=Y_oM`aHQ^k>$006N1=ViQ|seW_S#SCwXJYq;pd*&83NG?wbEVhaPr z=@VbxxZx1gSE7@p3oV3}Z(9yY-83;AP|cev+vD=*vQe;uB))6mc*+36U+3EJlXy=a zc-QiXr9qnZ#Z>9PJ;UZ7;RW)aiNT{L7eEE!g#u2$UewxuzpOmW*&2Yz;@@BJ|2_S` zaAq>@uB3SXu3)3ytVbMm{MK?gZYhuq%$Rz%Rm!4zuGRSu?<72b^i`Kizi{;E8i_)4>&QB7ggViTDyXsT zRQUCEWoOceH$+-nNZ8x+7s+xMDon|?O*}S~pfOfa8TwK=P30a*(J!S>3m)ihuzQ_* zN6z}RMM-PW=8&xAiqzI#1Q~IOiqAM&{oecS8uHP}UeS`nN0sX)- zD1!_l8j_T#qkv?2j^ezW8l{HjnS%uOoSV-ze%13t>ry9H$S$9-gna>Rt-zwoV0D00D+DAtlnY(kv;tDw@&{vG{4 zR?gum#3~!04RLS{^mc^SNIh})Z+UeS2r1DEmw;G`TosCd^ig>Ump#_>@_kVcw5 z&^zuwY*^{-GSWXgTBpUWTfpmp0ZT&b6`r@eb4VCiZkl(IXTs-Be8!0X4MVBw4CUoh z#b)(W%Nr7@NS(9P{-vtAl5Kv1?C~994dI^Yt3M+zLs}H$pQU8sn?>v9F?@y8;dJ@R z%1QZ3;=Ax-hTZlN>9dt&2jUihv~2^O$rI09^fo8HrUR}%tybYe(y%1>6+TAlx|MZ> z3osRq7q!;LrF-2CyLF~+`;QOx^2E*q+uDQW@tqwP=xTGmQR@6{5u3grEvtNT2(#9ZVnoMv#Bw=G zXaeEQgGZ+vItxLb#byHJ%!?aT;l`>aRNhXvJ;p1jN7bvQY@nXsNn9{Wc_{VGHZ0<& zjs(C~!#O9S@kXMFzzs~y!e`!!?og-lpuW}n+ARu8&CLF&PxneQ_JFSG?kdsr^L<@C zI#hPpeJ|uI`RcfK^UJXHamMRU#k;C=#^VVst*)=d2md&V$+%yP@%;L36ruz7uFZcR zYXAGt3b4+?%pE^XJl3OBf{aNTT{uRN1xUKI$1_A0+WJDA+wi<0&nc+%lfsjH`MtHl zl)OBC5G4rBi@HSCCl(V%%n1!Wb4FTh9P^7kJRkjCiZGr}_0+!E+)EVXldo8QbdiDS zJWu5J*}(2Y%RgTso2i8+e+rKQvZdp)uy+sm4A>LFN!I=eV=aSD>yE=zF_I&xzP0?d zTPi_c<*d)S68O~FThlV411|KPZ}K_+M{7lq%-Ls5`2>c%mt8Iwkgrc92x8G)q_(gX zsT}-}0d>@JQa*&YAqvn~_}&j4a~?R?lN846GXN1v+FxgqLU6$;U7{~UIZ<>o zke`lrFq3G*sLf4-$C6*h{CNm0kDkuWhSu*!rw>P30!?kleb8fY^5KXOK#&u#ekIk0 zze)xX%B=&xC*s<~=uK-3g9+6`+-t2*?Y=tnk`gi9+f0kXFMd07A(nHS!#a_vV769H zT!i8)9*jnJGRM00c(5*3Y*97k*I0N({-Ck^?h^~!j|Uc5*Q<}xUH4D?Zp{);s7y-5 z#0ST(M`281xHhAk#7G4G7r^7pFR6gUH~&cgG}G42YqdYq^>lOy+Mqs6cemziziU#} zO&h?Eh8gVZ90NXwk|yTa5d-k~n4yk*WqizZbX_uQUD>R{dVNd2R!*a%Zd^hnzB_K{ z)f3N$y`%4UhnEZiSX-CCUDCZr3$5vLW(yVucZpoYOYU`fBboUt*S}4|w7xhxJD9R| zSKs%uvf?c{DV1@{R?E6gX+N{&TvgD%_Ya)G_6p2Rhbc)8NoDyh%6zo&Y{pAdJ}Im| zr#>EM$Yt>5%_`KaN3Cg)A^ok8%*{Q5>2^RRbx`CYr5>bG0sk3bTnf7a&>dk@6BR5) zH(j!PO4@20(v#AAlw$46pzlw5kpemWBa!&^<0+yg-h0J(DH+8{2EtTYMJu585Ai8Y z*o}~gxzaj8d8Zp3;R46E?XFB{h8uIqB(5o}KC#XF1t^EOVYK*@l_2un%=Tx_@nq#` z-bYXu`&?Xvf0ZM{Ev9_lD1@@i(#eA|+46*H7jdpLe?|z2$JWFxk}muw`m7EQ**Y3K z4mehMB+0`Ri(vPN_C*_0m`I!#FV9bqa?j^JkBhm(4w|>Z0F@1kE=S|s=??F9;pYL8 zI!vE5W>CWFeU=tT2(F6D2IiMiD6s2+> z$B<-T;Bl%TF#@}n>4?84_R=NSJOkW%lQ zU`6B63?N&)ELNklLcCp5G?8rknK*c~gRI=!9i|otAG(2t;>7#K4o?HVDrR$LtiAn0 zyM;~^#org5nZx=g=x9PUw*YecD+Pe<@8M_yCf;*%X6;&Y+L-3uDv@~hlmuUIv42%D z`W?p?Bwk&0w<8niHnA8q1Cpw}Ky>N@oU}dg$3T`ezCM`pWZlqEO>O)Rv&x*Qhj3rE zAN$KHa^`lZrB;?r)+rGBjwEwQ_ky`$E+l8hrR zIUFA|t~ti*oWXY;QwWGIwu{ssK;$i+@_wB9qdBQLbd4)LFp6s|t0A$aWm0nM*_%OxGDnHB9V0sUykvw5<|qd2mbhbTtrng{%J))M*voy3#wE{x|?^KL?=2MD>XJ|@p;-Kv$jb=|2xlm1zejt4Hky+ zlZ;>?Q`GB3-HuVBm_Mh3gO^=#67Sg3Eve#gQ0BZbdzP-Apz52u)g5OkE1Aw-sl=-x z=;N2pg04i%PYr$7gU{jrKuJ5(Z!y{6*)mx0lFD|Unf?7s1r+BubSNvTC+*x{nny=? zWD3}AM;hC(UE+`bvA&XXO#OhNz95L-8{bm^nScJCy<%Dq5CJ@0>s}TzWg9_1*EMD6 zTN%J)oCgGrz1El4`{pX_af&Z$Nr`B-%?6_gtg(~Uo9&OyF$>1!1i8_9pD6QaPNU2k z?+j+zLxy%!OxZDl=!j+IH6p&pE8Zs5w_y`|f%#8O>860|fl}tM%@N~H@%}C@nYug5 zlBc74nXfM&0xDmJzZd4lkAe{Tl2JUcCzK2yw6Cu{*5jpWn{#^sXL+l(dUBEN zz-NeEW%5^>`K4RlA>8FvT6rGdf=RcVN5qU@ImSP53L+E&LJ0qr5sacPe!zoU6s2hX2zM&NeJ5+$B)>FaN`vL8Q^b> zbXT%q4+pf%24D0ndG)8a-Rt-&pIq$xFn786l>|nYOT8I}IiZ0QKsBgcY+7ysbd$Qv zdpqX{&e-XfWH5o*k)Ti#2`T)I2|JemT(vxB*NAkZOQ%NoRtj(JzE0O-eM31OR zx@qYXD}cqc=3=QZEahZ?X`~_QC&+v_`@j2YLh~Z}+X4V*aiBkl3C}W5@7q)L zR~?k8zTgfHFAV=|u9p_{|6c6Ba?YZwdc8La02X9F{SdVcpzQzDgY^R;^{6~xuuOjL zgV_S`<6I<(qzIED=8)u}VOUWhVQt~UN&BDmcsQ7-`>=YvuFVv&Ew%C>gDacnsp)td{^d z4y6r^Ga>|Mc=GHoK++tBKjsC51wK-lQ|s=G2;BWWE`jiPG9d6_7bQv*U+#OUa}B0K zgrYByWlLvZcPNE0$7NsJI#vbQx7J;R`QKI>5WgRc4eS-G62BX19EqF zx?dCrtqYI2rTz$dSKt)s)kXtfgNkF_b4U-M)>!S67?>;;%tlPsksua!S>fgkOlurA zo;kgLjPUo@u65NZe3~>aArjPjqI|b%K-`u67#-JoS)&Uepydlr=!g(6OwIKzY5^&5 zEw+b|Mjg$5IT2qr?I5ir8ER*Y-=!#=_tP&w@2CWDR2~JchwZngjD8E2v^BXUbW!ha z4lnx;g~Ie~v$^P~Fu$#LN5eFTo0{lO06FBQWR!ypLx2luI~`0h?fA1WlAsWrN^9$o ztkN?$4N0tcx~LaYgz#`+j-0yUD`f0bs5G$dk9-ey`GR)O8<}zLZnoZelDi4jJi$#z zSL{}jwL@4dCet!arlRMsrn=`4FZ+D z1Zb#fC~>I9ihn|@3vhD@!azjBkI(}gj(n@(XUMRKuO^sF&jqXHs6M7G1&tZhk*~Wb zp}hIgC6GhI_VIy^zcR5H5AKAs;Y|~ls7wvZ+8VfuXxL4HQ)Zi_?Isu6Y95OcNbkcVhM7^J@jI32S~6+Ak1l9j zXw)ebdk&5SME=)_k8y~Zp)SpaC_Qw%jvR(8`4cHI?q31w9w#gMhJ_t(mGJ~x86Ek{ z7j?pM{YGNyJH6lno%1kl0(j>P=?v5Z8wTWlZ#gLg(UQ88YW~7R@6M)7hvw?$>Tiig zEh&--p`MSGmhMPgyPIZsd7dFx<&@K+3v@gdUcWn9&p7x_NQBK4KnH)GbRcHwhp+`Z z=T=C_^AO(^1Pe5*8!k9{Bq(px6{@2=b&2}3R>K+sJE0eh)SMENjQT~C$&yI6yv-e` zDSC!1OT3IPSds2>j+)Y;!7tVn0~($bU?(?h66s=^Lfs~YV%Bx*Ql_rB%|CH9YO)BmJW}fU#Ii9uG5+{5qyS3!E<&jF`;zkVf+NeL^2b$OhvRC z%}unh_ti2^z%W-xjTluo*Trt!lv-QPuvH(qkrB#D8W4J}uhHRufvnK@6GcbnXah>H zUpYz~5S+#$kzN`Ct}0$N&bAK3*LJ4DbJ3Em*}rtdiP(jP zF8>)(Q(_?&8OQSsm5Ni0ldld~t}1u5hrXyY6mOg;o_4FwUF72#yTUuj8?h|;pg-l- zdTRSuQjGxxg}Mw4yE&eD6aOQ|0~e{-6$mw9TUYb9)S=Z(8lA z)!IecTeR*Bruo0|xwe*EDNH@TAbJ8mRI99S5)}rP(6W$!tBq67b>LQ)9yH`81#{Kf zR06dMx!_L}D+G80%!=Tne}lNBkPE3qu>$f0niP%LS>xeV0skHQ|2U(I1h$@Z^T3#8 z+KhOMPQRe-Oew;jW*e zZlC3I-+Y=wissT2R3N1Qz|6rI+J6E?qD;L-)QHl!7K*4UD9%Jrl!X zUv8?A=#H;by_ixKILgWoU=>9e{+>fsZhek>kLb`uDL~$R=vjP0 zEa+B%99475gD3xKtc%#Z-4$8+?y=`0N*v2gv`^Kx5kT%Mx8iXFF@jKHOJv6@M<8SK z1@N;1&>Bbesj=hTyC}+P%wrMrMzCglsMK)L1w-U(#PU}lOWq?Dr3{trfy=ctWgpn# zrQ<@3%EF66ZTxmC4BprAVVSwlJ*Sn<9FE|(VpIAv?_GS}9BC|xtPO}!ZQ}VVn>&^n z=m)8>PO2Ul_tHC*9 zcWqys0|5Q7QD-Po<=7R>?E@Epa4yYltT^H8%gTFm-3!(?bKHk4+8Ripr?rH{xd9gG zK{EpU_qo;2_By0x({_sBu`dCcS|{&eV|vjOezj)Q$0|~`|4FsoqS2Zurz3T(2pab$ z;PT79=R!9w(PB4czdAE)rY^@3h}qNI=1U6sE&%Vs>%d7p?OJqLt_!A!UwxZ3=7)(a z2I0O$OSJCeAa1}Ocq;T}F7Mbss2x&14YL}Iy+J>wY%Lv~7Lh=6TAe@|??!wJOMxlj zLlN=KZzo+QQd&J7ViC=fW&9n|@ zgR$c^x{)(`y_$!1;hDY1b`9@~9K@S4Y~*}Vqai-x43FuTel-3Vn|)66)R+b)tOx%_ zHlgGJY6q04mgYwN)H+Vrt4=;BlIFSR@i2=`gB-`w*Wz~ zrLUE?fyt;3`BsonGiY>!evCA5g-i2oWX6I-P~iaY>o3# z|D~q_SRDUD*GChMeu-Fp+yG=(0lr~UZPl%&o#6dzKpg_88i$-tvp3Ii{fC%i?g^qs z`=S~#5!r)vj>G8fHhneWFRUHkS^O1xUb)*qpyncj#LA0@AU*8JMWU`lGrliTPC>Qp zUav0qaPhn`9lpQKa^)$%O&A^RO};vkHc;6p#> zp>VIX=G}C1&N==c53f85J>E2iUzjaz_zntjgJH>VxJR$MSF z+XPc`i%QJ8E@I#~Lk0^Rqv>I+l(^b@0skJhvoKK9UmA-R&)|NEQPtm)@5DaJ#6Mx# zW)6BWf5x#P4knj>dD8m6eW75JJBLsIauvu=_}-rrBm<=oKonw}89+`;)i?6_T7w9h zgR)wV?nlX4vG1zy8kaekz}nd>c{9X)3$riL7>uu8e>avJ9`h{VJ>y0>vZB7mx1nOH zKq(+ZE;o3}F&6gbt#`2+?@;6(Uzxmo8#(2mW9b6oi9hG>+?2wvWIFs*W|&uf#@wu7 z;Rfe$5dDW9Uq|5I(iJ~jp3%%VvV@WSg~pg-J+^@m2&fTmsRMDAXlfW|HdW!HGo%rx zTEkMXA*I#RtO&Wn%ps2bl*RS4;Uoqv@6@K*Z!~*0=iACZxn?MX za?SdX$UIaHZ-Rk4jz?UwvvT9s;UXa7t>%T_{s{7pcs^7V;R_^Bc zO5mm)G1*^E{E2co+tc{WV;J$^qcco+{L?6)1?Ge#hp8ohoAVVS+%>DccU><;c3*Lj zv46{1hT4O!VF0$m7-tJ&TqNN^&&eVS{-mpbVV>B0yk|W2z^)}%D`H3sETt8$D90)1 zPrIv~ULu#;GN=be;~~aMtFN=4)=#_Y=cUT=h&>lI(Xs|W z)ebeak+@OmK13W`i{O;Hd))`YK~X2PaxbvrAoJC*@786%52!G<_e|5!`V8{p13~c7P0(H-<6$l_)M=&18K?O$j#EoSj zCS#;RHQgrp_9*V)SE6TzBrp$fK zM};g&#f(!qm&jV9sH+ei%?UKt$xDD*^JQM)jR?4|zj^ow*Di2l=#*iwF~jEP^-kAt z>F`q~g7`5XrCR5rmyXaVTneT{kV=lkZN*fNR`{uIygbSAyO;>Yop;`$yBjxf$uL$_ zQLLsFLgJ%NqAyS-exn)45TGZvA152*^xVgSPvsqkU>Bo*%-<9MnRU+0ME&Cd^bdP7V8^f(p(p3gHBk~iYN==bPzXr z1qvI~sJ*FKW?e<*qZFY;$@CO})#d?afPUV?n#Qy;ET{5&IZ0)#v1ZtukB@L%GXMY#Z12L9To%FKeYS#LsX_h07E&8o(}eBnIj7m9-#=V0Wt6myR%j^`tvBcJUH^F_|rH zNB+mEqbcdWvtYlSiiEF^&qEG7wN%Al9!VxkwXA^pGs>X@A4cUUHBAu39WF}cnUL<} z2i*+*@`*P|B?`7C9u9=wP$Y;)1eayD9o`k-Q`_#$MwKD@cdYC7gX|;Aw;9Nq~8Db#1+J8rNNobAo7J;RmX6R-Pb<4S_Zjt!A zvu~Z(Ghxkz9e&skza=`-;;$Bnm?0gPG!RR}@!BX+?-3k{*%RqLCSH|ogsw3eEq@^A zRn!{DU&!9<=KO3&S_~bc>Wo=AHjTsmK$AdT&(>pGAG9p{MdN$fc)Ulx+7rVprfMVR zyf<*!xK4X*eJy?q6&LPy=w$1gq_4iSG0@#ilD+35BVi<&ERWm-2${8TQ6ei&ln&}o zy(maA*&iC7@ORpgL(P40a2(d|Qu|K4qSakh-CM4nWyaPe8eedM?2XUs#pHCQ#$$q; zO_~b7`|kPt>U+ylm{Ad>AAW@V3{oLUc>-A!ugKOUrwtLU@m( zl@*^MyqL_sXH}l8rIcc+Tg-Ins8Rk`VZzwv1eycqxFx&^Gn*jPxr55zN_;_IKyb!s z#3_I*vHncLnufl6axT2|jP4V6UOZ}TwTBqj>fDJB;>)m^#e>E>MXMP)hc%X+W2q|e zF)-&RB0@2>5LM9G90=hRsLipe=hQA+SX5ProtoVJl+E~-18417q+@2rkJbY}cE$i5 zEz|NI4g9AwFX}Q3G^vV?6|nlC>U(`-D`e%%d%Lv?Rhy!WpLetO7w$@WzmPRxt*yTL zo#~qBeIT>cM>IBfq|1Nyz?_hiN|puK3unj*qm{551lh`mt2ct@0Ui)gf*yO^xJ$4j`P?G9W5YIP(bBB^Pn zTvV@KWXIf)ja!1m+B3%_^<&-LECZZ*fGVP{#>xSnOYF)QX-J#X!wvZ&I-4Wruboq9 zH7s_5gu2be(3ysa*gt2}mZ7!B#%&kinR}dBK!zlHm?t5n0)K$LO3X!EfO;)Xo1}J& zh)pVFog0X`tRWDIl9w-vsjL*S$%Ms!d0EekX{7}gmH~W8JlG3;2Bus?a2!blq%!7s zM0~3))}I~1v-G5;)sfeD!h-~=A4^OX`z5%==^sP`fv!nh&e|#<+6LgKk25JR%MmV$ zywE;aNUvBUK_a`$WTITH#oH)iC@8S1KW)L@*hTQ`4|dlS{qu8~-jP}O zg5y$3K8lw56G5ZHM6~a-dKR0AH)sby#tE1kWWB>J1PA7XU}}5ha_<->T^rG^D_7w% zRloUz#>(oFD6q5%q1_5FTF35@!eCEDx-F3lnq+0u5`?#%b_0fkhgrsW88)hP_73Uy zT^4%1$YgvXm8pfd2Ppy{`6G!;5g#XO5z1~&hAbG^<#t`c{;p+CBp&HyT)s}aS=UfS z(%-@F+0t~b1T2Ffga;i0(`1g5c2P!q>xA_lJB{u=?#+yi?VgfoWAwP{!vrUNy1)^- z_DB2u-3fn6mg9D`@nJxA+dV~YqEYv=?Tau|d`~YLyT=Ua*1$-Pk-h$a=iDslL5-Kb zp_5UM!kjJ?-k{kRed&xhUY~6B%4O(H4voBofqDI;UIf6Q?3Eo}jzy!Vxyju@cYB_w zd$T;Y{PmzPSfGF-f+RCcX6jt>6&yP}fd{3~Lho|zI zW!TW!)6&jYoC?ps^i$x(Ba%D(N4_j^k937N*9pH;o55<(r|H}Sj;~H`hcxegXqK%1 zkR$PBAi-Gu*E09WfX=f_XWp#>Q8+)bWLbL08C$>wEpk|b?%_;h)hZ;kYR4Dn>>a(O zer;Y_f)-h`XG^}g+&)YL^ItIqbi>~PCye*Jy*fHX7o4`JF@bfbKCfgXykv+md;id{ z;bpAZfW*+jol36$8)i4vT1dXsPJ{^J5&G3PV3<2sJmRD1yWCiX^0bptIGO8E9pa%H zz9?Zgq|T`QnI-8%(Z|<_MkFaJzz(LP(h+kyciePOYn@T2xv zxuRs&EkMA5{*pU=+DpzeYrB`jTybsA0Dwrkut@z!OVs)RUvrnB*ANpT%-O|jw^$&# zs^iK#JrLjv@pj!0PfrX8(w=~Q|OED50% zJeff_wpfAe%%Yqp6#-uc5G6)J=IMWFTT(8`|=p&FffVqcQ-zt>?srpi%=m;EoFc1BqofYwtwuGi&oKnKm^+OESM( zHa-rQxQArEs(d!g^$S4}W51kVOu7z(6AXB@t;$BPX5*Ib>` z)HwlWW(rElfQ5HuRq-aGK{VxXK`OY}lx@fbJL~Z(x=+40+ReYjWV7pX)>?fi3lqx) z1N!GWZ2y^1`(HRdgFNxxK>rIM?W48FWsj{rbFlpT3WVX7(am%4ZA1sxUz%UVe`)3g|Hb;vM~8x!6A%X$e`$7E z|FN|>^LPCJ3Qu7Fhx6+U7>=nes~rY?>W|gn2aIM;=o>dc%!OLnR#~^U8QaN#Cyx^) z7qI19;((6;Z3S;vn?ctf(`1k^4t@DZp4lOJwH~r#cx^;b|2N^@Tk*h#t50vW_vZAW z=i+dEeQZn^n8LWP>JlAMq@%l@Du7==&y<5E`}W-UA<{X|!v=Ro#ObDE5uFS`&og3( zRs)9Tp1^j94G{L^XTkxIQulQJez`dED91Qx@#LTm>DyFMqK5QUbV*5 zyHnj2WbcR&{3o!-Q&UU?UtCK*lE44q%GvOzx?J}-u75HK?Guo(1dRPNOpH~i7qvyH z&x}uzz$C$deCZjOe3*9t1d)`nWn(=bhRBSYKie7m(;}aRX{ol3h!LU}Nm{sP2Cx(J zD~H^|+8Q>)QOSR4E+?A)*#>k{NO+~Q2|gvO#Gzu|Z8dl;EbXRF>lsJAFkz2EVgwG3 z#-d}X;zUOm)|L&bOm1gHsf3k^IAmDXU@fiVrj*q}ll^tRz8g);BZ+oEPsDbuJU_CH zz+^#eaO(E;+&{dr+J=7eYl-Gf+1D2&^ilc0e!+zuVI3KK)*W1C4Comc?EN8{8Hxb> zP)5mmpNU3>O`|*VNS#TM-{#p$_AP~USY$m_ljOT+!KK4 zfPNmnH(Bb{P}k@Xa`-r2c{m4=moKh&ZM@KPDJv~8_TAl^9`m!(Yv*NXkRM^%Bwc6X z18nk1*WLx9$DP^nc8o(f)2CPOQSNE)_d?kVPv!#(ORuU)gfGZYtf#d6FoB%M~484zHBR`F?QuTx(yj)*D};M?_zeKG}q* z_h|#;+%*&*yp=3%?+BkdG(ZJ6+Zdz9gldiX^)IIv-uS`P$Bk7rV;F7L*Z~vR^o>~z z{N1#E>j+JQR9G@4%J(tE=p8g9+ zDN&67OEZ>f?(NNeciGyqk*9Lwyqu1UeU8$L4EtY|;<%CSg@_gDZeatQ=__nQ6zPG| zTZ>8CCn68M`7pxo;}})4LDTR5!|eF~w21zX7S0>8d4w=>;I))> zqW`dwWV^}YfSoQYnhdPtx72oC|Hm=-nM3RCKD-8QeTS34@sBGjlirL*XrNJhthzN>dPIV}$RPbF4DD_Rg zl5??hjjPkuF}S=QI03WC?5uF85KDVZ+_iTm8HG5$l!V6?f$H*S*pN*Z6)jURtJ}MGX-3NPOrX z^h`9)bVvBH;6NGFf;wUMW2_xqwKAksmkm#91EGtb`V&e_kMd(Vseg25R;V6j$y z-|wgPn~bjiRIVxsyZm)32G9CsF4aLl>iCz#XV0?}w{mrZn=fZ|y#iVB@T=X*r8=Xx zOUc?$5dFIW5WwKjp5@xW{13B00f9>^m8LU_)C}Qy<5vP?|1|YkZO>d>zjiTsOv)r{ z(EHuxR`p*m!$0|1FW2(MnS>MDPXlgh+4ywoMLZx{a^da`n@ zFY5YB^Ll)0*Q;~AHV;}jakG}-rjawQFO}_`UZ0bO{w_Ld4@%QbiB*aedDoh->-rqAlmzPztxSi^_;Qq{fp{9~jE|^SK zw~vY=FzG)v&hxJhsgafm{l;(W!~zzyW5tmiI#N+b&jKQWwr#PwsV>s`~3>GD{2|20Zntp5AP;n5i^i*B{gVTWEME5*{ z*kLKS37xiFNb zm*K!YG@O{`m4kIB`#e9EM6&K$GITUlu(p}1&ruC-RQ@?kVXf5@JCQHVe|TtZvb-C+#LIvw9fX;{FKbTk8k6%rD#9D(2VNBv!qvTSj&LJI0ba6rA6i)dEZ$s|rsuPQ<92|1g;Z_z1>@TqrWL*Ie&mUqIz){q#-IMV zra1ibSXej{DsT$aN0oDaz*e{fyG2i5`<@ivqWd<+QinzAk|gv8{R-s#AL&7n9 z#kNYC!)`|PX&dk?aHc4)Qj-#+vhIU4D%gF_})(BzIwc_ zf3p4q?QWo3Oy82$sf9S_`gr5Udt(*%&t!a0jp%QyiR}GCz2ImAjKesCBYPQ;2}P`8 z)|#H4pNl@D9wpSZZV3l_NC!~0%@XpbSR7f_$23`ZZ5V`++#h-;)C zL(Zv*%dL3~)9>-#moG`n_=?-e}rP^uMzv&u06Y?CMY5SZxg52NXjlgeoFADb? z%Fk#tRn>1_2!J|D+N~^$Lt|W$A00x#n%%c$Umqd}xBS9+Ik1I>e5h%JxZ&|&Z41D6 zWiVIypu44L4l!KhH7A#YomKko?ri_!-6ZjGK}=Ze{Y+VFmqVKj5p2%pJKn26CE1Oj z-OnqzjJyG0%grmjvSTylS};sI(LxFZMz=~Oe2o(%eBYND$CtfRUR`OA~t&dR93x}M>iiGIc5E3^ z8i)UqUGwrkvTK;0h>g$$4hYF{q^-Sv0U)be-BTz};3K)8CQVv0mn-`tNPBW!`REJ% zXjP@I!>6^KlefFu6~GB0PJ<|BuDIRenxi>^_~GkWapKt9 zFW!Q!E}xU8mk8Ez-`F@EhnI;s3YH(S4XOnby{SQ6^RSq9#JpeQPJi z`{D+-*ZSi+X_iZF-0MvK2no=>vmF*nNhI%e!e*%#t0(TGld}-qG(Eq7(glG>Y39C? zmF0aulsCigC_VkD|E`Lo!4&&u7yL3_k8o%o+EL8o-QX+ z<>TCz9h{$J$r*B$=qq6McK$n;m{r-5K6XWysY`}P zqa`oaS9XcggVHBo=PSHsl~_x8ff`^=JnKVwd>B)9= zK2cobU+j2KS(*zjPJyP%Fx?-UdHPX)pN#T!I=8Mt`x zYapAT{U#EYE*t^(fi+U8OOTSzQ&Hpj9Y51;)-$@oHyIu^4AS0CS{v1WtUo}ZYs;=OK+}njn4bg;V z8fPIQxQuc~_v@z;8IKUw+Ijoy`Bv6e9wmJ9S8K0I-LsePtHXk$zi=!~3MbI60y+p{ zG^p^CTT&--u1{9UncrNs8k?IT2KsigSW4m_zY0klJdttl=V{g0%{E@D3m{-kiZbM* zgDo9Ft1tG^LY`6@Z4a-~W9m+Wrv^CV}gN%_Djd z68qe8DiS|b8ydaH%;4h1r^&hLIxD$21M*U}**2Dvu>&@F9U0zxO=d|2t~SiGXm=PO z-uJVMaqKr0g5y$2k#;!p3dns5x$CZ{5)7QW5##I4V#w~UOiRR;)wkw`#^&U81^#Qv zHhi!gap=h>zxV$#rJz@;4AsChspeocrDvJlq{`FTX~t#3sFyO~frp=%cd%XF_IO?&i01O`#zPAE+<6qG3G|pKSR1|$JFEw3N z(xXBxGOz_TF$!-UjmtD}x?5?b_{DLaf5+oPxle!o9T*NN@I;?zvo8*|zCxCd&_@u6 zS_G@65MG+}d8eeB3abgCg|El@btaj4=&PYtJ_dTb#k)PJ%E?10>!YWI-H6QDATQkK zraKSbU!zSXnGf$9g68Tu;FrZqi z09_JXsZ!AVYAGy9I)07ySB=`d$iX?ro~YnqJ%Qa{^!N4;8q~+vqv%slk{j#7ps(*q z)|AY&fz+NF-703?ei7$1!Al)XpZ{I3xoQTV98DVRg$U9hcuZ1I{|(aP0)ph38K*Yh zwVW_Dug{iSj?3LOCy069hJEk;CmfiHA)_fCV>CDNd-%JGfGj3}n z-nhsD#!5?s8|dukKbE)c9dBj7@|cHrxV6e}2BZ}>llLedh!$k?WDXlGy8^ob5k4V0vU2%muXJ zK`iL+LF^gM4Y+mvk;CS1&TYgzsE=j;U~l7K>f!fK&&t<_Dy*MoGezb@A75qj3xI8y zau4^mwTHDOiN7>nlaV;z`TbdPJrz7FSZ@Di%Fg=B^u&kW_Kx@O~7@~*Dd?NH3dp%FS?o_5&} z{28~vJgW%;jKSqU!nh0alzeZ&<69TE=?|oUS4C3&FH=T9$&@E}dd>Ok;lSiPgBB>A z9Yzqq0P@y!9t=NtbUGKKe^#XcQ5y{QDX;>gqz6qC`GKL87i`rtQ*Xuw9Y8i3jnM8G zk_80Nx&n&in5nYB;OfE7msP}xkqQ7})-t19(PpAlH2i5QBhl3>+PI;|2E zY!Ex?ZO}nuAWy!0lotn)?Pbvmm6${;7@_^pYnBP-?dOzv{;9Dgh$B^>U zp5rMIdu8@XmtbZ)W&h#C)qxJFRn6`1A=!iEkG&Uu$%Yx+O}-H*c6W2&t>YVdCYYlP z>C1g!|HXM!)=y)`vY;+?cV1&#L4=D*Kh0QmX4EHehO5cRQmPD|f7lv=?#^))by63Af1_Ueute3{T@G5<`^)qQOm19KrsuX9-KVMt z_s#{8qWj)WYjf9yP=v>2K7Kx0>%DL#t@(mXJP92O5k%t=fP8-*50wpcW#F~P-i_<; zX%A9W(m&WCLUIBd-(YGEL!UM+x9WQvf>bv@xY1@0_rIXs4f8GC()L-02LwUQHL&!J zAlcW{G%u-kxTuq6`Sn7<_Y}Cj?0bao-u)j6NQ)YSRaWCnK<<|8THFC{stZ;&7CZ1J&ivOWxA4K|&P z%stW|7alg%PY^SwWg8lOG@>0^6_{nK5pV0PRjVnIBSf&c9^Pk{LOBM*E0Nc8R=vS- z0W`eSF3}l-80f|_Wg!HoysWY-xvWy`iEd=n5|)z;#er=yZ}*1HjQ&|d)^y#Eq?Ndt z>mfI~%^sXO)z9^|^VHp+-Pg3vyRaYP!H~>uyvjVRM^~kzQe|b0J`=A9rbpHji?g(2 z+pfr^dy1t{`6NmPV=*28 z-zj}uWEB)@-^X|3mz{pfy2#Y3UQ61OyMNe-W!b_Bbr>;~n88JN+=(?H+6OYPDy}qm zb$k}LTXXYX%ENAvL09$ElqmOiypPGty_I^s5Dpp)Y_gh=sjDOHR#$pHaWH=(mv-&< zefM(l=p-ih=nsR*5;%^gjU6mVf_Gl7gK*4uqDuj_joVW^xkVm7E3(U!qU&0W%4R#! zB^Mvfnd$wGM%h}qB{{xHe8f?Pavr-V6-_$mo5t`kpqps^eX4eIc28OjH&S-SF|;=N4XVq!=9ZY%lL%)fqyDIfl6@Fo^T7dU3}q=mo>ahQn*C z-@g)PS3M3X;Fa3wL^NvE;?3}0+{q;+9zjkg$JNJ~x2>_BL0T@@0IV9@?v$T*;PD4q3ZM@Y}p8hVlSdmkv1J(Ox?J$-Y!$(9zwb*zqF&o!PDP zrfw?pO0zMxe&T%BzCPLR1K^bAQGM8b{IcMdlu+hIKZ<*7eRSW^LM1AY^D)6C#y&xv zSwG#rVpkgKE2br_oK)X7@wd1K8MJ}`9h`2_R}_E8ok zm7a!kg$tOFv`sG+<^)}B(#l+W7h}wPEJVFIhvl))>*V!zc~!z$0`yLaiMSbWY}6~s zo9+XT;X8%&ZvoaBOG$;OxO7sIzOq!(BV&7naC|wNrAD*-&A0b*n~P-kCKvUtWQ2av zny)S;c~O=C7qawSLk@CW5K< zJ^#>PyeQ3r!ScFmpqmt);6LqgYCtICSp*O9wQpo@TYNt~L*H~&B?eu0tdy$h1jN8k z0*^c_wzAC^7TSE9k}~dmr$r+~zDOKx`XU(2BU>5USJ5hJB{-uNTNioVBHjGMWXV{o z=CGu4#kksVusV0*pvzmA$#eI!Bg=Qnzf2P@z39~3uo!iJq@e}LY?6MF9={Jc zid3a%Fw{`f;A14ANbQ~;+lQv=%HRtb4YP6b-@a4?P;F@b+id1p&ebawpqT6Qp za6VW3p5Sgab|;oWsK`0B9N@Sy~p?V>9C$9jszpEpb~iEh)ko^9LunK z`jvGPiPtfrf&9&mne9hFrL-5=nBtSri{hGT(=G|#=*TmyiRtdi6PvPgf7fPadv$uk z$e^`f^V4u$c%8a5vh|Ivt>`N{v=ID-&E5fMG7PU0*UnDU0=qZy=*UK~PwT1g>*uNi!VB;zW$Ly!lCzvh#UtyiX2MB=Goe)9)U#ihJ&1+!tGoU&%Tu*u zzxeH;8=#dOeNSaJ#R8y`5(vdf=vNrPwn_0FVsp&~!btfSSH=0NW|(wvIfKJwRfP{Y=#`S5&_7%3AtqE#BEX~Plw-YQ`j(AGler4uDSjw znt==c(0`(6ajsV>3U@yqQg63#>FE~EQ~i2c)V)I`%xjRcE-*Y!a(hm@LVCu_>LFyO z>xpL97cF&C%4iED5GY%p^=D4Jm&3f&UIhLC36l2E0(054tdb#6@vUW<%B0VU|yrn{u9Q| zg3>~2koIB?QiQ^W|K%~xfDnrju)u4Z*KB}>1fpAn*$W4 zE|>4VaS=N5I$Sj9B{QG;4=HgvsG_-N;D6wjn!_Israw71=-~`LFJnjwoz`>$x@->@VY=>~Ro55M@AsZS+}!3yM*1F`+! zEr3)PPJVx4Gj(?JAX{Sn>(!{C$4mb0LRn)sS1#Y@kvc_uei}Gfl_!o6aEYjsKtJBx z>~dXA%BpaWjo}$5eM>#f+)2osO+$jdh8xwC;d+P*Y%gv}5kz-hp}7#SiD&_aszY$# z02C9)V2$i(wAzNgs&9;#?wW*)>eod-5^Ts*+ZesYwu$b<%%-oP;~9$X*$AR<`O@~B zKce<#K7oGD0D84Le73SZ39WmKfAEofQ_bwgC5@uOJeRv~ri}4mWtopS%@D99SGIZK zb2*m#mL$h_cM;|v$v3!C7mZ@=-P$6iSB`$Zew|b?ETFdYfSkrV)6NafG07k$gci{k zCqr#W88PL>fDgW#rZVXtC!eYC+gymyN9bCqEB)22k?K$jmAkB4+9}Gm0gJ?lwF@9+ z=_Pf0$=b`@J4g$>x4cCfW4=qQ_j|2vOL*V$D!IGXZ_Yfe=zOKv8rYKI%EC;6UIic| z=hcxu*z9wZL9p}{(q5vzSz&NiZ=NdYAhuH2r~zE3i|hwKY%;${O}W-QS$~#$xh-cuRF;8`7xV4Xt#>??vsyBL5g+x|WY@2j$6Rb*61; z2c7r)Q}m}R?Mq02bjXNE^3w5w7feDj=gdT9T$v~;a|u0$>=TAZkjLon+7*!6q~vrm z)P5=;%n8l=qs50}oKqfbC{!o*aE4-~;wMGl{EE;C4-|%N~h|*ymje2)n4@SlQACGqkkE-=4ULX41#lb zof~lj^wGuugFfUv2SBy>3*l`2oljFSC6%7q)6b%_dqxu=ryqvfUyQ$XSt%PP>ui+5 zq3U#>JWu&V!la;%&7y{unNg5Aq#o(2-LK&HKWBY*HSGt7Z-3URZe4KTZ&0}JW>at# z(cU{d&%%U+{dc>@|GrplodM#XsWHn8HgKEBrVNl_$NzI2857vg_Wz4F&HrT)!oGq0 zFZ&YH?-B4t_c(Z4JR)Bt!Ml`>QhTzS<2Hnz`77x!-3eZpza{WIHGR)9s1H30{u$|S zmj+-dh8)vKsk!v)ndRknrtYrpT8GcChCeL+z4)W)*-VV}zA8Dileq`is6uoGgLhCu zwd9drr4x*^NNB#(5AwF*L(9eYp2FvU)XG#Z4f`BhFeYC=p`GT4XF9V2I*>&I)hUZq>n9Ui2Etro7q-HczYcG{Kc}ln+XI_Mem1` zFBN2kmIm*51og4oL_La(J{oSwgQ4)!YZSp(709t|40k>84Csuo%dJYvuPSk$=3n#_ zEbPdriWE&nc*l0z|}XW<_CM8Zgx@JJ_ZdSRPR zrAOeOlwK^aiB@S@Cg0Y~PXs#`<>zN#WJT*Tk?)NF54-QW@*bT2MnffPx$Z55h2}?= z2cMxBX?X(t1x-7^t=OaboBfgppNCb}llg@gAAi-U>E|fRxiy_`4-pB!$c8VWooa`I z>URN#klQRTMHI&vqFVj#pQGWl2j_GDGWo54UHnv=-CHvjkZauc>-GduE^i)gl(}WI z>UxcT!MIYI>GH9_yR08M`E*ke)##&ZBn)U-k>UrI39zU?h=kuBsB``IsjQ;$lOyrVk?nc_Z%3Zk7!9nO6#&?}+huCT z(DnSOH&>*G@F^y47w>0Ga1e-3-x8$n~d+!Rwj7jrmoH#`=`jXH%ykTWpd zxae%njTZsLD??N*%zaL{uS&Z3bt?Z6=LQY8M?8Y2o6t}Kt^=0@IT~Q^D6k5T`iT@Y5Jy4hJsG-(wPUfByyY%v>VpRpUUyY7yvE3>Xo@lOm zcw(TH9!xHZR3r|Pi%lfm1{%FprVYAnx4-5)6%=MF{f%Gsn~oPFKN1zfZ*}M z@S`L)DHzBG5QN>DW*qfCCw^SzcdI=>n2^c2nj{_l_~AtM`kLZZg)F%x;qy(e;*?Os z?cAitrKA*sODyfA!1YET;2g~a2vHrA88c3}Z&;v}j_r37T&pabPk`!hRt|6Xz35_n zX#buISy-|6-uY0N{vL2+0U`So(j( z=rjGD{yzuy#Qw@zC7xT~26It=hlcu{`xZtuXJ-aMrs~suIx)e#(9bO ztRBB+v)q1(W2qbweGC80ve%6HwKYY+)8nj(X(RED3;S~B^(p1m!m7%Ax@O$!Gg7CC z`oMXdZHcI5`YZWLjZaY}9Ce2dgu@SZ>eCWce|Av!oXjA-AKI0Hjn2UFEg^RNqMT;V zz&$H7KUWzM=~K_SV(C-zMWF{fcdKlJ_b9nFGi_=zO||1~!p_bCXN~VB6GYy{y-Z^x zmogo6N}u_30D9l$pYI!7hDTv)tYe(XR`q)4p(P#C6RXaht_n;qd3KK92zUlYw+Db3 zy)-4#x(tx(Tx7F7WBEmM=-CZ+u8XPzY(G1!0whkT8I0WC{_bF4+~9Tnj;hnx#Nz;2 z5t!T8lCuhZ$Z1^r?xzix7DIF#&?pf5xx8EOIptj4U0v1OyTq`ZlAAnFO9pZ)O*K_~ zo$TaNz>_8-9X+7iZV1xX7s%F(9Azji5rp?(D}~EHld&l{%1!;df0>F0<3VqNF5O48 z1;#aC$o?!^@Bp)uP8zvE&gw$EU_fKLbWIZKKb`Ov(o+a1FI7@{A5Yw6A%0S>Ja)~f z@8PNh#|{cibqApDLF;RM0BL;?{_;mjXQ5_A_pR8QxV9MAN$-k1(L%T9%FMmK3CIkCNI|8tfg@_G2bNm zdc1hJeA>o_>G+jwFj)aL+}$l@FurG~WZx+}bwHDA38Kg@whUI+8OS}I;cdz|R8IcP zaELqY$|893$l`U6+YQUoqj`k@@3hkP!sulCdMuX3Jj?#6?@(#IcqEE#~ z<~-)?m0s#Q;j}l8sC&<0%=H_~lD{KqOub|`bYWQV{~|Kf&BYg6j3g_ORLgj+gP!SxpJh#hnv z?nuueGPuCB%*LYN>@lqJDbo7$au02>JPbwY@|@n{^+j>y3E@zWaFvtsRUL`=H^=33 z0RzwuzkCAcj1$=&^H_(A&w4HeranntH@#QgKsB2Bm?#+~j@Dh(GjnA+(y4KT6d?Gg z8?-P#2ExFL5UkgU=GobiZi&Uu#O?lW-s9i9-#X>bGUeQsAv|=e;$f{zqrcwm<5YVV zEfz53lEwdXp{{JqD#_B^22*Q-X-tSk)X|rJe-rs-$j}>QTO$e{lqACL?MVRYc-G|} z$-DJ7za{mIYRRlaPd9&=6pEYe$rRq&a-o>{r+!V5ak6~ZUH18F4m^%Aw#E;E>?D1vZyA($+Eog@J}jN#x6Z3{_xKT~8*iDAd;i_4@IOEP|Mkis z_{SUskHEn$;x=j;L%M?&+crE&&n9Y6y;OLNPG(otR^Ftv1Qa+3@%4?I^t(Q8T0KzV ztJ9VC1p3PrH;Q0zjdQ?UF^R-vcw8MBLk-YOK2s2_E!%v{I?!#6mv-p~h&`%&h2eDo zXHfHDU=35_Okq^4a>JbC6cc!%Y^q$kx(-9MBnlLXRue{13Sb7D~ z4UbC&&~~=2WXX}3ahm&vP2ISoEp7N}>RLBH+fb6J(%YI>RuAcS07qX^0woz>T^X4Z zqgpq%jAQpXp`D>zTNGo1JZJ4UYG==}>$u+iEPBdXv1~f&!ekgS!6G3L76k($XBZry zcHqiLH-sj-g`<@gFi!mjuSwPhb3csBbe}OXg+9EESR`h3xc@$$bB7eYpsjm%FsEF{ zxi!=1;hXM=ii%5)QACao|IVZB;eZ!u#0&`YhW@B=s9k#G5k1rw$W0DOvFJ?ZLkq_VCd=ym{w^((O$fO!csZaP`e+K0#1YbDpJ5lz)tVb4L4ao z!n?3|$vZU6+fOdvjd@_SYp_P4%B@l0p>c=0>LHdO-#PM)y6Ur2LKXlww+ww4L50T3T<@^y_;ZV?tFcEDfnK~qGV;`?4ER{pjuBW!T;sXoU>lN46Xh>?g?%sHweax z^GJEFo6-rJOU-kHP@Xln0F@;ljDy-o&+u2(=a(}DiqB?#!8=DKCGLbg!}N+-@64|z z{lmf$-KYUSP%>mJ2z7cY1=&qi$&YGYsB6+UDDEt6&lXz}u5YHAcVz3>o(@cwiMUX} ztkirF#{B_1iJ8Mt_(_U4_f8=Pc*cJl~|th z)#Ybjeeu!gv@t=13B`LiA;GL%>rQJN!S&XPZicLVzUWS<7#$AYj|dM2Pb)p&P?qL8 zUI(?$*^7now%M-2IXvv*i)gBz&p-i=*wu_c2XWcJ<|7kaqsO3q&^a0}^(xYx-VD39 zJSVkB86ksMSC5XNh#i3LSrVHLn2%|h)YzsjIxTgDDkv8&o||8?cerl1AaJ6M{mlCe znQ)ZU7@{2mTD4cQa7Wv8@Ovp@BT+u}9uFhL!+h`@`X5#;#@!S)@dj)I@XbVq?Kyw+gAe~6U)al?ehD6Z#-{pvVd4;A3NzdzRiy>97K6kB+mTAVd!E@U> zB`SuWyrVm=sALUvY93UvG!B*5NqU zzM8rd!mk?MC}m=}x?_K2;bRJ9Q+g4R2ok*2#v6yX1ol?Sy~K83d%ss*@@y%N4J{ii z`@F`P(+aJJ%Z1J7o4F*R%mK2u&fns6uMu^%V`AL>fSuU`&U{*Le21EDSDDm+pWtQLvVw6k zPJQvg)-GJth$D<*Ih=&+lI=67>PM6}r9+Gt-q+rPjH)Ccj@F~+@<3^V7d;8)?h{{1 zcI!v*2Y4+D%lEYUXWvQateJP-x#g)_5!k408CS9Uw%s!g*3eEKysxr4jQeO|Y zd5c&ydxcLL@`8+|);{lSiaou=x>HJXQkuk;qC{i&EgU33-DBDUIPJ?{`?%z4{Cw0_ z?QFOmoOW-16`{Qr^n|x(07|LtL43q@sYGKMaDBWnd;rXfyc|wrc~s@?qX`lC23QW> zte-leL+mU4uxQ@~Kb;IecOhTZRKM&xb411uG3*W-7+9iBuVX-wER!lJFV-jORCv7* zyhwx6;LMpz2{wkO>S}SJA)0UQQPl^%Sf{@U^KmvXl|r_@F_VCGp#;@n-)u()b{~Ktip&O{j3) z?@VEpmg(9DwiQ9aKX<7iNJ)AY+KpSF6I2EXZT?wYPM}@E^Rflw?o8K9UgEB7p3$%m zZQiLQp5U{+F%i-gA~z8E{RIQA`j<)5{oiiC`#1E{|8^*c8P|mU_1gJXr4T|Rd4go$GH z+EdO9}3@x%crfc+eZc|CXS~!HOn-F`ORobq?sxvDOT9N zPBYb!$pdRH{vV;zg8w25ub;7&Ud0^>KE|y;{)mmTjewv=p(LvklOPooDEzDF8Qb;j zziL}B;g;J{$=`@`w3m;jZSEIj@@<=oT+HDz?YXk z3Xs$y=#|^Q7AgEV!pUZ0EKv?+x+D<+{c{zRM@xc}EUPSOIaYCB$@&sWuGQD;M88}< zy4b05xLct!g!L1RZ`a`F=hQH!sx|}nPEF~dq4Vh#1pMeII} zV*K>$I%h&F@_WZmhed~sq!;2np`5(0(h4I1dmF;J()xkGmGct?LM4;?;1&m;p=pzr zd(fN}_Z!1ty#hAy0Gar{hu%6x?z9>a1(t#NMyMOJ$cDDQDA~)AWF6jSM*2B0Jxv(w zA>LQS>Q<+**ZsIrZ7L;l_JW(St>9$2l-dy~TO+^Rjak?Um}jof>b@N=;x`f6y~N)@ z#=fYaU8>xAX@Zv4q;dL*=9y18w)7Y+RE%BW=X}2Q?z^@l=xgY0$I%P-vGGfsHk#!y zt{;$ZzM7z(@LAe|{h&~RpQ3NewWKhE;USuC%VDIFs377k0i@A^6N=*qyonm8~g%d)(1VEfE5E0JF0un|*e9YO+QUPDff z#$&iW>~5y68W=9an?5#rl_W3N4GZ=>?fT_ls`6(2GG|EgX3+V$3!S8SN)lKim0&bc zhl|bP`!OSSv!R7vxtW6e;r}rwtWd{2TP^X5w6Wh?fn;bGsH83M_nAWzq!P11l5!wu z6sc1c>?$f}YP(iXW}8P%$dn9=7b6-6*FJV7%B?-p+HOG9t0XFUKk^1g?;pJ-QB_Fs z(*dtVcjP@J9Vr8Uy4(u;{}Ip~AG&`s&V2z2|fQi`3`ippww z^gm3i*6Hc-@VP05V0GVzbNst1!F8G=s1p3$|Bp)Wvf%i?IuhRTYLilEiQxQ30^5CO z8m!~~HE%@WU(Y(`DMM~|DRDA9#T%(dFc7yP^S2FIWxK{IK5<-hs6N7HDx-ab&GK6G zmp&%Z1>L>5NW4#UI~UD$5+wy(56z1B%Bh_<_w(9%%g5HdB^_nO^-S4o-_xe8+#SaR zZSoKAeCO2zLMo8D0Pd{erh>5@W!X$W(eEwX&xILHd zUJ62(0F10c&7bwd!_@lC#&`Tf72KMrjw7=bXZVdLMrvSMmTW^^8n@1umA&I&B7>UJ zi&#MY)iUp_+p6tE#2ZjRFZWSFJRjzwk20)hpz0Zs5Rz*aEytt}O%>gN?Z2AQQku&_ zMNce{RRG#Wsv1g9v6LTnNEeJr%WPZfAC(>3s-~PHCAG^!fpVL*AQu3w&W! z^T!H<@8tKfVp}K$z+ELR)K4e%OvKsoaZr(&_*kJ>+pm>F%|4jJCVo0F z)A^g@5w-j)$Q)HomMPTMrcedP27WO zMnhowM;V`k&YP46KLr-hu5djTFI(vZqTE6|&u{-%KMEv!c+}IUlAf+>c$h4MO8G0-)zimz(Cjc$h!5@UNGFCW zqyh%FS6Kgy1yS8GoDj@qu6>>KHGW#MJVjBbG;fFZQ|0Cj~kCHkNR9z&DQ_slNyY8l2x z@4xmhoceujYFsa81e&E9=kk-__|o{{)6~)jULDB0Bo)HO^SUs52Xb+wU(u!frCE=I zuASp9F&h@~9>kYDJ=c(*-(^Iyo;&*U5)>m>`Pm?S1tgArAT*wY-j@K+HED!c@Uvgt zVp+L->46yJSX;jOfy3)8?s+f>YsG|i61tkzp>o6n!n2>G*PSO*L#is!s>a9Zn-*Rw zgTM0>7UxR;reE-ViQIoW{*sL01Gb+B-!Y&uTE%i&IXXGjM`;r5qJEMeG%uFr7tMmd zBP9QkCGT7kQ&>G|kU|H3kyg8w6iG2fLJ6zla1k#LLIM`JUiUd5Cf4Z^s55o%ri6Dm zs14x{Voi@6j(t>31tYUJ>F-dA2;|*KnsgkZZSQUk`i;}7Qo1iG}vqMp?=Qt{kpl;oBzaM8AB@-~Zq$f`n{ z;?)>8?7zJ~D>KtuKNCFI0Y;04g}D_2?GrnG%inCbUMlaWhZWJF`X^jO!r1M@eODoE___1j~)7lA+5 z9-=t_^i9%mY^q3tkeCDN&XMYaw<=4I*FX97!axay0AY^>d5XkST6Q@T!CaWN*<-EbR#g*Hw$g85+(-W+MJiX;NgShD^L z!L=gzQ)IT7ctfh^MQ!MFI_CFjes}-=V3!0Ohu|qBKnHdsSmPAC%$Sx&k|}4GSg5jH zt(Gi9EyB@uhajh}nVlJ0H%wxMdrUW{JM0kn!=$fvFwL&ZNZs zubKM7q~aSBIvSDdhEhXuWuTmE&Qy%-u~S31C=dM(UQ?)A_JFNg547c6{+Y?)gKq_QMxNF|zRrz{QC0 z0to;}NA4p~;@ypfs|}=@Pt{*4E~4(I$~Slw6)ecka&o?OGUL%uHWILykDXD6RU|_I zs$7#|FGtcMD;5vxnP=#lS*SXb>szdtSX~c=^jz%fy(^FN?MNLp5Ynrw6;8XX7yd>7 zl?7&bhEJ*IH#@5I0Xe%r_ zFI+vZpSl(EZ3WM3qH~VwNb)2Lzz6b1c1uKB4mE~{kfZ#Wk8_#vmZ(^o7Q`Xh#ca3zsyP6DHmZJ%{ldMDG4Y$4(@@r2&O> z%nuG;sH4+B+Bs+FO!qC*@3Yn&qjHl*&CMygBdg+x*WALcRX7 z*wy}|i<7D{1h%yJLW2K#3>VI=de+O1`IYp}%lmw@cetdx^_t|Lq+iXz-D7;tk>G`D zZ1W{E!EEv1=f4BFUAKjJ7tq+ME8{L0%4OdmmF)=g+{o2%JAUS$@+}M_@k6P?36G)& zA?m8#{u3l%0Ev-GDh84nI%EmzO*jbaRu1iq7A%jLQtE1Uotjep@mn^A;|(_bapWX!2qzX^Et@#X#$*xmO~+kVHylSl^hUyquF;u^%>4!&xy z3?&{Kev~$h6 zJtLJ~>X;FcAd}FvQ%;|`hFGoT+YZ~fj4PD;Oc=BQ6vbzB-y#ci1gH4C8e-Nw(IE(p z>+jYo(toTs6!~$^#Fry|_@$uExBOtuG`i?iASZSvk!pgMp>W4{Hz9c_VfbR4Om7;? z^dbq=-8x(b^Edp|2vpD};$kc>6y8)@X=rBPjBM|`$sG!hMeVrZ7GDa1yL<3YwRB&3 zR*>xM3F;*{?G(e{`>I2Vw(T|9v`tq!;*To2xN8qhTp{yW)^Z*8bR@pSU77?5Y=#FV z?X@X>fJU1U%o>_giYJbuHS6BF8$7n&y*fLn^u<>$LsIq>^S5e=fBl^IkA9&4&1tZo z|5QY~RNakTj|vG)a0UOQiEK#ok$Z$<8}t3#uiccNOX3R9&41%LgRVufAv!;U>(-K% zkZit4ZU7SJTT%67QgixfHpvNkuz|`-b-MhR`N7w0v-Yzqo^m$O2OFl`HZz=a@ppqi zhIkT84G^#h8H!LRnSQ~ZWyrJ-eBN5J$VbSF7V)4w42kzeQ@E>t5fNRU1P)ZB5zxwB zb%A?2^|6bTXqa2S!+5F87pJ>j`G5udD4hnpRKn&W-ZzlKT?_b z<)zBQ=RtV=kr*UB{2VDB=h+G3+74bI`3(CTK8y5T%G0c>dfis&C~)Btmfl0=v6LHw zCTK_=p2aj|uI7gS?jk0AW%T1r>b4kVLyrjb-kX=cUCU}`cEbaLC5@@M-5uysbA1B$xWPPN=9=hh~rxga1_P8TCH?oIbT|K?V zVLjJl-&M#AkOa;01^90W>Sv1oC(12CS!{>w)HWEO*8O1vqdsYCLPdtK%wKDn7HbhQ z9oz`Lx-GCSVtdWQiq9-eWM?Rlq@l3{PSzEsjRSxHx2nyHrYYRkV-45#=Fb5|LG9_^ zDeKw&(Q&Q!B(GB|$m2|E6f^jDG(H$Y;R0Gs5Rxx{)I|XN%)z;J>e#A1=U%@4XjN%O zgK3MRlvRyS=VR%tn$#&&c^XAb82B}Z0f|-^7f54KMbVsW?VImaXn)+W(KZNx|E(6R zq7Q<>XAnE~Kx=ZW1~Qbh6CI9a17p#Bu0=D|YUBBw=AK@z1n>Ry;@pD%m zd^UgR_uNSE+sPu0B?u^V?dpN|z8XI62*1nd8RVO7awJ6$p z_pbJ4=MhiZln11~v)YDh@50PnjMYfSHjXzq z=xF-C_vZ4#X`)Bt3QzCE-!(z*ROVQH6S?Iw`1P73LD1!w!@YEY`!D7~*0NT!4Qw)! z7zHfNA8Rey_8?o399cS|WFwNcp#`I>HyjxB*yo?}bin(k#V>W3sP^-ncXBY2AG8|G zxiTvFnkm~BY7fzkWsRvnueTO4 zuRgbc6RJm7lkU+y(8H`mTWGib*z3)q;|iyH+CSc)G`|uo6;r45T_zKVr^jppLpT86 zA@w&Z%8?^pb)OSh)=W`u*+06RjQ0)8s$3UK1`i^0e~s-qxhSt6Kh|odj`}BCCMtCB zL!Zp{MGPIs>4=xkQ5>Vc=Kb9!V9uFxD_~Ze4rC0=SM9S+C`+@Led0Ih@h~iSm0s)@ zB`Vb@p{GX4);j$rfQqUdmnwStP>SjC{qT|MNG}GW0wPvOt?Z?aO$AIBZ~pER#l8*? zPl(ir<+n&Z5f(Myip)#uEvePJTUW#oTB*;$AF3ezaE5&1 zHUZRQAGkY`vft)V0p)rozq~8!?-3pZo{jp=>{s0QnW>mwrVN-M8${AC{i4wugfFMC zFW&n}vA`mDwv=3FH?H1k4Ab&&$2MsQ4W?d<+VpI+HMPHKn~>h2{}z7Jn)03Xp?trW zW*_wX{tZweQmBm^=fbeWA1_1FU#ievq<0~C-a-G;xhs|A01s7kt*LSLSoNyx{ba7K9#x(wyT#xvG{- zTafNF(xu<=-Tp>jX;*)?X;e&;lJxLTJLoYANApjoSat<+S*;vYLrb3tZzLIZ1!@84 z(z7uY%654a6Kb=9j{kd#0lrQ#v4Nx$T)62d-F}=5GY*+I>{T5yynZV~ss6dn6D{S+ zD>W|%vgg({DKy|XeLRK^0EAS|4M!m3R}$C|Yv6oai)=dR#^oW}L=C!@8~}UOG(Zjj z%&JUbIZcDYwe4|rqGp_VzE6e;wgAXH*vX#yIDd z{jJa1`HeA3;d~bcPr?1}-T-}AJdX~9oFjD`6LM1O5vPG92n$l$dnZz0PsHrjLw}_z zH}bXSys_?`Z}>TvB(I(->50+mO<29l_UZwM8|@EBhW01@eN|30&a@ifQfm6>Bo7;bENdB3%ik9Z zCzeIv?$Z^)-#antK_si6_g+w%^qA-!MoO6m1%^GDRnu$B3DG#(O{E{=h8Va zw14o;S!4Ab5B!ON-}y3&a}mn3p>8pIm(5l0Y-Hr%7FCCrIK} z9+LRfxW;>p*VlNp@r}Zto8rz_!UJQ#fgJ46V1QTOech-tcoC{%hBvQSl6U>K^+GZ5 zXvo^BWpX)NHp91e0XO4)f2L2+Ei_s#-(3l{4u~l8Fyo015uXl)<~EYW2gpVqr~Tx@ zxOIn_;Rf#w(GLaM&+a|kVR`VtvSoHy8R~fH|084n=s&I7Pc(=+bbzMDLcaln6#hlG z>8D1^K`=@^d%1f*&oD!R-py8%S*3vK!K(so%pWBDTiPmZ62vM++fRC`|Hst;vO&dL z^lb8H77~7fZWEeOr)@iooTiVd>>z&ux6Q*)s>Os!+NNT`NI?&)M~o zNCvEn!PK3hF`L1tDdSDg=gObvM$!`?;)Q0(PlH;4?$V+1`<^UZ= z(4@<11AZCNX(|x|{{i7WcOOK$^&34o3~UKnKsk5wZzqB4JY$_&#KkyN|FrnwDtru57EmwL-7q4=>)rtyl0q_%ye{9kk& zhS@;$$oyi88Y-^!Hq_0EaL)e<4K#zuuYT%f`20Jbrg#m*2GUR{*Ny zu;|p@T3Dv`cegCvm9L;?kk>K=aBiGF-2iG-?6pXXV2b0~?}A_d`8(~5!^V^0$z2cZ zm;9S$n|Pxu`&WpepJ&V8UJX=aiq4}uR%E92NfM(c5syaVkmo6W@<)Hs@lsSKb#9i; z+Hcxk^^qZittS~H%nBF%nwoN6Ic6~CSf5$Edc$5q@+tZh!b5QiVLFQTCWBKlU^mAX zvFp)CUn+bf-MSlrnfHwA!*wN{+WFpUjMk4+lwO3rwrk2ZVKzD!j|Co^zJNpu?dZm) z#nO~1I^z_F_Y`$}R)0)U{j=>ampx5>3lAB)e3;xT)qc71#ocm1&VXr1m^jmFUAui`d`3ImV`OtRY)PfWecCQnr8(ChI?P0c+<8YBHCN4lr`~5&yD#b z&n2c+`EQN<$}Gx5%x<5X=@ZwJpBpoYJ~q2)iz;a-AbRgSJP;3ilqxYxysV?J9QF9x zNJPayMj-zSQsMs+)@&CKm|5DxMnt1eg6vscGXLZHk5K~S>G+w<> zJqrjF%o~ZXzAzpl?^68hJ(*rTLPzh}cmCZo*VhETJu(=0`(!<7NZAUKDc%~l-;d-nUD}VL2~WVR%R2)wPaM6o z_k)$cCckvQ@;trp9Zx~-ePBQ$XB1)uBqd8zD?30VpJpg}c)lv^bbZQ|ZKu{W+xQ)Y zMs=%R)`Rk4OLUGDq2kIJSd)44pMd{UW{@4%<)H|YY6#;!wNQ2BGC&!)y9(0m}&PBifVeRliUjm8X|3e^;8ON-?28=$|& z{%NgnY%v`XSO*7mQ1(6WIx^uXj#6EuMqP)=lU_Cs2s+S-MEa7Xsri4Xg%n2cmK*Se zN2OY{&NfY4QoE345T;FP zPM1Qo57P~^MXHoi?l)$NcNi>V@+kcHvflj*3Y(#LEwNzN0XIVXU8enhl(QWc23b0V zdilDTz3k_za{$)t;>aWr$|H}?yemcL_7Rl|m!jA@*xoV8q~C-{`TRvE%w_Xn{fUtq z1WfA2eQ^yqs}MXTf~or2ajKuqRrxi$^LC1d72Cyd2mq&hI)Qk!|8jEcFS>0VjS5AK zdhI!Yoq4iJ{S@MqVoih-jxw7-_|&Z!4svKFI>U!*)RUZ@ZI8E)Kz!RjehU*!%9apF z82FR3!eh69sI}<6uF?lN3zsBSgP1qP6ef>M>g{(5C#yfyHzvw9HFGx}wbl!Y^9#O8 zek@xalbI#`SQB@rN}eslXYx*qFS^A!Th_8b#0F_3K*N&1cD^@?+J#} zu_Kgqrzo>U=o^9HhoZ_H=b)bb%FrCkan(rA9-**!RKV|cE;B9d&|g5~P+^HpyP>yK z{1q(r!F@V$cHqkF5Xc%Ftk7fAHc~?%V~!nQN8VhV$_d?8==*t;JK(H~vs-D^mi+TX zD)!BJfN!@R$$Oj@4Su9gug|{VWy&?QQ8@ zuo4dbz2~mCJ?i#57%3d1=tn?MC)sK;B!+M%9#?Uluh(;|ElyUtYNg{IL2Yr*(dcD( zJeR;7D1CP(ovv6>YY86yk;aSwCHTX8MGrRD!1et^l-ja41G7eW>GkrPuL8bKIj`V4 zHb_cK9Q4rTCEkXzE}##9=v&Yjem}F9Tkh)OzBDs z-Qo0?HkMlNU)R>X=05@=QaN-&$SRb}B)6sA+bkU1fO>5?Szw}|Y8o!x+R-2^FCR<3 z9Ux(t>lUS&%;=`AjT(rfqjVOvTlXVaFXH*5b)<1-=6JRJ#L7K2PPf%8-)HuFQjH1k z>b_@Tv!ZqdZd84H;A;1ud+7hyKIjpSXuLmS2SnDQK=Cp?h#9A4yXdEjARr(8m)}zt z?K_iIwzMvRvM9jEJZmhZ>HbjCMxpXN!;9>1xdT}mzB%S12Y1`65z_bUPD)(h-yk&# z8Q$SxIF9K>tp8heLIC$1RO5CckEWoqQoNUC8D??wAZ=GL7*I{WP;)y3Ob8YIU^*Hf z#H(gVw5p^u7b|*kYv1-urXJtSpp>wyt?OfU9$BReLCypG)V?r;r)u?<(LQ1YkuSo@#}!F>!J8!CIst_*lB@r`mSwyOT^m;NQ=X!yBb9pQ*4?$H5pL& zehQEEQp!996iCg6GdVj(RVj>|b|}so5jSDg3hRBU=~VdRqedP0wU+ELKaC{}pHDO& zZ41GV0BpOowre_q*u}&JQ1gVMs(__|zvoALm+O^%%oABDAg@2%XS3wq2V8&&1G6^+ zz;OWWonnpS-S346K%k18$DZPP0xq%ItWO?VxGPHv2p4g_P@<09a6IC$XYkP;P~6*525gGxFN)EPcvo z&)_W&7khO9t{&KkL8LzxG^I%VNm%dke}MC;%Yu$M5UNF4GUqRXay-s|L+5Vlb(xo0!`lehfZyAp+;S9zn&w4$c-JBT=y8Wo3 zRjahf^{GR#Wu{~7cemzU`sZMdkEjy(HTX9~J#y#p{bq*-3BBYJ+^q}3cxH<#kge-7 z7qp`V*m?Nw#w*o+<9+@x=IUv4A5^c!G&k`*Np#6y1qbQlp!bCf{|t#skPmEN(Y%mQ z03EE6s1-mc^~;En=%Xsx-cVhx z#`;kmO};O3$99up{7G_g{ubt(hM)YlLKB3g?%V7qqias*d~MMQ=d1YW(;-(g)+UYJ z7a#>X|CD1Q`ppEsT&-8H+ls;&uhrPatr&flOIAqi&x{YJqY#QZKIap;sI|K^!7Y$r z8R-G;7QQs=L16j3PgU6u`OLm8foivAjwZIVaZq<<1sf{^xf>F-Fff^)HtBkWq!dEF z1;92Y(cw$aw7pRtlf^aZGm+WTiDp`jy3mLBZ`GDsDKkF=7Rs8V>?UFwO!UMce2|H# zC1Fv=@$NkHtWt>Y3=MdC>^`jm-FZ0_5+Y$JWOD8!i-?zoiL3-G-?woR7T-_2KW=RZ zs!dD#y(s3g#c$={?A;-;qBY)OiR>d$m6Ol_}ykDg*gklY$?>UAX zWj8DsfPPc`NDn&cr0gr`6p7nuqRqRIT1K`oOdY-%_E2tkdS+FC;Z)C*ows_d)Tt*o zP@ez@FA4y(_bSFLa&_=fSb$8jKyDwJ4gvkbk78QB!8N1WL~J^6cI^!kx+!vdllAT_ z)5RONQwB$xfUvNMqIS<^qpxYn$U0OC2Y^>|6++`18;H>ANsMJo&weEKNzO!m^5Njm1SQM&Y<9;dX;S z$y}LStauEc-C6nz+MbUsIfkytZlYqrHSxP{gb^&UkYKlT+})1o=@1t;&GFP1%;V&(u_4aw z9W+-}MX|c|z3ooan(Uj|i1OY*<=Q&sEIN|jzlVhUue?Tkf|rnsHIVLoAriY{3X-of z$Cm%VxHTks`hf4+n_?3QLR;PCbL{u%-*Op(1-4HBnsk&01%byT>hj*igRS1($EY%> zIQ6Wb!HpStYsh>`c~e0@s)uxjd*CJ&mAhBCK4pLJJyZx2osiqxYq(AM)G+>IeP@C3 z{u3C4rzAujQEYrU4WyP?zA(>wajn@a36?a6*x)dvX+svbc!WpQq^*yjh z`}hNU^=l%5De4~*5idDkO+^nOw2*u>F6iP?PRd>z!}7MZ|1-ZQm70lOY4e%tU*}R% zIV_(rGjc*OyRdcgZTJwJnOdTAenFTZk>qbUrLuVvrQp#B+%p?@8_yicFh05Zm6Mbf zPrLN6HgB6PcOvVKYQb*HZI0HCs<5;n-(p%i!MYR1_be7VSn%50?LxiDrM@DXgX4G8 zKOP6!*+DeR4IpQs3ID1OxF_2JLzX}w$9&&ex2y+)*0<2I9_3Oble%oXCJThQna-vA-SoRA?!1o8vUy$0rRy=Ld`-vha29AQtop*w zkh}@9*hp00JGZU~-s~D22#_yr38%-rTm9QpindM=i3+OC`{Io+xCAb$H*Qouyv4ZZ z=aH`)LXMzFx7PwK-OB{m?oL_!h)HAn_|Z-5u64KViTMYNjD@mEuxEK+k-yImea>u$ zb!}{>SI%h{d)oDTX>zq!J|x>;=!$wmH~jdzrqoZSBk`qndYC>A5qAPZaQs#joS&oc z{H*f(&8E`*7~17>2Iq47p(4nrmF@IIKq7I+iS2w&gedkVB?^dpcLIh3!40%8_-&ik zvHgIjV7?JIxswYlrQh%_ujPH-(|yhahc*k_F);8Rx?2sf{7J7d>=d+)j_#!N8r=Z3 z=eSCXu>*@dfi_3GL>sC71?1rM*OpWl^CNxsbZ(wmRMvTM!M5Aaub4C5*6QBKr%eP4 z5DHAHBWC4))#Yo!fR-%c+w8ObKg^b9v3~(4RH`<$rFN;Ax<87^_R3absJrU*LtC7} zTJ#+Jz6uN!ISqf&#Ycn;VVVzTxWrngL&0D{?uHr5DY9&4= znWh>fV6W&zqX(Bq;Ut9Q7JF6-exI!3EI1WofCwl=V}F8^Mcps96lBk3 z+ew;=T77bB;_jg&>z4@;uH?|htDUdY5lFzYc_M@7=t4y;a>4XJQ0!iHt1D4%U^>`0 zX;NcH5Dt=Kw{7CSoy#L!*TEL1d(70+Em+xp_D|d#g8+2}$EQR%T&JpIwa&TvKmg#uu!+KnV5GN%a+#16Yw*D|VOu>?BXm=y_% z>YeY)|K!r`uU>%&2JXE)8Pnw98aa(L>9))dP8YlcKwrzrb#~N_4)H}&m}SElOs&vc z_rfGV-i!&6hyPrpR&U=yvqEWg4xp475pm$@e#^Ey|4Pso_wl1ue&W5;D+O@9Z8 zxxg3U*CyK>u%xFhik9sK+ug_NGtQ2FTBWa4QPS-=9VNr2D9btLSCZH0__c3UJzEn%B>1bKJba`Twd=_0RL)f2Tcf@_j%U=?oiwERK1)dG;^5P%In5b&(F{ zLe?V1ty>{d;gbHmZg)kCV&7B%*b7%bX#1U{i{CTfIr|_=dhJq%T9I6 zzQ~?hcG|)GCewt_i7STKL~05=r7!6?_=8S?(74tg+%Vy}aXNCHnQ&dCiNlG*)+$Zg z?Ajh|GW^vDzwJAFsXx}XowEn+SaDp^3p6u_Iu8!d>tlUbRec zW_RxY$w5xogMFks#h6+if=(Otp|N1MQz@|&WRWDH(@@KLyiS?D$= z|C2fc)>{fp+0p6qVStTxmhS{`V!ayckcGZU2-`_gdo8eNWN!)f0B;lz)}2EotN{$v%* ztO+s>$nBMX`|;(fpi|~E4goku_bMsA3_5N?Sd0I#6-rZTsp(+Gt+KxhE1fm*_Lr}d z{u+9ju`-_rr|d}Tu5`8-!$=q;(D z_03lJN_n_ev>u~Ov5dx)C(@& zY%*M2I^!ZJSo~6IAYhes?2W6JJ2dIthX?AgGQdA?gN4it^uoELvAe%YUwm-h2C<3e z-2Nrw^h$e1^>8l9Awz+S|D{>5WE^K@+Y7W;=L$uMAbF4A?s|q4TvAvM-k<}1)#vaPXLw^L`bs!XsECXWkdD!hye_HQ{xxvrg z*|UtUHd(bV3&k8WKMt0Q{xT7sZn^He{+}(HThRQ7Z|#5)j_xnIpRrG~hDcv%2HR;Q zCR)rThM|AVXwSmIIsbv+N_PpE#Q(Q{mS?Z=e!&H@K#`q}D>MN@_PdY|Tec;)CUZWw zarZgsvyC>}I)7qxf5NP`kFIU3!{>JufLjRY9;%t@_B)}`JyoUa`3p|!pIU7B-$^pQ zj=p&R18Q$*XYy2)V7Rs_Tin;vgT&5l@!X_=jWn*=JvI*=}ly) zPV@~BC+3(N=u)>*0AF(F{*>=BaIQ+oOO7y)FM$?y`F?3>3J)?O>anQ*G(Qu54TYUS zH>Hu(h40|kn#gA1bJE!rG z*ZAu@Cxv6;n6;+Y)4u%g{a(vSNifB_bDk0YnW>#fRUvthd682CSfCB&P1b;h={1uw zs(kDmduq1`%rO}wmxCU?>N}etp8O{${anE5L`pws1PM&G(azZsd;wVnE)4&H5P15` zG-+G(31FUdZN;PCNvf?VY>KD{UGoezy#M6p!ZQ8iaH~+C_3EmDAqC`m;U8c|@H7bT z*-J)}E(Zec^JpYJ>^e9x#J9@U%+afIv|36(Txg!RYf0fJWxa5@32a9j0)5`^LnI*R zpCVI)?l(B41Z*C?1K$pnAewHQxN1*4)wz-VP*coX`U>xjy{~pt0IQg3XBjxI%IwNx z7iSPaLTa1QCk`>7JAE=ZBs(?7GGK7Pk@wk5`2Cj`yzf?R>>*6i$%xyKIzZK5#FM*# zzT;6Ko8#u_laqf z+l05T&0`E^PtYp}ZUo)|!L$uOO_C%lL&JK`|KUH2ZHM1XYb6Yn|JaleVf~P(UlC@- zaT~8ll7jS7!C3wjxbmB};9@}RYcs+Fm(vJOtEz5J9rUsC$#WhM=1cS#&}aSdNF5{( zuLo8rX6DX}OfTd`YsgpX7Sz*P;Rc;b{#+*A(kTmu&tFk1)vbK}33kh#yB5)HL4^D+ za6@(lZbXpcMzUUZF$FdflC(_LoOTaha5G)0 z+8QdS^@g5!?sAev;lsMxV{Jl6uBYhJuA31B#m|B-MiZ$b!YOXIlB~1EmFj$Rn;b_T zzmOtJ$hQ3Ww)mXKS_OO`?TL&5*X~EP2@=kX^e$WjVroY~URr%AVg)pbi3Ts23N_om z)VE^5rapBcQg3f8Smcz1p!&X7@jC~5cp?lksVhdqxDoLL{w@p9hL-J%We#o_xV3(= z;qqF|xZ)E`>bHZJ$bmyCTg|su0wK9C`ViT9Kv_(2B*kMP@w$>E6D-wiw@n*2UFrF2 zCraEYSG6yr>P?N+_G*1CXTx*tmJuF$DmyfgSWkVe8ko!vt{ZMZkpg>7nZCMcV;xC# z4w2@H>=55Z$C!xM8Q+5*NSD6P<~XnA<6LaWoWc_AH_Wku-X##!w|hG-;ElR%n()$% z@0Juf8nepumjL5Ekm(f#{73jhDEBG-5eGes3!tKw(e`(Beu-+v%Zb;^ z>FDfMU4VE0G{;Q;(l5+zelfJpl91KbA=pUGXNt=6%$k{3lUy>YQ5TSm(@F~WpqpJ6 zA!EYH>`)X@l8Sr^rlXkE6D*>NTr9qdT?FvFdoAIgEO5|p|mM96EN?O4J3KU=MiB9~nXyCM8?-Ryl#sfF&U209`jln%B94yqUhL@7IgUEuE zN7T>26$hvI;zk&uX%3UX)2s?=sL1P+Gua{BJgR0s|x1e-4_nZf%v1&BTPV8iXT~_x_@D10^hiIygxz{mAoAIe4Z>{7X?@SDn8{MwUV0 z) zIM&mXWC;9A{XIi6#5<%GUjo8_3`IhuWkx1?^w4OuKGi*m8HTGFK1xkRVJjCx<39QtOD^@;Tt;x#J zy<<2acQ@U9tSXsdWF-q&?&i>OJ8A*K8~GB{nDa6u#qIV4T!@6m^+i{BH9gt>jx|XdV~It!Gy>EosMX5YLgNkP$J&4Aj5l<{xKkKI!~Ye>39Pl!a(Gur(oLo{h)$T~IBnc#C0!@xa?5@%w{*~ z`!MH|NM!?rUdIJsC*<6Mu){e41p9GH0}IvKoZuhh7^Rzar7VkQ^utGcQy;@~%`yYw zjPB=GU?uH$nl7PIbL9DQ%pC2WO(P(A+?h_uVSirgYuX6F#0k{cu_icmW_Mg7@S&GC zW>#J__HFfcC40O{+d01GYC`OPqVjtUF!-JMjOf&Dn3`D|=%eZ8Nr&oF5U7VRb7Vo;JXYR!*dHk#!0aX;OG26bgI=Om>ru0;E+Khf!Q7q0rOpVaR^{IvF3<`EK0MVKHvfALcF5uJelc_{%=3*NzE z(}Xq=rzt@=;XocJ#3+zwQxWIwUphw7|Io?v%GtnQzP$?lDnv;9k|=WU@u;75P5z(o zV$RqKqnw$(xgXm@VMhL1i9Q>^adutxU*-}0&$vbZHLRllHWrE6)26X`lcg~`5JI$G zfr`pj!PRkp8@geeDgpG;c_na81Wm;E1c*P1hBpMpYAx;r5x`$NlnBWMA``&bL~v89 zeAdaiq5iO2{w*GL`OyDIGyD5L0laa--bHJ#ksWCp!o(I}$z@YmsX4GnjjsI}uC4uU zTcMP$Q-`()>W z_U%#Q%G(J#RUeWu*Kd!8wNCxc(rhs(Z3!eDp*P@bv@rz!uD=XWN~FZ^>;q^pAzFz) z)^|3y%?P!bU9{q0XDgqMHasZ5`G&Eo{?5sUz!(~F{X_O_ z;QpN#v&YqoQg<)2?@DS~Dq9TIgBC5sD16kC4oxR--RpH<@CC79fmcj}9(b0v4-Jkg zo;1+LLQ|dlN}8QQtX~~u9ANVPOiWBvDXtz&9Id;iDb_ULXk+_j*cF5(2p<+>2=q%% zO9m8oJEqaH?G9tf(l8z%%8D@cW8(2#{KT^wqPP{cM-EwbP7~Qm&R^sq-mfo6hnBZ;XV3FDxnv(tFDN0be$kx{vP6XdgnfIl&gr!{OV{t+I>D;-;{L< zTIi8@vn7ljTBS%dA*`;h6^o%NfV8oK4D7s2uSQc--M7#BW!n;SU(LT27^X*-UmYz{ z@e~ge@oWP(pkraCI1BD=Fc(ZFC=!&Wqv2ajdNbuC>m3yS(P3_OUZIe?z5Y9EW_zXK zQ?C`^ty$rxk2C@vHT8jAfZfBQSJbn=Rn|M=9*qg0Ay(Eqx!isDrCG>eE%)3Xe(swW zHyIxb=H5{}sPIgCqoT4dyEv`bH)D~gc+?)|IJ)yxUi(h{q&q<*bNIw*YD?IlKI6^O zvm6x_Kl|*tAA*o4myBfP5VeY_OYyyq$d@5i+{R-RkV1A&UhJ>IxU+7PyKAjAd2kQ{Cl-Ok9O_!@hN+NvI?KX7)*-w+txLXy=iYt zf`3jwsH;!W-Oy>#nWX1tw(FsIkPYXcsJ}V+k%L;L?_qA0UU_+2LX#gugh|#0QG1N3 z-pNXTRwp+e5Cm=tSbh+r<0mGQPGiwg>bmE@{G?cWpiFVs*+*>hSc1U0EY5|Ii)~E_ zu+j~ritf!hCc%@YuVB1|izm<@=A-dVPi@S!(asVAGKvU#S4S z=JjK5K_%-dQk?N4y^wQIUHam=scqoCkv}rcM>kYv=h#j@i(yRd&3h=0qu zmgS#MK{F^a_cFR0m4cko4WwKUf@eG+DmM6&A;f!n*J+-wVQ3Y>zW&*9`5OWdHnaza z7z|MJ(yHuz^33zYak*uU__Z8_PR4?-wNqoC>HQ2H(_HY=lprZtsrN;E_iyZ7pyna4 z_eo%^ZUX*bVWGdLKz1CaAC6G_4d^@Z#s#Y#q3N%a{Lb@=Tv^YN%>D@HrTuc{!<#28 zC8hC0tz3M2z$|+gTk!33cDR{ergLg5-p>N=XOtNSyeqjY@|lnIZi0XW2QzJQ5ufS= zy|QfibAfD$&&o-tl*-xFQ*BM_Q8F(i{*k+j&0I6o`J8^*^8D({(;v|f_Jtuco0wLn zB$(2t()Kb}A1#5VFG%<&YJoKQ&eh^s$$mLQe$XZh>k|>?`R^#LpNK~wA>W0wjRdQ$ zJeTUikDE<-!}*0Ha>Z612kQ^_XVYbD*VPc1-Yg2X@s&J{62h`4dY zeQE`bcefhlpVr_<_9PY$&!T^6L2+M=tr2)Cwr0-x0hV=@%i^!2?p;b<4Z=0 zr*(m>C)Hi`XAX`=7LE3QxDs+%E0e8^+orlIo|L>{=mD~+PXD5DLZ6vTP^_!H13zs| zhH5<@UGj}W%)s zDWVbDl%QTyUR}bQpP)yMxKMBu*yMDTClqYA|i zO>@D=eeuR2SY5umeYF2pcT-2cVH8uyM2WhlV=K?A6648#wxX=q;!#qW)zh`IGZU{` zeGT)b%jRe~U^noriXOFCRT|%)Fry9PpX$$D0$p*D_?-tx>xE@DI;paIKWM5jP2Bac zE}`AB1d39abZViS#1JFC5o6>U13F+{B0$FY0XyO&FG&5Pm<|Dgwvii-EO4m9uxk3j zwN4Lwq`Fm>(TlhO&Bwm3Z825-u?$n0yz2x65yaD8{U7YTcT`htyC)nJ1*8}05S6A> z=?X|}G!apx2|`3bzzB%6ASKc}2nZ+$L5hep>74+fBOqNu2?_TJq4x~^ZV`axSD!n!S;?nfAA8Od6iht0=)wE;gz9-6OP z=lulwgz55jpbH5RLI;UIaQ!lKIuLSS=X>oa^7xEe+kDtUf-e6F$os8W1e2CK(Xe~p zmX5SnRNGQ})m*qsMQ^iD=!u(d55t$M^d}h0*U7D(#{~fSi#}*Ho6((>lB83c_d;Oz z_y(WS%pJt;#hH_@xkIk6ksKC>>yuT3f9n=l!OR9F)2h5GXA;R#C~^ z9hR1h_BkzQOGMrqiST%>v|-6fy* zz^QNvBI*CWwm13HQ+@PBF&uI_b}^BvoY?IO!EceF~Wsswd^fr zhxgOV?%iWeZnJT}9#J?+-8~EYk*(rD*!gJwgk0-+${lx>DxH^d^Am%F>`yFt0j{M-^AjxD;E5`<8`-bLWa|> z8@pQ<`WcO??wpx3QmWp937&_vq~7l~{sFGqB3R%MF&K+ZZ1k8F#u8=)V3om(p}GjJ zmDffS)wY78%aum~4=E9&FazVvimBdUx6+>xkCIOMq4)!Aj&oZ@0?v`1A&H(iovz`8 zUGT{O!+O#nD#~q(0a;Y@otH_jDT$NC#99vwGZ|1L;4dq_W!I(z9|^94*?_54pgQ2` z#uulu4&@oZ6a3NYL4qj+$=^_2Ub?)v(xS-WTRx)$jSG6e-jkILT2(1GTYpmuj;!Fy ziwx}woB@g?r*MVy6Y^S~rEu&GRL%H^T~$iwiBZia*cZWxjNi9?JPwS7Ykxnkc!K_2 z9`Rq>r^@tt5Zlsof0?4FmNot@OY4nx0N^iuZsn3Q=$|{&AnvJuQqjDD{0Cyvceg@b ze;5f;hU-1Dq>j0iTHfX0Q1|o9vzJQnz{b#UD5pS%JCq(`*{J)8`Nyl-7aDGfA`8}( z3}sEM-Ch~aBhAN-g4UdF<V_*hNW z4e+Df&c-DY92g)$Q)d+X~`SoUAjaCK~jji3?@M=i(>!Aw57!3Ln}yJaJJ@ zx%1G<){^p69I&{;R8Prwncr61z>V3tz2eWl+;Glf`v5@_>V$H8XU_4V1%+)dC8Il; zzx@0;eIVIxH1gh0`3~D^N1ybYA;CwytOcg>6U0}us?Xib7EeiuCQq-{lxzjHXvOxM zN!P4Qb&fudNp8t-owM02Ei^h?UbF`|E-H}3+HARw-?YjBLBS;%07ufDs$4cKF<&es zJNa~b$UxBlF_VBSi3Q{vsMjwg3r3MtfJRQ zE|~3CF16Ut(LOd1ZgM(}$!0+W)&-%1I0FO!Yd->5i{VqZ#sX9@62pnE)dJP)%AQ|k zElxR*_|-U@-zJB8u=Sj2cyZ=Xb5ViH-D7l|3vtPkStt>dtBoZI;ZW$K7T-n5bmD*> zZNzLs&YQ0;WbE#k>s_BwXy2)>IA7)$eJ;Xr+sjOnh_gZbK_eP~m?0R<-Aez{<%f+` zz`am|khL{EJBcr&?z|+HCogBFeQGyDlLiCL3IUAru9h7nes@?HzSSXU5iQw51X9XK zB^Ix~$KqQqoHnj9@FGt=LXX}xJy}kk84k??+=+aVq#qyd+OJi&z(D1M^?>=c zdEh4>wN{eG0BfnwDe_ghYl7D($K(>-6;Ld-a?jooUzC8&hy5_dZqP?ADp zSy3+_5vWtGnl=Gyh`(-iaLlh>Hhz_+ z^xOz8o@^L}1699##+P(MkM6x60jOB@h+{X7Lv|G~m_Hyhl6jpUp4q=obP;{1#fLc^ z8R+gSQLW)q`pRuF8-vG*aTlwczx}G`cggfqO=uXFXj&h{zY1YhwJs0G=vFPVhtCV6 zh}kJ6v(Nb|IvN4)0cQVlMU2iH8#;gK4++0tz8X1rqpt;B*e5jLjDw*J0k;-_Z;NFu z0mxPS@Vt)0$S_q1hkQ{G(Z=O4x7u?+?c;VctM_k3%UPu^p;JkAJ3OkOz*2vJ;A=(d zP9b{i$(aoF7~sc=Vw8hD9bz+z7}j;hrN>;*6L$JK>qwPQz(is{UzpXl=eg~2iZ~?r z87URpGpBcbLLa|%i=!Z8We2q4BY+ zCLJ^#bb_)@-0W6}L$atG+vC+f}5SQLhyRJS7YF5NBN^>0@3Kw#I7}naMA#yj5w6_NeJw zI|T~L3z|WIT15)G{_?v%K~r@Bx*eL*9A=FHe=4%0RB-0Of&87}T)opsJGt6SiCtpF zyzDRi=AsKe11H$jc}q&Sl@*ZaCK`%9;phF( z8|JQ3ES2s`mwomTXa2m{lQ^bwI*JE?#43`E!vO!I^={G2#PG*tHb3tt$XcUFI4J#_A6DL@Ht2W?(L_z z0Kfl8Eq0u71h#6bqeZA)P(76DZ%<;Iyb1_7{p7u6E>bH*#%5c^-@N(C$*Xl?Ve^@j zG8G0Ck8vwVP8t}F!u6oHBFsg3YDqnDyTc;Sr%J!tuKDh)S-osIC1{;4^Q)reRg4&0 zy=L~!S0F7E5TbpgPCaw{mUe9&@bQ6mZ1FyCRh**om9AlQTLOLUM8YGE48mT@ec?8g zP53I}#u6(Stt&SF-jkT+UrvCK#>|fkQO;W;v=Pi+n1;<(!XDw4ZT8SyY!`h-*s!v0 z99Gdx;f=BQ8RFOfL3jG^w5R{sPnk@TFEw@wOk_W1v@rOmsJk~>*bd0{<(WUAHb7_0 zZ98o%g##b(y8_o5;*hEQ#lKpvv@qimyHGKJD$D|$2ne*1=EQ`CGb$cy8gd(xe9sf( z`z3=%+O7zI7Vynv0L~6aEfj)@CQbmZT`kpFwMTkZ^as?Z3bdIa?}2lyH(dwDFyIZe zQN+|WBsB%fIdXk-xCT)1mDA2Bl`km(duB9U3j!xSz5{stpLIsG-veSYi^s@elr+fZ ziwVeqWUFXy?5XKdN>6vTA|)E{j};2IK2feZ=ky?Dun9FTaKsXm;l4Bk0ks7PpW_kQ@GWaj z<0H+VcK{_r6^s_RWq(+=(i7P+L7P1Meu1zd_dVqg2su?Vq(I|Awj&RDyr5K2D3Dc> z_qTP~7>&yq=oW^L>yD41q`ZGxl`jvMErEBo5dn#7!(SW`J8MYVNp1k93YP+$*uzBt zXL}HU>fixd>faub0VeceDQFaMoPqO?u%J5seSNrT_Xh-#+V9o=lnT84R|JLS-hb)C z=B+nGQmIJnxx)wmw$TQzj0MFjD2fT6ay^)6oZhl`+JD) z#D8A>KVLm`O#n(g1S*X;oq(wd&VVWaOf~d$fUBGlLWzO={Q&|5Cr;d=0<2U7cH$36 z@NY})ruT^9zT<87|9d$9@8SI0)mg0qh~Sv3p6_9_XB1&Mw;VC0spH1M<(4iS(@^lX;e^)~3E=3T+33C9yZg4}~~RmV5M~ zL3-N-fsUSqwu6Q9@_jiz@#AF2D`Lb8s1huOeX$4FMVwHP7D4Ky+r3UdSM8neiLNaR zSdO!Kd~|zZXMwy6xJn$B6?m7d`D(O~Sg*~NtAw$f*yiflQ$4=1V0O2C!9%eWQ7qY# zMP8ahrVqe&QCY)yZ2pAS*Q;r4mOwsbx9#N2_EGELz%ahf)@JvCGV(t%y(*t)U*fj? z&yt1zz32aJ1o8iMocCrcAGEIk81ioxac%m$-WxSz(0Z4u50+RfdV_xq-4Df?0x-;WQ%XZO&q`ysrh$_zi934~VHdo_v`F(Ak+Jl| zx%ojB>7l}XL(ZSQw(74wF}(*|M4eeDt9s=h0}=KV^F2xX@aJG?UET=zyc0X1y( zz;v@7DIG^h9S+k{{Ji?w&up9LxbEnh_>M%ljlH>evbF_S(e7gc1Y%Fo!OKD02Jq{K zrH%?->zSE$j=tQ0ZddjP;TD%wN4z9{E2V>I7V~l8xQ2)&x08CpsG16qT4t*A1y1&# zyWCy9p1ir6ER$5zo*?%7;6-u6jVEVKH-9n?)rzr4eVI5@m+S*`_3^1KZ$0Gw_7m!K zWyn}BH^$h8cWQStpylWp_1+ZKnz)V^DeNeHZ3xp85hYLV->XmN)cVmZKP7J&r>qp$ zC+vUo*OOO@)QYKH0}{8zRKT@dfWxO-_9D}E!pq3dHTumJUcvAWhG8ym_>ud`iY5-2 zHN|fZbvt#oP(G8wd!-l0!mEAV4x83dyS1a879AZSap%Q%r>4rO?B{Y@caD>T1Xi<^ zfG8Jm*Gr0?KFOyp*C@Bgk*&sCqM-VLO-ox=UBN_7A7lOZkM_YfKptfz@{|`e63koH zDm?A7EuunEiKu!197vPefBPL1Uz4?{5=WG1b4EvlU*`<;f;_hwt{&9s1ihIL>eO%$ zpc3KMK@>&GSxpzXv8B)MJy4>E{-}=IxZgo2}^YcRuXkj;O*MsQKN16E=W} z0?rE>Y*i(Z3rg0R@T}}z=C9>qh70^y%nhyk0*df3)NFMk#}1qL<@dysk>a3$YdYSB z3&#(r95e_Q<~T<4_t2Gf&l~jE=>2^yL=resrps%PJ$8WWi z7YF&;cvC3fr{PGvcl=y;_-9ttf=~kQRJyqf>)`OmR?BR|7rLv$`O0<^JPa?e^t4_K zBBr{WWyLBnMjO3|5O%40jyWAC8&^AK-91`j=;6Cmo}@Z(<6JnefW@YO=;c{Zz$2ZY zbRhQ3mvS?}>dOt)lRCvJ>SYkko;B$15sDqJ1jWN`CB|wr%Jg_*~7(nwk7=_IA8d54{UNW4Dhl zG@XU+AXMjdVFHccXhGpL+^{nvYXOEm`)Kz0g`NTFNpi)kfh)Hr5SWgZIfc0#Z2h*Q zx$Iy4xBn0EWpZQoA;CZ^*aH}^oHT13Yi8!TbT+1_zOnJuTV1H8X{!0t!O%B6yGtLR z{@O?=;XTtTU;UEee09iLqSz_o!CzLAL;`yv|1h}>U_>D{uPFmX@-CPniRgL5q)`^$ zbF5wu$f$-}T=$-%`UBMugF7L+ryywR@bDR#U9G=bXqr~U%yH2t-#?(VeGwD^lTH&s zl7Pv~cZ-|5e?U-=^~3{m-r5A>9b}yC{2x%xB^r1s$almxkL0$-r~U!TQ756{j(sq1*TTBj{Nx~0;)7ppohE4axJ?p7+2 z#S1qKUb;Oj^u@bB&0L^Yb?83bzcqMgi*i>orlM6XRlsc1!-zmH{1sP1o{MABu#V~d zM~UBf=+ghO5&SRxe%ANiSPd)me(0UioaCjoC7l@lrzTrs4IN*<^ogguVX!jFFCz;- z{Wboy?57LH=Tq?-hl`ad7ZByxTXBo!j?FLMD`sW_;>j;T>(C#|K;^&z9Q%{ilpyf{ z{RmAY-)ztO#VcN8BR$fEpWY>i^cXibJ5(HT&^k2`Z3Jy_G??pr!gANX;?k8N5tUt! z{-PB}u}F`x&2j;`LkM)BRSN!*G~{>hA!OF|YI)sXA)%g4M^GFERnyE*v~!Hf_Rk(` zl~})*`3IC9SRes(XqpNYG=;EoUdk2;+lH*d21}Aq@k@J#)}~@ZjhVt1PW}NUs_O`6 zXlnvl5mFob3kJ>Zi+(L8lM{?PWuJQ(-~0hB4vy$aqTVAD!J=BeM>pY{?n0D#chj1h zn*o`Yo*h6V`y;bh)VS_D#TPgCf>t-_p`O5{U@_@_V1L+}T{sP|!Vd|Be;Z~Bdk$YM z_tE?!MP3F<@t*RW062xTh{AC9c*3#WJFg2$zjFV=ptCsv#o3(Yc3`trjLgwVhS0q5 zJQg*;fySqE;%MliCiB}GsKNA&|Q>DxW0&y9%m4Eh5{OM0_AWp?q zZ$;ANDS;&`uWQR;Uu>sueYMV{)6y_%nzMc3pD4$CgXP7jUK9L^O;b$hI+%DD%Hd2C zIWAY}ldlm91A^AaV7$m$O>4ORa=C38?$3(S7=xLZ6KX52c5{%=ZJfxk5K}-S)V*AM4gGHBM!68 zprES{ppEk&iaGF_(zN}@iYP6V7GW-Sw#@sLPcCd%Vjd=^572%jtmrqj&Ulqv(F zdsO)or}2_auRe5-i>t?_(|F52Apb%wSDxor;{xc8&cdZSpsZSsB+tddE+e>$1{BD8 zJ-SsrsRFb6k~0->-Eqv-b`qjC=P*sz)EM5}IrED__|3(WI}po}Jt+J0eXG+=t`b>$ zal`H&?n>{HFFk!)_Lm^qlH-N|{lk)K8>a^q&EvaA28Fd_BaV$}SEiHceL0Ku+c<)= zQg6IC(aDx?u}eqFyG3yYoaO>+C*qg^$TAX;HYY&gK z#Y!X#T=G_2g*y&{>&>=*Ip1YmKdJj_=LH_`vq~=dg>_O>={cw&% z_h>t!V^(&`x%v$3a2kS3$6w_zede6{34N*9eP6J24=DOA2%)iSvCB!S>w&Nbi8_OM z1FUg~@F2RFEnH7`eSpv>*=%ra#>Hw_*MzO}vxMt?KHt449RpsH$>%mNIBz#;1bUL~ zf1IB}IS&VenS#KdgPm|F5z3m30{@z=Q0U_kzB{82IyD@-^In$9$B{cE{r$ffC>tu} zqohw>2M_(ree3V{vA?hXncwX_@ei5J)pR=xE0{)kh#iwZpiNeQgYu5NqswG0tXR9z;>h?b0#P)hw|EFG)1umWiVYbeN zDFOf)#g@_rvQLd@-9(CPs#=zLf3c6fgQ|8}XbkUrKdAiP;i#AKg%-Eiug|lP3{)to zm!vTuAl-k1{^gCc>#qXbNG*e%=@tam&g5J%Uy4((4m!9wG z*@CAz>5mt@z|r%<$2rZ8xIi@{b)(uU8I^2Ub?kYGH)6Ecpes_F!5?>i*iUOI9Qjf$ ziMe4_qh41#M0zD_-x0JBK8{0*-JUk07?o8TL2b%#lS)M`yzd$-^hqUDB8raLt(;rW zRE&9L2^rOA2tn9vfJ*qmoi73ooVvy0FBC5)jsG?+lBOFzr~ZK|OM#ZHVYzFNCnyo~ zw+h_+A%YOLxHUeX<;&Ix?>d6@XV_GD6<7JJk1PAK$6fa!4yO`U2^G}}iX{ZuIx zGa5I)vTUR_ooCNuFKYEcJY_(apN-pX0d!S>0ss0?>zTbZ?P9G5>Qp*P*F5KOSBu{ha>qdd(Gf%TrbA+&d7no<@-#jb#CTErxl0X z;L7;PriF4kKuPsGwY0P=JsQ*T$ky9loZDse!_#D~%O)>};woi|%(Wa&XjR7GuNqed zi3d$+V0%_-5U18L7Lm4A8}KOj5Ow(lra4yXzEDfW6K-b|dFvU6+HTNA-Q`x8s=@hb9O)0it@YnnElyr9VwVt!Lz(BnKE z($fL?4zR;-{YZIqWMmT{UNKs(b!}mbZ4eJ-ujr6MF{`p_YX@Hgx^97-pgW(&7X(03RTpPsX#bp#g`w9xyr}IjdXH3 z*1d{wxvQX}q@^=7dO1`3ArK+)l~_)2#G{zniR87h>!b4Ci4h3{1)7fi+d=%4q_6Nwg_8kSr+}z$CYO2khUSK<$-C-Y1}A4VW_dk8 zsdJ&-#T@$Mr^P%@%4(gC0Ud(LC6r+&(*EL9l(vL3(6c`sb$e#1GT<7bAl*NG`+lOF zf$1|dwzd5DjoIv)oh~4;`#)2%{}Xc7c;}yl6+CoHGyu~|iontU04OJe+)si4TCQHS zJ5YoJRjQG{Bk13nqQ9Dve``oaA(hw;6hpvcN~HfM_==68yo;m0F;3-)F7sp?mH z=QI}`;x661Y`w+7E>S*Z;K-O>w(Skv- z6qB(uCZPo*C|;))g|iXBNB?SxFc5XQ5G8IPFpnN|U@;XAXOJpzF_^9!9LSrh%|r&` zvhLkIeAmzrIK4hI`x@Dpp|CN$KnRl5P>&5?PHxED_<`wvcq~u=_95;`Thv|-O6`K% zFX(2KAl$H&SZf>gyJPb5geMISZw@N0L6>oxVw{_^^=LJNwxO%5%?Oed8g(k*Jh)>x z(uef9Sc2CFaBp@e+e- zS;Hs&aQbYIsan`Y^R8`wW7uZDflNVNVEXK#ocdi_a)i1--_V+sl7~Tcxf8h*_8R&r zoy4#JXnIi0M!>D>+0oP1g-DP#P@|o0Rd2{`A1EyE4$q?V6@<~PxeQb;U8))o@y%n-o@(_qCTAU zL`m$WxLB=4LTkK@ZG~&m+WfU2Dhe?{B5&7Ct|T5A8jib;(m(WrZAs-6BR~?83Jgw#}ad45qE~;gbM9HaM8rPPn5_ zH7JOVU;2os^|D*iA^RHC2@?+Zg}E{H5Q4St`x+DW*0R=3IApjblm&;( zxpLG~h=T&DL8uz_M8Kof#jC84?e_6FCGtpP6-<1P$Q$&%_9Pxmm33t| zfu42ImZYS6aIL=nO_&cq3G=lI{5h@`o{VYB#n?O^mUUeQHq~2#)EYc;nvZ-Yvr+|}JaZ|TfX=}`4?byG-5D-XjpBQK|070rl&`klCC581Sm~09J(z7B zK?H)mFt4_{TNy~{q3*j|rwh@rz8ZE`mu#UiIj=dj?zNS2jD*^VE|;H_spXP?u#BN# z)a*Mt7$0Cy%T*ZK01jch#GcN@TTEVPxi|);Jw?OwRi|;wEnnoX-?A zaS<7@OGVmOj{T33G&(AXa`osoRi~EniD*t6*2!F`i`_fEbb%E3xv5}{bH>W1B>lBp z-l@1G{p4!E~YDNdxsqdxW}CAPzx4)VS2*&BIl&ndhG8 zoMxf%v6k3R$~AoDN{CbJ9XX}M@muXTtgspY;!|lq1dTh(*(h7+M&C%47MYGi-XdHq zm>IJgmBCKdt(6oEudeNiy(1sr886cuVWNM&d!lDhn;wXL6AO@}9JwCp2Z$ukbOc=( z+qVW*nYSb zSsl-fZw2BEIpEg!C&%tvca7&JZ}+dw?{7R%y3AW8@!g2I=->m$5VjreH`|!AnJzY4CS^SE-Y(UeDK=}nAvHCUD zj*{q#3uG`D4bWV`vQzY|0DwDT;1+QxT{NrEphP6ITq@pBWi&P3-e%MMO1u69&)c9^ zlxUKBH<%|#35F7BHYWj+LY-0@*i<5q-39e@&zjEghq>kNdzgQETnGO&?t+}8+}Wow zD;6Qz4FoX?8(4Pum>Ds=)1M(Nz`J0*2scB|9RJzuTSMg}n@2-#`qiF6K=Q=?v+DM7 zX|p@NsXR3CC5qz$WziES5+vZj{-V(-+AZHk>EPk>_oG5l^0^I9yRO3xW>S!$ds{Q< z!dzsRCes znmTP%Fg-S4D;mmE9dC_JYZa{imNH;a7$q2CWQTV zt-M2sogxqJDAin`Yeby1qCOfs_d~q(t&yjE7H@8`yLj2xH_b`mJ{@nE+VHJUkAbbg z3CvELgw)o4AVRthQ@c}gp^u**CKP!;i`h3UTp`zK#E-U>Z-1C)cG9mq(P}S$L)c;% zdO}+TjwQdMjNqV&2v+e31rCa)Y0ad{RDGNw*X(q!cwD3KX`6l}&8g8tfF%OPw~=}x zXcq&Ni9Mk}C7IXJ_;rnJRTo~Z?{)M!%j{i#k9=hZE()G?=gO5QH!i%?!!Q~+cPLR5<;N$CiLX4us zSbsp@vnN)%Cw)O@K!d}DX9y6L!8iuVG?a;pcN^$@yE3w(7;xi9fV+3ms)gD< zS6R+LUa!@pp`YBO=9__EO^@|{6EM>h4fpAzp8Ekniu}x)sGx@MkUbzNlz)r)alxK_ zFfSHe^ktT5b~48go}>#UG4eCx4zoIOoS0dA8Fyh;t*2{_6wfY|cMctLA5WFAvK| z`V@&Hr8$K)6MP(40@|;GD-pzdSWIC%m|gn>1xfZ9ZIxa_RiP5Su^d(~UNDDBy%WrT z!1;+YqO#^H5Dr&Y&GjuyR6IketNG`*vtcNKAi4lIqI$bA29RKo<4CM{${0FZnRtDi zP;K3rcwe#B)Z2} zGr3!vgp75)KHK`))m`L)sHNn2DVudchPeKxFGF7mn}GpCgkb_R>7gDaDIeHxo=&iL zxmp-ZsvhLm-A>w6QLQ&r4bwe)K1RI3%QEkN@CoTRJZC_Fh56PIXApW`lvGGKd88Jg zFsk(sFvSQ9Vlx(a1W&v_v5<|y;b5n;`%1V*7^BeecFCg~Dc|E1@0Z-SA`WjT97$8S z$uC3k*e=Kkc;;i`UQfqLGmI}W#Y)g8)&nmS!Kk9I_p>1Jd&1Mn2nE$mL1)Zk#(R7_ z44sfV^&S*A)r1mDiZrXQ)R^iLIbqDYUQ*j`@6W_LXLiViP?#A!-^Sd+mat7G;5`W=`)FSrA5mpCk~GW=l>7s-d}m!iIN(kD?4qVS z#hoI2(dwp<+t>m2$OmBXf{B^ei3$nYT#sE|Kl_9?8~-$^rSO@8G9=}UNqmDhf9Tpw z7yGK?D~uI?7({Z2u)UMoa}sE=X12)T#Ih>l6kyJVG_D(`@vd0d@{hS$4N4xl#rjF0 z2ka3%O}NH78E-8eQ7!&_>FGAHZf$j{Yx?4|8mF%c;aciAM%i5Fyei`4$6AgGAKBsa za^jVWTCCfb?_d6;$3u67TWBg~=cn3J^Z;6+JCMGWiC_$nZX}7ei05!h#RY(hKK+bV zPQ`loN=9pn782+eReuKoGno*tpkW1K4~~iw^^Vt=v7r><%t@~Mao&(9jnnbR(Q3I; z{ya8pB6jVuo-{)^g4{t_#3fEcY>s19Vkr;XvM)^9PbtV@PQenZ zbHbGJdzLKo)h4&Z?IYp#QmJRBRuMoFIwOsF6-nQ0p98n&MUB)umPYscMDff{N9UCINlVwuX`MBH+9wfcpaFpo^1Oxl;DP;;! zwr-t;gF6wdUPu&j=EV)G-1q?^K4d>miY z|E2Qrw18f(!*;IH?V|;s_(yrN%C>fRET(SJJ+V~?UIolyRiOl!u@I#e+kH4V(a+G_ zI9ZBo3cEYHhnCy@J;g73gK%9m5;#VTlv4}f>2z`(NxcISo;+`Wt9RYadU#hbw50BV z)w-2;ZJw}FZ%oYAnc1j;Fq;|A;ExtvdmB*EpsN7qB$4vLg9O7nyd5a9d9*soHc4W% z-}WlL^5O}dt{=xtH~;>N?7hY6|B{W$109>OYQimx@pGfqU&I?48x{B*AO(K+OHht9x+eVU>uUjh+^pA8akpVm;?y?4>z2~; z%zpT8cwguq449AlKxQ{-QvzM#4qF;}F1_H9NE(VCs`CR!mF` zNLnY&R5zMGJirY^^cYhW`OlmE{BH|{`VWM@e{pj%wDyyCII1YJPrR;dYa^AYdh=Ho z&kg?*Opx#Q8Hz_9_XNuUCGNecJYo;}SYQvfdX>|hZh5E@+Fu4fOO;2$g0BBA8r!I z$^uVc6V4t?c`ObW%IV7e ziXQ@@j&b=5RB}+F)Alu!n4NgB?mAyz5@xC;MPXa(kY|dzrA1X%X20<=k4WW<+nTu23L(m0?P*zNIx#+vHd%uaLjeUrHoSFZL8m+e28rLyORl(a+@hu$F+uk3DpA_ttZ zm|p5HR8al&V5TK!cY14O_;a&MDSWEiR|&q@nU)+TscBJfNv$`-hh0q6^oclg+Tvj}Kp zJLfVmExDCZz55Jd2S{)^!D0l>&`=J|**u~K*ZeB(qwbjIdW zdaP6W+w_euP3oz$eDuMCo*gxpOe%AdCuWAB3StTA+>Q0#5+N}$OFr(;8cKQd@^r(lsdT3g08s|;hStm?H{r6o5b0~Wb8du*nfup8KBXw?TYPzRcI=wz)U+C4^~Yxf z&^NVfaMw;*cQNHtlugIH0;SNkt>?E(_e$k8TTEcCl1t8Zj)u_}9>1a8ewFowVOSU} z8*~+J(UC1d8jjkao?n<@+B33vkZM;`U2{uzOn>ey=M7oooU$f7q}@Fh%77URxGA3yfvyAG-{Eo|~6Ua{G3T zs*(LwaMb!;lt{NoiWbWskf!4MqGz&x#?y;9-w5yW(*X)0!yOuKRm6R04GIx8FIHcf z;8$Ig*H~|G5~@_4;a6K}?YF>4IvAoxtGj~0Z{Jz0JGBw`+LTvNr?f?|@Q1gW>qz8q zJZGuxp3GURv>m>4u9(+Gl-w^x?#p9oJj9-&0YLr{W~hbbunz90VSF z+SoF#D#FGaY3;HHidIdlwivd4TUp}jh?MQ(Nho|N4T7lu&(u=?>A#i63*ACZxv{oH zfiDgy3ttpHhJ6L5Y_Kwbndc1I0*XVt^T}c7@|%Bu@bByY<4=O^r_h*?M=Ef8J)%S% zfeC+wcm2_XmE%}*dyi{#RrA_G{>6M<9F~#tiK!t(90YnYVe-dH} z`(M`7UjiNgPLMoQIU*HPoA-6bc8*?>S;ocO;ByfA%)ODd!8Xyt7@AM37Q6|MA}}pB z0Aw@&UQK}brTK4l@O2B?p<9Wcb|^8CovPO51P_M_@EJ4n6+a(B%*6xdWnO!b!T?iJ z=qWVZB4S`!uztGSTQVbZztEkUrr9!=M)M~vF7^PGy|b~%;37h3a4oI&i*X8!4SpMZ z$n9<4M>miM5fIQ02nhaZJ!R1CM>x9zC6;<)4+sp$yI86b z_#YP_znOn=HMG^mvZ)TD)}Q?MQ|mBVnmue-TlFqvg(W;*Pp=`W8h=-omp_l^!xePiP2 zI*|8W;R_6lm@LqN_v94N52iJallMw$Y_ta+WM4P?fLC1e8GO;(rugbrJ1|X8^|Dw6 zM*vkVO)&*;8~fMRg+@>A^x$n2(6+KwHQ8&1SXP@gw?1Ku(2eYe2CeF0nHCNDg`J)% z4wJXR-;4@l0cyUSC%{aGk#2RU^GzON$)a%z660cl_cjd##OkgC#d7lXHa+nwS+#-l zcoUQ=D9CRFny&_gi6wjj5W(_}YYI4W%Gt#DX1x;lBx}(2;p(T_x=JGc(f6IlRTVLe zFL1DE3Ge%NLbHBdELR$VJUyV^@-2sHxOXBMkf-1-vcTzz6ExEC3Tqsr;ADL*zc3xPs9=e|il>DT_JESSEu2gP9|!=o*sK8_7~NY`p`Y-GWecDi{qR>lBG<7l{$j@USVfa>onLqvef59RJxV+WW_SS2v49Zo zp`tNP(KWF~zFoFL6~v)LTrrpz731K)KPEX^b7>TVvBbyp?Xffyek-+Pyq~uI{`0hP z+8U(Nyx|j-8zR!I157E|e!8UlHl`-Tx{IeLYFAiM zSZV~C8>Ds|8KC1qI@zVpw{HukIN=nSrs2MX!|d`eHgl__d02**h4~L%B4)r>wQDrm zNm1{`0HejJFlS*3HX7p4;@JVFFKxXF&+M8Psji&(j7q#+p=8tNUEK3|HZa4_)mGEI z_Kf(@L^j;fQ7Gi>xwq`^{xf$HnIsaH8dC=aG`g&?vVXKz$zewV958*r_!A`a&w0bp zu)U)S;Kuy$4=5x359p=)adQs)pOOD%1o7Y`;ukx>2!HJG7ct=_gr$`azP`vF>q_M& z?i;7vN7XMsXAyVSXpV#57Wf@~vd-j`FJ_n;yb0v@#vuV&a2@1{dtBr2#ul!qW-H28 zI1Na+OWp;>qfEjt)3)Wg_w5|S#L;i{j8p6E#ouaeOz~N;N2K22G(p~;1GW&0$pMQW zdokk%nC`SYUC@72#Cu(!rT2cD8&LCMEZR>q(a1S?HzwGtIBzl|bohYarI1A4v8z`v8 z$~bG4G-Z8vZ4iBi-6Y(+esBXK7YI4hfN%GZ)#_@GkwMxkZz=A>8MmD9FpnnV@#*(( zpQVHHV;G^x+~Bu)0!PJ*3_a|TDEa`7c@0v*0`FFMO@y%4)T_(=`7+3lbyJ{M`e$3T z%*Et7Z)QX9tyvr5$*~hJn$wC2njcfY@!#EIFsb#h8V#A`^Du>GyzYn2r;ew0Bs*>E ze7>dH+T`y3GU6(im$^Crxd;Jz(J+e^b1dPiFNx2Va!9*MNy3HVG_wM8nnQX&qkp}O z8JumHIqJBsx${=TTq39@qLkpGn^%Kb*({&1akoF%5{ficJbUpoCe}smqqU7l_Sbc5 z<^Nw;o_N07A4JfY&Si^I(D{0cHWr<&rzn1q;2LO@)%Wa6Ka3Kiy|Vrrd+!<6RNtqI z1`z=%5tLq{0;19^^cDqaBA_B&Kn0|P5S11r5Cj3~0s;yGN=JGPJ@k%9?lt@A| zm=O1RX0AE=eV?<>nVEg&T-W|EAG~xeLqgVC|MI(kcTu~QPV|6h8oMSr)g?baIa{72 zmLx0YGZTJq+j@9whN?y%1vDtXwnC`tG(NI%mFs6D0eH5#y@+aer{p*N{VDrak4GlI z&RXK?lO+v2I`8=voqwCK_Q+`#eZ579KGSlXB1Uf6>{&WN=U@Nr8&Xroxk$0FC)Iu~ zSXjy{%iA~?+LP{Mt>TdOe(=6cv6fPp;z=7n|0P~1LJ{aG1)fGqEr$n72a336p717` zbP6)h$jKr~?KbZxbUy*sl&f;*4WASX9EXL?a`~(T`S$?mIz>V=8*tfyFrduUjVCRZ zcu;pz_1=_70L}nnFTLk~8NmF`$+CTr*;~+B>2A9!eEFtYT^q%pdMa>$m(D_YjyIVF z;}simb8#`4Un3NC*Hn3>3M<#-so}h?0=I6%I+6P}1uOO!7971}6%(IJoZ3qrrt$LO z;lH}jz_x*V4{>5$&+-t29u|JgZSubDd^@%GSKM3 zlJ06Sx1u>{%**I#DBB+5%~U2ULKcBKjV`dWwGId;T0q=ku)2~3^MetOfrsLE93Bmy z|8P>}HfRftd!@-sA8z3wgJZD>C=X0jILes3T0z?AFd^k-au)hNFGTte(8n4*J)gq_ zXXgYyKLCA@^lhC!Q{(lrjCNYD6=0aDn~)Rjj=rcPyy43xuTvT>q#*)ujmI0XWTvTz zW&h@j)*YVmTKgrm8ZF5UfI6qTFKx6e)-qX2-KxA3izOzq>>Yl3isT(#)T@2)_$*Qg<`ndd0eBYMY~;63xT3iNIjv~w zjdkPl3Y446e?a96b~ZBUgWrUFr+2jy?o{+z2u(P>J<-eFk+@&nV6ufKMIB%%PC(xk z*#8MuPtuPe%?WzgiRyU2Pu7&id*6tQ9D3%JVV9T&5m!C08?Z0;Z%P+z6ieYugaa3s zI9p_C567Bd_un_%L5Q%j7;8Wlio6$4I7-TGr913h_AqC zuw~Pmo`J-HFaf@k5;tg>IRLz4I)Yx#M1wWKKtQ=Rpml>`>|{uqaRda`rCFyzRsY+&xiQ-_;y3+V&s3`2${$GLnK|Cba+kp$huNy3Dq7J_ zkd}xtR69zKB`GkCEN44jUB)qubTEi};Bt0!@cd8uCXw$Myf)16b)@pW3|F7}`9|G8 zAma(_avGXb^Y}Viz%|fa{Ps6yRXGfM5TX?1X|T2zx9U5(XFD*}h|YIp9vGN6B@M zm7)CpZ=FLPoywPQ-)>A(5AVvHo5KSzBG5QH({zcfI6DbkfeHd#sYfs`>%*H4-@Fd= z$u@TF@0Pch${D{%yD;N4Myj5xU`;&UU(zTMD-3u)RVcq0Ay z%iPirc*&79zUQoRVv4_mZQQtS9Dm`!ZG7vC86#bQ#!gu(ML{W{1(XWZxh$F%S+gZ? zagdVSRTIxc9PA%bwbt)u`>=BOmhDa6!}>>!?d8AOx-$RbrwLH1dZ64*p3iY}7o8|c zB!V90xhHr3cX){xvieQJ>NP)CVb`n4raK{G4xdWJfMDm+CN(M#&7z6Y<-cqQ72K41 zERz?nF|jiF!j_pS- zC>o@)n-lw)tUWB5H>$`#3q5n!Ek>ejhlI2pH1;YD;K{FK-}Z!X6U$PdE?^!c^D+?p z;(t(0lIwu7F1XqA(nV`?HADULKkUIcUQC%ck3Max9rKOyT$2cjm-%iWlWg#@*zy4z zZc+58MpKx=jBlyJmxTd3of4p2V?p+GU_^z;_F*3TQFAL3B|n{Q!rm|RFQTsJjNFvJ zlM|ZE^Ms$*bOXwXUCy(HzQVe0bJD*l0eiXX0Mk2^09*ku4AEdizh^Qu&GJSAo|PB1 z2dU(zsd&O*((R}Z(O41%8j|%x@#WW=szQZ@(X<%JJ|NA>E0!s2@q5X{IqHM^p*MqVy1dI~qYj=;2FhVN4Y9$z zN)6`uFmKM9ybZgv6LOMG_4V%z52m-R%~FMOop5pQqXjV89;HGD8ApWT%e-cfv^^78x=nv(A3quZl(gRay(URJ!-!L>f&g!jzSIGE0kE`_>El=u z2@)!%=GE*_3W#l%01JDK%^lfDd#m^8PUB%{DwG1Cv)6yv&#DpLP`(q`0-k)G*xGVG zOVw!5pUZhwZ~3H<|T#d4;aX z$&Xz3M)V2);_d&|@N)OJqEpc~r7~DWu4#Nxy?D$-(O#-|-iNW#136rJ(JEJeR{RMU zx&G!dAy2PH4!0@t`RE+|dkjzk{6Dq4{x{BpEh+YYKyph5K=uB#%(6`K zpALbKBIZ!w`g!)^6BUy!TW6{e zom;Nb=qPh7AdP5eHSJaleY)Ee4d6-B^Hv^973A-SR5E6D4kM-l(ff-p zjE$gQrNE1kjNPdL)jJCmfJ|r`x{xj8;E}3W=vw0-ttM1t7kt3s_S2qE+8odG%<p;>;BRoKx*_RY3xpE6hKq}km2b8pijzgK2P=YK z-^yl3Zm5mqMm-m5^OL`JW723R=@B(Wa#-c6M{^lWR?`vK?L{U9z_?GMPc;0jWy^>Kyeh(4(TWAx!{t zLbYWPy{=8t;Wl$P!Ycso<*JjuNA#A7Sx)FD8F|Qx8r?B{i|;Q?hSI5{xF8atBXQLKiJ%r6rPQaU}?M$7F5c?KKafXIyQbhebe; zR_TU4>E6=GO+W@jlOx0Kext$iY$?zV#YLg=mQj@BxycKbvOi1h3>*8ZXOeLq+{-%h zPnqspJUaxxQ-LAo)>?fu1t|H>ITYUC?dXUdSe#}!yf}-ZHB;mJw(Z&vqGJzH@I^0E zPNBEx)Gc>Vaok}F@UibH*$4Y1=B_^V$2dr=CQ~z(kxkY20h=1K=|LnEbL*TqRQCNaKHS|k4F_!a+U+=|ivB+?aF4OBV7B#rG>fS5d# zS(OeB|l8xQ@WdlN zXGza=tfvrr8rSvfn#uCtY^E=Bsi)j2WYKP0v}X(XC``7Gz+?*i)MTZ(jaLs(YYH?u ze{wt3{53agZqCU2u`|*$9OKe@P9OC4b)M#3q-`eS%b8h^mk)xMTon9g_M)~9{58DM zB?UO-liTtOKOVpq7PEY62$Rpp%$j_yU9bjNH*6%DmBz8mOB(L9l|dPK1F&EAv(Onp(pDkv??G?jF$s{+JNXDH07hWSXcBbUps!vcmKyQ!lh~jUrm8zAJ<~STj7B8 zOs~Kv&OUs~hz9;$y8-HHv`DS|A3%{bfo6xw@3spX}b=cape}DJO6Cu0CK9X1ncia8ha;IwOh8_&@-H z;kjrQ;MZPpe6W||v(i3yH!bd4+vxDj&9lzEw6$h`8x`Hxt;{n`Go$#CEOaQ($!?pt zq2$bSVWfi zY1*NwlGxc0_91&y^XyoYhQDvgj|A6|x!NM(%A39**M(Az)AJm;%5?iV*!Vq^v~5HBv>8k`jbRr^uagc6`$ zgGAOsIpia@iF@QSq>b66gVA-9-F?F& z3)$BrX;Wy1u!D=+DJEBs@}M<-WkUM=Hyekp67RF8`J8B9ljI>ns}QefQiKSUSIebp zJ_iGmPf6jd(+5;zk(0J?h^v59Vq3397YH?@6R?hlPOJ53@>A5Howj#2DmHiK@%p*ryIAHH7K#wwV#}8x@=`{< zkKiw3^L12~YrapKS8>Uup_VJ8JOr`!(Am|!6{LJ2NRu-QYZ)jRIJ5+Ak|M-0Bjs=l z>92k7(p1SBix>^O#+K5{(xB90--N8gNS^3q_u8M~ZjT|bM`5jimLVwi!=NSuK0y@GTKS<_XlOd!zkCKs^(6*@(|`Os70tg@IsacP8}Jhf!*VkO5AHhRYqvXl z|G?s!{>~@m#q#bQc<;)IxscdrumfXg2!t6Qt=qyg%5v{j+C>9eKQ~&CmUDJrosER5a2;4?th|(Ui!&hKS$anA@S%=n$G1P8R@Wa6F^Md&AWM*+W!uR?edq zyM;N>*K5x+J}B(+1O!mckBDsaMeIQmD&z)a#3DkSm6S?Ymi?>oJzGiU*aAw)UmcqP z&s>=AnAM2NjyC-Pow6%$q8d2Y8L|}(DGg9nzh|4V`_PU|;sQmHQMj^pxj1X)AWevC zgI-%NoqOE~hv2nYzbZaEHox@4(?H4%cN|lBXVp2CQ7X4luj0PU`?A%_jM3iSiYo4+ zkH?S#n~@;;I{@4a&p1zUCh;9)ky3&KA+EE`?Q9SxiU*VlnJ{G#$?83Dfy^7c`NCW0 zrfk;KN!0o;!^>^wShCLTK$5XfFG&EcBiiYzJERkh*;exu*&ck?M?3im_#Vu^XaRDw z1@oqPB_&XM$o<4jk}TULhC7dIX*HCB(cX=Mt=pg4gOQ-!9)hvKYJ}*;g(OG*XPk^6 z&ydYwc?PN})s1$!@mnAxl4?zvBQ5DtU;&>glLN+-=ND4)baK;ebmI{mvpwRs^UZ1^ z#jBFMS*@KH&c~^|o-X@@c3cYb`Mv#`4kX|S;q2n@OJNz}fZ_ZXBiSfJak?ZGs%9- z$)N~o0&LsgG)WfFG)A`xWX=!Eb1FnQ%JkV=g?WtTMZP6ibX%ZPbwb~=WrF&}Hx*WM zB=>q@H-P6!{n7Z#p_=`%%_kdjRl_`kxLi$}D~{aPEO46x z(yz>QrBA^heq8o$r5Q;Ls~5!UZw>IDV^BHCIxPC}+wli~L$>~oYKiE)lmoh|ukFuh zDk482C2_p30`Nu;J9ncrRCzNHm(@Ms1+1;TeZNW@3DB)Rs&?R4gcGDElL@8?h8yG> znoX35S6`PGLbYbyxMuqD=ia=A3uDK{tm=IkKC6+@StGkqm|1hE2Yhg(lJ)VE2l{D2 z^REjT!fu}ZefNaZ8H<1{)D?i6ONRhnjq)&v+D%gDf#PiX)Ca*s?hW009*qJam=7y` z{ZdSGyAEP!g*kW@*E8AGJ&RHDlbTo7Yc-w2 z?UIBg=gFXxQX@?=q!c_j1|?KXyFvPz;ZYq2p0~8N|0)rq{-H+EtJXFeH#g|=(dj{G z&!DcZ-;w}QuhSk(v;BfR-F47CY(C<#TG5P=E`3sm@f41zXEm*P7hQPv03Zh|>9}sB z%2s_II3u`_Gl@{Y`mnRAdn6^y2`n7R&z@b#Uab7+g>rHKzZ(M}H5SPELHf|rck9lyii3~NC$C4R(uif_ag+-f+SklqoPdlo67*;6KZNFR{l!}X zFzTBM?I;;aE&&l@CtnLpq#aaj#fJIk3CjX6$N1Zom9^T(z}nxIV{a&|dqkb*pLeo+ z6f!SJ$RWu_|Fp6;V=fnC+&z(%t33WMA>Dbdy4CB(3a$o)l3tTB3KI~(&VWJ$PzEeN zq2&nU4LkDG^Ey9ar)MMOpU}ZhYJVV&>{a6v5PR0GPmfV&%SN8oA$65tJ76#&xaciz zn-~=?_zb_}wL|o!;et*3z8>1ymr&YX+O9qQLQ5uvm3o6_dX)Yo&4i?wHKpo~ix}JP zNq4VQqE+iKSqU9YGGN~bpFHF|hl{}Db3-%beF@Owc$27%i)r1^ zQ~R)HW4eb@??4S-Wmf3PNVUsBQo+EC0tRk-Mq(fgV4_YvHR>pD#~meKup2!Rt+2~603H5qn$U!@EqUWHfO-b__BHURo4Hit6sg$zVCy7$Qxy-||>T572%Wvodo*L6zD zSHMq1#dhTsxC~@*&;AZd<^NBEC=gW=uSYa3p#?@+knEask^b$9iwb0(%r^?n_gS`A zo?>5lI9%^*fMG1(G$y59d~)uYdbM!aW{Vts8Z!l$A7&&0Y1Xh4HO{znF)HVUmQY;W zeVZu1C*vMYu}TJ9W%>2>nc)`pR~*B5NIGX2whtf>$pE?bMF=@AOdd!;Y2hCA@bWi= z4cF*3NTtn`4Hh3vUFp4G^P_=hj(hIb*Gxd$!kcOV#qN=F(f^{ zi(Z?}inE4>uJ8}Cj1~G4j^}at+@}P7DHKxQN zIl%IC@L~r!Znwv5H4GvcrX73R1 zlTxp3IZH*%I=(y1_8K@iMAh=&dp%zgw%{{xkV_6NDTyhbHBVQrCM6ArILcNrYP=?j z6}8OhN<@5gcbv_CvTc4?wJQVM%?wq_u4HE%tIfLRRZ@4nZ`qucwd(*Lx|cI^qGF`M+}}V;PS!no#43vgCxN%;?np2 zTkgI*)CG|8%2c1iG!6C<07Z_^Qljbzf(NlTf9;yLpd$*YcLcKsM?d2Do{m)|G&EFM z%*<^0tAH}K;`OgflSzMe?*naoomH85Mjf~Qq)muiwv-o4%f6jrOZDVzc`Y& zbmSkmxHo;|T7LwHE*$NdHY<_-U3QGo3tiXd3@|swF2vY;|0<~D)H|&FMCFI7*&!B= zn6aL=+2FN1Vc2W3EgnSiH8FUmA{Eo*4RTPAA8kUkLdwDIBC(oaxbC&irxk-6j26$;s@U!2n5%EJAW(-Me$AmbV zE*+-@ky8g4Q@-<0tKbelCRRNhwRTA}>EHBNt1z!|SMzAdg?YWUYc4_9*Bu~coT4(LSx(jBO z(P%{{CO$ba>ERCQiY;#G6iR0d#YI)zP>qX&){2?JSjR-i?pj5_ziBiWJjzHSNyng zs?A{>>I{ifwU0B!d9S_pzK0ipi_&E@WHJm^Yhna-Qzh=AdfT(p`|42nbqc=|ACrd< ze806Q%!2vmk>q7J=IKS3pqJ(z{#)f=B_OB|tuQbD0 zR*>-hC<*NXrC6n=w5vf_H!M_tCJNNm*Xr}jn;$YfeVf6p*iU?Vmb=yati=L^Bk%(4 z@==-$of!osn?%WPbIl_?@ecy8O~_V<`!^a%8D01)CfHYwNVv&3bY7S9+ZXVlJ_iN% zg(gYz4b{9vAGW4{UM@T3X8jYB2W#+NEG)3s%i7?b%pzJddgl+jjSObG7~GRYU&Mtl zoYewBq4MCFDMC*q%A^pmlwAZ*{M--V_O2b5CRD#2a+UhoKKOnR{X9Y@=vV@hr?G?% zP;#oVVS5_Boh@fc7cfqbaVb|f5{I16%M=P3$i@G9pvwC=iD5i3OyKuek3D2d0f-qx z3(KebJ{XY!JnN_01tE1T*smC6zh$HA$(prn`=E5~jqEBrPhEdf(KySG%_Ob6a+yR%vBW;Mkq zFSoniLAokNiw`p?CwJSXy@Dsz=FNvwmsQTjuQJ`?9zI5cQ-E-Z<;nQGA3mb&p z@e8nrR7g~rw~>ZJ)cphj_)oaw*iT|sJf6$%zF641>Ugr+P&{_$5RPQCbl;>WU;$pJhhzFQIJvp@G& zemtf3%!Tpyc@m@z5JlZ1%XJO|B`gb_+f9@$^?*JjP6iC*PQ!fjT~l~}-$E43xLvvZ zOR^(*$5y}tSBFVj)R0dDRC%Tr24p*$V|os$OK44X2gsr6SvFQ3 zirMU#dk<{_Dp^eZZ{1DCToZ{lBr-)n-@)X2Ma+7+*{?8fv#({^>AK$8t(Nlm+N~fF zycT3~pSgtzgubn-!^vM7mSX{~qi7jR+-r!L(stjE-BBI2DQ2 zOjd@mz1eP>v7%sd6Y&igqbYYODp4mrX{uH9$j(tA|8oq}_PKI0A(N63epsreOfd1Or4saQ1;;CBMxy#Em%D9KxgpbVKkM?xm*Wo@jsz*x z1HX_~2$!bx`cj2SdyG)eqEtBr6Og_1!{X&F>m657{;PTtsd{kLfdd#UVsZ5nLbvDj zO~HsPndB9BIt#r=wJaKiAhY4}(sDNznUB&?o_Hzhj?XY}J+6ZXPJ`fC3L_fJZz@vIA0)oQ^l)pvYO0CBqcZ z;ghqkXIJBw8>OObOn8mIjP*Uon>F*9w@*^ioGY)0YjJ$i8r;0@7q#Gv2!;0qdU54&rdr0BBw{-2uE=g zoa>Rt2gQ&9E+9#&O)gZmwvp5U?2Mvle7qrebhI50860-JAv|o0Cgpzu>-th+MAqg` zm2+6P>*^`%+jomJin}s>wlKR5iAI83F*6U!-5Foidxq=_DF2?Spq-@571NGUBEVe; z&UL_2ztj?}bSKk1)?mt{#lq@*bEHDD@*>j8lRw=lTs%4E&3zE`Ax#@6$K--#r>mei zNW3ZTlW1^Ri?EAo(d?}pKx9}oKj)T`cnzE`KK|6pN=R$~X)5`BxDaMvb&yzw3^|CU z+ym^w7BFGUqv`>KF*ts+jBUYhLpuNdD*N(RE8_6-Z;K<$AJB-Lowi*wNr-;C1t9DK_jb?l z8}quj{b-5a;+KEL6OY|K(g)B(7d`Qgiq_*)>f6(oyXCH zlVPsH383K%m4((m4T}M+=q5pV5r|*L)iVk$v^=#Fiq76Wt z@R`#dCSqvN#uoj|>zm)Ou*D~!YUi*4E}GwF!<7j~GPH9*2|gVbpm!Vm>Km=Wft_nC zlT_S-xl?0oleq>gh5!6*NB(|d>K6wAK~dVIvrdo*x0=a%v9z0HHiOZv8?GKdYXW4I z-#H6BRkh>8NJi3L9~A&ZVJt-gv9*m?3y{>Vp?t-+w>hJ z3_uh3S<{WXo}A(KjLE*ItCw-|LdUnWTaz;|KG2{|NWwT2E5(>`(^(yNdEhR z{PQ@P`metrLijSK7|wb78U0Z$7IvX+*_Xo6jux?$M!L>s90dp}lG=z9M)#I@1G$cX zl6$hn;(z8m10*4e9$i-mO@YvZVRKTQG_gM*F%B#Z{8#UU`0g*?K8C&Ut(ZR`Nj6~B zqyi83s4MKC9eWx8n-GV}_P`70mgtFw_O<^)?`7CVSCMPr2)pW?3k@yxBOXsGf){A@ z-#?^kkh|wBe{By-#46^)MJr{GMt4j zr_-U%9M#AWoj%iGDC%R}^KpNA3*RZ|JWx25y#v;g9DfzTX1}FFNdT;@A`L7f+J=Q` z2ue~u;0Pj7Q8(dz;<+H`w%6#4-8JoiLh&u>+yz_p;r{jBTfc>UzF@mb<; zmZd`vsh!?E%=oesl+$=@CsY)f-}T$telt)tVf7ElFtXczFF@A!-NU9B$@eFE!qYny zPXH?um+70N!b^2ZCB-R(og;aTCPl&9*}1Gzv%j$WM}d&^XUNR^-%1^tFy_FWn!K>z zdpY3E+2DW*W9+2530}wmW#KD4#akP92K=m$TCfmu=KhWLgj37U)AL8M`sz2Sn(Gj* z{iPE$70TnB9$4`P$)M2HmG`h@MgPRpSaTogH^+6t`*k&IrjTlFqJpHgcB1trK0jEp zvT8~_ty#a&fpLg^jK!M&v{%U0gre$F{9I*r;?%2<5>b~TG4~GU`=J)PxwnY$#<|~z zkQav^)OE6Q}eZ3ozc!x za_<z|YD1B()zd&EDvX;FnXof9Wofk^TBU=rAnu zR|-Y!%f`#aPdck3r=m?rr=jLwyTwqN%GkY`b zAF$lY%_q@d#uBMuKRZW6 zM{X+>SMn4a)~guC-(LX12{3Ao)KlpE+)BA;PlAAXm z0)Z1)e_&IIDLcxwKRY$G^bgokuRO!A9$+*-wV&Bsjti-VixH+`6&fLLG|!RtF>ml= z@-e(pa~zr?x94qLNp=qn{Sk8Mo{U{$hj$xVD@*Uh)bsTK&by+4BN^(HhfDlTQn;n+ zA7N~bb&R&NUH-oC{57KKtYzP|g#~RyP18CYm!Mo*dmv;3$%39lBZh+-B;(Xos7A{;@U>PANQJn$9)EmIftjVE+QgG-;u|r$- zlJ7yNc&c1rucqcvk^GXVo9GGbn6$|&FNMjcwzuh{ZO%)c9F^UoKao5)cMaup-f4Y_ z*4BSjv9~?Fb`U$!avIxR0`15$Vsc*_{}xa=Zf}@BrxFY6b!TtivC&VrH1HJWI0lD* zRjdV!%bD@p?bxss$SE3xoD4Va(WZpr*fKdZ=<%*1M?>#Q{G0>MV4aik6HZzOPn1Mo zoGP_+jD{4URH!cW;g@$71t|Mo8E2tf>H^C`aSSsqFlWS3lwU(T!7%u@4YtN_2G+5Nrv;g3vkcKJ1H-O3@^{K6Sm#a@x%i%NXEbL|4} zgNm@8qCr#Hu1ghY;?)8O{|EIe2bV~{kE*d;0|g5AupMB|Z&Uc*+EiP1vHI0bI zxb$+}=3zIuf9x%%O%If0f)D{15U;W++C9aow3lnIe$s4DQV{pYJW9_|HKV=Ff#SxX zc5(i3hIU-FR_rA8D-*IO4E-cCF7R9>DY?wkId45VLm}g7h+ZMhH%J3%6?sukjq$v=0#nk}7CtZJ?3T1D7KXEuQVcjMHfOqvl@j`obq*9PWUv~uIK=GgBl zXee*MG{m~#k_Z-1=j6wyYX_@k+x2(DK~up~W6)Z;m_Tln$x#mNG1+FhCwiC*rM-Kr({wTA1>$Ua{sEPef%nvEfsJ5St^%c-Z8oq2 z4Gp;T3Ek^6KyU2%tM&#R0ehxk4|V{+zSVLJ{JUV07w9CvPj5!sKuFKax`@up5F!&* z16VsP3Mf9ayJr4IT51Np7^<{yt!Yh93gDqsQ7#$G(EZE^Ede1Jl^yB>eGux!MF0R9 z1K#EnK%hLcwru;CPIJ~`SrY?zUZ79UYD-3X^|}9y7v+NuT{aNY?YsBUpVQak6n!wues*AB%EkP~GKpl@AzLw5fcvIew^5de}a~nVRz$A2=YRz!) zyN1Hg&$YCx zN58PufAH`v_AH8tf+c0*YFa8jqaIUWc{Huj{pW0#GJdWZk4xu<1Wp1@%IKtrD%?5o zy>X$+OgGC4WzfsnzeZ7a$Gu~GTVFa22i1U&m34TN-dR{&)kEMYPh&UE#FDDMdT?(@ z)Lqvkezk#9&T-j>{?1}YM+u|t> zMk|<9;pg~8iv(?HSfPrv1BfhmR??TQs}YjDc%*nR^g1r5V+#A|BQ zw7GbZfe+`e&)f6}##Po!Op}8cB;#}`Yrtf;PLU+F13L=8DUm?KP zM87c|5RM%}ydW?19C$H@h{{g?gevuG82O0GA2m1G5}=V#ftHI8fABtgh;ky$B0Ub6 zlKQP~r3eP}q;aWNIh*KoJP+3l4$`Dk&{P!^c&g>XMlH0)t|XwOD<5ceJ4eZPk9xr_ z8s)rj`8JsS#K^sJ_-WR7Fke3E8jbX|jrVTr6$=p-eADS=z3%OB2ouy*NG_J|4+y-4GW)!4F=jV| zbT+R~Fw_yRz*yyg}k;6BhAB8}8)l=O8_qoS@Z6TwK*je0=X(@e|u6#XlfbGJ?4F z7_ey0qEDdN)xo?G1Suoq&3h9+YecMft!!QFF2%ZdnB!h?844K+z3ER#IK|T1i6+fq zIZK+%NV~Vk0=d^2ab+C~#sKHkc+1aYt2l!xqV%dS zy{O+6-YGl7DS!clV3`aQw9(OfO1cde94=f~*m%)i zi#L#!>=ujUs#G31!!c;tC>#Wi`Hzb0{!L`JLVNxPbiQVa#`p)MZGC9pwX`Gm5Zwyh zJ7@m@NucY%$^axQtY!xrgI&xSv}ii3XhN%x$SZ;ZYV+j zQ=RU~(_)vuD{>Mxc|*#wX**1jpRk$m{!f`96{XR6|_}8|KfaQ zG?v7h-r`fSkn&_w5L5lmBQ*gnKZWz(+t<{g=#;Gsf{9K=s5_Ku$9Di8v7yLxC)7hu z1UqswN$IhJvlZZ&DDCL1Zm~Js1`b_fp?Q)vJ2jPTU1Y14HQ0!%Pi_`yRW8^LyX{u? zRyu#Z#qB4X&3LYEfXiM95@pXLw2e$NgC0(OXmM1}uE|Y2IYssm=y3K0((}vELpJ zwc4OMh8rSG-dILpyKyfLuM|GkC3<0e3od_1qlja#FIdghft)^{`z7UdR?cKFU|v%i zWy;9d*-%D5Ve|*o^&lL--Sy%H%A`p2>K_oK$_p@){o)W-#`jYkOI)Mhv{25!Z*2N5 z4ZUDbiw9^F)y&brOZbs&xGo|#QFuGs=(+Tj(yqASx)<5bq>x}O@~dffi$s(LxilPS z2=}~AzL2h&?NmBl@-YhjqP8-x4`0V#N*Zi_3<^#MTQ4KZwrkYt<@PUS;Qfr(63k_{ z0t{3xe6cWQWZieu?Ef`s@&|M*F_Bv4(9;8$3fY;Jz~)E>f#G!&8$2R}205y7{x5^N*nP>WW#x}HDN7!t+UQO_ul{R{)5FD)`VmxGtV>6uiiWM+U$zU zceI-qLynZ2P=}V)BWJf7`Vx*L8S}DfcRPGuyXC=6j-6GOEmPO?5e2R3qS=*TS!WAbpFZnV#k-i z9f*5qUaZ>T=9}3)M7Tz3I7mcx_JcJInZj)9$uYD?cCL(XyYykMVIt@6>HdPo1IUxW znFHEiOo2B0ND;t(v9X1?^nIn(N7rw|VGO4k4Z5^FCq~RwhP-;6dP=UkNoTMB+x~6V zk3W&zSvRT4AK~+1Qu4x>nc}=TnQ6&hL{%EMW0}u~fVdyVG?3EDq=_TTcK%f3P;mIqtLa!Fk-8&F>z;R|LA5v4dOvbiz@pW);7CIW1qq1r^aYA zhEv;o=MK`Yk&`YmFDQ0g^R~~8^lg&~(?Fl01j|~aZ$8V?bCVX0S_2*wMPs!^d_DyA z89jCA{P`~OKN5TXC(E&a-8b>icsV3##25v8R3p-5%PplvXvRA|N+u8l0 zUf}^$J(>z*2-E;{J;sP@){~7B!_^787Hj4sTaT5{k73(|*R1c&&b7ZM_pyW}?rw>; zI$ytT#+eq*9Ja`z-8&hA<*ggizyJL<7GJp!R7%V=>lv}F%ntd4iozo*LmUR0_3lLL zbB=`qliBce+#clz8MK8$lHwf;|6+15-SL%wPqwa1E!oIwmb%@Lu@7iypZ8A_3+L~M z77xiUU;e<_2dZBHD&gqIj!JY)NzkqkTieNJ_a-;E=QnAtoB=F%bEDU(5{E z-xG3qe0d+_9_|e26+P0=tUGB^LkVKA`(x^um_nt|@JmY^4tH}z(BLg4*_>~?l+k$+ zxLc!{S<}r*74s+Vi9IkQD>NCEiuB^-v7d)$^(@pf0RPizxN2|w&_tlGF)sB(JAGI2 zLfC);x{m4>-jlUADn_J-lvVD+v28$V|5IhTDCewh&>krW64GzmY zBQjx8V(m3E-IEOmwpO~m-F0IfN68}Ziq0JSiU8JG)x$A=Yud!b&9x250?+HUhkWct z|6;0XGYy4(FpF?5Jwkn+K)W?G)a&^^9UTy^nidFGsPX7wSwy=1{nA>Gen-$9YFJel z(FZ0lLq$TTN~elj>yr(}PNsXQ&zhFRxn#PpIu2pMpkV&; z)kY?PIg2FF1xV&n8x;!YZ*Hn@yz0b_#a6ECzCUa2E(27^J9zWYeYN#ews zs_LwrW0CJVFF#OGg;5}LZW+^5HXt=l=`;;5=vf`JVy9o#>Ra>I8qXGcwl(i?zWcMdZkQM4DlQH_m zIsy9Ll#YAJ8uv!-aL(*C#U4l56e%gy6L3SDT z%!^&GeT4>^oVGzWFxX+u3!ZVRIYH3fdUpA4B4E=_pafbV~k!7QFqypvTe*<{6 z#<xGMC8%(|IPM6!l+)=`(1pgf-T23mEE z95Nj(^615UyTWgwXeEJ7tM+cA$t$nkr!E4DK%2WYZMI$5hL9M#0Ewp$ z%eG0^M9N(eXOOsU$}{;Y6Qjq84|3(Q~S<@qZC(pBs*DW)?aRkS4_*uERdLJtHQ zf*-37DzQ+FJ6l3x)2h+%8m|-$d?~hMW-j@bor9%L=74hZ?&w7k*E_1(CvHrT=Z5=1 zb%?y)UO=Pw6#T#|XZ_AiM8YhOhu`lYBV!pF zRB;Ne%Skc0JD@%-yP~A9*rOb7Y$p6b;L6;fhd-AoAr$wiz4qbFR%oE}E9Nz1(n9rG zA0(O~NQNf0!E4QGALXaM#;FZ* z8UdsI;UY4L0)_x~N=W>kH$t2YE+(MOjK=m;p|optwFF&ogq&q#rk8@BJ(2U%(8_Ss znX1oXj%@0kh%sy<3#u+Bdua;{JENGw&;nAY(uFcf-x^Bq%S7U1l>zV7T(^~NsYXB^ z6QSc2qi;6PW}!dF{0-sn)7Biv?{$s27G;&yRJgz%}-^9#hj=S zx~=y14d*j*+2$`2ZE=Cl^ARiw?;AEmCO%t8SI2TV_8=8Y^BOWh@ne=sFxVMA`S7g+ zZuPMTLdIFrHzZ}aS@xjO*m`6SCp%q{w9x$*Q@S{73po`NSx>`o!@V}u@02`l>TvK6 z@O{RC9%!n|K%bAOes$r7sC*MLD~Y;5bAabBEdc$U0!!xCAPsKhsU)2sko<06;cXfA?2NlpU=U*g#71YA1xD?JRMN)1 z4r)BU-Y0@F9c7jN{L z4=f*+jDv0fF|})ppyy-MyWLRcHjc0|s#5m`v7*?m!iO#5!@PH)+~~J#1ze-QokL&s zO!ue5+a)z?F5BS)FIPHv5OX#_1p%Fz0E*Sxd5*28L*D;nNRuedrx!#*gLEOd%zn8; zl~d5oT8B0hvWZQQ;@cX&+2_n@-yx4?Fz1lI)J#aC_}O}rO=5uC!*GWHjUw^vAmj(5 z(H^hk5s~w+8;rIt&sxIoTj1|F=wcay&ysL0?saFxS2zK4@~@{!dG-e zxgIP27XPptEQnv28zWk4dPXJQF;nyE!gr(>X1cJaOKZ5(97b46P(p|}dFR+4rPff> zPSscVT8#=REC;tUzFyH0P&TnK>FBGBz5V{R&7Q79H-uyrp=m+QU&5w>l}M#!A!zuh z+4FqUPg5r_aej}5e>m9xSl4ap6bFw}m`*&jxB(8-wFQO8ko~q8K#Lc09J2fTPM5nM_Avrm=J?7&I>SFSP6o)~x+~`%c3~nO4z%|++ z^VCM=iTCQKzEJHROhfE zM#R1j>O30Yk&jar|9XWrhi-M0)}acpp$7?c!=;~nTnxgw^RjIB?=Q>1!_+z)Cku8^NRl?+5;+#_LAs}P{s`Sr#|c9xd8 z=FT*}IJ{TkrL)0bRVJ+CU4s0+I>73iQVYoqn_ z7ltq+6ga4DS7_#w+uT4CO%!dt#iME@(8W<``-l;0u#(qz_~HI24}}_yV86 zyyx@zYf7z!e(66C4KxZ^SJiqb`$EO5@ zpSAz|B=Z_QDzLi-H|Tg!>9UvcKrY^32Yene3rH_M0-T=6FNO-qjp(?6<@(K;@JF=a zS-DY;fL5^*Uct|LOLWe7rC-ok->>Us<|*IeQKb7$dIu*piWU|Q)To0Mj7xq32qoPz zfM{;p`|NDdN8{BwuRKE2%U_gog8-)op=iO_ckyg0{qoUjERmckK|mF_$WcB+6&r>0 zJmQCPmz2a-9y|+9{g?{A?~bicT9FJ(RPZ}K$n?@!=aD2!(if2wR0H4xN&hjkIF70V zrFL*2hI8&xrLI$*-mT#Z<;aKzSfx}w>T}xhN3~-%K^d#Bj54}&xlJ4-Zd7m`=94Xn zki?EFbaO!QjuJLo+Ypx>uc~*LW;JSR%Px5l^~294>WA&D{m#|`0h<64?2w0}h#oN> z%_NV$Q)nLRkWKW#%Q{vWE6BJD#s;CJD|mwNm|3Rm{FYOiN1u9v?xsiLoQ= zfTaK>be%7Icb;E1dKMnNOMz|j{2GOWPBA||5o*QrMi&DO`SU&y}cRriSOPdvadlgt=w0O-mF;8w$N3=y(14szC#pp+n>)t>2NFMpuP)f4f~ zkasHBIN}xfnKY@TrFf?0s%v(|)-Ya#k_9O2mx%H4e=+%(CC6vsoX(NQ*7H1K6xz%Q zTaWs!8pdtBU>JiA@tP!U(?&zjboEhl_3v)SPy>&!c?-2`TipxC)s$lMIO$UC6~?5c zKCPXk3kq;&#`hSf+Of@&dM1N;ed%C%o5uq=FA+P-hn-*ra$1xN0md^=4ZAh5`FkVG z^o-XBFUFJlCT8jq&EWQ69UwOm26=BIn2`gvqu4DhBk>ur%{O2%f0%FK0sU%C$5@?a zmPRl>dpso9zds6BYsk@}?IA07`s|M-bvzxAqh(@BkTb|5?)_tbOa=BU?i`d?BX8D& zo-t)&tsske3wv6~S#98ZmfM~G=RaIz{%i984N-jIC_NndF&un^X7E!FjMA>b)F1*s z^PaP5gg4~iDVKOPt^{Yk6%{37n_;}jF3S#0_+L!-Mqq8GgaUR%Y#3$cF3Z$KmQprJ znMnT^EU8^r>Hg5JgH4h@KvQ@22M<#}s14_j9bEwX{CPWqI1gv-8JSz3zv5b`?dg~{ zA#Z{;N)mimvQ50Z95_vuLevF?e^(H3j=IkaUK8V>c(e zQf%Gu*4#PhuiOy-+0gP`NG|QO!RN0@XLntmTo(&HiH!x}X-ghkQcFsS%AO0nXvI31 zprCchJ(yfD>b&VbNkUX#nr%1t*0rCZtlFsRoOTSHMj?LJ3HSj24TFVWdv6)QGsHJ| zNS^7QLFY=Xbjq*fpVBz^%)GuN&vA34NM8CL#s|~NU?Wd>+Ljqv6P(QL0aZD2rRYcm zF#)P=OkgNFcrTm-%TtkNhDs$ zXuOtQNCF44v-;;VQ7w(vlG2*b3hOX_Qz~qVzR@My{V6OKc70nvbWW3#(-S(tB%HYV zh@!f#gK;|GvZ-w#FQWlbIcHu_xBMO{jsA@ z&%*IGm&FLHLGviz!2Hjz@P;Cv;13a5MmJxW4D^dGWy&4SVhV?@1b*6m?uj1?G)6z~ zwP?*kU4Pdxdi1IT1VFh|m!$S>MWWL^>$ptOQ@ksSP(Bd0_GF=b(2&{cyT4;;Dk^}r^||1 zd}pBT%oMbmf#Qs7gDhRr(Tgbavaf1(E}EP3{-gavn&YFf^o!YUVRx^sYM$+c^J-&Nj0-(yas^PNoF7P6$LrE~yvA!~uNi--m1b?1!>8gG&I9S3V7_-9 z-$|&=J%GKsJWQaxR^Q~8vLnrxR7n1s1P2!f`YLTN?s8wqQw|ASm0F1;BQ{SgSJ|ho zb)jPLmYpC0_~c(q))Tf5M(Ac<@24yAu*_c9hL)_sJdKv4F>M3QH`fySBSo)uvi8^6 znso4u=XdQaIm zA8pMva&KswjNMVH-ZrqROa;9>=bZahvBZlZb(FE+&Q5HML-28OTZlkCK==@?CovYU z`L7Vo!N@w5dFgm%oMoo{txN20A~};hF%>Wdry-$TglHZcS%4*o){GSzOafD@qX#A2MJflT8lE|L>D29Hi%A9F{mIPvQJc@% z53}996rBW)W-i9*4jr(c^<-Z4mixJrzEHb0)unC8>0|02p`M#i)C6CekU#r6f~BD* z^l85WHvfuK`4@xu%d@fPlm0AqVr$Z)+DyqP!c9xXc=5z4FJYO^2~}GDjq+wF*PnU z2*wScoo-Z%M_x%qr|~S7Z4S!zq1YDI^Q^avPZs-fY-XGoEp*h3c*z0DRzJvlcS*)t zg3l%Ejo;<7*IB;=+WxR--E4mA<0Lxb1mzEPk^uTXf&hdO@BKp+_h<|;Iclulm2L2N z!$Tsa+%$*KaE99xRI?g|h6fmihTE;c<8cU~aUJtAuZoAmT*>A%2UF3hlh$0d=r?gH zA1^q>{kUQRT(AF)2=po9>R(J5_8W|2fcOa=jv?+G3RFQBL4VF+%60xL67;$_0H^)~ zwTa;&rPEUY_L>AaVwr0Aj~Ecv2vTc*F7!-zL@9Ok8`qObZe?ZVzWtz!K)+eGOH51* z^gWp|4`sXcaIn;S{m1gDqVph3AtW1Ne&;#}4I<4$P9cAaRU#K&A*o0IvWYMQQt1D^ z&%e*lzpssdx=sFnbzdlB{Q&yVfL!JSI#>lUAkZuz2kNI1ZYQmSi#k3DB_%sJIRJw7 z&_Wn~ga>HXXbsk06FD1@HnC#8jAictsLLZj5;|Qm`GNT+2gtT%tZZV-*FAIeNBNLe zvEY)zchzH&mX8a4G_XYlkA{iyiHIw7<)bVxcep8;wFeaMBun)#0-Y|6he_kz>w`Z2 z^6#jY+4O(lAk~(O4(0n=bsp-_EwCq)WHg%A6OM5(Ar$XGOM&9iEsxGTNHo?{Zb6u; zbc>u(Lw!2+UH`*i$hkZGm{McOOLa|A(Jh1Rug-0(a8#DNa&8xLALSxF3Jk*~NGECC z3hE0f2!VO}^?X2s=G(&k!?DLX2*G{T;2rLVL;I(iX728>*Wul@Qoh%ZQGs^b{6&<| zhL#jO*JM=5uWq6}#$5Bs%z*T9$}dMkqsm3OwVTzSNBRrCaV4-^>IWX5s)u_ZfO~4J z7s<W zP;Fl<*=!NpL)Q9<038*D3!I34P#s#_;KSjyWc=uuyWzu<1ePUf_ecoq?>Tk{Qb%Jb z0mWlCT;^>bxNAR$cQpDw%tER*mCDpSmN61#W5X1EN=iK&+ObfV+l`Dwihvcv{m3?D zi`JxwgJ_2GwCAXIA~IBBk~sNW?#Fgfv)!_?G~p4=z}))lN>ZkE;C8PaQbV^H27^Sv3$`hFxQ#Bi>;Hb$m!W6e*Gu z5VXnX5H6Oq70yF`7_OT(x#TpSVjoxVR1vx*;C}56W8z$$Gmk@k8>H=PhH338z5J-0 zA?S%@L3)D{K_}?S(lx(2&XFyu-{Ey|YN;ntA@W?g=b7%8AGgr@&KeCE;r=$m{pZiI z`}^uz5ncNqIR7)7;{R!I$iKcW$mukBK7%xdo1E8}a>;WrQ=pA9p(XaXiUrSn(fahw zgxGAq93BD)chLV^EyY9&hRoCw1ebr|v6hERfFlp|af-4-HPHHn?>{;O(1-M?<<6g% zJehwNGer6coJY*{>9oDS_rpx>P-T?1d`N43z_SEEzq?L*-#N;qDIxQD^|cujDUWOz zzc4_)T`*)Z3AqQD=(afk{NUxWzo!02>v)->762LjymrhZC2LdgHtXC1GjxzTwRkXl z*RQdxpwl(Q;?2~42`QvcT#zK2WE^QlCSYy4L1T ztx12r7$tc+x~7g3vR^Kri_pW2r1CIM`;uX%qrQO~!>n+KRUTelKPbTYYMx`U$ScDD z(NL+X@jIJxTU0Zh&WFx6fg!Dwy{k{k?=P&y|_{gl-4d->3WKahldMAvRw%;4FC51#8o6TW zKiV$Rk0RZ{BrtTT+M1me=`2*pEz+LR0PHNvE#O$4%NtWB+FePl92tvIm1kVNe5wyv z$kycWp_{fV58D0ERKZIA3u>1L#h@S<#tbsqziu0Y3FiawXu?!NJ(L^OKvi6qyHRV} zy#3D3aQWu)Z?68;SY6d#L_F0q+@1Y|pGP@!sjjvy*zb{)oqui%ra!qIzn|1l<(oqR=v2vjye#>Ez z9TNxQt8Xl>G-7fAJrJ|H6)tCTSn-*ef*JV<+v zlX#*2Eu0lf4e;RQa3NlLT-qFBqf&AI^_j3!58v`g`F(k_=)woV zG!~BG6x^gSD%Ehe>K6k%{c-GXR4Z6*tt#Q4Swh?S)(VU#=D|nr>yfD$>xJBt`*ZBw z6o%rIZ_tp7Rjks3`c1hfaUOFDg9+pSDK&rNsHkdVi56rMwBCAUr~gQk2z{O-<}}uW zhf;LhcV!dRkLhq5BmE_%Dn7R55s7|+T8A+@N!0QrCd!ObY8JSF(9YS55F4$ZgY*cy z{&B1nfO@3|h6rTNzZP07l;y6>y7C{svKOrNiR|}!$z0^t_<6E*Z^5FC zz^TWIfmHFyd9z@<9%U2P%LZFlo-%`12Ow&9uAc}ij3<9P=z*Ty(cvtDhnduOjLW-@ zZmTyfz4GR^GrO2gbY6>ilXG4oYhW)Nn~RX^x%igTk8IgjO2)?e2B!1F18#Oq%5QGf zQGZX;ZbBn+zFxkO^6^Q-ww3gK{W_Vi4}na`c;j-!h|8Uk{ROt(#i5fkdY?K_R=H;S z;geIEnp~&sezeb+37%G|V98*b-HS@k2l61_(Oqa})c)Q-!I&a3aCg7uL|_5LzyWTs zLvhg62x^LT33boBF*CL5WpBa8?8)BvE{jr2=IwxtffX9#0xhX#kGGfF+a@S;q4<;! zsUkvSTjDog>+?wIiQXFCix$Z{ya}9Rr9`A)6+@C5W-9a7!wY*)QRcwfA~{N`-{Dvl>owQ_nf63eD?aSDXn|8ny+r%xMp?f z_~7eep8kubY!9!UU#1#UlF7p{9wgsyD42&%;VEp}_~X35jFeiZmnxw+lh#P()Yjla z3sVfsyGY%c&V@Qq3Y}^Gq_6Pg7bw;C&+;Ee!J2gH>g>14uY(%X0)Y?lrNe=5nt9G3%!wz5n_~b=3*kvm?q3N6ELq+fd z;4PMJ9u>8D6|c{WPAZ@u=RwcF5wxD*qRbl@FGORq)Ij1fm8h@_qb2v8pO&%ummt2+ ztBw4Io%P|LY%o`f(}4gUoZABuwslyC-i&2jD0SzcDxZ*`sBX8h>rh|oau$W%hkC4 z)25xP*sDIYKR|ky&IFc_16EhN9vY8pV2VI|_BYMu3vt=?hEmnS7^k(l4%=X)Dbjeo zCBxd94Y@eFL%rB0%enM7p-)wwfE-#wCs+En*lEVU>|JK$wd%3cJ#Y00W05o09~}Q` zq9{tT6co}u#HK+>Ru_&6AZ{}|2^~74I~T~|mK<>fz7gJ!ov|IQwiz0c0V~}Jw{Q=u zG=59A{ajTm*v6Ye@1=jN=x%zoyNfrktAk<6jdu~q#W5h#D)K7$D)ljBTc#YjTV9gR z;7|cbl%$)Q#=s}*XAten{$jdZAwn#p^U6`?0n%@pZi@-GnA&vrm~FsY&-`lmwAYy? zc(ZCYP@$=Cd1`Zt&Mm??JwZnHBKh{Q(-=zWcs@=8zln7lRiAlzuQhHfetWUt<>fD# zqUFsZJ?GdS!dHt5?tHwX*MO-F)*`p@CH0I1-L;%mO0UntBOvevBWLAOsmh5P@*Z@^I7fdMMif5p~A#r?6$pzKCn< zM4Q})2SY50AMm(g9-ft6nYL0PmjdV4Uo8Zk+uw&j$Sz2aRNG>9np9l|?S`dk)-U<|-Uv5cq1E-o2w=ljt%r{+*Mgj!&@1trLHZRc>dr8cI{z8y( zg(`*XxJatPE`qq=SUd7W=_j>z0n>^7(s8N!k^2#8ZrsBP@6Vmv6A#RZ82w7@B*~-yu=|aH=y6F_1l^~>}TG>@8HuJvN8w|9|szQM3AU#v@GpMTVw zARt)kkv_|mszQ5mC#9-i9M6 zo(>`|@b`ZhA~-7U-8GjS`pr(Mi(2Jx$fzkER=ytIlwDw5@agR*mgS_Q=i`4dJp%j@ zTF|Z28;dAF@Y@|qxU<-5$-SNzTtH?va8&I+*mD#yRrn3z!e!lWlX%f~5zV_T8>Ipb z-gzfL@uCLM6zR@K#X6TrajT|uC8Fi@fR1&UvBL7RWCvq(LwX>Iy(v?=+2nnQ$?E;F zuPJg|nV!st->cHQ#m|yMa3CH#xLl{b^=f0~x>bVwru_M^{QN|RcgDQV1wSaK*)Vgh zK&E^D=JX=+`Melu3U_2_HWswQP1lL(!w@$XKtF{;tH;$9uB<u zO|;Fi$&pxjS3v_bb?J)>nr#_-)Vl7%-ZIP=H}6ou33-GpT;De zhzlhyFvSfH{mmLLu+<#iM0kEhAS^P=Xd})!h35rlkJiuqbXIC3PFMp?)MYhm>loV? zbZHvjMlXg+)WmsNomws!=Svj#;#T)KFA#KR;5fDzl#C)-LZc8Djy^KLbo=J-YFm&V z#>r14Ln`SunZIChP_TYMRS8#qTvJ4OS&T_{oU<3{jJNC#63BR*HeLb({)6 zbM#3^lVp3pZbD7hn1G5_x2(l)Xn-XcUt3zq;Djj+&JSK+CmR)fuLg1(HwK2WUwj0# zJ#wtKT&OQHJ0raEh63|H6QV3nu5%;2*6){$W4^eqFLzc@G)+zs>kn2%d;v3)x2nnr z$wOf{t*JCMR3wmk7ey$Y2x1P7(~ba-?pTkFIGQQ6@pBKWzc;zjBUbICS5@1EB$-2^ zCJSZAj}bC+<(4F5CxgF@Y>|N^`fB!^a{|uRR~d~mtMQazO2eeG*~+cRx>3tx1`l0l zBSBI7w%dr;G)_kEi||L(tPdM`1(P2MoNVFJ>BLK;I;uo-RmZ04iQ@6i$7`dm6P3>? znH8Zmv9E8p-5KId6-|i+eW1$FP9p{wN>s=qEFEZe*?%P;sFb2LU#?KpPE9R>`&pj; zsUd)RwC7^}pch;bSXJ{GXO!_cl}BXx3loABkDr~N?f38yF<1M_ef2xPyZcopV4ff` zp`kof7hDG$SqzxV+uX_?{1WcS_E#v`O5Id~1^D{2^JZRp^h8YB=!D(<XdOK_ z-IUrMzOP>XA_l`}*2S;!USTON0%{`M&Zo&8g!IiTwve#^Ua(ktwJ~$DPf1i2xMiL{DA;RbbFg8pwh#P#2DquqDPYL{m z^=dy&jDR58Su)@@l=)qnx$Rxbxj)eZK_06rrpuxJ+;3aY4IH}Bm;ftOe-{*gQcRAR zkO_;Qhg3I{kSV@Ik%BtM2d9=_3$!(4CScD04FAcK$3)FZVkCp*=}c6^A}Rov)d=8{ zE4Ca6{hM}+v^fWyMvLgXFH5-jE902WEv45NaxUGvl0W!L;nu2vTWyV1x!A5wI$>>7 zil!L;j6BtaOhmBMP11E2)03aErmwbqSA>mj@0d^O@RiQaA&7gQ(}(I`$JPP{#wxdz z+K0MK2!RpkM^tUuW)LZzhyteSNT+LL)rI7RM5u68__2yZ)ywBcA0-Z1tM8Ogczg9bKujz>;dKte6qS_Ec}`?(UNz@(~EfIw{Y7;Y!#a` zvxyJ+qnvYJ!Hh6xqx#fArV}FSN-9evlIonUW?3{l@`rttcfl%aPUo#ln~HN?&=BGi z6D$om@z6h7?l{&?zC(N#?n7YRf{}P|2!RP55!m9ZKqbEEpY|)=b3jIUY)+%sd+DbZ zpJpmke1j7EUu8&sE^=Twp?;|O-{$*?qe-nhP#`Hv=_s$=yDgUxGLHqCFrhT{uy~5h z+5uoq?M%Q@TbL*yR>nB84%@R3uZcRPbArr{%ae^&=TzO&Qje<$fH^C@QNBQx%5ag? z>xsr**~sht4#;}a=6R_e9{@QwHs$w_cGsUC)dkO-slDE^+1jmH*G5~ej;-X@%OSoG z)|kcpj}k+Vs1TB*5<@Y4(`@eHUA(mx1|JwUSfw)s}|FU}n1g%xlFvGo9N(!rKR}3Fzgnx0p4i$iW_- zdTVuewKL0CZMj*+^qBi@LCrwZmehqN%YQsJIPcue*M+(=q zLky_>OPF);s$tVm>6-Za<5fz@AW5K z!9U;{5ckd|eEjPTIpxluY$e}2M5#0!gL^7Gj4&rmp&5``X22LEi#&xQ7b=@|tnm8j z{?*UH7l@jg%y~3mfs~H%X7C-=s&VpA5yAD?vA}fhIR}e3Y61H17PPJ$*f1p>DUdyI zN-+Qpkd4rBpdUls!ZwimqTbWZCMp-%b=#jGFr>dv&KMP{zOcw6l5cA08$VSA;;Rp* zG4JI6?i|49-k~~!`r1_q3kg+iQVNy1gOz%v!wR|6kKB!4eMz`yP?>_3kkDh{$$EEinat6OOY z#HV$v-AdERUD#UVzWh{9`$@$4p9^O$_=>q;kZ7(h!<}&IT3F?*tmx@o=GB48L2_kM{CiHI_xW$k%k%5QLK4O|d4qR0A8fC0sbk6vWQizU3@T})Kl@+ar z2rJgZ6be?}U|2{Nan~N@s90xAL|*=)$8zqJ)X8?hAjV1_yiZPT>=^=e;pbMdp+P}z zu+lDPoyMoL)5;DBnS3`kNuMMQPv1NjkaPqAnw6CJsmTm>W7!yn4*VJCnSL}~FLM+x zOQN6a3UvwkFvwTmRnHFN8-3s>)GX8189wyQh%=PtK#fM?Lx=+1gPf6Cfa5sDuU<^b zmdsyYOhuZ+_x!0p$|fC@q!67}$ z2Fyejo!6+d+M^>~}6(de{S{F?ZF5B0kMM9;6&(dYT*UP~~yisSv zIgU_^cX)HfrAF(_RsP&-9^Gd8dJuAY&mgx^aOU)288y0|7Tvw>Bx!sAA@=i)|s~D8RvZ{FXTB^h8iPBk2`>F8+lLB z<S#$+N^SGuOsHfNPWp8a%uo5TB`MvY+VXKC3(rEd5)#F+fNUm3(HQCp~RNXCNF5~bHAkmWp z0Mf!M$OQ%9vi{d?+ez@Lqvz^>F^T>tuo>>rouOfAecY7dnwn0pJ z&%Y5Px)A#plQSeuT+TMvxFPK2{VG{)=N~R*vH_`T)S{3qp}ZQ?)X@BUK&9P@XE zkQr%3$HHd@yIUd86dpN zc^nL)%RA~R)VZdO9tDXs!3xx`_9+&pc|L3~PP!Dp-I$}fDS!1LD=R6WKN!l6P=q@W z{YuI>9xe2=wC9w`BxVf=$a$&Ue5B$V5k=WjsIGpqI3-l&eSkPWiBaFuOP+NamcgZ1 zn1%{gU;C5CG>F+h2EZfQMLdize=!NW$cnU?KZNYwo;v)C$@UKmz?{69hSW^;r33&& zvtc|VQ}}e;+J2Nk4~7lyJiYxp)V0~lI$!(x<%qMyQ&LqvWETdz8L7AzB?4sf?mKp_}(x*l#(5EhVxfzD=1~`vXE|--cVC`C>)&Ev5Zx9B!s3|LTycCFiDty1-(wMTPiF ztK$kgZo7)|ZK++w@Pa46OmSgFnz>QuG;NB)O@$G$AjTAkQ%7!*y!t?+wQM%tDUq*o zP%YE{yR_$5^N0{KgmH?Uc8?xPjg?LAkPg=)_2r&eMftj^*YVdbymD!{-SNPxMNc-z zWL6(+Dl0v;gQ0WpG1zuU8x(O4ncw5$Qe^2#@^n?rLr-DBjO)s{RQXox&jZ(H;Vc;s zJ`LV0x3aBSFGL3|kj5;^MyoC_7bOHq4QYdIva^0Q8cx}U{rbTGAbzS40Jc}5j2*=a!_t&4gzy$$=6@$gMr4TTsa8UOZibY}|uN5NDgH7h~@e z7Gvawz89SQBT^A68Rnv>5gPT9cOj$k>Rh4f12+{;v^@4PG6^6+8N3Vd>oYUQW2%G)M2!nNRMUiv}&(bw!x!yn&ClUrqMzE1qv5PP+&v{WYCSLu>55^77AUY~5 zZTYH)MKzeULSIYAE?@sBS#kKZ{CtMPqorloX{w7O8I$-}M}m+X5cJVIgbR=F7P>be zU&&`Hek^IEYY#U^wJL911D~xS4JXu#ouu_@@T;1a z{z^X+5_0i*FY~P5ZpY&;Ptx8c(+`9>PH>*MfwDvVU7o0Pc-A9dJR8( z_gBWcEAPy7ju=aWou;L-4We+*tEq}fOtjo?Xd@N}JpoVdoyrqLK za%r#cBfKy!!Gcbv-DG%7r#*iG0e#K2&Q!r|bbk=Exg1U8|ME2x?|v!9 zU$WK%4e3HPTJ~d4(cQ@leXWPUVxP+~{B~Faps_(u_eYd$u!lWSobzZzfE^-haO9Vn zvbSB_FloR6mLmxmu%y?YgS6jBRxd5iICO^u9LC@>H?tg7TduE7H&>l`z!%G#StH~t z>7G5k49gD?ozf%a0z`X0sgYog?b3D7BlV}!)k~q4oXidlJZC9We9gu> ze=r5;T#TA#R&%Sd>>Iz$I)gj~c%4#FtPDXtQs$rqX(1u7K+YQF_#I0)KZ35mq^5iG zr_qJNo^MvwhaL9}2|;jnBlOC)5Qd4`NX8Ob`%r0xQUD|9@-&f%;@t>wl4vWO(0M5^ zl~s>R7fx?tNx2y{+Li{~Lo<}fqnd3U=cSz#drTJ1S1ZZk9tT-TSMd>!c+?Q9DJ$Amfs9X0?(U4*-l^v zS@Bj0bj?EVMhkm;`)3KF_ht8o@t&8mcN3$!!1kUCR>uwY`{jRxYm@;MIu}X zpRgsqV~wQ>rVH#!5r6nJ_Xv}-=c0ppqHmoj@{5MB?1-IY*{e%|`YXXnUTyezO{P}1 zAE?lP7s9rj-4J>_+v)EP|KR=8BYE; z6zKTc2co?(P8eChbr16wLe63ixMB4`f|W!H{{CBNv;^nVMPXo@#2vG{&F@PP%ZgLd zQIK(pg!L8qo^hKl+wgwSJR@~iC4qd}IOI&L{`V<~e+Yd(`D@~5nkd|{q%TyLb-#}; zxQr)Xe%gM!luBqwd9c-`En-6hDS}U_ zIkqbEFb71k!UN~cyEOb1E2n)L{U^q=?1w9j z>+6gXkhKS|BFWMCrbexW2${82~my=vb{&L^PJGF;l_TCM3Xms8Rlu7>AC zYYHMN?Go;=>YZ*8SQ9@9SW<1fgBy+CE}@VAY#iv0mCv36jUc}H#o%(L70ksNyAnMR z6XT7au16n^NVS;42_UU06{Qv4Zt|3cl240>yLQ;Op`};uX5DZ|m9l-3{Nck9GhX)B zLW)0IZgW7EiZQn++g~wB3(8ZHlJMDJ ztbFIbeYY=)VzL9doly2>KWg>@LTMAp6<9d4Fl*WJP$u0jWb|tIIoQjuvwH&4(x+A- z;>t#0=z}ZFZ^IyPHY-Z))s)w$2UVk_%%^kKBK!6k5xeJZTaJAu$1!q@B#!#DGuUbW zr|hlGs+3UDYEqyjzaa%4g$;As>u9qdA#av>=D6zV^;e1BH@v}eEp zXju}ogezP^^Ed-tKkP`ug<}_NZBt!!Iu(4~`FX4b56deIUH^$EzJ&ULxWz&M1!|-; z9X#VyCZAJV1P46W!c1BUnTtDPxfn8Om+&bORo*<2LGT}EUr z7sWm$J2+NWj?^%?Z^W36swG{}Ozyr>8I_}dT*^`QRdlAAY;dNdOo&Xdr)(VN6ev0O z{z8R2hji+zvv*WXzdk&nn~y0Eg@PJ5$qQ!yeQ;*&t$Tb-ZS6PoSdDndE33 zVIHmqCd>kv2^H3Mdr$PTy0%l-ZRu>-n}pR(_pE+@%f>)$kGxpl})9^$a;Uxu1k ztTs+6a`8=BUgRFElv@_7DDsyXNbdP)k-pv;u>7n40+ii>Ga*GyCfo1ZVlG^DXHcm$ z;lpd<H_h&4Yol@GmErAq8Mj27?NmI{iBXF?<-2fXbQg0R(QX=5R28IwCs^y) zkInfzD3+WNrQ8S&zg$GO0fmw@LH&+uc&rXTQ9=}WLL?1u-L0#QxmA~DCi5$nbQRN zBfO}q-AgN6OxXSLZT8wd-laieMt*8U&mdy?2rfBU?Ai^N&$LDJ+_H(T>((~7_t?rG zXi5R4889)yr^n8;&$9T0@4;ls;Cx(gHGW=_i9pDP&HfavXuZOS=Vna{{FRq_m?X$A4Sfb64Y|$?ykcV!Uv4 zXF_jt7vzuO^^<|0r18Ma0ZVT9GkCY9d$;ZxxglZ@z5obrpWY3|#MD5|<$~Bz?-ce=rBpBCLV6fg z$4Agf5vLqu*H|ZXaecVkpRJ#EmL%Woj7ZaXsnrE6P*u|`7vu4Db?qt1&=WPCKsjaG zWSlAIP2h@&CL?{sON0FtoO~Y3w!GV!={(=5^j(lzaPH!r#Ntn;@1sd9yQ`htfE*|t zdVE9T{ZyZe5)njo-%#*1q2$&1eGdm@Rnz2HM@E~;ww z>3=*qgISNg%Q~OKP1R&_VBD8MB|5~0F-0&Uk8Tf?7wE>2K=AIY+aNjAFYpJWfxPKD z&{EzBByyHGAnuGFom5tt%0Ylwahq}=blEB#rDl-7p5}^RCw>P3ss7~bA1{Ih$JT=z z9qR+eP5FKoaOk>zW54Fjx&{ZSTCG|*Ho80YFJyB8&w>mn9|GH9DdLLF6qh}xl?=8| z`Ja469?)!t&OYZXA*G#@!bjiE8a#gD`@KiPAjL5H665((5U=D;dq2)RkHBrT?X$-L=9O_Bo+??3A;4!JgxAOB?F3AJAb%UJM`g1$%n)A%(}&yCQ?Jw$%` zUfvQfafl8t1{S^!JnEwzBpI%E=Dmf_88HVfF8vCw%fs;I(kjx>GocQQtbvx7Unb}t z{>wrwJ9uRJtdon=(QAzPsE3^VQ|HgJ?yk1uDJE9@@?Dr@aREG90GMru9#Ma*Bw!Mu zqq~o*D;p?1=288$X6MkXp%O8q!XtJ5o`34upj68MHxT9h+!bIYvd1x%2dFz;PTMif z+LR^}uubO9s^3)?>_y5w+wQOaV(KEN^Rz|ZNowy!)9;SDo*Yfh@D2&et+&c?P=4L> z8)y-_Pyr&hHCL!&cfj19vO2p`<7a7LlJv2rsj4~gPpYMe*(I@FDV-;cRT8f-LpIE5 zH-5?<2LgNk7JtcGLQLF{$a*=9Vq!i`E9$7Ex{6WwZO@s*GqAn-! zbGbWP(Gnd{Vjdj!=z(zgW_pj#PYJ>oh#-Y^k}V8Bh~Nx`koMJ^w)aDBz!R}({zMb_vnrBy(c|5 zbt*TLqsf0c0VYDf_JtxBRX}$I-sJTXhXfD=(T$kUKJEHZ(V4qnf;DJ+4ph0mlB_3R zLUd{pdn`k`qw!0HB8$;D9i%F-eI(_Rc`#+D_1sdavwg!|v5Cgp^SA%};{Dd({3$Fy zu^4m@7DpfOpa#T67^O@NSEMpECAN@K@y3IQ=S4)X-i#h251o8=;_c&N9?2aki6tD9P2-Tq8gy<*QmkGuxe<-ZVoqy# z0>3YJ$wsMCb?;U3c!xHtSednPY_U}0X^+>HkX`tUJnbyte{hF>mnsp1bWlzvHN5TQ zD#R{E(XR-W6#A&l4^(Ln82@tad(3xCI7QYr;C!XS;K@IeV8i6_8a1jLOhHvTEFi$n zADA))%9Y#R2b(1;nt*OF3!p*H>F`W%%>C$J&^IUZ^%v11sAJ%DzC-FzvR;rVo`sY? zlgUlw)n$eWi9PCG^W=r)6szWO+@OdkwiaQuZ&>@~&kd$?33r;!jKUa5iH8Db!8eL2 zjI?CrqkU6^{hql-gR6}8TjOd_uJbN)*LAEyi)ANsL*eI(QiW*ly^4J@)e4tNjd>Ga zv218cdCh5DIFU0Iz_p58Vw8e)JI4 zC;8kuogfpVeXUc~BjQyl8$@ic3l0{pm32}0rOd@+sEgjJKseHn3XN@ceQ@E#`v;j* z{-6Fr+|NBC{SSh@a|NNE3Ay39f^^j)-|Y8A zaoF6GYg**OWk=mN0VICkz@tf3N20y&AINyBYahS=j!%WXZE;o$N@sxCAq)cyAIT7S z%c#!(3mKY&?tyiClEnWz_6DFXfZ{dJmj6w>hGUdDGx8U*x+QTyMt9YNAWOvaHb2%+ zGxZq-(vRKrAgkq&Cpcd43(<>A_P>z4Y}z-9vL-WXP2 z4Tsv#BR|}8Zo6k*u?fH9ajlT$RPV_X%C-j!jA|4oFxKV3+U3TZsrPBx2`0ngX8Vxy zBB7xbs%g!s{9ypOL7YYNIU>BS)d2xMvgM;QL!7=`KN6nC-G5ZvyH^nQl_&l)``(oL zpB5-xYzK@W&2Qqs7uuPm$>iM4Wjaq?UZeyq()ngQe9Dos)FT>C%rC7s>dE93EZbxF zdDCoj&XCS%YvSHNop`V>VP&BExV`Je#OUl;HPi#CL^&V@tozH-vqUmF2j{^{PtCW@ zX)-*|cV>>InKr+GO9jl9W??Z3AsEDGZP6o-N>&wkG*-j=H$#SyiTe&aMc@hg5}gJyLo{rKuPT%Kfb&LL8Ez6WrW$~W4x~H9$46(LrhE;UAC`y+fc@eOZ`-kk}wxKH)X+FHI zbG0mm(8j;0izCe$x{c(2P_hEX-bJdWh2fDA)QU;D6kkXCdC6-^RMtyrJjyC~DP z*jDvAQDadBDpNH-aJVlbv$}N`l%Wy=1JH|9)DS4ijiyVB?(I;=TvQM?)8?smNXYI==ul@hQ(nDnQC<75tJfo&}oru zSAw7Z1Vn^-EhQQBL7IL1O2GaU*2F0Ko0!(s7A=-;Rx13z^dO+MPtku4VweXoY99CW z5J8$4om7BuAnBlFD4towA&xbt@)r^()cwpalV|N~)7B)9AwEmknw4?7^eLvCGqG#c zn>~@+wRoH^NtH;@RRM&YDO+*G6mEc>gnC=(=(=uiLvV3g&(aL0?Oop~zI44%$_$eF z#@(aiF8>cqm+{o@lu^?5z4LE4jz_ZUP=^F0XoDal3HsQ z+>sz*Nw*ISbI-F#LQ$JF>zit8n@F;V#&~L>*@OX1>YCl;55mpP-Ua=yVEW_)$9D$? zNG%|&91#4apfD8IC>#AY5E?~(nk2q@E$vA<2+DX^fyUa~sptgsHS~w}UEza3IYnJZ z7e%+Fw2hD4Kg~Uu@tb_f2po{e9aYKeIl=A%D#=aY6o6txbyuB(%6cOz)!*B)5L*G} zx)GD(imj~vqJ@tx`*?U|>{s)la9lQS{W}x?8uN1O_DzbW+ea80qR(F)(4=SupwX z(RFo{)IeRB&aH%JI5{vS$I97xN0o18c5#NDy>KeWF2x2>A;rFT$fWJrD)_GXq|E$7 z4`q-BSZTi0_fcT0H*{&hul;6$(;R`=G7Lke`v$Zwm-u*)v0CoFN z^v(l+W;dD}?`_2~OTUz+K@rEYC(sQ_&1B1WAA9FWQCkW!<2V(S;K7O_77B3Qv`KwA zk)Yb3CuNIo(Y4S{F4fLwm`J1$QDNxlypJ2_s9T>^R%@j5f#Ny!xji|-EH^pwj7&y> zDEjF~3uW!_e*`@kL|~6PMGFS{mQzv)>`^F1pX^IWzezQippO%|v*L3tEokz|g4yGb zzEaxq^~uJeuZxZ>oFfy=Z}t5uM417V2hQuc6iPWiEfr9#Mr1>|Q@C&I?D5n*L8R`M z>&{x?vb~dGA|>&jfp=FfSp+BjDBZc)m~sTM*p&P(I>Af<))j_SU5u_)h9LMQ|;3lO+GI@Ye(u%7eajHG#n9r07Vczj79VZSZ3nP`D z0t#3c3Z05YIMbJ-}{HNw)NOIPkWU` zKx(BsT1tgqPP2<;$W38qAADHFj106ld?uF`QVBSKy$+yptV1w|14vkQh25$jCI3E3 z-coCExHhIpE{rOwPJVPjzAjr*gjX>%SjV@}jEq!2xX1j))TC-)N$&#=r1i2$n(d_^ zLgVhw)D3w93U)Fj#CPLCl@CU2ZA@J>^xoH5bH&QJ>l=?!cs<* zyRta_I5=`aIDZu>^>yQIsG52j3ggj8D)n(YJyulhEG;wa>ifyrUC~O2;Qs4}cibFD zhgCnmX0a1&?x9aXm-3&jcEJtBJ|M4&i9cZ^W(SaXsXyv^+p5LIMCdM_us zTPKtwTQ^&@UYlkGXItp;aCrHR(#dE31klzG0Aj$Gbc;D8!4HlW94WccHE8~gKE@lO za)j1Y4AMXJ>6AVG?tw$xR`#fBh*;rVNk&WMtu#*OnvUl}deOELHYJE^Q%Xu_2%7j2 zd3PyRR|si3OqUJu@gDV?k~_FY867AfxH-ZcZx?Ply)T-P1KXv=cjH4`Uw4dCd&|hp2TaIssJWjsQeE zNuxRp^K*(t(0Tqk$-Fd%x7dzLrfl$9G2{>e!qN%x0PsxSA>caJ3NR?Be`|UGmP2>b zC@haAXNO*SfJSUlD$b`L4k`%zXE!gc_pB>BIUpEkDK;wTZ=?e2h1H#t(_-MzZU5fWbsMXd}g3ktZx z`Ak5p+B=e?a&l6%=bh(eGjMAnhvy0u<2O%qONK+B8s3;DQ5pnz3yrPm7|}5&4w$!T z<;H9^+k!)bL?I!CkIw7%nny-g9GhqFH=D$-J~+bf>**ttC zU^cL7Sar(gdrJ7Mp9C*cWgR6_7pVsrz?aR%G@Zr+eI8&Hng+}iZ*FZI=w9BEy2Zyc zNxcqv)fRk7tx1=gI<*-^HTmkGtCjBZ*3wz|(0b#I^2Z@32Pda$_o;On67KH8J{FX@ zW5buN=DMZ%IF`bZrAA?qlx3O{kU*9Gss&3d4=m?5$5WMB7*o+T3V(_$tz085cG%hp zijT|=6{nrLmqJ$6Uo{u)7Tmk3P}TyLb||_{B@n2Ye4nZu4YRg7<_xSTb9aZR{;c-4 z?LM9Ks8~`(`WoiVnM}lw^JUchyyJShd>`?*KsyZ3)z+M{Da6zP6iU5S2;LIh%|fJk zt9FI3$GTs>_!8{1XtQLDXj}2rUR1vv(c{)jt!rlpeyirW)74#?P!2Lq36Sq}J54o; zov3LMvW+y)S^qRz@jEIA>zuA$X5Cnq`E$Tu@n^C|<>3lFT@dgBKA#A1QAq@TEcFg1 z5z8I)sGl1AmlfcU#dUGk=SB2bA=Xzj%V1UiREfdXf@+ zBd|bc=2tvV+J?)dju8oed<}Pec=PFi9)SB5irEaU|DCtes`SFX%FRsaYy1O4f4k*h z9y^AiqNlgXe<(3u|3X;6yH$=R!rI>=z)^!npAlm8)WV9Y?Bp9iox!x8{(g*N^3tmC zWnp0m>+-XIHQf6jZU5H+|3+yN5TT}mFy3;Ulj2rZ?1msW^u!?`xv5`dFeQSS^>1wg z^M9#|9k#mZyjDzK7^4+W`-Nvi|DS6V%={uCg(~_q0CHqhd+U=b8AXG0RFO{Ds<(R5loG8jQCL?WVuh2(>0)j*X8Hbo(TD^P^~%D3x3?w*wFm8d(E9> z$M~MX8Tze{;ZO@Q=oXoBXkBnJm;EXCq4}aVVY+-MQM83G%<=x@g}dX*%M+f>TJZ!K zv!``m^r-jxJ1W~Mt2A5*&fK$8#J2eb`sMNFW8eyeqsl5~l}OG>@h>wG$FRMb$e*$t zgJEC2>7uZgURTtMC6= zza*?qTyJn&{@br77n_1#Kd#y5CfiXz6Z&Ynfb)T>?uWvkIcIBQ-4NM(rp?JrjheBA zbu|UYqKF)!oJr2vFKwE4Qq7M0$4PrgysoikU-t_CM|vYi5k$Fle?$#EE8k11nbA4p zRXpvTCC*R1-ze}ZbN|JdtN*xSC$??wb%lIJWd7G7{t$~tpZhxgLfYXVzt1=jjN-=7 z6>whHhW*8y{R_DPy?5{snF~myrqGaszd?j2%N{-!|BxHJr2@bd_(e)$2#oR?sW!|M z`vdczr=d6fEYDAo-!`Y>2blef--$sX^*f@T&TGmEP|7U{ZeXWXD>qW-;!=yVC3fPs z@`<0YyNy(CLd|;xCNIrXu+c7l=2~XvXcqicb44>>zyACmF0gP*|7VPSm9)r;IOtmB z2UVNa%6?-`BJD;{=Nzwg_U4G5+w}=FyE$mcd*;22R;GyF2#?fdSnfGE(Tj|ygn}!i z_oWCt?IFc0UPrbNfj7gAG#ee(Rp`pAoeG$pH&km{Qv<~N2}2JOlg_)I;y)+%Lmv7D z1VFFfC^`rLq`R}xNvPAvMsoKt+X zAL6XuhvH6_KD4OoTf};GC%_4?<%)7@W}l(BSj^43vGV1y%%%BQ2dnDm!}shB6@?9& zGI|D&J$MM!9{Hc@VX*yY(bo`k7yOT0V-}|?SmVP`j%-{0S2}Q=v`lH_SRi+ zWh!t0lBo`ZQ8F7G3Our6v|zq!G3a1<0fxu{o4=5HdFH|}``@wuNE)U4x9<7hB=9vw zUXO%Vn3BQ|k7CVu%*1NS%7CdCLUg6ii+@DI<#`>hYpLvDy?D{tBt+ zHI{$nH|S9%?D62?QCb|nEkBIg$snfs9q)!H_d3j)>!!2aFWN8d$$UQ*--}U=mL1$T zd_xxR{<^T*8+mPV+T+2hG_#=&xaDOs5z&hM_rsJJRrj>sb4_pzb}|suwo*G6b7lul zyHWBkEE{$J;u4~abaT-Fye(A!sLhLKG=(t;-8JL(!Z)j``^^&9IBq3J!-hzYqku# zS|M!uZ948&38sINQNUD(c7jPa*{W={W52L)AZlWyHnJ~m^4Cb2M@-KzdW5J`L#$-t z`3jA2J?Vye1{Pf8Z(tz36jGSyNZCWR`xJ6#?`Rpc=Aqi_wz8mf7$cYb#DMSP(TNr9 zL&Yv^u6YtjK$^(jY6XI-I?*p0L;aj$Qj}19y7`}f-n4>@p2C`LD(eoxADrP&k(EzE z((3O@E8LU4`3YwY93#TQgTbybx{F(sZaS>aW!|Bs@gZ+^y)HBB(QE>`j`K@BpR>hm zaOa!wyDM@NH(vYkwxmeRWqTuz3GoVDtG&J%?-YlbM{y6 z-LrU-=g5zG457FiTAf0k9#Q_CPv!qA&L7$NEIME3rI_HJ%IutrlflC? zj-+27>pL8{9!tJi?#>VnlQ+x#HD9(2r8NS7NU-Q6O6l#1r7$f&1^-K=ABsxu;}tarmp(0w zE?b*MeWy`RTE6U6mE_IqlGejTQT%AlIU zv22W9wwM&*Idhm4WMb`pn7Q-g@Ob0)rUK=p)skp>@lV}TF`b}^8B(CwdEW1tXU(M3 z>)N=@3$i&~vhha;I=3xg;mp) zMy<(rzgk*ImQppT{hvaf^z=1f;Yy8gEs90^DueFzxG|)}fxe%_%)*J7TW@dYNF4We z@-K)BRSR|VUaE6GOK=SO+@ur9y3#Jdp{H8|a8j-hEtNUcG9@*w0Xz(_Tb{SF`;zNz zE*eKS1pBfFYN7r|js}K_ zT8)!O+xoYnp>jV7xA)F`H+AU0%E{Xa33H^T6QN%hqZcb-xg`i~*a$roPUY{=Vt-%k zI$JimQPf`4^JU&piS@GSCxuEG3oD#ur?4^p4R#lVl=u!MyQxufo75?lX1@RUZJeBB$;C8y^2&ndK^#7pN(MDPk0~#qEU5E)acdjKi1}InR}c9>^kqdpP&9R z4-t)?E{J1q=NVA1>3#fg<%;x~j8{t~r=K5PGx7#fIzUiRLSWO-Nkql|vhDcqQ#quc zTU++oAuBJpLS#~Vy@F&iJ;4TH-ieTXhXKMWJsJbuXwKc|#T38_k@FSk9^V~iQ!nVg zA_D3A*djzkw<*Ua8$X9dm)`U?>VhBGsHDD#t$#uzke`Q?`!e%svis`y)cr?^IpX75nnOL#H^MUIO>koFhaNX-4acPZ=WV~;a zavTlD_7EoqMCdpd6Er^f7lcMsfS<&UT#{WDxvGYEgmC_+?}|l! zhb|RFP7kvy8wqT}xR|U+a{xnBJ_+o!2~I{DQ9M4o{+z0tqBSB_;_Cj`NV}TzWQQa^ zJo8*>$JDO&Oluyu*ndsy+t}P_@hjjgpuL=v)P-^X4xl^g9B5AdQ*T5=cGjP>K4}t2 zO!$!y+Yo3yi@W(~8nWd55#y5`xK&x=ye{$p<=;78a@_Q&==&bKQD4#+uNFCU2mZ!9L>t3ed z<8^$9eiB%poa0|&Y$rW;q^+u*=3HCdMae<-VN*gX-L)$Hnp=`*?_C!8kN4!i3#a_| zPlZ0FD!NyF98XSRCSCu{@e7o#S^Q-gsC?l57m|Myw6^-^`Z0?`z?oe7gv7yfG?|QI znc7~Z^9(V4Qy8sK8Z8|9cl^KCe``o-ogkdT*aZ)(i|$Pk@%%|&FJGqn<&8r=S{$JxsG;-}$&t{;!n zlaF?*M+Iw##*V&q*n9J~mr1S2g$G?!`u@PwQ;*wlJLl>~ ze?Da>>bH^{$>nfk_tv+DuX|lr=o{M-1Zf&ry+nTp&ybIu`$ zCFZ_qyfSV*p785sNN+19O%bVIynZQWw5(jo;c*~LM)y)cBF>DpXl$V>zIbBcM`P-Z zKKHI|y6rUrM@Xjq<3f*QqP;cj~%%aP3Ko!A@HIdDD-XA@)a4HZ^d3 z&X-9aW|^CM93dva0E1+!8Ty_mGzwj*6dm!=TU`7Lh|BdVH#Z$o?<1ezyHP*>`yxqO zChUggHEpwk2AfYC!JNJvw zW+kRmsM})#Y3D`ha{{bN=oVv7hc1nV1uZNaPvR>ds;zGwzv$ebqIUCj#pnVwb);W5 zAMuWrdOe=;jS6CyPl5h{d48D^9B{h-349nO6Pl1M>RYFAiEvy0w3*_*>u@wdv-wHs z74zwVk0sNeW^kSr!OKH*e)LlCS4_Cms~mZ%E4HXZOum&MkzoH5F67PaU*fW1<2Vn3 z;`E8TX!7fV_)$uuYfpc*no=y^6~5~by2D329O^4EtxD4dOp1^XLF}&I_9?fGMV8-6 z9F{jWZZ=ezTRPmB*t$u$Eg7wFkG3=0JhE9I^2sdRQ^lxlYDj`&KXiyWC;@V?A0)XG zr#5GaIXXOvP-2)dHj@#pyPG`4aN8bZFsTH@@Nn)Vf#OkCf=x3vvpq5|r9pTnt2J`OgKuGGq-$iH*Rpqo`JN z)p3*>)e|2~@;A2P1mMK`xjYwY{8>A+~-1yz>S{21Sf!LRiL4 zg%Yvv%^D_qXCaaOkHfh;MHKe!fT05^q!gn_S8@%;^P(;j2LS>o3auhlK3O=)Q6#i@ zfzh&DjjauX-MlqM{#MiZz1~{_oyjY?cs}Y6XBWPbdoz?`+rG$)f&zOTPIXB-EJU(F zTcco7Az

TA`ebA%$rz+hmHiI30y=o>HsydJLCt`jpwZUDjc-PZ9&-_T+eF$CbBknbt z2iT*jfTVBR4}i$3W%GoNa`8_sPOB0h4X5(vQh)7hLo`3&;a#@G5cazsL+s_KS>{+B zP7){w;Z+{M2!;K6`gICC2At>zkOBvjxTEPHp(ydC4^sr!q%o?daosZ+ULE_Ua8bs4 z^B!VuJCA#%4b)|(2yGra;P(~hAASlI^V8K#=+x?N6HQ4_U6_7*v@-%3_vd-M9`p>Q)Dj=dBS5M+RjX@3tlr7R|cT!6Rc<2w41 zF&1^X=Jk%sveLm>9Gm@VEWJj3CrIJCk3P2KllC@$P!E<4*FK`dDQ;Mzbny|5BD<>0 z39p%?1!vQ|D=tZ2`5dG#V}$5eY;q%v8h+=L#p8bM@*`F&z#-u zV#OnmI3ZRy6*ka>T$)wxl7$GgV>?Ex5f~z(6UKYN+M2IbBD3n!j%?w0h}^<2{!|%@ zkggv+J+S1B-*6g|av~MPCk$C5(Tp!!$`_jX%iJ!MfC3X-kEmc2(Dv|N#x=%VPHyAr zQ0ok~IMMknwVri@dq$bY#(2q8VD`9op~ckv1KLnp6HmGPY$zLMrDwEy#*|j-L#NAd z{UV~KZ69M&ds6Ff>Vs%<-Hd${z**bNN|z-UP3jI5*|0)SV~#$R>v$Mv#+W(=H4HvW|y{+(575q|n$5AdQlVLM3;L!KA!qeaz$E>4y^*|X%#ku~4Z z)|F3AP<0l|pO+eXzB|y)96*>8u&O%p6$+<;BUAX{G+jwKnMxWsbm`yHk+t_3{5Idt#NZS-_f!C%OFyB((YI%K~s{*Nwb zh4R1tk^L7EgtGzF6bjR~rUtV6*eAB;?z5`q7;`UNE#>)lQ?5LAhh2}NwR9kh$!T|> zhX|U|YoWSiEl2=S4;wFJySVwvS)L#p)f`dFpwCoSYIKq76VK^5?7Rhg)a`Ty!1cfo zDGhoek?=ihIlohFbz)v>?L=Uum?FrrB ztbwwa;C5SvKjaA_ZR-bl^T*xRv?0sqgI8Ye2=uwgvCQY%QH3^%An2I1*gby~;MY%a z8)nKP2z|sOX_M5p?D@{LIi-ahO6)fm=k+xu&#EK}COEPtPbxYfkWlTw=^T_Hjs19R3a9$~F%(TJpL&<{vC#%!cx!&V(Uc5@jb1VXy!np@? zy_mzAOnv}*pau$LpU@RtBXA`Z>~FUllumbg_&>{b!_-=h!3s;@%>smJg01J}MiG9jHm4`DyXxZ2yD1VSJ`*QsVdF1QTLZRya~K-$#NI9KE=% z!3%sSw->t}Zr`nKa%gFNv;1EEo_hvC`1QFsY0h|BE+LDE&26?7>WpDDvp3* z$VVqTFf(f@@}p=j*G%2MZVIDBJ@MwE%Rpsp+Nlcrr-y5H;vleU7D1_=FL1c(k$z<{Qf$Z zbBD?GbnEw6(bC|wTS|-%p+S{rGab?&9MY+5l?CxHw3Jz^CCxan3?tYQX%Qiew}qC= zv!dt9mDD9pI3v!lTA3%TlWhW%E{zy!406CPb!TKwcb|n`Wc~eom1YfuDt9VJG_rSD zvCOuX7*SJogke8EIeO$6sBOAV zf3H5BhN>}Ftj51l6>?9${hitgLH$Av>Iwnc2R9H7OWhq-ac=CC&Wd8DGIcW2r^qMM z1}uM?8||aqi@l$PExxiITJg2zL~A(s{4fhLlRm9NMFVFA>bgYX)2mCq$RJ8!U4)M5 z!Wn9lRiX3RFo66hFw$HbdQ>XnjHiqHo~i4h2KFEt9bMF`m~J}S-#MQQO1!221o3vu zv_im!!u=Im%@`ACZj z51hw0d8HD1JD)B7Bjj#I!6!4-5q>0mTNw9OH$Jdm(lN`WN_;oppT5QXxbN3SwoqO;}-{27g^QUB~GJMfNEL< z&`rW8F)!binrOaTwz!d%>QpLQ6Redur1McGDCpM0s<&ddaIZXw{B9jbv8*phkD;KT z1{|D10|ijMaTlrN4z~-l z+nZ5`6|2hp`6@YpIhLj6PpDU)Li!I)Hwlkt9?N~jKfXK_4`F7aF4M0};7%j?8K3B4 z#9YWaQxs730!LBDJHcQ4GwZxY8rULy?5^N}11&o*%f@H;&rWov-ScbGHave$2$8Q+ zKmt>H?&zdOzrXiuSE{Q9~{#X7ad4@W46EHnRIy z6qHgIudZ1`dGg1!*H{2^i}oZXkkYZ9n-?W%!Ajm=SHg;c%EA1a%B^c?#N!%VSi zaK-U;lXzjWm4Mj4)g%AZB>(wG;0L%mz<6dvhe+x6Rc%|A*f+db^UTzC?3)pU&WkCmG##c)fPr#?K&=cd0+k+qVq0&0VhWdTPQ5~78twzsXn6XG+e$< zzS8YAU18v3!-S6Zv&PJ%0NHmfhN%~=(Y!tTr{irR)8=HwZFhaS+2wTC)rXKKlz3;P zI+d%(>i08`S(MF1OdOdhh4|(7eE(BWJG)ngu*x1X!=nvU*+B85ARkj#3^8U3L=w-rN7@Zz{C{(vla1Dn z9VJZ~rD=G7a)>uNp7$#Cl<=dk&yAk!I^0d&(n6DEsnr(aC`sR8Ka6a5r@7fC^43^8 zxZ)yM&n*}f>r$muOb%RlEvk(FTYFy~4|UuBOPjidC{$vSHS2AUWZE<&Ny)@u?o!#3 zh-_oNQQ4VPD20$zmPyuZlU+%6GL|tjm35d2W0<9Lx$oz>&vVy(&iS45I-DT-tH#gl0fJbA+4C@uq;%ljSDDMoo$cAf--fUv^Tei_6({ z*X7M`#brPF70eOXW!85Lh1fP?SM++Q?1O#I%_{TEaU++g1q;LttG=X*uTl$3&#qqb z5&y>L$1^eNd`BJ_es75(y!uV9v-7u-lH zRceOAIMRhIS!&dL9NMD$QhsqOirpq+`4AOe*Vap;ow5yfewMc>QEAp zx8x8nzZJuFr+>5k{YZ z3%yF3ky1}VG!_@$wWN>TGQRp`+#VT$fj@Bz3MtK{v`I`Im$W+T;pOR~!Hy{N$hl+S z629}HqqQ9Vksmb3WygAg1Nz0TNS#`!45Epz_zN=XeH<-= zh^$h^nFqxB1=a$Jf}KrP!2Oo!wZv=N>7;s^{xbIwF=RP#m!^X8l-*~XR#V=?GFc>lM4Rskfv#)d%?6g_an;RVAoAMV zv!he#eEYF)FI@|`He;BX)Xhciy%UH?x%%ty?a}K;%5H!zZZ9J84H2XrFozzq!nAop z^iLzA-T4KV)HN=V4wi#lB}yvSE+as5=N*sdsYw$GZ_f^F_Id}3lpb?VupUq}V`_9> zGy0=Fi(4&P6XP}-nLKdG8pv!2-J*~m`ztEvU6z9LS{x{DlV4icazbD-nX_3N5_4OY zY@)f07Vc)8YpoS)C7a9cbTZvq9_j9N5lgQ?$tfi{b4R60=g|5beJ%mIM7W9F&Jeg+ zwU!};Dtg7x)*gv??e;{N6m;f%^3__Mjn9)55h~tk_m}F)iw&^toZXDlWQH91Lyifq zV7zRD--W=6gh*>yA$t~TG+xzBM_(il7$BKcU-pf8<$snDo>cdJ8OxU^{^E~Na zE*emZDzACVJfte7@au#3JhX|EAS0TC!@nZ91B)Q=B-5G5I>6{q&Sd_m@@Js*0h3N?EFeo!nZggVhrcNcx)qbsHss&GL5lFiu0{M+xm zTjbVU@#wADiwR(5u+2DTRjgcw|4F0x+-qVAb&;cGVX~2w7+q zFB34n@Q0qElT(W;8ixJFx+EsNmhhxc7&t>&n66i*ljr5~#My?fQ z`d$=ExD}laDeqood1Rf%eTUBlqN3zIhm{}0!gP`I{Om&>aFKcVN2MmTK#5nRewuz* zvlTsV@#e(}hDj>)<#@iBleEE+QZ(E`)KsU@==c}6QpqbvOWQ5_;qGXD08ue{+{{D_ zQo5mUZW3e$ewo$v+Vqj-^I_mZ@2;friJ-g=hcg2XPWHJ3;EA>4 z5lX>W0b0#YUS~yFQ@vrnF<^PZT&R@$kk9v>8+|d(edm5PUQonzMmsHUL#G=Klud_DA$o{gls7 z^~!PnL_?0Lb#4&Efoi|;IZ7^d2!MS*n3{_SHh~-TGVl3y`JsJM3Clo!&Rw{x`)7Q; zkMg%a2%UI@>nk}|Stcj;Ys<`@0+`8z?4he=N^{RYZ%-Icco*>{`pTY#7gt}Yh+mkq zS>OwUtMzZ(dbgjR<7GJ7`OZM6urOtBVC%r3I5k1;EQ)TJ$2}`rJT>to`Q5s0>*M%$ zr{=__PdF@HYtnX)e+*I3CP7P{oM)efom*WqqccT%+lh#i^wffE_I`|GF+(EenOnNV zf@?w5UZMDGPrpDlgOrrXOWpR3a#o(78ez%Gvxck;|O3&H)f z5vhf5nk|+VsAq0(<5iN|bWMRvIeeU=y4$z4u~$Rwu*`+La~`+i5B5<#i{qoV#f4Gl z>;V)P#%RCATgSpRl@djJssuCaTB#3x=@({FDnc5Z>srOT&HQwQL*HH~1b%CYqoTHM zo$YBc&uKq`1ZQ7IbM!ncTzzy9wkd!>KBhH-dN%?~>nzEIiDkI9HjBA+ykB-CJUSbx zd~rQkWm0FT%FqT!nz9DL`Wi8BpDk&-=%`samoyP@XU+HgXI<1F$~j?Ldog77cwx{`gz*}DjPOgJq@s(YnZ@Z zvV)4{OX<}`!^SbI$KFXsXYP?+MeEY*G zQ~P@^7f+V0bKE~O`fZfCxlDnU^KYdfd z9qzf>u26nTPQ{)$bp7#5nBhsQ1My%f+FT}~5MqUaLG;LPe5P{bbl$p20w*_%w=)xb z6!^BCW-Rd9hE{;&kjnUK)_5i%1R4dY5jt@6X`vwH4rYHm#voa23R-Z=9tM^*JgJ9A zxRjT>UVd+-{p7iym-|QGxR&$6>xKYe4DBG0PkiI+L44zrg_yqllzC(^R0nX6XE@$L zkh&QM9@3$2eAY0|El{u7ArRB)1mNFaB6ykbB~X`8l*JPl;U0#*N`k7A{a})BFoL53 zTaNt3_eqoY0mrg|FNlJXr)X{}UqH1u4Mu+kP0E2@5CYo>{`1^_1D}Vm|LP+lBRNv^ zWX>)U5k4UUrGEljriMI8Ga(-1R!Ttn=?_4w&%1AYjCXu*GfS#c1$kJYdMlOX&B|YW zHJ6ssc^sgIJ05RLQANG&AdG#1*k1`8AKd@Pf6V%m=6|>Z_+ldoIF<4T<YR7!@z7~H1_mKrYRRybaUXock)g&<69nd_fdmx|CV;8 zbjGLBxKr`UO;|R^gT2Onys(kX&c`;_F3JdY={B=&w$#fFKyyY-}uz!@E>Lcr##8{&2A%dW}NPv;X^)~^oK`Ig*Q#_aFM>^jmEeW zN@qiB6aw0*JK$2BZNbk2G%2&OB5@?ku9EYwdVH%-?#9ck7W!1`FKQMhwKRHfAAWYV zYC+S9^#aixTW%aro3j-(c3{k@4X?srLaYcY`ll)J=0_JFo-Rt_by3#sKWX8XpE-B( z1WCJM(|Tk7kv-h&HOiP@yLhrw>0-tRaB^qA_G|6Ifa~OkZ}iFzs7Fi?|bo;uCXIjos4eF%w;G z`nE+a%zlxpmoKG?dDa~Mz?iYyRM`B02YOjbTX|jfUh#Ps=pCJdO$0GNc%*6L7;$Z3 zkMnu9qVfI3>EUz()yk)}eb%YJd-lS%3o=eps`+JX2x1Yei75JK-}}Y_A_DG(7Idx9h@j@;*IL0Fy#!eY(Q78`zfPXj zEqNJicWGDo!{clnbA?Y5S9P^s4L_03^U*a;ym@`cDG=+KV3k%dN||ae3bfIxz%jra zIGQSWI^t*#o~B`1TU7-H=2qMpCvMHKDnd1!SM-)$lDpsqv1-{4n2juF zP%_nk7MwTtBSezu&wSh0$9e1B&+eKhKbx>Ti`ibQj%hD#^wRAR>OU*`NawJfA!mUl zM!*YGK;o+>zANNl+`L+Jk7ln*?CxDVY4zZ{L#mT$7T9yEIs zauz~T@|M$M<~`BJSy#z1>0%B69`y{?$jlkMrk`@@>%w7A*LRAc3O5}rb+0iyizB7G zuZVYG^uW{Vg>h$0bgLVi76e?a4T>+K3|qWOGJ+z#6vAd8Q8(y<-KCpXY7I|1&FpC? zuw8>yxMTeE8=n;e$Jyfih9slMrXiV`tU!2Vem=(0pDMkMWZnlaN+D8~RnKUsdnqLK zO%%{TYqxDe^4mu(@pb#p?-`wiMl)qp7@DzF8yJ$!Mr(q?%g9#I6{N;}2VE~?A{PYn zeLS@TJ*|y%*haY%&6gfNp*UQUGPxp*BnwP~?Z%X+IOpdcPO9{=uo=C8h3E5w(tfjX zZJ!Ad&VhOxoKdQKOHSW3-MQ)rA~EYiltc6!EE@KzuaX`?c8REw4`^;!7IR{y)sc`d zJDfdAd(w|r_?s2@OIcsEE)}!BeC(OY^6nNG9=-~@izCGfW$y_<)ywQ*s04UeFeGv) zZX8731la95T_Pexobp!}f3MhTUGmWOwTR26gzjTW>t}Z*w|wkcdcYw9^b)-q#d`~U znpe%YeAO?{?43}1WR>q>4rPCIus4%WnzeYT@BP+!-xvM1nCFtME+?f_ocUr#1waTh zP)0@8!?(D42}I>_oXPkN9x}=m{Z2DrAY-6zqf2<_H1GYK(J*#$Ktt%$d4~_tvMSmm z`IPpLQ={0pQT!&>s&}&v=qQww z)$LKUr}R5jL$_@))91?ycta+e`)gp6q7DJtU*OUKck3z)LcyJ_XDZRZT`|^ET&Oyu zSW)n8{%MY#Dcn=UDA(*7!fO!N-U0Ej$$7U(1vYwHClt!mf2Qw<5cA%AT;9DpJt>!CPEz_TP@xVt&QJ-gTv z%M>~?qtLA(v9>b)iy%rNI5r>x{7{c@pRzHK&EOgEXn18UkAiLMIB zBWqT@;J5{`X1^hvSJ74E(pfsn`|!!;TxIZ(KxcYOJmGHXTWuPTVLv$yPG86pAS21dx=l`$Q9MkMqtdd3lGK* zd8K+-?libb;Pv=;A1H2y$ z6c7|_g3T>~2nV{tO>dLs7t3bA^Az7=dA$l(ELvNP02abF`u`%J)mjwTkfd1&`S%sb|A)y=B^N zK(PT39n45srkT?Wd915#f;VO+tpp0;u$?9qsWSS%u=bh zsjNxTR2j32_THj-xllV$ZBlw{$Wec-&2J6yNGf7FgVKHjChVIYeKH_sKSLjMhx!Le zw~ixEIshzUGD)jZt+eQYY}B^WV|jN5i#yC#U%EHiA<*iJoEEtOKR-L5)JSZ8LmHT} zxzUhgR}hQc(G5)2@Ylq*YHzh*UkY=vYNfZq9^EKt*|(O(?C`X3#;+V_$>z@s9Fa=l8S- zG~Gi^dcA>vJcI!6h(~)UdS!oswDaMfqTl9ksgkzp1Jh z-_UgPS3UB9UuD?PYXA&E1)#l{UgudxMB_3tv~e~JxUSmM49TdAcW8;qofNB zvG9lJgTw7y{IiL^bEEIioi5X#P|440JeLwM;#eMO2+GfeGOH^`q1uPAxb5>5(x5S| zSY+KzEyRxHx#2Zwc7yJS?RJBX?~fziH)(AbcDyHwM%Y2MdwI$eUp-ovBR}&EMJ5|TJ#7FReznh$??)k6-%9A#u35|R{x}XBe_P>5c0H_yyc`IxP88wb39c~Nq!`c zw*eyK;2yYTg)~iYBS_Bz)y(2;onw}N=jIST&67sAh8j)wPD5awth({ReJbMUbSEE8IjPH#>xY37Qx z10ZuWei3LXfH^k?vK^pKH3r06KMS$ipkQBXUP&+bsvfi8ffn5ipiL9G#UhqGNQN47 z3*h5P0R#ZR`V%-8aV+O{B9#~A5(AJ~MDRDhCJ**tCT^hs&tap3MOcydaZ3zXb$YGR zkM!yOzy$Qj@D?cF4;mw~KSB+M8=&?`?lf=1kJSAS*q!xHZrAg6Da!FMh*=l9`49BL ze&9j>Vwovy$`QT9tYN|!qFS&y3OpDdX7vMc!2A841BB`dNJU1ddhBT#FoZGKZ>cm{CPN* zdZpdksSN!xoo*`|Wh}7J3o-i$GEhO7sp`Cxh)_cqQxo=EJr@icQ7G`1?DW1#LjD(-q|s)mzl%!A{sPoYn4Mm{2oN2Cs~%%pT@i1R?GwZ4f|hEXqK zd3@%U?Zvh_dtG1-Eg8>zHCWoZb-3*Pp0})BV5xjE^EYl0$h1D3hkkK`(?QwKC6Ec# zV(8STi~4hmrg;!^)jN}BoT6o#|3hA-dJ$}L&^Qng33r9jNCN{k07O0?h^j*SQ3z$+ zEPoDW5aG#$R9j*G7iV=K!=}#I{tvofO62S<$ZIw{ZDTRZjj{R&%gYb+r{6Mx#T@P^ zdD!N8p-VQ6Ncr+*gw57cbG|opK;f-xJz5vlxh>(kikllmw@%+`&em~*t->6DsKJ6D zJaaQ3YCP~J<0UMzCj2GJeAPdI%t)eYWMixGijEWpIPQvfq zQyc1w0zf(JH3Jq`jE^K0!@^w{{*kD|45eGf2Xax98_xQ_aJA>=l`;@u>d&iY@wU+N z*}n9C-0D%1(!+&7IBQt(9TD7v0R5A!w0m;&LDHo{DcdnkS9 zc<;Lk@CANmXqv5{``7B;DuZ=q%|xnWyOi-INfFin=#(#Ht73acq_}CA4OFXjlgo>c@xGOgdybXG~gsXczp(avcuA?tSQJ@aL4{%dxw#1Lz_pP(N`K zv_Vxe=IRWL0Ll=})0#5Tv=Vf4l8tVn5LGMpUR>oLtQwKhg%A?dMhM=?@p!%l*5IzZ zni*`(Ei@6p9OI^=C-crgAhtMjarKOCvNfAfP`gD%sHf{K9 zA}4#HMQ`a8<1Qs98Z$Ctx%tjbO9@e?`wSbkJejEUAORxrK(NEKsU<#S0CC>*|3py8sGWmYS< z-!9Vh;vQ*!-3rP2bXY)oo&78hvp36$i|Vz^e-RVfy#N<;^{#zVaU(%7iRAfapY5m*D03ra5;8y;K5P_G zH*C~ONlRd$YPVa3nTP~jwd+*pNd#0L@6IeK@4KX-w?|e}A~RCHZ*5b2zhrk6-Z1P; zzsv~}yGjOpRHRLh)5c&a(*T(zlC?qHn3 zg+cVYxmPCjU!Fa5=EJTZ;QY$?kU_7sX0^LH6YA}c=U&Jh9tljqX|S!szXS(Vy&5@7 zl72#aeIj$Zev{pSQIF-LtjZUxu~C=lMT*rXY!_+mJbGgQ>HzCAS=N(0?yIaj7-DrG ztiC~+5pHv&I<`JBeECS?r;BQeJ_OA#I2xI5@do~?AchPd7^_cr?kx$ttcTv>Fje@X zc+uWA`_~&sV#~LQR>!>{WqLQ#hg;t8v6x=h2~z4jSy#e_r}VVE8YRY#YbPh{t&8u{ z{GUI2QJs58Vz^6f@?B@*nqLjYLn-iZr@eGsgc=7)@zl3am0}ML>r38y=Ioafh<1y8 z>Ys}kL!`drS6aPi4=>G=r^L}HEujTSKL^V<}?mMb8)6@dA8e0pk5gkR^VJRA;OhasY139vP449s#31{`fe}^CUnMnMO z0VV?skWhs}mz$Ji!-80gjlY9;14|DXBAW=GS0Kl=e*?G8v~xr)n3uSjRRE|L)Z~fb z`B=DPYy{IFky))WDa|$+sJzT-@=kc<+kzkerREbi7XIZtC07v!2&#-+h!D9w5_7=F z{>;S4?k)|Di??ZJnc*{v*Ukm4Jz;K=$YtiLDqk=ZxNVAoOK6UCVXfxi$_!C>-U({$t9M8^fW41VK}w?OWGz%;l-jgUsXTW zj-7e5Pw(hMTgT4%C9f^imo~OCvB|rt3-BIOOX=6gcpJ(X9ezFYaG-?%`fiygv92vP zTP<&JO<&|eJOqBEubXNtdW`oWhMidn?>mO}Ta>{qGwv_qhOi*1R9{wO1a(*(2DO?X z_xyDqj82=4PoEd-gwKLZGY5yRMh|pCzSi7S$wh$gDr#1+Z*T+N2RF~a*Fxk$k~Dl= zArm5jH1?7V?)#(h)8m8+<=>CSE!>qH4yol;UED`qgoP2lI|jko8%)jNt|_(xbilvy z$@R}7nZ9TMWxJSi0fPTFW~K&oXFKW0Fxa?S^j{Ck;z?ICx_M#tN?ZWAuW)cNmu;ju z6AdrQ&o?fjuR!>1xBzbRDE|AC0C+Dv!kYNTcR+nJ4fKWrQn33y?A!P3bj;2A+BJRq{QqU6GkI(HS~Ueu|t+R@zAcX=Bs z86Ql9pMw{k#K!RuFWSJTkFiFpK)ujERT!im1%OsqFF;cgDDVRXvt_Pb-h5;H`-HJ` zcW=M`GmLZ)X|4ng7&3f~L<9;z&T3q1pKrT?TB6xW@4Wl1c-C z6_m3gDTw&dYH2xw_wqAgj;GYflVGgPiQrhCr3krLl=Rc4vk@Wi6K=Ok>XbM|w+CA{ z)~+92^2u_}5bwd91C8(^@sMZxY?gT- z^;xvGcgix*QZTHU7Z#++<*g{`ir#$xZQvy@)8`fhmg|#%BC^ugTBC!2iB@9uzwvcg znF1T_{=-IRNO6Su&Htne!7Sa(!#@7TcgAPM5I2v$P@P4y{Jok;%NxcCi_72|_~CF~ zUmeum1Dg{5gQ4Q4AyYsvX{w252w>EDRH<5{vps>8{`Oq{vEr%Kb)I?6CCjj-nXNS2Q{!% zqS^gFW%cio6~H_GYO^ObIh!9+Z$R(=<%#->3Wllz#r>$tJKkKE&II@WldJt%ApN_B z$ePd`?$y;=_~T8T@&eP@#2DyWLexvlaaQOHyCKUQgbMM%Z|AQ#o!2VbYnDJ=|9;hV zpW|1Xjn8oU*VB9DwnvpoB)6TJ(}|aD%?`z{w>^F`_KroRrQCwk;LI1#Jj0)Vn8Y%p1xUTeONZ}XE;ThDfP_!13h7HlgP`sj^%o(wCF zl4{h{x#r3sYI5;PqnIZDX^9gr1b$nm`Z0nN&D#mamBFUak|a>L)*WK0a*wLyrn>y# z_&pW*7pCyjSI1$jOK^~9j!p-cA3ZP_{Ms{+imhKsMn7i}zVQhFM>MF$C-c>EwdNBvcz*>6Z=CfvKB0(}g!d_s@D|a8SPPiXrZ8kSCuZir zf*PE|#tq@JATmhhf)u|BRuhDWpJxFakj0Y{`8~y-vy$SMaRMp+$)$JECU}b_$)OvQ zXP~7;*lXAkaOa)nfz-YY2mOujMk|T855dugtz<<_t$=J<#w)4)-nqmrAx_C(HD3$# zfP>~{;65gCKN5udf$H2b73Duj6nPGE^J7EUPa#r25Cr>yXygYQ>xCe6OU)XksA3e*OoF^oNw3uW^fV;+enh zjsF+l#&*^vO(KaGoxBop_^(79&w+Cc_c*mO(Xo-l+6zz~YRO#o4}LrV(!y)FpjTl0 zSwJO-O#IV1*KjP4SzqWAvj!>4~wjO*V}Tyrh+dmkSD zJuv_|`JP}5?fXzH6Z(OetRDzoB7Pr-0Z{mRS`a_bTQXPj9~WQC0xN?;`h&rLa~_O1 z$1L231>>3jA@lo?2afo4z03C%@1%hf@5!BOkB7ym2 zA66kC7krKZ#JN_rE*knrbZP`!i4+0mM1sh9?Z2X&Z~j!4 zoI@*NH2PEUEJx3ah5*W<+K6WD0eVdZ%3{mwf#y$Eod(JhL*VUoTKgw~|EJ$n#<%iVdRm&Z7(@PZ+53iaqoaN?_bAcyVZy0)q1R{?I@5^LWHc=uT)^Bz;fM zihh1ibk#3^YK$)&gwdaQh#H_W-%$iq<~yoOM*j??PXXK)1htx9_bvX&d-x9m!ms+% zB2q Date: Wed, 8 Nov 2023 12:44:04 +0200 Subject: [PATCH 13/16] Add missed reexports of MutationFetchPolicy and RefetchWritePolicy to @apollo/client/core (#11332) Co-authored-by: Lenz Weber-Tronic --- .api-reports/api-report-core.md | 8 ++------ .api-reports/api-report.md | 8 ++------ .changeset/ninety-suits-flash.md | 5 +++++ src/core/index.ts | 2 ++ 4 files changed, 11 insertions(+), 12 deletions(-) create mode 100644 .changeset/ninety-suits-flash.md diff --git a/.api-reports/api-report-core.md b/.api-reports/api-report-core.md index c5d9202d915..29a4f1286af 100644 --- a/.api-reports/api-report-core.md +++ b/.api-reports/api-report-core.md @@ -1316,14 +1316,12 @@ interface MutationBaseOptions; +export type MutationFetchPolicy = Extract; // Warning: (ae-forgotten-export) The symbol "MutationBaseOptions" needs to be exported by the entry point index.d.ts // // @public (undocumented) export interface MutationOptions = ApolloCache> extends MutationBaseOptions { - // Warning: (ae-forgotten-export) The symbol "MutationFetchPolicy" needs to be exported by the entry point index.d.ts - // // (undocumented) fetchPolicy?: MutationFetchPolicy; // (undocumented) @@ -1916,7 +1914,7 @@ export interface RefetchQueriesResult extends Promise Observable | null; @@ -2146,8 +2144,6 @@ export interface WatchQueryOptions, currentFetchPolicy: WatchQueryFetchPolicy, context: NextFetchPolicyContext) => WatchQueryFetchPolicy); - // Warning: (ae-forgotten-export) The symbol "RefetchWritePolicy" needs to be exported by the entry point index.d.ts - // // (undocumented) refetchWritePolicy?: RefetchWritePolicy; } diff --git a/.api-reports/api-report.md b/.api-reports/api-report.md index c73cfb60ec7..231d1ada070 100644 --- a/.api-reports/api-report.md +++ b/.api-reports/api-report.md @@ -1580,7 +1580,7 @@ export interface MutationDataOptions; +export type MutationFetchPolicy = Extract; // @public (undocumented) export type MutationFunction = ApolloCache> = (options?: MutationFunctionOptions) => Promise>; @@ -1599,8 +1599,6 @@ export interface MutationHookOptions = ApolloCache> extends MutationBaseOptions { - // Warning: (ae-forgotten-export) The symbol "MutationFetchPolicy" needs to be exported by the entry point index.d.ts - // // (undocumented) fetchPolicy?: MutationFetchPolicy; // (undocumented) @@ -2334,7 +2332,7 @@ export interface RefetchQueriesResult extends Promise, currentFetchPolicy: WatchQueryFetchPolicy, context: NextFetchPolicyContext) => WatchQueryFetchPolicy); - // Warning: (ae-forgotten-export) The symbol "RefetchWritePolicy" needs to be exported by the entry point index.d.ts - // // (undocumented) refetchWritePolicy?: RefetchWritePolicy; } diff --git a/.changeset/ninety-suits-flash.md b/.changeset/ninety-suits-flash.md new file mode 100644 index 00000000000..bba930c377e --- /dev/null +++ b/.changeset/ninety-suits-flash.md @@ -0,0 +1,5 @@ +--- +"@apollo/client": patch +--- + +Add missed reexports of MutationFetchPolicy and RefetchWritePolicy to @apollo/client/core diff --git a/src/core/index.ts b/src/core/index.ts index 72340d689d7..5757cdb2071 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -14,6 +14,8 @@ export type { SubscriptionOptions, FetchPolicy, WatchQueryFetchPolicy, + MutationFetchPolicy, + RefetchWritePolicy, ErrorPolicy, FetchMoreQueryOptions, SubscribeToMoreOptions, From e5acf910e39752b453540b6751046d1c19b66350 Mon Sep 17 00:00:00 2001 From: Lenz Weber-Tronic Date: Fri, 10 Nov 2023 11:29:38 +0100 Subject: [PATCH 14/16] `useMutation` also reset internal state on reset (#10931) --- .changeset/yellow-fans-move.md | 5 ++ .size-limit.cjs | 2 +- .../hooks/__tests__/useMutation.test.tsx | 87 ++++++++++++++++++- src/react/hooks/useMutation.ts | 4 +- 4 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 .changeset/yellow-fans-move.md diff --git a/.changeset/yellow-fans-move.md b/.changeset/yellow-fans-move.md new file mode 100644 index 00000000000..936ec8a859c --- /dev/null +++ b/.changeset/yellow-fans-move.md @@ -0,0 +1,5 @@ +--- +"@apollo/client": patch +--- + +`useMutation`: also reset internal state on reset diff --git a/.size-limit.cjs b/.size-limit.cjs index d63784ccf10..0ab7c9f0aef 100644 --- a/.size-limit.cjs +++ b/.size-limit.cjs @@ -1,7 +1,7 @@ const checks = [ { path: "dist/apollo-client.min.cjs", - limit: "37956", + limit: "37972", }, { path: "dist/main.cjs", diff --git a/src/react/hooks/__tests__/useMutation.test.tsx b/src/react/hooks/__tests__/useMutation.test.tsx index 3ba88663d85..45619b63b68 100644 --- a/src/react/hooks/__tests__/useMutation.test.tsx +++ b/src/react/hooks/__tests__/useMutation.test.tsx @@ -23,13 +23,14 @@ import { MockSubscriptionLink, mockSingleLink, subscribeAndCount, + MockedResponse, } from "../../../testing"; import { ApolloProvider } from "../../context"; import { useQuery } from "../useQuery"; import { useMutation } from "../useMutation"; import { BatchHttpLink } from "../../../link/batch-http"; import { FetchResult } from "../../../link/core"; -import { spyOnConsole } from "../../../testing/internal"; +import { profileHook, spyOnConsole } from "../../../testing/internal"; describe("useMutation Hook", () => { interface Todo { @@ -719,6 +720,90 @@ describe("useMutation Hook", () => { { interval: 1 } ); }); + + it("resetting while a mutation is running: ensure that the result doesn't end up in the hook", async () => { + const CREATE_TODO_DATA = { + createTodo: { + id: 1, + priority: "Low", + description: "Get milk!", + __typename: "Todo", + }, + }; + + const mocks: MockedResponse[] = [ + { + request: { + query: CREATE_TODO_MUTATION, + variables: { + priority: "Low", + description: "Get milk.", + }, + }, + result: { + data: CREATE_TODO_DATA, + }, + delay: 20, + }, + ]; + + const ProfiledHook = profileHook(() => + useMutation< + { createTodo: Todo }, + { priority: string; description: string } + >(CREATE_TODO_MUTATION) + ); + + render(, { + wrapper: ({ children }) => ( + {children} + ), + }); + + let createTodo: Awaited>[0]; + let reset: Awaited< + ReturnType + >[1]["reset"]; + + { + const [mutate, result] = await ProfiledHook.takeSnapshot(); + createTodo = mutate; + reset = result.reset; + //initial value + expect(result.data).toBe(undefined); + expect(result.loading).toBe(false); + expect(result.called).toBe(false); + } + + let fetchResult: any; + act(() => { + fetchResult = createTodo({ + variables: { priority: "Low", description: "Get milk." }, + }); + }); + + { + const [, result] = await ProfiledHook.takeSnapshot(); + // started loading + expect(result.data).toBe(undefined); + expect(result.loading).toBe(true); + expect(result.called).toBe(true); + } + + act(() => reset()); + + { + const [, result] = await ProfiledHook.takeSnapshot(); + // reset to initial value + expect(result.data).toBe(undefined); + expect(result.loading).toBe(false); + expect(result.called).toBe(false); + } + + expect(await fetchResult).toEqual({ data: CREATE_TODO_DATA }); + + await expect(ProfiledHook).not.toRerender(); + }); }); describe("Callbacks", () => { diff --git a/src/react/hooks/useMutation.ts b/src/react/hooks/useMutation.ts index f3c2b233abd..2eff46ee272 100644 --- a/src/react/hooks/useMutation.ts +++ b/src/react/hooks/useMutation.ts @@ -164,7 +164,9 @@ export function useMutation< const reset = React.useCallback(() => { if (ref.current.isMounted) { - setResult({ called: false, loading: false, client }); + const result = { called: false, loading: false, client }; + Object.assign(ref.current, { mutationId: 0, result }); + setResult(result); } }, []); From ae5091a21f0feff1486503071ea8dc002cf1be41 Mon Sep 17 00:00:00 2001 From: Jerel Miller Date: Fri, 10 Nov 2023 12:26:47 -0700 Subject: [PATCH 15/16] Enable strict mode in tsconfig and fix type errors (#11200) Co-authored-by: Lenz Weber-Tronic --- .api-reports/api-report-cache.md | 4 +- .api-reports/api-report-core.md | 34 ++++++++--------- .api-reports/api-report-link_http.md | 4 +- .api-reports/api-report-react.md | 30 +++++++-------- .api-reports/api-report-react_components.md | 26 ++++++------- .api-reports/api-report-react_context.md | 26 ++++++------- .api-reports/api-report-react_hoc.md | 26 ++++++------- .api-reports/api-report-react_hooks.md | 30 +++++++-------- .api-reports/api-report-react_ssr.md | 26 ++++++------- .api-reports/api-report-testing.md | 30 +++++++-------- .api-reports/api-report-testing_core.md | 30 +++++++-------- .api-reports/api-report-utilities.md | 30 +++++++-------- .api-reports/api-report.md | 38 +++++++++---------- .changeset/chatty-plants-cheer.md | 5 +++ .size-limit.cjs | 4 +- src/__tests__/ApolloClient.ts | 21 +++++----- src/__tests__/client.ts | 4 +- src/__tests__/graphqlSubscriptions.ts | 2 +- src/__tests__/local-state/general.ts | 2 +- src/__tests__/local-state/resolvers.ts | 9 +++-- src/__tests__/optimistic.ts | 9 +++-- src/__tests__/subscribeToMore.ts | 6 ++- src/cache/core/types/Cache.ts | 2 +- src/cache/inmemory/__tests__/cache.ts | 1 + .../inmemory/__tests__/diffAgainstStore.ts | 8 ++-- src/cache/inmemory/__tests__/readFromStore.ts | 2 +- src/cache/inmemory/__tests__/roundtrip.ts | 2 +- src/cache/inmemory/__tests__/writeToStore.ts | 31 ++++++++------- src/cache/inmemory/entityStore.ts | 14 ++++--- src/cache/inmemory/fixPolyfills.native.ts | 6 +-- src/cache/inmemory/fragmentRegistry.ts | 37 ++++++------------ src/cache/inmemory/inMemoryCache.ts | 10 ++--- src/cache/inmemory/readFromStore.ts | 2 +- src/core/ApolloClient.ts | 6 ++- src/core/LocalState.ts | 12 +++--- src/core/ObservableQuery.ts | 16 +++++--- src/core/QueryInfo.ts | 7 ++-- src/core/QueryManager.ts | 7 ++-- src/core/__tests__/ObservableQuery.ts | 5 ++- src/core/__tests__/QueryManager/index.ts | 2 +- .../batch-http/__tests__/batchHttpLink.ts | 5 ++- src/link/batch/__tests__/batchLink.ts | 1 + src/link/error/index.ts | 2 +- src/link/http/HttpLink.ts | 2 - src/link/http/__tests__/HttpLink.ts | 7 ++-- src/link/http/__tests__/responseIterator.ts | 3 +- src/link/http/iterators/reader.ts | 14 +++++-- src/link/http/serializeFetchParameter.ts | 2 +- .../__tests__/persisted-queries.test.ts | 7 +++- src/react/cache/QueryReference.ts | 2 +- src/react/cache/SuspenseCache.ts | 6 ++- src/react/hoc/__tests__/fragments.test.tsx | 2 +- .../hoc/__tests__/queries/errors.test.tsx | 3 +- .../__tests__/queries/updateQuery.test.tsx | 2 +- .../__tests__/ssr/getDataFromTree.test.tsx | 1 + src/react/hoc/mutation-hoc.tsx | 1 + src/react/hooks/useBackgroundQuery.ts | 6 ++- src/react/hooks/useLazyQuery.ts | 1 + src/react/hooks/useMutation.ts | 20 +++++++--- src/react/hooks/useQuery.ts | 8 ++-- src/react/hooks/useSuspenseQuery.ts | 31 ++++++++++----- src/testing/core/itAsync.ts | 4 +- src/testing/core/mocking/mockLink.ts | 2 +- .../core/mocking/mockSubscriptionLink.ts | 2 +- src/testing/core/observableToPromise.ts | 2 +- src/testing/core/withConsoleSpy.ts | 3 +- src/testing/internal/profile/profile.tsx | 2 +- src/testing/matchers/ProfiledComponent.ts | 17 ++++----- src/tsconfig.json | 14 +++++++ src/utilities/common/__tests__/mergeDeep.ts | 2 +- src/utilities/common/filterInPlace.ts | 14 ------- src/utilities/common/mergeDeep.ts | 2 +- src/utilities/common/mergeOptions.ts | 2 +- src/utilities/graphql/transform.ts | 20 +++++++--- src/utilities/observables/Concast.ts | 6 +-- src/utilities/observables/Observable.ts | 1 + .../observables/__tests__/Observable.ts | 17 +++++++-- .../observables/__tests__/asyncMap.ts | 1 + src/utilities/policies/pagination.ts | 2 +- src/utilities/types/TODO.ts | 2 + tsconfig.json | 3 +- tsconfig.tests.json | 4 +- 82 files changed, 434 insertions(+), 380 deletions(-) create mode 100644 .changeset/chatty-plants-cheer.md create mode 100644 src/tsconfig.json delete mode 100644 src/utilities/common/filterInPlace.ts create mode 100644 src/utilities/types/TODO.ts diff --git a/.api-reports/api-report-cache.md b/.api-reports/api-report-cache.md index e10f450c8b7..97cea465367 100644 --- a/.api-reports/api-report-cache.md +++ b/.api-reports/api-report-cache.md @@ -90,7 +90,7 @@ namespace Cache_2 { // (undocumented) interface BatchOptions, TUpdateResult = void> { // (undocumented) - onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff: Cache_2.DiffResult | undefined) => any; + onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff?: Cache_2.DiffResult | undefined) => any; // (undocumented) optimistic?: string | boolean; // (undocumented) @@ -894,7 +894,7 @@ export type StoreValue = number | string | string[] | Reference | Reference[] | class Stump extends Layer { constructor(root: EntityStore.Root); // (undocumented) - merge(): any; + merge(older: string | StoreObject, newer: string | StoreObject): void; // (undocumented) removeLayer(): this; } diff --git a/.api-reports/api-report-core.md b/.api-reports/api-report-core.md index 29a4f1286af..fd6d4166e6f 100644 --- a/.api-reports/api-report-core.md +++ b/.api-reports/api-report-core.md @@ -298,7 +298,7 @@ namespace Cache_2 { // (undocumented) interface BatchOptions, TUpdateResult = void> { // (undocumented) - onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff: Cache_2.DiffResult | undefined) => any; + onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff?: Cache_2.DiffResult | undefined) => any; // (undocumented) optimistic?: string | boolean; // (undocumented) @@ -433,7 +433,7 @@ class Concast extends Observable { // (undocumented) cancel: (reason: any) => void; // (undocumented) - readonly promise: Promise; + readonly promise: Promise; // (undocumented) removeObserver(observer: Observer): void; } @@ -929,8 +929,6 @@ export class HttpLink extends ApolloLink { constructor(options?: HttpOptions); // (undocumented) options: HttpOptions; - // (undocumented) - requester: RequestHandler; } // @public (undocumented) @@ -1164,15 +1162,13 @@ class LocalState { // Warning: (ae-forgotten-export) The symbol "LocalStateOptions" needs to be exported by the entry point index.d.ts constructor({ cache, client, resolvers, fragmentMatcher, }: LocalStateOptions); // (undocumented) - addExportedVariables(document: DocumentNode, variables?: OperationVariables, context?: {}): Promise<{ - [x: string]: any; - }>; + addExportedVariables(document: DocumentNode, variables?: TVars, context?: {}): Promise; // (undocumented) addResolvers(resolvers: Resolvers | Resolvers[]): void; // (undocumented) clientQuery(document: DocumentNode): DocumentNode | null; // (undocumented) - getFragmentMatcher(): FragmentMatcher; + getFragmentMatcher(): FragmentMatcher | undefined; // (undocumented) getResolvers(): Resolvers; // (undocumented) @@ -1553,7 +1549,7 @@ export type OptimisticStoreItem = { }; // @public (undocumented) -type OptionsUnion = WatchQueryOptions | QueryOptions | MutationOptions; +type OptionsUnion = WatchQueryOptions | QueryOptions | MutationOptions; // @public (undocumented) export function parseAndCheckHttpResponse(operations: Operation | Operation[]): (response: Response) => Promise; @@ -1633,7 +1629,7 @@ class QueryInfo { document: DocumentNode; variables: Record | undefined; networkStatus?: NetworkStatus; - observableQuery?: ObservableQuery; + observableQuery?: ObservableQuery; lastRequestId?: number; }): this; // (undocumented) @@ -1655,7 +1651,7 @@ class QueryInfo { // (undocumented) notify(): void; // (undocumented) - readonly observableQuery: ObservableQuery | null; + readonly observableQuery: ObservableQuery | null; // (undocumented) readonly queryId: string; // (undocumented) @@ -1665,7 +1661,7 @@ class QueryInfo { // (undocumented) setDiff(diff: Cache_2.DiffResult | null): void; // (undocumented) - setObservableQuery(oq: ObservableQuery | null): void; + setObservableQuery(oq: ObservableQuery | null): void; // (undocumented) stop(): void; // (undocumented) @@ -1939,7 +1935,7 @@ export interface Resolvers { // // @public (undocumented) export function rewriteURIForGET(chosenURI: string, body: Body_2): { - parseError: any; + parseError: unknown; newURI?: undefined; } | { newURI: string; @@ -2022,7 +2018,7 @@ export type StoreValue = number | string | string[] | Reference | Reference[] | class Stump extends Layer { constructor(root: EntityStore.Root); // (undocumented) - merge(): any; + merge(older: string | StoreObject, newer: string | StoreObject): void; // (undocumented) removeLayer(): this; } @@ -2186,11 +2182,11 @@ interface WriteContext extends ReadMergeModifyContext { // src/cache/inmemory/policies.ts:167:3 - (ae-forgotten-export) The symbol "KeySpecifier" needs to be exported by the entry point index.d.ts // src/cache/inmemory/policies.ts:167:3 - (ae-forgotten-export) The symbol "KeyArgsFunction" needs to be exported by the entry point index.d.ts // src/cache/inmemory/types.ts:126:3 - (ae-forgotten-export) The symbol "KeyFieldsFunction" needs to be exported by the entry point index.d.ts -// src/core/ObservableQuery.ts:112:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts -// src/core/ObservableQuery.ts:113:5 - (ae-forgotten-export) The symbol "QueryInfo" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:116:5 - (ae-forgotten-export) The symbol "MutationStoreValue" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:149:5 - (ae-forgotten-export) The symbol "LocalState" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:378:7 - (ae-forgotten-export) The symbol "UpdateQueries" needs to be exported by the entry point index.d.ts +// src/core/ObservableQuery.ts:113:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts +// src/core/ObservableQuery.ts:114:5 - (ae-forgotten-export) The symbol "QueryInfo" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:117:5 - (ae-forgotten-export) The symbol "MutationStoreValue" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:150:5 - (ae-forgotten-export) The symbol "LocalState" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:379:7 - (ae-forgotten-export) The symbol "UpdateQueries" needs to be exported by the entry point index.d.ts // src/core/watchQueryOptions.ts:191:3 - (ae-forgotten-export) The symbol "UpdateQueryFn" needs to be exported by the entry point index.d.ts // src/link/http/selectHttpOptionsAndBody.ts:128:32 - (ae-forgotten-export) The symbol "HttpQueryOptions" needs to be exported by the entry point index.d.ts diff --git a/.api-reports/api-report-link_http.md b/.api-reports/api-report-link_http.md index 09b1e6459dd..8d6da95e4d4 100644 --- a/.api-reports/api-report-link_http.md +++ b/.api-reports/api-report-link_http.md @@ -181,8 +181,6 @@ export class HttpLink extends ApolloLink { constructor(options?: HttpOptions); // (undocumented) options: HttpOptions; - // (undocumented) - requester: RequestHandler; } // @public (undocumented) @@ -278,7 +276,7 @@ type RequestHandler = (operation: Operation, forward: NextLink) => Observable, TUpdateResult = void> { // (undocumented) - onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff: Cache_2.DiffResult | undefined) => any; + onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff?: Cache_2.DiffResult | undefined) => any; // (undocumented) optimistic?: string | boolean; // (undocumented) @@ -552,7 +552,7 @@ class Concast extends Observable { // (undocumented) cancel: (reason: any) => void; // (undocumented) - readonly promise: Promise; + readonly promise: Promise; // (undocumented) removeObserver(observer: Observer): void; } @@ -1021,15 +1021,13 @@ class LocalState { // Warning: (ae-forgotten-export) The symbol "LocalStateOptions" needs to be exported by the entry point index.d.ts constructor({ cache, client, resolvers, fragmentMatcher, }: LocalStateOptions); // (undocumented) - addExportedVariables(document: DocumentNode, variables?: OperationVariables, context?: {}): Promise<{ - [x: string]: any; - }>; + addExportedVariables(document: DocumentNode, variables?: TVars, context?: {}): Promise; // (undocumented) addResolvers(resolvers: Resolvers | Resolvers[]): void; // (undocumented) clientQuery(document: DocumentNode): DocumentNode | null; // (undocumented) - getFragmentMatcher(): FragmentMatcher; + getFragmentMatcher(): FragmentMatcher | undefined; // (undocumented) getResolvers(): Resolvers; // (undocumented) @@ -1452,7 +1450,7 @@ class QueryInfo { document: DocumentNode; variables: Record | undefined; networkStatus?: NetworkStatus; - observableQuery?: ObservableQuery; + observableQuery?: ObservableQuery; lastRequestId?: number; }): this; // (undocumented) @@ -1476,7 +1474,7 @@ class QueryInfo { // (undocumented) notify(): void; // (undocumented) - readonly observableQuery: ObservableQuery | null; + readonly observableQuery: ObservableQuery | null; // (undocumented) readonly queryId: string; // (undocumented) @@ -1486,7 +1484,7 @@ class QueryInfo { // (undocumented) setDiff(diff: Cache_2.DiffResult | null): void; // (undocumented) - setObservableQuery(oq: ObservableQuery | null): void; + setObservableQuery(oq: ObservableQuery | null): void; // (undocumented) stop(): void; // (undocumented) @@ -2206,18 +2204,18 @@ interface WatchQueryOptions, TUpdateResult = void> { // (undocumented) - onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff: Cache_2.DiffResult | undefined) => any; + onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff?: Cache_2.DiffResult | undefined) => any; // (undocumented) optimistic?: string | boolean; // (undocumented) @@ -491,7 +491,7 @@ class Concast extends Observable { // (undocumented) cancel: (reason: any) => void; // (undocumented) - readonly promise: Promise; + readonly promise: Promise; // (undocumented) removeObserver(observer: Observer): void; } @@ -819,15 +819,13 @@ class LocalState { // Warning: (ae-forgotten-export) The symbol "LocalStateOptions" needs to be exported by the entry point index.d.ts constructor({ cache, client, resolvers, fragmentMatcher, }: LocalStateOptions); // (undocumented) - addExportedVariables(document: DocumentNode, variables?: OperationVariables, context?: {}): Promise<{ - [x: string]: any; - }>; + addExportedVariables(document: DocumentNode, variables?: TVars, context?: {}): Promise; // (undocumented) addResolvers(resolvers: Resolvers | Resolvers[]): void; // (undocumented) clientQuery(document: DocumentNode): DocumentNode | null; // (undocumented) - getFragmentMatcher(): FragmentMatcher; + getFragmentMatcher(): FragmentMatcher | undefined; // (undocumented) getResolvers(): Resolvers; // (undocumented) @@ -1256,7 +1254,7 @@ class QueryInfo { document: DocumentNode; variables: Record | undefined; networkStatus?: NetworkStatus; - observableQuery?: ObservableQuery; + observableQuery?: ObservableQuery; lastRequestId?: number; }): this; // (undocumented) @@ -1280,7 +1278,7 @@ class QueryInfo { // (undocumented) notify(): void; // (undocumented) - readonly observableQuery: ObservableQuery | null; + readonly observableQuery: ObservableQuery | null; // (undocumented) readonly queryId: string; // (undocumented) @@ -1290,7 +1288,7 @@ class QueryInfo { // (undocumented) setDiff(diff: Cache_2.DiffResult | null): void; // (undocumented) - setObservableQuery(oq: ObservableQuery | null): void; + setObservableQuery(oq: ObservableQuery | null): void; // (undocumented) stop(): void; // (undocumented) @@ -1738,11 +1736,11 @@ interface WatchQueryOptions, TUpdateResult = void> { // (undocumented) - onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff: Cache_2.DiffResult | undefined) => any; + onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff?: Cache_2.DiffResult | undefined) => any; // (undocumented) optimistic?: string | boolean; // (undocumented) @@ -476,7 +476,7 @@ class Concast extends Observable { // (undocumented) cancel: (reason: any) => void; // (undocumented) - readonly promise: Promise; + readonly promise: Promise; // (undocumented) removeObserver(observer: Observer): void; } @@ -807,15 +807,13 @@ class LocalState { // Warning: (ae-forgotten-export) The symbol "LocalStateOptions" needs to be exported by the entry point index.d.ts constructor({ cache, client, resolvers, fragmentMatcher, }: LocalStateOptions); // (undocumented) - addExportedVariables(document: DocumentNode, variables?: OperationVariables, context?: {}): Promise<{ - [x: string]: any; - }>; + addExportedVariables(document: DocumentNode, variables?: TVars, context?: {}): Promise; // (undocumented) addResolvers(resolvers: Resolvers | Resolvers[]): void; // (undocumented) clientQuery(document: DocumentNode): DocumentNode | null; // (undocumented) - getFragmentMatcher(): FragmentMatcher; + getFragmentMatcher(): FragmentMatcher | undefined; // (undocumented) getResolvers(): Resolvers; // (undocumented) @@ -1166,7 +1164,7 @@ class QueryInfo { document: DocumentNode; variables: Record | undefined; networkStatus?: NetworkStatus; - observableQuery?: ObservableQuery; + observableQuery?: ObservableQuery; lastRequestId?: number; }): this; // (undocumented) @@ -1190,7 +1188,7 @@ class QueryInfo { // (undocumented) notify(): void; // (undocumented) - readonly observableQuery: ObservableQuery | null; + readonly observableQuery: ObservableQuery | null; // (undocumented) readonly queryId: string; // (undocumented) @@ -1200,7 +1198,7 @@ class QueryInfo { // (undocumented) setDiff(diff: Cache_2.DiffResult | null): void; // (undocumented) - setObservableQuery(oq: ObservableQuery | null): void; + setObservableQuery(oq: ObservableQuery | null): void; // (undocumented) stop(): void; // (undocumented) @@ -1636,11 +1634,11 @@ interface WatchQueryOptions, TUpdateResult = void> { // (undocumented) - onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff: Cache_2.DiffResult | undefined) => any; + onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff?: Cache_2.DiffResult | undefined) => any; // (undocumented) optimistic?: string | boolean; // (undocumented) @@ -468,7 +468,7 @@ class Concast extends Observable { // (undocumented) cancel: (reason: any) => void; // (undocumented) - readonly promise: Promise; + readonly promise: Promise; // (undocumented) removeObserver(observer: Observer): void; } @@ -817,15 +817,13 @@ class LocalState { // Warning: (ae-forgotten-export) The symbol "LocalStateOptions" needs to be exported by the entry point index.d.ts constructor({ cache, client, resolvers, fragmentMatcher, }: LocalStateOptions); // (undocumented) - addExportedVariables(document: DocumentNode, variables?: OperationVariables, context?: {}): Promise<{ - [x: string]: any; - }>; + addExportedVariables(document: DocumentNode, variables?: TVars, context?: {}): Promise; // (undocumented) addResolvers(resolvers: Resolvers | Resolvers[]): void; // (undocumented) clientQuery(document: DocumentNode): DocumentNode | null; // (undocumented) - getFragmentMatcher(): FragmentMatcher; + getFragmentMatcher(): FragmentMatcher | undefined; // (undocumented) getResolvers(): Resolvers; // (undocumented) @@ -1234,7 +1232,7 @@ class QueryInfo { document: DocumentNode; variables: Record | undefined; networkStatus?: NetworkStatus; - observableQuery?: ObservableQuery; + observableQuery?: ObservableQuery; lastRequestId?: number; }): this; // (undocumented) @@ -1258,7 +1256,7 @@ class QueryInfo { // (undocumented) notify(): void; // (undocumented) - readonly observableQuery: ObservableQuery | null; + readonly observableQuery: ObservableQuery | null; // (undocumented) readonly queryId: string; // (undocumented) @@ -1268,7 +1266,7 @@ class QueryInfo { // (undocumented) setDiff(diff: Cache_2.DiffResult | null): void; // (undocumented) - setObservableQuery(oq: ObservableQuery | null): void; + setObservableQuery(oq: ObservableQuery | null): void; // (undocumented) stop(): void; // (undocumented) @@ -1680,11 +1678,11 @@ export function withSubscription, TUpdateResult = void> { // (undocumented) - onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff: Cache_2.DiffResult | undefined) => any; + onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff?: Cache_2.DiffResult | undefined) => any; // (undocumented) optimistic?: string | boolean; // (undocumented) @@ -520,7 +520,7 @@ class Concast extends Observable { // (undocumented) cancel: (reason: any) => void; // (undocumented) - readonly promise: Promise; + readonly promise: Promise; // (undocumented) removeObserver(observer: Observer): void; } @@ -969,15 +969,13 @@ class LocalState { // Warning: (ae-forgotten-export) The symbol "LocalStateOptions" needs to be exported by the entry point index.d.ts constructor({ cache, client, resolvers, fragmentMatcher, }: LocalStateOptions); // (undocumented) - addExportedVariables(document: DocumentNode, variables?: OperationVariables, context?: {}): Promise<{ - [x: string]: any; - }>; + addExportedVariables(document: DocumentNode, variables?: TVars, context?: {}): Promise; // (undocumented) addResolvers(resolvers: Resolvers | Resolvers[]): void; // (undocumented) clientQuery(document: DocumentNode): DocumentNode | null; // (undocumented) - getFragmentMatcher(): FragmentMatcher; + getFragmentMatcher(): FragmentMatcher | undefined; // (undocumented) getResolvers(): Resolvers; // (undocumented) @@ -1380,7 +1378,7 @@ class QueryInfo { document: DocumentNode; variables: Record | undefined; networkStatus?: NetworkStatus; - observableQuery?: ObservableQuery; + observableQuery?: ObservableQuery; lastRequestId?: number; }): this; // (undocumented) @@ -1404,7 +1402,7 @@ class QueryInfo { // (undocumented) notify(): void; // (undocumented) - readonly observableQuery: ObservableQuery | null; + readonly observableQuery: ObservableQuery | null; // (undocumented) readonly queryId: string; // (undocumented) @@ -1414,7 +1412,7 @@ class QueryInfo { // (undocumented) setDiff(diff: Cache_2.DiffResult | null): void; // (undocumented) - setObservableQuery(oq: ObservableQuery | null): void; + setObservableQuery(oq: ObservableQuery | null): void; // (undocumented) stop(): void; // (undocumented) @@ -2097,18 +2095,18 @@ interface WatchQueryOptions, TUpdateResult = void> { // (undocumented) - onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff: Cache_2.DiffResult | undefined) => any; + onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff?: Cache_2.DiffResult | undefined) => any; // (undocumented) optimistic?: string | boolean; // (undocumented) @@ -447,7 +447,7 @@ class Concast extends Observable { // (undocumented) cancel: (reason: any) => void; // (undocumented) - readonly promise: Promise; + readonly promise: Promise; // (undocumented) removeObserver(observer: Observer): void; } @@ -794,15 +794,13 @@ class LocalState { // Warning: (ae-forgotten-export) The symbol "LocalStateOptions" needs to be exported by the entry point index.d.ts constructor({ cache, client, resolvers, fragmentMatcher, }: LocalStateOptions); // (undocumented) - addExportedVariables(document: DocumentNode, variables?: OperationVariables, context?: {}): Promise<{ - [x: string]: any; - }>; + addExportedVariables(document: DocumentNode, variables?: TVars, context?: {}): Promise; // (undocumented) addResolvers(resolvers: Resolvers | Resolvers[]): void; // (undocumented) clientQuery(document: DocumentNode): DocumentNode | null; // (undocumented) - getFragmentMatcher(): FragmentMatcher; + getFragmentMatcher(): FragmentMatcher | undefined; // (undocumented) getResolvers(): Resolvers; // (undocumented) @@ -1153,7 +1151,7 @@ class QueryInfo { document: DocumentNode; variables: Record | undefined; networkStatus?: NetworkStatus; - observableQuery?: ObservableQuery; + observableQuery?: ObservableQuery; lastRequestId?: number; }): this; // (undocumented) @@ -1177,7 +1175,7 @@ class QueryInfo { // (undocumented) notify(): void; // (undocumented) - readonly observableQuery: ObservableQuery | null; + readonly observableQuery: ObservableQuery | null; // (undocumented) readonly queryId: string; // (undocumented) @@ -1187,7 +1185,7 @@ class QueryInfo { // (undocumented) setDiff(diff: Cache_2.DiffResult | null): void; // (undocumented) - setObservableQuery(oq: ObservableQuery | null): void; + setObservableQuery(oq: ObservableQuery | null): void; // (undocumented) stop(): void; // (undocumented) @@ -1623,11 +1621,11 @@ interface WatchQueryOptions, TUpdateResult = void> { // (undocumented) - onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff: Cache_2.DiffResult | undefined) => any; + onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff?: Cache_2.DiffResult | undefined) => any; // (undocumented) optimistic?: string | boolean; // (undocumented) @@ -431,7 +431,7 @@ class Concast extends Observable { // (undocumented) cancel: (reason: any) => void; // (undocumented) - readonly promise: Promise; + readonly promise: Promise; // (undocumented) removeObserver(observer: Observer): void; } @@ -761,7 +761,7 @@ function isReference(obj: any): obj is Reference; type IsStrictlyAny = UnionToIntersection> extends never ? true : false; // @public (undocumented) -export const itAsync: ((message: string, callback: (resolve: (result?: any) => void, reject: (reason?: any) => void) => any, timeout?: number | undefined) => any) & { +export const itAsync: ((this: unknown, message: string, callback: (resolve: (result?: any) => void, reject: (reason?: any) => void) => any, timeout?: number | undefined) => void) & { only: (message: string, callback: (resolve: (result?: any) => void, reject: (reason?: any) => void) => any, timeout?: number) => void; skip: (message: string, callback: (resolve: (result?: any) => void, reject: (reason?: any) => void) => any, timeout?: number) => void; todo: (message: string, callback: (resolve: (result?: any) => void, reject: (reason?: any) => void) => any, timeout?: number) => void; @@ -772,15 +772,13 @@ class LocalState { // Warning: (ae-forgotten-export) The symbol "LocalStateOptions" needs to be exported by the entry point index.d.ts constructor({ cache, client, resolvers, fragmentMatcher, }: LocalStateOptions); // (undocumented) - addExportedVariables(document: DocumentNode, variables?: OperationVariables, context?: {}): Promise<{ - [x: string]: any; - }>; + addExportedVariables(document: DocumentNode, variables?: TVars, context?: {}): Promise; // (undocumented) addResolvers(resolvers: Resolvers | Resolvers[]): void; // (undocumented) clientQuery(document: DocumentNode): DocumentNode | null; // (undocumented) - getFragmentMatcher(): FragmentMatcher; + getFragmentMatcher(): FragmentMatcher | undefined; // (undocumented) getResolvers(): Resolvers; // (undocumented) @@ -951,7 +949,7 @@ export class MockSubscriptionLink extends ApolloLink { // (undocumented) onUnsubscribe(listener: any): void; // (undocumented) - operation: Operation; + operation?: Operation; // (undocumented) request(operation: Operation): Observable; // (undocumented) @@ -1231,7 +1229,7 @@ class QueryInfo { document: DocumentNode; variables: Record | undefined; networkStatus?: NetworkStatus; - observableQuery?: ObservableQuery; + observableQuery?: ObservableQuery; lastRequestId?: number; }): this; // (undocumented) @@ -1255,7 +1253,7 @@ class QueryInfo { // (undocumented) notify(): void; // (undocumented) - readonly observableQuery: ObservableQuery | null; + readonly observableQuery: ObservableQuery | null; // (undocumented) readonly queryId: string; // (undocumented) @@ -1265,7 +1263,7 @@ class QueryInfo { // (undocumented) setDiff(diff: Cache_2.DiffResult | null): void; // (undocumented) - setObservableQuery(oq: ObservableQuery | null): void; + setObservableQuery(oq: ObservableQuery | null): void; // (undocumented) stop(): void; // (undocumented) @@ -1673,11 +1671,11 @@ export function withWarningSpy(it: (...args: TArgs // src/cache/core/types/common.ts:100:3 - (ae-forgotten-export) The symbol "StorageType" needs to be exported by the entry point index.d.ts // src/core/ApolloClient.ts:47:3 - (ae-forgotten-export) The symbol "UriFunction" needs to be exported by the entry point index.d.ts // src/core/LocalState.ts:46:5 - (ae-forgotten-export) The symbol "FragmentMap" needs to be exported by the entry point index.d.ts -// src/core/ObservableQuery.ts:112:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts -// src/core/ObservableQuery.ts:113:5 - (ae-forgotten-export) The symbol "QueryInfo" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:116:5 - (ae-forgotten-export) The symbol "MutationStoreValue" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:149:5 - (ae-forgotten-export) The symbol "LocalState" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:378:7 - (ae-forgotten-export) The symbol "UpdateQueries" needs to be exported by the entry point index.d.ts +// src/core/ObservableQuery.ts:113:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts +// src/core/ObservableQuery.ts:114:5 - (ae-forgotten-export) The symbol "QueryInfo" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:117:5 - (ae-forgotten-export) The symbol "MutationStoreValue" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:150:5 - (ae-forgotten-export) The symbol "LocalState" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:379:7 - (ae-forgotten-export) The symbol "UpdateQueries" needs to be exported by the entry point index.d.ts // src/core/types.ts:158:3 - (ae-forgotten-export) The symbol "ApolloError" needs to be exported by the entry point index.d.ts // src/core/types.ts:160:3 - (ae-forgotten-export) The symbol "NetworkStatus" needs to be exported by the entry point index.d.ts // src/core/types.ts:178:3 - (ae-forgotten-export) The symbol "MutationQueryReducer" needs to be exported by the entry point index.d.ts diff --git a/.api-reports/api-report-testing_core.md b/.api-reports/api-report-testing_core.md index a95a55f8e2a..717e6e70674 100644 --- a/.api-reports/api-report-testing_core.md +++ b/.api-reports/api-report-testing_core.md @@ -309,7 +309,7 @@ namespace Cache_2 { // (undocumented) interface BatchOptions, TUpdateResult = void> { // (undocumented) - onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff: Cache_2.DiffResult | undefined) => any; + onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff?: Cache_2.DiffResult | undefined) => any; // (undocumented) optimistic?: string | boolean; // (undocumented) @@ -430,7 +430,7 @@ class Concast extends Observable { // (undocumented) cancel: (reason: any) => void; // (undocumented) - readonly promise: Promise; + readonly promise: Promise; // (undocumented) removeObserver(observer: Observer): void; } @@ -760,7 +760,7 @@ function isReference(obj: any): obj is Reference; type IsStrictlyAny = UnionToIntersection> extends never ? true : false; // @public (undocumented) -export const itAsync: ((message: string, callback: (resolve: (result?: any) => void, reject: (reason?: any) => void) => any, timeout?: number | undefined) => any) & { +export const itAsync: ((this: unknown, message: string, callback: (resolve: (result?: any) => void, reject: (reason?: any) => void) => any, timeout?: number | undefined) => void) & { only: (message: string, callback: (resolve: (result?: any) => void, reject: (reason?: any) => void) => any, timeout?: number) => void; skip: (message: string, callback: (resolve: (result?: any) => void, reject: (reason?: any) => void) => any, timeout?: number) => void; todo: (message: string, callback: (resolve: (result?: any) => void, reject: (reason?: any) => void) => any, timeout?: number) => void; @@ -771,15 +771,13 @@ class LocalState { // Warning: (ae-forgotten-export) The symbol "LocalStateOptions" needs to be exported by the entry point index.d.ts constructor({ cache, client, resolvers, fragmentMatcher, }: LocalStateOptions); // (undocumented) - addExportedVariables(document: DocumentNode, variables?: OperationVariables, context?: {}): Promise<{ - [x: string]: any; - }>; + addExportedVariables(document: DocumentNode, variables?: TVars, context?: {}): Promise; // (undocumented) addResolvers(resolvers: Resolvers | Resolvers[]): void; // (undocumented) clientQuery(document: DocumentNode): DocumentNode | null; // (undocumented) - getFragmentMatcher(): FragmentMatcher; + getFragmentMatcher(): FragmentMatcher | undefined; // (undocumented) getResolvers(): Resolvers; // (undocumented) @@ -905,7 +903,7 @@ export class MockSubscriptionLink extends ApolloLink { // (undocumented) onUnsubscribe(listener: any): void; // (undocumented) - operation: Operation; + operation?: Operation; // (undocumented) request(operation: Operation): Observable; // (undocumented) @@ -1185,7 +1183,7 @@ class QueryInfo { document: DocumentNode; variables: Record | undefined; networkStatus?: NetworkStatus; - observableQuery?: ObservableQuery; + observableQuery?: ObservableQuery; lastRequestId?: number; }): this; // (undocumented) @@ -1209,7 +1207,7 @@ class QueryInfo { // (undocumented) notify(): void; // (undocumented) - readonly observableQuery: ObservableQuery | null; + readonly observableQuery: ObservableQuery | null; // (undocumented) readonly queryId: string; // (undocumented) @@ -1219,7 +1217,7 @@ class QueryInfo { // (undocumented) setDiff(diff: Cache_2.DiffResult | null): void; // (undocumented) - setObservableQuery(oq: ObservableQuery | null): void; + setObservableQuery(oq: ObservableQuery | null): void; // (undocumented) stop(): void; // (undocumented) @@ -1629,11 +1627,11 @@ export function withWarningSpy(it: (...args: TArgs // src/cache/core/types/common.ts:100:3 - (ae-forgotten-export) The symbol "StorageType" needs to be exported by the entry point index.d.ts // src/core/ApolloClient.ts:47:3 - (ae-forgotten-export) The symbol "UriFunction" needs to be exported by the entry point index.d.ts // src/core/LocalState.ts:46:5 - (ae-forgotten-export) The symbol "FragmentMap" needs to be exported by the entry point index.d.ts -// src/core/ObservableQuery.ts:112:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts -// src/core/ObservableQuery.ts:113:5 - (ae-forgotten-export) The symbol "QueryInfo" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:116:5 - (ae-forgotten-export) The symbol "MutationStoreValue" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:149:5 - (ae-forgotten-export) The symbol "LocalState" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:378:7 - (ae-forgotten-export) The symbol "UpdateQueries" needs to be exported by the entry point index.d.ts +// src/core/ObservableQuery.ts:113:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts +// src/core/ObservableQuery.ts:114:5 - (ae-forgotten-export) The symbol "QueryInfo" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:117:5 - (ae-forgotten-export) The symbol "MutationStoreValue" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:150:5 - (ae-forgotten-export) The symbol "LocalState" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:379:7 - (ae-forgotten-export) The symbol "UpdateQueries" needs to be exported by the entry point index.d.ts // src/core/types.ts:158:3 - (ae-forgotten-export) The symbol "ApolloError" needs to be exported by the entry point index.d.ts // src/core/types.ts:160:3 - (ae-forgotten-export) The symbol "NetworkStatus" needs to be exported by the entry point index.d.ts // src/core/types.ts:178:3 - (ae-forgotten-export) The symbol "MutationQueryReducer" needs to be exported by the entry point index.d.ts diff --git a/.api-reports/api-report-utilities.md b/.api-reports/api-report-utilities.md index 90e3cbaae41..3b3396f5a87 100644 --- a/.api-reports/api-report-utilities.md +++ b/.api-reports/api-report-utilities.md @@ -352,7 +352,7 @@ namespace Cache_2 { // (undocumented) interface BatchOptions, TUpdateResult = void> { // (undocumented) - onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff: Cache_2.DiffResult | undefined) => any; + onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff?: Cache_2.DiffResult | undefined) => any; // (undocumented) optimistic?: string | boolean; // (undocumented) @@ -512,7 +512,7 @@ export class Concast extends Observable { // (undocumented) cancel: (reason: any) => void; // (undocumented) - readonly promise: Promise; + readonly promise: Promise; // (undocumented) removeObserver(observer: Observer): void; } @@ -1395,15 +1395,13 @@ class LocalState { // Warning: (ae-forgotten-export) The symbol "LocalStateOptions" needs to be exported by the entry point index.d.ts constructor({ cache, client, resolvers, fragmentMatcher, }: LocalStateOptions); // (undocumented) - addExportedVariables(document: DocumentNode, variables?: OperationVariables, context?: {}): Promise<{ - [x: string]: any; - }>; + addExportedVariables(document: DocumentNode, variables?: TVars, context?: {}): Promise; // (undocumented) addResolvers(resolvers: Resolvers | Resolvers[]): void; // (undocumented) clientQuery(document: DocumentNode): DocumentNode | null; // (undocumented) - getFragmentMatcher(): FragmentMatcher; + getFragmentMatcher(): FragmentMatcher | undefined; // (undocumented) getResolvers(): Resolvers; // (undocumented) @@ -1811,7 +1809,7 @@ interface Operation { type OperationVariables = Record; // @public (undocumented) -type OptionsUnion = WatchQueryOptions | QueryOptions | MutationOptions; +type OptionsUnion = WatchQueryOptions | QueryOptions | MutationOptions; // @public (undocumented) type Path = ReadonlyArray; @@ -1896,7 +1894,7 @@ class QueryInfo { document: DocumentNode; variables: Record | undefined; networkStatus?: NetworkStatus; - observableQuery?: ObservableQuery; + observableQuery?: ObservableQuery; lastRequestId?: number; }): this; // (undocumented) @@ -1920,7 +1918,7 @@ class QueryInfo { // (undocumented) notify(): void; // (undocumented) - readonly observableQuery: ObservableQuery | null; + readonly observableQuery: ObservableQuery | null; // (undocumented) readonly queryId: string; // (undocumented) @@ -1930,7 +1928,7 @@ class QueryInfo { // (undocumented) setDiff(diff: Cache_2.DiffResult | null): void; // (undocumented) - setObservableQuery(oq: ObservableQuery | null): void; + setObservableQuery(oq: ObservableQuery | null): void; // (undocumented) stop(): void; // (undocumented) @@ -2316,7 +2314,7 @@ export function stripTypename(value: T): DeepOmit; class Stump extends Layer { constructor(root: EntityStore.Root); // (undocumented) - merge(): any; + merge(older: string | StoreObject, newer: string | StoreObject): void; // (undocumented) removeLayer(): this; } @@ -2512,11 +2510,11 @@ interface WriteContext extends ReadMergeModifyContext { // src/cache/inmemory/writeToStore.ts:65:7 - (ae-forgotten-export) The symbol "MergeTree" needs to be exported by the entry point index.d.ts // src/core/ApolloClient.ts:47:3 - (ae-forgotten-export) The symbol "UriFunction" needs to be exported by the entry point index.d.ts // src/core/LocalState.ts:71:3 - (ae-forgotten-export) The symbol "ApolloClient" needs to be exported by the entry point index.d.ts -// src/core/ObservableQuery.ts:112:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts -// src/core/ObservableQuery.ts:113:5 - (ae-forgotten-export) The symbol "QueryInfo" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:116:5 - (ae-forgotten-export) The symbol "MutationStoreValue" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:149:5 - (ae-forgotten-export) The symbol "LocalState" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:378:7 - (ae-forgotten-export) The symbol "UpdateQueries" needs to be exported by the entry point index.d.ts +// src/core/ObservableQuery.ts:113:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts +// src/core/ObservableQuery.ts:114:5 - (ae-forgotten-export) The symbol "QueryInfo" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:117:5 - (ae-forgotten-export) The symbol "MutationStoreValue" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:150:5 - (ae-forgotten-export) The symbol "LocalState" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:379:7 - (ae-forgotten-export) The symbol "UpdateQueries" needs to be exported by the entry point index.d.ts // src/core/types.ts:158:3 - (ae-forgotten-export) The symbol "ApolloError" needs to be exported by the entry point index.d.ts // src/core/types.ts:160:3 - (ae-forgotten-export) The symbol "NetworkStatus" needs to be exported by the entry point index.d.ts // src/core/types.ts:178:3 - (ae-forgotten-export) The symbol "MutationQueryReducer" needs to be exported by the entry point index.d.ts diff --git a/.api-reports/api-report.md b/.api-reports/api-report.md index 231d1ada070..35954d0b1c0 100644 --- a/.api-reports/api-report.md +++ b/.api-reports/api-report.md @@ -403,7 +403,7 @@ namespace Cache_2 { // (undocumented) interface BatchOptions, TUpdateResult = void> { // (undocumented) - onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff: Cache_2.DiffResult | undefined) => any; + onWatchUpdated?: (this: TCache, watch: Cache_2.WatchOptions, diff: Cache_2.DiffResult, lastDiff?: Cache_2.DiffResult | undefined) => any; // (undocumented) optimistic?: string | boolean; // (undocumented) @@ -550,7 +550,7 @@ class Concast extends Observable { // (undocumented) cancel: (reason: any) => void; // (undocumented) - readonly promise: Promise; + readonly promise: Promise; // (undocumented) removeObserver(observer: Observer): void; } @@ -1107,8 +1107,6 @@ export class HttpLink extends ApolloLink { constructor(options?: HttpOptions); // (undocumented) options: HttpOptions; - // (undocumented) - requester: RequestHandler; } // @public (undocumented) @@ -1422,15 +1420,13 @@ class LocalState { // Warning: (ae-forgotten-export) The symbol "LocalStateOptions" needs to be exported by the entry point index.d.ts constructor({ cache, client, resolvers, fragmentMatcher, }: LocalStateOptions); // (undocumented) - addExportedVariables(document: DocumentNode, variables?: OperationVariables, context?: {}): Promise<{ - [x: string]: any; - }>; + addExportedVariables(document: DocumentNode, variables?: TVars, context?: {}): Promise; // (undocumented) addResolvers(resolvers: Resolvers | Resolvers[]): void; // (undocumented) clientQuery(document: DocumentNode): DocumentNode | null; // (undocumented) - getFragmentMatcher(): FragmentMatcher; + getFragmentMatcher(): FragmentMatcher | undefined; // (undocumented) getResolvers(): Resolvers; // (undocumented) @@ -1885,7 +1881,7 @@ export type OptimisticStoreItem = { }; // @public (undocumented) -type OptionsUnion = WatchQueryOptions | QueryOptions | MutationOptions; +type OptionsUnion = WatchQueryOptions | QueryOptions | MutationOptions; // @public (undocumented) export function parseAndCheckHttpResponse(operations: Operation | Operation[]): (response: Response) => Promise; @@ -2006,7 +2002,7 @@ class QueryInfo { document: DocumentNode; variables: Record | undefined; networkStatus?: NetworkStatus; - observableQuery?: ObservableQuery; + observableQuery?: ObservableQuery; lastRequestId?: number; }): this; // (undocumented) @@ -2028,7 +2024,7 @@ class QueryInfo { // (undocumented) notify(): void; // (undocumented) - readonly observableQuery: ObservableQuery | null; + readonly observableQuery: ObservableQuery | null; // (undocumented) readonly queryId: string; // (undocumented) @@ -2038,7 +2034,7 @@ class QueryInfo { // (undocumented) setDiff(diff: Cache_2.DiffResult | null): void; // (undocumented) - setObservableQuery(oq: ObservableQuery | null): void; + setObservableQuery(oq: ObservableQuery | null): void; // (undocumented) stop(): void; // (undocumented) @@ -2380,7 +2376,7 @@ export interface Resolvers { // // @public (undocumented) export function rewriteURIForGET(chosenURI: string, body: Body_2): { - parseError: any; + parseError: unknown; newURI?: undefined; } | { newURI: string; @@ -2469,7 +2465,7 @@ export type StoreValue = number | string | string[] | Reference | Reference[] | class Stump extends Layer { constructor(root: EntityStore.Root); // (undocumented) - merge(): any; + merge(older: string | StoreObject, newer: string | StoreObject): void; // (undocumented) removeLayer(): this; } @@ -2871,15 +2867,15 @@ interface WriteContext extends ReadMergeModifyContext { // src/cache/inmemory/policies.ts:167:3 - (ae-forgotten-export) The symbol "KeySpecifier" needs to be exported by the entry point index.d.ts // src/cache/inmemory/policies.ts:167:3 - (ae-forgotten-export) The symbol "KeyArgsFunction" needs to be exported by the entry point index.d.ts // src/cache/inmemory/types.ts:126:3 - (ae-forgotten-export) The symbol "KeyFieldsFunction" needs to be exported by the entry point index.d.ts -// src/core/ObservableQuery.ts:112:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts -// src/core/ObservableQuery.ts:113:5 - (ae-forgotten-export) The symbol "QueryInfo" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:116:5 - (ae-forgotten-export) The symbol "MutationStoreValue" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:149:5 - (ae-forgotten-export) The symbol "LocalState" needs to be exported by the entry point index.d.ts -// src/core/QueryManager.ts:378:7 - (ae-forgotten-export) The symbol "UpdateQueries" needs to be exported by the entry point index.d.ts +// src/core/ObservableQuery.ts:113:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts +// src/core/ObservableQuery.ts:114:5 - (ae-forgotten-export) The symbol "QueryInfo" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:117:5 - (ae-forgotten-export) The symbol "MutationStoreValue" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:150:5 - (ae-forgotten-export) The symbol "LocalState" needs to be exported by the entry point index.d.ts +// src/core/QueryManager.ts:379:7 - (ae-forgotten-export) The symbol "UpdateQueries" needs to be exported by the entry point index.d.ts // src/core/watchQueryOptions.ts:191:3 - (ae-forgotten-export) The symbol "UpdateQueryFn" needs to be exported by the entry point index.d.ts // src/link/http/selectHttpOptionsAndBody.ts:128:32 - (ae-forgotten-export) The symbol "HttpQueryOptions" needs to be exported by the entry point index.d.ts -// src/react/hooks/useBackgroundQuery.ts:24:3 - (ae-forgotten-export) The symbol "FetchMoreFunction" needs to be exported by the entry point index.d.ts -// src/react/hooks/useBackgroundQuery.ts:25:3 - (ae-forgotten-export) The symbol "RefetchFunction" needs to be exported by the entry point index.d.ts +// src/react/hooks/useBackgroundQuery.ts:26:3 - (ae-forgotten-export) The symbol "FetchMoreFunction" needs to be exported by the entry point index.d.ts +// src/react/hooks/useBackgroundQuery.ts:27:3 - (ae-forgotten-export) The symbol "RefetchFunction" needs to be exported by the entry point index.d.ts // (No @packageDocumentation comment for this package) diff --git a/.changeset/chatty-plants-cheer.md b/.changeset/chatty-plants-cheer.md new file mode 100644 index 00000000000..79cd7b9cd19 --- /dev/null +++ b/.changeset/chatty-plants-cheer.md @@ -0,0 +1,5 @@ +--- +"@apollo/client": patch +--- + +Enable `strict` in tsconfig for the entire project. diff --git a/.size-limit.cjs b/.size-limit.cjs index 0ab7c9f0aef..427e2778948 100644 --- a/.size-limit.cjs +++ b/.size-limit.cjs @@ -1,7 +1,7 @@ const checks = [ { path: "dist/apollo-client.min.cjs", - limit: "37972", + limit: "37975", }, { path: "dist/main.cjs", @@ -10,7 +10,7 @@ const checks = [ { path: "dist/index.js", import: "{ ApolloClient, InMemoryCache, HttpLink }", - limit: "32017", + limit: "32019", }, ...[ "ApolloProvider", diff --git a/src/__tests__/ApolloClient.ts b/src/__tests__/ApolloClient.ts index 50c668f934c..993691abe0c 100644 --- a/src/__tests__/ApolloClient.ts +++ b/src/__tests__/ApolloClient.ts @@ -4,7 +4,6 @@ import { ApolloClient, ApolloError, DefaultOptions, - FetchPolicy, QueryOptions, makeReference, } from "../core"; @@ -2126,8 +2125,8 @@ describe("ApolloClient", () => { } `; - ["network-only", "cache-and-network"].forEach( - (fetchPolicy: FetchPolicy) => { + (["network-only", "cache-and-network"] as const).forEach( + (fetchPolicy) => { const observable = client.watchQuery({ query, fetchPolicy, @@ -2156,13 +2155,15 @@ describe("ApolloClient", () => { } `; - [ - "cache-first", - "cache-and-network", - "network-only", - "cache-only", - "no-cache", - ].forEach((fetchPolicy: FetchPolicy) => { + ( + [ + "cache-first", + "cache-and-network", + "network-only", + "cache-only", + "no-cache", + ] as const + ).forEach((fetchPolicy) => { const observable = client.watchQuery({ query, fetchPolicy, diff --git a/src/__tests__/client.ts b/src/__tests__/client.ts index eb13692d37b..2fd8c29f187 100644 --- a/src/__tests__/client.ts +++ b/src/__tests__/client.ts @@ -1821,7 +1821,7 @@ describe("client", () => { link, cache: new InMemoryCache({ - dataIdFromObject: (obj: { id: any }) => obj.id, + dataIdFromObject: (obj: any) => obj.id, addTypename: false, }), }); @@ -1870,7 +1870,7 @@ describe("client", () => { callback(); throw new Error("not reached"); } catch (thrown) { - expect(thrown.message).toBe(cacheAndNetworkError); + expect((thrown as Error).message).toBe(cacheAndNetworkError); } } diff --git a/src/__tests__/graphqlSubscriptions.ts b/src/__tests__/graphqlSubscriptions.ts index 8b46eb01c26..2f4d66228d9 100644 --- a/src/__tests__/graphqlSubscriptions.ts +++ b/src/__tests__/graphqlSubscriptions.ts @@ -488,7 +488,7 @@ describe("GraphQL Subscriptions", () => { client.subscribe(options).subscribe({ next() { - expect(link.operation.getContext().someVar).toEqual( + expect(link.operation?.getContext().someVar).toEqual( options.context.someVar ); resolve(); diff --git a/src/__tests__/local-state/general.ts b/src/__tests__/local-state/general.ts index 30d31feea33..0d65993e821 100644 --- a/src/__tests__/local-state/general.ts +++ b/src/__tests__/local-state/general.ts @@ -1207,7 +1207,7 @@ describe("Combining client and server state/operations", () => { watchCount += 1; client.mutate({ mutation, - update(proxy, { data: { updateUser } }: { data: any }) { + update(proxy, { data: { updateUser } }) { proxy.writeQuery({ query: userQuery, data: { diff --git a/src/__tests__/local-state/resolvers.ts b/src/__tests__/local-state/resolvers.ts index c1052748841..b305a3ed7d8 100644 --- a/src/__tests__/local-state/resolvers.ts +++ b/src/__tests__/local-state/resolvers.ts @@ -11,7 +11,7 @@ import { WatchQueryOptions, } from "../../core"; -import { InMemoryCache } from "../../cache"; +import { InMemoryCache, isReference } from "../../cache"; import { Observable, Observer } from "../../utilities"; import { ApolloLink } from "../../link/core"; import { itAsync } from "../../testing"; @@ -747,10 +747,13 @@ describe("Writing cache data from resolvers", () => { }, }, }); - cache.modify({ + cache.modify<{ field: { field2: number } }>({ id: "Object:uniqueId", fields: { - field(value: { field2: number }) { + field(value) { + if (isReference(value)) { + fail("Should not be a reference"); + } expect(value.field2).toBe(1); return { ...value, field2: 2 }; }, diff --git a/src/__tests__/optimistic.ts b/src/__tests__/optimistic.ts index d8c20501821..4184a2f8d6d 100644 --- a/src/__tests__/optimistic.ts +++ b/src/__tests__/optimistic.ts @@ -235,7 +235,7 @@ describe("optimistic mutation results", () => { await promise; } catch (err) { expect(err).toBeInstanceOf(Error); - expect(err.message).toBe("forbidden (test error)"); + expect((err as Error).message).toBe("forbidden (test error)"); const dataInStore = (client.cache as InMemoryCache).extract(true); expect((dataInStore["TodoList5"] as any).todos.length).toBe(3); @@ -489,7 +489,7 @@ describe("optimistic mutation results", () => { await promise; } catch (err) { expect(err).toBeInstanceOf(Error); - expect(err.message).toBe("forbidden (test error)"); + expect((err as Error).message).toBe("forbidden (test error)"); const dataInStore = (client.cache as InMemoryCache).extract(true); expect((dataInStore["TodoList5"] as any).todos.length).toBe(3); @@ -2019,11 +2019,12 @@ describe("optimistic mutation results", () => { const wrapReject = ( fn: (...args: TArgs) => TResult ): typeof fn => { - return function () { + return function (this: unknown, ...args: TArgs) { try { - return fn.apply(this, arguments); + return fn.apply(this, args); } catch (e) { reject(e); + throw e; } }; }; diff --git a/src/__tests__/subscribeToMore.ts b/src/__tests__/subscribeToMore.ts index 2903dacdbbd..419b0b696d0 100644 --- a/src/__tests__/subscribeToMore.ts +++ b/src/__tests__/subscribeToMore.ts @@ -8,8 +8,10 @@ import { itAsync, mockSingleLink, mockObservableLink } from "../testing"; const isSub = (operation: Operation) => (operation.query as DocumentNode).definitions - .filter((x) => x.kind === "OperationDefinition") - .some((x: OperationDefinitionNode) => x.operation === "subscription"); + .filter( + (x): x is OperationDefinitionNode => x.kind === "OperationDefinition" + ) + .some((x) => x.operation === "subscription"); describe("subscribeToMore", () => { const query = gql` diff --git a/src/cache/core/types/Cache.ts b/src/cache/core/types/Cache.ts index 8628f272a19..58835e6aca5 100644 --- a/src/cache/core/types/Cache.ts +++ b/src/cache/core/types/Cache.ts @@ -93,7 +93,7 @@ export namespace Cache { this: TCache, watch: Cache.WatchOptions, diff: Cache.DiffResult, - lastDiff: Cache.DiffResult | undefined + lastDiff?: Cache.DiffResult | undefined ) => any; } diff --git a/src/cache/inmemory/__tests__/cache.ts b/src/cache/inmemory/__tests__/cache.ts index a7289cd2c64..edaa63fb4d4 100644 --- a/src/cache/inmemory/__tests__/cache.ts +++ b/src/cache/inmemory/__tests__/cache.ts @@ -4035,6 +4035,7 @@ describe("ReactiveVar and makeVar", () => { let broadcastCount = 0; cache["broadcastWatches"] = function () { ++broadcastCount; + // @ts-expect-error return broadcast.apply(this, arguments); }; diff --git a/src/cache/inmemory/__tests__/diffAgainstStore.ts b/src/cache/inmemory/__tests__/diffAgainstStore.ts index 5beef906247..0a315c60270 100644 --- a/src/cache/inmemory/__tests__/diffAgainstStore.ts +++ b/src/cache/inmemory/__tests__/diffAgainstStore.ts @@ -493,8 +493,8 @@ describe("diffing queries against the store", () => { }; const cache = new InMemoryCache({ - dataIdFromObject({ id }: { id: string }) { - return id; + dataIdFromObject(obj: any) { + return obj.id; }, }); @@ -841,7 +841,7 @@ describe("diffing queries against the store", () => { const writer = new StoreWriter( new InMemoryCache({ - dataIdFromObject: ({ id }: { id: string }) => id, + dataIdFromObject: (obj: any) => obj.id, }) ); @@ -1067,7 +1067,7 @@ describe("diffing queries against the store", () => { }); throw new Error("should have thrown"); } catch (e) { - expect(e.message).toEqual( + expect((e as Error).message).toEqual( "Missing selection set for object of type Message returned for query field messageList" ); } diff --git a/src/cache/inmemory/__tests__/readFromStore.ts b/src/cache/inmemory/__tests__/readFromStore.ts index 99472adc335..328336ec3ed 100644 --- a/src/cache/inmemory/__tests__/readFromStore.ts +++ b/src/cache/inmemory/__tests__/readFromStore.ts @@ -1904,7 +1904,7 @@ describe("reading from the store", () => { ); expect(value.__ref).toBe('Deity:{"name":"Zeus"}'); // Interim ruler Apollo takes over for real. - return toReference(apolloRulerResult.ruler); + return toReference(apolloRulerResult.ruler)!; }, }, }); diff --git a/src/cache/inmemory/__tests__/roundtrip.ts b/src/cache/inmemory/__tests__/roundtrip.ts index 6f04fabe5d7..5c6824cdc6e 100644 --- a/src/cache/inmemory/__tests__/roundtrip.ts +++ b/src/cache/inmemory/__tests__/roundtrip.ts @@ -61,7 +61,7 @@ function storeRoundtrip(query: DocumentNode, result: any, variables = {}) { (immutableResult as any).illegal = "this should not work"; throw new Error("unreached"); } catch (e) { - expect(e.message).not.toMatch(/unreached/); + expect((e as Error).message).not.toMatch(/unreached/); expect(e).toBeInstanceOf(TypeError); } assertDeeplyFrozen(immutableResult); diff --git a/src/cache/inmemory/__tests__/writeToStore.ts b/src/cache/inmemory/__tests__/writeToStore.ts index f1911b0a3c4..e00b21d9bba 100644 --- a/src/cache/inmemory/__tests__/writeToStore.ts +++ b/src/cache/inmemory/__tests__/writeToStore.ts @@ -25,9 +25,14 @@ import { defaultNormalizedCacheFactory, writeQueryToStore } from "./helpers"; import { InMemoryCache } from "../inMemoryCache"; import { TypedDocumentNode } from "../../../core"; import { extractFragmentContext } from "../helpers"; +import { KeyFieldsFunction } from "../policies"; +import { invariant } from "../../../utilities/globals"; import { spyOnConsole } from "../../../testing/internal"; -const getIdField = ({ id }: { id: string }) => id; +const getIdField: KeyFieldsFunction = ({ id }) => { + invariant(typeof id === "string", "id is not a string"); + return id; +}; describe("writing to the store", () => { const cache = new InMemoryCache({ @@ -1293,19 +1298,17 @@ describe("writing to the store", () => { } testData.forEach((data) => { - data.mutation.definitions.forEach( - (definition: OperationDefinitionNode) => { - if (isOperationDefinition(definition)) { - definition.selectionSet.selections.forEach((selection) => { - if (isField(selection)) { - expect( - storeKeyNameFromField(selection, data.variables) - ).toEqual(data.expected); - } - }); - } + data.mutation.definitions.forEach((definition) => { + if (isOperationDefinition(definition)) { + definition.selectionSet.selections.forEach((selection) => { + if (isField(selection)) { + expect(storeKeyNameFromField(selection, data.variables)).toEqual( + data.expected + ); + } + }); } - ); + }); }); }); @@ -1357,7 +1360,7 @@ describe("writing to the store", () => { return value.kind === "OperationDefinition"; } - mutation.definitions.map((def: OperationDefinitionNode) => { + mutation.definitions.map((def) => { if (isOperationDefinition(def)) { const writer = new StoreWriter( new InMemoryCache({ diff --git a/src/cache/inmemory/entityStore.ts b/src/cache/inmemory/entityStore.ts index ddb03b274da..a31f96db63a 100644 --- a/src/cache/inmemory/entityStore.ts +++ b/src/cache/inmemory/entityStore.ts @@ -593,7 +593,7 @@ class CacheGroup { // Used by the EntityStore#makeCacheKey method to compute cache keys // specific to this CacheGroup. - public keyMaker: Trie; + public keyMaker!: Trie; constructor( public readonly caching: boolean, @@ -800,7 +800,11 @@ class Layer extends EntityStore { public getStorage(): StorageType { let p: EntityStore = this.parent; while ((p as Layer).parent) p = (p as Layer).parent; - return p.getStorage.apply(p, arguments); + return p.getStorage.apply( + p, + // @ts-expect-error + arguments + ); } } @@ -823,20 +827,20 @@ class Stump extends Layer { return this; } - public merge() { + public merge(older: string | StoreObject, newer: string | StoreObject) { // We never want to write any data into the Stump, so we forward any merge // calls to the Root instead. Another option here would be to throw an // exception, but the toReference(object, true) function can sometimes // trigger Stump writes (which used to be Root writes, before the Stump // concept was introduced). - return this.parent.merge.apply(this.parent, arguments); + return this.parent.merge(older, newer); } } function storeObjectReconciler( existingObject: StoreObject, incomingObject: StoreObject, - property: string + property: string | number ): StoreValue { const existingValue = existingObject[property]; const incomingValue = incomingObject[property]; diff --git a/src/cache/inmemory/fixPolyfills.native.ts b/src/cache/inmemory/fixPolyfills.native.ts index d2302429c74..4b75824841a 100644 --- a/src/cache/inmemory/fixPolyfills.native.ts +++ b/src/cache/inmemory/fixPolyfills.native.ts @@ -33,10 +33,10 @@ try { // https://github.com/apollographql/react-apollo/issues/2442#issuecomment-426489517 testMap.set(frozen, frozen).delete(frozen); } catch { - const wrap = (method: (obj: T) => T): typeof method => { + const wrap = (obj: T) => T>(method: M): M => { return ( method && - ((obj) => { + (((obj) => { try { // If .set succeeds, also call .delete to avoid leaking memory. testMap.set(obj, obj).delete(obj); @@ -45,7 +45,7 @@ try { // by this return-from-finally statement: return method.call(Object, obj); } - }) + }) as M) ); }; Object.freeze = wrap(Object.freeze); diff --git a/src/cache/inmemory/fragmentRegistry.ts b/src/cache/inmemory/fragmentRegistry.ts index e868122d1d2..0832e6a7934 100644 --- a/src/cache/inmemory/fragmentRegistry.ts +++ b/src/cache/inmemory/fragmentRegistry.ts @@ -6,6 +6,7 @@ import type { } from "graphql"; import { visit } from "graphql"; +import type { OptimisticWrapperFunction } from "optimism"; import { wrap } from "optimism"; import type { FragmentMap } from "../../utilities/index.js"; @@ -29,24 +30,22 @@ export function createFragmentRegistry( return new FragmentRegistry(...fragments); } -const { forEach: arrayLikeForEach } = Array.prototype; - class FragmentRegistry implements FragmentRegistryAPI { private registry: FragmentMap = Object.create(null); - // Call static method FragmentRegistry.from(...) instead of invoking the + // Call `createFragmentRegistry` instead of invoking the // FragmentRegistry constructor directly. This reserves the constructor for // future configuration of the FragmentRegistry. constructor(...fragments: DocumentNode[]) { this.resetCaches(); if (fragments.length) { - this.register.apply(this, fragments); + this.register(...fragments); } } - public register(): this { + public register(...fragments: DocumentNode[]): this { const definitions = new Map(); - arrayLikeForEach.call(arguments, (doc: DocumentNode) => { + fragments.forEach((doc: DocumentNode) => { getFragmentDefinitions(doc).forEach((node) => { definitions.set(node.name.value, node); }); @@ -66,27 +65,15 @@ class FragmentRegistry implements FragmentRegistryAPI { private invalidate(name: string) {} public resetCaches() { - this.invalidate = (this.lookup = this.cacheUnaryMethod("lookup")).dirty; // This dirty function is bound to the wrapped lookup method. - this.transform = this.cacheUnaryMethod("transform"); - this.findFragmentSpreads = this.cacheUnaryMethod("findFragmentSpreads"); + this.invalidate = (this.lookup = this.cacheUnaryMethod(this.lookup)).dirty; // This dirty function is bound to the wrapped lookup method. + this.transform = this.cacheUnaryMethod(this.transform); + this.findFragmentSpreads = this.cacheUnaryMethod(this.findFragmentSpreads); } - private cacheUnaryMethod< - TName extends keyof Pick< - FragmentRegistry, - "lookup" | "transform" | "findFragmentSpreads" - >, - >(name: TName) { - const registry = this; - const originalMethod = FragmentRegistry.prototype[name]; - return wrap( - function () { - return originalMethod.apply(registry, arguments); - }, - { - makeCacheKey: (arg) => arg, - } - ); + private cacheUnaryMethod any>(originalMethod: F) { + return wrap, ReturnType>(originalMethod.bind(this), { + makeCacheKey: (arg) => arg, + }) as OptimisticWrapperFunction, ReturnType> & F; } public lookup(fragmentName: string): FragmentDefinitionNode | null { diff --git a/src/cache/inmemory/inMemoryCache.ts b/src/cache/inmemory/inMemoryCache.ts index 2dac460bf54..ff7e9cd8b91 100644 --- a/src/cache/inmemory/inMemoryCache.ts +++ b/src/cache/inmemory/inMemoryCache.ts @@ -33,18 +33,18 @@ type BroadcastOptions = Pick< >; export class InMemoryCache extends ApolloCache { - private data: EntityStore; - private optimisticData: EntityStore; + private data!: EntityStore; + private optimisticData!: EntityStore; protected config: InMemoryCacheConfig; private watches = new Set(); private addTypename: boolean; - private storeReader: StoreReader; - private storeWriter: StoreWriter; + private storeReader!: StoreReader; + private storeWriter!: StoreWriter; private addTypenameTransform = new DocumentTransform(addTypenameToDocument); - private maybeBroadcastWatch: OptimisticWrapperFunction< + private maybeBroadcastWatch!: OptimisticWrapperFunction< [Cache.WatchOptions, BroadcastOptions?], any, [Cache.WatchOptions] diff --git a/src/cache/inmemory/readFromStore.ts b/src/cache/inmemory/readFromStore.ts index 9a9ddc1498c..34a81f07c93 100644 --- a/src/cache/inmemory/readFromStore.ts +++ b/src/cache/inmemory/readFromStore.ts @@ -535,7 +535,7 @@ function firstMissing(tree: MissingTree): string | undefined { return value; }); } catch (result) { - return result; + return result as string; } } diff --git a/src/core/ApolloClient.ts b/src/core/ApolloClient.ts index 12b9e7e0e0e..5feb29f792d 100644 --- a/src/core/ApolloClient.ts +++ b/src/core/ApolloClient.ts @@ -86,7 +86,7 @@ export class ApolloClient implements DataProxy { public readonly typeDefs: ApolloClientOptions["typeDefs"]; private queryManager: QueryManager; - private devToolsHookCb: Function; + private devToolsHookCb?: Function; private resetStoreCallbacks: Array<() => Promise> = []; private clearStoreCallbacks: Array<() => Promise> = []; private localState: LocalState; @@ -592,7 +592,9 @@ export class ApolloClient implements DataProxy { >( options: RefetchQueriesOptions ): RefetchQueriesResult { - const map = this.queryManager.refetchQueries(options); + const map = this.queryManager.refetchQueries( + options as RefetchQueriesOptions, TResult> + ); const queries: ObservableQuery[] = []; const results: InternalRefetchQueriesResult[] = []; diff --git a/src/core/LocalState.ts b/src/core/LocalState.ts index 6f0aaf61f08..4b68b787c2a 100644 --- a/src/core/LocalState.ts +++ b/src/core/LocalState.ts @@ -75,9 +75,9 @@ export type LocalStateOptions = { export class LocalState { private cache: ApolloCache; - private client: ApolloClient; + private client?: ApolloClient; private resolvers?: Resolvers; - private fragmentMatcher: FragmentMatcher; + private fragmentMatcher?: FragmentMatcher; private selectionsToResolveCache = new WeakMap< ExecutableDefinitionNode, Set @@ -162,7 +162,7 @@ export class LocalState { this.fragmentMatcher = fragmentMatcher; } - public getFragmentMatcher(): FragmentMatcher { + public getFragmentMatcher(): FragmentMatcher | undefined { return this.fragmentMatcher; } @@ -197,11 +197,11 @@ export class LocalState { // To support `@client @export(as: "someVar")` syntax, we'll first resolve // @client @export fields locally, then pass the resolved values back to be // used alongside the original operation variables. - public async addExportedVariables( + public async addExportedVariables( document: DocumentNode, - variables: OperationVariables = {}, + variables: TVars = {} as TVars, context = {} - ) { + ): /* returns at least the variables that were passed in */ Promise { if (document) { return this.resolveDocument( document, diff --git a/src/core/ObservableQuery.ts b/src/core/ObservableQuery.ts index 57f0867276f..bda85a543a7 100644 --- a/src/core/ObservableQuery.ts +++ b/src/core/ObservableQuery.ts @@ -35,6 +35,7 @@ import type { QueryInfo } from "./QueryInfo.js"; import type { MissingFieldError } from "../cache/index.js"; import type { MissingTree } from "../cache/core/types/common.js"; import { equalByQuery } from "./equalByQuery.js"; +import type { TODO } from "../utilities/types/TODO.js"; const { assign, hasOwnProperty } = Object; @@ -924,8 +925,9 @@ Did you mean to call refetch(variables) instead of refetch({ variables })?`, public reobserve( newOptions?: Partial>, newNetworkStatus?: NetworkStatus - ) { - return this.reobserveAsConcast(newOptions, newNetworkStatus).promise; + ): Promise> { + return this.reobserveAsConcast(newOptions, newNetworkStatus) + .promise as TODO; } public resubscribeAfterError( @@ -1048,14 +1050,18 @@ export function reobserveCacheFirst( fetchPolicy: "cache-first", // Use a temporary nextFetchPolicy function that replaces itself with the // previous nextFetchPolicy value and returns the original fetchPolicy. - nextFetchPolicy(this: WatchQueryOptions) { + nextFetchPolicy( + this: WatchQueryOptions, + currentFetchPolicy: WatchQueryFetchPolicy, + context: NextFetchPolicyContext + ) { // Replace this nextFetchPolicy function in the options object with the // original this.options.nextFetchPolicy value. this.nextFetchPolicy = nextFetchPolicy; // If the original nextFetchPolicy value was a function, give it a // chance to decide what happens here. - if (typeof nextFetchPolicy === "function") { - return nextFetchPolicy.apply(this, arguments); + if (typeof this.nextFetchPolicy === "function") { + return this.nextFetchPolicy(currentFetchPolicy, context); } // Otherwise go back to the original this.options.fetchPolicy. return fetchPolicy!; diff --git a/src/core/QueryInfo.ts b/src/core/QueryInfo.ts index 1b6f17acc5a..cdf0d358ceb 100644 --- a/src/core/QueryInfo.ts +++ b/src/core/QueryInfo.ts @@ -49,6 +49,7 @@ function wrapDestructiveCacheMethod( // that matters in any conceivable practical scenario. (destructiveMethodCounts.get(cache)! + 1) % 1e15 ); + // @ts-expect-error this is just too generic to be typed correctly return original.apply(this, arguments); }; } @@ -111,7 +112,7 @@ export class QueryInfo { // NetworkStatus.loading, but also possibly fetchMore, poll, refetch, // or setVariables. networkStatus?: NetworkStatus; - observableQuery?: ObservableQuery; + observableQuery?: ObservableQuery; lastRequestId?: number; }): this { let networkStatus = query.networkStatus || NetworkStatus.loading; @@ -212,10 +213,10 @@ export class QueryInfo { } } - public readonly observableQuery: ObservableQuery | null = null; + public readonly observableQuery: ObservableQuery | null = null; private oqListener?: QueryListener; - setObservableQuery(oq: ObservableQuery | null) { + setObservableQuery(oq: ObservableQuery | null) { if (oq === this.observableQuery) return; if (this.oqListener) { diff --git a/src/core/QueryManager.ts b/src/core/QueryManager.ts index f57d7afda6c..23ee9320400 100644 --- a/src/core/QueryManager.ts +++ b/src/core/QueryManager.ts @@ -74,6 +74,7 @@ import { import type { ApolloErrorOptions } from "../errors/index.js"; import { PROTOCOL_ERRORS_SYMBOL } from "../errors/index.js"; import { print } from "../utilities/index.js"; +import type { TODO } from "../utilities/types/TODO.js"; const { hasOwnProperty } = Object.prototype; @@ -479,7 +480,7 @@ export class QueryManager { const results: any[] = []; this.refetchQueries({ - updateCache: (cache: TCache) => { + updateCache: (cache) => { if (!skipCache) { cacheWrites.forEach((write) => cache.write(write)); } @@ -526,7 +527,7 @@ export class QueryManager { // either a SingleExecutionResult or the final ExecutionPatchResult, // call the update function. if (isFinalResult) { - update(cache, result, { + update(cache as TCache, result, { context: mutation.context, variables: mutation.variables, }); @@ -617,7 +618,7 @@ export class QueryManager { networkStatus?: NetworkStatus ): Promise> { return this.fetchConcastWithInfo(queryId, options, networkStatus).concast - .promise; + .promise as TODO; } public getQueryStore() { diff --git a/src/core/__tests__/ObservableQuery.ts b/src/core/__tests__/ObservableQuery.ts index 3104be8ea96..add7b8a61ee 100644 --- a/src/core/__tests__/ObservableQuery.ts +++ b/src/core/__tests__/ObservableQuery.ts @@ -46,7 +46,8 @@ export const mockFetchQuery = (queryManager: QueryManager) => { >( original: T ) => - jest.fn, Parameters>(function () { + jest.fn, Parameters>(function (): ReturnType { + // @ts-expect-error return original.apply(queryManager, arguments); }); @@ -2740,7 +2741,7 @@ describe("ObservableQuery", () => { throw new Error("not reached"); } catch (error) { expect(error).toBeInstanceOf(TypeError); - expect(error.message).toMatch( + expect((error as Error).message).toMatch( /Cannot assign to read only property 'value'/ ); } diff --git a/src/core/__tests__/QueryManager/index.ts b/src/core/__tests__/QueryManager/index.ts index 77fd0fe6dbd..11f92046721 100644 --- a/src/core/__tests__/QueryManager/index.ts +++ b/src/core/__tests__/QueryManager/index.ts @@ -1610,7 +1610,7 @@ describe("QueryManager", () => { }); }); - const getIdField = ({ id }: { id: string }) => id; + const getIdField = (obj: any) => obj.id; itAsync( "runs a mutation with object parameters and puts the result in the store", diff --git a/src/link/batch-http/__tests__/batchHttpLink.ts b/src/link/batch-http/__tests__/batchHttpLink.ts index 525636addb6..544f44c304f 100644 --- a/src/link/batch-http/__tests__/batchHttpLink.ts +++ b/src/link/batch-http/__tests__/batchHttpLink.ts @@ -35,10 +35,11 @@ function makeCallback( ) { return function () { try { + // @ts-expect-error callback.apply(this, arguments); resolve(); } catch (error) { - reject(error); + reject(error as Error); } } as typeof callback; } @@ -472,7 +473,7 @@ describe("SharedHttpTest", () => { after(); } catch (e) { - reject(e); + reject(e as Error); } }, }); diff --git a/src/link/batch/__tests__/batchLink.ts b/src/link/batch/__tests__/batchLink.ts index 1a564fd2796..e5930924c27 100644 --- a/src/link/batch/__tests__/batchLink.ts +++ b/src/link/batch/__tests__/batchLink.ts @@ -64,6 +64,7 @@ function terminatingCheck( ) { return function () { try { + // @ts-expect-error callback.apply(this, arguments); resolve(); } catch (error) { diff --git a/src/link/error/index.ts b/src/link/error/index.ts index ec5d6dffba9..7122ff792e8 100644 --- a/src/link/error/index.ts +++ b/src/link/error/index.ts @@ -84,7 +84,7 @@ export function onError(errorHandler: ErrorHandler): ApolloLink { }, }); } catch (e) { - errorHandler({ networkError: e, operation, forward }); + errorHandler({ networkError: e as Error, operation, forward }); observer.error(e); } diff --git a/src/link/http/HttpLink.ts b/src/link/http/HttpLink.ts index 06479e050f2..c59c04566cf 100644 --- a/src/link/http/HttpLink.ts +++ b/src/link/http/HttpLink.ts @@ -1,10 +1,8 @@ -import type { RequestHandler } from "../core/index.js"; import { ApolloLink } from "../core/index.js"; import type { HttpOptions } from "./selectHttpOptionsAndBody.js"; import { createHttpLink } from "./createHttpLink.js"; export class HttpLink extends ApolloLink { - public requester: RequestHandler; constructor(public options: HttpOptions = {}) { super(createHttpLink(options).request); } diff --git a/src/link/http/__tests__/HttpLink.ts b/src/link/http/__tests__/HttpLink.ts index 4523c4d0fcb..b2ce5308cfd 100644 --- a/src/link/http/__tests__/HttpLink.ts +++ b/src/link/http/__tests__/HttpLink.ts @@ -92,10 +92,11 @@ function makeCallback( ) { return function () { try { + // @ts-expect-error callback.apply(this, arguments); resolve(); } catch (error) { - reject(error); + reject(error as Error); } } as typeof callback; } @@ -1202,7 +1203,7 @@ describe("HttpLink", () => { reject("warning wasn't called"); } catch (e) { makeCallback(resolve, reject, () => - expect(e.message).toMatch(/has not been found globally/) + expect((e as Error).message).toMatch(/has not been found globally/) )(); } }); @@ -1214,7 +1215,7 @@ describe("HttpLink", () => { reject("warning wasn't called"); } catch (e) { makeCallback(resolve, reject, () => - expect(e.message).toMatch(/has not been found globally/) + expect((e as Error).message).toMatch(/has not been found globally/) )(); } }); diff --git a/src/link/http/__tests__/responseIterator.ts b/src/link/http/__tests__/responseIterator.ts index 74ffa328c60..3800a257a8d 100644 --- a/src/link/http/__tests__/responseIterator.ts +++ b/src/link/http/__tests__/responseIterator.ts @@ -17,10 +17,11 @@ function makeCallback( ) { return function () { try { + // @ts-expect-error callback.apply(this, arguments); resolve(); } catch (error) { - reject(error); + reject(error as Error); } } as typeof callback; } diff --git a/src/link/http/iterators/reader.ts b/src/link/http/iterators/reader.ts index 3a81e37cf2a..d9feac48d07 100644 --- a/src/link/http/iterators/reader.ts +++ b/src/link/http/iterators/reader.ts @@ -6,7 +6,7 @@ import { canUseAsyncIteratorSymbol } from "../../../utilities/index.js"; interface ReaderIterator { - next(): Promise>; + next(): Promise>; [Symbol.asyncIterator]?(): AsyncIterator; } @@ -15,12 +15,20 @@ export default function readerIterator( ): AsyncIterableIterator { const iterator: ReaderIterator = { next() { - return reader.read(); + return reader.read() as Promise< + | ReadableStreamReadValueResult + // DoneResult has `value` optional, which doesn't comply with an + // `IteratorResult`, so we assert it to `T | undefined` instead + | Required> + >; }, }; if (canUseAsyncIteratorSymbol) { - iterator[Symbol.asyncIterator] = function (): AsyncIterator { + iterator[Symbol.asyncIterator] = function (): AsyncIterator< + T, + T | undefined + > { return this; }; } diff --git a/src/link/http/serializeFetchParameter.ts b/src/link/http/serializeFetchParameter.ts index 4ad2b3db2cd..5a08fe67269 100644 --- a/src/link/http/serializeFetchParameter.ts +++ b/src/link/http/serializeFetchParameter.ts @@ -9,7 +9,7 @@ export const serializeFetchParameter = (p: any, label: string) => { let serialized; try { serialized = JSON.stringify(p); - } catch (e) { + } catch (e: any) { const parseError = newInvariantError( `Network request failed. %s is not serializable: %s`, label, diff --git a/src/link/persisted-queries/__tests__/persisted-queries.test.ts b/src/link/persisted-queries/__tests__/persisted-queries.test.ts index 37fc4c9c476..ea8b56e660a 100644 --- a/src/link/persisted-queries/__tests__/persisted-queries.test.ts +++ b/src/link/persisted-queries/__tests__/persisted-queries.test.ts @@ -219,7 +219,7 @@ describe("happy path", () => { reject("should have thrown an error"); } catch (error) { expect( - error.message.indexOf( + (error as Error).message.indexOf( 'Missing/invalid "sha256" or "generateHash" function' ) ).toBe(0); @@ -238,7 +238,7 @@ describe("happy path", () => { reject("should have thrown an error"); } catch (error) { expect( - error.message.indexOf( + (error as Error).message.indexOf( 'Missing/invalid "sha256" or "generateHash" function' ) ).toBe(0); @@ -569,6 +569,7 @@ describe("failure path", () => { status, }); } + // @ts-expect-error return global.fetch.apply(null, args); }; const link = createPersistedQuery({ sha256 }).concat( @@ -623,6 +624,7 @@ describe("failure path", () => { status, }); } + // @ts-expect-error return global.fetch.apply(null, args); }; const link = createPersistedQuery({ sha256 }).concat( @@ -662,6 +664,7 @@ describe("failure path", () => { status, }); } + // @ts-expect-error return global.fetch.apply(null, args); }; diff --git a/src/react/cache/QueryReference.ts b/src/react/cache/QueryReference.ts index f1ad5732bac..5b2fc14c643 100644 --- a/src/react/cache/QueryReference.ts +++ b/src/react/cache/QueryReference.ts @@ -73,7 +73,7 @@ export class InternalQueryReference { private subscription: ObservableSubscription; private listeners = new Set>(); - private autoDisposeTimeoutId: NodeJS.Timeout; + private autoDisposeTimeoutId?: NodeJS.Timeout; private status: "idle" | "loading" = "loading"; private resolve: ((result: ApolloQueryResult) => void) | undefined; diff --git a/src/react/cache/SuspenseCache.ts b/src/react/cache/SuspenseCache.ts index e5f8036ecea..af883c0a52a 100644 --- a/src/react/cache/SuspenseCache.ts +++ b/src/react/cache/SuspenseCache.ts @@ -32,7 +32,9 @@ export class SuspenseCache { cacheKey: CacheKey, createObservable: () => ObservableQuery ) { - const ref = this.queryRefs.lookupArray(cacheKey); + const ref = this.queryRefs.lookupArray(cacheKey) as { + current?: InternalQueryReference; + }; if (!ref.current) { ref.current = new InternalQueryReference(createObservable(), { @@ -44,6 +46,6 @@ export class SuspenseCache { }); } - return ref.current as InternalQueryReference; + return ref.current; } } diff --git a/src/react/hoc/__tests__/fragments.test.tsx b/src/react/hoc/__tests__/fragments.test.tsx index 1597a4b7092..741e5e2f8f7 100644 --- a/src/react/hoc/__tests__/fragments.test.tsx +++ b/src/react/hoc/__tests__/fragments.test.tsx @@ -55,7 +55,7 @@ describe("fragments", () => { ); throw new Error(); } catch (e) { - expect(e.name).toMatch(/Invariant Violation/); + expect((e as Error).name).toMatch(/Invariant Violation/); } }); diff --git a/src/react/hoc/__tests__/queries/errors.test.tsx b/src/react/hoc/__tests__/queries/errors.test.tsx index 449e3c46c67..dfe92de05ce 100644 --- a/src/react/hoc/__tests__/queries/errors.test.tsx +++ b/src/react/hoc/__tests__/queries/errors.test.tsx @@ -105,7 +105,7 @@ describe("[queries] errors", () => { try { unmount(); - } catch (e) { + } catch (e: any) { throw new Error(e); } }); @@ -220,6 +220,7 @@ describe("[queries] errors", () => { "setVar", 1 )( + // @ts-expect-error graphql(query)( class extends React.Component> { componentDidUpdate() { diff --git a/src/react/hoc/__tests__/queries/updateQuery.test.tsx b/src/react/hoc/__tests__/queries/updateQuery.test.tsx index 0d3056b862e..b11de81c326 100644 --- a/src/react/hoc/__tests__/queries/updateQuery.test.tsx +++ b/src/react/hoc/__tests__/queries/updateQuery.test.tsx @@ -143,7 +143,7 @@ describe("[queries] updateQuery", () => { ).toBeTruthy(); try { this.props.data!.updateQuery((p) => p); - } catch (e) { + } catch (e: any) { // TODO: branch never hit in test expect(e.toString()).toMatch( /ObservableQuery with this id doesn't exist:/ diff --git a/src/react/hoc/__tests__/ssr/getDataFromTree.test.tsx b/src/react/hoc/__tests__/ssr/getDataFromTree.test.tsx index b4a0ab6fc6c..13172453f78 100644 --- a/src/react/hoc/__tests__/ssr/getDataFromTree.test.tsx +++ b/src/react/hoc/__tests__/ssr/getDataFromTree.test.tsx @@ -945,6 +945,7 @@ describe("SSR", () => { ); + // @ts-expect-error const WrappedElement = withQuery(withMutation(Element)); const app = ( diff --git a/src/react/hoc/mutation-hoc.tsx b/src/react/hoc/mutation-hoc.tsx index a0098a0f290..7705c1eeda4 100644 --- a/src/react/hoc/mutation-hoc.tsx +++ b/src/react/hoc/mutation-hoc.tsx @@ -86,6 +86,7 @@ export function withMutation< return ( + {/* @ts-expect-error */} {( mutate: MutationFunction, { data, ...r }: MutationResult diff --git a/src/react/hooks/useBackgroundQuery.ts b/src/react/hooks/useBackgroundQuery.ts index 8e49114e7aa..cb6cf125113 100644 --- a/src/react/hooks/useBackgroundQuery.ts +++ b/src/react/hooks/useBackgroundQuery.ts @@ -1,8 +1,10 @@ import * as React from "react"; import type { DocumentNode, + FetchMoreQueryOptions, OperationVariables, TypedDocumentNode, + WatchQueryOptions, } from "../../core/index.js"; import { useApolloClient } from "./useApolloClient.js"; import { wrapQueryRef } from "../cache/QueryReference.js"; @@ -197,7 +199,7 @@ export function useBackgroundQuery< ]; const queryRef = suspenseCache.getQueryRef(cacheKey, () => - client.watchQuery(watchQueryOptions) + client.watchQuery(watchQueryOptions as WatchQueryOptions) ); const [promiseCache, setPromiseCache] = React.useState( @@ -213,7 +215,7 @@ export function useBackgroundQuery< const fetchMore: FetchMoreFunction = React.useCallback( (options) => { - const promise = queryRef.fetchMore(options); + const promise = queryRef.fetchMore(options as FetchMoreQueryOptions); setPromiseCache((promiseCache) => new Map(promiseCache).set(queryRef.key, queryRef.promise) diff --git a/src/react/hooks/useLazyQuery.ts b/src/react/hooks/useLazyQuery.ts index 535b9b4ceb2..51cddd464b1 100644 --- a/src/react/hooks/useLazyQuery.ts +++ b/src/react/hooks/useLazyQuery.ts @@ -75,6 +75,7 @@ export function useLazyQuery< // Only the first time populating execOptionsRef.current matters here. internalState.forceUpdateState(); } + // @ts-expect-error this is just too generic to type return method.apply(this, arguments); }; } diff --git a/src/react/hooks/useMutation.ts b/src/react/hooks/useMutation.ts index 2eff46ee272..2122067b2e2 100644 --- a/src/react/hooks/useMutation.ts +++ b/src/react/hooks/useMutation.ts @@ -12,6 +12,7 @@ import type { import type { ApolloCache, DefaultContext, + MutationOptions, OperationVariables, } from "../../core/index.js"; import { mergeOptions } from "../../utilities/index.js"; @@ -87,10 +88,10 @@ export function useMutation< } const mutationId = ++ref.current.mutationId; - const clientOptions = mergeOptions(baseOptions, executeOptions as any); + const clientOptions = mergeOptions(baseOptions, executeOptions); return client - .mutate(clientOptions) + .mutate(clientOptions as MutationOptions) .then((response) => { const { data, errors } = response; const error = @@ -102,7 +103,10 @@ export function useMutation< executeOptions.onError || ref.current.options?.onError; if (error && onError) { - onError(error, clientOptions); + onError( + error, + clientOptions as MutationOptions + ); } if ( @@ -126,7 +130,10 @@ export function useMutation< executeOptions.onCompleted || ref.current.options?.onCompleted; if (!error) { - onCompleted?.(response.data!, clientOptions); + onCompleted?.( + response.data!, + clientOptions as MutationOptions + ); } return response; @@ -150,7 +157,10 @@ export function useMutation< executeOptions.onError || ref.current.options?.onError; if (onError) { - onError(error, clientOptions); + onError( + error, + clientOptions as MutationOptions + ); // TODO(brian): why are we returning this here??? return { data: void 0, errors: error }; diff --git a/src/react/hooks/useQuery.ts b/src/react/hooks/useQuery.ts index 33b127f62e6..d8509b52a03 100644 --- a/src/react/hooks/useQuery.ts +++ b/src/react/hooks/useQuery.ts @@ -271,8 +271,8 @@ class InternalState { // useQuery method, so we can safely use these members in other/later methods // without worrying they might be uninitialized. private renderPromises: ApolloContextValue["renderPromises"]; - private queryHookOptions: QueryHookOptions; - private watchQueryOptions: WatchQueryOptions; + private queryHookOptions!: QueryHookOptions; + private watchQueryOptions!: WatchQueryOptions; private useOptions(options: QueryHookOptions) { const watchQueryOptions = this.createWatchQueryOptions( @@ -461,8 +461,8 @@ class InternalState { private onCompleted(data: TData) {} private onError(error: ApolloError) {} - private observable: ObservableQuery; - private obsQueryFields: Omit< + private observable!: ObservableQuery; + private obsQueryFields!: Omit< ObservableQueryFields, "variables" >; diff --git a/src/react/hooks/useSuspenseQuery.ts b/src/react/hooks/useSuspenseQuery.ts index 1139b3a4984..eb4ca517963 100644 --- a/src/react/hooks/useSuspenseQuery.ts +++ b/src/react/hooks/useSuspenseQuery.ts @@ -178,7 +178,11 @@ export function useSuspenseQuery< ): UseSuspenseQueryResult { const client = useApolloClient(options.client); const suspenseCache = getSuspenseCache(client); - const watchQueryOptions = useWatchQueryOptions({ client, query, options }); + const watchQueryOptions = useWatchQueryOptions({ + client, + query, + options, + }); const { fetchPolicy, variables } = watchQueryOptions; const { queryKey = [] } = options; @@ -236,8 +240,8 @@ export function useSuspenseQuery< const result = fetchPolicy === "standby" ? skipResult : __use(promise); - const fetchMore: FetchMoreFunction = React.useCallback( - (options) => { + const fetchMore = React.useCallback( + ((options) => { const promise = queryRef.fetchMore(options); setPromiseCache((previousPromiseCache) => @@ -245,7 +249,10 @@ export function useSuspenseQuery< ); return promise; - }, + }) satisfies FetchMoreFunction< + unknown, + OperationVariables + > as FetchMoreFunction, [queryRef] ); @@ -262,13 +269,17 @@ export function useSuspenseQuery< [queryRef] ); - const subscribeToMore: SubscribeToMoreFunction = - React.useCallback( - (options) => queryRef.observable.subscribeToMore(options), - [queryRef] - ); + const subscribeToMore: SubscribeToMoreFunction< + TData | undefined, + TVariables + > = React.useCallback( + (options) => queryRef.observable.subscribeToMore(options), + [queryRef] + ); - return React.useMemo(() => { + return React.useMemo< + UseSuspenseQueryResult + >(() => { return { client, data: result.data, diff --git a/src/testing/core/itAsync.ts b/src/testing/core/itAsync.ts index 80fffe8f181..fc664cbac07 100644 --- a/src/testing/core/itAsync.ts +++ b/src/testing/core/itAsync.ts @@ -9,7 +9,7 @@ function wrap(key?: "only" | "skip" | "todo") { ) => (key ? it[key] : it)( message, - function () { + function (this: unknown) { return new Promise((resolve, reject) => callback.call(this, resolve, reject) ); @@ -21,7 +21,7 @@ function wrap(key?: "only" | "skip" | "todo") { const wrappedIt = wrap(); export const itAsync = Object.assign( - function (...args: Parameters) { + function (this: unknown, ...args: Parameters) { return wrappedIt.apply(this, args); }, { diff --git a/src/testing/core/mocking/mockLink.ts b/src/testing/core/mocking/mockLink.ts index e02d8aaf794..0c64363760c 100644 --- a/src/testing/core/mocking/mockLink.ts +++ b/src/testing/core/mocking/mockLink.ts @@ -45,7 +45,7 @@ function requestToKey(request: GraphQLRequest, addTypename: Boolean): string { } export class MockLink extends ApolloLink { - public operation: Operation; + public operation!: Operation; public addTypename: Boolean = true; public showWarnings: boolean = true; private mockedResponsesByKey: { [key: string]: MockedResponse[] } = {}; diff --git a/src/testing/core/mocking/mockSubscriptionLink.ts b/src/testing/core/mocking/mockSubscriptionLink.ts index 93e48d5ddb4..b91c86e8b68 100644 --- a/src/testing/core/mocking/mockSubscriptionLink.ts +++ b/src/testing/core/mocking/mockSubscriptionLink.ts @@ -15,7 +15,7 @@ export interface MockedSubscriptionResult { export class MockSubscriptionLink extends ApolloLink { public unsubscribers: any[] = []; public setups: any[] = []; - public operation: Operation; + public operation?: Operation; private observers: any[] = []; diff --git a/src/testing/core/observableToPromise.ts b/src/testing/core/observableToPromise.ts index 4d8415d4838..004a013593c 100644 --- a/src/testing/core/observableToPromise.ts +++ b/src/testing/core/observableToPromise.ts @@ -11,7 +11,7 @@ import type { ObservableSubscription } from "../../utilities/index.js"; * @param errorCallbacks an expected set of errors */ export type Options = { - observable: ObservableQuery; + observable: ObservableQuery; shouldResolve?: boolean; wait?: number; errorCallbacks?: ((error: Error) => any)[]; diff --git a/src/testing/core/withConsoleSpy.ts b/src/testing/core/withConsoleSpy.ts index c5c425e6e33..01626d7f5f9 100644 --- a/src/testing/core/withConsoleSpy.ts +++ b/src/testing/core/withConsoleSpy.ts @@ -2,8 +2,7 @@ function wrapTestFunction( fn: (...args: any[]) => any, consoleMethodName: "log" | "warn" | "error" ) { - return function () { - const args = arguments; + return function (this: any, ...args: any[]) { const spy = jest.spyOn(console, consoleMethodName); spy.mockImplementation(() => {}); return new Promise((resolve) => { diff --git a/src/testing/internal/profile/profile.tsx b/src/testing/internal/profile/profile.tsx index 12527844566..f4abb64af0e 100644 --- a/src/testing/internal/profile/profile.tsx +++ b/src/testing/internal/profile/profile.tsx @@ -203,7 +203,7 @@ export function profile< return render; }, async takeRender(options: NextRenderOptions = {}) { - let error: { message?: string } | undefined = undefined; + let error: unknown = undefined; try { return await Profiled.peekRender({ [_stackTrace]: captureStackTrace(Profiled.takeRender), diff --git a/src/testing/matchers/ProfiledComponent.ts b/src/testing/matchers/ProfiledComponent.ts index c733d50e241..469cfe00995 100644 --- a/src/testing/matchers/ProfiledComponent.ts +++ b/src/testing/matchers/ProfiledComponent.ts @@ -6,10 +6,10 @@ import type { ProfiledHook, } from "../internal/index.js"; export const toRerender: MatcherFunction<[options?: NextRenderOptions]> = - async function ( - _profiled: ProfiledComponent | ProfiledHook, - options?: NextRenderOptions - ) { + async function (actual, options) { + const _profiled = actual as + | ProfiledComponent + | ProfiledHook; const profiled = "ProfiledComponent" in _profiled ? _profiled.ProfiledComponent @@ -42,11 +42,10 @@ const failed = {}; export const toRenderExactlyTimes: MatcherFunction< [times: number, options?: NextRenderOptions] -> = async function ( - _profiled: ProfiledComponent | ProfiledHook, - times: number, - optionsPerRender?: NextRenderOptions -) { +> = async function (actual, times, optionsPerRender) { + const _profiled = actual as + | ProfiledComponent + | ProfiledHook; const profiled = "ProfiledComponent" in _profiled ? _profiled.ProfiledComponent : _profiled; const options = { timeout: 100, ...optionsPerRender }; diff --git a/src/tsconfig.json b/src/tsconfig.json new file mode 100644 index 00000000000..321f038a735 --- /dev/null +++ b/src/tsconfig.json @@ -0,0 +1,14 @@ +// `tsconfig.json` for the editor only +// this config includes additional files (e.g. tests) that +// we don't want to see hooked up to the main build +// it can also add a few more types for that purpose +{ + "compilerOptions": { + "noEmit": true, + "lib": ["es2015", "esnext.asynciterable", "dom"], + "types": ["jest", "node", "./testing/matchers/index.d.ts"] + }, + "extends": "../tsconfig.json", + "include": ["./**/*.ts", "./**/*.tsx"], + "exclude": [] +} diff --git a/src/utilities/common/__tests__/mergeDeep.ts b/src/utilities/common/__tests__/mergeDeep.ts index fbf4ec16eb1..fcdc680e720 100644 --- a/src/utilities/common/__tests__/mergeDeep.ts +++ b/src/utilities/common/__tests__/mergeDeep.ts @@ -146,7 +146,7 @@ describe("mergeDeep", function () { }); it("supports custom reconciler functions", function () { - const merger = new DeepMerger((target, source, key) => { + const merger = new DeepMerger(function (target, source, key) { const targetValue = target[key]; const sourceValue = source[key]; if (Array.isArray(sourceValue)) { diff --git a/src/utilities/common/filterInPlace.ts b/src/utilities/common/filterInPlace.ts deleted file mode 100644 index cafeed316f2..00000000000 --- a/src/utilities/common/filterInPlace.ts +++ /dev/null @@ -1,14 +0,0 @@ -export function filterInPlace( - array: T[], - test: (elem: T) => boolean, - context?: any -): T[] { - let target = 0; - array.forEach(function (elem, i) { - if (test.call(this, elem, i, array)) { - array[target++] = elem; - } - }, context); - array.length = target; - return array; -} diff --git a/src/utilities/common/mergeDeep.ts b/src/utilities/common/mergeDeep.ts index a2171f9f023..451a7a56a20 100644 --- a/src/utilities/common/mergeDeep.ts +++ b/src/utilities/common/mergeDeep.ts @@ -72,7 +72,7 @@ const defaultReconciler: ReconcilerFunction = function ( export class DeepMerger { constructor( - private reconciler: ReconcilerFunction = defaultReconciler + private reconciler: ReconcilerFunction = defaultReconciler as any as ReconcilerFunction ) {} public merge(target: any, source: any, ...context: TContextArgs): any { diff --git a/src/utilities/common/mergeOptions.ts b/src/utilities/common/mergeOptions.ts index 9c945f904e4..fe4eb954bbf 100644 --- a/src/utilities/common/mergeOptions.ts +++ b/src/utilities/common/mergeOptions.ts @@ -10,7 +10,7 @@ import { compact } from "./compact.js"; type OptionsUnion = | WatchQueryOptions | QueryOptions - | MutationOptions; + | MutationOptions; export function mergeOptions< TDefaultOptions extends Partial>, diff --git a/src/utilities/graphql/transform.ts b/src/utilities/graphql/transform.ts index 7ff844ad150..1693ee73fee 100644 --- a/src/utilities/graphql/transform.ts +++ b/src/utilities/graphql/transform.ts @@ -12,7 +12,7 @@ import type { FragmentSpreadNode, VariableDefinitionNode, ASTNode, - ASTVisitor, + ASTVisitFn, InlineFragmentNode, } from "graphql"; import { visit, Kind } from "graphql"; @@ -29,6 +29,12 @@ import type { FragmentMap } from "./fragments.js"; import { createFragmentMap } from "./fragments.js"; import { isArray, isNonEmptyArray } from "../common/arrays.js"; +// https://github.com/graphql/graphql-js/blob/8d7c8fccf5a9846a50785de04abda58a7eb13fc0/src/language/visitor.ts#L20-L23 +interface EnterLeaveVisitor { + readonly enter?: ASTVisitFn; + readonly leave?: ASTVisitFn; +} + export type RemoveNodeConfig = { name?: string; test?: (node: N) => boolean; @@ -208,8 +214,10 @@ export function removeDirectivesFromDocument( // original doc immediately without any modifications. let firstVisitMadeChanges = false; - const fieldOrInlineFragmentVisitor: ASTVisitor = { - enter(node: FieldNode | InlineFragmentNode) { + const fieldOrInlineFragmentVisitor: EnterLeaveVisitor< + FieldNode | InlineFragmentNode + > = { + enter(node) { if (shouldRemoveField(node.directives)) { firstVisitMadeChanges = true; return null; @@ -385,8 +393,10 @@ export function removeDirectivesFromDocument( ) ); - const enterVisitor: ASTVisitor = { - enter(node: FragmentSpreadNode | FragmentDefinitionNode) { + const enterVisitor: EnterLeaveVisitor< + FragmentSpreadNode | FragmentDefinitionNode + > = { + enter(node) { if (fragmentWillBeRemoved(node.name.value)) { return null; } diff --git a/src/utilities/observables/Concast.ts b/src/utilities/observables/Concast.ts index e6df7e19882..c2fbb6fb180 100644 --- a/src/utilities/observables/Concast.ts +++ b/src/utilities/observables/Concast.ts @@ -147,9 +147,9 @@ export class Concast extends Observable { // Any Concast object can be trivially converted to a Promise, without // having to create a new wrapper Observable. This promise provides an // easy way to observe the final state of the Concast. - private resolve: (result?: T | PromiseLike) => void; - private reject: (reason: any) => void; - public readonly promise = new Promise((resolve, reject) => { + private resolve!: (result?: T | PromiseLike) => void; + private reject!: (reason: any) => void; + public readonly promise = new Promise((resolve, reject) => { this.resolve = resolve; this.reject = reject; }); diff --git a/src/utilities/observables/Observable.ts b/src/utilities/observables/Observable.ts index 04fd25cac30..5ee33965f30 100644 --- a/src/utilities/observables/Observable.ts +++ b/src/utilities/observables/Observable.ts @@ -17,6 +17,7 @@ export type { Observer, ObservableSubscription, Subscriber }; const { prototype } = Observable; const fakeObsSymbol = "@@observable" as keyof typeof prototype; if (!prototype[fakeObsSymbol]) { + // @ts-expect-error prototype[fakeObsSymbol] = function () { return this; }; diff --git a/src/utilities/observables/__tests__/Observable.ts b/src/utilities/observables/__tests__/Observable.ts index 47223bc0643..1729e0ae1f3 100644 --- a/src/utilities/observables/__tests__/Observable.ts +++ b/src/utilities/observables/__tests__/Observable.ts @@ -39,8 +39,13 @@ describe("Observable", () => { return constructor as any; } + type ObservableWithSub = Observable & { sub?: Subscriber }; + it("simulating super(sub) with Observable.call(this, sub)", () => { - function SubclassWithSuperCall(sub: Subscriber) { + function SubclassWithSuperCall( + this: ObservableWithSub, + sub: Subscriber + ) { const self = Observable.call(this, sub) || this; self.sub = sub; return self; @@ -49,7 +54,10 @@ describe("Observable", () => { }); it("simulating super(sub) with Observable.apply(this, arguments)", () => { - function SubclassWithSuperApplyArgs(_sub: Subscriber) { + function SubclassWithSuperApplyArgs( + this: ObservableWithSub, + _sub: Subscriber + ) { const self = Observable.apply(this, arguments) || this; self.sub = _sub; return self; @@ -58,7 +66,10 @@ describe("Observable", () => { }); it("simulating super(sub) with Observable.apply(this, [sub])", () => { - function SubclassWithSuperApplyArray(...args: [Subscriber]) { + function SubclassWithSuperApplyArray( + this: ObservableWithSub, + ...args: [Subscriber] + ) { const self = Observable.apply(this, args) || this; self.sub = args[0]; return self; diff --git a/src/utilities/observables/__tests__/asyncMap.ts b/src/utilities/observables/__tests__/asyncMap.ts index e54b2140e66..491686d4f2c 100644 --- a/src/utilities/observables/__tests__/asyncMap.ts +++ b/src/utilities/observables/__tests__/asyncMap.ts @@ -25,6 +25,7 @@ function rejectExceptions( ) { return function () { try { + // @ts-expect-error return fn.apply(this, arguments); } catch (error) { reject(error); diff --git a/src/utilities/policies/pagination.ts b/src/utilities/policies/pagination.ts index 4dd000e32da..acb4c5af6f2 100644 --- a/src/utilities/policies/pagination.ts +++ b/src/utilities/policies/pagination.ts @@ -42,7 +42,7 @@ export function offsetLimitPagination( // to receive any arguments, so you might prefer to throw an // exception here, instead of recovering by appending incoming // onto the existing array. - merged.push.apply(merged, incoming); + merged.push(...incoming); } } diff --git a/src/utilities/types/TODO.ts b/src/utilities/types/TODO.ts new file mode 100644 index 00000000000..a5d637cc22c --- /dev/null +++ b/src/utilities/types/TODO.ts @@ -0,0 +1,2 @@ +/** @internal */ +export type TODO = any; diff --git a/tsconfig.json b/tsconfig.json index b03c9fb7fcb..a872c60ff05 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,7 +17,8 @@ "experimentalDecorators": true, "outDir": "./dist", "lib": ["es2015", "esnext.asynciterable", "dom"], - "jsx": "react" + "jsx": "react", + "strict": true }, "include": ["src/**/*.ts", "src/**/*.tsx"], "exclude": ["src/**/__tests__/**/*"] diff --git a/tsconfig.tests.json b/tsconfig.tests.json index d6bb25bd3fd..0908742da0d 100644 --- a/tsconfig.tests.json +++ b/tsconfig.tests.json @@ -1,5 +1,3 @@ { - "extends": "./tsconfig.json", - "include": ["src/**/__tests__/**/*.ts", "src/**/__tests__/**/*.tsx"], - "exclude": [] + "extends": "./src/tsconfig.json" } From b0bf0d80ed0b1a2c3014b35286813915605c0ec7 Mon Sep 17 00:00:00 2001 From: Lenz Weber-Tronic Date: Tue, 14 Nov 2023 14:43:50 +0100 Subject: [PATCH 16/16] fix up type in 3.9 branch after merge (#11362) --- .api-reports/api-report-testing.md | 4 ++-- .api-reports/api-report-testing_core.md | 2 +- src/testing/core/mocking/mockLink.ts | 2 +- src/testing/react/MockedProvider.tsx | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.api-reports/api-report-testing.md b/.api-reports/api-report-testing.md index 7367367ab39..c65ea55027e 100644 --- a/.api-reports/api-report-testing.md +++ b/.api-reports/api-report-testing.md @@ -880,7 +880,7 @@ export interface MockedProviderProps { // (undocumented) link?: ApolloLink; // (undocumented) - mocks?: ReadonlyArray; + mocks?: ReadonlyArray>; // (undocumented) resolvers?: Resolvers; // (undocumented) @@ -925,7 +925,7 @@ interface MockedSubscriptionResult { // @public (undocumented) export class MockLink extends ApolloLink { - constructor(mockedResponses: ReadonlyArray, addTypename?: Boolean, options?: MockLinkOptions); + constructor(mockedResponses: ReadonlyArray>, addTypename?: Boolean, options?: MockLinkOptions); // (undocumented) addMockedResponse(mockedResponse: MockedResponse): void; // (undocumented) diff --git a/.api-reports/api-report-testing_core.md b/.api-reports/api-report-testing_core.md index a8494f44a28..5aaef2383c6 100644 --- a/.api-reports/api-report-testing_core.md +++ b/.api-reports/api-report-testing_core.md @@ -879,7 +879,7 @@ interface MockedSubscriptionResult { // @public (undocumented) export class MockLink extends ApolloLink { - constructor(mockedResponses: ReadonlyArray, addTypename?: Boolean, options?: MockLinkOptions); + constructor(mockedResponses: ReadonlyArray>, addTypename?: Boolean, options?: MockLinkOptions); // (undocumented) addMockedResponse(mockedResponse: MockedResponse): void; // (undocumented) diff --git a/src/testing/core/mocking/mockLink.ts b/src/testing/core/mocking/mockLink.ts index 7c48201eb73..723a78d5c4c 100644 --- a/src/testing/core/mocking/mockLink.ts +++ b/src/testing/core/mocking/mockLink.ts @@ -57,7 +57,7 @@ export class MockLink extends ApolloLink { private mockedResponsesByKey: { [key: string]: MockedResponse[] } = {}; constructor( - mockedResponses: ReadonlyArray, + mockedResponses: ReadonlyArray>, addTypename: Boolean = true, options: MockLinkOptions = Object.create(null) ) { diff --git a/src/testing/react/MockedProvider.tsx b/src/testing/react/MockedProvider.tsx index b7afb9d416c..bd70d34ccd1 100644 --- a/src/testing/react/MockedProvider.tsx +++ b/src/testing/react/MockedProvider.tsx @@ -11,7 +11,7 @@ import type { Resolvers } from "../../core/index.js"; import type { ApolloCache } from "../../cache/index.js"; export interface MockedProviderProps { - mocks?: ReadonlyArray; + mocks?: ReadonlyArray>; addTypename?: boolean; defaultOptions?: DefaultOptions; cache?: ApolloCache;