diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 9aa4af8b5..86b8cc86e 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -291,6 +291,11 @@ export default ({ mode }: { mode: string }) => { link: '/guide/browser/multiple-setups', docFooterText: 'Multiple Setups | Browser Mode', }, + { + text: 'Visual Regression Testing', + link: '/guide/browser/visual-regression-testing', + docFooterText: 'Visual Regression Testing | Browser Mode', + }, ], }, { diff --git a/docs/guide/browser/assertion-api.md b/docs/guide/browser/assertion-api.md index 7ce0e4f5f..5d8881f9a 100644 --- a/docs/guide/browser/assertion-api.md +++ b/docs/guide/browser/assertion-api.md @@ -1067,3 +1067,216 @@ await expect.element(queryByTestId('parent')).toHaveSelection('ected text') await expect.element(queryByTestId('prev')).not.toHaveSelection() await expect.element(queryByTestId('next')).toHaveSelection('ne') ``` + +## toMatchScreenshot experimental + +```ts +function toMatchScreenshot( + options?: ScreenshotMatcherOptions, +): Promise +function toMatchScreenshot( + name?: string, + options?: ScreenshotMatcherOptions, +): Promise +``` + +::: tip +The `toMatchScreenshot` assertion can be configured globally in your +[Vitest config](/guide/browser/config#browser-expect-tomatchscreenshot). +::: + +This assertion allows you to perform visual regression testing by comparing +screenshots of elements or pages against stored reference images. + +When differences are detected beyond the configured threshold, the test fails. +To help identify the changes, the assertion generates: + +- The actual screenshot captured during the test +- The expected reference screenshot +- A diff image highlighting the differences (when possible) + +::: warning Screenshots Stability +The assertion automatically retries taking screenshots until two consecutive +captures yield the same result. This helps reduce flakiness caused by +animations, loading states, or other dynamic content. You can control this +behavior with the `timeout` option. + +However, browser rendering can vary across: + +- Different browsers and browser versions +- Operating systems (Windows, macOS, Linux) +- Screen resolutions and pixel densities +- GPU drivers and hardware acceleration +- Font rendering and system fonts + +It is recommended to read the +[Visual Regression Testing guide](/guide/browser/visual-regression-testing) to +implement this testing strategy efficiently. +::: + +::: tip +When a screenshot comparison fails due to **intentional changes**, you can +update the reference screenshot by pressing the `u` key in watch mode, or by +running tests with the `-u` or `--update` flags. +::: + +```html + +``` + +```ts +// basic usage, auto-generates screenshot name +await expect.element(getByTestId('button')).toMatchScreenshot() + +// with custom name +await expect.element(getByTestId('button')).toMatchScreenshot('fancy-button') + +// with options +await expect.element(getByTestId('button')).toMatchScreenshot({ + comparatorName: 'pixelmatch', + comparatorOptions: { + allowedMismatchedPixelRatio: 0.01, + }, +}) + +// with both name and options +await expect.element(getByTestId('button')).toMatchScreenshot('fancy-button', { + comparatorName: 'pixelmatch', + comparatorOptions: { + allowedMismatchedPixelRatio: 0.01, + }, +}) +``` + +### Options + +- `comparatorName: "pixelmatch" = "pixelmatch"` + + The name of the algorithm/library used for comparing images. + + Currently, [`"pixelmatch"`](https://github.com/mapbox/pixelmatch) is the only + supported comparator. + +- `comparatorOptions: object` + + These options allow changing the behavior of the comparator. What properties + can be set depends on the chosen comparator algorithm. + + Vitest has set default values out of the box, but they can be overridden. + + - [`"pixelmatch"` options](#pixelmatch-comparator-options) + + ::: warning + **Always explicitly set `comparatorName` to get proper type inference for + `comparatorOptions`**. + + Without it, TypeScript won't know which options are valid: + + ```ts + // ❌ TypeScript can't infer the correct options + await expect.element(button).toMatchScreenshot({ + comparatorOptions: { + // might error when new comparators are added + allowedMismatchedPixelRatio: 0.01, + }, + }) + + // ✅ TypeScript knows these are pixelmatch options + await expect.element(button).toMatchScreenshot({ + comparatorName: 'pixelmatch', + comparatorOptions: { + allowedMismatchedPixelRatio: 0.01, + }, + }) + ``` + ::: + +- `screenshotOptions: object` + + The same options allowed by + [`locator.screenshot()`](/guide/browser/locators.html#screenshot), except for: + + - `'base64'` + - `'path'` + - `'save'` + - `'type'` + +- `timeout: number = 5_000` + + Time to wait until a stable screenshot is found. + + Setting this value to `0` disables the timeout, but if a stable screenshot + can't be determined the process will not end. + +#### `"pixelmatch"` comparator options + +The following options are available when using the `"pixelmatch"` comparator: + +- `allowedMismatchedPixelRatio: number | undefined = undefined` + + The maximum allowed ratio of differing pixels between the captured screenshot + and the reference image. + + Must be a value between `0` and `1`. + + For example, `allowedMismatchedPixelRatio: 0.02` means the test will pass + if up to 2% of pixels differ, but fail if more than 2% differ. + +- `allowedMismatchedPixels: number | undefined = undefined` + + The maximum number of pixels that are allowed to differ between the captured + screenshot and the stored reference image. + + If set to `undefined`, any non-zero difference will cause the test to fail. + + For example, `allowedMismatchedPixels: 10` means the test will pass if 10 or + fewer pixels differ, but fail if 11 or more differ. + +- `threshold: number = 0.1` + + Acceptable perceived color difference between the same pixel in two images. + + Value ranges from `0` (strict) to `1` (very lenient). Lower values mean small + differences will be detected. + + The comparison uses the [YIQ color space](https://en.wikipedia.org/wiki/YIQ). + +- `includeAA: boolean = false` + + If `true`, disables detection and ignoring of anti-aliased pixels. + +- `alpha: number = 0.1` + + Blending level of unchanged pixels in the diff image. + + Ranges from `0` (white) to `1` (original brightness). + +- `aaColor: [r: number, g: number, b: number] = [255, 255, 0]` + + Color used for anti-aliased pixels in the diff image. + +- `diffColor: [r: number, g: number, b: number] = [255, 0, 0]` + + Color used for differing pixels in the diff image. + +- `diffColorAlt: [r: number, g: number, b: number] | undefined = undefined` + + Optional alternative color for dark-on-light differences, to help show what's + added vs. removed. + + If not set, `diffColor` is used for all differences. + +- `diffMask: boolean = false` + + If `true`, shows only the diff as a mask on a transparent background, instead + of overlaying it on the original image. + + Anti-aliased pixels won't be shown (if detected). + +::: warning +When both `allowedMismatchedPixels` and `allowedMismatchedPixelRatio` are set, +the more restrictive value is used. + +For example, if you allow 100 pixels or 2% ratio, and your image has 10,000 +pixels, the effective limit would be 100 pixels instead of 200. +::: diff --git a/docs/guide/browser/config.md b/docs/guide/browser/config.md index 9b73e1797..95fb5c330 100644 --- a/docs/guide/browser/config.md +++ b/docs/guide/browser/config.md @@ -325,3 +325,152 @@ The timeout in milliseconds. If connection to the browser takes longer, the test ::: info This is the time it should take for the browser to establish the WebSocket connection with the Vitest server. In normal circumstances, this timeout should never be reached. ::: + +## browser.expect + +- **Type:** `ExpectOptions` + +### browser.expect.toMatchScreenshot + +Default options for the +[`toMatchScreenshot` assertion](/guide/browser/assertion-api.html#tomatchscreenshot). +These options will be applied to all screenshot assertions. + +::: tip +Setting global defaults for screenshot assertions helps maintain consistency +across your test suite and reduces repetition in individual tests. You can still +override these defaults at the assertion level when needed for specific test cases. +::: + +```ts +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + browser: { + enabled: true, + expect: { + toMatchScreenshot: { + comparatorName: 'pixelmatch', + comparatorOptions: { + threshold: 0.2, + allowedMismatchedPixels: 100, + }, + resolveScreenshotPath: ({ arg, browserName, ext, testFileName }) => + `custom-screenshots/${testFileName}/${arg}-${browserName}${ext}`, + }, + }, + }, + }, +}) +``` + +[All options available in the `toMatchScreenshot` assertion](/guide/browser/assertion-api#options) +can be configured here. Additionally, two path resolution functions are +available: `resolveScreenshotPath` and `resolveDiffPath`. + +#### browser.expect.toMatchScreenshot.resolveScreenshotPath + +- **Type:** `(data: PathResolveData) => string` +- **Default output:** `` `${root}/${testFileDirectory}/${screenshotDirectory}/${testFileName}/${arg}-${browserName}-${platform}${ext}` `` + +A function to customize where reference screenshots are stored. The function +receives an object with the following properties: + +- `arg: string` + + Path **without** extension, sanitized and relative to the test file. + + This comes from the arguments passed to `toMatchScreenshot`; if called + without arguments this will be the auto-generated name. + + ```ts + test('calls `onClick`', () => { + expect(locator).toMatchScreenshot() + // arg = "calls-onclick-1" + }) + + expect(locator).toMatchScreenshot('foo/bar/baz.png') + // arg = "foo/bar/baz" + + expect(locator).toMatchScreenshot('../foo/bar/baz.png') + // arg = "foo/bar/baz" + ``` + +- `ext: string` + + Screenshot extension, with leading dot. + + This can be set through the arguments passed to `toMatchScreenshot`, but + the value will fall back to `'.png'` if an unsupported extension is used. + +- `browserName: string` + + The instance's browser name. + +- `platform: NodeJS.Platform` + + The value of + [`process.platform`](https://nodejs.org/docs/v22.16.0/api/process.html#processplatform). + +- `screenshotDirectory: string` + + The value provided to + [`browser.screenshotDirectory`](/guide/browser/config#browser-screenshotdirectory), + if none is provided, its default value. + +- `root: string` + + Absolute path to the project's [`root`](/config/#root). + +- `testFileDirectory: string` + + Path to the test file, relative to the project's [`root`](/config/#root). + +- `testFileName: string` + + The test's filename. + +- `testName: string` + + The [`test`](/api/#test)'s name, including parent + [`describe`](/api/#describe), sanitized. + +- `attachmentsDir: string` + + The value provided to [`attachmentsDir`](/config/#attachmentsdir), if none is + provided, its default value. + +For example, to group screenshots by browser: + +```ts +resolveScreenshotPath: ({ arg, browserName, ext, root, testFileName }) => + `${root}/screenshots/${browserName}/${testFileName}/${arg}${ext}` +``` + +#### browser.expect.toMatchScreenshot.resolveDiffPath + +- **Type:** `(data: PathResolveData) => string` +- **Default output:** `` `${root}/${attachmentsDir}/${testFileDirectory}/${testFileName}/${arg}-${browserName}-${platform}${ext}` `` + +A function to customize where diff images are stored when screenshot comparisons +fail. Receives the same data object as +[`resolveScreenshotPath`](#browser-expect-tomatchscreenshot-resolvescreenshotpath). + +For example, to store diffs in a subdirectory of attachments: + +```ts +resolveDiffPath: ({ arg, attachmentsDir, browserName, ext, root, testFileName }) => + `${root}/${attachmentsDir}/screenshot-diffs/${testFileName}/${arg}-${browserName}${ext}` +``` + +::: tip +To have a better type safety when using built-in providers, you should reference +one of these types (for provider that you are using) in your +[config file](/config/): + +```ts +/// +/// +``` +::: diff --git a/docs/guide/browser/visual-regression-testing.md b/docs/guide/browser/visual-regression-testing.md new file mode 100644 index 000000000..544ea1de9 --- /dev/null +++ b/docs/guide/browser/visual-regression-testing.md @@ -0,0 +1,715 @@ +--- +title: Visual Regression Testing +outline: [2, 3] +--- + +# Visual Regression Testing + +Vitest can run visual regression tests out of the box. It captures screenshots +of your UI components and pages, then compares them against reference images to +detect unintended visual changes. + +Unlike functional tests that verify behavior, visual tests catch styling issues, +layout shifts, and rendering problems that might otherwise go unnoticed without +thorough manual testing. + +## Why Visual Regression Testing? + +Visual bugs don’t throw errors, they just look wrong. That’s where visual +testing comes in. + +- That button still submits the form... but why is it hot pink now? +- The text fits perfectly... until someone views it on mobile +- Everything works great... except those two containers are out of viewport +- That careful CSS refactor works... but broke the layout on a page no one tests + +Visual regression testing acts as a safety net for your UI, automatically +catching these visual changes before they reach production. + +## Getting Started + +::: warning Browser Rendering Differences +Visual regression tests are **inherently unstable across different +environments**. Screenshots will look different on different machines because +of: + +- Font rendering (the big one. Windows, macOS, Linux, they all render text +differently) +- GPU drivers and hardware acceleration +- Whether you're running headless or not +- Browser settings and versions +- ...and honestly, sometimes just the phase of the moon + +That's why Vitest includes the browser and platform in screenshot names (like +`button-chromium-darwin.png`). + +For stable tests, use the same environment everywhere. We **strongly recommend** +cloud services like +[Microsoft Playwright Testing](https://azure.microsoft.com/en-us/products/playwright-testing) +or [Docker containers](https://playwright.dev/docs/docker). +::: + +Visual regression testing in Vitest can be done through the +[`toMatchScreenshot` assertion](/guide/browser/assertion-api.html#tomatchscreenshot): + +```ts +import { expect, test } from 'vitest' +import { page } from '@vitest/browser/context' + +test('hero section looks correct', async () => { + // ...the rest of the test + + // capture and compare screenshot + await expect(page.getByTestId('hero')).toMatchScreenshot('hero-section') +}) +``` + +### Creating References + +When you run a visual test for the first time, Vitest creates a reference (also +called baseline) screenshot and fails the test with the following error message: + +``` +expect(element).toMatchScreenshot() + +No existing reference screenshot found; a new one was created. Review it before running tests again. + +Reference screenshot: + tests/__screenshots__/hero.test.ts/hero-section-chromium-darwin.png +``` + +This is normal. Check that the screenshot looks right, then run the test again. +Vitest will now compare future runs against this baseline. + +::: tip +Reference screenshots live in `__screenshots__` folders next to your tests. +**Don't forget to commit them!** +::: + +### Screenshot Organization + +By default, screenshots are organized as: + +``` +. +├── __screenshots__ +│ └── test-file.test.ts +│ ├── test-name-chromium-darwin.png +│ ├── test-name-firefox-linux.png +│ └── test-name-webkit-win32.png +└── test-file.test.ts +``` + +The naming convention includes: +- **Test name**: either the first argument of the `toMatchScreenshot()` call, +or automatically generated from the test's name. +- **Browser name**: `chrome`, `chromium`, `firefox` or `webkit`. +- **Platform**: `aix`, `darwin`, `freebsd`, `linux`, `openbsd`, `sunos`, or +`win32`. + +This ensures screenshots from different environments don't overwrite each other. + +### Updating References + +When you intentionally change your UI, you'll need to update the reference +screenshots: + +```bash +$ vitest --update +``` + +Review updated screenshots before committing to make sure changes are +intentional. + +## Configuring Visual Tests + +### Global Configuration + +Configure visual regression testing defaults in your +[Vitest config](/guide/browser/config#browser-expect-tomatchscreenshot): + +```ts [vitest.config.ts] +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + browser: { + expect: { + toMatchScreenshot: { + comparatorName: 'pixelmatch', + comparatorOptions: { + // 0-1, how different can colors be? + threshold: 0.2, + // 1% of pixels can differ + allowedMismatchedPixelRatio: 0.01, + }, + }, + }, + }, + }, +}) +``` + +### Per-Test Configuration + +Override global settings for specific tests: + +```ts +await expect(element).toMatchScreenshot('button-hover', { + comparatorName: 'pixelmatch', + comparatorOptions: { + // more lax comparison for text-heavy elements + allowedMismatchedPixelRatio: 0.1, + }, +}) +``` + +## Best Practices + +### Test Specific Elements + +Unless you explicitly want to test the whole page, prefer capturing specific +components to reduce false positives: + +```ts +// ❌ Captures entire page; prone to unrelated changes +await expect(page).toMatchScreenshot() + +// ✅ Captures only the component under test +await expect(page.getByTestId('product-card')).toMatchScreenshot() +``` + +### Handle Dynamic Content + +Dynamic content like timestamps, user data, or random values will cause tests +to fail. You can either mock the sources of dynamic content or mask them when +using the Playwright provider by using the +[`mask` option](https://playwright.dev/docs/api/class-page#page-screenshot-option-mask) +in `screenshotOptions`. + +```ts +await expect(page.getByTestId('profile')).toMatchScreenshot({ + screenshotOptions: { + mask: [page.getByTestId('last-seen')], + }, +}) +``` + +### Disable Animations + +Animations can cause flaky tests. Disable them during testing by injecting +a custom CSS snippet: + +```css +*, *::before, *::after { + animation-duration: 0s !important; + animation-delay: 0s !important; + transition-duration: 0s !important; + transition-delay: 0s !important; +} +``` + +::: tip +When using the Playwright provider, animations are automatically disabled +when using the assertion: the `animations` option's value in `screenshotOptions` +is set to `"disabled"` by default. +::: + +### Set Appropriate Thresholds + +Tuning thresholds is tricky. It depends on the content, test environment, +what's acceptable for your app, and might also change based on the test. + +Vitest does not set a default for the mismatching pixels, that's up for the +user to decide based on their needs. The recommendation is to use +`allowedMismatchedPixelRatio`, so that the threshold is computed on the size +of the screenshot and not a fixed number. + +When setting both `allowedMismatchedPixelRatio` and +`allowedMismatchedPixels`, Vitest uses whichever limit is stricter. + +### Set consistent viewport sizes + +As the browser instance might have a different default size, it's best to +set a specific viewport size, either on the test or the instance +configuration: + +```ts +await page.viewport(1280, 720) +``` + +```ts [vitest.config.ts] +export default defineConfig({ + test: { + browser: { + enabled: true, + provider: 'playwright', + instances: [ + { + browser: 'chromium', + viewport: { width: 1280, height: 720 }, + }, + ], + }, + }, +}) +``` + +### Use Git LFS + +Store reference screenshots in +[Git LFS](https://github.com/git-lfs/git-lfs?tab=readme-ov-file) if you plan to +have a large test suite. + +## Debugging Failed Tests + +When a visual test fails, Vitest provides three images to help debug: + +1. **Reference screenshot**: the expected baseline image +1. **Actual screenshot**: what was captured during the test +1. **Diff image**: highlights the differences, but this might not get generated + +You'll see something like: + +``` +expect(element).toMatchScreenshot() + +Screenshot does not match the stored reference. +245 pixels (ratio 0.03) differ. + +Reference screenshot: + tests/__screenshots__/button.test.ts/button-chromium-darwin.png + +Actual screenshot: + tests/.vitest-attachments/button.test.ts/button-chromium-darwin-actual.png + +Diff image: + tests/.vitest-attachments/button.test.ts/button-chromium-darwin-diff.png +``` + +### Understanding the diff image + +- **Red pixels** are areas that differ between reference and actual +- **Yellow pixels** are anti-aliasing differences (when anti-alias is not ignored) +- **Transparent/original** are unchanged areas + +:::tip +If the diff is mostly red, something's really wrong. If it's speckled with a +few red pixels around text, you probably just need to bump your threshold. +::: + +## Common Issues and Solutions + +### False Positives from Font Rendering + +Font availability and rendering varies significantly between systems. Some +possible solutions might be to: + +- Use web fonts and wait for them to load: + + ```ts + // wait for fonts to load + await document.fonts.ready + + // continue with your tests + ``` + +- Increase comparison threshold for text-heavy areas: + + ```ts + await expect(page.getByTestId('article-summary')).toMatchScreenshot({ + comparatorName: 'pixelmatch', + comparatorOptions: { + // 10% of the pixels are allowed to change + allowedMismatchedPixelRatio: 0.1, + }, + }) + ``` + +- Use a cloud service or containerized environment for consistent font rendering. + +### Flaky Tests or Different Screenshot Sizes + +If tests pass and fail randomly, or if screenshots have different dimensions +between runs: + +- Wait for everything to load, including loading indicators +- Set explicit viewport sizes: `await page.viewport(1920, 1080)` +- Check for responsive behavior at viewport boundaries +- Check for unintended animations or transitions +- Increase test timeout for large screenshots +- Use a cloud service or containerized environment + +## Visual Regression Testing for Teams + +Remember when we mentioned visual tests need a stable environment? Well, here's +the thing: your local machine isn't it. + +For teams, you've basically got three options: + +1. **Self-hosted runners**, complex to set up, painful to maintain +1. **GitHub Actions**, free (for open source), works with any provider +1. **Cloud services**, like +[Microsoft Playwright Testing](https://azure.microsoft.com/en-us/products/playwright-testing), +built for this exact problem + +We'll focus on options 2 and 3 since they're the quickest to get running. + +To be upfront, the main trade-offs for each are: + +- **GitHub Actions**: visual tests only run in CI (developers can't run them +locally) +- **Microsoft's service**: works everywhere but costs money and only works +with Playwright + +:::: tabs key:vrt-for-teams +=== GitHub Actions + +The trick here is keeping visual tests separate from your regular tests, +otherwise, you'll waste hours checking failing logs of screenshot mismatches. + +#### Organizing Your Tests + +First, isolate your visual tests. Stick them in a `visual` folder (or whatever +makes sense for your project): + +```json [package.json] +{ + "scripts": { + "test:unit": "vitest --exclude tests/visual/*.test.ts", + "test:visual": "vitest tests/visual/*.test.ts" + } +} +``` + +Now developers can run `npm run test:unit` locally without visual tests getting +in the way. Visual tests stay in CI where the environment is consistent. + +::: tip Alternative +Not a fan of glob patterns? You could also use separate +[Test Projects](/guide/projects) instead and run them using: + +- `vitest --project unit` +- `vitest --project visual` +::: + +#### CI Setup + +Your CI needs browsers installed. How you do this depends on your provider: + +::: tabs key:provider +== Playwright + +[Playwright](https://npmjs.com/package/playwright) makes this easy. Just pin +your version and add this before running tests: + +```yaml [.github/workflows/ci.yml] +# ...the rest of the workflow +- name: Install Playwright Browsers + run: npx --no playwright install --with-deps --only-shell +``` + +== WebdriverIO + +[WebdriverIO](https://www.npmjs.com/package/webdriverio) expects you to bring +your own browsers. The folks at +[@browser-actions](https://github.com/browser-actions) have your back: + +```yaml [.github/workflows/ci.yml] +# ...the rest of the workflow +- uses: browser-actions/setup-chrome@v1 + with: + chrome-version: 120 +``` + +::: + +Then run your visual tests: + +```yaml [.github/workflows/ci.yml] +# ...the rest of the workflow +# ...browser setup +- name: Visual Regression Testing + run: npm run test:visual +``` + +#### The Update Workflow + +Here's where it gets interesting. You don't want to update screenshots on every +PR automatically *(chaos!)*. Instead, create a +manually-triggered workflow that developers can run when they intentionally +change the UI. + +The workflow below: +- Only runs on feature branches (never on main) +- Credits the person who triggered it as co-author +- Prevents concurrent runs on the same branch +- Shows a nice summary: + - **When screenshots changed**, it lists what changed + + Action summary after updates + Action summary after updates + + - **When nothing changed**, well, it tells you that too + + Action summary after no updates + Action summary after no updates + +::: tip +This is just one approach. Some teams prefer PR comments (`/update-screenshots`), +others use labels. Adjust it to fit your workflow! + +The important part is having a controlled way to update baselines. +::: + +```yaml [.github/workflows/update-screenshots.yml] +name: Update Visual Regression Screenshots + +on: + workflow_dispatch: # manual trigger only + +env: + AUTHOR_NAME: 'github-actions[bot]' + AUTHOR_EMAIL: '41898282+github-actions[bot]@users.noreply.github.com' + COMMIT_MESSAGE: | + test: update visual regression screenshots + + Co-authored-by: ${{ github.actor }} <${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com> + +jobs: + update-screenshots: + runs-on: ubuntu-24.04 + + # safety first: don't run on main + if: github.ref_name != github.event.repository.default_branch + + # one at a time per branch + concurrency: + group: visual-regression-screenshots@${{ github.ref_name }} + cancel-in-progress: true + + permissions: + contents: write # needs to push changes + + steps: + - name: Checkout selected branch + uses: actions/checkout@v4 + with: + ref: ${{ github.ref_name }} + # use PAT if triggering other workflows + # token: ${{ secrets.GITHUB_TOKEN }} + + - name: Configure Git + run: | + git config --global user.name "${{ env.AUTHOR_NAME }}" + git config --global user.email "${{ env.AUTHOR_EMAIL }}" + + # your setup steps here (node, pnpm, whatever) + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 24 + + - name: Install dependencies + run: npm ci + + - name: Install Playwright Browsers + run: npx --no playwright install --with-deps --only-shell + + # the magic happens below 🪄 + - name: Update Visual Regression Screenshots + run: npm run test:visual --update + + # check what changed + - name: Check for changes + id: check_changes + run: | + CHANGED_FILES=$(git status --porcelain | awk '{print $2}') + if [ "${CHANGED_FILES:+x}" ]; then + echo "changes=true" >> $GITHUB_OUTPUT + echo "Changes detected" + + # save the list for the summary + echo "changed_files<> $GITHUB_OUTPUT + echo "$CHANGED_FILES" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + echo "changed_count=$(echo "$CHANGED_FILES" | wc -l)" >> $GITHUB_OUTPUT + else + echo "changes=false" >> $GITHUB_OUTPUT + echo "No changes detected" + fi + + # commit if there are changes + - name: Commit changes + if: steps.check_changes.outputs.changes == 'true' + run: | + git add -A + git commit -m "${{ env.COMMIT_MESSAGE }}" + + - name: Push changes + if: steps.check_changes.outputs.changes == 'true' + run: git push origin ${{ github.ref_name }} + + # pretty summary for humans + - name: Summary + run: | + if [[ "${{ steps.check_changes.outputs.changes }}" == "true" ]]; then + echo "### 📸 Visual Regression Screenshots Updated" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "Successfully updated **${{ steps.check_changes.outputs.changed_count }}** screenshot(s) on \`${{ github.ref_name }}\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "#### Changed Files:" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + echo "${{ steps.check_changes.outputs.changed_files }}" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "✅ The updated screenshots have been committed and pushed. Your visual regression baseline is now up to date!" >> $GITHUB_STEP_SUMMARY + else + echo "### ℹ️ No Screenshot Updates Required" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "The visual regression test command ran successfully but no screenshots needed updating." >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "All screenshots are already up to date! 🎉" >> $GITHUB_STEP_SUMMARY + fi +``` + +=== Microsoft Playwright Testing + +Your tests stay local, only the browsers run in the cloud. It's Playwright's +remote browser feature, but Microsoft handles all the infrastructure. + +#### Organizing Your Tests + +Keep visual tests separate to control costs. Only tests that actually take +screenshots should use the service. + +The cleanest approach is using [Test Projects](/guide/projects): + +```ts [vitest.config.ts] +import { env } from 'node:process' +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + // ...global Vite config + tests: { + // ...global Vitest config + projects: [ + { + extends: true, + test: { + name: 'unit', + include: ['tests/**/*.test.ts'], + // regular config, can use local browsers + }, + }, + { + extends: true, + test: { + name: 'visual', + // or you could use a different suffix, e.g.,: `tests/**/*.visual.ts?(x)` + include: ['visual-regression-tests/**/*.test.ts?(x)'], + browser: { + enabled: true, + provider: 'playwright', + headless: true, + instances: [ + { + browser: 'chromium', + viewport: { width: 2560, height: 1440 }, + connect: { + wsEndpoint: `${env.PLAYWRIGHT_SERVICE_URL}?cap=${JSON.stringify({ + os: 'linux', // always use Linux for consistency + // helps identifying runs in the service's dashboard + runId: `Vitest ${env.CI ? 'CI' : 'local'} run @${new Date().toISOString()}`, + })}`, + options: { + exposeNetwork: '', + headers: { + 'x-mpt-access-key': env.PLAYWRIGHT_SERVICE_ACCESS_TOKEN, + }, + timeout: 30_000, + }, + }, + }, + ], + }, + }, + }, + ], + }, +}) +``` + +The service gives you two environment variables: + +- `PLAYWRIGHT_SERVICE_URL` tells Playwright where to connect +- `PLAYWRIGHT_SERVICE_ACCESS_TOKEN` is your auth token + +::: danger Keep that Token Secret! +Never commit `PLAYWRIGHT_SERVICE_ACCESS_TOKEN` to your repository. Anyone with +the token can rack up your bill. Use environment variables locally and secrets +in CI. +::: + +Then split your `test` script like this: + +```json [package.json] +{ + "scripts": { + "test:visual": "vitest --project visual", + "test:unit": "vitest --project unit" + } +} +``` + +#### Running Tests + +```bash +# Local development +npm run test:unit # free, runs locally +npm run test:visual # uses cloud browsers + +# Update screenshots +npm run test:visual -- --update +``` + +The best part of this approach is that it just works: + +- **Consistent screenshots**, everyone uses the same cloud browsers +- **Works locally**, developers can run and update visual tests on their machines +- **Pay for what you use**, only visual tests consume service minutes +- **No Docker or workflow setups needed**, nothing to manage or maintain + +#### CI Setup + +In your CI, add the secrets: + +```yaml +env: + PLAYWRIGHT_SERVICE_URL: ${{ vars.PLAYWRIGHT_SERVICE_URL }} + PLAYWRIGHT_SERVICE_ACCESS_TOKEN: ${{ secrets.PLAYWRIGHT_SERVICE_ACCESS_TOKEN }} +``` + +Then run your tests like normal. The service handles the rest. + +:::: + +### So Which One? + +Both approaches work. The real question is what pain points matter most to your +team. + +If you're already deep in the GitHub ecosystem, GitHub Actions is hard to beat. +Free for open source, works with any browser provider, and you control +everything. + +The downside? That "works on my machine" conversation when someone generates +screenshots locally and they don't match CI expectations anymore. + +The cloud service makes sense if developers need to run visual tests locally. + +Some teams have designers checking their work or developers who prefer catching +issues before pushing. It allows skipping the push-wait-check-fix-push cycle. + +Still on the fence? Start with GitHub Actions. You can always add the cloud +service later if local testing becomes a pain point. diff --git a/docs/public/vrt-gha-summary-no-update-dark.png b/docs/public/vrt-gha-summary-no-update-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..78ad5ecd850ef299f4f9f7a5071db1d6d0aadd6e GIT binary patch literal 40831 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

Q5LDt7n4qy9=EBzTl6~b;k1Y%&+F;) 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 literal 0 HcmV?d00001 diff --git a/docs/public/vrt-gha-summary-no-update-light.png b/docs/public/vrt-gha-summary-no-update-light.png new file mode 100644 index 0000000000000000000000000000000000000000..77de12a06804f9ac0871a7ba2032b95c6f167a83 GIT binary patch literal 42112 zcmeAS@N?(olHy`uVBq!ia0y~yVA;jMz$nSV#=yWZLBpq=fq{XsILO_JVcj{ImkbOH zE~ycoX}-P;S_}*f91M)@nG7r-B@7GNW>*@f{JCj z;Djaoft#Mpnf#>3#Z$<|Xpfa?wD0*hXWpI3Nr*iEci-KYFW0SG_iOjA^j~N8ZfAPZ z$vQ-LE-zHJ(556c{tQ@P7q;KGMp#!P>6E^19oI1%hc~GcPe?O#;1zgi`o0r zw*21maZc#!Fx!x|fwQN~O8qCM6Fu9q^p%P6qvPF^&5v?-s+O&p(I=$gs>~>)fE6`r zI4~q#+xwgU$)l^UKfQmu+xpxb%fEF~KdJVuy4t@{x8U9)(a1~bXEvC9?LIk4d!e^n zHm?rXmN~xIjRVFKY)%otauZSSo=B`#v&T(-<_=9GCcfp1ziTBRHxEzGN4=sV!x+Pqj5}V~b*Kn@<#4#%w2ie_+dx6VKwjwl zWse3H?C3$H3PUcpRQQ5f<%X=q=k2?fPsmln;SUDJwYi$T+5xSG#}tIH_!AO_71KB! z9&^=9vp%qGGLD#^(4gqB@brWS+Sn7ugagLD4NljMYk%FSz-5hdgVS`ygW))&8`Ebo zw6074^=0EntYNC+z|_Xjs^{Fa9+&ia6GpDs^Iu*jKla2CbUch)v285zxTNQ0GKuV( z_ww@bW4J;=f=Of-59hu~I0DJ$GK)ru?d9eDz3MpP!+=GjL{g|m6^C@iGR}Y(Rm=S4 zrTuZFlLU@{7e*>Sa3!M;KEglzIbuui{dQOtwqA2}*!s$4{@3caehgn9cl9~{^A9gB zCjSrRd1H<(8XYuPlG--eM&;O*y_xan_xs$Pg^%0L|E>J%@}W|EPSJ&k_4&GH*Gq;-jLC!)29w`1$qKD+RVB z2d#|?tz2HFtL`&@YnJl$_3_i&c%?mNURs*+VM5}j;^%&vYo~RK=;<7G@0;}ZH^0ZG z6wjqoxD;zvr}28uwb~ji``SEb%F*uWC)mD9>DSq42JV@$CF9@5V9DRJe|{D}(bU@g z3qwz_~h-@+}anhE$6P*a=*Wtk(<*d?peQI&3CrRw2F_9UT#wNpF2s; zcHgDb@!x(pE&F2-YL;_Hi^r$;y+ADOU#=c#M|RQ~FDa&BsH)|C}{`5~(^u6DL6yZ4`J zV(r$k(+FSSP-mMrul`?U?6ujSxz7o!`AuVH=Q|}jRh#GemV$*&UB$|sqT16g8@|oo z^YXfU{hO(b_jyG)IVO0%syWj0^GQ+6&Z4P4|LVF_0&``}QYNgsb#4Oj7q>wqDktU)H*8$JNFzz1UrA&K;JxxxIe> zpP$d?PqGTlI`}j1-kzCDs(z-{u9$U#P?fLuv{JPEbGxM8|E?eT?SEkuZkE+jK6%y6|F--cC z)!REeqwNi5mp=RYI=|{Pk80G-w~vl?@0zFV-tX}}Z+>=Q-tRuyu!)n^{ki@XJwKPb zwz=Z_<@5hH-;3W>6Z!4W$M!SxY~48pgH@e>eYv*ng4nFuJ5Jnz8tj6sHhyy~G*3^{ zpRU-<=5=#ZYKbU2zucrMdDAKN|9&1{RrL9pZqxqI)z?n!*tmGBLdEO((X$k}N?%-w z+#s(Lc&O#qRdDKq|F!v)*{gVu1@P5>ey%@7ewk0uq3EW7^ZG59{q3`Jd-q0c zOyWA?^Ji`BcE4r*bCnt!-_2Fp`||qz>;JZ$JHOby-zWI%YgW^9hW`}bNEzp>Uma5{ zAuiCAaD83ue|Ni~X*L^h4wmPhhUwYB?R(DzVt1S!?^%mA*m-sr->&l4S!2qRbS*AEpxuAmHXM`8HPzSe1D0~I=fAF_tR%< zql302)OAXm_g((>q2lpBOb) z*X#P38do_VKNt1HYob!?m$#RryA$Tu-U=#ve{(TQBfH;P%e6L*Y3F9Gy0I(>+c7< zrr6!fUj5y%Gw=TCQ^jdVJ}7P~IJo}O+H7&%K3R*3fa=zlhql$X^UF_sCT~9Zr10_6 z;qi3~PgmS7tN&H`;zFWk#DWH~X187$y;d&KD{C7$I2`$&<<2jCxS;+6-|H(Io6r2M z>}#l;q~iIdQr^C9kzV27U%Z)@w(Jz!8MM@E=}(==Ee`vFeK`^hSs!=HJ!<^1G&s{7JL&^hAO42#T7VmlQM9W*Yu+I9cwZpOb? zc(vBW>?{iXXZ~HhHs-he^^f0oC1t6VIsAUJE$3#@U$gF4-q+SdzMZ|p2cydUAi~)r zW$(J|{4DKcHQ&jt-gD(5JuLp$5}rFGV) zonKe(&T)VL|9`7nX06mZl0Wxb*3D&yw)T`?zM#nbbgKX$p4C9||{ zeH$Q`_Mz`kS<9B0yB=DWy}lo9RQrqPZQ+xuJ==1lJSQLPU2`@5`>VCn_h#<4|J%Z0 zl=DJCx9)+%%S+3qYF*8Gkt`QFuZ-jUmu=^(mM^I1m9A0YmA-QQ{ic-x!7UdQRfHGL z`~L3k<-|!JRx!)>w92fvy5StMv-o@8m$&8)+#%biRQ=f_bkfOc{|e!0kFUN-IwZR~ zbhXmTpuIXb?30)ERPBbxwcw`P&u_>s-DPi8 zOtY+xT1;{0DFv$#xR+_FEzcPtcx8&iS1^%qDuZ*6a$-Z|zemd)O@slM} zxnJMdC>*q_#Pe<9_g$x2+sdkq>VG|5saO8`^OKWnUG+BWmc9z9GTe8{JKaTZ%>fC+ zwvBn)H(X)VcfPT+`1#iDH+Y}wmOXyPJ9jnT>-_sWd&Si^_uFq?xa-ta_C~%#Z`a+e zW{HdA$lX`+a?-QYcVgN^Fq-8GSppi7dp79A?u$y&&|O?1`22bCmJKNz4;dx*DW76L zy{@hH+dF#={;A&@cPSlOwCBQ9yV_j|fBoj`?cMrrhS1DDdHaR;mwQX^(UJT1@MqE| zv4sjPeT7cgM^LpnzgC`Nj&vNJcR_;*>xtMqC@~Jh(_d?zsb2>Fevoxq|PVp3O-xt3YRh#S1 z%MG$zaz?(ddBTZhr>xKUL?!g)#{GRc{pR)A*DV}7pT?eMW3xJL*RFD`b!nflmVfN= zzSt5!z3XNbRr&Ju%X-9?P2Iuz-m^v9>4lS>l>|%N9DONH^v=7(6~zzlZeLx}BD7jS z^Lx#tBL}6z_LUT#oP1eu;`BSyif@UW`5mSA^1HA3&f4GG_N-BQq;zOr*M-vmbszSG z&SP1=|KBc&HTT8!?F7B!g7^<>Hb02jBeLhsQ|<6ME_xx~KL3Bl^-1zzmuA1hnR6Xg zLTX+by;A0vUpxO!ujj~Lm^Q1}cSHU2Z?c`z`s?QP@|AAQ{X6r@`f&4zt&BnmmCqB@ zPMT})UpRSnve{8nt&>)tIu*CPK5|l6EB?m%sy5q@rj)1uX6fhp&-&tNRFePeW%len zFE{I#I<++Il;%E>pLR_05WlnWnJUZ5OBGXp{B2nivo%WH-@QW4DQN$%U(%iv3>s(I zEZlTEtLClvI!Av;ss(BL&MZy8G{@|(dw=C= z8`GU`U$dfKM6LT&Qu^kCUv`0M-{a;;dFNtOJ#&MO`>G3H zV`|*@X;&27c-zD!Yhtr+CNE_nWxQ*80@>2LXR z%xnjzc+BRqx%cL1hx^Sm$m`M6a&OwRbd9JUcUdE!5{FIDzdxV1sQAqAsE)naz4$E0 za$`Ac)BS2CI`mKYPqnEu zdcEO;R`iyPjbgG^r8)U)%VR$*eJc=O^K$v?jZRhXbLT%k(kUBc>UVp>VO}FUDf6}Ru1YlTkA|NUiZaQ(lP zpC2chdG=VwFq>c*82B*NVad5&GjwMsvu(B2;y=$dwLt1&i+TRNDeJ519&fzsVRL_- zv-;P9TF2+>Z!K|I_nwXK+S7^luPmqP$o*U(u&i}XZ0@bn3p<+y_;%#}E_?Ym_kKd@ zaqd&Hr4RQgn~QTTklkDLoij{qVe`hMqnBP^*UFdc2tQ`9S|R7iiHVzvpX+Uo`o1<~ z=BFlmf8)=Qt<7R=ymDHt-D1;=MDJ}l^!vi{mQ&drV(NY}jpd>?#|^3#e%;!atp4-& z`~6?bIO1b>)veom^^DctgNNOSZ6pTBRJ z#tI#pE}8!F^78F0PX5oudAg@+EIohnLZb4T#YaP*EBeW}zcYMno0iKH^U6tD{vAyDCP~^^{sawz9ZdLI*sUNy&iQc_k zYn|uluKn~}H6(Ezu8^)OnW`D=RyV^cmOD(>K6|Zv+WQqpt{NsCx$>wb*2PHHk?Hf< z+1ov47Kv`XQT+W~>|V~!bL?M=If7>zr%y6l8-4PDqVv`VA?ut}SL+;FtuXDN^YMtC zn^LDtFo=JCwrR#hx2GSiYJY9%GVIOoidZi&+hDWoq!j&t%{qs=m;XHO`&Fkq)~fu9 zvC=#H0tdSv8}^;j{IcjBx6|!}8Bf=RXdZXo6S}ay)v7e>^qQNSw-$tc?A7|TYSv4B zn{RBY^VhF&lA2$wx9{KU&$;<8FKpaAFLq-@=cP$LUj;e$BytL=Okk70`n_O^`s&)u z-TJBXWfZ@t=Kub4-rn4Kz0L}jv{i3zA3w-mxwT7Ff9W2^`PX-D3sC7iC2N*+Ltyp3 z3Fq|HSZ3JQFFf_!%+cVp%BQ`uRy7gxm3!>{PhQ&lR$MA@NkQVx9hsB){9|`!O+A-e z=G$3p(f|Fu{Y;sISs#Mq947tOnQ5H;-ksxIaNUe$>0GYwOxw9P}Ose3tR2=_|_kmlV-58Se;J`Uy~vD z@@FW&DuaqpM~sI~f8_l(9=R2V#e9#?GR@V|wa?Uh89GCfC)F_e@eRYpYi|CZz|S2P zcy{0Q$K82NF3&#nG;R04wIwt4%!`Rp1cz6p(!!IY}4))Dye>8T6Sg6|E6}ZPak=rSD_4z2T z{G(?j4n0+P_T=pEU0L}&x-0cR#AeKw8;l#wD*38S}C&DW|4fT$wrVT>kufd%x&Rc>-d~|I-{gNpxVXTFmczc~^xV3-pTrn&>WHDDq?z$4oHEk{axV`+ZqnK8&JUl1= zO6s}ZmDm4uofPX~7hm^T=;-`20$KXUQ?V3S9K8+)-Z`twr+bQ5CB3_#^{Ld_N$}yu zFPlCcFyue>%_^$q)5ryPF$W^uY| z;UbrX-xz-`m@va`tJk4CCmq|X(wC}0rOwR>eVO;4dC!0QyLDU5^K-Ii+3!UxoI82K zx%W>`hd)^+wDZyuzqjA+RA;qs|J!6x{q2pV>I}8(i{>o`DEE{CF~i_9cF`p_qA)`PdkQl6d%)O}VPUub zvXW}G-3Q!o4H!>oXl7{D>tn&N0pjMy495ni@GTa-Z&+|x1JVsqi%E{^9)h8!pjK7* zm%%vuE^aJo;@#23$NQh2 z-#k6#V?w(|7tC( z-t18EnBZ_}iQiK`hU=}32k!3vzGm;^Bb~Xr#Ru(~B-Z!KS+2Vo@oHC!#>RS?#gF2o z&GM#geSPh;^i(a6d3Sa$auK$?x9CV_f-nBI0C#k&bE_(g0c4y&h zzmCYAANKrt@z6Q+*~TLrJqzV#*>WVUidhq3s1mrSrRe2)?uATp=5>>L=37Kg_x_l~ zHPbkG)scSr`)}*Mzq>m*Y3V8Le&geZtFNDvee!mD)(&0iIPLZE`}OYg%BfkGy_H-a_+lDZTn$iv%0^i^yYijgHp?n{M?cm1vhT^f57qQkICnse0gbn zaFzRR^Zc8u{+s3AQ)2%8eQFD*FpKta(R+dh_nMY%d0oBPZclvm_m|7n5(+w|=kE*j z9=Sdg(N*m9MeYV$rJ!r~v>FH^& zV;>*y)}L#=?ep?k9Ji0x=@*s@+_6?zaj0m|tk`|?P5dUQdp}#3F(t12#f8MxwF3A0 zY6w)4w-uG`|d z#AzRokhz~u`qaWp>{b{b;vS)3uZ1 zWnZ3F_nS9md)9vS^7r?)_Q_h8>3Gi9+xus6OK^U<%T|JxT6wKY?JvU=avYlRPQ zDj2-{y)vt2^~O~?zOSytamJo^JAY{ZRO_;L(=_dUu8SU))>_3GyUw;x`nt~=#a~w2 z?mzza)_#F4$A9y5wBG_Ao4|!*LCMmJ%hHasGb`|?*kWT$p^n%JtywNhOUKsw#V=~ zT|fMrf6BS9M;0I1>f`a=y8Nx4x7gobA@UB#{b#&UDXP7*W#g9o+g?e>%bxT#30&J& zn|^a^b^p6lS)#Mbo}LQzob{!3!meYvDh^B&9TfU@`SHIit;l~^@IfqgOGf7(i{foE zJfAv#eLjDAQ_WAW%I$t{Ju(7+$STF{sra=2rty<=bFGuaKOcI}u?Az_{ZPNd6RudV zj;b#nPwyU@FWs;Abi>lal7f>qJwM_qyXr^Gog15e|A@cE&88&&jW^Bfh11?fN6Vh3 zT>jLfQ&)$xCS5;LxY$|qWu5USp|w$a-OkOkUhixaU!}QJL@y*@Q_8s~b?oNZ-{0NN zUwd|r=3)i;8F!7A`0FdT@lKkQs`V={et&y(%7h;d*H$dK=-wxD)hQzF zYTNbCPp0{-^1J@zLGC)zTFaBO${p<2-nNW`YnC*3opPc!)YER_ONulOW)56w8 zEuQpPe)9hHv6DqkPF`(fxy0jPQoUu((;r_ApUV>6;Zl9Y(!T1;imle?*dq=G*rlElUz;0YQTb`gn&5?f&##zv ze4c7ms-+peY)kN7KkF6dC)&5?|97-paP0Kc)8QrY24Mwjk8~_dT7EczBXCXp`gI|d zn>S6-3-`=pYn`1J^!UKs3s3!j`_H#rUA%E__`P|WK}#n5`T2>fB5ucr>93|gt`l

>~Qt{dfoVqUTGTdyT9LG{kT;0g>(PB zy(z!?jko@IvP=1pqC1cDnnU`JcjR$>lZ(qaX0y?AuGUna*+!mutWUX$MK39EnC9NQ zq&a``O5>eE%hdX$mrhQeT{^%1<5V%75Bmxa_ov+cCfj6{F!lb549?iw+uu)lrW+ku zIlrWFL4D-rl!+_v`%e%LO{x$7T)JO3dfQ3$`CB)xiu`dqX65|_oplSgg{^Ask-T*J z#6xG5>TTg`u8Ql&O}X~gO4BiC^VV}Z4nJO8T-z-scgE^^xXqdHn$5d}!uu?9o%Yww z`@6Vd@7)^P@3FhTPI#>DcWdn+Tq&DRy)5);gS^L%&a``=y-w&U34r#P?l%^lymdB3}}w`NW1inz2fRyyC=?)TGOXRm+%u;a|qSGPA5PQE94ea78Cx&J!? zlT$xjc<6UX^A+oK8LuVpmaWT`IQH*ib65x-dF_h$oxhvSh0>zVe0fwHWazK8@E4N*{ zb$p*e_BsD)CsO0 z{yKqweZQ7z)^5?A8}xrTPmnQ7nvxxQ?f0~`x7dVtZV+TT>&`oy?R9*`yz1406L);L z{ioGSL-Ju+&bi;Yjs{^I(Z6>bT|SK?DPL>PErk}PDc9y6bY5Mwbyl9M-jsF&ql5{-Ck#^-aO-15_egBoU!rKq0gO5uDp(1n)7eXB!hjYt}b<&F1Ip3 zv;6nVQh|dZ8MF1-{3q4bR%@GAIudtUF z_pUy0dr84Ub>o)@gWqs}HISR-xW}owM>p=*?kQ_OESs`E#C4ZOzJkpfWtkIm69w3wBRz@w>R zl_7sOqxnCd+PtaOAi&;!ce%*NPkv+ca~@UhacdrK_gYhT! zg5#L9u6z`<*(GP)>DZ<#H&1@$+kY*3O4mh>tQ6CYe*LQK%^g)`_x`D2^Q{goIb#?T z|6D&JW3AJRYdx9wqkm>(?T-zww-R$pyZ;OxndE7KwTKZ3KPy14jiFddHUFI!e{9EPyc$w~( z8wblcqB1WpJGf|aV%Sdk<#qY3GpA|9g=FpdtI{KCx%hz4v-3Ok!?*R^+rIddic#gR z1E1b*&wBCI|FJyF^7Fe(w(#`^oa&ovzx|%`632CxH@v1cpS!{Bb-=+w{g~~V%FSwB zSFM>GFU(bp53!p1pEqoCm1*YfU%`8M)V>+Ed~ANrpUfRI;d9=}_oquDpR^REem%YZ z^H;M!)r*r@CC#2#zm{^A+kWf)wa}fb_+Gr`yf>AV`^j|ctgy>-v&`I+cTDr)(D`)t zpfzu5;&Q*aMn|1$_b%UaT;Yo3?t+JlPK9p0;VE;(jN|;VKbiJN+&MlSn`M@#aCcXk zS$^uZIrB^RIc`2Qw|(kOv3u(Ue2@1_KAdv-+%)g1KLTZ*o_xxYStHUQ6ZdL-ykA1Lt+}e-uqN#Lhnd{P$(P@8st>+OlR*;6mByRtIavQ@~b#JFvn;uG$LQ~$k7e`U0uSNh6k z7riyj&$(F4pJX@1?kI5FpLSwG-2O-Rk9JRAQhJ*&=>1{-5~ZIZ`ulad#m{WsRvoqC ze`2in6DLWPh3ie!w9)H^RB+RwmR&4didh5MOlAF^`_sQ=5Ql-+{ zelS^pX~IUc`CGSuEZgyO>ZdQOmw#HhbMwOH{l(j(&Kgzu7d=1oa?9D^AB%$(zp_0) zxP|}r16g)`o!wJ)0%N#iBhu5fUH92kES_nT+}y@;~l%+&fbrs6a9`nc%U-`O&8@`$l}a?ld7j>8RXp?Yxku9aBYH~YH;%L`BBkWkQE;J0G5quT}i4r)h%m?hRkOuC2+F+?s!z>uU9uob@)IZ}Pa_ z-rIa!Cu{wtKdoKS@9*j^uxZh&|6aWIa>cC~U(c_6@^Yq8TFB-nmMjvFf3h+1+>1WJ z%Ie&w`A2b!(ehc20!nN)oeylEoQ&J5y3IWGLF)JYJNYKQIX8EARjJFo>f$>mD$cG< z6E88}tdM46;v}B7zD4rhvRIF@cUe298c0lXG-x?4;SyCLdN1J7%~;XCH|rD2e13mz zaQUt%d5C@MiFJpnvb7!aUwoLj%i>s%=LNpNEe?$}LC%%$rs~9<(Vah`?_p;2pC2Dn zk6dWH_4~qZlVCKi&&; zJduf2E4f%}RP{XN^Ng7n6-!@!6*w`W{q*7c&RgXa`~F28YT-;-z$I(qBxSQ<-`m%9 zYCAVSKW{0^_OO3l+n)Gu?E#M+A4Q$J{Ch{?W3IGZmwhW{Uap_;Hu{=%t8L=`(%0s% z?w-GycCh%mnE&w&>-(45EREq!tlK9cwEgg(yXU_~e47)KHk&iq@4CDx z@7@C$Me{j7n={gQm~OAWxq0^XUsvycJDhwm;?t9pXBJ)7-eWbt4HDRE9>2}}GWWO& zYG`*@u{7;wc1gG`XJ4lj(kikm_<_gdc*%b%X>(_F7r-nKDEr+L;@;X_J$ zUc6~Dd}wv={K}drfyptvO8&RM&0X6mWMJrIsro=H?0S@tD%+#%&Gx4Uod z?v;B=lh3RYh`-qX>+7qi)JNKaXIqT!g(gmGZsVK&uXbLH{l9JYlck8G{U)zE4li>3US~ zTQ8BjVE9_G#V}bw;nkja|Mkart>6F0>8XNtqFHrKtHzd$k3oC?T8h>^opqR7T3}LI zQJti|V*U5eHzov_9hl6sx#&<_(9h{-T$nPhUwLV~q1|Qs;OsWEiWWkm%p8;?B3@!O=o8FHoMA$77ZJcbZU2%q+NU|dPpnnCBfn7(~hSJy9U)N;*^1Wbh%)G2tc3Sz$ZL@AVe5{)ww8Y@>3Pa^< zv%b%Zi;YY@H^);z=*Rp0e2HwQ*F6?~e*Z~C^L9xW>ovPeP6|GfTJTQYbXDlpdJ8?L zXI3jtD)hYAQ+nI%?Zs#3x-SGuF?;4{y?nYDMj{sHeR67PP zxpl4zW#GJlWnL`PM5$dX_O1&#RN=kDh-upC*UYLVitgcaA`DgI=0s>!);4_V;}Y5( zbIR&!Ys7H_DVvpTJg?SIo>#q!OD^Tx9GB!{z8lgaj@WtJ`CIzl?%F$!WG6mN|7nV~ zRq7v84;(m{b!?le-_eIFo4;kO^u!D2*+u5Z~|AJDryDVQfVB#tCdDtdYzW z*7TWSax^o{=F8*P_iESveZyTJUo7UwbaiVE&!RIQCZ3ZEevqv*ZP&lv#F+Uum8bSx zeSSr5)veY3_R9mD3ts-&DOA#YENyWb-+Dui%Ct2i`k`@QYhqHbcFF{oF$ZlQp9uHZiZZL=QgEM8;!Jv8-ok+ba+HWrO|gQ@MO|0(2rJHE@^F>zvAY((6|3wx7)Z}Xey zu4=T8(2w2o|K8ZAbA9F4ZBrd&H^08R_P&SeKfR^JZhzOLT{1Z&{%TFg#wPvH-MZ4# ziu)(*U+muhvPxV#f9E%?HSe}wFUod2_x4~@*tL~^w~5*J9v7XoV*lrR?YCBImaYoX zn)9|Lc!f^c?-g~ib9?Rw?_KeF>mS#Ue=BmD3P9UUqFja5{nkw0G+R_6dw%)m-N@o(&dZ)v@^A@jvs;{#n-I2p2ZrLvez5kmu^mkZfUGseWaeKwd_nV5I zW|{tUjSIbRXq&w9v|eJ}Yk&E|fcoRnGo;UOp_dz#OcP&S6xCj)%pzO-YAI+-SrRJ z+1yjkzNf{lUqdDk0p1eQ(YZgTr?w|A}4LS2QOUv^wP%({7pl zJe?~qIt!I;UT?lW(ek_Klz?O&&YSh~es}Xo8{S&;=|`8O`f|USFGRkzANugjF;BDF z&SH)Gp|A67cO_q3E24G~a zeAju&t#6Tge71|0{2iX1PAcFsA*(4HG5tW6KQ>v%P4xkKQEQ}p1!a6ym{uGUew-;f)r@ZRXcgrlus}I z)xJ&qEU{Uo>PPc;_Cqr7@9b3nzv{!BcC9HNI}eD~*vkt2d@yf`&oq@Q!OiWq$&9ZS zUZ4Dsu`uEPK0p4t3Xg5lHg<0P607z&HnlS;RaU>x-v=6Gzg7Nm2hT<>V;#T$iIc?E zyy4%Jw)~1$#fqq)XMNq-r_XB%W+9* z$0fG?V_~!Ses;>i=C9v{k8>Sis%XB!+a%`nO6=_X<$Ign-2QV@-=M8n`VIffWqH3X z4W0}AoLM)=D)QErEX^0I?_O}@Xc9iwcZsR}X4-o8*D?2ZuPeU$?)}dEwR?WgGS7Zg zBIh&PsoK?Vo1t>M=j-!PS?g8GpDL#D1#NC$I zp}Iw>e~Nbf=HRWX^0f|DE=W21=nj9*aZ?U4=3kcGyLYtJ&9#p1UMyi<=DlpsLC|QB z*tz-HPcLuE->yIVV|!`iw%=WQdG^RWe3{9!=+UaHeCNH_d|v+d!zUU0v?;fX*~PAg z{I|L3{?&fUIXK%2+Hak&y{5c;Z_-}-+9P%U z`pn;WqitpV@m`4IM(v9ykMBfYcI9exKK_47-Q#+pPEmhb5y?R1iC@y0VP^s8#6>Xf zy4ych{rcYee2?AzSswT1tatH>kKu1Ra__^UriYBO4+H1P{fYVh^^2VG&AB$EUfez$ zzD4SFJ8z5c?0;~wHS(8$mUvK|LHY0MsP;Jy%bQ=dDlj}e`&IGA-F^SwJzuAnf9>wB zQtwLXxtHY9W`^WxcEk#1{+m9^%%qDdF-)5!%VNO#;W8w3Y zS|RJwDiaRw=AGwjpkiXb^wV}#?`a{Gg-f^De73pDyieW#?@DuJPdgXieBbluR@~|? z@V+kj-)R-|!dW}^75FM1taCEeY+l`Xv~~Z#Aj`i@s=Y!x-v}G+m}dI^py2gWPqo9p zY;7w1yXDOMZ_S))n;RTB`*m)di7Z~?y$Qh|-J1`ZDrnuh_s)FOJowqTn!S?hlCLdEI|tR(&buFBNef# zrHM1(MOVUsHS=&ODB=is(Is=vh6_F3pdsqOBD~;&=)s0ajEIFPcp|Xif~e)3N)f2H z6i_?t3XL3U4hyxL7&lkpQgA}iVWD=B#b*taV2AtCfl1J(!6}@DIqfSh1rwbcoWh?J zJPSl?V!*jdGZ0vg?;^01B+5SL+iQ|56>)ydJCS~Urw5=YDP8C^@%+;1Lsxw2RK{^<{Yd7f*nigfuh z^Zw>Vw<6Q3Aqh0eO{~eb`riaG-RSDl9YRODPreXzPCYMQ{q*VdxKCO0PiSn({w}{M z|9;)y@~^M%e>%i{-u+mjt=!``H;X?VzgJuI^HgYm>JG;z)8p$W2QU9OB~?3&>sVNd z^f|$QarL_WDd)d=waEVa`1rU{@iiIF9zo}Owadd=WZOmA)i>1tceE`3x5uX9gTW8C zb(LuxbL@)4q|AOsa8ElqNiB4~z5eezW!HaidR;wVd&}E~kD`I|yZ6-JaB%;4^n*B-TiSd&-~x5Tw)uP`-Dy>zTCY0y|MrA>aZycr`;e~#6^>7qFPDnxhbBv zw*EY`^7G}oIhx}7ag)B^t97>xSh8i?Qt#>4qWZkJmwHc~(D(NC32)6{yV8l;T7{jj za$kP^I{nk{O`<{T-~IMqy3%{vKRso)-l=}Fx7=1-`1;|Y^UGU*y*p*C#ah=bFIrZ4 zA${(FZ*Q%)oCsY~pg8m2VHHlE9+TzIm-qF3?_XZWHLr@(Zj9UXwHuotAHU#``Vv>au2=iXRTYzQ5Gv6jn2s{pIzZ`_E24Qr+*}T9mrf z>1WZUmD%R9em`Be>xJ#SY5&*%+L~DPc7FM(Q#6A$F6wPJ$-fpculk*3?6V)8!l21; z-Djrx*N)uc=RU#y`S6yPL4jBQhMj$N&Fo9^ze7ihUVISjlveM1a^~l%J;ASYPtJTC zy1K`l`@a87wb|SAt}@--^;J6M=_=Er_xEgP{=V$9_xH`>=OzCy{Cj;p-(%yV)}=8w zjSjXbK52_waI3k9olkCBkK`rq$;Ws@R$ODAX;ixF+2?Q3rYz4_9S^_%;_X!J(2&~S zfn{%Q>CUga6q6OUUTfc+#g~_#fAL4GVCw(x_v=+}Yp>UEySikD)$%g#Ui(8o!&aA> z=ia%nGM*zi>ep|hQa-cOKR=7B#P8b^w8cZQRx*g^Yg=R zZT;sH8_${gZO;6s+gZDxY?9Kpyi!rO-Y>V-cd?N5`&n04pZsp`Gx@D`*{W>Yomc*E zST{vK+|59*tzSyH`sxmkITjOdZEujee|Cy`bk1s7(Ah7A!fGeuM6+uA=H5Q@DsF=Q z``4glrb5oGWxM1~-!88Ha3L{rM@Hv9z5xDXNt@Mp*FJ9Bl5oR8r@UOZs`%_|s{`WK zkDdx${q)91;Ynt`Sw}z0miB8&2MK@KHsP2c*N@`;pHgKO&VPL^|H}8z;&By@cg2fO z{eFLy)68%0Ub91w?Fv6$QvJCpUEi|k$%?cur}zAvrEfFw_V!%W!|r|4{<8C(dLC=# zIqS;G63Nf&tNZ5_x%PfkWM=o6W8r^n!Ogt-qor4N<+|_u|6t#jmsf))sdy&c*Xb71 zpBn#Mf5N4uUTv?YR=&QbYkExm^+p!|Ig?boPS1X|S?{)X2^EUwvAe`9@c z{(9N`ciY1b-_>a`%iGxfvxYOX=H_j=Yv(ockFEGyac|S7W$W1{o~zxJvGUitf{6LQ zyI#$Ud3x6TOxoX9XaC-weO@5`R;tv4*S4qUIOp#>{xj&>^y=;UU+?X#4i{T_o~35{ zAw#1yAN^kGs_D1S-+nFpUDW#c{*Zk)GB2mEIDcsKBKYEvEKKCis$QOd>*i0s(b6@+M}&XM3<1a;PA~rtx_xE>|W!#<$qq;L3-Y;H$&9$Ft@Ur^l{q5VY zto*x8@A0qorMLNv-fw5MvcKY|YH?8E%$s}rJkQOs)i%9f7yk6eu0_`$AC%?y5fDD! zFS*i{HRr%|yC>n%Yn(nLd^20Nzu;*{y-K~z=alkIV z_M)#;&6kB0)qMtfc0rsAKR$i^^SLa4bN&BX-cZl}cd<(Yn}1c^l>T>j-w&^4=Vz!Y zxA9F{6{_|6FK9G*&);*u!|uPWT@}B6UCrOr^4N3t*yJ+5viP}$?T)tb|h66SwH#~M0 zeqMI({kp0X4WS`E$9v@#PA|-RT@&E17xTk=zq`irhe69qG;4VmuK$+2Fd^f)*dobw z$&(B2eQ=szaM$_GjosO^RXiRD?D%>x_dk#HldR&sVte;K^ObGo7M)(a%>rwWy&jro%{b({p(_9K9h@^7O9?k^(W_dS^j1FydC$Z$KE&3xfH`a<=r{aW8!xDYFc7H z4j#Pv;APKw*AIuDD}5@RS=h0u@bR&!^V58{*9m;wb~pa}yVsZh9=@J^{Pyp)+4X0u z^N;DCsxsd9CYS$o`jqX-SL$rG7;gF9V_s{T%;jY5QvCU5@2|xBT7qAhRpq2VKl^w0 z=VyH<8RmOiPRpGC_v*Fn>C2WS-)+y`-n8%D?!9Zp{~qCADzH59TlU5tq17MvUaB#_ z#2WLjvby$>d+=dF`!oen<}-CR*B}45l%8*Ae17%$%MdLEGGgfPjW%C9_3Z2Lm+hrC1&&XCeQ5rka{F27E5+K?UqTvlmdh5gd^oC}&G9_iNS z|GN49c7BL_*^4rV8wU$NqPI~XJU|Qx3=S#b#l_*xDHq!Uwt$6_p`6RDkRu9T~JT*l#^=#MDqJXQm znSU~B*XsPO-Klz`SJpnTJLc)BY14G2!?N{^m-$|doBN@`$@N*W9&h-xtL4PgwL9aw|HXWsy*=mhBC&HfyY7oeG5vk8@UX4f;n{^x3e)+e zYb4z_r~O~@{^G~S$FCR}5Qb z_N(f@!Pm;-w?B&an|^(K^>*Rww?B+Z7r*^i=l0Xc?d@^yx5h_q@0(?%SXBD)xHsH9z|v+juB{`0f%<->v)UnUjs=zv(GhJMMyrH9*irs&Kxe#stHk#}XyLynJ! zefo|)`}4@~Uale-6!5tgVu?FI)0Yh~avXe^}gKr?v}jEl+RC3-o;WI?ZYx zXX@tbiB6X;t!`Hl-Z#}EP)Rj~=bBtX>ZvK4#J^`**8QpQ@{w4*_m03a)`Q$ij<>JP ze`WT-@q~PKz<=krfm3ZFjsC8-m)oW&_9*<)`u)G03=T`!95XOvxbyB~0aJL5gp+w< zGuxNIg}tsNvo9_2)CFx_3Ez}<@pjDrM)6-0t;79ft2#Fr#h(*Aq?~wSDzm@FpNDsp zpA;Rr(75PYgks~qPsiWPoYDI6>YJNeHcYn))w-+x$I5O)y?kv9$BcDmX;%y!_Y1l; zT$u1F_4ErR4*joJYaYrAKIY;1@L`gvx0vLG|Ixaq6kWvPRPKNINxSc#k%d`#&vtR znvXv}`-^uri_=EK7TrUu!dEXkz9#bh%dN-7=fD2gZrJd#qp}%e zty$i5{N8E({Y&UMMDHKXJ089}%`PXh zYQ+SzKc9By{Ny@q&1AVU;m6WDa~0i%|cP*8R35_`G`}L@(;zWT3e>O6)ezJVqHbGpXC|)ko9}PJeC95O@-fK~q)f>4vrHqU5NM+T(*5_N7Ps^6AIBLYrki|vH!nSyz{*|w`+gPI>{W{{dz{_=U%U*Jrln$I{kcJrTeS+ ztg^|KJOL{Kx9;}a*;+@g$NC*wVbphTMaaQ>CAt;9GfnPArPn2JyuH^VtMth((NtrO zc)@)aj<5Z%KBskla%oB6H2%Bp>BG;*wo2w}O}v^XFN zZd>o{Cu@GyP0`DZ+W+qUx8#JI*UNUk>;Jy+?q(r1j|X4BTl~53@NKzW{JXpRYWxp= zw~5LAaqy_Axsns_$GNQc9zM)Haj@-t+-^nt>(}@GTJiecN6XZ>y?^(7`f7Z+?#+d1 z&eGri)g9+~yWjgqX@L{mAGvgX73ZwJ{Dz6^+Wf$sZ9R%l&P|rJEjzRJLhGlk z_gAfK)w9V_(ERiAa^D8mKUHn|N8a(o=_b4JT|Rkz;su#{gFmbI*7ugbzEZY5dc|vn z9lR1IE~+2@Szp<7Ppm`Sd|q&1jbpRoL8DLkJ2x*r-gnwn)UP?lt71ag-=fx9fnN{L zJ&;W^k3S!{ecjwAvxGDrJZ+c|@@Ju62UqUxnpLbq^*`k;p1iQ0bZnQ@uNi)|oo@I2 z=h>(lCR^%Fd>(pZ*=p6InL7@YR(rhP`?TNc&)am5_ zI5WGL`=aEtyfb?iuvoPC%$6xyD0}{EluKp&`pWCo3a<+0dN99!BNlpW;_JN!@44yB z-Y9ZwFK4RqC%eX9%BKYM_!n|N>=xK%kfwO*(BVs_>@#+oCG1h0KWp{OkCi`81YY+Q z{B&=2_VMYzb3v<$wqBlH*nM8Scs^Hd%}nMU(>_BBtmnMi`M+PxWx1a8^zt>)N{!{DzyNB(zysz1JXLoHTv)yiiLtPFSF7^FdXjGxmRI zyoJH(*&E&Yo9#rKd!WPM9vuH;cG><+0H*N`)^*qJG{oQEp|u2#k*X5)V^Nn^lgr{$*rtEvQS--~VM&T`$-F zS9Mn++Mg;N7e8j6_S$EP#=>(i+a=}y8W!)n(<^x=-XMA9ezC~wHn*Oiw)pg{?&(*H zD#KPe_Xq8q`UcBvW+uws+RORd{YmYi*xz!y1pVH#`%ZYYZqM@48H^%w6&&#`#}!#> zD<)s5y1n=NhHP7j{Aa~y_nqzWf9#mKtu=hNZ|%N4zl!#M4av`VEVj8U$*0nIpN;I{ z>E~DE-Y$QYwMTOCyuRm|wHdWr>z98BX^)hj_x=5coaveK|6UdUSC*)`<$X=`cFRk) zGqMlY`CPBwzCO3%hUl&I#eXa2O{?8$r^vJO)>mosFH7`)%aNBJ}cn?-vf1wPpn|Kj(H^ZRyEyCzp@9pjAMhMUvR%SW+%+3FW;w`pBv@tzCE zChC9Jjz1>&>E}Uj?wwZ*n3vz3;LdSfN@(kBtGzqTXId#evP*n*O#9P{g94k<@~zVx z_lT%`d&Ok;r+I~G!3P7`eLEcf9%ww@I_s)zSMK#U5n(Ik#)p$IN4^?caWT z_U~cIg@AiMiuUuaTy^2t+U<`|UpB1y+4CvAr^;&G?yn2KUcGDg?wX^(r|19PX7aRz z@4mD3s`$Sf_iw+ic@|}Gz3uOfb>H*iZ%;6EuCgrq({lU#vA5Pv=O;fu|F!eIo&3rU z#@#dbJ*_aE9rxCI{@=f6w$#txxc%t$)E><(=4V!XiM43Z&cw%QGnd*VzcSCs zI$M(djsNA<+r=ykUtYcQ^Gl_%V%ZAug^`?7f3P@9v~2(Lm2X@9`u)?QpUXJs8BN|J zI{W?I-Rctd8=P9XUR?k1LtMR2`APnIso-NZ58vn7KfKsb*!D5WDf`UFnD~kBc^2}` zkmNGfk#dgPQGMyVU#;zX_e9G^Uf;9*@rmibr|Lgm z;qlN(%Hy|R?A&u_CoMg_#CLa}QPvj=Q6>@p=ggm;-4nU^o%8oi=M}%L&rC1-UG)FM zwq6bKYrofSe|+usN710$d;j))diqcH(#M$XmAAvM|8=T*fBNt3%Mu+OWjnJsZ~wD# zJ*>%lYl6K-_@dY8%4yMn4b#a^h{(CgMzXCge?SqR#R7J_c;#jM#(`9#;y=HGqQa#PJ@6N+U z7Ws~fiu`+PJUbSNzH$h9?W8qxkKke()rIbn65IM`8+bm`+Q{*9&ZpHMj(bmEAHjd< z{gpcJ>CTfL6s3B-ZlCb|Ro#;GPG^sUtFC5$E&IKnOG~8a*&0iu++RF5*9&ne?@7Jg zCwuEQW4x2#H(|N9InvC(zD+ZGYwa0qDr;M}@Z5?buLI8P`va1?ezVD2)|nnzV|Tny z{`$Q#Ovt4cC>d+6B|zmYAN|XIXNh+{!+B zx!&EBF0WbLANx1<#{_eDt`5FEQDwLH@o%>#a~k)G>V-wAik@5T-10&0+J1li{d+ZH zZ;M|0{zCg0Tgxl0tM{ipI@1i_`UWS^DN%L<&6H zlzQ5XGhn|*vd%B-K$n!*&-eP2?} zX4Z9oKA3UZ_BDSjd-^I=Gip)Kzcstp*p>S6vcPu>1q?s2^M?z7zZ*zepg_v(Mo_fJ+(y7hG3*?k|rZ_}w;^X2Kix4C;W z{y&ekI+a%X_g!$@svkK=o=E&)6t*{cxS1pFz2Z#$>&sWN-*26@J!h${cYMJ8%b+vo zKj<7Sx47e+xUVMe=dYPBU;ggNoNvE=U(N9&{5N0N+vR_h-JkuO@1M-1-xI*g1^%#e z*o5}$?a(=VX7$|dRcY77BqX*Z-0sj%Huzn4;<`!YA&HfNdsituH2ri>CwgDdBn`u7 z-FdNF1kzR?daN{w2jsMN^&yNpuv+3Q+i0@2tEnT79Cnyk7zH?LR7n6?`c6$OQOy)X1 z*QBoJoN-FNzk`5ud5@2!P0L{(C)HbNq*98cbw#O8;o^=H$H<5sqy9 zZ`P+DKE(X{k?Q{Je2+5ZCr-Dji+R?gKHV+j~%vk<0 z?OOEpfD3$WbH7R*`eFEc)~0KQXDc~wiC>pHRA?xzw(fZ8YjZEzsULoCUeMmK;L)lQ zj_2pEWOA);PP|k8?uMU{HotGo`_tiTCQb1&_*Y+D&M1F$t8Kv_l|~j0mh$rHVp>yz zmb8TwM7^jkt#zaAe|~_}_N=nX*ken>N2#_V@1h z#<_F%7C%2%uJ-%H%e~KEefJBTJR$D%$v--6-;C#fJ-_+!qdm9ycK+jfYWe9`?b5T= zwS6U0q4)32zxA^7=b0;)CN4f6;U2r!r(SIC|5fXAtNz}!n0sHiD(?9|%k{hbyZyrd zeAv4^_tDG0zhY*-Um}~vwe?+bSaRu|x$m8p^Zx&SJlf{pcH^#y<+om)$~@Th+2Ymb zW#{MG)&G)t^*Q3|pZ^o>=Kq>wr8=eVwPDSa z`%|xtXWjkz=fC}t*IU!R`&gb|`1ybJ!kYT@uRIlRr~lq(dHY=X{>%F5`}bM>o^w6m zkMm0DQ|09vZ^cY3H|~4$d1Y*AV6&dpqhR5K_v>Dt{d9r(`%UlCcT<1wn)^1O-tOxT zaUZVsb#tw69r*TxQ~2$Ee$#*}&o{@-3=80UI&1I0`epO%SJ$7nI6u2s-?{SL*4Xv` zk6o#6HpvM%|BszbHqz6PfssYPK|#B*!*#XU67v;-hO5sPzxk&dy?xfp%!~Wtoz8t} zeKAFk_eh3N!2g!F?}}gBw{6S2t#-6q^gC!Bud>o@$mUU={I=hciUe_IvibpI2-FKb=y^)hHF z)4Hxwt=j9MtG-MRQ9n_rmAkXwHroDk-2BA>`__N4a;ok7^!&X3uhU6oM_->mHuK-S zf?pE*tG9D+?T&O_xk_M!9VwX{dMP+<=5&{r$0ZvZ~wh|{eStVUnNVo%jQ^5$>zN_?RW9| z`}ZSlnbTLrzq7Nt9rt(ZzU#Xd)|FT1hVR!lou0Lz-r4f{6>1AFF5b_?EZ{hkCs*kHaWcA#1D$q z2lKTzRD5;&d7Ew5zn$B^eu=N#|L^{Z)9d#s9_`t=0@0$B>@?|9^4uucq!WRZZ4(_1am z=esPwS^M#)y4lA6O|9Iidp-B84}SD&=AD$YdOL5Z>7BnB?(rVvfX&JaloP7&TsZ5u zdiQ}fx0YFc)ZkEPa42JXdwc6vZnn^sF`B!xEI%3l>z%2bFFn_dfsy4e;z3}8!*q9zRoGn9vYnxE-G_blU-&>N3eDC7iy0dA z`U66+xrQU3ktz0JZT$;b)L;c$-Qdp16f3uIMH`rhN(kIzV%c@*_rD9)Sb~nRpNVCc zjZ+{m7S|~3VdW@k{r-1hIkupaW92BRY*{3Q#WkZ5i9aG6V;Qz8B4DADBLCz9Y2?zboVizFkRa~wIc+9sT6>k#PkQ;eX}#}j)T_&m-aa1`fGB;Y7>%_e&7Be@fc$OWJpSI+P@1&A18&vXcDkr%W=H^%Lb2%HM7*Jeb3_%Pjw%Qv8>{UdQ}rNL+aL;^N|> z*yHPpj^F+NvG(89>-SG>mEDz6*|T0rdL~Q3=_7@=?zL=Q{qN3;^Zoy10-Lz!WUmih z9e!F~+3n=1(AAsYzInY}WD>_oW&N+WH8zW{naW&!f8y3|`$?hPb<>o8mU}&vyY3Nl zF=FS&SAsit)a?|$rFDPByd`1Us=w=GwX3JEoxJ04X3>)0t?E~j*-=vc1Yy>5nSJZZ z@BI&GgG&d%cJ=Tc@QJ-eb4w<+Y*lz-a%XRocjopSP0>Za=R_k2n#C+|Hl zv&h@ufBO8of1ygg>*l|UwNAg^x&Ptv^iy9;0(9f|1#Qc{ulK8X%H^(qJ+J3~mNK1k zYiriLsqf}@U4QxFz5af_Df{AUb+_OBlwbMp=JL&Zo~?-4xg_Ub?WdCKe~JR{8covv zWM*mcTw8NT?us|wnhGCJdM~+jv1DSi=BM8~awl1cw4Ew0CT+iu8lucECo^aHR-QIFie}Ayh^*a5H?$f?K@y8eevt@6MsGwkKP}p1t)}TJ6^|gVU2E=@c)0P%Y3iO@ zH`Vv0tIDn`i7Qi@!gneadB^;De`(oEzLf>{WRF(|uiE3{uI@eYm#J#ubveuZF`k{e z(XW1_{{hvf%d`Lg`x~?(VBzJWu(SV{ z{+wLm6_}K?=*p_dV5_nnVS2e`p3AdXYMbUc<2B8>LrIuuXkKNwnX!CN?+#UtgBj= z?#x-9dwaF&I)_G|=eKv|&hC*hbyM@7sm003zT~E=`01x>qfh>PZu;qJ@%;7C)6adY zDSmcN_^<1Zz{6~x9x(r(*u={H>s9sMu;&eei``Cl2rhOlX1cm6(s|vkPh6Sz*Y$qh zSbH^F$~v#fXSSX5voo{xRlTQ7SSB8?5k7mDsMeJ2rTczJngQZpPkzGd;b^Q zt@}1py|!#Wk3`1$(yydz;<~xko_lwd{>l3H zb=&{z_fM{|EPk@D`n}otD<#HCnVVG9)lV;Aw7=;U_iq2?S=T>j`>CIOyX5?oTQ7|3 zuFGz>I(s90?{nvR`Mi1CmlXx~OB>ZLTl`6`@{OmbU763l%GX~TzCU~HZ#Vg=cGxLn ze_O?;r>CAR`Lp@_ewFHP@22wKtBp=NV`6#yLF4atQ|In3J6V4Jzs79y{HbhTUwgd{ z(|!7C^|}vt5Bu=WG_O80MLzc)(Z8+Snr*9bva-nY)InRd31XUsqJ8z-e{MfpjnW=aSk66X zvcvUfy3wiE-dF~m`*Wz~A*=6_+TYt2IZj@9_}_&3`&S-M@fFvL(lNhZHl0&N)#Krz z&oGpN)6h&U_R0zTkURziof+IY0f|TDD0+K|v{}u4I0C?7#oi^jf>EmQ8%J zMvK+l`lc17p6+;d@ghU_w7ADNg!p=CmHYLdr~Z8!ubp>uSEyCV ztGrL$Gp}Csxfq|Zb^ZLhf2}nif2tQ9eY*Bd-S?j+?Kj0HPe1eW_8(Sm--NtLJ-?Dy z(zIx2`#zIC3+wE)?CLP8{-gsLSI8@DeFfaIC#cNsVj7#5VS?A8=w0NoidVb9{ z_qyLt*;j&g<{3Bke-u`?YCrMgEPFa#Bs=$L^iy zo7w(kyz@=GzwuqK?`$*g?Q;J&DgQ00FDc23+?=*{FZ<pzd z{l8av|IT!~Z)@ZJZ%jU(a_F;c7IiG*Eyjb^Yua}qCrDZu67p%2A+%2X%ah`eE^o|aW=gKoJv$xf`r2R3*=IjL;QLomX~w*D?e9HRnX&rk7f%0I^|$WCRKrxm z^1S@`)4$KG>TEB|H$C}8`{cjot*ZG~N<3|+xeF~yUUJ}Qr%>?4KW{{|)l!SjPG*jt zKjFl&a?g`WzNv@bC2uOb9(c1>!;4SF^|YY#Ty?F`cl(sw^k+ArG*zEuG!{=%F51jAC~J}2dii2sz{QDL?-nsG-=ucKwB*A2O+`1IUKS>sU$o0! z;KQ6{|Nlep8l&G^d3_hzUhiqC`nNPZM|jt#yKBquBsa%cElPX0X62@mhccC)w@!cC zv4LH#D&$|x{(H4n(hsx}-GY2)8XWufc5?r{?ayy+C|t}VXLRM-*Q&LChozoW{W^I( zoom&`TZ9YuB>|6{YG9^bz9wGHt8o?aeH?7NEkaUn^mkk!}@R^ z*X4iztr8~K>RpK6yZ=RYbIkPZd77J-`)_*w&#sl+B5feiS$fW+sg0Z zQemnWd-ibnmI%l7JzNL5BcfsGQCyzeuU0C_# z`pH0}%(_XOCGRKN-u`~_;ojeK(kfk1dR;|Z4p?%Q{GBFvVb{M~**f$5JTG62{l)!b zm%TB2wVzwL>#;4%pG}WTa$oo2#njd7_T2H4fBp60ZlT0~%UzedW>&s^D*h%zOSU&? zXOL>;*Qer3kETxVvW(c4dpqy-i};BXC#rq8eB0;Xs`TZXT;1Jg2Szi$eQw42c@ek% z24(*(z4}%4N%bq`6PHcNym+9!&nxTFkDAJ#N1rc=xVUJNd48O<&91-KX1g+LSe-q) zzvkad_n>_>mexUT%f;g^?wY!Gk@ChZ6??;?Z~j?YdEwo@&t(@M%=TS@utGU zORo=qf4Y19Z?Dy1x|?ibn6sjuAO3z%koQX_gTr#)xca|aze(^a>^i;jj(EBCxw3sV zm2Ye1j6R6}j>$OSU3}8^&x60;BtO{iFP`)J>$Lj&D%d3m z?=DwfSrY2RJLA;~-ML9Ox1A0B6w?s;dyd02;TxC!y;`wvqT0vZQt{S>*>>``*K@*t(y_id2XuC@gUy~+M1VqLTz+5PrEXq zy}s7@m*2h^zP0mJ#Kj}k{u>%koxgu$gU$8D9X9utPPkL+dvT55@jBGn(w(znwsNtQ ze&)SBteXlStId{P<<|RZ-?Y+_>3-eP8Oy}&{=GQ7@2~pi!iTKAZ%tNKzpwYmGjW_O zHr;gk=X2Q^?va*nmo8m8Gt=jEj>4L=SHrD#zg^9?XWzT;t@-o&{4NFE?dd3dE^s;C zBK^#qT>IPm?Hx_{C+*I-r}cO7_1zUGgMLqZ#w~67Z2eWW(&c^|uPpj`BJ5V|Jd;Pax&*VAUc zdZqtpt#5-D^Ca(SdRrYg_=v{jn@pc^?fRW0^Lr)TFFF=?`zi!9mqq&iF6LXGzwAQh z#Rs$5re1M(f9zwt_~I57HMx!J&&4k7ANiWpwd=%Y)L(4bPtc`e}83$K~?${nNw0pMP`GX7)MDy;ZHh zWPZgvYuxAmC1Z8jcy9RrZ*#t99uG?S+pw`H<7QIlzM|eKt2f5;tdiz-!|K6$*{avGC1uRs33 z^K)ErQSHBz?q;3;duDF-arjVisYO=Y%3nVUv3*!N-813ejmhV4%!!k_!x859 zbRP>>$;+Q5U3YH3uT5xnICxI}#pgYhM)tvd)35)2|MZVk%jKY@UaG%e{afuZ@le^U z*ZX>Gihj-P^SaD1@7aROe-f?sUX#3gb!o8s_lL_?eILdkLpPc-HlpYtt-Kin#Qq z+?m+E^rGtilba5^rha{5_H5sB@4L&KRn7hXX)N72AIkrdZoJ zO!L*!zN)t)pvZOlv>7(4bC;nP?RySH@|I-gt&#U(IH=hzu3ui+Z>>uu9D-H?@ zI@{IXI@j5Df7Q-w3EDEd{KFQx6u#bcdrjT)zn3x_-z{1eb!v*<+k3JF(UV`l=GYLq z`S~rurscL&(ChZojI@c^_6XLyOPpkVi=46x6MfTu%FdR z~>3Yhq8O`#_LO0D^_W)WMt|;?sMsZ@yYX%00j&wftmm>8WWTxbG0gLG2=9-dzlD#K zOtp^9^$Sn4p6W3D@&>=(mnS;^N`JrkyvOZq>khSF*J5nX>gTGNp1tBJo48neqiIgS zeakcZvh)_%rj;Jin`@PF>wVqg{VT4oh`Z}Ic}>8=J+hk5{@vNT_Gj0YC;h#)y4RoO zMQ?A8U0wfo&Arze>!hx(zS%IPZ_{Okxw~~vd8EYc|M&4_>$&vI%$MiVmWA_9$*j}; z`}xJ;|68>sU)lbv{UOiD9J@z`rLmKP#+ zz7gwJ8@wvH`=;v|@8w0o26yeX+xcXt{pfkH{Qt*a#bui%_deJ2i+_FXq}`0iGLvWh zy56yGa;@3iZB8GpZa%+o_kO^9=egHb*YBAUd;3x9w+AYj5zlKhql*@Bh8*>Jm{h&g z^}Bz{=}Re=8+Nw8nN>1zO1`nT(y89bPxf}FzTH$2xly-YWc9tktk^5TTr(eJ=i~_9 zH2Wkx`TXkzM@nn2o?f}K8Kqg@ven_)L#y;1tNj){`t`a`ec^ZeyQPw=4PI#opG_?_ za{X*|HSLY*ksVa*+hCvf zhb7*Y*X_lNg>4&}D*RpDtX36uf>Xl1wQcH80CU(~G z>pgb))XEih+P^kG5s^Ln^$oZF&F#JC?eE`|{a~v0?8layOY16MJ5`$fmF7FDedW2q z>VIvYWL|k(JAS78;up!ye|Fa$`fY3d%p>MXTBO~&-k)_l1CqFwc$B!T5$QOs`*j!Z zG`HGjL&zc3v zf4(1`nJ{hL28)Ul?~9zz&tB^KIj!u}s4hxkP!&9F@!c_P-|RL~QYRc0OLi zS3ft^Ju3J9#>3Ms{{8#?j??PW)0OISQ-7-6zxc+ocV8L z^ReYK=2#wIuCnj%v+Pe77W~7+`7`axxxC#)3$FdWFTMVk+xnMX)2xj0ZhjKI^!fhw zS($adx%Uis=YdA3c#InN@=BY{x~g`5@{haKHHregVw*wE0m)v^x=4P?#p`Im|7lbW1^0O+x zPSPOYU(Ei4akGWDoOw5^glkpbjw_k{;&GP_{fk*^dj74}C^6x6YM@@|9%ylSVH68yx(^EV7k%m6-Igap)Nbvu!@@`n2bplvU1-NWqU5xl2xZJ{CFa zzxe3h^FPm2UUlg4v%Y*W$ZFM-?tOpHPC5Ga(#~Y|pI?{nU*_{FWW~O{_FFFtf1dd= zM%lf8<3X9Zc3--}`A%&&n^)Pn4})sh#gP*Y0o_|JR#e?AJYm^(*B(ir;=bfJ) z-(K3}ZS2{7Qk}i;sd)Od!W_lP%QsYrPK+_UIk)dTYM~^fDzGu*YTFk!Q>|w!{Ms+w zl(jCq)et_@=-}k#uS?eb`T5z~adOF@l+)AJMyuXhqxJmHr}?4QR=WP~o>R>{?>0Ym zKedYY|KEi%tN(Ajxi?&#_YSLf*8GI9T~}V_u=>W9UvOS-pS2)xa^v&U=|aiXI#yDd z$Is0T+7+T{-1_B5h*^L8ynwT>Yd_it6z_Vu^##ZL%aMET{SP>|el<&$g2|1|%NMVj zwSCv2o+;iFP6{9E=quq``r^eIm12L>h-WPBcaPiu_>gQSaBY9SeCEwXJ7sLELcZM8 zNk1o?~2gdXXV~!6I${uyrAt7u;{YyL{1Fy*Orp+unQP|C38kJ)Ef# z_r6}^x&FkBo07x+UbRWK_BD8O_q)AO<=k(#13MP7?cDPA(b2Bd(yoTzrXG9)+oRJeAKpICPN)tB`9vs^c2fAtMo())AguA)wtDfjgQ zv*%6U`dM#k$BolV9WOsWD{}4ePma0COncR4tUSWG_?gGNU8ze#KDy0py4?6`GkDDh ze5~jMCsX}zhj70goL>YRH!FTP=)QN!_2qltuJoFwqu6ir3+3&sh zY_8li-KW1#J$&n&@^;&;p#7!Rni-S+vd?mxH8)hxI7%=4;$!WewD5kkTro%G!}jwR zr%ujet3@3VgT%3gCF9wPrPsn@ZFcGviJLDOdn4Gc{8SU5^5ix-Juk#v{=TFdcS z+T}aMG}P4-dpHGNe0t`hi!!7F3F$@yafJ(_&&)gCA%_dBJy{{FaN+6M&M1_s0VbUiabIB<*0mhI4Gz=I)w8g)BOvl$xo^8KzjLHvb0Jt@FZ%*Yg*Sl9eQ4olEAm@_iP-kYyT`cF`6~&@tvSvFzGo8OV)d7sNFRXFzK?e)2A=MmBCVA|atMj3TlqWI^`bU%f_k zpGxw>-E>(t3C`GF(0L|)i^*)M`uY8Cy|Z<^r>+0>J4PTJb@D}_!9k4axygmE2bceS zGIRRLedhYv~xqwH`?3K^lNo9hNBnZz39MX+3&o`-OzI-_;?_Yqx z2c-=;N2OkVzpH;~L!Pc?gu%Jfis@_4T@ZY%Vrm*Hb!~O+v2%q+yuYQNc6Lr&F1O3Q zOGLBA=xiYmdfu`0dN8N&#VNm2-VA5FWxrcGt$lBI?dG@q!~gdNpa1(R{`mjByVvEh z|F+T9J^O#cg!}B)?bGWjRz7}e)41;V>B4{FvTtT2%>TXp`O{xavcehh3$l4a&ez{R z`Q_&R-d}145!*^U|KI&qyWku1+hV?R?~Ir8t>*w0gGj_2?Z#rOMW_ES5*Fe+!Oz@w zYSYx!s+yXSS=ZO-&0V)QN-I=j`pQ>xSi7G-zh5^!cK3IWvss}_oquaD&3h{~^OZ$@ zP*Bj*>jw{~9((h1)A=p&`*Jd0Ufa0WWL5m}u*x?(uP;6ORQE~Ow6k-ZpX~Mj<+X89 z>(l$@C6gNW_k)h!@}B%z>cob?$4_5eTzu)(ChsS&uAN=_e*69tpF*>j1RQKCioLB} zlRM{(VfD9nli$}#>YNT=H}T1n~6Ix9072?)*LarP-m=eWSPCuJQi= z>Yk&RUZmc|ix)rL-<|*QYwg!vUq8K^e*aYL_Ae8xOjrN>W-WcY?9G(*QSgjko@l@RFuF%&@N=`ny^ySd!r@zX=Z=E;GxuqmubM5?{ z>1JuK?uSI~FWfAm8RL=nre%D2eXQm?{cQ9$&-eUs=GW)WS$c50 zJ^!SY#?Nkin_vCbRx^HGkIldPyPLj+YrnZ6sc%2?dFsZQc{9}gd$#Oc)M~4@dw)sP zqXxzL6U)xtRxvZ1FS~Q;cV~Bxm&U^TtJk}!JYBdve%iP2t<$ulV`r_jJbv=OR6CEn zuJz;c(~G~~f4O=++hOEGk3!{$70`uU5mEH@?f%cN`N?WN zQ_n_k_g?!d^y$3YRVO@*=N4bu5;-Z0Y2|bCHR|Q}YMNc1pUXWz;qKp((neqOlKb3B zhZ{XFtg1{r@BMjDEZvh)?dtvV-peRyfr`g_{ZpT>yKA>ZMVRO3r`PkJTv{f6Lf3ZJ ziG_#TpWcm&KPC2=yLy39$q|X4$!Ar1mMpX|Hs8=&QP@8634H}{g6M3-gUZs%7| zvkGbU1QXWsYEf3{_~kZ`|8@2aUazvuA2y&iomV)C!ol~%J99;rD~E^ z$LD!xKbhOVf5Mh4COiKwTNiYmMZna+EaOJT?H)FT@}uu3uCM=dmhFGut7{k8ocI0u z7j8Y(U%N8*aeI9Gjm!?IfX>d&X>WLD#TD$coxkn=!&$3q4z5ag?qySSCB|Pqa_cvL z=@&0A{L`9gk-BVS+;U%59Vv<5_uKcX=HJ^>w4C$bRj8#@~Ho`1I72 zY0KkkPWMgIj9fHhz3lqq85dlbd0c(vmM(JTy7`#gQ?qI zPO16%>6CtR+i4%+H@kj)I-L`cb8U}n(Mi`{)$nz~`EQvvpIX3X8&~&CaAnxiMY+og z5C8gf!g#%f@2rWg!f!a%9{*px{mHr7J-ttokNaFmUQ}YjsJ8q?$Kr3GfvmUt+4xIM zX8BG2e9P^--}MeQ)2%P2?0CboWxv&}%tKQoFWtCPtnMDZp;*^w@x5(tZ>XNPE8Bm? zQ2Ego6NB0-fsv7-rL_-FvM&ufTC`8lH+oy{bkWt8zHx~3g>U-E{-?K>dDCw# z%zMqT)+=q+{kER?Q>F8F$K2Y|S##%icIAUk@wZ=$d5^>-EK__XVzz#1!9ok^Cq=Ks z4T5iiF1Xw?wW*Nx&9{wHMDFhk=(<3csWTTRhI5PSZ_ibonc3sFGU{hV z!KupicC&b5-DhVm@LnD$XHjsW?@HmT9r6E7+%~FpJZ9PX#h7SwGj@ zFW*;d{9I?l?T=}zRs^pKTlXO6*2L6bYIey>CS5mM6}oOo`^`sJ53GE@ht2wW)#J?h z+Sg6a1*KV~%?xTR4$Isvb>WI&-u`}x>}AK_O;t{7xpSx0drolMmsk6a1@N6Yx8480 z{M#*|<<(LFmj$EZypMi*S`+&D__14>Gk|(y}e8~ zdTGkX$H9MB%@A~&9NSyH|@8v#LuFT3G)#|5LADQ;~=FF*>|&Z5zr6gJx$>E1=VoNT(x29+#vU5xy4)`7!iVn@ zAJ<+MFg>{YnOO0d`(iHti8*-c3;o%;&U%aW?g)qyZa>L zvc*g1tXz2e?3GgiU44(Z!|u2pe8u+LW=7$L$3JDzx;TxSRST{$#Tuq<-E~s!<4(4y zbtc+kdNF&>sF{{8i@v%(_;lZfUoSrYyRxA0ud~l-mcRUamA@!?`sU$@&=Jx#WfA2lXxTRTs|CV#fsaflmEk7E0c0-pW=jI!4q)qcS@owmq zvj5rg}}bV%lYTO7$5%-r*S&##_f-P_kE zXCCfuG(K9i!t>Pn+SNfT_pn$`fA;v2X63J#mtX97V|dN9<(JJ$`5ig+k=n^WiNYze z_LaMA+tvQWCxxxl3EHvX{e(|Xy=I4UFTe3%?Yg#=+Wu9VQWetHg|oi=Pi!zT|DN@C z+1YKp`p2tQ3ZFP}y71;z&a^pqH`bu!2V^cDbSgNgRrMyQ;SviNnC;Z&&-)GM+(l*Fa`cj?uHZx3e zP0sC)|6l8E&Wd~g&;G`PUbgHnHs<$lL}sNvVcLCljn0og&n4?t-^skVU?Oi*>X`*R z7DrF}%;(u*|M&@`{pn{CbE9rP{k6^L%9EB$H4#!XGOJU)B@I$qEdAXUKRdeh=XJl$ zOAl)Ms;%q%X}Uk8%r)HNN_Nb)qODu6By{^dFX`I0Fm2ZSS6h32FR8rzZqHA*`yBdf zU%#7Pyyl*~uKMLR@#a^dS~nY>`AnXi^L5wPPuIHr*=(mjn{`R$_1}HJuljwwQeEuY zomQ6E)bRb}m;G}$UY}F=%jbo0@an42>U*MU?6ZQSW;@K*Td<&P){R*A1FTyA{HoTQ zWbS9HHQl(cZ%KCL%cIZ!uJLLAEx%meYTrz)Uwb)IL{_YI_C2v-WUs0W!^`g#eN z^T5-y-|dCJUpek@{H4h`Lp6nKKlc1mds%N9ow|MIvY!_&ulKOt+?2#`>~${oOWeyZ zyKK@-?wy<#aQj2jglW^#!e^8`=ehik)q1*}{?4-;J7&zt@Sna|nKd{#XmgF<)`=>U zKl}7L?ToLQ<5zv6_30OXY^e^N4j_VEM9;g)?XNvb$@%!W_4+c{RWDZb{vqR_A<97QfOn4gU0LR>PyEjLYiScKbJ;d$?c!irF5C zi~!Am1kD>eO{Pa`9QD3%Is3wy|9dX(Ebjhi8LXi+xjgy!oNN6ThH?LQ13j zzCQ*}k}cr9YmhPl2Zlyt#e!?g^gf;bFmp%kmQE~VNe?(&tfcoSfvrU&CQN4KD0%v1 zxBGo;j;LW`*;ONwqkyIf#C?*&$P{b&^WDXA^j;3Arkl^us3*^gI!qmy{pg8)Dq;j9j(0R zkh04ot7_Lzw56@kz;fUdxo~6Ju^mch@9z!@3NC)2dLb2CNU^x&<)C_iaCXxVV`6 zo4}h#E1?Mm#pDx-Oj4Jg#p3A6a%6-I%*%H*yeyB3z;2 zfPI8Ra-`JdD2w`cYo#7{-P)AuedHPMYoSxq)?4gxIJih$&c`Oo%1Fs+(IO?+c;z$l z7)?U3q0gfn!o#l|`OMBQJ5ksA`>A_>+n=4EYrNWf{rCG(*45wMi1a48&a&SrWu7-j z+tSkV*<<}*;Jv;H18*ktfKMS9%?pIa$ zVEKHT_jj(`&%K@U`;5brRoU~!-cEb7$!mG4Rjg^@r6ZyBvfnq)HmlvWICF=d1l+ne5fbF=tPeEq+N z%Y0_uS#~(cJJ&ebt=C`epKW3jXDqLEd2I35*>w`1YnPv#ynM$j(`>E<932hVQAjqE zMdsNVhKGG;+N``7G}mgaP1+Uz{A*E#y<7R_nr2_SS5f5oWYx95%TIOUFv5l9!-rXR zwX?D>YWZ~Kg+Qj3(Zt5H&5 za`ifp9liCBNcX1~T9@oXwz}f5`B_zoB)fh|XFK)~>}cQ+v1a6qJ$kQs)qY$`)D;$b zn>XQ*J>cZ%;B?*TVsBOp4iyb8dUu(z`c+ARiJO&?GnU)ce3c+B6+*j8_;Dow9T66l z5?ztIE8K9Y@OW{_7Dq@cZ3qyUaA9je$zmx*T;aUX`#X+=(?Qtd4sZW6HR;7pD>u!) zR%HL@L-X(7@Av=b_KjO{D`It+?)E>QPX9Km{rz@(-m5DsxkG)-`{NZ->uwlv#4mr$|+i^8~*)z{rlfy{^~C;;+9^&b`)#!>uNvXq+fD% zO{DT=Y16DfyXW1EIOesx?CqUk|G(#L|9+XA_k3=-*5iz~^W<5)%A+6F&RFmF>V8eh z7Jn?sxvTp?y;8|WrPxcGQoXmI(pvpP$*S~K$izh@d8R50{;h4ByGRR5Zga5Y3|V=h zbw$Aby4ur|zfPZRQ5dvROMlmkMeEAm-g@`_e*JgL8Btp@9!i;HBpmnsQn~fkw%pg# z;;J(1-(8RAFDia^Mzgf;$E6j4%G+;c#onEw8GLs`;^9Nj=A6E^HhTBdY0=l7e~>av z+VT78^myarX4%)y=K z>a@sX+pB+k5PUbk{@=+;lbx$q2=83I@BhEwLB}WF&f0iX?DOqoeX_5m%yM4bd~oyI zz3TVreY#8DrOM8JvpsBW)Xu5laVNhk=boIZymo?F@c*aN-@m!FE%$k3zqGmDsK8Oudiwtl)>&&*!;a+X={tL{g4W~l!?{kbo-`r049zk-;BbE6K+ zs*o2|uh*LIx$)_kbbi#nHH(d|X5QS?TK)fT`QPvCaupY1OD-O@iz(<-omSx7&i7f# z@B6#k>3#DJ9+rRq@wk8Y>vg;BHup0A*?K+h@vhS7(^uCU=q~@bjbHxVyZ!&|wm<69PAPl8@%X#G^U?WV%iHDc%V_nMjVP;d&nl=0XRfR2I?eixi^i@ZAeC^qF zg=uadoCNkfX!?9NEIK#yk@x2_8|(jmoxc0WBX6Dgq4E2BYr?`~OP9vC|7?@advH^s zqvYM4qoP6Iw;UIG=DA;Sk3!VC?f0r?{_>q|b~d)`rsy?w{`752bBiq!dria2_g2pj zT6NdCji;1dwq$~MnFU|t(?6fj7f0vsohsgaXs3@`!Fk*7yV~VuRsY@eOMK(YMcsNO z)^9E-U*0~&_5ZxWW0C9P_t!0aQ8_L1*4F!Vzjt2tw?8|7_v1e6YC}B{7wPYJ%j4_+ zm%QHAw?8exI_U_9dFCY*Vcl@<_T7%nY&$3WSsk5QdQCF#aj*Hgoc7A~aq6kBq9juf ze7}+0|IzaO4)JEiQy>4t)%_IRckk!B{nz8F@8)hkd+py9WC%xEi_iRiCI0<{a(`9gV*mNC?^?ZHBP{<+$~^B)pT(mOLAQT2sh@w`Z~w}5 z`x8H#0=eopg4<83%~mZx`?>aJ>h#j>_o_B$Us~e1vbMwDw))*$+Z??e4-N(WE~<^p z+xgU|W#?_1)6aZowZ|@hO?Wgsu)4#Qgvh4VL&iZ;akKNBF!HLD^o{EOYJll4+>~`h1%lp6l z&fER=-M&AcR#$#oo*SOv%6Kwe$ws?l`NMe}$AjxGg+*nme!rEyUd7yc#{GiBrFoZq z&A-n}oEqr1K2AMl?v2Jx{B}PS+IN(_-Fp4$-v4$#9yIq{*!px@^faMe+wK%~`&irk z`LOuRt}x89TTG|Xs`OPv)$-80Pc$dr4d_numU?`BYIxku{C~e*uQ#6P{;@FjOyG*d z=C*gM*Y7JaPWvO>C?X#`@oQ!1)UGLJ^Uuw-soYfgA|@fux_!p->z8M)o>TiR((Vsu zpmIkH&nEpnAC&6fJnpxjXlWMr^4{KRw<{0ec{hSjtH_ePxiMvn!o$qu52SE@uuj0IqO*xr8B;#JZh-@e)ss=t=DGF{QP;X zLK>^%<8Qa$8x-cdZvXquw#Gx^dG3yfZE*{3=k0!Lq$D2WXZ^Nh`}29#yKm?1whjKX zuw8CaWPkX-@B7vFs^40-`(56>f|sx3PHg=6^@B|ld#Q|N(USYF(%bJiKa{qgQ0jj2 zHlAgXule08^P3m!dO9t7Hv83A@0QKZJ2&NU?Ub{pZm-KpeR}KL%jNTL{@uFY`uUt< zV;+mLKR-UIy_0+T?PmIZ9}R7}zLw8wYxktS+4uY1z7?65m+cnzw>f!#`SiG|%4I*! zn$13~yLn-X>c0OUD(2YL?z+GEsMvq5=o}8G>r*s?@4Q~WKdxw-7-ma{d)9%x-R~c6 zGmUL3{8sgPy}f_wHpBFZa@KEN*soFVEw-3$q>)`0F}12>>UPHT`L%u3|9*=9dHH_t z_j%{7w;p7BZ9T=sroAcZ1Y?UWTVr=}^wy{&duE#Hm%a>-t33Ki>hF{7wSPXU^EtBY z{(9}UkIhW&4uMM^6`~LG4hjg?{rTwrU(`^i;#$p@i|)@fOZMIOJ0bVzRBZX(m;1}# z-ny!&F`>9y#@|!<>J9Punm{cP{`F>ik_Ea1j8E(|$-d^}o{^*z@j&<6m&@mWC}}qD zaeKXPcc1_ zAHCv3*UUdL>-XQ&|D4lSyalr#6j8u(sA8Vfk=F~|-s-j&Z>X@{yw-*PLG`xJhYLj` z!>Si@uNT~7pH%&@Rb0kN{MZ4jmXi}NSaBphtoRhF+PaQYSj}Qm;$-EHm~fRP`InXy zrj;En$lLeSOH50wsOX{Zwe9a?99xT}%yK4JnsyYF->+TnFE#(B;MzAk9{au9eBQ43 z_xt_x?{~S2E$nAz=PPN++xy{Aw`3!)Bg5jg`uk(7Lf%dZ_WSyK)8ES9Z?_xI=3Z&t z`JX#8eFsNVg22uj-~Ro6-ySyKuA{44(I!<)_Ls}^>@Z_!sOVa?au_Vw*=8Sa@F^_zpK zqQQYVIoAx+h3Ba6Gl^BrT%vU=>vis*v}==(S$ga5?J0LyxaMc#)wmb43=;RSOPJfu zliZkl+w5L&`(Ks${P!Xs{>U-@q-ZxWS@VpCM4xWT&LcwqS52AI{$SeKsO@=EbBmLr zdG(|27M))EZh|x4x5}wAUiQ1ZtMRjX>2lh!boK6kzoh^8G|%yg=6vgw{r}JB_h))r zuk4+W{CL-cT#@K)H^l^BUD{%)_q^ZUYx?iw^7Th{`})M(sXt$)-*S`NQemF&<`Bk< z)06uwuQ|!(e@YUcZC&=}h5hcg+g6Lqan4Wq)U;&k^4OC`pK8@@%%`87W2wDad)`Td z%^OpeDy0hi+WCB5>&_X+zQ?cNmW#ckUU5LNAh!7IR>_6jhE`(khb^PJF#0+=7EFJC z?alMEWUk43mh*Uzzx`j6$-6XGatFMAc({G%?7TOROZgW)d)BTiuyA$i>1j)EU0M@) zIq3dl{cgQoD=HbTZmh90Hky5V`+V)R4T)!F$k+amY!df;`18ny%{vdtmR=E*oY?&& zqvA!6+~2*O60&<%OxYPQZ|eK~|LrzU57-u+w^R4?T+uzd)cog7I=Qj*$wc>?4f|YI zCjV%XaNMDMOlMO0-O}yyZzdOav3z5%iY8OeR$=H)JSt4&Y3erKCm?yW1S!V_u| zEB}cEeHYW6mG0$r`P`X8af9 zcfX18?OesrpYqHz?duZz9qX&UzsudsFE@Sb9H-l%CyXb4Z3^8Y`2M6qk)qlo)8pMd zjGty@ulpqIuw*UQ&#ND<9jPvSxpaEj?3_)7YHvOs6_20g{=hGKT_5HU%#3=LQ$i~? zamEzpUdTzht9CD3@^z?IiSIm{lOelz+41}9T*}#U@tEapr**4pzui23xB7kUKZ#F8 zZ#N#llX4?R!m4CNbk@qgxP}MToDWWJZJqdiW%~J@#vgz3s@4lkZ2J0U=lc1r{qH+G zf9i-Sv++v3N#|GCX?1d+{htqqeS!);B^SoB2)1bU#DxFM*?iWlxWfNo=HZ^sC--(e zXtG-8Ki_Vqr0_>6-gwp7XIIKZ}IUvDW5qk z&F@uA{=X(+v-6j?*5>+BmIpUQ-YWB*WujSZRom4rd~Jav^XwxDYtQU^wMEF@`pKc) ze?Do~eEr~X=DFjv)x0fY$|Z^6ahBV4uKoV@_Oz24mTo+&;EJGy+<{$;wvR5n-G2X- zaI3P0O!XVXO6|M5zptDYvTrK?b!P^S%Jm$vGLAtt&V@klh z+-uHGH=0%yUI}#nbyG}m;-;&~UA{9Vdt%~MYU_W$E&ubTteK7XQ{~ zW~=W#+_yv6|IO38f8C<=R`#0TJF#~EzZgcI_p?$s(raqJiGo_Vz3YRoRoyaM&i#K* zwW*poM~$EDR}uT&YKQK>TD|_=p`3=6nnx$wpT4^9H`mHC?dy>lr6122pZ{jLo+)`- z`%IO{e%;*N0$Z9C51pN7d;5C!{=eV8Rz5zo@70z+U$4g-UA>vHnD=jOi$%9b4}0uF zvxEZ-vt^5Ve0OYEl6^60-Erl4B{y46IGw)s5wrdB-jJN*YCx`#;D!+fPJLAdDQ|W(y?VaeEQ2*tk`%~*H?XHi4jw{qn zbd8$Demb@8+5TpJyDMK`l`cB_;l~VdRgT?{gr%8(xXV?V+?!JTcVWBSDUMi`rTm>Q z4|AT$Gfz1o@L#mwl*P)$WK!dCH>Vx5^Y>Zan^L-W!Y=WmoNL`rZ_LG z<;Nt`XTA8+ayVLB#=PuJ#OG6%>Yr^ZEWf@iUfjCn?ql{h4{zMB`+YXH_N(d4s#cfx zPuN~xeXa7@;OD7$>zwDO`R)I_5ZLqU>+9#OlP{38+Ogefd6@0>cUioqOWgu_J2=P4l%T`zw*7;{N9(Nt=UJf`^V|W zOiwNPcH#NF%Q@YK@@u;>YOW>f0m+ATtIkN8m8@GH@awWxUCQfgYiskg4;_+Np#FAl z`LF1pkK61_vYyW^FRgfPU@d)onyQ>2ldIl_!pHx3H+xMxUtW|kF=uby-Kw%TJ965m z+-eIKzn)%TU;FDz&~J_IBOg^3%3FVXz9v_z)M=i6%a%f2C!5o&#CM*PGFg%Dbo>6y znB>Z?bGuf<6JmtN>|&9LrNs}N=jpqwt(msI{`S`F=f6cB8j4N+H1+ttEpHDwciqXm z6Tbg{T$S3%P3tx;_;z^OpAwFVh5I%-y)J&Suzkm6zt?a5e?OV*@2hZc`vs+vJs7Q= z296z1cdvP{%A~|Ft&cravF$)eSla)9xLZ%2RxA-w(h_(y?X-q=?%$%Rg4>j3j>P#S zR&P_?tT!$F+0h+qz!Ck?^i-7olC!B(Mc?bU`0x97)Ov%>v~95!ULQ5pR==nP^_i{h z3Y&hLByK-?#G_OcV^nEH6ce}4i&eMMUS%mMFkS6su>5*0uKKOdR*s8*A2jnD-`|RD zV7pal#WttwXU*?Fn%vMYXS?fy*~;!4(-%YME?kj^DG3od>e?U^8*24BsqkT7F0LW-uFi&*bxE&uuZCh7{RH*V71S9y zV=XUc;2KkRFch3{A=GE@(p_B`$r3V7{X|7!p|-lzTU>KJ8fr{JySi3x4++OMBFrc# z&^U)hrR1s0Vp)j4Fv+7X4o=~QU#Gp&!cr%Kluwx4(6Vk$#ujHBo?I}4!{de4vU@?X zxWcJOXu^f5!o6h>FJY1*!k~$TE77Y~V@abREIOZXL1YI_CU* z<LTzoaT+F^a#FH9kpj^84ct||1a9YEnQj&UfQ7 zE4;hyoaq|t?VhFCXA951whoVWinwKWtq^-?f0(Zju-j@|(Xls{d5crCcKKReFAM)V z``xy;L5F+)T-~|;__@OBby0_V=SN-MYgx2yw&mgtx60q#xM-SxQK|S+$HT*SpPZa* ze1Ecb?yYU5xwp2Q%#pLL+A`a?dfV;?hq&+FdcEfHy_(0o<@a_z-!;=XJ*{u$Ic?qO zZ6&YQ?ypr{!TdL;i`}(EL&-MQP`TR`z+K`?D-|p@P zO$wazoojV9w)AS~yT9M>t&V8?{4;0Xa?$Xple+u=e9HT@#53>1gML+MM}`t(~qC(SC?JdF~jiP%Y8|_<=4KI z-U(fQu4s1oyr*`Op@&UZSRQ}7%`dn7)#c51)fcCW$2=F0ue)iufvfCWWctqE?|19h z%uWA!pqYP{ula4A&3|`guP>dP<52(2@_EWO*~%k=?~aPcov2xVPP_Wu*6F){&B`_k zwfWG%d`J54uhf0&;dy)CnqA-P-v8uT(Ea+qU&Fs&ogTldUB2$d*XqAtgMNQewQby0 z`g+&-eLoIu)euaQ^vU1%a@kAn6^E3|@8+88e>2Ozrt>OkPL-2mht+5z0^H7{CsRt2>17M=Eip? zY^(@4tNC?h=;~#w9gEi6e7iO~f7-3xSFc4+|0P$Sd1XbQ=6m&TdsF2Cd}o<-@)!Hg zHq-rDoA@h8%>UM|7mK=g>2AAo>2B?L+r0U;-(zRYieH+$GWC@n^TmX#ANQ?_-Mwx1 zi$~peznb59P}CW7MV^1XcwE)VhYQuT?U#bp0K&+mS}KmYmM@JL;+eesj- zKi}#1rB46zjY_|DcG9c5^1o(o%tCFyg?cYI~*A;zzeXaO( zY1ARzt2tfKi?5zv7kamIUFGAbyu0VlnZ8aq6#D$>+}Vbwx6b?AKKt+K5c6$e)!QqU z-^@GqMbj?v@12eQyxTjb{=PoHey5^y`%{%4G57bqYl+)y^!s{jd8~cM@8|RDjcy-0 zrS{BM_)zE#v$Qi3<_B!@>Wul9z1?>I9%#C}eZ!s)e?C8)(pqPkeop3ozKMxg>W{e1 zX};w@MZ0CZ%o-otH1m||X(%4-kACF&I8GJl<-_K|7Zl=$l`+UyY?KhWQ z+4g*X^||`=fc-bsW>*O2+%j2xr2fRU*y`NxlRGEhnB=YZ^03tR+x7MOzgT%H$~|9j znQ%o5N!>oaXX%E>&1s@#MWQl$%g@hSx~{39=2zzORF?@?uSXoddtrJ1>l+&v+pjBp zd@S#??lz5C7w!f1UKU3xRUrL@#ziUtOP#_$KRbIT$XoYm)XeAZ+}=I+jylZ=d%dgc z^_6u?e5J|$c0f1kOUkt!FvHOy?owC>b0?eO*Irn&c3syvr_V`uf&}7>JoF<7j{49i1*=&ZOO>pHj^`F z;@7R8H-M(l-ey1Y+aT>b!{HCtv7Ni$@7o=ndNuSem-dgizTriXfEYoF>oKb!KI zM=Iy~qt8>GPM#S*PoiSS!$z0cas8ia*6zMnwQt=+{#=JQH!7dcjdg!r?R4+h|8KLU z6MxQ@t9>#t$mWox&c|Pet2>tb&(+cVSK(do@9BZYch6?$eadMTkSvZq-gme1dhBzt z#vWI!-}U-*=wKPy0wJaxYu4u?%`VhfA8xf zcOIOvDMD}e8Kb-;Po{5<@%3;2eLo@`X*-?E^7)d<{$<@$ed-L(u-vTHl`+`{TGn9u z?at-)E88}EGG)yazkA+H@<0P4vyJyJm2E2h+Isu%Y%f3DYgTl3SE=#R8)}sXAE*Cr z=@dO>H1BQ#N1^)MibdT=@9Eq9zr!8hZ~L#p;*7ofNtv>i-S4)3zqcam~E# z`fqM7kn<@L(7D-m>Rs@<;1hc%tnpvy!(D05!uGL9_Op}goadISvz`9B%h$iTx6LMe zXVF{HqVooUNBgYbKG|WPq#W~A-}~RcuBR3}5ATcSy2sSHUf=xnWYJvf-_Lh%*5%}u z`~3I&y7hk-e4O()!SJ@4h^Lg?p6c7SCvD?S-+Q=cbLI2)Z)*Mh`F1 z<6j|5bPFw`#36|lLN+F;1}t^D&S$%=SUP{l!r!;qd}XJ_9GZLMb%ngukL9g0dfQ9X z%l{}=?@+7fEt*{S{{5_7H`g7zFFa@VhlY(?TVC$p|M=g`Z7si-JuJ(+aewQbEuO)# zy;i0<0>QU^=NsPTk6Y$DJ1)&$p=55^ul;fH9ljN1hBx?*B^aG^bP0O9(7El$UF~S2 z-}5G>pFXX>Z-(G54$qxOk4(K97OgAtbUM$x4<%OTCP~DXysN`0Nw^|BU0dCW&_0l;?6ONf*mM7nT{ZNT%I% zo^j~ImqU})&pfNRdNtg7Qr7Wn3!T}wADfl^tMO@M*njqS`|a<&bzS+q_qC9>&cvI3 zLRl^=@A|mNByIkEbhEos-N9U4;rvJY5*hAfzFcaY+T!y5^lbP0!T$EP{&icQp4nXx zEdAlp(rw+G#r08#UMIB6RIRYStfsG!S(CGR)`HHr*^6#2Y?padw_)bvCebRt^R?d! z&y;j3b{uoMe(74@@_ChNhb?28zpc&xE~wc5J5si3!tsA9{nM_w-&U~^6|614QRrU2 zxH2g=bK&xzIlsQVoLSu)aJBE*PSZPS3%h$~D$RV-@K?eqDu;vrzj31O7uOr^wmbZ1 zl)hK6u3ykOD`FGx)SJtv#J>QgLq#9%TKj&H6I;zLI_(jx)4J6cke8}Ex%SeY%3}FAx#{OOpS7M*ZXMULQ8rJw zYfkd!=f{qHyq&jwZuQA~&Og^oC@+ZG7qkAtZ=)+4m2x>#Gc-{;0Z083-eqj*irUy% z$)l6Z{CQXDt6kG{qi@tdn_j;5?CxgA!eHq+B`>zDiQW>)9G-n_y;{uGvdzcN7H(#{ z|I*E_Y~}B-m-%Do-m2dz|7=UK@^hWn$9z{kRP&$xChh#pH&UkA@1)Fg=18_Y&+a?F zHC4{wpg^hsSJG{(iA&@Pb$Vl~Zl-?ji1}DqA!d-A{NYj8chOz*L6E8yw7>%bAmfwK=%^XH5?g5EkD3H+;{(cg6=dWILtw_WO3leB8IV-|`s$y2rUEzxwMq zRvH|cwr|?}cPX<~^N${RQ(hsy_usATf5uf`UKDhRJIZgH`E`;~_%nv+gUl~G)#sn- z*!t1#n)Ygc&DA#FnVugF#Dz{_v<|`-4yK+z*^f{dsCu{QC!=?oAiX^j`NZdpAl?Q$)E@OLSLThzeUoBeS7j?H+?&g)h1}nDhezH{c zj_-N>hid`pIXehUd6>| zjm`6xPm@nepH1%la4MnYR9x-V(04+@oXyJ>fA3&_zxVyVf{1IXiPOv_-3WA9k;g*w15j-p)zvV?pQ7V^bH%9!&0iyXCRe=O2%oucsKO zS)DL%PEY-!d0p%LUV&E<`j-vXuKCVG)T3PYntM+24(XU`^UMpV9=x%}+qcP!Ou zA7}LRPRQD3|LMcwe{$We&wl=$*Zn&1#IO1F|6a;%yzrv>-9GEd;RbW+KdMeoX?gcL z=Mww7zX|n!{_W0xzE>?uSZvODu3Glx4^MwRRUIF;MEB>dm9;26)PNk8RVF1L7xUY1 zh~%y>ORkrD9c7ZAx#moA_BWZ|*2hg(f84&>{3Cn#_M<`X)*p+#Gb1s6*JA54Ws}v* z%I=#-oaFtP+?M^}pTPFxlkV@>W^7*&ew3%Srz6fStC;3iRK&_JacDP3{F@xh zlLmX{X=Rn3`J5Tzx%WhG$tO?s)UGc-C+pk~Huw}%`}67ahuJ%)cSP|h7#>>0@!s>6 zGr!#nbJgO~xfz>d+a$FZ8<=@P`nQ344qx0Ts&sYrGCTR4;WN)-hi}So6eNNtP zvYKDX^cfA}YdkM6tJ`Yxyv68|>i3W{Edpo%>KyqfeOj@__TP=@jVy{n>vty<@~zvT8>b{ODPH?a^dA28b~au=1lZi-mHPf9UysGAWtCh&6Cx5*p-X9P;e>d89#xu#x z$fEp@`y8jZP2oS!`?US@q1~U#tly^!7Zz74i2dT*_xRiGzt+m~_dng6ex@R7;x>^( z;m1*isvJtyC-_OOS`zjrZ=T!Nx;2mM6X%;0=2b|~<1kJ?S90HP?lY;a8SkyO#oppI ze?LJiZ_?}=IicTA9$6Z@+pPDF4|j0Q1T@H zES(-#G{5%SO#eHvl1$+{{>h0Q6X}^?mbS+^=Yez6`x}oMGxzMh@U>KTzpq{O%}Jq? z6XcXj^v#@P9#2r*voGm!#gU1kiy6(1t9*X>;BWKwaJ}^lcbxgHJ4L@ECPzK9Nd&RolrYs`$p7Fi|FZ@%tC~M{ITcfm%ePTCvkMa36uix(5d%;GbS+PV> z>*%))m1|fhcE9!UD_pxbU(bktLynpKy@OBp>Q6pYwJ`VOHM?AtfiOr5RGhhtP5jTI za|_HnWGlix?k(*;miO(-eqHzLF56pLkJcKdE|dQHTE#r|)B1IBXQkFf&i$2l;fU*< z87FgNE@$rF5$0W9(yhB|hV<{pBKmAcm|t$PYLVQUv|jm;sNk*{t%ed`lc%jSX_U|p%`0mBM z^>lhgSAo0$pCnJ?llA-mamD|gWT&`AtM@|d4Uyj3-o6F~# z<0pjO4prGnG}otP)m->g)f%aHy0}kY=Oa6#*|x;PZAat(S_v~9IhMk4hH2&&75-C) zX6sr$@SivRPv3za&Py11WI^F1CD7@m5Ol*VG ziUXfJ`4!75EPZF2_1dnh+spQ?wr#duX_xfJyAt2OJ->frP43}4+m&^c zj`!|-MTd`DoBt}GtyFi;=lYhy=AP&70_QH3oak2b3T#iPC^Ae|*#Cw7_m|85ch4su zZ(E6|Gy(=K8-pEa+KwCsY0V4o(4|t$D&IH&Eg-8s)jK5<#V;y9j3 zCy$$+a+myRFcyw)E^QIB zxjp0K`u3;aqi#Fd3LZ#$oo4(q@yUuV-h)eQrsX(S{@$|Zx$5gVYxsW`8?JrvTXD8~ z2FLE+*P%1N`^4l$tk1A^vOJk;b2_U?-ahHbqcXi?bK1=lE=@YmVSGdF{mC`w!=`O= zy7~FBY|Opin-=AA=3WY7L7uA-V`B<^by1W}y+uW_=;Pc{7IhZBqSB3XGB$tv`}2GJ zv!|iQeGM;iCpHVLbn}h+aq!%flfiH1L>`&<^TXzwo1agc>M!9{c5S}cCs)5^zPf+7 zl-v1?&mWyuw(V%aIiA(&`LkQ!1#wSQJTBmQ_2UaC2X43D=eEhX^+)C{T_Wh@DK{@+ zXWGr=SCyZ-Sd%y0-d|sTU#{rog=rQlx-#JxRZp(qe11@DbIZHqGSxZDPE1~N_k6?( zsnUh{C*`-)c={RfbserbW|_e%Hg$(+Ildp?+LD%fLsE#`7=rsw`}bAN4{^rZY1Q_nc(^xJ+b zc=AZ|z2(0nFU~(`QTJLt>BE*60`vdt{+s8cCihN=mMq{BGWA^w_cDsnnqptm2=lTeH)mr)~F7zSvT9`5w2lN?OL*u;nqgwSLu| z2+b?{{bye~SFU@-d-d0n?TMTC^VM96?#X*9FR`o$+0?(}TCv#Z_2=x?Y^55L>}zM@nI1M6$fbQbd}5+- zi(bSe3wcEq3FceOxomFJZfsXQd6hjnB1vGEfQR1(m2cs(m8lkI-|o7dr}sqZRF2P1 zqYW-wxY~pNwaeEC?ECd}mRic%9LseEF7EH_KLxV-cVArW{`;o#O@9t$ru&Z9`Vtb` zPJfyse5zymNvr&HCaukON@gsFgAL4_3bb!e+dSb?1czEkR=xKR+y1F7=Ud;}%(r=+ zd8_cd?e`sds=^EkC2PYb#n?`nnmbd+Ja_)I?|X7eJvOhkdEajGG|gJ==C-bT#v5lu z&nrtgE$+Toa2Ll{Ubzh3v!_>W=Uh5nwJ7PM^6{6QotzbX#W&wg+b{6Ys3POzdq02f zkA1ukr>1<_IC1^^bJp)pRIDz#_fPfV$&ZC=!k<}NJe&Py_m=O)Mr*cC*rsxO*?ZK+ z?i})L9;M-etg_NQ~buAJ0?>?J0==)Z`72_X!-1EGVhB8$L~$L zGd;Tl4kf6B+iyGK+;i}B%g4vYPU4R^J&#Oo7Cs_)WNNt1N^8shNzJT^0D_0~|CbCXrE{iB7Y z%g_F6KhSm2&FSO0Ed^&E#I_&UGS}Cn!CW}$OuE=TDelQD_cp=o>8kE|V@B zuhyvi{-MbF{~>PgSgSja_sL%So_l-S*Wb?8>o#mFxc{#H0Hfr@ZsrVUO~XAQEC1JN z`p=)#vVYI>ztv9%nxHkaNIbpPQg`snkaD%X1lfBu;EeV@w~?fht`*{G|f8(Ui)rgFt{ zFw{t>D16&+?m*47wV(gC%kTT{6#o3_?j7gteje%lRW~I&Ey?+?TkqM=%a_eg%_gdy270Z5nuj;k0zL~OxA9-4*$5gGfK3&u&c&cm0k*`g*c}{%I zL9fb=OmzQswnBPemJ{dSU;TIO4>D`c`Ml|A-D5kQFLMg&wy7pvnrfE8e{9X18$Z47Hc zTBsQVBSRv0;A!p{)z=-|92^{`@^v5P{XYJwc6*g%{D9Ka<_>K%wySj zqE-9?@3bqjhpS)5ac?}CdNTgs;X)Ow`u}^s9}3@p*`tV;Y9)N^N%Tse?J(grqpZRZ_aam-{CXN%#J#<6(6Y-3#3}>T{lZ}+hb+O ztny|>xK2^+my7Ov`O0tdK7UF|JDN~2|KY@z>7E>WQ{;`=>i&E@{%-@QwD#AV`JkcY zeX8WV%#$0|Z#t)$@_(sX1&iaRHJ?9Bc~kpp)a}gt=jY}uyOm?Cdh9y? z>pS)BGBpKp`TJAu9^R=lGvLtTb#5)ql3*xx+oS~64esjk;;&5DvhzZ{ja^QH%8 zCSC8;ebShCd#za2_U)CoYH}}MQBRLk;pv;Oa;d z_2@mz#AgO9hyUu>3*GZ?;Y`YT>@4)`@3))Fr<6GWCG9kPjiH?+ozpxF6BSHx7|HxoyzAs-#eDvssGucbISh0 zk+POcDSIp1Wm4oi|5OY2Z0a-VUpM`Xv(CSXO@H?+FW`ln}KIkl(#*6mrvKH~AW ziz@d1duAPaY1$^ert9ZH6N7tO1Xc*xoicKg`553_G5hwhP3LCpmgm=E%j}3dd9ZMo z(6j%66@^>3|64L&Ql*GL<#WXC+j|a_ZI4MkxNiG~z2!M&XA-p6ZJAW9IxCQOV^*y9 zw|Ke7`?Av?cAfcVe!9hmW$}^+GuFmTy71UG{P?>-8<$6o1=}9q44YS6G}W~uRr|A8 zi~L{Tb&5N}wjNyHe748)_K9MXJ85T*JXT+Oa9`@_Y5yvh%WvjfnR%M)_|)zGr>o<3 z%J-6c0(YLD9lgWweVoh68(O<%D?E$>*(;@fmN!TS2>MSxlo7-J z>BrH{XOz4?Co^w05weQCy{EN)!>-RY&yCftDd^05{VAU}Ze`}$J?|fE0@aplJfbgc zi#(39x!R#r1-#h6t5uIp*VKo>>tB)F1BHf`_=k~39gmuChW|eE?e}3r9;QS80**CF zd}z)Wp zc8(`PyZ%LsT!})P$>mTexw_6v#O}x%hV#NK8)Ftpe0BRUX+!8#TZ{kekLF}Ev+)$H zUb}79eu;Tb){#ZOa@wXJx1DD1jaml58;1g*KD3h_QzplR_0ONp&YPvaKD0w>aKbbOr|C}OmoHtyvEoR9>FTV8mUUToZCA}fnHoS?bP0h~exNqX3NS#HH+$S}*lYL-{mR=<9AZSDK4>+9ZTU0L(-KJx-G{SuaEXXZUl zJ2&U$GXMFnmif=#cVVkPuMlLy9JE6DzZD~A?EkOU4sSto>5V!pSyxxRlrqhGlr{5! zs&Hd#Cqq;2++C%Ame>8AnRn?({hc+Do5h!@tH40GEvbsi4HHi9J!h+rJX9KC!SSNLjN9FQl_*G0KqiZndDbF>qh5J|^VJWV%xSL(FL zW2Sj`EQ;@4^45PlEvD$?neRz4FE1=?UMzd{;;HEEQl?YBuUPbV=G(gU88chwoG%W2 zQM>a-QuojFEqQl$wZ>%allQL8x*E9SQ4RZA?htLJJD;z~(vumB!|7RdO<~U%l(6SoDsA&h5LN$Jbo6 z{qtgR-hXC(ofl2DdAm;T{rc_pyCakRK0RN%@0irO|JLt!e7FCzVakutfQ8&Y5?pqF zxBGEmd-Jytb?q&AyWi|u{rdNv;(h)5|375EA8vl9VsUig(y6P0H+L=5JNbLBmiE2W zR?$1w@Ap3cy}@_3*-HJ|Er4WPvP?a%=|k(>+d*_yYcC?KF7qhQCshPI<5cy+l^xX?^iDS@1FPj&1Qoly&b;c z@x{G|7jsKn7A=vsNN{jWy|T)3d-lWb*7s|!>)bqEWf&Rreur)5?F+Au2;aSY-tKju z&8rn#mM^heH({4-`Ja#P+U#m&l436}^Ob$1f3JM^n@!!~`@h}FUVr8K)y87ZmfwnZ z-cLQcG08+JJu^b{q2M`w}0KRZICVd@o?Sa zAn#P$G{>BjvZJTWZp^KIxAUEf@I7wLdRAe<@W|Aur`GvRofdv?TX?4G>VrqO-OjTv zzZx38(^Tw1zeMYu*;g56u7V{oP;#5l?C`WdqbR21?C-bx_unqreD;r^GaG*yzuk`o zzyE%}fA^I3`Zs*GZw$is*VUH4Or5^-dR*<*UU_>ve^2i3dMpRR)<*qwo0r~vxcc3` z>W6s+qFeK>hK84BuiZNBcjcQKTDuUe!^?QH$cuH9n)YDMD{X6J4{`)2>cU#}m>rmoxn z{oU?&oBi!evv1i}KAV}o>+oCI2-!8qY6K3I->XdDemigX&u6t+xpmiX#ZB9qd;6O0 zpAU!gzP-7bxA*I{;>*i?wO>!k+PU8*cl|Wpnf+5AwKsh}XMNr@wSN}y;Bt46}Rca9?+_z zxBKtc)yd0ATEE*eIevZc@;>=L>De|-42K-d9@`w*tU4`1>Gr#z+qZ5caP>FFq_#F| zb_*=s^hwh+``VfIglDH$irQ3!Z8F&Ur1Yn2Q>-3`9)ob_dI(%4v{zbJJ`n%t3T6yd0xjp$D^|^UXE|+%H z$)2`t+4$xD<^rGF=UcD!zBZb%`{lFQ#<`XE58b_H^uATs=g-|sPNDU`-XCY?#{VO++Q6%*gfR~!>7I;QwzN@{9h&-&wgJ?zWh-LZVVS9aah zZEI!Z`;I2-&1coC$W!h8J*~0a;M&Ua9NVfdAL8x*zcK#a+`2$b_lolM-wz@`8yqpa zUGq8Uy4SSHf99>fCo{X|nZUV9v#9NPb9GjE?K^HC<1@oR@v7=9$N#S7a9=*Rur0d!?N;MvH=AQ}n`OeM&z^o}j%Be?>YQ7+gBs zYPJ9JzdcFKHg9x3|47*2?xFn0Y#YnhjdSz9TK<}m9JBv=d^x*pMZzBK*T1HUDLL(U zu_AEs9XIKmfL9WG=5c&HTs1?%vf#mipx-}(Jnny~{a2~4_GqRXpVlw-*_Or24)11m z<6u1~5W>NJJL~mYkDEcQzpl#dj#Td7f(wl7 zJD&QyIk@lFC-41dzN(-7du(UsJkC!C@0S1n`|kbz|7Gj-2d+tYRG%MVDJ8azfRjG$yxu7-d(wDxwx99J++eS~9*vT>RmF7`&nmu`Y<{j=r_cN25qJ5Y!sC{=qC=1U{=ItrzE6KY{{4P` zdSzsbjZ@`Dce%=xd5;BUJ~sWnd2gn^;rplDxz+a$b!DV4 ztZgaiEcmf@?`)JdfKq@UQ>a!+Z7#E{jX1}5Ma92|)$9y5@Rq&S-QE(qe@*x!Tfu3G z>T(J^Muu!15}W7QCOlvxoHwf!AAbVsYVOxud$`WT?a;c@8>i3gaF!Ni(c8rM zWuNN2?8$1rpYCz-u$kQ`aQ^-z*ncOl?wZ_FQ#2n2%~XAUe#7gQZEBST32E`1{bx>E zhS~jnBCKDcxKF`OF^0wY#^HZIpUa!)+}N;T=M|$XiaLkS<7dmCUteE8ulVcP<}Kf& zZ>1}J;lJl^`2A#_l~ZmPbJp1uc)2Ud1K>6_w@P2 zebR-UZx(hD~f zTrj(`t0n$d`BuqqKhBp4OgQ1Vt*g`f^y~wLH?qq^a(=l>1! zuosUqkMDfJzp(OPQ~2d?$K>**k4V^DmaBinxxM`SyoVdsoHqF`t-h>Q?NN8n-T?G&%GAP z0*Uj;6(&OKT-<(fm zm+ddO6P>^J>3LT<5>OEZ2rRLNV9==sU+B3h(Zw&Fhh$`QYsC z{_KzMopM@);|q_9&MUV_lb?N{_4CU5%AV&H@zwp4j3@toTq?Y7{qA>G*H;EFuk7-^ z{J!;z;9t>qy&HV~Rf}jbUOueTf7kh2v)Ff;+LEtV!+)R5Ib^8A{ZMlL@=`<(M4+*? z{lK07Q^NzRPaH2zS|9f=#@niUN8<{Y3aR6x%JPV7?I@!0a8j2_w2cZ7~L3!1rpdT!t?#k~Be4yR4&#*5p&n>^YPU-$E< zY~t~Ujjge1ilrQp6^X4k7k;>NNaDk}Edm}r1}kmf*ngDGaq#d^VqP#|vQ~wtfL>)c zCu<9v(TyLQdJ0VA3snEkv?yF8|L1MWA(nXai3wNU?5aK2L$=j~$^=kFB$emisD zqj`_*w69c@E1NxFA<`VZ#ws5!C z{`(@if2VEkfhoHBQ|vWP&lf#&nd`kQkN%Py0-GKQ%zf;eaaiDT z(+SbO{rBpQK5M?4|1e78|I2*`*^X>fEK00MNNkytSh31B|GK(3?>)u*s28F?_cT3p zbgTY2BkKO1{(FZ0hINk1&+)ukb!(o%5xUp`3Y3YX13J;XQ|LoO@u- z!G1^l<8G$&r*3dqsx1+hd-6l;w9^aaML9XG*DP&>7w*}yW<%V)D&<>8j#YCiG9}s? z^nG6*sXkpuiTPoL`|JllCs#6ldh>9jH`CAG?{=T(KK{k|P3n=~Dt9LTT<84rM)0?M z*7I&TE#E#V?wRtOd7?^1{n6ta_dT5!{i~eo;q?lpkB`~r<#fb%gkO((q5H5%B8ju@ z_&a9R_y3B|E*3NtU}S3)appPdw=Jgc$%|bl_dH#Ze(BWZGMk2vX3Fi7Ot<%bzxUeA zNZ;vJ*Y~$<-}2d%#7pgtu++U`DYw}_>ARoIvbk%d?^j-HHgJ!#{uKO3_UPyHUq3{- zXsEob+tGgMTeV`XOWy7Y_xa`(oK5S%G)=;DM#j{ ze(dSLx(g-Axh^=>s`ufee2!C>Q-t9D1M_nBYbl34c4SaziZglGJdOOCV%ZE^sy=etH1Ygw z`4Lm_u$8ZWslc%rPlG~h8+AEZ7-QFl8_Nnw} z>4~y`n$rsAxqM0Gj4HJJSf%(kCgbj-*Bj>f9ID-PS3gmqKcRd&Z$u`)*dCKV(~rzI z`5vu!-bKSs?$0LOiqMVc66X7xJ^rWJlB~h3Kl6rg*W3S7IQSpVFv;zm9L|1GW6t?c z`ofDoxE-vx&ceO$=tJw%1@?M^vf}UiuRG6(65u(s&*`$BaZ*oeJekX=*_oz28~mlI5p7Im~Te zB~$a^VB7=8J3H^GiE}zd)V%u>Re#AQ#0@oSngC zQ9{Kc!F4mwe@JlUIP&4eqkE6rrPBnT-cP9bkRK`2Wo7@{Ha_;IxLRuivyyn*fgX1? zr|=iq`xig)kFFU&#m1vDBW*&_;?C$N+{!J5=CeI>G*8!V>XbdMlU=dx;Zui0HE9Yw zl}jGIR=xiCp!<#KDMH(xM?bpx@yuoaYDd0>ug{v_JMly|X~KkKr(Vt8(UWsV+}!P8 zg55E;@`899ZwWsmllFuEIaTGV=5)7T5r1ad{`}Zdv2~(sX$$}4oOb%PbHc9F-C+_( z+G;-p4PbxW6mqbpx8a8k3mSbAD(PY z=)NwpNKk&>`E(td??v3Vd-t+DHqt7#mE6^LLw>(;<-HA0`W-rwHeNVdtybarbX9!K z{rBnjX0_xVv)MG)-2S)i?XQn=AKu@-WP0`ov(w-5lOk;%f5H~GGoQXQG2~EwX|gCF zr^2-5$&39{pS(G6o7tb|kk^MYPO(Fm4wX9vOB5Ij+&JkJ^r%4N$gF9}PkQg( zf39LxY?h+v_6R<$Lkl?mKd^r_J0hvHXTr*AT~2#>p()=t3%K_btgLYg|4^5h;3Mng zC$z`dX`exS0Au|OUZL~GN4DR)rY})h`>3&W+oMb0d~5V7=WtBsw2ZuQeQ(M%8y9D` zvJLmHSX`WECbq80LW0M?^~SZnJtlpo3k}ZHu=nRM&o9W6F!{K5LY>}{yoXUAKWXn? z{vky1h^X>Q%kK2E&i%e~$I%M{ zSN(3MPw6BjIj4vqp3^dOA|4)Zj{Ejr>Ab+g?mxHNA5<-@loU3Ty#43Z_a9O_uN~g% z+)-k|cRo|+4gc+}$VWK*$QND_8G2SeOOgHH=T|b^pOf1xUHI9|&+MpJ&+B$*{q@8E z!DUkF^FvSYZ@TyE_3q7QcB`1N^~|4XE>d=&k-h3++d<|3nra~v8X5j8rad^kre4Bx z%lj=VUsWXBeU#Y+oy0j;bKd;1L`Bfz>7C@#&y~$S9?mM&M-Hj3+y9X5`s*XYwUI5c zN?EpvaRG|?;`{sBpImBj)=kcRB4Jk{&8pAGav-5))sxK!nv?xD#i;R^tkiz`&^K5v zdD|g_75tn>FIN<|?wWGdyl^hZSC^6{`Vs+$X2)1Yyx9MN+xE{pgTl#nPwW(J3iYK+ zj)_&jGrTP8#KLTz_KAn{>*L4G?4moDov3UPy>!0yitfI=h~t+Z6`npU+B4y*-L%Kg zd1k9_dH?x*`lrbo=YQB9GwoU3;_33z5cMLCbK#1&6Rt5{~BMq<8(TqdhXr- zwL0ap=NV7#<$gHhb=A#n%QLeDdN$3Sf2XZL)@EV_yKK(RK7k!O)MsvC+Q`PeS-7pb zEq8b1y8{spyx--Ss%^4!7M4DH`?-KNP5n3(rgZ*e`msYr%QJ-b(w)%e7{=Rw>0jI@rR{zQeU{^<_Wnv+5W4 zpMy?Lu)802!oT#GWO~ZG$x9|2v3$7Cqs^u5)3f7~Y@#HXVrB?Vl+Sj0x9U^OIC1j*R9*Mj2Q#?So-jo(qH0oYwfCk{WwcJTE6dzW#N> zj(>@>8+rH{j%-d}W5ecH(WCGvu|v8-TJf79w}Rz~GV}ASecTUCD@^t#byj|sH0G|$ zW)^hOW!Y{pJ7!<;r8kFHYyUCo+wrmHiSC5gf1G})={2YP(O0|G*?xVd*@h$cjNWf^ z&pB}PO*Kze+=gm}=?}lU@X4~>{vtfTrtP`>$!~(%aa(Q7dHQxm`)%6tH^$>`(bdOU z(gBY(Pc+EsA6EEs^!WYUChz|?aw?hc%ujj$_EC8E%qT6~f@^j6Es^{9v7ybU1{+_$8;(+v5UheW^w|N%!f4~2^Y&}cA-kyKw zHcOTXsu)NlO`m#(>7-7_nI+;nDpUO*pM7eZ>-*#3-lHEYwtv!7Fsu>i6ns1)TdwZ&72E?bqNpLnGT7ajO{3wD}7e?h+TP|^Ig<2Ndb^oQ^UFNkRh&(d8k#3vT<`Z>ll(dzSI)`0&ba z3zlPUzVTvuLjH}Ow1sks(c4lLYlY9%A4s!KKF}FheycN}Xags^qNK_1gtGq1)Pwq4 zCf3;;-E)J9|JLE3cl>#_JpQNXX*S0&g5B9+(LICb!h6aueKUT#WNq}0w4##^rP`-M z-Ro87GqNzf`~KNi=0tkt`|VrKyCj&XCW)@=zi_yiHTYfk1^GMS+h+;X{8-rD<{WIV z|8t%Ax7O5K+tl8F_gR{w`i47INNM+c&XrFLlM?)A@2KC=UlFF?CsbM7uPC83DXHdo zx6tR!Ceu1bWka;?^xphek^Z4iHDunCXB;}|H+Oe*Doy&fuk~YG;Zf1J zf`i>tvh&jyS(YB;%B-$f-kQ22?1!9_*w6BbHuxBnJ!p5h#%v;HHWQlahtWe3~# zJ=xpX(Ak>3dEU1BmSz!=wJqiuJLH?DOMQ1Ll74Dlf^&VE=S+>F7TM&8{4`_bBwcDYWcl!&&^as!9hg7cqp*rjTlTY%wZ03qOO5v^? z`bv)GKX*&?JTYdIK6CGAg7UwscDF5ClCExh{NsFa5JOl0avQcKJbcX+BJcTMS8zYP zd7yrkq|0-oPyT1OF_sB@ERvm`Z9OmH&#QCww;nI~v9s^|cG>kxPA@hv>*k9jg)4@I z-Jj6R^Pd0HG{rsxhr|b*pA8aDm)ibn-}W!3`C82}{oi+jzwpmf`q}e%hxrcwM=T%a zOx`x%(k%C`h1u+b4Ed91mdPtTnR@kDPU@1q_qi(7HpRB*PHD90*wN_D`Y1q8yCr#@ z(WKj#x0zPP?R($IovZoU(&@pYyN7MXTuvSK@vyw!;@NU}-7~={BK@aU885sFnv)d2 zyIogdWu4;JbJzdn{NAxXdrHOPwA=Fei)-%)7p^;8QGcs+k72*fCy(z3nE8Li1ZJLp zY!UIm(fdA&qFJTgc`3yUceXoz@Q@SUw|(=TzCF7q*Ghg(= zd!)EG`_i-7Z{?Dn9lV{t|L%JA*VDgQzmNRatNr?~XJzZR>REPP(f)mpYyIQZ@855o zGV$#V%WwY$S#ppU@;Q7I0-ZIs{XomQM@P4PxH2dHz2`LlciJtSHc=nUR^@ne#ZHag zcS^XC)s-Re_uTLIJ}Yq<2e+MMy>x|r<8N7Rcjtry%3r3sRFupzdUo8f*SAA2``YNb2$gi`Q>9?>*uAqNr4G=ZfzopWW7G9j<OgW8t< z0J}rBAKg^`1So~eRcMy$c2wJ^UM-oy(E*uzZs6!}U}RZkB3aA$_0qynhlZBhPvnv& zc*ZT9Fni4={o3x%U)pH|%`+YS!$Sy%}2Ty1E=JInK# z-tvk&t_j~$V}x@6a?HjXK? z8NOS5-{rEdNcl=9VnQR}Er*8L(p#mSS}LIRZrt+@=m_urw{2$N>uamCH%ndnZv5%w z;p~IoyR!lcnJNkllb?Qh8LX>*_e+=f3LzJy1N2sjf|k{+vWBd3SrNw~z@)+!vfeH* z7g?2y151(cg*DwfZ)PB`0)WQ{C`trD$F#Z3UAhWo?<-xISRei!_Y@h0 z6tJNa4lEikPC2w5T{4M*a{@NhqVC`rUSYP!nMuU~8=BC_5pZE@BUiVlDmDug7=<|e z8=BUA$f;<@;y#dz6_^DVEYM~a6`SmZ%>oA|6@hsStg#Poe&ECI#0d^;N)C?UY+5>M zQ*qg0!^pMk(B_A-*n>f#k;kQ>X&p~UgpU?3J1Uq&N?OwoTVoFf2PVl52G&@~6&q%R z;IiWbi^dDC^KIoIPh*QLBLPOPT}AViW_ zL7vzw@MvHeO%RZPQLt%z^Duwu-MMQbH?KO}&fng;gTmEf>}?e$FGXnS+w%g)6=sH z>VG~J-GIQG z|M~fO_3`-?PN`=nJ>60Lk30EzPoU|#9ZsP2T`_jQ*KFpwyzA?$l@k}c&CHgs`?2uV zg>`fP8_t`IEw@i_xFqaR?0DT%eeM!9pE)bmt%x*cmC4Y3xZd;fvQ>$XkF9dwp7(0~ z{(oK%+wBhtgKF^5zrVg7uC}Op{gSWmq0<)M^0>MxG`RSFg>!7})2XinSPcu;y8r+CeSTFWw^Z@-b89!HpI;YO z|M%;Tw(|$D=O2Z=97|R%c)hGoHuUqevwQc{ZA$5^Dmfv*x;wb?)04nvxk{J27d9>3 z86Tpbd8BA>E4Nt1zo$=njL!uKw9Q@Dzd`@&-|zQN>%Qku^xK$pG-TzarB^kV&sk)) zCVu_3HIa+U-rsxsvvC9axBU;c<=$TQ@89qI(0`M>LuMMKUioJKFJN`p+MxY^zs-Ig z@3&xT*iJ9e(sw(buad9(ad64QImPD!)3euV?bw=qebwLJ-@D6;j|iRB`ZaUz|38cE ze*Y={S}u{hRmQStg;wb5SsMhtt(vMG+>-p6`P(_YeJ>VGi2MHL=HjAfXI9>;`s`aQ z|8q-WL|#Mmv)QW9xn{Vt$Y_=+RaGK9;jSbJZ9q_2`=g;)g(`U`APYaj7yR-7$i`&;FV)yTH<9*Cqwx@|TcCJ-< z*x6a8pSSFPAlS4i%>2#+&W&2(>(;c{|6XJD|IcSttKycj8wt8T)tPrJKJV_`7R>rk z>dqy9`%qW?Jpqmhs(fzupj>!6jY57ZnzQ*$m%6Ed&) zQQ&_<^?HHKDppn9{;blqaeHsopPuvE^w1ME79Z!Wir;SM?G2r~w0HG>qhvR(g*`t` zPt%<(Wsx!A*2dc1vy9XIxDq43p4J!7zbANFv)$&`ieEn-_xEmCwpgs-?yAQeWz$2~ z%y=|O=U~eLUMD4v?mv9rwL?}cSmrZ#RaC~p%j;ryhpfJ~Hgx^Hy?^hWscb#1XZoRwL#trXIWxzL~fkmzdCbk+%K_Hj@DfD6J@qE zY+zZx^WN6LLu)Fp?5O2ldsB6m`~H8wR!c21-L@%*Fm0Au?yQ@RAKmu;R{XQeLdQ4f z{=&nB{eRX?Pt@bsDDuUk-(5dJawW&k4L%<|b$v{36|aq&>C61!?Z)Hs;l*1oY^ZBy zi!;#P^6Z*y`JIJaFP6?ZZ~K2w(*o{PrsSWOm-~mO&#PSa{JYQIXcbxPErTP?4zoCS zc}>xnsI*twJkRIj?Qh3hIEAkqc4zfFy=Cp{lTq4Sdincm(me0%*;#z`+1c4=O>aE; z6?l86kso)K%i|SS0vp30xIOqkzy9CKTba7b8R2_>9O8bpIrX%SqEuOP%QHb1kAe-2 zSAF#jMH=rcue$k|XYIx(<*ZyHALg|Oth?-MzVdC8B=(b`#A37`HHpP#8PJ%e|<&@9EA!h>-)kEWj1 z%Bbi(z0gw89&{K?)>_l6dRKln3&$;vuerF}EGFO20Y~2Ws4yX|NpHWdmWoW%0*|sK zhf?1i=C}KhryIK~BvIT^&>^w&!7|_3XKFLb5-Vl4bS-cVUE(45erLexuL>=V6TI)Z z%hxWsB^MjVp6C~;dq$A`;Y^O)0^VZNq}1oFzc*x$^z2Z18PS-Bi{dp(P6j^y z{;2ZxwYBpma9>YY%rh&q?snoM^Na5Fa(NdIZQo{o?}h8j^UQyAb7{Pp*))!&E}=40BRoqg5l`5#=~QUZC4W5K_R)_n8oe!WzCdt<8p zlrZs@unn78w?}6?vA*}?koJG1@Z{I`7kW)aZ@KoK`Ec~&;=L75smqkw`yIQdqHyt4)k7Qq+&VW!=e)4Lw0X{i;Nmx{%DcZ)fn@+W1~&x%v}b#IYt+=LsPM$5PDX4PGrzyI&GH!3&Z z->bfAeBNfUlzHA7t zS{RwX>StI7AMFwiUb^M&x{bFi_DLL=ZtR&vxOU-Zt6=s2 zcatvky?P_ubugk4NmZh}y?Fx1>GvCaHbrhu zJD2!VzTxk>nd|qj+aRncvt_E?m9jmDEHkPT(@z?S$LFwEPhRd5xIU}#w%^*Ltcmm9 zh(!iTzns6C_r?D`xwEw@O2SVuGPAErb2q(tD%*FzGnI3**N58f zDmBKLomMJNSk|P+QE#;+d-=0{AKR>=r90c3YgZ*GikP&#+xJ>eH0QuQwZ-}SKldH_ z_0wOTr1ihMdv%Rvu}@rL`I_+e_li!- ze7y5tuJ+2D`^zrdICEc0_+hs@PAtMP+j;5s>Tu~P?FB*8COK)e+V7ve`ZK%pm*nGp zrl(~RU&tR?yU^d};rC?;hjY%ox%q5Xd_}pZ71yUAl?nD(TbV{SjV7_XIHGQZZkT)R zQPi4pMV@WvS*t?@X2o3JvU1k)t#gk2?A`y~c2{xyhrQ12d@E~jnO(hbTrT+W*C3}i zFFLXdHe5CR^K$u9LFJNz{1ThQ#dCb*4w)5hidLAWV0L|0qVE>oRiN5!a$H>`Z`~8Y zQ19EapQWp&SJeM{seaY(eaMeKv3&UI44kvXweED`e82TA^5^=0d^Hx?U(_Q1zn0@so9)jfhc5Xp@qXk` z*Jk%`$1Z2-neCv3yuAX&e}8?|{Ik%<{_hjv(D>|6C!aAJr=JU9=aVrwbWqYbZN~GT z{WzNm-e;|R`_@El)Y}Xfx#-JgM@$4-Y8zmtgNZPl#fg9=2xDrO*pg zZ}BYo`uXxQ|8Rpv`h4Eni9UDp18UE{y1FXw!Y8|r=asQn^AjABI2BV z{j%$INao(jk8iSaY2smqnAh8CYXahRXTy;__7wi^hvCK^b{v zY-O7QqmYLllSqkbc%^|U_IPn%G89^{K-;aLrU!eX0(m3g!qk|j2e057^*G|u(6mnC z;73Co122pk>&szh0W>}V4HbRsT1wKHSc~lKKDJU`ED>TdKys)Af`tTNXWCHbMLCsp*C|8YHuX8=8bu z95VMd>HD(AUU=g5nrB(1r;!s58yS_En{+gEV`p*hN|@YzTJ-X!3`ue9IckYMw>{svA{=RZmAr>-ma;L_183(iFwt37;ZF;>#_^BA%h7oIUOcve}5O7b$;Gm&%;cajcJmXruFnS ztxM4nUDk;;c!Px-eD!p~?`%%@zf{<;fjiS#YVz5@3sZAc4}HN}_@z`a8QAcjU71qq zA$@5^4#;qA!DUzn+7&JfA9&aG|L=DFOiP7akK|33T)QT%b(tZDEs`32{1u|Vy?L2b zaZk*K=ZbRg$!8ibytWA?R$&b;Bilxu$W1D?%_%<0tg)W)xicKFnF^{Rq?trYZU!up z$06UiM14X{x8`IyNnsCcq3XbN(*MDe$^KzqUz-QGc8LT=Zg#s~dTV2Hd(@7C#$R8r z$4|B|P7LyJ43{w2?Q>(dj@ zz`ts%*|~O2+L|&$54$@(SQ~48eww*FzA|;!t)0c`S0?N#dAUmA&8ZW5yY5A~or|5c zd~eRpO|LF_>wA6*Nt^TJXm|Q#wce|n&+~sFoIp`Em-Gib5)#g@Y@@f#8xzy5k{d}X0?`<2w`p+TV0 z)I$!S>+G}c?kdgt^Mf;S-jk;REKVPJp6cH+T@zXN<)R|j>lqu{c2<6tUSvCI+4taWx7 z2z)g&eV%V@Ld`6eOA{TQpPL)HGD!8Ru)od9-(B{>OH?9{iE9dpK6BrebMuUB&G99z zr!#7EHhnkVSmU3veYXCE5x5)a-Jv48s9M3{&8~0t|>2Uo}QfSZklZsUEZ z?7Q4L`FLM&@v}3g8}F9{vtQl#*!Sg>NoS;W?Y8Xu^-6nfZ)HU8tu30d4o7yMTkfqU zvC_2h%bUk*gkOH1A^0l2YU}5XJ(4vU!L_r%Uf-H=@lZyje%zjj+uQ~I(#VxRh?y>)Hp zGN0}4vXg9ko;aCXI1n__4jMEylINKFSlH>p)2N~V_0}bKj~!$?-^k3KvnT3z=8X*t zSJuSW|K0lQ*Xw*GyLPUwNT2BGw$){z)rBke|Nm$Gq>oFla(nOPR>4c@n=d!pzq{;j ze|O6Db+NnuOy659KJT8hpdV;kW~;sQ^GW5iKP>urb9ecA^9$~Wr+SF5-}NM_UDf~M zsk__sc21eN_I|H){e%=Z+g*E#w^eqP&+VVZIiEe+twP1UPbTaCzrXvIFP?vF^_|!q zhxKpW%*b8qeJ}U*UT>?#m$`owcrMSKq4zK5)pA|++dpzYzq@qq@!lgd4wl_Xm>m{f zzwK>P?!DZ{zDw+HZ&_5gCA)mF=cy+rgO$`yZri)D^0|QioGqLe4)k9a(w+T7b@8^; z{MY;scm0@J;$n4cTIv#mpyKn}?o79oZi$>) zc+5<5T1;2s>xBB1Ki>wq>G`PoPCUg?mvhQ?hi=E09&dZ)%$|~-^xYz_zqe%n-69$7 zda8KS-OZWy$t!1nJd@tc#(Smm`P}!cmA5jN2VQu3@q~l=WHsL_PILF{GU%QW;yiU* z^6|cBe-1SMT~+#en`VnvMD(3Ck;bJbRj04mTm3)u^fcXY{XHKR{rYx0Klq81vDn|= z-!Hd4(l_O`+G2jM{y(#6)fb8L@y%>suj+2U^GI@Wo9(2^&rGw-KA7a*GWmK+dwtcv zzv{A9Tg>eb^WNH&etwx;%?HNN<>ySfPABa9`Ak}PT72sNiSBGGSB0*gQE;K-%lrQg zS@-wN-Sujfw&;~V`+vW)F8%xU?Ah8q1?Knf1UtUno^!LiS0Lx-r>C!uio0iDeQbJ+ zzi0h)z1S#z4eJ?8s}Hx?uGHK2BdPTNU;Y(SwZm8KtIZET@wu7bZpk$L|A#y}et&tn z_UiiR7pl`)uk^`UUvZbOU8CkZE9a3}quk%}Z#UDmZ(LsywsuwE)ws=RYooSgOq4QA zT4LUDiZ*EvE}#8-}cs6B(D6r zqcHhwHM4Z>*VosLy&3BMel<5uJvBw-ZEuVA@q*I0cgKIfIJ7zA;-Xjke*aq8C8{4R z5%TWF$K`eG;u6&=32f6>6uI9p`x<=j?DKim_qHTX)ebi*eRf)Ze+V-hkI%xD&nJ~1 ziQiXKS^E8MdFJ7pLeIQR3mzHR{~x#g`1mTlOdb9+up#EWW$cBfAUbjvv}KeOGYseFAOcd|l{>qY&9 zqECCj-!uPu>O7;)kZH^PRnJUQN-Allyb+mEWuF zbCs{kXgI#E;$zY+v4O^QVb22mWc} zz9#kR;^N)Ap3mET)>gzq>h-SD^`=bi+j4KuWYo!i$`$4t{qTZ^8ao^IT0V)yUa`T6pvx|?cQ{=B`p`FIO6^YI^tbq-~( z-jx3nV<|wgbZ+J{#a4Be( zb7~{I)TC~`T^_ZcPO87UmHm3fot?$A=dvrla5~)g+e27p+L^DfN@rJ2wEO+Wxb)e~ zbgADaKXzo_*f24@oQHYi%gf6p6ID#CH_XkPX(T?={zi7?gGP4WivNGNpMS!Bz2N_^ z*XxZ_8`#8tHcBnC_kX7NS6}G7eBF3hOL?L>ruD<9?7UD-X=@B z#P(j`c&~7P`)SVSx`V9ZGk$!2W~=OK;M&c$?(tz?8LM``xmL4Gk{se!1ULrU2Y!Eb zb#*>V{3G*w?$dXr{FWb3jxT;!`usgm z&DvhZX`Hj7TwqFqgG|=XoF!KIOkM}b`7c5SPi&fdl&nd6swY`0tQ>D~qV z%ir5Qa@GIaaZl~=W^eiDv;6c83+*>}9#M)$NPS*lIk|N0*W>z5mqAx%>(4H}{f%v2?mf#d!5QKo+UvMW^B){&_m%GJH2iXW#)Mbb z-`m;tS)J`sHkc;BE+?V==)8TLx6Ay5X!n?3lGCk{exKu%p1t_3#fhbNa_=YKHY$3# zJE8sc$K&$Gk^kTC|C_dz^_9QIbe+fD0hyDtXDGbCvU2l3w;v&TN1tXyy9q^ZvAedk zC+D>6A>*ExAA4EP`qjLCz<-Ee=kAdk%!l-Rj@|fXT={8E-Yuyw`E~7~mKn`v`S+6a zc5m_iSMaDZFWNr$c-Xc|cew>m4709yD2K!>Yi;_WCc8wGO)F$a$o%z}Ci7~~+1zzf z*uc%AuKe%U>#ytft;xE%X{x6C^lz8H?LICazv!Hzja%$d^YXOvNMoZ0z1Ur|Vm~T` zwjVwtU3T(t{06h|?Rl}i^Z)&Qe_ei#=$3}pMTuvmb9ZpMTjHuYQ6%sjgI!lN>!-AF+8URavaz71t75@zqfNE< z6}P;+wzfUoU118>^9^U%jBDiU|7;Xgdp!5`wY9rH-dhoD9hP@ZM6~fQ+9BIxnD&Ropx}i-&Q-k9-KK_ z=5wS++b{lFcp;}%P3M>Wm&ow=+Fr3Ro771)XHBm!@z|AnFZXt(PV1yyCM7R~qZpzd zXT;lF_t|x)>~^l^qwPN*8l`!-L_ZIjp7V*>UaxXfZuZ~8`Q`U2xvZNLnI3$-p8hL; zX7TNB$DYo0J|H2VsKffUc*nu!_8BJ~=Q!UGeKW7VuI1hG)3fXRa<=|Dp56IEIObKy z67wkg$3gBn_jh_E3*0#z;X3E7#ffcqV(&rn<*hB8JvSFJwr;dJ_Ql^`c1FxZo5wTm zJ?6e`)TEmftvEe*hF+@5nG5;uuaaX=o!E9q_1(3#w^!WGf1h3FGaC`8JEm% zd@~kW_V(hk*doc_w~xIJvRCz)y>aS~-m;h-1rz`2Rp0cHv-x^ua+*%(`zRlWg*r{5 z(TiH2@8>_LvTvu?6phql*)t{_y|H-HwNLzI7jOCBen0O)!B6XrEJj=0rt8jn6vZoY zy8Xd|M8>TdJ8Y|&J>JhSe7vRY@>jRpS{1oFS`0n)CFdBWuKM$3%XF>KRT=9NE1$8; z*JPYibZBIFbV_^umDAl!-xs!Vw?FMxVm#KPHZ4DCLudaMRd2hGTUOQmd>a0Ezk9!& zn*{S(y_~5!=V#6SHUCKe(nZtb>vqPNxo2cMvR0m)q^h~@G5e!;mzVcnTyZ$RfTPUJ zMv>*{q_7qJi#O_oy>YTt(9OQoxvBT)&1ZL2-`Lgun#CADRcmUmnRJD++?8k!mDszB zT)EG%mo9n!ZvX#-6PRuml%D)%>$FqkT2uI$ynZ>`TQy4*WCcnbvw4|k7w84;+Rzom!dbl zuDqgdR(kKfecbbHHioY`zh8^~yw}D_du`=sF*jzVif2KW#QTf3ubnTX-X~DzEWy{V zdh>$APY3U!A865J)2R-hG$Jf5y+IjI-3g`K6FJ}4OE{Oee z^P2x`J3jf4AI{NDszp1C=O_JAT%x|ix2OExMjfs)ivazL>rXjUU0C3_>)f7Kng4ff zDEz3M+u^%k^8KFOOD-SH*U8P@U6y-xk~0UF!B2@dIk%-BX8u0sn9Y!Pch}acJE6C> z@J4UTF`Zm{bJJ28GiQ$WZ_brKl%igk0Tlr4;!_I;QF#$_F5@NPzUDf(rw?1xf zSpRM2ZSPgixya<+T6(4D@8g+ivo}ulu9;DA=+rWAJ?e=?{hYWub!lYk19pzDf@#{e|zY`mKqwJkaOXn}$p}+rWGox9{ zg%0Nntes~6E-2nFI(_!p(&LBgzFtV*s&;+n^Lfc>(HkGD{`+7vEiCDqaIe6e4abk~ z<+ysLck%x}Z~k7tz9v$5qTrufALdvVPYWz>4dDNyV9+w#Jb#|#lv(n9|8qXS6Uuph zZtmBh3(>Z`=F`)ie;)Pu9hp8?^wqR--YD~hF*|mtq;{q&?RB>-dSY@g>D&4Jd)P}W z{{G^<_dq}7&csu(kG8M$-j+J0 zxo#I!_vhYD`Iui_;=4R|hu*)O*UNq7+n;(acHf`Sa`@sUf%kj7W1Do{+s7A9r$T#`QP1TBizRAKjhluTZcyYU`@$iQ|DM(*I{%v0yy|yP znYFRr=5oIAwxUk{%Hyk+Ms8+$RxPkEUf`+FwEOR$&)5I_-(>Z6g%?i$AD3UexA;oU z_aBcvzgVi}BrMtI+MTR@bJ5YCm;LQsKTo>y-MDo@_WgYa+*Rz$;lL*rt^v zX$sxAvaWV(+_H%HgY($tRlnc+y(c`eUvllr;Qs4LzrS8@NSgubrvIGydz($7diuph z-+SB~9v|!7n>uIx9wXpjos?LPD7eR99;y6Jm# z4Zp2Uxcx9|Z;zJP_x=BE#ZD(bn_2K?sm|iP?gEnzISMm->(~GPTmD)4bV&2(yu2U( zTDzs=RO)8$dJ^RJvF^U%;dQ0!&%C*OX{q<#JFNSQ@9~}%zHOB+IcKtY^t|8SSZ@h) ze6jocCE{Mz<;&eA%U)${*Vy=f<{^+a7lAuUH;@Xshk6 zE1=S~EIOe7gJE}X@U=`vr-MzcTimXGc|1wv{T^@IV@LY;>mO^^<}rGIC2GbG?lOaI zeRhJUpSdt(24V3_y+jw+@;a7Vu+LsJ zKl`%Fqf=A0v;CacDhb&y>|6Qs9j9pAqIGK{1ZT9kRnIof-qvx^A(8d|h55B*IXdzm z8&&qsT$o$J89cLaZQ$dgol_ohWU8>Z7)W%;KKQV))qcg9q;lsq7sbMt`^lP?y^&aZ z@#^UegI+mXH~rez>3PnrvWY)rc`htAKFnUbq`%@#1&6hu#D+uxnUjeH?9LSh5)sKe z#bxG+cJA9b;ZghxNmhwh&4<^>v#lw3k#V%HCH@s(uP#Rtm#9`s+S-k`RURDIa@5eI?7oR<@-Sg^x?RVQ*;SX4aLKA*WRkgXgI^1}-Ws~)rnFmkk-%wt6L9e9l z$a-%78}FMA=Xq%`>&PE+4_H>P7e5l;7(cna&Us{8xysv5(+%WNNiS6_d^GFhnj`8l(wjNoNH z(@r0k%{|7`nekdh(X7<-&oN{Fb-8PARL!=rwDG?EO>J7apM;CG(~7HmDvKZUK3>iz zYc->|=lYXm&qw{~^B)AcFM6u@W1p{V=XdMpMxYU>>EA8B8FAe$U-&m-x0%7YmWOpc zjSm(q)u>H2D4%_Qj`wtvG;37`8mKc5I6ul4slr|w^O^UKlVXJ;;1KZ;YH-fwM|eeH~o z&jYr7?ys-$)~t6G>XQ}k*f(L<`*{J1YR{x@Eq!`=dgj?3k+{J zktCtXi;lEcIc1b|E)%p{cj{&7)&SwQzq)Jgw;tyCza{f>&%@F;n^+aO(-tedJ?g$A z{sYVY4gJmbE5wq&_dPnwT$Zk&aIkiN^EJ_s>xnG|-`>o0>)2HM+&=C0P5!S@@rANh zEIhL9!3V|bi&_Gnt=ql9`nI60vPcA1>&<||ib6w&-U53b-xuR{zJ*GghB? zGJj;{X4qAK%V`s5NqWEMGv6MG_N`wod^(gDI=}YY%Cx;P`j0K|b4V`Sq<70sg5|+u zN1i!J;U^TGnanJootvATlj1SMV%LY3Hc6J83kFSxZ+%Q?k5zkpb#=O)^4fy4v&}EN zaWbd!JMY-w%$7d;`_Iq!&8#;n=*!oJIO;#Q$zjP=6S!}mp|c=Hp=GxHe_vMVtPb-l z2`A?JapXQ+P^clT`s4D;Zly;nb7PAt`vcbh`towERr$LVmXjC09f*3L@I2_j5 zXU&rR^y;+bQv_M6=hy9WN!-xTt7EX6ZSkWD{)a+=@AST2*1GI&d-K^{GoR^Zk%xM& z9X}Yq=dxzuZMoRj>09jh{>uI`-=e(XB5V6U+bNsR?%w~m=gPUo?+^1u8C3C}jmj`f zJ|_0oNUh$0QS8m1D5(pd9A~#Xrf%3QX?&tuWbJ*I8`~YEOM?ahdhOB%a6J8Bd#kOMJdx z`~B{`@F%=^udbY|`t+l^*v`A&;qbeOYl}6NZySI+k-3lC>~GhxJ$AcccdToM`Mnw0 z`yO_Q?hf#u;5J*J%+t4G|GyHqU-Jr9&VQKfU3pyf{e^o?ZRWo&?|#4U`kP%H8yWXq z1dU_fRPj3VR6&g6;0EW-7F&cjo$^?Ba-&P2M8(p8J znziE1Bf09F6^0UBZlYNW11gVLmK8SXY87(4{`Xtnph;Bcd$T= z1PjQ=*&TT=KVk91L+tv~tbVkH{xc}hTlGSKO;L7d(Nh!oD*_z75{8$S#LsiQ6}6o& zqxPZHH2z2CEyf4eRezrs#bJK@O+aI+sK9~*^M$wbUZ-Bt{b#tj@fcHme4XTmSmkdX zDG!wE5)bDr+g4xt;DDp@oI_^21y~$^^D;RWZZN;HGFV)>=Exh1mSTgven;QkWwJI8 zC8f%i#HW4yXjAuieagvXUa@tzKefbLJYnY*klFUP_VwDwxo!y#{dXlkvM;_^Fe7zh zwvxx8(%X9;E6aan>n(0%O4ru8AGM=k;ZJ9a74-!>{$FtBmv&UXu|P-hN7ROdg**FY zUmy8-Su?XKEonu`DdUTMdZ2#lA-#|pr3c?||7f;;)h)4Ms>#kNyK`fmZfr|U`Mq!P z;^RS54|QHnzt1aeHo@C%L(S{8+h>;ZyqCIX`G$|#k-scYWP5$RLx$d0hjrf85B9%{ zdak;rLN>S3X+rCF*;_m_TpVKEZu-wOI(oxm$`_SYcXD5=s~J4_)5E-aci6ThwRViPFm}{x363L-|AY} zd(+ADIs9dAS-ojvOSHT7Th_X4#l))cHye|WcTR8l!nv*VNyIJY+<7Wq_gqhIjyZmD zS>KI)#s3PF=kD%ljyZMro9(gPxtH^Ie~A@V^D%g=(DTsHvh35zojsXcGfk%MQ`~!8 zeB!C2_4=S~fzs*V9eZHNzd4+yR<)YxbJ)y zy!I?&QFvMWGW|nt`!AkEXH8qjrjzwG(-+;H_~FTmOM0BMJ>2W9lxzKWT=7p-%AEG2 zb?y_!>$#u!>c8JDU;nVV*KUK3SkAkh%jdt$ULCr68Efm-hi8j-@cSlwIVupfcd5BM z*YgE3AHLsjlzsQ{&Z^M(m3^|-mCHC|zym!6nV#!kXUtyU$+4M7ebMQl&3==WSBL3% zSKKRlYG?YeP=QJ3^x-v}Qi}rk4r%BtJ$R0}f>Fs*#7?Tr#L0{=adG2O2bo#Ej}#uh zy}Nt5oQZ!x#)aJ2bul}ADi-E6-e?ni!!IjzX}Z*J#e<1XcZKCY{aDcZMB#C!! z1&-gp;aa73Wp6}f8<+Oh>p7qL`0IF@F1~16J$(|NPNYja`~H(}7VUMvySv;twRh=^ z{r~^XKKGq*@n81P2!j<78#i6=JU+>P`mU5D{N6olPVU@xhp$@} zOD%Z#=6gPyY~m`$$E{%w%I+e`Nr);@PS z%B$O0`T5zbrT%N9wwfL5zIfezwerVT!hbT0Rx1B{o^vkuRY&&TZn5>JA%ldEU8V@O zERguk!p*Q~V@HX-;L9G7_(kt`P6<@HG-;mA#-CiT+->%M7dogRn7GXSUVKI3l0!wm z&duGOwRV?kT2JFg*DddFc>MJLQttn<`&35dk!c>DAKra^Tiw3W`|to3^d= zp1#h_knw)T%EDG|@xbisYqoJE-QT}^?VqK`E-w{by+YXU!c-}R&ML9y34eZme))9L zZCl=DE=Q+I9#TF3ME~i^;N=ptLuQ-jU)-&?cV+r6f8$wwGYk*pq_y+OPPP~JoZ@ub z>VI2UeSg}CE#d3$rI{67Sus(tn8UZ#t+(%{de@7Y=Ef|HI-whM%Wv=c@@_YGkFNH& zLdiv3DIG3JE4QCbNvTRxi?}d#US{GQ$g;j~EKRJj-~8LY&wTM-PTWy^no`oDn{EYN zCtZB(4(gfb6fHfbx_H6sip7>IPb$vm^<)rwbj737nQd05{-pFz;{Tlac@46kZ+!CN zT6F$Lp`P5W?{_@bdvEUlhU3PypOKrN%{Z&9)VizgFWX{C;Vkix|HTGkUgb%GH#Q_D zpSYXe~EP)*~h`|;3S zRsP~iz8Q?rC43H6LI;ezXRQ1%dzHuWCk9!NC1%`A8?4*jPr5SWBB!|TqJ7mdCc6$T z)xCIq<;AHPhj`|*cqpvoIAC^FXzyws*haKD9xRVm@)jr+CdPr5w-a@85%;Nu*>cd+9Mxkk=rQfIo>%Tq$E)k_<4P}is=I!f z{bKgVRi8Wk)DNGZ!!l`S-KM$cBT9|p_w88~w6yEhn$71DAZk=^8nORX0_P<^Tlzuv?zFNt(YsIs(`5me= zT5N+?hv{D3QMg#-;rV&C?z*wNOpcoV^N?wj&dXSMYfEOX(vLr%&tGkq*Yk@>5p?Pc zpW83Mnr|uKFn2}3!X_!Jk`=!`pWiPt&&F_X+p75|FCAB{wysaQ)^X+Ot985Ig{+O* z8l>#r7j)j{bIvQK$Cp(m^s!i#zgy!qRcqzEibtMz!~e`wQax$3&tu{W1N%*>r_={JsiY;#X|ey;w?%=CFn?|0Vk%|2OD^lIhuRc~+q_gJPf zbITlorgcS6PraPE&nxTVqE_&#G%iWrkGcdv=w&mW|C=trv^KqGA z(Zhqq=Pcd1!)C3VsvRD9A=TIDfuV^1afP1mhuisIi(? z`6W{L=f~rIk&>kflWu@61zDr$f8I)Hz194PsF~_tZf(t8y?XsVFW)&9hVPozeR=aZ zN%tV~I=v%NdbhSqmwWU_+}-_bR`!+R^R|nN zo}8F?=>M0O>z4?WEKUF2+j4W6v8&pp7wj!zGfJFi>%3bK=O^ZQVd^~_)wwoqY8$ej z`%SfvuPZ&Jxm=4wfAUF1U-vKHjW5l}dDkLPVw!d3g2|2vWy`iM;GSjA%+42J|NqbC ztqZv4x~vY<^^KijQ(3g>YA4V1c@>{?uB~a+irKN@)`mpqOB*Gu%jV27PG9GF-PgP{ zK-T)+l#)!Fi^47ZYuE4l<&~W*7dG20*K7KlW4md#rf>N(7U91FMYTVlPS3ivCH%_z z{r^_+$=fXv-G58`}38m+C%Q8iZ{Qxxp}qmISc2%f4|@73i^}qeA4#^>4*Q8CANHN^$Opy zq44jQ%l_t1MOSS;Tq{2BgZ$aQpU>NK)tjADeQ);A^)s_+p5%-F-)`q$+_U^u-JVyI zvSp{axNDc+1`S7Ut2590<2Xt3>x)n4Za&kzS8A7~RwI`q`B0E2>ihfq@2jnTW$rn3 zx7GU3qPe}-uI+kqciX+)ON_1dHtLvS5FP-cC{$uMC^&b&yqfGbSN}03K zw@Y>UkG{_3yFVP__APL3`{Q5x+4o7l^7L=F=O6P(WvMrN-{x&4n5I+8dH(1t1qBiI z%@!wuO`e~++!nmWV)9G7Qzz1RX57ncvteRd>eR}$`p(Yc)pvK7zYb0OeW@mgDQ?3_ zRz`7?ofDQ-oc4Nj)T-)jf4C1PNBX5Dolz?$hp&ICm*lkn`@QNdZQkz1bq@~IUENiB zTf|9pO>O?QH8XcTndE&&>U!$wX{*KKDgtYNzum4G)Gpcm@9*zS=a188vB}<&e!u^J zqm*q`&-3+;&A(nvi_ZJl6L?teU^l z+x=)*75rQ(bb$loZb+n~<`sVuo>>;^w_SpUva)&OSA5?+uQF)AZxl#nlvUiP~G$`;qza>!se)uQ8wEOM7{5L!$qx zZvA}`ckBN%S7|==TDz=fx6?fNnh%OwYkrEm>2C9%e~-&}?ejUo4sUO4bgun!@p#sy zB`4MLgkM~&PoH1At*N#*>*}gi#pi9q*G6s*(>IP?;?^Val2^&l+9c^n@xA2tdp@sg zQedBz@4+5(exCX4q7OE*ww%X>U+qR&Bp6Yb>r?aU%E@2Me;U^DpFR6vYw7E-Ro>Ij z&6A(gBlUIBEbH$PGf(+`*mAP^|G)1uKfSoRx<6`v-Cmn@p&jf}Vt03c|I!kcVX|Oh zEB_H8)vnjavik*F_~h+kvZv*Kndf_?(>vDb&$jo0yUX65G4j5$Gxv5~7`M2dNn6Xu zx~=*54_=YHUbKCsx5wgK$%E_9{_gwm?A+YN(%+J`zP?C^+QN~MrX;g}_lrfBp3Pky zvvbp_+2-r()Wcry`n@kR|HqL_{QUIl-R}2Br(b@2Gd+G?2s1mMmEM_* zT%$upFCWKT?))J9bkSAN)Ig?l?5o?``(JMU*tjY8wwY=1vz*N~A@`JjY(Bf&+gd-@ zXj;Ofy+_zTeZOD7zKy@$O*ih3;G)u^b;)fN+e`IIPnspKtK5{C-TZi6=;~$9>gUBt zZM9S>pZ$$3aZ#U3_48HX>(|}C%9!=|SZ`XUq}{WCd*LyG&flMgzufq!{8{X=AFBcu zI=xyt{n#o|?R_D?w=mwzUbiy$mi3j1;qh}PChckaA$(E&#udTob;p*1db=lfubo_e zE=?vS`km0Sv(-7lZtH5reS8yiy6PB{Z+*X4{ompsbA;OEA4)Nm535<6&h9LJo*BLE z|K)9)kG=j_IkVv2+I7v(gZ+7p>$=7D)B61FZGGw&v-U*E+f+Dg&AokYM#aY5{jsM{ zJhLtGR5wZtp02ll&#tN;4;j_g$L=mOPENAnK4`a({o4Bb3#z`p>h(Qs{+MUu56C#5(!uQo!UVixSasIzQKNs%NxZ!@_{yf`i9}Cef zjmdu!-9B!;9%p`j!QnewUaJ3n6l$#X_l3lUJA6Oeo(W%4=W|-U%y;&T`4x@|9N8BZ zG|KI{8Zy_a)F>+T#U2Ci!i%orEB)<$y2MuJ$|~y~JJ&2wvM}&a?GjEt?`KtCclkCx zO`l)8jQ7dh%qx|N+G`UJyUn|6SfX%wxxeutkBqW6S6-K&p0e}ApM!CynfYxp4mG<- z{XA%TXaB!nuYDvR9CfYRU~*`_`sWG%#5M(XN&H`+gjn zz0h@^i}R|Ci`=~*_?Y$toHKhb9#hcRX`g@3IEW>9OU45$yE{h~UVM9HZ*B@{zvKei@jqv)%Ncyf4@wjqV2Hzftl&g%ujc#zFj`2sO#kw$U-AN z@IoWOXYcp_f3~uD@nP=eD_hFHKb@|=0=%PF-KrHdiT}@Qn$AM|JMUcze$~kZ+ozNX zycaV07V!SU%0(f z!$%~3CD$~3dtE+X&V6p$F+mCM4rcxy(T~sN*Q+k_->_C$?{AN{?8e&XExl(imdQK` zdbjQU#$3srUt)EmOv3x^|IIl0tN#C6^VPZm^-eoeB;#AWX2%?6sa)9@o*v)L|UO%XU1YV@-`K4X@tt=5xQ7Z)!VQ<{2}X1^-SGkoSXNQy|wzhJMFCY8No?!X6L<1iAWUtJUzbdTJw=b z&*c6&db3KEUyxZHxOmyMBBWJ+X8HG$J~c-wSuCl(x@!Fwc30cU^FKY+50!7bao6vX zeAn|$si(Jm$eAn|<8aycPU&@1)8!uPcbMO=IsJsWa;8P$q8Pr)EoZAwv>%Sq33!mR zcxSt#OEVj<@83VK*Y6jxdbla|bZe#7pHvP#Ly!J1>i)N{ss7kr+n={*<62I+sP52J zA;$H|$9kq}>|N}=^Y%4Wmb_@UZSSqwEG1eN)IH#LT3Nuixlo{}_Rq)TZZmqy*F|rC zcdUA`Tkjse%l~c41XsuG?5eb1GVidTmxlPtbM2qx`?I&%EDYshe8+G9XMw55>x{Km zvcKvr^xgWPdjHJ7O$yR_flu?I?ORVy(~b6#ZvOY+nDp(Lr^DlGr(XZ}uqpT6-^6Qc zqvNyhg!v1qwd^j~mTUB9*O$U|FI|3g7Hs=!93{_wHZ0@NqW{kGOTS*do{@MoSnZ?% z+ne%jmD_WlZxr!*b?L%F{}+zAy^Cu<#u&dWx}CfI=i=>F<&wrKi`Eve^bV7}G%w~; z%I#~v9v?fGeIrvsm|^{XyUX>b=iJ_AuJ>Ms>DUjBWX+8Ehk4~}j`;9Bk~y?4;rpM@ z$|d%(_r4Tw(wtboXIh8d!KHm3Rg1qG>y;k)Hn-b^?VxQ>=#iU!%{iyvm6>__q4VB){9cT26kyoxlIE2188c)2YkOOWOU>RDL35{!Vo>*8zr$ z|8pw4>Sr(3^{nSF)%=Vt^c`ap< zvBcn~+jK*Yl#E`z=p#qBTIo#VKlt!zQ}!>Dln=GPYT?vhx&40K z@r-|4^6Mv8bpGsEdsWc*>q*6-&L{KeYC6bcf=;<_NUzy3m+OR?tD61BIl8E?#W61HfvYK*Kw|4e1CCq zyWla0)!fmlr#GuH{Pllyyle%0sb8X6@=3I%ekb|Q9liOXML=YhYk++Gj)I9|VR0+i zm!$ey1#a7DaeL41mb=US56U8;9;TAVp z8}0x9Ih`WvJvU)8|5w@fcdo6Cwq>bEH(1eljN#7g{Cz8@pNx5_d-JQ!E8*Ez@4w5h zFOHrU@V>qJ_1d3ta?H#}K&$@lJW!AWWre>!3UAsBWcZAGE;t-E(#$A1F{$kKp4kpx z>@)r*sfSp!bbc^A-T9^V>(%RVvnAI0nlW1ZDfV6NeBoMLE_lThzt*3Hx(9`J-r4DI z_*O|s_>S5!>-Q02t*O~7roRYxb*{Ovz_BXw*6MlR)|*PW_g`we@n!bMbGws+*6uxi z>DspJ>(_LSH!NV7+<)-gw!MP$w!Ob&lzWW{wCXR7Q|R7f-RNzzPVURO8N@eRvBmj! zZ=v$P3+EGy1aEy@;k?3HsNUu`3+Lr!eG2+|e|i467n^-OxBjAtp3RzBDDkX3v~s=Jg~$_l)v*G+r0>(4ZP zwi^OY=?sqI(^4Mt%YM?`ekW(zg@+GCwZkeBZC0D^JZJk|#`t#EblLg}Id5&l-<^_L z7K#1+)q<-k8(#?9SO5QNntjbBg=N2)P5QYxOBd|oTPXL#F@eK8|DH|$v=cD}KhkHH zw<~Pb-FU7_^TpbEZL?2rUic?z+21vr&vBKW-p#glc7R???4(Ucj3?e(EMr+TE5Y#h z^Z0wsRy?zrjec;8mMW4j4Q4)O(Bqz6Ag zY&(0_>uokmdp79Yc)!nnm&u*_v-NWQMbmc(<}La4vS0l4roZo=&)+WTIQ{>u+*}g|rqhM5m$+${UpLz1nXPna zOQ-pq`30#g|AX9f?k_GV{IP!bG{GD(=N)mb{w0TPzugEpzlN($o%?)7DQ9MB>BUd) zq~!j9mf_@WFJ^egY5a<7 zTj#QRJX^@yQY^u{=iRP`1xL0<818-?e@^t}&r3_aGuKX^Y{SdHMzw7Mo0QQH?x%;K zEA-~IE)$!>abPo_!Ard?KiA@ns{B36|BERW91BS9(~R>uC$+Uv7% zpW&q5=l81L+ddAxk?fZJ>dND-H~#Ey_PAlucDnz^#;2WMuXKy;O*dhZGS7RX`?%)m z)a27*sy??D=iXDb*?)kudH$oL-KTYnTNWO#ez)`VnSXZQZal6!d0QxXKi4+db=OX> zNGkmQ`+o99o3weH$Ky^J-KtjEwt7KlOQjos+vR=XT2N4@W=?IUe4Ui+u%JI?Bm)MY-lo(&H(m zQ4Ikb5){`4n*QCPa@6{LP`}~F$M3s8KICdXW4%>O?O&5@&)UWQM>bVne8BN7`E&HE zqCK~*X76bJdqmrxMog+>3D&#yCLQu0XK$Sh;G?F0MPv^RMjU#~oRb!Fw^V|}uVO?OpE@-Dl$`1p&Z z`G3#6?cVZNYvQ}EdWk@n^fvxq9`YZzW?wh+KDpp#gJXe8`@z`L)7JKg^Q_r;hnw&G zsWXc}i|!Jh86H*roBZ@t=rf@-?F$YE7A_Y3Em)UnX0lD8Lo;N>gqd5910m@{l@Szh%uE6v=!pxxH^O&!a(4(%=6 zbLBt2J|z5Y_k#_yg>p(0ehS#lN-Et}*o!gpu`P825553!*(_TNRdlJyM|8>yw{(7s@@SMt1+g?O0>Mi5p zGvnVl<=fxy;;mc!#XKTkoxZ!Rj_uLr|M|1aZwoB_lY1+L6Vx`X|LC{;NN#n>O3>yp zwTcHD9ve>k_bB=3{b|20i@x8J%qA-@30;JzrK9`vLG$-5j(`5$GqpUp zP0^hE^i!exZ1AE7&ko;Mq5U7vOwNwh-gZyTpYQyoZF@VP&J||6*e8%>nt$(3#o-?- zo!j}I$vieS+^O*K_-6ltmC6@C3Dn$Q)_3Ih++s=go6~lmu9m5mY<;);Lfx8JX^Heh z1@^}r3N8dq*=IOo_u2P1E@uk=>U^bMBB{8&v!Xxd)QcYDa~G_4^O@g|+YsHUdho`T z*WYgcPC0RC!{2v~&tg93-Il+(<>a=4qb;s`tG@R9=9?}x(B zbupHU)p&kKf4?If@xDj$U*_dyl80a4Nac1CJL49*GU#Yc%Wqcy58S^kel%wpmc7@A zvq>mtV-mXa-TKDW##t&nQ_jt^z046<_U@1SL9;0mQ``RY$uhO|9bWn1_u(U!Ek@;c zOPAYOFG_D=@?K~lt;Kh&;^QUIAZ<+5my3#NkrHnr4pgkOxY6Di##z>JKtbm8$px#r z+1Q#5ZXOl<_t#svu+C%tG6!LZ0ly%=Qwh&^0{n< zA>X&G4cS6vtAD-O?B84Uj#Ye4eoIe4qni{G_o_V8)RjHjwz0pN%3_VY$Fk-?g1PMyalb2fQ#)nuS?91Zw(oh|Eb~@ynw|4( zhE(qFJMUd_N-I0d+Fq|$dQUMzdp)SiSGe)}%VkwAZ?_E-kFH!kFRQ2Pv2BaD%g)_b z{8#(Pe@&TPe%l}xEuF8OfAN>am+}|)FZ3O76PNk*J>Z<#`+whzgRJ}a<=@)!vg*u* zb8lv`olQIQW>M_1C;Vy$n&!rPGaH}E_?+T)@BQ_(GYanmx6}zgy!9;hQbO?bBl$L; zQ*K{V%HwFf*!EyCztqi#a|*hy-8=H>Tx+-Sm9GbzefLT3_OyxK_gl^0JnB9@%4asJvHiYlUjZ2)0ST8e>wZB zA6z$mzwNK!p}uQshx>aEm)q9uOc>^i-zZ3Pl0X zQ39U(ZJM`i&6ByW9A{E>W)^rqPF?`(Tdsc!Q)zKM$?AR*-aw%b)pZ#c4U7TB=1 zb-(_8o*U}~t5u9XOx%F7AdZJcDkWpTqk;zCw>GQNS4l1XGi2Kf_>R3bT#NnEsWsPiJvVDmZNR z{>KUTy$6r;l?fmEw6>L7e3pGn^Dd6|-~6^;HVB$D@tzWDTF=TYHtY9|jec|N=T1_~ zP;2vAZX^8mMbPw|`^s-BKHVukpUu24+NYMO{EE0?f_7$+X8G-1EgN!ApZHdL`~jn} z#i7Vc`unBLaulZbB>cP@{2{>UBc(-{M|Lp^Mi%??BgRZ_CwvB)0J7mzS5%KAE{h{YS>_dk-vU zm;2pIto;8``f+=5?$fdrRIK@qvQy`;BcqF~8Pv3aia16gc)_hK%*kCo#uNS~>KWUQcCei9-;u;eG3y>m>x8xM>Nr`HvA3;g+uQBlk~jCc|NG+Ny*xMekd{h~ zaAJ`(+slU^-W=)FpWQj>-{1G2-Lp&I1x<$yCT@IkcN?hD^Ykuv-v1@BQ|uVt>yUal@5c(PGVm`yA4|I&6GfR5lD3bGBJ1M3 zq&B1o&hq~-`;6YL>MMJz&4aH+bb`~^p1wdbC)&Pw=Z!Cg9>%YPdS))Z z=T`jilib^#1>Xaw3#i>=U!piq@6L>a^6j~Ej~lP6+`iKL-isitaW%e`>0B zNu>7Xo4s#hq;>PAe>?VdF1P4+*Qm!i_x9{`V_qD(`dU?z(R9IgM6GK3fAV;d37gq> z;fa2;EBr(3J1hE)vL$!cd_S_v}_p1tYw zD$Rlf_K3F~*jHcPzEgPr>FHr>7Wr8?hX46+L|?^Z-p|j^FP~Q3UM=PGk=yojtINET z@y~*n`x%<8G|RuYs64hR__wEsnqI;lkTk! z&tIHtly&8V$Gx5~F|+pztP433RyO7CynStH`Tf|0oXCy+)`hP;tDduX@6Ao)&H6h;Uj6zi-IM0CA~xXf`P_SZZvLPAT%DnjSK6%Y&fjbE zO~D0RdhYAx_Hy$kJ6JGX_~loo-u7&9W~O?z-3&X>8Z8S!4wXf|ZLzU8{0=WGHHcT@ zTfL2qr(%Ya9^<4V?pYa@o zhBHF)Hg&U8U-6=h?NzKoGi|OhBLM%CjzU&o=NOq$|}YtT2=O<`}*{F85#1e6O|%(^&jE zV#O~DNjz2pTdjaWdia5k5KZ4{5DGQY0puKHb{~tziy{`c_sC+%?311iP3xZMh%f8H zcI;jQi^qY946Lzz2VTs@A+KP`8E|20-_xLNIgy}E+DnqT{MM{^d~~zt8#C9yXoSNSzXRsq#>$K$^x%juih@ zS5g)o5z&bV*!%AnPw9&bilx}sp{XsJ_-hSl9omY>&1s?ic2+KPYd)P^t zBu=%&^H)}ddYk6m(Qy5-IsJT~_jEnq!d`nJ_Xlm#Q7g=Hqh@p1{r^+^^(8edb>ffKw`t9oeKI<30O5gOQ@Z`O7^JkbUmG0d2dYyIX z>aev}PE1^U#rV9<>|FFdUeoJuT|>vDuTX?)-Ut$+|;8Vq@s1EKj-GA znbtr0Jk_3GI=?_)!X#tCt)0cot3I7f47=&kZ`76gX1?6ZEleK%DihjR{5X2o6+Jzr zSt8@wCF18?(zpV&WDRuS<1Dk>M+bbnp#@(nK{ zR|eQ5KP>w3A#rQ%@3PM?#D6f{Hkd|vgt!b+TwT3CH2eCxu;=sZ_r1^iHGkI^0Iqhdq^M+1H#z^J1 zUF9zvI9+J&axvW~3EkI6yTwR@qZI(%iHHw*>r8>dOdZf(W zaE2~&;e20qZjR;N&u0pf5I!_Eo+9~qMkVJQfhN7{kD6C$rIqB$5D^vPIW z`Svxa8Tq+?~qzx4qx!E$Mkn`D?7++nB0; zeHHtI$Fr`k%G|8=xFgs<-2tsd4P6~( zXn)b*E7pVD7(-+B9048VmYC^#bCbBV;*C#FPhaiU@4L3@c(#v(!M?a%C7HGh-Xu(W z$1DA9$*v!dy08BIZoeRGUChc~-}c5Tp69pwF(GQ-AMRFz-?$EPn^y9ug1B?sxSC`# z_9@C1*jC@mId$-J$rlwF{~Kps-q|@BwB4ub)yn02k0&fBB)mfF_MY$W>*s6s$L;;K z;_K_{ryn1aV~8kufA6wz)WYV*HZeN^?6RbJ4z(VZ!+pi`^7 zB{$gq>D`)lJD>YXhwUs<4Nl+p=aaW-!hr)Kv#Rte-Typ2Jw3eqe(iL#Il77Kh*+Ez zIDK30?PY1_=B!oooActU?1%K(<u$+R+U;B2Y!K+aXm9b=)#2CQzhc;0_}DGi z`m2$$fKz3Bp)2p*>G4aCcio>^F8O%1Q!CfX>2Xr4!`A!=dV71je{8XD?&W(6`}X{L z)$@2-gxVti4J+X*IGRoyU&^n1o^#CcfBJiy2TQajvE6G6cKLFKQ@BggU_yx9nXZNv z3lz9CRyK>o*=T+tD zH&S2z`dfB?_V-_<;ZP8LJNEOIFUj80t$ndC99}Hy;eN5D-|p9p522IzE^JbJDeie^ z()Tm&23dXb_6Lt|vb}$|;<3j1`S~+_gi7vj$qX+4_tRPCm)+kU%j>M-bKXB!&Hrh6 z*fYsv_uFk7?ead>|E+m!aq{+|&s{C0b1r_VO7$x~DmuOUomtwMh~qK3OM0DtO`I0F zDw|_on5{=DNAWY`a~8(kS%=%Cf6wT=-oeLh&u~4?`b_SYi*8E)OU}itkF(8J*n9Bw zaZ%U(O51Wd7Wlv0^;+-Uv)TC*EiXNrov)@?KdN zpm}#E)9KSyU#ER%TktSxg5%A^ODFGTOpyy~xLUC^_2)-T?kF?<8`q}r&oar>VV0Y` zzf)NKnfId`*U#R6b91w*Jd@1l<6V#DmfusoZ;;?O|KG;jiS2KXF8#mhwBE$GWmlxn ztA7YSkg@gs9*Lxi<%t~Gx3{egzZbQ8o^5qkxMZ{Vq0DaGZ3X`Jf4AH&K5rXycUS4t zCyqR^*6(&S?_pPO&@Hb0E%$oC)8g~C&%>f~O*{P$KUo*M``gVO$vj@$@0P8WQ2zKv z;lbl+(RqsXZx-9X-EvuV|NXkz%3mK!zW;u|-aeDL#q4Whw#z2JPZR%#_so;8`!VrB z&!mGbVYZ(waYM$0xmTT(9VSPWa8KtM9`89VuYE8<@t(^Ht(N=Joo2pIg=howd%s z>&eX{S+p*u^yu!;)v`w~++QDGUwO{H+ea<-goJpP`p@aiI)5@HAHR4ntkzRp`szwy z{LdW~6`J|mZl=|Jd@8d2$t3Rz<-;pFj(uZFZ{N z*DJxnn~L@BMc>v~BA>Z)>7J;MTV6S8ulrG+$$spi%7*HWZ!-;()4mz?U%FHr*5+o3eNiQ zpmURZo4DG4{^CCeE}oFyQT9oDvHy?GGTZl&lMg;WDsFtJU39Il z`Q4D7n410qriwQ6W7hBYXz!2S{?C3Vs3jBk@wMibB+<{G&)a`yTG_bgv3#6X#hr(i z*H(pQzkhn+(E7a8ZHf-%FZdNSR`##sYWTh-bNw$)SLv1hlhtlNvAyf}@x1%_mBGua z9^Whp)ca5pd?SB@S7)R&RY*X|MO8;H>F&f%CRgI=1EB z=B%&#ez*J)@AVadkD1~{>v|pvsqVcozb^Nw>ZR!47ZuxObZ%}Iy0+-(w@>CpPfDXw zzDZqr7Z#^foGl&s+uCima{rsjPX&8|S{riBBzA&M%`{ZI{JhU*({`2o`}_841nj(D z)D`jhneLMM7n*%X%1^K#t+0##6=bvdlJNQAP+~ICi`RY08+EYGV zy0B2Zk~w2_W%9?0$P&wMHs`fW$$@jBrN&dBrH29Ui3-@7vD7&kxDU^THwrUUiZQBA*+_<_m+b#V#GgqwK+<%)+8+B_( zrLViXHa_BZN5qjZ<>{*aelz~RTt5HrpCsXrGcN5rdgxo)zYwponG9C;D|yZ@?==oO zu&17P@5J8LpQV3mxb%&msYvW;oM5);+hPIRTDh*3(*loFiZ22?k{l^z+bz4rV&F;)Q`be|NsrdcG`P`YC&RMyi zJZt_h?u*6-kLr@hlf563ehV~&^XFYW@aE>slUmV|q8}z5dOET5Rj>KI2XZwZ6hHoX zdGBw4Z_rC^_j^HRg>pA;MR3e;xnJ?vw@Ld)pG@W6?*+Hw_pFV0`rvoWj-&aKM~;R$ z?wvl%G+V3x#=M_D9{-s$~W*vzhyK z)vrIF^;LZ5+tnVCXbu;5SAD(x)208HKi$+iwaQoM!?i<+@vEw}ZEs#H^p3Y_AGr;d5W3Z%GtY1tt;+LTgbWT$BgKCq4zXw*Vgj+vpl$4e*a_D^=C@bY3Kg9 zi2a@xwQA9=9znjJz4uPYKb8@;-t+jOVukx@{iib)R7O>_>}u&TUgFQpeP7jf7T43` z>pHKkEuVBf%=W~scZz=_US{Shuk~NJv0HcYuC@ICF691x@y%WKs=D@R6ZzMsBImc1 z@#iXY&r_`QoBgdTzkZu~zQSkT7o8J(Vs)}!Bvl(MDBb>PPwJeDzaCt)EquhRln*-n z+wjza!_$OUEm}TZNWWW7BuK8?dCUE4(dL5sIz9Q!Y;)c`H<{m_ve_YO&(RENhPz#^ ziDmm9>|D-$WRLgbpR3LUp0Gc($hEOc`P-t_-ICGU9%w$;H;?;`bXY>Q((RYOzP?s( zlQcb-z#(PzC22XEqOW|>+dDfqANi5EwBg`hfju9O&5nG`kQs56P2Wb9OLCW7{hyC} zZYFMEo>%*AC)fM0+x;Xu6pt_*KF~CEjy>Cx#r^-(wcl+YIduo}|4KAqQS+Ih z;I;A($Dj1I)gIgSR(<^x?bv^^YDa6$Y<*qrx2xChtJ)WSGri*OlV+zqOL9+|AN_UF z=(LXZ%}u|i-?_)kzyJHa-;q!C<8L0l6?=O7he=y|PhGtK`l|Mw=LRL2^DqAjPFM5b zS`#J8#C=};*EX&5YrkAEONuTK`uF< zySr|(wOh@nlgpD{T>2h1bIr@O*8^;exxt7OR*6wa~KcJg3=i)Ar-BG{pxXb&NR|JYR zuiyXA>i4Zx?3s5j--^8)`KvHPTJuutF};#fo3alPRnO;^o9sLx%(G56dfOR0?wy=R zjo03FzI~!8+hblucH#>qHA5@yjm_0xUun*pEHU$9Z^=c^+m}y$o>r(9DKB=v@#*yS zuYc$4WfgljIn%o^UetE4$kS{&FY_fwrWaGK4hrIr7Ft`wEq ze3{ExJlR#~QpG;4;wdSXAL}kIIFOY1VwSPGai>edw*32vjQuO_Z*ems-ltsXsb!P&gsZ(nWKeD}6v z`N8sjyI&e7|16ld&{jJt`MBPTqu-8-OP)9Iobw}mh25+pUjC1s_{{sWqJrhk=JR$p zbLag3_g!{Y=!dIO8@bGwf4C~Z5uu1-2M z^}(Od`YX<)fAUqll^wn8t8&j0hItZ4LS~p|Py3TLI}21~J&Iqr$#c=u=nBmxy*yo)k|~SJ*qaT z3Tn9S)~;XjF@00a>AhRuP21ydtCrjL>~Fk&_Cmh(a*~3(gN2a zm+$+&VplHX6tCFwr^#Ytwme6`2vx#SCDyWeaoVv?Dx`>!DTS&8$vXWDNz9+!K!>$O`||GIsT4w@t#@!0=0cfp>t(ngy} z4h&Un#%f=Vs(qYO;W39p#B9ogq=usFH`%W<2dugIj`hRZbvmb-x&9kz_lwH?lxO+R z9KqF~YKHLsstkt(?`q%oQ z#$nsCC1F*s0qXvj28Nwx}*}fbe**vr%%ldr+W*X+j9b$+2_4+ zX0Un1{D}XQ-DPPp)nonp!}nY`)+4#LUwlUts8ea>dgPGztZh?Dxu$NFdY${_#i1=* zPR%~`#d4|REz!kc%l+o6Nd5}$m$Q8$SL>^u5LKsnyhT9HbG7rkYVQ6iyUw@1aJ*K= z|MK|M{KbEg#XmisTW(aP*7*BkBf}n%(ws9(cRwwE`fr37(&2(BntxjZCdg+q+hRJPjJ{?S0{W<2zJgfXC zk3a)1hB<=2yPFSun6mrFqi(Sozh9IucE7Ll_}Pxa?>{bQmtQ~59b;YgMx&c!Pr|z$ z*W+gH3^jawgK6du_R!gjpPV+dTYXYwg{WMt7RSsO({I(Kg~Dq8#HyPZ!+zxN{Tjx( z=bUD=L}Wzop{6q`HklPlx*rRF9Ns!ZI84gy%#pbV9S;3gc~IK=+R9Pn{oe0+hKv6E zc+B5-BjEqX-|eDRUrw-C$;BREjlcX-bn%%^^&+d=@pY~mn?<{>2C%j;dS#rRru*b# z<#XPNxrrDcCmo;lI=AY=&P+?k8Sr~P-_`I$1@`9Wl580AZ zj-m5cdHW@J_~Jrru^*>J7)(Ghl8run;Uem>b&XZ?JBQpRK-q5mHu7Q{;2 zQ1{z&-|#_Do?WU&XZm6{Nt=%rSDJ+;Rj74oRAoP1I-!mw{_Feu{xKH}RUW@>yfld$ zX~@R7@u7+B2i7aCaobN^d|z;tZH2XP(G$Vw`5)C5NQJqdJdcrc;xVKVl2lLzsyg|jB3{f%=|fTe)T)c zqA2b6CUR@omOhV!H7pcabZmr9m1jO}f8iMQeG4deTr=a6+&v*NI(O?*2^NdDw|ASTI|33Oy|McIy>USTbuf3aEeR}_$O157? z?_yj&Uo7K)_;X94+vjWA-480Fc;#xg&3B%s(zfk-e7)_8UK4$9`%7CguRpmF>hqod z;nFQeUu}Qs8qT`8v-p1PTHqSwB1H(uMaDvmWt=-tR~^P1fN~*cmNlTDx&|X>vK&sw(QLDNDZ1CfPYyH)e1+$ru7 z4y$4PWcBsR z{rjtF)>qk`So^I?r%mNFWm}lNPEzg1Yx4(f-D{cF?fY}gVlwyMYWb(V1&^Ox;ocUS z;PB97VRHXl?TYNGur2|IKYRZasg?E4D_g`AeOc)6n>_jdS?})HAF;T)CeqlD<>B8p z$AHEPXWMEyy<_fS#|_U3-jQ3nEPA_KPt!tm8` z1>@$wg~#}9HYA+k5UKJ@ezHFCaIdQFYVlt_yqxp_Jgf)|Fc=y7TfZDXPJ2Z zJHh^sxuX7HVaskV#C zzTm(6P@FemwMFZe-BYKZxP8m*+P}U}2g0P5Zho|W|Lv{WtNV{^s5xVJ+)IA(`isvk z3fY|b)y=j3{Hs2ev94yp`A|NU`R$+fJPTd5dg?rhO)uV87;orc(7*gG`B=|HiS{o4 zowx3uny-_<;3<_}mwv0ob7#}mceAE%n_p+Yf6dRzsMJl*80RnREex|UJs%Xe_Rq>K z8+!_m1iI91I?!bPsm*SIJ$q_GhSw>VSBYz@gX)%@tlT!SU&_?0qNT9&V}q;mp6ORN zD|kAKnN7&|;flC$D*ef&FPT=(mML?mHFGP%-=?|itXmV*z9!c?ydfpx2F|ar@Yzq@tCwLzf*g9Vb0E{ zuRJoiVok1YT)69NchcKQHQP^Vtv(^6p1k9P&Zf`vT8nFs$>@lb%v%`#O#Xv&k)G4M zuzBJ4w)GfKIao324SSFEk)UO3KR#l0y5(W_;lIvbkITzqCntv+-nD1(f4V>A?m_35 z%ZnzYpK*Lyt`m{}OuVQdDB&N^-%0o97o9pesm@uXGJbM1 zSk&?O=8^+lCHDJ8i>|DY-h1$^Q|+9pwZY5#o=n#l^LTZfRmec0F+TKB`;)X@ZcX7z zwJk>(oUcn|uTgZHvxGtSoA18zsY}!M?OFBfOi;PnAB}??pPXt|R%}R}*x0hgRPxfV z!1wpuy`ndZ7GGPVU%U5t*Z2E(%kQh2WZc?P*?Q1$%R0q9DVfTr_}{)4o0D07Yx2K9 z(G8z$*sh8`t85U{>YvOSDD+{C4%>%>PX>&>*-O<+kMB4=?NCtT*1MN~Y~J)E;A|FAd~NwhkCn$-RQwceCjB{Al>cyIz&>wna~H_)oSwUMB8%&P zZzQzEdcMxaes4>C-@~tOWw-x4%=PVq zwM*ZJd8xrJ@($u2vx~(}Z@*JKB`NiIxg^(_pHH7}nw&IynQqKl2oxHf4o^#a>md-UGUkA z7s7rPhQF=v-OxyQ`m_3-q|G&z(zT5kvI%Y^#g~KTY)C&Wh{rh+pCWg1*ZdPDSjU#&q4nU6WN* zyw_%t`}IW^{RB^YG`db=$`Mp7P`ll4_veH1^2sk;HyH`O^k{^^N|A)ws)<^Y7HTOK zDzQSKmpkL5KEw7EUMFTd-8f?DrFd$}|H>~fwCsD6IVUnrWJ+DeuyN(GAD5$)T)1HH ziW=9HONSSjT~xiM3JIwY5sl|bPIDGdSv55)&u;6ZD@SK}-|L73xfc&UaA=W(Nr|qG z*YP5VV{ntFyc#oJXlYj_KLa@mALj06x_Dvh1`XNMogy80p@uf=qJ^v1Jn5b34)+?& zi>S1Y4wsAb^+StF<`qeqWAS^rXN9x%{_xdZ zeqhz=b+1617|jbFoP3vG|2ul?wQV6b@oT4cv|f+mx{~s*r>O2?((cf($eX6w*RHJH z_v=-+*dxK)poq#^?BILpx|eH{t2|>lBsyWxGwv8^OA<=^Xu>Z zeQxhRW&H*v%jsRuyF~=!Spyj6-6*@Ad-uXZ=eyhQ*NJ~fed{x;-#+`4MEK>WHE*AE zth)N@i17cHyGmX@YU7oDw{FLyQ>#+N_OB}xS)sXU;W0rq)`d%_$3;C8tpEEp-0Re; z{l_v&KAmK~)2+Yn$-6zD&#g+|AyBkJ^HZpx_5WV(`}ZsR=a<#%jjo@1 z61*<|1H+peh5xzgFKTayxpHp)d(eLS+Q7LsL0a?9hpF8Q>15jdcH8U|?@h1AZ1(#3 zcS@rQkBY{&^U2Cg{#pHQ=k=ho zGnR3QXt4J$Ss3hhQ{d42tAXE5Zat~q|Mi;hox}Y0FYeX-_ANiDD*oI%=u>+3`n}tF z3U|NV=6&+BUU-|SYy9bO`<^hJ396;P*2V6A<~^%6Y;JP6SZ9T><_3Tl4Rq zlPx^*@ZE9w`U2zhx=jHm`=6h`nLhs|=x#Lg#6z{qHcgLwmS2~;Y4Z|U+o~-uXU|w+ z!0P3DzE76F;PtxQ>#G0%{mv~O<(t25_q!_dygL<|e=j&!?>Nk7y=9g`WKDPKqOY%3 zum2T##s2P>mzP(!3M_s0Gi#-b&J~}=S2B;!c&G{Kas7#mE!t;f<=nI-be}G}{?y%m z>@o!n6_NHIj|k@->yZpy=6Gg-1?#DU%16C*-rpAZx8`N(@#fX>`}e(DvG~`CB+Dt$ zWj9k#dmnJM_&#gFdQl~Lx7BmYZXMO#e8y-}%BLspT&in7?Adi}9hb)u`H4*39IRQb z3$>?Qi?}FgAf~`}{?5)~UC*$jtQC#&~)BoSAF20ZGn*u^33(~>wanGZxX0_c2?o}Lw@@| z4}NTR@VKk{bLrBbU$4h+?)o=9zHa8UJznpv&M>+Y%3oo=0&^{tuTF2p2w zy<+XTsO3SQYqC^@IM z7`g^-IwkEre{qaMDwEugmRTCC5vQ&ft;x;zb>F9$DcYYDo*gZATKWF&pwn$NsUcq@ zJ)$RFGdd@7IP=Pi*LV4>-za$2{rTwLzCC&6!CU2NG{H2SZ3z~Ft@l5?e!=JB9SjT(44y8IA$Q(;U+h2Cn|x;f zvjBy??pI}E#1A}~7M=HrsW^4}zhAFUT7T=4FT0UgWMBU7{ksLteCrZI64#dN~v>hDNj3 z<=)-wf%+j=ePa_#4{=I>6b&oA13$LLmI znb5U}WM220-nZNHUl!EX{eD}1=gG;*cTKPJoYtB+J7-hp|Ju-Ro7?58ZX}*K_?g$H zVR7HD_ASn47x&C|`f@~dNBH`A?|6B*#kTe(LQlUgXx_Es zF#r3hzK73#c=*5Q@$vKd!L^xde=l%c?os{a?d|(}zu&9=wex;`{k98>%HJ>EYuKq4}$avw~yoagi(Vk=UBh|^Kd_7?fjbWpU>M@|2toi_Q{$vI%ng~ zFFT)|oxOW%c-+nJo!f2R+o^qWQ}@f+y6@kw*Guj%c<^R#x%BpfY|=aQ_x-rkD`~u} zX^-c#v$cxz&ijV1y07>p=fZ+U>!(v1*JWOQE9160f8Wn*-w(RqaTSl%F=1X_wAH#Y z`bY5ZXQAP-x<+d%Kc^is*5ChUllA8_o3$%mwO*O~X|_q`BR{K`F7g)9pKFfJt^M|Z z^^?!!lTSpAjXV z!8Y}N=B`kV`nGGfz0+4Lf0QYie(A-c_ph(VUq3s`^z`eA&wuGhwo>|BafsVjf0{fzu-n!DH}PRj0&)Xe=g z|Nrvm9hWUHc)?YEr*OIT!x;v_rBWStXC~v>a^xft8>}+BL2jur_#&1b$pUO@m1>8<>lL@4IZdeem||h zzoRj0{oZdP&4&-NmkYB_oBs8c?t5N`!>$V!zA<>I!Y1U!A68--ml+v1FU|4vGsfGq zJ~>WS>rGWU@+AM!k1l;F4vR&#m2dD{E8v{FAY}%ieA-JRWc)Z};0UL$^ma z4{}`ruRc4HVu5A#8Jo_l=GT>|tIrN{Gp?LhIVWP%$79mJ8)oUJg=egsUgcq$v0D7ubFN7R{m*@>Fd*Lx-FYC z6#Z3yy*q1uU*i&#q>P@}99#!p-NGY&;cu6=o_LMHm1KtH zvHyRb7v3ZIe}|6f+S2R%Z9FGgCjI?(JO60$_R!U`sX-Uk$JhHR8HQd;G3sSn}q^ z#*@d3@~4`sYr<66MH_+=)8NNae0Mp7VAaj3#uXu*mo(_ zd)BU%Np70z?sROXfZWD!mP>oTW=-S`yQ|e=@BAw7q3SDXqjM22i$5L}ua^BQd9gck zj~;8w7v)ojSDcpr#r3zPwN8fj-(&t~7hUfP?7if4e!@P^zOdS}r@VE}O`K*aHgE2k z(jUnaC#_xlLQZ0LM2{wW#PM|#{^hN;KF6!`W>bfG$qUwZCzO9z#Fho;pO97Q-tXMr zcD#do;{0oMNBmYACg)AuX^`8%*XDOz{s3dLpqM?E&Q6W+pC1nQe>gUk`RFP?+lb1? z=Jh-8#kk8=wuF>kSP=ZTr8qkO!L7hOT?W5O-r4+5v7I8er_TVqpv>Iv%O~M4_xdhh zoy2waFu(mI-S!^AS5aoyozy3lyr1{+*{;WZ)<+h5OgQzqf0s%Ay-SaGHus-2@eA6p zY0ZI?&J`AWzeT0JRyJH3@i6m_1Y|9lWW%?)=}%r=ey)-4lJ$f)#`@>fi|T(|cF+61 z=H!FJnpzC2`#21GVh(J(ou?c=Pw~aQ%IC2^@9z5g|D@>a9}C;Ri9~Je`uX$u{7Ti0 zsO!k=4YqtZC~kaPV1e})_OvrIG{0KD-}CvYd4>P%Z>#19Y?=7WBy*GRy~}S!{?~k& zV^zA!e4ekkd8W->k#D#2<9D*gxBh-#@9@eoHt*9trlSX=JRnWlG;7Xmo3G|=-c!CL)z9jjI^84xt$Vvn(T0@%>q*^Ww@=?cG4Xol z#GBb3pkaVBYjacHzL&_Axbu+zpMjSsQ`pXkht;oEE2hRixM$1*sD=kY5rffG+M_^Jk{nv4=NLE$RH&ZHS?|%usTZH#NbX-7ur;5a=kBpaHqKa#3P08Kl$o+{(6=D$KtNbG0Wbov%u>)TRw19 zFlR#RK||S=@)ue=C#XpmT^9c(duaZ(UG1NQb}a2RR{SNkTXx3$C5|5RuGLM^5sq`3 zpFZysXjN7CN#TQQt5P*=b!&}X;=Qk(EULfY7<;$yxU9ZsWW&w0*>5)$n@r`M`tawL zO>2|GjplFpH_s>f%{vLvPT_x}kpEQ+oF%eyIh;f?Q^?=L-BUN`?* zf7!iC^^5BZSKKJS|JQ{*`}VfIi{~oo>=TJtV!Lb2*=rjf9@|vg@uehUTRY?C^mMh= zIjJEByt%k-g|ABI?>T7u4?}a&&g`l$xq$l6mwN7E^V92n0?pz)4TisD*}H+ZOPEPmvdou(T#6yjz%JC{&g;D zSB~zp{(9x|XQ>qKkCV2_U(|bDby$1#N@c{-v0l#F)aW3Juzlj`$RJRRmcMjl9J*zy10@4sd<=WdQJ+syg5xApntm)@oMOVwA; zJHX8EbLN`h`YnEQ`2_eooVeUIK|}wZvl76|#mJm#W2ahrjHi`t{cx9&y`)GyuEO!+n;WJV zcYXD{X(D!Wf^Q73xmUTieq+)ti(t{(wE~<@pSFBc*6qHln-d(e{@d?&yU**pyirQj zGVy)4bwZq^*ZB$iW_CM=)*H(`h}m$jN^)=Btu2|C_TR61ExUeudQxI&+w;|3;rrfu z-@Sh^lATZH$>DsS&(|j}^?261>&Fy+_S44Qf3DPA`X%_w)Sysl`NT9a%?tLCH5P~D zBg7LwE^#<2xO>_qhrN?m$mwm``QiKi^gUe_eGKW=vHR=(9x+&aOw!8a-OMb3Q)dr< z+FktoToPltYa3|E*u%#T7k-K&uNW)zjeFR2kgwv~&F5M+*Y8^;DzphW$vBHQi`Prs z?z8(Pzp1saKfdba(j2+)D*ts`ug7_ZMGGqY`Dh!h9r-uKl{Mg&@y_tYQD(yRlb6(f z`guElf9w>uC0j3iez*JmMB6VCUl+);IVT)y;aoK3RR4kcYrEQ0Zm$m4-!J-Q#+vr% z6Wf1Y+B6B&M0j33wYKfLubsvb?_1Mqg4f9FZa%YVlCJthwe8;z9Deike%5N;&!XDr zySDD0mj6&STYBo^{nuBA?>KKLkUc+GDFC!?>}bq=U7Phkr+ms1xt(bv6)<=Iv);SdT#eCV^{o+$^{O5GmppD|1E9(E_O5EVRP#r#1Q zc%k>o9Y12lxt*`iv7G6tGWq1Ux7Ior3?m)Am{zw(G<0r0ki~q@;f`=m{{Fv4ZIe=} zPTMx-PQJaft9J9xXR|BUPv8HuQRVT&ga1-`Oe#)%n9k27d2UPIF4n;PM}xTonx*7| z*MtZ-?8>|QG(}o=^-GCeyUN~bWpeIX^9)oHzwdwE7BlsK4O$VVpILAy;O2%z z=UUb9CU-uGf<+kD|(mC(6<@z?C*Y3McwX3s5 z>vPWG+Td%t{oT$A5v|!JQTtk_JKb7wHh z(=;jarDeL`F^B%bM>Er(U7!0S{K!pjVi$v*XzHI)Q&@0n_q~P<=d8Z&EkBaWy&&Y( zE^YbEA12Fm-{d>OXlP%h@AI#yG2wMjXYk)`mD_%Wi%psCt@~Q5*?;9Lmz#>4#MWyZ z>v=wZ{;b}Gv%2?h3!b${GkiYt{Ih1aw=ne!tWpe*hb#@>S)zS3-+O-Yp_$e%eY9^Y zNt^VW-1WLV^-~mI+$vDo%2TY2`W?7%lg@eW-j7cgEN7j6$7JcFrKdjB=;?9)-oEwS znf95=T0Alq4txgMCi+`@WW|22e7ZEY^c~~8@As_rX28Sa7HG-5u9S3nDh(<$e$ydv*f5=)be^fgW~sPp4*n znjC81!q@O<-ACm~VnsIF431n`A0HpK)-rd}ryHl7WeYEdKA3WBqO$vmCsP;vQlD#b z;Ij7PqZ386cD1Ir%Wj)~S!SX2$1@zCxZi4O+do;~zl?XG`p4Z2e!+`)Z`d7KvT{?x z+TCnI&r_sW@64Lq%ys^HT(#`YZ5`VWoHf6%RG0}_#`Wu_)4pfR_imL>jCmp=*I;4( zMe@fC(W$A^b@${N2A}+s`dP1K`kGvkTlbAE#Qv|ZU6*}b@6vUT-ZvLQ4Qk_UrnBB} z`|zhJKKyOx)Ol4s=FwXwCNmiF-*o$UBYE=YW9p|9!oHSm|CGMW=68Me-L;lkzoSz& zJ)3EEY~s2r6==eSgeYI<|R{y7SVxRbAtx~#^P9J;R zZ%?&FT+VtKKbOh~J5{Kx<=gpQ*Cyzd-ExbFl;+Uwmuz%v{Vp%N8hhKwr7ruP>DR2c z?xBb6|4YQ*{lfEf>8gth(rRUczE2H{I(huyzL;knM=m74HahsD-+EpBJ+H{)eBFP} zL_5rDm&#k@JKIc1t4ZaBpw29ph#K%D#g)q)Cqo|}>#aTTrCjCTwFbtSwMW)`xL@^p ztx(0>;B5w*Hb`AvMV;4wiK-o6y>9fjFVS7ke(+81v~F%}`R;k(HP?0TCV_j^ z@9!qL{QP)aUd3S_+f=pMe!06(HaqG4IBB!pk}v%-blnYQt{+W8Dgw zH#fD~SiRq)xJkE1VJge{Pz5`lIMq2;jY8+jjP6Vkj6y8CN`KeI|)~RcW+s< zCOF;iM%8KdS`WM-&^jV&zbc5$>iI=-p;A-TIg%!`R8zQW7$Ct^TJ1e`y{fatZr*^39{r3 z{&*yV`$6Ffc2$*+K6T-5?w#^h{L8WL)&2eRUte9lTw>D4ZwhgqdM%)(BN~T6OGnPJ zv|avkKs+G4{;rby{>KI!4ZDmL-Q_lZohj;lORVCad{$t_=@lv(pY&Uvcc%oe3=gZy zl1{u){cNUY-`aSYl)&|IwwyP->{(7-e5d$F(upPe?%K+>6Dennb9r z?M22J_FmHFn&+d+kDi4rMBH>L>eR802A)KtR`)W+0IQ`ZXP^4A(<${?b=|w2&rf8o z-J`rtZGq#5&ZqJl!{gdu5xf}iURM7=vmw4`{OSe?D?>T>T zv)^2+PnC9iFIknfPLU7#-mNF4rQT%!ls{6+?oZTy+45O)^v>1H3b3%Uzw~KsGW*NR zPnJKMS(bY4?3^Or_Z6QWGz+Kltv2!fZMJXyUJ=lG!;(Fq&4kH}$J^iSd_FJfpz4jC zOx2w?*&3Kmm$h758-3cg@k@v6Qir(Z^QvY^gxz@OZp9;_vG=6%b5q;!dC5KtZP?^a z`D;Cq&fhc9r{d?ka9vAV5gus~qN`y0u>x$e!9JLsCD`!BA}Qh2x9YGhWPyd>}&;&yIYmgo6e%aULSk( zd3D`q&<@MYvZAe*g6$XCWnFmOagSXt!XS;sY35~#pV>DGl7CKVxB^=o4dWFpM)x-Z=bkzKhPsWG{{Q(->==VySM%F z;5mIK? z;>7u0&traNRcrVggxkH@Ft2I$veb3m?_?7{E8rN+GU1X- zZcKZAM@W=ORqb;kLjrV}6Q4+&^y)R6x-^1M+Hl>SY%XjeQfM<RgMw>I_Z+<`lz((@OLFm#jTG;Tm{P@~v5GXKYTZefiope9!-P z`+n;!biBOmthj+u%N6sM={mVCHy8fB+ob>2ulkbxDyFb`#~186w1-)PYwGcnO+NQX zUhMR|0co+*3`^n{J5}OX?DR%=&+(froR5!gUg$l&`Ol#gS;Kc&);n#Ul0A`Eao5yo znGgMavsYGYR(PIX&3S!7T?k*z>h5_{A1*Drvft{{n!a7(VRd4Q`FFEhmD>e~ExNJO zIX-<~_1~|`vh0&KG87&a4HrADv@g0tWX5Ojr;leuUA(g_lRNx1Pwcf*`e#Zs6j!g? z)pcL*XX&-(%*1K&w@-C_S@ToZs_czKr>AN1F`xQZm;Tl*t!DjLqB6mFUcGIVOxS1b zz-EIjpZ?T-?-lRAnzZ6OXqA&PXqA)B%!<^)3ip;<&gko#V%|QS{AwL%^j_WWiB~(* z-?^-{D(p;!tas7z647Y?qf&EjhT(P&$s1OFGbTJcJNx$q+uPmGZz{HzL@V%|Tja9& zR@>`CMkTruCd;=4ZeqK_?yvq&X-XT@#Cb~>CR-L;KJGETn>syKDY~!E^4W`=K$dQs zhb_XJ_do9KWeS_O|M|Saq6(LdG54$A*M96dS`;eQ@_Y9+#V5zSctSz^MIMRTHwh5(WQFI&%`wa zGzByRq%{Ndex97>nlwwW?%{Fy`dQ@;u_b0JGi^j{cV$I&yVQUdCpBq0c`_897uSMsdjQ3qveS)etU7ir^U8{ex6@{?T`kyrE3{-2X=wSoozHhPGW(a+|Gs_SYf^fuv8L$x@NIv7#4d3#Ynn| zYc_4lzP4s%bnVxx*>XjKi#-~T_Ar@x@~`4u(*I=*?^=o10m7OaN_<_i3J+w?ExlG) zez&y!_x=C>o^QLoZszZ|+waSC-8s<6e0TTzeXremcNG>YIG=nqqkrDilQkz*r7XfPq{ZT^V=LK zeOom_qWnp^S6K6biZ?41pXhwqAp$3$*D^XR&1ACsx8*%gaJOBA+zx#WG? z=F$57|GYditM^_B^4=M?Hfm=ZuX&mF+AWjL_{LQ{bTu!1b%jeZWV>9-(alVkxL>-b ze);lh*>fi)UmdlegoVKi!X&^eqQZa8+Ie!a`p%ig_K_=GVv;&l?n)GEw0H5z zT3M)l{(h%8KX2-z_d>x7WNaq2C0V9AbJT~q-@TkM`TgH((dLEXu_jkQN1GUZxA=Hu z@+Vd9Dz>?KyK~p*+)%OK^K#j2af6c3<#HlT>6_%ZU+*)jsw%xyoOn@nny_YotjG${ zwsqg$-rlL)XL0B6kH`GncQ3ReRz+=Im_0M~-?MNvYwzlQIon-UxAuljjm)YldsER6 zU4FOp?(g^e;~&2$xm$XDcj4n>+;Q!4w+_pe-B@VKcl=hLfbiPz_}Z)M7yWy=%zu8I z?p0mW^WomANek1sLY_;cyBSR^2z+q<)uhi;FG>n6S^Fs$ye`b@K?C!V)4w{^=M@;I zompYTo5XfhGk{M{GcKv}e%pt1-}TmVF@Jx3Ep?Z@>MnMA;hjyV^`eEC@^-ykmh>b^ z@xiR@wx6!w!)x|=@A&`k`+n{x@pG#JIOcIH>=Td+ar0mASEa`?>4=gN>#AO+t%oj% zdf9H%RXCyRz%y@W@$;xjvo3GRzJ4x0IOgcyZ@04lz5lxC{>CD~N0ZJdbnN~}|CLdb zQ>R59`}^3^S!UWQ!G)}Ei&`H)^_FYsqcyv%YyYME3x=z&r^Kq^y9LZdiKw2 zyV_4w{!+DS4$a^2D9bl}D)+Tr(WiCOt+dyDaNnNS&Y`u~yguRArP<8z{HfrCiDo5ti%$E-C9HdMExz7%;enIt{2%1>+E4zy zvvdFMW*?_eyqE_r)eR~x#x+0o-}&+J^X-uMsMmHG7c?)) z)&Blg{(kTGd3EpD`0b)IF7Eyw7`a%qSxk=5La4jDN+;(|`*3IZ{JLjqzOz&sTVBTB z-Thr)9%pVjw|?W|t-T)EFW)~gulr-Mzi1cFe2zbVKA)fW-+124Uq0(`tc0qp+xzue z>Gk;fxnHD{zP!a;3w5#PYgEVcueB@J<5~*!$E>^CHvYfPim9vbp1gBt{w?$MyIy5Y zOguZ=TzFpP&!^Mx&P<;ddoWmk$-61{mv{=7U-DExRaUjH_UF^^J2%t$;}p)D%=C#< zOpei*_at7=d zgylS67fT3yxbXi$Gk?vSD{qe|xK#hY|9|VJCwgf9!czao zs;^d7L>-%Hvg^g~Uth16ZcaP+JDJ1Zg17snjbTyYwF_y zzc40koW^|MqL;t6erA1oUG*`^^t6j=&u(oee^@O5?E&0{Y~D#Y4hG4UqHL!Hr?&3di--rOy#kR zt?&2AKC#|&If5|@<vsz84{|1) zj=8_@xK+l_JH_XBUJZ-(ebgWhv{QYMq z{`%1K{rCI*^S3ZEGk!hz)h1H?=ZXK?Zs+;!|9BJ}d(gUQ;k?Q@+qQl@CcRrczQ%C3 zllR^$&Z``odyiDKGwS0wc1z(Jp<}l$C04M_U|F;6)~Zc=BMRf|em+e-z@1sHtsmI7 zwRg?mxi;x%e+Ai0*^%xPaw52MU-jp+=DS40A{=i`=Cu51^5b^NW#2zX{?1Q%cz?ad zpM|R@e^Cu%dT7m~+HdzO;vQuElOC4!PqN3DUYMqwsBDS_Z%~uaTku;nJVx(F!iwVz ze!KsDp08e^{I4)lE9&(+dC<{Ycj|t>-Tr9j?NwL%l3u*OzJ9-2q1a5HM-vS7M9%9N zsqWkOVR>rL;{EElNa;j5qSO!C%y*vqqc(~RiXa!SwrEgn`F_5^UG z8ZX=YqUh_@@Sh(G_3h)%oSK%ulk=kFDMe5&4wApraz)eSn%e2`#V>DcOrG5T^qy9} zN6yP)=mMw*dpDoA^WIYsA(3p8=9u;1K=2;9txYckUkGtsV2+)*e+g)_|G`tRMT>JT z9jn@Uf^9V@pDLDa{~+|0S2BIgmz_Tzb?@!_*Yo12PTX{+4|wPWj`c_^Owxs?L$?!m6SwGmnb?*Zb6M zXv|r0QSo}(nHe){WBPV&)^N1EU;sHs%N}x$)*Uk!y~yXnCqF%^UD6Pg;JG(aWPQ7Q zUCW%V^5e4QT))=rDfE)7hc0_sB5Cp>#Qx!(YtlQ)MAj?y*v++;pRv}?i#yI;BK+3Y z+sCEltA27;<+r=que@OM=Y#Uiq8}0q*QFNk{d|tc?`F^QyWq7?Nv$kLR|*77e|9#y z%BK8-;ml*6Mrz$ChiG+)&O6p?c*=D0ugPNmn`@s-?)>$|@|5&MsY>SSes!r|IPEX4 zdv2R;^kdJDB)1uxU!C|@-V?)cNbZ5;Jqgf##((ne{`&s}bX#-f(e=wObcLQdZ~y-c z_fED?ef1S99~8Dfk60bHcJFj&?)s$IG-;-i_J0hArvG~3#f){)(~~JPUfQ(@G0FLx zxBmThJ3Q}T_``p{%%TxaO-l*5}zCUK-zaCS}`|(cm{af2|)&KmwTYmqi z=r+?m;&C`n(0aV}296W7y6#PM|90{dhucc017^}aG5)q+r$|hGS?n%%GkVhY{QGe{ zmrzg8;yOwA1g-DwWimSKc@2<#pk9+_8mD*lB-&U!nUMFX;(BcP$y4@n5wGW+DPF(# z+c&xG)*&Z^AL}JdJ-LKe^0CuLmH$NzQ|&Jwv#^Q&*pm7u`OK}->v#8Vd=%tZ`TcJB z`i5QLk$*9Zr%M+)>wjXq5cc`lqmP?j6usGaJWS*MCuNs(jdsxDVDDNF;UM+ZYka5e z{rBs&wVy#UW? z+l5rWZY}EJRJ2+2V_C1UqD|7<;-e)3_ZF^x;xsGggm3(da*q0_*K()4A51el*YYC! zO<6+SBsRs$O$KWP{_bx1Ri0Y4Pk*GGN(*gT+uPdU`K8zVp307<_a`P^ujXI= z_vr0a0dqQ{|4eg?=@z|Gy)tt1vQHgvXZG9wlizu~p@}i+`P_1`@>ID^sq6{AmEyt~ zv}fhqce$A|$t?BM<;eA`&fEWYy7cAcW%nM#iqegyp8Kax|2Kcy`LK(iv;5>wi{|TY z`{^^&Xz8Kix`49(|Nb6b+;=}p{++1Kmm?fq>4NH_N>|M9RVc5YU?yafdHYnu)_01P z-{05o(WudlG7--=d*N&OL6_}hzzmz8f-?iee}nb{oX?)1d&K)%oy+buuX)$6;p&qx zbW+oN(72F$y{X#7)&&u}+o4AaiTeM#vHgCXdT8ouVZ)yf%C~XUd^)KfDRd!y-Tr@V zYaago_xrv0;Wc?T&#HYf7n|q5O#kZMsq=C?S>!4blD759yt=URGUFr0iMvm&_%U_S z-L-#KrWPH&(Q7D^;B6+Cu}f)X^sTj}(|!Kf@2Ruo6jkv5bex$HvBYVTk{0*tlbg6HZR;T)NKs_QMWwrg)=utCk;raIo3-{GEAU|CtJ_ z87w>{aC%4Nt6l7ivi#yCBX6(0eem-(Z{HKvJGY;bUb=ki`G+?d_xyfm9rylL%&(7U zX3js6bU(;DG-S5nA;tX{rGF;RNnX@bZezpp9y~Q`;?Lb5FnvN{+n3CQhr5~iUOd^Z z9UEYxUFN$bZ*Qz)VgVbE#m(0b=4Vg4XSnE-RjJuzp*u@H24x6N+tvQevue-Ld-e9h zWvsRxtTAOPA8cINy>p58Wbe?K{uAn3JQ}-{%XF8vSE&cu-ia)3ti8dN{N5QUc8|lW%qkvg2A;U^^~dA>=V$qvWk0;x zd_J^d{r=KJ4m^res(4}}?)^M`qwLGY{{jz>9QPEzr@dGG`mOBss;k$|sW>TrfAiK! zSN++z95T;8nYTa2xW{Wa`$anld^7KmD)Y0ecx>kzgCkMd8C@_y-)L6|Fp=o$dl71 zdrZDv{ovvEd)4=M>*vp0A5j^$=I+)SZvDvHD`fuejoW*umd|Y)LH+ZY(8%%>U{l=`nky0 z>+Zi;)cEh;lga)^FD%`^)+q9F^!kMrQJ;A|)1UgEmN>r66aE(F^StV@?}KPS9&N$8NH{J!7sc8h*7-KPtkCf(86V;nU-DcpPh?-z?-^1WY>^x^CE z`0$F{iM*nA5hv`ODmlMgIyQ6Fi|p1_@qISjQ&TJBLib(@YFoyctNcsDI_cd`bz!Nt zZ(dT#C$=xUVB9->3fr~SOW$4FGwJ2L`ns%7%inYzy3iWq?=&lB)u|e#NWVStHJTeD zBz8SJbJ9m?rq8zg`-;-jJ!j7qU82$>Z+}qQ>D^=t?ln9QcwNr0GAX{>9)B!gl286l z^$od~{%*Qq&hq|oMcLh3C+_87S)P<&Ds&*ZD|Z6Rgmuy7mN(swXIZtaTNk_AOR8y| z)`OV`r}-siInKUYcKd36@SWR&{>|^@YQF?}uG*4*H2Cg(Q~q`FH4{Jbc-x(}(a+&{ zvUlpdBPVB~tx&Qq>Nfem?OLp{kJKE45VM>c0r4lNF6d!qo1?LMzj#c+!uy}hTpxvR z6gp+L>ePXs&&A_ib*H5(#$5s}P?GRuv@yIG(z{dpBY$}I9nFb<*f2wWuee(MPKOPp$BwM5yS+zl&xF~>K1EmV zyt3(BP+8urpsSrV&MCTafjyEwGq@yAZJm4RiSN!|GNre2Hv4LS;8-YC1g(3S<}GFO zo`3ko{Olk8hYw>}qV)8{=77j)&s&dGJbfJ0cYA8)Vqw1-^3#Riue-K3+WQCR+GyX! z%O8clnDs__NurK6OJ=Emo%@1+V!BZs;l|vKtql=#&;Ooa&($k!KIwMN?qU<)ec7SU zgnxeOJ}+j^rE|$}*Or|nN4JKq?uvf=*#F_X1U)^ ziM49izhl_)?bd4#>&LnWJXI?`B#PX~+nu}lzV4mbf3|G@rrgv0>XYvr>0dlGJ=gDV zIxTi@+l-aT|29>MAM(Ct#`X67w6Y6!*SBVizs#;_ev|QV`%^$Chb5XAh zb4O*z?f=RBzUQRp>ohxDy?yu8{F$HL{9jwT{n?7Q`4dmhO1~xHzANbQ%GBufilC#7 zBOWkXe4Md%zt5COn@l>xSHA93=j!&#QG9=4q4TyCjm-Yv6dB~cGJa%Fo&S=zTj=re z;-c$Y>vliRsNHkm>LSo#s+vk-ahJ9%T@$=w&09PDx)(1lwq|BdHJ|#j*sFPqw%c02 zxmKP=UzW?+R-Lf@HOueSmOnv#oQgJ+!rJeA7n9R0ogXZtv+3Zf=*)T3?3QOWtIQOpvu?X}NBx zY2+oVTl88W>ifmT`O^&Z?(C@kE)u-Cn$B!wKZmq!_)>PLryhBw7VJO-k=c)B2ZRx&oga5w@KBR=-pH zSaF!MsDOdSLfz;mZ zL5o4<1%~BwxGYmV)E+$h@$s>$TidgfrY-X-W+WyYKFpEOU#(YgDrL4=?vstj+(7q* z^3Ov%N2-~lwDQx*+`nb#?2leho2l~e;YNqu2`#fNKGwPOn4SuCc2rt9r)_10S=N@R zdk#Gg;P>))H1p588+)ftclsq*b9H~c{q@!1{-EQe9QRC$;XoRT;N)5UvQdA*ZMTwc znZJD3%i)WguDae5OK4qvVOpSPz>|26^WrC$1+8E6<%${PKq(n7UiQchTpj_1zZ3)d z%J?6i7f_0LP1JEx+fP*<+ZUa`_v~w)yDG;7=AB)mqdYzGPa>m^c*n^l4b%CJ^yjm0 zb4|ZcH^nS3Xx`R$U9(%Ko8)S~PMNxOO0OWJq?3$>%_eT}(&Lb2=S8)Q?|&{nZ|m-t z{dDfJ=Bo?7*l0s5ZNh7t{I)*c`|AG->8u#{_0Jz@nr;$1wcO~u^OprhFQ$ggalXaz zUUyIX#H;FaOE%>gx2`+$UvKvtAt&?wohK^Y@(L z2DS0`zu5IasW{`VAw$upjZ8)1AZh;dRKq&@7@YWW4TQcQ+F>7yez&u z>bdaIPaW^Y;<>JH^{-q0=VjWQV~raV_I|zg`B;N(YPZzfpodM|ZC(cgL?U7=3ca7s z3!a02y%USdQ+3gz79QcaZB{D1p(ky2gp1!>X(ymnab@M^H9jj0Ibw^?8XSz@&$zvr z?^H$Y$DX&%D91sG2%;Sa=&1q+k2()~cW^-hH z#QXJ4J8Z#)k6qe)--qZJEC2Z%6Qo2+8DDo?p)8KU|q_X!$9E4!!@h4Rq-J;t3n3y1iWU z1f>mVO@&UO0TRmuvt3d4{vJ6$p6CMA(_Y5bEb#wno|E$ z=S?inn|%sg?8e#u;^I3UsfT;l+%xf%GWzMZ&+uY`qxSrX-j|oZ1nnk_+J?vxYuzs2 z&fA^a7$Dpw9lm;x;@YL>Gv%-SJD-1S{m)Im!Xy8v*t4d{E;mU!<9@IH^I7w}8yg*FO%N&@}=Szo`x=*-?O*jAC zt;f2!;xz+<1NbZe3lW3sOY=NuwO*V1{^N$!p2Hbm8|+I~2yA%q@9+1SlOO-gyR{|! zZesh_GkHJxCwgD|>7p3(==0IpOx|1WEj}E7Ic`=|nbsBfQBQNCox66P`}=gMtPbFE5MK#QQ(R6bc2eX_c!5q#p)v(9KO zVU!b}PVs!0Ri65C<^AcOvQ}CP*G)-aW51gp$HBf$$H-#hHZ|uc`&V~=dt_#BOFB2} z>(ce#V?O@d{rlbS7B=76X6p?ev|Td=FM;~G@bBFwW2{S{G~_D6#F#4#DrYn-+j?p8 zuH-wZ*-k4D+x+Q(dp=Fd z&sJ~0TVwtH$*nD$oS*n+%s(A&c8^C`t!Mh$7qPo!R2-*CzP?5dZJC>uGi@;AC@oMdS$Q3o+VFp--X{gW@XR4@am&mZZa z`0BR?$IZUR?FFCjl=3F+j^Au~(D_cEJ3;3=JzacYPJEqS{IkzR_n=FkQkO@mayf8D zmR=40Q+9IwW;vg!C)DbU`k5xqGo3GbtWQ?iaAn$=887`~cimrKvR+|cA4^dhcSb+T z5l^A|VkM9xp7!{*@nbvUDI|jEBc9X(Ku0`r&3RO_NF-!UWu=ae^Ytdj;w(8`vC5te zDd9(F?L8s9;D~6)7ac>#(-ZE34te^>djoRFlXu1AUh^887QCyStea-Jt%wz=`2Uyx z)4aObYnE=?J$3qzYp3R)EP7PC#6gj3L+Soy&Bq+PK3`h*@@vNrSMXUxQ@WV6_`gPV z)jS3{ET-mjhg@uT{_W$l+_|RAW!ljr+%x&DJLnpc%bq1Sx%*fV=M_zv$dt2L#mChs z#8tApI})q-WfKsitCeyxX@T%iW%)VTuFF4oA|?h-p&)*S&-qM`v>*z}KO1_$D7 zrLCPzOTR>|@Ga>q1ua^Nu+a?gJ6u1dS3|YuHyOAw&-ZD@g59l1BIiJL?J;my2`w+KginorG2?WxVLJfvnNOO$KOd2=K;U zz0uPvWmjYq!HjGu4HdCp&q5T9c!;^wG~# z)8zMei)gqt&N?$c@SJ$|&RO5{riO-=V-u_H|8xtNgY; zp4C5Zs$&*tUDM@dd*4ip&a?df>-GBGeslTO_?V^sPFp^=tmyZf%ln-EeZOaY&i414 z&7$*;%0FFvAkh75q59mCMIsk=m&<>j|KBEX-=VH2FG+PMF9TQj2K!lwVRdp_sjI={JAk$=+8|GUX6 zSCjXx{GD&7QJ4(J@01cwCDpu z-Z~F=mA-!V?e2ExcdHle2Q7Ju&RV(j&XG?3u8G}8ve#~%X1=DRr275d@{9S8PqS)H z=%2^E%&Y#>bLgrkp}Mc3&u0C*ddRzxJ>huY@9-bpagE&l|E7Go8Xlj@y~a;YQ}leg zws8I`m&Utgw|$>{pOw8Xa%s({+L*b?F?KaN=RbkhfUOEX7ao?r;liCs%VhS1yt7)n z<5AZ-=XSonlYeZ#-^pH?<`c}yHKp18(gn@sIUEnqzgkf(mHTP${i@e$?;f_xm*nsN zyKMK9N!_1SS6)ls{dU{x7b{<{-|wg;CvoIL_VznPr>|^L*>LLpgff3^iN&Jbk)D5d zXJ23EYQOnWq{-wTMxaCNyhI{)dBtC!(0_Y-{_{SIM+M&>_uKCPFAs}&__O%i&GcR8 z?S7x}ol!7<<(t%LKWE3!e4~@;-Y=K?OHED7r!naA=H%ndcXqvA_xfJ_|G$S?!!FN$ zy>9otUTO0U7KHi7tXT_Dk{b@Ss?;G7i!D1h-ZRPNasQoT#QYf8hR&t{oZH)bIgU3w#P8lq9KR;+q*lP3d_x=BRZ@*slw}0v@=5&6K zcu!#?pEEu#bp1#U)f<7|9?8Ie|b{)%i5I{np4_EUv4Se{wc^qI`VSe zhlA~1X|GI|oR54Rk~PnNt&39QRJWR@pdY{A?^oaFw_i7Ocl(98TTa|GiIfg1*S_EW zV5Z+*pDqELwUup4xF7m!&t3BrJa7AQ`U{@0y$8Eio6Zf@i+G)$OZdx53T zyXWWr-jyx6a8R^Ii(Rgwq1^iIi*5I+vcJDxzkkQd;P`^;aliGyACt}xS)uxFb2A(7 zm&QliCnj93$hY}+<8j`Rj)^x*a&NzT+h_OdMUFw%qlrE0 zZd+9{eSYhdZA+)eotj(sD>JX(wyZp-SusqcQZ@G5P3?P|Qn^pIHx^%5a5?7tySp;g zcO`$^tNHA^{r|tYPi&db*#9e>lAP_k*e$wK@J*|DT*3ce*Ezmli_Z6!YFeMa@8`3) zg>Mw2zZbOL%UZqm&dTNUp2bx@6)pes@wnxynqM!|cZkPTT%4Hx|KDF3?X}r!w=Vnr zYW*}k;-f1|36*YzOHWeEAQ;P?7UX4w-)E$|Mzb1_j{Mm|DE@5 zbF0|iYWbn{I?=~58#XT-Ruhkuy7I$aQ z!=3*2f6w^NGVx^Myu5!``Flkh;al&-;+WjCr6*pybpK@jpC5&FPfa$@I$m!7|Ig;< z|9jHa_D|k$RBX2Q{Oo&sc1Bk|omxA;;`HZt$x8VpkB)@Be!YIb-!ERT%lE3c7fR=B zX#D-CTmSA1!(^=!vs3Qf5r6daPRY_=vQFpOc%^m(`$@i-Wp?*m;+9{}X6M(+*Bps0 zxp>scxIim>_vG!Z_FMDgO0Qm3Iy}ofU(M$8r_=hojnCWcZdxAaaaVJ{=VUdZ!@X}M zYJPt@y?)2$^KyF}=4Beq+~ag?M}W=A{V@}c&7Wq-cjv*<$Nlg1lg;*gdAWT4uHEnV zUB6p$+4ttg<`VF7!>K284lapLdh+Xi{r}f``~Pr#KO*cOlq1mcif8FG&`B|CBQoad zY%<&aW^P&5+n4+I{r>S-vhro#MDr({{Y$=D@^DnVsQ++~-LC9anbE|hd;h=xAN6x% zjre-)eVVnBe^=H0{q?R*dR?*p-Y=VG8>jc(uKj-3<=#Q%?f2{4S!;Vgoiv@n11xK(Yc7skp2I5iqB?4cT2@aP?d6C zce}{`wH0k&e4j2gnRmbNxa^(C^tmse?y}$2o(<(`& z*CPJh=O^ob%$vCTw0?Z}vswLizh+oJnb54d=KR#~bMuAS6lH|nxl}YZcu4OO_*DPL z(0uo)E~QiX3fHq&_|LzWcc5YNle_x+|0uDo+WYNRFb^NQ{2gDBh`4L3x9>4$;1zG? zImI{GFG*qHmxP(&kEc$1TDn{(UoOk1B$i#{Q5DCuYYw&djd?f0K~)K(n({rCHQ|62^HUB4bQ%~>apb*NJ~WMom+33~)H9pfE#Jkf)=ANzK94 zFxl$qxjE-6(*4r=zKa)s3keYj5OHN?);Q=AFsWft!-543Epz|>zWPo&YxcaEuV&u7 znfN`tX4<=#>(+f(`)bvz@bz)BB^yL*R^HE%UwlRN{`VJWjL#bg*c^VSydd!~TUq7C zWqZrs-rC087xZplDQDr2X%pZ7?lTbA{iV8YTVJ2$#AQPF?k=BScj?O7=-g`K1aB<7wbXlh)Y-f1V!v-}`uF*qb^P9l*;*@arBw7?I_~P5Zeti}_i^R? z3il7w*YqF$ZI^RH`q~fuH;){>cRIK88T~A3l~C3bP&_RBamw#!wqDlt7hT0~@te3b z?YOu+`O?!y_IK0&ZQTAvy!+9|-*a3fjiAJ6#4Hvbs0t zeC=)Nif@wa3+FrSZm|CnZD3P-xAc0{LM^pp7vvu&fBbZM{e;4hSnIw65l*rd32Qp+ z%lCwd)i&kJc3wK~vQl~9`#GCF+Wy+YyDxdQ##dvnd$q5GK1nZ~|M6+@aoO^SM8RW6 zXY4t5#Z~tA?{6Dtt=oLw?({sp=xt~GN|JK=?^g8NRXO~rcKZA3V-xqe?f1oJFu3gR zRGyRnTXyLk({nj;wU;HI-u<%nbAZbM6&v}~$kAA*!)ytjF=WV>dHlhEc(6RU*&Dj?hMKm7$_n=;70%N0=q)qg@{&{u3?!Q@A zp}+r6moInPy$#-S|C(;aq|f8rUFHapl78;|uq)?P2N-1G12k4q+ZZQU7H z_cL{M;F9aj?oXB$Kett#Tixxu%=}Gmjn1mW=bSGT{Cc(e(bE16nyr%a=9aewOpGxzQ+&8v=*mXrS?l=~&$-bVqiQ8M; z@I}NP9>zNd<@t7RQm_Xt2>shz;y>|jc-2>{6VKA8$Ch#5z3X>b{#fy$7EUFb+1b;J zoG$y`ec1ke^Ky^%yB;2Pzfq&0e?iRSSfnJ@D`nX~CjEK&b`*`emO(4XJ?+|}n4?BSJ*>WeIx zx;y`Gh}!4p=eOtb{Aw2Vv$z=d?qc%)ir?+r`zp&1zq$K6;o^?FyF+FOygT%B+sO~o zOZ&TL`L)E0o!efw?A7B1H@SQxzSO_iT=m5wphdL&riy&UgT|$k-pww*Unb}MV2hsP z?}YbzcTf9r)cNg_)0WTY1Z&mJmk&I~lX~%*>q>9CpN;c1DnI3B-`x?tEl0Dg@Y`l# zhV}cbj_gf6UweDD#(Np2V?Q{OH8bWPzFYCwx2#CudE)H-HXjZ&U-EyS^xJal)mMGj zPc8EA2y&m0wkH$RX&rsX(&RW8Rb|1Z{Ff4`iqzOt)j%hFfri+Zka zxW#y1edV0|8G*}V4U5Xd41j5p7L)2`X80mwyodw z%1isnq3_3DE}x%xtmmgf-Tm!<`-0xRymG#xNodZGWtVGhuI_&M%eSnL^DnpFjuTp< zCGYRu{g(XwPVscnBHM2_9+#y$Zh9Vk*Zbuz_sxw4Q{;brwZ79gozL>g zhM?KDnGrUV9Mo9MGJEyz_bd)P`bp8kgegLf?fdijN99*XoLa#b6*R;4K>Mr7{&soy zs$S=={#ks3Gaz);k7v*o*OE*1Vx9iocfX19fyPo`(TNpE|`+?}@tbUtM z9e+I>trT7~U6Zm?65g5eRBox>&uM{?d*09T+mq})U2k*b(IE93Pn>IyTW?P|*kr+U z#g)flfgyu=&5wdewad2qQq124`qjMJ^V&Z8`97PCDuSTC%SRh0?X~s)7q4MsF)2P2 zV|ME9_PSjkop10aTF9h1Eo^K{4Z85+g6i9SmD?Ln)L-~D*EqfJZ>NEvU0U+Qefs>(l3#7oN9X7N{qpkhh9j)?8QvR2mWHjpwN2isswp>V+vmQg1skR| zRdv>dnjTrd|6f()v~T-&e9IRx3;dHM{pfOjn)Um@OOi+Pt#aRXs>|h1m*JDO()sfE z-uAtL^Y*>J!(y1tXr6qmWcL$+_aFcK9rj;}XT-FW*}M{X z)puahtA91&k0@$?&t&1F zQKy?0ed^NEVEfZbwm0j{4fpN&^GW+?$T8=lKg)fMPDQGBT{_$BAH6(r`Kr$n+=qK* zI_ElftBV+f9dTitw)WCQhix2F-fi40nl-O=@hwjev5>yzb#Z%>)+)su|Ky^x-1_~V z&ubFgT8%SQ7JOPc*U5lq{(WXPo((~zXHG0A_J6WZ&{`lP;7Vec^vkAYE=rE#R{aL- zjk2JPA7QVy{kz7`c0=IM0=XtV9m7NNExGA)zw+;H;p6w8V__(FtoHj|{aN|FZ*#Pz zRR27z)LDDvjk-y~gDJLl??P9I@w@oNe0%pb^YSv)RF?gAHtjr>XA?NNTB;tfH!9xQ zka+mbf-C^|08G3lzmxopI=x4Y)o z{kq7t>rVE*%IoP(wMUv*?V}v0-}|0B`Re}nhFMm%hkGBL-(L6YOJT$`w%^893Vzf2 za-PS&7RoVP7$3}jyK@!e!t19Vt@xO}d98MLi5sVJRy4P7_u_uNYunlzG|p%)4|(f* zrQDBowyW#W#}a>Ijn-&Row9!azhzU}-uFlvd-Y!bkQ4cZb5{9$t0orrm+4-q1_$}) zm*<_Ev(u>1Sjmy&==AA2kwLHa`QHwB)hP47BWn7DJt2R6)E;kjx%nNG+~Qx$Jo@rB zIW%L<%a+=N4CS`BA}gKrezZzX*(6r7G}zu${-#aZ@4GIy64)i*>^||t^3K}r_vFm4 zCh0HvINv{d`N3tYK1cmK_)+MRkK^>9Cx+52TCEGRzrK3Z?@{9;R~B)(1 zggDQciY4~AZ26q8+>2Mg66;Q5n^uyf zDRe`oz=8ke9=>gEn?ByDe!n+;uU7S$3cLS*jz#6X(^Hc&>+AfqxUQx$>F)Oz7vD$r zHrUnvIx@X*-4>$Oj&iI~SC3KXxUTVL8 zY*&!m&AR)BhxK-aUt4!?`TRPm^GP4(cHjSC^KtFxc?VrTJv&|e^;Ht1ZHw^ynoWxD zH`KFQSFcl>J-Z=i%I<6ZAzv@|UVnba{JmY`!T$W&Z=~n_I$dUE8goB+%CDD~k0&-U zedTcC$(dv1%);S2+f4Xvhq$>{(6-O(zDfw&=f(Ftb-1CBwlgE~k^YN>9NF4OERkmY zOU++etv!7+@AV~5|81XIb}Zhq^+K1^e8ajwEjxIxCj8nuCupmA>eq9Mwz5`R^h4bf zRw-J1P{tUIl?tRb{u(viCRQ zU&lw_VSM)*{{}&FI%q7xB9b8xiLrR#**9;O^&&R zZ*Oh=a>-&Z|JKMocP1z#vs={UJmfzuykWQE8}${SQ-~|STs*kwV(Gf82~|%f9^CZh zZBcb~^~U(6K^b59nZHDIb@2a6k^jivanWPV+x9eOwu2{S*vcbL^R+jcPOCon@aBed z2k)62HSRz9T>9U9o64@gjgj^yDFqTcR{!M)f5q3U%aJt8G&?PQ?Z(?Gj}8aPJt;gj z<iT|PUN&p~8jIAK(|70p)#*F`zyAK7-)$?NzQ3%NJ!9oBiyxqLm@G^2UpzGFwuc`LvxroMm-o?vdOW*^_mF_3y7geL?T+ z9!_08U!!zi-QQoEtUuU(tLFRmZo?S~sUm|<^3Q5+SI*z2r}Jk+wm{Y)*^*VZtf z3$!;l=;+RLQzbyrWLL;#4*78F)4Sfkyu3X6cl7kwusvpyoB8$kd}uP=)7K{KBzDHF z^yQ_abuGJ_)PJ?P`&)fG? zZMP1On^vMtxa^z54y#$LBNGJro~8uYyE%6_N?3`NzPscyXYt|rR;8=vhPG#|&8k0W zpLT6x`kM`=p*&~9*G6SjIx2kob~`_N!nHWwGT%daq4R6Mb%rj@y}N6wsF71@?AF=~ zD-Uukm9jXxZi4yUEr;5SOI`$I+pEj1nB(%0lh>Hz#)3qa_N|W{+s}#f>d9QDAO>;J%;JTHgaIXGBgu_k;4)dZX1K1@BTdLyZm>|rsDg%M4s9@?X~*<=kuA&<#V%GPhR-euy@je?x1%Y zYM%s87iiCy{JHP_kA{PJRUZ0tR()9g%kG|a4jW_pp2y8HZw05>C9_GSa+}AQZS~la za;3`SQ~VUG`6@HE2xl-HT8)p6Wxq5uze&_#fWh`d99$eVpZh3#t?`@x7{05y*AZa`& zBbUc{4AGdT>yE z^_P{(fv@N0-}x|oRqhAb=*&5G@8|sTo%(&#I`3J1F2|+wcHFx);Yh9Q|KvRj50&=3 z-uQ6}SEO+3J>5=b-`~GheQk}T{o>b<3^QoDu(kth) zED~5DAQf9NGk@31G;N&&)0XV5`noA7v3#%jHT7gk2DS|meHYe7n^*HauG!$alrJ&1 z^y<~H4NXt$KCm;gvh960?ei;n_n3AA){hGxJN|jsuqXGn*|%nKZ`qi{snTrcLUk*e z)&#m)WnEj7Xum>Hpz6cH_MBf|C6~Otk=(s?UjgrF_K(tsW-hS)d}e?2)qtFdeW{`X z3l98{x8h$CEi2`Gn2Fc6Ecr3wy}+{kzP z|1<8sE%2k+`c=2ohN~*Bn&tO*wQQ(8ed2rVaRqi`-&2v7*YD@I{UWe8h4pm${Mx?S z;~&;NoO^h8``yPIiWl!P&F*S_7RCQ%*EZ&NUssgI9X@sK;&gSE$cp<5&ocPhT}hqt zxA?qmdag`X)u~l?YG13X89azNc67hFPVsiRC-(REWJg5R{rc0k!^~&Wk8LNV*j{C> zvO8x!S1Qe{f8W>On?Jr3Zdly$O;}jxf?J+0+ux0WY%IQcvpZ^jJiD7~AH4N*gxkL( z!u~g`n(8?JGOG11*t_PIiJo&!$Aa4C3(~?-iB5W7=VzS>5X+r=>}~M$EBR)hpWMEt zlqWiC-;YP#(lcjW*z)kj?Ry8-pSNEA-oWm~!w=GbueWWhnmYH-7IW`^&e83$Qi^BX ztN*`VzkgPHO86Uh`C6TKykFIBgT@nYPWbl7%wKrv`$f+p*FSy{>|S%<()>=!^I3A> z+UDu8>96Jn@3*V`zS5f`-}$!uxwzLekG(BE^2BJLamb0K=UL;NrjV#OasOMtPwgrqlc%75mR=&TL+gtv&IcbH`%YXrup~@0Ol64y>3N z^Zlf?-48>KW9$M}?^5`@#TNc#+5huR&|dfSd6jLt**ZsKw!9EO`8{g&U-Og`tEV|G z_nT`jWaM%(f6A^W!EPPauYSLq95==Kl<<3ZwR79gIWLIXp2FPa@-Z>pv1X6sW}}(T zvL)ui0sHsaOf2Up-*`tc`rP(A!B@|hTz)+JyT(KJ+{wXT3p=a>tpdesPv70H=U9AT zdmY=(A72VRj9&@$%v^kLSyAVwd9QZ5d=H#1pmvXaiQ;U%i!%=P9^QWL@yr#V_|1!| zIam8>%9^!DXQY36(iwE^SYFxYEh*1$g%rAH<}cb;oLHEzFO`0{jd!d3JJ5-9K0epB z9QqqlsuEq>G<%sw>54(`;Ws6^R z-iq<1udZx+U$W|b%cdlOrFTwi@!sSxpKCQgbI;3dr6(V?F8klW=ziN%dCexrpAT+- z*?64o_SwS*kp=Jfeplsg`fgUpv^soQ{_!j3uXmTeO46FM;I#SYonP7=J(}5~PZgb1 zE#zGmb1eSiBc=0y^e;Z2Uw`h_l3C{Y``+v_iAme_I?C5wqNwfJ{R555pVX^;(rDdR z`tPiHdsOe$6i@r_cRs&4^Xf3a{ggAaubw*eOtwU{onczYk7>K}W2H=A$!4GKs*O3i zQvK;%VV$qvX7=cuFJZI)cgk3|XEuvR1Iwu{hsZ6Z2E1SH6raDLl04Jgr>f-Loyaq9 z-lUqI_p^9-q}S)#l+b??c|QeCOkI$jyx8*T zU{aaT19I(#aPHrUH+cBc9IqsrisWpm{a5+%Sz6UxcOj4I45qs-sUCms(ZCWU)DUIg z^DO!2#Wy#Ld+J=4*G!P}XaM=yL!qBDVWz6xnV4YF$~iG=y&%C$N&#WHveR@9EtB+7 z)rsG?D8+c^leB_Mrx@fqv#n*yOLMP_>Xrwo-TlCd+>QLW6s#)O(kF! zLyE%$)~A=AhFoanSr@r?(yZ8>I*G?zv8%UKWAN2G(NMJZLx}0|pIanjHdjqu85D6< zkDe*G)e313dx3Qq?Ah1rZBGC#QC~vYG8H+8J}vx9%Kktklk}H>Vyp zoh7B;kKJDmOrnz={HE)L`Lvu7#h!#GIM@j+SfDNM)tHGT2Y~a$i5U#6v69Lu47e=$ z>Cn)$u114(StGW1ZD8?GNM;f#N$r`y2+H{I#EZmu!pz9E>(fG!8En|&QlYVjGvLBh zLnk&!gkh2s_*pbwoN5nBkir#)Mrsa@;m0^6k*q~=&S*eDgJbvv#HwdDf}u%iv9o7H z?oU4>k{5e-#;Vq1M{I%v75-flo%yx}v9 z)43}zqOX6sv2}N5`1+|UqXIOF)?Jyjjw$$0{#;F?;_2s&<=^~ij5JN!x$<9OXz+%0 zo5Ynr`(rN?R03|S@@;=z7xyFC&tpxtI@4O=>{)+zze(S<^+nRFYim-?RtH|bvTA4K zsr{==SI<~w%6&F%_Em$muT0HNx2?&1c5QzCwe$Z^i|Czt$8}~~?(JE-N?*?c-9V`x zQzYxTI&7`a;Wpm0n^I2~$(Ek_@yRk*Q#ig)&TOgG?x)kDXQiE;HPbZv+Kv51N5nK= z`I_FHXta~F`rVG-@0NwFjjFu3?rE}h*m6JF%bQZYqYtePTYKvEB)$G^I`XGi@8Q;% ze{cDx6~a%?+Ry#5{YDb^X7}gko;{ymZ}$57dVlqfE%R?q`E@*@R?9!{=a+d)V}I0a z5MlhLzO>*2JLeSX#$&#-XU@qgS$nsBZsx^>Q&&c(8-M6WIy?Sky)NIjN&)!DOn0a^k%&d5IzQ^}|zuWAz`iPy`oysTw|D9hm z`QX6|iHF}DeQRA}Q2*!SaW;O@2R!oDkL`XQdG_Q(-QP1yI)y*0h5wwhZBL`fqzQMe zOK&ZC_2w_XUB<5R_jzpgpE`DaY?F2>nlgX7+0~Ng>Sy09%X)B9eRg!--m7f4ULRmS z`{m{3&C-r77d~y3-Th;d_nDc^Y%}@o|6G_;a)?u~Xo~gvrx&L!4UYTz`nq}fozm$m zg8~xn)&H;k{HOSQtCQ95ImJHene+eudaYl4@aOZ{TeGjX{W`t9`{x(CsqS-6Z2$DZ zlmFPU_dRmCQs#L%ZhaDo|McEh>D^s+$)4@CaLd1^M|J1l+Z=OkYL`s7)n8AuN|THW z2ksO;pKEraKCWzL&l?^8aPpn+9dPSz_=5?>6jFX?1r=9(Ez!Q zcwN3_VlHlObvh?_^U|MnXJv{HPuhKE)78^w;#=!y-ne#h>rOuVM;yUhSH+vz|9HS` zTzhLvg<{ysNj7hG9QS>3esr?_8&ljqGG?&YH!NN0qpuyE=?63ab6etOmusGv! zPoU!0%H=sx3mUu2Wb`8Mrdp>7e%x=u>0tc&)Mm zjNZ3T>Sf%+d~)IOoF(F`Ctcb3ysFn-XhjZ7k=6^NB#*k%i&~qj?w%5vguqyvtqk;R(*Zd zyXV@9z{3i8d)p(`|Ga#^Hs#p5$j{HxmMzIV+9fJ&yIx%2SlR7-eW!z4)4sjAS!MZf zCHQzH~i(Y=bTYf+HiT;VOx8^l}zg}PZCdNhceo9^Q$HcJp zJFm=@7uPZ97T4$V-nW)}UnQ&feXG?m%RJ}uPE)?L^Jd!YqnDeDH(ayokPbYhAQ$jp zN!;G5H0g_dGi2rD`i;f*G6qO zvp=zW(y4o~Q+7=H>AU=$$|?34x!doSJ==c2&iM25^ZrlH#`%Z&KVa-JtZeuu`kX_& z^yhJT^BeUoe|4@rw0DtC^IM?H^^Dt0&%jZzX8plsjeGR(pRVRvD^)6R;NSO$?YUAD z`cg{8U!GoG##8ALvb|9M#Ifaj4-~&R9mVB7{}<=~S9dn8(R*uSGW~!^Zu$k+mxsUH z)W~(4vP~!aZ{M@zLoJ-o>h<@g^jZI_C{8#(Z`t-Ui}rs$XZ`J4r~2F!1)tXDXU4BK zzOK2qe8V>$n+g6~u4Xl#)LnmTYxeAKNktFEH(vY_oM5EoWi44V|IU`|>b(^g7X`iF z{>!nd=JGqc%iChDH@mf%ZeAkqP}}{g>AmN&zZJEa_oKak+xZ_ed@xb3`hL~SF71jX zRpoA{FCFDiNo8s=PdvB$UZ!>5uclogD#eNkZLEQ(^aJ-^FiXC>tCX$&)s+5gqI>yr)xJn3zTf|= z^HTbbpPpC6Gk;XMNCo%CU(H|i=k?zd_bI_<`!+6GVt!MiaBr~RyUI;AALKYgGMMgG zee1n?H|h19KcY4P>S@PL+~0A_(Aeze{2xD8xUISM`)bm4zx|eC!e7^mzW&!yI{%V& z+CBXV>957wKRV8hIOtrewDj-%@Ob&(xlec9*b@2KdA{|6a`|fcx^=sM_T9KMf7+4y z$A3O$=iPX*Q#yaQwb{?x@4bIkzpGz=JZj6$Jmvj*uUFpxpD^F@u*HLSMzpyoJ`W|)@N(~ z_Q|fDukrNtr|-XKyDRQ! z7=L(u@AHLG|Eo%cQ?P*=p{7^swu$z`VbGR&|SiEI#t| zvANgX!praGy}$eRzzu0-_v812KR8+!o|gT7)a?GI!j(2Zu1r>Do0Ac_;O~zA`}>dA zMSe@4bM|-g@#EWWXMVqNm!Gfi;oZxd9HOuMztQ+{he>?%{F-~)tY5uG5rhV50pRX@wxq1*LU9if&F)XJ(#yUwen$V`0=`!Kh-upFE@+dD7(H^Iq;Xk zd^6>_;2eG0^L%v9Wks{>fBMrdn%_UW_3Osa+ixE~Zqp1-zxB`W@9#bS>2pdOdHMfN zvs>=IXR*fN@b-PF?=vgU{;te?^D#ZHOZQ*x)V=-t;^$vXo>FG?!%nfM_WS$2f%UD1 z7bBm?OZ97e-4c9uZuk4t@dzpr`Aud{p4XVFvh-Ff!0>~;IMim1=8T3*We_Q%@td-1RCx?9)0oO*p4 zSMbi)hFSk#1b^eWZT|kl>%%r{>{xeZ#(v5zu6-2h_s;N*ZTF;j^ED->^h5V@T&wJT z|57||>(@7@GdFu(?OeTn_t7|c`=7Uiu79t9uStfTtm55M2FJzo!9I+wk3V&#P5pT%uG+S{dKU6VRQg-d^QpM2x6#^vZH zhHX`MmUNh1*=4#c{I1=zJ7V?IGj)>RMHEc`nenpvm`K><=hts!A5A=Y)~IO1<40CE z?00-xwR(-&jS1oLTeq*<@yVg}aq+j;-C@4tEfm;9f%d%xd%_ECMFLAzW{L5n@zq(m?Gq&b zWv}18?uzLj3;&)c|BO>IS<`su)qRUBZjo4fJV(wX$>8uJzWt@&_1-M{e#Q9w47Uya z!H*0sZ@hfYdiL&j`)+6T_SAiktycHCWuo)F;<2y!%*kwgTc$6#${6Qyec#<(GsD|? z4DaqL+bUHW9$(!1^LS+X&i<(V8|Hp$Tk%c4^vT3$v-9_DG=B2o%KHz8AJBh4%;h$OFE6SLxTk!Wqv|HY;rssLK2W^)~KmAsp6eBNfvtsUkjl!S5dV|WFULMPT zv+H}0#JRHj!7=UM_<7RJr+$|>9si)_b>}ipDNc3k)7u5uc>dR^Jryp==su9WzxMmq zC`GAbhL_@Y@xA}*YkvPt+@|LVe7aIw(!;xCRchtj??lgC@NUt+XWrJ&g17Jg^=fs+ zy_#FxXLOpiw>*z2Z`k8+=V!S{XZ`Mfzk>P?ocJo4J}>i{$L)%2&zTwbm%7&~tl|Hh zY5b*9ruNpRm~Ym3x4y{Snqbi1;F~|IyX`BhcwEMU+_l>#t(&xKW^&zopXlw@NdrAIrMgJN8O_=}i+41H2mkPej$lz)Cs2wxqPxg#=hNsGV{Nv|q?cJB`65ieIEq+(% zab>FNgy`(o0y#%rZiq%FONpBp-9C0}cJ8(9hNag|E{IttdjIg>t;_aJJh$y+o3F(Bjk@ z6A@RK&@Y$f{*z&s;)jPxwx{bO(iqtp9nF7!xDz%_d~USSg~nNib{h6_=I7$V6R#Qw ziX6P3*e;VafA9Byzuz7=W}8+a_WhSk)r!a+1q)*B9887VoIhS$W{=hDqhZ=aU|k6nOr1sXaO=_5P3=oE-;!eun zGSks?-0NZ~qx4netLdu4?&7~}d7aBQ*+k#^ez)wlZcst$#c7I+J71MgN)?+NmnHu0 z&gXN+T5D=!S)7xP_igQ8_S;Ui+q~kvdZb#-pTgre>)!3E|8HG!`^UD)FAg{Jz16U@ zxtN!rlp;R!z@h3L4%2QQmQ{VcWCdUDRxXy0=eAETldt9B`F;57gu?E+H*UPvck5){ z^S4;dNI9rC^M$lw*$kV?qDv|)H^H^)%RSb!Zj`*1{nT8>oUG=fvf$3cn$wn{|6fFZ z3;gu%bj-~ka>3hn&P$G;|6|b;^T>*or_OJWOOVu&X-T&}v7J{&Ohz2i#cTU#@|jxA5Z_jPu4cz;iDLiHyM5n&P2%P#lPsvuJtGsjf4}7p&wR_+ z?02)ur~iC-UOpwuBPg3SR`uV5>#Itq`s%F{&t-fwjfMHR{{Q#&X)z}kh(>u8SiR<~ zj<26SGw;nV7Dwi^-B5Xlyi79$K%ub z`+K<07&No*whg>2)+0W5WuD#wUMs7E?XDKZYcjqn$aic%J+Jzf`@xI}Q+T)J6!0B9 zWxFVm?RT_MmA0sjU6=xoi>1=vz*FX3@x3LF#N%h&&f9zSR>W+h)GkS#SrV@lHhez2 z+O9cyl~wmlON$JPh3A|MHWoegYVJ3^JBRUU?Gj@;j7IMcU%T%9>ELSSG>%gWGn}J) zdJX2)ee(Q$!>sZ7-3^Q8J>Mkje5>Zww%P3=seM(;b4_0a9oCXoDXbm+_oIM`23&umgS3g1uAhI-|XI1Ap73t zmHL}v+mK7s7VT|%du)Z?-8vch&ofdQcfUSoeKvcMY~Mb?_7_{+SmN`v=9l~ZP2bN}PuZpr`s?oRmACHX z9DhAK-n=*QIXLGWu#?@F{~#oK_3wYbZ{Pnl|KB}VmV{NFe;R%Mq+d?mtnaj|=JWgv z8JVxvYFY8}DdMR;EAG2;INyGiQ1Qo?X= z)-{LmZ_5pJ?3S8+H>zj*{qF~u*M;xq;SpaDJH_|=%#6P*yz$P(k0K-uk}j}>R_NF_ z&o(K1Z-uJeU(?A7y3k|d$Y(UNZcut zXg+`X-%o$(|L2s>v`#QTvvl&h4Fv&a@7N{TF7N;MYxPyXE9Gal=Q&L%-H{=c@KTBA zqqD%B?I|~vw$v+l?D5zV{J^L-e&ZaSj6HwfZog-A;hDot#~T7m?OZ;tmI=Np`}Mh; zV#{H737LDM*B{DWe7b2z-8_zc4{Ba@e%1J&*zk4hhQR0h%I|k6TrU0WDtu(F=(XyO z^QGM0_wHr}FW)ttci#DJr&F!lw*0=9dp3QQk^9d@{|+v++r{@)^ke4iclW$YiwUI?~ zw$GKxsxu54*6Cfn;rw^!@si(#GfV=O-#YqBS~}Zj(l*YhG)M6i`K58cid^@4nm*%P z#=ZaY%JLVJ_fPP&xbA2y_}=!I>dHC(|2zKtn6fv2cca~vavm;Wwtae`v!$1=35}Sc zlXw4*8u#Jle->Tg?pdEGm83tzL$LA7Kh>sn$K`6T=%pTSQM$2Ofv47GTY2jFw0M@X zz)$jKe0{%Ug}1KfpO!zxaFOHfwEvIYaXCvJvU%ktbz7L{ zoL1A(`5qPUSkddJ+sD;~Y_G*19j{&}zxu=T$>F^G#}j58w7MPiX5GQotGwYAmz{Df zTT4HDOZ=&ywd;%JcL^WucYpPwIwIOupWB}2^qbwdUm(eG_3OHgGZ&v0`&h_6-A^*p z>Q1tR_4mC^xw|zAT|cgV$+3xhwe_p;evj!^=6kEo+PbY&zwo2+Fa!5j^D}GPx2<~| z!??WoW>(Oy{a^2VulzdyoZ!RsuTL#cPowMvvdw9>2-cudi^5X$_3o=?d!Tf+3h_4bKc{-#r6e4w$Cs7wb^nz z9^bl2MrbnYjDY3hAq z>ksTt*m>=(`PeGHXNOyDxruz>tGU}AU%1txHv4s$%1z#zU)zi4|0~?dVOe|np8EU1 z8Sa85thW~=*h{P4Q&{e@zxLDY7m+dFHTP?LeZ(BOkHhi$yiHOJk8^J*yZ+~0`|xne zrk$N{uJoPE6)jmQR<_B+ZSVBA`!u}%9X@t2aDVcmZ(kkl0*`g96PsQw$1{1q=YmZF zC-yGz4wvp)bpF!*X|rxWzmr#Xw=(?lqCD>6J7LFXUazma%adbv;YdpH(S_Y@vmV-a zKVzKIq;RE(HJbI4bmGqIPtx^drQ%oYO72vcCcKN!N%>3>i?!GF{&|OItb83Z`{>?f z&)*$i6_>3h+iSHXbKaSI%CTqX@XPO&|KreDm?d$c_3-8ymIu$MrbXvZOf7xu74q}z z&kf2~W?%gq%`+{@a?a}wER1vC_q@EEtNwDfnK{q*Kk0&RWOa{aZCt~++57J9^6i@s zT?lJ*e0$#h|DC+{-ikvNI}=r{`-Aoc{!!~Tt~js0UV!hXm5#X2k^8b+Ru*1#dH8FI z_ge*3F6FCVHA;nN6|CR?ZPwP)Y`^7KFh^|bc)k8)>5iPKfgfa@Zk&}>6uQ?AN^;#h zE|qSc%OA)yXTj15CtO#m_a6CC=31~b=lG&4x$)apxW7_Z(N?zP^`Td5tL-cLIJ*;~ z`3|2h$cy>$_Hz5rEs}w^HpNU6|1_hs`;*$@`@LiB znjFjf-$aw;O0B!fQUbJDuh+y(sp|Ytv*Xtu>%_mgQ>vz~EwfoOm-AbH;3;ro+U}Wb znX{;6iReMsksllPh!uyLH`UO&;n zRXsp;xnzjqbUD`s)1-$S#h-I-hI+GvPv5rtO3$6-B`*W^H~-8!8vbn7`*nt^udUVc zTVy9(b|zEJ%!MsFpupfBSGDa1-i7rN8y-7b&s??r+^o0CtM;$+-nNG&d+Wy4lVAUu z@+OXbp;X%CD<2HrG@DMlJ1K@e`SQBkn^UHX#8`*7xNPsJHPoqY^s2p)5IVn<{m$hh zZLLxpj!M<0HYguD$YW5J+Z0tcWlLtvJ3(usm2BcXd3Kt+edlRyKDqa3!Wt_HFE@7{ z_GqIYD@tV3mfoL~TJ@jH@W$(3-JmqJt5C)I``PSG22I~h<|dXhZ!RvlaEdc{^K~Qr z?h@9^o%aJ@FU!g+ov>7YRb->p3VEGb-%IX?`zlY%Wz9YQf=x7meeqpL3v7g4%icT?FMEt<->me&S4;WBw*=ZH%lWRZzOv`}CfV;V z(4D7~Usi5={Pk@9vX^~9`U^aNFP%}>5d4|{{r>Os{;qY;DQJ1mnz4s4*-Dk%|?ZvW-SH^#@{Jv+7 zSGH59?{c?ZshR5Ys#e`-bL^G6)_0vdi9;f~kA1sG`DClDN8a(g@sU+G+h%ZhqyP1F z&$2Fdc|9>${i#Fe{NYWEI+vY}7pI(be=WY~DARIT-b2zluU~B3Cw<6J$KS@U%&2(o z>Z^@Q<6iI>D1YCT?zBL!_y?T{XZsea<0UnOIGM=BBxy0vX*AUlkP{?G4!}6dCFX3OEV~2*Ou^g z=L18ppKc$ed(H>44cskF0w)gTNvB0VR8YC{R6gq7j=C*x4s{&# ziCn_{kUjRwF3z`;^EaGq*l{lDFz>ri!%ge;qElNAzDQnlm*IEyis0p)3m-YET2~wr zW1ivKsofQS*4xTmXX8b)M^l3Rx1R31P`0r4Kv2S)Z=GeV?~AWgP4cTc^=syaU8@UU z?fsN>e9^UB-||h$pIUygxBse`b>`Kgx<|1NwY^#n4QDN{2=g-6a&AeBl{VN{8xgrh zGWF*BFOxYJo-~?hT5@Bc2_>M^Di2RO>auh}qUx^rW7jX9u>bSnFx&05 z&fMJ0O4k=Ma~M~xtGg#0eBHpWx|}4{9zyvs?e%Ac^bnm56(dxpxw+8Rjl0DkxgY+uZG{YH@A7SseP&4kM1Dm}{{57>Nr~1x$ub-j-``$4tHv$={zn3D^fd8l zdH1Vc9=`hhE~mHqlq&IWHM_0{eeK_uDzEx}-U-a# zu2eBPPR}Y%%#^vr*}hS+#o*UG7S^Q1mml96-$}3irF4D&JauX26r+8btMk{Sy!`t2 znvKi8<0V4>1p?y^EK@8|37EcTiC^0dk6D`w${f2GiCSsre!L|9FVH8;rEr2xO6R2(6`_2 z`< z3pC=WecWrFvn8)?<7=)Ozu>ssr&xAk&WPQA(x{+GKyb!k5`Q#&Y9<|`-iHpWL`MfW9eEA#fI zO|Qx~d|@u-6ZQyRqW`@xiY;MX?V8_n-v4GfyF%FIvy}W~4)6Pcf3Dp?!i?k~^3->Kc+tK@ZSqqnNvJ%g7^DqCWA zzFxok+_r}+wpYwIU7z@O_U!c)vzT)^{`}as{zLUO`+td5oo5%$b_wVyXL}}7)gc@3 z<_ULu$wAfb^V{Qo6@9HNzhkoV?b7_c-qYmwE_dfv_%MH)w%y;w`8Soh?(g|+#J}2q zmj2Ua`w!pK-n-oWeg*T6H~zeb-)^t@EX|`Y7v}NzdUe&2&HKJG)m>yeBxZPr-RRu4 za)$jIKd-X-Yj*K|;&F{ywt3&*b{~4=WyaPq>HmfewfmD7effIw((Bu8y_0W}@?5i8045crG7$)IxCDe+L>x9sL`E`{9+&a2N=JpJ{GUu)TneVPZ(6mETW z^=y)4MDhlSlEq7n8{aDO>{75e)ML9PM`3}(;~8fXB^6EPT?q?R+8@CN+HYsw&|Kza z#9nXU#px)_wrbsB)9m>^(+ZP3n{R9G`d9F7_O=JbzogAhbUjISXl<>st#GjkRo(kQ zR3w4zui7u!r8SFx_=?1T*p(mGd|vf8uU_k?gPTIqUQU`Se5j#;yHvPYRaEUk6{uyf zOV8_W$$am!d6|+A|2C&7-}@T!zIw`zML&F}?GO3>VV;uSp5yDPYHt(=zVf{B`Dv|g z;N7$BWovX^nN>LdW~ABKcXn_p9MT{p9qresGp{hR*BZ|g>{Rd#23 zx9i;M$@y;m;`BweRRYI+>z6&>_g?r{Zbr0o!kn)9WtpF9<#Od-iP|ms^4R=M93A}($d){cR#KzU-{`t@%`oXJyGBGRen!>H@RP6AR-(;se zdEbd%=kvn7j0N_W|2+PgQ=hEroxjP9=ci-TgA%2Spd*_CI62>3TiJbb<$~9wl3C$-#N;Z=q>$@H5 zghA^d6Ji@z{)@{EPAyy*dD}T>WzJ4JT`N}a)iYkn=cldmyLU!pO=HTMN4wio!?#S+ zjh32k`ayI)Td@b&x(T^V8;&wb$7DS>xc$)BM(9L3lfnB7>;2`kd+OM4eqh@jdicu0 z?f2`ld-GPWJymm#`LY|6Xd}b#MO^`1XP7ys*f-A6i`Du6#)uW+c+{2aq7xaW={+mE zezePDVxrcd4iisq~xiqp@ASSV`d61SfCx;R5K6P`g?tjfD2Q_j~;M=F7bwh z5fYi=)zGxghx1dV5T^Ygk;Xj=4vyh*BFw^$;GjYE2FP6#G#R;e8L6Ilj(sak1Iwo- z2G-chKpr0!T8&7OZwW+_ud3 zc3CB3U+0Z2oF=)~&X{E1tGRrxCH<9k&i1{TcXo6x&#zKO)eFj8jlRnRI1=BlG5~VbSRVO!8}eSjt}S z*lqd!PxqN;v#)D^&-pH2&|~@R#^ckrvIkjMB-j4=>~H+*Zs4=S{Kr`Kelo{mZiod_ zsCG=BmSYh%Iod->x}dH zYVUq|Q#&E^^0K)z?cPRjF29~PXdRD9b-xRk#iL|plN3rv2Dp?ld!JZ|UPlHk^;QW?%QbXK&cM?bay~ zQPG*<@pUKLHs}84TlRY2-JE;V{{340^V#h6XJ&kNyIp-YdW#9O%jB1r`;X7MYgK0C zJIl=U^mKjm_np@+OgTCE(aR5<$&bW^&#c>BW)hvdck9l_+oF9EuO4dQ*>I&``rWe4 z59j~v-+bngYxkL8f17DWdp}%QaWQP!bw~Eu+um;5x<{?%+sYW-4d>N<XxhiSjY{R>I?4F3ORL;)jIeF@`CzC&xYHUFa=ako% zT+N@Gn%_P%=ht@QGiA5)^VNL+9I8<{w0f9>I7bTKS&I>acZ2?O)%fvzk?C%uV;R`Wd4A;CICv z_plw|>+5Wbe@WJx3tTyvt9jbyyWqp%UMW-87hl%Rv@YKkso=EXZTXFhSJv-u{o4Fr zVNZj@`}Up1kFS4O(ida@bj$uo#%t=2k3};2Eme<7fNN&*$yWxNlMsICO16u-`$O zMLY^uO75lweLpDD6ke+*8UH=t^zmC z?J?gK!O>&2G5)*Ux0xYNGi^WGLu(RHAqXoLPcSo8F21;R?i(KV>evf@P1{6eSa_bt zS9IQVZZTALU9g1jkg8}&jqLZ$%O$@(&VHp@mve1TE61X+S^dXrRSr$re_pELBGZMIn|S!&LE;|qRO z*+&XK-`3uZy)W$)@)$ft0wfU>F4J+Tjz`Gne_Ai%dfeq^of~wVQksmt6Xe~ zBDWKd%bwkSzeabKcYUVOqvNt=cTVQSt)G|SWSf;%_kZtRzFb{{u!vEPF8@12kd#3l~Us(Uo?}*3y-R@Il zO%xw0Xx!a}J6n=CmRXKl?`IQ@;_EbUhcHBnzqpI;Wq)VprIi^ioelLLCYA7$J5l-HT3#E?Mq)b#>KE z<$s5TjKfzjEIe{&XR*tLs~5R;-73FvE-T5gTKA0Ueg+^^wmC6{P)Ma-IZTz+5S!XX#1{Z@|tf`rSH8czrWEb;(OGl z&+>Dh9=PCh_)@57(L+mvfZRhNJ>t5zKIo}*PyUW&3+#e5oKJcetnSJD^?uDD<(F&QfkGj;+7sYkNeU z6#KoW|I_m3N@w4D^S;17M+x@d=@;07+n?5MFn+enRVg8aT{<-T$o|!;+v@IG?ajUB zE!ny=Byq>jkEsG;{OeS^R&UtQwKn|Vr-l#O6Pev_C^pYEo5IfGa3Re5_|D2J&zrxl z?z(Y=YgbB5A~)}?v~|A^3QFy|E!oHdXuGuS_BQkQ z`mamBGBbKUR`Y$d|E=qD`#aH^QrhqL*j|cjT_%#__*P+-_XcLR*|8BtE7nzgmAZD} z$0SwhEpxuaMam|s$eK<0_x;i5k2NKC%k4L6hellx6|>)RneTP=j+=|U#aFX_yV#z5 zXwS{;&#uZmPGTIt+&nA~D9Rn#yTe60{n_{Xoo1KCp4CR)T6So`uB7!mvwSbaWGk4R z4cb|9sN)brlU3=;N55Vkm-l_H7qmVqUzzP@_iNE4_&=YQTE-}l;5Uf%>`CQIQGN9By;bIZimE`61D=!bvm@dIypd5Zn#{AfML}W?vCCk?|wZ0^>+L;T_+3UM`ssa`!`jO zvt^q29e;bh4Z9`eE^MAY=YPiIGs`9%@bz9)eB*c1?Y+V2+7-=>HE--*K31^!`Ruj+ z+5=qwHY%qmvHwnqueEe7>%S9TX7DD%bnb-fqDlNdcg5%XZ}_%Nfv3exre}I``{_jy z6L&s8_kYFqCC5t+eMoFjT~%;{SJ3R%g50TE>m)BP?>@WHer=oBE72|g6N*L=uC21aD9CiTZ+E$n?jFW%=ghM2 z#k^VdcFKwBC$AHGl-PwT6ht34l>bwKRWpbxr?E(Rg0Z9cw9AgSGw$cz_5ICv^z;Ex zo8+BB$DL&H-OJ}yocUtCY5(1e{NEbu{#7nC{ju)YjcykYM&H?n?|Zj3Dd>D{4tUgi zz3s@>15GONl|NN4|6h^3Cb2xj*fD}}@$(Bojn$98Dn47%xO^5f-<#C>!xOBh@x2Pt zJ0e~(tM5VSU)iscPxyC>JMGT8{q3zT_ZtC@uvvUEUt=C$e5@jvS9)u4_e|BM`S#W!8-J0?;cHf_J!%hFDyuAFL% z50$%IA2yU2>+tXBueud-=>GoWjbY4uvkDA0-Cq@&eP>(Vp&uX9X6N3T)y)4kdBd0D zFV>5{gsn_A=;M5Bzd5RVLpAF`{b{aFKRA?s=lx`x@4O)Kx|ge({UM3gt8+sVAMX40 zQTKd8)DQ4ME@%a1k?(>9(dYMV)D)ilUS|4Pm#dSOw%vI8*4&VdZ+2iJAJZD9jnPkT zwQ&7vcH?7_xp3`cA;;!f8Tvb;EZ-HIs;-F$)Y&)Z%--p%i=S}T{1aI?U;B%P=zqPW zBmZVR_S@j($e}7^sWY+JfY(X-?oFZV=XO6x`g~Jee)hvfU!PfV6eMVKMJ2!7wIcC{ zLBj!|eeVtQJiXKXj;=S75rO7TChVVH~+*^<)lX zli1W+mwEpRrU@?V;@{0ES8^h85$~4G63PFMI!NozJp8T;)Way7n%aHg(xG{ibzQwP zzrMPfc4^5Y)g|vfuNLA^inU*PZgJbg!wgPK7fj%O=^+|^#i)$;oBApBX*ZTV{t&b4 z{I4U^J0_mreDcqdq&aUQ?_ukcZBm<1>=+)IzQU-Lzxi2oS7XVIdsXl6mIr5vI$C_W z!2Eqyt?O!T@Ba(Fem;3T`RtMN_S?Um))KaUHWk~**MdiaCw^W!+SNY664%(8Mn02e z?5>K-YwN7PO*I!e=Fg-e(0jl%{GahH<}bcjhPqN+6w{!~K;6lOKQCyo5OHUUxdgssz8i{Mwa7$~#=4X)oO?uZb z%NU4ABbQ@C(>kueo-?>c;TTwB*Dzx`8X_VJ8p9J^Br%f{m(#g+MX;mgDmYh*1#}*d zi=mM)#57D&q+}x>$dgDTlW=Yb2k5Y!j-(VdxPfR4g%?r&JeY<;MK*K_N5mgJlGMFA zZ1uLz=glW^4KuD-!?GsFJ0&Lc+M3wkv2(3TwYAxwVJj{`)+Y$7Gu#wQi3y$dch`^E zZPB@VJJZ|o8Le!JI8=iMsbYPR}sZnIl-Xqea;Y(pC$&mU0pVldJ@v2EXM z%eTLsg11Ip7Cl`TeR+habxoj$pJ zP2BEZvz<2Yb31$W^*^ncjbE;-D!o}1y*=))o2#pTq;dAi^W4wR%{DInx2s9Z_{^maF~!cF<^p-<1W^h zL4iwlFO^=hd$;w!@8#2fR~TFGwl?0a^X7+jU0U4T^80)5|9E3cnZBA3wE0Z>$5o+{lhu5!ZQZ`C*f~k1LpxB({gZxUkO>YW8HFl%IULSZ z{dlo4W>1y#yL;6e-X3ZdoP+hJcv#;dWm5EGGy{A~nXjXrFGcjoCDHGk$OD&y?-4~yD z+9X{*k%4mpHnb;=<-rP8UGBcq zX#C*AAQj&7;SS@rx!4>Bb}ad-FkC(q8#mizwv=H_&x)K?{fTXjNK zELh?>`PO5r3a1ksHdS9d`eZCuY40q5A9q5l*lPCU*DNiwv4p%pALk$SmUR<)&Obih zzchXQy1vF)vFy8-1!*+I&ggU8|ri9*I9IA0*t|SG!vz@b%A6&!#FKZaclN z_P^I67tW;{xD@}a@JjWZsx{SF_Vu;@%G~05lfGt2+Pal!Mkwqz$@?J3Bw8 z-21~?^x=VG<)0^=Db>oWca;hL{Bqg9WMkms;{Q^Ye!1A`wsntM zO5Xn38~1-*w)jkg!bxlXr#CMNeK>u8kF4&zEqCv3`c`;)+FRb4X1Q%S_cuBx9qrPU ze^MDAwLMF*@X?WtzaDwcFT8X)-9Pn5M_^XWwG$_Ump^^Gy~yL~si{kRUIvBDjj$~F zvEj_@?FSw;7royOOHD!Bw|b z6bc{QRQ1(=iPO)bU3PU?ihG9wmbg8U?BPZteUFz)=zo8|XR@(F?(J>w1yp493$VcSDw5s%rDi zJ@I-=?Qg%ohjPBnO#Lojb;?9F>gL-=N4s~;b8hGNeC~HYD=_c%w%o9ZkB|3r+vV^7 zyKO7~qr3V0|0m|g@2ZI`dwWmUIQ?9Z(-9TV`Fe9pb#_c`i#NUIBy!5pg|R>Rc;D$u zsi#vOH2e!%6A>7D^xt3hCD+7DpMHCLJ8Y`7d7e;B*t!_q#qPZqnjXx(U2ftml68Au z^8=fRIX5e}FB$l^qk2u(;-*S1`*{F!` zaZgT6WJyx9%f7a5s^(-hj~0$~bCvGCyuS7I^)(+We|=e*xhig6_;<^9^&Gp8@!Xcy zx-RpMo5OL#>+9>iyQi&Pn%e#B)pjEvg-r+7#qM6_ddE2Z+=&SXnZNG4u;THCSpp2- z<=17uIo4Yn^(AU!(b7Lw@5FUE*h>F9u5kXJAZ?yErHPe$#;Pe6JCFX7EqQn4;;r+d z7-eW6z z{q)*g>raXE?g;5dg|t6jxbfjHU0ahZzNJ>*-rUsY6jGTW|NG0dNaJNEulN47-QqXj zPFL2t^jdhM!_{rE?7Bs&o|9aDeR;Ribwir(>=Wl=cTZ9HaATqA@+s;UzDOE>-8akB zZaVAd|I_ZL`A!d7>h-Gj^0M<+l!A`;$)^0fvwuyob=~E-X*#p?d8KPsen0s8R7Xti z?Jbj@dW)aFa#DC}`PI^=bFVE(Os@QKA--pW7H10U-a(>}kil?vJl-eR*ix`et^1&&BJd zPW^~KcH;Z}(u=8ga(A2mwJCV8;7R5GT3t3?c{3Ng9}4|>yeSj5dm{ItH@~*7PC31d_m|y~lh$Q#rj)+E_PT1${yi_J7t1>4ChI7^YCO0> zu~{YV&W>F_4mdWedOtg3l=-Nl*8cEko^2&Ji=OJfv=DUmc=aRoPK9ofV@q@TgHunv zpDeGdy~?aLD`sa==)W0%m+xEm_w>(y)!~Mw!qy9F%c6Ic%)EDI&96zS-eSKM*J0Mx zdz_dKANQG{X`FWYMB(Jre@Vy7Els$OAM>BL(mtZxY)*4=Ay4UE9`4|Ny?m>Nf^~|` z_0!BZr(RyJ-17e2-Q8X*W-f91b1iHAG+nKj(-r2tQa9r7oqYM;aGLG!*}s0A2wW_y z*Lz`KqBFbqkq*I-ieyIb#+>CXlaF>!=h&02kRlSWuz%weuS}i5MJ{{~ClxKeuPYpYjZpRDe$rrgFmRcPrc4x3EAl>#nXlr5SC7@FGy>_mTY^sBct@c#L!F1tzc zV`ao`v!{t{?=@uHJ!Y?zo|jzy?%qVr;ANTp%FkbK&AJ)$sy_1kt-E{O{rA4}yS?|N zy32%v&1@MTnZ>)3$A^V{lUu@Ne>{jg@o$-Zb%)k>`8(6?YJX=ozUm9=f2=)GXT?X?xf|Z(rwI$c zi`bY{={eJ=^}!z=N#hrf&&A*Sa(ZXqf^CAEZto7~Fa7T(Vz6T2kz0v}-CqR%`hO+- z(sKXx*R9KP^rx==(a!NcoN2zGbfJMtX~^1N6UADMSG->0JKHUO^&T$QnB8S_|ExSD zxIOpwy6-pl&v|bzvpQm7Q{MMaqS{-2bQw19+Mn~2t2RsZ=q$|U#D`x37DaDbuFg<) zk6$x;u6xLriH5&-Z9QMsw^y&&#$?+1y%$*dMU{(Y@+rHEwdhr3DcT6?e>CWjbbDfy zsvW*g(gRJf4~wKl8l(F!Zsf{aMqZRUiB+en_02ptx7XcUDOIyn7)F%MB{Lc3w^o zW}kNAbLw`cpY~Ur#EUu(&d%8WNuqhF-`rC|JAHm$TI!XxkUP2A?rGtw(^HI3$GqRC z{rQ~k1WhgRYZH}^FY%b@bnEcD*s0vSZ~4ybc^RHiy7Sh2`s2J*En6=X|{gst|dQ>%%>|J#c0azkz?T!J)zw_eeI+UuhSY6&VT$XqpLH; ze!b7^r}9smOVbZqR)2dtUES-qL#+Pcxax)4vAeb~{+g?oYn6RpP}NA*w#p}exv%gB zow#oge>Gx{uuI$|TU}h`7%`Glb9gW!CHLF_}9o9N&b*AEy#dXmeWjRxM?#)oo z{k~+)O8L_}&L4jH=Jy0?9?NSzJ8!24%XznG-8x$lHM92E>{D0wPSA-onma`{xv%IT zXKbuh`K3oU*`_+5swt3daWMDYRASuS< zmBq48SGHz%?&>7BL%+unYkuerE2Q#J2kwa~*Zfn5{&`Pdr8AG>1q*(+)}YJL^E zYOXk<<#Ot1zqq->VJ{I)1s?+{ zebGp`x9R}Pa&B=wwin-zcIzLR^yF2l#m!<1aeY>u>Yt}X*(Y*O{rm5Dj-#D&MBP)t zmYb4+{%kMsM)JS7m`Y4o|%vZ2Hc`G*f%x znK(6-*NIvsM|&R5f6pZ+Q)a#1iQTtP_jlbI*UNjEk= z&RDNqUART^VaYLO%^gc_1sDqkNvL|IXohZT`DYW%`K-NPLe;sQ_xk2H52GxLo?MvT z_@n7hNT;y+COz);n^?KUvMw&H-EDTQ?zyP{ExwOOC)ZiUYp=*H|1D#hHD$r7LW?$; zJcEj#miNu0xBoo-Ql-kDYOI3AR-w#XH`o|Noivh^_o~^sa+EMd+ALcvePCs>cbByX7H;adBqqjf# zooCN-D^F!!{@rbRt9IJ0{~Vqhpmg2;Z~e8W6YaH@d5QJc1aMq-I=61x+S{-0IC8Mx z*;Kmv%bTm}4tFokf8J+Rf6m@qoNIxsZPhov0I`M56P4Ys{l2b|FV_)%%wV-b&WjC+ zn`(daZI1rFw&0>rlYfHo=g8Li>v?`uPI&TnLxYHZUVVvY`VkTRCl?%aUc1^g__2WLs`__^k8RUr zYxX_L+plm*YPMN!+nnI<$~j+WnHoKRzyIvQ>sgYvQ6;Nw%M9}#E;_m?>8RK18N0PV zPMH+HBS0~BkE?cl;kJ%b^TnfEcV5CAZ}2z}%#`@*V(6BPz?l}AU1DoynPe}FPkX=m z$W=jQw@Z&&VqJ`69hpA&N}GFLe6)1SjnAO|0!Qb$-(SCqFEdI#rJ);bGJQTf-=(JD zkCT?J-NdoJDT0k(Hu-3`XsFYnn7QWMNp4wFkH5aMGFa=FNtDbvlb`qV$z_`LGd&rMoO4Aag?{JOk5+&}a7y5@PYhV=)PCV6}n=|lFrZ$H1ijXoIuZ4XP@syCN!&*%S?^;AC~qLTU8 z^_|-SROX$MH7ohxuzKHuW8%V0puW!2VrlIel|n!7@yXb%IL`4sKH=o0yKlv%ChF(M z{Y*d1COdCe(o?Uwx8Lj%dT!9yFSmDw%)zV=+HsDP{-2p?l=%?qWXC@k{>Sj zYaKan-#Ig$<@n7vpXz7$@2b5Y%E?g3q9iVKI{Di6M*HvA6T6os^Gerf`tHk9c^NW8 zk|)(L`tgd1hu7ZxKY^b+%s!6m9hHhJ+z#GW_nl<|>M!f=Sm?tNZC&@`+un0e zSp!)Vr(Iw7vzqhZY@V;-A)6hPVuTc91$IuDvNmt7e#(sr2cuXVY7a^tX_maa>{PVY z9HDu69Pe9Bur6FzxmoQ}aG`Nqfn|r~&Z51mZ%GGs$9%AAHox4H8LXpMHtpNL1#+N_ z5ovGwnTcn!r`7Dt{><*(wPvNe)?6>!J)`R2^8ER6V)AE>aR@H!5R!H8mr|58PAkZW zN_c#GcRIgqx9TB(!-)(n#vOSN{@p(FlJS+{)Lpmrr^uUZ*k3b4fBm;h&EiTf>o%o& zoxa|?@6y$uKleV!u&~%{dOI!iR^#uhGc2#`%so9Tck`BW#ev85ligpZeEgy7l(2Wv zrw3P8MIIK4@Rd#56F6N`I(U6;=Si_1cJaFBtlWEMC|-%{dyN@aDgrW$`{%Ov*`J z=bsvLmBX*k+?=kGH^<`OH^!d}Cd{y#>UAj3Nr!p0`HH{uw%nb($uahF-I>XDx6gCu z{r&g%_bmQB8=IsjFF5x7(^Kst@6MQ&!ApxQzcp?>e7DYVhHde)H9|hZ*@1c+e#I^S zyW_iF?5;Jok`u#EM?1&uy_BlWacq@a?|;wd`PNm@qUSMN8$bAkElM7(*<-X&+v43h zr|^QOm2+4;6lw%5YJY8cb9cADn(sWV=J>_iu0XqfVO&DKO4goS^JpwlZerq9tBagFe;&Sa{Cxx$)d&cg*rIj8LeE5VP*d8qQ2fTP> z3pEGB{0G7;8YMrE7;F;8TTbB4eB}exQDOgV?Tn=O%sI z@7-XFYX*elJ4>0YjUrDh&-cS8_;7`D14FCcJ$76%G@5*Hgv@BJK~GS$E-cosyztfM z$xGorJ}l)B#4$U3AAA+rl{Z)1a)0ELgS`LyY?2t@4x#_g&Wt5 z;19dT>%lL&1U#SIv6{H|@stHiThu1aEW4|k!*T?QwTYS7{a_8jbr{-FhA9Br?x2;n7|IS`vx!-(F z@wdGBy(arZbu!ntF}y1@=JTI#S8LkKv2^vXpm--v&eg~>t{)tkyaKDv^5_d)eB7yW zLhF3l7xDcTFQ;tS>Nd}ImwH{gdFPzD+LNBMPwcp8lUMP4-QARnkCtAm3|8-*erBd| zou4yqUSeU=@o70X z?@hS0)XU?pepcuFUG5q8gg<=w{_5}4xU)0;=h;lGVeLM(dAU|dY-IN{-zCqU&u6_g z!|biqsaK}iUq8;VygzB<;x_guGZTIhtuU{1bA#iKow~I(Q`1+fUUb&g_RQFQSEd`V z9`8o(Ahu{Tfrco)o%w(C*d7l1(8P{9Et`w)Pud3N+bV_gpV}Pkb*D=(^iLn(g!J!u z-FI#-|5P@2Dm&+@E*Ed*I(}JO86~%#6$fW8T^)GhZ=Bvto6=pS85bv|I&#GpKRY|w zd%Aw~*Jmf^MqgVKIxp=!ul^7BemQP)r|A##ZoS`=`)&5qv(ekv{F`0-?dekQ=`8w> zL8F?JaT4OJ5 zmN)62{kMrXHYT%b9G873Sn#jbDt~u)_w%LK*8X=F(~n)|-y>+-R+4f3)@QFf7R-Nl zR(zZk`srKl*E#%$)@k*-f413I^)*UB)%p8`yWOu}76m&H zS!1}bf={d7o*Oay>tb6|?@m4Lb*D>6wacYX!t>qzy^8&MZ>GHvpYHuAqg?gT=G~9V zYd8Nm+O0F`tM13@B|?|&cdPm9ADJF}e$&aR%;`@)E>;!_wC=G9o~JCRQaDLPDD>)d zqtq^knTK9$WL;UI#q+dLZ*#@Tpv+%eU++KnxHaqdx4B`lKkd(Ga|)|nxTm$VXs`0^ zZEq($I@)#O_s;v9PyP7iwIxG;&x->W{yo}Tet-Y1=r{e5mk;%R_`a(*e6w2blIZVo zzsfIeaNK)+ZDrA$AB8_x+)BUpo}ITxNOjYvA|G`D&2#gt)3;V`6q-1Ddyewsddbwc zkG*~wTy1Sj#hTMB+><2QI1-`HB+AG4z% zaFUvDQu?Cn({-aCDm)2U6A<^lU(R;dAH(8VclOuEzd7XJz*UpO?sDXB^`E`lFPL&P za*G^ac{%;n#v}VCtNU~AsEyhyWtJ%?wBp-G_n@UguC-xHJQ9ChE?K=a`B-1Mz|MVH zAC_*(yc)w@yn?|gVzrrU%JFltyY_`@oq2O=>gp(kve!&HE*K3v2PQ=ofo1uZKRgS1 zHRVXReEcGf^Q+qV4Y5e$>5s zR7NYuaN?(byObjJ{U=zP7oXT`ar8;y5(^>2L%}0v654JY#ao!+po_}hZZuD72%?bAVKM8dw<-Ru3YQK1|_IK!{cYlk1 zeiA)7$#OE^+tV`)n}vS;9ym@_*Pga#@h3#L6kW|ym6(6IRNa4`&!@Tx?nddSGW3^S zkNxNnr{c4y;rFYVT*Bujscsh047s3tvFv=@|7y{x=|SI%j`QWpuA6BWYb9w_(IBD~ z<+Yu+cK-f?iKp*he`%b4<;J?;H|MkTy`NN`p7}YqbM=f{XG7(kiha&*y|Y(5X6y0b zWhV-so%?)n%h`P_mupW|7wwhW->y|7yUxAV(y)9cLEiQeaw z|9Ivkoyefq5gxx1Lxs4s*BxV-^Wn@v;~yU%t4~s_wbBgTwBtyJ;NhpDAA6!!{i=L% zAu(3&{F@|KZuY2qah?BqcYoyhHbsBk!*{ir`TicilGeAQ_Q3_>I9pa;D1GuGuv1*W z@lHrmVAqqAsvEr?@lAa3>#OvnFjX^uLGvb;JwMmq*;y6#=tS_x-7DjMt@jDZ31#}Z zdiB$5%~y&n+$?X_8!xiiQ5^qA>33%1i-(Kbe;vIw*HI&C$p*h!b-%amuV@j_PG87v zd~ajkn#UI2-{DU+er;ykvl_zv>T7yICKBsgmw4-FRAyEv>R)4FP#6o zB=z;TFxgP8&aXz<8U#RRq|L?NM)@du&$G)ESNXDw-<0IG1g|B|4GpGG2G3klD z?sq@q;rY5Fmy3V>`7t@?#*WDFz^{w7F71!cUv1UWS@!mt^Rg8(#TolIPt}ME>GZMp zHc?fOE`DbC|NYIN-F~%=1_|aJ42RozrsU+OY<7+xy>s+Iwck&)KGW-#**_U$g7ag|(|yIjp}cnj9Co{`E^-L0*!d0+MQg_?vsDBU^etjpzhjbDXLRA?qtiJA zl{|933Qe*Jwd#}&?F{eNTP1$M!ml*+w-jFu=!7B-b!Pc zE0Lm&hKY|-GXMLkPgfG}QV!YV^mLVwROgh3vH{zYM5il>uWOxtr|vKNsqc5IlRhuK zr8~9djzrM{N$VwXCtjQ8ya{^ZG_$##&-3lBuV1O=fE}@+P{CgCuzP?qzoPK80s-ycpOwMf~NRCJu% z=vTJ!(%bepqs&hsASda^ZgZNYF_Ax)^US^#*9{s@v~F_mmkn=9ux?Bb3Yd0$T0dW0 zOYgqCb?0ow9!%l?T&tk!EpmB&$;(StGVIkGN=@}NIs$I|^77dC-==@w;gea)TaI11 z^7`f8gmcE;{xjOX{JgNFay5gJ_$|hbPrG;VGX3dudOXkY?-qUMTm03r`pJ7Y{*txm zj@iLyb3tL(;oX-doG$Fox?|FCqV@5I7U#;A`@1$x|HVF_p^VRufy~&%V`OGP6%HYclBXR zn4^Ap+WC3OoM|8KWku|t_s6JeN6qDZy`SDxOq}q4yM0>r$782YvsB+Y6`Gy$ecs+M z%f|Jb*j7Axy|RVJPWvx`S{k>*ONk9pIu!Y9R2EgaAG&-qtiDE_gkIW6S=X*QqnxF zrANZd!|u%V>#G>!+-IBRU%V~gY7tZ_k$iJ9ycvGsECC6cj_R!VW zS;|)3>n}X8H!bJkBh{caDVCanyY|#vUb$Lq!yBb0&Gc!??){|+{dFZTzx3AJUpl#Y z`dKc~SvyNsp1S<}kW;o#;8yeRO~sRK5~VIZKb-k=ZS!-ky2rUwuO}X2;au~~p~7Xw zJj48VGwX6t(L%_vL}U2W3B&nzb+46bk9yT@X_+=(i=COJo(r9 z>FX{2Pv5;=Q>0YIceDKMM3?yO{;QT->YS8cKRwsqe#+eAAu}HDT)nC2yW`IPCfoK* zf1RrtyQ^fw;~<54JJCa8{vR&!IR98Axc@`Y=9;5gtNSKtsqk>VXg01`a3ekQ&;8}| zBNirb^tO~U?8!?|_nX79ZdXFT^7imsTQW;5RSfd49tmc?*)FvLPVqt{N)0TRqYLReUby z^&F$6UZ);3+DAU(EeZ|&y`}Bc{4eXp))>T9-aEhcbL7m)lTLS<9wz0LE{DkeIU=emyt( zFBH8o7L)pGP`Y=G>b$ocPkm+{ivN)RC$x6u5{sD={5vjue|Put`O=P6$AmN#WuDKx z@X3w$wf4UGFYJ%ZF#5LC{QQFlKNi*Hzdt?U%h7xKsH>bDD%1s*IbFY+ef`OomzRs& zR2S|0Y~wB#*Q2N>yYs(8(lLM4my^<`Fl$|`sM)E!{qeIYzT1txx>5|EZsZD%DO2vB zV?W8q=tNnkn10`!`bmz*^mb@{e?Ld;N&L<--L27&8|QdEJvC*T=H;{(pFH06E;$`I zWxK$hiV4nVX3WgJn8Uu!#Y1HeqrqyGoC60Gt0MPA2zo9$WO{ph?o#`zbd4I`Uq98S zZ?&oT5OD9@#KR9G5*C{CwKm;!SP^;q+kLi3E;$j_PxUKKzq#>K>3+nlD=SMEl~?C! zbSNGRFh67^_=#=e$%v$>TkdgGq}_K9)jHV|xj%B}nlp9br`JneDHhoIVN&0czsD4o z95{R~ua!$|!>xogexLbvb3>2ZS6;IA%Br6`{h0cuzij>dZ&Tmwsb5}Ro*DYK@!F!$ z56>giZ-iY)+kKqV#`jI<`@-{O8Q0zH)`z;!Z>|2mg3GnVyleB-wZW%_b{6n>{!w(2 zO8ofe=jU_FS#Ge^_ozGZi0j3zDJr~Ms?ogBWuIA%z^+@nQjKe65<|-IdO^m{h3c6ECy_`c5Sy&x5w|DN?S-{z9(nHe_nS=ZMjcE;?mn{>h1;K&j&1C_Y; z)@QbhwYSu^y4mMk-8<##HQm|KO5%D9>+igu!k(f#bv|EPwTN8L%g_kje+-FhQa7tj zJJDJzaBqKj+=^#5!RK`1j~U;%{aYw;rsB))m%^xv`yX(F`o~TZK3g&_Zdt&xkyBsB zV9%2z>%u<~pT7L_ox1q-wk79gg>JiBt#e%O-o)y1eXlDVbwcJvCO3<%7tYx;+vkzZ z4uwvmWx;+`1WdtDD0n_arx8RpMt z6u&*axB8pqmYY|7dd~eWdvoJu(2JsHg2rh+p?b|i9)FJ7@18zwFYme6@ArOR_u%s9 z_V+1och#pHKR36@lVjV8PWCr76F2JwFXOotUG)B5y=+l~<#x&I24Ah>&+mJChduxJ zmD``+Q>_flQUs$F6TBJ)zTL~(y8hl_k>L=c-IoKrzMQ$ z`ySM`{QGP4FPz<9yrOdM&(~}I{Jeg@N&L@A;o~pogyw}vW(c;d+>&+K@odCP`8vsr zg8^0zA07L2lNTTB*}UhvL0f*>=`_BVs!l&_42}89@^@8ev7DTGl>5l-<2%=E{!kfJ zDO8p8J*49D+uPe!J3r~nHcM@KboZX3yrj#~wYRsu<`?>39=vmRmbSnC4D;tZvTjR? zKFc=0@;Zm(YEwW?UGTBh7k17u=9ei~Rk4~ce#6Wq`^>ivexAykb#KfM2u;|??<8@k z>F!JRQ|#&IYCn|u?6p0=v-aHEgC7ro8l4R9ZPT0Er*7VP_}1O(V>|P5+PBCr^Ro$l zQ}*~6w|~^{y3Kj@W;1HnO`GxI$jv#ws~w*f_XrxdIU9!WU%TT~zbr@W@y!Qr#zC^* z-;J}E*KVADx)fzPl;b@p{~5`}2rN)ff@)A(0$O+PNMs&$S*_jJ9>aY?tgy}huRd)A@f{4!I@WUXFizB_BD zbC5By{X}Q-_TArQoDUc9ym_M({w8AMk{v?QpH|%o7ieFkaeiBsR(?o^)T=eItJ^|V zI=mdzP34`wbgqqmX)tsf4pD*rQxx%Q_t@O+pk-#ans=)yDS?Z00AKDqX}vFfrU9VNFf|1*#D$wtecn_}4f z=kN1;tK)YT9rb2?yesv#+1zLz)&l+HWhPG)jpbDD%}LJZzP5Sq$F{?ub!FaJrqL_! zDriYfd%uUzx? zL6`zd%&sT$x1KFOq@x|aW`Vs0f1+w`C{w<&NY1@YuHU)k43Ay#SMh8MpJ`a}Y(~q^ zH2G=PWp9c;Jds+!B7LSK{Y(dU+V4~y`&BWXZhcbOok9Co3Y=p5`YOVBj^l^O4Fwzb zmH3F>nxUWXFpcB4;X`N7Ddn|+#JvR$J{@UUDMQ8%-0EC z)?*ca{_gJbuP-@vmgI@wN-mN+IGMRgW6#+Mhk2*PJWb5L_a%F8-=@jSd?wG^TYu&D zk6R0z5)?}+i~B-5b6JxlTh2tE+RU@9^0b+#-|t6q2klyTZ|SC=TX1;oo7B6p_RBw& zhpv71er;PZXh>jweVFZmmjYRjSKQZ1Q*M#$SN_6m*)O2Rb9+nWYLSq{J!Oa2OkI4u z@AB>m_L+xv7=AmfcYUvHaQ^w?n;hn4RiA4L7Dr8Yb^1Kduzrq#_@`y^KX_TwUS4UD zI&q%;_PTl5=k}Ku%c(^+EXdP|y|pFH^nj41_-Fh1ikDG6ywUpaa8^)<$;gVx1l{(Y42mLn~7^Q_bj2^S~* z3SLmaXow1lkD5U{7HpL@?W*4)7`N?>S?)0(*?+CIACwx}Cur|}CbBN$SN|rD zG@Fzg9_^QHo<1rlQjq>|EaUR3)>4tjH#pv4N^7!^$1@>h> zwsl`!R>k{w?;|Pm?8M&O+^H9&YFiyw9O;?$P5fuZ#XrZd%`W!Y{l>dzuC4!t6Bm=$ zN{R*Yajw|?{Y~!NrkVnQOy}E|mV2jHu3DJaacIWYi+K|IZ|sY{%-DMS&f^!yqqlhq z&H3H<@V<{*S|fv%ltgM|EulOd0*NJTYl=^U!Smv z@z1-S)-rp8osEVZk@K&wT7Bfs+F$qC-n4IMlS#?7uF39tnL5==RA$>->Ez?S7mQ!d zs;&6<<;B(OIb21r9X(n#W*;=mWIng~d<+Nwrgyf#Bc9(3clyM`*R_88_f(HxN$Tm6P8@$}lBSZ6!iC#m}R{=VIpmwJhwI(gyYVkVKb zA@??KaIFwXh^jLF94h_vAZx#&ilf~kr;l}W4NmTIdl{tqg}W;4X=2L+pT{dV6kHU# zx;#`%vs~|~W~s~hYw2@SqEAj%-)?uGLofGAPKRo@_|-&*4-N(k>z|3_@0d~C9HrDQ zIcekjK+oHWr>CvIvN=rYe`Ma&H8MWe)_(uK@72}k?yCRRPKbHGZ}qRzz-MRXF8{po zp-qRe8^@6~y;HAxzlkq?_Gp5_n^iSS`@f#f%uuKQ{>*Xwa!L=X8r#ivVCFI)&9~IN@fPa$-TF}hCKRv$g2GO`}#kbobeWMyFxs5 zj?6Cp(y6y^U)~jmy?^pA?om)XxcSxJJMUjg3O|%gwdfHZq__I%OvQ{cFQl!-?&0O|*6TjJpQOS}j!)@6P92*Dt?b7{z&1eQ68$Eoy)i%)a=a!BZ57l-EW^uJN6Rw@(r{Ir`=Tm5~7 z!KTke!B1az2?(Biwb<*}nVG8I)7ETC{j7F#XYFj2aLe62mC7#?zPY9^;E;F;`&cY zcv~9R(ZI^ZcB|ujm-)?KS+1yPn-*`9CO-enzUdo}?ARI_7hAe7CnNO!?)Uyizqh}v zvT^U1SY&Hb_U_i&{^VsY&uP-x70tsxhvja4&?R7PZCzYDHy3V?+cd^TA)@0)hw9D$(h`BMdqS@?eaRL{J$W~vzbMgHRTvx^J;YnOkj zd0KV-@BR7a$z882tLJ5|R`+I_B7Kz|peUJa%^!!`fHz)MYOIsH2Q-1%f%K!P>sEsu%*F@~|Ip5Ll^0oZx&I-d%X>5nq zXgOAjsm{B(*6HV_sFuy|jb9%VK9F=N2(BC_{&dj&I zt@!+k_||MMch$0`0XyfvX%pY%DSYhJlTT^(anpJg-Gz!=RXsl?iP>%8eRSr=#KS&@ zdwUk_d6@9+b8PNwr)~Px@ya&e8#c&ZTm9ikQ~5;0C+yKXvwH6x@qV*@e~(ay+lQFV z(k;F%y1FxdPd|4$)t=3<_}GsP6AA~rxvfp+eK3wO2|4dJ;fla=v5(_toxgP7N>b%Jk&ae-}~mJr71ryH1aV?a6SCz zFgJPXi^%8Qv#wRX`@-02D;r$Q=zqR=xoxB2*DpU4*0aAYy;pYcdCi^K)oi6oUrMJ4 zt(>TTVW*$W_bu`k>KcdN*FM>BFzP_ljAy4l@Emw=WHFKZ`M(>xmz%7KKksOB{NE*2 z?-LsiGBdw<|1UOuZoXdEr+=HI)3{~L%a$D8%subuu|1V+kMBJAv8ZSHchz%^mAA$J zZ~p0vG8w(k@j(9b#>eOHottFlQ)QfaDaEqtOUImm`pou%Pd=^MhZH;x1hYEbXyq0! z(GW{3@m}bZacQ~t`n}B)RzH0;Ra>k6yl1SN>c^mY@tt4J1f36&^{Du_j7vD@^0TAy zuS=h6`-YBKiG?N52lk;|DCX8647%bA2Oey7?w>A59(zgKND ztXnR^&oMiJ(ecRC4NZG2)b0o#&#wD7^IU7{t=`{D93~2db!Z69^8Z!3#`4WaA zS6AyT5)us7KFDFr&Xz8a+OOGf%waDX+9%%;dvK=tbC$5@u1{OjoKiks;we-x2-M$T z<&1l zF3Y`IpK(BE+l)p*#f_O)^R4I2dZD6mIRDF!&dIwtCOvUpQGR_-EgSoB@$288f#yN( zyfr?Jyz*wkf!7`h*AEH{EprlgnmQr;)RSpNZB5fu^y2-ln(Wr5DD}ct z7LNz^&I$$#U)wV`$f}}LLqZ!k99~ojeouW{SE;@5>Bf(rqE5_;H)VXnuqtThqCYE( zk`7K-a!X}ZS)TN#=OODPe!R&(_jD&}ih{28dvKd2PDSS9+qzBV4?7r&J{|}@ZFzp? zUhb=*m%c_`US1*cDARuaYp7z>^{@Nf6?~kx>>hTMSuLc+ z%{5I7t$On%+{&6zmc}3{cM^Y(8YxJI&sT6*cv`(};#?##6jv;`aI_l9HY8(NJPxRH z1ibjvnV6!EB8;S5qvWF;E|W*SjU!|RFt$5fSfB}9K%%j|U+&~$_x`6RC#!#Yb93{7 zu0ngx7HOusx;i1lB$rMZ%Sj;O&X(D{$eF&NpP^OnyTwKkP=5HcoWrK}SIE12yO*=9 zTmFA#-R8~v{27|wK0e<6_4&iY?Lx{`C7l9|eDC(ze|n<`(lLR7bHai8R)+uQ-|aWL z^hO;dw!@P_>H1vja?PThC%cax(r4t@x#N1_`OCyF#eCXlBe{AQ6`Ibogpm%NXE8`Jn@ zIc&l#UlhDYvE`6`W4Kbu-5rI_)7D35Hn;Ol@0+`Sa_8h_C%(yAAGSXm@P_eITgm&2 z(WgTHc-%W59WYHd{$b$T$Lc?+v|6})k*!w>Y(#9;&|`EtN*UbfdR>K33Cx za_Q-5#)@frkxsw9zgFIubd;yy&Hio7O4pyPyv(}UdGFsazRq=%o>nELpPMuFZuPfQ zPqo9pX77fcz27%Ec+=jAS08_F zwmx`w+g$s4$5pkzcFqY)ev%`4YWh?=+xiFj2PAzAZlC*JZE*Ci9gkr4ubxOD$Fmo{ zy;Kj4ooD|0yroh3J*Jnpb}s(6cbCqSr1YOfOPBsX-~8nFJKNMpKQ`)l?U@yO@6WcT zY)zqh|9M8fLMk2lQ?XonG{w%f-LAr2YQzqNCm^ zFFpib+Lya}x>Cu`%Z_`#9Qu8{BPMXM+tlqvDbqn?XJ@0gZ%HWf)>ZG3e(YDO^LY}d zP2fYH4_3WGs++tQzW(;s`qJ;?|Ah48Y*vOou9w@&rvG{Vis@Axx4Nh6Ob$}*t}gj^ zT8pPpe@pJ+W4@n0FHqcdi{I{qvgc$K&Tm2q@vF~GpJWqhH1mTLXX8P$J1ZN^Ys*(X zvfp@f_4)o^{DR@@W2e90T~?)9TPOMbpY}@*eJ@1g?SCOtqSUS(1s9Wai>B&_yX`;m zSap5IL#InC5^HDLr*CuV7W2LKf3u_CT&utG@?wG&D;!vUD)_(qZ^IqWbYcB}hsJQ_ zH}&&Fr>~X1elp*9*@;z8ySF@O{kuAB{Z;*%h~<0lv509G{=2l)J7`}{W~YqhrsKV9 zV@}@Ro%!iXrrdn#d43hj*SWbRYX}=w`7JBV6(77ynF*`Kohpm6M>5qK#DJGb>tsQv$LI%w_0%HX9X7R!sT z=M_DD6)JgS|9qjAMK6+nWa|{wuZ{iQpL1)EYwJms33KwFUubG7);KbAb9(B zSD2V&-t&rIp88qsm#dVM=eh0oFFjhYm+^nj4HaQ^|A|4WU8{d--Q?dH6TiUaxMltM z;J+u;P3`}mS;({Q_O4v^$`wUl|6JKV-TAk#qyMpI*EuJrK7Mxg(i+d?odq8k@g-W7 zzUtvRc}DMOm)Jzm0&y2nskH5XPo2*H*W@}&z3<`E<%xfHeN(z-RkW{H&f4$Wo4d;o zNuBpz)+703Z_InIyZTu#tJbghaQ58&(#d~+^S>(o7qBqRs>LwfFZ0HNdH0^5w5Yyh zwtC|E@Vftx{r9$s?>Z-YJ38m_@qT@0cHRlT(c4}>xY<%}& z#{RgkS)pIQnys#L?-KF6ck<`9Eg9do9_f|7zA&!*SC-#_y?YZ5CRrAISn#VhHE>># zD$Ao?cP}hodOGaI{r_pIHir&#%$v+H-*2+oR=ut}jj#XTTyb6Au12MI_O=VJ=k9-- z&>E&&JI{K(&&x^QUVYtVoqO(YoSx^3dBH#a-U~c$`+KvJLu*#M_1j~W-|ox2`zop( zesbdC<0`(dLOw-)^iv$Um6tJb8P znc!&e93xvl^LN?%d#exo-4FfGr^4g5dYW{Uo{6?pr43!SB&A1g&AeroYHn%9KZ;L^pn;*Ym6 z@c8`z9JHw|jOzat)ljO>FJ$lkvsRUVT=$ z<(Lz_wxx0Z^K;X0?)MeukhJ*TUBx>!q0Bk=_~qwsLn}S&=Ko!O?tQTTU;lq`s@HVl z_XWvcW;*=&>n+o4jfL8ibRu>{OjscoS5RhM`fH2bG_6#w?Jas7^((TUpSv6MxPHFX z6EUY1XXCwCPA_zN#Z>+ATT0Hh_cs=|j5p5CK|_ zGPOW1b$j0Jb*^XF`Q>ILRaJg^qPg;4rLN;WZ3(9{e6m(+)^E@I%Vz55{Pf-4>RFmC z);9!Im(2@$E?IbXa^bfnxxbROtzR9!KJt6e)qbsP{$pFUT)rMS=q%*jxv(As2UVDH3Zke~&59hNb z&UyBISMF~<({rm+F8;9$+xzaDXl`o-_cDoSj%^9u)jyA&o&9O&rv=8>cE9(Jk~wN- zv+>J&zs@Iz-Fl|oPxlLD@~XPI+U46*?eJN_Ywo9Zr}=)dQ(4z`T~KGa(2Fsdx4Fe44`T86D?V?{sP2^{+8SRk7}EZL#ej={ga z^<8PYw>xI)zP<7Banuv9ITjn&L~L@nw#sUI{!jPn4jKDGr?kIj(ec%P)(dYvarMV) zwoSR0tNu#bCathDt9Ze&bG^%)`E_q}*}uKLqW|gz_qC6lZ*5{d3g&ADyXlHKHEh1U z=O_19wIeewm~_NkU0tj5I$Zy{PCM_vNbca|<9}DR3dg*@w)Xa=4S~UD|0kFJEnPkR z$-1h5A zS#DI;vJVSBrOdI-oxOK%MEizxovJSqK`$S_s#>;BzUtdVzWZep4;}SBef;YG<&ras z)=hhNFaO;?wKJv)7E42%Ue39>IpzO7*-tgc_HCQ0f2;ky zy)Jfjo81+6&gcrmcHh}{!QC-4zC5}f@3uNSe`5W$H51O;{dHLvzh5u@%G&kE7v!&( z|MIt`SYg4e`$~I`Bs`z;{lQ%8a@E*dTlnVX&f6wAuXlrUJOAs{g!p&cZrA-g<{Q0b zMQi$PueRwiuj zSA}i2%e__mxWHyZZ{#aWo{wvyuJ+4zy$LzL>ec+KSLS<9*W+#p+}x}BZ$qN_o#}sn z{nrV#|LODTiS~+lFXLBM-@3p0QXJoF4rkZjTq1hQ(hjdts||f;s=Q$Krn$Ro)~`3u zIij(5b@Fn(YhPz?&&ln2xpa5!{6$4uYD2yTtNxf5c>TRXYxmSCO|D)Z?R|5<{>@k~ z5_iD1>gzC@087?0@r|ecQg2mqwWj(zfV^ZCYcJamD3=TF=JK zJB{DX>k+J5|Lr&P>ksdE&OG~L8~*qA1(#2v8cI{ItT}Xl<#Yab%)2WOU9OWunKr6v zcbLHyo3GWsuJiG6k1SEU<`1eZFR%XGv~bVoxVV*pyXRHy{Cm4f@~ep9p^FI|^)1Uq z_w2c}+*{ptSG~SR&H8(@N;)3#Jw4bWeo<$pvG;!Y>P$hF#3T;)KMSM9Pp)&4Q0#la z{GPos6h z3S0-x;%Ww|T)*eTq5gYWZFDVX#lC|d9(6^E8fq)KxK_+dtahjCkn7A_Q+}(Ts&R^dd+%6pgj-2+3zv#?QkW=*%dAjv$yPeIC=kr7M?fAZxVRqc# zb;o+7mK~kXsKogxcz_6O>xHU)3Gr-t4}8omGiYle`T_v+?7XGreMu z=gr%8b54Gm$JXnq@!yx-{g8AxXQIS;o|l)sZ(sZOaJoRjfg{q*>1s#XZhG~!EY~`8 zR!G%Pc_d=YKJAb@wDzMT z-{FdnkD_khm>#k9@Quap{Yz)g`oXx_R;gw~*xB=?cBX$CSraFg9WGuJ+n)b)mC&Wx z+WmVksd}Hvnaa$wXwuz#VTq4-_@#YyXOftgxy*KF(bG-hqUFEqetr`D>ppq?>@5=( zyZ3wVG)n#QX3B|7&V%PATwK1e|K1R{FGuokekAu-_vxVH4NX-qRV5ccJ2!dTTkBK0 zPj7bG>m3QHPdNB_W$5fOzNjR59|Qtq-bM4w;k){!oxv8@Dgw|JAa4O|7q5i`wfR zy06ozxwa-&-~QXn#MY@hn`QoA-k<(HPFKeA`Kg24TWZ;M@1MWFLsUP^W&fX>uiG~y zADL^o|Ht`19s3s~n|bV3{36hH$K2qFXj4GrewY92(`5f{nh@T}B=F@;XX)oX|L1*s zm3e2&(m(#3Cav6}Q_An3&1?;Mb?VTE*Nab0eR6z$-L;(?d|o^_<~#f9>3gPc6{i{` zHU;GJ7O6@)9uMjH6LYuv%e1|}zrBo2i`?RosOvDJC}Ns+@U2g0jDH&@EAr^St%y8& zXmv~-vT{ScQ=|3lrC6$@w%h!M7x>x_+_V+TeJw>Z)XFOpN zwprpk`B+uh1IYyQJF|~Y(ctAjez*EthTxgHJC(BfR}4CI%RX;8`|;5)=>|2&uJ&!2fw{CTA#lu6^8)tECetYR;d`+9fzsj{%T3?E% zObKS{`8hZI?+;gvcV15ue|mJL9F$CR-@DSucXfS`u0!Ax|Llu*>`O}i9ctaBpLToa zhj({(m+m{PpLKo8HQm4U=_jnicg46imgknLGDt;l$>@xGd+TSk=X|@lapz}#*45qf z_-2yD%wmNN5ALt_50##KIPB}mSEn!Ub9Q;X@LvG);R((})|`h2QxCnl zD_ib=Or!Q!NsxW5Y^m!-#pCtb7tc<87};XeQxSJ&{_o|Y=eQ1TN`Jr4sz1$ld8B{y z-r}J~-2R6x-aW)e!NLQwQ zXgsLBvajl-(dM?&pp(bfYb&zt+&ICTM}CVqli%uTzM;QmZJkS0^*^3IQ_xx<-=WRn zZhSBHYL5Pjg;!a^&wP9&8(PVCu$wKesQt=m86D@glB&%AUK14d)xF%*ekCU4Mk$D2A9DSl2x1aNjQ;>|Zl`McTKcowBFbyjp5qyLG<6`^tCLzwJIR z>Z>i&oALDO%?DpujK8;jF8pogVjEGiyvioG_{)obZ+A#{sB^D-n7jM!A=OunN6V7l z?7#juzsH*wp>St%359EA*s;2Vus(NiP&G+Zn zZ&mX?(&oA6|HJ%>#I}j$XC?kIT;9>Se?$5=OZ|)c9Zz`+f9vE@Z+FbFU9)G#`xU>f z@?`2iemizn{HIF%w;iwDSU$CyFbddfuc(>y?WXU?_DOd3|CSVAvgD3E_>t#H&>iIY zkO#~xah(^Qp5dM6yf)hGa=oqlxjx;-b?!z6!AfTZ85e zOxE@Pk`i3M)SWrR*4!SEEBYzPoI|T$-u~i4)inDXQ zYz`cpC%8*LUQ&%*_^DxSc+(9h)hb2FzrT2;Q(hk0*{D`;e*NI5my;Ws_~H!q8n);= zy_mIr&uf9UW=XZjD>iul_Rb0T%4Tl%tyo`cy=uDiqz~-;@~^U+`X9cVQ_lKav0XB4 z-1%I)O|X`ETe@SjTul7O+eOzWsd%p0so*29KbeE8>~OyDG^NU--+9wtySX&6FWg*t zDXoI%;3I8Ca|7DLx|J=V-9 zIxYGB%9>TNWySaW=4edh+qivtVVrx!dPAQLh6NV{-s-kxyLO9({xzF7^YFD#seQXk zCpv_kIU;ea`MQX6oNvdXZ}xRFk`I0~dAdUdsiXD5mMKxKMDh6r_MhCZr+cfo`aMbV zDr@m`d|@fplELJkxW}fBzS?>pv&Rnm_lUvis``4lUld z;*SZ|G3x8rtXmZ@bCc-m7e}t0U<}>hQ1?7*ZSLd3=KVJww;uVYlyT_%nnQW(9_T+Z zOg;ab(WZTx9rW0rRJOW|2+0N)oicH@3*Pt zZ*RSQu(kE3@kDptxAW~%7d0>EYFT&SO{cHMmy|h*%MRYjoV_}GdEmk|AH1A1G(N>U zK5^DFPhNd(jp^!72Y>&&*LRIiT>Ic%P!}mCWNrDwI%hrWmX(S!ni~Di{uXRydl!6T zzkYqexvlbtH>-L-^NDJ4lQZZjDRWlJy%Bw0_{i+!b#Z@s1u_ol_(pCn*?#t!s%@aa z!bA7A-QJ>VGTm^|@e5aFgZ|tLUie~Rrg7TeW%bhXw&ypBPujJ3bxiPvnU~d9Z@A;b zxa!akiNl+>%saKWn`x9sCszQB<~N4q)EyQXHos)JFeao)&-+RpEibIp z#r9-|t%+Kj9$~^NZ(F6}8@ed|OhfyTeJ3_I3vjA@iQ87ws=2In8fapqWag%oE=Oy> z);-yIYR=o-%&Xg)L;19iX|q^XT)1z3zs|pC&*W&IA1bF5dNj)3+=wVW(Z8hJqW0la zHaTIBrrwySV}5h3bdA%j)WXeBoPIv)=lTf~EG#~!iqJDlf#?B?WcH`ixh`^a>2Q)Tep&Lih%{1yIgyQf2Kb>z8Ue{S3t z;WbJ*HTO5K=+57>H|V`ediwv(T+TbbN2QO;M+sEghRu*Pe*t z%AKassuDdZEJ{Gv#Y<)3pUo+r-)h%R_-?#yebpP0wc!x+L+tB=1 zmt*T0`CEQ(&V2uV|No2MKfa$_KA*EC=L7S@=gR!sLr$NQ52&n1wY4<8E)bc+p<4*L|yy7*sPAvI&7)ev@5$)a_{W$ zd|%YI{`7{>YP|hz>F4&>wi1fZOZvs zv^P8UsMhvO-8H$lw_CeyvM$S5zI94b%#7GLNjsO@cdIs~%jZh-oVGCd*_g&U&FtRY zB^$*Yc=YCk4~5_eRWCV z^j}VSET+D*O|Bg4*?3r~N8)~QJoj929rs^l|D0?u9(Z!9KC!wQr}qmB_dgyX=Q<+$NU=bJ=qh zrtr(0S~UMw?8les>{$nu%~%_roq2TB-c!ny^JohDwmlCP>|{v0P_R0B|HP1$L7tMn z_w~D{Fn;YhHGlu%AQg)b*_YnfZH-yE?b?G4y6O6vpZjnBIi^=3ubpcwVRPKCwRhIN z?7WxCCf@VpKlE(7`Ly`(*Tc*99o+ra`XSe^p3C$6?G!hZZmBrwAN2FtZPr6#9CH&N zbG(!dEfkLgRJT272lq`Ex#wK!+PwQ z{Oi!$wqqMHK^S*c1cwt{_sO_GAzm%E^W}9TMD_go|(Obtyhkcgtoz73>=6(Np zh50>^jJZkXiQn5rgttvEGC$vI*>?hce?PZJn$uzwVrVRRYh7Ba_WbGc@~CdrY1+llrdYqe zdQHk#faCARy1nxpk|uQ=)SC7^aZ`_@uFM~CoeA-rEMXaI#dS=rR;qc;=x`Edi(hPQ zcPos0?}F0CgL>06@`5KzaR_agEITdcYw&4i#RP+O35`sX!f!e^3fAb99tjeyIeGj@ z#+})V=f+;?(s&rGXF9Q!O|(UG#+#(?mOMY)_ZVG?)N6d2F~j8`|Dk3#!Ao4yiu(MO zo~y!l$GY=A6qr_UNM3FG3Fa2I4gAKRwuaY~N!H{($*@hV*%B)~Ij43_+3&ShId2rU z|6IR+%g1lGuTFC2xNN}K^nv@dy!eWx=Ju;)bvK#_-U=7+a>%GSsVe?j)#{ytVdl|k zUoRMCUH#<9X|l2S_wk+6H~n;adyQSLIj+J_-?+t0R!viKYTH%W@;iFYaaH#c`!;Os zzS){(`HC+!<6nK2F@w*O4bJzoyMAu}ES~Y!BKVzvT$3e_>i>VgvvRlmmfN~mb=~>+ z4FTDL_e!#i=Gw={>8dm@5c=pG(G_c!d-`Vftq1q-FP!Hnz~s9~RJ-o$MK{eACg0}O z?&_a+;ivucf4R~3bMALCuk!PsVG^0Ys-S=V1ja*GU#;p{P}=rg}%B7rYSm3hzm z-p*ZevxrCZKHFAl1r|Bit1WV+*Ui@d`+C=Niq*kq{1wMHdMlJUx$e9kV%_jA=-Bq{ zdEWCf9?RUSjon=`W!b6uw;d<5RUUgL9C7UC2FKd;?H(B-y5UZfgpPK13of~}OtLV+ z>3)3XM5oQ4XDrIpg!VOT3ACChil%{-?$U-~a8fKYFcPRls)ke;*h0ay<=L zuMiTq_+I7>;#aCZWapO)YI=M4m(2c!yjNEw zGRumZl>WB+yXMKc$LAy&+o|*=xcAlhJ5E-&_c(X#@o8=TWN=z|qTZWV9s3sb-YONWbiB=|DD&!0ma0gT1IODB zlkdu3FWuwRS`@UbM02w0>*Ttl*{iFzf4p}#)H-?5zell=UmhoAuA8sRhTJK>H8v`#5SXWPCUl$R9qgHbr%d*T=?;6W;n6j*Gu7 z`FHb^$-lq-2CWXr{rZA;LN_)(Z&(t!uPQmH^Uz7}z#t=Si494QI#T^_yyTG*S}3Eo z=*O-8rwtMx+KXpQNj7@4tx@EKi#D#~wdcL#?w)V8W*7H)W~^OZv+zzMGy9fY8;JvE z-##kz?0A1LENXK48)@b96*e)m?0?rROK|tT!7pR&~kY7GdA!18m#HyK7N-jNjZarHZ_xHivLq^VDLN6?G`QK=gbn@wEeV$3;^W`>DLE8EDFw5+A*u@U4>QYqpf#xPo1#u3)mm%Ccw9wwRz#6+xML7{+8Em zt)2D{c|DR)^MNkY*^ks;c=512FV{*a=ZFe+Zr{6V`sKT!`{(WX^y$G0=a1qguC`2U z9!!Nw4V*Q}TYGYzp1S|!H|u?kgT)!v(f>}?tO%9<>Bo6G?fjpROr@uv_sdSdZ}35O z<=nL%!aRz6W|=#JI9DC!T%^?dIHsQO(A-yBUu8Ll*Q*MgnXSM6*20RFJr%W6E}gig z7QZUCTAzQz$I8-AO79SCED|I)5#-?1ZH1ZaBlY8nq*;SXXJHk9-2&rn=eicl1#Ay ztqyZwy2o+g-{pzQ?oXFQ&GK|-S~=GtYU#|GmY-b}-^Si0Cb5MQ_QXzQC^dN zf|mF-Y6u-TCNty5a_{3;-v%BzwLoYB!z+u{7|sX-AEb-3=CCsA#oBOJ)PQf83({uf z*u6>PcI1tvUuN8j{9wOzilDdgOOFRJ>I}E5ZY&f&_FR9%o!HMY=Z!D>Bf{>vFeBHl zbIUKK#ew!49Z+VJc(H6^UjKy`bCIGN6x(?$JM>iZUPu~(7T8U|JZ;v&gfrlRsP8Nu zy}0D$2IP!|%zot7(6nyH!t^6hD^ZvIsyHxRRB><&H_0^8L1{E09MQN# zaKQrY(O?)222h$9O%32|LbYJ{^}}sX)mf>?4|km`D?g>w2p_ruDwU8+5eQqsi{+BL zrp)<+fBt^IZ&Z9OCvtPy+&B03x^sz~P+#gj71VU~e0FAL?V;D#>lf7g{TegTB=gDZ zo5oKMaqEBBIsaCDkEC^++Fskp^v`cQ^F8i zY;UQA?Jj%0x3{-Vv;Tib=d65%NBr*p`>L15&UR-ycCZ_JIWl1d%Oj;1O=^Mde*Gs8 zI=7#DP*iwr&8J@-i9uVvQlHDQBnq56pxP?<#Dah6qRD@Mf4BZ=U-l;A!kn$OTY@iC zKRfpO{XSiGJ{c4H)YsQ?fBlIUU6;5g|9;(bJAdTT48eX7qd4J_w|IT@SNqKC3pe*q z&`v+6ty23dWu|mXyl&LiiJHOp?ZYMJ6~El`cU$z5+mBB=C80hZD%SGjr-7f8m&E6~Wet!M`spiM~CQongzfiV# zUVY&NlRdBfPEOGbUQqHnTitI?0ZWRb?Mmt6{qoa!B#l}=Ju2pp3KowMsH;o~3Yrw< zJM-A{n*sJYm%9!2w7u=y9&zz?>MQHXcc#zzd}gNpq%E13y^gyp3m4qndKmAjLd7>A=Dg6mr4z`RVm3*Vn~b%`~5;t9+in=9*wg>YfiyFRv`zn{e~a4$jF> zK0H)5dfjb#X~n}>yPJppinH@ieZN0mg`H1s!X#C%6NlGEd90PXDqAlgwD<41-9~>W zpP$0JVQbNs7xyRG*V}0Z@0#-E<;_^Volk_`mLEM8|McTK+pj+tpYpqUu(|z7bN}*_ zT1!jIUM{`4#O*%D~Xo z!DHJB)g`K3_Z39*S1IVqS2+}=oPTH2y=R}zo6y`Rb$8`om);Z$tXvVje45RjO|AVG zvNtD{e|f*SDE8r@bDwRH4>X1+4TZ+diW3$!t(&_4-?JrK^WV$$O*p-Cg`ZsJ*9m_< zpSOSKZTCFl+m4!}Ue9k$nm_H-rub>6j}#^^DO%d~t7`i3U8k4NKVR_YLCW1-_FwK# zQuTiNn17juTmLCubCKe8u8&!o>?gm!Tm7w#r|9LS)S~;%YoEkV&3k-6 zy8iyT_ywlN6+)WX!Ve!i`=oyVdb4|5)aHKV-gdZc&yx3!9zPOJU;DMEe*eBt517AO zp8wE-+FXJZQw=OisuLEO?ONc-+Wxfe!WYgbMNfBmWmh@gJ{>=s`(J(hUblG_Yc|__ z4w2uv??kB;2S?<+%I~(d`@%Ta^-Ng3Lr9>vHhD=;b@7ytRTY!>?N5B{Hq$zPpI!O? zW`$>cS=&!Om_BcM8}BP?ryctHf4MEFWx2lj{N=t0s}l|~eJZ&hcWL?c$&Z5{1S69UOa<;0Sni04@^Z$nnd(-8AhH{>IFt4txLHWt9U$1OFrEEXG zMRx6-okf|A)4!$sd~dIsaCqIcfAtG_ZnAS#Ex)uc`|7g2Vnwkf7hOMH`pleit37z> zS>?4`$_-xM+q~T_e$Nwi_Y+rlBr->C%4n?lchVhnlxc1KtuOwmr?0L3^+#RR#yIb! zzy0iBIqc>8gEgRm-0S=Q%L#KVe4udRDJ|XDoyZf-jHgfsu-)bM9l_HWGDbZ##1(+dv||Jweued+W9fv&yZ zPMz+%yT0bm1i#$ zt-EcJ(G(lM=Zs{WVovjdv)6Qg6>hw>@MFWbe}5X%mo#pg$ripV#8Y?6EW^*-ORs*N zd#*it^6H$Mmu6W{GwrMU8yZ>Zbzr7u@}|98)q15eayKZu_n&g+zqkJI6V$;xcz(2q zX3|u9acY9%Ua>sc&_lh-r~ZX4c{gqLYODUZ!lR<6js+`5?oC^}>F?I)_;xpmf8XBT zR=*(Dw05;~JKxD~vet8-pSk4pyvb^1(9T6-MKiNQwZqF;Vk_jLVs8iv@zwQC;NGve zV|B#FrZYc3W&gRtS9jLPMMt>i;ZntC)6N(E{4{k_v~K^Mt=5)*H`Gqm&yPFqztD+w zsnbsB)Ok^AGcM&F?MmUbInw>(uD9F%Usdb;__iEVIG_`~Y|G?5_iBHibU(FB{1fPC zUdNeB{p)wFiY-2S_0!4YcS0{S9uvk^IW?{ju+XjT@G3aSe9*7{Ld+qd?Y7n5wQh%3 zKmBxCpZlM~1ZxAK_hr*#pGmV#d%oA?M`~{I>9_iKEVpdAqZhp`rTOc#Tif2=KD+Ws z2$Na;bmR0*Wz%==D?4jdysH1P`o6cHZ~uwdUbiE`QqJ#)Ok>Ugsu zef}qYw@uo-+WLH_U3!}n|0lfTPpyz+d%m%!_``+7qBl1RBY%B1`rDqaxBE@dUY^aB z5{thdJoFs(q#t<9ZBU$$)TF1vX0}=3Mbq!Zi~T|C^Kxt7{cBe(@V7U1h+h@=wk-3q z)lIo6xBXWXzuCrd_)|fIQAcX)^|zOq>Hy=d61&|_W3pb8`P%+2e9Fpqqi|9m_L4BkQNfipR@LjygC`GHrvG~VG%q~1bZIfK z+3JJ?veuf1w&wrtC_eu!<=%E~nf34eE2Fc8A2OBk+eowbuD3aL?s|OmHm%)J_p@(D zg{}^{=9qNy(IWZjKUnHr`(&yrAAfsmtup(PQ**7(_U3IOTh4FztvoF%uIA&>TY5M8 zwPbX5A1Sra$&C3Eys6;A-x{wu({%!4mihR`C2_1>GkbMd;UZTl^Z#32|GPyg_E@iJ zDZg;1nb-8sLYwxzMow|kKij^2fBZUQGkbIK`I)6PeeS0xi!J9_K0jo))V8dj60b60X93)ed$)IgtI6Kyb(!}!dLIxt z~uTV-jhfofC5~?z(cW^@%r@@tJCC zuUbYNJ$!IRz131q_Umii^BWg%9kTqe=lMP{tG~XpOv9OWIeX18jgr2xK5TJc&ujzF zK6(3ft#Ru9YL=e*F)Jq6wO@-{Iy--Qk?87E=AZYKzWa=$<~!Hs(3MqkP~qom6r)kZ)%eOIxuf8CUamICn-g=$0(Ywp$ z?)m@lc+`Z?hZi0FCDu|DG3j~!@mDvO|ITv$xnJ|3K#Tp4;@x+47Fl{5Z(NkDt;Kf7T{+0V~UCoAgPuAg4>?#@o{S*G$T zJeMz9d8}Vn_v`DcQ+Xtfe%xs_Sas{|_ESCnc2kU&dRu(&3xd!;*lch42^o$EIA)Fv?^co!KHK${hRvx|Kv1ZI^Qp69L6VOv4SN~+~arITGhv`;;&x+ z|MPo&$eNX@3q&{O3$v{#qz?b`Oq1>)bTZ zpsdP{El+ctw^ztH^#!SVNBrnH!#(Y^>*cqB-!|W?$!_8+y0`uF)^CzId9{Df#vJdv zmb?9)Ou&iO_6;Eyk2!vRnRUId-R%65miaxB#-~bKx!ZfW4(+U|{M`11{j8l8w(5;h zs6(xB2iLAeGbc{rSRFh2+NM|at5Y9-w?FYoRQv0E>wB}VzMt^#@40&~_FDVQ!!;Uq zLvX=@(|wb_mHvD>{iOBeV<+e6@1G{BU4Ql1m&@AK(bqM9hnS0KuX>Xm`cXh?FRm+9 zTqZljEF<_u6RGsOlIspR$z2(XwnPA zCEFO{*wC~tB(UcU3l19?SYy{PV^4+-Oe>ohSYuZ%l9-8m%lxhgoLlCDSQ)u?1-Tj; z;l2f{WFyYonU-)diIgnuN=i{fbl7421Bi&mizHciivW$`AY6wc%~&{h!Gi8mRM$Y<1R@ne1r{vO4i!;0MjmZPvCC2X zHOw98?sHhB;NTd(O2aJ;yu})1Ai70Ode<0nBnQF~?(nNZ!NbdI(tp24@0ZL8amSIB z6dH@?JKWlmsS;Vo+7vN%%i zfuD{Fm7(#cICls6Twt9Yqp5Sm+CGa1Wd%D@pmTaLY*IMU5_D?mf(5Tryq9V z=o>#zU|@}Xp19EXG?tX;zyva2iGT0RqZwyE$=JNv7&!R!NoYXWc5NT_sh0XPIzzPitD&qAR7=gDnCc)TkHy`N4T}TlIV~ zz0}jQBG>JB!=zi`rI{$)k|VI@@89=^H|t+?ys@r`Sa+&!Wy*;OGnAGd@wxglu6t%Z zwiMa;c^*Sc%Pt3so9%iO z=q&+0hyXKUS`-+3wK9s12A>ess1(?t=<6YUX+}n0(>fPz!Da1Oy|PE0VRp=gWnI(N z!dEak%$i`f#PFgFYiwtjk`F(&6m_7|pP}u!aNvnlF1Ac(DdDq$7p7*Y9{Pgmmy@|W9$9n^d4XCCP)~mvGy`o15(@SB~L?3Z%-eusN;P8ZnPtHmu-*1M}{`Ehd z{pRuH`@deLUF@~`_xovoey;1axnyDQ=@>qTyWt}C+R{OXqsHp7cjVXKQ731qcE=Pr zwoM3BQB^&;?X7jnohRQ@9|YfZ{^k2*wn&L;(My9|>z0Pfv~s(cdow_FrGe(2`D+TA%fHYoOKdc+30cR$bHzjjjM;rNNV(c6~jIh^qg z;h1Al=yXrYJZ_oqe-*8VbA1&quKJulna$3d=^%$n(cctn`88LBKL6U7d_48-uF|3h z2M!+bQ3!Tr3RIZj@wi(f<@p|drLA9$*UW!jHnnY<*qpa~o!kBi&EzuO^(e&Z|KIQP z?^NGsF1i{Tesapm$t7AF;=b*C9zW&MQg6?_yGkET*;H(N%fUwZtml8m^C!EeYNx)x zS8KH3zwtyi;mObIqPKe4{mPi-f8)DJwpJ^*__v+MuX5&>cUPS+E%kmrxz|N9{)dW|W8IwY+8m|t z#uLw|N7xHLNlh?X!?~pE;*VXW^(TICPEPs$&i0yQ|FYx!_P-+b{rV;C?|5$R_q93U zS}kYaXFjuO?>soAeEF$GuJ%^fE0Ww51pIfapZ^lNx5`wtVNcMiu(d_c&RWFZ-2cBp zCw`yPf88H>3-?%mwf$NAIlj>E>QB+yiAt_h5;jfc=7b*nj))SHEZ0EKX+Kxi5m# zFiPoP-J-wN(`s|JT+TYwoo=6eN#Kpd$(lzoE9W2lbmsMQ`Noii7q=!I^^!EH=$N7# z9OY|sc)ewBnPI<-X%v^3hDLeF?z>hmR(d%U-b|hD*(+tbX8ywC4_FqR{5-Ken)9E~ z#n5#jfgjkvzx~5{XNCA-OA_b-~4_uebt2*pH2o&sXy|_`{*&>*5WW~ zsEul@j>OK(|Ige1Kd~|S_?_uB=aSD}RyW!&zwzAe_!7;3#!FvMvTlBO>h4?fD?6tf zeR^abGH2ty@^x2!dQ`ZrzLOltHt~tN*h>!av^|$A*IhYZAanL_#b=Y39OX9QmpW@I zJYVnjx@?<#tmo2(gRzQ&6`aN?4trj9I_%kb`&j<#^TE$z=Lzq8U!-dM=R7{cGYjyM23mdwuuP>i&5}7hT0)e%4;UC&+ED-J#_>66~M8-LB4kC4S@9 zw4Fufr;=l>=O-qoAMcZmS}P%CT>o!p)F>se@53Di^$3Y`|K4nt z+*EUvYp0SspXTB%_ji@NTyp*)r&;?nou8ifX8-D|OM9}yJmuON{gg*7+qXQEeB?AI z*{y%dot?$m_VH)tDR164L-)S+x`;!eON&(J`sw^Gwl4X1I9_t$U(jM>k^K+ZR>tq2 zXOesA#z(fsQ?_T{m)C8tc))nF(3NkdN#>?MTS`_s9IgJgMzZMZ)k+!rXDSl@E84%y z|CqC-?nz>1L3r)sSpE&~s~5D!tTTD#w#O&n6l3CH>Ue%W3PKQ&$ddGXml z8&3W{;+cQ?w|tF8@N%DNYa%z#a!)-oJAdV--#&K#KGdqd*mGc~UG&GA@T7&)rkm*lQg^X=ZodLTU(>A{tVwL z+c$T2nOEl{)sjfFtSbjTmjC%tcsK3N-7THlE*s|FQs0#JRx0%P`f2B6tv$}pI=I!g z`D&&52Z=d1KHb@#KcAj%W^Y(r#jJx!5@(hjt8&=ML_{&0tvy`*;_@(*v)As-W=bjgK`egRC6?*2Z5&P06 zm#=?o<0I5lm)w&z`TFZ!(W_E8Uw%9CxajX!R~zBaR%sn&(a*Q)-AuWVJul~WRQa71 z%o?|Um0z3Ot-tR^t@r%fTg;y=EO>vXtyg+!@^ZbZ9HY`#zl+}dFf{FxTHzb)6aLt+ zM{@qV+tJ%I4Nl!z5GXu#optD4kHx>fNdCI3zw(vG>S?-HguLUelQzB(&Uw`_z3y1H z?8eIHJk_@szqL5wz4P|I<7TN(w!UxDoV5Lz|Af@6dlR+8^-TL$hzqzX_3AUJ1;pN| zPuQQbTV?hhyGNm#(c5}#ZY~ZtSU+$5?P-EceAkax=_=1IYX6(^#Qt%sWa_gukwv%H zZudIf9_6v#&j01l`1WsapS;^W`$f&|Z^qB=93LMWh z-W6S#JJU3KTEo9{?cL9}EZ}BZpgqOl$@lx$U!2T3DWrOZLFJ}FiP`?nQ-4^wzc8>d zFFlsEX=n0rzpszZOq#m?pVs?5wkOktE^Q8vSLKOTblFMObNMkX2AUHNA7E)-8=bc^vS_uR{)FFY?`(e79P_bVaDJ}! z^fTd1+vnFsX+1vPJN1&*`2v9u#}(|3m%Bu@w+g(P>~9}>+Whn?z7=a?O1qf<_|35J zjFU2P;r5X-TcQ8@dj6FD<-XIGde=|euI?+aVv*AeX682m-fp+{|1I0MCYWiusCNC- z=+LP8ur}kwV4h>2ABwH^ypz0YqGt569-Ds=;y0Jhn{Dth_vRXw$i?n^*ZqAUFV$Jr zUnasaH^JfCx7+!_ng5*Tz5BjKEbi{*H+gTrAL7;*nX|aD{^`~0U*35&x9?l?sc`AM z5ASd9{?4;_ZiRt}KaYjs#eWYD_t&t*3d~8oaB=75m#Osv_Yx0qZ4cxvGhE>s#bkMV z&-KdQdI(>~fIc6ILUTU)bBXP%w+dFiV8!gu@K|K9PA z-BjDZFZkQxT{hoZ{9fm7zpEuV#h`41kcPv9cE^swxKnqx=_%&iHfoBW{ayB7KzVO~ z?6!;lxRRuKw=v1*Tnt)pwJ5liD=3oFD(&nn-P(CoQT!cIt2_l{tg@~&YX&bnRi+wq z{L*t9uL;)Sd;jnKZKt~ZUR8HP|9}e5`+Jkm}^) z*`QM7HK-KvmfcwU+$Zv;Ozv^VxKnq(*>2NS)~^+})7k$1g6DdV12v4FCtZ(|UwT`l zUar$<-v|Hczsno{{7n6|g@0?=(%-*s&bvKrVyAkH{OhGXIj3b0ZLQ3TW4XQNXt((F zyuMg12o}Tyc9-YWE(qN1_$Qw<>2B?s~h&on7W}{fzjy0!Ox!6YtJuFgSLy%m2ga z@cfXky5HWtus=R2>8p9=so$R0#WW^uDY!UkLE)Xde-18ba?SI&wXb;lYv|z zvgO>rPqU5x$Xk@S9Pizu5$gQ>Ur%K5m#^yc-n@-5e)#RpW&iuT7hjv}nSDLq=JCIY z`~UlD1um-z+Sz5U{?@+Y$WHsbM=5{rtT4=fnay1vv8Mj~&#ZOd!Z&z)T(U^@lp3#; zRm}bUs|zDasK;@zgxcjf4%DJxvl#9{#d=-Dc=6WVBY=@>~G)SY}B{VJUzeMS=+Q;W*oIkeAf4BG7s~^|b-ha~4nqA2qH~-7=Hv75R zYBn-~W*W=||4ZuB zHTzn#r|*{P-JCYD^ZM!EeOvC|T#y;`wu<-s3HEn;4a@eNdw%2N*f?LiT5`18Lv-5zh(J^yn4*(;gHt8O(Oz|b@08uSe@)(}O+P-roacgRFN>y5T6KNj<(+A_)uihzZha}-_Ohg1y8Cm$*UR4W?Pj~bUp}u^ zYgfGO@Vn)yr%fN<^S6B*<1D9ivU*3ET&>oJ(N{?jk({sR+huRAJyhI(qI-JT$tQPTUp!r-6!LeAZ1l}%cb_C5Jml*6lS|Y$>!-)>CGl7H zY%aJs$x}CKt7Y@{kMi$2c50pCDZTN-_2#vmny`bT*S~R8_O88O zE&p!Lm5tT=jsJYFPOK1m_jhONZ^`dWt-S^h>@VzfxV~qJ;kQZ4m#8dxzGuV5R{g^_ zR<3hsWUA79w0{3TwI92U(l>p(?zMDliVV+@`vuO1dy}s$IOxo}>gSDr+l!a?ohqm) zeXRTFvB*-+rl;khewodzTpUqBm7nIsEo#5}|AQ*Wt@ML3TP8DQb~q+KIndY~WzBOb z_HowLH7h@F4av+pD5@P6VwB>sewyFfsixW2GIAF$^Oe@l-T1`f`np*4rQYiGb6e^& zybpd2%i0}rtz+wN^YFE+rZ+idpWCt2d-7rTdA#56*F~$|*vWj_=)0EhT8DKGjeoLE zCa!kaUbC+C@y#8H&Tr*c9V__3WtIMIderVS^_@$wwCR#^5Ccx z_ovgJp5Dr9UX$8zd;PSdRi$&S%BOOPu5S6`e3$P@(^Xad_ZN$nrgj*$Z<|qgJvKbz zgZQadt#bX+liPZdKJI%w*J*a(?l52V)sjXj0q+xdEh|1OxE5BDw?a6hwsC4<=qk1B zu0?0Lo*cUR)8YJ_x2DnaGSnZe3b)SP&8)LQrRv%9`D|C4I^A|wubki3Uj4J=)|Skr zo1*Ie{(isu>HYfurg3X-TYY8-xzl?&an)JnYilA`PrLVbt^Vz8C)IdvFV2;`*(Scy ze)g}-%g3LdDxLb}?OpF|`^7%f{(PBy?ZVOBEq52)(YsaIe(XdWuk@8kk004B<6Tg? zGv{Sep}u3;a^N6#Jlu}jWlHuuX7x%qqc6}NJWUb@-hW*hVH z(8<4H?`(FS-yqJVtMP^{Q^w@M!iVp{`R7BB`vkM~e|t{)Z&-ZRy8SBK!()oFR%L~Y zHpsHyoVI)V_Z!)gGhNzW?G9V@@w4jmm^aDCSZ>*wuL>2PXtn+&Px!mI(T)xg`L6}d>ny_}8_eSR*tLkjOzdI%^H(=Y>S644?57&}xyxm&e|G@lG zWxw^ji22DjeA|n!%iUb-bF$^v?WJ4p^~qYV+bWVgcU?r=d*APN(=JNkdm>wmpe z_uwCK%}3fi2Tq53=q|sxY+3YVZYv6Z7rYTV8d) zaiGDv(#TW(?*E)udv4cnIhR{GD|KaB=k`wdT#0{8J2R&2p8hNI(nS4wyW&;-$NI$X zIX=$$ocHJX`RCHhRX^?M2Z1g2;4{et?xjz{c{*jl>LuYAXcz1y}LIPotGlucDOov<04bko=^i+M!0 z?+jb>;_I^zdBqOhkQEEgSLlk>Hchu`YN>pgUSlNkr2VY*bmy4|GwR;kIy!mmtLc5M z-2c|%#I`$o_Z*KqeIi9G0wbv(Z&%YivTd!el z{F?*W$HL+c7yj0Nb-nKJ6E>M=d-BBJ**4wxcy9ZyBB?fRNrB_f`>(bdl^l`27AUGa zN$0}WI)#HaZ1XEsBAm{vSqeOI=&IbkNz|m~#s%Z1Px&SZi&Jl$cHXj0kmvegk1w;6 zkH2Ir>sQ}B|Kpywt(w8hvzW_!{W2w4tMeWo^R?Tq@ZrXiHw~>uYT_OdEe@Mf{LCD- z`(>8xl#M%)dwZMby*<~hrYoL^+EdXfW-vAAR`ib~_S{A5rv?`8n562*z3TvvRJg&e zE?&ljnvb%n6??p|AAfp#XS^lvgqt!9$Bv)9&aduN%GBHLpchehr!Keh5XY|tiq5Hb zciE@3301_dF*)}k)h;M~cDb;fluvnc&(?o=?7ma%{J#cgA1l{h+_iY=o!-<^TgSQ8 zk!yeVACZjqm}n#2vv>M;jo@WH=dPEPOI=&%eeFkKeDQqtZt1!`S5);=Mc#gweSb&) z_Vm|%LS?Nzht-%1W^SIdFYVn;x!l)#ax1p|%c+bj2~?9+xz$o+elJ71#vyTg<&AB3 z_FnN9-gfq)*?Y6ZgZb7&rxfjpvuCH4>RlVi)(zQp~xBbkDVQfBM zv7OoS_BXY#_cE7SHqN~5xS-e9`%Z4X&My}I(j#;CWz4;O#X93``O7;OwY>BnE8H&n z{z=X~%5C8>9q|=qDVtZxSG3#O?zmnZ9UxVY`H@{zuHY=QQK!{KQ>Wfx|$7Dw1|99~xX>dH66 z8u=6dl~Q-y-Mi$yda6m?^K)}=1ym~hU%1Y3M~mY@@lzRlZ=Vfy`@VoNv1jQcxt>1< z8EkpBKIZ0Nabo3qA}-Nr8DG5``@n?KjUk{$sms)x*gBb+)=M{=9hHKlQ>p>6NQbDcm@4Q?2gyp7`Zk9z9s# zns#U3-`}CObMot6J$6i;BYW(5ehAaLQ&}@7d)|Je>Rt2a=?YmC9{0W%ygVv&KlylH=HgFz`#0~KvDh?do%L3pW3}g>-SM8g zo%4LReDu6$-mmvm?kkmf_2sLy3EzrdVLjPxPv0%AYwNyTd*AH+yL6|y)tQrhEgt@| z03}Y}JKNm#zg}L}e>hFEAYxnEv`>e382{3(7k|6QnfY;6s@;S1tvoj~`W5_^yqtFX z-39BiU&|S5%X*_qm&UYu{W?73f9?181<7o;t@;i2KD)b2Z{`*^WB<6@x4z%|@1TA- zCnEXM6T4g6%qQ+Ceplf%_y2-l#p=)@k43n^f=AGS5}Am?kdgGww0?kd2)Yp?CsNkznfe- z?V{YN9XQWZR4Udj!Z_#0>P>Zr-E`+PifnJY<$BQK&7{lkXZ|aCU(3HDR$MwW@p8L- z?Hcw?$@gv69x88?da%#tk7(`xz^$=5)5;wWv>w#kX3GCWLFCtq$C;NLbG>6-Z&vK| z;M{j=y1sfucmAC%FE4*(*!$Bq{hdt8pBc((IlNM)p_g7+hwf>Ay7_$ii}l+|Utcqe zn__mY>}T!QtW@uudHdK7ir!K6vUs|!o5gqAGT&J*QfKteHWB8i-B9x8v!wBsyX&J& zvtK;_z%Lam5aPI~*XH0u4!;XsMb7 zy1Om;Y4%lmmTrEJ5G%v}WBMeCXyg*=<%AX6(0mWV%)Q zX?)d7v9e=lCaJDIe?a1N;>M-ApL%2~*X?~K^)qU%^Z$#g4OazM*S{-~T6i&NDHH!e zt~u6oe>EMozrCwvLC*cfZL9X33AVm+=l=ueAn%*2oE~?{u2v|qt^3pBzbfbST~N+Z z)_-sPi8+_oLZ|ho|J$Bsn}e}cnP%zMKc%j&*7lvkdC9-@koT3ml>%b*zg|9%`tbe0 z-|ww4hn6#Qe>(3ymtV-`$n@OGdxh?%x>FALrThqD``sjQCHeIS^{Kp8--Y@jKpogG zOoz;J|7Bm0PIT1;N2bBlIUp2S$ow~9880#Oa z?Ahhzza`hrZCAT!{FmLMxy_g5o7O{x8q3O0_ItgT+l$|L-XJD)N9U^E7QVz}qdPMc z#d7C*uJ?^Ks#`o$T|Za%mvK$PVZTxddzRvDZ+%tX$850pyMD2rdEPCb>w!Jj?f$+o zwv9XN?)y0DqI$(jWi{Dt?z63uexJK}>?Jshb=>}D`z^?ATWxsk)+gU4``cYDZmueQ z{o>=tFaCCylNmBL?2O%WT>RY@7VGxhBmK*Li}RB6n9TG3uq=;lTN{^=S5>$z^@*y_ zZKF>?@3wucewl9IFZ=mfMCB4+>(u8Fz0;=%9at6me{=7vHGg(qmdvwDjJDsaa>DHW zjOk^s?*(T@#wz@sU+Z@Ms9ep1I@|SoUH8V{n0oVm;_~8*>xaZlo|Q#hl01=E_xpN$ z^pcpJn?5}akI$aza8gLs>6>-qp@XLSpXVhc9(nw0|Em49SqBm{qj$BKWS6AdOcJ~F6MT7mso+-6-!R@Vkz7Uu&6 zZWo?zJKy^HgmKQ)0}(ns7o8gd137oR+rNHi%K5q~>);=ipL;J>UE;Tnd?AteMXqem zyt-BTO+_->gFRdMB@owLYo6 zzN4p3`KQ&E-MdQOscZ;j{u=n0X<0C*U~lpA%Q4*LUxKFR+*dA1IM4fH{q~aic7KJB z>a`0^vRz;*zfpC=?VHnfFW;3CX}@>Rd*=Do2WOs`^~L_;ThCgq#aBg_-&=Bip{-Tn zq3Ea$eJAZ%s>3xJE!Fn*m%dGs3q2nE^p#fp9iQ1|KX>iEqrCF-x{hh#wY zd{?I|xBk2>cT?rDW&N9dmvb7=a$o=T^0NNs+BJOr+k%Bxzs$<~e)$x`hty9M*Vlb| zmAyWB?>zrcxu4}W{N=fH?*7_0MgRVuzi(7@Mf%gJ)$3m_<@qt;>w{+g7f%K3I0NkS zLXH(BHh<{<`kM88Taicp3hu4&+dfQguo0_ms+HaNKHX>M?JI(} z%g?oB7H^SduhcBR{r$$io-04D7p>{?T|Q6xM*Ma~fl0}hBCou|zHSuOmb#-i?=g3| zmD5~jW46yq_3b;S7e=VP2)&RR?H2bd;%JD&S=pX^KSR>K;$`}Rjk`Yl ze*e`=Volq@J72#FuFt5xwEVEW>-P|*oLj2Fatr$yFH5F?^K{SJoKJmU7V{s|TCLa| zUnIh}tL&vp#8T6Q2cNUvMIKDQEMe2k%RR69q3g-%`s?F#o3k75aG&Q7+0>j^RmX9Z zMMIV+sHpMsxqW}X7`?ZYt^0GHZzaD;^|yDEduN*+w>LEOaFoi~8?op^rnRqOhco-n z@B7oGCiJ?-O!$*@p_fbgjN^=^^#u#B1G`zp<28%JX88_0)&8Z^9ZIowmpvYGKU%zOJwF(6LFA=USI%CeDi9 ztUTdp#?#BO`byZt1?CC%<^Qo)o z{%R|KWfS|^e`crKPTieqoquSX<*jR~vp4j}x4c~HyY1Cuo!cps+cw*}McL>6ve?oX z@h|z;!-Cu-ol_ad`($s`G-ghB{^(>azHYAhd3I^z8NV&6R(+N`eRr9jBJag>!8^8X z`}vpuRG+N%)6+MNWqk#gC{Ou(>0U+cbEc!*WvX6NL**|@ojSmHJ}b9E=YDDZ3+^v5 zTYj;W--vtF@!N8C@oX!hx8>(fL+39yYAADbCh$GUIkxZLQ_=2{U&kk2+Mjz`L+oXj zy8oIk&&6kU%{kkazA<5vP~tJI_X~gNu3>0ayL)H-^A(mar~W$3_3OJwPO+rh>m-}^ zk-IZji|jI+-l_NG<3ql?PmH!+O8MXr&)Vm}pICl$-ru+huen48bi!?N(3ds7u^FtS9)xOYE$lUhC$G1{Wu$9};oB(2_9y?8^6h_21sw zcJWq;d!NkJ)76Q>@Av(FH+A3MYS!9m=I2xrqMt8hw1}^L%JtN3-@jFI0bBFsZ+RF@ zlTB)m*mcF3!CN%v^xbWGPft#Ezr8O-etOj_&ppLWRkH#!_q%*nj^Fb6iT;bOvL8JC z;H7m6W-NbLV=s27Ui&Pk@3drJmgXa~RBfR{>k3W@{rFJgA^C3q+AP)F$**%FDm;_D zICljdy>xW5=9DQFV&2#8SbtdJGH0bF-zT3xm)@=^i)!jsyK%+vwBf{8Sy^*ywjY=G z{==gZ!Ik^EhH>l9=Kp$T{~}M$Fq|AG7a69zmFsEG#>WA574PpTP4LVNyESchZY&ey z?O&C77n8CcyDDst`d7YgN5SNdVpVw`@Z!Na`Yb-XbNeoyC|5dL9d);Ud(Z4Y`^3sx zPfMG1Xh$u%V7Y&H(uSI##o7{*aq5gh7THV}o zuro!xYDryXU=BTIrXWwiqVQ461N~WPH9qH(P2Yc9q?>wa(j|BO%q4E&Ueoy=D>Djp zST&xRsej3OqML03n+NpVhC-DBvu`nvX5_em&l!Dg%2+d}<0?DXxoV-+S*rQAQzJ5y zvOLh2`hvs1fyLv1F(cP58|BB$P=_HcY=ww)dNeexbI}o9)(O*sW)uMv1ge=lJv}$} zs~nO5uRL^(SWts?jc5Z)lB+`Ot}UPL*Q+Os{)uew-lEvs`AkUPwbM-I(-aZQ)l{r|t}-|u~Ih$+1qYLxm(W$xR_>i(yS&+pe*>OFl@Rq5+F`WlNS zop-QN=H2nX;d#o@Q&TsUzqgaT@PDR9bLYw8{cEFC`k=HA;D5AnUla%iQza9Lr?!$c_n%BcD6F9FCsGvhQcwI-NiN*k4}Wy?lx9>3omI zSLsS$3p?+eiw@iQ`PA)_uZauqZ~psq?Z#x5w|cUib5^sYotdL*|9_89)%RBmO%yKu zOi>OzCT`d1bx{8Ix3`n$PuHDnZ=O3%IBVXNzn@MoNj%J!zC_{P+wHkl=RGR8Vk9hI z@!s59yPI+DGQWmDQdk8ko;N|DCtpY~2v*gs)gPNcEA zN0y(uawx~HYioZyi`8roc(*1zd{g@VKPB&iUc5QnZ#NCJvs3nJ-uAx2cYE?ve}9wx zbR;=;Zn}Ztj8E@Eety4Sulb^A#f`Zvk21eMnYnLO_C#Ku+pO9#e_d!ug3?i407e#6|^CyOGI-~h4>_I{kEa zrH_0?nNqv2FY-_bD^=<8v{~N#>*MjGpANRmd-kjEo~!u6YsyDgiv#cXesA1kQqciA z@LrW@C`OYfnZ`r%Q>Z?@d#Z6PM-P-fv5Vvaavol2}RmIswN{(*+`)$&>4Kw>1 z+wX_3pQc-{y58ew^53eHv%lZk(6p}NQx9WPh-AvNZlhECn%lQ-(7wpxB~WzGP5jb~ z482f}U14h?G@C=3qqq6I+`+NStxrmqm0RSC%8OZ6Uu}23*>rk|Td!1SnEJVsUtA`G zj&>CKqq=DInwF>^&A-e3F=bxg=d7e=9J*Z7z39%{!iP?dOj4Hck#tg?qIz zCyuc0ocZFbF=Tn9!VKH^zR=jN)OpkXZi+G3`R3;0>JYUn^A^rc=RdNlZ%(>|@~ON< zJ^D?mbNH*y=ccuS+t2&o& ziHJ>Q>5tQXIli;+Y9H^HFRx>_?o>aYkol-Io~hzEXytd#y?JZaPS-f3$FcL~&ckWr^Xz>#E0REw|SF z_k82I-Sst^f2~0a4C@DMfuRHcy89af^>)2b%Dl8B&_gkNL3-|b*Tp?SN^`gUT)6*p zw?iAx%dHMCA3R(f^`P{{iTg#5j?~Zlb$PRDTbW3qQXa?M31S>OCv0;m>71$M9b{Ym z6?7NXiG8)dzY5>2{&J;Pr7pqu(~9fvKU!FRYv%8_ja>WxpX;WylS)rd-PPzXeOuGk zJ6G1a?1ievg&99TpFbNE_j7gZ?rC>I|NE)i)Fi&KPgwA8Z}D@zucD6{OmgmA*?E7f zclyq!&sLqw|9-Oi{oeIU=at{Dy|w?h-MQoa^EEEp{S4WbcUNnv*VHLty7HekdVf4N z!~E&x^LE$!m-^3-yI1=>H`hGl-JZ%S&lF};g_?&u8T~dG%=vpW-8kiEmuQh|pG=Tj z=Kj)`mptbm7S7?*jr=rukNH>GzdY9}&d>VV>NDrVv}-obF&)KcUQC>1U7q*$dH2oY zlxyOfpH?3g_1>{6WZja>l~+T%65`O5lu|5;|4IeR!* zw7#3{zyI^@qega>J(#t*9RBwOhFzZ&^|9Rc2;?qxOWv`p) zcIw=rdA8M4)o#_y{C1Ju$~z9!5|s=yOJ&(__TKuBV|Cut+w9_L@nychU9PQ(UHt0D)k`~* z*;hsy@7R{U!Rr0w4vqgCo^sw61$FORe%|N4<+kN$ue9luvfOBE?_Wug@65gyPkP1v zA+JyF=PVwnPn+_7PnzVn%52T1FE1~9>xFt>ynD{UHUszB3_h)mI(&zp=Yo<-U zz9uj>k84BCS+)0Zw|}nR_s`93zoFaKldntf>V|G=DXD%`xbxpHrFor|vc@jE*M5$g zo@4aF)PGyVlVOQH$_uYGy)umOb+*^-ay51L|^NVG+)uW~JKSsId+_OA< z?^}j7A83r`{YGEO%D214bbkfjld^Z5wzATFUChoaHjCmML^@6Oam;WiE&Sj3chcKQ zIiG%YgfGpxY4jTJNNDVoZ;w`_Fw{&`#f zbEiB&e(iy~59f3ooHk?k_cs$yPZ4n76rbww%HNb@oz~H=IQ{FZJWCt@{M;H?KDq5D zw;1S7ohJ=hA&Os4Oj7NZvpM^_Y~Pi&!S40CCUw@Obw1n$Qg=$1UkRFg_WsmUe~xtK zzjoYaXjAL+R2e){ge!NCwP%D?{6D`xsmSz`GVGo}@_5W+P)_rT{ zx1S>2bywkN_kD%RqUS;XPG|2IR`UyT+WEYs>h=A|aPOr3e_mw%t#mbb+oc|7=9^(Zn?Igax-J?vd5TojhepTbZ*Qib<~0|&94Dyu@6*%M zt3O$}e|mCKS2<34B`d=T_p+-uLxasO++k9-k?2xCRR8vCVAO=h&TWMPb9#fC_Edd+ z<*`#b|H^blkLFolO0UPNZ{YpV{3;_WWWV$B<2LDi+bY`^Jb%6ZIe0`4Vb z)~+hgy>0WTB^{Q)KxqU#WsSTVDEuR(Y;m+_K^4=jX-u zKb3&`+xy(_YtF8ewJyKfbZd70zR2nKZ%bMCHhZ*RRasnRUJy{n}m_cTXc z?!EFK)~j*?W2(Z5Q9cdu~fliLyFfmo!fIO8dH1 zXtwWxh39PlAM)N5$$9yC&CjV~cJZ^#*RP4#7^JYljXjIa?pI^*f2XUJ+xKV8yZz~i z1G7`g4WB*FUS+c|egFIWd*(u$doN#$^6!Y4x;yvppI@`{zdR9TwyjyRqU?9>tqSc= zGgZCQc78mziO=r#p8EA>ng>$Ya=+i(Tm5v~?Yyb6UKiS*f1D~cIpuNAt&|^MFCD+R z?D7)Du;Y;BPv4oF9?YNiPiMRKGy%PX@2=mTeE;J6uHTE>bMNil@_9x<`O9BBWbA4p zxL0y(9yB{uv2SOs;xq;Z2L?|U$BOHN&bB9?VXLm{RhLerOh{7?3{bzgCYOqJC~Mvot(aE?!Hf_ z=KOlRICH;YnNxLpfBO%OR{na4!wwSNhEg#)zgTWtC0)wAe7<6(^0xPL*b;u8FOzw) z^bUB1)Tc}34-Xf;HhY`;_?YjlZ8EoXdX_3)aJ0U;FIM`vTlk_LeJ4>-mb2eYc1PFl z*b`O#`_t<6sb^`2)?;qE=NOKxpBxh>gYL-yTmbLAGNpRL+xWF8WGHZlCv@yp9r|2%7U zReZ`Nr}+A98~^oM)h!e9b{b znYRAkif21Fmb?GAoF=k*|HN;-7RY`tiFHs z{Oa^q?B}-b- z->WSz{WksnoQMApEL672dy;x~*Vl7@B{x5N@!H?!=Ixznhu+>?K7U`i`&#SC*Vf&y zIQCb${{QTdMLs{56p7~h-Kzi4QCxrL$jM(j1C#Gvx-Rx_L&X1ipRdNeU7s-Vk*BNo z6kjQmk{$c%!yl)4o}IP5VBY(Szcb(dzaF}JZgzal&(cf9`g|V~ZR#KL-@3n9Ik~TY65C_bg&b#iE=5wg>O_<(m1(_`pUO)Z2Z07#Wj+d9*`YJVVBLAK0reAt5 z`(Ey=Ae~Ps_e%A1b??phG7rD}Hg|!^&28q}-p_ft*sZ6=dHVX7!u63KSO2R`Zq@S4 zm3zD9{N2*ZtFN~D)&6+$IdWIu4(MuS50$??;Q3posq_Dv-Y%SwyHmO5_V*jxdVFU2 z*798~pZRflb&a7sL5Ps!s+738ln5Z|&9dsN5JF+sMTFCFn?e{a@b?<*Dc9L>cWUdb+-^MS$(m z!qgW1NMZE>z8_YbFYioxTvc3?X0cY zSH)+U{^EAHysUR>nP<_Q?Ca}-XKAR;eXwvIKl@c*o$QtrX{pi(u2*q!8%i>Zew^6+ zuy6g63nd3P`DEC!6tQwW3HRnZEZxF?d~@O96yJ3-H>bVK`0zFD+#CI`Mgjj-r!`&@ zd@(Ec9<#0Vo2boczDwP|=e^3l7WgyuXHo9qw?a$rvTl#hoKsOccZykPYgee#zlC}1 zMF(F^n*N<5-X`GLk5jpKO1&2I*Ds7&QS?1%dd_JLvG>;ZG`C1@&AwW)i7VGJ!`R6< zVeO@=lHIeXEK`e+3}2d6bUUH!y2Bi4%7Pt3E|BvX(n!^{IE7!RG-i^6j=eGHp zCEk$RyX>-A%=&*hua^7Dv+F+Gx3~JF?)E!tPN$sow|}{GL&fwBzt`M$wSIp=;^v0L z=BT2WJIA*$mW9P_E7`bXy29?uf@?oVY$?6y6}{x4%cW~h!C9xL=@z};yYJR}HQsG+ zd#{(TD_H1c)pf_qSZ-ax!zXpx<@4^O-{5Y| zTXORJ1ozqHe78>GS*~bY##=Jmu<>QT^yzumB+MRyya8SORdP(pXLd#NPtH)cxciF} z3U{op)>O_ooKR`vBfX`1%i;qquFL!SUxhlVopE_6xlV89ms@hVpYo)q-Jb6|JLgZk zG_#Yo@Vb3Qu}`kW9LnES+w ztNUDOnw^&A8SkB{e)@h{_wStr&)qIu-h2D8oqo^%V%M%8T+AD4Rt6ko+T^?PD_e1@ zpKkl7{rmlOrJJ-DPBY#mD;0W!>DKx;@dplug>b6ziu1(*lvvRV~j=N>Ab&t)C6Kjz_|IL3}`m;M0rA-C~ z4ByHl)E?x8{CWR)JMVcR)h_MoaMmwE_HVSBmZ}TLm=@`#@`#kJ$lg}TFWUCsmIJ>0 z@M}=iiZgDn^1{70a;;iwwlLxkG-pX6k1tFA2HH=`rK{o4Bb33c-dc|zYs zB(bFjPv0{oaLfJj8+<1hvu*yj?dpal5_$hMXE*(7|25sdKCXCGe*_;7`_M6;@0vD;1v7w^G`ixv#$qQ zGHOC+}{iTC2(5Uh5gu_@m%&XtIwpruMHo$ z{+GxWU%gH5+Dkt1eb={%xxG*{IrQm|!?|sHKmIy5b7Q+DTi5NF=AAs-n-#VNENrrS zyfxwrXWT1}OV5|iFMO_kV<%_m?UTUTT$X5?2^;oXmd%k%_+GK8`iQE9 z>)OL^QBrd+8F7gTT>HFRmPKy%6xsP}A~)~Q|2>CYNbI2Vv@<8quL+(No7Xgf?Y2oWz8X1@F8{+?=lvOQPILPB0Y z#^R^;%6$c|X>>^tNBD(7?Fq4o(E ze98)WkFC1PH%p^--mB%gEPGe>M5GR zZiex(cME@J8}EGo&?e%}j^|7DKr5H_zpr>+cXMA1ce`==xt=B2?Y?XejI^Z#CR*LL zlF$5caNg#pl^0!4ZhLV-P2zX?!9ykS{on=N?{*xXd;6JfjK#Bk)6H($Bp3ITS>-)sc$1N!$`e7X7}dUFcrz3|&D z;;XlvQ_HKjzj#Xc(AP`X9x>mpF%Hf8yA08#(?OMdb!ES@?&5&j>#VC}8*@$eIKSJdSGKelWoco* z>x_Se6+dNH^(1|itJGCq^JK=F9DgO<-{0ShOL!e;OF5=0#HvDHlFARZ_iYIAyL9w^y5^I zIJbU+LHpBYYeKT+ImJm5GWAE+6 zOf?gQ1e5zaE_q#GO@3&wqDNmrfJ0PcLcHCdj9F%<_(XFaFVl3cF<8af=emA>oMc$O z?%FFUEb+G!Ev{K4tJGc-kGHt#pNc*3DtMlC6wyK&u5Mujt2ZI`UTc-SfD6 zi>13ngV`d?vy%6zJ*?QiA;&c6IcV=rpvwE|9bb|=-)~Glp7QQa<^S~eRu9&!nE9h& z!Gc918yS=?b<6nvVpO_h?f$+);qQyRatk~r-&=BB_~ly-E{>oj%_r2|LtS3VXt)O4 zn_l0i^ZVZ3NqcTT<(hf_ect!f%_pDC_nbY~XU?KFL-wODv^Uw_V|)B1;8AT4)#OaOgB!Izs+Hgw{z0f)OOZmx6jlbP~65F8PTuc{~=`67xzC$ z{KDl7(x$Htn8_ukcg#L$hn@NVZ>H%JrdBRl8C513DYPdlQtj%#Z?Bi$FEG1f87TJW zn&XKv*-?s zRrNcY@N*8veZiku9_D>hTnFOj5TK4{E3fm;iYv`E&qUh41 zioAVE2g4SJ$(C8Agid>Zf6FvegBsh_F*_FtzCCZRzwxqy|EJ401vrk1z6f15$LP0f zlWO$bTU&pcomp_}>kYfdS~ah4?E3n8XQz(eR1ubLJ&jd$sp=7nd=z3Dh1V=P!}8zH z;_PFN-P2Mn7Bfek*(T{A8Fr*(joF$P_tKWVEWWvN>Vusozj;qjdug0j6rZs|+|go} z=)Qdpw<9YJJQ*H(ly7zwITZ5Y$j2i~Z=9_E{7nDJ^3Yw@M?WZi7FVlL>SRol|IAt3 zpPR^d(8_hrBF*TsAFmoNWgR-=`DcpkmDjIKvu|Agm*OX!oYSr=C~@L+Pq0$qr8DKX zw{4vKYo11erSO~iGyNBuSe@{BurPvg=FcaLLjO}zIXzEqTRh7rZrkR`s?z4Uexfth zuX6F>GjGX#;&r{9|9|NtuWk22Q#`lzh1{|}rF>?_M$u>c>;FGabxI6c;*lq#9=|Rp zGOg2SIvX$N!oTc%pZ;Z>omCq1@%oZN<@M1&<}?)kT&VO}Z@t^^%HX<7acVzd6CY-ef4(z-DNX3r+wyETW51}+TA<#zg|60^fa+Z(YU%Ia`uDuLM%^D zFLwVQIQ7)jn8*j}h6lMgMUMU26&6?H^J|vzjf>Yg+fq|JkF>6LU43fFrRzyHhuOCY zotdurjDMcTw*4QMpRGJ~*;HneOvrM%>49giUt1G<`g!(`6`Cjd3>{tFSmZZ_OG-}6 zE#6eQ>P&OWYuU=v+mfeRO_JTMwOM!j>hSdsvzfn0&X8XpwRhTi#)N}u%Vx}rpHca- zg#UhrcGx--x#V1?S+?oxF6ti+*Vi$Bt1$In^tQe?8SYw}wp4x=t80pX9j3eU;lT|H z72hmQ(0z4rwYhGz)T`@ZmFkg6>x>N2694fUoevHDFlDX(%~JkL!MeNORH$55KRr!7 zdfS>mi&+iU#u<0mX@qwD47hi;w&K*Xg^!QwFnx5o$h!HQr||KMGd4c{;UY2Nkw(Gh zMcjPPH^kR}nv!|u%lyi{1L4in(vdYLe6x ziGR1Ee7#)Be9esu<{XsIkh%R!LnPK9m7h2El&JY3|Nh-2E)j2UZGB;9T~v1P(9t>R zOD=CO*MIjW_Q*lOZ_Mnxg7zz8fA{^d^LJoq)r-t%dAuzA{JS?Dx1RrGuzu7Xc;{t} zURt4X#RG<_=X1Zf#XM+Sy!oLtM_+@Z)5X+p=UWS=Nbd7`pd)tfMWSig6wMt{=2;#$ zigh^(_sz2F)&F&UV{WsAgs{5bk-rtZG8f`q9$&v#`>Xi0>7O4zk8m#bF<$2TkULE< zQq+Hsc*ttD+|*NxbY1H6AFIzH;~%z3t77T@26v zB=46w|5Rvy_LUWG>s7pu^&6NArJK*SE?@HTapyAM`3IX5?~2}8seI6#cgmcmJD*NY z>1aAr(`67JE*d#0*FB^9@XZF^*5j)}SMTg^e0FwL!D)A%ytGMc%T*&MP4S=l%`WH1 z^J9zrKipqi?O(^e{Hm*S_lN3;{&TafyS1-v{L!BDzI2(v@k86apC^3O+HJQkJoxXU z#6v9;A3m%4?*7bI()D*(*t1I6volWpR?DeuYtnXZZ&s8?{`8rk zp!i(1aYgg-IjSNLmsw5J-MvEp@@kvV!1>P(o&I+6k?c%EziIvxmrV^1{W(SQ@dJ78 znzf3Il%u7oa%H7>< zX{oS1*=NFZ!Jmb0S9bUGoY-bLaoL&BGPxx|?>D`T*w+_PuWT89bYbw}_SO$}EM7%9 zOI!A+B+FZGTzt^S&~m@Q=ZA0q{rdX4CiaOGd$zvg4Ye2R7jeJ!?pds4`#E&!|7mNL zf0lh|5st4pbxMebg^f?{&~??fx3@l)T=4em%d3<7D<7--q`clP=WjG^&*Z79l{Qa* z3*0R2w@;le+kfF$&DWEgiXAl0?yIs{-l}RfW!HvJQnp!3Ho8q+BPOfcCg9PqSe$v2 z-N(x*;_~1Bb-r@A*0(2NVvFbY8~>i_@#iqNe5ks;z4yDEO~r|t5Z4Q@&j>EyQH-zY zbh-7TNrNN$dQ{z|S^9rM{j!}R3%sOtCaqbdedeQ`i0+F!Yn7I8vfp|ZEPHn;Z}&Fs z@O4G0vu^TGofMAQZ5MbGN?0-%aLwE}Z}Q>iN;%^PcfMvRvn7v_9g!(IytTHF}fR z@7tF6cv;EMPolRrWi}^jGTH5!=vBY?*0VcLx!*8-5=)T3n00BxLgyW(Hrw9Mvj4KP z`ur-xgLAfZ^~|_GdFS+rf~#-OIc4Lq^j_-ijk2XIs)BbKUDDsZj*2h)@N(Ai&0lW! zm3>)rP4E}*7jC21a-ou+P2_&wRvVCPZiSnw{Nr$ z?M;8PUU^QB#ILVGWs`ie^L*LcC*QcoJ-?z?%5=fM+TTb1IUP~rOHGv%Yp|Z7@04$n z`iaHsz@H~ub6?-}G}tEls3pSpBRgYG=!CW9k&#~0^<=--t~|cuhqAh1tk8)}p|rnA zPu=ZSpMJ7y#U`uTx%1o{lotqI;5eb2;69%x^)CAv{q$WWnLA6>{xH8wwr+Uf{`S#P z`;6b$@@wnvOwd2LS@d(J=B`IauN}RiCuQ*T$b7YIfeRH;&5P%*EJ;$=J?Ji6^QzF7NYeoB!yxMB$|M=Hi})-A;E- z{LPFk$#f0BGlBi=QfO#pfL#OD2nswfx6z{ez~!J4S2o* zr^^Yo9wG*JAdLHwiE-_VF7c}?xEBgu-~d~LYz9KTXlxW4f`?7*BUYxUi=z6g0>z!c z5suR^?OjO$Ys(^0(%W&`x%Kxl1cAFMoM$?d`(u!n14L92gsKnCuTo z_&u{rD*Tnkx(`2nIQ#Y91iLF-3_c&2enRla`~CkxP53X@qVq34YW-Y!W3hXG#*cJm zjre_gLY5Y(_D*49diNou;;v@ai3<-)-YlR0;#lu&6O)t;mp9M&_wjS5@RpjNUg~DA zuCI2E+?-a*b=m%nbHe#~drhj&Ot)!Ha_zn#oxdkBJ}oY2ThOz;DU0Pjl{S>VHoLX8 zn*ZzT+p~q#uH2t+=VW@0)Z?ULdwtEK^C4S8-yA-)KvB^o`x%eZ{?(q!0^x!Y`xSfm zWUYK^e}7r@d|vgrl@c3M>mD8nk@>yQ>YUFko2irb|I#weyA!Z#iD97ozcYW6oBTBy zN>zFf1iL82ojK+|-_E)C*}3J}*Voy*zL=M?HRmVSuW!58`ZKA#+m`!(o?h%OAKus3 zjgyiSH&l3PyuJH-vEZ`&CjtfS%kRt%OrEM6-KMEF+}Aqtkx2YR9kJzyIGa=~Msf5>HLkZjj+?fBjhE?^>&K zYa(|~+g9^^uF3gLr75Y_pVHsypI%;au+*j3LB>TPE}}%%`kQdCjOi?{C+Clg&09II z%G773Rj*O{DIfW%KLf1Z2P|9QG1EwOs&=^FFIm}(#!O+4etMqn=d9m2u}fUr>j!h~ z{$%y7nYZoCHc76p^qTw2G-_{AWzY1BUNieY9?D?bqa<)Sc~1B<8=IcDpCl*$-D6+O z#&4j_ep}VMY}(5Y6Bn0!O0oF*?rO7;ipPSOw7*SKOl2oKq{Ppsy}4nu|3k~asjI_R z*8g|h^0{5UM{pjOpYNYz`Mdt_*Xd6)tGqAp^_=;6cYpnSIh%?EzM@^*rTv$miK)90TQ>d8ykF;+ z>v}(9`n9UOI41wQR_PL<>(TSd?7Ov%-t*53ySiJp^nrinn+J!(XBnPNkD2HnZ_)MK zuy^@`!`DsMedsJ&@nKg>*`4?8L^( zH%1#@et#=p|Ht#{s_Rd@)*b7W3cA^U>c`w^b%Edl!G@RR(H7V6_jZ3@q*Pek-6MH$ zBd9B}_s65|KmX2}-(RwFvbt3w$A3+3F&&j0L(gxYPKRuG@cYWr;^i84WqR@Z&YbN^ zH2i!!Uwnl?clgF6)>Uz9S51`LXVAtYd#pZwXVFwkkG-y@&95ZRTeFuh3R3l!*nieM zzJBkN`oAlpzkAkvF1~Yqrg4ARx;W?hKOfnjo}Jxpmv`~bN&TZ=B;zm6+WPuOcBhc) zBGqoOg8h!Sx8*;NR?6PM`SAJScBzwx3cuaj`ugRIjmclCUR{|oKXN}Sd-;>^9W3*m ze}9)>u-;kxWBD?lxqgX>(wX<}MBe$tQ>l1f^768PTU#XnrOH@Huytq6Ue&gmlD^M#f(7f=F zh1|a4=lmu~Pc)SI^4NG^__uP2mT(E%r<}6O|Hl;d>#Px1?4AjeRK3;WmP*E-O)A|! zElel+l*ruk(hp}#%=4a+Gsm*HEt+GRUToK@u$4ZVK}!rC-6&kF<-O@Ghh4XrUeuwK zcN$Cm=g-T!y2kPP`uhpfGORP6e#);140#>vHjTy2sI+B=(OcP%3AW`AzuzxBty%o+ zjLE;#hL4tC{`%@_w$C&50(+V8b#V(D?lA7r%f7lQ@ksTL4~p-NUtL>y_HW6Wn4Pl@ z`L`NN*3Y&o&G3JEx_aBUFDjqi9+}-a@u>3iGhZp=GMV6K@72EazUXewy1K+{{x+kU z@SBnEjXqhFa-nY*Nl0SF28gDy#>1O{7 z+2p34o)taDtBjN`KV$i}Dg0*T1h2iPw>a$;(7R*VCWqu z!P(Em^CVLm1-C2B&|m$;r1BAqR)B*2*Ed&>2ZyXI&^Q-Wd#f#K`>&Su>+{@P0xmDp z{c&fx^Y3joy}x*+K7aK(FL(DxzT`~vbUov9Gaf&dtNfDm`gHO0bDv8?*2P#>irlmc z%5`7&)BXE)o%x$SD_m?(u>F+zI*hHl{N0^}yS_>XywXZ7;P6>o0r zoa~=q5XhC(efIS9^&5^!xY^6v`*n+*DUWLT^6v6{&BJ`bpVKCudt^9c@#89UXErX5 z6KAtcRDry!p-{Uu~`D$o~t&cpsEnh5wIe@Y1wIN@Jb@{!T zUrA3g))}mfTr4%$wt8OJniyAhez`@gpPvhziC*}nk-2P!YV-H^`|mq0pLyu%4gcdW znUB3zd}bkRcl3dc{FZ**N4qxkt#UrS@7YoOCTuKo)Wq=ZLRW=shRIP*l&t@mHu%1eYZK^ zKH2C4nC#KK0)Z1rg-`evpXDF3R zXaBGL&A))(PQ&%U@u_=G?#Yf>U3dBsXJr1xO``YHrWm{P-COqU?QM5qb>C-o?^|5k zV!!HX&%eGd_VJDFS$C(+^Zp`Z|A)EDvWIh~ae9*1&TDKXn^MK~x8z;!t3RZTzO(r&d!ii zEheeIql*8Xp0@tU=MFaBc|VLr&!_&DJ~DkKyX}wXjPjccSLyxw%`0sdbo_zdp7%|Y zN|}HEXy>1QcDAYMulyyyzu&L_{9{J{yIWglYwvu1Zl-7DXP0x=-$)3jq`IWe37jZ+ z(@g!9*E20^{-BlRH_LRQ-L;ZI2iWD_pZMP6z%Pc^LKb%J^B;META-(<|14kDBbj;i zRO+2wmt@|(x4o7f(VbY!=-l);XK!Qaaqj!|{sAQm{TdYiXf~y!#(hvWKG(71QPul< zwprKr3I9J}SM`KL$V<;=`da0wWh$Sxe$qO<{Edyr7sUwwnJ@3x|9|{f^_o?alzEoJ z>1q1Uvu)OdFTB#UD9c#dy6{KSs!7~0o%qge+8S~?Z2qOyIcsCLy>Z_%_vg;GMeiOR z?Ka7LR55SwgWxnj-Q8}2PcL1!=s9q4^7ENFH~h=r+ZWvUy1n3I&~fXTo2<*;-hFS_ zzl(Ral~H>A`NEf{OqI{=Y4!e5-R-pB@KD|V$3pzsm+fwF?5_JfE&0fbjeVin*Q67l zZ4%-9bKv3zPwwsK&wMP{pW&&pe)hJUUZMZj;>#=UX?Xv5x%t@VuZgoOE4I(8?KPN~ z_r9+A$L4;mkkUC;)pn;oTYvvo$nr%0iAKbhCCZP!$v*!1rjq+-b#VHbM~S%8U<==_=J4aRq&g-st^orO2$jgh%?a%-Jax=bn zi@-F+V!q=ui}y<=D%r*any+AfkjE$feN(FZx1S#K&KHlJCPYPX{lIyM;z5Vf?zZ-tL zH*Y`e-v8O)%3AGuqp$0fyf>Aqd9W zH;RY%KS%; zxUFxDHl?`FbcqgsnSHUYYpTxS-_hkZC%>6*%Ju6B6khK0{Hyk{Bg)77KHq;Y&R4P} z?|SF`*{MH|oD6QWSraFIEcJ*@{N`kz2~!2@k4Z{O22Qmu|N2}?%^Eb@wM74RU+Qa* z4?0h7-oBywZ2mLLTPuy9@2FWI?|8T4%bDvl=ETqV`Jwc_;tpwj?prI@@0d5wJmb!t zz_n?y|NgDmC@f=H^!$0YX~O2z*WYda&fWd()ALP6`FXRAvR5A9w=24md7hNV!8dENj|!Hr#DAf(927E1|36p zEqxxxHP3fCM-mK+USG@2lTG`^9=5QiGHzY-8*eU-cwHfNza!iH<}Uj1p&&0eWVxTf zX0h%wpRcUEJVihL$#u^o?OR1w3D_56`MowC*Y<+tZi|^^k{|egU+s>s#;;QTH!|OG63^vS514uK)uzKqPwwn2&N*F} zr+%Gn!!Dbe0{NNS6=wh3@akUQzH?gl{`elBzfVk^`*HVP>ukLbins5t*tT;`-Oi~Zrfs^-_K@~c*p z9!9I4t@-)slciwvmrMRR;hhqbFFsGc)ACg3T8cvG%;}QpE|u@@?e$)3pL=|*p}n-( zlv6c77FML(HnsX(qCHb+hO)2!XN9SMHmu#6JNw#}(%WWPhsw zywb_sQYT!eYEAv|c>ay5dp`S8F3F!uXmH`&R^df@a4;kdsFjsKZ@8_ zm!+pNNR^0foBPavTkB!rr|HeD*1IGNC$qCZsXPDD@Xyf$;sHm_o_PL2bgHqtpWTK7 zFSEbp+*~2?*>GdmPu@c=pZRVdYv-J+Fhlb2{DW(5ZeAJwexHp6dvIK73fJ~aIj5&8 z{Lo|O<&;!wnzPP>SvVp5)O7Rp;XMNJZ2mc>XU~Ytxxv*Hyshm0&C{apTW6eCsQ29V zM(d^XO{=P$CG$;qeym{re9dj@76I{Pr#~n@?Y&p=w{&~I?a4`A)`ylH)X`T`K5-&4 zt?5nYo~ygNbXH!Oc=fI9KIcmtPp(;=zx7W4?Sv!A^P8BOdnAoJqU&1uc`ht==c_aQ zKY3zhan0&?sUJmd2OSm5pJ@Nf;7_FzBqhtgPpb*P^J(>m#jR!<9^2k1)g3FJds(DN z;nI}1lU=Jeg@@XuUJmV4*Pg#AS*FH)UDV!LzrQvANjS}K7q(;4)zsrPjNK{WmTvoA z%zmr3`3q z%zbIcXDm=sPVh;cQ>ZneUEU~H&$PJt;s(cBeoYs)<>s|dCeCF)d2P3sb=X?vK#lxl z@n?=d4)D!12>$lw=8tO@#WUXQ)tbNWRqWQjlpi6U!ndm%g|A5#ObzPaY0#K0c<1q9 z>pzNI;(V)&^sUb=@R8Wfa`3`JuFvkN=C0}U@>KJUJ}X@Pb8FkrDZ3>b;^XE_(|+c- z>g9~b&r4orKa^uGX-J z8+T3~j@&vkq4QGy0flY+f2E4ASoCu3i*Gp1nUeQr`r|W!OW(KZtGpEV5wuNQf2nVh znr~7~uDPo0(OD<|@O+>5>6o!-WY9|G)wiv0-I?g^{__F%ey65_6AUkwPM_b>nZ7AJ za^`ejf3tZy^Yr&gysT!abvpR{{&e4ald8fe`ez=CaJjkZ^s<$g)K4$#tO)zOa?^W~~9TO)qFOZeO+c6PSpxwhEK$#3)DWEDSPFE%!IT-fXEeWrFlxKy0+ zbMvdXWoHj&+3g5sU#S!N%yHA#b(i}7u2s%2p7uP_zNqme`>hF;>$v~V{WocUP1Py? zrF}L_A4;v8wCu+WhWe<0M~Sjb+WHaY2Zb*0(RK)ZmU>L`pta8XXJ=-effYWM80I=@Y7 zhjI<4-~4~MWw&no?fc>4d`N!VqywJ!?#b7i#2sE~ZL#$6k^ldWi^m6a_{{mBTE3{) zbGr4R@HC$?gBg`dIr1&Zm%XNHSy}EY7q8bZzLR(FQh9@A@BX5vT;(C}^!9Bx(3ozZ zdE>;KYqL4ybrKjA=PZ3BDZ_q9P-Wk;2il?{PBV>CRV*$osG&{ zURiWLPTnSQ@Oqg=vgnkL8;`QcT;RS_c=xd1qDE!MjdR_POy9feLFC#f(RD9k_9d|f z-^yKjY7O58jc?OaPS5L&JldGxs>ZSW)PpOI#&^@s-F#T{uXfo3t#jKfIq!XYdq2NV z?D2Q4w=ed_?3{7vn@!^ERSH{lKj#bTRfkSgy=nDn`QG1;#G`BEZ7L4TJvIArTkf4R zxpT1qn>sVL2+NYUydeLQ{ zt?#`H{gpDYZ@nSk$2EvWEPU-t8#d(n<~(grPU?wXmr{B&vGJo>v3$Xc3yI4Q8y^T> zc}f1Guyt(Zff=#uoKm$Sc1Zj;c=qegpWD~xIEFo&xGd{tYKrHFtkjtyzi+LdUU&GW z0Q)tLd1u0J{yR3`EdAW^+kfTE_9Zv!aTql-ixh0=QGhJxsyTscIoBrs85WJ<0x7IU zkM(aJT)ux##7DVnk~c~lOWoRdBzGt=pVHg$;Xu`qJ;snU8pw9$dZMja!`xL}AJblJ zIKN}H^v65%SNm9hQopNpJB<)E^o>GZ*f%a_KxMgbB|nK-`w7^qx;n1 z500w?CO!(;R-?L1ruxy1dtX`CEIg}HH~V+g=i>bDWorWWJY7Ejs0?WM-CHAjpNx6q zxlNA~7S3r*+aY5;(^0_hq@;;Oiwa&At zzqc+|`p`E$jU5SEy~$_q3Qlo49lmDCw>J^59G*RX>bmTQR>%s4ME!jWrmhbA$XRvx zSD-(iP~j0#?rlVn9q|TxxUM zPi_vKo3E~{JG(!KnXo$3*;yyrQ8-oE7O+w~@z36;m7 zYr`r&EO=;sixc}4#&qpz3LX!LTJzTA!_SNFvUiHt8>GuvLx`TR~ zTzs2Sr~3vk^%u)L)l(SuS@YAhy{k?vKO@n;_>8z-l#g?Jo!gI3wZGTjHYvWAvpv2h z^>p4l``WLcH>gO-7){B#vc~sAIA_zRrxzFh|Dic|-Hrp#+1E^PNL;f%`{~i+OV(R9 z%ht|)5bie3B}V)7l1tYgIWvmwvslUZncZLI_Wd81pV>TpDa9Abw<@^*w8pdS>}%_u zem1SSB9a1bj5P7zTn%1~a?=J}8T9Q*y}i*(_GDk|)SJ_8UtN9u!&b+sr>6e+Q*rgx z)*3zrZZqSfU;Z3A)4jaqc3epRxJmwTT|V%Vaxu>|6J2n z;-~t@S3b79cG-B}EYJB{@(%wo+*~OeTs7C?<9?0xNxV1ry62~*ezj@kkvwzV*LSwb zv+N5&Yjk&Po^*KSlMOAc_tVxK-mvtttfO1q|G!G2IuQ-qYJSVc?|;t8@xjV%hc|no zR-_%Db3#n{{|_O{Ef zZ)E<}o$;q@@$tl+Y`=aU;Ve6npE5JeXZ9iSGk+L=FYi*n$Gs}F+1l;Qp*d%`SZ8_g zhu0LozI=V={GG+mr2`K*zq-=+XM4^~!-TSzcRF+JVT;R-$r}63H9PDfZ4O^s*3Z*k z8eXuxk44_}hLXYw-T6M98Yj*y=lEO-sjB~PD^897Ozc;0p->$EE@%**X z{yE>@-CwL3y!`SH&dEQ%anzj1y0wM#|Ac2p7=C}WD?Y$2-;#cAp6Z_0y$9BBhh$-Q zcoxpPwWYP5C+orC{gb`wl`lWz*;rNc_?G>GUUd^C*F_;KgIK-hXc$JnIsf?cR+G$2 z0sZgp&XJjL+fePq>5e}Z%CBPG+){4O@d!o?*T%c&{L{8XSzflW34M8)+%>ZZ@ts1~ z;+i&0y&Ug4Js>Mlmr3%^`~B{Jv@T7X{_})+$}!0!F1y7Zo7Xuzwtl_mVs`DpVw+=% z6LMrfo_I4KG!|4Fd$%uE?%BUhHLK1vCq(Yf{+_olnSFQJhGX+=3T?hu=N{vGtXk&M zEBCcEQRaf>4&_95(KS!H#5CWO9N<3H%Ush|Z`br*=FqLO)Z{N;V`E$t82jRQPW(FJKRLE_$9Mk__Dy9^SaXfk?k4@7zT0Mj zPvf%tx9?T$`TpRb^RvZTO>ybnC6Z42eh77L`N$e5ux;JeKTAyGf2^K!t!2}LDP|EW zk*?u09@oxkXkPuDzNJH2IX zys+-J&=k*QeFu87s;6r*{Aghg)!4PjxzP7nVAz%4z0&5qODjuG>E8=oRerKAZi#O3 z)Tyd7x46hGS$Rp_ySH#s?WPBcyTa?A2B-Bn%XhrBPm=j|RsB|=`*i*IXYaUO_P^oP z|5Ci~SLMfj%PpHL`c_XmqkV06k4_`|>eEkFug|@)Lo;??P3yLtTL}?e4gC2_F5O?T z&9eL_)9!{ntT)`Z%reP&A&|%0|91B?{@Qo` z++`g-TXL%|&iuXW+H~2PUC#ug>sO!HbH*aM+%omn#Je^T6Ya|0t0cTjUsP-`+uCkV zui=fgtl67#@8_nyK5qWgU7+XazaP(pD(7#j>{a@7G5kD-O0D9?=j~#)mSX?3k6OD< zcfAoYi$~_i!zY{>-`C1K(MdJpQ(gA4=kL_kU^D0aabCH0xo6kDe0OK(>FwVSsmCpL z<6TjI-)`f6fsGx`ku%#_AMky9dPdrJrcI-N$gOQ(->FF4<|}ksv+PGR!#4X9pe0^Q zy{Gs6-ghNA=Fh~*GxRv0m~d{c+xSU&{?*i?(2~fx`~3XDs}V9-I$}g)!x9!<*9co6 zvDakYv_;x+Ik7!*SHA7<)y@8KIfa)=%0Ihci}6&yH%nB1WHkB9Zj=@NIW@8R{qFL& zN$J-<8s$dLJb#3*zQ9)Uxab5G&q<%&PGr3irk$@Mv%ji)@%*E@ER&2*d)=&>K2=pg zL3@57x9-_oAH@mNa{qU0i$v?Ld(2fg%OAYR>j5w0#p7M8x9`|={)?2W*vcL9{?R2z z|5{y9y})rK3bfEHR#wmxb`}79(OKZPXUC(CnI=myf=yW<_@Rkmn}6bLtvkFKm!QkJ zUJL&Ce!rfxK5W+=!I)R3T@H_4#?PPTIz6n!_V2E%mXLLCQ0-_-z$%srR77>HJF$5A zJk5;KL{lcXJ!lF++(*iw^E~0c?Ur{Q={ShOiRb=Bewt*9d~NVN=xLreLSE zKs5H_#<0?v*cCW{?XYR)$Z)-G9Px733Bpcm-dgqYlB!ktyBMA#f&H7dah(T^=EnC) z`-|(x^~5v0ycE&I&}TW%w3=^i%+_0zzAT#D5o#naEB9r$6r(?6<=LL)QQdPN^2^yQ z3104hd2RIeWcB7*+Pw{K3fB|`WZ}o&LFKxIvRI0?dB&ARPxL^N2u-VP` z#oF!n79Hh&UMwbWTjg@tUfS{Jr>9G`rfMH`+m@{B|L((=={F}VJpA&8zx~BtY4gmC z6AAT`H$L4v-+#`6r>DcMmd5UnlRY)dban8Ie~I!;)!*JMy_mf3iKK{jRLi}J$GpFd zK2O>-)#$yd^j{C5#tAl?-hbR6{CwEAo14?qyN>FF>?lyIdb{;{(wYxp zr)qjcmE=-uUVIR|SD$<^&GhIOiRb>6cTR%W+HIQuJ^kDRf7u z{XXELQtMq&@Ak-!hFGIVy{@}|vqk>w>D*L(_~_-$_WyoNo>l*c^XUmuhskRGA4Sey zD$v-q!R?@o$-01?nd>VLy`DZ5F9({^h1D;4aW1E*5*d z@2`upd+#!)pPx6jrmtGg_jk(5%NoVY&U^`+$-ne7Un*DE6wTnEokdTV+`lMjtDK-Z zZ~m4)Gd_q*udLX(sKx%mck8mC+1uVGE6@HoYx$Lx@r$o&Pd{EExpvA=3H_e51KLc6 zw#O<{&mBH|LvOy}&GWyF(?2k5F4_>gDJ6X-pS-1)x_?{n`#4(-$0n9jsn_&ZC?-tr zSy7mnn-lr7hdZ_XHp`oTJBpw4v7hYg*S@w$zIf%)X+LMFv#9k*XWOg_Ue9P-^W(yg zw=dPyj_di`ye#N-$Z-X&sk_O!?(oA6Ha|b_|95Kpjw^htJkQ(DzwznI|6i~5Phb8r zZGo)B%+I^)|J&JCd^jNUq$J;bp5M%!e>UuXqj%Hx>wN#{X=hl!guZ{a2x;qf|_@GVO92kl;ce{0?lwA9Pta&*g7O2; zF0eZG`P{*|D?&~R9n1fG_IkYj(|Fa_*J_3C|B?A#{Oru)sjIJFkgxyaSo!(c!v1KJ z@=xA|wa3D@q`kHJ7q!TxGvnkU);swZw!OXmbJ_{19H$>YKP+_H^n+OW|*~JTIPHD zan7ABGY^^NExOASp7W4PC$8snXKsDkp+lv2estR0%NN%Rc=!F@;;gHy0_NUwbTi?p z`6_K@R%f1lsU>LtyjjoA$9u5z$*IiPn$H#OpTB?Zxenz#n}6Pi){hQWy*u>Ye_LnTxj8eB)myUlFS>Ab_4OHN{1-U4^Ie|0I$T4coMHXxsI6HN zg&&{t)wYKI5^SXrRt^?Sb0I@+@vSMICPiN&?tQnE>5q^PoAc}I zYiG?#>g7%W+ul@g^4)OX{AscM(dpj~97wvd-e2Bp-k;FrCbeHrcC4{Fw(`TvBRxm$ zQ=VMDF2O!c!CS(bPtMBa`@6f#C*@dI{wzve*)jWVwoz*M+vg7_CEWTVxyIk_bgFs& zJcd{I)@naJF)>!s@Tz6=)!MnMbWVx{Z1vexyVf%Q1jDOsQCGFToYG!DL;hp+%ztis zo~%AQ*Sdb5RSD0t;>i~-EdBD}A+uS()Unv$HA$Zh&q%U=dw=@3NzUU{fve3PuhyE} z%aY?0fBtrzoSL%y_KaiOBCLK3f@ZHL3QjF_3w2AmHRnLw(^sqWC(Mmrd186i&DxVf zr&e2?JCRV*xYl!)S*Fk2n}1}DQbkv8QGUX?UGhejxLjS=rOlS!$NApg;G4RM&3e^m zulR~pTYL=^t>Y(8RgJjddZ%lFioVLj+uYvu9~if0-0S&euvGb4{oC8y7Vav|mVUbZ zms{DJpv?E1QrqWj&AU7;X#ccX%Y5cJL=-nYNK1e5;e5sYKbfz?yj;Ux+K1k{2s%jm z$_v9S>F?uqo#oRzIp5xXYu?>S+U>K=vtMm_7m^g=-nW_KNT#c}h{Jm0)D!yqTRtDn zn%BT!#@JcHGxtvF!cED~{p=bKx@dOjn(4>yb9!ywa?$^I|K&xjpXZ7x?*08G{nUoT zSN23M*<8W%OoHY9*$ItIOhunh`JJ4?uR6ooO<+pm$@to?Y7|MFR#7129hXXPhv5XZlf)w-tZV5MD#eDsmhm$&9Voj!k88D|>vyU=Op znRXoziM+hb?^)po{<(Rx%Vasc)Ga3b{c!kF&+}fBf(ruc_NmsS`iM_S%{!u@Zyd0s(k!^97drSmJ24t2JEGe14eT65O|3+ppe=FYXUyZMd% zsjS+X1)p;^b$hNg;I5xDwQ!>D@2{_~OI~}8+U)I*_MR@$)0fxDmtEdfDt+U|N4>4tzgKoBT~$}!bV_3RspSWIj+z^N z(lkEy@G+ZRUBaD%?OoI3syfZ`e@=6{d7L4<{mG`(@R!d&K3r%l{dkg^@2RO*GSdwNH~(x^`MrbxwD*KldxF^fr*7-~llnY+ z)20^wh}$=JaqNpMetz!kbFS(cixu4{d* zBSQY5>xC>N4GmqU>64ENk z_2*S7_4CG+o9Dl~SN~wc>->k0miCn!rIx?Bwflau zT&c8KY09~O^B!NCn(a2Hl6(4x?_#ZW$t{2X9aojRwybu8VALlVw+5TVsCc zOsb~PkH*D`lg0Ap&wTu_?&2hmIP=__QmX&f?tk}TPvEodD3 zyZ8RGeN2}RUGd7I^jpo8=jHGIKIS+PeHD&CGmaiEdwcVE zeg3~P>Hg`K)p_pc8kqVfCLjCw{A%+n%U7m3X?yOke(xan|3~L!w;RWF?_0L@OT2CQ z*cV$}u}AT+o5aTh!4DrTm2vg1$!O{P#PMh1{~evdi*3X|9=R$#ujBG!|N43VUvAzn zm8q!X{7k0L_<5c2A(yHhi}C{458Rc}dzX6J?#<_kHgmh{fdno{>SIp*YZv737-G6^VcNRC7QSUqPFE7ul$|( zy`L?=y|-e<`nGU8kkI_IR@T(!GP#SEWj2L|0$w3F5PvZCA{v|NM;Q=icWT zw6#>97jj=IgTm-scy zc*Ti5peePJeMX(z)?K>3=&y)&WZU=c?KM`E#>-^_Eb!+Sd2`(&T*zppRz zBIE8l;r-^PKXp!C&Qlq&SFh)EMFqeWWf?_QmkNjrA=`k(MG_l=6R zC$_IQQ-AbRYxf!*McaeR&sZpb3g7upsIKj_)HQXj_dAbG&2^u#dC~vkxtnWDtL6CH z-|Swddn=&ix`tNn<*DrXpG^bZ_oZ+aN3H2JXx~}z(Le58#cF0)&+pqDo z{OQr#?@wKAmU*fb`gvyC_Kn_4_nw|6YvcS*+BEy+i5aHTA0PkQE;D!c_ebA%*MHgb z?ps(`arO7B^;~wfTa^`+Bl?@;C)&T_{HnZpnaKMWt81;K8`u7wrQXhLwJ!aTyZAny z$5STw%rq)|z54O-dbK}$f4VLCdfop_mZyNsk^SG}^bU0fD!cb8&ag|44qVmDoGDZDSvt5;^I5)w^yI>5)e6fW>M(Msuvspx6-u-=N*NXPC zzhMiDKj0OR(0O9t!OJJz_NBxvNq!nC=Kn=_!KTzx5;vLAmx~qSTrPH_ORHn~Nxps# ze*2@_?%jQSa8vCj59e=M(e9gG{*?B2vr9d;!zAJ7y zNnrVQy;EV*V!Ai{8c!PeZ7opEQ8gBp`us#QnDh7a=V#^~|Lb%mxq5xHfqmq)$t}mxr+>*dr|gJ3syU+r_g5%_}P$-hH1lZ}H|P{RJJfC!T+( zt(D$4r^b=(^5Zu*Hw79#OHLAfea7J8p2OQj7C8&C)TiFqZkzor=hfBS`uyh(P6?Nt zd1$T4?IKl<>g$fqPHmkE%e5~ZV7W2%)6=uBMU{_CKPVjSYi!J_zOCuel1X=~zZD$~ z)O}`rB7TzYZm(Yf+xq0BU#jh2P{r-2~HmXMkWxAKY zzgId*e4=2=6P?@VUZN}l)4Q~B?S^&xt`^znH4FCFa&hq(rJYg8`)T@f^~8S*>o7N(B<1trq>dPHDc<`*P!b+Ic@ib2uHPMO328 z1nnR1K9|X5DUf;U+eszco2#|vZ+f}v$mFU1Hx2prDTl9(J6rqPv2H`JfV_6h$yb|_ z_c5eSUoE2?ztQygRCew9+gGngo?L97x$@iA0w?~ZfvV4xugaeMX1*%dZ_XQyb?-ij zCGISGCb0bvmut>6otbl=Wta7EY8f#d3ppmaoT>7M;^k*S#^Q4OwwW$9uYKYewyCz6 zeOnHH*i==6C)sm4&()j_ZVUx2p;lU7zPP7wVzHRvvCfKTtHH@`k#E;(Oa9&O&sMtK zQ}39x)ZR#5Rgjx$P2T&2ms_s~8E)sBze(8M{`oO+UHd%2T))&`{u4Xbm$j6#YgB*B zc_dnQ_Ti`7FBkq3d@op`CK4O)=)fw5-zSgnER@TAw`0ncF_WMp7Elj3Z%dh`>VMrBoc}Xj96*zwd9%!70-t^B;E0uIb#D?03|$l4+jCt_De+ zbq`8J*_jRmK2myCVY8z+{8!!W?Z=ejW%wALKYsMOeWK#-#-q*FpF-q{V+ z`&Ins@M}6rfWk*tYjyT9c~Re#Yh<_U-G_d=@vo7k^O1 zG*kNYx4*xg4~b8*e_wSdZmF!Q@2n#~Zsk3Dc;%%>w|w!8pZ9|Abu3o$)+$XYt#+Sn zUG!2TobT}Z2?{bs3{@|mswY00`6e{%S?cApx4S=pQGyYvRv#i{&?N`Cs1L-B7LTEOS`-<>RAQE4N)eAp6j};MbS@&6n?$ zeLAYHw&BO&ut}_IF24Kw(fzUMoHvca@qT~a*VlYxZ9Q>>Grmau){K&!$~CEO$*zmP zx!kbhIKFJER_K?P9!2`-tF$z0{T~MCB?{aIuhNP(PGn3pvu<5nZLy$zaalx!gCc0b zb(8Up^805U*6;h3;{C|0>=u_y5wp9+++&^6@|%xx?Avx&a`l3qeqFT(4RH_pwC7kn zQsKq9Ov}c1PU@%Wy47ZBqU=qgGZ)OxDLAmQIc?Y3Ihzmv{PWxAVCbCOVxc{6Z|}b^ zqkHUq=&g&@JBtdJ|GTkFizD~+pXip;ap04P{$#%2_v5J8eRh7ig5{r{?MRe1FYca_ z)4%=TjQJ<;tUj^Fr%J0Z<)g?opWEB5Pg`sY3|TGsHSCkwMa=5WgZQG~hY^Gzn;hT27*>I|I_D=o-iaLjGF;+G$4_a#f zNWE;=rv}5_F|DUUHWV2COFZ*+=g;lyEt}VzQTDyM>GX+753ZgvTKR2jy#C*|&5C?$ z1Z`%n-}JZFKKI<5{_VeQb86a;PE$C+!xwPipi$Es3E_|wmk)~7Qzr_B?wou!dKqXe zXXfWGSD(4W#HVf#p2ouO|6A*J-8%RYW_pZ4Z}qS~bp-QVf+`yY7yi8Nkb{9WH7 z@=yK$-$!*{Z%S_W`Tx?4*}Sp9nk8y`-rmc>*YErBf9m?Ck8fJsHR_dAdq!o1*diCMzL@+-RONy{we8orguBO+suB@Cu=^>KL2=M z_fgQ&DubJ?^R>%amR|TIs=dRQIfuWN8DtvaQ-IbJ1V)76!+v-1!0tcvY_8@uk%_P({z z`{&J`7p4*4x4*r9!;7Xxudd&(d)%ehvM}cWXINlbQ@#3}w2GG4(?)YHuGCGt&9i_< zJIN|cI;`Zz>3(6!gTs?JG+h!g%^Tt%C6KSEF4>Z?Yay2YyA-;i>eFJ3kv$`|X>s)vsmQs1Y1U{3+tKxcQBUr$(4Vnq6hX5&OtUr=U%5SEx;%{`O7FtYf~j zgIS-g))JiTJST#6>FdMo|E&sDqu*<7Qi*ogdMo=>aM?wJ?f>83|6egPU5mQnJYt2JGFQrByNO4!g;bv50X zEi>Bq{`MryEr2ev`giciRP~#iX8-n&|7)Yu$=1%ZRLV44_)lolf||-NFYN2QmTU8W z@aE7~36OaGI;!%c;mhoE3GVUgKc-Gp6}*1RXyuo!66ZfO@~TJAu4UxhcO(>i_Ex7& zO|0T+$I@4Yl1FQD&)(Wvv#+gx7D^tuX{J7Vd58LC^AqRRy3E?~E2~&(-TFPSV_; zBcpCNGn%_ce};DRna^HRH+q}pPu-NCrp~uMfsJo%^wuYALKc5FNA*TsSsb1pwavuj z)U>*r8=aT^pQ7u(Ehq9PJ6l53-ZX*QfK?)&%lF*Q(BJg(Ma4(%#)^e6npVD8()l>! z%#Fetr5>$QlPot+Uc@bH|0mC9o>8y-#4d|`gY++p_x+d?eer=g$ElSkCm%EZd`8tI z>q|slAdZwnek%;2HT1^{Xl#?OhOMnxP#mmzwC8*2?6&r2X~3zw9gct>td| z6hA*_Uf0xqWhL{^{F|GSUpq}dH}}T3!yjYxKJIqw&HBPMyTb?f;;4WkuApo6z&(0FZBPSF=m)2xX5o&46XV#Dl& zRXk2qdMdnnV3^M7x?`nZ%4xk(58et~IZ2hJr^dbUYI4(_o)i7XO^M($ z@RWRSuJ*aVz-YVBPf#|T=W{bPh4bag9%H5Y`0J+G*Mzo}&gKkT7qPzK!nqL9*iCO= zoRoNe=l?G5@R{MK9%PzWpWLPio^zOT@j>Imp6csG-9MSvbDXT-RCB67_S4(gZEp-x zBrGa8;_bKQU+$Le>o^jVty*w*GY|bUNZk5$9xQh4iyK=Lc zt>(x))VS?uh%Xnf|2ou%zoR|a?rhORJ^w4_ zPuzdpZ}90ncqR7F3?9fDr^$6QgdTHMHtTP?lzOW0zG~v@>n`1;qLGtUDjO`mbuX2R z!S11nMAy0(0Wp&+r-**7dwk5-Ia6-#r|$BpuVOdN7tcH$lbY(OrYp#vx$4WwpyW9z z^K~jZ-d&9co#b|bJ#KH=S&8=AubpLAE4A zeD3>p6V&B%gSI7j+MXB*}Z%tbLFqg^;L)Y_Z7aS6*zIEkf)X7wZPdRrpy4R(z-dCDw%H%J~7*Ql^ zSJaaK`ov6S>+jv)LnJTE%!HkYb%2d!L#n{-kcW8=lc5J{ols6l|KG_h4Ly8o({l52 zw@)&!XM`zz*rKy*%c9e#qAq8`4S=jJLOa3A#qmL=<}RiFd0mtC@?C(guEM@>>H^0R zU6w72wDYb`e-;K_sf1=0oO^(oDeB@=MhRJbtDzi}1-1)Z=vucUG=5ezE*l|6@^fUk zPG?Uj*#Px7L=;_*!yP9F?OjP5_JNP#VhW|=FT=Ieuh}>rJm&;Tqd^qr+j* zjT2WkAGloq|F1i*lxZt4c^TPoaFfxl!UbhD;l?3!fVnK_b=Gwnmv?^5V za`yVARjU}3Hm9Br5BT)tz>|n$^QSJ#iFrn zT1DpXK1``L&RVl6_4I|S+2Jc)IuESiPqt7|dL$-mTh&us_+Mew!du#h=kx5sWobD!A52{n%Hge4ym>*X!Ot!%yxioqxpK_Sts) zOQht?0~fh$Nx8`M&OGDxx3@LkDZFNie`yz>8?GGOG z{gIpapg80IKjtr`FO>eBo3iqdqH6O?Ov#8hahpd8Otjar|)kyFZO?Ju<0B z4xU}W_;+Q%!Y04ON9{g0pP!9)@ZKNkwy;|~Xj96`BdbjwuZ~>v?%JiURPUYtnLj27 zA1>yc+-sbEu7LaCrKR2b z30)IIz$bKtA)V0Gm@6te#j-d}>i<)TkC$IoeSKxB_F4GFg@uPpp1u<0Iw5=D^`@}3 zQf_&uPuq94UGvwI z={w&%J1gvPcX#Ph8Ou%D&daRQH|$y;JXLij)2eBn+t!;t=aqE08@4*CHLmih=x60R z{mb_|rq^uUS^WHbaC_gunmi$?T~p+2Y7RULJj_wFq3i5%gLIi2`}N;neqgi9ZSAd| z^{af$gf$OO@uY zO8u_tt+D=v&n)@^E;x0V=|rhP6yF-5e+GV{i<-jexWH!j%uS?t2C($~F9Zg0=d zeiJcqF8fWx^&t<1&z!y@c+Kjyc}_z1!Gy&<0e8yY-J09*HQaca(b7e=dW9(;r%YA7 zc<H9;gw0yhrXQYwvu6iMyjbCmOL% z<=|P87i%q@Eq8GFn?K=cwuvHP_cK_0a4v`9ogbNYYh$tc`~wM#M2?8fo~|FCI5%42 zZ^<7E-6(_mnSz&g``0hyvGzGT+tsT3ctW4!hr2wI8VU;L{$_~twY>kmT74{^#cAe~ zJ_AF?=h3S|JiTVC_3qZ#QhK{AYI_~?{0qx{XSbCZwBBxHX3sqLX6BUssgf+NqEo5@ zOk|Uz%?(!^c(TLcA5+Kz2S$_ww)WlMm)4tA^6gD!)W#xFS(}Ouu`~0%4Q94pV&}WD zK4$N!%K!g<%a+X2jOqJZGRH1qk6aRW*$t4b^Hh{shl7WAL1_|xL~ zr(|hh^07@tdrpe~G0(sA;1q-M!{g@nJ{)Ng=6;($O}9L##Idk!hNiW3Y0aj${HLsa zA{?LJOc9?Pl_>VlLi@2&^tad7*Bh@nFQ|4TjVUa`V&>Vi6XWOa`>Pp#ZcdGY)lr$o zMd!?N?;UzlJnv`e>G$BVhQ9}Dp0Sp{JXWb2`-|D@%#@9bXE-r(*=ty`th@r6{Lj5< z%kMG;t+xyl0W}W%fXU^Nr zvl}!Du|9V9v5omxcj?+re_{DfSdhY#wrUQepR}cN3wF|0O~rvE^~_64Vmy1lb^Vig zd~es*)g1COLOfDIqkqelyf-}!(iFZl6OU^;`hoOPwr~0{d2he{Ij#Or2d*;`uqF+{>qv&?&WW9ot=88 z`1zS7dn%QlXP5PGZZcYAbZ*6oj-1)uL78?;Dd6Q$T{Www#JWuj@R?e8j9us0q_F&+QRxbwd8ri#lY5BlENoan1u$~Ave>6IOU%+Dt0SSI>5 zeHEP&6>u#lt+w{Q-QJwgBF2PBo77a#E#+%!&wP2m|NqB*yt(cZWK-Sa%crfaj@tHX zN?hveN1IaZ7rni`|G8KEoD_T5nOXm|ch3`edMUiOL72(ie_r~hH2b@I{~t)ae*e%> zZ`t=Lr{3MzTE73d%`3B#f& zUvJNS_V8}iH`7BdyY~L(eRSS#RlwE4S8sl5oPU4k_i@1q`zI_;xHze=<92z^^Ucq7 zpS<^-YuMfX_SWY9|M&j9HIvgX{&uHt4kN3K^6{R>=U1~|ExwX{<4nc=@cWH6|2_(< z_ipHo-dD^cZ+MIIvFz?|A1a*NdJP^mE_n zx4%)*=8xNvT;-Z`dtCb*o$ZTbb_*u9nEqeVd;2@9eB$i=kI!FUb3bE`^1PqLUsb(5 zg15E7n=t4v>6XoanmTq;vx zR{KmQ?%d4cXVT{{Zd3fc^RsA?!#_d&N8j$-$fbOIvQqtR?XfdEZED`KegFE(`&sP9 zt&g_r%v*ge@4=qMy`44xcNO<1x7L07cE7y0z()K>b@qF$uX@_^7v-{*zs>yc`TO19 zeKxFJ7N^43<+U`r-`v#B^S^1j?T%>u$F)mlu1_#@zu6VqYjD#p@K#f6KzV%6*Nr#%%`_m}*%p(<8ly5Q%Uvwen+VQzmU(^Ehf#N4?$-||e) z^7TL0zu2GpEKG?%KG*Na=g_jqNT;eM|CxnuPu3UxRsF*=-E@tA$i2@Z-(P$bw%MB* ze|DPJ`P()gPZV!WSZ>Po=w#n*CExg(RaXQr-PxJF{_$NMOIcmJ%-0s@u9-v@KPxo( zy<@8gTa&tf_|(c>=HN{C-R|$)<0tI(;~$rHS9Z+|UwyjIRN>eOzJqsrY7E}54%sTk zFaCJtgW$A(t9Q*anC^f7_VVgZy=~vJ=gIKB*fEb&KK6%E&*WD|si%%?SCX^;XZ+B= zX6cX4NL|jR<{#hhop!Y_%zCoIkmYiEj`pi78<~q`;=^1%|K2qtvMJ$r?1SWNgL2M; zURtrc)T6%?{F2wXl2H4sGhyzNb51;B%G>kqKD(BfR-YhxYWnl1Rws0}I)HYa9O)GP zsN8z^@Zp_X1Ls;fo{7>iIv>2;FL+e4e9e_NO1xhYtM^jdwK9 zzjbJPXrRn9#NP?e+bCiYCpk(SCGdTI`W_&3y{<)U0ik zZ2pMct}5?mKmF~b5-)Ta$+5{3{bw5L`Oex7+NF5smt^Ut{|6ZJ7ItrI30`{!bfAW2 z$-6t2X;&xQKDm`~jUK=J9rtItC(`WJ?ApF~{pK$7`pX}euRof3YXeh3`dL=Hl;6@< z&8C}ri^cgwTxs5v)+@99(lT%9qwyL#jRjIm6e12BK6D>^Qe419!4J!<&UJjM*mY`) z=r6>n&A&)j$LW$W@k&Y{x|%v)cmX7$koE1bR2v|K-uX}y+8aM{!^E_Yt3l^brTTNkuc zsQ!y^boFe{W$~ZNZ4=MA-?!h*vEt^v;&pjAwD z49_5|m{v#6jzV9>RApmY0NytK$wk&kj0xk-!Vtqj*Wb=TF-cURX6RjIi2X)O!*q|#@XKi;1q_}`#c zW`;rT?G)j8Z!en8-S%+TkIhs4Z`<*0Q(o>fcUA6h$GQzY0`l5Sv1>l}ePo&v+gQ|7 zanb(R?W3#Lc9-u`Zhe32+93|xDQ^54(kl?*(^u<5bJUJ+Odz)g;g2Fv7 zwY)vNmei?PKHeG-+3P-I;iFAE<+=-(`r3RD_Lbaw;|1$p9l6uy8+WgMx!re8W^1}i zq|wV#OSef1^xt~U6Svm<2rjonuk&#^rJsW$if zv8{!{k9y?ao4&7HvE$)!*J&}QG_HM>EzSG-&2*P@d#vK)4JR4ySnl+THU6H{zs)FL zdfr<5=y~b$=LWNPnk|gExoO)$_RzA~?YXBxY3hcV`|UlqTUhP&ayRA9_#pneWY>}0 zKetYSZhpNzW5ZOI+r8)QE*~&Iz4J@&Q=gK3$!k9INf*7Ct#DkAuh#U}wV0hw->;fI zym`vzP*>?a=F8%%Z4_gsZxfThu`lFt*K%o_r^X2~Gt6#(Q;RF*dwKB2nb!+099yP( zZ=1bbZButo#bxo;#nL+uulbqg8(-FSX<4oTqnlK;Wc@~)W6ski8OL!?-Cofmsiimj z^}=IiA75-=thu<~{$EIafaBh(@-r5x;-3UllV4qVHD${&W1-Iutw9f}+rR(xsQmux zsAY~&Q}BxK=0ASE-G2X%T3b%&{)bIB=Uz2G^hfyZZ_QvD} zdh<3})^O^Dyf8Yb*R|r$ia9?H2MI~Y#_YxiEoqkhAM>kA9!73`8nwEbq{kd}d?sV`@$e?o%~Rxevn{^QRkHD%b=uRI zWoOtEgvE@rISQ40r)u3_TmFW}hxykVt?#xPPxJPL)=O~jdH+{7^Gt&FXO7FJ@69%) zT#`C%vvb>4`I;XS{n~DBIJV?u^_JZHMJtQ%RUDdIzxY@AnHxrYM$Nn;8#eY7etaPu zlX7Iq;cpqr%Ik{KrMLUuPO#qg>6qlobCUZfevn0fKwoa}oaKfYY{Y5Pgr?{*7BnwRt3W^e2L z9=qOn|K7KYzSr&eT(QT$rMv&Tkys;-;o{TZdD_)sX8~wr|N17aFuVTlqN&Cg%)$eA z+e);@7Fq4P={avjwEx>(5zgAP?fyLpww)krnKa|0TKWpcy!my1zy6&bm!lGKkCj!N zZTF39HZz)oUQG5^_fFobTgsaH_-W44AG=;ID{7LR*E8EDwM%Zn^~yhA<~H}p7rPve zU+b3p)%9Vb===Jr+3_{D)gKQ2?iDwc&ffiJPu<>4s@pu`n;&uMZ4dIRe5;hG7X3DA z>ldRlv$o0!Yt(Ki$vJjrrdEIDlYP~zUp)W7pH|`+$a>cL6HB|YMPk^L>j(D1Y`YbN8qhAH23R`*7hY_M;6+cojosaNJ{+jykyf^IuG@09p{_R`W@*Tn0R zr}s@dl_w#yt>pW;jzgy6^KQ5lbWtZi~59T&*%Dw%*>ZMrOu`^R&$Lw!3oOU?rb?lSM2MZL7 zDi=C^+PO(|!=i0k~@I8~J;HM)P5c4g#}vUfF` z>X>)>-&}QS-4g-pFvpiwZ*COs54kyQcel>XX%oF`-RlgZnfZbr`>%-2nV`Po^ZE0S zZ~N^#W&3@_OpW9vi={Ny2JBwy6ls%ti)ZbR)!$R@Zt(t5lA!pnaN<(2b8A@m~_+1@xOf+s7-coyu#aA<)z9zVr5}<(|!FFPgnKOFY=`Jv-;nmY0u{ z=K2Y5e|yo@F87y3PQP8q;~v8?>ma&M`z0q+Lorbv&1&7r$L)JRBAo_LJsW5#Qrs@#;5KYCN= z#oUVelK$gB+uXH#zj6ESI&*Q`-p*y`W?Cr8DxNmYwqKSi@_1|J<>jv<%YLlLjIsH} zA}(q8a)a%y6CJs8H}_utu{l#Z=XjW!kBstF%g5$H_a19{tMNYUlX&fH$@o3`QqG}^ zuO9E2>Do1S?cTCEhgwC?+TJb4nr0TV=?YZ^w?>+yX z3-Ns0)+bvZJ9qp1P7}ZFPhU=A+w+@G-Y{rh_6?7leqqT5rW+IP?waq%tu$*-GJD~f zsK3T9=W=>mHCyg6|M%~=e9*cW$(iQ=i~p{xtz8+Ec>8n0!w0iY|8`knP+|L7=!8I* zo=?Br4?p{tcbCtX<5+CbEw24+`3tAR{JW)_+4w`jjT+8>cS^Y-T7x2wc@1sOG# zv+=&se|&tuzHRl_i<|d-SoG`6W!@{_KJ@mO?^nK7EFTs>bK!~u@-g;Xzg*PVbwR^t z)|Z80cVeceEI+Q_&>+7x>*|EV?R=|mrU{qM67<`B{Z>Zu`(v*ksd|4Y+wttXckk>M z!6qt`@5$%uy-uEeO}A9pF7;K(%WHd=n_0yNo!wFSxtFi#=hN1jx`WE~|GKX_*f}O} zNSxEywddQ;0@=#8wL%izt%g+^26=&8>(pOgo5-zyhFkyE!Sfx7&R@Ol-=z4?Hw-?` zZylFkl99jXrSdkp<7Z5F$X{P8JbC#;XZF|PX|>LOADmS=_C2^O|zWmRRfZ zOVPXhXBvfWJiUBM%GWPv+;eWfDc$z;or?FgPcMV+?=Gpm{aq>h(*LZ}*M5n(ti-XT6T3v@S;fcNrIp5?S6Hb{UA?@f&^Y_rk=OT%`rV${3ab9T z685ZAl2?AwZ8e?Bwx-nu4-Z}X@bmeSyt&8!UJ~pt+CKHXPUNOnTT%>DCrsJ2=Gm_0 zJ~^NBPM!X|g74~-<>sHa zSfBBgdt~Yb2{VrRn|mTZ3qYF?pA)Y&0;sKx&7MU zwCH>7f)(i(wRZLFnZ56fbi3ttS@xsJF`1VVCi~qsa{ApTYO}Yh?0fB*ynAap6IcVD z>-`UYZ)*NK*CXkYz&nX8^EnMcc~!}K2J7x8uh)NlCADV5!QUSil>f?>zIty{uiE1g~l*fYNCRZd%WPY+vGnO?^7S^8bn7MsJZl5cHi?^!JKkbieg)l;R2IU4yV_|sGlIWF5H z8@wSs=ylYNDwgUDi7(0Q!7_^Z8(hPFuG6|zcJj^4%af+&h(~VHR8~2*b>Hn2hLBdVFd28RhjF-)*bE{hIRZI9Z~&(67eJaXGf zHQtl9ZrY%>(yarryUTz7dgzgxWOFLxc%SU8n#RoOhd(-5i?5t(e!gAGc*buFtCM?@ zciuiBbV=Z~jcZo+Yn#aUvNtz0KR-LiW!21|$yK8Fwl{k&cMtdegX=K^PueLiVy{)^aV*X~!?GqK(``H_(o?KmaPICXY%JR(p zzBg>x)CKZlB>!}t2u}{YuY7#cx0-~dzGA6bYL>HCu$~Ux@sB}!wZZJ1htKD)EZ_U* zS2OFcvl%(XGk2ID{aJhH$l>HuLMJMptrV5}*j4$qZSACoBC#Kvrp_ry6z8$7eBd2e zBw};Y)7h_dOdgC%yq+gb`CgJf0_CMdCEyMrWPaV~P!`qT8P4X?wGBi(T2KfAe^%jHTz> zISzj3gQS^`d{T~I^O;4pBmAQ1>kpE0oD�mzXm(cCCw8GXK5s#sxFJ9rDn04R4Fs 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

K@7vKw>xC~Iiz|G(m2>O-70=D( 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 LtDnm{r-UW|YFaw& literal 0 HcmV?d00001 diff --git a/packages/browser/context.d.ts b/packages/browser/context.d.ts index 6468f1e88..6a8c37da6 100644 --- a/packages/browser/context.d.ts +++ b/packages/browser/context.d.ts @@ -44,6 +44,129 @@ export interface ScreenshotOptions { save?: boolean } +export interface ScreenshotComparatorRegistry { + pixelmatch: { + /** + * The maximum number of pixels that are allowed to differ between the captured + * screenshot and the stored reference image. + * + * If set to `undefined`, any non-zero difference will cause the test to fail. + * + * For example, `allowedMismatchedPixels: 10` means the test will pass if 10 + * or fewer pixels differ, but fail if 11 or more differ. + * + * If both this and `allowedMismatchedPixelRatio` are set, the more restrictive + * value (i.e., fewer allowed mismatches) will be used. + * + * @default undefined + */ + allowedMismatchedPixels?: number | undefined + /** + * The maximum allowed ratio of differing pixels between the captured screenshot + * and the reference image. + * + * Must be a value between `0` and `1`. + * + * For example, `allowedMismatchedPixelRatio: 0.02` means the test will pass + * if up to 2% of pixels differ, but fail if more than 2% differ. + * + * If both this and `allowedMismatchedPixels` are set, the more restrictive + * value (i.e., fewer allowed mismatches) will be used. + * + * @default undefined + */ + allowedMismatchedPixelRatio?: number | undefined + /** + * Acceptable perceived color difference between the same pixel in two images. + * + * Value ranges from `0` (strict) to `1` (very lenient). Lower values mean + * small differences will be detected. + * + * The comparison uses the {@link https://en.wikipedia.org/wiki/YIQ | YIQ color space}. + * + * @default 0.1 + */ + threshold?: number | undefined + /** + * If `true`, disables detection and ignoring of anti-aliased pixels. + * + * @default false + */ + includeAA?: boolean | undefined + /** + * Blending level of unchanged pixels in the diff image. + * + * Ranges from `0` (white) to `1` (original brightness). + * + * @default 0.1 + */ + alpha?: number | undefined + /** + * Color used for anti-aliased pixels in the diff image. + * + * Format: `[R, G, B]` + * + * @default [255, 255, 0] + */ + aaColor?: [r: number, g: number, b: number] | undefined + /** + * Color used for differing pixels in the diff image. + * + * Format: `[R, G, B]` + * + * @default [255, 0, 0] + */ + diffColor?: [r: number, g: number, b: number] | undefined + /** + * Optional alternative color for dark-on-light differences, to help show + * what's added vs. removed. + * + * If not set, `diffColor` is used for all differences. + * + * Format: `[R, G, B]` + * + * @default undefined + */ + diffColorAlt?: [r: number, g: number, b: number] | undefined + /** + * If `true`, shows only the diff as a mask on a transparent background, + * instead of overlaying it on the original image. + * + * Anti-aliased pixels won't be shown (if detected). + * + * @default false + */ + diffMask?: boolean | undefined + } +} + +export interface ScreenshotMatcherOptions< + ComparatorName extends keyof ScreenshotComparatorRegistry = keyof ScreenshotComparatorRegistry +> { + /** + * The name of the comparator to use for visual diffing. + * + * Must be one of the keys from {@linkcode ScreenshotComparatorRegistry}. + * + * @defaultValue `'pixelmatch'` + */ + comparatorName?: ComparatorName + comparatorOptions?: ScreenshotComparatorRegistry[ComparatorName] + screenshotOptions?: Omit< + ScreenshotOptions, + 'element' | 'base64' | 'path' | 'save' | 'type' + > + /** + * Time to wait until a stable screenshot is found. + * + * Setting this value to `0` disables the timeout, but if a stable screenshot + * can't be determined the process will not end. + * + * @default 5000 + */ + timeout?: number +} + export interface BrowserCommands { readFile: ( path: string, diff --git a/packages/browser/jest-dom.d.ts b/packages/browser/jest-dom.d.ts index d3c4be89a..d0769b8ec 100644 --- a/packages/browser/jest-dom.d.ts +++ b/packages/browser/jest-dom.d.ts @@ -1,6 +1,7 @@ // Disable automatic exports. import { ARIARole } from './aria-role.ts' +import { ScreenshotComparatorRegistry, ScreenshotMatcherOptions } from './context.js' export interface TestingLibraryMatchers { /** @@ -673,4 +674,51 @@ export interface TestingLibraryMatchers { * @see https://vitest.dev/guide/browser/assertion-api#tohaveselection */ toHaveSelection(selection?: string): R + + /** + * @description + * This assertion allows you to perform visual regression testing by comparing + * screenshots of elements or pages against stored reference images. + * + * When differences are detected beyond the configured threshold, the test fails. + * To help identify the changes, the assertion generates: + * + * - The actual screenshot captured during the test + * - The expected reference screenshot + * - A diff image highlighting the differences (when possible) + * + * @example + * + * + * // basic usage, auto-generates screenshot name + * await expect.element(getByTestId('button')).toMatchScreenshot() + * + * // with custom name + * await expect.element(getByTestId('button')).toMatchScreenshot('fancy-button') + * + * // with options + * await expect.element(getByTestId('button')).toMatchScreenshot({ + * comparatorName: 'pixelmatch', + * comparatorOptions: { + * allowedMismatchedPixelRatio: 0.01, + * }, + * }) + * + * // with both name and options + * await expect.element(getByTestId('button')).toMatchScreenshot('fancy-button', { + * comparatorName: 'pixelmatch', + * comparatorOptions: { + * allowedMismatchedPixelRatio: 0.01, + * }, + * }) + * + * @see https://vitest.dev/guide/browser/assertion-api#tomatchscreenshot + */ + toMatchScreenshot( + options?: ScreenshotMatcherOptions, + ): Promise + toMatchScreenshot( + name?: string, + options?: ScreenshotMatcherOptions, + ): Promise } diff --git a/packages/browser/package.json b/packages/browser/package.json index cfbe29eee..43dd56498 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -95,11 +95,14 @@ "@vitest/mocker": "workspace:*", "@vitest/utils": "workspace:*", "magic-string": "catalog:", + "pixelmatch": "7.1.0", + "pngjs": "^7.0.0", "sirv": "catalog:", "tinyrainbow": "catalog:", "ws": "catalog:" }, "devDependencies": { + "@types/pngjs": "^6.0.5", "@types/ws": "catalog:", "@vitest/runner": "workspace:*", "@vitest/ui": "workspace:*", diff --git a/packages/browser/providers/playwright.d.ts b/packages/browser/providers/playwright.d.ts index 8b607f9e9..1e36ff120 100644 --- a/packages/browser/providers/playwright.d.ts +++ b/packages/browser/providers/playwright.d.ts @@ -11,6 +11,10 @@ import type { import { Protocol } from 'playwright-core/types/protocol' import '../matchers.js' import type {} from "vitest/node" +import type { + ScreenshotComparatorRegistry, + ScreenshotMatcherOptions, +} from "@vitest/browser/context" declare module 'vitest/node' { export interface BrowserProviderOptions { @@ -37,6 +41,15 @@ declare module 'vitest/node' { iframe: FrameLocator context: BrowserContext } + + export interface ToMatchScreenshotOptions + extends Omit< + ScreenshotMatcherOptions, + "comparatorName" | "comparatorOptions" + > {} + + export interface ToMatchScreenshotComparators + extends ScreenshotComparatorRegistry {} } type PWHoverOptions = NonNullable[1]> diff --git a/packages/browser/providers/webdriverio.d.ts b/packages/browser/providers/webdriverio.d.ts index f1021c999..66fdd93d2 100644 --- a/packages/browser/providers/webdriverio.d.ts +++ b/packages/browser/providers/webdriverio.d.ts @@ -1,6 +1,10 @@ import type { remote, ClickOptions, DragAndDropOptions } from 'webdriverio' import '../matchers.js' import type {} from "vitest/node" +import type { + ScreenshotComparatorRegistry, + ScreenshotMatcherOptions, +} from "@vitest/browser/context"; declare module 'vitest/node' { export interface BrowserProviderOptions extends Partial< @@ -19,4 +23,13 @@ declare module 'vitest/node' { export interface BrowserCommandContext { browser: WebdriverIO.Browser } + + export interface ToMatchScreenshotOptions + extends Omit< + ScreenshotMatcherOptions, + "comparatorName" | "comparatorOptions" + > {} + + export interface ToMatchScreenshotComparators + extends ScreenshotComparatorRegistry {} } diff --git a/packages/browser/src/client/tester/expect/index.ts b/packages/browser/src/client/tester/expect/index.ts index 6e59d2763..40d9986d3 100644 --- a/packages/browser/src/client/tester/expect/index.ts +++ b/packages/browser/src/client/tester/expect/index.ts @@ -23,6 +23,7 @@ import toHaveSelection from './toHaveSelection' import toHaveStyle from './toHaveStyle' import toHaveTextContent from './toHaveTextContent' import toHaveValue from './toHaveValue' +import toMatchScreenshot from './toMatchScreenshot' export const matchers: MatchersObject = { toBeDisabled, @@ -51,4 +52,5 @@ export const matchers: MatchersObject = { toBePartiallyChecked, toHaveRole, toHaveSelection, + toMatchScreenshot, } diff --git a/packages/browser/src/client/tester/expect/toMatchScreenshot.ts b/packages/browser/src/client/tester/expect/toMatchScreenshot.ts new file mode 100644 index 000000000..a35c562b5 --- /dev/null +++ b/packages/browser/src/client/tester/expect/toMatchScreenshot.ts @@ -0,0 +1,101 @@ +import type { AsyncExpectationResult, MatcherState } from '@vitest/expect' +import type { ScreenshotMatcherOptions } from '../../../../context' +import type { ScreenshotMatcherArguments, ScreenshotMatcherOutput } from '../../../shared/screenshotMatcher/types' +import type { Locator } from '../locators' +import { getBrowserState, getWorkerState } from '../../utils' +import { convertElementToCssSelector } from '../utils' +import { getElementFromUserInput } from './utils' + +const counters = new Map([]) + +export default async function toMatchScreenshot( + this: MatcherState, + actual: Element | Locator, + nameOrOptions?: ScreenshotMatcherOptions | string, + options: ScreenshotMatcherOptions = typeof nameOrOptions === 'object' + ? nameOrOptions + : {}, +): AsyncExpectationResult { + if (this.isNot) { + throw new Error('\'toMatchScreenshot\' cannot be used with "not"') + } + + const currentTest = getWorkerState().current + + if (currentTest === undefined || this.currentTestName === undefined) { + throw new Error('\'toMatchScreenshot\' cannot be used without test context') + } + + const counterName = `${currentTest.result?.repeatCount ?? 0}${this.testPath}${this.currentTestName}` + let counter = counters.get(counterName) + + if (counter === undefined) { + counter = { current: 0 } + + counters.set(counterName, counter) + } + + counter.current += 1 + + const name = typeof nameOrOptions === 'string' + ? nameOrOptions + : `${this.currentTestName} ${counter.current}` + + const result = await + getBrowserState().commands.triggerCommand( + '__vitest_screenshotMatcher', + [ + name, + this.currentTestName, + { + element: convertElementToCssSelector( + getElementFromUserInput(actual, toMatchScreenshot, this), + ), + ...options, + }, + ] satisfies ScreenshotMatcherArguments, + ) + + if (result.pass === false && 'context' in currentTest) { + const { annotate } = currentTest.context + + const annotations: ReturnType[] = [] + + if (result.reference) { + annotations.push(annotate('Reference screenshot', { path: result.reference })) + } + + if (result.actual) { + annotations.push(annotate('Actual screenshot', { path: result.actual })) + } + + if (result.diff) { + annotations.push(annotate('Diff', { path: result.diff })) + } + + await Promise.all(annotations) + } + + return { + pass: result.pass, + message: () => + result.pass + ? '' + : [ + this.utils.matcherHint('toMatchScreenshot', 'element', ''), + '', + result.message, + result.reference + ? `\nReference screenshot:\n ${this.utils.EXPECTED_COLOR(result.reference)}` + : null, + result.actual + ? `\nActual screenshot:\n ${this.utils.RECEIVED_COLOR(result.actual)}` + : null, + result.diff + ? this.utils.DIM_COLOR(`\nDiff image:\n ${result.diff}`) + : null, + ] + .filter(element => element !== null) + .join('\n'), + } +} diff --git a/packages/browser/src/node/commands/index.ts b/packages/browser/src/node/commands/index.ts index d6dee10c3..2eb4a62de 100644 --- a/packages/browser/src/node/commands/index.ts +++ b/packages/browser/src/node/commands/index.ts @@ -11,6 +11,7 @@ import { import { hover } from './hover' import { keyboard, keyboardCleanup } from './keyboard' import { screenshot } from './screenshot' +import { screenshotMatcher } from './screenshotMatcher' import { selectOptions } from './select' import { tab } from './tab' import { type } from './type' @@ -37,4 +38,5 @@ export default { __vitest_hover: hover as typeof hover, __vitest_cleanup: keyboardCleanup as typeof keyboardCleanup, __vitest_viewport: viewport as typeof viewport, + __vitest_screenshotMatcher: screenshotMatcher as typeof screenshotMatcher, } diff --git a/packages/browser/src/node/commands/screenshot.ts b/packages/browser/src/node/commands/screenshot.ts index 68b9aac7a..4e6c58656 100644 --- a/packages/browser/src/node/commands/screenshot.ts +++ b/packages/browser/src/node/commands/screenshot.ts @@ -1,4 +1,4 @@ -import type { BrowserCommand, ResolvedConfig } from 'vitest/node' +import type { BrowserCommand, BrowserCommandContext, ResolvedConfig } from 'vitest/node' import type { ScreenshotOptions } from '../../../context' import { mkdir, rm } from 'node:fs/promises' import { normalize } from 'node:path' @@ -6,28 +6,49 @@ import { basename, dirname, relative, resolve } from 'pathe' import { PlaywrightBrowserProvider } from '../providers/playwright' import { WebdriverBrowserProvider } from '../providers/webdriver' -export const screenshot: BrowserCommand<[string, ScreenshotOptions]> = async ( +interface ScreenshotCommandOptions extends Omit { + element?: string +} + +export const screenshot: BrowserCommand<[string, ScreenshotCommandOptions]> = async ( context, name: string, options = {}, ) => { - if (!context.testPath) { - throw new Error(`Cannot take a screenshot without a test path`) - } - options.save ??= true if (!options.save) { options.base64 = true } - const path = options.path - ? resolve(dirname(context.testPath), options.path) - : resolveScreenshotPath( - context.testPath, - name, - context.project.config, - ) + const { buffer, path } = await takeScreenshot(context, name, options) + + return returnResult(options, path, buffer) +} + +/** + * Takes a screenshot using the provided browser context and returns a buffer and the expected screenshot path. + * + * **Note**: the returned `path` indicates where the screenshot *might* be found. + * It is not guaranteed to exist, especially if `options.save` is `false`. + * + * @throws {Error} If the function is not called within a test or if the browser provider does not support screenshots. + */ +export async function takeScreenshot( + context: BrowserCommandContext, + name: string, + options: Omit, +): Promise<{ buffer: Buffer; path: string }> { + if (!context.testPath) { + throw new Error(`Cannot take a screenshot without a test path`) + } + + const path = resolveScreenshotPath( + context.testPath, + name, + context.project.config, + options.path, + ) const savePath = normalize(path) await mkdir(dirname(path), { recursive: true }) @@ -39,14 +60,14 @@ export const screenshot: BrowserCommand<[string, ScreenshotOptions]> = async ( ...config, path: options.save ? savePath : undefined, }) - return returnResult(options, path, buffer) + return { buffer, path } } const buffer = await context.iframe.locator('body').screenshot({ ...options, path: options.save ? savePath : undefined, }) - return returnResult(options, path, buffer) + return { buffer, path } } if (context.provider instanceof WebdriverBrowserProvider) { @@ -55,11 +76,16 @@ export const screenshot: BrowserCommand<[string, ScreenshotOptions]> = async ( ? await page.$('body') : await page.$(`${options.element}`) - const buffer = await element.saveScreenshot(savePath) + // webdriverio expects the path to contain the extension and only works with PNG files + const savePathWithExtension = savePath.endsWith('.png') ? savePath : `${savePath}.png` + + const buffer = await element.saveScreenshot( + savePathWithExtension, + ) if (!options.save) { - await rm(savePath, { force: true }) + await rm(savePathWithExtension, { force: true }) } - return returnResult(options, path, buffer) + return { buffer, path } } throw new Error( @@ -71,7 +97,11 @@ function resolveScreenshotPath( testPath: string, name: string, config: ResolvedConfig, -) { + customPath: string | undefined, +): string { + if (customPath) { + return resolve(dirname(testPath), customPath) + } const dir = dirname(testPath) const base = basename(testPath) if (config.browser.screenshotDirectory) { @@ -86,7 +116,7 @@ function resolveScreenshotPath( } function returnResult( - options: ScreenshotOptions, + options: ScreenshotCommandOptions, path: string, buffer: Buffer, ) { diff --git a/packages/browser/src/node/commands/screenshotMatcher/codecs/index.ts b/packages/browser/src/node/commands/screenshotMatcher/codecs/index.ts new file mode 100644 index 000000000..59823292a --- /dev/null +++ b/packages/browser/src/node/commands/screenshotMatcher/codecs/index.ts @@ -0,0 +1,15 @@ +import png from './png' + +export function getCodec(type: 'png'): typeof png + +export function getCodec(type: string) { + switch (type) { + case 'png': + return png + + default: + throw new Error(`No codec found for type ${type}`) + } +} + +export type AnyCodec = typeof png diff --git a/packages/browser/src/node/commands/screenshotMatcher/codecs/png.ts b/packages/browser/src/node/commands/screenshotMatcher/codecs/png.ts new file mode 100644 index 000000000..eaed3adde --- /dev/null +++ b/packages/browser/src/node/commands/screenshotMatcher/codecs/png.ts @@ -0,0 +1,50 @@ +import type { Metadata, PackerOptions, ParserOptions } from 'pngjs' +import type { Codec } from '../types' +import { PNG } from 'pngjs' + +const codec: Codec = { + decode: (buffer, options) => { + const { + data, + alpha, + bpp, + color, + colorType, + depth, + height, + interlace, + palette, + width, + } = PNG.sync.read( + Buffer.isBuffer(buffer) ? buffer : Buffer.from(buffer), + options, + ) + + return { + metadata: { + alpha, + bpp, + color, + colorType, + depth, + height, + interlace, + palette, + width, + }, + data, + } + }, + encode: ({ data, metadata: { height, width } }, options) => { + const png = new PNG({ + height, + width, + }) + + png.data = Buffer.isBuffer(data) ? data : Buffer.from(data) + + return PNG.sync.write(png, options) + }, +} + +export default codec diff --git a/packages/browser/src/node/commands/screenshotMatcher/comparators/index.ts b/packages/browser/src/node/commands/screenshotMatcher/comparators/index.ts new file mode 100644 index 000000000..696bae0be --- /dev/null +++ b/packages/browser/src/node/commands/screenshotMatcher/comparators/index.ts @@ -0,0 +1,23 @@ +import type { ScreenshotComparatorRegistry } from '../../../../../context' +import type { Comparator } from '../types' +import { pixelmatch } from './pixelmatch' + +const comparators = new Map(Object.entries({ + pixelmatch, +} satisfies { + [ComparatorName in keyof ScreenshotComparatorRegistry]: Comparator< + ScreenshotComparatorRegistry[ComparatorName] + > +})) + +export function getComparator( + comparator: ComparatorName, +): Comparator { + if (comparators.has(comparator)) { + return comparators.get(comparator)! + } + + throw new Error(`Unrecognized comparator ${comparator}`) +} + +export type AnyComparator = Comparator diff --git a/packages/browser/src/node/commands/screenshotMatcher/comparators/pixelmatch.ts b/packages/browser/src/node/commands/screenshotMatcher/comparators/pixelmatch.ts new file mode 100644 index 000000000..0d9a905c3 --- /dev/null +++ b/packages/browser/src/node/commands/screenshotMatcher/comparators/pixelmatch.ts @@ -0,0 +1,74 @@ +import type { ScreenshotComparatorRegistry } from '../../../../../context' +import type { Comparator } from '../types' +import pm from 'pixelmatch' + +const defaultOptions = { + allowedMismatchedPixelRatio: undefined, + allowedMismatchedPixels: undefined, + threshold: 0.1, + includeAA: false, + alpha: 0.1, + aaColor: [255, 255, 0], + diffColor: [255, 0, 0], + diffColorAlt: undefined, + diffMask: false, +} satisfies ScreenshotComparatorRegistry['pixelmatch'] + +export const pixelmatch: Comparator = ( + reference, + actual, + { createDiff, ...options }, +) => { + if (reference.metadata.height !== actual.metadata.height || reference.metadata.width !== actual.metadata.width) { + return { + pass: false, + diff: null, + message: `Expected image dimensions to be ${reference.metadata.width}×${ + reference.metadata.height + }px, but received ${actual.metadata.width}×${ + actual.metadata.height + }px.`, + } + } + + const optionsWithDefaults = { ...defaultOptions, ...options } + const diffBuffer = createDiff + ? new Uint8Array(reference.data.length) + : undefined + + const mismatchedPixels = pm( + reference.data, + actual.data, + diffBuffer, + reference.metadata.width, + reference.metadata.height, + optionsWithDefaults, + ) + + const imageArea = reference.metadata.width * reference.metadata.height + + let allowedMismatchedPixels = Math.min( + optionsWithDefaults.allowedMismatchedPixels ?? Number.POSITIVE_INFINITY, + (optionsWithDefaults.allowedMismatchedPixelRatio + ?? Number.POSITIVE_INFINITY) + * imageArea, + ) + + if (allowedMismatchedPixels === Number.POSITIVE_INFINITY) { + allowedMismatchedPixels = 0 + } + + const pass = mismatchedPixels <= allowedMismatchedPixels + + return { + pass, + diff: diffBuffer ?? null, + message: pass + ? null + : `${mismatchedPixels} pixels (ratio ${( + // as we compare using `<=`, use `Math.ceil` to ensure the reported ratio + // doesn't appear equal to the allowed limit when it's a bit over + Math.ceil((mismatchedPixels / imageArea) * 100) / 100 + ).toFixed(2)}) differ.`, + } +} diff --git a/packages/browser/src/node/commands/screenshotMatcher/index.ts b/packages/browser/src/node/commands/screenshotMatcher/index.ts new file mode 100644 index 000000000..598934a96 --- /dev/null +++ b/packages/browser/src/node/commands/screenshotMatcher/index.ts @@ -0,0 +1,246 @@ +import type { BrowserCommand, BrowserCommandContext } from 'vitest/node' +import type { ScreenshotMatcherOptions } from '../../../../context' +import type { ScreenshotMatcherArguments, ScreenshotMatcherOutput } from '../../../shared/screenshotMatcher/types' +import type { AnyCodec } from './codecs' +import type { AnyComparator } from './comparators' +import type { TypedArray } from './types' +import { mkdir, readFile, writeFile } from 'node:fs/promises' +import { basename, dirname } from 'pathe' +import { asyncTimeout, resolveOptions, takeDecodedScreenshot } from './utils' + +export const screenshotMatcher: BrowserCommand< + ScreenshotMatcherArguments +> = async (context, name, testName, options): ScreenshotMatcherOutput => { + if (!context.testPath) { + throw new Error(`Cannot compare screenshots without a test path`) + } + + const { element } = options + + const { + codec, + comparator, + paths, + resolvedOptions: { comparatorOptions, screenshotOptions, timeout }, + } = resolveOptions({ context, name, testName, options }) + + const referenceFile = await readFile(paths.reference).catch(() => null) + const reference = referenceFile && await codec.decode(await readFile(paths.reference), {}) + + const abortController = new AbortController() + const stableScreenshot = getStableScreenshots({ + codec, + comparator, + comparatorOptions, + context, + element, + name: `${Date.now()}-${basename(paths.reference)}`, + reference, + screenshotOptions, + signal: abortController.signal, + }) + + const value = await ( + timeout === 0 + ? stableScreenshot + : Promise.race([ + stableScreenshot, + asyncTimeout(timeout).finally(() => { abortController.abort() }), + ]) + ) + + // case #01 + // - impossible to get a stable screenshot to compare against + // - fail + if (value === null || value.actual === null) { + return { + pass: false, + reference: referenceFile && paths.reference, + actual: null, + diff: null, + message: `Could not capture a stable screenshot within ${timeout}ms.`, + } + } + + const { updateSnapshot } = context.project.serializedConfig.snapshotOptions + + // if there's no reference or if we want to update snapshots, we have to finish the comparison early + if (reference === null || updateSnapshot === 'all') { + const shouldCreateReference = updateSnapshot !== 'none' + const referencePath = shouldCreateReference ? paths.reference : paths.diffs.reference + + await writeScreenshot( + referencePath, + await codec.encode(value.actual, {}), + ) + + // case #02 + // - got a stable screenshot, but there is no reference and we don't want to update screenshots + // - fail + if (updateSnapshot !== 'all') { + return { + pass: false, + reference: referencePath, + actual: null, + diff: null, + message: `No existing reference screenshot found${ + shouldCreateReference + ? '; a new one was created. Review it before running tests again.' + : '.' + }`, + } + } + + // case #03 + // - got a stable screenshot, there is no reference, but we want to update screenshots + // - pass + return { + pass: true, + } + } + + // case #04 + // - got a stable screenshot with no retries and there's a reference + // - pass + if (referenceFile && value.retries === 0) { + return { + pass: true, + } + } + + const finalResult = await comparator(reference, value.actual, { createDiff: true, ...comparatorOptions }) + + if (finalResult.pass === false && finalResult.diff !== null) { + const diff = await codec.encode( + { + data: finalResult.diff, + metadata: { + height: reference.metadata.height, + width: reference.metadata.width, + }, + }, + {}, + ) + + await writeScreenshot(paths.diffs.diff, diff) + } + + // case #05 + // - reference matches stable screenshot + // - pass + if (finalResult.pass === true) { + return { + pass: true, + } + } + + const actual = await codec.encode(value.actual, {}) + + await writeScreenshot(paths.diffs.actual, actual) + + // case #06 + // - fallback, reference does NOT match stable screenshot + // - fail + return { + pass: false, + reference: paths.reference, + actual: paths.diffs.actual, + diff: finalResult.diff && paths.diffs.diff, + message: `Screenshot does not match the stored reference.${ + finalResult.message === null + ? '' + : `\n${finalResult.message}` + }`, + } +} + +async function writeScreenshot(path: string, image: TypedArray) { + try { + await mkdir(dirname(path), { recursive: true }) + await writeFile(path, image) + } + catch { + throw new Error('Couldn\'t write file to fs') + } +} + +/** + * Takes screenshots repeatedly until the page reaches a visually stable state. + * + * This function compares consecutive screenshots and continues taking new ones + * until two consecutive screenshots match according to the provided comparator. + * + * The process works as follows: + * + * 1. Uses as baseline an optional reference screenshot or takes a new screenshot + * 2. Takes a screenshot and compares with baseline + * 3. If they match, the page is considered stable and the function returns + * 4. If they don't match, it continues with the newer screenshot as the baseline + * 5. Repeats until stability is achieved or the operation is aborted + * + * @returns `Promise` resolving to an object containing the retry count and + * final screenshot + */ +async function getStableScreenshots({ + codec, + context, + comparator, + comparatorOptions, + element, + name, + reference, + screenshotOptions, + signal, +}: { + codec: AnyCodec + comparator: AnyComparator + comparatorOptions: ScreenshotMatcherOptions['comparatorOptions'] + context: BrowserCommandContext + element: string + name: string + reference: ReturnType | null + screenshotOptions: ScreenshotMatcherOptions['screenshotOptions'] + signal: AbortSignal +}) { + const screenshotArgument = { + codec, + context, + element, + name, + screenshotOptions, + } satisfies Parameters[0] + + let retries = 0 + + let decodedBaseline = reference + + while (signal.aborted === false) { + if (decodedBaseline === null) { + decodedBaseline = takeDecodedScreenshot(screenshotArgument) + } + + const [image1, image2] = await Promise.all([ + decodedBaseline, + takeDecodedScreenshot(screenshotArgument), + ]) + + const comparatorResult = (await comparator( + image1, + image2, + { ...comparatorOptions, createDiff: false }, + )).pass + + decodedBaseline = image2 + + if (comparatorResult) { + break + } + + retries += 1 + } + + return { + retries, + actual: await decodedBaseline, + } +} diff --git a/packages/browser/src/node/commands/screenshotMatcher/types.ts b/packages/browser/src/node/commands/screenshotMatcher/types.ts new file mode 100644 index 000000000..2f20b4c19 --- /dev/null +++ b/packages/browser/src/node/commands/screenshotMatcher/types.ts @@ -0,0 +1,43 @@ +interface BaseMetadata { height: number; width: number } +export type TypedArray + = | Buffer + | Uint8Array + | Uint8ClampedArray +export type Promisable = T | Promise + +export interface Codec< + DecoderOptions extends object, + DecoderMetadata extends object, + EncoderOptions extends object, +> { + decode: ( + buffer: TypedArray, + options: DecoderOptions + ) => Promisable<{ + data: TypedArray + metadata: DecoderMetadata & BaseMetadata + }> + encode: ( + image: { data: TypedArray; metadata: BaseMetadata }, + options: EncoderOptions + ) => Promisable +} + +export type Comparator> = ( + reference: { + metadata: BaseMetadata + data: TypedArray + }, + actual: { + metadata: BaseMetadata + data: TypedArray + }, + options: { + /** + * Allows the comparator to create a diff image. + * + * Note that the comparator might choose to ignore the flag, so a diff image is not guaranteed. + */ + createDiff: boolean + } & Options +) => Promisable<{ pass: boolean; diff: TypedArray | null; message: string | null }> diff --git a/packages/browser/src/node/commands/screenshotMatcher/utils.ts b/packages/browser/src/node/commands/screenshotMatcher/utils.ts new file mode 100644 index 000000000..ca7dbf66d --- /dev/null +++ b/packages/browser/src/node/commands/screenshotMatcher/utils.ts @@ -0,0 +1,264 @@ +import type { BrowserCommandContext, BrowserConfigOptions } from 'vitest/node' +import type { ScreenshotMatcherOptions } from '../../../../context' +import type { AnyCodec } from './codecs' +import { platform } from 'node:os' +import { deepMerge } from '@vitest/utils' +import { basename, dirname, extname, join, relative, resolve } from 'pathe' +import { takeScreenshot } from '../screenshot' +import { getCodec } from './codecs' +import { getComparator } from './comparators' + +type GlobalOptions = Required< + NonNullable< + NonNullable['toMatchScreenshot'] + > +> + +const defaultOptions = { + comparatorName: 'pixelmatch', + // these are handled by each comparator on its own + comparatorOptions: {}, + screenshotOptions: { + animations: 'disabled', + caret: 'hide', + fullPage: false, + maskColor: '#ff00ff', + omitBackground: false, + scale: 'device', + }, + timeout: 5_000, + resolveDiffPath: ({ + arg, + ext, + root, + attachmentsDir, + browserName, + platform, + testFileDirectory, + testFileName, + }) => resolve( + root, + attachmentsDir, + testFileDirectory, + testFileName, + `${arg}-${browserName}-${platform}${ext}`, + ), + resolveScreenshotPath: ({ + arg, + ext, + root, + screenshotDirectory, + testFileDirectory, + testFileName, + browserName, + }) => resolve( + root, + testFileDirectory, + screenshotDirectory, + testFileName, + `${arg}-${browserName}-${platform}${ext}`, + ), +} satisfies GlobalOptions + +type SupportedCodecs = Parameters[0] + +const supportedExtensions = ['png'] satisfies SupportedCodecs[] + +export function resolveOptions( + { + context, + name, + options, + testName, + }: { + context: BrowserCommandContext + name: string + testName: string + options: ScreenshotMatcherOptions + }, +): { + codec: ReturnType + comparator: ReturnType + resolvedOptions: GlobalOptions + paths: { + reference: string + diffs: { + reference: string + actual: string + diff: string + } + } +} { + if (context.testPath === undefined) { + throw new Error('`resolveOptions` has to be used in a test file') + } + + const resolvedOptions = deepMerge( + Object.create(null), + defaultOptions, + context.project.config.browser.expect?.toMatchScreenshot ?? {}, + options, + ) + + const extensionFromName = extname(name) + + // technically the type is a lie, but we check beneath and reassign otherwise + let extension = extensionFromName.replace(/^\./, '') as SupportedCodecs + + // when `type` will be supported in `screenshotOptions`: + // - `'png'` should end up in `defaultOptions.screenshotOptions.type` + // - this condition should be switched around + // - the assignment should be `resolvedOptions.screenshotOptions.type = extension` + // - everything using `extension` should use `resolvedOptions.screenshotOptions.type` + if (supportedExtensions.includes(extension) === false) { + extension = 'png' + } + + const { root } = context.project.serializedConfig + + const resolvePathData = { + arg: sanitizeArg( + // remove the extension only if it ends up being used + extensionFromName.endsWith(extension) + ? basename(name, extensionFromName) + : name, + ), + ext: `.${extension}`, + platform: platform(), + root, + screenshotDirectory: relative( + root, + join(root, context.project.config.browser.screenshotDirectory ?? '__screenshots__'), + ), + attachmentsDir: relative(root, context.project.config.attachmentsDir), + testFileDirectory: relative(root, dirname(context.testPath)), + testFileName: basename(context.testPath), + testName: sanitize(testName, false), + browserName: context.project.config.browser.name, + } satisfies Parameters[0] + + return { + codec: getCodec(extension), + comparator: getComparator(resolvedOptions.comparatorName), + resolvedOptions, + paths: { + reference: resolvedOptions.resolveScreenshotPath(resolvePathData), + // lazily initialize this, as it might not be needed at all + get diffs() { + const diffs = { + reference: resolvedOptions.resolveDiffPath({ + ...resolvePathData, + arg: `${resolvePathData.arg}-reference`, + }), + actual: resolvedOptions.resolveDiffPath({ + ...resolvePathData, + arg: `${resolvePathData.arg}-actual`, + }), + diff: resolvedOptions.resolveDiffPath({ + ...resolvePathData, + arg: `${resolvePathData.arg}-diff`, + }), + } + + Object.defineProperty(this, 'diffs', { value: diffs }) + + return diffs + }, + }, + } +} + +/** + * Sanitizes a string by removing or transforming characters to ensure it is + * safe for use as a filename or path segment. It supports two modes: + * + * 1. Non-path mode (`keepPaths === false`): + * - Replaces one or more whitespace characters (`\s+`) with a single hyphen (`-`). + * - Removes any character that is not a word character (`\w`) or a hyphen (`-`). + * - Collapses multiple consecutive hyphens (`-{2,}`) into a single hyphen. + * + * 2. Path-preserving mode (`keepPaths === true`): + * - Splits the input string on the path separator. + * - Sanitizes each path segment individually in non-path mode. + * - Joins the sanitized segments back together. + * + * @param input - The raw string to sanitize. + * @param keepPaths - If `false`, performs a flat sanitization (drops path segments). + * If `true`, treats `input` as a path: each segment is sanitized independently, + * preserving separators. + */ +function sanitize(input: string, keepPaths: boolean): string { + if (keepPaths === false) { + return input + .replace(/\s+/g, '-') + .replace(/[^\w-]+/g, '') + .replace(/-{2,}/g, '-') + } + + return input.split('/').map(path => sanitize(path, false)).join('/') +} + +/** + * Takes a string, treats it as a potential path or filename, and ensures it cannot + * escape the root directory or contain invalid characters. Internally, it: + * + * 1. Prepends the path separator to the raw input to form a path-like string. + * 2. Uses {@linkcode relative|relative('/', )} to compute a relative + * path from the root, which effectively strips any leading separators and prevents + * traversal above the root. + * 3. Passes the resulting relative path into {@linkcode sanitize|sanitize(..., true)}, + * preserving any path separators but sanitizing each segment. + * + * @param input - The raw string to clean. + */ +function sanitizeArg(input: string): string { + return sanitize(relative('/', join('/', input)), true) +} + +/** + * Takes a screenshot and decodes it using the provided codec. + * + * The screenshot is taken as a base64 string and then decoded into the format + * expected by the comparator. + * + * @returns `Promise` resolving to the decoded screenshot data + */ +export function takeDecodedScreenshot({ + codec, + context, + element, + name, + screenshotOptions, +}: { + codec: AnyCodec + context: BrowserCommandContext + element: string + name: string + screenshotOptions: ScreenshotMatcherOptions['screenshotOptions'] +}): ReturnType { + return takeScreenshot( + context, + name, + { ...screenshotOptions, save: false, element }, + ).then( + ({ buffer }) => codec.decode(buffer, {}), + ) +} + +/** + * Creates a promise that resolves to `null` after the specified timeout. + * If the timeout is `0`, the promise resolves immediately. + * + * @param timeout - The delay in milliseconds before the promise resolves + * @returns `Promise` that resolves to `null` after the timeout + */ +export function asyncTimeout(timeout: number): Promise { + return new Promise((resolve) => { + if (timeout === 0) { + resolve(null) + } + else { + setTimeout(() => resolve(null), timeout) + } + }) +} diff --git a/packages/browser/src/node/plugin.ts b/packages/browser/src/node/plugin.ts index d17f8a6b6..33e70dfaf 100644 --- a/packages/browser/src/node/plugin.ts +++ b/packages/browser/src/node/plugin.ts @@ -3,7 +3,7 @@ import type { HtmlTagDescriptor } from 'vite' import type { Plugin } from 'vitest/config' import type { Vitest } from 'vitest/node' import type { ParentBrowserProject } from './projectParent' -import { lstatSync, readFileSync } from 'node:fs' +import { createReadStream, lstatSync, readFileSync } from 'node:fs' import { createRequire } from 'node:module' import { dynamicImportPlugin } from '@vitest/mocker/node' import { toArray } from '@vitest/utils' @@ -12,7 +12,7 @@ import { basename, dirname, extname, resolve } from 'pathe' import sirv from 'sirv' import * as vite from 'vite' import { coverageConfigDefaults } from 'vitest/config' -import { resolveApiServerConfig, resolveFsAllow, distDir as vitestDist } from 'vitest/node' +import { isFileServingAllowed, isValidApiRequest, resolveApiServerConfig, resolveFsAllow, distDir as vitestDist } from 'vitest/node' import { distRoot } from './constants' import { createOrchestratorMiddleware } from './middlewares/orchestratorMiddleware' import { createTesterMiddleware } from './middlewares/testerMiddleware' @@ -156,6 +156,45 @@ export default (parentServer: ParentBrowserProject, base = '/'): Plugin[] => { } next() }) + // handle attachments the same way as in packages/ui/node/index.ts + server.middlewares.use((req, res, next) => { + if (!req.url) { + return next() + } + + const url = new URL(req.url, 'http://localhost') + + if (url.pathname !== '/__vitest_attachment__') { + return next() + } + + const path = url.searchParams.get('path') + const contentType = url.searchParams.get('contentType') + + if (!isValidApiRequest(parentServer.config, req) || !contentType || !path) { + return next() + } + + const fsPath = decodeURIComponent(path) + + if (!isFileServingAllowed(parentServer.vite.config, fsPath)) { + return next() + } + + try { + res.setHeader( + 'content-type', + contentType, + ) + + return createReadStream(fsPath) + .pipe(res) + .on('close', () => res.end()) + } + catch (err) { + return next(err) + } + }) }, }, { diff --git a/packages/browser/src/shared/screenshotMatcher/types.ts b/packages/browser/src/shared/screenshotMatcher/types.ts new file mode 100644 index 000000000..0b65a1f3f --- /dev/null +++ b/packages/browser/src/shared/screenshotMatcher/types.ts @@ -0,0 +1,22 @@ +import type { ScreenshotComparatorRegistry, ScreenshotMatcherOptions } from '../../../context' + +export type ScreenshotMatcherArguments< + ComparatorName extends keyof ScreenshotComparatorRegistry = keyof ScreenshotComparatorRegistry, +> = [ + name: string, + testName: string, + options: ScreenshotMatcherOptions & { element: string }, +] + +export type ScreenshotMatcherOutput = Promise< + { + pass: false + reference: string | null + actual: string | null + diff: string | null + message: string + } + | { + pass: true + } +> diff --git a/packages/vitest/src/node/cli/cli-config.ts b/packages/vitest/src/node/cli/cli-config.ts index edd133568..65f3c9a72 100644 --- a/packages/vitest/src/node/cli/cli-config.ts +++ b/packages/vitest/src/node/cli/cli-config.ts @@ -420,6 +420,7 @@ export const cliOptionsConfig: VitestCLIOptions = { locators: null, testerHtmlPath: null, instances: null, + expect: null, }, }, pool: { diff --git a/packages/vitest/src/node/config/resolveConfig.ts b/packages/vitest/src/node/config/resolveConfig.ts index 3ee4fb072..a96679e21 100644 --- a/packages/vitest/src/node/config/resolveConfig.ts +++ b/packages/vitest/src/node/config/resolveConfig.ts @@ -57,7 +57,7 @@ function parseInspector(inspect: string | undefined | boolean | number) { return { host, port: Number(port) || defaultInspectPort } } -export function resolveApiServerConfig( +export function resolveApiServerConfig>( options: Options, defaultPort: number, ): ApiConfig | undefined { diff --git a/packages/vitest/src/node/types/browser.ts b/packages/vitest/src/node/types/browser.ts index 16231105b..272f37490 100644 --- a/packages/vitest/src/node/types/browser.ts +++ b/packages/vitest/src/node/types/browser.ts @@ -234,6 +234,21 @@ export interface BrowserConfigOptions { * @default 30000 */ connectTimeout?: number + + expect?: { + toMatchScreenshot?: { + [ComparatorName in keyof ToMatchScreenshotComparators]: + { + /** + * The name of the comparator to use for visual diffing. + * + * @defaultValue `'pixelmatch'` + */ + comparatorName?: ComparatorName + comparatorOptions?: ToMatchScreenshotComparators[ComparatorName] + } + }[keyof ToMatchScreenshotComparators] & ToMatchScreenshotOptions + } } export interface BrowserCommandContext { @@ -325,3 +340,90 @@ export interface ResolvedBrowserOptions extends BrowserConfigOptions { testIdAttribute: string } } + +type ToMatchScreenshotResolvePath = (data: { + /** + * Path **without** extension, sanitized and relative to the test file. + * + * This comes from the arguments passed to `toMatchScreenshot`; if called + * without arguments this will be the auto-generated name. + * + * @example + * test('calls `onClick`', () => { + * expect(locator).toMatchScreenshot() + * // arg = "calls-onclick-1" + * }) + * + * @example + * expect(locator).toMatchScreenshot('foo/bar/baz.png') + * // arg = "foo/bar/baz" + * + * @example + * expect(locator).toMatchScreenshot('../foo/bar/baz.png') + * // arg = "foo/bar/baz" + */ + arg: string + /** + * Screenshot extension, with leading dot. + * + * This can be set through the arguments passed to `toMatchScreenshot`, but + * the value will fall back to `'.png'` if an unsupported extension is used. + */ + ext: string + /** + * The instance's browser name. + */ + browserName: string + /** + * The value of {@linkcode process.platform}. + */ + platform: NodeJS.Platform + /** + * The value provided to + * {@linkcode https://vitest.dev/guide/browser/config#browser-screenshotdirectory|browser.screenshotDirectory}, + * if none is provided, its default value. + */ + screenshotDirectory: string + /** + * Absolute path to the project's + * {@linkcode https://vitest.dev/config/#root|root}. + */ + root: string + /** + * Path to the test file, relative to the project's + * {@linkcode https://vitest.dev/config/#root|root}. + */ + testFileDirectory: string + /** + * The test's filename. + */ + testFileName: string + /** + * The {@linkcode https://vitest.dev/api/#test|test}'s name, including + * parent {@linkcode https://vitest.dev/api/#describe|describe}, sanitized. + */ + testName: string + /** + * The value provided to + * {@linkcode https://vitest.dev/config/#attachmentsdir|attachmentsDir}, + * if none is provided, its default value. + */ + attachmentsDir: string +}) => string + +export interface ToMatchScreenshotOptions { + /** + * Overrides default reference screenshot path. + * + * @default `${root}/${testFileDirectory}/${screenshotDirectory}/${testFileName}/${arg}-${browserName}-${platform}${ext}` + */ + resolveScreenshotPath?: ToMatchScreenshotResolvePath + /** + * Overrides default screenshot path used for diffs. + * + * @default `${root}/${attachmentsDir}/${testFileDirectory}/${testFileName}/${arg}-${browserName}-${platform}${ext}` + */ + resolveDiffPath?: ToMatchScreenshotResolvePath +} + +export interface ToMatchScreenshotComparators {} diff --git a/packages/vitest/src/public/node.ts b/packages/vitest/src/public/node.ts index a572bfb6d..6540c9932 100644 --- a/packages/vitest/src/public/node.ts +++ b/packages/vitest/src/public/node.ts @@ -76,6 +76,8 @@ export type { ParentProjectBrowser, ProjectBrowser, ResolvedBrowserOptions, + ToMatchScreenshotComparators, + ToMatchScreenshotOptions, } from '../node/types/browser' export const createViteServer: typeof vite.createServer = vite.createServer export type { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 685df2151..84a158ff8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -453,6 +453,12 @@ importers: magic-string: specifier: 'catalog:' version: 0.30.17 + pixelmatch: + specifier: 7.1.0 + version: 7.1.0 + pngjs: + specifier: ^7.0.0 + version: 7.0.0 sirv: specifier: 'catalog:' version: 3.0.1 @@ -463,6 +469,9 @@ importers: specifier: 'catalog:' version: 8.18.3 devDependencies: + '@types/pngjs': + specifier: ^6.0.5 + version: 6.0.5 '@types/ws': specifier: 'catalog:' version: 8.18.1 @@ -1502,7 +1511,7 @@ importers: version: 9.0.8 inquirer: specifier: ^12.8.0 - version: 12.8.0(@types/node@22.16.5) + version: 12.8.2(@types/node@22.16.5) vite-node: specifier: workspace:* version: link:../../packages/vite-node @@ -3038,8 +3047,8 @@ packages: '@types/node': optional: true - '@inquirer/prompts@7.7.0': - resolution: {integrity: sha512-8/7fOJA/Q5qqxznIvYjEvUCeRE6pncc1OHEmeA5JdNIKfOBC3a0EE5lFBofTWK/WXKfsjMkIz28y/uL6A3frYA==} + '@inquirer/prompts@7.7.1': + resolution: {integrity: sha512-XDxPrEWeWUBy8scAXzXuFY45r/q49R0g72bUzgQXZ1DY/xEFX+ESDMkTQolcb5jRBzaNJX2W8XQl6krMNDTjaA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -3065,8 +3074,8 @@ packages: '@types/node': optional: true - '@inquirer/select@4.3.0': - resolution: {integrity: sha512-dY4sPBAfGH6Cv435gOSbNbMsLd6v1ItNmhjsLY+LTY4h8L+SAOERL2L/VtvjZFSVpVcY4dcu8fo6Uq8H8vNvzQ==} + '@inquirer/select@4.3.1': + resolution: {integrity: sha512-Gfl/5sqOF5vS/LIrSndFgOh7jgoe0UXEizDqahFRkq5aJBLegZ6WjuMh/hVEJwlFQjyLq1z9fRtvUMkb7jM1LA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -3551,46 +3560,6 @@ packages: cpu: [x64] os: [win32] - '@oxlint/darwin-arm64@1.6.0': - resolution: {integrity: sha512-m3wyqBh1TOHjpr/dXeIZY7OoX+MQazb+bMHQdDtwUvefrafUx+5YHRvulYh1sZSQ449nQ3nk3qj5qj535vZRjg==} - cpu: [arm64] - os: [darwin] - - '@oxlint/darwin-x64@1.6.0': - resolution: {integrity: sha512-75fJfF/9xNypr7cnOYoZBhfmG1yP7ex3pUOeYGakmtZRffO9z1i1quLYhjZsmaDXsAIZ3drMhenYHMmFKS3SRg==} - cpu: [x64] - os: [darwin] - - '@oxlint/linux-arm64-gnu@1.6.0': - resolution: {integrity: sha512-YhXGf0FXa72bEt4F7eTVKx5X3zWpbAOPnaA/dZ6/g8tGhw1m9IFjrabVHFjzcx3dQny4MgA59EhyElkDvpUe8A==} - cpu: [arm64] - os: [linux] - - '@oxlint/linux-arm64-musl@1.6.0': - resolution: {integrity: sha512-T3JDhx8mjGjvh5INsPZJrlKHmZsecgDYvtvussKRdkc1Nnn7WC+jH9sh5qlmYvwzvmetlPVNezAoNvmGO9vtMg==} - cpu: [arm64] - os: [linux] - - '@oxlint/linux-x64-gnu@1.6.0': - resolution: {integrity: sha512-Dx7ghtAl8aXBdqofJpi338At6lkeCtTfoinTYQXd9/TEJx+f+zCGNlQO6nJz3ydJBX48FDuOFKkNC+lUlWrd8w==} - cpu: [x64] - os: [linux] - - '@oxlint/linux-x64-musl@1.6.0': - resolution: {integrity: sha512-7KvMGdWmAZtAtg6IjoEJHKxTXdAcrHnUnqfgs0JpXst7trquV2mxBeRZusQXwxpu4HCSomKMvJfsp1qKaqSFDg==} - cpu: [x64] - os: [linux] - - '@oxlint/win32-arm64@1.6.0': - resolution: {integrity: sha512-iSGC9RwX+dl7o5KFr5aH7Gq3nFbkq/3Gda6mxNPMvNkWrgXdIyiINxpyD8hJu566M+QSv1wEAu934BZotFDyoQ==} - cpu: [arm64] - os: [win32] - - '@oxlint/win32-x64@1.6.0': - resolution: {integrity: sha512-jOj3L/gfLc0IwgOTkZMiZ5c673i/hbAmidlaylT0gE6H18hln9HxPgp5GCf4E4y6mwEJlW8QC5hQi221+9otdA==} - cpu: [x64] - os: [win32] - '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -4110,6 +4079,9 @@ packages: '@types/picomatch@4.0.1': resolution: {integrity: sha512-dLqxmi5VJRC9XTvc/oaTtk+bDb4RRqxLZPZ3jIpYBHEnDXX8lu02w2yWI6NsPPsELuVK298Z2iR8jgoWKRdUVQ==} + '@types/pngjs@6.0.5': + resolution: {integrity: sha512-0k5eKfrA83JOZPppLtS2C7OUtyNAl2wKNxfyYl9Q5g9lPkgBl/9hNyAu6HuEH2J4XmIv2znEpkDd0SaZVxW6iQ==} + '@types/prompts@2.4.9': resolution: {integrity: sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA==} @@ -4167,16 +4139,16 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.37.0': - resolution: {integrity: sha512-jsuVWeIkb6ggzB+wPCsR4e6loj+rM72ohW6IBn2C+5NCvfUVY8s33iFPySSVXqtm5Hu29Ne/9bnA0JmyLmgenA==} + '@typescript-eslint/eslint-plugin@8.38.0': + resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.37.0 + '@typescript-eslint/parser': ^8.38.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.37.0': - resolution: {integrity: sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA==} + '@typescript-eslint/parser@8.38.0': + resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4188,8 +4160,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.37.0': - resolution: {integrity: sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA==} + '@typescript-eslint/project-service@8.38.0': + resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -4198,8 +4170,8 @@ packages: resolution: {integrity: sha512-wCnapIKnDkN62fYtTGv2+RY8FlnBYA3tNm0fm91kc2BjPhV2vIjwwozJ7LToaLAyb1ca8BxrS7vT+Pvvf7RvqA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.37.0': - resolution: {integrity: sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==} + '@typescript-eslint/scope-manager@8.38.0': + resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/tsconfig-utils@8.36.0': @@ -4208,14 +4180,14 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/tsconfig-utils@8.37.0': - resolution: {integrity: sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==} + '@typescript-eslint/tsconfig-utils@8.38.0': + resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.37.0': - resolution: {integrity: sha512-SPkXWIkVZxhgwSwVq9rqj/4VFo7MnWwVaRNznfQDc/xPYHjXnPfLWn+4L6FF1cAz6e7dsqBeMawgl7QjUMj4Ow==} + '@typescript-eslint/type-utils@8.38.0': + resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4225,8 +4197,8 @@ packages: resolution: {integrity: sha512-xGms6l5cTJKQPZOKM75Dl9yBfNdGeLRsIyufewnxT4vZTrjC0ImQT4fj8QmtJK84F58uSh5HVBSANwcfiXxABQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.37.0': - resolution: {integrity: sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==} + '@typescript-eslint/types@8.38.0': + resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.36.0': @@ -4235,8 +4207,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/typescript-estree@8.37.0': - resolution: {integrity: sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==} + '@typescript-eslint/typescript-estree@8.38.0': + resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -4248,8 +4220,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.37.0': - resolution: {integrity: sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A==} + '@typescript-eslint/utils@8.38.0': + resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4259,8 +4231,8 @@ packages: resolution: {integrity: sha512-vZrhV2lRPWDuGoxcmrzRZyxAggPL+qp3WzUrlZD+slFueDiYHxeBa34dUXPuC0RmGKzl4lS5kFJYvKCq9cnNDA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.37.0': - resolution: {integrity: sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==} + '@typescript-eslint/visitor-keys@8.38.0': + resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript/vfs@1.6.1': @@ -5689,8 +5661,8 @@ packages: peerDependencies: eslint: '>=8.45.0' - eslint-plugin-pnpm@1.0.0: - resolution: {integrity: sha512-tyEA10k7psB9HFCx8R4/bU4JS2tSKfXaCnrCcis+1R4FucfMIc6HgcFl4msZbwY2I0D9Vec3xAEkXV0aPechhQ==} + eslint-plugin-pnpm@1.1.0: + resolution: {integrity: sha512-sL93w0muBtjnogzk/loDsxzMbmXQOLP5Blw3swLDBXZgfb+qQI73bPcUbjVR+ZL+K62vGJdErV+43i3r5DsZPg==} peerDependencies: eslint: ^9.0.0 @@ -6349,8 +6321,8 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - inquirer@12.8.0: - resolution: {integrity: sha512-gPBPq0MpYIBxYFNbJqvoYGw/n8sgmsgmN36MSQn0yocCnCg09cFlFLLd9CZ13zdAm6S8en4nttMbuD1UjWjW4Q==} + inquirer@12.8.2: + resolution: {integrity: sha512-oBDL9f4+cDambZVJdfJu2M5JQfvaug9lbo6fKDlFV40i8t3FGA1Db67ov5Hp5DInG4zmXhHWTSnlXBntnJ7GMA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -7349,11 +7321,6 @@ packages: resolution: {integrity: sha512-kuyQEMzhz6cpBwFifTxgLTw8kgn68h5jP46ChIXVbxN+J75q7cTb95YNYh0FIcdWFmAJOZGhgYtQLPGKqxJN1Q==} engines: {node: '>=14.0.0'} - oxlint@1.6.0: - resolution: {integrity: sha512-jtaD65PqzIa1udvSxxscTKBxYKuZoFXyKGLiU1Qjo1ulq3uv/fQDtoV1yey1FrQZrQjACGPi1Widsy1TucC7Jg==} - engines: {node: '>=8.*'} - hasBin: true - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -7518,6 +7485,10 @@ packages: resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==} hasBin: true + pixelmatch@7.1.0: + resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} + hasBin: true + pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} @@ -7546,8 +7517,12 @@ packages: resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} engines: {node: '>=12.13.0'} - pnpm-workspace-yaml@1.0.0: - resolution: {integrity: sha512-2RKg3khFgX/oeKIQnxxlj+OUoKbaZjBt7EsmQiLfl8AHZKMIpLmXLRPptZ5eq2Rlumh2gILs6OWNky5dzP+f8A==} + pngjs@7.0.0: + resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} + engines: {node: '>=14.19.0'} + + pnpm-workspace-yaml@1.1.0: + resolution: {integrity: sha512-OWUzBxtitpyUV0fBYYwLAfWxn3mSzVbVB7cwgNaHvTTU9P0V2QHjyaY5i7f1hEiT9VeKsNH1Skfhe2E3lx/zhA==} possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} @@ -7572,11 +7547,6 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} - engines: {node: '>=14'} - hasBin: true - pretty-bytes@5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} engines: {node: '>=6'} @@ -7870,8 +7840,8 @@ packages: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} - run-async@4.0.4: - resolution: {integrity: sha512-2cgeRHnV11lSXBEhq7sN7a5UVjTKm9JTb9x8ApIT//16D7QL96AgnNeWSGoB4gIHc0iYw/Ha0Z+waBaCYZVNhg==} + run-async@4.0.5: + resolution: {integrity: sha512-oN9GTgxUNDBumHTTDmQ8dep6VIJbgj9S3dPP+9XylVLIK4xB9XTXtKWROd5pnhdXR9k0EgO1JRcNh0T+Ny2FsA==} engines: {node: '>=0.12.0'} run-parallel@1.2.0: @@ -9386,8 +9356,8 @@ snapshots: '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.31.0(jiti@2.4.2)) '@eslint/markdown': 7.0.0 '@stylistic/eslint-plugin': 5.1.0(eslint@9.31.0(jiti@2.4.2)) - '@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) '@vitest/eslint-plugin': 1.3.4(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)(vitest@packages+vitest) ansis: 4.1.0 cac: 6.7.14(patch_hash=a8f0f3517a47ce716ed90c0cfe6ae382ab763b021a664ada2a608477d0621588) @@ -9403,12 +9373,12 @@ snapshots: eslint-plugin-n: 17.21.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-no-only-tests: 3.3.0 eslint-plugin-perfectionist: 4.15.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-pnpm: 1.0.0(eslint@9.31.0(jiti@2.4.2)) + eslint-plugin-pnpm: 1.1.0(eslint@9.31.0(jiti@2.4.2)) eslint-plugin-regexp: 2.9.0(eslint@9.31.0(jiti@2.4.2)) eslint-plugin-toml: 0.12.0(eslint@9.31.0(jiti@2.4.2)) eslint-plugin-unicorn: 59.0.1(eslint@9.31.0(jiti@2.4.2)) - eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)) - eslint-plugin-vue: 10.3.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(vue-eslint-parser@10.2.0(eslint@9.31.0(jiti@2.4.2))) + eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)) + eslint-plugin-vue: 10.3.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(vue-eslint-parser@10.2.0(eslint@9.31.0(jiti@2.4.2))) eslint-plugin-yml: 1.18.0(eslint@9.31.0(jiti@2.4.2)) eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.31.0(jiti@2.4.2)) globals: 16.3.0 @@ -9545,7 +9515,7 @@ snapshots: '@babel/parser': 7.27.5 '@babel/types': 7.27.6 '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 '@babel/generator@7.28.0': @@ -10223,8 +10193,8 @@ snapshots: '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.0 - '@babel/types': 7.28.1 + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 '@babel/traverse@7.27.0': dependencies: @@ -10871,7 +10841,7 @@ snapshots: optionalDependencies: '@types/node': 22.16.5 - '@inquirer/prompts@7.7.0(@types/node@22.16.5)': + '@inquirer/prompts@7.7.1(@types/node@22.16.5)': dependencies: '@inquirer/checkbox': 4.2.0(@types/node@22.16.5) '@inquirer/confirm': 5.1.14(@types/node@22.16.5) @@ -10882,7 +10852,7 @@ snapshots: '@inquirer/password': 4.0.17(@types/node@22.16.5) '@inquirer/rawlist': 4.1.5(@types/node@22.16.5) '@inquirer/search': 3.0.17(@types/node@22.16.5) - '@inquirer/select': 4.3.0(@types/node@22.16.5) + '@inquirer/select': 4.3.1(@types/node@22.16.5) optionalDependencies: '@types/node': 22.16.5 @@ -10903,7 +10873,7 @@ snapshots: optionalDependencies: '@types/node': 22.16.5 - '@inquirer/select@4.3.0(@types/node@22.16.5)': + '@inquirer/select@4.3.1(@types/node@22.16.5)': dependencies: '@inquirer/core': 10.1.15(@types/node@22.16.5) '@inquirer/figures': 1.0.13 @@ -11231,30 +11201,6 @@ snapshots: '@oxc-transform/binding-win32-x64-msvc@0.75.1': optional: true - '@oxlint/darwin-arm64@1.6.0': - optional: true - - '@oxlint/darwin-x64@1.6.0': - optional: true - - '@oxlint/linux-arm64-gnu@1.6.0': - optional: true - - '@oxlint/linux-arm64-musl@1.6.0': - optional: true - - '@oxlint/linux-x64-gnu@1.6.0': - optional: true - - '@oxlint/linux-x64-musl@1.6.0': - optional: true - - '@oxlint/win32-arm64@1.6.0': - optional: true - - '@oxlint/win32-x64@1.6.0': - optional: true - '@pkgjs/parseargs@0.11.0': optional: true @@ -11806,6 +11752,10 @@ snapshots: '@types/picomatch@4.0.1': {} + '@types/pngjs@6.0.5': + dependencies: + '@types/node': 22.16.5 + '@types/prompts@2.4.9': dependencies: '@types/node': 22.16.5 @@ -11862,14 +11812,14 @@ snapshots: '@types/node': 20.19.9 optional: true - '@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.37.0 - '@typescript-eslint/type-utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.37.0 + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/type-utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 eslint: 9.31.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 7.0.4 @@ -11879,12 +11829,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.37.0 - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.37.0 + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 eslint: 9.31.0(jiti@2.4.2) typescript: 5.8.3 @@ -11900,10 +11850,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.37.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3) - '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 debug: 4.4.1 typescript: 5.8.3 transitivePeerDependencies: @@ -11914,24 +11864,24 @@ snapshots: '@typescript-eslint/types': 8.36.0 '@typescript-eslint/visitor-keys': 8.36.0 - '@typescript-eslint/scope-manager@8.37.0': + '@typescript-eslint/scope-manager@8.38.0': dependencies: - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/visitor-keys': 8.37.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 '@typescript-eslint/tsconfig-utils@8.36.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) debug: 4.4.1 eslint: 9.31.0(jiti@2.4.2) ts-api-utils: 2.1.0(typescript@5.8.3) @@ -11941,7 +11891,7 @@ snapshots: '@typescript-eslint/types@8.36.0': {} - '@typescript-eslint/types@8.37.0': {} + '@typescript-eslint/types@8.38.0': {} '@typescript-eslint/typescript-estree@8.36.0(typescript@5.8.3)': dependencies: @@ -11959,12 +11909,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.37.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.37.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3) - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/visitor-keys': 8.37.0 + '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -11986,12 +11936,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.37.0 - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) eslint: 9.31.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: @@ -12002,9 +11952,9 @@ snapshots: '@typescript-eslint/types': 8.36.0 eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.37.0': + '@typescript-eslint/visitor-keys@8.38.0': dependencies: - '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/types': 8.38.0 eslint-visitor-keys: 4.2.1 '@typescript/vfs@1.6.1(typescript@5.8.3)': @@ -13724,13 +13674,13 @@ snapshots: - supports-color - typescript - eslint-plugin-pnpm@1.0.0(eslint@9.31.0(jiti@2.4.2)): + eslint-plugin-pnpm@1.1.0(eslint@9.31.0(jiti@2.4.2)): dependencies: eslint: 9.31.0(jiti@2.4.2) find-up-simple: 1.0.1 jsonc-eslint-parser: 2.4.0 pathe: 2.0.3 - pnpm-workspace-yaml: 1.0.0 + pnpm-workspace-yaml: 1.1.0 tinyglobby: 0.2.14 yaml-eslint-parser: 1.3.0 @@ -13776,13 +13726,13 @@ snapshots: semver: 7.7.2 strip-indent: 4.0.0 - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2)): dependencies: eslint: 9.31.0(jiti@2.4.2) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-vue@10.3.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(vue-eslint-parser@10.2.0(eslint@9.31.0(jiti@2.4.2))): + eslint-plugin-vue@10.3.0(@typescript-eslint/parser@8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(vue-eslint-parser@10.2.0(eslint@9.31.0(jiti@2.4.2))): dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2)) eslint: 9.31.0(jiti@2.4.2) @@ -13793,7 +13743,7 @@ snapshots: vue-eslint-parser: 10.2.0(eslint@9.31.0(jiti@2.4.2)) xml-name-validator: 4.0.0 optionalDependencies: - '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-yml@1.18.0(eslint@9.31.0(jiti@2.4.2)): dependencies: @@ -14547,14 +14497,14 @@ snapshots: ini@1.3.8: {} - inquirer@12.8.0(@types/node@22.16.5): + inquirer@12.8.2(@types/node@22.16.5): dependencies: '@inquirer/core': 10.1.15(@types/node@22.16.5) - '@inquirer/prompts': 7.7.0(@types/node@22.16.5) + '@inquirer/prompts': 7.7.1(@types/node@22.16.5) '@inquirer/type': 3.0.8(@types/node@22.16.5) ansi-escapes: 4.3.2 mute-stream: 2.0.0 - run-async: 4.0.4 + run-async: 4.0.5 rxjs: 7.8.2 optionalDependencies: '@types/node': 22.16.5 @@ -15747,17 +15697,6 @@ snapshots: '@oxc-transform/binding-win32-arm64-msvc': 0.75.1 '@oxc-transform/binding-win32-x64-msvc': 0.75.1 - oxlint@1.6.0: - optionalDependencies: - '@oxlint/darwin-arm64': 1.6.0 - '@oxlint/darwin-x64': 1.6.0 - '@oxlint/linux-arm64-gnu': 1.6.0 - '@oxlint/linux-arm64-musl': 1.6.0 - '@oxlint/linux-x64-gnu': 1.6.0 - '@oxlint/linux-x64-musl': 1.6.0 - '@oxlint/win32-arm64': 1.6.0 - '@oxlint/win32-x64': 1.6.0 - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -15909,6 +15848,10 @@ snapshots: dependencies: pngjs: 6.0.0 + pixelmatch@7.1.0: + dependencies: + pngjs: 7.0.0 + pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -15935,7 +15878,9 @@ snapshots: pngjs@6.0.0: {} - pnpm-workspace-yaml@1.0.0: + pngjs@7.0.0: {} + + pnpm-workspace-yaml@1.1.0: dependencies: yaml: 2.8.0 @@ -15962,8 +15907,6 @@ snapshots: prelude-ls@1.2.1: {} - prettier@3.6.2: {} - pretty-bytes@5.6.0: {} pretty-bytes@6.1.1: {} @@ -16280,10 +16223,7 @@ snapshots: run-applescript@7.0.0: {} - run-async@4.0.4: - dependencies: - oxlint: 1.6.0 - prettier: 3.6.2 + run-async@4.0.5: {} run-parallel@1.2.0: dependencies: diff --git a/test/browser/fixtures/expect-dom/toMatchScreenshot.test.ts b/test/browser/fixtures/expect-dom/toMatchScreenshot.test.ts new file mode 100644 index 000000000..452d1a014 --- /dev/null +++ b/test/browser/fixtures/expect-dom/toMatchScreenshot.test.ts @@ -0,0 +1,319 @@ +import { afterEach, describe, expect, test } from 'vitest' +import { extractToMatchScreenshotPaths, render } from './utils' +import { page, server } from '@vitest/browser/context' +import { join } from 'pathe' + +const blockSize = 19 +const blocks = 5 +const dataTestId = 'colors-box' + +const renderTestCase = (colors: readonly [string, string, string]) => + render(` +

+ `) + +/** + * ## Screenshot Testing Strategy + * + * Tests create reference screenshots on-the-fly on demand, then compare + * against them. References are cleaned up after each test. + * + * Screenshot references are unstable across environments (headless vs UI mode, + * different operating systems, different browsers). Storing references for + * every environment combination would create a maintenance burden. + */ +describe('.toMatchScreenshot', () => { + test('compares screenshots correctly', async ({ onTestFinished }) => { + const filename = globalThis.crypto.randomUUID() + const path = join( + '__screenshots__', + 'toMatchScreenshot.test.ts', + `${filename}-${server.browser}-${server.platform}.png`, + ) + + onTestFinished(async () => { + await server.commands.removeFile(path) + }) + + renderTestCase([ + 'oklch(39.6% 0.141 25.723)', + 'oklch(40.5% 0.101 131.063)', + 'oklch(37.9% 0.146 265.522)', + ]) + + const locator = page.getByTestId(dataTestId) + + // Create a reference screenshot by explicitly saving one + await locator.screenshot({ + save: true, + path, + }) + + // Test that `toMatchScreenshot()` correctly finds and compares against + // this reference; since the element hasn't changed, it should match + await expect(locator).toMatchScreenshot(filename) + }) + + // Only run this test if snapshots aren't being updated + test.runIf(server.config.snapshotOptions.updateSnapshot !== 'all')( + "throws when screenshots don't match", + async ({ onTestFinished }) => { + const filename = globalThis.crypto.randomUUID() + const path = join( + '__screenshots__', + 'toMatchScreenshot.test.ts', + `${filename}-${server.browser}-${server.platform}.png`, + ) + + onTestFinished(async () => { + await server.commands.removeFile(path) + }) + + // Create reference with first color set + renderTestCase([ + 'oklch(39.6% 0.141 25.723)', + 'oklch(40.5% 0.101 131.063)', + 'oklch(37.9% 0.146 265.522)', + ]) + + const locator = page.getByTestId(dataTestId) + + await locator.screenshot({ + save: true, + path, + }) + + // Change to different colors - this should cause comparison to fail + renderTestCase([ + 'oklch(84.1% 0.238 128.85)', + 'oklch(84.1% 0.238 128.85)', + 'oklch(84.1% 0.238 128.85)', + ]) + + let errorMessage: string + + try { + await expect(locator).toMatchScreenshot(filename) + } catch (error) { + errorMessage = error.message + } + + const [referencePath, actualPath, diffPath] = extractToMatchScreenshotPaths( + errorMessage, + filename, + ) + + expect(referencePath).toMatch(new RegExp(`${path}$`)) + expect(typeof actualPath).toBe('string') + expect(typeof diffPath).toBe('string') + + onTestFinished(async () => { + await Promise.all([ + server.commands.removeFile(actualPath), + server.commands.removeFile(diffPath), + ]) + }) + + const { pixels, ratio } = + /(?\d+).*?ratio (?[01]\.\d{2})/.exec(errorMessage) + ?.groups ?? {} + + expect(pixels).toMatch(/\d+/) + expect(ratio).toMatch(/[01]\.\d{2}/) + + expect(errorMessage).toMatchInlineSnapshot(` + expect(element).toMatchScreenshot() + + Screenshot does not match the stored reference. + ${pixels} pixels (ratio ${ratio}) differ. + + Reference screenshot: + ${referencePath} + + Actual screenshot: + ${actualPath} + + Diff image: + ${diffPath} + `) + }, + ) + + // Only run this test if snapshots aren't being updated + test.runIf(server.config.snapshotOptions.updateSnapshot !== 'all')( + 'throws when creating a screenshot for the first time', + async ({ + onTestFinished, + }) => { + const { queryByTestId } = renderTestCase([ + 'oklch(37.9% 0.146 265.522)', + 'oklch(40.5% 0.101 131.063)', + 'oklch(39.6% 0.141 25.723)', + ]) + + let errorMessage: string + + const filename = globalThis.crypto.randomUUID() + + try { + await expect(queryByTestId(dataTestId)).toMatchScreenshot(filename) + } catch (error) { + errorMessage = error.message + } + + const [referencePath] = extractToMatchScreenshotPaths(errorMessage, filename) + + expect(typeof referencePath).toBe('string') + + onTestFinished(async () => { + await server.commands.removeFile(referencePath) + }) + + expect(errorMessage).toMatchInlineSnapshot(` + expect(element).toMatchScreenshot() + + No existing reference screenshot found${ + server.config.snapshotOptions.updateSnapshot === 'none' + ? '.' + : '; a new one was created. Review it before running tests again.' + } + + Reference screenshot: + ${referencePath} + `) + }, + ) + + test( + 'throws when not able to capture a stable screenshot', + async ({ onTestFailed }) => { + const filename = globalThis.crypto.randomUUID() + + const { queryByTestId } = render(` +
+
+
+ + `) + + let errorMessage: string + + try { + await expect(queryByTestId(dataTestId)).toMatchScreenshot(filename, { + screenshotOptions: { animations: 'allow' }, + timeout: 1, + }) + } catch (error) { + errorMessage = error.message + } + + onTestFailed(async () => { + const [referencePath] = extractToMatchScreenshotPaths(errorMessage, filename) + + if (typeof referencePath === 'string') { + await server.commands.removeFile(referencePath) + } + }) + + expect(errorMessage).toMatchInlineSnapshot(` + expect(element).toMatchScreenshot() + + Could not capture a stable screenshot within 1ms. + `) + }, + ) + + test( + 'creates correct automatic screenshot names', + async ({ onTestFinished }) => { + const basename = 'toMatchScreenshot-creates-correct-automatic-screenshot-names' + const path = join( + '__screenshots__', + 'toMatchScreenshot.test.ts', + ) + + const firstPath = join( + path, + `${basename}-1-${server.browser}-${server.platform}.png` + ) + const secondPath = join( + path, + `${basename}-2-${server.browser}-${server.platform}.png` + ) + + onTestFinished(async () => { + await Promise.all([ + server.commands.removeFile(firstPath), + server.commands.removeFile(secondPath), + ]) + }) + + renderTestCase([ + 'oklch(39.6% 0.141 25.723)', + 'oklch(40.5% 0.101 131.063)', + 'oklch(37.9% 0.146 265.522)', + ]) + + const locator = page.getByTestId(dataTestId) + + await locator.screenshot({ + save: true, + path: firstPath, + }) + await locator.screenshot({ + save: true, + path: secondPath, + }) + + await expect(locator).toMatchScreenshot() + await expect(locator).toMatchScreenshot() + }, + ) +}) diff --git a/test/browser/fixtures/expect-dom/utils.ts b/test/browser/fixtures/expect-dom/utils.ts index 86b74b4d7..4160a507e 100644 --- a/test/browser/fixtures/expect-dom/utils.ts +++ b/test/browser/fixtures/expect-dom/utils.ts @@ -1,3 +1,13 @@ +function extractToMatchScreenshotPaths (errorMessage: string, filename: string): string[] { + // `map` on `Iterator` is only available in Node >= 22 + return Array.from( + errorMessage.matchAll( + new RegExp(`^.*?((?:[A-Z]:)?/.*?${filename}-[\\w-]+\\.png)`, 'gm'), + ), + ([_, path]) => path, + ) +} + function render(html: string) { const container = document.createElement('div') container.innerHTML = html @@ -16,4 +26,4 @@ function render(html: string) { return { container, queryByTestId, asFragment, getInputByTestId } } -export { render } +export { extractToMatchScreenshotPaths, render } diff --git a/test/browser/specs/to-match-screenshot.test.ts b/test/browser/specs/to-match-screenshot.test.ts new file mode 100644 index 000000000..250392c16 --- /dev/null +++ b/test/browser/specs/to-match-screenshot.test.ts @@ -0,0 +1,169 @@ +import type { ViteUserConfig } from 'vitest/config.js' +import type { TestFsStructure } from '../../test-utils' +import { platform } from 'node:os' +import { resolve } from 'node:path' +import { describe, expect, test } from 'vitest' +import { runVitestCli, useFS } from '../../test-utils' +import { extractToMatchScreenshotPaths } from '../fixtures/expect-dom/utils' +import utilsContent from '../fixtures/expect-dom/utils?raw' + +const testFilename = 'basic.test.ts' +const testName = 'screenshot-snapshot' +const bgColor = '#fff' + +const testContent = /* ts */` +import { page, server } from '@vitest/browser/context' +import { describe, test } from 'vitest' +import { render } from './utils' + +const dataTestId = 'inline-test' + +test('${testName}', async ({ expect }) => { + render('
Inline Test
') + + await expect(page.getByTestId(dataTestId)).toMatchScreenshot() +}) +` + +const browser = 'chromium' + +export async function runInlineTests( + structure: TestFsStructure, + config?: ViteUserConfig['test'], +) { + const root = resolve(process.cwd(), `vitest-test-${crypto.randomUUID()}`) + + const fs = useFS(root, { + ...structure, + 'vitest.config.ts': { + test: { + browser: { + enabled: true, + screenshotFailures: false, + provider: 'playwright', + headless: true, + instances: [{ browser }], + }, + reporters: ['verbose'], + ...config, + }, + }, + }) + + const vitest = await runVitestCli({ + nodeOptions: { + env: { + CI: 'false', + GITHUB_ACTIONS: undefined, + NO_COLOR: 'true', + }, + }, + }, '--root', root, '--watch') + + return { + fs, + root, + ...vitest, + } +} + +describe('--watch', () => { + test( + 'fails when creating a snapshot for the first time and does NOT update it afterwards', + async () => { + const { fs, stderr, vitest } = await runInlineTests( + { + [testFilename]: testContent, + 'utils.ts': utilsContent, + }, + ) + + const [referencePath] = extractToMatchScreenshotPaths(stderr, testName) + + expect(stderr).toContain(`No existing reference screenshot found; a new one was created. Review it before running tests again.\n\nReference screenshot:\n ${referencePath}`) + + const { atime: _1, atimeMs: _2, ...referenceStat } = fs.statFile(referencePath) + + fs.editFile(testFilename, content => `${content}\n`) + + vitest.resetOutput() + await vitest.waitForStdout('Test Files 1 passed') + + expect(vitest.stdout).toContain('✓ |chromium| basic.test.ts > screenshot-snapshot') + + const { atime: _3, atimeMs: _4, ...newReferenceStat } = fs.statFile(referencePath) + + expect(referenceStat).toEqual(newReferenceStat) + }, + ) + + test( + 'with --update creates snapshots and updates them on change', + async () => { + const { fs, stderr, vitest } = await runInlineTests( + { + [testFilename]: testContent, + 'utils.ts': utilsContent, + }, + { + update: true, + }, + ) + + expect(stderr).toMatchInlineSnapshot(`""`) + + const referencePath = `__screenshots__/${testFilename}/${testName}-1-${browser}-${platform()}.png` + const referenceStat = fs.statFile(referencePath) + + fs.editFile(testFilename, content => `${content}\n`) + + vitest.resetOutput() + await vitest.waitForStdout('Test Files 1 passed') + + expect(vitest.stdout).toContain('✓ |chromium| basic.test.ts > screenshot-snapshot') + + const { + atime, + atimeMs, + ctime, + ctimeMs, + mtime, + mtimeMs, + ...diffs + } = fs.statFile(referencePath) + + expect(referenceStat).toEqual(expect.objectContaining(diffs)) + + expect(atime.getTime()).toBeGreaterThan(referenceStat.atime.getTime()) + expect(ctime.getTime()).toBeGreaterThan(referenceStat.ctime.getTime()) + expect(mtime.getTime()).toBeGreaterThan(referenceStat.mtime.getTime()) + + expect(atimeMs).toBeGreaterThan(referenceStat.atimeMs) + expect(ctimeMs).toBeGreaterThan(referenceStat.ctimeMs) + expect(mtimeMs).toBeGreaterThan(referenceStat.mtimeMs) + }, + ) + + test( + 'creates a reference and fails when changing the DOM content', + async () => { + const { fs, stderr, vitest } = await runInlineTests( + { + [testFilename]: testContent, + 'utils.ts': utilsContent, + }, + ) + + expect(stderr).toContain(`No existing reference screenshot found; a new one was created. Review it before running tests again.\n\nReference screenshot:`) + + fs.editFile(testFilename, content => content.replace(bgColor, '#0ff')) + + vitest.resetOutput() + await vitest.waitForStdout('Test Files 1 failed') + + expect(vitest.stdout).toContain('× |chromium| basic.test.ts > screenshot-snapshot') + expect(vitest.stdout).toContain('Screenshot does not match the stored reference.') + expect(vitest.stdout).toMatch(/\d+ pixels \(ratio 0.\d{2}\) differ\./) + }, + ) +}) diff --git a/test/test-utils/index.ts b/test/test-utils/index.ts index 951566109..96a6f4451 100644 --- a/test/test-utils/index.ts +++ b/test/test-utils/index.ts @@ -8,7 +8,7 @@ import fs from 'node:fs' import { Readable, Writable } from 'node:stream' import { fileURLToPath } from 'node:url' import { inspect } from 'node:util' -import { dirname, resolve } from 'pathe' +import { dirname, relative, resolve } from 'pathe' import { x } from 'tinyexec' import * as tinyrainbow from 'tinyrainbow' import { afterEach, onTestFinished } from 'vitest' @@ -208,8 +208,11 @@ async function runCli(command: 'vitest' | 'vite-node', _options?: CliOptions | s if (args[0] !== 'list' && (args.includes('--watch') || args[0] === 'watch')) { if (command === 'vitest') { - // Wait for initial test run to complete - await cli.waitForStdout('Waiting for file changes') + // Waiting for either success or failure + await Promise.race([ + cli.waitForStdout('Waiting for file changes'), + cli.waitForStdout('Tests failed. Watching for file changes'), + ]) } // make sure watcher is ready await cli.waitForStdout('[debug] watcher is ready') @@ -337,6 +340,15 @@ export function useFS(root: string, structure: T) { } createFile(filepath, content) }, + statFile: (file: string): fs.Stats => { + const filepath = resolve(root, file) + + if (relative(root, filepath).startsWith('..')) { + throw new Error(`file ${file} is outside of the test file system`) + } + + return fs.statSync(filepath) + }, } }