From e7f1848c4ed74090439938fe50db4601fb349f5b Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Fri, 2 Sep 2022 16:47:27 +0200 Subject: [PATCH 01/64] Initial draft promoting the plugin analytics api Signed-off-by: Eric Peterson Co-authored-by: Emma White <251374+ewhite1997@users.noreply.github.com> --- .../2022-09-08-fyi-plugin-analytics-api.md | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 microsite/blog/2022-09-08-fyi-plugin-analytics-api.md diff --git a/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md b/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md new file mode 100644 index 0000000000..24304c0d10 --- /dev/null +++ b/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md @@ -0,0 +1,88 @@ +--- +# prettier-ignore +title: FYI 📣 The Plugin Analytics API +author: Eric Peterson, Spotify +authorURL: https://github.com/iamEAP +authorImageURL: https://avatars.githubusercontent.com/u/3496491?v=4 +--- + +**TL;DR** If you didn't know, now you know: the Backstage plugin analytics API is here to help you understand how developers in your organization are using Backstage. + +## What is the plugin analytics API? + +The plugin analytics API is a [utility api](https://backstage.io/docs/api/utility-apis) available by default in every Backstage instance, intended to bridge the gap between the needs of Backstage integrators and plugin developers. While Backstage integrators want visibility into the plugins they’ve installed, they lack the power to instrument those plugins. And although plugin developers have the power to instrument plugins, they can’t do so without a single, vendor-agnostic way to track events. Enter: the plugin analytics API. + +While “analytics” as a concept can be broad, the goal of the API is narrowly focused: empower those deploying Backstage to understand usage of their instance. The plugin analytics API isn’t designed to solve for observability use-cases like tracing, logging, performance monitoring, error metrics, or alerting. Rather, the API is designed to capture and quantify real user interactions, which can form the basis for metrics like daily active users, top plugins, and more. + +## Start collecting data + +Backstage core (and a few other plugins) are already instrumented with [key events](https://backstage.io/docs/plugins/analytics#key-events) that are ready for you to start collecting and analyzing. + +The simplest way to get started is to use one of the [supported analytics tools](https://backstage.io/docs/plugins/analytics#supported-analytics-tools) and install its provided API implementation like you would any other utility API. For example: + +```tsx +// packages/app/src/apis.ts +import { + analyticsApiRef, + configApiRef, + identityApiRef, +} from '@backstage/core-plugin-api'; +import { GoogleAnalytics } from '@backstage/plugin-analytics-module-ga'; + +export const apis: AnyApiFactory[] = [ + // Instantiate and register the GA Analytics API Implementation. + createApiFactory({ + api: analyticsApiRef, + deps: { configApi: configApiRef, identityApi: identityApiRef }, + factory: ({ configApi, identityApi }) => + GoogleAnalytics.fromConfig(configApi, { + identityApi, + }), + }), +]; +``` + +If your chosen analytics tool doesn’t have an integration yet, you can write a custom integration by [following these instructions](https://backstage.io/docs/plugins/analytics#writing-integrations). (And if you’re integrating with a publicly available analytics service, as opposed to a custom in-house system, why not [consider contributing it back to the community](https://backstage.io/docs/plugins/create-a-plugin)?) + +## Instrument plugins + +While some key events are already instrumented, there may be important actions in open source plugins that are un-instrumented, not to mention in your custom, InnerSource plugins. Luckily, the plugin analytics API can be leveraged by open source and InnerSource plugins all the same. + +To capture an event, invoke the `useAnalytics()` react hook and call the function it returns when the user performs the action you wish to track (e.g. merging a pull request): + +```tsx +import { useAnalytics } from '@backstage/core-plugin-api'; + +const analytics = useAnalytics(); +analytics.captureEvent('merge', pullRequestName); +``` + +Don’t worry about having to stuff additional levels of detail into just the event action and subject, you can provide extra dimensional data on the `attributes` property, as well as a primary metric on the `value` property, like this: + +```tsx +analytics.captureEvent('merge', pullRequestName, { + value: pullRequestAgeInMinutes, + attributes: { + org: orgName, + repo: repoName, + }, +}); +``` + +In situations where your plugin is tracking multiple events and you want all of those events to share common dimensional data, you can use the ``. Every event captured in child components underneath this context automatically inherits the values you set: + +```tsx +import { AnalyticsContext } from '@backstage/core-plugin-api'; + + + {children} +` to automatically decorate every event with a corresponding plugin ID and an extension name in order to facilitate plugin-level analysis. + +While the above should be enough to get you going, don’t forget to check out [the complete guide to event capture](https://backstage.io/docs/plugins/analytics#capturing-events), which covers event naming considerations, testing, and more. + +## Get involved + +If you didn’t know, now you know! If you’re passionate about data and want to help push the Backstage analytics ecosystem forward, join us in the [#analytics channel on discord](https://discord.com/channels/687207715902193673/1007303347914690610), contribute [integration ideas](https://github.com/backstage/backstage/issues/new?assignees=&labels=plugin&template=plugin_template.md&title=%5BAnalytics+Module%5D+THE+ANALYTICS+TOOL+TO+INTEGRATE), or [suggest a new analytics event](https://github.com/backstage/backstage/issues/new?assignees=&labels=enhancement&template=feature_template.md&title=[Analytics%20Event]:%20THE+EVENT+TO+CAPTURE). From f0510a20b5e25fa9f693f8ba9138c778f56abd68 Mon Sep 17 00:00:00 2001 From: mufaddal motiwala Date: Mon, 5 Sep 2022 01:16:22 +0530 Subject: [PATCH 02/64] add Dismissable Error Banner Signed-off-by: mufaddal motiwala --- .changeset/new-taxis-vanish.md | 5 +++ .../src/components/TaskPage/TaskErrors.tsx | 35 +++++++++++++++++++ .../src/components/TaskPage/TaskPage.tsx | 2 ++ .../src/components/hooks/useEventStream.ts | 3 ++ 4 files changed, 45 insertions(+) create mode 100644 .changeset/new-taxis-vanish.md create mode 100644 plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx diff --git a/.changeset/new-taxis-vanish.md b/.changeset/new-taxis-vanish.md new file mode 100644 index 0000000000..c461d06824 --- /dev/null +++ b/.changeset/new-taxis-vanish.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Addition of a Dismissable Error Banner in Scaffolder page diff --git a/plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx b/plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx new file mode 100644 index 0000000000..3d82bfc5a3 --- /dev/null +++ b/plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx @@ -0,0 +1,35 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Box } from '@material-ui/core'; +import React from 'react'; +import { DismissableBanner } from '@backstage/core-components'; +import { TaskStream } from '../hooks/useEventStream'; + +type TaskPageLinksProps = { + taskStream: TaskStream; +}; + +export const TaskErrors = ({ taskStream }: TaskPageLinksProps) => { + return taskStream.error ? ( + + + + ) : null; +}; diff --git a/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx b/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx index 3dd54e1d09..4fa5968216 100644 --- a/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx +++ b/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx @@ -54,6 +54,7 @@ import { } from '../../routes'; import { ScaffolderTaskStatus, ScaffolderTaskOutput } from '../../types'; import { useTaskEventStream } from '../hooks/useEventStream'; +import { TaskErrors } from './TaskErrors'; import { TaskPageLinks } from './TaskPageLinks'; // typings are wrong for this library, so fallback to not parsing types. @@ -356,6 +357,7 @@ export const TaskPage = ({ loadingText }: TaskPageProps) => { {!currentStepId && }
+
diff --git a/plugins/scaffolder/src/components/hooks/useEventStream.ts b/plugins/scaffolder/src/components/hooks/useEventStream.ts index 8ff9a30d0b..bb24c0d612 100644 --- a/plugins/scaffolder/src/components/hooks/useEventStream.ts +++ b/plugins/scaffolder/src/components/hooks/useEventStream.ts @@ -49,6 +49,7 @@ type ReducerLogEntry = { status?: ScaffolderTaskStatus; message: string; output?: ScaffolderTaskOutput; + error?: Error; }; }; @@ -114,6 +115,8 @@ function reducer(draft: TaskStream, action: ReducerAction) { case 'COMPLETED': { draft.completed = true; draft.output = action.data.body.output; + draft.error = action.data.body.error; + return; } From d9b7dd9032b6e46ad1cf70129313e38e7359729a Mon Sep 17 00:00:00 2001 From: mufaddal motiwala Date: Mon, 5 Sep 2022 01:35:31 +0530 Subject: [PATCH 03/64] changeset fix Signed-off-by: mufaddal motiwala --- .changeset/new-taxis-vanish.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/new-taxis-vanish.md b/.changeset/new-taxis-vanish.md index c461d06824..4d0c6d64b9 100644 --- a/.changeset/new-taxis-vanish.md +++ b/.changeset/new-taxis-vanish.md @@ -2,4 +2,4 @@ '@backstage/plugin-scaffolder': patch --- -Addition of a Dismissable Error Banner in Scaffolder page +Addition of a dismissible Error Banner in Scaffolder page From 5f388ca50154c43d1270dcc7d4ed4648fb37a0bc Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 2 Sep 2022 15:39:36 +0200 Subject: [PATCH 04/64] backend-plugin-api: built-in options in service factories MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Patrik Oldsberg --- .../src/services/system/types.test.ts | 89 +++++++++++++++++++ .../src/services/system/types.ts | 18 +++- 2 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 packages/backend-plugin-api/src/services/system/types.test.ts diff --git a/packages/backend-plugin-api/src/services/system/types.test.ts b/packages/backend-plugin-api/src/services/system/types.test.ts new file mode 100644 index 0000000000..29512d3a58 --- /dev/null +++ b/packages/backend-plugin-api/src/services/system/types.test.ts @@ -0,0 +1,89 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createServiceFactory, createServiceRef } from './types'; + +describe('createServiceFactory', () => { + it('should create a meta factory with no options', () => { + const ref = createServiceRef({ id: 'x' }); + const metaFactory = createServiceFactory({ + service: ref, + deps: {}, + async factory(_deps) { + return async () => 'x'; + }, + }); + expect(metaFactory).toEqual(expect.any(Function)); + expect(metaFactory().service).toBe(ref); + + // @ts-expect-error + metaFactory('string'); + // @ts-expect-error + metaFactory({}); + // @ts-expect-error + metaFactory({ x: 1 }); + // @ts-expect-error + metaFactory(null); + metaFactory(undefined); + metaFactory(); + }); + + it('should create a meta factory with optional options', () => { + const ref = createServiceRef({ id: 'x' }); + const metaFactory = createServiceFactory({ + service: ref, + deps: {}, + async factory(_deps, _opts?: { x: number }) { + return async () => 'x'; + }, + }); + expect(metaFactory).toEqual(expect.any(Function)); + + // @ts-expect-error + metaFactory('string'); + // @ts-expect-error + metaFactory({}); + metaFactory({ x: 1 }); + // @ts-expect-error + metaFactory(null); + metaFactory(undefined); + metaFactory(); + }); + + it('should create a meta factory with required options', () => { + const ref = createServiceRef({ id: 'x' }); + const metaFactory = createServiceFactory({ + service: ref, + deps: {}, + async factory(_deps, _opts: { x: number }) { + return async () => 'x'; + }, + }); + expect(metaFactory).toEqual(expect.any(Function)); + + // @ts-expect-error + metaFactory('string'); + // @ts-expect-error + metaFactory({}); + metaFactory({ x: 1 }); + // @ts-expect-error + metaFactory(null); + // @ts-expect-error + metaFactory(undefined); + // @ts-expect-error + metaFactory(); + }); +}); diff --git a/packages/backend-plugin-api/src/services/system/types.ts b/packages/backend-plugin-api/src/services/system/types.ts index d622b3917f..4737c6a0e8 100644 --- a/packages/backend-plugin-api/src/services/system/types.ts +++ b/packages/backend-plugin-api/src/services/system/types.ts @@ -90,10 +90,22 @@ export function createServiceFactory< TService, TImpl extends TService, TDeps extends { [name in string]: unknown }, + TOpts extends { [name in string]: unknown } | undefined = undefined, >(factory: { service: ServiceRef; deps: TypesToServiceRef; - factory(deps: DepsToDepFactories): Promise>; -}): ServiceFactory { - return factory as ServiceFactory; + factory( + deps: DepsToDepFactories, + options: TOpts, + ): Promise>; +}): undefined extends TOpts + ? (options?: TOpts) => ServiceFactory + : (options: TOpts) => ServiceFactory { + return (options?: TOpts) => ({ + service: factory.service, + deps: factory.deps, + factory(deps: DepsToDepFactories) { + return factory.factory(deps, options!); + }, + }); } From 5263e9449d0c47f49f903ff4224fab40c0fbbae0 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 2 Sep 2022 16:27:29 +0200 Subject: [PATCH 05/64] backend-next: widen accepted ServiceFactory types to include meta method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Patrik Oldsberg --- .../src/wiring/ServiceRegistry.ts | 26 ++++++++++++++----- packages/backend-app-api/src/wiring/types.ts | 6 +++-- .../backend-defaults/src/CreateBackend.ts | 14 ++-------- .../src/services/system/types.ts | 8 ++++-- .../src/next/wiring/TestBackend.ts | 1 + 5 files changed, 33 insertions(+), 22 deletions(-) diff --git a/packages/backend-app-api/src/wiring/ServiceRegistry.ts b/packages/backend-app-api/src/wiring/ServiceRegistry.ts index 45b82aac56..e0509aecde 100644 --- a/packages/backend-app-api/src/wiring/ServiceRegistry.ts +++ b/packages/backend-app-api/src/wiring/ServiceRegistry.ts @@ -26,7 +26,9 @@ import { stringifyError } from '@backstage/errors'; * @internal */ export type InternalServiceRef = ServiceRef & { - __defaultFactory?: (service: ServiceRef) => Promise>; + __defaultFactory?: ( + service: ServiceRef, + ) => Promise | (() => ServiceFactory)>; }; export class ServiceRegistry { @@ -40,8 +42,18 @@ export class ServiceRegistry { } >; - constructor(factories: ServiceFactory[]) { - this.#providedFactories = new Map(factories.map(f => [f.service.id, f])); + constructor( + factories: Array | (() => ServiceFactory)>, + ) { + this.#providedFactories = new Map( + factories.map(f => { + if (typeof f === 'function') { + const cf = f(); + return [cf.service.id, cf]; + } + return [f.service.id, f]; + }), + ); this.#loadedDefaultFactories = new Map(); this.#implementations = new Map(); } @@ -57,9 +69,11 @@ export class ServiceRegistry { if (!factory) { let loadedFactory = this.#loadedDefaultFactories.get(defaultFactory!); if (!loadedFactory) { - loadedFactory = Promise.resolve().then( - () => defaultFactory!(ref) as Promise, - ); + loadedFactory = Promise.resolve() + .then(() => defaultFactory!(ref)) + .then(f => + typeof f === 'function' ? f() : f, + ) as Promise; this.#loadedDefaultFactories.set(defaultFactory!, loadedFactory); } // NOTE: This await is safe as long as #providedFactories is not mutated. diff --git a/packages/backend-app-api/src/wiring/types.ts b/packages/backend-app-api/src/wiring/types.ts index 55009edbdf..febc6830c7 100644 --- a/packages/backend-app-api/src/wiring/types.ts +++ b/packages/backend-app-api/src/wiring/types.ts @@ -43,7 +43,7 @@ export interface BackendRegisterInit { * @public */ export interface CreateSpecializedBackendOptions { - services: ServiceFactory[]; + services: (ServiceFactory | (() => ServiceFactory))[]; } export type ServiceHolder = { @@ -56,7 +56,9 @@ export type ServiceHolder = { export function createSpecializedBackend( options: CreateSpecializedBackendOptions, ): Backend { - return new BackstageBackend(options.services); + return new BackstageBackend( + options.services.map(s => (typeof s === 'function' ? s() : s)), + ); } /** diff --git a/packages/backend-defaults/src/CreateBackend.ts b/packages/backend-defaults/src/CreateBackend.ts index 819a77ea11..5130d6733b 100644 --- a/packages/backend-defaults/src/CreateBackend.ts +++ b/packages/backend-defaults/src/CreateBackend.ts @@ -47,24 +47,14 @@ export const defaultServiceFactories = [ * @public */ export interface CreateBackendOptions { - services?: ServiceFactory[]; + services?: (ServiceFactory | (() => ServiceFactory))[]; } /** * @public */ export function createBackend(options?: CreateBackendOptions): Backend { - const services = new Map( - defaultServiceFactories.map(sf => [sf.service.id, sf as ServiceFactory]), - ); - - if (options?.services) { - for (const sf of options.services) { - services.set(sf.service.id, sf); - } - } - return createSpecializedBackend({ - services: Array.from(services.values()), + services: [...defaultServiceFactories, ...(options?.services ?? [])], }); } diff --git a/packages/backend-plugin-api/src/services/system/types.ts b/packages/backend-plugin-api/src/services/system/types.ts index 4737c6a0e8..a19c17bb9c 100644 --- a/packages/backend-plugin-api/src/services/system/types.ts +++ b/packages/backend-plugin-api/src/services/system/types.ts @@ -41,7 +41,9 @@ export type InternalServiceRef = ServiceRef & { * The default factory that will be used to create service * instances if no other factory is provided. */ - __defaultFactory?: (service: ServiceRef) => Promise>; + __defaultFactory?: ( + service: ServiceRef, + ) => Promise | (() => ServiceFactory)>; }; /** @public */ @@ -67,7 +69,9 @@ export type ServiceFactory = { */ export function createServiceRef(options: { id: string; - defaultFactory?: (service: ServiceRef) => Promise>; + defaultFactory?: ( + service: ServiceRef, + ) => Promise | (() => ServiceFactory)>; }): ServiceRef { const { id, defaultFactory } = options; return { diff --git a/packages/backend-test-utils/src/next/wiring/TestBackend.ts b/packages/backend-test-utils/src/next/wiring/TestBackend.ts index 98e979793e..f93b34cdd8 100644 --- a/packages/backend-test-utils/src/next/wiring/TestBackend.ts +++ b/packages/backend-test-utils/src/next/wiring/TestBackend.ts @@ -32,6 +32,7 @@ export interface TestBackendOptions< ...{ [index in keyof TServices]: | ServiceFactory + | (() => ServiceFactory) | [ServiceRef, Partial]; }, ]; From d2c6465a43337af3322af95f04aecc2dc576e9e5 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 2 Sep 2022 16:29:37 +0200 Subject: [PATCH 06/64] update API reports Signed-off-by: Patrik Oldsberg --- packages/backend-app-api/api-report.md | 40 +++++++++++++++-------- packages/backend-defaults/api-report.md | 2 +- packages/backend-plugin-api/api-report.md | 18 ++++++++-- packages/backend-test-utils/api-report.md | 1 + 4 files changed, 44 insertions(+), 17 deletions(-) diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/api-report.md index 0f8806870d..ea149a44f2 100644 --- a/packages/backend-app-api/api-report.md +++ b/packages/backend-app-api/api-report.md @@ -28,10 +28,12 @@ export interface Backend { } // @public (undocumented) -export const cacheFactory: ServiceFactory; +export const cacheFactory: ( + options?: undefined, +) => ServiceFactory; // @public (undocumented) -export const configFactory: ServiceFactory; +export const configFactory: (options?: undefined) => ServiceFactory; // @public (undocumented) export function createSpecializedBackend( @@ -41,28 +43,36 @@ export function createSpecializedBackend( // @public (undocumented) export interface CreateSpecializedBackendOptions { // (undocumented) - services: ServiceFactory[]; + services: (ServiceFactory | (() => ServiceFactory))[]; } // @public (undocumented) -export const databaseFactory: ServiceFactory; +export const databaseFactory: ( + options?: undefined, +) => ServiceFactory; // @public (undocumented) -export const discoveryFactory: ServiceFactory; +export const discoveryFactory: ( + options?: undefined, +) => ServiceFactory; // @public (undocumented) -export const httpRouterFactory: ServiceFactory; +export const httpRouterFactory: ( + options?: undefined, +) => ServiceFactory; // @public (undocumented) -export const loggerFactory: ServiceFactory; +export const loggerFactory: (options?: undefined) => ServiceFactory; // @public (undocumented) -export const permissionsFactory: ServiceFactory< - PermissionAuthorizer | PermissionEvaluator ->; +export const permissionsFactory: ( + options?: undefined, +) => ServiceFactory; // @public (undocumented) -export const schedulerFactory: ServiceFactory; +export const schedulerFactory: ( + options?: undefined, +) => ServiceFactory; // @public (undocumented) export type ServiceOrExtensionPoint = @@ -70,8 +80,12 @@ export type ServiceOrExtensionPoint = | ServiceRef; // @public (undocumented) -export const tokenManagerFactory: ServiceFactory; +export const tokenManagerFactory: ( + options?: undefined, +) => ServiceFactory; // @public (undocumented) -export const urlReaderFactory: ServiceFactory; +export const urlReaderFactory: ( + options?: undefined, +) => ServiceFactory; ``` diff --git a/packages/backend-defaults/api-report.md b/packages/backend-defaults/api-report.md index b5f1e154bb..050ebde759 100644 --- a/packages/backend-defaults/api-report.md +++ b/packages/backend-defaults/api-report.md @@ -12,6 +12,6 @@ export function createBackend(options?: CreateBackendOptions): Backend; // @public (undocumented) export interface CreateBackendOptions { // (undocumented) - services?: ServiceFactory[]; + services?: (ServiceFactory | (() => ServiceFactory))[]; } ``` diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index 5ea7f52c4b..30e58237af 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -109,16 +109,28 @@ export function createServiceFactory< TDeps extends { [name in string]: unknown; }, + TOpts extends + | { + [name in string]: unknown; + } + | undefined = undefined, >(factory: { service: ServiceRef; deps: TypesToServiceRef; - factory(deps: DepsToDepFactories): Promise>; -}): ServiceFactory; + factory( + deps: DepsToDepFactories, + options: TOpts, + ): Promise>; +}): undefined extends TOpts + ? (options?: TOpts) => ServiceFactory + : (options: TOpts) => ServiceFactory; // @public (undocumented) export function createServiceRef(options: { id: string; - defaultFactory?: (service: ServiceRef) => Promise>; + defaultFactory?: ( + service: ServiceRef, + ) => Promise | (() => ServiceFactory)>; }): ServiceRef; // @public (undocumented) diff --git a/packages/backend-test-utils/api-report.md b/packages/backend-test-utils/api-report.md index c0f6a43321..2fe4ed31d3 100644 --- a/packages/backend-test-utils/api-report.md +++ b/packages/backend-test-utils/api-report.md @@ -46,6 +46,7 @@ export interface TestBackendOptions< ...{ [index in keyof TServices]: | ServiceFactory + | (() => ServiceFactory) | [ServiceRef, Partial]; }, ]; From 854ba373576faa4367c4d6ab091cc813c151f5db Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 5 Sep 2022 14:13:30 +0200 Subject: [PATCH 07/64] changesets: added changeset createServiceFactory update Signed-off-by: Patrik Oldsberg --- .changeset/metal-weeks-kiss.md | 7 +++++++ .changeset/short-mice-explode.md | 5 +++++ 2 files changed, 12 insertions(+) create mode 100644 .changeset/metal-weeks-kiss.md create mode 100644 .changeset/short-mice-explode.md diff --git a/.changeset/metal-weeks-kiss.md b/.changeset/metal-weeks-kiss.md new file mode 100644 index 0000000000..90e453dd5c --- /dev/null +++ b/.changeset/metal-weeks-kiss.md @@ -0,0 +1,7 @@ +--- +'@backstage/backend-app-api': patch +'@backstage/backend-defaults': patch +'@backstage/backend-test-utils': patch +--- + +Updated to support new `ServiceFactory` formats. diff --git a/.changeset/short-mice-explode.md b/.changeset/short-mice-explode.md new file mode 100644 index 0000000000..42ebfa9f5c --- /dev/null +++ b/.changeset/short-mice-explode.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-plugin-api': patch +--- + +The `createServiceFactory` method has been updated to return a higher-order factory that can accept options. From 17a4968d408b44f857a1eedb0fe2c9b444e3b91b Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Mon, 5 Sep 2022 21:56:28 +0100 Subject: [PATCH 08/64] Avoid loading github installation if owner is not in allowedInstallationOwners Signed-off-by: Alex Crome --- .../src/github/SingleInstanceGithubCredentialsProvider.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts index 2fd2e7f7dc..8b87d985a5 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts @@ -93,12 +93,13 @@ class GithubAppManager { owner: string, repo?: string, ): Promise<{ accessToken: string | undefined }> { - const { installationId, suspended } = await this.getInstallationData(owner); if (this.allowedInstallationOwners) { if (!this.allowedInstallationOwners?.includes(owner)) { return { accessToken: undefined }; // An empty token allows anonymous access to public repos } } + + const { installationId, suspended } = await this.getInstallationData(owner); if (suspended) { throw new Error(`The GitHub application for ${owner} is suspended`); } From d0e8705afd554e953e011696aea75c39c9d3febf Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Mon, 5 Sep 2022 22:05:29 +0100 Subject: [PATCH 09/64] Moved Github Installation loading to be within cached data Signed-off-by: Alex Crome --- .../SingleInstanceGithubCredentialsProvider.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts index 8b87d985a5..5e98ddd3b1 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts @@ -99,19 +99,22 @@ class GithubAppManager { } } - const { installationId, suspended } = await this.getInstallationData(owner); - if (suspended) { - throw new Error(`The GitHub application for ${owner} is suspended`); - } - const cacheKey = repo ? `${owner}/${repo}` : owner; // Go and grab an access token for the app scoped to a repository if provided, if not use the organisation installation. return this.cache.getOrCreateToken(cacheKey, async () => { + const { installationId, suspended } = await this.getInstallationData( + owner, + ); + if (suspended) { + throw new Error(`The GitHub application for ${owner} is suspended`); + } + const result = await this.appClient.apps.createInstallationAccessToken({ installation_id: installationId, headers: HEADERS, }); + if (repo && result.data.repository_selection === 'selected') { const installationClient = new Octokit({ baseUrl: this.baseUrl, From d57e5f182cd983f4f1007993fa4a13c705072449 Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Mon, 5 Sep 2022 23:20:18 +0100 Subject: [PATCH 10/64] Add initial test around cache Signed-off-by: Alex Crome --- ...eInstanceGithubCredentialsProvider.test.ts | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts index 1dcc45c1ef..3d58ffbb61 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts @@ -400,4 +400,36 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { }), ).resolves.not.toThrow(); }); + + it('should cache access token', async () => { + octokit.apps.listInstallations.mockResolvedValueOnce({ + headers: { + etag: '123', + }, + data: [ + { + id: 1, + repository_selection: 'all', + account: { + login: 'backstage', + }, + }, + ], + } as RestEndpointMethodTypes['apps']['listInstallations']['response']); + + octokit.apps.createInstallationAccessToken.mockResolvedValueOnce({ + data: { + expires_at: DateTime.local().plus({ hours: 1 }).toString(), + token: 'secret_token', + }, + } as RestEndpointMethodTypes['apps']['createInstallationAccessToken']['response']); + + for (let i = 0; i < 2; i++) { + const { token, headers } = await github.getCredentials({ + url: 'https://github.com/backstage', + }); + expect(headers).toEqual({ Authorization: 'Bearer secret_token' }); + expect(token).toEqual('secret_token'); + } + }); }); From f70d22e3b75488becc0af9d8561e71d24eed681e Mon Sep 17 00:00:00 2001 From: Simone Corsi Date: Mon, 5 Sep 2022 18:28:07 +0200 Subject: [PATCH 11/64] docs: adds backstage-plugin-ldap-auth Signed-off-by: Simone Corsi --- microsite/data/plugins/backstage-plugin-ldap-auth.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 microsite/data/plugins/backstage-plugin-ldap-auth.yml diff --git a/microsite/data/plugins/backstage-plugin-ldap-auth.yml b/microsite/data/plugins/backstage-plugin-ldap-auth.yml new file mode 100644 index 0000000000..ca91b9bd30 --- /dev/null +++ b/microsite/data/plugins/backstage-plugin-ldap-auth.yml @@ -0,0 +1,9 @@ +--- +title: Backstage Plugin LDAP Auth +author: ImmobiliareLabs +authorUrl: https://github.com/immobiliare +category: Authentication +description: Backstage plugin to authenticate users to an external LDAP server +documentation: https://github.com/immobiliare/backstage-plugin-ldap-auth/blob/main/README.md +iconUrl: https://avatars.githubusercontent.com/u/10090828 +npmPackageName: '@immobiliarelabs/backstage-plugin-ldap-auth' From 11904b7616a4cf5261b38271d206ccd5f1f4ef66 Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Tue, 6 Sep 2022 09:26:28 +0100 Subject: [PATCH 12/64] Share access token between repos in the same app Signed-off-by: Alex Crome --- ...eInstanceGithubCredentialsProvider.test.ts | 29 ++++---- ...SingleInstanceGithubCredentialsProvider.ts | 66 ++++++++++++------- 2 files changed, 57 insertions(+), 38 deletions(-) diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts index 3d58ffbb61..b48103eea1 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts @@ -57,6 +57,7 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { token: 'hardcoded_token', }); }); + it('create repository specific tokens', async () => { octokit.apps.listInstallations.mockResolvedValue({ headers: { @@ -66,11 +67,6 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { { id: 1, repository_selection: 'selected', - account: null, - }, - { - id: 2, - repository_selection: 'selected', account: { login: 'backstage', }, @@ -195,9 +191,14 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { data: { expires_at: DateTime.local().plus({ hours: 1 }).toString(), token: 'secret_token', + repository_selection: 'selected', }, } as RestEndpointMethodTypes['apps']['createInstallationAccessToken']['response']); + octokit.apps.listReposAccessibleToInstallation.mockReturnValue({ + data: [{ name: 'some-repo' }], + } as unknown as RestEndpointMethodTypes['apps']['listReposAccessibleToInstallation']['response']); + const { token, headers } = await github.getCredentials({ url: 'https://github.com/backstage', }); @@ -402,7 +403,7 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { }); it('should cache access token', async () => { - octokit.apps.listInstallations.mockResolvedValueOnce({ + octokit.apps.listInstallations.mockReturnValue({ headers: { etag: '123', }, @@ -417,19 +418,19 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { ], } as RestEndpointMethodTypes['apps']['listInstallations']['response']); - octokit.apps.createInstallationAccessToken.mockResolvedValueOnce({ + octokit.apps.createInstallationAccessToken.mockReturnValue({ data: { expires_at: DateTime.local().plus({ hours: 1 }).toString(), token: 'secret_token', }, } as RestEndpointMethodTypes['apps']['createInstallationAccessToken']['response']); - for (let i = 0; i < 2; i++) { - const { token, headers } = await github.getCredentials({ - url: 'https://github.com/backstage', - }); - expect(headers).toEqual({ Authorization: 'Bearer secret_token' }); - expect(token).toEqual('secret_token'); - } + await github.getCredentials({ url: 'https://github.com/backstage' }); + await github.getCredentials({ url: 'https://github.com/backstage' }); + + expect(octokit.apps.listInstallations.mock.calls.length).toBe(1); + expect(octokit.apps.createInstallationAccessToken.mock.calls.length).toBe( + 1, + ); }); }); diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts index 5e98ddd3b1..a502590a17 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts @@ -30,29 +30,52 @@ type InstallationData = { suspended: boolean; }; +type InstallationTokenData = { + token: string; + expiresAt: DateTime; + repositories?: String[]; +}; + class Cache { - private readonly tokenCache = new Map< - string, - { token: string; expiresAt: DateTime } - >(); + private readonly tokenCache = new Map(); async getOrCreateToken( - key: string, - supplier: () => Promise<{ token: string; expiresAt: DateTime }>, + owner: string, + repo: string | undefined, + supplier: () => Promise, ): Promise<{ accessToken: string }> { - const item = this.tokenCache.get(key); - if (item && this.isNotExpired(item.expiresAt)) { - return { accessToken: item.token }; + let ownerData = this.tokenCache.get(owner); + + if (!ownerData || !this.isNotExpired(ownerData.expiresAt)) { + ownerData = await supplier(); + this.tokenCache.set(owner, ownerData); } - const result = await supplier(); - this.tokenCache.set(key, result); - return { accessToken: result.token }; + if (!this.appliesToRepo(ownerData, repo)) { + throw new Error( + `The Backstage GitHub application used in the ${owner} organization does not have access to a repository with the name ${repo}`, + ); + } + + return { accessToken: ownerData.token }; } // consider timestamps older than 50 minutes to be expired. private isNotExpired = (date: DateTime) => date.diff(DateTime.local(), 'minutes').minutes > 50; + + private appliesToRepo(tokenData: InstallationTokenData, repo?: string) { + // If no specific repo has been requested the token is applicable + if (repo === undefined) { + return true; + } + // If the token is restricted to repositories, the token only applies if the repo is in the allow list + if (tokenData.repositories !== undefined) { + return tokenData.repositories.includes(repo); + } + // Otherwise the token is applicable + return true; + } } /** @@ -99,10 +122,8 @@ class GithubAppManager { } } - const cacheKey = repo ? `${owner}/${repo}` : owner; - // Go and grab an access token for the app scoped to a repository if provided, if not use the organisation installation. - return this.cache.getOrCreateToken(cacheKey, async () => { + return this.cache.getOrCreateToken(owner, repo, async () => { const { installationId, suspended } = await this.getInstallationData( owner, ); @@ -115,7 +136,9 @@ class GithubAppManager { headers: HEADERS, }); - if (repo && result.data.repository_selection === 'selected') { + let repositoryNames; + + if (result.data.repository_selection === 'selected') { const installationClient = new Octokit({ baseUrl: this.baseUrl, auth: result.data.token, @@ -126,18 +149,13 @@ class GithubAppManager { // The return type of the paginate method is incorrect. const repositories: RestEndpointMethodTypes['apps']['listReposAccessibleToInstallation']['response']['data']['repositories'] = repos.repositories ?? repos; - const hasRepo = repositories.some(repository => { - return repository.name === repo; - }); - if (!hasRepo) { - throw new Error( - `The Backstage GitHub application used in the ${owner} organization does not have access to a repository with the name ${repo}`, - ); - } + + repositoryNames = repositories.map(repository => repository.name); } return { token: result.data.token, expiresAt: DateTime.fromISO(result.data.expires_at), + repositories: repositoryNames, }; }); } From de6c99b043288f9acae6861207f4884c88838d1e Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Tue, 6 Sep 2022 09:35:41 +0100 Subject: [PATCH 13/64] Fix access token cache time Signed-off-by: Alex Crome --- ...eInstanceGithubCredentialsProvider.test.ts | 34 ++++++++++++++++++- ...SingleInstanceGithubCredentialsProvider.ts | 7 ++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts index b48103eea1..d9b2a4e749 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts @@ -420,7 +420,7 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { octokit.apps.createInstallationAccessToken.mockReturnValue({ data: { - expires_at: DateTime.local().plus({ hours: 1 }).toString(), + expires_at: DateTime.local().plus({ minutes: 11 }).toString(), token: 'secret_token', }, } as RestEndpointMethodTypes['apps']['createInstallationAccessToken']['response']); @@ -433,4 +433,36 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { 1, ); }); + + it('should expire access token cache 10 mins before token expires', async () => { + octokit.apps.listInstallations.mockReturnValue({ + headers: { + etag: '123', + }, + data: [ + { + id: 1, + repository_selection: 'all', + account: { + login: 'backstage', + }, + }, + ], + } as RestEndpointMethodTypes['apps']['listInstallations']['response']); + + octokit.apps.createInstallationAccessToken.mockReturnValue({ + data: { + expires_at: DateTime.local().plus({ minutes: 10 }).toString(), + token: 'secret_token', + }, + } as RestEndpointMethodTypes['apps']['createInstallationAccessToken']['response']); + + await github.getCredentials({ url: 'https://github.com/backstage' }); + await github.getCredentials({ url: 'https://github.com/backstage' }); + + expect(octokit.apps.listInstallations.mock.calls.length).toBe(2); + expect(octokit.apps.createInstallationAccessToken.mock.calls.length).toBe( + 2, + ); + }); }); diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts index a502590a17..02e0893d8a 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts @@ -46,8 +46,10 @@ class Cache { ): Promise<{ accessToken: string }> { let ownerData = this.tokenCache.get(owner); - if (!ownerData || !this.isNotExpired(ownerData.expiresAt)) { + if (!ownerData || this.isExpired(ownerData.expiresAt)) { ownerData = await supplier(); + // Allow 10 minutes grace to account for clock skew + ownerData.expiresAt = ownerData.expiresAt.minus({ minutes: 10 }); this.tokenCache.set(owner, ownerData); } @@ -61,8 +63,7 @@ class Cache { } // consider timestamps older than 50 minutes to be expired. - private isNotExpired = (date: DateTime) => - date.diff(DateTime.local(), 'minutes').minutes > 50; + private isExpired = (date: DateTime) => DateTime.local() > date; private appliesToRepo(tokenData: InstallationTokenData, repo?: string) { // If no specific repo has been requested the token is applicable From f76f22c649ea8a773911829467ad1dfb5360201a Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Wed, 7 Sep 2022 10:11:46 +0100 Subject: [PATCH 14/64] Added changeset + docs Signed-off-by: Alex Crome --- .changeset/sweet-grapes-explain.md | 8 ++++++++ docs/integrations/github/github-apps.md | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 .changeset/sweet-grapes-explain.md diff --git a/.changeset/sweet-grapes-explain.md b/.changeset/sweet-grapes-explain.md new file mode 100644 index 0000000000..3b75b8849d --- /dev/null +++ b/.changeset/sweet-grapes-explain.md @@ -0,0 +1,8 @@ +--- +'@backstage/integration': minor +--- + +Improved caching around github app tokens. +Tokens are now cached for 50 minutes, not 10. +Calls to get app installations are also included in this cache. +If you have more than one github app configured, consider adding `allowedInstallationOwners` to your apps configuration to gain the most benefit from these performance changes. diff --git a/docs/integrations/github/github-apps.md b/docs/integrations/github/github-apps.md index 4f2c58bbec..38459acf75 100644 --- a/docs/integrations/github/github-apps.md +++ b/docs/integrations/github/github-apps.md @@ -98,7 +98,9 @@ integrations: ### Limiting the GitHub App installations If you want to limit the GitHub app installations visible to backstage you may -optionally include the `allowedInstallationOwners` option. +optionally include the `allowedInstallationOwners` option. If you configure +multiple apps, specifying this will bring some small performance benefits +as backstage can more easily select which app to use for a url. ```yaml appId: app id From a7f6f1c3fad15d11a1812058ab58a48791e6faae Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Wed, 7 Sep 2022 11:51:54 +0100 Subject: [PATCH 15/64] Remove erroneous comment Signed-off-by: Alex Crome --- .../src/github/SingleInstanceGithubCredentialsProvider.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts index 02e0893d8a..aeaa0f5e04 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts @@ -62,7 +62,6 @@ class Cache { return { accessToken: ownerData.token }; } - // consider timestamps older than 50 minutes to be expired. private isExpired = (date: DateTime) => DateTime.local() > date; private appliesToRepo(tokenData: InstallationTokenData, repo?: string) { From 858833a4d5d5bbf4b2d1d5418f6ae5a92ec0d5d3 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Wed, 7 Sep 2022 13:00:48 +0200 Subject: [PATCH 16/64] add refresh to connection Signed-off-by: Kiss Miklos --- plugins/catalog-backend/src/database/types.ts | 8 ++++++++ .../src/processing/connectEntityProviders.ts | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/plugins/catalog-backend/src/database/types.ts b/plugins/catalog-backend/src/database/types.ts index 07241f0682..2d30f8bd86 100644 --- a/plugins/catalog-backend/src/database/types.ts +++ b/plugins/catalog-backend/src/database/types.ts @@ -157,6 +157,14 @@ export interface ProcessingDatabase { */ refresh(txOpaque: Transaction, options: RefreshOptions): Promise; + /** + * Schedules a refresh for every entity that has a matching set of refresh key stored for it. + */ + refreshByRefreshKeys( + txOpaque: Transaction, + options: RefreshByKeyOptions, + ): Promise; + /** * Lists all ancestors of a given entityRef. * diff --git a/plugins/catalog-backend/src/processing/connectEntityProviders.ts b/plugins/catalog-backend/src/processing/connectEntityProviders.ts index 70a43de589..8325e2bcac 100644 --- a/plugins/catalog-backend/src/processing/connectEntityProviders.ts +++ b/plugins/catalog-backend/src/processing/connectEntityProviders.ts @@ -61,6 +61,16 @@ class Connection implements EntityProviderConnection { } } + async refresh(keys: string[]): Promise { + const db = this.config.processingDatabase; + + await db.transaction(async (tx: any) => { + return db.refreshByRefreshKeys(tx, { + keys, + }); + }); + } + private check(entities: Entity[]) { for (const entity of entities) { try { From 6e63bc43f27d0b72ee17f2273fe7e1267223138b Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Wed, 7 Sep 2022 13:58:39 +0200 Subject: [PATCH 17/64] add changeset Signed-off-by: Kiss Miklos --- .changeset/rude-weeks-retire.md | 5 +++++ plugins/catalog-node/src/api/provider.ts | 1 + 2 files changed, 6 insertions(+) create mode 100644 .changeset/rude-weeks-retire.md diff --git a/.changeset/rude-weeks-retire.md b/.changeset/rude-weeks-retire.md new file mode 100644 index 0000000000..fddddd7a9c --- /dev/null +++ b/.changeset/rude-weeks-retire.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +Added refresh function to the EntityProviderConnection to be able to schedule refreshes from entity providers. diff --git a/plugins/catalog-node/src/api/provider.ts b/plugins/catalog-node/src/api/provider.ts index fa7659ee32..437da4e7d6 100644 --- a/plugins/catalog-node/src/api/provider.ts +++ b/plugins/catalog-node/src/api/provider.ts @@ -36,6 +36,7 @@ export interface EntityProviderConnection { * Applies either a full or delta update to the catalog engine. */ applyMutation(mutation: EntityProviderMutation): Promise; + refresh(keys: string[]): Promise; } /** From 652dc0fa0c6b554e0989e38a46a3353d2965b2b5 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Wed, 7 Sep 2022 14:03:47 +0200 Subject: [PATCH 18/64] fix tests Signed-off-by: Kiss Miklos --- .../src/providers/AwsS3EntityProvider.test.ts | 1 + .../src/providers/AzureDevOpsEntityProvider.test.ts | 1 + .../src/BitbucketCloudEntityProvider.test.ts | 1 + .../src/providers/BitbucketServerEntityProvider.test.ts | 2 ++ .../src/providers/GerritEntityProvider.test.ts | 1 + .../src/providers/GitHubEntityProvider.test.ts | 4 ++++ .../src/providers/GitHubOrgEntityProvider.test.ts | 1 + .../src/providers/GitlabDiscoveryEntityProvider.test.ts | 2 ++ .../src/processors/MicrosoftGraphOrgEntityProvider.test.ts | 1 + .../src/modules/core/DefaultLocationStore.test.ts | 2 +- plugins/catalog-node/src/api/provider.ts | 4 ++++ 11 files changed, 19 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts index 9d3bba0e8a..3d59d738cf 100644 --- a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts +++ b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts @@ -100,6 +100,7 @@ describe('AwsS3EntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = AwsS3EntityProvider.fromConfig(config, { diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts index 1c2c3d0082..c57455d8d6 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts @@ -71,6 +71,7 @@ describe('AzureDevOpsEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = AzureDevOpsEntityProvider.fromConfig(config, { diff --git a/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.test.ts b/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.test.ts index 08b127f69e..641150acbf 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.test.ts +++ b/plugins/catalog-backend-module-bitbucket-cloud/src/BitbucketCloudEntityProvider.test.ts @@ -127,6 +127,7 @@ describe('BitbucketCloudEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = BitbucketCloudEntityProvider.fromConfig(config, { logger, diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts index fe2c81b9b6..39689b6c1d 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts @@ -221,6 +221,7 @@ describe('BitbucketServerEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = BitbucketServerEntityProvider.fromConfig(config, { logger, @@ -296,6 +297,7 @@ describe('BitbucketServerEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = BitbucketServerEntityProvider.fromConfig(config, { logger, diff --git a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts index d5be045e6c..d6ad0ff668 100644 --- a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts @@ -83,6 +83,7 @@ describe('GerritEntityProvider', () => { const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; it('discovers projects from the api.', async () => { diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts index 871718cc05..63fb77288b 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts @@ -146,6 +146,7 @@ describe('GitHubEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = GitHubEntityProvider.fromConfig(config, { @@ -233,6 +234,7 @@ describe('GitHubEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = GitHubEntityProvider.fromConfig(config, { @@ -306,6 +308,7 @@ describe('GitHubEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = GitHubEntityProvider.fromConfig(config, { @@ -404,6 +407,7 @@ it('apply full update on scheduled execution with topic exclusion taking priorit const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = GitHubEntityProvider.fromConfig(config, { diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubOrgEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/providers/GitHubOrgEntityProvider.test.ts index 77d585eae1..2d05346f01 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubOrgEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GitHubOrgEntityProvider.test.ts @@ -83,6 +83,7 @@ describe('GitHubOrgEntityProvider', () => { const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const logger = getVoidLogger(); diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts index 7fb4bf8d09..3f3c4e7f91 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts @@ -155,6 +155,7 @@ describe('GitlabDiscoveryEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = GitlabDiscoveryEntityProvider.fromConfig(config, { logger, @@ -253,6 +254,7 @@ describe('GitlabDiscoveryEntityProvider', () => { const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = GitlabDiscoveryEntityProvider.fromConfig(config, { logger, diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts index e34eee0499..ff68235c4c 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgEntityProvider.test.ts @@ -95,6 +95,7 @@ describe('MicrosoftGraphOrgEntityProvider', () => { }; const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), + refresh: jest.fn(), }; const provider = MicrosoftGraphOrgEntityProvider.fromConfig( new ConfigReader(config), diff --git a/plugins/catalog-backend/src/modules/core/DefaultLocationStore.test.ts b/plugins/catalog-backend/src/modules/core/DefaultLocationStore.test.ts index dfbc37f6c9..2a9b1f8d65 100644 --- a/plugins/catalog-backend/src/modules/core/DefaultLocationStore.test.ts +++ b/plugins/catalog-backend/src/modules/core/DefaultLocationStore.test.ts @@ -26,7 +26,7 @@ describe('DefaultLocationStore', () => { async function createLocationStore(databaseId: TestDatabaseId) { const knex = await databases.init(databaseId); await applyDatabaseMigrations(knex); - const connection = { applyMutation: jest.fn() }; + const connection = { applyMutation: jest.fn(), refresh: jest.fn() }; const store = new DefaultLocationStore(knex); await store.connect(connection); return { store, connection }; diff --git a/plugins/catalog-node/src/api/provider.ts b/plugins/catalog-node/src/api/provider.ts index 437da4e7d6..a29df7bcba 100644 --- a/plugins/catalog-node/src/api/provider.ts +++ b/plugins/catalog-node/src/api/provider.ts @@ -36,6 +36,10 @@ export interface EntityProviderConnection { * Applies either a full or delta update to the catalog engine. */ applyMutation(mutation: EntityProviderMutation): Promise; + + /** + * Schedules a refresh on all of the entities that has a matching refresh key associated with the provided keys. + */ refresh(keys: string[]): Promise; } From fabd576219bea5086293b4a058941ff7ce27f722 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Wed, 7 Sep 2022 14:21:35 +0200 Subject: [PATCH 19/64] add new api-report.md Signed-off-by: Kiss Miklos --- plugins/catalog-node/api-report.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/catalog-node/api-report.md b/plugins/catalog-node/api-report.md index 7d12c2e065..7ffae771ef 100644 --- a/plugins/catalog-node/api-report.md +++ b/plugins/catalog-node/api-report.md @@ -126,6 +126,7 @@ export interface EntityProvider { // @public export interface EntityProviderConnection { applyMutation(mutation: EntityProviderMutation): Promise; + refresh(keys: string[]): Promise; } // @public From 38d4f9a8cfe0b4bf0e5937cd486fad642252178c Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 7 Sep 2022 15:58:07 +0200 Subject: [PATCH 20/64] chore: fixing issue with the microsite banner positioning Signed-off-by: blam --- microsite/static/css/custom.css | 6 +++++- microsite/static/js/dismissable-banner.js | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/microsite/static/css/custom.css b/microsite/static/css/custom.css index 4b52a72e42..dd8fada3b7 100644 --- a/microsite/static/css/custom.css +++ b/microsite/static/css/custom.css @@ -1086,11 +1086,15 @@ code { display: flex; } -.Banner--hidden { +.Banner--hiding { opacity: 0; transition: opacity 200ms ease-in-out; } +.Banner--hidden { + display: none; +} + .Banner a { color: #000; text-decoration: underline; diff --git a/microsite/static/js/dismissable-banner.js b/microsite/static/js/dismissable-banner.js index 2fcdbe5692..f38fd0ebf1 100644 --- a/microsite/static/js/dismissable-banner.js +++ b/microsite/static/js/dismissable-banner.js @@ -10,7 +10,7 @@ window.addEventListener('DOMContentLoaded', () => { const dismissButton = banner.querySelector('[data-banner-dismiss]'); if (dismissButton) { dismissButton.addEventListener('click', () => { - banner.classList.add('Banner--hidden'); + banner.classList.add('Banner--hiding'); localStorage.setItem(storageKey, 'true'); }); } From cb13c56c84a803b1ec0386b3f0d4c2096eec5956 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 7 Sep 2022 16:12:42 +0200 Subject: [PATCH 21/64] chore: added markup for the homepage text Signed-off-by: blam --- microsite/pages/en/index.js | 91 +++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/microsite/pages/en/index.js b/microsite/pages/en/index.js index 520157163a..11c9f9ac70 100644 --- a/microsite/pages/en/index.js +++ b/microsite/pages/en/index.js @@ -394,6 +394,97 @@ class Index extends React.Component { + + + + {' '} + + Backstage Search Platform + + A search platform made just for you + + + + + + } + /> + + + + Way more than a text box{' '} + + + Backstage Search more than just a box you type questions into + — it’s an entire platform all by itself, which you can + customize to fit your organization’s needs + + + + + + Search the way you want + + + Bring your own search engine, create a customized search page + experience, or edit the look and feel of each search result + + + + + + + Index everything, find anything + + + With an extensible backend, you can search beyond the Software + Catalog and index any source you’d like — whether it’s + TechDocs or Confluence and Stack Overflow + + + + + + + Discoverability unlocked + + + New hires and seasoned employees alike can easily search your + infrastructure instead of getting lost in it + + + + + + + + Learn more about Backstage Search + + + Read + + + From 9743bc788cd71d2cca37b5b8f5f6f86ab36be79b Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Wed, 7 Sep 2022 17:16:54 +0200 Subject: [PATCH 22/64] use object as param in refresh function Signed-off-by: Kiss Miklos --- .changeset/flat-crabs-love.md | 5 +++++ .changeset/rude-weeks-retire.md | 2 +- .../src/processing/connectEntityProviders.ts | 5 +++-- plugins/catalog-node/api-report.md | 7 ++++++- plugins/catalog-node/src/api/index.ts | 1 + plugins/catalog-node/src/api/provider.ts | 9 ++++++++- 6 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 .changeset/flat-crabs-love.md diff --git a/.changeset/flat-crabs-love.md b/.changeset/flat-crabs-love.md new file mode 100644 index 0000000000..96f566d712 --- /dev/null +++ b/.changeset/flat-crabs-love.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-node': minor +--- + +Added refresh function to the `EntityProviderConnection` to be able to schedule refreshes from entity providers. diff --git a/.changeset/rude-weeks-retire.md b/.changeset/rude-weeks-retire.md index fddddd7a9c..c2073c5826 100644 --- a/.changeset/rude-weeks-retire.md +++ b/.changeset/rude-weeks-retire.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog-backend': minor --- -Added refresh function to the EntityProviderConnection to be able to schedule refreshes from entity providers. +Added the `refresh` function to the Connection of the entity providers. diff --git a/plugins/catalog-backend/src/processing/connectEntityProviders.ts b/plugins/catalog-backend/src/processing/connectEntityProviders.ts index 8325e2bcac..a4795532f0 100644 --- a/plugins/catalog-backend/src/processing/connectEntityProviders.ts +++ b/plugins/catalog-backend/src/processing/connectEntityProviders.ts @@ -22,6 +22,7 @@ import { ProcessingDatabase } from '../database/types'; import { EntityProvider, EntityProviderConnection, + EntityProviderRefreshOptions, EntityProviderMutation, } from '@backstage/plugin-catalog-node'; @@ -61,12 +62,12 @@ class Connection implements EntityProviderConnection { } } - async refresh(keys: string[]): Promise { + async refresh(options: EntityProviderRefreshOptions): Promise { const db = this.config.processingDatabase; await db.transaction(async (tx: any) => { return db.refreshByRefreshKeys(tx, { - keys, + keys: options.keys, }); }); } diff --git a/plugins/catalog-node/api-report.md b/plugins/catalog-node/api-report.md index 7ffae771ef..3873e3376d 100644 --- a/plugins/catalog-node/api-report.md +++ b/plugins/catalog-node/api-report.md @@ -126,7 +126,7 @@ export interface EntityProvider { // @public export interface EntityProviderConnection { applyMutation(mutation: EntityProviderMutation): Promise; - refresh(keys: string[]): Promise; + refresh(options: EntityProviderRefreshOptions): Promise; } // @public @@ -141,6 +141,11 @@ export type EntityProviderMutation = removed: DeferredEntity[]; }; +// @public (undocumented) +export type EntityProviderRefreshOptions = { + keys: string[]; +}; + // @public export type EntityRelationSpec = { source: CompoundEntityRef; diff --git a/plugins/catalog-node/src/api/index.ts b/plugins/catalog-node/src/api/index.ts index 136c23d20d..66e8d6bd21 100644 --- a/plugins/catalog-node/src/api/index.ts +++ b/plugins/catalog-node/src/api/index.ts @@ -32,4 +32,5 @@ export type { EntityProvider, EntityProviderConnection, EntityProviderMutation, + EntityProviderRefreshOptions, } from './provider'; diff --git a/plugins/catalog-node/src/api/provider.ts b/plugins/catalog-node/src/api/provider.ts index a29df7bcba..fc9a172e0d 100644 --- a/plugins/catalog-node/src/api/provider.ts +++ b/plugins/catalog-node/src/api/provider.ts @@ -26,6 +26,13 @@ export type EntityProviderMutation = | { type: 'full'; entities: DeferredEntity[] } | { type: 'delta'; added: DeferredEntity[]; removed: DeferredEntity[] }; +/** + * @public + */ +export type EntityProviderRefreshOptions = { + keys: string[]; +}; + /** * The EntityProviderConnection is the connection between the catalog and the entity provider. * The EntityProvider use this connection to add and remove entities from the catalog. @@ -40,7 +47,7 @@ export interface EntityProviderConnection { /** * Schedules a refresh on all of the entities that has a matching refresh key associated with the provided keys. */ - refresh(keys: string[]): Promise; + refresh(options: EntityProviderRefreshOptions): Promise; } /** From c86741a0527d72b5bc80934f53b0965e81aa4cfd Mon Sep 17 00:00:00 2001 From: Phil Kuang Date: Wed, 7 Sep 2022 12:05:58 -0400 Subject: [PATCH 23/64] feat(EntityTagPicker): support showing option counts Signed-off-by: Phil Kuang --- .changeset/gorgeous-pillows-retire.md | 5 ++++ plugins/catalog-react/api-report.md | 9 ++++++- .../EntityTagPicker/EntityTagPicker.test.tsx | 24 ++++++++++++++++++- .../EntityTagPicker/EntityTagPicker.tsx | 21 ++++++++++++---- .../src/components/EntityTagPicker/index.ts | 5 +++- 5 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 .changeset/gorgeous-pillows-retire.md diff --git a/.changeset/gorgeous-pillows-retire.md b/.changeset/gorgeous-pillows-retire.md new file mode 100644 index 0000000000..d6d4009ac2 --- /dev/null +++ b/.changeset/gorgeous-pillows-retire.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Support showing counts in option labels of the `EntityTagPicker`. You can enable this by adding the `showCounts` property diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.md index 6e0ba235b7..1ae82f702b 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/api-report.md @@ -364,7 +364,14 @@ export class EntityTagFilter implements EntityFilter { } // @public (undocumented) -export const EntityTagPicker: () => JSX.Element | null; +export const EntityTagPicker: ( + props: EntityTagPickerProps, +) => JSX.Element | null; + +// @public (undocumented) +export type EntityTagPickerProps = { + showCounts?: boolean; +}; // @public export class EntityTextFilter implements EntityFilter { diff --git a/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.test.tsx b/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.test.tsx index 2be521203f..78bdde1994 100644 --- a/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.test.tsx +++ b/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.test.tsx @@ -28,7 +28,9 @@ const tags = ['tag1', 'tag2', 'tag3', 'tag4']; describe('', () => { const mockCatalogApiRef = { getEntityFacets: async () => ({ - facets: { 'metadata.tags': tags.map(value => ({ value })) }, + facets: { + 'metadata.tags': tags.map((value, idx) => ({ value, count: idx })), + }, }), } as unknown as CatalogApi; @@ -68,6 +70,26 @@ describe('', () => { ]); }); + it('renders tags with counts', async () => { + const rendered = render( + + + + + , + ); + await waitFor(() => expect(rendered.getByText('Tags')).toBeInTheDocument()); + + fireEvent.click(rendered.getByTestId('tag-picker-expand')); + + expect(rendered.getAllByRole('option').map(o => o.textContent)).toEqual([ + 'tag1 (0)', + 'tag2 (1)', + 'tag3 (2)', + 'tag4 (3)', + ]); + }); + it('respects the query parameter filter value', async () => { const updateFilters = jest.fn(); const queryParameters = { tags: ['tag3'] }; diff --git a/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx b/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx index 39895f229d..25f02e8adc 100644 --- a/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx +++ b/plugins/catalog-react/src/components/EntityTagPicker/EntityTagPicker.tsx @@ -49,7 +49,12 @@ const icon = ; const checkedIcon = ; /** @public */ -export const EntityTagPicker = () => { +export type EntityTagPickerProps = { + showCounts?: boolean; +}; + +/** @public */ +export const EntityTagPicker = (props: EntityTagPickerProps) => { const classes = useStyles(); const { updateFilters, @@ -65,7 +70,9 @@ export const EntityTagPicker = () => { filter: filters.kind?.getCatalogFilters(), }); - return facets[facet].map(({ value }) => value); + return Object.fromEntries( + facets[facet].map(({ value, count }) => [value, count]), + ); }, [filters.kind]); const queryParamTags = useMemo( @@ -91,7 +98,7 @@ export const EntityTagPicker = () => { }); }, [selectedTags, updateFilters]); - if (!availableTags?.length) return null; + if (!Object.keys(availableTags ?? {}).length) return null; return ( @@ -99,7 +106,7 @@ export const EntityTagPicker = () => { Tags setSelectedTags(value)} renderOption={(option, { selected }) => ( @@ -111,7 +118,11 @@ export const EntityTagPicker = () => { checked={selected} /> } - label={option} + label={ + props.showCounts + ? `${option} (${availableTags?.[option]})` + : option + } /> )} size="small" diff --git a/plugins/catalog-react/src/components/EntityTagPicker/index.ts b/plugins/catalog-react/src/components/EntityTagPicker/index.ts index c982d33df0..28c8c844f8 100644 --- a/plugins/catalog-react/src/components/EntityTagPicker/index.ts +++ b/plugins/catalog-react/src/components/EntityTagPicker/index.ts @@ -15,4 +15,7 @@ */ export { EntityTagPicker } from './EntityTagPicker'; -export type { CatalogReactEntityTagPickerClassKey } from './EntityTagPicker'; +export type { + CatalogReactEntityTagPickerClassKey, + EntityTagPickerProps, +} from './EntityTagPicker'; From 2bfe26336b79486e02113ee1b00433a598368376 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 7 Sep 2022 18:11:39 +0200 Subject: [PATCH 24/64] microsite: add fold and header for analytics blog post Signed-off-by: Patrik Oldsberg --- .../blog/2022-09-08-fyi-plugin-analytics-api.md | 4 ++++ .../blog/assets/22-09-08/analytics-api-fyi.png | Bin 0 -> 30010 bytes 2 files changed, 4 insertions(+) create mode 100644 microsite/blog/assets/22-09-08/analytics-api-fyi.png diff --git a/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md b/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md index 24304c0d10..4fba242e3e 100644 --- a/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md +++ b/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md @@ -8,6 +8,10 @@ authorImageURL: https://avatars.githubusercontent.com/u/3496491?v=4 **TL;DR** If you didn't know, now you know: the Backstage plugin analytics API is here to help you understand how developers in your organization are using Backstage. +![The Plugin Analytics API](assets/22-09-08/analytics-api-fyi.png) + + + ## What is the plugin analytics API? The plugin analytics API is a [utility api](https://backstage.io/docs/api/utility-apis) available by default in every Backstage instance, intended to bridge the gap between the needs of Backstage integrators and plugin developers. While Backstage integrators want visibility into the plugins they’ve installed, they lack the power to instrument those plugins. And although plugin developers have the power to instrument plugins, they can’t do so without a single, vendor-agnostic way to track events. Enter: the plugin analytics API. diff --git a/microsite/blog/assets/22-09-08/analytics-api-fyi.png b/microsite/blog/assets/22-09-08/analytics-api-fyi.png new file mode 100644 index 0000000000000000000000000000000000000000..444d3fa465b8d1af72503d6afe3e05f9bac3ad30 GIT binary patch literal 30010 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 PBA{_!OC=X>>hpg9nDVzv literal 0 HcmV?d00001 From 09216f8c7aaad92665b654962146ac30879cee8e Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 7 Sep 2022 19:14:17 +0200 Subject: [PATCH 25/64] chore: fromat different Signed-off-by: blam --- .prettierignore | 1 - microsite/core/Components.js | 9 +++-- microsite/pages/en/index.js | 31 ++++++++++-------- .../backstage-search-platform-icon-1.gif | Bin 0 -> 21479 bytes .../img/search-platform-overview-small.png | Bin 0 -> 114210 bytes .../static/img/search-platform-overview.png | Bin 0 -> 279537 bytes 6 files changed, 24 insertions(+), 17 deletions(-) create mode 100644 microsite/static/animations/backstage-search-platform-icon-1.gif create mode 100644 microsite/static/img/search-platform-overview-small.png create mode 100644 microsite/static/img/search-platform-overview.png diff --git a/.prettierignore b/.prettierignore index 8f1fae0456..90179b93ff 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,6 +1,5 @@ .yarn dist -microsite coverage *.hbs templates diff --git a/microsite/core/Components.js b/microsite/core/Components.js index 4811b49291..2abf507f5e 100644 --- a/microsite/core/Components.js +++ b/microsite/core/Components.js @@ -53,14 +53,19 @@ Block.QuoteContainer = simpleComponent('div', 'Block__QuoteContainer'); Block.Quote = simpleComponent('p', 'Block__Quote'); Block.Divider = simpleComponent('p', 'Block__Divider', ['quote']); Block.MediaFrame = simpleComponent('div', 'Block__MediaFrame'); -Block.Graphics = ({ padding, children }) => { +Block.Graphics = ({ padding, children, innerPadding }) => { const style = {}; + const innerStyle = {}; if (padding) { style.padding = `${padding}% 0`; } + + if (innerPadding) { + innerStyle.padding = `${innerPadding}% 0`; + } return (
-
+
); }; diff --git a/microsite/pages/en/index.js b/microsite/pages/en/index.js index 11c9f9ac70..af1e2e0b66 100644 --- a/microsite/pages/en/index.js +++ b/microsite/pages/en/index.js @@ -88,7 +88,7 @@ class Index extends React.Component { /> The Speed Paradox - At Spotify, we’ve always believed in the speed and ingenuity + At Spotify, we've always believed in the speed and ingenuity that comes from having autonomous development teams. But as we learned firsthand, the faster you grow, the more fragmented and complex your software ecosystem becomes. And then @@ -238,7 +238,7 @@ class Index extends React.Component { Using templates, engineers can spin up a new microservice with - your organization’s best practices built-in, right from the + your organization's best practices built-in, right from the start @@ -350,7 +350,7 @@ class Index extends React.Component { Easy to maintain - Updating code? Update your documentation while you’re there — + Updating code? Update your documentation while you're there — with docs and code in the same place, it becomes a natural part of your workstream @@ -400,7 +400,7 @@ class Index extends React.Component { {' '} Backstage Search Platform @@ -409,11 +409,12 @@ class Index extends React.Component { + } @@ -425,8 +426,8 @@ class Index extends React.Component { Backstage Search more than just a box you type questions into - — it’s an entire platform all by itself, which you can - customize to fit your organization’s needs + — it's an entire platform all by itself, which you can + customize to fit your organization's needs @@ -442,11 +443,13 @@ class Index extends React.Component { @@ -456,7 +459,7 @@ class Index extends React.Component { With an extensible backend, you can search beyond the Software - Catalog and index any source you’d like — whether it’s + Catalog and index any source you'd like — whether it's TechDocs or Confluence and Stack Overflow @@ -603,7 +606,7 @@ class Index extends React.Component { BYO Plugins - If you don’t see the plugin you need, it’s simple to build + If you don't see the plugin you need, it's simple to build your own diff --git a/microsite/static/animations/backstage-search-platform-icon-1.gif b/microsite/static/animations/backstage-search-platform-icon-1.gif new file mode 100644 index 0000000000000000000000000000000000000000..07e7f45335390366fe052de97cb39ef975b54296 GIT binary patch literal 21479 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

$KRuTY{Vs$1)%7Vc zyAQckQJ$FrIf`>&->B4Qv+=PB8n%?6+BlL7+699Llm&u(#Gn|Wg-C_!395-UmL$Uo z7A4uh5hcH%Ntt{SQb1LI<0= zrs{vR#hYJduK@;MYD!WwInhbdoZuWHhJ)#>5+Ii%K=M(|SNR4rFHJtP&&ddYnqM3d zx;AX78F0)>2s1@pk`lv&z96d#Xi#&2?aW*686MZdO?9G4qa|~@$U2Cw)vxbtrwsV=A}1pn()?QauufNR1 zJd2XWDBDsY%shZPp-jS9G{zWYjsf1riku|_Nz_ckkNGtvQ5f1$0ozJQZ;qlb0mP%L zE|tsmSe7rC4iU%|k;8z|WCs>RqT35ds9CwF3CuUGGNJ|wpyP+d!DI1c+%6B&0h0Dn zj4!BK9;mEja0^9O4f^GtCMhVCufxaE!GMT0IDdFc)gl)lqBZLAbbKh(@KJ3L?Sh=dRu?^}SL=i^ZS!-G8||quG$LC~t;2VjkX;)S z4bnXQ3_SlZ!MF%4L<#41YHY-DK?tb3QWpcr=bZ6j6BnR=2h{Ck_&l)JMR(CR-nac_ zf(MvuGGW0BvfS+!P3wM8U?Mo;8KfuJwa{WgOn?F<@AIgbm5WCJ5 zr(OPG2gWjy0sA4X1)OrSRkHvR%6C&S;HY4r#rp~<-dzfTFRlBLcp3<@CtpBPfx}Hy zgB7UjK*bQ~XA%P1K-o}_fFS`b8CtzsH6DlP@Are=sJnDSEwkmD+VUf7x$%Z| zV_0Y%@sP7I#zqX$%gu#$o&ac0mUk;kE}dO7svs?be_%jDgz3 zLvK1M2ERjW=vRdX$UtZM<#ew>SWV$9{nzsST`}iG2^=_MwfUi2<>5od}YE{r@66*eVlhkKpAk@}BOUqO4M9(ZZH=iaml7(+P%NK{A(h4f=Ptc4eF@SFoXH z=@N#q&mb2=a^%o(5!=T27G${2348L`-RM*2fdO`6n3^>7W`n#7`2uy5!I01$9c51o#I-h&D1|XS$yr}&#J0Ka% zZQErWKdYSw743HyxMb294H?>%kHgR>UDUzNgS_Krqk}tcZv@FoAEnRI?wzVp&?j7~ zoev0U+MvCvbk3V!7J7{`{&L&&kNOXtfT&4UvlpT!bo_>voE zVwme*PYRY1Yg6$(%}cUO)5C|$3DG0aJ3@X2v>7AQ5vyGua;^pRyb}Hg?YHX1RZH9# zg@~=$(RlyaXMR{GdQXH?j%ra76Zm1ZAZ+WP%G^tK+L*?2{po5EO~eFVTj5iDC}TJf zEV_NKOYP}ZNJ5$72{{Cu7Y7J@k+!7*TgeaD|l*iPH88FE++c*Y+= z5M*A@Z3uV0Ob`{|$3peD&r6}90aTbK{bdv@*y4+7?eULn_Y@p2l5(eVLkAE;Lke4L zqa2{z4iI?KTjz5hLSQiQveSZrr-Ro%co5^ z)&&~y(w!C?XH^##&KK&I=JTPy&Ln|E=*rnz{9fg}kpYb3l7rq7;YfVllr*0XZJOku z;7B(+PQf@LU>pPQ+|bZ#f98D(-)58X&#r5IaRr8UVEcONGKi-c*ms9wbR34B<&fkP zMVkO8aNPyn)dNclGI14%AS0Hu92C;;sry-j3M^o6eu2)Bm?Tn%ZJy&X|V+7 z=uYtP9Fz0O6RtjMt&e*ppQk60>$M%ox6mJ+Iest~$yj?toht&LZ*)LW=F5Tgdt&Qa zCxI;|_$ZsSu9nQ1k4&jgga{F<=eBu%=qcOMX0)+j`kQs1&XK6UJZB;ptsCLVd5SJ{ zOKk+GdWh-Duuy))Dwu$Zz^+%cUZ}Xt+}tkI8nMbA?1gKUmxjofJz?st66)L9nC=A7 zf25UYv2VMXM+$@zT*`2rB#qCt|z5R=1>eu}U#tV|#gD0bH z_0|2hn1B5JOhrIM0FV!L-RtM^hX6eJm!vNS@H`_a*3QgvdV7qWJGSR^{OMzJ7eH2Ah5-&7yB2&vFV3?`3&pYZ?(0KnagCrj;FG<}zc(ZFLv zFoOdBX@|*g#oQ1)L(<1=7!|_4O+GwP4LAtK8I#4nZi7#+N=C9k@Sy20O9!s-WnDEn zz)j;hw-^Ar`e#X-3cBUZa_SOGixLMW0({^8TbR+>xejIlEEq4w zAAw?sp+JSQ+uVG&uiy`EV<63ve0T?lqTWq8n&E}hzsG%lxupJTB)s?1va&%f8PZPY z%Kpj4{%%GCx7uNoYcenS!sw!ZU!49hZ^WF%qohmEIlb%FcIR(4>Td%9pfEAQeN+Ek z=zLiYhQl#=Uiu#koo^`?IOgVr7vLIeR7JH5&`NE02QHt*7jQy4|5NDP)H0ZH)Lt-E zCJ^6oa^~fXP>1yFzbl=~n{ll(PbqXUrVi-B_Q1&wmDPV$I$wLgKKPNY0mVbde23Dr zJz^bWB#iS?{#EJR@=lZR*6W4SY8G_#YEBd50Z(4daiz0_huP1m*H_(wvj{iBLZ@3r z<&G}UpfUxCDvy$&(vlBIs=_qjmMSFrUx%FIV%A6jscQ!ZqGQkC69>33ER@o zFT7my#d5agCsFNI7y6^dY62Gr6CA68u9Ys7a&+v`iI009%napln=Z9Bbx>G&S~#nw zvCXXG^pj@9Zl|4tr5(OB_+nJ=2Po`DY zHy32bt-ics_PM+8bKMT)+jctWaKcMPv0TSfOq-HH$U1I#WWSUuGrGz|rcR%(;w)hoOpUI#5JG9%hxK zw-_oe+tmyj<2UTe8BtJ1$kkh0w0xUn>R|NqDps7QFT z1PRd+xeqrQhe`k_Z$fmi3?yNPnfWYbag7VpA|`n=C+o=Mt%5e5_Ch)-!vCEDY(plr z7&>HPT5}^hdQO4dvXjOVf0ipunvuRe1x@#URVOSGO#9eYirTQ^axCG*fu(cCIW8NW zxO^E#&>baYwMU;Nvg4<$Keeeg;T~gcsWf<#b{?=I+2}!BQSg#XYGy;~5XZW^?Ijk) z429_|O`Hi1PJJb78;mf&oKKs=l{MF8^|vUy<|kq^Jkl5$X$qGaAaZxphT9vCi}Df= z6+W=AIb#tDl2m3KAQv(HGQSA>F$bZAxuGZ!ibgh$J3pg1Lfoj`5FjRV6Vl~UXz)OR zMW?!}-(m<1nl{Vbo`Tq-#^4~kj20N2MeE4o9Uw8pWyxXs>G8ON2+DBvX#v#GnOO+Q z*@8TI@iVe-WAa)fFHewfzDKvuaJwvUD8`Z`<}%=hap_;%sRWAH=hOa?y*$aShQT;Kf+=1g57) zy7-b|sK)ryjCZKw(}hK{$=wd1^AX}>px2|X-s&rUl4D=t0{y3gqo`J7Eiewk;ruR+ zMw&@e2X(gRApYFy1nZ}BrE5hi114N1L0Z2JBSZ?CERVQqIW3Wv zLG}O!@&cg)X=sNHIGG}nd#PPRM`N5E{q`>xu+T?mDd)s1yx!|=lz=c~g9!a<*715H zP2v1Z2La%WaP>8TLkC}*yC9fI=7XD(ZAz}cs=4mI0KX0+rJEZttv2+I$urw1SANGR3fVzmc=oK3m-Ck?ucL zS){?mSg(z4%(A(;d#x^wD1XgQL34t=w13TpNmkc3fd4dG)8l&dRU*vrdlCQZ7_h;C7TL}j;toDM{Elqr{^MNE1< zPe!Y1(%!zGB&%A|c=D`Y=0)5}WWmJ9nLTTVGs(|ymFd(-KpkmW@++)EW=)a}O>mxa zS~dR<2(P3(lZqY~z)m-rI@5?Q;w2Y^KSEL*Gl zBb)iI%HCU+YyivQ#O$4cAGh)OtzPRkF9%-zXiu1F_4zsVa`^B^2Z5~(%V4`OD!50< zIo0OR_juu<-d-muU#~4t#&&VaW3Q`xrY%_e@#2$`e(vX|JsHF`+s5^&P6){E1yyDG&*YZ0SrXCLn{ZZm=c9> z5t94VkqkK0jwzU*6O(_O)IB;*6Giy};w(mIsBZ>;!V9=npZ(s<4GpZ-sO{w*7Wuo2m^O>w$Bj3se1u-V3e#q%UVk)cFPZ%Up3S~;z%A@nL zU8QZ83TSC;_{BH^%Vz*Fhlv8Fh{WXymP{qegKV^NNCq+o6zZ?1hRT`~=jCsF2sRv( zUE^X4?OVY(L~h5`{PW5vZ;+(yh^_- zf_cqbc1)}D!u=S$*n~lR>>0f3m;_w10}dWp9Trv@voX;u4ru{VucWd%KJc_s z=UvJ4gbf|8^Kp!6D~PKM@t7xi>EHs?{D-98p%}M6v~;>WtlaF%c5iwpvVLuOzF~?L zAlAk+*DPOUiMEvzK=!+e_h%?JTV#Kbqw}&{sHvph`_wX$IdsXMURt%!tcLNMs?g4e zp9x(j^iZoj-O6a%vbbMjBU!qs3te-Ysb z5avw4_^sJXr^dnnb!3&SQ9Uv!LDTtOFxw8C$INOg|wE1uYO=Dx*EEZt0 z=xH))V-3u=VpR9Oa(SAc+W3MB{P~W7;m=a}NiucFrsGA_Hlq%V(nm`_xEwKZHMN}z?MD&< zTv{IR@}vPN=G54Djfa54ql~{F8(~=T>wforF`2*?w=1D%=D8~JShgFE;NcplIT8Rq z6hJ6CJQzieo-s8;iG}B^Nvfh(c}2BC8O>$uIktXINb2C&3UWY^R`HpQYm-?ljlK8a~(BjfFrJXk`Od=3{@#Z zVM7(ZJ=Mogz9FJUR5^%F&$Aa#uY4A&WFidrrY;Rn*xFa!m>p= zg!{KN=UYw)OT!sAUgSJw8gX2JNhfmurb9Jon1|x31kD^jDDnN3v+uJPFR-HEVx%;< z4+7kK=bx9;?T8DHU%x%v>!Y$MTSKvFh&E%0hLtj#0Xa?6iwf4}Y1e?`L4xH3hz|Lj zH#Z@@D*@Z{EDjFVzzR;y_qNxm+A2H{%47Kr#1$42c?YlrrWf>KYcz(B7d1I+MrZH} zj8sv^5>CHArsE05x5=Ll_Rkj2KSIQq>eGj zU_-+9FV`Ek#!)bWtcZ|CWQ9mSVd6()?lnL_Lj(Ohd?cjT8Ukh+9H}eS1kpP&o(3HC zBL!p^Jb3}Qi^yGF7ac%wZxqC4B!E=iCOXYI5Hx-68nec2cn;wgRYLp$@$yR0eq1nr zeTbfaQ`2=RvGnoMv?p=A&v>GNG7cpEX)%Io{%$mbAAWdxZ)w*PMe{e45QkojVnOs1 z#x3t}vM?+}wcH5*XpVSz(Ro*6G>dYNQr`38GKN4(!w@1`UOCC(2~D~bANM0MNS0|D zS493DsU{uQQ<=SRk0WLX19wtrIO)R&!pBcWtf;W#Eo$(pHv_t#b%3!R4RGDGSj5*Y z=Gb2=RqCWL&61I+4;HTxlDFZis8^65ewfD9Hv@`vZf_$Iz~(rAthfDZ+R$Cv;*xN> zN44=)hWpV>FNU1=e5h0yIb^KE4t}YNw_l@)1K7K_qwte#gkvO>CFv8)xxGMAZoS-9 z(hXYcTJUXez$(BeM55;_X_yUkmW>=$W#mCh{dAjUa~0w#^k=%`SHGX`VX1`d_m58_ zK!;=gG1pdZ%szOi*LMNyhgdoT4?H#MFy6j-H6PI}-Yn&E(#aAH4J{!DU&IG%|yMk*&^pwZsy89uTaf_O=c z?E@iekEBe>PMe3M`&+^zXXA*R(FH3I$&GaPMp%Tg!^_!d*GBCpg4 zQd^AJJVW?5@B|k%tBo{VfyMZZWvX^m3sR_f&a+7h}MEZPo;uYYa_*97tgy80d3&3{k)0P(# zmx?s{`!$bVI*}NJAS~iMIPr_iB*z6?Is?YMnuyKK%g1ajgR3xMR2xgl}fe(K| zJERGE_XyTn?lfncGAP4x8qrwf=qyU30tof zu~xcgtm<3}rI4BmMic5J-_`c zE4OO3Q+%qt2e!c{bkyf0+ZRf=PbPCpSOBC>-ZtTe2B{zvi&yl~mU6?jdyAV#;WJO- zI&N-$LPs9}j_g`OC`-=15QIGyrj_9!n*k_7W(6nb{uP4OleC!R*PAdYeIopvf)mxTkRCp)aq(Dwxh1nD_(yO?^;_K-OWvEDeB-An!U zT%N{=KhuqYhch^qdZKV673Q+OXgR}?=!;=xO{5EN6Uh+YuxtS~BF}_+eJQQs@x{fQX zhfIyoaDM0^e#`3Kc0>ahWhvkJiu12)S+P8eGUb-JG>p&s+B_f#Le1p4No$p_tqjA} zs;jF}m%S7W>!TW`1jvNvO@9Gl8J0+r^7ZL1=k}Ep-xp}}Q3&nRlp+BSQf-OS3oV!u zmN=Q&V3)L<;wa5DzKJe&cLJz@5*Owqb2|-(MJvmd-+aZrEpFAdvLxq-H^r6MiEsXe zf$Ku6^O?FfSt(1B!v9Vp2QYU36PHjAdFP@zv^|Nbpn0dbg;>5?p15w`K8@XKotqe% z(6l%S+ag60q)0<5sQp6u*E9~uzD2pX#g^LK>?g40R^o3fb(3fhZK@>-fXJ1pugk zd>^k|4QksD927Q!)mz5x=Um|7wd^@SjiW#<=2qY|LhX8qmZ(xN3`A34XbuoSLE!;N z6#ytc2t6j=TYUOWeV`^m9(6>>i6z!!EUOZS0Z0n06?P5HBVBw@*BJOn*)?Z!j;D8A z!M%8mh?YbV=tPB+%5?pGP?4BU76l1KcbJk;^@iEN$ zC^YabBl=m*KXhN60|r2sj7Sau@x zFfhdDes$ah;|@myN*NmqyFeJs5W$P}O7~R3*|!`$iN5O8)W4MwO2;>vQGpG`k-a%` zY|YM0kHo8ZqK7>OdFqsXZtJb7{!a6sVN20roUI*dSVIl*5PAfxIfy|13>jI6s6Uu6 z5`E+Ru^q49>q^3~Njtr0f#Bi|!24$ilXKzi=M*y4^g>%eI2!vNeS_d2; zSQ5v+li01m{zOh?4YciGf*CbxEZ>INiL}zT(G&Lkegz6o9a$$13YR_}Gu$?#on)FKwHFKL=1Fj1tDx4yG8=Ym2x16W87f@CFGsLO6^7 z=wluj!^Tx4@3VtbEl$NdN}LwwNazfw4PU_VZEEjXuPOZ3DX9A6#OWWGig!`l3;<{` z)2i8D9UPe%g4ORbKT#0-V$*an3;3`iLZF2c1WvN0C2-qU-t)Z%I(aHFOKWPMA6$9y zWz{X1*A4r)bLv*(03#=_@%9Paz+~8TGDr9{j0>w6%r+8^nNC=JoFZkPKh7GAQoE0c zcJFH*Cpb#Mmp?5mgzrqThGq|l$M@fQ;GWCk&IVsXd@I&JiGxt#(Tv);si%&v9dFF;*jt>}Sb9vXsfWgD zwzS=g+Gm2YRDbJo-o&*@BYeL9z;~;tlXjL_)ku!qetW>XL>T$-+@;l$gkj~^} zmyHIaj=Ox|tECV9FF2SasBQjh$fa~m-K4o$qrEE*yZA^3W+s*ccif>7?tA};5Rt-W zNALLfXfM3-0tj%P6^t)ZC-j5<;FY;dJ+eXcXF`>D;4pQhNDz8_FnQ$dyLue-v{dWb zN5fimsll?_n`9=_=kuR5usd9%Ao5GBG41gg8(-<30>KAq!G>CSh8gAix}kim+G`b1 z!JNg4O!+T2iSNmy35trd9Fe>VmaY-}C2ze2c>Up^ z{6BEgp9;1-X3vY49RLp)EAjR2wWGr^JN>}hYggeU z=QPZn4+rRHR5F}*161Tfqg+c2#44}8&T9S9cVxb88!3E_#8yV@( zfiW_-Soy|TQzQD`Qy81uUPD@l=?6_X-}8h9+2qXUPtrO?I_G#?bY@rzZ`idjwKT}? z<3rUQf2CMss}d`Y%mhimnId!-h%t{K@{$z{>3Kj~9jqs1X^tvfgV|>_lC0thTxo^0zBMlXEsgo(F3P(CJ@bVwB-o<--z(_eC z|4MUrY+BC+jjXWOxQIwNFGUa|c|)|@ZSwiS7ZqY!K~)4SV7Eyu>y)u|G{fE#QYWwu@$AZM&;^*QMzwn=5o&`7mTpEk}^z*AU%i`Da+v4zFD>F6C zzrM}2e){!Y)^8#Iu{ato|G7NfEdTZ6>nFJ!KnnpBy%WAh##QhZ!ZimvAqQD1CSQm! zqIW6nm!;t!3L)EpF4Y7R8IOn-DY(z!G%x}WZZ{p(PIM2)EQ#wo+4rV};dU!Xd%q!6CwG@USl&JQ>{c+h8@gH}K^DQ-2H3{4W>; zIJhWVxEKF|(TA1KA0^oD8Rzd3u^9f}Z!AXm2O1%%81bJvyzVm^n%EpQtUz^9(sPG{ zL&tyq!NcX|lfY&?Zu?HxLsv~z6yWU0X=dSUZprE6=<+EJpBgo0k$xSPXMngj*?q*>n`c_WiU+AzW z30fNu4;N7`E^lvdPH#R=XE$pu9uW}{E^b~fUS19u1c$q?lZTlPhm$+q-!J*+J#v=r z05@9~4_jv^n&K|PHwLM6Pl%u z?f(Vsx#w@RzvlHfIq~P0iR!(zba!^}d>)ph5U==O6#jpW{~q7p2>*tE?_}#C`47r} zHUBr3?!Wv0P3Auv{~JNW&DIjOkbjMf=U>D6&$j=7f1aJFrmc^qgRY#dqotGk^IUiZ zxM67j$FBcIm34M-cGGq-16WG_gYq9u{|)^YA-#VS;^E`r|4%~y(e*D>ajxh6{*V3t zo4NjKg>jc8nmE`0aH=F)TUAXy9NcR-WjX10KJdp~D8ZCEo|1t&omEcCnHKHCjh5s> zxe4gN;NEw$vP?L5FGF6_G>4z7+#psk{epXiBSTj5LPA>l@jhySMtCavF`_ImNp<6oU26BxRXg&bBs{{H~%A%Ov2{}0~(0{-vv zJTt@pGR5CV=YP-4e~5n7@4Bs|-#XRr!_3`QnXn~}QS*-d1WHz>v2G2%yYPC!`NED{OT1U4TRpAcsje=x34C zTJIduzZkNszo)~O&T089IZwa{tucA%+Vf~-*TC6bHp^sBuw4wqS&DMCc^roA(a%rX zV0|RmYR#nVsNi;bEUZoPJ9dbL-p@IltV{)+nGCw@EaknEp#vl+ysEZtPg55ip>!R< zby{q+beb-ehs=2LH%9(_+w`RKa?9;3FoE0p0_=wrTFq_3(V7n~hVE;PIzi_~oh#KG z%b*D{p|%1c(6OM2Tl?}^hI4yoboq43qSJK=N{2*VYlnn|wfuHESX7(L;rTL~wVuqM zDOr;UJ^AtU2>x1CyV+Y9_~!teGwEL;1{uI#2|=M6&Z>1qC65~y+5O+2tmX& zkzRL0zAlTo>hwxiK5vREEbg!3!-%pQ{-m~OV`*TJ?U3u0>76nbDtPPv4kxs$| zf>soe0sg{@z&`xK_0{`bp$khpf<&Jged5Ho;+a;IA-3{mR&z^#X>_U_h|JwqT9D|f z-+b2}u^AbepH?n^OUOo1Z({jD?N^2usa;ziz}`;alBhPGk7Rl3g4!z8^5o2jAH=cJ zC%&Nc2gJt_b9w2Q1bp)wmZjQUy{r%#yd&S6C?H2yBuG|^pli%5)tb|m!i%%{dsl-2 zXWefU1dTPz~z7piNT6uhf2{%cyz~3^7RG{;p3mQD^>CzJNC~Mdb)>ty5CC949GFl z3}K1%P(FstcUBqSd~CJ%X(%!(h{@W8b`>}p(w&=}3vueWFD+xNzsin4C+@g9n(x#I z`ZEiTrb{d?qP#LeOYGy}qSBIs(a}@EZEqbiha~)cKV4%Xw#ji~dyaif&M6M2C?g#% z@uL7^iQWBnx=UznE0IS(lP?X!0O)Ezi(GA`YZ_TIFRgC4d#7;SVR~Rd}ngr%RT$2}%>6PLPtCQK2f`@k$j+rp7a8Ox( z*4IPed4o%FgALt+Yr0EJ&{27Bt+uWH%V+eS@uR! zksy(osN6JNz>2)ag+gd$_phDrk?ijwNqE7RkOf}aa4MsPoUnc9M4@u|EN0VdF2rlU z;8suOh2=hSO< z`H+;ie_(H5MF8W+iO)ZG(gv%yIy{fsg8iq$s0L(mT+=tT&=gt78dm3t34ZH>u>il9 z-vTAHftL*T{%(g#&|zK0sq1u-&+%9{IhK7*Kw_6)_tu0V^x63`yKY zvaO79iA_2#O6*=&#>AW;GSj#+F3CHiQ~RVEydI&A9xQwm_Iq4+26#JH1X0 zY(|o;mOyUUSmPJpNopC9tiK{1moZNvg{>8IuH0@rii<-rB$(n;k944}$0Iw*`tnKZ z8rW+Ja}kBw|13O?>0Th7M|ECC@uJPFAGy`{!YV4NJacwZo7TF9nr09&q+=^l4AkPd z>?3AI-7pAaKE@(=!;jsOvHend&7iK`fhe~PpN$%!HXV~c0B9J;rKhvUNG=wYM{-3@ zk3E-{v#x8n-&Gg&cA|bGDBv=jZv}NPXr+MX&EOVIVQGmU_0Vo&M?~f7Jf;?;&04Tv zsKwy|!c>G7#|?*kJS+i+SBZy!gwTz1pRTRGQA915GW9`N{XHa1ydLC#@e}Mj=~sA{ zCUuJsT^N$g41(;6O!_9?okd9MmfU^2IzPJ>4XM^(H?OJ<-#h$x9aMzV+95 z0T6fXyrE%om{-da6p8m8NoBY<*u6=dobSH=_B}`mei6y}t3&wMWB}M5JSB_0BSYOF zFZteAmjbX39`1R$(%|#3-~=57Xn0;ID69;&uI#J-*_mGvWo4!oah8JObhJX^r$xZy zix(?pyWqXmhHHK36X#9K@^|;B&Qo}{l_(vmqd>W)%nO@qw^DSwclRNZ9UsdLluSE? zX1S&@G$_1FeRG1mksa(k_w4j_H+2B@;%6b)+kRB8oAQuob7?fHX2=pbdLSO8spz3v z?Eb8OrRZU?sGa!xIuiJDR>Ql_XOImv!c=rzTe&90K`2O~m_=Lq6HB9z+G9%Eb)iex zCiYov^nSeE>s)r~tjT6W;J*c~mrN%a5gRO+8fKdfPHJ{+U70-X1l}#LbvOsz zErTni9#}5?XVruV-B0lVI9sy$6}mSFe#bvro(1MQcr0=`VKCNp1ynKxvY|@x&ift z3A*-|fQaOvrCs(8xQ%oaEPVE*F}2!MI4Id_KTHfD#Kr3rBrILZGR{!uc4jPMmRo*`o5R?jN$!o z3ZH}4v3ZDuMRrCX0_7iHzq{*`>V6D%e+DY@NFj)^dHzfu5ap zlgIO{`ztj~I7AU;|Fd|(7F42|>nFLS!9NPkNMKm~CS z0czIhcpw!3LyMD`pot_3l?P0{6u2sWN z6dh7-B8T6J)@V(o+oHNVtXD_F#0fYJ=t^8bT-kXxWIU#PNwYQp4`q3)xw9i);h4QT zPLecRx`+q@gtwnSzIz4t__1s{wcBURnx=7!6631o6{q8TlO92LtwBdl?Gb?;tOOEo zlR-XP3F5QY!-|qK5;wirUUfkaM=K0jhJ9YQKI>sfBvQ8{8lWR%s3^3YD}W{UVI4(k z-H-0nZ|$x_>b_rUdr^#8>!q3CY5QbAt=Pe*G*G4F6-!|0!zf#w1^f1WjdMU;+&aF7 z__PEhM#F-fKq{4MPPhAR<@CI(sK@uRjQS)H5@+IqMSZt0w0X?z0I45?DdnzFIr=Wa zt{ZsG>pZ#}j*!hk_O8nr6<^G5%Q<46o%60U@7tX$KEYU@ZI~=o!$H|f-GOm)_g$IP zAG#=r1lTpn{pnBL(Lfv#zj*NHw98uSDO^CbCVnB)dt zRhj%8tX>Bs_zYt&pTZ{krE^c>bj0uhCWGQ>u)=6JA=4#XoEOq)lJ$M@X~o>W6piDKOsD zbqTPGK+1-DFji|?S4T~(9z(GGgX1!-B`oPxbk1?Xi!O?YZyMWvGME$WDt(K|&Ohq-W zBn90AINwrVeO7ech(bxCI!}&rX^4^`j=*%#iZ0R2BIP&TGFB%rW;TA_WVe)<&5NSP zgQDU@*QdK5PkCIg)?oYY_H^z11cdsPuK#&hdkToUIY)s*QxrE0hpbBz6V$d%;tdkS z%EYS>dquwjNSrj!f)0OIwJXVT5*xa}OI6cf>uw?Wo%tU(4DnV{KkO^6j2U0^c2g5V zKW*Z5jlX$3eR|{~ZfFxC%=Xzwg;tl6q$5R~FRwj%LA#+{NpUs~Y~r88kdP!}@1D&@ z@ec$iH?nXP08pyfwUI-f)WfWlC&`ea^-#6iM*W~|_J0g~ zF=Jd^BD|n5l+1T9b5$yG(H8tYp?hxcwWya)kW-=%F*TL^LFnxTWvx)cMkbx8@ggrD zN&VOyA3)4CQ~1lK8#R%Uc%y0V_YzZ)^I^Ib6WD!naa^d5&i9@f!7MCv=ljLP*4lR9 zp4i%mRMX34KhPExI2(}Ynq}mb)4BEl9*Q6;{H0LhGa<4!FxHTL)t~korhq^7dG*Ln zzjPSyGpoRsr-~K)ZozoTW^xTOZ7&6}C42eOCYrJMTN}-0YU3 zeq?8Utz}pe`~VZw?wQg;MOglAdpKF!SsVty?q}QK_Q0(njE9qJ%X2*hrIBk@)8cXM z>7l4!2cwr5JyzcoW^ht(hw7t=eV8G48xZDkhyHX9OhZ>EC~h=`jfEObhkcm*M?fIV zM!Y~2G>>9h)2Y$lIitT%E4-vH^c*~9Zz1QdH}%in7{H*9_1aFnVIGDYDMTmvIa}WD z1wC39stvTlQ^4FR?7)D!Hi9Gw95#|Du-SD>AyZ-<9@|uG++&l)VO(-1yMeI>!;%UzX$U|X4T;j;Z&;4)oXO;rAN(qZ7k&%o1X-Ews!0Hjr({W>LF-f9tu zDQv2^9kmJHW`;FQ@k+~#FfY7OaKs_-E1Z8 zm16Rl>VEp1v1p_xn>f}~bQ}L9@WOBvIL>-LsM}zwfQ8P94d}&SATp(q8j#oWI{7y5 zCdqurofgwabi=$`&*56cP^dms?!L`sf{?^B7Aokk*;Y~yEO)vI6Z3Z!zv*KzBQVo3 zbVZu{8j7;*KX2p>p{80#$g0%pDf4-uc(X*kK6+ysr*f@p;UAr#CrfY=jqMkY%~#>` zhdisD=ff}$6+zN5;(C^Z^)X$6Jadqg#C~d<>kh7mlb+8b^GB4m+1p+#-nt+Beav#|+nGWvD;}X75lnx9Y zmlbBnlmx3}JNqp!-&9#@DizlcsM4URjq~^EprOHp>H7xLObm1f&FbRyE>%Lq+RX8bAs-HxUni-7iX$i#c_*K2TrzMc{f|UeBiJF^sFt{HJ09|cI^jQ8IKrgY+n6Q?(`TZJV`f%Cc6?u_=0#E<>#)dX|(5o6$q|Un<FB#H&DWc}Y~TV}t;o8I6j~Xps!uOvHbUgll&S}bK*hrS3~$FR zHW~$Ei=Lflh66oVe7@Oc{pBD5`#BfL^{-0F41nYYs)ngUZ<>I4u(N+9E!E3jiI3Sx z@)!g`)&-s)*wuF)rTq0ot>!hem9=8^lnrTz5J;`idB|hN279u6NKlN=H8C~;DYSS< z0#?LYHczXk4^+e{XAzW~r(0B`YcOxpaafKN`zg$R@~I$PMr!eSg?uwewv3u}%)=Lt z;-g8h#VcUN$P>mc!kzswEq^D8Y#eCL;>gq+oHTxjMqtr+8a+Puy!s@_F24r2#;Ysc zfeFhkQH@+QApy_2h8`LBse>p>6bW2xx<7;FNw@T4u0?^mK$g z8YY1a^F;T}AeS31T?C24wiqUl`%4k4&9izGt63Kj@+?;^oYLX}2P!lo0@>)KJC;{| zH~rKT*tx|opPdiX13jTU8cGHt_^MI#+6DG@EhrQMYM%VhGfHGjL!g)W7@B@49nYX6EBFbiT&oVIXmSm^C}E zSlrlCTY4SwSrjb^Hip>;lB|3PfBPeXv*9&xrm9|cIzB2YI7a3AZF3)S5XSns5Ey>& zn7iKMPKGP)SZt>C8_eCSnh#Hq826d`j`KluJdTKRebw(!&rsO7)s=E(On7J|4IDIp zj$OCDAcQx;6YYN$xx6CAb=z=f{YQN`Dsf_m3x`_Q7KMhDCJKBR3MG?aH6&Es*zZU#Uc7$Y){H=a8INcA>RVkv0=10vbQl6c1cenX&r#$e z-?-Zbo88&KH)GBH4asi4N%1u6b4`~Lnn4Uws<*dOQIZ7K*W6=KV>@r_H`#)_AFt}% zdm~Gcvr@IHVVjbMrXe@3hsT z`fyDc!F3_=QbizlBFZKqlOVb{NF1Ms%$QoWlo~8P@0#nBUD3SF%S{!X%%oTDlKzb# zSy#goHzqs#XP?e#adt8iO#dLdM?-Va9R7ZuQRgukc-^$3rARqwm5nrDX-HtxMva3G z3||xwUyRG)AmD3UZ-l~3RsVx?{d*ilBtnO?t|;b;GkTs_xp6CVFC5>}mqQv%qdG5N zQCUsnU^lq zSeu+~-cXI>ZFXY0YLv436r(hGyv;svd}$JoDNok@h}^zjr%Zj@J zsJ-#AclIdzcLZhOHS*~Ka?piPP`}kWlF4kC3F-`V!49LDLBn5z0Zqpr3CBqz8K&M^ zMOlK9v(A#Eo>LuQQt2>aOV0_C-wt+Tr6{_Is}u9@o%4kG#5Mk$XzcGEYe7v}arS1@ ze%T+KU)I@V;*EtV>`m|GfqzhWY(yvh;m#;EXl-}=(Vg18ms0!r=ugQK!WE4 zjK$NGs+fgEX`cDb>v97kNV&y*6ZF__qA4$LR+R|+n8h_oHVb9g&BJnp_Fd{|gj11t zT)vR-`3=L17<;dH<}-0pQ%ghTL-~4fr9gS8;@hxm(D1`hK+dol)yux>QqwIl7M{*n zrktJBZ|i1WxO^c#e@Nm6`uiEz;Uc(Vg?&lnFE>r}`-vl1t-N{4;`|7E3vNcqx)-ds z(HC4r46L-jVFDw0%!B%F>M0u}Ed1B8{70`@cEV4R@=fC)!{zQVh{g>P+$wC#sG{q% z#uElCkt6XT0XZQ}lTR&vV~+FfeEZ!45D;KEf==Sa#Y(~B+bchHWpu?3-vN#i8CRwN z@NUYA`k`})RIv9f8B~F@*d$ZhEO@Q6FdYFthAIqozPcsD+AVE!Q%wLnK1IY1eU zG&2yW(+97>IeEuGK5T*OXIKghWB1vAF<1&Ji(M-P?(9FCv;G>zF0TSZ>5drN_Zx^X zIAq13^3*C5+9RB;W{M4=8n23}|){na~r{0Y!(1OCBkAhc6WiRT zSv5>i^UAV=BSwW5zz17qB~4-TNQ}Yo@1{}ntHQQ)R^2qjM#3^&w=rE4dY7TI7Hl7@ z1=Q0hgw5HmhgG&WnIKcd1;fonrZHG+HPL>ot~vTtlD*ZmoIyW!IGkOr3w;?4$#_EO zxC9-1Wmkvg&v6ZJj^zI=wGbfkI?^qp^Y+3ytxf`LF=Ep0`W45fqNpZWQN+u~*}M9EMl3~ISMAEhN;TX|T(-qxZP+sCt+6RNII{!c zY~S`(`a!+M*#g_u%T(w$tP{M*7Ta^@RC^P9Sh(%A7-G{GiUDGOspxJeYo3Sd_0zeP z!@~P9XP1pODWk7*5dg6ndfS7ffsGWc)~)j~PzO4vTa!+mo1fsH(~E*n(a2(`uv{l$ z)KBVy^y-bwFB{fhVS(}@OJ5*aeDMi)_=-L}vTNG0wPi-~{k+_9jg$B-WY{%ed*Uwrt z_*#Y$f(9AKgJ-zO#zn{D!FNIvn>8p8b5g!Rqa#lf{Vnp5Qe8+@d2-PL^jS3!;}o zUIlrDivCS5k-s8sw*j_^O#&<+OlQoCsK-jn!^X%5Fxt#c_*ZJcxH%jWePGnm+In-A z`%nfKE1vZ!nfsCC(|hl|3Ng@rAo>bb#~Z7$aSNCaD5rfz*xv9f(EDt|`s{2a6f?f~ZL)hq_)7)m0;Rza>4&1KhoQsZX@9OG0kQ6C)f#4qn15dRPs_cW&U;NFoy-{N&H|Gxbzo-H$z%V~L`%`Vh{S4Ynra5i|gYjGD&6!r% zxoqkFl+gW84xRQ89CZ}aUR8Ug6AoU?gcdV};ywyS%l$qvc+@*+{AXol)zI9mx9CLU zMcfoW{yZ$CHBghe6F>HwnMkKvw^s@Zh2<(lqAQ8N4ujqH6p5vpR%BYQ5B<)!1I3M$ z-n?XCR*CpTnA?|H^H-RXfzs4czcKq$~e6xAx@Mv z@TS*kwc1=@x1NNBMDKg?b`67LP)j(+VvHQ-B_#L90qbbG1d4rJ7?xh~Tk>?WPtWMq_r*c=@p9 zI?XGqt=@K2#U=OB*FPrf&bG6{E3Gb5#emy_10pv`>}I>`8c*dxS`ee-`DK3)DvUKN z2b^*|0#O#-<#s;)=je?E2_#p!6jW)*MZn^NHR)eFUF^ME3HxR$=;J zTbhRCBFwu)BdIj|?ll6l)cWp2Kr}CT?BA;y3s2$ftql?O)3^MciovNN3p)uWgR&-Y z-6wm*od&CqsI7rV1&#%7xxSH8^~k7a!= zg2Y?5!Mws>z%aLnH!M!SORD&wLxZL3c1pKiV|x6$G3W1dYl`f09Psq}hsRUkyd!u4 zmUrS#X8b)-9x;#u89Ft~;C27uYJ#oS(|d|*2=u4ReP#Gj1+?FX^!UZjPuQx*Z)7#9 zY18%8IZSyBZtxY@6Xg8k0hFO*JmNYbexdqzhzu5Kogrg&HKg*)r=l?dn6xs5u(Y%ax*4N>QveezgC%(RTg-WnM?pB zQem##EmCC=zHQuJRDnIK=BC3BlaWU&lip5lDp8Ru;I0gX=(xBU{x#TPRpCany)8{ zq>8W++CDk{L+BE)Zu-WSsjEU3HIhPezzO?yUB~{cPlGzKR&-$vIfCiS2{9l#qjSi7 zaBBr1Hm?vfhMjFG$HUT;kX`Z%Dm|C4`mZEh?gI?ax43RffP+wm74z~YWn>yvD@D&9 zx7^x92yp@Zy#$0Gz1>=DB}MtDtI%A;HBFrs@w)knK2@xsM2mj&$nUJL_cbTaS+AYw z{TH!E4|<_!n8?!IZU`*BaukUvxH03%)@S0~N7A@-6z#<~ zxV(_RN6NZ#``)Kd)Gn8ML_;jr5R$YI^W)OpAZ1U|(QV;S7f-fs&}6eA(QQXG;W3)& z=>YnEBirySOmqB5OYhEU0B%yeCBO$|M1C*#(>#iEva;tuu6p|gq&(SsO=L6$PO*Ao zBBF;YwC%p=;KaW*OBi|DHA+;FArCY#18J{?#<<;>0EDD7A7c+KN49y66ofcnpnq^$9OY_6=N7HG3tu$th_NqzXuI)B7 zXq#&I(`PaC2&B1b)KE6ro6<1=GTaqj-XY|a0M!6QzJlx<;`q>cq!t&9*NegQ)Gq^v zt&)d?dQ%s|&W!Nuytja|66j2(TTx@W%wBl|*c;{aNS@))w zu@9Q>%s+RzF7b?p5!vp<3ClR1W^X2a8`@uvD)TjwKEjs$o-A|rE*y342KcGI9hG1D zEyS(qU`ivlDVgtPqk>G9B;_ppm$qY6?-@@B&I@`m1rK1@hNh*_H!`;=R~rYn@tL`< zSoXvc*X9f1B^l{7dzPV8$GY$CMYV11YpTc4O&`WYTUIylt#58DJtGV9b&S9NZD8uY za!iw$MZ1w|gBC8wM}Fbx*6E?_51jjb(S#_TrE_8x>`%Lq2&w#9F~IW?R|1wi%P`yTRsfZXnBk z89h4g5_-Du99Fxc!AMt}26i3+-(@4Gi{itmu2bC4wnH!W%ToFAT4N+}Xs$b;t7ZfyR_trUMy zcrJ9d{4@UY+ibxn!5?@ZboB7+j2@s2o#%y8tGHxM1v%tQ@25Eg(QtPbfUI2+=;|>X zBK69>wFJmRX`$b%hNI>hfMFF60oxs)>=o)|v0g81#VHoN#TBMl*jRGcvamOVux-Y@ zopYlt30&^g9&Z4Lvw5*9CX_7uquImPd?DlRqFhBh5Ktt{;LiP}wMwQ~KP)QxPK^t# zBe-ll)P1U~GS^rS|3y*pNqU~!$Z<;CajpZB#3}ktTYZw3jfIbKPPZa8qtZzUr9aY_ zzOz(%YrNaKU*(a!12Nq#TmT1ACoBR4JChPb){s5gP?t6hWY>2+R#9-j0E7>rlxO}S zv?;8?k?*=f=t)6#Ewq~Lq2#zaTJ)021RAJGXtMWs5~vR(p_#{eNj~|NKAtA-wV2(Z zIeRqwrCE}549lqn*S6$}6 zYEj8f(+p89qQlGivBqLzt%LQE&*s7EWm?f|Lw1vzZF?!$7zE*ue54~GePc);Drp-n z3U2JwV#@^7P6``B0nKp#cfO>K@C(iT8W|r z1jZN_kb{cYXA==koX+a+AJDF>gOt&@Iw!pw-dcYGMm_j_s1`ITTJ7+nOzvVR$2#v_7=%=4j4rg?Pi-D=j9ul+*@3)!|$;Ar6i6)YlyL z5RTgz^-k|^vyx$UM~(>N!z;xI-QAudaq&GD*yro3TP{1e$#y=AvsJ zo*2P)WnQE0*(jy0DJD~2+JdVGCob^>mjw3dK7>jBQGCs%yz@&1$-E$zMPXWX&}k-X z+rP0)iGh+eHrH^Z{PfO2(F@m*=LLX;^~@9y`E?{FhG#^O=;cshbfm;0g-we2lk}) zzGhLiU;Z-uMhgcm^xCO0SVxQjY2V|V$!o9Ibe7eY?Mx_7i-F&qA&h0cJeA#NCGn~@ zq3n8Joqn4mt`OQVU-IyX5ZOl2hf8T$lzv@a&x$#+mMS1PM=;-ghxA2%bFR19O$Hrn zGv7}4jk9bVF-PfEw$Nty9TsiR_Wn~`@t!DZhQp`PZ$BBQ8&q;%s}&7K|4}uTpA^Ji zl&5wK_foEOQ3*_TMa^LTvh`$*o4bwKu$XtQR*z_bGxy%puZ1Pp$K>PW>)7ivY$g|r zx(|0?_VZg&qS!I?f~A6@$gtBC0BV>)KCQT zt1CqTqA6Z(>C?V$0NF*-OP#(s{m70<^{CrR{>cV+7RQlDsO|MVZNuB|%j7z>{8TU8P4} zjVd1c`6@9lAx^Qzz#_HUAkv=O4o3$C5?pcYul-_i_yQ8GKMrscfVUmU&J|I=w6~>~ z>|q_WIiJ6Ng{_atvFa=(s!;qJbKGFsPsrVJZn-kF+JQ|^kbAVXw(8z=MPOVh-G8g#*GMhw>fow3shG#K|OcCybd1i_UAXa-J$~x}phBCdHbWq4`Y_^q(^9pg(m zQ#W~Zuk%qyaR8-97>t0ajcb{e_UQTwAquX|jReDQ%GSw;H7z zAT2(J29=qShI2iC{ZxoIVB(Y%9R@nXy3WQ=WADOGNhI zG&!67Rm4-Rw3`>zh86ebeZnOSZa1`6J!cYYuR7@&Rk|E4jj5|pX60+4Uuc!uh(zM6 zXz)ac;Huwl)c{a}F=Ur-y>i32K6hy!5CwNUnbI%Rew0SmA|iXc&LDd7jyb<0l<-^48%(UhZ&flL99$?pnY=EZ)leDU?mu{JsLLamZaI|)lJuR3KOqBQ_OdQ7O9 zYTwMY;hVECrq3Orcu5ZF!Xuid5MIxRnER6)mN#0f@YZfdVVxjR2vO(t#k-O$-PuyO z%CiKEuscV#u-o_&G+dDtnS|DD#wH+`rwo-tS%aNY#r1unw<@E3S`xLhy4 zbvao}Qq`r0aVhY+n^5e?9B#cBW-9r75s*Y30Xl2M_>l>S&DyGLvt)l!b=;gVRO^vi zH2k2iEUOLhNg?>+dN(7?U%QVK$2W79BXPVSb%t9?e^)eYx)0bW;2jouN3x2w{tInH zAqS=Ut_fto!W=wRh45t~+N9!hM+pPMYqON@Q-)K`lJS|i)0ifk&;)NKD#Nd6$O*EK zAi?AX7anD_hWCp?`^=rw@Z_&v#`z)}QR%8Tmb30{Q_;;$qR@u-Q^kX)K@Pp4^s2@D?(A<30ROiL>bWC` zfXFeDZ|atDv{afbSQ~U8TPiuh>if}ZtR=s33sI+H*C|h}v??FJfx?;Xn;nbF?|9_o z5oET5tL(BgJN`c}nH`Q4^h-Gid3OX9_>$0xXCQBKnz34_zM{$1e3f;5som>ldSwaZ zNs0797$i3l?PWQ7Ynbv2ouTbl+^Y<`OG}jxFUg|ly1++*@%Y}ltca94F(ZtF>B8T! zvSR{zu6RE}pSs$;!7Q?z3*+y*S+I^!Rfgc2Pw$9Y!(NZEm8D}l%bsTNFco*^Yo-#1 z65XVX<5@c&HT8=TS-$@Hl~_M!+;0H-T73s!K)`U?#$a(J;Ci2>#xB;`P$yA~9#hM; zNHlmuWonwH0f!~%(qlN6@Du~?f>WT2CdH^!*2Ig}^mBw?yh=*g1hs+ikY>EY ziKU6}_54@s-$hTVtyG{Jlqh~&^-4vehs4*C8yO}Hz1Cfa4f6YcGG@M5MTBR*{cQCU zSrjLGk>0vWRi}R{bU^Unm${8lvsq1Rd98rkGEkCwXck~8K$JuU2v-olOq!m=-<0b? zDWy@1>_M?lrSId;GOrZUJZJVN=ZiAC~`As*pNfkp^36BTk;SHwz z4YQ66RoPMp!qL5Dr-Sib|wNFm_7df~y*S#0C82PZoz0PgblZ>G9$o(}@KnV%;6N>sa z6Lu&h`E!wJau<6%>7Ncv2|!rbw*No>3t*P4yQAR9Lux3v)^WtujIB{nY8n+f!q{BezXi<*r$ywj}*1B@o#5M`7Cx?guoR6{ij&Z4Uo z${4q$Wqk}+O5(*|5doIdifjq*y#}xoE9_t+9$ zGwUj~eE}&}r~1T`;?c9^k=J2OrDa3QN2Y{r3Ll&wZW~@izLeSz2R+g zj0e_*m*U=G@W&1PBLuk1HmjylX;s32nk(apMS4NY&eS?ZQ?+pei{H6Dh=D9w`Zj{d zQO%#Q5VkxIDM=PaT~Vp!xF7~E?3@)p*o28*pMN+em+GNU>*E-E1)RcsSd5ft5vxVO zkpu=$e`bD}?;yB}+=DJ`xF3x@1eGTNg!_9;Bh3%LpBgION9W9WMSQtsjU1q#Dl;B; zQ{WyVwV|Y{Mdw_kCm=~xHGt7hA1KY#mKrrM-_ouQ>;)9lzd*d*Z@Fv$(q@xkyB*k* zH(#Z0*{u{WE!6T>NSl!*@^Bj?rviTayzbkR^iCKOVO|PdPbO5;$H0F-qbw`5ji11) zGlFj(Bp#P3%EK_8Tkg}YnmEGa<>2xzKQ{7ujMLx<@dFXB7lZ9fRwcXl1p}F4eS)bN zF}<%Q^(YvUUhtAI@d_t{#`cX^08Kb@XAFhHcG}lEq0w0b+v=i;>xh0B2IsSn4U`b& zKAFjw`81&mqUsT%nkhtHj$eQhm-X_;6@YKm`e4-?u;(S!1)O0|cs6Dz7nF_i9j~BM zl+a1pvU%EOe<(8PmY@GMK8pTb_k0XVqeUj67krd0et-RLn~mbxf@#iSc_EJw7uYT< zRMm+q@RKlxf(AMsrW!a(h$td7PJTL)jQ<0RRjEdOL{4GO)+Eod*-LUKmr6SshL6>j zW*7U(3vyq`(zoeF4^*&%)hu2mF7&G}O{+V|DIVqXI(8<2j@B}T3mYX z1xPK=_tQq8S71}1k-`YHH6Uf|eE5#k)^ngnzgG(PbD|w%%C81PRr()3fx%(S_}0UD z1f^9|ZaN2JB5(eTbi6D=ZF1T)IVPa6E6t^mO?5@$p=49!jXQ*+Ai&7MW#rb?dG&<} z4gPnaxsvn)t-V(Ctg$}v%fhID93H?g}t{8^(JmBUQ~GcL4PwBauM>O++yD%sh*8;B)~ZFyC{j~4KI zHDU4x`h6m83W`o@VHah{A-QfWj=BGXF_865nu%mJH2GEKlOey^2mB)Jj|?AqT`Pt9X%oEBF5cbwG;0&~W;29_aWI8j}uv5Oh+iqng@6JFrQkUGQqthtF$@?|b4l zzHKbtO*v%xwgjRs^+D<}H)&`SmWeIOcR6t~4LZb>HsivSblR2lX*cObC?7<*1~b2+cjbm=ZRU{- zP!K6IhSd2<48LX+a_}CZ7yVhP#+Leqp3-|1lE+5s(I94{z-n}8vlS!Q@cuzL@W)hg z(c6R!u&opPVCVgnhU6&xyo9vyWo*A+Auj9i23zzID@2I4@PSFtGru7xE{I5vgta~T z*q$thAKF+#K*sWt_|DrEenBF5(Lgr{uNs?HsCI}CiD1c^t$?A-rMT1fqUPMF!~Dot zLSO8$77T3xAQ&{P#5}4qLFh(lY=pxu{FIDOt^sQn z4%BXperpD6>t*gqZdTfm|A8lvBV!ac(iidm^tByudIQACGUHwf6sM!Uu;YA zl1%Ke&h`EFHCC-H+}0GSAo7!nd-r4m>2+@}voHqwW+2^_<B_xVl5^+MQJYO&EW$r~~@1qKWgzaY!R(U*bMTat$dVuX-8TS^@57J^1x za)q~~B5j`yl=%zBVy)UiCb(>Y`07=qQQDI#Em|r9E0R7iYZl5M#>wX)c&Dq%Apx(% zZLQoz`aE7ZilA!L;R0t~QTPl93{;721tok}lGL`S55}@>65kG;Hp~w0{hKt5y#y3# zFDbjq5Kq6l`kCF`o&oHC^3r6ayKviHs&uNEVCl{jwj0u^X8^;RaZOP7t4UHH{z%qr zw1DjO=QbrhO^Hm?;!)$YwadrpHjnA2>oA56CX+I*fyPbupGnDAgZ9ilGpM@KlC?%f zdx{5wkWHy*Rc4cQf#R1&g&3%Hqpc|V=R!PHlz}$8;@2|I4p2RlqQ8dvD!%%}7i=Dn z{N)vr5?#+63kJFGp!c5BB`qe*zdF;asV1JXB9wy7eu2ab&4NJ{Q z>BOeER(7hHoMRGs2GaIfQhx1!pesWSUlT)+2@4_(;oF%{-GERto2<(&@pBtcsV~Q_ zp2cIYlR~S$RaqEKFVUd!dc`Z~%PDwicCIOSm+Fyp7O9L6DAM@mT7H>J9XA6Zz@Eip9c0jw+956p(5_8P$JJ@X zZ&ZvcOm8QO=kH9cOtC$68oFIsRjs1FAWVx~idwL#P@7ww-GX7y{j)ig|IiQ)L$w8t zy4Yw#&2;_wbRJKCuvtzG-GGTzTOI=st%B*;BF+mM>5IN$G*O)7E1j;+85iOn!BwLd zq~whqF1D4wG~0AygEi-p9l>+oe)}4~a~nBic{KU<;;6~5v%F&-o$<_Y+B1NCN?x^O zyDE|$GjmFGX@sO;%G{EpXbVQ;XGi%Yancl;KYPl*$WWrsL8T9))Q~^!q7Lg?eyK}l z-Q2Agk8MZXh||f4ti4@V>j*#Y#?(cU6q_PqdsNSWiZ!i!95D5EY{FJ(s@Y`ir_q!%aQXp0*xudmM;*qmDOh@Z&;1;6>PmeMXN7m4aqZ?=lzJ(z!~f{R{j~* zx*S{gbGxRvHM=aYe)W<=&%HE@BYycBdB@yyrS*-0jtpRTEADc#gVlDjfrv61&*B96{hT01y!_4 zqOwCFQVvisiGX>dWZTF^FqXt~tWv*(U;9LnQ9qa=PQ&q_l*RaE#ry%+plBFJUPv@2 zR0gO=E8FF`b-&!g_q*Day_J+U3TM`oo(|Mu12PPJ8f<&=s^h6Nr*pH3x+LcYJ`$VI z0iJ%9Y$j7S12@5B(lK+eWv9tAZj#5nEOUT;vM51@rMtDlO1XJBB~Z;I6gmx`6)nyS zxQL;RqA)aKOf+Jr`mp8pN#Bny6BSY&4|ak|9l@y9v$}jJi#A1J9+3K7>MvAeNli+NEMic7C6S~TW> zh}uK9tK4XWqL6i^Oj_0D{T_yi*Iw-88?Pyqu6FF-Hug4MQ}BYkZa#e8_9?FhsuOnNf58;fL-~Cf7z)p^GGr3 z$Jrz$-|1x36|8{YkEonWNm`Qi6RFwOBWwI3Rr;4f3D`{-CsWV+t&Q-x9 zRL7k_*;h>+s;OOBQzR6o#T>L%d%MwHC!irHrl^uhR}p3jMX|=1P+Mh;X6FE%4JVXc zSLc4SfxQ}e*D#eGJ9mqk7hMcOpS@E2+*bFyMXOS5ZDD6qI~=e}_&PrD`t3^&rLl@G zuKBFf$uhd+4S4HUuAfo;0q`;C@iMnUa1*%b^}5M+GUO7sh7Cn&DL9Cz=#mLlS2cYg zeU61PF;JbFPUWdFlo-uarSP;}YE)?w^Q4pHSxU_pjmwS51eebFXGil5kO1MI-ay;T}1CD^!HQ}5dE)(&G55s2vC;B=mMIXNnh5{A#V^s zu<2=V-b^_F- zXpoCI!9Yh8ScgSKsw*nqevR9(%`qbQMk7YPi>SObM3aAFt~xELc~xz$v7$!DjeG@R zhMSls9hHm7#W!D*9-{Khqnwolgw}F^RHCHWs&7>$FvZRU-3hY+p+Q_F(QLq)ppI73 zkaY#5TJ_RMDaX}}o4qw|2A$b*HxDyQfbdmM;VGeN);}&m8Ex`@fCTm98LG;t-i)zg^n#7o)j6PX zQ&K$sY`-X><^JevnVz%Ma!x42*GcBKwZ0f<7&W^ddcfp95n39()>({R=56{C$8Gj| zO@}cLaNL6!$E2o&4O4pcleqZTe3}#mxrne%mIj50gKgIBu?Dy)aF#uH2@XGMWF(1 z&^L(TSgER(0-T&CHW0#P3umCxP)**Y{3YJ_9qxO;)@bR0gj2(O=4(A>05;*UBHOENofS?52O#6P@RFOCzGT~zdetI@6 zESFB(S~gC}h6hJTvt~8#(j~txGBqr14so4NZ4uho_VQD^ygwCew5XR2^uVL_5RG^6 z1NO=2@%2hcr_Y~{e#VM0Cu z#@j~=ng@_zB=}AKnY`*&t%y?)QNXB-Oy4<@W5{mAm!b z#|ai3g1g;Ywh-oyEzCJz`XD(Psv!wcrozP!urymN!wv%_<^XHQkI z#UMy8#1I)5I?|za#8(9$%d{VGlpgM!o3??FY-TN8&~@zxUr3!xQJ{9@tQcUo`x7)-MTK(K(t5mPCe#^_h0Nr4_L|=yO3MM zlK)}TV8&vM7t4;@*156u8?n&|pGAXvL;iSmU0_R}tyzl~y4fq1aZWq$qVbMVV*TLs ziq{jXr$HK_U@k}foKo5SG(f?f##@vIw@jCHHMYh{%&3#}vtAQMD%U-QmNZpIo1f|vkp9}aRxW$1ah&*31=4Ulr8I$KJ*?TtfIZP^*VYNqks{+IHt`RbvxH>a67NR z*3CKMC^zT8<%}gZ-nYt6`iRapgc)rsAt&ec+!Sl&?!DBoqKyUw`i?v9bXzXI$jv^S z@>{vW?V*B?qZ0&kDC|uqgX;QXy}n{*4#O6 z7oA+!|MoX-;gW;hg8LoghDNAxW-N*vl1OujXi<+GqYe4Sc1XT13HEI0tr1c$>_g+- ze$%aP?PZs_Iiy^2(uq{yZi_QZoM&*-ZHUlMWOTel5xR53UGCZ&u6ML2yJe@I>}JiI z>+#?NM_#HHgsSJYAz5s8=tM8Of$xiyT}t&8`H>CG0uYW7TW`9>t-1C(b~^N!d$_T! z+v$&loxHQAh#t4;9p?v(cWm1>cgsyTv)N(yI^K;gqC%2%diQO@hy!ahXjb&hl{g$4 zp5?YtL3`6xS2NJTM;y*Y?$}n^#>52{eOzqCq%rZfB-~rBzkz*M5`S}+?a!FWhn=$-WaB2fA{JTr|2|9Q5SwZv=d!#nX$xr7SBh}MC~1Py zuY6zfj^-*h9MJW}BP_y4iDYpGPL0vyMkKQFmy96SIz9w3aQ@NszPjkd$q+f}JQ*v* zg-2Uo>wFIM?i;j@68?nDqQY^@uP$=SANOdt^8P2g(fRXuc8aYe9=r3KXTvKQlSkuK z5t~PZ{5es6Puj>K)d>Iw7IeYa+tE2@bhg{IeY?Bq{9m~n|Lrqw;c2IGo&c&H-b3E- z#rZ#UxidtC)aD=4c%S?*xB5|My19!N@$6JYiK%d89wSnzK+p_2R-`%>WqRMu@R)&+ zc>?D(?%7Xq3zjc)V>@=H1y_t88{R*@r*g)ID8%s_lZ}%%Q76LCNp!T4Fw;6lV_Wl! z3*67&{$982xa0UFjG19@F9o8k1ylN1V>We^W~0_!bg^4<{BiE2SHHw9T6wS^?-ZpA{(%SP&Csl zVrwkHq*>b0C5zp<%dc=$8oM(-{I_m@D$I88pqX^iHEowXL3~Cc4WI){F6)wz_e|fJ zUfRBN)d0u1wZFaGef{-saf``n{*kNQ?z^^dajBh}LSg%k(2U-uE3bCMl6%y9-|Chf zdk=s0fc6vqTsAm2h;`W5j(bFGkSgZ|)&iQ_ksMcX@CVwuE3a|ifAt$2=DYVl`Y5-P z{)ii*t2}TPcR)>ikpz1q$>B-I_ud7Jf~YlufHxW`K-J96YsXk^koYAXZAIIxO{YyO zJ8=Ow>P)1KeYi{At7#2j;4k&(pE%}O+w<&#~r>=O!C&T}j9I`dhSQwCO z;8fLsMF8H;>m@+tTgjs=1daVtk`Y%B{Te9DIKM0Sn@M2!x1@N@sEsQ#XFr?R!EM{8MdpjOK zLkzjuOBcJP_dM3EJoSEV^YEs<84kdnJwcL|+t0yx{L+LZ}Kz`s;Jn{5fvJxj%Ks{l8bcV;=iR zck{)Ux*L9Up4)QWjeaJRHWW@_Je;t-V@j&e;iO*~cro6g16HtMt}+?NfiEJ`nw#iS z@I934+=ExR6(`@<9r?(Ia`E%^CqLKCKjs)eGevs*lO@Ip0`z$XZodWY_KPlY_kPI> z+=lf^*DKa3$8iucxjx(%)F zQyT>`{@|H&$boM8iT8F#KlTy)2h302`w@55*S_VJ9d#tlKyFUP>w|bO!1cFC#_e8; z-e~AkZ}4vrM`ztAfonatGr+7{nbTRJNmrBC1PZ1>R})u)G;SrYKtn50C7rk*)qHA# z%n$mSs3wRgX|7Ss4ICTVi$_Gtu(Pg5R8fk0w(?kQdIb|R)x}Na+kh1S*e(O}zTOYu zz8_kZ*lQ{!49GZ^Aif{oVaBF9E_B?_chDpV+wjE&K2VaaK0v@f!{j(2E=LUoqL#}+ zK^KY9h105Ta_5at*$)wpUU;NI43J{UHIOQ zxt%xN;N~7pmo(|#IK6F=LsiK6j8Z*k=5vW$`P_s%q!~HzfIwxikQ%p>H&U=49O;0( z{kJ#JEa66X`X@f%w$f$ni(daGxA1|dQ?cPswjPaaHDCxjj2YJRFLOt};<;|s>8HA% zz3YQ+(=UGE=HKT8x~x0f`^4Ns7TEsCfRpgec(TZCql;IdEQ2G@MnT6|!3bS?32Y^; zS|}j4Uvw4Cu-xSy@tIHXJyYL%?u*=#2R)E3QPMqu7^8py4+jjyVtrUGK?wb!^Csr?84`Vlveisvsr={a-)zOSE+17t9k+(Orno%Y$yzxk~@ z>^V<&r~Ubh+<71Rxck|E{%NgsTdJK(sZ-6zj_x?6F?YQKF$92s-y#uYxJTd%v`t$65z+{54T z26xe?zTkfPv43?7$zuNU1Ni<{exM|JG&h=Jls&@WWITF&+5wuM!0;pWEed#m0<<4~uce9@HmoIboeCiY2 z*Ix1(xA~IG+$h~9!!zp2C2vZ)RpPltA#QF$eYPr^7KOo~08|p`<7`PEWh$0xMs;YU z=aftvWA)fz(Ju2xH;En2Ex{~xOAITZnm7|=-O5q73Pv?iO%MUnJfk>m;5gfQ&m+tW zNVTw;O-;{XN$UTnNyHuzU2xPJJ5dMYL>2;g8NDlIY^or+UEZ%!^E*N8s|FWU#{cbp8Pd$k}hN-XFGbU7mo<$qs4dMsB!>K z1~_4hQZ^j&w`4}RumAGDk< z@$L?2>?qIyikzwV99cNuo${&|y9+-0Z*I#~*SWce9YRG5PG=M#<`i78;sSwuISJ~Q z*2>(wc%Zy^#OyURrA0#LdW;tXU;E>8-IKoZId|Q;KX+HW>mzQ#=_iIu?G+k|5^RMS zh5UBizTQ3jpWf>({?zB)nt%U{TYTn296zi;fy53&1h-No#awvoo)(V6$?;pH1r0Cu zasUaAH}d%fE$f&<@vG8j-7LBnb(ro=yyU!}yBB}?vwVs3hp&6HJMhF4=pM+e34bvT zFbEH~Bdq)NrS2Ku`X6`MSH9_f@WGF{V^6=o+kX2xKda1UlnIZ^Z%A&c9DI|;Bnh(s zeF$XZgOkt>hKaetW54KIDOgSrxEFOcJv4Lm`4_rpfBNHY+lCG9i!XhxTXozqe2*$` znBbPjz{4VIes{Th-j_b(Zl>ARZ@%$e?g*Mq-*)Tm{sAj?ptp1|RT8R|V=Gm;sW3bF z(td$s8@BJ91D3gKX}nMQ$M?Gt+SXtAqnElvk3WX*x#s<+6p`ZL;i4OVdzpLo=RUzR zj$eMoU%Ay`ym;WP%Q#EWyeW%{UP9~xEepm>f56Q<=m2-^FD`VC`P(42}ar!jUdap5Axd5HC~%t zl19?W!YQ5B)Wk}ln%X68*Nu>_j9+YV49BA7ZNn13WKEwJu3r-2cse?ZM*m($WxYCv zG$L1uGDfBE(kf$=r72#!OL{*Ifw>R`8fGvC5H0%2aK$9_;QKkC;7tCAkuKM;5+{#nvK@!~UMa6$SS*AnfY*2J=KL31o^b4Np zHs5}SyAp-tL#c42nVY2O3b_M9(nG$!?=!FR55`!Dkes+F&dMYLY8kZ!TOhO=`yU=E zID#IV`SpK((H(T(d-2Q?Klq^yv-Yexba|c%#}nw%?M^B(zfXnZ(e#kaHoA1HXS8_R zAXfyBYqa%C^dduFWTm#qXq_!-Ji#Nl@W&-)r?ykEw_?r$_e+{JTy~Em`2in(umUmF zqI*MhyU98#98Z4kGx^>+6ppLzeZ1Rp%^JQ$%x-Ytys6Q$##M+m{X}(qFLxLVw(r&( zZgK~$I@F!}`ggef4qD+0z^m4@K1hOl1UFORc=W^0pnH@TyYEurc<@n2xGi+4S}yTV zG|&G0>GRi%H=-Z2i<@bipji9{-RC(nZ=Sp76VGxRY1`o;#fdJwi8Bzr*;7@)x*(!~ zk(;~}f*!9DH#aj3bi<-G+z$JP=;K;qMnOxX5rce^*hxnL>a3I)P37V>N}!sVSLoJp zOT)sER0>BpvKPHI4XYdrjy|E@#be>b(Fi(0#b84 zkI_REGSh*$Qsh<#r|tu6v?O4`MIQOmMTc!U_dZ9vn?L;(zBlmTCp^aOxM?k4w$yPo z*3j$`y14J$@?(#t@m|XX=NLU)g-e}ni^kA)xxCgF<3L`_t0I#vc>89u%GG<}YnbL9 zvC>`sqo2C%^p!40{_!8U^=sDfES=cOTH^367$jVApL@EE^wc&l^e_o#y5b)d;xvit zw*42J<-AEMBMTR}wd?P2Ti0)JtIjyx-M(W>alB$bOkd+fcVW9jAAEne`L^2~?fv|K zmFUO47D6Kc1Whj(i7q;{H}HADA9}Qat4%lG>JFhl0I{zQ(;qw&S@P65vtoJ$VL{Y5 zwg}uc+YG$WjY#-xG<-f9<I(+~PV0E&Yx|H^2u-cjJME=DZMxJ_dJP^8Vtj&1s*+41^j!CJ?rG2?L~sAPMO~5v zDNfn;@JRq#IvP8)b7b7GKf02>#Dr$GcHDKBKX7Zm0(_jY3ShBcuhIzbP+`Mj+m@jTVDsY_s;Ejp%hV1`(y zgvzzVAY>&uP8vAj(j8-NCp}m&f5mdQ^Y&Z)Y^%c5O^gZO{5eYZa_*q-u;eeuRrk>8 zeM7f_k@p3+NiO<)T^x%TY2HLeYs6s2q`;uF);bQKhMQ#`V=))o;_}&2Cdja;+ zH>5zrl1YG_Tes4^y!2g{wD2D`v@QExnBUx~yRd<`Y;1y;iSw{kzri8%Pr5z!kqWz| z)q)`^pBc(C6xI=4#OTcc!sq0b+HbWwz4)d68pTtI|jT}%+a4tERHf(4M zu&f)*isFtwz0COXVmR59Y^4z4Axa|AFg8S!6561a0xH3*5PU1!28p^s$KeV(iH8|d z6odQ(HNF_0K|`UH1gJWkBN_73u9Y~pA~s2M8wPnFvYe9KCUTOGL-nJL4}$k(De-_Y zCw_?sI+YfmU%3QcGt&ZS6aQ%K6IJsOUAqhYZW9v`gaSa#Mr=##x<58Q?*a;^X4SNhMCVehOxB1I z;z#q=M50yFP%d7s1gcrn(PvW%M=`4p2^!Ics0C5blvj1on%%gH#~KO*T|RGJY)asL z`SoR7iq>r`WzSADc-KOSmu>Hc5H)dMBi6>)L3F={90cmGS8cA_Mc0A>M0n*x&HHt{ z0$%~A5T@?lB%!gj`nM@Fou>&xtqASj157j25UD2gaFU>Aet^sS(b_kf(qMUvDUGmh zathe85-;gv9S?MZ5%QC+w$0mYS^}kkOF^N11hb^mcHAahZ|_gGO};r6+xZP$gB+J2 z+g`kXH^g!9M3%8pAko6VAF|OgMJm5!fQy22#(fV8WtaIEf!}P%rdfv7y%ry-$YBLL!-~Z3tcK}>h6lX7d zR1v$VSO7(7g4nU3U?IU4V~H9p`Ry$lqlqTJF-A>dG>Pe!m}qQ?4Ws@VyCTMl3L;_! z1O<$OpeXgjf1a70*_qkhbMO0okYwSzXUa3r%b8MY=1Ay~5 zaR6LxLeXn+tOHsafhFJSGKYwDN<#M>Zroj|4X}+>i3mqNEOH&hAaGC!*X}!$!q_#4 z<2k2sgK~8NHVS3mAVyPbtm#!i2>9@gz=d$yH_hv1&}1F9Rn6EcujvT%xja#_hZv8m za;$4KYJ;FPOyJdjYry|UAgjh^!$mC+y4}*#B5u{cKI)3IXzsu`Fb+(ua2Gtl4NUxQ z>fTWmxHw*xioi1<>@%Omi{Re_NFQ1-I0d3plM*NvaSI&51;${25)7gyQ!K=38yFvs za=cr-cy#GEAg($nt@7s+;SBHWPP9TtHgnE}S=iV{nV}ZZBTYKG_grK^>Bcl zWpijt?x%wt!>cgDTcCkqNf{U77ded_@1!0XQaY@jd{70V@Q*8+1f*(t@#N{eY*i#K zeLr+2V3Ixx&5$Oe^$i=f{iJ8^O1Ts|79Xicz}% zHXBN8W!AI<_=DR_Vzm^e@OKAZtZgQ0UZr8nrB1FrK@;{u)LP^TZL00f{jNEFP$ z<&-7gD9nW>(&4U<0@ADYY0dHB=&nw>zcA5mo$8L7PV6|BeExvu1N}+J+gHnr*=qPY zm{pm^9E;zm(-7W?i%3ZxCJvc2epuSrIm$9d4oRI+qI|5E0ptgDy9gFDDEaf3y|W(S zE65B?IQic!Sx_e3X1~{$Fxe-1wtBX$moY7_v<&`@H%r3yJUMCqvuXVOMBi&q+p{#} z;-X{eKuEqNUS!}Jd?77ul_G;`y6xdpPq&yfWbQ-KGY-1hP=Lcndsm$pW_b1nh6%xz zoArdfxKFp7e#4PhSZ@PSP&QoCl^%fdx)KM*fk^_pV4i~6nsw<{B28-R`@n&D>*j95 zI%$=^Li7AXHfw<+)e(Ud5)4KW&5px~3dT{&vv@f;IKX)aT*?`?>x`QZP<$8%04O2Z z)>u3)9#MU&{~39U%G-jV4TKofgms3-O$LKUf~W!1EKRcDEf$7cZV@r`PqU5sH3F~4 zIz`nqQ~xL>j~@lPzV$H2=)@kkZa@1-vnaoA%`q3ObRW~b*(Dwo0yeJHAGkc3&pok^ z3CEcx6iX)qKEPW?T|H#;2meg%eJ-jOss2^5=%Vi?%WU*kq3$g>)<$cmr>b&2>NXa~ zXEuOFc4t!_-XhTXSXDqERbw23X5BgoW1;`Hj_Jybp6wBrb24T?xM8jVvQ+3_F~$o- zE}e-pIFjP=M1683NezZ%9GC5;SzRzz~`|@ z*hfB`T=dGfA9rNZ7?vFlIvVq(8aPZ~N%>tq7_!xd>2M;$nw&JRReKMdv z$5p|@jWWSG-FL&t)kZy`>$tCu_}_|Xqtqm=wYR88W)5D*n0~xy(Qwx`=kefS`*Q7$_`6LIIcVTj)NXaTJPwAa8lqceXddHeuC0=E4(ENgRis-S z?0SbGaH>)ELt`!*KDI0YTgdv-*6s3Z;-8pD8Ir9_k$9b^0wQI0%*x46VPTu<5rF&FPSXtkL`4Q@-mwXeRp zT#kXor4$*vuD&r&hjwC@Yci}IZcPJHjoK&;V@D1pSn>e_|0p5ZFn?bCs#g`h`bhhK zJNoVIOX-(y0N;tONdD+YKPn&p_{YmT-}SC?*Sp-MTtYt+xGEh|jvKPoRt0QEe1;=G zWW{-VULY~E0$Fh{er_jB<4Kj!yk(!G@nVbfRwq*)d4D>a6NTINs5#-Yg>_x1HSc7X zYD@*@`p`ShR&iM$@&k*8u@I?oB)jY+MG4q)Kvgbr!C(@LseW}jl;l>&R&IHWiG#;v zFveR+eu4h3=6JaN#LY5{J=3VHGGxa-~yiCrGbL5 zL02-zp(fjgfS?$J1?LJ`$lhE{ios6nAjyza7um$6{xp zpLqCQUbl3{(M#U(!}x)5VDh!GoQl>EY>`&=5teQGl6ce{31AJ34OY$CRU5Ys-WiNz zOr7vaZNW~O^~FOdS+^Fb{%H#5Xd)!~IbO%jq7Fo~kF61-+B#UltbOu}7py%)J-GJG_w zIJp9p{Za4hl4y@ozK9)LWi%+7YF319WBfXrucG0FZ{w_3H0`j%4&_THoKVg>>&)_{ zFMX*T^~gt-`yBbpZl%(b~^*`K4|ZS8l#DNifA#yG$6zH zfpK7p2{29ZK5YD>5c66+nT7O4pU1ZhO%lH=qmEk5Yy|+9qa1hVQiCHAW?JEh!v$Kc&NdQ-zjnxTdbtMrZjZQN8|AgQ%9(Yi=Rq22x*Cy=HsFd{ZN{i!OVaVN9(S` zIk6ifrNuVjm=L7Ru6}GMjgJ+sFBvK|%D9avGTv%h-@&xql}A`7Zm#BZwRQQ1J0tI8PrWYjIx!C8#F)W5yc|(|H|V6b0C$s6Q2NDr zjnQpN6I9$Z!%e|S4Pd9_;pIY;F{z_8j#| zC}u0KGg~lfa>`juO!D2TYBdCq-0iU3_y5q?XB#xdD}|!OX?N%pOslwmM7^*s5G(^C3793`~PPPNpF+(z7q%n0+)aQbn zSfex|ZZl5nj;KXV#zSgQI??LhA$5CtT62jn0bRt7_0WWdgUKDeBjU3QwElWkC zv9Hyqq#4@j1Hx6NS}b70Htx(2%El$UOVajn8ZWNb0W}lbRl&A1h%=j)>Zx>EOI2zA zkp*$Hwu)10&~4yR;{w0OYc7JvFGe{~JIt>#I{y_a4l9t8+d@D4sL?m+YM~vtGYs+x zW`MNb_ZbIhZ}Kv+B-MC(0m#~F&@k4F7`Pfk3pPB;CJvC z^=)tCn_;eYwX2mg&pfj{`H4>`@20z~k390o^1k=Iue|EjuP%4P4Ko*CyjH4pLA;>X zMLzalXwq4=`mU?Z;$cug?WaM#P*oSSkiIGB3I-^HyB>>}IvE%ddIYL+f_XPA%EXaEP{ zEt!|bK%Fu`cDunlJ(bF<{EEYN71ouf^NGWqUFbT)z&ybK>0PNNb@@FTYC(94k>vVH z3`(LVzn%J~4jF9aOg4`%M5R1T@@4HWV%`0D7PW$e6%MnK$QFhs7mvY7#XOwro;~nL@-~WC&>7=if zQ|Johvwr)x%OQ8TL%D?R#*R&k)~$G>79;!|%buAIK3z2VZm?a0MoDpink+1A&VtZ4 z!fP&XR@vt_8;&(K4`TZ^vh}FW;_CM`d3hFNbykk7`?&1OIsbS=oSRU|KJU z3p5dv5(i=IAQ;iiDeB7C5kA>;!4|j};}eTlLOlWG+Uf~|H8N)`e?L**Xf8~mag|1w zn60}?jjix`i^`*AvieqRLE6>gV@6J@6uZX5ybK41Zq0^%hWo^Volx<7{Bq_k5%uJ|_9BwULPyADtfnx=&fSXx zjvn+sY@r%;tWn9ZF7^WjXFI?#zC3+8KyUQ~Yajuwtw`&wIvmse(GRim< zAxU-WHesQ{ReLk=j!oNaD?9r8-}_#9=iA?2?sAvAmhE?-JE>`ho^r}5<>i0==loFc zefHh2TyVh!ynh3ejkB*-78tWq*-mkBuC%$M2gX@^$nTWKH<+J6oOERXO+p=>_Qh*@j{Pc=1-O9tNbp2=bP8Ftf|fJ3{DhxXBe0# z7$BXC-$N43ug(>LiirTV%64fyy132|xu6-u1c#ZN7YM5FC!LdsUb%Sere$YvxwE(y zRzPb(EB_Qbb-2PhOlPq7V)Hb~miVev-?66}w=Gag2!twCK4=*46*vHCuzVn@e?>yf3KKCgve$k7{QS_Le zpVD2~xFdU`C*asu87~{P=!|tQ9Mtk6Lizld;erlKwl}Xx;k5%NL+W>kg|f=;0{lElStdm%R8WJ`vIKKb8m5-5TC1aqjQ4am4M5m zuJQDZCI@yvCyu8)0Wyz^X(C0Z8k%oT01sbLtg(vJEjXriwFFH9n1Z+6cH8okpPXNg zpl3JUfxgT5&ZCbm5B;@YD}V8_mzAeJ?P=vVpYe=xb$X1?qaXd~^7-SAqbrg-G>%Tv zYGkV#V68S-o7PdNA&ik{Qo!o19%y-+D6|6jl1mnbp!XAA(~WHEb6Y)$vPqLUKSZsM zW%jj7EF|aix|2Ou<6}~JVXUxb?yS$_)1CuotpOay_ z-tvChYK;HD3i0aTkCb)~)-;qQE`XTYymwH?gNqx-g z!q}^Ev<;2skH*1noWLcY#gU8M)!-Q|-oPXfSmsi>ggEV2$ zACnmr6AK408+piRsaBXk0grdNgC8K$JfGTxQQ4by(#LN^3CP?H@HFh`q#g~C(66h z4KZ(c;~UHMciXL;O^e3+(Z|-iUH7`>6QB45C;7$Ym$%}4iZDmq$Dy&bp@uQD{*i1t z&$$+o5311p$z9`QAAnQ~bc;XKnOf#iH%F%&<|A&7tA;U0oe#cq)Kje!p&>4n29-@V zwr*^yFHmQ`4nt_>isLOdSJxyT(baf2AK6&#D*G*Wf?n#rF5e z#?#q-x<#i4s=N?Dt}Ar$s42rX&61=B=tdO(hKig~Tg7Q;6EvbTsAF-fQLc^XVCoZ=wa|9d36!zHugVY>kfY zqUN<)og3?5bz0gs1!-PC+-4&o&s{8j)TUcddO4+F)%PvSn%i@D%!toy+A$csY=9FlV|~eRu02DPO~Yc^QlR8q7s|635Y?%L6zD9lE)O7*`klfO8|IX*?{+L#_KVQ zvhhV;j)BSii!9YS;8-VY1!kkHvE)HC_sdV16$J$MfDitmd0<>HX+?P-PwBO;*kQHG zcF`B1HDF|HHmlz+8=IRYpVROOBfw@{gSG=N}ciwqrH@X^$pC?>y=s21Tfc*I(n%Jw0HmDx|G=jwCMt6m;!mHnqjvO}G z_3}rJPo{GYb4B(Im})bd8f1$_h(Bp5M?^IZj9f!Ab<=M21##|^tATZJkd3c+S6S!O zs1A#%BM2R0n1(fnVMjR;M~!np2n24h;TyHexr`L=IERo*{rt*?jVuU_SL+LXP-EM+ zEMn8zv%N+9FOfD>-~>D|w;s*_6Z^!>ld+NVEamx`ZBFO;@AaYV6Vjf;{F}8!Uk+N} zsZgcEe39c(=77WTII%}MrxS;`1wZD#HmOUs!Pa3rZ=>m4yvU#@-Sab;)v zs-~7P*Vsx`(tqRKJBvU}p72u4%nt9sS4{(t(AC$G-*(Bs8BI|O#GOJ|x6s3J)#i{T zl%V;j5rxLpNze=};W*yc>g5)uO^Tt-4oMoM zrg^K+qxRX>V>yfMgg#;$+$eMY`Q_Xnol`b#x2bH4yQpaq`Ku3lP&wrGcPRTGuzxw{ z+;hvj-}4?0#)HBA!jbtYVW`^17L~YPCq_)oNq(&ZP?ed*=c>U| zx&hYmO@j3^d<#T zuM8m3B%0Yw@Fa726+HXVB{{H<_mA{jq6FI}@+4wd95diRKA6n0CTP^^2BPMb!xOY- zfq$v#0zeJ|F_ZLs>=`YPktZ{R+-nYq!DuYx+~ztP2v;lU-^CYRSPnSwK)#x|dGls@ zr{T>?i%9(9%q5px!oFwx=5NyQZ&OY_`Q&o$Ip>t^=_VQ;1MQS2&$)cSIL(+3FG+?!sC$tAb`F8>k}Yqb;EdA^&msb$;BF9QNK2Mv#4fU zMGWbDJR-p1ZOZ9w#vFwqe}wS(1%9OT9o1q}+-h~rz(rW^geCMVLrC`~kIi#jxn@J@ zdGZ+b{SW9^L=TSpH2G1_V%TD2EeIenYU==isWr*Wy$%Iuoh~ zdA-eK6BszET)F34;c%zAIn;X)rp?Q0+k&n3W{Ga6opvgp`P}Eq3+efdhth9UUqlN@ ze1wgLv6u13R)%c5?Y1j_^;fSbFM8378Gp&j-?WxfpDx^GOgG+{JXK^~Zkz|bK%cPq z)Gc?eQrXm~7@r~F>l`;*1$tf{cOJO72au!dk4q$R%>arae!wj|3h%hVTVjB3I46;) zZ(**Y#u>u#n5~t|*?h}V!y z#G~j%vdZc>Jsf>?uDVAZ!iiQNP(yn|u;hthn8qZBQ*|8qc$)cAy3mpA%lZ5B?$2~PPy~e z#ySKEs?Dz$1*rKJ;*8seYdv)g%$4?y@z-4FyHBOuT#I|;ZHS{-_i3(D@X4;X|rpU}}^# zKO53`D9FdF4O`H|7xKfA+l(OKQBedfw(9 zTZOElhLYb;LjV~)W}!9>x4BmhU3FxLHm5mJ`7*lMy_86YJc>_Fr-psQl+LN)y7l9t zw$YX;mUu=%YKw8I`8g%@>S^zrW>GG`C2s)G;*m+$*ukD=!}8kvYXe&eOCi-ag*bu_86EZUYf>v`pxiM+O0eP@2WPF+*!-|AcPQy93>UEYu1uyf+ ztEYseUvMIpJs#SdDg^O*r8Wk%5YOi2j2GP@AX*CwTN|?XS=dD2SnQK@K)IYgrp6uB z#~kyC^3895r|d}ac;4eSo3<@KbBjYyd(%DkC^xv_4SDgX2V(ebw}&^qkIZrp)V-0B zd8Y7!3m{9{N3fe-`qARiU=Q=8anTyg=cvs_dHE_M`OH>vdi4>ia#dH@;Ju=?WsU%> zN**oardnnTNDi%IFXpEkH=tW^H@9GxKrV<>%ZixrL{2-KhP>szbMCSfvL#2 zM5oy1P%1OQpkv;g8ekR~1E+d%fcEYU$$Y$ACt`z1HwIs*!Vx)fUNM6fkPEIrin+C_ zjW90EiE@Nbc<<*_=GPhG5Kfe`I>WeH9!C-7rI$ctnOYhL=IBYETTawy+dF^bL(jH+9T?7Gi>{dt`I& zkvIs6rl>OHGANL&D<>XdEw~D?_~tj9 z^2aUQxy?fOgg&TkhG$+)z*`ilhMbjj?E^!`xUto7QGHlIUiZ4Y(K8-*XG(nU@xq_~ zygcslk1sdA@r}!+w20h+eof|L`tIY-SGh`g-~ao6{O?9Lx>3DSNmU||*5l|!)V%B6xOcM!2bW0wmBpRZtejk@`nvk7A-xYY54PIW#tRR#!bWF2db-(lp3rU|(2Z@3vW~GzutXTFsGU!2d?7=RyD_;@rC|2S(1Q-(sYfv^s zPUAqq{zRhTLrxge04#$|wNrX{?~12NaCI>Qtjl$K^LQGmwILCr&0{@8jnzZz;Lq2zJ4-qTxV ztUNM9T0PrZ|9)4VvmJw40u zqKhsnSD^*tdFP#9u5+Dhm!HsYTEFMt|6RTpnGQfh_PU>>hCEU(!gYnQ8el~_EZH!J z3{rC#Gzo_D_BwaKs`HVz9^-s`aMt;j2>l#ExbiU->eM(gXfJf@v0mm_eW85%rG}JR z5lG7Khv3h)iQY(@RI#u)kpW$u6`*}`ES;FS1R#;9eb$f@Ei7CI;BX?waZ53t+>F#W z_1CR)B~PzfED5zd2F>isz&Q-0)^)ZTq*bcEPV5A81yC3>xb&YHv)~hw96t)mVAE~? zSBqzXDeGZ}7>g794s&J`dqQ(93Xa!_6ygc%Cv=|3y8||bhL{lKJ-y7(6?o@%Vy&iG zV!x28`TE4(Lb!FI8m7r;{lOO;@~W@WKCp$3gqUAJn-c3{gV2R;1j!NZ4pc|esC3=m{;=k-cgan>O*%bmqygnThA zs<5!a6*=uk3i0KMJSf3Hv*3xnGcR#-k~)%ohphxW=kc6#epG(#ArC1B(%sj8{}2CA z{`imoxSaiiAC!G=ar5%(*Svg$@$(B5&*5c8>sV8NGaqzcOJxrmjlovs#gk$ke8Yk*+a`KQtV+dl zp@9^%ouSzlI>s)9rf^N^w<8+l?Q;8|AY=4GCn3gqAgKX6@w z&Y)~z%Qe=#v4l}PY}C|M)n*v^I6_`x0_PZrhP5OH;`H=l5c06i5D=Wji2~^iA<{6K z0Pw{|0K-<<;nSy8qr-zkZ;d#h9+)h{(5DA~Lp5QDXZOToW)s@UqnTQQRT9N4hlzKH z85zmu%~|$WPk@BqW3=nK*lTZKMUh8E0^`jFthdd&95601(>YF0=FOg0V|dGxxkqLT zYCYu}-z-0-g%xfXfsEgKz83xa>X*L657*Y1yu~1?&DRm-9)b7Js3}smRU7ofhYJc8 zZ|&L9w;$3%Q9q8xO*G&7*0=e0tsnL1N0;Y5?|B7xTOW1QBg+XVo>+F+5#NxM#`VVH z)K#}|BES9VxS|?_E!9hW?AD~fx8_ecum&a_+#0HtVMl2kyQ*JpZB93wX3T%|SWK9_ zif;9A3atlqdbz>5{#s7JIEaWY-h9<&V=&QyH;e`=R+Fn8*g-C~btD=j%OTbJWaeRE zKyLuaLy49^hK7Km^q+I63EQ=s4^ml!NjEO_#jP$1HA1(7vS2m0ExD|_Rfg{WSrz~G}uhpuS4pBQZnp+yvZNmU`UYE2hR=`?BaI0~^M<#`$ zPOVkTh@^w~K&?t;R5gdOonDY+MUy%jmP1{P)oD~Bm>MPy1!jWY;Mjqu0Q(nRon|=1 zcrOk(?H^nlzS|n%fz$IlxySVuz{gfcl*B3CIh>fHy^5t0-d3a57)+`{)?2iB%+y=V zl{%iufosuCa`Eu{kFLF|%Ca1kt4gc-*}})!nx7<`fHBD+`cZ@pKGenEfn&&8FXQ@Z zs4EFq8NWaa#8>?JpYx*Xp$~s}dH(PJemU}&f0-AJAN}Y@%gg`trDdO69uV$67AEX( zsW=zqQkV<2^&9%VK3c$wz2@&P?s?Ojme0_~)=z!vQ_D-}s^b$M`#Ac}<7MUWd)%Y^ z;OrlitJBXEZgzKu=Y9-Js{0AqBYueHPBB&kQa9P`Lz$GUb)gn>q~M^^JCbVSg`dtP z{|-f>+!TjxZOQ>2mEqF8&oIIxqD6^p-B8|yL9AjBt6!3cc^U?IyjMmy(1ZnU%?D2A zPx&>c@?mTZ%SL(eb*LFO{-=htjpG8Rj0$o>5)E~cJ1Dv|+qa0eU85i=Zi?%9S7=)2g`ORknhel1 z${p#KWS;nxCzlU?=!4~c_q}g<K9R1FBl!I=0%lU6xqpsydQXlV60=kLO zhiWIa%DTN=63CnwCu{R1#X{A&R6{+(D6X?n&E7VYC#6d@y%RNX9aNioc`c#E)tWs{ zxCT=VT~w!Twa-a6ob#K_W1U~k*rM;g|K2x~(ZkkD>QR>vrrL4jO}PQ@LKK&&8b=x*yKOOu#aARKh?*7teXO) zYmQW7oi~aKz;@akA@`YptK!r@;v_mwXDPMkX0VafaIJuK&mA2oOhejsh^e^XYauMT zJRas{DU|AW*u)|w^+5!KanJ%5{>~7CmU4Tf;;;=(k7o6~4xh&we)yb61ZBd&?v!P0 z@9ixh>#btx?SjTqWmMr9Kh6MaOWYz&!U@y{iqZXxfvYR)Ibz^9lL;<}Z2k{N4`JCG zYG+_Vv+*GV!^}WVi^Ip%nCu)PlOA~br#A7#S6sV8VTLh2N39|7`R1_R>}AVuSh-q= zk7&Pl_Sxm20}m=c{_&5?Z~xBkl&3uDN&M06o8SEA^8OEepd9nDkCpxR->j{)}6wsQHK@RbHj;u5=J-t z6{+=)LS{DVL)TqQ5VFt8PGK62DK;jxFM%K6R4@0{jhX5U^?Wc;i#3W(U(IJlhzI+8+#8I7EfJN*wutfd zb8YZaz1lo)vy#{C1CK|X#soYQs)rSN=@IH#wYA7hxflqr{+j_eL^vdwGE5zy$xhMn z8v2@HxdOjmvM=a~$W#*|n$2x4c@*l)X=gLi#|;vQDS(2~LW0>T15w8h@1Lb+-W9lR zSM`RN#)#G28Pp-$RrwV?#L00J5bZbQ+;`q*aMaeFGt{wa>yxa)cK)pj?%1Ni9mKjc zodKbP6JBIw%|a``>0!8qFNPC;*kKZB@g}&~k&WEJY)NRxFZG#l^7hUB^lV<%I~4hn3sk;g02k3ofu>bLpQIo!dF^VBMRA4v9#MsR8_Mtdxr?!9bXf}NVz z!J*|~fvs}Ja3BYJPvp}6MMSGJa~KY_*ZR$7;6Z%$4T4}o-*k*z2=!l12J6x@j98^hDtZln97+G$EBvu#J$kPcZPb-6kq0>^n{{S7 z`;s`=Up;(~Pfb0TEp1K#C?hKpt89q7eFY)!8;>Db3B1{GHIHs48125e_PD}0zpuH_RhPq;w|9j;=O4%5Jxy^LJID$q{9 zwTQ~oPRrGfjS-3s&o|tMKA!zI`ndL_lTIp+r|hiTz>Ct5^3s;-9&TY=F7_y9{0HN)Tcb997G@8AAiCL^|!5s3GAVU&Y&3yMY({* zA+#HGg-y1$w4$4PkTK*$Ox^Fxz0KrO4O_gM=Ag4N@I@agJV~h%gMxDPr~Tr zkqQUgL48(hmsdO?9;Ok;Bv#;c1ae_ar3)n>`_|>Id$Bt?@MrcdevnG)MxCjC#bO(p zViO)1AH!~M2qeo&3)4lyGCq4-ywsHa8`d)+^kK_D2MVq{cNGVao5u@dtr4X5v$@z)7j4^df~n>Du60CY%7|M zV}>c6QFMkF(YZTA!0Q<6IA^r?k1)Vn(>~bNJPU$mBnXM!4KuT8m>B~uC>c4>d8HA$ z(t{Q`agxH6=$ofrq{yKo@H)1NK`jvZ#TQ0KTz#}FgucL9gQYQ{ItCjLVVPcV0+*jX zqX3`V#rrrmJHwzPKHp+q&6+F|=>J@NywNp6BBq{9xJtRtJ~Yz5aFO*iU}4>_-dC%Pwm_)z^3`Nv&bMO^Y@> z(~y0MPQwx=s!>yZJZ|V~bocb*=_C2aKK8ME;|#7q-s@iXDqlbOWV*tL2Z>+KkLUTx zPkvI4r>l_%-|AM3Lt3!nA2&54KA8D1BXv3zK<_|-V{#?Nuo$+gBnh4 z-;-#J-!A#pXZ;dN9}XEXg{se&p%}FZw$7Uzs07398sH@ezS}fy} z`BGRn792~UY4)LGXw))j>-w+{<& z#)XKHi)`|}!ilr?t9eD5>3YIx1yv*_fIA>sya|X1icpYA>Kl4fjKt#=P4|f0=}8AQ zGO*2RQAEni=41mQ)o&*m)?E?@HxYt0QP^hyID=y7-i(o@!syQ8?dYTHZRscbPB`Is zdcNZ&<)-`Y%O7cfiWZLeF60ewbVK_7-=+NEa3$0%x&^fs(8nh&o&?8t%!n4f>2;u<|;^B*GC+7e*tW*2ZPm+7l&1ltb~= zXhRh2UUB2$%_f^)s~crEGzrO{)aY)`CV@gVs~?7InFXU^F(%z7WHz*V?}dyNnir z*SN+t%9rVpM6Z9t8`ydreRTbaPkf?0kNW8w?y|li{bV7&7un{FN06M#OkO+FY5BY} zI*=F)ll&t)_X-ZoWj*1O>anrskyPiES@nJ4xXf1tALC_qYrMU;G#VArmB%zrZSKP% zPG7r5`#$8HUiUb}j<{g=G0@REoA!bFlzACXR({_)Xa6xYIqSXw3{7f+o&OhOc#TMQ z4NM^?xeR0PjF0SeHD z!RVX%y)DRHUxF8e$>7ulmqS&Nz#GCNECrA{zVZmH9%v!2)nxc)(4lu|bPOx}Q@3+C z(GkzYh8{^4Rh@=0L57$Qh+#+LFiukkHjHbICt^pzX|Stc)8_r1+!-{gZFO-Orhvs! zeYDC7B~z$O0f1uD+AO@f(Qodf!a+byu1Z1Hh-&Az8_8;J0>|--D|pkUZ3{l8z4Kv* zl?OcF{^iuuPAgxb@A@6M|NgwNI{4sQmq*ZZA3yt<&+=jlS0{Dh+h{ad-nNu8sf*Bo zpaA%!pH%@#OA0MDVRIDb#~9*g7I(SoRm)*_yBph|Odnw%M~g|cYtrL;ethADWf!^v z`IWDJl^@e{Rl;tj7+)iU^~F1UU3E^{zE>Q@jcQZ6yyfGh^3s0itB;l24}@`=FEb%A zp@?Hg`a@w8-6UiS44z-x(pMEOl#l3@gSLKgrLv!kYU6B(LmGaSm)W0PIN<9X;>8!n zXQ8oM>vA|9R_j0cLQUu!eQy+h9C-{V@ZDGZK@srEO}T7*)K<4zyUk1I_kGv#hFfw= zC#5egD2U1+SazvNd7LYRl7gCXbKA~4?IfQNkPi5^)SsWx4R9CH{Kj}}S#yO{0x1P{ z`q#TdnicMV9V-(CGViqGPW-hK9U36<-Rz6$sS4ZB&#jJH$JQA}QQkHP7?^bLTV#Eo zm_8HM#c_O0tf4j@&MjgyG>M2bFxM18%^U2^93;mHxYh)Wb3uctHj&Lj2SSq>5jBmn zZ6r3c2`l}EoC~WshLMB1y@>{Ax_HFEg%iRsfef&5a?k`w=HA^~Vzl_jsIgVz7kqS( zN;3gRvgt={zMjU~B%d!^eQcBkImC~Q&gMi%*;`>jvwZ`Fj5v|74HF7u5fMPSh66fI zLG1)8I}r?sRexof(s4%4g#5e<0yZd?KU?vro^O2n+vQ=jK*Y)CW4rP38CKS6A+O=%M8;^!-QNT!W8tGmq#}Q}$VM7Gy~gZQ56gT=}My9Ma(` z6PeEm*%}W_!(jo5D~hQgccf$tOl5QG}cyIja{fdj0~HyddaHzIV`!6SNb4zu-o-l^TM91gbzO}xikG< zIliv&Rr(4-Zr8l_waayB|KpDX*S-eNu-%OIF@A0oeY+xBUY5;RXZ8)%kVw#9ykB?NeuwgnNuO^*KL((G zAauDBU+0g*?%W7;!A@+TWL#&wIV8n3LYCmQKU%21?)~Y*N%m^i8g&N@uAvf%8>C8p zeqk6rydR3-ZCq^jJHg`;DJMz(##ANpFF}@kVCW0)GI)dT8{dOWqdvu=!0F;q$hoIJ z&kA{?_(->P(N_?cE5bw*T#jsWI`%D&*S1hYnEJ6}^TAwwOkWk+Fx1;vp1*KjOVs0J zDdcBfll4T~M@5TNhu7L_xl*hsQipUooKF<1v1!Y0k1-iSYx*0`JJS`o^XWT|$ng_e zWbIUco^SK!%gUx5=zD<(GmaL|5*3L*j_d&E+&Kigw(L`T-nNm=p0Vzh9RYwFWxhrq z(|?S<&w1mU+@$>E{PWAT_t>MHPLCtHIh|nfyhr@D^|k4HkvK_Bn=dGLqWao_L0Ejh zr@Ykxih!p%u2&y1w}uC_!Fxdu=AZrC=gRZw*_H>;9{?O*^K7E4QSW*0d&}qP!Rh!p zN-VgLnBQx}r&wK3g_^Vz_5G*5*6(Ubb!knCw*xzHu7OAYoMNownbmVS)q)4XpGf-{ z?J>Xc8+`Tg7ql|^EPfci4BsUN;rY1>z7N8LCf`2BaP zX)4*6FhH$Pnuo2`bvZpuewST#;f3Qb9eHHA|NZXAI{Jluho9KQ_k3SPzvF&$`eO(W z!S}7PRx2Ais}Err>GfadoEd6>-_5HtMKbgW$E8#0k6sMPgC6=&{z?kZTY_%4-KO%x zAO5I(^q6DHwXbn?{sSR0tgF=l9>F_TXUIEx#KQ9q4nGFUq&7cR?8^sO4FHjsq4x&1 z`Z*~E_Zm2yl0>afBk`Wd%`7G;!W*3I#IE+>15Y({cFh6ElCx2`h$g03Fy%fgxIY?@ zhXUr=Qv`tYZ*lR6GNKvUHS~RxI=?z;WFOfN)6D`}wCeD$k*|Id#^)zA$spqml zXckBk-&oX}(b!)eHI%E-`;?EjIBC+pQ9pJQOfqY7Mv1H;jz)3PLnf&E8&uHsWCa~) ze&xI*%UPar45#E=5n$+~RhQ*$_~!=qr4!1rpZZie;@(G;r#=1Ys_y1eI(wnSk=_JuWLQL$QmxPrAPLj(D=F)Z!$uy0XnoY zo86xR+A)Uq<8l>RIO3}pPoaJJ2Y>JfmaXI`6#m zxClM@`LP+<7+hcc?=1-lz1I5l^uX^|?riL_nb2P}9Z%83s-}Vg;xNa)*dza1|gvB<>J6trKCtcg|_Om0@i@*Cbu4&y{a zz&5fQp!zkdVC!*_LEG>j0;kijV%_P+6?Wspe7@HO~?GK9y08$cX|zDEt^d}eb(hj+et9|oiY6Q~v!kCJP) z8+;}5wzVAVg;aV1FHMq|CTTd-&4y^9h>?p9Y<%)b8Mam(rDD#3!%R3Z=P@y78fz_( z{S~x?bv_NX?a;@k6Dr4@_#Cc!c`ow)_dcBvu+=7qR=iRd@q)`6>}N|wwT-vpV>^7e z4?oxU?)Sc@JorHmDu4I)e_wv~v!BsP>FWG(?(1Iv`tozquR&L(F0+qtYraMsBtMI| zlQW%OV!$A1sjF(#B;R|0_Zb=Krf1zj8;wM(Or%y)kxGkOYV84JqMc73B z?fc?$_kIjf%LuG!c-7yw24@;d08<>B3>Z19&u=^+FBpOI{w}$9dQ!wqe93I@!emEc zG0EA9OJPF?j5UUWIjR*l2sLNt>kI~EA@xtuy5H4py01&Yk zf?j^bPw?G>ZjgBk-G%&(Z+wG)QFym}FOs4y)>12VuYW zz3-LX@PK#vuIj5^^{VnY`a|JP^gHH!1(LvslaJ>Y@*$^N)UfR8n9U2B&sq_ZMV|J( zIT;^cf%aF&6Fwcy%%fN=9B~8K9((RtZa|Brf1@V{JmWWi(-k1%PV{}qeQ&WZEwV7D zsS4jWE|ZQUYuGwsHq=VBGh8$jHMpp1!Y1_1L9{lFHXLENzdyZzpM-D~x~ljlT1dT{ zuBzVZ*0-iBZa=j5E5>KX9e1D{6djWJL@G-r%@?hz&9*+u%QO7?c9}Y@_xtR#Px&l8 zG2u5J^{64qo_pVn=eW+zaj#mao6gOcC4fLwH`yI@PRK98+$k9nPH=?I{ESHXmwdW6J*{5%I0fvu<8EselHUwsTL0*_<|B#TzBn+W*miQhM)%}RFMlwb$RTB zWMUo@$zH(Nwd0}Bk!9cG>~ng61;v4?xWe5BY>8!~Nepj-%i3%sNr2*6@;9HOW-)u( zUrliL-nhqmf99`x1}50Zoo&#AEuFaRL>5crE4wWY&dQ`mhs=xGS^y~&Q*&K~u0Wnd zcN*hr+?i*cRZgSr*H8Ld*_lpCnm>es%eO_R0ELHu+z%|QJwYlBF78qzPVf*s^d%$m z<73(jX|ed)*S@w~j}}!&()Yyhk?n17a~pbW&-3{Ej&GuyWp01l+wv7FO@b;Cow!GuEgEi| z`4Zh}jzd*%D5pTYmW_ubR^>bm@qKmZi5^baI! zH&5h(aGpyC-r_W zyBt+?3`QXp>8l_DOU>oqhw8_cn;L>rz3MY?jj@dasv)SV_$}eQs&dEIIS7Gqt#6X* zUgKkHFe3;N8)+Me*#NYwfMPL+H(K4eOPG4{*6s3ap@BdB85M_#Rr~F`Z!!y}N%m#6 zV&*4kBbg2uB^dc&rr>rkgvJJTuum)isU-UZvGlK5NrtU;-|#vf5}*;vF5B(tE?nFo za_@WJyF7~iipNK~xT6}6b$R&1A3;~EUddm^zXn~6w4W!e6w1^RdTHW?IaJ?bxI%Oe zt!_rx*+>@M=AfwP{^io7h#u@uSrpdr=vx-*sE5+m=X_5k_4^ zVZn@s2jD;a*M6;>N;iJt>MQ<8LVs~r@_XL>?(&>xKf4@o;DPMpKBRfbB>LhLsV!|s z5cJcU%DRQa%LZIWXn~i|j}@SOiar&&C;dXy7wIbq_-R#qT+REJzJh|EAbsBN{%*NB z{n)|J=`mD1a*bk;FgfE68{nNOblTaoIKtte?VD3&A2p}CbY7|s1j~-!`HD&Cg$XPqd&G(` z(XibQ8!2lo9x<3}rsB7_VfEnJN|{I-$&e|QVxw=QMVsSx4iio2apvm!Y#tZ1F_HIG z7eWhN%y!Dx#+yK@)U?>3saZ5}YGv>#PX2Q9ZyZFZH?qK^C#UW?k$Ps~5QrTWooMk0o7eu+Kb0Sx{e!aCP4_B~JnE6<2~T)Jc?^AL z4vWXeqzpb6s=zDE{6qi%KmbWZK~zCO`sxvoM@>(F@OgaJExzs>)4Qk|sqabx+Cmd9 zYN!tpUiq89{%c-1zn=R1Bl?){9{0QlUwOqxy|acfX!#Qgjy6b0RsoAqjPXct zs1Bz_^MSn117CyA8I8fXZcmFP+;xnrio4UJmw@>eom8=?z>O2ypkrah&&8um+y%nw zzCjms4r`3&W1Rs~jpmo)x5ZmY#()HoNq2=C9xx`8m%tBSt%vC<4tS<=`FEj@qw&WO z+HL8|G5U39x)BQTXxQ)gqe$<}#rRs&?sUEXZdV1P$$<`2YP(JF{+607wA ziAas`^C=b{JQSo6DA?zQ?%E_jBZgtg$nidxH2xyZy!wJe>J39_$G`OAJBId%D#0c9ca$TE@@37kg3Nx8d`@;uu zVv+x;|5zwGR>qUgIK+5@4qZtj%ttVwGf0@4@n*zX<|UDmg!JCFHSbpY~wsE~71d!48@HUZl*_y;ue35Vi1 zl>5am{+-8xVwD~nf2CBNhf-~{WxbBWmub;}XE#t@2XUw`q)r3PwG zHB-VlmhFtXXNB4tGRJ-RL#j0l|={%r!ff8R>Nge74>23_YJxEFQU31 zuTI|+!vloBaq`#7UFc>C?BCncBI>kLPvaXcu0=PJ;0Br-(c^8bg?zBK9vdbLS~uH+ zQjv|rO)>T%9sX&v#c{1e?Y31a+A@Utzb&0~aR=r-4?nydPX9jefe)0&(UsME(VfUx z9OD-_{_LeME&u1Sk1fyno!=>Ur-!5K-KJ5Hv# z>Ea3>-W<`4SwpJk*2_Rki=Ie-eRTY63?Msj~r(7&B_+5mGvjK7(AfYtuunU8$Mk^0W{!&#f0L?}NOO)tcuIq<&V zhMKAItB9=Umx{K&Wj}OKRyt@E(nvLBbv$uI)xN7ry+E>m4tJpS;% z{;M2vr#ta?r0{&po9(q1`)+xwTa`D^jWWMazjeJAY}EY6d~Bc>O)tGw>tu^T;8DPs zwAc|^dBsN>0;pjmyKxbayw<(}kHyiB^c^=`as1_9`X&Bt^6%1j;NJY^H}lsIu1S9+ zU~%F5h5d^Y^1JDKad)C|!5%* z!B<6=+fq#uS`Od_4IjaOk#3%N@k?I9k0HXH^8fy>ca?vp?>gc;jrfHi?JurS?Ldp` zcf9kR<)IIGNVy$dZ9Sj9AIJ@Tu1&|BtE>G*wT6I=8eTh?dpLFk=(Sn&6G#U$cT;Y7%JKn*IM|_|8M|72)_bW2B zgwU*MyctLs*}VVCkTEVh?yzI|Ha!L6$ot*5{3U%)^-OyIV)6LLFZtv0EA&XM3+XB& z-yB0&{@5CyrqC7WJJ8KT2hqQC&OOKWzpqioDfdc_UBKBGxt<5K?lez2k`d&03NVYY z8n6n-MDrcvik0~cd}@Sou;`rD=pvjLnAn~>9qCz{+LwviNgOle5rr`N%7FltawXYzDjPUJdT9mMJqA^UMM)(PF9Z4BW9 zMo!vzt80r)(73q?39Q;pt_F#g*BTi%_y`)`hx=E$+xW1<4lfU-Uu!s!J_5sob#FwE z=fTMcHynJFu5R4%cDGAcEk?XnLCE73E{$Kj)yu?z9W-q?Sje83K|*Ct!7u4thpx_i z5MFNFA=2o7o7-?uoLp&y%t(8QDm1X+AH`4{zc-*c znN+SBA64Tc>o3rwTRug95TJdO9&C?(@!}EnQp0l|aTN=9>Y`zxYz>$?CdeuU)*7l$ zYh-`r)PATBedIQn!@?_Wc?DJ@af}cv;{sSQ^z6c){k-gU{p;}p7|-kc^r!!mgZ}K# z{;XV!#(}?9Qi(8T_zJ_fX|cHn{ahaw${0UuUN+-E81w}!j%g4yF(Ier4V@eY;3MeW z_qa(pp1xl5(PKVAHwOKHai68H*Wiy?{;qEQPUA1=xt6#g>N}^%$N3jtMBjI`TnK9w zn`A=tbCT}G*WNjsA#jqJ^=xc#Ul&_L%^p|f1%Gsnb4Eyf9uAw zIDYS9885YkV-IXD4zs2^1CZZ^GfUK?)`5Eia~P2iUz)bA&PK2xF)zJP+=dp9cu#I5 zmke4hBq*)8iMas=(l};pwQ%Ql;>c|_797}#5#uz&EDly%h`CTc^+3n|F&+kx#s-}c z-W$2hQw7tR$Gtd*ikdfPcTq{yNX!eIFgG?oQYR(29{3xxq{P)2)Q1Jq!SrhkfA-Qp zDNlUTlgmLQ%dq_ZnJU-IkskhwsCoChe1sTP5}ywNBkt+M`&Sz$JN~DKKCg{(^VNP7O`l=-J3t4D;sa12csWC3rqVBV9Lq0 zB^%f3Y|?j!q<+dio%|dg#ad75K67;DbBxVh4f(U;M;3w*ENA;?P zE3)`~Z>f_qQ70f{9}V*op2@Fb-XlKB#-fY&Ys@%} zdSgk5=jFv|58{+n;osRpQ$js-n_2@n3JkLoX^@2TF4{=h}UrvxvhuVJie z+ilvO7SEf*f|_G|8LLQqz*5}MH#EA8&hJD3RBgK+W9>qn2u$=fV2jTfM-YRZ17hQ9 zqO&DP!&7F3VV)39Yf-a>R)cK37wMA@lQE6`;FXqQliCVYyxRhs@iwWoC%|No{ry!%31OU)A~FQh_>nF2(OFH3fz6>WDOb1y22^qcC6oX6-f|I9z zy914XXsBFeHnbN{njv+E+CK8w%3yy2=-@~P_`7a+NcQvTsCLIV2h#*G`NZ3&C^>@1-eFfpB{H(|0=n5nr0FOJ6 zvAD!92;m|3Sa{*lHF&B3#^aszhr=ytajkzO$k4ZbX?ClF%b?keexqAlaePr5bHU|0 zq&_ysu&N0HuVK0F0wJOwyY6z;awED43V#rtK#!|=J1v~?X~E_6JwUvd@oP{Q(?8sS zjw_Cz{?Gp`FQA{{yfOWbJLZ61Raa`OcUafPjmoQAF!-auc=UW8iNyZp-z(o~$8sS3 z5sSOYkEh2lJ(C_ibSqj!;yAX`&O7m(*L{sgiXHcbfpYF`Vgn8s#z#v&X7RvNc7??sd@dsUjx~3{k2X71bZyS(MDh9osd(%j4j=g75e}MYG}&;n=0!rCcy0P=a*a@(qM4u_mMxz` zu&o#o=#}#9MkibRq?hhQJlbV1`j{FAU@SgxB2qto-i#NTo|EOgFcd()=!nx4NG3~W`e+Lm#jZ~u*FWkpk12Pih2+iX?#=V)&dm4H?>`@Ozyal2bX5xD zfPIpi=CwX#fa!#=__lx8t#bie*OXiLlXI~Mv|+%V;tfwe>@WPRB(5;yJB`?%_}=Q7 z^iyuQ%XnXU1|Aktcq|cocfIRf%Wdd8Vh?=a1Nreb7t%=?{9GaNVZjuul`2usXq*VQXE}9``=w#1{R<@08KB03+9xW#=Ruo(p?zw zZBO~Sb6*;Y`l-&8%*-=@;tdExP!z#i)Y+P=F4!9)aQRTmp=vl~dOK()i$F^O-xE0K$qCL|tsaD9-+`kxTy^*^{dx?(1BVlien$#h z{8f(=t2SJnz)AIG^hI?%XnAK^Y+%fM>oiPehvB*^h&M4ns9>`Wi~v4kl-m-;2$*Wb zB57#ENPv8IdR813Sf8hlu(6QB-PIU}*}^eq-k4_Nkj5vo%uZu`!gAwkaj=0?d1}{4exqCVc1h(T{m_`Ot?xTy8>l z)?*xae}kJEUfXgi=7}dN8D9iwEvV0ACBv2*_Qq1vd5#LC3PpQPe3Yv5^PBX&R?P1| zr7MtlC^){3@xm9ru$+AI*UD3#^3?Kjn$r(?@Pqjd?LQ*>!E{v%i_FmKn6`|N&~Ph? zZ>jzo2Lwm>H=qwwKW!63KuK14#rxeFneaVVG%T#X{;hA8{cf?3xlf>9jQZ|(Pb&|& z@BPY4=wsgJ(be{szU*cE0BwBK{ZqQ)tgY_iTCiH%*8J7PRY>Xva+0gES!o=YXCbbE zn?y6m6n#ke2`3z14xgp=>9OTmzy0j;R=Ohl zFxt-t-R9Qi$L`TgdA=e8YUWHNw2ZAMs6*qL-%4{aYV(yVx%$#J4{&k|xn{LWGl~lL zIa}=voaEs55C9dfFgdo?6g9PMv<~voKJ{6A_8Q4GnVbbpmhGy$RBCEl=X9d@qXC-L zNeX-E#ccTsBjL3)#c+%!SEuT$wrk*V{MumC(l!{T@JaZ@tWj}WPfF7m^3Qyu^O=xK zM2wsBxZT)tb#*1qoIECreXOhzLRvJ07%aRPV6!HIqgF$mQAG{U<#Gg!6{rWMPy{Ma zA_*XPFhsa_nG8XqaE0bN^pj@)Nhj0~(?@q7qnlygPm2nCw1t}sK1q)``5-;E=1X7t zGA}$%KjVyY!f{`qD>u8)U+%<1#ne#=c`a42ijsX2U#&XEKCZfSAuw>YL9xO0D3w!Y z{|2Uh;D!l&@9nyDC@Lh^;QvxJ`XXxRTI#SD09WQbC+UdKc1xkNzn`exIn0kIMOqDPiwL&+Np_ zLbwxoXS(Y6`q#a#ypisvzvCSb;ROKhw#JQ9xI&4Bd0^wpmikf)fv@>R%DNBZGf$1> zz23kL=4=q1+AvAN$yxuyV|#G-^qx1nX}RlN?pogV*0(YGUbRn0zw;gCu)_~4ccQCw z&!?}Xe4Q4~hteNNX!ss1-p-O$v+EZ2HJgTvwjBk5!j2sUY46%rX;3b1ctU$P{aVtA zUp=urkLET$mj3vMKT@9lw5ON7_S&l)aqlC_bD#a3@!^4Pb9QuZ&YHSfrQr}>!AXk%` z2I$_j2*&9JQ#m#b(QWX$I@TG=5KBtO>G?9aM>8TlFWr^8`L7_<$$hW5x`)8q8Z^uw z4;7o{vASvybo|428*fTqzd&EK;X96K*w=WJ(f<4IUrs&c6dniuYK8)7D_NWYqAR5N z+i?aq{2MmZrGx1JW&-#BXYNe^ue+wR@e>J=R74^{#PGh75JDn|XwZtbhMKC>ED{tg z+TyEDd{i~1#%g1xREe63lGdyeMa)Wth_TuRNk}vz3I5Ns)_V3{d!K#oy}vi%|Lynv z-M#l(&wAF{!#Q`~GcrY=RDKt)`{ZM4esIAL4YvRO`&<6m|M;Bc`|f)c#C4hJTR3&i z#O?mxGL{U)7zDPq z&P$RLU3C@TvZ$7VPDLN_z%+8oW&%19;XGf^Nt|QN#u{srHT1PoOF*fj9HQu%OuI5v z_mv15%cv;uk#3bN)3S`e9XRr+My>L+Mz_%8jkw!*8lBP4C5_iL>ISPy=hMa7`~^yR z!WVZTEA^NHrJigO)3`X}V&4}g*rYOwR+~)@Dk`p)qL2&6Tj6x(t#EYWM)-m~^&_X+scL@N@+b{Y35`;s zh8ne5pGB9oz?LfOa=ArWtygoo+@~Vxz^d|@k9^b2$+(e#W5Pw$2T(r~kL}@6sI^}< zy~A0(L|_{8YyF}KW(IkPOxZG|VTZQp`o2y+cnY33g#7j2{EfZ)n3pQ>Vc|U8$2+lk z6pE*GZ-&P(z4^^=wi`>{j5)w-Be|e%6XFJUjh+#BO3mAIhGJA7h_jxm-Bi^0q7 z%HpSI2b8KwD63nn{1VN?#o?83qtKUeMd-u||?*&~|x2qV5DnTdU+L@y~k7hB8`(@0Ml)O}25Oga9o{BlVA?r{Al=j^_C z72%n9B-5vG)69d>-WTDn>pS1^SEuJ;%zqQtb^Zt5`+Nqr-M8WF!U5axPIu%?Kg4x{ zm%##`ZmqGaa2TGX5nsd7ayZiqm6q)8c--$jW_s3hpW~$Xd=|cp_=WtX)4wzwgy+QRC=~+qIFlP1iJRq| ztle2q%CtaY!`WwTE2174;s(jMmmSP4tnYW4{u4)1pMSy$c5?{Z^^zCA*zVBfsm?dP z?sd}vcvhkvfeZ#kw>p~6-8!)5iM746U8=_XV3V69E(#Sai;!>Iw#}~h`?Ej$v*~fT zOO<2FdG`MIzkfRBm}907VgY>!ZWMYp9uWV|cf6xKEL{9$PQqy^o3ch>^6Z)q36GS* z!BIGFpHx)arlxi}@&3t^(E;yxq zCXT?}``-7SUihLHO%KPy>VtSz;A0>2*y&K5%0C}=ePV>OAuRr8nlSfmgB8UU3d_`L z%lRRJ=)hk@)(6?TEfdE(<*$MEJ^+vHc?*63JnW$logRumet&)**Sa2wABL~MHGy}! z!yTqK;8mP|@#lX&-4NG*e*b^#^^Ps;pqAsz>VaIbSC|?G$y`}stCaN-x!JJ?6CX(#b07;OF)wV75 zzGbo`XD0~5@4YtF`CsG>q^UTBqDI_QW_{fDoNQa0;#-AooFty*i!_T04wBK>g+dzC z74Xhy-5GX@mDSN?>cFX~4bTS+YR~b;Z!l?6UOpy5kuiBN;2p{fCR=^?Y>jgM3 zaEIPc>Q&*-86aVdX$#;6z^}BDQaq_x)MnpJ#(oC$^=j<1DtU8N*Kb6*?;HWj^lS0^ z(UxoBi{~|VE!dH`Vd9>+ChX>Rckb2j<{3Uf{A3)NdHX+~G#$Z*gyWPT?X3@MK*q;D zEiswPz@>I-dr(BmGgU4(<5b8UVYXeHN8{M^BaC*%BR_bA@wKlx(e5z*B5pF+zJ0s3 zX*ZnK`&}HN`T`cyXW?2ho*LsqOL2A~u4p^(X8R;>L2akS4A>4QITc=-hrpU3*phy5nrtaBs# zLHNSwKY!XAr*L^xnU5y=dn_Uk!let}w}q4(dOV4;Db}c0;~FDY3VkU+RA$Evo&~83 zir9t*HR|{%t%GiG{plBQmgN8Z;U8FgzyJO7FrVKr{VSf~dPlr@=4rSg>Pdh3wCTdL z&c(G2X| zLt<-+-F$9zZdqcAP+Q+A{-w4hPNMUkrBkK(L*z{BqDGu5L;thrNxU+#ec6g0ntF1X zN8r~TeXO=!tGb5RcOZfo^+lEX?xteEPQwsnUlmiL^+E#zYS4!A1!6&U z_Nh7=CF_suBk=sPz5XFLoQ}s4ng`=O&o{V0GeG#;fw#=_Q;b$4f`_{4M>Jg$R}sktML!W?n)Bc|8>!)vD}JpS?1r?H^m zktd$6{}N8|@vh^C;dO7k8@qW6iHI)EJjJ{?H+p~EsbPN1@OkdW$ndcxTtM!3wf*oa zyQ|qvGo-unK3BGdBCiePyREsqI|^UMTsYFk=UNTUcBIB%$GwJCaixUQXG*d)9rsZd zdqE0TbEfc882alrC@2c({u*js>1X~fB1)%=Z}};^>$2$;?fQF4Uat2#!}*O z!Q4BMgw+-bsho(24nV)=(fR!|#ce%LyVyPia1lQ(mH1FA`+=l89Y-0NUi#wpVc}=v zq4#gb5l5yQ;(gG*aJ1@1ABwt!#lpDK@-6M7)Xy1R_*~dkGt#cv=5?#5|A#+^_L)z6 zdZTCMpK)0N|E_i50n@IS^B3?GeVUKN&<96oKi!X+&6btCRwHp2xe@ zL}X1MWh%NAXl-ln(*8d-P9a1C#-?)-FBM-PQPQD0wS z)O@LhU4fTE-I%MWce1k1?xX3tWM91P7PPP@X#;6$O$8pw$99&~1B$|7fcsRH4Zb|E z!zE2=$DrRF9X3h7> z|ITdI2uR88^s}G(^z{4}zsR0jc>&tUM~pGqWhUU}>lp8T=eyVuXg>Q>{b8W=QA4by zqAsFRD5_b@M-ZV+w+bL2@^#o*zs02JGvQn7+_ zX#k)oiOVu?<~#ZXaG$fuD7#R3W-mp`8;V>(Iaia3M^R%*DillfAtp(8&7%k3nl0D# z^}CE1X&N6*rJ`GLTdSyCT7lUym65lmslBZN*qI;)H!j1(jy{F8eaj3chM1W%)v=ex z<^AVe3yB;8JkzH|!AwW=TsUIs!+;$PBQf~or!V`LJ=>U_q0D{>9)5wIjdxief*UIy zjf>3p-fM6Cy2p_i?2x(B<<6O}KI3Ctc$CV%P?NnvXk37bWYOiJF*HO8~ zbJ5w>6dnt^KNd(bw=SVJrLLMZUJMR#QfO^X9j?U>b3U4fk0at@l8Z`y(H@S|oIF*} z$NAg<*F5I-))>K>e7SS=uGcujn5-H0q2X5}Vu2rX&cNif0zL$bdhsncz-qpxqSN5B z@K8bk66Y%4EW@^Q9F0Ur*|r2b*K_+%xLWF-vBYbcH1t_h+rgVa)Q>oV9K z6zkNoY?H)-+SgIEoqfgj?u%2_SH?BXd`2r1Z9UchU3S-HgZL|5C_GA z41)=~1@mH(JEjO13M;T4|0pEiro@=Xvu!UBO{}SsiX8|>b-$|^s1wVnkpmT9VVem$jyYU(zY}+%mS2i)hw6VM5S$+Ex&4o2lgmmveVY>43LX0 zuQf?F)C)A87MFDNGxATI-seJ6#@m*&h#t ze&lce_QazY-@-z2=gastRMc}3$v;mXe<6hv4gp)lFGz2Nv{HH`YD0?=cAl3nTp1|u zpw8|>Yu^Hnh@arWc04l0YaV$G*xl}WSG!S!3ymlL>7P#5#hWP3z$08<^nw@KO(UaI z^_}}mUbPNH(CVPX*!6bOI9yE?j`P>%aUiX4LU!N#-LJ7{h3~yS>7?*=&f_SZfd}O8g*ON>_5O>`WGETi&SW;pFcq!M!aKSe5T~uE=!}gTXBU@z zwGk$%fUx9g=5*l`aIzBc>t$3HghfiopcKGphO?|gUFmTeH}8oalmXPMVI zPn1U8xKa<(eo5kNmD9MJYO17S(?Y+#!oxyPIR?e*ybVEBh1kChT-n{b;?q)L|JSJv1peuscgl}2|>fr`{=NQXS$}cr09-3X4q!s6$`T!1U?We z08q7vIq5Nj11q39Pdku!`y8-#w)Oy56IK$OT<)@$n?8jjZhwsH!mfbl z0Y2}qpNBg#|FJ++I1G<8;ps2GOBd20sx7X}-j225h}!bf#WEf=hQ1aP2)L74fha@E zYus**J5Yc7k&m>;*YJ%ie0?8ZN%(%8&U`K&q`e>R&g2n|ReX!FY@i^o#akLaH`>TI z+swB2=84yQL4QsBKsf(@&&MfTe3`;-cU(8dqpghN#<=#6iHm5v#xwe|#E71#WsWWT z+L^Pw#*B#Y7?_$gu$xIk_O_O^c_^bn3F_v? zHkR^t9p7i&r#-H`_jDd^7WwXX&#@;dP`@+UI}DtDMUUdzlrgC+io(?qv0JQfR&?HA zHa9FhYR(&+w&Q6CTnuv_^5q3r!KEgr;^_LvKK8Nc{ttM7+3?Qn;cE#?pba%DRl!*{ zO9K%xHfItz!&3JcLUV(aRl1oTq?y;q%16?q;>==6mluu331EYTaAC|OW?OQf<#x6$ zb>d8KWqo8tiDf1xg5T z_iSRYA`m1pB=QJI5+kt>N+NNxn+@v~*=~RWJHl&>rt+9&ZUh8I4V3L4=qAcP!lP6! zzSy7T$D3w&#D)vU!*Dc;U#i$6yD{)T!YLtnF?-gUm;qwSzFktqsji}P6$T?)uYB?jM#2o$tNRH+4nuH+Y~Vmoyliu#0m*$xK5;bTG z{rX&Tni0kZBh;P+QNxEyQ*R8cGE&!e!yK`4e{_XCcJr4OpiMhtyXN+K8ys!E^Ih(W z1@rfei|;enD<{>&hAV=}G8*#Q+PKTfcuYol3Z8M~)Yj%h-s7{+Uf1yU#95i*$wfxm zq^6oGR`f`k@lD3wOt)!cP9XRztWCc(7TKVdY1r6Q)uOz51339u;t^#Da!CNd3{&~l zN=fGKX2x=4Q4X~fa=zjJZ1GsE{~su@(WL?Qg-~k$|3!y5`o(e+Cn78LQiyQ-dPQ10 zsqRx_(o~3qz+~u`+&>+zsdkmRs7{I~TE>q-k~q61jCD4qj+Bs2;_3josC?$7voFKM zf*mftPI|L&-UZdI6f2aWw;adO1MtS9OD-~*S^sywk@~b-4!AFLT~hH406hO zoM4M?ZSH-a*&3w{FV=bDmjv z9A4pfjqTUQvkviWM=29WQ!GI=(#EcgE87+Q)S;KFsS(cW@$lU7!x?AEG(s$I;bpO801se*8RC3d^IQMTgu7LQ&->k>euiFiodp_PFyIF{&Krs zZu(_h`*w>Xk1XTEyBK-H%+sF!^y%AptDdL|4zdl=eyv@8~frX)-SvR zJue(O+DlxuxG=cOKG@zGzxTo1t+g33_j;a!=AZbVf#=@oxs_z$!t!fh`}*{nSHBuZ zUXPePiYfQDe6))*mNBcMMkmw8XiaPviumuL6_4u0Cyk`3Nr$0R%w0*nXjhy3V42q7N zOvSfXi!9qEl^27^+5}0@Y3(DDfRR(`lxznOmFP!~DWC1g>vx%MfU^Z$5bups^Y+6B zq&!{w9W0bz^1>HQ*SgO3>GGGmeEH!JY~xHpC#^(0)!vtz@RCgdW|@`6z)CL9fJMOm zNJEiQ6I)W)M$5jj)RD+I=LH+WFtM!b<2;9Wv}sQqS^OMcTlQbL z3-d=SH8l&WccO7#CE;}M_*t0@|RE7!;J_$ zmAhkUF<5IRwFO~gId8o6%NCpy&!fq_KJ`O*drD3pz+!4C@tRNGsmf~wa}@H=oO>c0 ze^fX>G#4D>En&H)(z*ukgFM1JuXT#;uv@m`Gv>DH)?U2NnD1WyE}jUW^t*U+z*5=+ z^Pk&+&EF2>?P-Pb)k@>KMKq;+ztkpsGieZd^5zz0Xi+r6-Wv)0XfYSbpa1M<8^C|y z2;)-v`j@{l9gMr_FTTJ}Y4^Cf+qr}`Iesf=K||`_TVwTD+L)&b=NY$2-YE0sc$OvA z$3NvM2{kWXbTO|3?R<4rw;Bj38i?m!lEijUE6hTlEJ{(Taj%0j0KGo14)S_rNlu4L z&5{oVC0|ueNwQYZGAMb%NJdfMSrj+bwr#P{rQ8Op3M+U@Iok~5F~`Z+4YGfi3^>b1 zO~lZnOxxUR{+S0Q%UNzHy)r!VNNm^j6kY1+XW^p>dX>XfI*_bUuho}0W<;%k!$Qeo zg0e2?{I^XR*Z86`+m^PCuhGR~m6Lg9-vB|&x;}jZTf7kGZNaUCRc@xmzKgslx$`X> zD9Su?c!fQ#FddJhiJPVyus_Sw^waEjL!7=y5OM6}cd8ylM^!8!mAL`?|d z;8^d5g~cg&-QbJyx<%dy!&A{5J7W0PC(2&&idRf;ed}ANYvNi^9-ZwI{hO%;Vl{)* zl3QfpYC?IyG^&eUfA(E zIOlR>#>VmFSo5Ze7rpG|(+#hGu>CmDLYPS6_*cDB>Txm8Sk{$jV@ZY*q&y!3b1^^p z=SJ4YBw-Vo4-&8A<8vLK_@pOIeAJX3c`M^9183*9&g(w^1@E(d;-CDr^XY<>pS>ybCW}FH2wPjeIi(WesE6P4?Yoq zTI2f_+)@9uKYQwQ-5Va#yjjK>YYg&X`9Lgc>T_9kd45UO=fp6L?JK(1%T5UC`|Yai zQvqyrsXeJEI?thKY?8M3Uq-A<(ge1md-3lfZ?ADc%-C}bbMDHu6ps^R7TTcRi;QYX zzQRwlSPbq8Z%gv2oZ37P8J#gnPH~)XaVh$Baq*b!HZNi)xx+^vV+T8O)(mEcYjia3 z^eta3lv<(HvSuSrfs~6g>O~y!lzL3fT6e=-=YypE+fSr9cVzk0#t}9?$i!F1S`rT= zbp@J`bxG%6h^U9LZ9rBL2Xgv08PLFKBeNK2*QegT*AMFC;!gG^huzptUD{&lJ7-OY z-Sj5Yz3zF>>7Q{8+{>|;cpR>gI|`3(;UeVAc-#jc&dX;6*8ZsE9&7C(g=$T;kHDHj z+G@YLBs@IhKh}QTP%hLSNI)J{Ww>L zB$_2$XFjX4O*{(62Vyhv^gN$ys5iz?MvToV&NC+B@g>Z$*C+_P(+pKHa9R$*kbc!eYlFYWLQt1k# zF*OorYWZ?4qM-;JSyRf1Td~u7gBF+ol?loz@nrGJb|tbxyJEp8jN&wx_Mv@5AOv6_ zGHQZSWv(=d#K>1J9#{2;T+DLrIF~wW2L9;@b}05W;k29_6i%a7>YJB(c!6+c0>PR- zo0))GUW$$dCMi%XI#cA2q){>18PeoZhApc~JznxH=I#ccsSil)auiUx@FHAj{v*Gu zc(>hmn~uTbEqMBxN8R?qgOtDVjc-hQ-2V2{Z{n4Ozy0t>*i9v~@H97>TPHC`iZ7_B zxhy_S1|nG)93LEaAO8%DGBU>##cM8Sk(kWC7^_WRq7`|#V7|__ZPP8W;Mj(oi)rq( z`DM$~*`NI6C#Ta-Ki$gI?N}PcxPr<0FzK5|-6Z*nBHO^bijTx~s}K9lhfQaG>&zAC zs^SB}Z+g?4P8Z?&u~FBm-87?5P^JjYxy59As zzr*|4-}k=vl^-}a`MBg<9!uDCgf@3j6d z-kzk`R^h3W&y1^aM$Ba_GfHL7lSm?Czpxzr)2mg_Ij_0C<^c!btw0}`?tkC=(inff z0On$tFE98eF2CU=7gxuE`l?sC>U0+NVOPTsr*qFeuX!zD=eD>}coLMjB|z@;6JrjN zk-qQO9@G17_2f;?Qc<(aL>*?8E>V=?V(df=+SRwI5H+(STEf^yjj)(&;JMu^R@G@DYU!lvY#vggJQhvI;w<-0oEp^+ReWT9(RP`f&L=wRad2Bq{o_gnq9Y#aw z)&<|_x`hy2xVHx6eNNvD!7xDaKPvqZ0>cE>(Xyc?${oFHsDvWMR}kix#m@ILxOVC> zzx%uPoX4j=^{LapzW@Ex5mVjjTR7RFF8PSZyqp9(-O&|a0N2lYT_B6X`W|v)X*E#Mg=Z=zJ zMm!D3_g}Lg4#w;4evBg*mqt~4}Pi5q9BWofb~lH(1Me0 za>~19mVN6BKVjF{K*b*ue3Q&K@%+Y1f_<8f#8cHAJtyN*ACyUzK} z`fK1#GqhGbt)JC3M&bJ+{OB^M$Hm1I`Ai?}Y?z=hpN((_D%dA*KlQ!y&Yj-y+JBf4 z+~eN&o_-7Op}#Dydp+fplc!g{?B#~J9-i}QM;*(N*qLb^2dMgSV9V?w=iXd1CMM%H z>Cd)nMCL53?bFsEGmE0Bl*uG%jju|wA4#36)~emAc_Ms5Q`9!nsE0B_bFYieEry>4 z0Y5zo?q$^QKSg5pOZ>t$`re~EtB!j8sIInG2P4#K89DHO?c&iJzM5;M#Rjxvr>}R& zTQg8OmL;|&`IdJdBAP8CpwJ-YfL4`zju|#MiHl_JSK1lE(6yATho`RRy&#V^S7nae zIVp9-XaSkvgW^0Yf+Tf+sCyQq;BIyw}&*N1v@hHENEh z7Ail&DOxU$xUk~QGEaW;lc(Rsj|A3vDx24R-W88J;d{RCd!PGEN8x(GAL10Kry8>y zXv|Gx{p*e}4zfB*Z_;kdr< zgcJT|I{3QRn=ZujOfQ4GZn?-f2|t4Fga^YPhF3G{sIvOZ<7v4i>vOh#(__+%m80J^ z&nPujIozvLwnx9<2hT-6xyZ)z)1Up+bT2HBpZC1yO;^Rkvj6vo7ueDDyZ-8(raRr~ zSEpOv;^+N_88}f}*Sbr=Fn<46g{3WOKvh|Z`jtnMJN&R3PB;fRU$2Kds2K~dXZ;*b zO}`fp^}o%nZarNDJ;(B)#~wR93UmD4SWupiM>KJ+kA5KZzH(pqSOHNQ=xD=)tYCT~ z)q!ix+Zy*zokW(%lcp(pCC5Rd1c`lUmH5!qdU2A*Y}ob!R3USO1v#>~K!-wUZP%QA z7DZR+`?#{A@1l}k7*4BG{st2&(BmPp4*qVA%NnEKNf+*)=gw%O%6kW3OV$z_P zYNjq6y&~$H4Z(nT7DpBouUTki-g$hjtM6}b8sX8Y```cm(5f=Db5Z&0zy9m?49HL7%b1TRVzP1Q<1x9Z z$;vMaK;Bu44;K<{lhaP5Q{=PdYH#LUvuO^P>|1e&X^GGiLSdPS^^&R_BLdqg0iqw27 zn@$wfg7{%9nE-IcU1B#c!NIK1HI-x$7zSkRKwfO1TS{sG^8ms?J-_T)?*lM zFGKte2-RU*GRe#Y1zKj z$U@Ql_(yn+8LoT#8lH2>>mDD3BNgv>=R55N3tlJ4#0A$?aqX1KR@k8rc-P$O?EAPn zb?Uxlj+spe$`>F^c^aN~7V{O1TogYYci5kJ;)%8>=Jjv4yWQ=k@8Izo6#-A-}-JWLX~8hBaLSj>uZmuzCl2&)FjD!N)vk`t0XFKOJ?e zTN(j>Jn6AqiE*Q1?dOf)4T#~guhI4@{pw?F-W*9`exXq<8$wbW^-Biiz+2wwtG{)_qtoAVWR~0pgIhSwoU2LQZi0 zBR%-VWwW8q1aGDA)l_okTrlcSNamijXtZXqDehis=JOznwv8>s!WR@d@E-%HX2^fB z4@Hr~fd80Abd=WxFEKzHkeZZa%si5M&pm{knH5!FPGtHcM_KryOvtK~eJB5|2}$B_ zBfMKXRBf&t8!sN!32iW|Yk5bv8hOdJOYv=0zDXnvCssCIZ=_?I9+DPFV*^Ngn+`~| zA}FfhT{qv1Jg~BrJLTeVKSD{`g$I!Agj|&yc4$!f-M)hOYo4zp{0kg~d-I$B(T+4; z4cAlgxY2fvAC<8&%8YDxZ~`>!+hT12TwU=x)$CAeG!h#?pPXl z579s~cEKIpLfgj%b15H7v~AnA>A(3rPyA5e+gF&lqrNz<<>X@GEF6(!;!#TNW0vA< z*zN%9Y10x!v;Fr2mQQA9-Y1&wbqg8vEPZ zX2^9OZaC3`V)vihz1)H9j#@ue*2#0Q0aEO;QLb27&!@R9_NLEd(dL90Y~a%_DZyj6 zc)cUo%hz~m%YriC$4?v!_0TdGO=_TZR^!don2VCR~T)I zYsg2HhNuN-f@DWrs43E@j@_2EwG1mH3%U zRzMwZ0c4{dV|6f@qW~h~#9N)rUek3065 z=~>TyjxCsuKmPdXNqBA^@5bdb4`2Vf*G<>K9iBUW%_9Th???;C9e1A*vBfzo;+&TRO@n1Y$1B>8S;YYxIa9!iWANFu8sJ=UW2A3xAQ7_Mb{`05v@deDA zW_Y(X7Z+Su*<1&!jq$*#$-^smr24U?i2L>^9-7Ej7}+?Tv?1+%o7y_3w9#wiMI1QQ zzxx$-pMHWdekYD7AAQ@~PKV#@rqjDoW_l!E;kSMJb*5)N^BGou-+SIW?X>%@(+#hS z=RM*_6ys#d@tPn$=!2=*1fwC;xYi)e2l?zTqzx{7nkx1|>YIjSP~nfEJ+Q4Zz3Gi_ zobG~aSRaXpqw@zJ(+gknVjJf_eEc6+{eSQ{rd@Dj2`|U+?Vgcr=8bJv+_f!5V*LIQ zBT_m^7;0J0b+>3f7u9adw?HwSh&Kg24A-#!Cf-;663kzw8{FjZ={C1L8aMa-3trUz zVf#_X@4-sE~&c6rA@p^&He_yI{HY9&1P`lt!229jqEP z?Wj?hDRfmr22YG{NiIy2cX61m@hfx!rlPc-SH+OR$(uf@_OPWng10QF)MsiFTW4j$ z7urhB#?F2a1)=GPXp`_RC3z_YP!UA6YoKX6$c%$=fOqW;GvVSAWQ?RX_!1Cp-IP1G zu5&7he`W7zWKFAzpGFE-eZ6`wrLe8YS}K@aD83*}m$RAR%DXFeB@H%jnf!q37h?5=y=>*4|0 z-~)x>7YF$ix*sBdWF2vN&E0YV$;3N! z`8cLiPCf;%Vf>o4?*NP|??S%c{q8?K=t0L~5p~(=?{TX4Nl*O0(@pS$f_*?68pNSuaTr~bQ7M72H+~e$2H&5#hq9R>MIp$n0fLW^oH3q{S+NO3^l0j)q zpmE_%epklp7*D_tpvV3G|FKJOwr$%s?S{qiVTa#%`u8t>!S1O404`T}@BU<7$WbsR;tmY(ySeI+*E28A7HEIRw>m|kVoZJp?Jluor~nMP;Qp97+pKG zsjft^VyqH46{{gjNs)>TW+A>jN6a+r`~Gw>=M+ONwc?`3Q&E1`z$j=7-U~@Oi?8;6 zG3qcgM9^85sC)aL!Q!#q-;@9b1va9@+EiL_qe_)jYz&s<&5p3KK+M?5=fN#;5vRpR zvgv)4dSDmpiK7$&=7cFe2mWlbQjX-@#Y52a^$-_)t@~G8@m9K}XK3nH;RpR=QgcEw zo(5EXES2VP=j`#;1vsQnKWF1k>SsUaxpw{IIcJ|U?Tu5rXPtf4v<;_%9`o48Ob>q0 zgZ%E)i{l97+(|=k?FTO(&fa=&Yu?hv6!?UxUD$%6wkizGx5Q>`WqbMTxF!^zLb_BIj*M|3eu^2F;%{II*mCw{&~QGmCS%k#OK!s(fIf|f zMYCUc=PHjTUxXucyd%|)HiC>t9(hxZ9tcnV-ksvfa_xevjwMf3hUjGkp*05(lR-|E zl3=PEIJO0jUtZ9uPCwP_gtsW|F`a(K8Q#V?h5LD2|3^HZ<;e$zvmbcpE>nreYW~4E zh-b<^U9fO>WCZV4ZA@ktAJRKlE0oWSpZO1^Zeru>8UOiR@3bRqI#qkY4==RS_!@8K zU-|Nv&GI7Lf!=g_cD7-eU88>MP1wHSHC#i3rZ+mOJgVU2X-K5K@dl{>{LlZiBjA=O+zSUKE1XG(=1W`!*Rh8^hvFce0Mbf7two{J9c-zQrZ8%2;B()g* z8#m+g2-L-*BXTT5$*kSE2jw$+YsJ%R#R%H=gB3`Fit;nAtSU6&Ixj-a&JfJ8;_x!H)7qhk6;2Oo;MEk69|l5md=w z4@Y&QqSrp5hk9fqxr+ebj7yJd!Q=R^0<^IUiN7F?j@9wn+hj!T}0TPqptvycbs>H&L zpMB6L$as?k7m7TsdGjNVm~MURTiXp3zk}0#TwL)EWL^WQ)3-gv*6Ql%xz(ue8dQp3 z^Un2aEenm0x4#eh0l3?ElXN3o|H`|NxwvGaH}e>Ms;(_^L)AIuy$&q_NM;*3_YCF7 z0e}H9T>l}vUd}qV1-4BLsx#;7_xKo|+yBb1j7(>;oiWGt+CJKw-<`-T&p#p$W8!X{Wbf`2zv9)@vHgM;eQ++W-{fiNhvLZbrs-fjw&^_BEw*>q7|zw2{IoTI zX&j`bIluR2DT#b$rTt~-5+uxBVxP&EVsUxvspt}32YYJSHFUza2HQk!RfGX;uT?h1|sgfDBU1Ra}vD8p_It2Tg|Fy ztqHYvs=SnBUj$KT{1B8_QZbul6pya)NX4_C@yzL4IJ(ML5%M{YM<0FL={C2yjXlQZ zInQ~{^s<+}bUFl&xZyRDJC>Fj(6TAEHgwc%Uigodx>z8pm$iJkW(ywn7yk3^)XRWV zT=JXolwE*Rx9lU?Hn@n1HjUg!+7@{Hrmzp;#Y-VAyhR2vpI%ZuO?8_@U*z;uSi{1Ybo!$xC*qYf zHfp2feV%Q0hCSmy4A=YdNL%4Bqsr~oo$N>*Z<6D4FPBnoQ^mAgj#+9It#Yq>`<;tl z_Tn0QlF!^uAt~dHUDw9~lCNIm5ym_w@@!tv#vkHFKaO$cGK@k%rM5+$J>EDbZ9@64 zh}2+Q!V=_j#+SC;{?2VX+Tz4jDHSwJU>T%qg`7* z@<=`gn3_e=+Qgm2Cc!t{%@^+q7wd2<^}ci1YJ1cR!+2NvTWCi^1k8-11=N~H?)55l zFQ~^aXQHUhh+Otr2gzu%IGKIYhN<)y<3zHfm9W(!v*@YgU*L$fM4|a&|5rXMTiYF` zPxA37;$Ap~cLq-H@!i08y~|yuZ}ZMu;J<>?U=PImpZUg)&wciD({*t~lGh8W-Qr=M z{i$N{G9GZ19n3;s7&a4bp*->}b8REUsJIk|VDGu&mG|vhK zq--9i6jPB$*@P_Hvpu{fjKyO*N+KNcMcMSpr-7toMUI2W<1>^)sgIPeUvy7ZM@VTG zY|2q)1sEKnQ(HsqS)!wv|M8Py`VU*{q!d4k$;`0%L;G`!t&1h&`ZD7`AB+BC^@PFRHQIAet1g0Sgfe3$iAyy1oRGUg;zx?WsW4a;*hh6y|t)# z-zs)!@z_#c`ZWf*rccc25^k$<-)W9La>ux80Q%PVz8CA zd8AQsQTa5ywFe?KC_Ed88!hKVm-I#Z7k~Me)8RP1$!n*$(D)*r|Ho6-uYJvl(|$OG z&x`SSw=!vVEYT2sFb`pouDXIza?I^Tiyaw{WYQ`32%_d4R{Df0aUwW$2t>dZJ$Cl z8%tW){U0)bsg1YX%g`DkkmrK5($Ez!}Y2nz$KDVb;NvT+5EFg%XDhJmD0(2PUJ(aab z3gd0OSjB0ox7^3sg_&pn5UkVp-ZsVeIP)F;7%BBX)5RnA2VL74)9SRT(K_53Jv*Zg z-#DZhX2dC(a#8hl$yepDX|F%b5#(|unYl@@rBlv0iznln$3qUe0q(N>ku9p;_V%|=e}Q*E zAAabews3S?d|C)OLen4w$VL-Vp%Z3h7x2?}45>{<6$VZFOyM7mA7@G0rWj1-)=t~v zG#Bs4JsJ3t_H^7h^Kr8~5=S9DC^ z?MU86JIAmeJcz|bB)(DSy0Bs(OmxE()l_hKsHh&rUO-WBnnGsMc?`W(t(#@UW}#^g zDqcWa_G+sVTWI4IKxXVe{tXl4>IUj*OO8eSki>l~sERoIS%?anwbtqM)feu+PRlc`mwHU88GTXU_4{ijihb^(|Qs%RAXGBWA%57&Xly=9pQonM$+fUEHLh*`M z-g~+>u7UjQCqFe^Y2SUOU&dQ!{_DU0tK7B7cIP&W)_in9vF#iWkKdKHp^m^%55*8t zK1z}g?PP!$IM;~LyyKfW_{bWbsy`SD=hwdW#EGY?KaA(Xz3W}?va;Win~yz+a4R`` zs!e^Y>PxkyMOS-kgUtg+7{2S<*4As{w^}$?3|S|c@e(X<CCrODZI89Gwaw?2$ICGQQ=J6ckXzlL%FBTqZq)z(EO?I{qJ~U2r zWtQv%9jH%S<%~MzTR)bjw$B-XLRKnx|OaIyNdLJKTK4{Z?87{pEIYA z$2)!>{pd$cN8!%nZ{YD4r{GlecQ5#XJ#_f@9`k$lYC9c?8^!9IL*6KAYz^KUpnz)5 zuxhQAAZ+Zbrj+u|!i3o%ZRFHZ#kTK?)AH|p*Sn|t-1olruH)z7*>`81eYU+H_k#IOX(($1bfi(fej z>%I+HO`ZOdvr;5he-sv57G$WLfRqY0$u5ne;^}j84}GfhH9_TxSUZ&q!ABeGE8C`70qj4Y11c{bg`vsa%bkM*9sYb=0_gklOr)`P~X5=o&7lP zhZ!sjmQ0r9D`Q)X+u3@~zMkW1$~|!Arw26FvkK8{M>{byM=tyH?7P*EK9a~a*cz z*nSZY5xxnodA#K$@4Nz%2itJ-#HeF8E+ArOn> z)F*0(D48pAi@^kxASF8&5bL`7)owtk7xUt`IBB7}4!Wx8DQXdpEc&pjO&}=9Ht48a z)w~hkmh()uficI)7T00NGG!LkfNR#C?4xT7RV(rI#ny+PC2ZS6W<+XFVXjcg!TDvo zqymxF1v5Y7V51}DG0bwc#*hgwJLWAuG?ki&5RPkY5E@kGtTRRC6^fS^w%ouq$%{Xu-Dx@pH;Mcl z-_n2^M)tr1mATWn#x<^Cw6x(b!XMz7dH?i|cTC^MTS)lOWnLetm~xvHQt_eSkZW;l zr?5?)(FxcUg+eGurPiTpb>zEfp|mc9fH%zWu|%&u@x@+?Z5y2{(3_5Uzj#1j3d!dieQBDoisJ8Qy$mV$f~vRD)Y$aj209c zOQIE*qTsynImSNpa%J_BwGAY)mA>coK>!N>X+yn|l}QjfO?T51Y}20z7-$fT;}!Ol2_01DFK4X{oBX3#JgmpvB^A}VDn;-5g88* z8D@fBKRb696qa3=IO*EGiTCJ;I6uqt@a---XS^_|Waqp&gF5n8F zZWpyJ#h`760wI4TNZ_tmd`RvBiH$C}tc(xoQh;SkBFo4xZ4{b3_1K}ldNZ?T?l7)Q zmdei6&zb~?zPUt;$3(ZqBEwq>eFc^6kTG@XG zdtDIs-kUFQDD$?FvBL3eGt2D_J2h(BFf~0z8we!xFMA;!zxc_3*p{4Fg_w`HIP{Q1 zrq`eN+UXh3eCBk2oW4Eo*kh-czT_p-oAGe)ZMf!|6^Bs9-wl>6| z$;=j`fALkHEw0KN!&G5AW#er|ZM|9TAaRL=_0kXA0pb~eSOD{S#;f5y)?dckHva8H z|2DnnJ@1)L{pd%{daphA#H-#8vS%HZju-Ea=D7_R6UL#1n<%}#{z+N7IzbT2i*1Fb zHa5_4Mg0->xvR1P)irD_AiWRU*c~Z+wQ)Ad3%C3ONL|y%CJ4K}k7O4ZRmEH9CbzON zhhd;JL5!Rbl z*d;1)0o6vaRXVpGag?vtLF^+uJr|o4M)QRp@)3@GlzH84IL|Sl%&HwZHIG?Y9C$1P zRS7NTQ{&a}bE7<8niv~st>n2-e|)&-f+_{dQzaEktVv&EsgYD!wXprHssUwOI=U{^ zFmGb0l~S?-Mo|Lrt5}7(XA?F#tSxZis2v$In>WR&>=XI0=mw2hQwbyP?9sSOym(~r zBmQA*Nyr`gs5278iaW-?#)^BcGP1o#AJkEs*2Ua=E%orXaXmsR_<4wpq{mskZ(~#M zEgHJD-fdwy>LA;_RfUzBy(1;`ol=A{&;aCE&J!L*+;guhO*h63GGF+@7pA|*QMWU{ z^)0*eS`QoEci*enWYofO*vh6KB94J9M_J0mMO3y}s!a`|l#O)RPZJ!M2koX$HSe~z z*YP2LD;CM8e)QDolv6%9-3q6!Z;QLHd8+!xcpJqhaUCd+KB^y56zhx4c94R$_+k+j zEKSIeHDhL`M2wSKI72ift!=An7qJXGhQo~#c&2M%DvXLOTsR2uZATnm=K(& z%|exR8(AkA#l=y##i5Wr2rdeS?%+%Db|IM)?Nb%U2;1Y6(Uq{ZKrOv4RoVQZ_j!!TSt^b^0Gd&remR#1$DbcC%XZD6YRjO`W`BiPZl{? z{=ZY?s)%auX-*MUrKA(KmsdXS*OU?*BF=kH6=C9#G7C)uNa~{R0m0llG((%~EXg^F z1{-0`B0-az;doJ>d6EywTTvnmU&@5beJowg2T^3oT&_l`)B(C`1&$S)>>nz}{|lx0 zUdp0UXO|EYZl(*+l6HsLAQbp<$_`CMlMeYVjT%FGNCKI7VoqZ|DQ zKp6U<;B3B?TH~_qD%b!f!gd|lsL-uOnlwsDu8ajhTU+JJO1-hWHIHdGUe z7!`)3s^|Hu-O%=7r>t!!AT-6}4Tze8$_*<*A_fU`JtWt;aOCqGKlpF|Hl6&z4^9up zD;a;|p1)y4U&ATu_rC9a(-m=Q{Ujmg-n#na+|q~xDg0tj=bWo zyscRcW~xHn#3)$(3MeE}mAqgWXat*z1*byOW(jAxqVoP4+qh@{qUd|660&<}ufKUi z6>ZLwJ&IYA%M~>$Ig(NK|8mSM_xgF=`N>#P^W!(9Ik*Pg#!@&~$Tme$BS@kJY(b3m zqd3FFTxF;k1aqnguGdtd~)3 zP?>|tNHW_+M?*|zHwAUuXv`GGVci<;>S)QQ!a+TF%EnF~Y_$FcvA9TaHvsG3+{aZL z!9?Gdt_rc*>9)dVYsr`+b=6iNr9;bS^xq{u@<>AKr^3920!OmWszt+wzo{&mtXHh@ zz366(c0JExJ$Q@0ulK#2xq#$_eSZIzon|K;6Ci?J0S#xC2L8*;(Wt!YC< zpL(ml?)XNkV9*9$2e|Ek1MH16Kj!P)IEUCaB*H8eV=t7d^vI1;ydlpxmKnYvh1jFqIehFAat8w{Ke@bxU>8+c;7Wo)9;B> z*1Tcn3#XknU59VfiA8kFysDO4+v2S46mg8vw`%*)0z&V8p;|80WLvnUSkX0&icZr0 zA`QFs_sl!v;t|0Ty&TqDHnY=J;VPz8HHhG4XNnRCmGBmQCL{XicHmky!TYtx*o0%e z)=pT2KjOq=HVhziiX}lEVjO_Y8ewWP*Y>GC>SHfXU_w9srL@GU2!bvA)0=5#aVT;k zm}KuYefB8H9nH@%qDpH?ww5-7J?)$lPuADnQ2xYD zrsZ z*=4lPzY2UOHj6PZ#g>IEGX*~)hEnee$?y6$24d)kyp@daYTgSs2AzA}dDCe)MbEd# z?6=?5r?c^R9{%wNBX=4szZ=&-egdbhuZf$7?5JxO;?}CUr%*<$xd-TTX(6)CkJ+X+ z8on9tF+=IsgjF0|a3^sYLUu7z^%-RWsY}k30MTtf8rd^hulgxvsXVy`!K8i%acm}>rwb!wRhQzNO-S*a*WAsM=D6$B(^UAnGMB(}VgTD4KvFD(&tjqwDPzPl3ZlU^?R6_>tDnU8&2xYL$#|F)mzViDu=3_nS>^=Gxvi|v zBWbzj^C_%m9Uk&gEUub;(v$wO()%q-g!8+zrSUtpf!2hTBJ%zVUFvZ!qbJ&?8+;&I zft#a!#N0Fck}>Dh>$8q!=`{|nmo!G+=5%Lip(q~WRnEmEgPt{;V@a&OGLIpbj2?3& z3Zu&4Rl-0@SL8*&xRPU%4`VjP{DZd1+vSYo?v@o1eeg#7e{JLKD1xOK}VizT^zYov}0@cPJ_AJY!P-aIiqW~9E2#@MBLTrQw&+tCuEUNYNK3v0&0{$Psk@rr*obi(GC0Fc-$GNM+cCvT%`mp+MMDv_z6 z9J<`E9olTm2b390d7>$>kx+3|(73eJ5AwUDCtItNMfmB)vUs1#qX(j4b*be2EjwO5 zQd4c67D-jop#~jR<4&B2YX+rY7O%%;mSK?X5~DvP9Tb!`;nS1r@UcWt|W_89K=zyt8@f~ei!;|{1%3-7p#-FZnm+-jDPSYya}dpIN)gX zYbtYpFc@^`47Y~2sQdU(ucwhYIS0C^E%@vdwAf) zWSdpDJgiKm7RxSlISVRgi-|t^jU>s)o|Dx}Y_176D@GtQuq=zE$nZ9qT`xa<%g?cswpT#GezIn~E_fkU;_r+gl|jHGGjW&H$vM zVTKRy62wH^6; zph^uA*^6s!MEXAO=GtTlXd#S9mdZ#F{Yfdagxh#5=Ai?bW|B@ zs6>*iY;s!nQmA-xes#MCoq{{E_r)_V zc_i|Zq`W97JZO{cq;uP>-Kp{H%ncHE;K|A@@|-J!5-Mapp7nZ1yibojHGD9E3NFLP zXwtuhn%m;8$XZG)C=@~cIx>&OkZ?-fPM8>d|9Crz<*dLz!@8|=*V)CorQ8n?R1Rus z>pWJ2W0$bT7#K_Ns~M}8KS7{=ySD{?TkpNwNwk@7PMSbU#yIiVRCGjX;v}10xTUb5%yk ztIlBdv82mW!uETPu3ZXO)q~;+-V&aAp!yrmwbK5|nByvRq-omdyz6V%HomyIkv`8 zINv0rUFO-uW-FLY_-7d3!*9jSTI|e6XR%J-!B5zhLKhCZqp z9^agE*7#y`1uc;D#pX5t43$;-F-ne7vD&3c#$u*&Q1=-mGcJQc%B^K7#vr$^d*J-~ z$U%Q}E?FJ>qau8EHW%W7=(jlX$mwOc*70gryV`Wqo7`l&CVcYL^;Pkp@O}2#x13I) zDQ})R1=mBKeb!miRj+cDOT2jO!m(;@L%T>%XzLF4A!ID`kL5_JG8ag)fJj`bD)cz+ z81(~4Wpf*HvvUE8{?(>XgwvM{$3Z&UaffV@a4O#!WBi8ol5w)0{hQvow9H%5Hw_0z zo`)U}{m_d%RbM48Q!!e?LYmq@TBgXnV)bZmRwi@%!GwBmR|tYb^|m)99p@g?D(2dh zF~bTeXvNIj|InN2h|ZM#EIiSAv`=N}3|O^3cX_pS@c?b2-hXuU4Bq2rfDj0$=$)^! zT3pfQer#k*s%n825Bf;@s`3^Wxq2^m1bCZjsgy#rg21^)!_S?33^)p9F&MTS zFW<;Ca@o0C7JI48mKE8w2rU$xTSh*SWU;Cb$i^hBzVKbj&x}C1anHIetA%ZZj5~CS zF(DcnLKy)2CU1BdzgVX24yRSdY}bMw0rTkN-niTPp$~b;bO0YoglAX2`7LjmPCohM z=~0hQ*%4PMbDHfVy zy1@s>fhJ9?+=+&tGR6a2i4+TSm3gk&xfKxd%xfNfCX}OUii7P8^1>1QVR1q!eJ#{J zDUSqd{IQMXrKS6AjxYsHtU%WsdCYby%V^eF0t|BN@PT}lXe%~b!LIVTv5q_F)RD4VjAH?>g_i7hJa0Yc zS}yneSvOjA37>J2F<&p|Y$1x-657?xXE6&K_O;ogUdq+NQDa>}1y!jJ3d25F8oPnL zi+mTS?WDlyf0z_^tIXkA8SOsmR=1ii!jVWmmgsN)_HU<8ed<$YwEOP6Pv64Zbw2a& zpTR=%a69_Q1?EmWEiDgPUsl^j&UQV1Q|uBh^D#t?p!?LUjCqm+N#!MOgEZ|{MR|~b^3 zEDLWmF2%NxT3;ZgP@#OFw}->S}IB}EO5{*+wwykRb<+2x80`a{?%Vi zzx>O;JbeuBw0`l6Up&1LZ`gV5i6`QyeH>iwvwGGN*gc>Ys-VQYp}=b_nVKN~FNv8qSP_|q zaI=hBu=g0N%d-r#oy(l7lf$-cbJ!zux#Pu7R~pz*9CqETnacozRw zN0nV0t>`-!4NescGsUXdl{c;-w6+6J6Jpk-+@@97jAMB@wf(e=bB*y9Q0) z2gyOR*oE|%nuwu_ZA73=ay4!?u${3_icYw$$^qRlSvRoJxE5?j(&nC=yFrB%g6*R4|3Vf7MWpIy1LNFq6lhX4z9Y?4}9JuUs3oxEFO^-_8zJx&LA`&v1qjK z@z{?!XYuNVzP}(<8w_9ksAtqJ?{kl<%4`h45oS^9NMz&@)Xy>?)mlnx6ZE4tw7S@L z6hjo`Pq}oFs}GecdiBFkVn?)UpU_cu)l~z~K{u^xLM`E&PKiOb_D3gLN2E=ifBB4OOxw3_pB{AVvC~IC{9(Tfdnvvy0Q0pWmZm-)mBeH9 z)4m+{s*k=hK=BF)LE`lgrB{M0t`wYvdY7!ZKf#gmcbir16wa9dRno zk*<#2NLy&(-VYO06laZQPCxgAYUK$Z%_(h6&0CUrKd3DpH)U1AA*N@@JY&&hB~EJx zMGklj002M$NklO;*~Dv zL7XhJ*2>01j+__+>OP<8$Lk#`TMWwHPAMW3ujUHd)%ypEzW5lPZ+`Qe)1B{hCo7+H z(n-^e4?AqyXWxCNU7&lx3tliC^S}pA2VejC)5YK+{%4V_AJ~SJYPFW?;3r@diCXMW zjVT9MWf^4p;NlL?M~HBr8%8c$x$oKHsGy%K5@q=dF4b+`0;zhaDT!Fs zAZQfVKqNcn#$_`TVIT-;dUS(%uyu8KdBr{PoyPapE22^Kv4em3)SS!urneUM5CcBR%-yxB3!S;g`U2;p*IC zEalINSqE=2L4p6;gt`Vd6!M#KSys0dnmQlb#N-~r2Q$*gKLf;v@##n-M=ftisoxDA z9T=>c#>=5EittFE#NTc=nkATgRcP`61dPPW&^OoAgLBYD2S0>@eyRcBSvC(DA9fg zCi(DE$_GX9r1=^ zP#o5wUW%C8jV(}ZOo-Cg6^ccc2$zULE+q3=qA&bwW_~j0$C@+0egQ?CB(+H^4a7|obU_j(mkMth+*|Kubt^f}A>yH?IP zTvGW%U~CmVT1ZwcY-Gj=j7$RM6+JJFqIT5Wx=J+OMD}~WTxYphsloFg1`>GCKqT!_ zeB9Gt^BN0L$v2+CVScCQVcHt*^K$J38<0J~rZP4i^K*sq-^lebbEL zU~J0BrMSr2B-#~G@-pHZ$YxwwPxKn`jdEs&w&RXXpi-=wuPfr{@5?nXAH}mB;xX7qK-GM zqsPnGg@;mi55519Z}M{X7-P1Vu~U`Libo0f^2IOP0C7N$zX*kM$7gBs8etc*=$XPJ zMZ%HRlSf&wpeA?XFgPPe0xL^y$;*%)B$-|NZ~&3eE02)2I9Cr!VKcGv|B1%il0T6l)W?r=^3G zySD}?STAJ#+AEa&SOC<& zb_6`Tu7Owe!tcdkuJ#;zap2vYJ`T7n&|o5P^|YbVIHXQzK*fpWO7OXV%YRWIN}%aadenB5LYm=$f?w)z}c^ zYyfCd^u!z3na+*1mexr`=;Nj+7C!M3NzA5iBqlWO*nRTYH7bEO#e9d`0!l&ir=i&=>Id5!@{*O>tEWUDD*4 zFAV{o2+c{+7`mHrG?#8HdB)~iA!050Lyb4h74p>7d79SN__w4kb^*eML$@(l!zqsG zqa+y;ZBi;1(Ei9l!8uvC@PAbPVEA?Nr+V(c|NaHPEc2JXJr8#sKMKtPJT z#<`-ebtEQf2l-pXu#2hsHWZ|pw;`Heu(<)88~?(Lq0Z-w&|`V$!wr^8#Xs=+#I~kd z4To-^7g2W3C(BdH$%f>lPbEUV6CT2JgO?wSG^8tHwgam`GzSyO@G+fi^+*{sF*6^U zaE(I-sB3vVeM>fsNst&;zv=9;r&~-@oLul8ojuOfBGVmLY#{Hs=bq*3zy9l&pZv+6 zTz==yJD1nI<~7TAe%E&`Kl3v`vwZwxA6ss^`R4ei39&xAniBU+#QJ4CweN7Y>@T!9 zsH2T6Os%bq>9G~g9wzoVq294Dw{jFJiwC{@$GOlx=vqh)mbl`tSjsOLbxmM)PMvL8 z?qWI?7mw3ea$wOSuZb!#=uMy7DMGc)sL}gCd{=9VuXZ@+L&jPH$W|H&wf@{(_EXt& z*Ug1=+Y%b`8QeA%NC+9tA7t#olmc#Y)Dod{lTqs!{L})`jx~Kl^pfH?VrMk4v-~m! za?WfOFCfNV#S|{%&g{~!G|aWlH88miEKx|zsH&GXHMW16( zPaHA~ov%ygRp?!+YvTJfmA4-6xNY{7E3`O`l0$Ts|oIe3<5WV3L(TH=Z~5wK`Vxk*nKdJP)n2 zh#P^%7oYrzUHFC|Bw4PUTQc7>Q}#d`L=KSHvM~# z_<6@`Y&7-Gkz%ez=z6tY#^A2KalCQJAlCk*!nItw z1cor3qGOf8bPXnt4)1FqbP&qAC?B*qlUAxS-r>1!2grpO79&^m0yTR;eNbUc1)K{e zR1h>j2w*pUJQkZ;Hq+wYZ6L+i=~6nNV02?`nJBx@UGNFG#j^PJV+tlCs{ptPvEz_h zn}29e2=GW89ePdQKot@5<%Vi+o+cssshl|%*>}xnhMko+%WL2ikn+vIDVhAEB;+uc zdI3F>d3I@}3#LBNr>QMQGA?4YbbigAQGs=Ffj{--#6 z)f8VjnT7uC3J$R$k9ufsz20!tSw&WZz5iGv^U#_Q!vD)5w7&QaYFfbE^S9p=CZ=2` zc`AZ5gcqDeGLUX=Mbw__4up4I^ zS{CBd@V@d~QK7T6yUmC=G#?D)HCxRM)KRXeJB%k?-*b*Z{*9$cJw^VcSMifK+?sFD zqpq^n;d4R$ZsWiB;0KqNz3gQg^gF)eJM@=lZn@=_ANT2$}jg%f)rs`%P>zvi`fh-saR|`eWjHFvlktcf8ynOQrGQ4Ogbx^HQFi&N! zRIe0tbPv`VL)z(~PI>~wVQQqS4sa5q&TmilybS@^DP z0*HS`FM(@&hyIu5hieE(#0R*fO{3-B0X6H0F`8`db)6`*$2ZluPQ=EZMURBP>mU3P zbJ#S}fU9*xbHoN)G^r#2?BE*XnAfVWW5GpVgdFo8{UC>9tR5(B)2QYd-$WPh0d?|| z79%pQ^?(k2;ij?JEf+g?>k2r=$F&^L(2TfTZ@98Tk~%_B zv1iJolKA+nTvNZ*TBm543DK|hW}cNhGr zp65RAdCR-r^{xfKb^W^6y)M2z{mys3bNTka{Fj$I?zlt$o0_lz*w%nV59 zMnAyRs8^so4*_sXj(l;j9v~tmGpRj?R>jGaFeiV&Yp+gHIH1so7MiAQ611$Su$nyvq*0JStio!Z1<5fQ+K|~s->f6P&Y^o-_aiT8 z`@XB6oXBGcJDbie!Vz&3IK+7ZZ~|F6Kx9K);2#+gDn1mOW7b5}2|rXB>#Ks|CTs?;yY9N>J@0wX@*_X;Bl_*>YvpGkf9j`xO8@rbFUhyD@i!k||94)${9*Zb zt{;BrAzSyFbK^oTyK*>CE7#Xyc=2+0K^(mCtFvPORfnOWG)(KgpiG6a1JJ}~M= ztj}S0t%9LKQ+XQcSr~)vn^$`L2BO*c=W@xM^)BaF7r11Dx9QGlbAEa_V|>g6Ax; z&f;?-jWAy-?#A0BUCrJs`;BARv7^!=W?oC1H37kgdA)MLdT=CyAluH z_69X{ucLRlieKIE&-hs4Lj#Xc47Ue^-A;iBd^M>#L{^c$5o7K18dh7Db@~Pu1 zU-63Nd%yR4mtTMPyO-N;yIotXn+bXUf&0+GWDhxEF57Qg<82>tr^N|*tq*bCNpJ43 zZydNW5)pWQG6Y}wpLu|q^zgA8F1?|kH3x()9SH)sT3ske&hY=NMw%|UaVtY!@;PWllF?1|5kN$HnUHbas$ zF33>>YfN^CxamCd@WabXcI!~pDNUU%UZsT{j2iF!Ecd&o)EtJTh`fE=gH;_ zYK@icNwz8l6E%d8P%}|H1*+UBf9sKIn^Urz(oiZZ6sJ809wof_XMEzz>LkO<9z^tq z4-bove)D0a7UnJHjE0RY#sGjIyooIqc+FF}#jX%hL8}(TY|U4?=I{MQ)fwls(BUxu z7E9LzIOTssqJ+$%K$7KXs{hHD#7Okbzp)Z|c&tUYR25giYQ`KN> zvxu{OXVAv#qfIc3jeGxuj1V2d+oHIY7KNh->?w5}mn&<`{Hd~q(4-Ze{e78q`WlaM zv36Duu?^Ouu%X|3+?KtVm&SK{=sI@OX53^_hrVgGi)eVSxWlju(*kLXYwl;T zPxyM3ccz3e(y0;)C1TD5m>GYtZ~1Q7NaPssuWlZRJ$?o4c5z2I&&-A!=bmO9NhV|0 z_>bx{XOd6W-Nji)Hw)$jqjoe~(+yI%jp$Kh-WH`;O*zny3ISr?P~ULSW|g#6CVIJx z;?0YPXy|i~Ko^FAc%rBepIJWQHqCRS)6hAe5u&qGQ`CB-u7_j;d8PaU4gO`Bhebv< zx5__Vh;MD<6@IAS`?r$uB=Xr+2-TLAZM^Izx)Qzifc^sK{0-R`R$*g!Csk7xl z5m&{By7kBz^zS^9ELa&M3|%_q=Y@OXD;pb-`~`v{p}2 z929dX$jEh!(ny&qHe@Etx%-sSu$6;;!6g2G0bqlSL_fo6{oe8%II(W99bsn zn&!>4exB)PI)OvoGmFmGQNO88$s&vlXLZxpGf|udfuaV2ZkE?Xr@Wp*yQ{l`sjc}T z4iCXH4Y-9o^PT9tHO>}+t&}`&a2UW=l*Un&cIb3=I8aNvbuID-j6WVT`XonyE zJO9liB3SJy%_g2OH(-`6gnhPFrZAjTnvbnj7^+nUTQ49hvfTwf^WoM-Yb8K}1|@a4GKs8P zkvqN>OpU?p;Y%5=S)NfLTl<2bF`AFg%*Q4@Cpf^}5Chd<{S?at+U3cO<1|12&FG%8ASEzzM_lgRyBwwotmltd{c3b9F9YAm z#RU`=@d-H>GjO4Z4q$`8waPMMXyNNvh^iMs`;vJ34WlrLjT{M9V%v~s#kCXFajiU? zn@0q%4#D&k6%N;gJ8w*MU-V%vaX*VsAN3NCa=k;cgTgCnIbpp3rAJ;op%hEjJM{2{ zd^@?OnTwKBi-)e>u>4x{>HGyV-SDG#JkFR`7l&NsN(`?El_EDZYigQR2^`UjRn(TD zWng*X=Fbe>Pw!~ZnVvXZ59poz&pA+!Tv(R7G?F3st(KUM1c57t`A{>GNe6D^?SV5G zJB~u%)xev4N-d(~7>I>&SAQTyNCc5h(h)lI*Ls2V1OEA?YML9lqs@S`<|pUY7l*_J z&Q2upNEv2$GVo|@u$@w*x)Z+*>%VQ?zJ)zcG{;8IhhjSbrf<%}oO<{Kn^d#Tl4rao z=1C6BE1{Hv`plQzGd}Y19AjLaQw?Ss6#8e1%qH-&C*0_2|Q#K!#lwHgVkH!-9d zClN%=YEC#;B~&w=diaU4GtMf@{mQk1665RTo7IyClNG$)7~z+kAaApXH9I8VHBnO+ zBi+DnQ8ywDiBLfnkCxS07PH04^$_66czD&y3GG9!hGK3QwFCBi;HDlO%>5T!W`NwV z9zpQ-X`wMHMowEX5DPq*JNpDte2q@yS$eL>i56A!XO@<4{%ap_F}_SBGF*y*SnGx5 z2(Rc326522#SW9!)<%%#92L`#kB(-UC`X!8h^x4jfZZ=}0K?KVUWk z9fdg`=`A6>7YJKTZ>FaX!DFooacWiM6%iwF2!YY0inF2Y%$zhX-90dEN>(`po3=*| zApwSYWtl!GLQpq9WnWR1p@OPk9g{A6L$LQW?LHIHztE%4;?vx+m{BfgY}c*%gwf0M zE*^;=VoG9S0mbGgkHu&I5LvCq*4Ay9=W(#0)+VcXoCsgg=Rf49SOfEc8V27Tic3}Z zl(#5jc%;T~D#byMW6f^X^|R!_&DQE%tb41)LNk#bJZKS*5EWuXt(79{SMv$22|)Mn zhfxD0Fqygc@pj=of;n((#i(KJ)PZxP4F`mi7jA^+0TSy+(gEZ$9f!s7e1l(j#UHJ(7>%foVQGKoab^Vq`u+ev4tjKXh(78Nfc2>5q>g^de&`&= z;R}oh=yW7tksSNgut}NHN7{TPbpxw06(<(Mxz3TulZV+eTb5Zu!_#l%fTj61i5~l} zh?Z9+dZK-qQS1%mldhG(2SWAb!l-eGS2ycLb*(O|`8p7G9wV343wyS$`Gj7;#4CLZ z!BA4RE91gWJ4E!e-04St(6qRw4VzGfEh4K@M;_WNsSnJau>#y-%*`f{vRpe-*H^zf zPB7%&$0ea{bqBlqN}==EwCmNllwZW5TPt~in^}M+_qWk!glVZ!ybN@VlfO=G9>16P93A9D0h)N15R8nZy|U1Kb2)){d$FB+krVecMSFqAsc#xatsthsML8 zcz4Nl16lPlPW=vR(t$Db804e)!<09d@WY`S7Zc-LvQ+&n4s_%RX9~G~>dIAbxPmJs zDJt_aHm`-I4NJ|Z@LH#UfIEFOAp1l9=1)y#6SU@KvmXc)?LD#wkF$Wh5oV$?*TEDR z_7lKF@AgK_ewTL1>cm5FCAhFOh6pJ_%Om0^?U)C6TAbK=3ozEAQyO26B{GvQd73(L zBsb)(ezRm0H?LVAf$HpJ9c*qOr1i1kC=p|<)LMT%(&+ks-Cv3ekk4*NS_l6Xl;(((ec~+JCP>t3Mc@5UJa!S3YJqi zrCd7E06BIy-z5jSW;}E`6O3~LKiUCWzWgc32x*#J5-OAF0U2L3FaAVr^6dI-f*>7 zLe3u)SErRUQG4F7Mu5r}1`6BRx3WF3@Zsj6u}CqyrpeIUh*`;>=GnFRn`GU>rl=eN zT&ZcT7lb=u&dD_-q^NDB=tf8agqx){;}WaKIPRYqvG9IJkUbco{CPNyE^^xMLXww#s!%q9zPLL#a! z%$<%vHNXg=9o8N1gWISBithYYevFl(l6lYiMPb1Nnt9E=_(OTB>2w)zG*~#}H`(IK zT3yMZ^Bj1cFZApH^qr>-1LuBvDL6Ofd5U`+ScQX8I?pLL!gi<}*eo>j+9C1)fJ^o> zk2%o!$Y|2Zno_7O{FW_IB=NXMa^5G--bl&wNbP#3<^mGlwNEus6%KMol_8iN=ZUHr zi=;mjsPXaO>u)#(y28t7?yPH7PV5o5DR+dnU4i$R4sd2}O+M=ocgBna<%pi!aC*-C z2>@DWNx~YS>EWZko|lz?Jg12^$4;`y;i1DAb;y2jr3?l4n7l6VC+cu}Grk^MM(l$? zfkrg-a=ndp+ff|HVfbcKq+pw;*nlyZ#=Ek#2@f@k*>eV&+9M1=a;T5=n?ATn=bOA@ zk}hyUTc@e_^iFKn;Q`=L}-#Q!6)lUQA-e1%zN@kCAe0rPY6q$9G!t4ksnYtfRvB?(9imeTf+cP zT#qqrwM9)ZL~bI6A!h)LgGl76?hD|c^7`B*cPre*7O`9z;~YBThG(0wx&NpckX7%BQL@k|FmpZ zqB4m2$oMN{Gx5kh_bnH$x^lTv{z<*Z<&RqLImp>MXAe-0a|}&@1|jckdxA|cQJ4Jf z#0%Hnpqrw{@X!8XbA-9Wfj22-9sB#^;YXLp<Z^XMffi~^Va1m$^GH`?q4q4 za9ydlUw2&WkI6b7-#2Z8${JX|MYeOxudRi;lz_~*@SgzLp1c$T-_?(-q+S?BeEd;- z4tKTAd0mu5g>sWDr{6JK^nL?!x5Dy)^SiFTF#m9wh&kt3EWGE z)VWuQ&-Y4SQH$2;;cNdZS z;Htai`{=zNmW{|Kmz$pR?B(J2en@*TvNQEnCIg%>&v=Jh3+AER@WLR=a43TKgW|z^?_F+s_A{49KK{Yw3i(3e$bsCLMmOD_Gi@EG zE32)J&8M+;eGv8I4?euy`1vnduDbsEy~|a%-W>I|KBn!Ee7cISwD13yA6jmH zj?^pi74k&_*I&+&xwPob+PJNMuynaOwBg96K(i(l6l+r~7FhK=5BP%M#+QEHa?K6b zFL%G^pD)+F>?N{b{ZE}2J`Eyk=Nb_{`O%LpH$C&|`Zo~qo|dnQL_2dpr1qb396d?8 zTFb0)&Se$ZAj@4Stb0*hE3fN6>(=Go_kUoy_8HHye}yRm&>L5&=;23}>u$Myx#!OJ zE!W+8i~0hJ6*}*4^Jh0OkF&Yd0DhWdz`&P?q|T0%H7U!Ps>fw*;+}%~LL(%Y0cPtaY!05($J{*? zres&-pfBsaVm)mnkN>)ZB<4-$4q^>Sex6g(*gT7ZWiuAzsb1{(Hom?fN0dokVq={F zgTQ{^nh)x;jx{A6VKL7_V>yG5FE~)P3NXqCbHmm8bE!9vIrQ>gpi_ul1MuXy?LiQoIc@|bK0@#Y#@+`{Q6j#uCD z!sWxi`JUxAsrRwR?_K1dgt0do`I#e9O*v7FJgBJG%u{U2M?0?>Gt~(|K4HD;#v7MU z{C~f?-0@YfTJHPMN0tYF>o;U0Xy25W^$WE41n&Aj@bcvYzwoZ*vp?qr%Qeq=p?{6jWM3j%4%En%F&My2R41g0_-8AxzUAiSBft30<;CCdC-tAY{J=l_$>o~cZq*+* zh`5FCG1*Mr^rf#@?)=ezwA>*7lF{>D^L5Lo-v2L_E3cPNXz^nT(fu0H#>jn|{~W$s zThbh|(D}XjrseLp|NQdOZ~qqERNeW8|8=?U#dnPVgr`L1{NOtVH^>(gcfRiLE?3`h z!}8+4@J-9T|Ky$WMU;H^LF+||K=XyM9q3{7k;;0-1a*_d9+rxjQ1RDZcK!~K+^&`{ z^gj8|?pj{(jemBzR%*ZN$9`hD;qyMn-j69aEK^;o;@YR9TVy4)SwpS>S&U&GVaBEi zBrHQY-ND?{-uhDO1WAwQIBT1~ljaM7l_w`pJg|xnVG`dkq=f_GCy!DS$YD1OMtX=t z^oKeclr1TdJ6}oNbSWF;;;(?J8K;JWsGCK6H6b#76ailt@C7CRGe65840!30Vom2j z?7O~g4Khr95G(uTKOM~>@F8sFd>S-G$h&dvX9`!N;Tt6c8<^6B|hs*8X_3g{c{=7w0`KL znhTfw80Qcit6gj|wnseL+OQ#sGh~OWoasQW{NRy3e)Ju`u)O5Yf75c^XFY9s_y7EZ z%k{7LJl!mHIVb@WlzL^eeC@NJv3%f%-n2aXm0z@c@!$OG%P;+n?^!PKD0X@ZmmWhZF=ZG+v!=k-=eEINC zzjb;3pZWUbIbZVfLzP#!`{VU6x z|E+IWp8f@2xLkAltu|jmpcH~-eCER}$ZDZ7&XL8JJiOB1uD#Yc8;`CPsrjS-_-B`A zef3u@FaD!nwfxfS-mu*8yyq|246|8W2Q3?6mprg;Kk=?#S$_8y-nsmtZ~c#!AN^zh z_VP68)AiVh>8F++t50fm)bX#P<_4^$IFcAT3bLuW`=7jRxlX>2`+`6D$CqFG`~Sys z^%XbkdfjqUcj*;!{GFfvf0i%)#y_*%^?iSDx$hmnzTEWXUud7w>iS_Izd|Ry8jcw@ zK*WphW>T`AlAT^bBhL85@&4bsb9v|k?^|B^7yhT^&bR*D^3a`kE!RK)Ir`6*63Y~o zFE~T!(+G74q>+3@N3|!^)=!2RXg24-!!^^8gA8>{eO&3B8>B`W0@(sFqWb`;C5S+o z-b4H$4*2c;9+BXz1Z1J5js@m?!<0}QeH2EyE-XC(4oJbKT)%Pard zUs@jg#J$UJ{cmqxKKU!ZAqafC4;wN(2Jtgw_?bxfBAfQDK>hcYMQe6L@RngW;w#lE zPJ%%;_E?R))M^_y`WY5ytJ5UN^4ak7?pR*@&3}4%?w5Ya@@sGWvE}2x{AL)w@^bK!Z?s@A!*31ZPx#f&#H644%n04IHP0Cov zb=;69f%D4cmgS{?{Xbq_{57v$-uM_ddigfz&C4%;-~Y0F=pX!q24H*)ay}TZ)suaITRZ$4%xmUBPhNaF@Urjt*5&j6 z#Mdpq{eQh>`L*x)Z3R$J~D|6p4==y-h9C5Qy0GOt%aK&p zRT}|UvCNhAS35j2N1pqvr~HC%`gfOC{P}NOJ|aJk@UwsJTbHN*Yp;%aKn9(Tl< zWap}(`3-uMSMeKsjoGB&pZJ80P6;#EfD!v4y}C?2lnW1|Y~@68A%)HJ((#&H^Gmf1 ze89?qc#L6JIpf?)!69@*-YW*rylH1B@X|G9kl zO+U5V_~kE`2d!_Uj0n(nh%Wjd&9o?zFd$s`5SNkN6Vex_XEqVU-9M3BcGHX z!;s#!Bg;)|l6=u9?~9Mgw}D^zJ^#sa$E*I(@{s&I@cke8h<>_U(MQHw4;;3_4}<`- zMqUAuJf+SXpYe2kAOH4G{Pgnf|Ms=ZZGYrd%Om&8#!)_@J9X&$Le~6M*f7f%2rvKc zzp}jOkG^_&_<;xHXI(!cpXAvWeB*4A*$ZKcs*Wm4&*?L{?&*in;#;G5|6X&`jmup> z`;O)R{m=fZ<#zdm`BC|WnP@7wI=*huf`>YUuptf(-VPx1eyw_(^%|hlIqjD(2-+Up>tZmj_vP zEG{eRgy`lFdgh-o$VGo~@H3mo)RwfsrhOLsA-z!NMUx_hnE3+hd4w&G*JLo}{2Zr& zvQI>|+!({Ia!#8^K(Tl-MrDtq8=%CUabXjJ3s=dFTfWWp$vf{{p7zQwS#Eui{EVD@ zYEw6l#*KjNvuN~xSVX4)ONan8Vz3FLr=WRs0fN%Hg$EC(ry>Ub$TV^xNX+CgF+f?XcL8J4OXHn}a8yu((Yf zUD+|3E>u^@rbp`iXLl~||9d~QT=SBbF4sQm>GE6R4+@Wbfx{;w@l068VQbx!Z|PpM z+%5Iq_(fl`JnxTv<#Lm3x-VR9zroy7U}STr3E5XIo-ZzDV>rXOS_f+Kk<;q*0zP#X@{>1XM7d~G$mDkyiV@%zkWb%x{*|o7*i6aSpY>cU) zhAb5cJ>HLx$fw7j_}$-=pK<)j<>9+NusrQw{j&ZGAv!8iHz0L4?U=pD!o!sVf6$sw-c%6mY~VvWRD zj9-}u)q8QkcUT+b=w03&mci0h?AaHV&R@ptN7y9y%lFA6qSj_XC&#JU4Aq}=F}-CR z1^*;|*yxrpgAEw5AJVJK)PoT_zNpLd2+us8$eNm-%tOzP(?HoLB3thnGh)eC=-D3& zi8fqm!!C4qmli$3Rp9#aJf&J0->tp3WPjN@By-njQq+Wb`@SzWWbb0i{AC(CH zbA%${+tv8iw0)Zz(eceG%hq&=@|a-o)jRZf5z{JsTy$oI1e9?YH@<19zZWc5#xpxQ zap8LT)Z#_YTCS0eEjG#e+qa&-IOq`@C(+ZBwtBrFpX}jNj|boT!R3(;zh5HQ0YA#s zhhy4_#W=^~m^k|3N*(d+61j*)*RJ_o*)+<}rams8K0fvce(n!-nWxrD5|YAMbkPUL zVh?yhHcyW}_|Wpeuf113o%(R(!FcYf^OALIGD7CCYdGjg`JgZA&Bs62Sfg7lw`(3NCK?g9vu-tje0QD7yZ;gEED)U{WUf zivY+|3$)E6c*z5|7^k^RbmprGn4kU$8?VRJMo$dm2Z?0lfpqhz1A5{r#=x51;X2S> zcy3mk)x!-CYtc`QgNpktoA2IQgdU-=gCcr?>@>3lF>g1=y znbm__a9w(4=M@6C7A(YgxUFTKVy{8YtY0Z+ zMZFrP;jOAw;FbM#(h9+Z_o z=^2A|;y16HFXpoX)(r`6?s6~=WQ3>d5LfdD3O<^xRFjUBJGHd4Hg1HJJ90I?8n2GY zsriza%2QW~g$KBNjCl$<*mJGy6~b#Rnny{dHBg(WTVRJ2(-6xP%I+P;ocIRPS}qC% zZ?0i?mBMh6PvaiL2fW>p9DVjUCzZEzlL7nC>2(fWlc;r5oyK{gL_BfB`vC{v7e3HS zu2C`GL&)r7GzmJX7eCj#c3A$jCbA^bdfwOEirw7#M+qi5YQ5{_TA0auavom-Ok(ud z1aJ`-|MIAtE`-IOW#K^##)(DEdY^S*wrS76!y0lEsdGQQ%yhJ8;?PZ$&H)R;5uq{% zLmV1N498x_8dw6&9K&GL0K2uC(UjuvmJ%tS#->gg#RPLBOf%f^> zra5mOlx-y;bd#G4Ms3&T)W>LuDm9O4*&f?_#W3X1m@>e1IAZ?A%5~u)vEe@@z)jb_ z$Y2kGk_2bIvVul{2SUurXbxcRLsP;52MRPPL>XgQ>Y)XjnB)07MqPET)yJL4=M?#Z ze(+!j9VfkxlQBQ|RGn<(x)j$#VI=?P!&#Hb&DrG8V4DaSH6OWZ9jU+60~0lZGGX9N zTc?H-)*Y^L3^wRML_+|nP&Ym4dTPT_sxCSP2fcH>u44^^v}?%=2C8^fT^=;=NukMTVoke!A>x@6 zfUErf)coXeD0`0r4OnUH9`^$nZFStu4>&#WzQh6w`o zUEE1t;UqwP_;YcGL4+;8jDtMEMhu;_JnX_~$y|C9N1gJ2mWQ`J>D-w^WA_n5$xvJ8q!7dR{~_Ft47E;^YMG;Sf&yqEswKsSphXsW|arWSdrQkqy_|lxFjk!qqTcE}2Aq z+_9vVVTa^1^GK7Th7b;gRUD`q;zVAm?nfF!Kaoy8 z)x&dU45Mkh(C1tt0&DH4!Q9>U3YWSCDqR3wuL*lBc*lA zk%Xr#-n(X-OkVA89Un=;u`S*)=hiLrs~bhVsUyE~pPjw@CUKtZ?dP%R%JfcQqv zcm&_DO`5ar*A7f_w@zQv?;x^jkJP+_bOUnvA|VO%=g5KVW)D2&P$K~H+F8b0{B9$q z8;%o%ShJd#W@4ukE(sYTZ*p_zt0JxDJ%`Msn zSnn+sS#RR?{U|2faDzd{oLcB`;8u_KFbtCnfpj z4hCdymX$kea(#ZZ6R)+USQIrT2I8PT)e$!BB?Ldx`fuOHLY;KBnt^T_IXVw!{F($wnu z23f<8Js_tB?FODkitn0nJ%vF8;&~0*guG$|QhPPb!QfMQ>sS)dKg-5MYJ`-tLzKbe z1ltf7;INu!#i+JnAaO3DE>Sie92#ETy(7ScMTC$Q)Q>O+MPpQPX2ej4U>+wwdE6$> zgimt0>*&5*PrB$s3S2-AKOC_y$mKvCnMB-CrVHB=J=v3^^&pnUgySU9xWkpm-uvpI z4@mdP@>W`f*`S(JWiKqmcs#YTo&uc>^$QNcV`H&(Ad3OP*ei~WI|HVb8ldnE@pNuX zyTOu!omrmN8*E$Alg-7v2J|a-=>6bSah5HvIqI2nLxA`>Eh*Yn4ATvyJ6IlRg^NCN zBfllkI9*y%n?EqVesXTBKER8yTXJy30jGL+lMK=#a3eX}M1q2pm2U6&sQ)bWy|IA9 zTx=a(zZ|;dQ}draqIEr{pfill2~$&28|bvqS5>a3POd`^USrnR8jQ-g5>;CoqY2H+ z&?c|x!A6%A49qMSeSu7uS-e_D1A96{oM1Bm?5-*nCqM$la&p{UL#jTYmH#*=5kYWG zc5hLHE(js?S{-$&ZZOu-aWRvuEdFjfxp~YKXO<@oJ2O`}cFQTWmt06U>K1F>+`QOU z5RKw25^~wo+Y`9HlPS{^ezxgr_>M>WBsTfK(@*Mz9Y@6_3Ip(rn$;+ZEYn`Dm6zr< zJ?(2(-Rw!+>R-pzzjewjryMH5&N1S!cW{YMHlg$+LYFv^&Xeh2ds<#v*-DDEwNDAV z?*@>p!CEhb(b__zg=leYj0Y6@rfn4HZ0Sumke)H|7R#0OBF31elui-_AWlxA7tae+ z$)u241H`Wc5!XNPqp>86@h(DlzmP7q#u3lfyIRo~HQzJ64{#87I6M%MO znqLo2kN;*^@ms|bANkn&4no>x=E)II2jyC6%euxDWTEPWnHh_^9y1*=ZbN+JLhmd$ zD6NjuVbdwD#wzCd^U**!YuxVBMn=z9L7w7W$%8R+9@KHZ5Gm+050$*;lvJJ=LKT99 zZZhY;QH`3EO@k##>Ev{IHjgRrxrwvYb}r-_#CUKZhBU5C$GHSm&QnYqnVoWN_6bQ} z%LLH8dnql--oViTF1mEr;*b8X^+~^sK1|#uC=cT61fvu@ z$4+YLa3k;ZlUx-!(a-KxQD>tM)f7MBr7QA^{2fOdNV9B%PGb#e(M_uHic8Hg_elu^ zA30TSj%y6)t1gc{he##aLf6fh2THhTMsr{`2%h95hB}0(Ew2gl=r!ii{CX?P6+0ow zRsO$Bn@3$bsnREpIAk^`Bv-j1Mnm%?KY7YHkjbpT(fuR}4~aAOA~s=TSnV^`C|&`} zGBnN6b02Nz)LWY`h-Bos_9#mLvEoSB&<#T8Vb&9Vy0MLSUn69mYxah;esqyf#DoWK zj@_qAneedOMIXFb%V5Zg*#u;}%ZNliOdU!+ebB1~q15$(gl_DHqT{&5>v_oq91f0c zWak!lp1ay3{y0aP0|_M#fAKT)@WsJEBIZ13Mv9(h^wZpuBNQxVU!!|?rXr69fq_O8 z0cAV#5GXxDpyJ>)h1sTJUMKjao}6c(i#t%$cvI)8QmM6lVpgt1h`HsF)DpGnX~#9= zvpyz{%EU`mcb(DCe2T7f6Pu0;ri;Tt#h4?lcAa7xM5Box`qc7hk|M!TRE@!<5{Es_ z{m=a@a7==Q>WC*n=|~f=D}FF*4)l|8=peg3=Q*y!yzwF)B|Q2Yxkxz1ekxSDPNr_VxkAkz-670a_x%CLZhEZ#+lh087@*9CLk4 z1r@p0`D1lXMWVnf9esqp_1FD2NZu~wh@p249FpAxj?coSZ90Jh(i-K6% zSc@`wK+P2n>BxTk`8aGMb&8x{;m!fsY8Jt{?3Z>G;Gc;8G>} z+#NJho$~B(GC-|*gs?Jp_1P|!e8R$g zDQ7jGIXGeu!UlIYjWga%Mmw+BR^^JRW8kaK^Ne(p-E?8GXc#7pDa(0cXJ4cLjtTY< zoNM5yfRslzWjWF^WoN4KmCg{6BXr%W>lk_q_f#Tya0TOrJbP7oHk|ynETS zv7fMv+Wm!{@I7JPA7_HBcclr0s*A0XJZsk}|3nED9)xI%{#+Fouo6!kfKwN-by#)q zCwgo0oMDc2tzI-QNSg%N!(`1(#K-`1GRxD657KK8`ryig8%5f5lW|}@kSAZsMO}_Z zU0kE!(3nt3k{NA5iW`uGo{RR-w#>$weKtIRk5&SP)dK09*?j^Qox_@}7}lnDR@<1L ztrN@M!saiQ$YGXtW%yi_RrJQ3%MUi-THX+-x+z?Hg z*^7?(GB)~DATvda0SOKy=q+vJq=e-klj7XeTn5fAF*3Cfk$5&`*`d?5Q}R=2iWfQd zD=7sJa!Ff)PU1H3_}*x?&ukuZFH~mp2g4Z@oAa{DcQ&t8x=Uq93zi}D4b8#Pt3G9M z^PIkA*4btcH{=GrCS>xF+}5y|nPzL!m>g_!XicZ*)6wR`^A8y z51Q7o#lVIFljZD_^qkggp38K?)edZEqIT`AoRp9Vxw;!$Kg0`#A;4!FB_E5O8@6B- zPV(WJ57Nz-33HdcUGymoK5&sE^HOf}jyx?}^D)Ajt8FptOpXW+1rrG4T+lwF?w$BK zi)*{4c_Z}F45;nMfxfIAjdhNwzB7EqfN6$9+RUWdXB?Od;=Alt>X~wg z0Qx3%d`F?BBvJxUUvq~V5hi-T#16>S3!+YBA5CiMb7QiUt|AoJ}6 zT|JD?w2$k@mO!~T9bt~1_<9fsA8h6=XW|1J78jfsBM}ihAGF53HXDz~N@Uy+R}YEb zXRwOYj;vc@5w1iwi(Bi3*Bl2+J2Ga*p~xJ(xoVHIKTVk@+o|t#;)HPxq2&(B)C2~L ztJr9+evW}zV~d?KU6?=}2R(!^x^{?D02mewR9bIP6d&k|&p38xUMfB%s+DRU1cTq? zK5{=&#J~&R2`;a+V#k~h?_~=wX$Y76&-HME*-}CZ^54nLqsMrXUh)z+o}xBv^+tG{ z@5~-$vNw77RNDY)S9ah)G40?^-;ES5$~4W%8TG*<{nAArOa7w5osTo-(ASdYpT;e~ zMrFiL-n|=Mjd~)13cftJk>n;-^%L^!L*G-^v-l`yPLe$+IZ+LKmWP}&7w(85dMqN)JYe__S(GpLBhN8x<*~hq` zFWvyD8hW$wmvn{)53zw)Pd~vIhx6H>({KZmOr1yuzMq=W^5QsfqOg?4n8dDKGe^ao z%9HqAI7w}mUBp-W1d)5qfO1`nS@q=4`p|WJX`rI#0x;8B$;IFV0iWdLt~fO}yGjMG zxTpYjan{z+Mp|C!tJjH=ei=8@X%v8j zqtNIxvgk;c*Moc06pU2Zvz8--L98dq=5eLImhGC97xo%P^c9Bjcw^cixJ;%q_W|X| z>n#3rpSkujwc&Ueq^py<&vmU=YkFlpj}3JSkVK_FSb`V2-%D?#zPV+WW;)uQjMwQD zum!cDS^$ibgFZCjrVMiDU|$%IX4>^(QhEt0ZXmg#Bz?XjL_HWU_!S^5o|X>vDQMn? zhZYg-V5PM*Hw%|^u3-PFz{D)+*R`BV{*p zgj5gBQ+_j&8xX>?ZtB`8+m9B&pB#X6wZ=z)z;^__Pj8A*t2tEb0{Hn7G3PXOLP9ku z0I`->)CLJ5GwxNlsew%SO4iW<^Thv%I(d~k`(82@JVj1@JH^%W7#g}$`W&(1^V_%b zbg6X%W(uVo**2S3L$x^vrr?~3$iZImV7u;uSeYBuevMO-aBgJoTV(T@|m+{-y z(UO|+Wf|K8^oh;kvJ`qS$eBBWg>_K}miIo6{m6}ka7Ufxyrw4=?fH&Oo4%3v)etTs zzymeK!5FS+jAP~DOA~6E=4LUf8Sew!_~;%vT%^#|bCfF=RTCzcW4cyBSC8PThDqNu zr1O(%JP-CM(i#*-f*Y=FOmVi`Z_}*?$_Aeo>m_>nPgxSIvBjZT;@iu5?mP&2cfguNL{RzcNiN3yp+4z)m%7F{!209 zRC($cyjAC6BAVOTZhN!0ug)#>tDOTuCXZ+XgZzcZn^h$V&Wt!@n|5Z4UVmN5*=O zPhVHC3N`t&28{!|;mxvs=KXdres~D;31?v~&`M3~SrkiOmKg29TTt7>_`duM#sFQ? zJy1+GZ@s#XTK}pAbJh6sY(zDp0Jt%gsp58VbFwGoN#he<8V-JzUQf@If3_vi;<<({jY$|pAbKeFH z$-UaUP2cCP4O9qB0%2xKv%`WfZrdSp8rmJitd=L_2H?Elx@+^OB*yoYIrFRWLkYJY z9ddi3z-OKpeL$WrmJ8)%eLE8AASdE?*ptBpP#!?)k2g@!@1felL|)8)_9k_kZ6CJS z=C+6db2l(NW)14I9D4KF>PaSNjb{mTR-Z||nQHfx<~p)0WcHA^*@21UXf~8_xHI!& z0^K;kiOX~b<0q2D(HYl#P@i*(tQ4pl44Iee31gdE#IwA$J~_21rzb4!;6rfE+;GfB z^APp%du*$btmNW&c3q3J$CrGpTw62kAd$TGJ<{5%O2+IRy@J}YdveT}$WsVA?i4%Y zBOdU;%I^*{H6mf(y?d^LU@ z?}|Zgym|SgR-!Z}=H#_zFn7o(l~YaG12!CZU*v}l>gqXg!#-54@}Ap?34t*8aT35v zWn~V?{u7`5DiT?D^x-A}ZDc*vdrWR#B1aDmO%J;bj~g?_NzO@ZJe(&FD80cS%SR9D zbXl$>kvs&1RKR1hv}IOW0u}I zK-8pjICV^(y*;L(SKCN}kd|iKR5UN#7}hrn^g6?}h1hT=2vI@5D<^|ZrM$6`pK1J(<4>f^P%N@lwD=dAr)vp-U)&M}h7eto>06Jp~S z`fExqVa4PJ%f5TC#La0SmW5Nki#c_)D@3eq#oW}BoI2lHhInc(ieJqs_p1dnspIc> z+%k}9&`Q&fJDwH?RJxSpYVrg~CIa(BsS^R|>R7O8x@k<*(1YMtkCqr6a$M-j#*wk2 ze_D!ZRfLbn@CY_n(C4FpP21%a#@^;?LYV_MYvC1wxDy<)nH6mr?4Y8`J)}2ds|WEC zOYL%U$q0uWJPt2nCk0iwGS+3>Jm&CCo+a0;8&YQTqaFjcN_qZj@#TytB~uP|<_)5d1t9TY26jzi}lt{t@7o89_s=ZQz^!^GODaKl-B zz-w+2g&T}iZ%49cu$t^1XU9x>%KT5JhWNR`WsKWmHuqWe;D{+|SU6S!Ris!#8upGf zbFwh%I36>yJWY?g9B=1Y--XHfslj3dGw&aq<0t}-@(Q3jN4)+HE1=;A@Eq^_pi#Pr zWA^!(=(%;Twxk}pAM!`ilY@PyX^4foSA5M!7&h!3|9~45N~!B?Zep6#oER(T1FqF0 zY#SJNt~_f9|vNbz=!+TlQRiqqZglD>L@F>@Z^8j zH28wH^?Q#P;;pEyD%FD`47aejgh&LP5QInrUKp^)5hTlAbcfw`y#?Ip(& z+VLo|C)0FPPmi9ij`TsGYcb`#T9fA=Gtsj(F3eZIfdn$@Pj1<#&2R^>0pBk)FjPGY682Mx9BSL0o`pR`DCnfggA004X5Td_~EYJDdHpYA~-NMiK279^O{ zoL*z`je2q%tjo0{Y!ggT4LOCclh-lSRaeJlR`JU~<8n)hRR1y_a?~6=KgOy)Zss}( z4u<7b{cS)Msp!jkVK<$>p9y3txH<{BRM7_Bhoqp`aak0Y@I0%BYD6FT6+qMqe|eDs zR8ROPk0sarLpQkQiutfQFR;VT7voSLf(N-a^9HxS@rc9q)IqFnjME!8 z^qC+jli0sw1y38UF$f-7L$NB%HU(8V4`?6XIfhhg^X~ymT+ca(1dG9c+8I+&+dG&4Ujl#1Fi0sW%#Vq#=1^!mO%C? zJ>vvlZGK3autvgPQ&8c%4b2d(#bwy7hLY?(3ZQck-VLCD$;MBN+lmQiE5fUmq)jMIC3jxDix*?^e^Kp4L zk10_mcrjPKiAW`DjhS-i%BO%mN+TJl2E`t(i^p6{SS*-}@n6lpKKSd{ZRYd8_y{zCwK~b%FaAiIH#4TGByjI zIOBfOe@RL*1Je!+WVHql1V59sO1w?o8V5M>^$IeEFNL~eM?RTFzBIe*2Zq-E;c{$|TJxX)x@@?vd6MDz6 zM~sKQXdI1Sk`Myo=}*77hS2*mCFAaGm9vd=#x9d6Oo=OrQlKK*HWXvi<$D_IU`*0d z&+(}%`X+y({3&$ET`Io%j7i&@f9~{NpS`$C$-Os+9# zg_$LEczWp*EZ|MZ`Ya0~{2N-Osz=RLw;B&MG7hhWe{-lkYSEfxUKsZ}&IsbJFpEAO z9s=3AQJf{^m8ctP<~)JK8d)pGe6${i0(ZX_|3CPDPvboYe_H@4a_iW^9a=1G0lPCO(Q{mT?<}dhlaYQkwi(vn`589oe0e4 z912XZ2lDuKn?_Xs^ijAWZyjXlFp<-V+&d>5;O1@j!`2gK&}_gqJ4VPI$Ekc3B&Rie z&uZwXLWE(tlW^n8{2N3x_&*aj<4Gw$5J&El?hSzWn5&H=$6AB2mz~{dt1ai7H;vkm zL}2bfi!@C!DMJh)F`39ZYCfMxc^~3LL%&82iK7REzQQrguKl(##je;j! z>fhj7@jJ%cP@IHHF#C2-eoKp2$*J+2M|Q?mbHthgI}Y3s;@#%GGt2qKH@*{R#@6qX z4y%6ZJk4FxPPtQL(LQE4!a1G>5+&V7yD-q1u>i^ron8zW=ObgYzQ|bn!xz-TrJF70 zpguXEk)T&NVy;cSdhUAbD5h;py(_}=Aa1CW0J#Px=|YV3LkJTE*2D3+T%`uyUm`yW zULWm@hqte{mMR&hX1KO(hym~I3;}h|AC}%DH#?$2V3Jwsx>=sV)90h!RTWt0u4AZO z2UiW3#_Cl$nXek*kJkWlL$d`Ugk}>d)>fl(U{e4#9<-B}V@K9`>(VdSAg_9Ilhf^- z=^P{0jAQyuBZvmF2pe6f@e_igu{3sFgN2&;UHZ-Aj)a+by$(0W3i$mtKG4fD-oy$?(}VBB4O*rpMAv57M^|#_>#^v zi2Kr(=+r_zW60I&Pl`_TKB#Wu41f8r%e(XM2W!|lvn{iZp_`-5;*Y%s*n8j457(a2 zMzw`AOsA6+g45GcjzXlEmabCh#u1V?BzRJQ*Z{b0hJk78)5b)H1<(!K!1bNE8#Jg$ z?H(|}R8@^x#*M3m7<84>S3r2cUU_cx0GAjO;W!+q*F&I zgQ{mLtlh_4YFry!GkwhsCB%KCE{@}pj%YH#*>tp6uF0k6r-Q&R{pN8Dy-TzA2C|E6 z4`|Y@)XqH&=Z@(Y%yIg>K-Rp0IeVQK=Z%~$o?%ki!Hp^E-_xr}q)Vf!YjLAV8>TTg z@cL5@YisR2cCdXG=j@AU%o7^z0cV9XG^rLP$$z}r4rCJ-#iU*^Tx*f|wFs!91izH+$C0lB4u|^zJ?eyg)fa7U=iP?rupbC2jnnup@KY7TTG>B&D_?Z~P#@Yn zBIpWF5MHdX_CPx;@1@RnZ(f(9cR3d>kgPjTxzr8Yu4<;-hCx8*DKsTpfekM&J< z>)l2yH|@f5w}b@ZU>>1J0-KRkyG6V=0q%l@chfd0j1ys&Wp^)ukAO06u#-`CMwuCdh|2kJb6S$LGCqJn#H2Ip5YqUdrHG8yjC|N5XHpsBH^yB+wI$ z-Rc`}+40~WlSLbFJh|F2xnn#j5=36?n6|AuVFQVqFaGOLQO4+=94`41zF%E*h+DPmWL>rD!g&=X042LpQj)Lje1}Lgi8Dm&fRiPY$A&l41 zD3x^-WXE+m>=DEHD>@_Lj%VOfRYBsf>Uj96-i#466(pxX=;=}n2%HR7ZSJw zm`ycVKaSy(O_^ID!K|@XB`IrQ35({)CdS+N9l<_>c2W~V#r*_zPQSs%nVo2V_w$G z3A)jygfhxr@kETQi@cMp_H-zGyAj(~tCJ5WV%wvI8sNr^=(np|qx;lt&s%PW={As_ zHu5`^V=fmJtG_Kbq|eth@v|svym-t_$QWGvSR6B4?7Qkl6K9RgTpEUfv!TiQi!qv$ z=+@qFDNfoik9j&zTYoK1TYd~C*TkzxnvxqaG}ZM`$2QA}0FHDH(G+Tu6MK+gPT-oH zX9c+pYJGLs25yp5;{vR{!r8_F>AhGhwH$LbQO}-1&k!P65XOrbNgx3*aBx0`imo z0DL^iz3oc$aMfG~ZLa_Zg;|bf(+#93aw@P`j)sYI24#`}tPARz{T+(wINQNT+{Akl zXM$=f#(_OY)w-rWBqwCmcqJN*^PdgCm3?FM+POX zbsSFunF^fpB6a%=%{|mkYhwv#H6?ozf$26v1Gaz%dbbni#b9Xl(O`~@6aq6aPv8ZbdjYD;aDX;ObN@kBs zB)fUWb*=!I`Z+ed3vTaai)2VD`_CdF^Ppj*x)R8xh zQ=cJ$?TQHJHKXUZvK~=KywO#?j!TeDED3h@kMQ%qPP;sW+1NrjmOS2ss4F!kiSg7M zBFz-W-P{=~W2?^4(>aLTvi~Tzc)iU&GpO-;On$J3MO^qW3!Ml^XEh~+;VU~Glo?}o zHU5%>CWOF~;~etItU5@@qCGB5Fj+-7 zYv|iZD+AXt^%ght!ZM&MAl!-MwK+qhufaECldPQd@&NP|wIY4oyzEY*USiW;xT^){ zAk{=pnu5#)@Q96SUin^Qzp*~JeQanajTq@&AG#jX#c~Y2bSQwlaxFXKAPyts#g|8j z3u0Wl&0{Uh!yfzgTjbgcE8IQkGowQtnB2q;`3pENJXv)|-B03AF?R7!uw`tPH{D8) zcKeZZuS1Hn*M%YUy2FXz@}OVtZI)?&;;%c3k|bHzo*FvFZoT3r-WY)E%xDJ9PQr%_ zIXUj%74~R=dp<~&bz{KJsss2T9%D9yX>twC)=S{1xH)I)!5FY7JvF)*e@w(M86MDz zS&fc5Ypnt9d|QHT9s?;tvr{{N$O6}6BXv>dXCcDl$nmIigI-9{G+dV{;qev`f{t$fuf_l}=E{76feJF_ahBCiFV7rysBlr)Rs&SFZA+`8 zasf0uR&g2xfmoG#lcw7^cDz6k<%Won>zHG*mh;r+je!^gxn&RQ3;gIyk9<|T_+7fq zV~!@We%hEGipBhCJLJS&bb+yejH#dUZT2HrFr7=zmtd~DyaxWxstp-5rH9*H8?8tC z*cc>}jo4@BZ4oYN)`ng>Z`NxwhmPh1E~9+0d6<9eyYpd=5_P_@Laq2@KTE;5@s1QN z6XPVJ>c@yg(4!*8$3sQfIM+(Vj1w)|Sju$Wyn=Upv69}k<GSM*~i96O~VFN8q~Fx16Js zTZ&9+*ip>+94;5y{W?jEh+*MPup=)t!XQ|{!BuM*zoi}#jjjw$+4CqQP9k`2)fJn@ z^^GH%mpn9KjMI8@Ugls$nNN6zU!FI55Nq!XYV}&VX%xM!bGw2S{|!@3{MvPR^Q{4s zK7WOk)Sn*WM#E8HOz6>S3-6hEj>bKJKg(J;K!5JglljVKDPyv{noQncRS<1LG;ryJ z4%))d&-&K;h@q4~-1bM#v z7FANIZibI~60_sNBs??Msj>k3dNCt?hYK8$a@K7ea}RqA0!y!vFCb$P8{iF7pdEZJkr)SDb@A;NU6>=&HX(D(Fbs`lHs+nFr@gIbB6v9yT||;MIGt1g29l=xvRg z1z5gB6y@Q~Ba_;5eNuedXq9iLy9cw)aPihBLk_5-t+Z)PzTBFv+*F%EqygMnZLsA( zfrqN*xg*xaw0MiY+H{Qkb_SgKN1-O{q$*ysVIQqN5M~}vJzZbpq5PxKBZqDb%DPkd z2$cS7V;VpSm{}k_^`^ zh}v-40)cVW?uL|H5-pcOVQM`OwibvcUi+RJj_9smP|AxoM(Z$uH~?Sps7(~^N*BA5 zhz^~VMpp*LRttH17xU>n!;d`l0E$TZ`ASqD>geaS=rFHt=eYvE0e;~UZ5}1Y)~6&a z=}gz!ppzulm~Ge|%r?WtTQ6M>ykT8@j_VAOz0Z%ulykoOx*Yjr+dB2!vd6bzBJP}V zRa^b)c(IN>sT$I`i6ssU?X zO{oMXzBQ)Lx!H>&hXT*B^6iQG`oN(pu61_%c)^feR%K+~XJ6T2xBo^G#xhHv$B1s4 zK4Q~D63(7h&FF`|A{)fCcM#eBF$lofgj#IzL8A1#++v-0Xv%Z-Px-QGSV6wwZ zKhuFP2t%-qjK`w3;Zh(q5|Q;qSDewe?kK}jWlqxF=wMgAN2u+&i?-wfY(qF-CZKWR zM;PO`*`}pki3yGJ;=2ga4d-U4z(AmKhz|pe<^dklSSI9+yueXoC7rQkTJqzHmwm3U zxWq#gxozDus#s;is5bY3|G9tih;ZeZt$98Xr)bD!2!7^RX)BhI$ z_|DqLv>hi;SHu)za)%Byt{ff=9-_lW*fDQ2jryu#4nZXXA5mFX;Rva)J{bSK<@GwS)UG{^J;o%u97nN!lR~62h?s_YpRZ#>c-J((y!&5m6|7)2IyT zB#y(hC-Y&EArCtqbcliv`h5m|c{;GU4!A)7|Mspxxo#VVCAt0o5AT+aAPEwbWXDO9 z?RK}c87hWZfRB#W(+5CEhqENBt#pSxEU&y>IZL z$5EV|1Wxk+tqg3F`OAgluxl!fw)WO4{WNeJJJcC*zOOvIt3zv?&7E$OeNanp^jE$c ze!7;N;7UGmjWc10fyLPeJRBfTow(}-TR3ySpdgFzya1~{$7F5&GEsIbz(mir868z$ z0*SIii?j!}OIhs&CZMc1SVK?eH1J&UXOcDOhlfVI=!X&O6LUh4q>n_~(17gC&WP%7 zS)-Tir|FDX5uA&MMz0<9zU|?WlMLJckN?RP*f#k-3vRPL^L6AO-#edt@QZ&)p7VRw zt+O7iXMa7=zdqXyXmr#2O-dayzPXY&se{qK1YI{7Uzd5E9$YT)gGMsF*DIaFL#JplH*u}Z~mDB7!az`|*Z_=bqLZ3SSu0D&MY+@zm z`aJ5*r+Tg1Zt71=dBHdCq0R+YneqEcxFm|E`2q6GiM#BdxnZ%p7BdVNXiRCTvFQi- zFj(~356kjgYoInvu0F!yn(3aQj2Jm0>rlL@gx!D?w{w#*str!7j39>?{~~1 zX7cMTNZvrIl-SE9iBec zKGyMQ$@F)5Wj{P(@$2Ek5va6~A&dT`|ZpgzP-twZz?L%)AJ|JRHE^MnAZ$&$<1u(cE-$1&-xY54zsvZ-$Lr;Mw6?~OuH#{s>s?;5ueeXJ z&-{1t?CgKUpxCN&ps*)nW_@Bgo1~k@8H|LjJmGq19Q+$RdYN-{U{Kh{an|sGP`^Q<-1xz&TYEhOt5$2hr8D4G{?#dg_d*I<@t|Di^I{hJ&>-YK@TEF%-pmI);3=i)5o#PL|@C=R#EiX+9fpPj6JTWgx9E9GhYhglAA(Wk7tT z;=fFeYv*1(_&F2y-TI0@CdL&;L-{*|77Zav`W~=@|EV(aj`hEPO0fa#`0M@U58M=W z5QSXlJ*39h06fpvA;(p{(~;@D#Ic>7ZHFj3wL+_P1IAu7U$M_Q7;y841`Dvl*>TMW z8qB4xk!#DTgUhzO0$iH=<>+EoEFr!+55OD;g(LP9KRCpwvEaryf3yf_tPUWo+y3y# z%kLtyaVIOy>csslxbvbcE{^l-+5jKMP?Id77GYX2+(-1`5iW;mIeb^n33@PJDN~&R zTifulC6r&J!KYFSb&M=M_$|RPS>zng0PT$vUUypiFl_ly#Zf&F*Y{%jI_A{q6t%XG zlmO~i4W{0;h?7sQr|nSB3dzBBoSYsZa=t^2)2q%%ZJgMhF_%Rvb7_y2Q<*TAG_R*K zwz{}h$)Kjr45HmyD;Q-@!0=jI+~;9lZ3jh-3A>jWVO+jbB!!aUh3SA!?3KepJ(zor z{f0|0i|^HK1OV@9rWq&`FYDJ}QW}kD;KqCPFOAoi_dox9`5P{ME-cD25yk)j002ov JPDHLkV1ibqv;+VE literal 0 HcmV?d00001 diff --git a/microsite/static/img/search-platform-overview.png b/microsite/static/img/search-platform-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..7faddc684c1f4c5fdd45275179f4f1c438f95af4 GIT binary patch literal 279537 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 z z)}s1-IwVNzgFII@$xilG<*w=MEs)_WpwUNiU0B;3KnXe))C;L8&t1e6mGf>h*oAki zFLH=8mo*e7tYxbc+iYLhXFVoxtID=w2E;4N61UYj(AetDV_iNT%amS@jVW*g5?||} z*f#MJK)8!0OCI&W#owbIS&jx_3RHR61LE@kRvCmrdea}u1h6<XW9kNuEqmJB)f%0DHgok@<< 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�~5CDo0 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%0D0OQ`7}nch37e=0 zX?plzT^a=@v`64 zj(o}q7ogJql244vF^PL7%J1zh50dpk4)~Ot<|5L&@4t7sM1E=U@xpgU{*{Jk1xzN6Xg{Lc=L7~t&LSkTfxy>1Y8iIO~c2tQ9dXFibP-^L1t{MYBr894Xl)4 zQ$W^hZ_r4Z$=tVtS|{;%&0wUDeqH!;nKXDz6XK%ov#AWD8qVrHPz3 zq3bgWY*W*b0O}sj#|;5%eF;Mbj@z4Bs5(>u{9#aAjU~zOLJ;>E`jULj>!iF%dc6EZ z_BryR{Qd8H|MI{6FaPUu)0e*_H(q{`){1Wk@CNOF|H+?Re({(8@8yasF4v17zww*D znO^X@C#e!w4Z(~MO&gz4>aZY6{sE)$>Ddap47`UrZ;o?M1Xv`i=4F&ZZPVumR>9O%){Stw5JFkT6)vnR?&t}Us?~Dv`7eyWTj5J)iWXT>c~h% zXLO$Z2I7LCDFwz6O)4{533vXttwrg=UY#S%vfM3~TX6dCPey_tF zLacYjAPrKV`9IVqe&HDf2-Yl|vr{-W;FRykfEkp5v(KxSgOZ0S&@_;4s9Bu!C>$ zk^^IW`PjjF;Dy90gW&K2{$lwh#H-))o&~?c_S7doS#NHQn`ECjaYFBX^Dw!;*HfPI zRQh z)R_1wsjW;sF67QIth2tsmEN}`s&eGTR;36tYtX|e&shgxX-k>%5D$GewOIP<`-UY^ zfujdD``29b?C|YgTCjs9Z*9jH|v1aeq8~0_~f><@w9S z@(ZJ=HU3MX_5o{3eqD3k_`2*Jcig$$eDlp(2l$H`#hymFBLm0+Bg;-T&Giz52%Gg# zo{VtLEEhS}`lz18hWrN*+q!k}Gkhr?p4;$49qD6LXXN>A?poRCZXG!M=xbs}aZAxbEDG+!qqH0nKT=idVy ziSaRfOQx@1Xh74*+LPwVqzdg7Mo;gMb%MkfQv}@ z(EEes#@G*%e^I_u?iF>5eD&_^bI)16AaBHQzXscIKaTSRhYMFI;5l;tDP1qYVGZ>I z^diSrhVOART5b?Eg1kM}RH9BqB@=tWsRKgb{q`lgJ$#GULBQyk6pM=;SxG05RZu^pa zVzf3o?hBxrATY@B3vPO!DH$i640;N6qgxUD)N1NX7mcr!l-6ZcSeVTUm}BZyVS z;A9@1Ey0aOevCUGD#U{{`b)FTkCvZCJf?9G3I9-{+{hyZo?%RE0TS+)odmNc@8QLSC{JpKz-o;Gs;4>$D9~ zo7%AcxDbUKrEh6wD-YnTL99ls`lsttv3guE?7*}l10_Wh&}=v8shS+Fk0||x6U9sl zW9yx;&dF#x;S5bOc@%Sp4?(>UYh~l_c(TCPH>zpRj$Il_(|M%#6<~uJ&EieRO3xfh z0`9OF2rI%4z(E%IxDBJ22t%epES{#XlC4dz_4e&t*FOj+5VeLIXEwHVljL>V8Eu{I z0Y_-~cqJ2Vs-uQ;_>y2#bk>77Lu?cJI--G_$!^Oa#wmwUnxTmx4L9o?&`sBQrv_7H z$6W;840{cA>Q*?C6_)6AhA`miyxS?oC}O0nTv#HS3eH#iUYOqET4N3gx)feNd7S zaLFRq4|5{}9rAO2Azo|xVkOsR4eRxEm$rf18wH$E1Q&T4z;#|K6?hn{fZPx(E)e3y z_ah$h2)()a4L97dyhlDYbCx zXzbH${FrfsYt7ROMYob;3a1&`4Hb?6u_zV~vgf6~;hSh@Hku}uOzA+W_Cz>ksi6kr zcXkU-o2`+p#%*lOP`xIPDP}GW$?Xet=#oB3do1pw7XF495*FCRGWnI4hY!sClYJ?9oGOdteZs%He}bRrC+Y5zT~? z1j9!$P@8l-dE1C5%30~N?~-cv2{CQ5Xtg8W*0mU|)S%!t4CseFOnRS8Y($v#Yp{{I zkt4N3TWfo0k;sDHjuBPbqbWY>(rhfV`Z~7tuF~xzcn8P1=ivEiTzJ*+pvd%H{$Ouiaos^n<6?~vh#a;_i@$-Fd&9lg6QJ#5hU{fm=v8o@lihp zBhQiNh$+RBUbjVhc-q3ZyS~QRjQ>zxa-#o+yeA%XF71F^mJTq057F?qnNBzNF| z9&PGDV@NnNOoH%HPzs!~c9z??t=R?(pR=D^y4CTTzpAezLz;!5Zn%?1Z@LZdF$|-a zBAL3%iuR&Z64HkKF@$Dac690o558p?syB_rDzRM)msKS4BH=*$#>hvZFaB^rU2 z;_YvJ>+-$d`@MRh>G{upzFyRLuiSG8KYfmd7xZ_@eT)9=&;NXR&5!=*@>uy)&YgGO zv3%-NpHjX4TA1kZ#;wMwDp<>3I^ODtI^PRUKzI?5EWEzXp=S-Nw2t5lO?mRMm27N8 z36ma8bTqbVj7RbYM=y&sQUy@Hp@y6vZeaTCfpZG`rNN-Mm z<&{@1_}U(Bri@Pu;8Rq8`ImpWy!+knUaolLqtd4b=27j``l#(Z*A^l)oytV#GLirF zYf&mt|=WK_}c6Oubc5pUE{3 z{eCwT^hm?hd!MAJDA+;Taui(l&pG>QZ}Ms>EToJl3(gEDnvBs0HlHG@YTX{g!d$7k2jT?g%sE zhfRN(Br)Of5YFV!*LD=eb`SG9D-ZWfcD9`x$J{7Fe{O4WvpiEwz{jgTbV(Nih;m4F zbL;4W324Vwy+$SD!Z6Cz_vWqM&bD&WW(S_owr+iJ#L-2Irxf*SZKJxj2-qfx=TvD2 z?gYvCKwKlsFrSDA_<4l)fx?Etc5(DzKz6>V|eIlg*#!G#wtx68es@W~on#K70Pe*87BS>Eu*H_Fe;pG)ZS zbom9o?|b>n_1E?A^}g$_yKZ^Qo8P=VP2_jTSN)px%kJQNQ)4|Nu#hyzs+p&i4%XY} z8u11)guxa)@lx0HCU%&YXqri5VL(nUQ*Y+yw7^%1ZoKiv<>7MC3BTNiUr4<2WFRw0h;Y`nWMN$UVon670+MX1s_h2a) zQrGWWqc*NW7AGGD%p<~^uvW~K+)>VhD8!`K%<}Uw&?ow1v+F~$Zkq9-@sMO@Pt3TN z+Xsx5-x!+oh%rRpp;sr~zBM)&k;KCwK_l&Vy#g@3XBWbetVh8QekG(lo2Xs?Q zxqrN|PRHtVYm}$Lsma%evFdIWP#GgA_ABK2hX*z@)+gdgjNPu`@kTD!gE~E#Oplgo zm3`lF`|ZoKpZUz?U;WCjERU97V8actpDH)QzWnmbmwV(w)or)kwmjxBk6nJ^Cw^kN zM1IljLFb>ZH|G8QH@so_q+IBD#PksXpBMO;HkoF+xsyaj4|) zJs5lSo{YO%WHYXfabbq!VsBJsxL#j8S>jDjczKj-p5rOB9E{{y4{qFt=GtpNx%}V{ z{=o98SH5a_sC+H&yz|am&X%7wze7H`_K}Z%bot;l*DUXS?|bzVQ6K!!ht&F+&v?di zzO3J={e`_j?HX~N=*X26GACknn%?8)Hqd&DhOSKX*o;@NVD=2uYu*!k?1;5dGYjgp z=dr=PB|`2&=tFx$MDrmQirj3C!OLd-Q3l7ByU1k#ya}PGAd76&msi-t3WFQ0*m$+G zZtCcDY0fO-V8XgMB4F@Z3d^@?;|pA?CwQD?rj2U$9!xpX@NHBa_k(RP)jxUA96ZmC zdD<1#U^TxAJ$R(`H`d!OP#FUmvW%_t_-5dbmgvYHWQ~3PN9GiQSv~gpi?|{guw)D{UiLpN7@W8A)780a2&a-MAs#h1k9yd{D&N0?};HDFA21 z#=bI8l2Z>9{vQpE`(hl$G0J}Lg(!8B;v7BhREnAus5XgrJSD7@BJupCycV_?4FFGy*kX;*a# z9wO+durqPi9qrJ8la6PAJEdX?qWR>-7H0?Kx`|dmX;b!S;*XQz8>b+f|@~+sJh!Q|7FoZIX#l_UO&>_Ow`(jiij`4u}y1h{9HjWJL>G>wPm)D6CCzg{ZPb{~~C)98cu(!YG?aOce z=IfT<`~Cj_=<>uTJYjjrLmsmHCog=Vew`8*qVASIeIlK^QTt3ax#J2W^ z5Y}mR0{dPxl+YLaVT}L$8I71B$%=xpYP_t2);=u&`E5lQM_ug|Cx@yTk2vRWNM!>o zpmr6QOHpGW5X+sih9Wz~P#Y>=`QWb3G6bC^TNfvU*lb0Zac`a-XNnOr+O;Ex~~mT|^Gqz$p7<@2GA`HovB z?L!1_5&LGfD%EaVeJXzMNY^VHr4q@bt<_$_6@2lB^<)9X2D$4}$phq8w?e7v60&lh zq5CD-r8P~Qa3piPzFWw5VAPw*YlrD3=(f6~oFl?Rv{jU9}3UTmVIp$xzZl?SitC1g)|blG$Q;3Hwo%>3vDy^qQ2B0Tl8=YW|V?GNdX z#%p)qEbBpJvVIT91u29UE$JYv-C``9EyZqvH3K}6jSh}ATdyB*t=7octzwJM?MRxa zg)?(gLQ}sbE`w2{IiWyiyQMX5XJTpuW|(3%kFhS6T24bzhP1M2QdU4hlJqXO9#~Ce zw4!dXeloI6U)uxP#nKT71NOais~0xmOd2};fjNsL@API^M12$8{o*5?-fKMM=nX_d zC3}kO0vJPFXu`duE|i;@Klq7HTz>7fuU$SM_m9F?z)qYvp*K3mJ&11j>+0D1nmecSToTW`tkYHWu3upx_MDVYm(GOsm<5{*4amVkOMQ^VmyWgJ503J`2| z$>iE4gac2*Cq{g_4PU#&y`<2->6^Z3dBw|Lxjf;CPg?%sUGLI+OI`ZVhc1tM{NtAg z$=CSMa8XM0+8mdftvuA&SAa$xRM+fLpR+M+h89;C%bS*9K z`Z`K6dmF3wIQzUzzAHzSQ2OH#1d)r%>70$GLH_zl%pbWt+sm=nN$OmC`af8BR zeQxT;J!cc9WTV4(?xj5-7o@D;Q#D39vwZjX?YMBjnis)) zxW1;?w8rL*?bc|z3T!pph+E-zwO&CxpDXAUwIj>Ztwt-jP@UcoLKUimfN;{{6Hs$c zr~$!1+%T_UB0Wy}kRx)AEGdr1q_Mbku5Z>y*@E+4xv2CU`Ksibk&9B#l&@Uk{$G!go6X}MU@!WP7cH-T z)vK1j`m4Xv3y5zO+`InbFR(((bDsCS_7iO;tiy*ZHRIZ%_nQPxPj6o$v39d~qS`1P ziXDxLZB4!8e7|Jy^2=cepVTLuKR&NOMu;^KDk&_#cqR)8k7>~H&&|=|T zBY?3qUWBkwSzhZeS-?pCs)33rf={O^W;UK8j0PkV-OR?vX3C_j$rjOoFm9fsN7Z1+ zV)I+KuZ(;ii=IC!3Zvu`+&YuQBHyYs4~iBW#iAH%E%Pf3@Es<}$C`t~^r(~av(Q^| z8H8Ub4h!X2tm3jl%ILPaIh8fPSpBN2Q zp&|)GRTS`{KqP=VZX`f|x-50kI&-Mc*E5sz4Ya!7xt)U=AFb z0aa&Yj*T%dt=14#&ynr1zs{1Int%RtpIiQq|MQ+b|17W*8r};l&O)kAn~KaL+ZdsS|o?G&%`wGAz>Jg`J*DfH8HXT*dML+s0n&pE8Y> z3wBWh2b;~p`lBBGh}-g5e6mS7dHIlR;wR!WWl|TT7_I+Ne#);aJPsqEJ@UR&qmtjlrp9+{6T5>y*1`9s%g>oLgEwEAR6o$r&!^w`;Xu%9Cy$yx0t z#-n4nUe2z>5q3l!VJnjxr4*eI(^#=>DS7rYv@x9lMITKmaW@x(wy+(T>-Mx(kj{UHHUcwDnHk$o z2SgTzy0A9u$bwk)Ey!*U%|9hoxSQCj6c<98YZV4pQASvXcv@aL0j}j!xQ;TIM>%CS zre-K6a&kNK4EZ~AIYT}X^|$hMyl2aWjORZ0dCR;0-@lLxO@FvN_`w$~7d+^^i&4ax4vLG_uO-r>p%P1nAdidZqu40VX?4c9ScnUO&wAD~ zmwV)Ed)LYZr$2q$+m;LED|#=G^}vOwr#|(m`l+dh$uIFeTZSpnCC(73{|0}up z_?_SJ9eUrX5r5}!Rgmj|HMGr5t!g&L3zp^$asc*~4|CbzpT0&HhIK7A#1n)Vi*Sx} zbt*B4Ma_d5R*A+EvnFYdvs(0Ea*#b6O4k<4&SJiFek6{(;A1|CJ5vjZO`UcH!+|Bj zS$I@?PZkGB*3x@ET?)je2>Qch7~wc3vEs9awQf=ZW|R}$2CZ^hRu42fNv65glTmpq z&byd=&;+8F_)-2t8tvR6FrYh+mJs%;~8qwe^z<_fQdD(OZ75>6poLx3Ao%LIU8wWUkOCezs29VA@J!Nzm zYJ}~r;dgWF(;CFeZA%&02BK7?wm4clS2CJbBqcR}+EG%ml%(F{TCJI>i{4Lot`yj2 zUgM$}_O7yesA$YF*&Ks8&MV2FV%rwH((D#2ErSz9sEhFPbOKA#M>SVH*Do-(Sunyj^;EU*8q-_pOAzT_p#5B$In=*1~qe0=bO zFOZnGCk% zM329tHgYOYv(CvAUfAh=5ddSyG46dQbXVy_E054C#%wZjD=6zRZeq$xhL)$hI>riK z?~_EHzt}**Mj_|kXhlAPSF>DK?o07k&*AB!6sm*u7_}}xS4=leYhuV?kER|bevFAk zM4NG3%1AY9n#?R!I4&`*#pC$sj(tlW?PBbYglcS>Nv=&xrZWd?5m37LDnJzJ|H`wL zYc+nrMw(xcWFXoY)5ucRMiwIZKUXwJIa}FM`Ry#Mq(+ih;Pb#jFS7+|sXq zgbQT7gU&}(AG|`fEy7rRGv>+A2%~jOFp0Sj+gNTG4(*4Ej&yT=L2lvdWL#Utb z!gWDr!6?=>j_9~9Hc?RYhkl~ZFzv_(ILB6>#`pi-xgdpvnC!+H_4RNP6t3lx8J^g~ z&F72{oc2CF(K@2FK+KTDZyH;yo4H))o~yQw9G?baD(d(>dQYu8pGIJY)kPN0bQO$I zx>#VMZ`EdI(+c^09kMOBf#2K=dHs}B5*n4#`FZ4Hj0rS21|(7YRuZVx>WC8bc;geF zG!4HFO(lw|%94nR+)F&T&(k?_uc$A4;S0;d9ks>XFM` za#0HRA^I0T`?Go+<12k&MgtRay5iA~)_YEUQ9dp8iI0DLx%`o^yQ_;`-`p{bY)>vw zZEc1^P3pXkw9fv5xWqa;7uAaSNWhD=3!)ufoXTt~KCP#;HBEHN+4>N7XmPe0~QJ@VlO?ZClE1$u`b5%eV zh)Q0}$zyC%q62=MLpqm%BAxdtnWF)qZ5^Oh4`-veodNd%#p-UyI?(Re`n+j<8ML`Wf9*;!TXt{3qM>zFSRpE&KLghrLekOXT4&}zC(aievRy-y(kEJ14 zc}LN~S^#csluN`TE9hr_hjxfXlxf}6OY@+1&N!~U18F>X&}19VaDtSP_m(z<1&Tm4 zcF}`v_|W=Sa?Coe336&1>}`we{5d$nSdM0F1EzvOaxT4cwxJm9j$z0V3df{T%pN_& z^vU^pAsV1|M%6@++{X-k1dXZq9oWU0V$H!aVXn`GZE9Qvd(-E(bJHFlBP@X4{hbV^uEWx#P{3Z2T!AjRXR zNhpuxswj*iX2@GKBux|bXdi)b#kx=d2fRih>vFGrRqx7^Czn^g;uXu2pY){VO1TJi z>1CHK=gHS8PnY|C-F?s9%Wb#awtQB;TKTb$eQbHhJKnK;_`@Gwp8qZ1qU-Ko2oy(~ z20_%=D_lSHgQoFYoj@VOC&~0V%IbEE>5=^GcTjXtaB6JQlfMJ)5RhwRf;B-6Y-3ri zjB$;EA`h1Xwv<_(@i@hRM;lFB({|>$G)A9~3R6wB7M47FYU0dzMA68-GZv}fD}bsh zX-5sO*w5w za-Ku=*2*tJzlWIt-{9d{Y!G5Y$&yeQl!mIlr-MPPy+JOGcWQtoFD>H^V#6^SqIUYn z1rmBqLER)@-s5OqqN6DmuiNwx{w_t+36ZzXrCS6_-|Wf z^L8Cn41orR@>El$^!C<|gIbm5#bb*(wtze{Bn9694ZzALd)~ryycHW2ClQ2{gUAF+ zqJ&@#Exr#a+0c>>dmJ@w&+`!UzyLSm30l7Ua6BU=#+?T3n%P+{_b z-pA-fz6J^Ij552&TBkm;n88}0UfwF{*KE0;TDEK(Q>t>{uAy1;P4FxR6dqwbVE2$> zPzZjKKVb*=;I=PN4<^cneZ0pUeeYmH$Ojm~M2@uRt2HBsk(WqT>`mdvIHxf-g~tvY z+^SZ`#?}m1&4z$uArbbFCkb``3Z(9`BneHLK=JgFFXRlsUYx$R2a@Woq1-r8Ymnpb z;3md6`^kQ2X)t4a=#7>t_F{jxT)=p^e8LGAp{~CAJ&sM0A@KtU^!1^byg zJ@%lVwDMKTT#Ez+Lv4v+&QsB+ew6a#BDDTusbES`(wI}VmfX*j3y2?h-}{#T`tSe! z<@>+?`VEd1M{^!fT`zT-aZR4Om$CQK1)5>4nyAydr^k9K*=CC^PhV+2xA7!L z#58VqP6{vU27A`XaFw_@U}70Vv86HQWoVDj_4rG4S`Up&n4Igv%|W%IB=u@H3J^y4 zGcDosAwZ|-6({SG*T|S`8jeDsvF9x=-99AV_ujr7!x=cLkLS@jf<==(!4l|Hg-6Ljy0FJSLh~I~davJ^5-p$)1>qt;$#$N(wavQD5Cg+Fdf{ zwae&Ozy~JLm9-P(gRKS`AgXdWO0N@!YNy!i!|riMrPKZ*QiMXPe&1Ex8i%(nIXKE9 zS6^x7ZL8Nbsy0R=ylUt84Wb=pl6a4X9>l>ma&it>nm9<=V|!o3HUv5eux{-X(ZM=F zq8^ANzcy~>-Qp}F(~lErO(UGAL#z?5Wm=yNbM6&ZQo<3T&7X3MMG&JsN_-orpglng zD6`l;scl@vzzn9gZXX%5Og?_Svo&^d)>P|=y1o4aenDz)fQR9+R7Wq))OYaWdWs(^ z<5**rXNNql|nS^2DYmo@Cmo$NA+Yn`Vs|{YTu08E0 zv^DSfg-3+l2`2;Fy3iVZ(5Qw=#yFXzm(?vxU>S-mT?AP#e7i18r}G!k-&n%v;B z{F%EIr5Wmpn_pjW;f2eca&h7(f9juh7Yn_S=^eCr&KSl~1wZt9$r*Cf5GgFGwK|HsZPyfI`UHg4NPO+4OuPr9bm5jVX@FM{PsPKsX zektg-vonmR-ZFdNO|5Kzric*xriX=(A(cjk@>xSzq~|y*MJTkY^0j;_6821{=dn0H))-M2 zX?{<)Sf9-{Kbg8vxl$Fmrte);?bpSK8M8-FHRL+l73{<;Qd!??esoVnBm=|U+yfqp z*DfFthd%9JD=}lqVH8_RFHTaWRIyiI;7&)PT|wh!X^A z!G^-VwgMX+*WnjEf_VGXgfVt+;!DHcwnF0dsQRgGpJ_E*iEV4_m5`$qV#3&u;E>DT z-^mM7x@hvOy|%cl(OM6_u#Q7T&$t76>RwmymCTOa7sVaPO2$(qQ4WN-cEm)MsCUfy ztQ#Q@lyweTo~o{+7BQO*Y_R!66>0IpyuJ`=5q4(BHUgyy)(}`TfVM$`tnZs6wRw%{p#h) zE3ef14dG(cg>v)j^W-AN+49L7I8;9p-;n%XqHkABpnmS;Wpxq7d!yW|2CzK;1t`P3BJ`RAWM*kh_b z{6RM*qFZm8uZQM2_J4Wf3YmaOou{FL*(!|d+f&g$&mH7#!eu}-Cy4V6eP|LS*oZ=- zxijWtQISmb9e+9>L5yRKZvZh@nHseZ9feifx|xDTT$;Dt3xy|DWSoPr;T)4-#fk$P z0%f)@yp4U@4Zsz>HL_!IfOC)TVI&q5g!#h7mIj|%e+Q;L`KlWDR!VHeq>*yVupDz9 zVCHx(#ed_~H{f7ceFe%+)W$Cnc8ExTQrU*BP#VTgUvv-9z=q>pA~fpRd(7_nga|79 zu_O~{ahuk^Ol!a-F)BM;=kA!Tc^zjzGro;XHSx+`M$>er%0vsuEXLv}4|L!9&FewK zc@$9ZUC&)Zj#j~A)k=HDq>aMHEAOs}D3D5>B5926p@D56>S9sB04NFd8kc>Pw0Gh$ zj)HKlb#^#_G|`5bKHvbtKs~=~lN8n_ghJ@!1%owI#{A&05lsCwxCk|N0Z-9Bv|)_K z(Fzu9Sb(C{jkg9dXg8c#PE?L0m_ESwkYWT_vLnS!qCpStQ|%+UJ|-`CMPWAe=Gqv$ zO_5|Do3OUF#*Y=pt~Yg(imoFA$=tC{aKU1PSVPI-6gO3pA@{&a z+hdX}Haxo8Zm?(}x~C*E{NL3o2i{stW_*jxKIL39-^Ry~?zrR5-CdR^0myb$o-@6M)PdBfO!6c9<?Vjvvr9c=MbFr6U+ig91mPf|h^4O(T7*E^w#~{~m@!?8XqAUp^oKOoNo^BZ z+B1ewh6;2137v!ujl*H7?5CtUevdC%XUEw&{Gs_;Cuw?|#$kaZ%Q81jhqfgHKpmHX zWvgSc;r@=|w3OATj^f%RpBf_w(75N*tUihwFNkrb*2W<6lt74`h^oF9pM}Qx-NHfJ zk;gdaJ`6|@NsT7P%%p4Oi*0KLNxvm)iPf2D>6|R~cl^?A5s&=B`gjAcY#61>0*rC@ z`tA;Ir-vHss6gBIZBgfCIrqGCmtTABYZrVu?*h5;`N=0dLFD)AO|f~7Pzrf~ zo&AcQp>9LTGq3k^z+BW*o^l^4v4UMwBaqv+Yn`p(fn%;o=r_t-{0Nrkn-C#Fy_hLD z{lwZiXX__0J|~}!`tI-gF8#H{8*aRD`R(8So#lobZ&*%0{dBp<)S1hJDh#Ha zlrb(aZ*9zN8$Nkx`P&(J4&lYw`*afQ>`}hdOpJDKP#yNgIBVmaylM5BG~28^%c-CH z?9#CT>Gp`#CVy2oUM1@#jjd!g%N^k1u|0CKfqOIOCazH+BA?nriSzWHm4S)aO?fBr zgogdT!13%`k4lJrSkH>wdtZV3Y#3mB${d(i^tOR(Zqlf9INEi`^X+PuJb&eUQ62P660ASA0$0P zP|ogv3NVq#k-Mq0sMO798siqo9UK3z7!ok}1Tx}lNx`#Q5w{mK`a$Yr=gEi&Uf=r&RBF|94 z^dHq=YGrE?(~>>$!XmY8*?|$g7Ml1;PpS!|s&;`jjA}a?Rn9sJuv2A#k3>_BSQ$%O z@^XAZytVGY3OUveZHpQGs6l=h*=@y|L(|eqJbmUdw#R`elx`JVLmZ%B+bTu1 z>DV2YGPE@5WtPK%$HA1E>umkB7f-4t!d9&t!GBb*Cg}wt6Q31lH8P(1ohlvC`t)mdL25m;qa(EZQsoVMZj&=CSX=%) z%Wo()k<37jr}Z^6+^NeifJSd~WzaS!}kGIJeer z&M8_2Y+Y%bG@_?QoB!D3NTc@ykq}1uwqy}1j(-rTp(7W1H0kA8i5D~|O&YM#4|;0R zQx2rnVV*c~AE-Oz0tfzZ(#9Vw?VDGiYxBIGx!1$id#`+1r{ReId<9otVy)m#%o zeZW22Xg|gw(yHxC3Cp0>mzi~3gk~^sIuPs0IoIN=a`EWt&v?f2?eev}`{iqUU-;6O z^ak~}-g@hD@7?z-FOVD4Uv<@0%SH0ZD12oPYj~!7+70?=h~0xOxIo9apA_2YO}Ghm zeaLmPz4+Cu5Wb(X*}A4;=pH1mvkl7yx4@}i>1CpGh#=<#TjXFf>M=2YY)BMIlFD)t%aZB*}JwcQKKZ zT;!&WaEJt(vFN&>#7w2G%~U7=j@{#*=-37+QO=V=m+%RqkuF4&bJ1u{(G$ zr6-e*pw@Y-9Y-M7dgt7_oCEJwM3x$dj<`<*sEA3OD;GwUr^@N0O4ddZ3vIyW_0@yd zG6W0 zFa4?UwT1PRHeZ^VQh`*+0&)OyqJ5}TX_FqVfR zf`ctB$6zg$-`H-Sd!!+eVWra@Un&Ei z{9P^g`1%dGY5B9{X7smzLMXB4OmF5{7$loBAcsu!^YB5S~ zp)a_>S)oQ-Ez@YPecDJS_&DGajrXq#n%A%lez;W&hJ&@(iAz14CdaMY{FhnOpL2D$@6%@6^n^uHnUiQ3|Av?&2xJXs1S-+geQZR{kme1i?talw z*;uSkc>3#{)Cj~i3cRVaiah}YgqJdd3dBA zlMm~ko2>I`L2gVNCw5aoX)-&QwT|_2mzq1)I<49|s@gIV&e^ApTHD!77>(Ktv#Tnp zqY_2gBcaZ~4jGb@eZvv%%@CQ)u*bOH43WR^id9t@;4-$W?B|IlmKqlsmT{J_fS|+Q zdJEHDH%kcPLZi_KQL*oMj3RREWCdLYnNa3he)4-gc;SWe%Z8^f7hLe5Py~aN{^eM-y%0OfBT>Q>GGDhyhZONb&uRX>XbDNIM<7k_A6AYOoZ z>yU9VPMU^wfvK8%-YhrbE;bTRd&Xvn99}g!Z>rR4atY4qX=n;X$xC*q5XvE)ywSjK~WVmf@ zK%;mphGWF2b%a3nBi;q*sX!OA$zWP$9w(r&t!1d1U3e+X=A0B;{nSxkU3d6pXpgHL zZWKbD&`rreajg#}L|`3yS;YeYh&z?Z@p|Z@+8ax0o%4-(&{<0UavE5&%k?XN^mS}K^GDA; z#$KH;d(?-2**i?+KOpd@U)dB}Ryi;SLj>BWMuFdm}e66BLcHCK@Sb5yaV%~69F z*ov{2-!&%goFNCa&?b|leO5UuMH;Qu!P{rr+A+2&=|-$MF8~z)Yf-~f6~shus(CXKi7lKWf2PN0Fs+(p-CTz@*E)LD~ruDGsf&8!O7}Rke=xP-mG0^k&uR zoMI&$S4|yJXZkInZ^0PK&BHGDAj3dJe(n*@eczbw$YG5aer9h*8OK(a+qq)KCeQ4g zGFa$w$Dm4|5X2R+8E741m!l&~eHn_?VL9&BkomajFTe%?1|q4#nun?npr}Pts{y7z z8}>k-bHkgXNSI#JOVaw*;AP}MS~_#yX|QI}?fX7-gWfoV--yS>SlEI%VQ%4Z{o1pf zw<-J>1U?#lo^@y5HpV~jt4(*Eylj$~ryC^`X$&q9H*HK&)&@JY$pk+CYMn-V?Njn5<0iHy>Sp5OC`wQv6w?Bc z(Y8axj}W%DC=Tuq=(>gr{l!6`r$H?&C8>vb=AB(UY>iw&qPSWEooRGA*1{0%Gk}Xe z;E6>W-*AlT5R*1i#^j#$8;qS0Uu9Bh5yro=2YFqKYO`%Ld*c`}aLpqfWE%TqJJD_f zWHT2y6W^G%uW5>eb~xT}JVXpb+j9IctG18q)K3c=&k#}=QDD-C878#zi`VSs*%lz*orG2Rpqf2mn}PhIwkF-?-H6|H>g0@tXsB` z_~^-oYV&C1#+BMdoU$V1B;0aP7RFPQ?Vw#xS#$5ez-{bCT!vvRqMcB#DyOz1?x1$y zVSH0& zDYi|5{I?nAd|d4s+iCbyWkaJAiF0-#tv47+BEON$*ds?>JIJu%fImtTdwqvjIZ^}x zcV3^+V<@bgc9i%O<#ux?5M_DYvIqDk_D4}ODI?t4TW`v41(^+o^b=1DLN z&M3O+o$pAd*6{;wQR!91{T^di(dDb7zw-}4RBFZVVt3@38eV#Jx6N}c)w0PpO^IP1~F9vmjJ6UL#e|Jx$okP__FNl z;(`>C#wOU6lve6%_YlUb351$1&~2#JY?F-vVYu3KBiNVha|=U12U2U^Y)};Tdx#z9 z9#gy1Lc35HM!Z|NO6~Fr9b}S*3;Rw4%__+3Pt1Sv_P49?-Dc+aBrz|&pmg!^wLY0ugb6J;b!O7FWy|?hURF8JkhJ+ z?14Gj9(c}Ywt)`i3qQ4+`H%zOFeWVW3W%&ofvhYX$QXRC8HCdaTqJ95)W`-E_yC4} z&~w~GW8-5Tjm*Yk>!JQPJlJEJneuvP1NkwhoscrPvofB$xntj>mPX7>s&cP)CV%=-0wg zyFp&nYh@~?fel6I3$BvrNMp~y1|t*NHzvciZBS`4#8yvrJmE@0>0=y72L{+9hkS^5f{dXh@&^QdEo-+qNZE* zB@bQh1SB8r%=pcFguKL|XG=0_M5^wZT`EGO?`B?0<^X6^%`gX)yGEt18!ESp0wdMrN-TJ?*EdqKwx`J_rr<+$Q6R@9 zE9d#v6L!g{F-{v_ByfDvA8>{*=^!n_`4z{ZL+d-9v4htOYRn zFfH(Cp!{5W2f#B5jtU!v0BvH$r<${I0Yn}t3ENkNG46VQz z!F-TAEou!YL2QWwuJ_yb{=v+P7|^o$bfZ|9zb_bUEf+aQJ-D@5qX9`6$5wCH4{Ut? z5ug1VPJ-q=>d&U3laoT}ZAuiUHRKF^<+0L3#x|xy?2p4H$~ojk+W5m)0!D3PX}r&} zr$)S9zQNB1$fl*-9h;9e&ov&i2M4fDtb61DJDgAB8u;obmwJBcyblCIoQ~~*-iSw` zN6+0+#OZiPCT-juRv;}R#b`nahg*-q9_PIY{U}-MSr8@U>8}OTJ$p26$la_$$j$Q6Zy|njUDsq0S?>ja=NH zi4YD9qv85Sm|*iAXRaY17AI8n6`H~Zuf(S|bTP1{y6bgAZDP)*d$66i;}Pu5(Rwwu zn==^!M{?^=#|b!uQ(*<{ z&)#_Bf=@@i^BwP4p7_Kks_qllUc3D1pT2$h;upTKTy)Vz%kA=MsMGbl<=l$wF8Ku2 zSLLgF$NoZ~xRM+i-!&&fQu>hF=I5dd_lC7e-NZ(6=ah5En^4Rb)XYn^#mx9rO_t){mCQ5kc#~%KnI_3VUl0F~kqB^*RC{dBK2o4=Y^-`{(V$~C4v-z$X0kEUSoA?Z-tgx)8b0%20%`YZaC`FAm+FPT|cmamjB7(3Y&PY~Fx7J*6 z%{`eMshbvh3_6_=m|xQ52=oLtgWoNge7}J>=UXYFoGONZ=pMu2GLl{=!&EMWX~w zN0{hz?`N6q8n|+h$e?OvYd5;_fu5E-fZXCl6c2tBK&SV5nmTdw( zMXE4Y327MFP+`P4XV6PHy}F*j@K>{#@nH*K#%h} zHKV{-90XpBO+Vy0r`NQSIQ95~O%#K__(Jvw>kAcPNWeZ0klNaZxVDy2P3+oPG_h7z zou!eFKdOc0r@iG=KWiWuhWU|k&>v!xefg05ym%BJMaRU7pr8(m-4- zE*Nl)16AgWG)8u4eGP>lHk3KnazTn<)`0b<{DJD>moc0QpU2HV=IU{iKP zWZ`9W!rtrKxkoYP`|i7Mx$wdZm$$v`ZF=+a%PzZYdD4@fw7l^RZ&+@WPf6iTEj~SU zr+nh+!4H1$^3VRSpV6C^pLOP0@(n8dyLxJTvIYK}bIw_=x#pVX7k}{=_0v_j&_zA* z$JUqgRL@vnFlccVP)81*_b1}CZ{!_HSE%_A0QRDSWbOT;LeOp0mJuef$6sq+CB(Fr z!HoU_)mBmUnk;NRa*0-`ghAuT_R^6v9c7rUwYCydv?-1mR;Ms-=-}VPkZYzAdBBv- z=1v*<ht&2CMs5<)q_$0gn zg*jqHy_;+xLTiLcgh$vU+bY{LO4iB3dG2TiA#^w|V9h8`^&nfynYy?KmW7BB54co9 znntu5GFPsRoSe|s^`NxH4re>zL!ONayS`l2jiwz;kHb#7U!XDVt%Kn0@sPa68QGj| zbTK+1BAW=GPcfEO$Mre7s`_|ECwYXtYUYaKrYpNTIUWUA!xEYrS&gNR2#speg(P5= zZSY&YCJ*t2D6sXhFeW(b;u^s>#8h}O*o&tzV&Zt#kN6|w5q8FJbrEOQ`*i?xR6Nd+Cv6y5wMh)}h(VfE6kYC)xXrWjSvjRvR%ob%z{V$2tHR74tqm7|xnXFg6iapN8(R^Z#H?FA zwPY*E0gIaTpW;l95tg##vO2EokLXgfytLcg+e8ARt_F(f<3VQAUs(Q}P>QSScjX8Q64~8Fa@@fk#xL9_sEN?do}eiM7}xhB7s0 z2z8StcnMz;(LEz#p7S`L66+BS#OYi$11~G7I%aJEnvaoHokp=Q=lt|L++d?P<9;;S1FpkBcqfpqm(C4aF(#`sO_tml? zOec#*6tVewj4wnrRP6-y_x>Vhu=2Q;sh#b?ww9v};ZfV;*&K`C3%L+pY$EY%K-H*( z(0BEwk@Pb=+Kw5u4^JS2ptMF?qF{Lr)E&o0wWvUCYzXfO5Md49Z*id8UDQ(pJ>HWn&Nq*4qSmc*Szr!ycA0m$k#M>ETmPci(gO@|7=qMc=64Nw=vC=JJONQn)A8Ew|jF zo-juXDx&g(9=MK$w28z}idV-HuHaZ=uoXUW$(I;b~k`*r|t-k``TNc>)hTR8-(u@-hp-Vm!3i457 z-Y`hdBj>^1(f|NJ07*naRLQc)1Hzw?0to&i4j<| zW?#wNrkO(pRR7dq{h?bkYm(jCC2gM11S`Mk*`9N({mR&#t;7wIc;K3*#~fK>dkwgnuNzI)HbSF**2$de9m$pY|{lPf*IfzV%mJY^@yE$e7(eWNKAWe zHsN)bZ9?uZ9pA`_<*En4HusWp-Wq$u>tJbWz-HJ%J6$KJCcUbcRJ0#eY#kX)luslx zRrEairp}x(>`A72!qZ#QbjL&JuUa-EI4>=G>IgTiIXJvupIGs;fzR7=&OURwX?jB} zwS&BA4Nwx4IZE8&vQYzXh=K{rHZp=Qm}R|=Ese9|SK=&=5cV|39Iaqg;86+FJ!%02 z%f05;uQR9uei9FU@0NQ+ebeI}x4iLQ%r z9G6=fV5G6Rds|>y%4At&rUu>?^OoCs&FB?-;zrFw$4CzIg89@s6j_H#^&Hj&7MtU! z32e0qqX~tTd&{U$G_mIlMTYoxU67(v5|4^S+)?`ZG9Av$*yU9KR`qZqXBozO%s#A3 zL>~IIAdC-)VH59G|302W<~wreWA7zR2t##JbZR5u8Z>-L^x^Mr+!S3dKHZ-`5p|*5Z|c1B&Rg(xz>@GNuod|z?qoL8 zLbu-VB;36r#Uc&P8CVD4l|5t1kz?(e&}3qDE-d8)ul)ISri_@zwBwxnX>11*)Dz3!E{US%s#5PnKFr#iXI)Ns&gdwuzT>%7YO^7Q(86bx8W`P9~pvIbkN>@0G z7fYk#l1p}E&xl3WS-BWgp9zR9g`*(%88+iqQH`OtkPVD` zA*5%&#ePekTlxIjM*feJ3;b(*`(x@Ev6`rpz6Qza$1VZ9_m zDNh7#9GFRn4TZ(X=hIg-I1i|Gi}XCjfgfzy#A;K|hK0hV5+Dk+4B*e&wP7b%5R)|_ zm(S5s5s%)=X{$X!jWC!5@dPL=OepS!0d7?k0D5AT___>Wt$1_ntyy+xgu`kZj0`oM z?K!oZW?9bM=%#g=XV&dectY}1C}gZQ{!`)(n<2fjJ{tXTa7YBmdsEJP{5kB@$5gqm zL=BaTVaC+hDX^E!?1xnp8eTXV*%wb`5VKWv9c^1Y!E?`bK^U%1=L8W{WqChaIONiD zSNgQiM2fZ9w(FFqeF$usA64v&VJA>cm8OxNr!mZX2k~MWwQ6g%t<=7Ow5XJOW{&o0 zOS8JnfM>SWjhnT{xmd7nvKG9MzvcF&o60AnaBr#GZoO4M{dBt6oGuru@M)??%GdsI0qP#PkcF@6;S*HbUr4OS z*wqtzdV0XO7V92_PWA`t085sZc97dQs<>8Taj`dmM5FtTOmR;xT}puo%1s=`T2$=}p+mIxf=_YT8YW${{)7)@Z(9<; zd(_Gr0|xulDYWPU!@5>fT1$|G!4wCT+u4zBWKVtW+c;t_*4XalLgP)~7tIwCu;XbG zad8o_ijMk`Kk8kGBX}%#d9y|Yhqa>e>!=SZXriMQJ;z3UOvAm*T)!>uw{rXS8*#7k zZRN52BhIZ{BYPYOs8v2(tV|U=?Wdes4z(otKTaot-U+8xxD&gK>I1ro9x# zOONU-J!Da!N$){5oTROBI(sv%L$PU!kL*UDVFI>VrjZw5zN0ocIid#IMz)No)wi=u z(eP!N#zP;J?delKVO<-VH6Lxn=0hP3%dYx4OHNx)l-7Q>Lb0t#OKr1txObBe&w*U+ z#W6hj;?37x@~e7Sf83z_kN)V7mVf!nzg&Vm@tDUfkH6}wmV1rLv;ewWbBj^1W(#gQqq}X#{l@pGmsE~twQ3BVtA%yzkRkUS2RAIJ_(^-7mUB0FoF`Fzn)Jq6CfbtlWlL)ySj2-?{2&hbW4dc}EKlOV!-% ze|y6j3$G_qOSX8N6k#K|T?d%ZhYn1T9=AqsOgm`eDxNz19)Vx$J+>BmTs&GqNigw^ za!hN<8twMIcQKG?7)m6>87Vc!r!xw(4qYHh+CWiR4S^f_IyC+>)?*;{xCrB1N$^3C zJ*bnYpfl|RogHGbuid(!#lptToI2)BarZST0d<5$(+)QJ*;YsHmG<=!9Ma7&-!`g# zMuJ{5mmFeuhz+ASiY+;U{@5-^k(>L23qtw-Z+k2pUez3R0S6qYGi$!3#(VK=oQLwQ z+wDXQ>a!NV>PNQgA*|DbqiZd3J4@gqD}#qcQNq4zT=ejLe#k5gyrY~fK>mK=()1x2# z=;bkT5$eVpZdkti#V=mIO}?&og~-l5_go3~e*Hw$XRg0~x%%p>mtXl;zp`9%=_UFJ zE4{~*aOj)2E$canxx^(Hj_asOVhZTzO<&w0Mrnu_b1S2@%4EXbu+FTE`MGBsn!aie zyOr|**F8a#DP@(Y88L@OXeP{m=v@^2loYYXye>~8w39Xh_`x4?wa1l;@`Lr0;z|l0 z-;GlNfQMelog~?dTr|teZr#+i7h`)iu>Ko^JgIR|Yoiodv?c~p`HhfN>?029a{vFa z_ijPgCRcgbJOBLuoOGCxM#s^4bU+A$07*eYAXkC_L!7EmMarp)%E1>Q7l0~M`GyOp zDBBmQpcEHi@D)`YVpqlGs1i!b4LEVdC1F_{1PDvQSf@dQ4ltuZ8qImKp4I(yuU@^n z-+uSEznNczp4q#**Lv2o4&Cp&-~E1j@1GS!?9A6ebP9iH-3^w&EW!eY-}gfA8>kmT zO=iX){OIEf2r8@kF!QSEM>(x*O4LnI;>!5YkSXQb!EI%!ypk5I5BgJ;-x>0Dchk_tl0xf8^q*X zCAt7dKeq4U3CXNQ9xHAQ%vxJt){=78h~7pntSzy_ez6X%y?8j}Bv~_0axpK?r~OHB zjv3opreySn6oNV-x3MR~cPQb2@iJnA8^(3+yu)~Lz%DFiXdBeTik58_V<_B5@D95i zQ*pL9aDHZ1T@1#y(+!Cdau1I^1Poe_6$#cJ{;l2s%}_DzlhK+ST8xV@6kMY| zc_JYq%4suc#JCY4$*mSA)$U^3)Hqm#1RNUsG^@`s zkCW;Y`%vtV=%BF%6G(6A&us?^Lw}wW>x+L~@BaJm*RSWj``z!}{-*q%)N`Nv-0epB z^wSffhwTkAe$}g9wSBXEmG7Ir>6^CqyyrdJSHJqz^czz7H>E81PWl#F#*DG4Ng-;a z#U>iSmzgdH1uno8nq|Ht#>?CJguxJ)VQZdesuwDIW3@T< zovtUzahP*M>$9D~9u|G06!_Y#6c<9JzqCoS4a^G#tb6}t*F1AHmwr=GUWX2&DFvydnt0=W9{RM!H73BKwJ{QGfO%+_qSuZk`qO>**Wi-71RT2wiPTnX z4w+f7^&NVc3t20RD)cxWF2G9#`doCJ+(7+b`6h<2c1eNPLduWeqrQ`U~W?w4WMh*n?;%{;0X*noiYG zE@ZTUr^c74EcM0<^N9;x!ZRG?gsT809dM!xi=b^n=#A-ZM;wyS?bWMSx5wl+p+5eHAKm_^|K&Z~5B$InY}c+`+wQ&h-t9A={`B@B z{sleRBe-dWPf)!`enSd3tkC}6-~GGWTi*Is{VgeAp7z(Bx^%-@tjCF?xHi^HZ`$CP zfi^mJ7=zVSn&Ai+7wHX2@=Kb|fV>O{0LnZ#hv~)L+}PJ+*Q2sVu-!TjVrkuDhR@ls z!3fP}N{e)3(EFjAS}T!g>_U@=g-zzbrxx>3YkSy`V{fn2ILKhFK_pB#UfDV|Ye|m; z)*dmSp%%)NIaF$>$zVj4#EgbHWnKf#Lo)Z8PD1D`2ZAv-oZyx?vtWN4Xy87AEc40TadehKAr=`*kwmR zm9LIg3mcit38~taU|Mo*2>Ap}~;4(sea!@ELalJ}qjSfbvKhmeti5smc5eK6ExGsoRAbb^4ui5QI& zw^OrTtzt6Ma|;4OOEpZh8YHzq=*4xzA^nC6@bQ1jRA_amZR0`7kk6G#m&9i9(=8&3<0DaV7WxX zpx9e=qihtzNk}7T%F)kTMq=-xPHZH|bL3*QM3uhOKvTpys;vtHQd(25LU4GE5YfDq zm<)_*AwGZM447s0`9^%n#&Xd^ayqg}TKKcJkhb=+x#sHvJ*<4NDy>gV9D>z1bz-VN z;Z`oJQQXJ{O5wt1NL{grmfm z$jWqofK?IC@;`4(fTGas1a-6qqw)t=ry4rWbG~Uvy*NP5j-8$$O4a7)<485?c|5Kb zlbXPj(AZo9gc^64z`eyxJf`!pwU-wI?{}6zxl>@4sL>23o;$_uBapf%^&4-33|XwAe+;%$QXy2a&BuN}DLw zCL}JgjLfP>?+rgljvpp}NFHyLn@Z1r{`0rb$?rt{%CG#&_6u^O=~Z{%y?xi)-@d*5 zJHK;#$xB|c{j-1m&$oZ{kN@#@&pr3(SM|Q*JHBK4viwVY;K4ceGG1$H^t1eGW_2{e zr`MFRHffY6AS)srNOW9>j&P=H_cC*gE?|p4%TJ#)v^qZy2|OsxBWSy($>FYB#wWB9 z=g@nzmy?&)f3j@-b5=dsn>3Y@xRLj2@81qYF<6#p-K@UbBS9#pWR0nvAPyf3&YzyH zW@4@TvF9oXPbjMh&dQqr>ABSu4h}}@?8B}VO-i5hO?emTX#vZ_-cvY~ zOZQejK9TIf-37mTl;zwQpZ1fW7=MEwO-kK*0IqwwYo82DM}KR>8{$?9TwRS~9Nx%H z*bZ&!bi9||aUI&+z~%YWpZyIzyjay2to8hXL=6_| zprrX}skRMwo0H|zF=N<`13Y|W7B@|NJuIV>IVbeX`J`vg=zZfF_3MPv%BrhPZ|8Y1 z*L375GErT|M7Bwmj*vFdG1_YwZ|!pqdA~I`q_T(5p}|#y+Arp%#)ep;iFvH-0>Qok@>!v|#90NhlzuT<^GaZnlhqtf;RdkZ;fe1!K1R)XnrbAo2- zxEmc3GXgVgQXa`$&;TXkUXvwy7Kro>vzhcv0eQg}bQu&?9dx=*Fu`V3&Z7b`GCXCN zk1Eb{&uMG#III$DYK(N~V}Q`h0?M*IG9PK#7qCvS$q*x|45H{N*T_LZ-EML+R` zA2r8$_mBVhkGEg_wO`x5=X<_Kzq*GXEq`2oBMMyq#ozwh+Xp}R!R;d-`N;OTe9aGE z-}|<2{Z{?$sVjC*7(d4Q;bF91JqcH-*Q`jUpF+@_Y8C4U%t3Stz*C@G3C3Yse@Q8U(DHd-2+yv2q%U=`L^dxvvNCM>UY;0?T!(4i#E!5GUBp$? zhR$=IC;Z!oAr4Dn^#A`EvJ&ju%<~c!A@^3=UtU{a z3j?lw?gNWBq5xR-(O}<4CIgwxPuK>i6)|EFoILFQMoyX+bT&c7_3;K!0}(#LeT*0j9FVJZl@@gEm*77ndM30^i{GL81)EdSQA1G zd>vRZ8%D>4kmaU;ehQ9sc-^$GokHMavYchi{C8?l@OH3gbA+2%%O8%BFq6)JK%@`{ zi|GWkmj^rwh7Zrf^+9hN@#wplEzpb=$&fHvZuDXM9b<*cQ{GG5Q|wC(3#AOw|4Q84 zklJx|scIJbQk?|kW#RpSC)nmDRA75<5!MJz*UE0zh0UETFX7qMW#qvhI3wJ7lepYYCoqoYz;a|X3U&X4qUVuLQTU&)!3LOQCKs18tMs65K#to=Wntk8f zYCWYcNz>~2hCaQFSIRnX@qFR!*2tRb*xR)LM$<}VX3ZAXvW-KGt-X@B2#9)#msOHF zQZn~6%%TrNE$3{Ge0PfT?t>3LxIOb3&)DviA2EOIvB$PAeBldf_qdGlqviNf^C#ry z6K+i5htFT|yyxlfOW~7McieHu_B{Di)k6L$*>;o572MjQVAq~X{ zb^)}|i7u(rbCe^vnmm=VB^}wp7OmB{wi%#Zc>=`2bool)1=$T+UrFuXAVIo7rN$AT zk1ctz&p`s}amTAsm-O>sd_#(U$8RobG2y^IXdCw>2CFvaSd-?F*)9C*VT_cb6`PS^)t{TT*j;)n%uw{wY^x1jTX%8D?R%p zPRpTVJXzoFsD|3w&_~Ieg3@Q_Wu68&|E2$&0@J{R=oGcFnP3fSI2_fs7@+op`V+(4 zImeZjzuM|CeI1!2d9-&4hZq6+HSzwG%fDVOEK`rB^1ZTrHP zzO+5}&O7zfQ-3L6*Ly(hZj#@f;*Ckxo;M!%VwmYsvr@abfW^G1#bBkTCCem=98`Wml&RXAG``up5^sn%(`E&-qe9VB>cZ4Gc`v{}5ypPE@#EIe%*MNu| z=%+1jRo$`z#J*um9R6&RF`5sN`~5s`>osxVJd(~Oj@xc*qZ;ESi;jN4ZTJ|49>>kG z+=7@_=fc2o(mKv&_IH`bm8X zcQn|ub-6_pDkINs93(V3QDn%=S{OdUjHOsmYK+~GT85iW7)KPBgN1PnlEUPg^{+fe*mB``Jevs3SY=|;;nBA#8 z>Fj{RJR%#%Ikj`xh|bEUTmqcwdtEQFzA)ZL#2~Ck+!AA2u^4f()C5~@M1Tw@j7gn~ z*#yHv6fA>`POc6V{tidRI4D`iePj^DFkS!@q~pgiL~8Z~@n#0+VUH4riYiR{JygOs z>sKlA$aD1h%+|Z5^IXiM|Db$pN1T_Md9*G@9SxZY)&pO=d&V=Lxqb3K{zv^?DCl1O zn%8XK_kG{D{pP>=SNfY$&yi0--G2M++w$DT_jP(E&3a^%vz|vuADwEh1ejdBQsLVGxsH-Uzvy09D2H+QY5Hu;P+D zLDpdiLr$$xu1#oJg+q=EK`g1>@!kfE9OyZQT0q23lto|BXsg*z3FXqw}E9J&@Di)1wyT`M6k!Hpf&umNs^!VM{WLh3K&t9c*&=tsA=%MX~p?4>W=-u)9lA+Luw zZ0~#D`x@dmeB(E6|NFoEm)k2|@e2J{^?vtve>dr6-{^ULHU5TmZK8S9WQvi^$c_tO zGQhb!ycwl7U<=OeT@0-2WHEHT;^=4%m!!5b4Q2Ag9Fli3I0K3Wq^Chq@A*i38HO~* z_O$h?@|eu%O*kn|BXE1NYHWm+tBoO}^}JOr(+D=H`SO!3>`nACKrYWlifRjj9RV`nQ`QSk_|p^cA^z)nmUI&*1J)GD*8On7R1 zqey|mqtPjP=gAfh>s1Iau)aNy)!DJf6+*8#Ja4_Uv*4^VYavi8T;GfxR+x-`#}T!Mpew z_mCg{OD&RdgzYgs%41w8It`DDur8r6QBvjNt}ARjcNn9~LmxNkd!&=>aW4=7;{R}K z%~)k$H^o>WLz9>yG1ay2QN5(!8`VA-?bTz^1aUC$z@$63&alNEu|)|Mz<97)QO^+G zkV3F0#^L$Q3lSjeFN_anHcH>=?%y6HJVw(@#$X3`y`Gf zNloc0jP5{vX|0XBx@zUsJ>~4F;ha6?`~7i?ea@2*5{SOBW8IfY`V1iP4YWPdqs+X3 z%fKiXhHg{grqr9?{O0X{m48|9Tji5a?|kPww{MgiPe1+BKfS%{UGLf+c;EqjJ$QzE z3hFhleeL$b7ra1kVtx3-AKrfcpZt^Ut#5nV_OSe(l)h#NH+qg2qM1T$ZKB$ZjA=L0 zM{?d!W9;y!hv;zK=>@$5m8G$m$m>`}%Q2#A7_*eVHcT{uDmryk(h&msYBy~VZEKWV zH}M2EivgAx7V&_Ua%hd}xxVAFad-SliDzwvlmh9EeaCHJ90G%8Z~UN4S*$um$Wv23 z)wEB%!mu|q^xiu7GL(JEp{3|%h>yITaw1^-1cv5BO8!?lJk$XMT9hF_TT%$x#n925mN{=-hZ)M}o zs;LGeZv%M{Kp=v#-GhKMkqmA`4V-r3nqQ|Xf(X;ZAjlqL&wPoh#}pT3U~@IXGE9R( zp@@RItQ&>sebghIwTW_T^_+F=VGKk|@6zDZ@~F)55NDX0J)-gm1cl?W9PJoiB(squ zZ9}`twTf#4Fng+vqn))z;r?kM?JO0zTZ(-xfj-rhlJyjL@xN}dk3_+bMsgJIqu?Sp@_Zl^Zd{RxEW|d3X|kM0<|W0l9StV^ zVJ;WTgnD0fz&UCRcxQtBDmBN8k-gC0cb*X>WIr{mpfW0hYUo9N4kUg@3UOCm9aScd zptGm%G^ci{7ZbhNG62&%_cG>`4NT_ZydL^{Su(aQ=8dJ+&X3gs`;pD~ODR&Wij%%j-Ta~jSWT{WK z1BNWNzK|2dqlOEhbcv7W=yJ&Tvc!eZ=tZW!hbj`B8;%28vFf~vTrH53J|t}ugg((1ZpkhoTpY==nj*rBN&1PuHs4KZsIXR$xI z!Zeu3N8&i~wVZ@PLN^q#$6<~JeH^2z7oSF6V7|u={mgzbgk6^N`0&w0(PLkqtxeYO zu#YoxEoT@NNCMYmAH61l=U|^$(Se$#bAb}KPlKSNqolaLgd0(X+eEjrXL?L}r7|?; z=7N>_u`7g|CUht)MEWo0p`@IAWuYHJWd#+_GO|u~STr$Zms+E{g>}`{r+TNST_lQ{X z^?5@|a?ynI$y?uaA-_YLEiTCZ8>oTZ5wUyoa>Vr9SZ?~VwenR^v!TkBQ9%vEfZaYS zn_sjJf&I*XrwiNjutkfC;|=-e z=0`fG(Aq-=)6~)2^aMyhIi`VX+nBN7T+EOoG;)!l$VTg12-ARec> z_>uCT`l+AV{@Wks@$-I4@UoOh!@R!pmRk^Vsru^0#s;#W9z(yr5$osoF z$%Nd4i2kXl7D`*<->e6};Osse^xCxaw2l$3HO`<&! zk`hn(XqfJ-;T_O`S)`}O$W!y6M@frJFU;6;&(IAV9 zGHBGhlgO;(XRM8EaENGm06V2=7*Q;S%-%#W;**AO)i+2}5IdnL4lgA=Pm)mX%aLqO z_(I8kKz%xa1TW6`+8w@@_e}Yb^Phdsd$wQtrC-vo^5Lcw^nY>RecSKJC!;?8iBD{A zl}}J1hsPd$RQ|;!_wRM&jR2c-ym935!`jvGQx$zJS&|-KE!Rf6QYB^1WVzDmRw zU;L!MPKn|4-Yp1l4o7b z#J+?HVhZhe1f#eTbhE&rfh@~_dnk?-mvtiwQTsHO_Koa`Hd4!=d0~uVKByOs9t{yR0WY}evOjr1n zF5(<`A8-yLNNKrU7cqN#T~8O5n+7x$QAYvHh{_%-1}>5!uSP@+Z%9?>^*3VhL0%UQ z_MC4dFC5GT2v8f=X-LBhmLVW3c)&<+YhEve9f9LT9M;aE*QS|sg{#HPX5u=lcTi1? zEjFooSubfw?BoE{nvKSVt_%X?Oc%htC^ENe%yESCT)T7ZKde6&Yu6wEi~jne)oCz-O(~(zr>t9GXhpiVAWEM$uwLYf{_^(hXFq#`jh>s}-^5Vj zRK_~1BUPOAw8z0Z9U;dB1kbVMbqPeiHL|@(U_8J;ywGU92$x-keU|&t9Ahf>DxehGAl0&zs;Y{c@)ZZ@Y=e=P6+M+LVe;4875{;~&8KD*xNcpQ z+zO>1m|A-k<{Fbc@i2@qibD-CFhCcInwH$hMKd^M)OiX7{AsE^3r1O1%{rJM26<{? zo!L;A%*0OqH6i7oqUqrQ%?5>Wl2<#~^A@5um;F@Z(EQ;}l48WgI|4(p()1i-%nD{@ z&=Kz$9VdFViKPvW&A2TtAv{FG%yrqLMRXE?%wsYheGPm&ZHXkoX969_=swNK7#h-obnOMO;`fSS2N<-BO% zKIRT1cH~GABt(c?h#MT%R^xJZK^hus@*h2mMQG%)4&H?8RkN|3&ghUcgM$a zjsu?Y(l1B23ycn`@!-Bu*V zlF9Z!UTPbKB69uRsgb@5ia_=mAi3*JoDRP)AQSqisa~G+#S(r5Wb3SUS=io4QcXkI zOB%I)gh-_xZA#%{Q!hj^81QF-xF}E_At~8B@v91^>1`c@~ zC&zT(Q>cd&YxotSbX-nr(374)!s6xlB1SBBZde1hWJ!BU*ZMUpsfhxs&osi$PyelX zYf+%A$4#p{IztrNYKS^r%dhoTxLR>PbG~{&Is_v5;kd+?#Z;tWIHQ-L&ttDPofoX*34XYuo^OS#%^=NahtiR= zD`O{cOuKmu2%MO)ICeL6Myh4x2I^vhRe;K`Va85|)&p(UVjJ_cn#l}t+W;oesyb|t zOkIsCUo@f*R;0&FZ%Dz66us$RQOThKUv3S!Y){1+oNKLl(6L8_rWa(BH>*q4y{P@j z$&rFgVu)zCt|Ql-T={dYh5qucj? z|Mzb%kbhwh?cRIu-QN4&_iq367k_d4=5P6y?a{{`YcJTCL$v-2@puULhnHjC)kI{= zYZ4JQvWPtcn(ft01Tcwsr1BKb&1z1#_)c#aV?y1_npV1*fn#okyYe;#GLz~LuSv}@ zUR13omO|BdqM8cBo`zJYh0&(B95jcbjA^21PLh3_li~FH)~djh^HWOo1YXmuy|Fcj zbZUeE`bpDTI*>ID3QH~QyGh2GsjPp9)?>&7CwGY51+&DpXJdI;r%If5eVyA8bm_k&g{S)1^J|&R zIEQeewGxFf+cb^4m0`%|4Hp7lfOyv7oX6P^Fi_}v;oMAnmR{OEHc82bi1lr~gxia?_;PU>|F2YKFkv%w~b_Cnl!*HjT4ZciH z@Oab@T=>PKTgVx^^zMf?N|e|A0C_Yyo-yLfxL~-fSVw6u`NPJt7l9)($`#9(c}rDwb<`s2ti9P*a25)Y~7X>?V2MeboPJm~+kZdBv z>k{}(ItE>HT=MGHsSv4yGAo0~=c&0hc7_-kG&-5vtlCKlEf3loSo)gd$qLfjnmHY2 z+X00!;E;x#qldM~v#O0Sseno?vZv1Urd}#t4=}qieg?KccsC}3GEA4+hOcN+=A`!* z?*`TkI~=J=M0A!z>{WoMJW_}bKJ)?LVr!^qKP!+1FeWcC7_K54o1Lgh(eH$$+)bWS zZ(JCFFisEbhqNcA#zW=0|CU1U1tJ9bn&r{97c=X&5*xXuHK^qphPnVzTgEmc(tU-m zpQ1K{@`SlHd$af8ZJ2w5oFo$BVeD>3C5nV@xF-`HOA|;{;W(Zh%Rs8$7O$`Tiq9zL zvUhVtA*M!~&RvtWOwg!aZpDx`_QhyZ7@ys6sb*qjOXf)yIJ(%t$4BOi>K?34XPB;P z+nRt2Yt68oEA<%p%b^rI&Ug1!0iG~m{m|=vVAOkD%!>UUKI^T&qb9)99eZ+ME{!Yk z^xlvfT@TiBWyz#%dm+BGgS}*=DKC`gF+TMbip{t(}N?+tFY&Uq9RI@J```cm?bm+o z*EZmvBmctQ5B}f}>P@SwH{KZU7h%xq8K2|8)--u{mSf3&U}BA7jB0AAg|6OMce~vy z6LD42Uo}}>fQOn+4D^&?z0_-O%@q1PfR;HIU3Tc_5Lez&RMl$4>ywP@sm?}DV!4#G z#y6;Mv4lRwT5X`L@hj8^XVlD3ao#QoB_IT~7t0bvw^QqrPSB@y*6?ONUHlCn!VE%H zI_oOAOOni|hqvKw;6k8&hIN2pG7j7;73`Z>8wc5Z-%x)?sSn@=Z)FT=b5pq6s1H-WCeroeD+B)2W?A2Y?9RIQTT0uUlyU8@O zR35dHTJZXonuv=!#-Mv;C+>ndSDlJ;GXS@)pU4no7pTGJVclB`;9@RV=CPM|u{p`4 zSR>BqSN4F!0v}1Euz#HoE+g;D;M6kX$}8A3m*NkkD{T^a@0++uTMLb?G^<~rgbFSgJ_fCe~clkQK zPAf4vBh*N?8v_lOVo5n&lN(82e&B)awQ?is)vtc_cB9Nc@{x~hKk@E&E8Bl9pMZMq zbDyhU+r#fh{SQC+lPbUI=9{;>?z(Gxsr=s5TjXng4?g(dc2&OS_XK>iF%GS*kyC$S zUzp0^M52?-lGC!MFx89uy0(=TvK%C9QI&OMU=*Tcwv?1#v}fFKY2Dhf`jD_019VZ- z)U!f)nQH(pWh%N{7oCqhh_VYT6G(6!XAUT_S$^6`--xSUT%gsP37IIHl|pcC)U0Px z83nQI5wGrnloG|ZN4?SZ*1h$aY|^vy&jqv)j5}D4&ExD`V$<;O#0T^$OhC|<`WkuC z=I7NU8>2cw?r5X)`L6#;H676pL7E#Tlf@~Ra|J=?7wPR@*HjGF1@PfJZsy-8+VGT(_p#*L0 z9CI_BO?d3iFjlvK_s5wv=QzSd+4!pZ{pI!KFTIp5@>TR@;A`AQgS7o0Cd(}`|{*92#6&O7cRsPsOEs@WM$I3r6_n_}4yI?DpF zn#@&n7}V9W$jP{@?gZmh#UbULAS=?19R1W#vv&e~u79IBc}*DCd3wYYHmg7xn;b)n zRw(wGqO6%7KDwR>qI4}Nw?PDMNm|}0g{r2rS zVtcQAstRA*E9VDII=%kuF0@W1PB&eO96YeA4Kv(M%uS}Po{D2VE=toIUc+XF$Jlnz z;4KO4U=ONsk(6$-^iHfqkK_Z#W94;$7t%7&3w+)@fV3`<&PqlNQ#DU|C|kJB)A7}p z5Aek2jj|#T!%@u(v-MW@%iKnBc}0M1ayF*ZrO35OTw;`uvud6J6o3q^!zD4FS92hK zw`Yx~Ns?s*0*T8fn;>2`?k~=@kIfp$>V&B%-uU(QjHt$Q#vtGf4j2rb`5^2Zm zi#<5LL4JWm--HQ&bx}t%I{)U^W0ltn{oJ`4rQ~3qWqmG0%y(uqiUT%w&yF}syk%hO z%VXH+Do-dB<2a&puB+Cw5#x@Tddn4jI*i(wJ-=!v#~VF&`=zB#>qhXXhaYFxLp{Jn z42m2tkkH!lJ9JC0)SkbE=&Y-UW9{@UM^r1vP;zK3>nueX#cHm_2;YeZFx1S)K=Y9^ksuH124({-sZe;7I_0>6YJvy!YIZ@c1g84A=Hyhnp_%&q_M}3#dd#5 z$+i|xy80JVqHr;P&C) z{_X8$FMHW`+ikaP_uYTL{^H9E)T3uFVKph41|MT z#@0Y2T($G)XkO#XKEzxZW;CO48V8QR=g_God&NNEl!g~I(mG`n(cZ$lGZcls)~wNH zW+(H6bZlT6zsIRwJyoO$HpP(kNd=gZ!5V2A(wJY1$N+1S!o*Q%r7aWUPPK34YBDxc zaN;i|bp&I12Q&i4lX|1L=n%oWrP!r3`J3UcnFVmqa_4gYTFmY^$340kWqk~}m^=DO zTZDBCU45{x@O3;qa9r&8?FcCt?N92%KKWxV3TYe7Xxx{dnzmPJ z&)-6HmI@ass!WSkr*@P);Muf1rT3NfOY7!%d_CY|7;p8z=5LKlx04U6x~ij^Z2dar ziXFmm|5ehof1`b@^GHiAu529)-0`b305D22{x-jYsci7`ANaQ?s=4%*O_QDpW3 zLoZfSW3LD|kIo?lvJ(MJ1Pi=Pn)Mq2LD~N?Q38Anp~Krzq^z;a~$xM-c;IxxPT5%g|jJUGdav= z4N|-!F_a~8n-j*s6s2Wx<80@oX&UZN<2*E45hAd}*LfgiS|wLX$GyIr0{fbht}@# zB(wE_&x8X5n`aZbj~`G6QzpT+H0ik)$A8xgpYe6 z(wNRb$o)8W7HQxZ5!3**ZkX!bJX^(zDNHJ|m~o9;RAJC_Se>QO2n%hLr^lyl*vA{= zymvph)jbWQq)z4O>`>s@1$$?(FNkA}rIu|UVbOKGYj+7b7Vo>x3$m&65i`RO z4$sLII#>`c#o+c?XVVE59G@A2V+>)mO(cg7z6xea>|0*UoTda&<#m*;JAq^E^jTo) zuM(O28?T+IQafo*uY~H{m#LWPp;rWMkZIA48g;dzBczdM-YS8BOq8aVJS$~B{nsIB zWBb-gv9*w3Oe=ii37>R&=}TX_{f2z<>D#~k+qb*#zI*%cfAmN7$IkJUyvO9G6>dcR zzyIdnZ2#jw_y^lN<;Txo{_>aWC#pX1fe+{nE%4Z;FUnYFY4lYG30dT6y7bKaEZDwL zJ$8IpmWz%j+3>s{xqwa!BlZ@T=}^b^=0HR;mn9EveB|Y!2<@mbtd;@jB(ZYkRe9B8 zM1L4FT^$!ep3zxV))7lpC3Pe^#sL_c9aFZ~2K#c(Qxj~v9kv@{qa?t7+0GzQf3la(;a51~T{(+$?zn30uB}pKc2jzbVzDg5p~rC( zwFrL>to1c;Z6SGVVl=~~>;%2NKt{1!u&oL4K!gCSt9ZPCQ5L~5Hp`mE zRw8cPbUzMnU_-T;32p|>W>MWO3)wv`!W{M2|GA3Z+TN~vs~OMKW|03toXDn1=Wk&@ zIE&#lxjpcey>J1B^rt9J^Khhor$p6W!JNdfZ?u#8MRUBUeVo8P>rPrR?bngC%`eSb z*(E0vIWsad%z^ZhKEerRqH1}Tfvwq*+0aFPDfD_jH@+q+gOXwMZl+b)*&5#-%IfXd zcrq^t`$r?~z%FWfNR zP+8o4U_3tz^U0@8KyX2UpHmP|eF9Ai`r2hngA`J?z+IysNPXXMufU250J zTQ*gBEwCINU7ury#~wpXyE6Rr#?lj#;t-goV@h}9`n!={e>HI z(64LBJ!%fQUf>S*bAtYiqhC<)0XH2b*J>IUQ*E<0mGKYjTMW6J_Sbb!MAPUa!~bVenrj@Wno<0G`zvi)!27F-1^wOT@ zb0)~tZ6pWCEmXKbXSr(RCA(zdrj|y>HRw)Ny$FfLDJNxt*#S{H8bMeakH5SP^r+QX zYz!5yBMr&PFtzg5m({d}Z8WWpv9(gn{EB3RSu5q$g{rGHuxjgVoV7VX;qu5eVh+`l zA(5fxq2@%kdd_-(-eWqWVt+K}OcxgT;@X8kapK~NVBpmM!0zx6>6#2HoDib+u2j)H zjjEV(0<_6pZBxKeR1LKn%hT9}*3H`VzO44C8V3uq>^i*yhqcigKeiZx(y5gNj*2>B zrILMMABp%^ghp5SvG;7N8Y^8G3ypF~e=unF~d3N!0*O@K=InlJ1U=cjmoH5$GDDynH{_{<9vi^HWXXWbvbC_8g z`iZdAv2QU!0G`=9+FA2BGJ4Owa(dzxliakJFxnsy=rZ~ z;G-k*fp&mEaFU~)xT)Y?#FQV zj=z2+OI@GXqHUv>BPXP^K4_CNp3&nVwbSFdj0{4L+2zaxbkPxvI% zKl+FNaQnl^4F%HX5C(3{>E{K(WqNC z73H{$X~{$N<_Q?YIBwK2pcaW`LmOzP%*isHQ<2@(=xqYvD)d~03(813%JrK0< zn9fQ3C?eMefV=|J8$lLtNx6E^6T==jJ2rORP?;S+3Mc4@ExiHtTc+f@wCtJpk@-2J;z=?*nEF5{QoSm;n%+sQ@ zUXG_MhVkczqdI#ky#92up3F(w81rgXj3?Y(M{iK6%4h)stk2s=8exhLH}GM1A$WkZ zZ>I}&ZVbd*=dc0vlcRWLIKdC>4&~m5dgz8!Z+>P;_r__BAN9rtJE`s~E>4VVg}PvN zd|Ymh!oK6b#CdRVXkAPUhwKiygjZIF~?yMdvtsmj!0ROfX*JWU}yJN?; zi;n>(_+BxI@{I#%rQ~KWS`Pg=h4Pr7mGYQvrDhiH4WlnnSXqiKN#bZ)^kC)_ld~t- zqDC)xQBQAvC~47@vTwD=XIRcBq()E5&7~K<;05}?4XA5!Lkj()k3Om|fLCSyyyriE zdzt)()Z=m!3t!#4!o9$LR_m@7$74nDlB-IFI@FdfJX%@R9vZ<>ZVewMyjuuJqol>4 z59>n`Az~e2Zv8}bG>ddjhN`4DsWm5kA#Y+=hiwex$-Xjz(x#7ft+ZYiLT+0-ug8GJ zU@SOWBcn!$DZ7-ZQHh-STWK4c)nMGl5MvvRKzLKTRyo-)y?=U8fK(K5waU}Jo1on~!rup?`PKA((!!PwUId_H2P{n~g$+DkE; zmU>z?%a&@Z&$6e|e^<00u#d&zO|S|F_pI5dhB%>6o;lUf+$-#wd)>->loQVrmZRi{ z*n{|s-WcV>+(^>UW7qT00(N{;!6*o86y(#Z6R5=QY@%8gY$nrCTs$2{v5wrGeoRYmw`gI|5>YfHFM|01apRau z`>bP&jlGXWGf$?zozSkCQ(fxRr$lF?)PPrA8PKBbc^oBa%+^UEU_d)Jpy;jjLuu_v zS0!d7{&>t7>2NsZ%2v_Z4haW}QBKi~s6+va`k$pm%zfN~)#CRWYYRsFztsFeKQmgz zF8J0Mt*^kQ!wBAHu4@+9H5l~~fGm@!yY;suHcmU1dPK|?lHBj3=)ZMqXO6>7_x-d6 zc2>MtVV6V_q%E)yWIh9$Di*4it(|o*O4ZVhoSoB_>FORX25F$|#zm=_!!^^xzQlp? z(QvIyB7fjh`3=|6Z%8p2Ts%cVQ~z}I*HJv!WYhf+)DJfJ>dVpwU9InKAciQ2$!M?h z;gLiyn95$AB$RY>X3-D$x;EWC9l8^A<;Xq^Z5gU6iXpKAry&-D&KnT&hyWrV6@w~Y zPs%MPj_p#XnegQOw%sjkcM7U_o!RMQ_?Q_PGw^edB&}tCl zw^^xri9^ROo>>j)IqEeUtO=BPtr#JF>TgDgnx%+%DC7E)Bgx4W&1gC3HL!ush)>Pm zP;|rMx=luL%yWDUIXbsqNz16klP#{6OP?G`p3*GVHd0(Nk9SoA4Pt0T4qc{kq^&d^ zpFtrD%if^nOB*)XC~MxkkT|4NfHk0xjKIDZyC|x-R!xZzL&pa-Qn%H#2t zZ0Iyru!cn|Me+1S_Y@Bho2G_d23@SX@x+-FDaiE(lt>n8m>_dt;f`VxQ_W~jp_Wsg z%)MHV8CSa#+n~ei3V~Fc_}tU7V3yV|$!F0B5(~Z5w3tiCw6^=aijb#Sgf;i%I;xS! zL_y+*#`oGT4=8-SX2H{;x1rqk3%Gc_d=M^IJ6-XS7O<>~HP?`xfKwYqazl+zw9eyv zs=kams!m|m#zs;Ybig$pBQhQd(8Vq|*^EltAGL;XWYmUTW>LKiTfvP6);_Xh%CP?{ z^9d;=gJf-Tke#jJ%I4rg&U}Zl?)bP!ZqY_);@k1vV2@7DShu6DFB>1O<7GQt<(Inm zZ)R{Y%2Q+}nk3Pys-%v znCWZi#~$BWmi{Hn+xD)+hOt^cW5_sq+YAc#q#-av`m!%*My*4nLZ4ozbH<6D;}Cd) zkj|G(gX3e#E(ZCXt#hu8yaDTu@t7t_#ZGH8#LN@rI+cYOF1|RJQxyt?qP!}>Y`V$- zbO`T?3^@CRZ^^{~HfX@k(-?5T*w!p``KDj-i&k63M zpOXX?X$BxAB#4o1h^Jo|c|)!xF&&^NWFYK2H7e*u zAnNWzDjaUGM;YbrZ$?EJ=O*projg}~v{;sBCDFYk5$p;^Vb*!dvOjw{jGKC2R*iIg z9jsnGI)R%ehzcW3in%uk!UZm$TZzLDz~xG=i$hX zY0d0uM=X2D@i=@#Ds3XtTt7XMxy;zgk30_+_WG&Bbr{L)D4K+Ond>=md%7wIyc9P; zrgt6}s3QlNO&P4mjO4%-M`hrx<2ldD$|1Hg?-?k`Jx>lXV=JYp zNX@XpjN}dIY!i5ETeBy2gXxp+8C(7+^IbQd;(~Kr_{?6=hw+%?h8Pc1m&nVUTP&^Q8|pgS_{rP77kjnrv>OKi}^BAK;1GL z*Yxv`BJ^Dt2|mNZ4DuUPgb(9cR|2j(h8>!$|k!oI(xA!@gz7JYE>gNA?!#c9>P^ z7K}KiHibbfO|F`|o*)T`n6r)tA)%vw5tm>lm=T}IJ*AH_u{bW7THI27;KTeghacW!O1@ zCJ>su+8vUZMiF)E2I_{3_C2eG*>U0wVpQrRZ~cxffYvMSm@WkuJgc1qb(U+3Dx@aft6ojWhNDqd;805dW+g#&^US$y&O7 zM2kN<3;0dUm953;EW%~k=wyO7>S2qx6d2%hC{0AlTO}CPS?KYC!XPfsC;@~qM8Yut z2sq$0zU`YUBd)`kR`uy3p#?D0Dy^gX#=6pQe`@LMSJZ%JtueAf0-AmpV z=Q9i$XP6ZpV%SG~ZAL@}{Vs49;Hnq+7>ZaC1ITqoPURu$X%qpCVSGx4r-yL5Wt5n* zO({`H?D+a$s&1M`oRke|g%V%K(ywHV77E7pK~mF~^&Xrj3{;21ctl&X3j#_dNNGD# z+BtDEt$u~5P8!U3A~uWpMaOl-n{Yv%4h*;6wGSWpcZG4(3FFB96kpGCb{?_|0EOWJ z9d1PNW>n9YB~hXt>{XOHEyw(QNnTOQb~%|Sg1nRjpvjkAt!G4=q;b(gZfeS4DysQW1qEZN}AVu7)*@T~pLNnvRZD&OGA6ZkpIuzwNzUh8ZrU{3-+r@ZYIHGr~SxcTH??8yQ- z^dSbkXt@u|ob7LztXm>U&srk#s;HS*XggNJoYBA+n3!{GTxY~oNk38y@)A{;b2g!` zih+e~GUvV+#0)fftmX39xCBp)B{OKkQkehPfM?SDeAm43Wz$O_}E%0cJ7|areURs-kITv0(|Ss#Sz1353UI)t)}$9z2ENh^^KSdFun-qKXEI@6{>?zFLz+ z*ZK~;nmte}6XJXxEwyN!pwiV*sYw<25qKj17N<3^?t&9|$FWl16^sNDtwDcovjM`W zW}vk)^Qy6<9l(w{Tv$twv2yGY5f>V_!mfVpDnxsvMI<`EzQim>f>AJz zFQHd%JY}b5*m@f(63oWm8s^tkTLd%Cw9UF2b$Ma7oK|n;d2Az17xa*r7RFjJ)*eox0sy=6aV z*1hI(B`5hcYmeykxWFe5PN-{?U5QC3b&Y4sRlpGwVuO4}5ZjHU+;by+Cr5lHhC`7c z_>{mTg|+~?7UHs%c2Vuu)tHdeh(dmbYH@a)a(5MQ(}WL&l?v(|XDjQZd3jgveALx( z$FBytg3%N@=RsXt45=Acv^KR+7`67TZeMNpZf8pYgW`PDhoN|(%)Q7}Wwy33ZEDkT z1@vLOfgu9x#Pk-D2);8I0IL{ly2Dz*;pn(e(9Hh~6gql}gcqyEr387sgtQxnJE5T% zyEdm(Ebud;Ipp8)?%VAnMloGTe!@Y%c3|3hp4ePGgx+gV$=q_fXHtnq%6jCfA+Ms98+81p3~n?w7o2_R$Q)_F{!X4T?q1^xIU~ku@)I zppx~!0OCYowhyOXoK}x@v}oGEm}eurl!^7k{F5WAXbhofb0 z!|&-CuRU1~lkCk~$pzL|_x31>)(dCMy|F5>bI=w*BUE2x8TWd8H{_#pn6NrdEOUNY zEe=Yli=-bQJ~_}^MKh(o5%&1tD_1QDUM3ufLe%!_d1_x0OKfd*lg!t`d*Qkzbhfb* z8N(*RVFkFdFwylidH5Q~9I#|lPn^WPPr##e?I$1~l(*;Hg;H~Cxl>LwLf@`JwX>Lh ztUTuHmpx)8alr!0JezRa*c!%yZwwlUop3GLL$_v07RJn;@`YYZkCp?8aSi z`PYy^1>!o!(gDT!#O4M4X^P-@E;-Okjn~wr1Q^MRG9H{YMmN ztRK|_WSKDHJ$BLy0*FX6EU6{{(wSN=pw(&>M;GkvCmTkx2ve{unD+cDMvbP9O4(_e zdb>^*Y*2JzMD0*G@WQ3d@);DU3(o{&Ou}Kq6C#ojzS?x!nQ9kep17#0l2{cjjeJN; zMm@;7#~5kFzcY~>;(6}^xp-lXRL};TX5M?Y%+RtgAO@5a)-0RU4MIWN(-hLkToZ@V z0%g*~0DW#vY7|OeYXhR{38Tc7WsM(05Do#}HyFhP${JVbpv_ZUMc!uoWR3iIu2D_N zfqn%eAZs!m@A8?Pb*-jsGiA;ev1xqiyviD&uMeJc!AC^Tjhd$adR;839%j6;Z7Zc` z_N}&`jkD;nmm$#|kxQSJKq8lcuD`CwqE{ta#ExL#pl@KJ;&7>k966bhe$T$xX)rQ7 zF|kz4!nQIfb&tT4Fw$B@My)L3kIIok?;S>$5-VE-$3oLEHKI=6fD<-~y@!FR5_h?Y zD&2^x7`?mZ5`&#>-Z!ktPU)mHgNBD)9hgA4M@9FlU=L(SZl5 za*t%~!>O~jmnMaVikndRMig<^@mKZ`BFciKkG0dRj`_G$^iBe($PVPR@VbqE8qM`+ zb+LNYJs9ycGQ6-z9UIwVL6S{t+0GV;c3}}~B%2Ve!g}<*V`mR1c06!;(NKH)UJ|-SY-n=g>?}l= zUSRq+KglQ`Z=6i}j=T3Zv95lU$CKsy;@kq&sClyy?qs=fj#!SJ>x^+8>I;R8@nUVX zCx>^MAv{kqF=`HHu@bWyi|#+}(N!ZlvHhy;8F6jZ+F5mzf=tiAV6@Y4k%OA3QL>~( znvq9(Vg~o-l7-AoOp65{ZpLRasAXvCo5Qj*)9FM&{{Imoml0 zaJ?~5qntU5P@}vpPwNYslqp6i0h+C=3Ib;p6DZY4iSh`Tc|+`oVE1Odp+PPh2V^H4 z->}ua4bOuR{l7v>+yI`VVAdflU|m?(&ejR$ z@jEc4GlP5p=(-xynTdf7hnDYDF0IMX!@9!80;`pHybZl2TRhjZPuXlzODr>N?J*ho z)9rxTFSIb0fK=&rDFc8L?bcoJJ|-W|h{NKP!};DjC#8~kBUi+gx~^c9Ht=OdyF3=` z;>2`E?av8>vyOfpMwBfMEMRb}6y`!tU`BH`N!UJvKICd);~BH8h&KKtH%Fia*70N% z@e%Gbrks6L0c+DoPfO{kl%7MQ9S%?a%HELiI#Af6T?gSjJs|`aVM}!h?B)q9vCb(X z?cq2gl5@!hhZL_s&*kO_&)$hJtY45vh|3oZ^0u2|Aj~63jif+IE&BGD0&PT$GLxRx{02fPAsD7o|g+!8#4Z4Gm)A zKA6QvOf?SB+y~Avk?bpn8}&{q!0XJM!|>vwG8`H;vC@Hg0})+N9CF~mbdmgWRzWx& zGA8w1ClwTo2(zl59a>5w3u~Rmqx{JdS@beUgsJSC7(r?46LAh=b>hMwShSqK1zFByt;=HyE} zE|k04IKQ~TuQ&Nu($N4lI)=K~w@xwh4-mDeMe3&nCXo$-vtm2m4U6Y;v&Ll!M25Yn zl{R{C9`fOWP)^6^Ak!)ByFE3vik0MwwXt+$gV(3@8da;KwUnnD@co+HN_{B^diYp5 z?nbe63k14!AO_y7D2UF9eBF_4%@|>)ePdZ0y(m0~#WMB1--)s|7$Z!rn~uCT&q+Q| zCoziUk{;q6PJ>wWWx)dnj^3kEzDXLfSv^o4CfCE`Dq|XHJ-V87E1x}No2Ubael2e& zF|~~_T?T{w#$(Y0k#jYY;>CN4>)|c?IrjBvZ!>c5t1Jo>JVrZE@5@W-8OCd_mpNZ- zu9tY8syKG?wkOA@Dx}cQ^$oYw=jo2;po8PXA$@8FGGJ)o@ZRFss9B(Q~O%5 z1*QtV@MyHqi5RiW5dv7us|$5%CtfG|RHL?1OFwKLCDYP$VL}l33xP%$(VqH(X=rsA zaT7xyOEKpfpHvogKuh+F!t}FX4Qx6Dz2kvsbP+)=m?VrdCcyT*a8u|Go>qWw7-TSF8|BwnjhrUXT-y+xf3o8opT@NfaBJe{7CRj4n##Vw*DS;JZG8@Tb`;!u zkq?{0jD{Q|%v$~_&k@&%gZMc9;LWcFnf9i59EIG;>8Dc!f+!Z<5Wb)(jDVqv5M%nU z$~0^jy3eI^<$eRm*E88WQsXlD6g~H%63El!8cxlDr;X*a<2^mF%43Zd$4JShwd>1* z10RmhuZ`U&4w}fsf4D#BO7q-_0oV@56-Cb$MnGk%3wYe#r~p5*e2me`65iH;4CzR; zu_1-H7M@Y(11$O3Gb$u!|D%4X2Z_A_RY{l3b72Lmk#86J${swTY=>ij;UzZ2b3Mj& z&XljWny=<|sbAaMJK?Ve>2cu2$>@Z}y-3q@?aO5z#676XG6#d->7RUpZ_^fPHHpi* zVg1q*of7_b;{p1oyK?c`}t*|WPnjSx|WD<9Go zbQxrrpNG~b2!qg)E9~0KYy9*^dYeJXh8tS!oRU{8tWdz~uo%)6}H$7pe>@Tsa`bas0UPtTlqdpGDbC0o2^R zCP7lYF@`?12)S}vtG;@s!tRLzXC6YfxDQvwK&u1fdP-9(vEBbvr}(0al5q0qeTVze z2S+Z*9iN9{?tLU98+WZmWIvSIIEJ9hQ7~fkwgengKl7fJy-%XbGg||phsxYbs?Lx4 zwP+E0TzmFlyG)MQfAv^LHLq$T+NPEWHnNEJY~|}l(eWG6!ngO|kpWUcN>ir=Z7~pf zcN$U@S7B)V7;zoazL1we#Y7|8MLNj#^sAVNKd9B*Ut~~;87ebx>n^jo`9iKju*VVB zgAtinGf}U}81=L0ZyHn^a6P_iEZC7g4vzy1FfAJdox~EmamCh=gN&v$U_ZhQ;G}#SV}Ej7;klGNQ*!G5QutRAE0_ZjoOwM;2(y7XwxUQI z*oWbOL`e*2em*UBlpVrI?h1O1Sv0SQXy?CBwaa7;vPH{Zy}%2;a?B*RLuI%_WmQ@BZ1 zF_yX+OPv%|pBlAgU=0-@@mXDCgo%lpIxIJsgPCDSisyG7ApXo~H*Rv?{03JQYxlkkz0dH^To+r%K69vvZ#QNyRDT7{4 zNp*l)DVh#s-(jAMO@pvkTiDUIL5U9#J@I&w5>s6_XhgyPl3}CnCmOVfHCUq_@Fzq9 zGw#$6!Z(!NaO$H&Uy=Ypvv>L&Jh>a zYNUsJ#zA}Zdks8olN~8`tu4J(bR8w@-o~&Z3~xa7LW~M!VQGh+VOg2@TKRfjJ?@OL zD_4Z^X=t5n4vfk4;F&gSuR!m`S%WUBhlLSiWq!QJ;qjO&Z|<#r!jC@m1ras~DG9iP0G*do^noyRjaH zSsek6yF`4bzqwhjrP03cuag^6I|sI_z<%1!;IF5(0@qXVjxBr5;p=#`RDQf6#bc$7 zPF9ims*HXagV^10?dtZ#!;k0%(3NY~5(4_Agh+Tdh6HQb&> zl&T-Cr^lOl$J@j$3nZL+L6&Vgyy5agF7Jv>gi*hd!aFi^`ZS{9buuu_ZOKhj8|%Sb zi2_KDBodDX^TLOLZ@yF#g?V7&K>K|LG$#kTAx~mIVS;sLl-K2Nk3mkiik0LxcxQM;hPh+4{)+&yemD%-)!r%`q`D>BN#$uu0Y2er5 zS{y^OG8sou2hnMFjuRL5S2Pe+hY?v*354aphSdNNPg>I`h7^d;ZIGBH(3&B_K`TXA z!3;PeG3X-7;;&buhPI9!g$OjA;;%z^KtYy)@n2+iu%J)tWR3c<&jkp#+^GO=PlP24 z>e72e>f$v&s-AnqdGB!5qKsGz^xxu+-2^fa-(QLhcHF~;ldEH|WFN!PuvB2RF@ z5LaMV;TQ;bmb2No46+F-mJsbUT(i zYA}}<+yU19#nr|Wj|U_%cqoNWWcj3AWM6yk9ovmJUE3c1@|U-(SDsaFM%XIY0wRJ& z*LaaN1NY6>r-dqw!4v&q}9?S`v2rZ?rv z(8d8#+1sj5Pm#>1>#*4i^QxeR1tE1VA-0Py0U&A z6Y^L`HX$?iJVsTA3p@ZX!ZL5amy;rAl8@!9x7@7f!^hvOV^t`}Bs%RT=AN9iNnE{hlnyb_fN5y4n9gJ#9#Ll=9TDRieiJ0YoFi{DKc~ z9%)SN$*(=U-E{l2adDgkfdda z&dCPBCo$ew;zZN8B9%JeP23{_dF-J_wre-vwBfTMPdp-@m@04R$ktyN^vnk(IsQQ! zLo&siHEe(*c>{_kCz}ouc=F*#w_ERg?soOo+qMTj`I+seSHF0BQf_$I7y4xC2z(%% zW8rWU@wQvGNACTS+~j&-yY2aR>J2H}NU^+ehItL0yAgIpzE8D}Sn*RZJjPg)qF5Zj z9wDJG2LeuoaxBQry@!AA6WepX`5U*#A9{Fu@Xx-mU3uoM0d?v!)mqk6L=pw1!~*Jfj;v_(+b_P$ObPq!8=2WBl#!~&3sXaG?z1H*jY01ga9 zgikTyOLe!u>J^Ik(nmhJ-6iuUFP+wCuZ>2~Gn)$P7d{Kt3E-&pd&amh86oKv@O6o;~BX?a@E}-1gPae?eZ)o~L^Pf6T#6eB|#RJ&Tw0KK*Lr zJkXvCJjZxWt~Cyz?IZIxAyPl~Su`w05yS)B+`Un5$bRXb&ulOJPrhx#^}z#w@~Q3W zi=WdT?}2%kR}>=FCb$umt~-$+j8en#)3k1yj<5z3O!ht%RW?gtTSTZ~(`uZJm=nc& z8!DxTs^c_zRj2(%7By)hzCv9pTo>+J%T=j%>exAUg6aMe>{PFbPHVv&7;m(#pi5aW z!-V!&XVZ=Gs zMd*%MKwLl8iFWbTmS?yg=KhL!CnhGi13Ou*ryh;zvOS#~;&p4dbJ}j>-UD-A>>boC z>(Xq`^^k-y3E(6SV?Xq9R>fYF1AUGYZw&DDB)OHbedW(SzuofeXK&AX%bT`GKJyv< zdsIHj^yUBO zgWJ{HpDh=L`S(pKWgRUX3%G#4A~y~n`}{rISHAe?+by@>zTNRAS+hTvH{$Y1tiv~% z;r&AUcDNuZuN`$wUaMB82keT`BoC#lPsJo1>1k(Nk@|ggdvJT<8~?`k2-fU(|7g4V zto*4#V{yt5$J({+_U%jm{^Q%TUigCTS+D!X{06+flt&j$cF)4^k+N_uoc1E zZr;1gyconD>~=0tp-8M&;&^ph^~}SgaFaoA#ERn1*S&gsNItdk=fCrZ+pRBuW&B1t z6SQ?seyXy+QkY16}AY?ENNdcf81oir#rFhv1Zt5pZaJ2+xE=2yjhP2 zd=f2PX}cgu;KXGrrNYgAe1Zp`k-PuX_iWF2-ksaa{`2qOzVh3@qi@b}?rhs0X^X}T zwd8-j_UliwQ~^1!;x*@ihwtC+`i?hkU;B&uw|jr%|K4tTf!v^dH2)!l#{~PuQs{B^ z4EY0#-1@yw{%G?o`K05kpYww4VYvx>BfdI4Ij8q7aJ;m~jK|>E^v9>i?9KN%P*pxW zo5<%OdV@4SSXaQW$frkfEIj}9uiGB_%dc#I@p~WLZhZFm^(@Lu%kMXdaF;j4CR*Hx zN;jh*Oh(-|sgcCFY&X3XuCCjtYxd zOfH?;3A)-CTMQlCY17oj=uLbM{kGz6f#tZBy^vwvPqK`qA?sf5G+MxEYzw%hf=UW{ zoZ%&rFN-;6hQwp8-UOxwJ!`<;>eAS1>{zWO59X8B4v4mK4e@&ZSGF<9OG&Vhm%*jD znUP{ypFZ!i$esq>p$m?4#n&HLQ|27w-kMR*e#F`8+nL$~BG0t|5tIEqaY1;SAiwbY zaY&=>+Q$r_U`n zj_xPrYa&-)e5YOv{)PNy@?ohezPeX_IR2|zq!lbUuD-Yi zMG_GgWpAHUBY8Fy&O(b%R>)U}9{l&8-0phITedr2d-rz#XYbj*_~8$4x4iPD+vD;n z&vGs)en*4ETDS$Kp9qotaM#_h**@_veto-1zRvuz|LnWBNB+a7B?v(xR34K7ZC4M$ zSbmu7WUH*B^O%h|@}$fj{{6B1;5#-HxK1V*uB%hEH;#69BKH@|;^oEnzJXgk_`PU!VuE{4vUim%m*zS`# zK1mnXX(3s$j~XK7f06!rmn~;5HN__bZ{ME1z2wbr-0uCzAL^$PuUy4%bqUMCb!zH@ zbMODh-kU(*lU(ItJ^L=rNHZFZkc1@Ag2obJ7ZPBEuw?edhS&j|CH1l#1W#9$&o7_%rs2+2k(MiN3oJ6dNnn$gT?CilD5U)8N!x2mh( zd%yo8P0zg7x95eN6V)^ z_6f_)PkZw69=TTd$nX80`~%DN>mPt{eu(2XOs(JIbnJ~NcqB*Wk~v%mt*<}1$xQ<4 zyjfqDSF&3`j+h0V|2%@=NGh8Q;zDaw&@&6rm>U?2R~cp4Qa1g)L&I3}*Lxqmw&oFP<|8XRLdKO`JaVhXg5SSQ;hHV(^~oF*{)qwM#XNaG@hoK;WGir2Qg ziV?liS@4lE50Wm;CZOv%G(@yj-K%$mtBGr`dQ>CFqYY0v>3r<&dzR~NfBN#a-+cLU zr+h`}QJ?md<+{f|e!2G@f0W*g%MFk--MVXGecO-l)yXmCW3$4^(~jGGTWkDDr`B_~ z1{c`!+bDPa``=lf^vz$VZ)AV}Xa3*ihNs`IUjwtX^wxpR*2FIk@Tz5kuQDSFF`e|5RyNw=ndmEGGbQro?7TrM|I z-v5igw7mPZzq>s71z)08e8LAe!?+$(WjQ&;%=gO%TxB@ta%*0X_Qw&>xL9m9t8$cX zXqS6wd5>2E#pGOTfM^W)Bn|rZNALK9<(Yr!&o7tBo8ve9s~0W!iq@ra!&Yy{+`IDt z06+jqL_t*iS}Nr(Phnl;1`Ov$`83q^PkzGkh8O+f^1e6z{_>PB|I+2ME3Qvp+rvLu za`Q#6dYiL_TKFJEy2NuJR`8H3ij@ggp;vQ-!?_j@5?980kf1Xa=n~YMLO3_w`Tln= zPyd#0T&}v|hUMS?;~!a`@`y(-AN$DN%}N8a)`dXWHgduz=I)nIg52_j&skpa!~aZf zP`-V6;`6>>dCU`@wA}UDH>Nk^avaX|Dg~T>MsKJ3J5M=@)Gi6O?Cl$t2c>ttht6}F z#5CtBuVGg`Zt`6zzp3|@-}>$4*+2aE1dBu1Bqvf_|efo00eEqooDrB2-$*N@N zQTX)eb_aR%T+hsxV--5uUJ0+d;SOQ+#CP(FUdUKs{a_0Uuz@= zjs<@_;N{N0i!A57g1cz^RDXtU4V^F{Ub=W6vvv1Y4BoX%Q{ zk=1PFW$24&37~a(6rdUbs8xRClkyXxliKId@Xl;0eQ&KzQ`zE|eDL3JQ&M^IYoT#! zqBjUtY~)lqh1fb@--BR@CQ5Rx?lp@*M4=FOj8*4y?N#HcJuJsuvRf2nKC1dK$a!@U zjZ39af0>?2d7%$_=ju-0wwWEs;p#IYZ%b@7HtDey$Zdq>%d&qZ$%a!2JMuc?Ty|tq z7k|ci)xp})!Fjh-)0!qGdmwKRaMAg&>u+4%_|rcxH&Cu!p7M=fv)p~>2htla{mWn_ zOv6)5XCxgE(YdhHsRW(xl#c=7X4E}zdB<|&bDy(3@sB@edE0NjV)@W3U$I;vU;X0m zM`;KX$B2f>i3WrV_{${Dr4PGhdDGARqP$7IV)=~k`s>U4Ui%t-fw@$EB$gMQj^#WJ zP4Y)%kXeFrc)kGKnrtP>OuF{*7uw$c^S`h>=}&#F%-M67H~;!em-qkdirU5zTX zPzp$_e_$4Vuk}$aLyDT`fJt}?(FZD`=k_3w#}zj|YZJIeweKA}z%aZuwrqpBPX7X?Tz3*GDmG$uXKk`2hiG9xqZ3!LwCwmZG2ga{-oNrJB6>1;YQ`n z;`8$F|DolY8y~(r=YRg2%RAol4tYJhSHHT4ciZ4A{hH|qk}&mjMD*AH*MXi$UFTkp z4hbPea_*&1S4#ih|I7b&x&3RuYI*8cykPm=pZ$g9{jZm=GRrv&uS0gzc@l-)TRY?^ zzXxT`@W~zg4boTt=)YX>WA|VC|NLLe>*R(CKIxM_r5bs9b{Qjg<{y}6R62i~JjjQS zfR+Ae#^jdQr1Ke7o_bvz@Q*83Kl+yC%|G*V%NKm>x9IEH@Bf=$U;gl?es;O`)1IWC z)Xi~RUU=zjUOt6d@4c50t5=F_DO!zKC;Tjj%Iuvr1WhQ%uLTy_+tZn{Ci3ZdpV(fs zkjf~<_8cXnjuex0z>{j9l+SYG81ZJG;%1GWph>$)utqQ-_qElGHUWx7zWOkpT@kqt z^Iy3P2CJ%GS)w41!P#sfV~f9zmypCHWO}BBuQS$W<%EOAu>^TpzfC#tzwF8@ul(D1 z)3LcQHrbnWCp->-m`R!Sc5R$>o4`rmfU^I}IpMVhY4RP^3~Yn90aAiiqw>&)=r!&f z7EV~&^V_a9XL_J9npZr8H}MUg8CAJCd$t*U)`8#%J>%|^o7albkMoAE}M`G8*^56Z{!uab+H55Dg8%W};%%i})xvzDuGyLEZ1T!>zA z?REP55t=hxR#yD0tH#JrZ9K*TB-N}0DK3rcZ-yv_I^8F1UTd~K#7?9Ymttu%_=>U>J#-x&L4b0{){~1D*>Kl)37OCQcOI{6$^f7_QNlE?Q-w+S1eEa$`>v-JoU-T z>wfTumg}GJ$&!}v38u{18V6zAL)+za9-|ovM*AT~_L#WbAJ8k8sZ;|b18vC;I-uY&X;aj=U6TJZ>`^&DmYI*O!`M1lh&wrlG*|#ruzT;iX zFaPO3w>(0AOHF^=T0V7_$c1P3hJa~94fv|k)weuid7m6-AA8sh%cuX@Keb%-*vBld z`KSNKa_yt>m;El6P-{(a(;B#6>&^N!PM9KRfAuZ;7FY8Yd(vyqH)6pDVX8SB#_h$l zd7^Cj0csZ;^OYa+Rjl{F^f#ABJ@1Q`Kk+?(XSqY>>?gnGo0cbi(Q}vk<+s1m!Uq9T zQ>HX9&zfdR+-PeNJ;0}aZ+OP-^2xSek~z9{`LwV8lgo{t{P^WJ|F<7qZj^H+Zj52$ zamN1Z9{f>1_Ua8s#V`6~TGx!hg>k3sCx+R&;s3M8>)5{lET_f<{;$iekAGbHP0M_4lt9SUK5%~EJ3Ge>?AAlMuwI8)#O0&qoa5;GMLFU+E7GUh zpbaB*rsIC!TOK~rU>k{B5qep>0`!_%H~@PKTH`Mo*i&SuU_<{x$!^9?I5b5O}>b+u?-P{{}9hutKSqBK7yad zDtrgp)X?>^@eMwgLjikd&zwe|btk~*&?|q%osC7{iK4*Ej{Fcsp{>@95d;jQN z%OzJ|D=vtUE_^cA+863G?~1kh1O>;MO@L8Klb5|Ecd+rcb8kg>IKVZ{}+E@!Jk-u`TzL+ z%jKVRn_e*LKRs%kmP6^tNest;L&oN9aus>?;~uxX^QZsSa)reCl;?fna+CZZ_uGE# z=k)6om&%XD=5w9(6~AwU?T(lLp zl?(plfS;uR>zaKETTclZC7*m|$RxH0JZ_q>#joPh;Tb5dOO42VecFIQ$iv1B)iUC15I}e3-Z1hnc z!<*;8>ol2BEaZYmACqmlm&Dt>mBE#6O0lOpXL94>qwWx;hr|>BrZ2l3(TY1R^jQ5)xqnwljZdl;29pX59-|xPD`D1_O+m;vpgTKFg_&tBL z{QOt^C(E^;@&x%xto-6ra|eUnZ};I%6%SLs2bUY<#{8>)hFNS;$-lD$UxY?PM{vTxH*^JE~cs0*Z34>fHfL-?@&j*BaWgzTM#Ss6tSOUR3t zjDEjKAP!Z;ngAxeA0I%H0{~-CuGJJ&uYkm)&#cQ}8G%s(h#@E<;}%WIlsqY(JTpKB zQelyiE<0=sN4T>N?nl9Z!L{@y*Ijp=oQLFJZ%rddjw73G!w7e@ZD+1$mY1wfO$8St z-Icn(+9uzLdK(`bHt-+f>1+IE@l&{!f7hC`x%4h#1e4<%d@hFq_Rik(i}YFNczSvp zmT@a=1xN$6+j>M@`^X3vK-SmP#O0_xHvIzL`{-DF>BAgJ?R~6&zDQibwBZvYcf9s> z%j3W1E0#}v;g>A;$s4@4zx>}V@0GvMa`%6DOA7J8ed2|`ScHfCxoypCeKS(B5gSOVE$D0B9u)fr)7W6`X5L~`2BM{RFJ*CNyYJwDCjF5dSQz(fbvLB`sb!qOwKkZ(W}LwO_V;RBnd-f&8fNyI%70<)d$Zx3o?Ad9U1D zS!ppN_~GjGW(+SVVi&ITXSO91vE_eJ1a6HFcg3hZ>G3ID?Y;Cn{}{IBxO%B9j+hUq zKq4DfZJP0wOm*_4!vsM5k2pqnVhCe>-WskuGrwf)hHsB<%)+Rq4t~3}Y97ts?>A?UQSZ?Wf zeNgQwJT2HKe>~$+I#((KAGTyqaln7Ips!jkf7~OMNBxQCE>Dq9ygcSJp1Hj1cV4^v z%2$8ua>ebRyj*$9BjxvlKBDVGDey!(DpCR*mA&BVuecV+EXhsG%O7_A@*eq$*)#w9 z|7Q8@zwk}+m#glSuQ2`M@|K@}@p9KoUng1LE022$Zy@zj2%udRIF98(U8msbCb=4} zxbe2-wy*!v<>}w>H8N+O82%RL{wL+0#7%bWi1pIh#fuU=wvp4~9BxGuqghI18{ zYyGO*9=|;1tG;A;+Sh-@@=0>z^$&mRmCG-D<)2xudD_$D7~qZixEQ^zh)vsCnX^me z>z0>Zd8PiI-{;AkeWrZv?C$q}VENsj`T6A!e(uG~oxk;RnXhuju%zhIs8_5HK329I zlt(;U{#(8y|DJCzU-=xHo*S=t;%&>LpZ^8Rr+vd$Esy!EXUR3&E0hJY?WfmK2B!H`Nl98kQVycIcwE6G$%IL{2fR&D zTbM0-LnsQL$R>w(aHP&$URmXM5Stx4&op%Y4Q4C9Eqhb2iGbK!@fE%e^79Y3vIdkS zKM`x~O@u~~-D_d9eu0NvkuuWN;lj~@ZptOTqcviC)WnwB@yAF$A#O;a_+$FqG|woM zw>%lk;bN2P#6oR+Z1})`h^Mdd+k>CNN(>&%3^&{>sXXCgqX(3Hv(4mAc(y^|?Ad1Y zS?BP3^^C9kmA~Ss0BN9hhi!cDFSA~`DtPdxj&PK?`G&E|NBlC%ks^c*V`W$#)EhJ= zZ;0{+7(c#zm)w-P`jelyJnheZt$f|#am)Sk`y040yzAZXUGBR_{`9$Qnqy5Gt_{0h z%1n!+`Xc*8QqreQ!=yM#TouBST&z~)K)(Xl2nC=0*NpObgPOtPTrdCnc+E{WE%)DZ&+=xuq4384{l}IYp7~7uacq7>UaO=dLg?`zoQ1aZ4sWKg z89Y)*IXD}51b5kW*DQDb#w(WVKKq%=GrsjdUT%^(yHE1DOMdA5!|#0ea-aNYFgLAA z38?|Mk?lbAYZtWql*fwIqUdLOMOC$511KL1W!U}1 zo4o+@T|#Tj1Xfw(p?PRr`(~3Zv`O0Xukq;l~gLAH8$K-cQPZv^lQpYUfA2Qe5iVkA}6R zluYQENUF}ZEI9X3ue>sS3Kh3@)gftT^=ca+3(qZoDtA6|^m;diOzjt};XMdJ{G77)L#dG6PH=ht&w&whaIg@{Y zz;7<%=I<@f`TXTMf9Kofuhl+TkF5{M57py1!!dVWwi6t?w&&9|aPF*w=8fNYqRhQpuzS<+=s5B4F@{?+SJoUXqYAzZR2CJ?)VRV z;IDv$+Qce;2Nv|5yg(Ihz{{&mHy5#ITfm)dAb0j`Gy1G^_`Uk7mX*Kar~ql8_5fS_ zMDm}IGI{c3pdG=RNh$<$>LOzID0z_S=`o ze9^O)>*Ys%uadud0~>&AnTbO3)OEqyQ82DB6lbfaEc-RQ)@l+_3PYYm_|aFSoO;sf zv+)5Pbo?Y(d0#GC43ZHrl}n5?Ry{zuuB=hvQkld1@f9NZ+85qzz57+KTi*KPKOz5K zdBt-5=Y59!MLqeKf4RBGV?}7PtOPtBBrt5)h~*nJjI%8PQco#kj}3j62YzVwUU?I7 z$7^1*Jn9RcyFC7d&s%PI^rPgjSzW(eAvSKDXC+4;P^a#RfXd8DYECgKJmp5Wsy^V6 z6E+15xCBtqo5AXuc%mEwUGCxPl~NFo9+nT6E{wCHQQE#?fckOcD9d|D8d&Mi3+n)Eu%cpz* zctD50-Ip&n${WI~~Y%pNRdUWsXD+JKZe{oe; z62b!;$FdLY36-IFh_xaA0;e~_Ke&8EZiv7AWv^IX^F9AaJ}r$j#bz7H(#eAVyBZ?}EX^3-qo`sF71ottaq zFI!zHpUBZqwbkxbL`^~JD(9rs{tA@+%gj&Tu*tqFqpjK7s-Si-01iyLj^y~!IeYK> zbk5%LYcE}1@qItITr2c9KmUv6H>2*9-?B-cc2v9#D{@=sD4=r=h7W%1e)%h!H!kp%k5+t@5Ww{>p%49y z?+;&DNUzixxS8h7t|Kd{{K z&UYwGew9f68V=qL;_FiQIt{YI%?ZpQ{)5DmYl@Dq>|skEFBhHWDLVaX9x(FBhRekl z#jCRj`05old2_?B;Vtq5)7lTt1L%a2i`M z=qt_v__`N2@M058IyXR;2e2psz8DMVC6`~eJb2eV%YDmT@r z!qa6pJxTzI0;{Hnk@g5W2u(pK!?dY9ziACowS}IcqWD4Wz!A7d^hfssAIl zwMMur7dX}&K#dKi^py5V55~0VSl6jU#8>vf2_76nAchVg%q;|2w~7Nq=T-zw02tx8 zLw?idWAB%FTjaw1+U5G^eU7d>oii{<-b|N!Q5PM!5D!Ldh@*-$-20r4Gnq5_gxg2o z`JUwi^7}|wYIyU0*;ThJ4{G00;~GWcGIWY%Mn=pw^jmXINvC5`xO5&e$_VT6i$ArF zufXC1EP9NizsL-Fa!FdskFWEs!7=Z^OU(4uKW)+aw7SbqdE^=B#6}Hl+z?NGoPW7P zzX&Iv7h7(^G_*hp*bKX@otHhl|+Umo+HHID5+%D3|xj z5ckV z-EJ1=D?0=>qLpn{aP{L3U8O$6ry@9m0gg8LTZhYsr*cs<8g-tiADcfIMY%Nu_G4eBqiWZgMqfZ3?Md7wY{{bMNgKlY{#R z106ZGaK-;JInF*-&)Ex}udma%>8ta#&ROvhNza*;#tbH-XI^HFI*V`7*3|yJ174c^ z<}u!`;~YP<8l?%a<+Ei6>kP(3SFyAuSsVwMC~~RGK=Pi2yw*lTTXWEUv7F?EAp$(8UwZ846xYrO* zJRXa0+s)b~jJZOhxu$pJCw+P7h7>z<8fVaKqyg`I-Z6+~K#X z@UN8!24B7*CXelbasUSbSXF2_VJ!+U*^~bZ*fBnTyaBPa>Fr(-vfI< zZg_l5J_U?V22~3VL@pFpKVyU`vj_0afK{MvHIZJ@X<{)(w5MNWJ6xAuukiKB%cM7$ zvj^_ES3kLlIje3UN|0RI8gM(OZA6$m+=4m7IUBEO>39LiG;s}Ok0n}5-epBGuDWHX zdP?ZWNbsR-ZO}6oJrwTpmbv5!-rfx zKU1&TWUN29O%V2ygWhhClMgOV^9Aaf8}ih=g#a8jhPvZPHl1bgr=dKw z8L2{iu-72QN6mOjMz$*VU(`vLd=yq9C}F}T{}jw(kx|-KZ8O5fpT5x&Uj4MuS|8tN zG8gz`<5&lh9LBU&_EL;O)s_G(YOOn)wX%u}94Hz$&dd#$;*q436W*-Zu}7J)P}*69 zrCj2BOYH~G(PpizrOcbn5iCFp3P5#C-kQs*YqJq6K2?P`$CxW~Qx<+6PipQFRp)jM z&A2Httot`|EAP4{7I~wg^CHBY7cw(6%UAu51hhY{QsiJar4yz01UaNatB@97C7C8n z&G|UMDCa0^UIUh>bn&&SlPK|N2|WCqr3_0ZDMWf^>}<{PMN>j&GxKZwXb_~OfFrQ@ zOPe_M_4km>dWwU<%d&_+bE(w;?$|I>X3Gs-b>K!IfEY)0#>a^jpS97SI;Ab>6iUYO zsmo~260+b)Qx}l6SqMC`ZI_^PmTt7*ldgO{Mswz4_$HVPyeX3=e(lc+_fW$UikT|3 z9;rlM?40Q*OpoNO-1k;%oYy(iPaVsgRiA8L7qnmU##_YHx!k{1pbrlUjB%LEZWgN5 zl_$;0+Q*!(H*N^uqB7SE=!>2k@p>lzSLdJP#2VXN3Zu=!sz=oGL%D zu7sIaRMmA+MPLS=$C$dJFD3$R@ow2ePN#GnZCb6SVo-C8Nz`UdRF3Fvt+0KE#rM9p z%M2U;+9tm8pVb+t>ebgO>r@cE(KHI1Kw~rtrP|=zFoVta13FtH#=14}fNBG59wYEF zZZ?)tr1=$^DK!Gto8FqxJVY;ha%7Z}!6v=& z7l9dco`p3pykSmXqUq!#HE8eh`ax4VSXH<7+S3kiAHo#|AJhv2x}MGT6PU!MlU6d8 zXq8k)T1^d+UL93_7*u&7z9wN{6=0o$hTGsN&R~eO`>+@TnBkql7|Ohqs0;k-wCWMv zs(rvgyT1N#5bUk1Ykzv}GCsTQYq6*RzEveMu(3@TBUT2nC|3m%b+& zFo>7v(=&bS^<+x4eGaJVKGFq1echfYgg$;B1zR!9*}K?rKmq;No&RdipViAX&GH&kP)l@c6`*ttSxjNs?UYjix`b zYkvN0Mqj$3&;}z$t5ew(p8eAcioO92eH<73Mu!M(>)ujoNYU#}5gnK(NiW}=6E(91 z4dkqVj7^Ri^h<5)xT@K|2yu)(W#gCQK(}M7a#(9_+|dM$*;v*ZauorfRc&ds7K9XF z>VJBPucD}dnw0odEeNi}5RxAxziAGlY!KNO9(W@&bNNxTlOl?tx>R)Sq|s77thxd; ziB?t}Ak*~Ls}E*wrAKh>~wxUjB#9K{C zQJ!@T(XXgg@-&sXsT)Chfl|TR3-QZ0&qgj)uzEnY^0qo@Y828DeRLcHZu+6#@;

  • ReAQYGC-{iX5?7hhj}q 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

    2&E+-$DKVn;@N6s<}^bdleX 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 Date: Wed, 7 Sep 2022 20:54:21 +0200 Subject: [PATCH 26/64] chore: nice new section for seach Signed-off-by: blam --- microsite/core/Components.js | 6 +++- .../plugins/backstage-search-platform.yaml | 10 +++++++ microsite/pages/en/index.js | 29 ++++++++++--------- .../static/img/backstage-search-platform.svg | 17 +++++++++++ 4 files changed, 48 insertions(+), 14 deletions(-) create mode 100644 microsite/data/plugins/backstage-search-platform.yaml create mode 100644 microsite/static/img/backstage-search-platform.svg diff --git a/microsite/core/Components.js b/microsite/core/Components.js index 2abf507f5e..7453d21e3e 100644 --- a/microsite/core/Components.js +++ b/microsite/core/Components.js @@ -53,13 +53,17 @@ Block.QuoteContainer = simpleComponent('div', 'Block__QuoteContainer'); Block.Quote = simpleComponent('p', 'Block__Quote'); Block.Divider = simpleComponent('p', 'Block__Divider', ['quote']); Block.MediaFrame = simpleComponent('div', 'Block__MediaFrame'); -Block.Graphics = ({ padding, children, innerPadding }) => { +Block.Graphics = ({ padding, children, innerPadding, width }) => { const style = {}; const innerStyle = {}; if (padding) { style.padding = `${padding}% 0`; } + if (width) { + style.width = width; + } + if (innerPadding) { innerStyle.padding = `${innerPadding}% 0`; } diff --git a/microsite/data/plugins/backstage-search-platform.yaml b/microsite/data/plugins/backstage-search-platform.yaml new file mode 100644 index 0000000000..18bbbd1fd1 --- /dev/null +++ b/microsite/data/plugins/backstage-search-platform.yaml @@ -0,0 +1,10 @@ +--- +title: Backstage Search +author: Spotify +authorUrl: https://github.com/spotify +category: Core Feature +description: A composable and extensible search platform built to fit your organization’s needs and find information quickly. +documentation: https://backstage.io/docs/features/software-catalog/software-catalog-overview +iconUrl: img/backstage-search-platform.svg +npmPackageName: '@backstage/plugin-search' +order: 5 diff --git a/microsite/pages/en/index.js b/microsite/pages/en/index.js index af1e2e0b66..8e963c2453 100644 --- a/microsite/pages/en/index.js +++ b/microsite/pages/en/index.js @@ -440,18 +440,6 @@ class Index extends React.Component { experience, or edit the look and feel of each search result - @@ -463,7 +451,6 @@ class Index extends React.Component { TechDocs or Confluence and Stack Overflow - @@ -475,6 +462,22 @@ class Index extends React.Component { + + + + } + /> diff --git a/microsite/static/img/backstage-search-platform.svg b/microsite/static/img/backstage-search-platform.svg new file mode 100644 index 0000000000..0c058386ad --- /dev/null +++ b/microsite/static/img/backstage-search-platform.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + From 8d692524c5951b1208fcd1d66aa378ce44d3281e Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 7 Sep 2022 20:54:54 +0200 Subject: [PATCH 27/64] chore: revert prettier ignore Signed-off-by: blam --- .prettierignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.prettierignore b/.prettierignore index 90179b93ff..8f1fae0456 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,6 @@ .yarn dist +microsite coverage *.hbs templates From a58e5bfbd2ed67e8cd515684a5cf2966f77a209a Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 7 Sep 2022 20:57:58 +0200 Subject: [PATCH 28/64] chore: add another classlist Signed-off-by: blam --- microsite/static/js/dismissable-banner.js | 1 + 1 file changed, 1 insertion(+) diff --git a/microsite/static/js/dismissable-banner.js b/microsite/static/js/dismissable-banner.js index f38fd0ebf1..6320803a77 100644 --- a/microsite/static/js/dismissable-banner.js +++ b/microsite/static/js/dismissable-banner.js @@ -12,6 +12,7 @@ window.addEventListener('DOMContentLoaded', () => { dismissButton.addEventListener('click', () => { banner.classList.add('Banner--hiding'); localStorage.setItem(storageKey, 'true'); + setTimeout(() => banner.classList.add('Banner--hidden'), 300); }); } }); From 67acd209cfc5b764ca9fc424554eac11d7adf9f1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 7 Sep 2022 22:24:09 +0200 Subject: [PATCH 29/64] kubernetes-backend: ignore taffydb vulnerability Signed-off-by: Patrik Oldsberg --- plugins/kubernetes-backend/.snyk | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 plugins/kubernetes-backend/.snyk diff --git a/plugins/kubernetes-backend/.snyk b/plugins/kubernetes-backend/.snyk new file mode 100644 index 0000000000..2f19f3fcf7 --- /dev/null +++ b/plugins/kubernetes-backend/.snyk @@ -0,0 +1,10 @@ +# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. +version: v1.22.1 +# ignores vulnerabilities until expiry date; change duration by modifying expiry date +ignore: + SNYK-JS-TAFFYDB-2992450: + - '*': + reason: Development dependency only + expires: 2023-03-07T20:23:00.000Z + created: 2022-09-07T20:23:00.000Z +patch: {} From 54f14d5b88eee65693896124e1013776e377781b Mon Sep 17 00:00:00 2001 From: Taras Date: Wed, 7 Sep 2022 17:32:06 -0400 Subject: [PATCH 30/64] Added /validate-entity to the catalog client Signed-off-by: Taras --- .../catalog-client/src/CatalogClient.test.ts | 63 +++++++++++++++++++ packages/catalog-client/src/CatalogClient.ts | 38 ++++++++++- packages/catalog-client/src/types/api.ts | 23 +++++++ 3 files changed, 123 insertions(+), 1 deletion(-) diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index 0b838eb4c2..3fc70e25ae 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -295,4 +295,67 @@ describe('CatalogClient', () => { await client.getLocationById('42'); }); }); + + describe('validateEntity', () => { + it('returns valid false when validation fails', async () => { + server.use( + rest.post(`${mockBaseUrl}/validate-entity`, (req, res, ctx) => { + return res( + ctx.status(400), + ctx.json({ + errors: [ + { + message: 'Missing name', + }, + ], + }), + ); + }), + ); + + expect( + await client.validateEntity( + { + apiVersion: '1', + kind: 'Component', + metadata: { + name: '', + }, + }, + 'http://example.com', + ), + ).toMatchObject({ + valid: false, + errors: [ + { + message: 'Missing name', + }, + ], + }); + }); + + it('returns valid true when validation fails', async () => { + server.use( + rest.post(`${mockBaseUrl}/validate-entity`, (req, res, ctx) => { + return res(ctx.status(200), ctx.text('')); + }), + ); + + expect( + await client.validateEntity( + { + apiVersion: '1', + kind: 'Component', + metadata: { + name: 'good', + }, + }, + 'http://example.com', + ), + ).toMatchObject({ + valid: true, + errors: undefined, + }); + }); + }); }); diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts index 8ddc3eb36d..bbc9b0b62d 100644 --- a/packages/catalog-client/src/CatalogClient.ts +++ b/packages/catalog-client/src/CatalogClient.ts @@ -21,7 +21,7 @@ import { stringifyEntityRef, stringifyLocationRef, } from '@backstage/catalog-model'; -import { ResponseError } from '@backstage/errors'; +import { ResponseError, SerializedError } from '@backstage/errors'; import crossFetch from 'cross-fetch'; import { CATALOG_FILTER_EXISTS, @@ -36,6 +36,7 @@ import { Location, GetEntityFacetsRequest, GetEntityFacetsResponse, + ValidateEntityResponse, } from './types/api'; import { DiscoveryApi } from './types/discovery'; import { FetchApi } from './types/fetch'; @@ -353,6 +354,41 @@ export class CatalogClient implements CatalogApi { ); } + /** + * {@inheritdoc CatalogApi.validateEntity} + */ + async validateEntity( + entity: Entity, + location: string, + options?: CatalogRequestOptions, + ): Promise { + const response = await this.fetchApi.fetch( + `${await this.discoveryApi.getBaseUrl('catalog')}/validate-entity`, + { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'POST', + body: JSON.stringify({ entity, location }), + }, + ); + + if (response.ok) { + return { + valid: true, + errors: undefined, + }; + } + + const { errors } = (await response.json()) as { errors: SerializedError[] }; + + return { + valid: false, + errors, + }; + } + // // Private methods // diff --git a/packages/catalog-client/src/types/api.ts b/packages/catalog-client/src/types/api.ts index 389b82c081..d66e2dfaf9 100644 --- a/packages/catalog-client/src/types/api.ts +++ b/packages/catalog-client/src/types/api.ts @@ -15,6 +15,7 @@ */ import { CompoundEntityRef, Entity } from '@backstage/catalog-model'; +import { SerializedError } from '@backstage/errors'; /** * This symbol can be used in place of a value when passed to filters in e.g. @@ -269,6 +270,16 @@ export type AddLocationResponse = { exists?: boolean; }; +/** + * The response type for {@link CatalogClient.validateEntity} + * + * @public + */ +export type ValidateEntityResponse = { + valid: boolean; + errors?: SerializedError[]; +}; + /** * A client for interacting with the Backstage software catalog through its API. * @@ -390,4 +401,16 @@ export interface CatalogApi { id: string, options?: CatalogRequestOptions, ): Promise; + + /** + * Validate entity and its location. + * + * @param entity - Entity to validate + * @param location - URL location of the entity + */ + validateEntity( + entity: Entity, + location: string, + options?: CatalogRequestOptions, + ): Promise; } From 93a1072a0a6d51815bbca6fa84e055ee157fd885 Mon Sep 17 00:00:00 2001 From: Taras Date: Wed, 7 Sep 2022 18:12:01 -0400 Subject: [PATCH 31/64] Updated tests to include validateEntity in mocks Signed-off-by: Taras --- packages/catalog-client/src/CatalogClient.test.ts | 4 ++-- .../src/lib/catalog/CatalogIdentityClient.test.ts | 1 + plugins/badges-backend/src/service/router.test.ts | 1 + .../src/components/CatalogGraphCard/CatalogGraphCard.test.tsx | 1 + .../src/components/CatalogGraphPage/CatalogGraphPage.test.tsx | 1 + .../EntityRelationsGraph/EntityRelationsGraph.test.tsx | 1 + .../components/EntityRelationsGraph/useEntityStore.test.ts | 1 + plugins/catalog-import/src/api/CatalogImportClient.test.ts | 1 + .../StepPrepareCreatePullRequest.test.tsx | 1 + .../components/DefaultExplorePage/DefaultExplorePage.test.tsx | 1 + .../DomainExplorerContent/DomainExplorerContent.test.tsx | 1 + .../GroupsExplorerContent/GroupsExplorerContent.test.tsx | 1 + plugins/fossa/src/components/FossaPage/FossaPage.test.tsx | 1 + plugins/todo-backend/src/service/TodoReaderService.test.ts | 1 + 14 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index 3fc70e25ae..9427d78f5c 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -299,7 +299,7 @@ describe('CatalogClient', () => { describe('validateEntity', () => { it('returns valid false when validation fails', async () => { server.use( - rest.post(`${mockBaseUrl}/validate-entity`, (req, res, ctx) => { + rest.post(`${mockBaseUrl}/validate-entity`, (_req, res, ctx) => { return res( ctx.status(400), ctx.json({ @@ -336,7 +336,7 @@ describe('CatalogClient', () => { it('returns valid true when validation fails', async () => { server.use( - rest.post(`${mockBaseUrl}/validate-entity`, (req, res, ctx) => { + rest.post(`${mockBaseUrl}/validate-entity`, (_req, res, ctx) => { return res(ctx.status(200), ctx.text('')); }), ); diff --git a/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts b/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts index 587b433ca1..e4d9304892 100644 --- a/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts +++ b/plugins/auth-backend/src/lib/catalog/CatalogIdentityClient.test.ts @@ -35,6 +35,7 @@ describe('CatalogIdentityClient', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; const tokenManager: jest.Mocked = { getToken: jest.fn(), diff --git a/plugins/badges-backend/src/service/router.test.ts b/plugins/badges-backend/src/service/router.test.ts index 1750a55be7..5fc809906f 100644 --- a/plugins/badges-backend/src/service/router.test.ts +++ b/plugins/badges-backend/src/service/router.test.ts @@ -68,6 +68,7 @@ describe('createRouter', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; config = new ConfigReader({ diff --git a/plugins/catalog-graph/src/components/CatalogGraphCard/CatalogGraphCard.test.tsx b/plugins/catalog-graph/src/components/CatalogGraphCard/CatalogGraphCard.test.tsx index 9b354b5f38..74fcd4e501 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphCard/CatalogGraphCard.test.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphCard/CatalogGraphCard.test.tsx @@ -59,6 +59,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; apis = TestApiRegistry.from([catalogApiRef, catalog]); diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.test.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.test.tsx index d8b7ede2c2..9cca6ef9be 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.test.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.test.tsx @@ -92,6 +92,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; wrapper = ( diff --git a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx index db6711a0a5..c79f975789 100644 --- a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx +++ b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.test.tsx @@ -119,6 +119,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; Wrapper = ({ children }) => ( diff --git a/plugins/catalog-graph/src/components/EntityRelationsGraph/useEntityStore.test.ts b/plugins/catalog-graph/src/components/EntityRelationsGraph/useEntityStore.test.ts index 74d7423eea..e76b1001c6 100644 --- a/plugins/catalog-graph/src/components/EntityRelationsGraph/useEntityStore.test.ts +++ b/plugins/catalog-graph/src/components/EntityRelationsGraph/useEntityStore.test.ts @@ -38,6 +38,7 @@ describe('useEntityStore', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; useApi.mockReturnValue(catalogApi); diff --git a/plugins/catalog-import/src/api/CatalogImportClient.test.ts b/plugins/catalog-import/src/api/CatalogImportClient.test.ts index e26d6c5d6a..30b9f47d99 100644 --- a/plugins/catalog-import/src/api/CatalogImportClient.test.ts +++ b/plugins/catalog-import/src/api/CatalogImportClient.test.ts @@ -100,6 +100,7 @@ describe('CatalogImportClient', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; let catalogImportClient: CatalogImportClient; diff --git a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.test.tsx b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.test.tsx index f3dc1f2144..5ad7e27c4b 100644 --- a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.test.tsx +++ b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/StepPrepareCreatePullRequest.test.tsx @@ -46,6 +46,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; const errorApi: jest.Mocked = { diff --git a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx index a79d02a2a0..399112fac6 100644 --- a/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx +++ b/plugins/explore/src/components/DefaultExplorePage/DefaultExplorePage.test.tsx @@ -32,6 +32,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; const Wrapper = ({ children }: { children?: React.ReactNode }) => ( diff --git a/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.test.tsx b/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.test.tsx index c30e845112..c84363f5c6 100644 --- a/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.test.tsx +++ b/plugins/explore/src/components/DomainExplorerContent/DomainExplorerContent.test.tsx @@ -33,6 +33,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; const Wrapper = ({ children }: { children?: React.ReactNode }) => ( diff --git a/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.test.tsx b/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.test.tsx index 4488a4d0d9..a4769e8f4f 100644 --- a/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.test.tsx +++ b/plugins/explore/src/components/GroupsExplorerContent/GroupsExplorerContent.test.tsx @@ -33,6 +33,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; const Wrapper = ({ children }: { children?: React.ReactNode }) => ( diff --git a/plugins/fossa/src/components/FossaPage/FossaPage.test.tsx b/plugins/fossa/src/components/FossaPage/FossaPage.test.tsx index 7ef6c799df..676a3cff3c 100644 --- a/plugins/fossa/src/components/FossaPage/FossaPage.test.tsx +++ b/plugins/fossa/src/components/FossaPage/FossaPage.test.tsx @@ -37,6 +37,7 @@ describe('', () => { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; const fossaApi: jest.Mocked = { getFindingSummary: jest.fn(), diff --git a/plugins/todo-backend/src/service/TodoReaderService.test.ts b/plugins/todo-backend/src/service/TodoReaderService.test.ts index 6dd14afcb4..8077e2ddb9 100644 --- a/plugins/todo-backend/src/service/TodoReaderService.test.ts +++ b/plugins/todo-backend/src/service/TodoReaderService.test.ts @@ -53,6 +53,7 @@ function mockCatalogClient(entity?: Entity): jest.Mocked { refreshEntity: jest.fn(), getEntityAncestors: jest.fn(), getEntityFacets: jest.fn(), + validateEntity: jest.fn(), }; if (entity) { mock.getEntityByRef.mockReturnValue(entity); From 184a610d12de1bbabef326d2443c649c2e1cf105 Mon Sep 17 00:00:00 2001 From: Taras Date: Wed, 7 Sep 2022 18:20:10 -0400 Subject: [PATCH 32/64] Add missing export and generate api report Signed-off-by: Taras --- packages/catalog-client/api-report.md | 17 +++++++++++++++++ packages/catalog-client/src/types/index.ts | 1 + 2 files changed, 18 insertions(+) diff --git a/packages/catalog-client/api-report.md b/packages/catalog-client/api-report.md index 964a3c1018..1d66b469a9 100644 --- a/packages/catalog-client/api-report.md +++ b/packages/catalog-client/api-report.md @@ -5,6 +5,7 @@ ```ts import { CompoundEntityRef } from '@backstage/catalog-model'; import { Entity } from '@backstage/catalog-model'; +import { SerializedError } from '@backstage/errors'; // @public export type AddLocationRequest = { @@ -65,6 +66,11 @@ export interface CatalogApi { id: string, options?: CatalogRequestOptions, ): Promise; + validateEntity( + entity: Entity, + location: string, + options?: CatalogRequestOptions, + ): Promise; } // @public @@ -122,6 +128,11 @@ export class CatalogClient implements CatalogApi { id: string, options?: CatalogRequestOptions, ): Promise; + validateEntity( + entity: Entity, + location: string, + options?: CatalogRequestOptions, + ): Promise; } // @public @@ -196,4 +207,10 @@ type Location_2 = { target: string; }; export { Location_2 as Location }; + +// @public +export type ValidateEntityResponse = { + valid: boolean; + errors?: SerializedError[]; +}; ``` diff --git a/packages/catalog-client/src/types/index.ts b/packages/catalog-client/src/types/index.ts index 8bf4e34da2..86f7b18ab0 100644 --- a/packages/catalog-client/src/types/index.ts +++ b/packages/catalog-client/src/types/index.ts @@ -27,5 +27,6 @@ export type { Location, GetEntityFacetsRequest, GetEntityFacetsResponse, + ValidateEntityResponse, } from './api'; export { ENTITY_STATUS_CATALOG_PROCESSING_TYPE } from './status'; From 65d1d4343ff6cf56b8cf28879d6d2891400b572b Mon Sep 17 00:00:00 2001 From: Taras Date: Wed, 7 Sep 2022 18:22:07 -0400 Subject: [PATCH 33/64] Added changeset Signed-off-by: Taras --- .changeset/large-books-deny.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/large-books-deny.md diff --git a/.changeset/large-books-deny.md b/.changeset/large-books-deny.md new file mode 100644 index 0000000000..51d2ce38c0 --- /dev/null +++ b/.changeset/large-books-deny.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-client': minor +--- + +Adding validateEntity method that calls /validate-entity endpoint From 64fe8e121344bc57833c3b87af013395c98e22f8 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 13:52:34 +1000 Subject: [PATCH 34/64] change auth0 passport to the correct passport-auth0 package and allow passing the audience into the auth for api Signed-off-by: Joe Patterson --- plugins/auth-backend/package.json | 2 + .../lib/passport/PassportStrategyHelper.ts | 3 +- .../src/providers/auth0/provider.ts | 14 ++++- .../src/providers/auth0/strategy.ts | 6 +- yarn.lock | 62 +++++++++++++++---- 5 files changed, 69 insertions(+), 18 deletions(-) diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 4537b9e5db..35e6f86f2c 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -62,6 +62,7 @@ "node-fetch": "^2.6.7", "openid-client": "^5.1.3", "passport": "^0.6.0", + "passport-auth0": "^1.4.3", "passport-bitbucket-oauth2": "^0.1.2", "passport-github2": "^0.1.12", "passport-gitlab2": "^5.0.0", @@ -81,6 +82,7 @@ "@types/cookie-parser": "^1.4.2", "@types/express-session": "^1.17.2", "@types/jwt-decode": "^3.1.0", + "@types/passport-auth0": "^1.0.5", "@types/passport-github2": "^1.2.4", "@types/passport-google-oauth20": "^2.0.3", "@types/passport-microsoft": "^0.0.0", diff --git a/plugins/auth-backend/src/lib/passport/PassportStrategyHelper.ts b/plugins/auth-backend/src/lib/passport/PassportStrategyHelper.ts index 16377f17f2..7589254862 100644 --- a/plugins/auth-backend/src/lib/passport/PassportStrategyHelper.ts +++ b/plugins/auth-backend/src/lib/passport/PassportStrategyHelper.ts @@ -91,6 +91,7 @@ export const executeRedirectStrategy = async ( export const executeFrameHandlerStrategy = async ( req: express.Request, providerStrategy: passport.Strategy, + options?: Record, ) => { return new Promise<{ result: Result; privateInfo: PrivateInfo }>( (resolve, reject) => { @@ -124,7 +125,7 @@ export const executeFrameHandlerStrategy = async ( strategy.redirect = () => { reject(new Error('Unexpected redirect')); }; - strategy.authenticate(req, {}); + strategy.authenticate(req, { ...(options ?? {}) }); }, ); }; diff --git a/plugins/auth-backend/src/providers/auth0/provider.ts b/plugins/auth-backend/src/providers/auth0/provider.ts index 8e0255ebe6..7f2310ab80 100644 --- a/plugins/auth-backend/src/providers/auth0/provider.ts +++ b/plugins/auth-backend/src/providers/auth0/provider.ts @@ -43,9 +43,11 @@ import { AuthResolverContext, } from '../types'; import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; +import { ExtraVerificationParams } from 'passport-auth0'; type PrivateInfo = { refreshToken: string; + extraParams: ExtraVerificationParams, }; export type Auth0AuthProviderOptions = OAuthProviderOptions & { @@ -53,6 +55,7 @@ export type Auth0AuthProviderOptions = OAuthProviderOptions & { signInResolver?: SignInResolver; authHandler: AuthHandler; resolverContext: AuthResolverContext; + audience?: string; }; export class Auth0AuthProvider implements OAuthHandlers { @@ -60,11 +63,13 @@ export class Auth0AuthProvider implements OAuthHandlers { private readonly signInResolver?: SignInResolver; private readonly authHandler: AuthHandler; private readonly resolverContext: AuthResolverContext; + private readonly audience?: string; constructor(options: Auth0AuthProviderOptions) { this.signInResolver = options.signInResolver; this.authHandler = options.authHandler; this.resolverContext = options.resolverContext; + this.audience = options.audience; this._strategy = new Auth0Strategy( { clientID: options.clientId, @@ -79,6 +84,7 @@ export class Auth0AuthProvider implements OAuthHandlers { accessToken: any, refreshToken: any, params: any, + extraParams: ExtraVerificationParams, fullProfile: passport.Profile, done: PassportDoneCallback, ) => { @@ -92,6 +98,7 @@ export class Auth0AuthProvider implements OAuthHandlers { }, { refreshToken, + extraParams }, ); }, @@ -104,6 +111,7 @@ export class Auth0AuthProvider implements OAuthHandlers { prompt: 'consent', scope: req.scope, state: encodeState(req.state), + audience: this.audience as string }); } @@ -111,7 +119,9 @@ export class Auth0AuthProvider implements OAuthHandlers { const { result, privateInfo } = await executeFrameHandlerStrategy< OAuthResult, PrivateInfo - >(req, this._strategy); + >(req, this._strategy, { + audience: this.audience as string + }); return { response: await this.handleResult(result), @@ -198,6 +208,7 @@ export const auth0 = createAuthProviderIntegration({ const clientSecret = envConfig.getString('clientSecret'); const domain = envConfig.getString('domain'); const customCallbackUrl = envConfig.getOptionalString('callbackUrl'); + const audience = envConfig.getOptionalString('audience'); const callbackUrl = customCallbackUrl || `${globalConfig.baseUrl}/${providerId}/handler/frame`; @@ -218,6 +229,7 @@ export const auth0 = createAuthProviderIntegration({ authHandler, signInResolver, resolverContext, + audience, }); return OAuthAdapter.fromConfig(globalConfig, provider, { diff --git a/plugins/auth-backend/src/providers/auth0/strategy.ts b/plugins/auth-backend/src/providers/auth0/strategy.ts index bac82db0ee..bef2836ab5 100644 --- a/plugins/auth-backend/src/providers/auth0/strategy.ts +++ b/plugins/auth-backend/src/providers/auth0/strategy.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import OAuth2Strategy from 'passport-oauth2'; +import Auth0InternalStrategy from 'passport-auth0'; export interface Auth0StrategyOptionsWithRequest { clientID: string; @@ -23,10 +23,10 @@ export interface Auth0StrategyOptionsWithRequest { passReqToCallback: true; } -export default class Auth0Strategy extends OAuth2Strategy { +export default class Auth0Strategy extends Auth0InternalStrategy { constructor( options: Auth0StrategyOptionsWithRequest, - verify: OAuth2Strategy.VerifyFunctionWithRequest, + verify: Auth0InternalStrategy.VerifyFunctionWithRequest, ) { const optionsWithURLs = { ...options, diff --git a/yarn.lock b/yarn.lock index 92a44ee343..34bcd2aacb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3946,6 +3946,7 @@ __metadata: "@types/express-session": ^1.17.2 "@types/jwt-decode": ^3.1.0 "@types/passport": ^1.0.3 + "@types/passport-auth0": ^1.0.5 "@types/passport-github2": ^1.2.4 "@types/passport-google-oauth20": ^2.0.3 "@types/passport-microsoft": ^0.0.0 @@ -3972,6 +3973,7 @@ __metadata: node-fetch: ^2.6.7 openid-client: ^5.1.3 passport: ^0.6.0 + passport-auth0: ^1.4.3 passport-bitbucket-oauth2: ^0.1.2 passport-github2: ^0.1.12 passport-gitlab2: ^5.0.0 @@ -14635,6 +14637,16 @@ __metadata: languageName: node linkType: hard +"@types/passport-auth0@npm:^1.0.5": + version: 1.0.5 + resolution: "@types/passport-auth0@npm:1.0.5" + dependencies: + "@types/express": "*" + "@types/passport": "*" + checksum: b86b69a182864cae6877c0f16a1d62e24a394dc9cde8e7285a29aef89d52fbb555b899e061157bfd52420dcbccd6fd9b189155e5367a22763b0b2813cbb28354 + languageName: node + linkType: hard + "@types/passport-github2@npm:^1.2.4": version: 1.2.5 resolution: "@types/passport-github2@npm:1.2.5" @@ -16977,6 +16989,16 @@ __metadata: languageName: node linkType: hard +"axios@npm:^0.27.2": + version: 0.27.2 + resolution: "axios@npm:0.27.2" + dependencies: + follow-redirects: ^1.14.9 + form-data: ^4.0.0 + checksum: 38cb7540465fe8c4102850c4368053c21683af85c5fdf0ea619f9628abbcb59415d1e22ebc8a6390d2bbc9b58a9806c874f139767389c862ec9b772235f06854 + languageName: node + linkType: hard + "axobject-query@npm:^2.2.0": version: 2.2.0 resolution: "axobject-query@npm:2.2.0" @@ -18098,17 +18120,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001286": - version: 1.0.30001315 - resolution: "caniuse-lite@npm:1.0.30001315" - checksum: 3938596c61e4a5c6e96d1c6aecbde67b31c4c92e55a9d443b8e51e0eac64b6dd848dfac84891f75464f8d25c7e1ed6e9c9640593922b9bd360629fd433fb69e2 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001366": - version: 1.0.30001367 - resolution: "caniuse-lite@npm:1.0.30001367" - checksum: 9912aed182b8b3a834787424b56a0e71b5ecb5d2cb7235fb022227bc3a81202e8a34bebc5dc9cc504c515b4e052f825c36c2db4b0b880c10e195fe63673edfc6 +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001286, caniuse-lite@npm:^1.0.30001366": + version: 1.0.30001392 + resolution: "caniuse-lite@npm:1.0.30001392" + checksum: b46fdb4cd63f43e608c9378e9a4cfc1092407fccda32f13f53db8818e0e654e5b2b9e7aee76b95a1a4fd3f2c2eabd1157aef19905f2c60dfcec136b27ac5fce6 languageName: node linkType: hard @@ -23310,6 +23325,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.14.9": + version: 1.15.1 + resolution: "follow-redirects@npm:1.15.1" + peerDependenciesMeta: + debug: + optional: true + checksum: 6aa4e3e3cdfa3b9314801a1cd192ba756a53479d9d8cca65bf4db3a3e8834e62139245cd2f9566147c8dfe2efff1700d3e6aefd103de4004a7b99985e71dd533 + languageName: node + linkType: hard + "for-in@npm:^1.0.2": version: 1.0.2 resolution: "for-in@npm:1.0.2" @@ -32321,6 +32346,17 @@ __metadata: languageName: node linkType: hard +"passport-auth0@npm:^1.4.3": + version: 1.4.3 + resolution: "passport-auth0@npm:1.4.3" + dependencies: + axios: ^0.27.2 + passport-oauth: ^1.0.0 + passport-oauth2: ^1.6.0 + checksum: 7658f58fd24831c67c783a9b0df3946bae9e6e42f8572747f17e77a2129d58ba21917a7531a4a328119b99a2a979ee857a1107c8e22e63e55739cdc1a8d1ccbc + languageName: node + linkType: hard + "passport-bitbucket-oauth2@npm:^0.1.2": version: 0.1.2 resolution: "passport-bitbucket-oauth2@npm:0.1.2" @@ -32379,7 +32415,7 @@ __metadata: languageName: node linkType: hard -"passport-oauth2@npm:1.6.1, passport-oauth2@npm:1.x.x, passport-oauth2@npm:^1.1.2, passport-oauth2@npm:^1.4.0, passport-oauth2@npm:^1.6.1": +"passport-oauth2@npm:1.6.1, passport-oauth2@npm:1.x.x, passport-oauth2@npm:^1.1.2, passport-oauth2@npm:^1.4.0, passport-oauth2@npm:^1.6.0, passport-oauth2@npm:^1.6.1": version: 1.6.1 resolution: "passport-oauth2@npm:1.6.1" dependencies: @@ -32392,7 +32428,7 @@ __metadata: languageName: node linkType: hard -"passport-oauth@npm:1.0.0": +"passport-oauth@npm:1.0.0, passport-oauth@npm:^1.0.0": version: 1.0.0 resolution: "passport-oauth@npm:1.0.0" dependencies: From 8600855fbf786cf575b77bb3d63f1ac36f9fe25a Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 13:59:05 +1000 Subject: [PATCH 35/64] Update docs to reflect the change and add change set Signed-off-by: Joe Patterson --- .changeset/smart-sloths-search.md | 5 +++++ docs/auth/auth0/provider.md | 1 + 2 files changed, 6 insertions(+) create mode 100644 .changeset/smart-sloths-search.md diff --git a/.changeset/smart-sloths-search.md b/.changeset/smart-sloths-search.md new file mode 100644 index 0000000000..4b69184fa6 --- /dev/null +++ b/.changeset/smart-sloths-search.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': minor +--- + +Converts the auth0 to the passport-auth0 package and allows the addition of audience to auth0 connections this means that you can connect to the correct API to get permissions, access tokens and full profile diff --git a/docs/auth/auth0/provider.md b/docs/auth/auth0/provider.md index 80106a73c9..1bfa333191 100644 --- a/docs/auth/auth0/provider.md +++ b/docs/auth/auth0/provider.md @@ -34,6 +34,7 @@ auth: clientId: ${AUTH_AUTH0_CLIENT_ID} clientSecret: ${AUTH_AUTH0_CLIENT_SECRET} domain: ${AUTH_AUTH0_DOMAIN_ID} + audience: ${AUTH_AUTH0_AUDIENCE} ``` The Auth0 provider is a structure with three configuration keys: From 3152ca4b743c84395b62b9caa3ef2fbb448a0c51 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 14:25:20 +1000 Subject: [PATCH 36/64] run prettier Signed-off-by: Joe Patterson --- plugins/auth-backend/src/providers/auth0/provider.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/auth-backend/src/providers/auth0/provider.ts b/plugins/auth-backend/src/providers/auth0/provider.ts index 7f2310ab80..3321ff38af 100644 --- a/plugins/auth-backend/src/providers/auth0/provider.ts +++ b/plugins/auth-backend/src/providers/auth0/provider.ts @@ -47,7 +47,7 @@ import { ExtraVerificationParams } from 'passport-auth0'; type PrivateInfo = { refreshToken: string; - extraParams: ExtraVerificationParams, + extraParams: ExtraVerificationParams; }; export type Auth0AuthProviderOptions = OAuthProviderOptions & { @@ -98,7 +98,7 @@ export class Auth0AuthProvider implements OAuthHandlers { }, { refreshToken, - extraParams + extraParams, }, ); }, @@ -111,7 +111,7 @@ export class Auth0AuthProvider implements OAuthHandlers { prompt: 'consent', scope: req.scope, state: encodeState(req.state), - audience: this.audience as string + audience: this.audience as string, }); } @@ -120,7 +120,7 @@ export class Auth0AuthProvider implements OAuthHandlers { OAuthResult, PrivateInfo >(req, this._strategy, { - audience: this.audience as string + audience: this.audience as string, }); return { From d9e39544be21514f51ed89845257ceca998ae91f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 8 Sep 2022 09:39:49 +0200 Subject: [PATCH 37/64] start chipping away a bit at the yarn3 dependency warnings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/tame-socks-sniff.md | 6 ++++++ package.json | 1 + packages/app-defaults/package.json | 2 ++ packages/app/package.json | 1 + packages/test-utils/package.json | 1 + yarn.lock | 5 +++++ 6 files changed, 16 insertions(+) create mode 100644 .changeset/tame-socks-sniff.md diff --git a/.changeset/tame-socks-sniff.md b/.changeset/tame-socks-sniff.md new file mode 100644 index 0000000000..b6cca23380 --- /dev/null +++ b/.changeset/tame-socks-sniff.md @@ -0,0 +1,6 @@ +--- +'@backstage/app-defaults': patch +'@backstage/test-utils': patch +--- + +Add missing peer dependencies diff --git a/package.json b/package.json index 312d71858d..3c9e2743cb 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,7 @@ "concurrently": "^7.0.0", "cross-env": "^7.0.0", "e2e-test": "workspace:*", + "eslint": "^8.6.0", "eslint-plugin-notice": "^0.9.10", "fs-extra": "10.1.0", "husky": "^8.0.0", diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index e7e2b8fbf4..f59ab4b071 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -42,6 +42,8 @@ }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0", + "react-dom": "^16.13.1 || ^17.0.0", + "react-router": "6.0.0-beta.0 || ^6.3.0", "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { diff --git a/packages/app/package.json b/packages/app/package.json index 8052bf39d4..6ed4cadff0 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -89,6 +89,7 @@ "@types/jest": "^26.0.7", "@types/jquery": "^3.3.34", "@types/node": "^16.11.26", + "@types/react": "*", "@types/react-dom": "*", "@types/zen-observable": "^0.8.0", "cross-env": "^7.0.0", diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 1e99921b3c..d08a1f3e08 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -50,6 +50,7 @@ "peerDependencies": { "@types/react": "^16.13.1 || ^17.0.0", "react": "^16.13.1 || ^17.0.0", + "react-dom": "^16.13.1 || ^17.0.0", "react-router": "6.0.0-beta.0 || ^6.3.0", "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, diff --git a/yarn.lock b/yarn.lock index 1b47544c1d..ddb1e7f4d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2834,6 +2834,8 @@ __metadata: "@types/react": ^16.13.1 || ^17.0.0 peerDependencies: react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + react-router: 6.0.0-beta.0 || ^6.3.0 react-router-dom: 6.0.0-beta.0 || ^6.3.0 languageName: unknown linkType: soft @@ -7503,6 +7505,7 @@ __metadata: peerDependencies: "@types/react": ^16.13.1 || ^17.0.0 react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 react-router: 6.0.0-beta.0 || ^6.3.0 react-router-dom: 6.0.0-beta.0 || ^6.3.0 languageName: unknown @@ -22556,6 +22559,7 @@ __metadata: "@types/jest": ^26.0.7 "@types/jquery": ^3.3.34 "@types/node": ^16.11.26 + "@types/react": "*" "@types/react-dom": "*" "@types/zen-observable": ^0.8.0 cross-env: ^7.0.0 @@ -36131,6 +36135,7 @@ __metadata: concurrently: ^7.0.0 cross-env: ^7.0.0 e2e-test: "workspace:*" + eslint: ^8.6.0 eslint-plugin-notice: ^0.9.10 fs-extra: 10.1.0 husky: ^8.0.0 From 644b267bdeb1bcc3a469ef4ec98b3c714868e550 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 18:41:15 +1000 Subject: [PATCH 38/64] fix the session issue by copying okta Signed-off-by: Joe Patterson --- .../src/providers/auth0/provider.ts | 25 +++++++++++++++---- .../src/providers/auth0/strategy.ts | 4 ++- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/plugins/auth-backend/src/providers/auth0/provider.ts b/plugins/auth-backend/src/providers/auth0/provider.ts index 3321ff38af..3726fe10c0 100644 --- a/plugins/auth-backend/src/providers/auth0/provider.ts +++ b/plugins/auth-backend/src/providers/auth0/provider.ts @@ -43,11 +43,10 @@ import { AuthResolverContext, } from '../types'; import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; -import { ExtraVerificationParams } from 'passport-auth0'; +import { StateStore } from 'passport-oauth2'; type PrivateInfo = { refreshToken: string; - extraParams: ExtraVerificationParams; }; export type Auth0AuthProviderOptions = OAuthProviderOptions & { @@ -65,6 +64,23 @@ export class Auth0AuthProvider implements OAuthHandlers { private readonly resolverContext: AuthResolverContext; private readonly audience?: string; + /** + * Due to passport-auth0 forcing options.state = true, + * passport-oauth2 requires express-session to be installed + * so that the 'state' parameter of the oauth2 flow can be stored. + * This implementation of StateStore matches the NullStore found within + * passport-oauth2, which is the StateStore implementation used when options.state = false, + * allowing us to avoid using express-session in order to integrate with Okta. + */ + private store: StateStore = { + store(_req: express.Request, cb: any) { + cb(null, null); + }, + verify(_req: express.Request, _state: string, cb: any) { + cb(null, true); + }, + }; + constructor(options: Auth0AuthProviderOptions) { this.signInResolver = options.signInResolver; this.authHandler = options.authHandler; @@ -79,12 +95,12 @@ export class Auth0AuthProvider implements OAuthHandlers { // We need passReqToCallback set to false to get params, but there's // no matching type signature for that, so instead behold this beauty passReqToCallback: false as true, + store: this.store, }, ( accessToken: any, refreshToken: any, params: any, - extraParams: ExtraVerificationParams, fullProfile: passport.Profile, done: PassportDoneCallback, ) => { @@ -97,8 +113,7 @@ export class Auth0AuthProvider implements OAuthHandlers { params, }, { - refreshToken, - extraParams, + refreshToken }, ); }, diff --git a/plugins/auth-backend/src/providers/auth0/strategy.ts b/plugins/auth-backend/src/providers/auth0/strategy.ts index bef2836ab5..cf5b522ec5 100644 --- a/plugins/auth-backend/src/providers/auth0/strategy.ts +++ b/plugins/auth-backend/src/providers/auth0/strategy.ts @@ -14,6 +14,7 @@ * limitations under the License. */ import Auth0InternalStrategy from 'passport-auth0'; +import { StateStore } from 'passport-oauth2'; export interface Auth0StrategyOptionsWithRequest { clientID: string; @@ -21,12 +22,13 @@ export interface Auth0StrategyOptionsWithRequest { callbackURL: string; domain: string; passReqToCallback: true; + store: StateStore; } export default class Auth0Strategy extends Auth0InternalStrategy { constructor( options: Auth0StrategyOptionsWithRequest, - verify: Auth0InternalStrategy.VerifyFunctionWithRequest, + verify: Auth0InternalStrategy.VerifyFunction, ) { const optionsWithURLs = { ...options, From 3db53bbfa3b0cc32bc58cc1f8234e3e59dfe6d30 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 19:49:32 +1000 Subject: [PATCH 39/64] fix prettier error Signed-off-by: Joe Patterson --- plugins/auth-backend/src/providers/auth0/provider.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/auth-backend/src/providers/auth0/provider.ts b/plugins/auth-backend/src/providers/auth0/provider.ts index 3726fe10c0..5df37313f3 100644 --- a/plugins/auth-backend/src/providers/auth0/provider.ts +++ b/plugins/auth-backend/src/providers/auth0/provider.ts @@ -80,7 +80,7 @@ export class Auth0AuthProvider implements OAuthHandlers { cb(null, true); }, }; - + constructor(options: Auth0AuthProviderOptions) { this.signInResolver = options.signInResolver; this.authHandler = options.authHandler; @@ -113,7 +113,7 @@ export class Auth0AuthProvider implements OAuthHandlers { params, }, { - refreshToken + refreshToken, }, ); }, From 018b7ec1f3171dba66f7a787952c8fe07e1c1ad6 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 20:33:54 +1000 Subject: [PATCH 40/64] update provider for changes in review and update changeset message Signed-off-by: Joe Patterson --- .changeset/smart-sloths-search.md | 2 +- plugins/auth-backend/src/providers/auth0/provider.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.changeset/smart-sloths-search.md b/.changeset/smart-sloths-search.md index 4b69184fa6..fe7565844e 100644 --- a/.changeset/smart-sloths-search.md +++ b/.changeset/smart-sloths-search.md @@ -2,4 +2,4 @@ '@backstage/plugin-auth-backend': minor --- -Converts the auth0 to the passport-auth0 package and allows the addition of audience to auth0 connections this means that you can connect to the correct API to get permissions, access tokens and full profile +The auth0 integration is updated to use the passport-auth0 library. The configuration under auth.providers.auth0.* now supports an optional audience parameter; providing that allows you to connect to the correct API to get permissions, access tokens, and full profile information. diff --git a/plugins/auth-backend/src/providers/auth0/provider.ts b/plugins/auth-backend/src/providers/auth0/provider.ts index 5df37313f3..309fb0fc7b 100644 --- a/plugins/auth-backend/src/providers/auth0/provider.ts +++ b/plugins/auth-backend/src/providers/auth0/provider.ts @@ -70,7 +70,7 @@ export class Auth0AuthProvider implements OAuthHandlers { * so that the 'state' parameter of the oauth2 flow can be stored. * This implementation of StateStore matches the NullStore found within * passport-oauth2, which is the StateStore implementation used when options.state = false, - * allowing us to avoid using express-session in order to integrate with Okta. + * allowing us to avoid using express-session in order to integrate with auth0. */ private store: StateStore = { store(_req: express.Request, cb: any) { @@ -126,7 +126,7 @@ export class Auth0AuthProvider implements OAuthHandlers { prompt: 'consent', scope: req.scope, state: encodeState(req.state), - audience: this.audience as string, + ...(this.audience ? { audience: this.audience } : {}), }); } @@ -135,7 +135,7 @@ export class Auth0AuthProvider implements OAuthHandlers { OAuthResult, PrivateInfo >(req, this._strategy, { - audience: this.audience as string, + ...(this.audience ? { audience: this.audience } : {}), }); return { From 13ec891dd37dafc3cb7ee0d0910ceaf1d46f58e7 Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Thu, 8 Sep 2022 12:31:54 +0100 Subject: [PATCH 41/64] Correct URL spelling Signed-off-by: Alex Crome --- docs/integrations/github/github-apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/integrations/github/github-apps.md b/docs/integrations/github/github-apps.md index 38459acf75..b526c306e7 100644 --- a/docs/integrations/github/github-apps.md +++ b/docs/integrations/github/github-apps.md @@ -100,7 +100,7 @@ integrations: If you want to limit the GitHub app installations visible to backstage you may optionally include the `allowedInstallationOwners` option. If you configure multiple apps, specifying this will bring some small performance benefits -as backstage can more easily select which app to use for a url. +as backstage can more easily select which app to use for a URL. ```yaml appId: app id From dfe117438b31e2826ed331800b9914bcf94c0d32 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 21:32:50 +1000 Subject: [PATCH 42/64] update changeset for styling Signed-off-by: Joe Patterson --- .changeset/smart-sloths-search.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/smart-sloths-search.md b/.changeset/smart-sloths-search.md index fe7565844e..8028fe3e49 100644 --- a/.changeset/smart-sloths-search.md +++ b/.changeset/smart-sloths-search.md @@ -2,4 +2,4 @@ '@backstage/plugin-auth-backend': minor --- -The auth0 integration is updated to use the passport-auth0 library. The configuration under auth.providers.auth0.* now supports an optional audience parameter; providing that allows you to connect to the correct API to get permissions, access tokens, and full profile information. +The auth0 integration is updated to use the `passport-auth0` library. The configuration under `auth.providers.auth0.\*` now supports an optional `audience` parameter; providing that allows you to connect to the correct API to get permissions, access tokens, and full profile information. From 926aa67040a022c19927dfc850fc283b02bfc2a1 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 8 Sep 2022 13:42:11 +0200 Subject: [PATCH 43/64] app: bump roadie plugins Signed-off-by: Patrik Oldsberg --- packages/app/package.json | 8 +++--- yarn.lock | 54 +++++++++++++++++++-------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/packages/app/package.json b/packages/app/package.json index f53035b29f..e9c9632d81 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -66,10 +66,10 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "@octokit/rest": "^19.0.3", - "@roadiehq/backstage-plugin-buildkite": "^2.0.0", - "@roadiehq/backstage-plugin-github-insights": "^2.0.0", - "@roadiehq/backstage-plugin-github-pull-requests": "^2.0.0", - "@roadiehq/backstage-plugin-travis-ci": "^2.0.0", + "@roadiehq/backstage-plugin-buildkite": "^2.0.8", + "@roadiehq/backstage-plugin-github-insights": "^2.0.5", + "@roadiehq/backstage-plugin-github-pull-requests": "^2.2.7", + "@roadiehq/backstage-plugin-travis-ci": "^2.0.5", "history": "^5.0.0", "prop-types": "^15.7.2", "react": "^17.0.2", diff --git a/yarn.lock b/yarn.lock index 9b3a89c02b..e8c07a2c57 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12492,9 +12492,9 @@ __metadata: languageName: node linkType: hard -"@roadiehq/backstage-plugin-buildkite@npm:^2.0.0": - version: 2.0.7 - resolution: "@roadiehq/backstage-plugin-buildkite@npm:2.0.7" +"@roadiehq/backstage-plugin-buildkite@npm:^2.0.8": + version: 2.0.8 + resolution: "@roadiehq/backstage-plugin-buildkite@npm:2.0.8" dependencies: "@backstage/catalog-model": ^1.0.0 "@backstage/core-components": ^0.11.0 @@ -12506,19 +12506,19 @@ __metadata: "@material-ui/lab": 4.0.0-alpha.57 history: ^5.0.0 moment: ^2.29.1 - react-router: 6.0.0-beta.0 - react-router-dom: 6.0.0-beta.0 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 - checksum: cf7ba623c418d3ea7ea56c67b0fe10d6be7fe36531539c31e87b586897fcb9c3474a432239d7d6c01623ff6fc29fb4ae905564a9d2aae11e2ce54b8502cc1c29 + react-router: 6.0.0-beta.0 || ^6.3.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 589f89b53ff166ca9099ea8d2a5b6f96b87a3daf2e0cb115e94c8880639f69bc25a04cab2926cba0c99dc9bb70a159528c6f1fc10a9fba67e4fb3abe40bce0bf languageName: node linkType: hard -"@roadiehq/backstage-plugin-github-insights@npm:^2.0.0": - version: 2.0.4 - resolution: "@roadiehq/backstage-plugin-github-insights@npm:2.0.4" +"@roadiehq/backstage-plugin-github-insights@npm:^2.0.5": + version: 2.0.5 + resolution: "@roadiehq/backstage-plugin-github-insights@npm:2.0.5" dependencies: "@backstage/catalog-model": ^1.0.0 "@backstage/core-components": ^0.11.0 @@ -12534,19 +12534,19 @@ __metadata: "@octokit/types": ^6.14.2 history: ^5.0.0 immer: 9.0.7 - react-router: ^6.0.0-beta.0 react-use: ^17.2.4 zustand: 3.6.9 peerDependencies: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 - checksum: 2cc6eb992e78d7ce32ecce09996bda4eb34d4af3564ab54d180543d3a195a8b6e93f3137724569c49e645d44bfc00f3802285418f690393c456700668be01c25 + react-router: 6.0.0-beta.0 || ^6.3.0 + checksum: 37f99d0478dee6acbbafaf334a2eb1f75c251e96f8b10cead0d6f6dc203667dca51ded935ca704900251c01493b6287a66814f79245410a79ad66c843a3d4803 languageName: node linkType: hard -"@roadiehq/backstage-plugin-github-pull-requests@npm:^2.0.0": - version: 2.2.6 - resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.2.6" +"@roadiehq/backstage-plugin-github-pull-requests@npm:^2.2.7": + version: 2.2.7 + resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.2.7" dependencies: "@backstage/catalog-model": ^1.0.0 "@backstage/core-components": ^0.11.0 @@ -12564,18 +12564,18 @@ __metadata: moment: ^2.27.0 msw: ^0.39.2 node-fetch: ^2.6.1 - react-router: 6.0.0-beta.0 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 - checksum: 1b6d584a1e6cc668026d9bcdea7e5588ad22084412e5e2c52659aed9da0f90fa5edb81e8d90d2ff67b645e0fb96790b91cb0a1024f1682319c7fb4799b62baa8 + react-router: 6.0.0-beta.0 || ^6.3.0 + checksum: 2453f72c4b853e4d6f43cb27aaf27cbce5d122fbcdc71625b1e1493486acde551798524cc84f792d986397011ab458ba9b7e56eec34cde55660ccd69ea488cb0 languageName: node linkType: hard -"@roadiehq/backstage-plugin-travis-ci@npm:^2.0.0": - version: 2.0.4 - resolution: "@roadiehq/backstage-plugin-travis-ci@npm:2.0.4" +"@roadiehq/backstage-plugin-travis-ci@npm:^2.0.5": + version: 2.0.5 + resolution: "@roadiehq/backstage-plugin-travis-ci@npm:2.0.5" dependencies: "@backstage/catalog-model": ^1.0.0 "@backstage/core-components": ^0.11.0 @@ -12589,13 +12589,13 @@ __metadata: date-fns: ^2.18.0 history: ^5.0.0 moment: ^2.29.1 - react-router: 6.0.0-beta.0 - react-router-dom: 6.0.0-beta.0 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 - checksum: 1c0f3389f6415d23fe1926e3387433da7f3d22b4a237c3a690c894cfa4c281b21307a3ec51a2c48cfa115727cca182c15017ef1e58a2e9b893d89d06df6db35e + react-router: 6.0.0-beta.0 || ^6.3.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: bafcef69ca1b36585dbafcf8964d897942bd026f74dad81f372aed9ee1ce496a4821570f462b62b1b8d0cb86013615ad39e103827163bde8cf32037143b05c7a languageName: node linkType: hard @@ -22435,10 +22435,10 @@ __metadata: "@material-ui/lab": 4.0.0-alpha.57 "@octokit/rest": ^19.0.3 "@rjsf/core": ^3.2.1 - "@roadiehq/backstage-plugin-buildkite": ^2.0.0 - "@roadiehq/backstage-plugin-github-insights": ^2.0.0 - "@roadiehq/backstage-plugin-github-pull-requests": ^2.0.0 - "@roadiehq/backstage-plugin-travis-ci": ^2.0.0 + "@roadiehq/backstage-plugin-buildkite": ^2.0.8 + "@roadiehq/backstage-plugin-github-insights": ^2.0.5 + "@roadiehq/backstage-plugin-github-pull-requests": ^2.2.7 + "@roadiehq/backstage-plugin-travis-ci": ^2.0.5 "@testing-library/cypress": ^8.0.2 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -34556,7 +34556,7 @@ __metadata: languageName: node linkType: hard -"react-router-stable@npm:react-router@^6.3.0, react-router@npm:6.3.0, react-router@npm:^6.0.0-beta.0, react-router@npm:^6.3.0": +"react-router-stable@npm:react-router@^6.3.0, react-router@npm:6.3.0, react-router@npm:^6.3.0": version: 6.3.0 resolution: "react-router@npm:6.3.0" dependencies: From 298df14c06e5f1fac044c6453ec37708c5af774e Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Thu, 8 Sep 2022 22:11:00 +1000 Subject: [PATCH 44/64] add what is an audience to the markdown Signed-off-by: Joe Patterson --- .changeset/smart-sloths-search.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.changeset/smart-sloths-search.md b/.changeset/smart-sloths-search.md index 8028fe3e49..7404030515 100644 --- a/.changeset/smart-sloths-search.md +++ b/.changeset/smart-sloths-search.md @@ -3,3 +3,5 @@ --- The auth0 integration is updated to use the `passport-auth0` library. The configuration under `auth.providers.auth0.\*` now supports an optional `audience` parameter; providing that allows you to connect to the correct API to get permissions, access tokens, and full profile information. + +[What is an Audience](https://community.auth0.com/t/what-is-the-audience/71414) \ No newline at end of file From 2a46e3701e291ac499997ecae9bc2d6fbf81290d Mon Sep 17 00:00:00 2001 From: Taras Date: Thu, 8 Sep 2022 08:42:07 -0400 Subject: [PATCH 45/64] Integrated feedback from @freben Signed-off-by: Taras --- .changeset/large-books-deny.md | 2 +- packages/catalog-client/api-report.md | 12 ++++++++---- packages/catalog-client/src/CatalogClient.ts | 9 ++++++--- packages/catalog-client/src/types/api.ts | 7 +++---- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/.changeset/large-books-deny.md b/.changeset/large-books-deny.md index 51d2ce38c0..c88d391639 100644 --- a/.changeset/large-books-deny.md +++ b/.changeset/large-books-deny.md @@ -2,4 +2,4 @@ '@backstage/catalog-client': minor --- -Adding validateEntity method that calls /validate-entity endpoint +Adding `validateEntity` method that calls `/validate-entity` endpoint. diff --git a/packages/catalog-client/api-report.md b/packages/catalog-client/api-report.md index 1d66b469a9..0ad77ce39c 100644 --- a/packages/catalog-client/api-report.md +++ b/packages/catalog-client/api-report.md @@ -209,8 +209,12 @@ type Location_2 = { export { Location_2 as Location }; // @public -export type ValidateEntityResponse = { - valid: boolean; - errors?: SerializedError[]; -}; +export type ValidateEntityResponse = + | { + valid: true; + } + | { + valid: false; + errors: SerializedError[]; + }; ``` diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts index bbc9b0b62d..f2b4186bfb 100644 --- a/packages/catalog-client/src/CatalogClient.ts +++ b/packages/catalog-client/src/CatalogClient.ts @@ -21,7 +21,7 @@ import { stringifyEntityRef, stringifyLocationRef, } from '@backstage/catalog-model'; -import { ResponseError, SerializedError } from '@backstage/errors'; +import { ResponseError } from '@backstage/errors'; import crossFetch from 'cross-fetch'; import { CATALOG_FILTER_EXISTS, @@ -377,11 +377,14 @@ export class CatalogClient implements CatalogApi { if (response.ok) { return { valid: true, - errors: undefined, }; } - const { errors } = (await response.json()) as { errors: SerializedError[] }; + if (response.status !== 400) { + throw await ResponseError.fromResponse(response); + } + + const { errors = [] } = await response.json(); return { valid: false, diff --git a/packages/catalog-client/src/types/api.ts b/packages/catalog-client/src/types/api.ts index d66e2dfaf9..f483c3454c 100644 --- a/packages/catalog-client/src/types/api.ts +++ b/packages/catalog-client/src/types/api.ts @@ -275,10 +275,9 @@ export type AddLocationResponse = { * * @public */ -export type ValidateEntityResponse = { - valid: boolean; - errors?: SerializedError[]; -}; +export type ValidateEntityResponse = + | { valid: true } + | { valid: false; errors: SerializedError[] }; /** * A client for interacting with the Backstage software catalog through its API. From 321a1b2d3609b0295bb22ae614810b0221580506 Mon Sep 17 00:00:00 2001 From: Simone Corsi Date: Thu, 8 Sep 2022 15:49:31 +0200 Subject: [PATCH 46/64] docs(backstage-plugin-ldap-auth): reviewed labels Signed-off-by: Simone Corsi --- microsite/data/plugins/backstage-plugin-ldap-auth.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/microsite/data/plugins/backstage-plugin-ldap-auth.yml b/microsite/data/plugins/backstage-plugin-ldap-auth.yml index ca91b9bd30..1800f7370c 100644 --- a/microsite/data/plugins/backstage-plugin-ldap-auth.yml +++ b/microsite/data/plugins/backstage-plugin-ldap-auth.yml @@ -1,9 +1,9 @@ --- -title: Backstage Plugin LDAP Auth +title: LDAP Auth author: ImmobiliareLabs authorUrl: https://github.com/immobiliare category: Authentication -description: Backstage plugin to authenticate users to an external LDAP server +description: Authenticate users to an external LDAP server documentation: https://github.com/immobiliare/backstage-plugin-ldap-auth/blob/main/README.md iconUrl: https://avatars.githubusercontent.com/u/10090828 npmPackageName: '@immobiliarelabs/backstage-plugin-ldap-auth' From afcafda62064363d13897f9839009de065df1df8 Mon Sep 17 00:00:00 2001 From: Taras Date: Thu, 8 Sep 2022 11:20:43 -0400 Subject: [PATCH 47/64] Fix the test Signed-off-by: Taras --- packages/catalog-client/src/CatalogClient.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index 9427d78f5c..263bb8971d 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -354,7 +354,6 @@ describe('CatalogClient', () => { ), ).toMatchObject({ valid: true, - errors: undefined, }); }); }); From c5cf37026ec31e83364e3c655e2594588892733e Mon Sep 17 00:00:00 2001 From: Taras Date: Thu, 8 Sep 2022 11:55:08 -0400 Subject: [PATCH 48/64] Add test for unexpected error Signed-off-by: Taras --- .../catalog-client/src/CatalogClient.test.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts index 263bb8971d..6c9c68efa2 100644 --- a/packages/catalog-client/src/CatalogClient.test.ts +++ b/packages/catalog-client/src/CatalogClient.test.ts @@ -356,5 +356,26 @@ describe('CatalogClient', () => { valid: true, }); }); + + it('throws unexpected error', async () => { + server.use( + rest.post(`${mockBaseUrl}/validate-entity`, (_req, res, ctx) => { + return res(ctx.status(500), ctx.json({})); + }), + ); + + await expect(() => + client.validateEntity( + { + apiVersion: '1', + kind: 'Component', + metadata: { + name: 'good', + }, + }, + 'http://example.com', + ), + ).rejects.toThrow(/Request failed with 500 Error/); + }); }); }); From a7e82c9b017424f4adeab90fd3962b11fc788979 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 8 Sep 2022 13:01:46 +0200 Subject: [PATCH 49/64] cli: update versions:bump to work with Yarn 3 Signed-off-by: Patrik Oldsberg --- .changeset/weak-radios-sin.md | 5 + .../cli/src/commands/versions/bump.test.ts | 125 ++++-------------- packages/cli/src/lib/run.ts | 2 +- .../cli/src/lib/versioning/packages.test.ts | 60 +++++++-- packages/cli/src/lib/versioning/packages.ts | 51 +++++-- packages/cli/src/lib/yarn.ts | 49 +++++++ 6 files changed, 173 insertions(+), 119 deletions(-) create mode 100644 .changeset/weak-radios-sin.md create mode 100644 packages/cli/src/lib/yarn.ts diff --git a/.changeset/weak-radios-sin.md b/.changeset/weak-radios-sin.md new file mode 100644 index 0000000000..e2aac006d4 --- /dev/null +++ b/.changeset/weak-radios-sin.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Updated `versions:bump` command to be compatible with Yarn 3. diff --git a/packages/cli/src/commands/versions/bump.test.ts b/packages/cli/src/commands/versions/bump.test.ts index a127d15953..25682a4cd4 100644 --- a/packages/cli/src/commands/versions/bump.test.ts +++ b/packages/cli/src/commands/versions/bump.test.ts @@ -28,6 +28,7 @@ import { import { YarnInfoInspectData } from '../../lib/versioning/packages'; import { setupServer } from 'msw/node'; import { rest } from 'msw'; +import { NotFoundError } from '@backstage/errors'; // Remove log coloring to simplify log matching jest.mock('chalk', () => ({ @@ -54,7 +55,15 @@ jest.mock('ora', () => ({ jest.mock('../../lib/run', () => { return { run: jest.fn(), - runPlain: jest.fn(), + }; +}); + +const mockFetchPackageInfo = jest.fn(); +jest.mock('../../lib/versioning/packages', () => { + const actual = jest.requireActual('../../lib/versioning/packages'); + return { + ...actual, + fetchPackageInfo: (name: string) => mockFetchPackageInfo(name), }; }); @@ -105,6 +114,14 @@ const lockfileMockResult = `${HEADER} `; describe('bump', () => { + beforeEach(() => { + mockFetchPackageInfo.mockImplementation(async name => ({ + name: name, + 'dist-tags': { + latest: REGISTRY_VERSIONS[name], + }, + })); + }); afterEach(() => { mockFs.restore(); jest.resetAllMocks(); @@ -138,17 +155,6 @@ describe('bump', () => { jest .spyOn(paths, 'resolveTargetRoot') .mockImplementation((...path) => resolvePath('/', ...path)); - jest.spyOn(runObj, 'runPlain').mockImplementation(async (...[, , , name]) => - JSON.stringify({ - type: 'inspect', - data: { - name: name, - 'dist-tags': { - latest: REGISTRY_VERSIONS[name], - }, - }, - }), - ); jest.spyOn(runObj, 'run').mockResolvedValue(undefined); worker.use( rest.get( @@ -184,19 +190,10 @@ describe('bump', () => { 'Version bump complete!', ]); - expect(runObj.runPlain).toHaveBeenCalledTimes(3); - expect(runObj.runPlain).toHaveBeenCalledWith( - 'yarn', - 'info', - '--json', - '@backstage/core', - ); - expect(runObj.runPlain).toHaveBeenCalledWith( - 'yarn', - 'info', - '--json', - '@backstage/theme', - ); + expect(mockFetchPackageInfo).toHaveBeenCalledTimes(3); + expect(mockFetchPackageInfo).toHaveBeenCalledWith('@backstage/core'); + expect(mockFetchPackageInfo).toHaveBeenCalledWith('@backstage/core-api'); + expect(mockFetchPackageInfo).toHaveBeenCalledWith('@backstage/theme'); expect(runObj.run).toHaveBeenCalledTimes(1); expect(runObj.run).toHaveBeenCalledWith( @@ -251,17 +248,6 @@ describe('bump', () => { jest .spyOn(paths, 'resolveTargetRoot') .mockImplementation((...path) => resolvePath('/', ...path)); - jest.spyOn(runObj, 'runPlain').mockImplementation(async (...[, , , name]) => - JSON.stringify({ - type: 'inspect', - data: { - name: name, - 'dist-tags': { - latest: REGISTRY_VERSIONS[name], - }, - }, - }), - ); jest.spyOn(runObj, 'run').mockResolvedValue(undefined); worker.use( rest.get( @@ -309,19 +295,9 @@ describe('bump', () => { 'Version bump complete!', ]); - expect(runObj.runPlain).toHaveBeenCalledTimes(2); - expect(runObj.runPlain).toHaveBeenCalledWith( - 'yarn', - 'info', - '--json', - '@backstage/core', - ); - expect(runObj.runPlain).not.toHaveBeenCalledWith( - 'yarn', - 'info', - '--json', - '@backstage/theme', - ); + expect(mockFetchPackageInfo).toHaveBeenCalledTimes(2); + expect(mockFetchPackageInfo).toHaveBeenCalledWith('@backstage/core'); + expect(mockFetchPackageInfo).not.toHaveBeenCalledWith('@backstage/theme'); expect(runObj.run).toHaveBeenCalledTimes(1); expect(runObj.run).toHaveBeenCalledWith( @@ -372,17 +348,6 @@ describe('bump', () => { }, }), }); - jest.spyOn(runObj, 'runPlain').mockImplementation(async (...[, , , name]) => - JSON.stringify({ - type: 'inspect', - data: { - name: name, - 'dist-tags': { - latest: REGISTRY_VERSIONS[name], - }, - }, - }), - ); jest .spyOn(paths, 'resolveTargetRoot') .mockImplementation((...path) => resolvePath('/', ...path)); @@ -480,17 +445,6 @@ describe('bump', () => { jest .spyOn(paths, 'resolveTargetRoot') .mockImplementation((...path) => resolvePath('/', ...path)); - jest.spyOn(runObj, 'runPlain').mockImplementation(async (...[, , , name]) => - JSON.stringify({ - type: 'inspect', - data: { - name: name, - 'dist-tags': { - latest: REGISTRY_VERSIONS[name], - }, - }, - }), - ); jest.spyOn(runObj, 'run').mockResolvedValue(undefined); worker.use( rest.get( @@ -614,17 +568,6 @@ describe('bump', () => { jest .spyOn(paths, 'resolveTargetRoot') .mockImplementation((...path) => resolvePath('/', ...path)); - jest.spyOn(runObj, 'runPlain').mockImplementation(async (...[, , , name]) => - JSON.stringify({ - type: 'inspect', - data: { - name: name, - 'dist-tags': { - latest: REGISTRY_VERSIONS[name], - }, - }, - }), - ); jest.spyOn(runObj, 'run').mockResolvedValue(undefined); worker.use( rest.get( @@ -672,19 +615,9 @@ describe('bump', () => { 'Version bump complete!', ]); - expect(runObj.runPlain).toHaveBeenCalledTimes(5); - expect(runObj.runPlain).toHaveBeenCalledWith( - 'yarn', - 'info', - '--json', - '@backstage/core', - ); - expect(runObj.runPlain).toHaveBeenCalledWith( - 'yarn', - 'info', - '--json', - '@backstage/theme', - ); + expect(mockFetchPackageInfo).toHaveBeenCalledTimes(5); + expect(mockFetchPackageInfo).toHaveBeenCalledWith('@backstage/core'); + expect(mockFetchPackageInfo).toHaveBeenCalledWith('@backstage/theme'); expect(runObj.run).toHaveBeenCalledTimes(1); expect(runObj.run).toHaveBeenCalledWith( @@ -743,7 +676,7 @@ describe('bump', () => { jest .spyOn(paths, 'resolveTargetRoot') .mockImplementation((...path) => resolvePath('/', ...path)); - jest.spyOn(runObj, 'runPlain').mockImplementation(async () => ''); + mockFetchPackageInfo.mockRejectedValue(new NotFoundError('Nope')); jest.spyOn(runObj, 'run').mockResolvedValue(undefined); worker.use( rest.get( diff --git a/packages/cli/src/lib/run.ts b/packages/cli/src/lib/run.ts index 4efb791c30..1ef25cae62 100644 --- a/packages/cli/src/lib/run.ts +++ b/packages/cli/src/lib/run.ts @@ -25,7 +25,7 @@ import { promisify } from 'util'; import { LogFunc } from './logging'; import { assertError, ForwardedError } from '@backstage/errors'; -const execFile = promisify(execFileCb); +export const execFile = promisify(execFileCb); type SpawnOptionsPartialEnv = Omit & { env?: Partial; diff --git a/packages/cli/src/lib/versioning/packages.test.ts b/packages/cli/src/lib/versioning/packages.test.ts index 975be74abd..5a255532f9 100644 --- a/packages/cli/src/lib/versioning/packages.test.ts +++ b/packages/cli/src/lib/versioning/packages.test.ts @@ -17,13 +17,20 @@ import mockFs from 'mock-fs'; import path from 'path'; import * as runObj from '../run'; +import * as yarn from '../yarn'; import { fetchPackageInfo, mapDependencies } from './packages'; import { NotFoundError } from '../errors'; jest.mock('../run', () => { return { run: jest.fn(), - runPlain: jest.fn(), + execFile: jest.fn(), + }; +}); + +jest.mock('../yarn', () => { + return { + detectYarnVersion: jest.fn(), }; }); @@ -32,24 +39,55 @@ describe('fetchPackageInfo', () => { jest.resetAllMocks(); }); - it('should forward info', async () => { - jest - .spyOn(runObj, 'runPlain') - .mockResolvedValue(`{"type":"inspect","data":{"the":"data"}}`); + it('should forward info for yarn classic', async () => { + jest.spyOn(runObj, 'execFile').mockResolvedValue({ + stdout: `{"type":"inspect","data":{"the":"data"}}`, + stderr: '', + }); + jest.spyOn(yarn, 'detectYarnVersion').mockResolvedValue('classic'); await expect(fetchPackageInfo('my-package')).resolves.toEqual({ the: 'data', }); - expect(runObj.runPlain).toHaveBeenCalledWith( + expect(runObj.execFile).toHaveBeenCalledWith( 'yarn', - 'info', - '--json', - 'my-package', + ['info', '--json', 'my-package'], + { shell: true }, ); }); - it('should throw if no info', async () => { - jest.spyOn(runObj, 'runPlain').mockResolvedValue(''); + it('should forward info for yarn berry', async () => { + jest + .spyOn(runObj, 'execFile') + .mockResolvedValue({ stdout: `{"the":"data"}`, stderr: '' }); + jest.spyOn(yarn, 'detectYarnVersion').mockResolvedValue('berry'); + + await expect(fetchPackageInfo('my-package')).resolves.toEqual({ + the: 'data', + }); + expect(runObj.execFile).toHaveBeenCalledWith( + 'yarn', + ['npm', 'info', '--json', 'my-package'], + { shell: true }, + ); + }); + + it('should throw if no info with yarn classic', async () => { + jest + .spyOn(runObj, 'execFile') + .mockResolvedValue({ stdout: '', stderr: '' }); + jest.spyOn(yarn, 'detectYarnVersion').mockResolvedValue('classic'); + + await expect(fetchPackageInfo('my-package')).rejects.toThrow( + new NotFoundError(`No package information found for package my-package`), + ); + }); + + it('should throw if no info with yarn berry', async () => { + jest + .spyOn(runObj, 'execFile') + .mockRejectedValue({ stdout: 'bla bla bla Response Code: 404 bla bla' }); + jest.spyOn(yarn, 'detectYarnVersion').mockResolvedValue('berry'); await expect(fetchPackageInfo('my-package')).rejects.toThrow( new NotFoundError(`No package information found for package my-package`), diff --git a/packages/cli/src/lib/versioning/packages.ts b/packages/cli/src/lib/versioning/packages.ts index ed7266a692..70229b6fed 100644 --- a/packages/cli/src/lib/versioning/packages.ts +++ b/packages/cli/src/lib/versioning/packages.ts @@ -13,10 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import minimatch from 'minimatch'; import { getPackages } from '@manypkg/get-packages'; -import { runPlain } from '../../lib/run'; import { NotFoundError } from '../errors'; +import { detectYarnVersion } from '../yarn'; +import { execFile } from '../run'; const DEP_TYPES = [ 'dependencies', @@ -48,18 +50,45 @@ type PkgVersionInfo = { export async function fetchPackageInfo( name: string, ): Promise { - const output = await runPlain('yarn', 'info', '--json', name); + const yarnVersion = await detectYarnVersion(); - if (!output) { - throw new NotFoundError(`No package information found for package ${name}`); + const cmd = yarnVersion === 'classic' ? ['info'] : ['npm', 'info']; + try { + const { stdout: output } = await execFile( + 'yarn', + [...cmd, '--json', name], + { shell: true }, + ); + + if (!output) { + throw new NotFoundError( + `No package information found for package ${name}`, + ); + } + + if (yarnVersion === 'berry') { + return JSON.parse(output) as YarnInfoInspectData; + } + + const info = JSON.parse(output) as YarnInfo; + if (info.type !== 'inspect') { + throw new Error(`Received unknown yarn info for ${name}, ${output}`); + } + + return info.data as YarnInfoInspectData; + } catch (error) { + if (yarnVersion === 'classic') { + throw error; + } + + if (error?.stdout.includes('Response Code: 404')) { + throw new NotFoundError( + `No package information found for package ${name}`, + ); + } + + throw error; } - - const info = JSON.parse(output) as YarnInfo; - if (info.type !== 'inspect') { - throw new Error(`Received unknown yarn info for ${name}, ${output}`); - } - - return info.data as YarnInfoInspectData; } /** Map all dependencies in the repo as dependency => dependents */ diff --git a/packages/cli/src/lib/yarn.ts b/packages/cli/src/lib/yarn.ts new file mode 100644 index 0000000000..b6c0383bc2 --- /dev/null +++ b/packages/cli/src/lib/yarn.ts @@ -0,0 +1,49 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { assertError, ForwardedError } from '@backstage/errors'; +import { execFile as execFileCb } from 'child_process'; +import { promisify } from 'util'; + +const execFile = promisify(execFileCb); + +const versions = new Map>(); + +export function detectYarnVersion(dir?: string): Promise<'classic' | 'berry'> { + const cwd = dir ?? process.cwd(); + if (versions.has(cwd)) { + return versions.get(cwd)!; + } + + const promise = Promise.resolve().then(async () => { + try { + const { stdout } = await execFile('yarn', ['--version'], { + shell: true, + cwd, + }); + return stdout.trim().startsWith('1.') ? 'classic' : 'berry'; + } catch (error) { + assertError(error); + if ('stderr' in error) { + process.stderr.write(error.stderr as Buffer); + } + throw new ForwardedError('Failed to determine yarn version', error); + } + }); + + versions.set(cwd, promise); + return promise; +} From f95ceb273751456e2d2f8e59272d689929f13dec Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Thu, 8 Sep 2022 17:36:28 +0100 Subject: [PATCH 50/64] PR Feedback Signed-off-by: Alex Crome --- .changeset/sweet-grapes-explain.md | 2 +- .../SingleInstanceGithubCredentialsProvider.ts | 18 +++++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.changeset/sweet-grapes-explain.md b/.changeset/sweet-grapes-explain.md index 3b75b8849d..014fbb3d41 100644 --- a/.changeset/sweet-grapes-explain.md +++ b/.changeset/sweet-grapes-explain.md @@ -1,5 +1,5 @@ --- -'@backstage/integration': minor +'@backstage/integration': patch --- Improved caching around github app tokens. diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts index aeaa0f5e04..02f050f69f 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts @@ -44,22 +44,26 @@ class Cache { repo: string | undefined, supplier: () => Promise, ): Promise<{ accessToken: string }> { - let ownerData = this.tokenCache.get(owner); + let existingInstallationData = this.tokenCache.get(owner); - if (!ownerData || this.isExpired(ownerData.expiresAt)) { - ownerData = await supplier(); + if ( + !existingInstallationData || + this.isExpired(existingInstallationData.expiresAt) + ) { + existingInstallationData = await supplier(); // Allow 10 minutes grace to account for clock skew - ownerData.expiresAt = ownerData.expiresAt.minus({ minutes: 10 }); - this.tokenCache.set(owner, ownerData); + existingInstallationData.expiresAt = + existingInstallationData.expiresAt.minus({ minutes: 10 }); + this.tokenCache.set(owner, existingInstallationData); } - if (!this.appliesToRepo(ownerData, repo)) { + if (!this.appliesToRepo(existingInstallationData, repo)) { throw new Error( `The Backstage GitHub application used in the ${owner} organization does not have access to a repository with the name ${repo}`, ); } - return { accessToken: ownerData.token }; + return { accessToken: existingInstallationData.token }; } private isExpired = (date: DateTime) => DateTime.local() > date; From a68c0b3f94bd5d1a2b64be6110627b8c908aa479 Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Thu, 8 Sep 2022 18:41:09 +0100 Subject: [PATCH 51/64] Fix potentially flakey expiration test by making sure the record has less than 10 mins remaining, rather than exactly 10 mins Signed-off-by: Alex Crome --- .../github/SingleInstanceGithubCredentialsProvider.test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts index d9b2a4e749..a1544fbc68 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts @@ -434,7 +434,7 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { ); }); - it('should expire access token cache 10 mins before token expires', async () => { + it('should expire access token cache when less than 10 mins before token expires', async () => { octokit.apps.listInstallations.mockReturnValue({ headers: { etag: '123', @@ -452,7 +452,9 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { octokit.apps.createInstallationAccessToken.mockReturnValue({ data: { - expires_at: DateTime.local().plus({ minutes: 10 }).toString(), + expires_at: DateTime.local() + .plus({ minutes: 9, seconds: 59, milliseconds: 999 }) + .toString(), token: 'secret_token', }, } as RestEndpointMethodTypes['apps']['createInstallationAccessToken']['response']); From 7f7c7f2033dd0b1aec46aa225e52c27797aba871 Mon Sep 17 00:00:00 2001 From: Joe Patterson Date: Fri, 9 Sep 2022 09:56:42 +1000 Subject: [PATCH 52/64] prettier again on changeset Signed-off-by: Joe Patterson --- .changeset/smart-sloths-search.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/smart-sloths-search.md b/.changeset/smart-sloths-search.md index 7404030515..542928debc 100644 --- a/.changeset/smart-sloths-search.md +++ b/.changeset/smart-sloths-search.md @@ -4,4 +4,4 @@ The auth0 integration is updated to use the `passport-auth0` library. The configuration under `auth.providers.auth0.\*` now supports an optional `audience` parameter; providing that allows you to connect to the correct API to get permissions, access tokens, and full profile information. -[What is an Audience](https://community.auth0.com/t/what-is-the-audience/71414) \ No newline at end of file +[What is an Audience](https://community.auth0.com/t/what-is-the-audience/71414) From b55966c460aabc2ddb23d1a12e19786bd32abb8b Mon Sep 17 00:00:00 2001 From: mufaddal motiwala Date: Fri, 9 Sep 2022 11:03:45 +0530 Subject: [PATCH 53/64] fix props Signed-off-by: mufaddal motiwala --- .../src/components/TaskPage/TaskErrors.tsx | 20 +++++++++++-------- .../src/components/TaskPage/TaskPage.tsx | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx b/plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx index 3d82bfc5a3..4f8ce974c8 100644 --- a/plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx +++ b/plugins/scaffolder/src/components/TaskPage/TaskErrors.tsx @@ -14,21 +14,25 @@ * limitations under the License. */ import { Box } from '@material-ui/core'; -import React from 'react'; +import React, { useEffect, useRef } from 'react'; import { DismissableBanner } from '@backstage/core-components'; -import { TaskStream } from '../hooks/useEventStream'; -type TaskPageLinksProps = { - taskStream: TaskStream; +type TaskErrorsProps = { + error?: Error; }; -export const TaskErrors = ({ taskStream }: TaskPageLinksProps) => { - return taskStream.error ? ( +export const TaskErrors = ({ error }: TaskErrorsProps) => { + const id = useRef(''); + + useEffect(() => { + id.current = String(Math.random()); + }, [error]); + return error ? ( ) : null; diff --git a/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx b/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx index 4fa5968216..0267c58fe1 100644 --- a/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx +++ b/plugins/scaffolder/src/components/TaskPage/TaskPage.tsx @@ -357,7 +357,7 @@ export const TaskPage = ({ loadingText }: TaskPageProps) => { {!currentStepId && }

    - +
    From 4f88489770084e22f0820336d77b7b03c83a0fdf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 06:59:43 +0000 Subject: [PATCH 54/64] chore(deps): update dependency canvas to v2.10.1 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c1728d70b0..e0c57482ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18131,14 +18131,14 @@ __metadata: linkType: hard "canvas@npm:^2.6.1": - version: 2.10.0 - resolution: "canvas@npm:2.10.0" + version: 2.10.1 + resolution: "canvas@npm:2.10.1" dependencies: "@mapbox/node-pre-gyp": ^1.0.0 nan: ^2.15.0 node-gyp: latest simple-get: ^3.0.3 - checksum: bed0f61d51a6f5d721742776e2dd1203ad6ca2475e1177cfb7a6f9ed1d313372ab8b4aa5a6780c85d35e533e2400cb5f291be1a1d35a84fc71d6372cd4cdbc61 + checksum: 29b162a59df8c63e5591cae62711ab3cc3b0a078f260b39b4594b51c5bcb9baa597eff40b52f25bd788aceb81756a41097c2dd0c01cbc17ae4a15e873da44cdf languageName: node linkType: hard From 8ace73b579159a2077accd57197c07e5a4d31f1c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 07:00:42 +0000 Subject: [PATCH 55/64] chore(deps): update dependency puppeteer to v17.1.3 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c1728d70b0..b1f3cc567f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -33955,8 +33955,8 @@ __metadata: linkType: hard "puppeteer@npm:^17.0.0": - version: 17.1.1 - resolution: "puppeteer@npm:17.1.1" + version: 17.1.3 + resolution: "puppeteer@npm:17.1.3" dependencies: cross-fetch: 3.1.5 debug: 4.3.4 @@ -33969,7 +33969,7 @@ __metadata: tar-fs: 2.1.1 unbzip2-stream: 1.4.3 ws: 8.8.1 - checksum: 064537270ea5745186c87888252395bb0d06d3ae73b02a617856329501d21e2ce5d05c1ee307dc2e851f7d45a2185b9cddd44ec54106ffcba51e7a622bb6faeb + checksum: b4518956c661df4c37690d46b9c6744d42d59d01fe3764938b4b3af8de4c94ef11a9dfa6bc261798f5e5490c6dce4d4f555f05d42c735249683da3017faf4585 languageName: node linkType: hard From b0f96f085f0ab3b22e0a3b348a59e47a4d8bdb33 Mon Sep 17 00:00:00 2001 From: Martin Ehrnst Date: Fri, 9 Sep 2022 12:59:31 +0200 Subject: [PATCH 56/64] Update ADOPTERS.md add vipps to adopters Signed-off-by: Martin Ehrnst --- ADOPTERS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ADOPTERS.md b/ADOPTERS.md index 527a4d7a98..6ea4d5dacb 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -211,3 +211,5 @@ _You can do this by using the [Adopter form](https://form.typeform.com/to/zcOaKi | [Stone](https://stone.com.br/) | [Levy Fialho](mailto:lfialho@stone.com.br) | We're using Backstage as our Credit Team Developer Portal and microservices catalog for mapping ownership. We are also using mkdocs for microservices documentation. | | [REI](https://www.rei.com/) | [Jen Evans](mailto:jenevan@rei.com) | Developer portal focused on an enterprise-wide app catalog to track ownership and surface APIs. | | [next](https://next.me) | [Devan Jeronimo Nack](mailto:devan.j.nack@next.me), [Everson Crusara](mailto:everson.crusara@next.me), [Thiago Carneiro da Silva](mailto:thiagoc.silva@next.me) | We are building our Internal Developer Portal using Backstage to improve developer's experience by centralizing our services catalog and identifing microservices' ownership. Also we are going to improve Technical Documentation and speed up development using software templates to help squads in creation and deployment of new microservices. | +| [Vipps](https://vipps.no) | [Martin Ehrnst](https://github.com/ehrnst) | Vipps use backstage for our service catalog, documentation, and developer portal. Using templates we are able to simplify the developer experience when deploying new services to our platform. | + From d527faf591d4ebddb1f9fad143ab61542b5514df Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 11:18:42 +0000 Subject: [PATCH 57/64] fix(deps): update dependency @google-cloud/container to v4.1.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b1f3cc567f..a2b69d78f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8093,11 +8093,11 @@ __metadata: linkType: hard "@google-cloud/container@npm:^4.0.0": - version: 4.1.1 - resolution: "@google-cloud/container@npm:4.1.1" + version: 4.1.2 + resolution: "@google-cloud/container@npm:4.1.2" dependencies: google-gax: ^3.3.0 - checksum: 85c124163be7300c57b1f35323ea48a25c398bf072497a3e4a5d9117fe44547a63071dced681dbe8d2bd1a0997588d36c2428900184b030daf29b0f87ec7b09c + checksum: deb1b88732b2dd3dba5f7bea48fd672636fedb0d3bd894e29c8d097e087de3bfd30b53668e3686f8d879b3312be2e86d5a65cd1ba6bf630ba1c2bbe892e8bbb8 languageName: node linkType: hard From 8e598a1bc1576fb01c5623a148b9aaf0b5bb308d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 14:46:45 +0000 Subject: [PATCH 58/64] fix(deps): update dependency @yarnpkg/parsers to v3.0.0-rc.18 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index f4c0b81d8c..d50db888eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15870,12 +15870,12 @@ __metadata: linkType: hard "@yarnpkg/parsers@npm:^3.0.0-rc.4": - version: 3.0.0-rc.15 - resolution: "@yarnpkg/parsers@npm:3.0.0-rc.15" + version: 3.0.0-rc.18 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.18" dependencies: js-yaml: ^3.10.0 tslib: ^2.4.0 - checksum: 2c6044479b1a8b5716d1536fce306c3c1f1989e00be5b7072255d0378d8679eba3dd6e3a854e75d8f675ea98a9612e5fbb1c3aac973860e6d5089658d3abf1d7 + checksum: 73cc59cb2349ce78a376d6ad7953117360de9aff866f42329a3e957ebabbbd4cbd91bfe79e30aa3bf07f126af66b72c00a7fc733724ac93d7f46d420ba81beec languageName: node linkType: hard From 409f999595f128ef803cf05fb02d5f5bebd48c09 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 15:38:06 +0000 Subject: [PATCH 59/64] fix(deps): update dependency core-js to v3.25.1 Signed-off-by: Renovate Bot --- yarn.lock | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index d50db888eb..701a3f3229 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19450,13 +19450,20 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^3.4.1, core-js@npm:^3.6.5": +"core-js@npm:^3.4.1": version: 3.25.0 resolution: "core-js@npm:3.25.0" checksum: 5a72740bf5babaf2e6203da4c0e831a0b97c3fe6f21b4c1aa8601d3a927660a22128dd8f0e86ce84778c4e5372ab0fc03c7944afa7e215c7fb13b2c79d5d5504 languageName: node linkType: hard +"core-js@npm:^3.6.5": + version: 3.25.1 + resolution: "core-js@npm:3.25.1" + checksum: bfacb078e790913841e2d5008b9b6705ae56ed23f83c7f0ae08d330d874561012611089d53b71520105234ed0abba36f28d91b391514a16541a8c8d98c464239 + languageName: node + linkType: hard + "core-util-is@npm:1.0.2, core-util-is@npm:~1.0.0": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" From c703978d53f03b8ae0c682d99b3f624f2dd0e109 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 15:38:57 +0000 Subject: [PATCH 60/64] fix(deps): update dependency eslint-plugin-jest to v27.0.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d50db888eb..93c0e08f49 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21992,8 +21992,8 @@ __metadata: linkType: hard "eslint-plugin-jest@npm:^27.0.0": - version: 27.0.1 - resolution: "eslint-plugin-jest@npm:27.0.1" + version: 27.0.2 + resolution: "eslint-plugin-jest@npm:27.0.2" dependencies: "@typescript-eslint/utils": ^5.10.0 peerDependencies: @@ -22004,7 +22004,7 @@ __metadata: optional: true jest: optional: true - checksum: 269d4dc46bb925eb4c19106fd9e03775a863f53e05716628cc47777abc15887775ee47d73c4f8bdd98bb26b7462d8d8f654610bb2a367f8c97881204a2c3f42e + checksum: 0545568a1ddd14138f08015f5f1a99e08c0d5ef5d2f14a8e66c28c1b8296a541c1075e9660f637fcb71be01f2a709991937878fc96abc760c00efc768f4598c8 languageName: node linkType: hard From 073db8e0b84762a82c5eb2c8c1a5c8d233431c74 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Sep 2022 19:45:07 +0000 Subject: [PATCH 61/64] fix(deps): update dependency @graphql-tools/schema to v9.0.4 Signed-off-by: Renovate Bot --- yarn.lock | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2f616154ca..6a28ee0ab2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8683,15 +8683,15 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/merge@npm:8.3.5": - version: 8.3.5 - resolution: "@graphql-tools/merge@npm:8.3.5" +"@graphql-tools/merge@npm:8.3.6": + version: 8.3.6 + resolution: "@graphql-tools/merge@npm:8.3.6" dependencies: - "@graphql-tools/utils": 8.11.0 + "@graphql-tools/utils": 8.12.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: c834619acabe0587d7528a795e2e7527b09e528486b965f4638f2bd831e0c1ac6439fb22e82d3512329cf293f69bca4db0e4696a5aac88748a09cb6de6597fb4 + checksum: 3e45ebff0dce9524e72c4af1d2b9799c16515c1236290e07cd68fb2226c4e54734e2444d89a64b387b7ba991d15c6f948fdfc20c77a74b1d24babddd865ff32a languageName: node linkType: hard @@ -8805,16 +8805,16 @@ __metadata: linkType: hard "@graphql-tools/schema@npm:^9.0.0": - version: 9.0.3 - resolution: "@graphql-tools/schema@npm:9.0.3" + version: 9.0.4 + resolution: "@graphql-tools/schema@npm:9.0.4" dependencies: - "@graphql-tools/merge": 8.3.5 - "@graphql-tools/utils": 8.11.0 + "@graphql-tools/merge": 8.3.6 + "@graphql-tools/utils": 8.12.0 tslib: ^2.4.0 value-or-promise: 1.0.11 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 7ce960e3af637de592f7859db5841e3f0974997bd48767efab163bbafdc88a40e95a789f1f7cb7a178fb53b89f5a5bc881af5f8d796c096ce09386340b85ca4f + checksum: 0644ba225ff7fb03c6fb7f026b6a77a4ac5dd14fd10bb562ea0072bfe0258620fd4789b851b0b97007db8754d0b7d88a1061bb98bacc679b22e2eb7706e79e0e languageName: node linkType: hard @@ -8868,14 +8868,14 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/utils@npm:8.11.0": - version: 8.11.0 - resolution: "@graphql-tools/utils@npm:8.11.0" +"@graphql-tools/utils@npm:8.12.0": + version: 8.12.0 + resolution: "@graphql-tools/utils@npm:8.12.0" dependencies: tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 2a223ba056c3c3851defa87a4e3a83fe523e5946f63ccdc8a181c7b290abcc9c3712cb0fb6a33edc8ae072c6530e4b667dc822a8debd9f80fea937a5b253eb26 + checksum: 24edc6ba3bcfa9a4c1d1d37117c3f96d847beed9638325083c32c6ec9674729dc89fc8cc389d317ae5d9dba22e91443bd9788f1dc8de91a1b6f1e592112bd48f languageName: node linkType: hard From 329ed2b9c7babfc633644e6e16aaecf244586908 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 10 Sep 2022 14:01:55 +0200 Subject: [PATCH 62/64] dev-utils: fix route discovery with react-router stable Signed-off-by: Patrik Oldsberg --- .changeset/metal-candles-tease.md | 5 +++++ packages/dev-utils/src/devApp/render.tsx | 15 +++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 .changeset/metal-candles-tease.md diff --git a/.changeset/metal-candles-tease.md b/.changeset/metal-candles-tease.md new file mode 100644 index 0000000000..a48df562e4 --- /dev/null +++ b/.changeset/metal-candles-tease.md @@ -0,0 +1,5 @@ +--- +'@backstage/dev-utils': patch +--- + +Fixed routing when using React Router v6 stable. diff --git a/packages/dev-utils/src/devApp/render.tsx b/packages/dev-utils/src/devApp/render.tsx index 5cd77528a4..e04779b4d1 100644 --- a/packages/dev-utils/src/devApp/render.tsx +++ b/packages/dev-utils/src/devApp/render.tsx @@ -46,16 +46,23 @@ import { Box } from '@material-ui/core'; import BookmarkIcon from '@material-ui/icons/Bookmark'; import React, { ComponentType, ReactNode } from 'react'; import ReactDOM from 'react-dom'; -import { Route } from 'react-router'; +import { createRoutesFromChildren, Route } from 'react-router'; import { SidebarThemeSwitcher } from './SidebarThemeSwitcher'; -const GatheringRoute: (props: { +export function isReactRouterBeta(): boolean { + const [obj] = createRoutesFromChildren(} />); + return !obj.index; +} + +const MaybeGatheringRoute: (props: { path: string; element: JSX.Element; children?: ReactNode; }) => JSX.Element = ({ element }) => element; -attachComponentData(GatheringRoute, 'core.gatherMountPoints', true); +if (isReactRouterBeta()) { + attachComponentData(MaybeGatheringRoute, 'core.gatherMountPoints', true); +} /** @public */ export type DevAppPageOptions = { @@ -136,7 +143,7 @@ export class DevAppBuilder { ); } this.routes.push( - Date: Fri, 9 Sep 2022 18:10:48 +0200 Subject: [PATCH 63/64] Bazaar plugin: Remove 'Router' as 'RoutedTabs' children During the 'react-router-dom' upgrades the Bazaar routing broke. This patch removes the wrapping 'Router' from the 'RouterTabs' children. Opening the Bazaar plugin would result in the followin error: "A is only ever to be used as the child of element, never rendered directly. Please wrap your in a ." Also removed 'react-router-dom' as a peer dependency of the bazaar plugin. Signed-off-by: Niklas Aronsson --- .changeset/gorgeous-boats-prove.md | 5 +++++ plugins/bazaar/package.json | 3 +-- plugins/bazaar/src/components/HomePage/HomePage.tsx | 5 ++--- yarn.lock | 1 - 4 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 .changeset/gorgeous-boats-prove.md diff --git a/.changeset/gorgeous-boats-prove.md b/.changeset/gorgeous-boats-prove.md new file mode 100644 index 0000000000..46e72db735 --- /dev/null +++ b/.changeset/gorgeous-boats-prove.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-bazaar': patch +--- + +Fixed broken routing by removing the wrapping `Router` from the `RoutedTabs` children. diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index 43f443ffce..f78a4f08fe 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -41,8 +41,7 @@ "react-use": "^17.2.4" }, "peerDependencies": { - "react": "^16.13.1 || ^17.0.0", - "react-router-dom": "6.0.0-beta.0 || ^6.3.0" + "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { "@backstage/cli": "^0.19.0-next.1", diff --git a/plugins/bazaar/src/components/HomePage/HomePage.tsx b/plugins/bazaar/src/components/HomePage/HomePage.tsx index b34b7ac949..cec7171c20 100644 --- a/plugins/bazaar/src/components/HomePage/HomePage.tsx +++ b/plugins/bazaar/src/components/HomePage/HomePage.tsx @@ -16,7 +16,6 @@ import React from 'react'; import { Header, RoutedTabs } from '@backstage/core-components'; -import { Route } from 'react-router-dom'; import { SortView } from '../SortView'; import { About } from '../About'; @@ -25,12 +24,12 @@ export const HomePage = () => { { path: '/', title: 'Home', - children: } />, + children: , }, { path: '/about', title: 'About', - children: } />, + children: , }, ]; diff --git a/yarn.lock b/yarn.lock index d50db888eb..d8e81821f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4168,7 +4168,6 @@ __metadata: react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 languageName: unknown linkType: soft From 940d2929f013ce10058e0355d91888970780f815 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rosado?= <55427141+khatharsiss@users.noreply.github.com> Date: Sun, 11 Sep 2022 23:38:37 +0200 Subject: [PATCH 64/64] added ferrovial as adopter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: José Rosado <55427141+khatharsiss@users.noreply.github.com> --- ADOPTERS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ADOPTERS.md b/ADOPTERS.md index 6ea4d5dacb..7cd7f6b092 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -212,4 +212,6 @@ _You can do this by using the [Adopter form](https://form.typeform.com/to/zcOaKi | [REI](https://www.rei.com/) | [Jen Evans](mailto:jenevan@rei.com) | Developer portal focused on an enterprise-wide app catalog to track ownership and surface APIs. | | [next](https://next.me) | [Devan Jeronimo Nack](mailto:devan.j.nack@next.me), [Everson Crusara](mailto:everson.crusara@next.me), [Thiago Carneiro da Silva](mailto:thiagoc.silva@next.me) | We are building our Internal Developer Portal using Backstage to improve developer's experience by centralizing our services catalog and identifing microservices' ownership. Also we are going to improve Technical Documentation and speed up development using software templates to help squads in creation and deployment of new microservices. | | [Vipps](https://vipps.no) | [Martin Ehrnst](https://github.com/ehrnst) | Vipps use backstage for our service catalog, documentation, and developer portal. Using templates we are able to simplify the developer experience when deploying new services to our platform. | +| [Ferrovial](https://ferrovial.com) | [Jose Luis Rosado](mailto:jlrosado@ferrovial.com) | Backstage is helping us to improve and acelerate dev experience helping teams to quickly find technical documentation, infrastructure templates, pipelines, software components and quickstarters that have been developed by our squads in a inner source friendly environment. + |