From 093ef2efb1117cf0d417b9c84064ccc8f41f0539 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Sun, 11 Aug 2024 21:29:37 +0200 Subject: [PATCH 01/71] User view: always show prev-next --- src/Cms/User.php | 2 +- src/Panel/User.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Cms/User.php b/src/Cms/User.php index ce5fbb03e8..6bc3ac4ce4 100644 --- a/src/Cms/User.php +++ b/src/Cms/User.php @@ -666,7 +666,7 @@ protected function sessionFromOptions(Session|array|null $session): Session */ protected function siblingsCollection(): Users { - return $this->kirby()->users(); + return $this->kirby()->users()->sortBy('username', 'asc'); } /** diff --git a/src/Panel/User.php b/src/Panel/User.php index 1aa8cf5410..252dbabc25 100644 --- a/src/Panel/User.php +++ b/src/Panel/User.php @@ -223,7 +223,7 @@ public function props(): array return array_merge( parent::props(), - $account ? [] : $this->prevNext(), + $this->prevNext(), [ 'blueprint' => $this->model->role()->name(), 'model' => [ From e7824c993330da4855b1e3d1322899416eaa54d9 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Thu, 15 Aug 2024 14:36:37 +0200 Subject: [PATCH 02/71] `App::slug()` that obeys `maxlength` option --- config/areas/site/dialogs.php | 2 +- src/Cms/App.php | 20 +++++++++++++++++++ src/Cms/PageActions.php | 8 ++++---- src/Toolkit/Str.php | 8 ++++++-- tests/Cms/App/AppTest.php | 36 +++++++++++++++++++++++++++++++++++ tests/Toolkit/StrTest.php | 24 +++++++++++++++++++++++ 6 files changed, 91 insertions(+), 7 deletions(-) diff --git a/config/areas/site/dialogs.php b/config/areas/site/dialogs.php index 834b8ca01b..48c26f65be 100644 --- a/config/areas/site/dialogs.php +++ b/config/areas/site/dialogs.php @@ -431,7 +431,7 @@ ]; } - $slugAppendix = Str::slug(I18n::translate('page.duplicate.appendix')); + $slugAppendix = App::slug(I18n::translate('page.duplicate.appendix')); $titleAppendix = I18n::translate('page.duplicate.appendix'); // if the item to be duplicated already exists diff --git a/src/Cms/App.php b/src/Cms/App.php index 32044c7406..307de29b17 100644 --- a/src/Cms/App.php +++ b/src/Cms/App.php @@ -1523,6 +1523,26 @@ public function site(): Site ]); } + /** + * Convert a string to a safe version to be used in a URL, + * using the `slugs.maxlength` option + * + * @param string $string The unsafe string + * @param string $separator To be used instead of space and + * other non-word characters. + * @param string $allowed List of all allowed characters (regex) + * @param int $maxlength The maximum length of the slug + * @return string The safe string + */ + public static function slug( + string $string = null, + string $separator = null, + string $allowed = null, + ): string { + $maxlength = static::instance()->option('slugs.maxlength', 255); + return Str::slug($string, $separator, $allowed, $maxlength); + } + /** * Applies the smartypants rule on the text * diff --git a/src/Cms/PageActions.php b/src/Cms/PageActions.php index ac5a9ef685..9e258df18c 100644 --- a/src/Cms/PageActions.php +++ b/src/Cms/PageActions.php @@ -153,7 +153,7 @@ public function changeSlug( string|null $languageCode = null ): static { // always sanitize the slug - $slug = Str::slug($slug); + $slug = App::slug($slug); // in multi-language installations the slug for the non-default // languages is stored in the text file. The changeSlugForLanguage @@ -443,7 +443,7 @@ public function copy(array $options = []): static $files = $options['files'] ?? false; // clean up the slug - $slug = Str::slug($slug); + $slug = App::slug($slug); if ($parentModel->findPageOrDraft($slug)) { throw new DuplicateException([ @@ -495,7 +495,7 @@ public function copy(array $options = []): static public static function create(array $props): Page { // clean up the slug - $props['slug'] = Str::slug($props['slug'] ?? $props['content']['title'] ?? null); + $props['slug'] = App::slug($props['slug'] ?? $props['content']['title'] ?? null); $props['template'] = $props['model'] = strtolower($props['template'] ?? 'default'); $props['isDraft'] ??= $props['draft'] ?? true; @@ -685,7 +685,7 @@ public function delete(bool $force = false): bool public function duplicate(string|null $slug = null, array $options = []): static { // create the slug for the duplicate - $slug = Str::slug($slug ?? $this->slug() . '-' . Str::slug(I18n::translate('page.duplicate.appendix'))); + $slug = App::slug($slug ?? $this->slug() . '-' . App::slug(I18n::translate('page.duplicate.appendix'))); $arguments = [ 'originalPage' => $this, diff --git a/src/Toolkit/Str.php b/src/Toolkit/Str.php index a8f450fe7b..73fdbf647e 100644 --- a/src/Toolkit/Str.php +++ b/src/Toolkit/Str.php @@ -1132,7 +1132,7 @@ public static function slug( string $string = null, string $separator = null, string $allowed = null, - int $maxlength = 128 + int|false $maxlength = 128 ): string { $separator ??= static::$defaults['slug']['separator']; $allowed ??= static::$defaults['slug']['allowed']; @@ -1165,7 +1165,11 @@ public static function slug( $string = preg_replace('![^a-z0-9]+$!', '', $string); // cut the string after the given maxlength - return static::short($string, $maxlength, ''); + if ($maxlength !== false) { + $string = static::short($string, $maxlength, ''); + } + + return $string; } /** diff --git a/tests/Cms/App/AppTest.php b/tests/Cms/App/AppTest.php index 67d8b031da..960a0e2e53 100644 --- a/tests/Cms/App/AppTest.php +++ b/tests/Cms/App/AppTest.php @@ -836,6 +836,42 @@ public function testSession() $this->assertSame(['Vary' => 'Cookie', 'Cache-Control' => 'custom'], $app->response()->headers()); } + /** + * @covers ::slug + */ + public function testSlug() + { + // default length + $this->assertSame( + 'this-is-a-very-long-sentence-that-should-be-used-to-test-the-app-slug-method-by-default-it-should-limit-the-slug-to-255-characters-so-let-s-see-how-well-this-works-for-this-new-method-would-be-a-pity-if-at-one-point-this-breaks-would-be-a-pity-if-at-one-p', + App::slug('This is a very long sentence that should be used to test the App::slug() method. By default it should limit the slug to 255 characters. So let\'s see how well this works for this new method. Would be a pity if at one point this breaks. Would be a pity if at one point this breaks. Would be a pity if at one point this breaks.') + ); + + // custom length + $app = new App([ + 'options' => [ + 'slugs.maxlength' => 40 + ] + ]); + + $this->assertSame( + 'this-is-a-very-long-sentence-that-should', + App::slug('This is a very long sentence that should be used to test the `slugs.maxlength` option. This should be cut already after 40 characters.') + ); + + // no length restriction + $app = new App([ + 'options' => [ + 'slugs.maxlength' => false + ] + ]); + + $this->assertSame( + 'this-is-a-very-long-sentence-that-should-be-used-to-test-the-app-slug-method-by-default-it-should-limit-the-slug-to-255-characters-but-we-can-disable-the-shortening-so-let-s-see-how-well-this-works-for-this-new-method-would-be-a-pity-if-at-one-point-this-breaks-would-be-a-pity-if-at-one-point-this-breaks-would-be-a-pity-if-at-one-point-this-breaks', + App::slug('This is a very long sentence that should be used to test the App::slug() method. By default it should limit the slug to 255 characters, but we can disable the shortening. So let\'s see how well this works for this new method. Would be a pity if at one point this breaks. Would be a pity if at one point this breaks. Would be a pity if at one point this breaks.') + ); + } + public function testInstance() { App::destroy(); diff --git a/tests/Toolkit/StrTest.php b/tests/Toolkit/StrTest.php index c704fa349b..def8a5797f 100644 --- a/tests/Toolkit/StrTest.php +++ b/tests/Toolkit/StrTest.php @@ -1204,6 +1204,30 @@ public function testSlug() Str::$language = []; } + /** + * @covers ::slug + */ + public function testSlugMaxLength() + { + // default + $this->assertSame( + 'this-is-a-very-long-sentence-that-should-be-used-to-test-the-maxlenght-parameter-of-the-str-slug-method-by-default-it-should-lim', + Str::slug('This is a very long sentence that should be used to test the $maxlenght parameter of the Str::slug() method. By default it should limit the slug to 128 characters.') + ); + + // custom + $this->assertSame( + 'this-is-a-very-long-sentence-that-should-be-used-to-test-the-maxlenght-parameter-of-the-str-slug-method-by-default-it-should-limit-the-slug-to-128-characters-but-we-can-extend-this-to-250', + Str::slug('This is a very long sentence that should be used to test the $maxlenght parameter of the Str::slug() method. By default it should limit the slug to 128 characters, but we can extend this to 250.', null, null, 250) + ); + + // disabled + $this->assertSame( + 'this-is-a-very-long-sentence-that-should-be-used-to-test-the-maxlenght-parameter-of-the-str-slug-method-by-default-it-should-limit-the-slug-to-128-characters-but-we-can-disable-the-shortening', + Str::slug('This is a very long sentence that should be used to test the $maxlenght parameter of the Str::slug() method. By default it should limit the slug to 128 characters, but we can disable the shortening.', null, null, false) + ); + } + /** * @covers ::snake */ From 62a3e0f88c3c15b12a1870eefdeefb63afe704b1 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Thu, 15 Aug 2024 23:02:04 +0200 Subject: [PATCH 03/71] `panel.upload`: emit `open` event --- panel/src/panel/upload.js | 1 + 1 file changed, 1 insertion(+) diff --git a/panel/src/panel/upload.js b/panel/src/panel/upload.js index 4c19761746..b92a6f7f58 100644 --- a/panel/src/panel/upload.js +++ b/panel/src/panel/upload.js @@ -143,6 +143,7 @@ export default (panel) => { preview: this.preview }, on: { + open: (dialog) => this.emit("open", dialog), cancel: () => this.cancel(), submit: async () => { panel.dialog.isLoading = true; From 1f24de579c7c42b99d8f5186d04af1f69d37b001 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Fri, 16 Aug 2024 13:32:01 +0200 Subject: [PATCH 04/71] Rename to `Url::slug()` --- config/areas/site/dialogs.php | 3 ++- src/Cms/App.php | 20 ------------------ src/Cms/PageActions.php | 8 +++---- src/Cms/Url.php | 21 +++++++++++++++++++ tests/Cms/App/AppTest.php | 36 -------------------------------- tests/Cms/Facades/UrlTest.php | 39 +++++++++++++++++++++++++++++++++++ 6 files changed, 66 insertions(+), 61 deletions(-) diff --git a/config/areas/site/dialogs.php b/config/areas/site/dialogs.php index 48c26f65be..1a2cc1d9bb 100644 --- a/config/areas/site/dialogs.php +++ b/config/areas/site/dialogs.php @@ -3,6 +3,7 @@ use Kirby\Cms\App; use Kirby\Cms\Find; use Kirby\Cms\PageRules; +use Kirby\Cms\Url; use Kirby\Exception\Exception; use Kirby\Exception\InvalidArgumentException; use Kirby\Exception\PermissionException; @@ -431,7 +432,7 @@ ]; } - $slugAppendix = App::slug(I18n::translate('page.duplicate.appendix')); + $slugAppendix = Url::slug(I18n::translate('page.duplicate.appendix')); $titleAppendix = I18n::translate('page.duplicate.appendix'); // if the item to be duplicated already exists diff --git a/src/Cms/App.php b/src/Cms/App.php index 307de29b17..32044c7406 100644 --- a/src/Cms/App.php +++ b/src/Cms/App.php @@ -1523,26 +1523,6 @@ public function site(): Site ]); } - /** - * Convert a string to a safe version to be used in a URL, - * using the `slugs.maxlength` option - * - * @param string $string The unsafe string - * @param string $separator To be used instead of space and - * other non-word characters. - * @param string $allowed List of all allowed characters (regex) - * @param int $maxlength The maximum length of the slug - * @return string The safe string - */ - public static function slug( - string $string = null, - string $separator = null, - string $allowed = null, - ): string { - $maxlength = static::instance()->option('slugs.maxlength', 255); - return Str::slug($string, $separator, $allowed, $maxlength); - } - /** * Applies the smartypants rule on the text * diff --git a/src/Cms/PageActions.php b/src/Cms/PageActions.php index 9e258df18c..a9a7a76fbc 100644 --- a/src/Cms/PageActions.php +++ b/src/Cms/PageActions.php @@ -153,7 +153,7 @@ public function changeSlug( string|null $languageCode = null ): static { // always sanitize the slug - $slug = App::slug($slug); + $slug = Url::slug($slug); // in multi-language installations the slug for the non-default // languages is stored in the text file. The changeSlugForLanguage @@ -443,7 +443,7 @@ public function copy(array $options = []): static $files = $options['files'] ?? false; // clean up the slug - $slug = App::slug($slug); + $slug = Url::slug($slug); if ($parentModel->findPageOrDraft($slug)) { throw new DuplicateException([ @@ -495,7 +495,7 @@ public function copy(array $options = []): static public static function create(array $props): Page { // clean up the slug - $props['slug'] = App::slug($props['slug'] ?? $props['content']['title'] ?? null); + $props['slug'] = Url::slug($props['slug'] ?? $props['content']['title'] ?? null); $props['template'] = $props['model'] = strtolower($props['template'] ?? 'default'); $props['isDraft'] ??= $props['draft'] ?? true; @@ -685,7 +685,7 @@ public function delete(bool $force = false): bool public function duplicate(string|null $slug = null, array $options = []): static { // create the slug for the duplicate - $slug = App::slug($slug ?? $this->slug() . '-' . App::slug(I18n::translate('page.duplicate.appendix'))); + $slug = Url::slug($slug ?? $this->slug() . '-' . Url::slug(I18n::translate('page.duplicate.appendix'))); $arguments = [ 'originalPage' => $this, diff --git a/src/Cms/Url.php b/src/Cms/Url.php index bb44139cbc..2ec0fd72a6 100644 --- a/src/Cms/Url.php +++ b/src/Cms/Url.php @@ -3,6 +3,7 @@ namespace Kirby\Cms; use Kirby\Http\Url as BaseUrl; +use Kirby\Toolkit\Str; /** * The `Url` class extends the @@ -31,6 +32,26 @@ public static function home(): string return App::instance()->url(); } + /** + * Convert a string to a safe version to be used in a URL, + * obeying the `slugs.maxlength` option + * + * @param string $string The unsafe string + * @param string $separator To be used instead of space and + * other non-word characters. + * @param string $allowed List of all allowed characters (regex) + * @param int $maxlength The maximum length of the slug + * @return string The safe string + */ + public static function slug( + string $string = null, + string $separator = null, + string $allowed = null, + ): string { + $maxlength = App::instance()->option('slugs.maxlength', 255); + return Str::slug($string, $separator, $allowed, $maxlength); + } + /** * Creates an absolute Url to a template asset if it exists. * This is used in the `css()` and `js()` helpers diff --git a/tests/Cms/App/AppTest.php b/tests/Cms/App/AppTest.php index 960a0e2e53..67d8b031da 100644 --- a/tests/Cms/App/AppTest.php +++ b/tests/Cms/App/AppTest.php @@ -836,42 +836,6 @@ public function testSession() $this->assertSame(['Vary' => 'Cookie', 'Cache-Control' => 'custom'], $app->response()->headers()); } - /** - * @covers ::slug - */ - public function testSlug() - { - // default length - $this->assertSame( - 'this-is-a-very-long-sentence-that-should-be-used-to-test-the-app-slug-method-by-default-it-should-limit-the-slug-to-255-characters-so-let-s-see-how-well-this-works-for-this-new-method-would-be-a-pity-if-at-one-point-this-breaks-would-be-a-pity-if-at-one-p', - App::slug('This is a very long sentence that should be used to test the App::slug() method. By default it should limit the slug to 255 characters. So let\'s see how well this works for this new method. Would be a pity if at one point this breaks. Would be a pity if at one point this breaks. Would be a pity if at one point this breaks.') - ); - - // custom length - $app = new App([ - 'options' => [ - 'slugs.maxlength' => 40 - ] - ]); - - $this->assertSame( - 'this-is-a-very-long-sentence-that-should', - App::slug('This is a very long sentence that should be used to test the `slugs.maxlength` option. This should be cut already after 40 characters.') - ); - - // no length restriction - $app = new App([ - 'options' => [ - 'slugs.maxlength' => false - ] - ]); - - $this->assertSame( - 'this-is-a-very-long-sentence-that-should-be-used-to-test-the-app-slug-method-by-default-it-should-limit-the-slug-to-255-characters-but-we-can-disable-the-shortening-so-let-s-see-how-well-this-works-for-this-new-method-would-be-a-pity-if-at-one-point-this-breaks-would-be-a-pity-if-at-one-point-this-breaks-would-be-a-pity-if-at-one-point-this-breaks', - App::slug('This is a very long sentence that should be used to test the App::slug() method. By default it should limit the slug to 255 characters, but we can disable the shortening. So let\'s see how well this works for this new method. Would be a pity if at one point this breaks. Would be a pity if at one point this breaks. Would be a pity if at one point this breaks.') - ); - } - public function testInstance() { App::destroy(); diff --git a/tests/Cms/Facades/UrlTest.php b/tests/Cms/Facades/UrlTest.php index f56f03ede8..ea2d40e585 100644 --- a/tests/Cms/Facades/UrlTest.php +++ b/tests/Cms/Facades/UrlTest.php @@ -4,6 +4,9 @@ use Kirby\Filesystem\F; +/** + * @coversDefaultClass \Kirby\Cms\Url + */ class UrlTest extends TestCase { public const TMP = KIRBY_TMP_DIR . '/Cms.Url'; @@ -27,6 +30,42 @@ public function testHome() $this->assertSame('https://getkirby.com', Url::home()); } + /** + * @covers ::slug + */ + public function testSlug() + { + // default length + $this->assertSame( + 'this-is-a-very-long-sentence-that-should-be-used-to-test-the-url-slug-method-by-default-it-should-limit-the-slug-to-255-characters-so-let-s-see-how-well-this-works-for-this-new-method-would-be-a-pity-if-at-one-point-this-breaks-would-be-a-pity-if-at-one-p', + Url::slug('This is a very long sentence that should be used to test the Url::slug() method. By default it should limit the slug to 255 characters. So let\'s see how well this works for this new method. Would be a pity if at one point this breaks. Would be a pity if at one point this breaks. Would be a pity if at one point this breaks.') + ); + + // custom length + $app = new App([ + 'options' => [ + 'slugs.maxlength' => 40 + ] + ]); + + $this->assertSame( + 'this-is-a-very-long-sentence-that-should', + Url::slug('This is a very long sentence that should be used to test the `slugs.maxlength` option. This should be cut already after 40 characters.') + ); + + // no length restriction + $app = new App([ + 'options' => [ + 'slugs.maxlength' => false + ] + ]); + + $this->assertSame( + 'this-is-a-very-long-sentence-that-should-be-used-to-test-the-url-slug-method-by-default-it-should-limit-the-slug-to-255-characters-but-we-can-disable-the-shortening-so-let-s-see-how-well-this-works-for-this-new-method-would-be-a-pity-if-at-one-point-this-breaks-would-be-a-pity-if-at-one-point-this-breaks-would-be-a-pity-if-at-one-point-this-breaks', + Url::slug('This is a very long sentence that should be used to test the Url::slug() method. By default it should limit the slug to 255 characters, but we can disable the shortening. So let\'s see how well this works for this new method. Would be a pity if at one point this breaks. Would be a pity if at one point this breaks. Would be a pity if at one point this breaks.') + ); + } + public function testTo() { $this->assertSame('https://getkirby.com', Url::to()); From adbc475dd9bc5565b3f01ace1fe08e427a1b1e1e Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Fri, 23 Aug 2024 16:44:12 +0200 Subject: [PATCH 05/71] Improve `$field->isEmpty()` Fixes #6637 --- src/Content/Field.php | 12 ++++++++++-- tests/Content/FieldTest.php | 5 +++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Content/Field.php b/src/Content/Field.php index 0082063715..82ae4b6928 100644 --- a/src/Content/Field.php +++ b/src/Content/Field.php @@ -124,9 +124,17 @@ public function exists(): bool */ public function isEmpty(): bool { + $value = $this->value; + + if (is_string($value) === true) { + $value = trim($value); + } + return - empty($this->value) === true && - in_array($this->value, [0, '0', false], true) === false; + $value === null || + $value === '' || + $value === [] || + $value === '[]'; } /** diff --git a/tests/Content/FieldTest.php b/tests/Content/FieldTest.php index 6fcd6ba198..0963c1a105 100644 --- a/tests/Content/FieldTest.php +++ b/tests/Content/FieldTest.php @@ -168,6 +168,11 @@ public static function emptyDataProvider(): array ['false', false], [null, true], ['', true], + [' ', true], + ['[]', true], + [[], true], + ['[1]', false], + ['["a"]', false], ]; } From fe72056b463ce4591e7bab10adc4f36356fbed9f Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Sat, 31 Aug 2024 11:54:00 +0200 Subject: [PATCH 06/71] Remove unneeded `@return void` comments --- src/Toolkit/Collection.php | 2 -- tests/Panel/Areas/AreaTestCase.php | 4 ---- tests/Panel/FieldTest.php | 11 ----------- tests/Session/SessionTest.php | 2 -- 4 files changed, 19 deletions(-) diff --git a/src/Toolkit/Collection.php b/src/Toolkit/Collection.php index a57b981c83..7c9fa166a2 100644 --- a/src/Toolkit/Collection.php +++ b/src/Toolkit/Collection.php @@ -96,8 +96,6 @@ public function __get($key) * Low-level setter for elements * * @param string $key string or array - * @param mixed $value - * @return void */ public function __set(string $key, $value): void { diff --git a/tests/Panel/Areas/AreaTestCase.php b/tests/Panel/Areas/AreaTestCase.php index 8b5f2f1e66..d7905a552e 100644 --- a/tests/Panel/Areas/AreaTestCase.php +++ b/tests/Panel/Areas/AreaTestCase.php @@ -75,8 +75,6 @@ public function enableMultilang(): void /** * Fake a ready setup and install * the first admin user - * - * @return void */ public function install(): void { @@ -94,8 +92,6 @@ public function install(): void /** * Fake a ready setup - * - * @return void */ public function installable(): void { diff --git a/tests/Panel/FieldTest.php b/tests/Panel/FieldTest.php index 478fc2e754..4c8f397c73 100644 --- a/tests/Panel/FieldTest.php +++ b/tests/Panel/FieldTest.php @@ -36,7 +36,6 @@ public function tearDown(): void /** * @covers ::email - * @return void */ public function testEmail(): void { @@ -60,7 +59,6 @@ public function testEmail(): void /** * @covers ::filePosition - * @return void */ public function testFilePosition(): void { @@ -114,7 +112,6 @@ public function testFilePosition(): void /** * @covers ::hidden - * @return void */ public function testHidden(): void { @@ -124,7 +121,6 @@ public function testHidden(): void /** * @covers ::pagePosition - * @return void */ public function testPagePosition(): void { @@ -178,7 +174,6 @@ public function testPagePosition(): void /** * @covers ::pagePosition - * @return void */ public function testPagePositionWithNotEnoughOptions(): void { @@ -199,7 +194,6 @@ public function testPagePositionWithNotEnoughOptions(): void /** * @covers ::password - * @return void */ public function testPassword(): void { @@ -222,7 +216,6 @@ public function testPassword(): void /** * @covers ::role - * @return void */ public function testRole(): void { @@ -329,7 +322,6 @@ public function testSlug(): void /** * @covers ::title - * @return void */ public function testTitle(): void { @@ -353,7 +345,6 @@ public function testTitle(): void /** * @covers ::template - * @return void */ public function testTemplate(): void { @@ -420,7 +411,6 @@ public function testTemplate(): void /** * @covers ::translation - * @return void */ public function testTranslation(): void { @@ -443,7 +433,6 @@ public function testTranslation(): void /** * @covers ::username - * @return void */ public function testUsername(): void { diff --git a/tests/Session/SessionTest.php b/tests/Session/SessionTest.php index a05e191365..5d1de134c4 100644 --- a/tests/Session/SessionTest.php +++ b/tests/Session/SessionTest.php @@ -1368,8 +1368,6 @@ public function testInitNonRenewable() * Asserts the state of the write mode of the given session * * @param bool $expected Whether the write mode should be true or false right now - * @param Session $session - * @return void */ protected function assertWriteMode(bool $expected, Session $session): void { From 67f71c89956b81492d052516e32daecf929ad6b3 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Sun, 1 Sep 2024 13:38:49 +0200 Subject: [PATCH 07/71] Add password reset login code lab example --- .../components/login/2_login-code-form/index.vue | 3 +++ panel/src/components/Views/Login/LoginCodeForm.vue | 14 ++++++-------- .../components/Views/Users/ResetPasswordView.vue | 1 + 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/panel/lab/components/login/2_login-code-form/index.vue b/panel/lab/components/login/2_login-code-form/index.vue index 77f7aa5dd9..54e139dfe8 100644 --- a/panel/lab/components/login/2_login-code-form/index.vue +++ b/panel/lab/components/login/2_login-code-form/index.vue @@ -11,5 +11,8 @@ :pending="{ email: 'homer@simpson.com', challenge: 'totp' }" /> + + + diff --git a/panel/src/components/Views/Login/LoginCodeForm.vue b/panel/src/components/Views/Login/LoginCodeForm.vue index bd9addd7d3..bc3bd7613b 100644 --- a/panel/src/components/Views/Login/LoginCodeForm.vue +++ b/panel/src/components/Views/Login/LoginCodeForm.vue @@ -19,25 +19,23 @@
+ class="k-login-button k-login-back-button" + /> + class="k-login-button" + />
diff --git a/panel/src/components/Views/Users/ResetPasswordView.vue b/panel/src/components/Views/Users/ResetPasswordView.vue index 9ffa54acbe..befe4edc5b 100644 --- a/panel/src/components/Views/Users/ResetPasswordView.vue +++ b/panel/src/components/Views/Users/ResetPasswordView.vue @@ -3,6 +3,7 @@
{{ $t("view.resetPassword") }} + @@ -364,9 +364,9 @@ export default { /** Dropdown arrow **/ .k-button-arrow { - --icon-size: 14px; width: max-content; - margin-inline-start: -0.125rem; + margin-inline-start: -0.25rem; + margin-inline-end: -0.125rem; } /** Disabled button **/ From 10e1f4a3d37a4f05a80c7de9124b2f63f96f982a Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Sun, 8 Sep 2024 10:18:48 +0200 Subject: [PATCH 24/71] Clean up `UserRules` --- src/Cms/UserPermissions.php | 13 ++++++++++++ src/Cms/UserRules.php | 34 ++++++++++--------------------- tests/Cms/Users/UserRulesTest.php | 3 ++- 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/Cms/UserPermissions.php b/src/Cms/UserPermissions.php index 62cd6625cb..0b6a2e2d8b 100644 --- a/src/Cms/UserPermissions.php +++ b/src/Cms/UserPermissions.php @@ -26,6 +26,19 @@ public function __construct(User $model) protected function canChangeRole(): bool { + // protect admin from role changes by non-admin + if ( + $this->model->isAdmin() === true && + $this->user->isAdmin() !== true + ) { + return false; + } + + // prevent demoting the last admin + if ($this->model->isLastAdmin() === true) { + return false; + } + return $this->model->roles()->count() > 1; } diff --git a/src/Cms/UserRules.php b/src/Cms/UserRules.php index cf326650c7..930b589ca9 100644 --- a/src/Cms/UserRules.php +++ b/src/Cms/UserRules.php @@ -101,17 +101,6 @@ public static function changePassword( */ public static function changeRole(User $user, string $role): bool { - // protect admin from role changes by non-admin - if ( - $user->kirby()->user()->isAdmin() === false && - $user->isAdmin() === true - ) { - throw new PermissionException([ - 'key' => 'user.changeRole.permission', - 'data' => ['name' => $user->username()] - ]); - } - // prevent non-admins making a user to admin if ( $user->kirby()->user()->isAdmin() === false && @@ -122,8 +111,7 @@ public static function changeRole(User $user, string $role): bool ]); } - static::validRole($user, $role); - + // prevent demoting the last admin if ($role !== 'admin' && $user->isLastAdmin() === true) { throw new LogicException([ 'key' => 'user.changeRole.lastAdmin', @@ -131,6 +119,7 @@ public static function changeRole(User $user, string $role): bool ]); } + // check permissions if ($user->permissions()->changeRole() !== true) { throw new PermissionException([ 'key' => 'user.changeRole.permission', @@ -138,6 +127,13 @@ public static function changeRole(User $user, string $role): bool ]); } + // prevent changing to role that is not available for user + if ($user->roles('change')->find($role) instanceof Role === false) { + throw new InvalidArgumentException([ + 'key' => 'user.role.invalid', + ]); + } + return true; } @@ -199,19 +195,10 @@ public static function create(User $user, array $props = []): bool return true; } - // only admins are allowed to add admins - $role = $props['role'] ?? null; - - if ($role === 'admin' && $currentUser?->isAdmin() === false) { - throw new PermissionException([ - 'key' => 'user.create.permission' - ]); - } - // check user permissions (if not on install) if ( $user->kirby()->users()->count() > 0 && - $user->permissions()->create() !== true + $user->permissions()->can('create') !== true ) { throw new PermissionException([ 'key' => 'user.create.permission' @@ -370,6 +357,7 @@ public static function validPassword( * Validates a user role * * @throws \Kirby\Exception\InvalidArgumentException If the user role does not exist + * @deprecated 4.5.0 */ public static function validRole(User $user, string $role): bool { diff --git a/tests/Cms/Users/UserRulesTest.php b/tests/Cms/Users/UserRulesTest.php index 57753bfbd5..0562e6f1af 100644 --- a/tests/Cms/Users/UserRulesTest.php +++ b/tests/Cms/Users/UserRulesTest.php @@ -174,7 +174,8 @@ public function testChangeRoleFromAdminByNonAdmin() 'user' => 'user@domain.com', 'users' => [ ['email' => 'user@domain.com', 'role' => 'editor'], - ['email' => 'admin@domain.com', 'role' => 'admin'] + ['email' => 'admin@domain.com', 'role' => 'admin'], + ['email' => 'another@domain.com', 'role' => 'admin'] ] ]); $kirby->impersonate('user@domain.com'); From a03483792dc54c678b942a3bfaec86d4fefd737a Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Sun, 8 Sep 2024 10:41:38 +0200 Subject: [PATCH 25/71] Remove roles count check from `UserPermissions` --- src/Cms/UserPermissions.php | 2 +- src/Panel/User.php | 2 +- tests/Cms/Roles/RolesTest.php | 2 +- tests/Panel/UserTest.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Cms/UserPermissions.php b/src/Cms/UserPermissions.php index 0b6a2e2d8b..cab3776551 100644 --- a/src/Cms/UserPermissions.php +++ b/src/Cms/UserPermissions.php @@ -39,7 +39,7 @@ protected function canChangeRole(): bool return false; } - return $this->model->roles()->count() > 1; + return true; } protected function canCreate(): bool diff --git a/src/Panel/User.php b/src/Panel/User.php index 252dbabc25..75124944b0 100644 --- a/src/Panel/User.php +++ b/src/Panel/User.php @@ -70,7 +70,7 @@ public function dropdown(array $options = []): array 'dialog' => $url . '/changeRole', 'icon' => 'bolt', 'text' => I18n::translate('user.changeRole'), - 'disabled' => $this->isDisabledDropdownOption('changeRole', $options, $permissions) + 'disabled' => $this->isDisabledDropdownOption('changeRole', $options, $permissions) || $this->model->roles('change')->count() < 2 ]; $result[] = [ diff --git a/tests/Cms/Roles/RolesTest.php b/tests/Cms/Roles/RolesTest.php index 908027ee2e..ef619cb37c 100644 --- a/tests/Cms/Roles/RolesTest.php +++ b/tests/Cms/Roles/RolesTest.php @@ -151,7 +151,7 @@ public function testCanBeChanged() $app->impersonate('editor@getkirby.com'); $canBeChanged = $roles->canBeChanged(); - $this->assertCount(0, $canBeChanged); // TODO: change once `User::roles()` and `UserPermissions::canChangeRole()` have been improved/fixed + $this->assertCount(1, $canBeChanged); $app->impersonate('admin@getkirby.com'); $canBeChanged = $roles->canBeChanged(); diff --git a/tests/Panel/UserTest.php b/tests/Panel/UserTest.php index 1bb1fc9a89..a52e80d89c 100644 --- a/tests/Panel/UserTest.php +++ b/tests/Panel/UserTest.php @@ -275,7 +275,7 @@ public function testOptions() 'changeLanguage' => true, 'changeName' => true, 'changePassword' => true, - 'changeRole' => false, // just one role + 'changeRole' => true, 'delete' => true, 'update' => true, ]; From 185e85c3c56da85691a94d9e5fbb80909cce6e63 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Tue, 27 Aug 2024 21:03:10 +0200 Subject: [PATCH 26/71] PageCreateDialog: prevent tmp using actual page Fixes #6640 --- src/Panel/PageCreateDialog.php | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/Panel/PageCreateDialog.php b/src/Panel/PageCreateDialog.php index 2c75d811da..3be0430d81 100644 --- a/src/Panel/PageCreateDialog.php +++ b/src/Panel/PageCreateDialog.php @@ -249,7 +249,7 @@ public function load(): array public function model(): Page { return $this->model ??= Page::factory([ - 'slug' => 'new', + 'slug' => '__new__', 'template' => $this->template, 'model' => $this->template, 'parent' => $this->parent instanceof Page ? $this->parent : null @@ -267,12 +267,7 @@ public function resolveFieldTemplates(array $input): array // create temporary page object // to resolve the template strings - $page = new Page([ - 'slug' => 'tmp', - 'template' => $this->template, - 'parent' => $this->model(), - 'content' => $input - ]); + $page = $this->model()->clone(['content' => $input]); if (is_string($title)) { $input['title'] = $page->toSafeString($title); From e078242fa169f11edeacfee3426a4ec2733c6bb5 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Fri, 20 Sep 2024 16:26:42 +0200 Subject: [PATCH 27/71] Add todo for v5 --- src/Panel/PageCreateDialog.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Panel/PageCreateDialog.php b/src/Panel/PageCreateDialog.php index 3be0430d81..a2aa712de3 100644 --- a/src/Panel/PageCreateDialog.php +++ b/src/Panel/PageCreateDialog.php @@ -248,6 +248,7 @@ public function load(): array */ public function model(): Page { + // TODO: use actual in-memory page in v5 return $this->model ??= Page::factory([ 'slug' => '__new__', 'template' => $this->template, From 873b35f45a92eb916c41f8e575ec0ef9b499370f Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Sun, 22 Sep 2024 13:16:44 +0200 Subject: [PATCH 28/71] Fix `User::roles()` for last admin --- src/Cms/User.php | 5 +++-- tests/Cms/Users/UserTest.php | 10 +++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Cms/User.php b/src/Cms/User.php index 96fd48a70d..238f1b14de 100644 --- a/src/Cms/User.php +++ b/src/Cms/User.php @@ -584,8 +584,9 @@ public function roles(string|null $purpose = null): Roles $kirby = $this->kirby(); $roles = $kirby->roles(); - // for the last admin, only their current role (admin) is available - if ($this->isLastAdmin() === true) { + // for the last admin, + // only their current role (admin) is available for changing + if ($purpose === 'change' && $this->isLastAdmin() === true) { // a collection with just the one role of the user return $roles->filter('id', $this->role()->id()); } diff --git a/tests/Cms/Users/UserTest.php b/tests/Cms/Users/UserTest.php index e25855a64a..c262f65782 100644 --- a/tests/Cms/Users/UserTest.php +++ b/tests/Cms/Users/UserTest.php @@ -367,11 +367,6 @@ public function testRoles(): void ], ]); - // last admin has only admin role as option - $user = $app->user('admin@getkirby.com'); - $roles = $user->roles()->values(fn ($role) => $role->id()); - $this->assertSame(['admin'], $roles); - // normal user should not have admin as option $user = $app->user('editor@getkirby.com'); $roles = $user->roles()->values(fn ($role) => $role->id()); @@ -382,6 +377,11 @@ public function testRoles(): void $user = $app->user('editor@getkirby.com'); $roles = $user->roles()->values(fn ($role) => $role->id()); $this->assertSame(['admin', 'editor', 'guest'], $roles); + + // last admin has only admin role as option + $user = $app->user('admin@getkirby.com'); + $roles = $user->roles('change')->values(fn ($role) => $role->id()); + $this->assertSame(['admin'], $roles); } /** From ef24719774bf70ea6a543761441625f0bd0d3981 Mon Sep 17 00:00:00 2001 From: Bastian Allgeier Date: Mon, 23 Sep 2024 17:02:54 +0200 Subject: [PATCH 29/71] Add a lab example for the active item --- .../components/dropdowns/1_themes/index.vue | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/panel/lab/components/dropdowns/1_themes/index.vue b/panel/lab/components/dropdowns/1_themes/index.vue index fc50ade575..6ec59cb519 100644 --- a/panel/lab/components/dropdowns/1_themes/index.vue +++ b/panel/lab/components/dropdowns/1_themes/index.vue @@ -30,19 +30,25 @@ export default { return [ { text: "Edit", - icon: "edit", + icon: "edit" }, { text: "Duplicate", - icon: "copy", + icon: "copy" }, "-", { - text: "Delete", - icon: "trash", + text: "Active item", + icon: "heart", + current: true }, + "-", + { + text: "Delete", + icon: "trash" + } ]; - }, - }, + } + } }; From a8a61ef6fb6ec45d29c81e6a7ab618aa471fa172 Mon Sep 17 00:00:00 2001 From: Bastian Allgeier Date: Mon, 23 Sep 2024 17:03:04 +0200 Subject: [PATCH 30/71] Use -800 for the active color --- panel/src/components/Dropdowns/DropdownContent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/panel/src/components/Dropdowns/DropdownContent.vue b/panel/src/components/Dropdowns/DropdownContent.vue index 14e60f9d6c..998ff48e39 100644 --- a/panel/src/components/Dropdowns/DropdownContent.vue +++ b/panel/src/components/Dropdowns/DropdownContent.vue @@ -384,7 +384,7 @@ export default { .k-dropdown-content[data-theme="light"] { --dropdown-color-bg: var(--color-white); --dropdown-color-text: var(--color-black); - --dropdown-color-current: var(--color-blue-700); + --dropdown-color-current: var(--color-blue-800); --dropdown-color-hr: rgba(0, 0, 0, 0.1); } From 4b7413ef8802e4abbac2436a7d105e1e4ff16a8b Mon Sep 17 00:00:00 2001 From: Bastian Allgeier Date: Mon, 23 Sep 2024 17:12:03 +0200 Subject: [PATCH 31/71] Show a checkmark for the current item --- panel/src/components/Dropdowns/DropdownItem.vue | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/panel/src/components/Dropdowns/DropdownItem.vue b/panel/src/components/Dropdowns/DropdownItem.vue index 95b0f94509..8ea54872cc 100644 --- a/panel/src/components/Dropdowns/DropdownItem.vue +++ b/panel/src/components/Dropdowns/DropdownItem.vue @@ -48,7 +48,6 @@ export default { --button-rounded: var(--rounded-sm); --button-width: 100%; display: flex; - gap: 0.75rem; } .k-dropdown-item.k-button:focus { outline: var(--outline); @@ -56,6 +55,12 @@ export default { .k-dropdown-item.k-button[aria-current] { --button-color-text: var(--dropdown-color-current); } +.k-dropdown-item.k-button[aria-current]::after { + margin-inline-start: auto; + text-align: center; + content: "✓"; + padding-inline-start: var(--spacing-1); +} .k-dropdown-item.k-button:not([aria-disabled]):hover { --button-color-back: var(--dropdown-color-hr); } From d6ed7b1d7eea5a10f83174cf8bf70b0d35c4991b Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Mon, 23 Sep 2024 18:35:37 +0200 Subject: [PATCH 32/71] TagsInput: show radio/checkbox in dropdown --- panel/src/components/Forms/Input/TagsInput.vue | 7 ------- 1 file changed, 7 deletions(-) diff --git a/panel/src/components/Forms/Input/TagsInput.vue b/panel/src/components/Forms/Input/TagsInput.vue index e2cf667786..02ba947192 100644 --- a/panel/src/components/Forms/Input/TagsInput.vue +++ b/panel/src/components/Forms/Input/TagsInput.vue @@ -247,14 +247,7 @@ export default { .k-tags-input .k-picklist-dropdown { margin-top: var(--spacing-1); } -.k-tags-input .k-picklist-dropdown .k-choice-input { - gap: 0; -} .k-tags-input .k-picklist-dropdown .k-choice-input:focus-within { outline: var(--outline); } -.k-tags-input .k-picklist-dropdown .k-choice-input input { - opacity: 0; - width: 0; -} From 07f269062bbff1102b6c4e6e11abd3f3553c496f Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Mon, 23 Sep 2024 21:43:04 +0200 Subject: [PATCH 33/71] Fix default columns for radio input --- panel/src/components/Forms/Input/RadioInput.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/panel/src/components/Forms/Input/RadioInput.vue b/panel/src/components/Forms/Input/RadioInput.vue index cf5ccff041..a63ffa8616 100644 --- a/panel/src/components/Forms/Input/RadioInput.vue +++ b/panel/src/components/Forms/Input/RadioInput.vue @@ -22,7 +22,10 @@ import { required as validateRequired } from "vuelidate/lib/validators"; export const props = { mixins: [InputProps, options], props: { - columns: Number, + columns: { + default: 1, + type: Number + }, reset: { default: true, type: Boolean From cfd255b60eca9d110362ddcf9112551ebc6eabfb Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Sun, 22 Sep 2024 13:30:43 +0200 Subject: [PATCH 34/71] Validate roles when creating user --- src/Cms/UserRules.php | 14 ++++++++- tests/Cms/Users/UserRulesTest.php | 47 +++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/Cms/UserRules.php b/src/Cms/UserRules.php index 930b589ca9..0a302d3d45 100644 --- a/src/Cms/UserRules.php +++ b/src/Cms/UserRules.php @@ -198,13 +198,25 @@ public static function create(User $user, array $props = []): bool // check user permissions (if not on install) if ( $user->kirby()->users()->count() > 0 && - $user->permissions()->can('create') !== true + $user->permissions()->create() !== true ) { throw new PermissionException([ 'key' => 'user.create.permission' ]); } + $role = $props['role'] ?? null; + + // prevent creating a role that is not available for user + if ( + in_array($role, [null, 'default', 'nobody'], true) === false && + $user->kirby()->roles('create')->find($role) instanceof Role === false + ) { + throw new InvalidArgumentException([ + 'key' => 'user.role.invalid', + ]); + } + return true; } diff --git a/tests/Cms/Users/UserRulesTest.php b/tests/Cms/Users/UserRulesTest.php index 0562e6f1af..7f25d45c62 100644 --- a/tests/Cms/Users/UserRulesTest.php +++ b/tests/Cms/Users/UserRulesTest.php @@ -361,6 +361,53 @@ public function testCreatePermissions() ]); } + public function testCreateInvalidRole() + { + $app = $this->app()->clone([ + 'users' => [ + ['email' => 'editor@getkirby.com', 'role' => 'editor'] + ] + ]); + + $app->impersonate('editor@getkirby.com'); + + $permissions = $this->createMock(UserPermissions::class); + $permissions->method('__call')->with('create')->willReturn(true); + + $user = $this->createMock(User::class); + $user->method('kirby')->willReturn($app); + $user->method('permissions')->willReturn($permissions); + $user->method('id')->willReturn('test'); + $user->method('email')->willReturn('test@getkirby.com'); + $user->method('language')->willReturn('en'); + + // no role + $this->assertTrue(UserRules::create($user, [ + 'password' => 12345678 + ])); + + // role: nobody + $this->assertTrue(UserRules::create($user, [ + 'password' => 12345678, + 'role' => 'nobody' + ])); + + // role: default + $this->assertTrue(UserRules::create($user, [ + 'password' => 12345678, + 'role' => 'default' + ])); + + // invalid role + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Please enter a valid role'); + + UserRules::create($user, [ + 'password' => 12345678, + 'role' => 'foo' + ]); + } + public function testUpdate() { $app = $this->appWithAdmin(); From 9770e734acd689a9dbae7bfa64c79d044f70e13a Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Sun, 29 Sep 2024 19:27:02 +0200 Subject: [PATCH 35/71] Upgrade npm dependencies --- panel/package-lock.json | 776 +++++++++++++++++++--------------------- panel/package.json | 18 +- 2 files changed, 387 insertions(+), 407 deletions(-) diff --git a/panel/package-lock.json b/panel/package-lock.json index e428d64f99..55375a8d1b 100644 --- a/panel/package-lock.json +++ b/panel/package-lock.json @@ -8,7 +8,7 @@ "dependencies": { "autosize": "^6.0.1", "container-query-polyfill": "^1.0.2", - "dayjs": "^1.11.12", + "dayjs": "^1.11.13", "mitt": "^3.0.1", "portal-vue": "^2.1.7", "prosemirror-commands": "^1.6.0", @@ -17,7 +17,7 @@ "prosemirror-keymap": "^1.2.2", "prosemirror-model": "^1.22.3", "prosemirror-schema-list": "^1.4.1", - "prosemirror-view": "^1.33.10", + "prosemirror-view": "^1.34.3", "vue": "^2.7.16", "vuedraggable": "^2.24.3", "vuelidate": "^0.7.7", @@ -25,17 +25,17 @@ }, "devDependencies": { "@vitejs/plugin-vue2": "^2.3.1", - "eslint": "^9.9.0", + "eslint": "^9.11.1", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-vue": "^9.27.0", + "eslint-plugin-vue": "^9.28.0", "glob": "^11.0.0", - "jsdom": "^24.1.1", + "jsdom": "^25.0.1", "prettier": "^3.3.3", - "rollup-plugin-external-globals": "^0.11.0", - "terser": "^5.31.6", - "vite": "^5.4.0", + "rollup-plugin-external-globals": "^0.12.0", + "terser": "^5.34.1", + "vite": "^5.4.8", "vite-plugin-static-copy": "^1.0.6", - "vitest": "^2.0.5", + "vitest": "^2.1.1", "vue-docgen-api": "^4.79.2", "vue-template-compiler": "^2.7.16" } @@ -49,19 +49,6 @@ "node": ">=0.10.0" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/helper-string-parser": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", @@ -499,9 +486,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.1.tgz", - "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -513,6 +500,16 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/core": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", + "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", @@ -537,9 +534,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.0.tgz", - "integrity": "sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==", + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz", + "integrity": "sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==", "dev": true, "license": "MIT", "engines": { @@ -556,6 +553,19 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", + "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -753,179 +763,242 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", - "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.5.tgz", + "integrity": "sha512-SU5cvamg0Eyu/F+kLeMXS7GoahL+OoizlclVFX3l5Ql6yNlywJJ0OuqTzUx0v+aHhPHEB/56CT06GQrRrGNYww==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", - "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.5.tgz", + "integrity": "sha512-S4pit5BP6E5R5C8S6tgU/drvgjtYW76FBuG6+ibG3tMvlD1h9LHVF9KmlmaUBQ8Obou7hEyS+0w+IR/VtxwNMQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", - "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.5.tgz", + "integrity": "sha512-250ZGg4ipTL0TGvLlfACkIxS9+KLtIbn7BCZjsZj88zSg2Lvu3Xdw6dhAhfe/FjjXPVNCtcSp+WZjVsD3a/Zlw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", - "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.5.tgz", + "integrity": "sha512-D8brJEFg5D+QxFcW6jYANu+Rr9SlKtTenmsX5hOSzNYVrK5oLAEMTUgKWYJP+wdKyCdeSwnapLsn+OVRFycuQg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", - "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.5.tgz", + "integrity": "sha512-PNqXYmdNFyWNg0ma5LdY8wP+eQfdvyaBAojAXgO7/gs0Q/6TQJVXAXe8gwW9URjbS0YAammur0fynYGiWsKlXw==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.5.tgz", + "integrity": "sha512-kSSCZOKz3HqlrEuwKd9TYv7vxPYD77vHSUvM2y0YaTGnFc8AdI5TTQRrM1yIp3tXCKrSL9A7JLoILjtad5t8pQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", - "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.5.tgz", + "integrity": "sha512-oTXQeJHRbOnwRnRffb6bmqmUugz0glXaPyspp4gbQOPVApdpRrY/j7KP3lr7M8kTfQTyrBUzFjj5EuHAhqH4/w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", - "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.5.tgz", + "integrity": "sha512-qnOTIIs6tIGFKCHdhYitgC2XQ2X25InIbZFor5wh+mALH84qnFHvc+vmWUpyX97B0hNvwNUL4B+MB8vJvH65Fw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.5.tgz", + "integrity": "sha512-TMYu+DUdNlgBXING13rHSfUc3Ky5nLPbWs4bFnT+R6Vu3OvXkTkixvvBKk8uO4MT5Ab6lC3U7x8S8El2q5o56w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", - "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.5.tgz", + "integrity": "sha512-PTQq1Kz22ZRvuhr3uURH+U/Q/a0pbxJoICGSprNLAoBEkyD3Sh9qP5I0Asn0y0wejXQBbsVMRZRxlbGFD9OK4A==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.5.tgz", + "integrity": "sha512-bR5nCojtpuMss6TDEmf/jnBnzlo+6n1UhgwqUvRoe4VIotC7FG1IKkyJbwsT7JDsF2jxR+NTnuOwiGv0hLyDoQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", - "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.5.tgz", + "integrity": "sha512-N0jPPhHjGShcB9/XXZQWuWBKZQnC1F36Ce3sDqWpujsGjDz/CQtOL9LgTrJ+rJC8MJeesMWrMWVLKKNR/tMOCA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", - "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.5.tgz", + "integrity": "sha512-uBa2e28ohzNNwjr6Uxm4XyaA1M/8aTgfF2T7UIlElLaeXkgpmIJ2EitVNQxjO9xLLLy60YqAgKn/AqSpCUkE9g==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", - "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.5.tgz", + "integrity": "sha512-RXT8S1HP8AFN/Kr3tg4fuYrNxZ/pZf1HemC5Tsddc6HzgGnJm0+Lh5rAHJkDuW3StI0ynNXukidROMXYl6ew8w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", - "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.5.tgz", + "integrity": "sha512-ElTYOh50InL8kzyUD6XsnPit7jYCKrphmddKAe1/Ytt74apOxDq5YEcbsiKs0fR3vff3jEneMM+3I7jbqaMyBg==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", - "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.5.tgz", + "integrity": "sha512-+lvL/4mQxSV8MukpkKyyvfwhH266COcWlXE/1qxwN08ajovta3459zrjLghYMgDerlzNwLAcFpvU+WWE5y6nAQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { "version": "20.9.0", @@ -952,14 +1025,14 @@ } }, "node_modules/@vitest/expect": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", - "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz", + "integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.0.5", - "@vitest/utils": "2.0.5", + "@vitest/spy": "2.1.1", + "@vitest/utils": "2.1.1", "chai": "^5.1.1", "tinyrainbow": "^1.2.0" }, @@ -967,10 +1040,58 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/mocker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz", + "integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "^2.1.0-beta.1", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.11" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/spy": "2.1.1", + "msw": "^2.3.5", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/mocker/node_modules/magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, "node_modules/@vitest/pretty-format": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", - "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz", + "integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -981,13 +1102,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.5.tgz", - "integrity": "sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz", + "integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.0.5", + "@vitest/utils": "2.1.1", "pathe": "^1.1.2" }, "funding": { @@ -995,14 +1116,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.5.tgz", - "integrity": "sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz", + "integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.0.5", - "magic-string": "^0.30.10", + "@vitest/pretty-format": "2.1.1", + "magic-string": "^0.30.11", "pathe": "^1.1.2" }, "funding": { @@ -1020,9 +1141,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", - "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", + "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", "dev": true, "license": "MIT", "dependencies": { @@ -1033,14 +1154,13 @@ } }, "node_modules/@vitest/utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", - "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz", + "integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.0.5", - "estree-walker": "^3.0.3", + "@vitest/pretty-format": "2.1.1", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" }, @@ -1048,16 +1168,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/utils/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/@vue/compiler-core": { "version": "3.2.45", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.45.tgz", @@ -1575,12 +1685,13 @@ } }, "node_modules/cssstyle": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", - "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", + "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==", "dev": true, + "license": "MIT", "dependencies": { - "rrweb-cssom": "^0.6.0" + "rrweb-cssom": "^0.7.1" }, "engines": { "node": ">=18" @@ -1605,9 +1716,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.12", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", - "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==", + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", "license": "MIT" }, "node_modules/de-indent": { @@ -1617,12 +1728,13 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1782,20 +1894,24 @@ } }, "node_modules/eslint": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.9.0.tgz", - "integrity": "sha512-JfiKJrbx0506OEerjK2Y1QlldtBxkAlLxT5OEcRF8uaQ86noDe2k31Vw9rnSWv+MXZHj7OOUV/dA0AhdLFcyvA==", + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.1.tgz", + "integrity": "sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.11.0", - "@eslint/config-array": "^0.17.1", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.6.0", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.9.0", + "@eslint/js": "9.11.1", + "@eslint/plugin-kit": "^0.2.0", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -1815,7 +1931,6 @@ "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", @@ -1854,17 +1969,18 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "9.27.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz", - "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==", + "version": "9.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.28.0.tgz", + "integrity": "sha512-ShrihdjIhOTxs+MfWun6oJWuk+g/LAhN+CiuOl/jjkG3l0F2AuK5NMTaWqyvBgkFtpYmyks6P4603mLmhNJW8g==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "globals": "^13.24.0", "natural-compare": "^1.4.0", "nth-check": "^2.1.1", "postcss-selector-parser": "^6.0.15", - "semver": "^7.6.0", + "semver": "^7.6.3", "vue-eslint-parser": "^9.4.3", "xml-name-validator": "^4.0.0" }, @@ -2043,29 +2159,6 @@ "node": ">=0.10.0" } }, - "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2250,18 +2343,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/glob": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", @@ -2465,15 +2546,6 @@ "node": ">= 14" } }, - "node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "engines": { - "node": ">=16.17.0" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -2717,18 +2789,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-typed-array": { "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", @@ -2792,13 +2852,13 @@ } }, "node_modules/jsdom": { - "version": "24.1.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.1.tgz", - "integrity": "sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==", + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", "dev": true, "license": "MIT", "dependencies": { - "cssstyle": "^4.0.1", + "cssstyle": "^4.1.0", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", "form-data": "^4.0.0", @@ -2811,7 +2871,7 @@ "rrweb-cssom": "^0.7.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.4", + "tough-cookie": "^5.0.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", @@ -2846,13 +2906,6 @@ "node": ">= 6" } }, - "node_modules/jsdom/node_modules/rrweb-cssom": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", - "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", - "dev": true, - "license": "MIT" - }, "node_modules/jsdom/node_modules/xml-name-validator": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", @@ -3197,12 +3250,6 @@ "sourcemap-codec": "^1.4.8" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -3246,18 +3293,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3285,10 +3320,11 @@ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.7", @@ -3322,33 +3358,6 @@ "node": ">=0.10.0" } }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -3402,21 +3411,6 @@ "node": ">= 0.4" } }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -3557,9 +3551,10 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -3582,9 +3577,9 @@ } }, "node_modules/postcss": { - "version": "8.4.41", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", - "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "funding": [ { "type": "opencollective", @@ -3602,8 +3597,8 @@ "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -3736,9 +3731,9 @@ } }, "node_modules/prosemirror-view": { - "version": "1.33.10", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.33.10.tgz", - "integrity": "sha512-wsKg9JeQkWlkXG8DDcloI/tbB9r3CysziubigoC8wTuE6zobN/9cl8bGRk1J1XjkUp7rxGBziOSxrhoILL84hg==", + "version": "1.34.3", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.3.tgz", + "integrity": "sha512-mKZ54PrX19sSaQye+sef+YjBbNu2voNwLS1ivb6aD2IRmxRGW64HU9B644+7OfJStGLyxvOreKqEgfvXa91WIA==", "license": "MIT", "dependencies": { "prosemirror-model": "^1.20.0", @@ -3746,12 +3741,6 @@ "prosemirror-transform": "^1.1.0" } }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, "node_modules/pug": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", @@ -3890,12 +3879,6 @@ "node": ">=6" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -3944,12 +3927,6 @@ "node": ">= 4" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -3987,12 +3964,13 @@ } }, "node_modules/rollup": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", - "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "version": "4.22.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.5.tgz", + "integrity": "sha512-WoinX7GeQOFMGznEcWA1WrTQCd/tpEbMkc3nuMs9BT0CPjMdSjPMTVClwWd4pgSQwJdP65SK9mTCNvItlr5o7w==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.6" }, "bin": { "rollup": "dist/bin/rollup" @@ -4002,27 +3980,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.13.0", - "@rollup/rollup-android-arm64": "4.13.0", - "@rollup/rollup-darwin-arm64": "4.13.0", - "@rollup/rollup-darwin-x64": "4.13.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", - "@rollup/rollup-linux-arm64-gnu": "4.13.0", - "@rollup/rollup-linux-arm64-musl": "4.13.0", - "@rollup/rollup-linux-riscv64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-musl": "4.13.0", - "@rollup/rollup-win32-arm64-msvc": "4.13.0", - "@rollup/rollup-win32-ia32-msvc": "4.13.0", - "@rollup/rollup-win32-x64-msvc": "4.13.0", + "@rollup/rollup-android-arm-eabi": "4.22.5", + "@rollup/rollup-android-arm64": "4.22.5", + "@rollup/rollup-darwin-arm64": "4.22.5", + "@rollup/rollup-darwin-x64": "4.22.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.5", + "@rollup/rollup-linux-arm-musleabihf": "4.22.5", + "@rollup/rollup-linux-arm64-gnu": "4.22.5", + "@rollup/rollup-linux-arm64-musl": "4.22.5", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.5", + "@rollup/rollup-linux-riscv64-gnu": "4.22.5", + "@rollup/rollup-linux-s390x-gnu": "4.22.5", + "@rollup/rollup-linux-x64-gnu": "4.22.5", + "@rollup/rollup-linux-x64-musl": "4.22.5", + "@rollup/rollup-win32-arm64-msvc": "4.22.5", + "@rollup/rollup-win32-ia32-msvc": "4.22.5", + "@rollup/rollup-win32-x64-msvc": "4.22.5", "fsevents": "~2.3.2" } }, "node_modules/rollup-plugin-external-globals": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-external-globals/-/rollup-plugin-external-globals-0.11.0.tgz", - "integrity": "sha512-LR+sH2WkgWMPxsA5o5rT7uW7BeWXSeygLe60QQi9qoN/ufaCuHDaVOIbndIkqDPnZt/wZugJh5DCzkZFdSWlLQ==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-external-globals/-/rollup-plugin-external-globals-0.12.0.tgz", + "integrity": "sha512-65Tqhh/f7hDY0qHmT4lYTVdDkY/BZU5bUQwS+SPvy6seSlACpcFRu2HzOmbLozXJS0/mOjwFyLlzJjlT2MTt8g==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.1.0", "estree-walker": "^3.0.3", @@ -4057,10 +4039,11 @@ "integrity": "sha512-85aZYCxweiD5J8yTEbw+E6A27zSnLPNDL0WfPdw3YYodq7WjnTKo0q4dtyQ2gz23iPT8Q9CUyJtAaUNcTxRf5Q==" }, "node_modules/rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", - "dev": true + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", + "dev": true, + "license": "MIT" }, "node_modules/run-parallel": { "version": "1.2.0", @@ -4104,10 +4087,11 @@ } }, "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4169,9 +4153,10 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -4296,18 +4281,6 @@ "node": ">=8" } }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4339,9 +4312,9 @@ "dev": true }, "node_modules/terser": { - "version": "5.31.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", - "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", + "version": "5.34.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", + "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4370,10 +4343,18 @@ "dev": true }, "node_modules/tinybench": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz", - "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", - "dev": true + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", + "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", + "dev": true, + "license": "MIT" }, "node_modules/tinypool": { "version": "1.0.0", @@ -4395,15 +4376,35 @@ } }, "node_modules/tinyspy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz", - "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, "license": "MIT", "engines": { "node": ">=14.0.0" } }, + "node_modules/tldts": { + "version": "6.1.48", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.48.tgz", + "integrity": "sha512-SPbnh1zaSzi/OsmHb1vrPNnYuwJbdWjwo5TbBYYMlTtH3/1DSb41t8bcSxkwDmmbG2q6VLPVvQc7Yf23T+1EEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.48" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.48", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.48.tgz", + "integrity": "sha512-3gD9iKn/n2UuFH1uilBviK9gvTNT6iYwdqrj1Vr5mh8FuelvpRNaYVH4pNYqUgOGU4aAdL9X35eLuuj0gRsx+A==", + "dev": true, + "license": "MIT" + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -4433,27 +4434,16 @@ "dev": true }, "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" + "node": ">=16" } }, "node_modules/tr46": { @@ -4530,16 +4520,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -4560,15 +4540,15 @@ "dev": true }, "node_modules/vite": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz", - "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==", + "version": "5.4.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", + "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.21.3", - "postcss": "^8.4.40", - "rollup": "^4.13.0" + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" @@ -4620,16 +4600,15 @@ } }, "node_modules/vite-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.5.tgz", - "integrity": "sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", + "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.5", + "debug": "^4.3.6", "pathe": "^1.1.2", - "tinyrainbow": "^1.2.0", "vite": "^5.0.0" }, "bin": { @@ -4675,30 +4654,30 @@ } }, "node_modules/vitest": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.5.tgz", - "integrity": "sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", + "integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==", "dev": true, "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@vitest/expect": "2.0.5", - "@vitest/pretty-format": "^2.0.5", - "@vitest/runner": "2.0.5", - "@vitest/snapshot": "2.0.5", - "@vitest/spy": "2.0.5", - "@vitest/utils": "2.0.5", + "@vitest/expect": "2.1.1", + "@vitest/mocker": "2.1.1", + "@vitest/pretty-format": "^2.1.1", + "@vitest/runner": "2.1.1", + "@vitest/snapshot": "2.1.1", + "@vitest/spy": "2.1.1", + "@vitest/utils": "2.1.1", "chai": "^5.1.1", - "debug": "^4.3.5", - "execa": "^8.0.1", - "magic-string": "^0.30.10", + "debug": "^4.3.6", + "magic-string": "^0.30.11", "pathe": "^1.1.2", "std-env": "^3.7.0", - "tinybench": "^2.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.0", "tinypool": "^1.0.0", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.0.5", + "vite-node": "2.1.1", "why-is-node-running": "^2.3.0" }, "bin": { @@ -4713,8 +4692,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.0.5", - "@vitest/ui": "2.0.5", + "@vitest/browser": "2.1.1", + "@vitest/ui": "2.1.1", "happy-dom": "*", "jsdom": "*" }, @@ -4740,12 +4719,13 @@ } }, "node_modules/vitest/node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/void-elements": { diff --git a/panel/package.json b/panel/package.json index 52414d89b6..a42be50bcc 100644 --- a/panel/package.json +++ b/panel/package.json @@ -13,7 +13,7 @@ "dependencies": { "autosize": "^6.0.1", "container-query-polyfill": "^1.0.2", - "dayjs": "^1.11.12", + "dayjs": "^1.11.13", "mitt": "^3.0.1", "portal-vue": "^2.1.7", "prosemirror-commands": "^1.6.0", @@ -22,7 +22,7 @@ "prosemirror-keymap": "^1.2.2", "prosemirror-model": "^1.22.3", "prosemirror-schema-list": "^1.4.1", - "prosemirror-view": "^1.33.10", + "prosemirror-view": "^1.34.3", "vue": "^2.7.16", "vuedraggable": "^2.24.3", "vuelidate": "^0.7.7", @@ -30,17 +30,17 @@ }, "devDependencies": { "@vitejs/plugin-vue2": "^2.3.1", - "eslint": "^9.9.0", + "eslint": "^9.11.1", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-vue": "^9.27.0", + "eslint-plugin-vue": "^9.28.0", "glob": "^11.0.0", - "jsdom": "^24.1.1", + "jsdom": "^25.0.1", "prettier": "^3.3.3", - "rollup-plugin-external-globals": "^0.11.0", - "terser": "^5.31.6", - "vite": "^5.4.0", + "rollup-plugin-external-globals": "^0.12.0", + "terser": "^5.34.1", + "vite": "^5.4.8", "vite-plugin-static-copy": "^1.0.6", - "vitest": "^2.0.5", + "vitest": "^2.1.1", "vue-docgen-api": "^4.79.2", "vue-template-compiler": "^2.7.16" }, From 2560915f243f0252fdbea95b93ce8751d39a66c0 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Sat, 31 Aug 2024 14:09:48 +0200 Subject: [PATCH 36/71] `api.methodOverwrite ` config option and check --- config/api/routes/system.php | 12 ++++++++++++ i18n/translations/en.json | 1 + panel/src/api/index.js | 2 +- .../components/Views/System/SystemSecurity.vue | 18 +++++++++++++++++- src/Panel/View.php | 3 +++ 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/config/api/routes/system.php b/config/api/routes/system.php index 103e82680e..e7e49b4c34 100644 --- a/config/api/routes/system.php +++ b/config/api/routes/system.php @@ -31,6 +31,18 @@ ]; } ], + [ + 'pattern' => 'system/method-test', + 'method' => 'PATCH', + 'action' => function () { + return [ + 'status' => match ($this->kirby()->request()->method()) { + 'PATCH' => 'ok', + default => 'fail' + } + ]; + } + ], [ 'pattern' => 'system/register', 'method' => 'POST', diff --git a/i18n/translations/en.json b/i18n/translations/en.json index 6212ecfa31..038a946237 100644 --- a/i18n/translations/en.json +++ b/i18n/translations/en.json @@ -629,6 +629,7 @@ "system.info.copy": "Copy info", "system.info.copied": "System info copied", + "system.issues.api.methods": "Your server does not support PATCH requests", "system.issues.content": "The content folder seems to be exposed", "system.issues.eol.kirby": "Your installed Kirby version has reached end-of-life and will not receive further security updates", "system.issues.eol.plugin": "Your installed version of the { plugin } plugin is has reached end-of-life and will not receive further security updates", diff --git a/panel/src/api/index.js b/panel/src/api/index.js index 3088b5fb87..af39143a72 100644 --- a/panel/src/api/index.js +++ b/panel/src/api/index.js @@ -23,7 +23,7 @@ export default (panel) => { const api = { csrf: panel.system.csrf, endpoint: rtrim(panel.urls.api, "/"), - methodOverwrite: true, + methodOverwrite: panel.config.api?.methodOverwrite ?? false, ping: null, requests: [], running: 0 diff --git a/panel/src/components/Views/System/SystemSecurity.vue b/panel/src/components/Views/System/SystemSecurity.vue index 3ce78e005f..89a82116c4 100644 --- a/panel/src/components/Views/System/SystemSecurity.vue +++ b/panel/src/components/Views/System/SystemSecurity.vue @@ -54,7 +54,7 @@ export default { // call the check method on every URL in the `urls` object const promises = Object.entries(this.urls).map(this.check); - await promiseAll(promises); + await promiseAll([...promises, this.testPatchRequests()]); console.info( `System health checks ended. ${ @@ -81,6 +81,22 @@ export default { }, retry() { this.$go(window.location.href); + }, + /** + * Checks if server supports PATH request or if + * the `api.methodOverwrite` option needs to be activated + */ + async testPatchRequests() { + const { status } = await this.$api.patch("system/method-test"); + + if (status !== "ok") { + this.issues.push({ + id: "method-overwrite-text", + text: this.$t("system.issues.api.methods"), + link: "https://getkirby.com/docs/reference/system/options/api#methods-overwrite", + icon: "protected" + }); + } } } }; diff --git a/src/Panel/View.php b/src/Panel/View.php index a2fcebcff1..25a5cf874e 100644 --- a/src/Panel/View.php +++ b/src/Panel/View.php @@ -275,6 +275,9 @@ public static function globals(): array return [ '$config' => fn () => [ + 'api' => [ + 'methodOverwrite' => $kirby->option('api.methodOverwrite', false) + ], 'debug' => $kirby->option('debug', false), 'kirbytext' => $kirby->option('panel.kirbytext', true), 'translation' => $kirby->option('panel.language', 'en'), From 62122e48e6ffc3bcdb203a655b5f671f3b4978d2 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Tue, 1 Oct 2024 18:51:48 +0200 Subject: [PATCH 37/71] Change default of `api.methodOverwrite` to `true` --- src/Panel/View.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Panel/View.php b/src/Panel/View.php index 25a5cf874e..9058e5eec6 100644 --- a/src/Panel/View.php +++ b/src/Panel/View.php @@ -276,7 +276,7 @@ public static function globals(): array return [ '$config' => fn () => [ 'api' => [ - 'methodOverwrite' => $kirby->option('api.methodOverwrite', false) + 'methodOverwrite' => $kirby->option('api.methodOverwrite', true) ], 'debug' => $kirby->option('debug', false), 'kirbytext' => $kirby->option('panel.kirbytext', true), From 4247f9ab773e0cbab824d98700cfd9e142409af8 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Wed, 2 Oct 2024 19:54:20 +0200 Subject: [PATCH 38/71] Move page: allow parent without any pages sections --- src/Cms/PageRules.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Cms/PageRules.php b/src/Cms/PageRules.php index b981058a54..40e3784ccf 100644 --- a/src/Cms/PageRules.php +++ b/src/Cms/PageRules.php @@ -385,7 +385,10 @@ public static function move(Page $page, Site|Page $parent): bool } // check if the template of this page is allowed as subpage type - if (in_array($page->intendedTemplate()->name(), $allowed) === false) { + if ( + $allowed !== [] && + in_array($page->intendedTemplate()->name(), $allowed) === false + ) { throw new PermissionException([ 'key' => 'page.move.template', 'data' => [ From 1821adcad12fd30be81a824929c855c619ec65d0 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Thu, 3 Oct 2024 10:58:49 +0200 Subject: [PATCH 39/71] Fix cache for `$page->isListable()` etc --- src/Cms/File.php | 24 +++++++++--------------- src/Cms/Page.php | 15 +++++++++------ 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/Cms/File.php b/src/Cms/File.php index 4fac82c5ed..f5aaa189df 100644 --- a/src/Cms/File.php +++ b/src/Cms/File.php @@ -340,11 +340,9 @@ public function isAccessible(): bool static $accessible = []; - if ($template = $this->template()) { - return $accessible[$template] ??= $this->permissions()->can('access'); - } - - return $accessible['__none__'] ??= $this->permissions()->can('access'); + $role = $this->kirby()->user()?->role()->id() ?? '__none__'; + $template = $this->template() ?? '__none__'; + return $accessible[$role][$template] ??= $this->permissions()->can('access'); } /** @@ -365,11 +363,9 @@ public function isListable(): bool static $listable = []; - if ($template = $this->template()) { - return $listable[$template] ??= $this->permissions()->can('list'); - } - - return $listable['__none__'] ??= $this->permissions()->can('list'); + $role = $this->kirby()->user()?->role()->id() ?? '__none__'; + $template = $this->template() ?? '__none__'; + return $listable[$role][$template] ??= $this->permissions()->can('list'); } /** @@ -381,11 +377,9 @@ public function isReadable(): bool { static $readable = []; - if ($template = $this->template()) { - return $readable[$template] ??= $this->permissions()->can('read'); - } - - return $readable['__none__'] ??= $this->permissions()->can('read'); + $role = $this->kirby()->user()?->role()->id() ?? '__none__'; + $template = $this->template() ?? '__none__'; + return $readable[$role][$template] ??= $this->permissions()->can('read'); } /** diff --git a/src/Cms/Page.php b/src/Cms/Page.php index 3fab7b32e8..574a4a385e 100644 --- a/src/Cms/Page.php +++ b/src/Cms/Page.php @@ -525,9 +525,10 @@ public function isAccessible(): bool static $accessible = []; + $role = $this->kirby()->user()?->role()->id() ?? '__none__'; $template = $this->intendedTemplate()->name(); - - return $accessible[$template] ??= $this->permissions()->can('access'); + $accessible[$role] ??= []; + return $accessible[$role][$template] ??= $this->permissions()->can('access'); } /** @@ -691,9 +692,10 @@ public function isListable(): bool static $listable = []; + $role = $this->kirby()->user()?->role()->id() ?? '__none__'; $template = $this->intendedTemplate()->name(); - - return $listable[$template] ??= $this->permissions()->can('list'); + $listable[$role] ??= []; + return $listable[$role][$template] ??= $this->permissions()->can('list'); } /** @@ -747,9 +749,10 @@ public function isReadable(): bool { static $readable = []; + $role = $this->kirby()->user()?->role()->id() ?? '__none__'; $template = $this->intendedTemplate()->name(); - - return $readable[$template] ??= $this->permissions()->can('read'); + $readable[$role] ??= []; + return $readable[$role][$template] ??= $this->permissions()->can('read'); } /** From 5fac8d548cd83a286985681988db00ed2c628204 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Thu, 3 Oct 2024 11:11:29 +0200 Subject: [PATCH 40/71] Add unit test --- tests/Cms/Pages/PageRulesTest.php | 60 +++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/tests/Cms/Pages/PageRulesTest.php b/tests/Cms/Pages/PageRulesTest.php index 04fb02c8bf..a475f240df 100644 --- a/tests/Cms/Pages/PageRulesTest.php +++ b/tests/Cms/Pages/PageRulesTest.php @@ -764,6 +764,9 @@ public function testValidateSlugMaxlength() PageRules::create($page); } + /** + * @covers ::move + */ public function testMove() { $app = new App([ @@ -808,6 +811,9 @@ public function testMove() $this->assertTrue(PageRules::move($child, $parentB)); } + /** + * @covers ::move + */ public function testMoveWithoutPermissions() { $permissions = $this->createMock(PagePermissions::class); @@ -823,6 +829,9 @@ public function testMoveWithoutPermissions() PageRules::move($page, new Page(['slug' => 'test'])); } + /** + * @covers ::move + */ public function testMoveWithDuplicate() { $app = new App([ @@ -862,6 +871,9 @@ public function testMoveWithDuplicate() PageRules::move($child, $parentB); } + /** + * @covers ::move + */ public function testMoveWithInvalidTemplate() { $app = new App([ @@ -913,4 +925,52 @@ public function testMoveWithInvalidTemplate() PageRules::move($child, $parentB); } + + /** + * @covers ::move + */ + public function testMoveWithNoTemplateRestrictions() + { + $app = new App([ + 'roots' => [ + 'index' => static::TMP, + ], + 'site' => [ + 'children' => [ + [ + 'slug' => 'parent-a', + 'template' => 'blog', + 'children' => [ + [ + 'slug' => 'child', + 'template' => 'article' + ] + ] + ], + [ + 'slug' => 'parent-b', + 'template' => 'photography', + ] + ] + ], + 'blueprints' => [ + 'pages/photography' => [ + 'sections' => [ + 'albums' => [ + 'type' => 'info', + ] + ] + ] + ] + ]); + + $app->impersonate('kirby'); + + $parentB = $app->page('parent-b'); + $child = $app->page('parent-a/child'); + + $this->expectNotToPerformAssertions(); + + PageRules::move($child, $parentB); + } } From 90674e81e1b237a32671a576c0ad53585b2b3d17 Mon Sep 17 00:00:00 2001 From: Ahmet Bora Date: Thu, 3 Oct 2024 12:23:46 +0300 Subject: [PATCH 41/71] Move `changeExtension` logic into `manipulate` method #6715 --- src/Cms/FileActions.php | 16 +++++--- tests/Cms/Files/FileActionsTest.php | 51 ++++++++++++++++++++++++ tests/Cms/Files/fixtures/files/test.mp4 | Bin 0 -> 281806 bytes 3 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 tests/Cms/Files/fixtures/files/test.mp4 diff --git a/src/Cms/FileActions.php b/src/Cms/FileActions.php index f701e50b82..712291a6df 100644 --- a/src/Cms/FileActions.php +++ b/src/Cms/FileActions.php @@ -139,10 +139,9 @@ public function changeTemplate(string|null $template): static $file = $file->update(['template' => $template]); - // rename and/or resize the file if configured by new blueprint + // resize the file if configured by new blueprint $create = $file->blueprint()->create(); - $file = $file->manipulate($create); - $file = $file->changeExtension($file, $create['format'] ?? null); + $file = $file->manipulate($create); return $file; }); @@ -286,7 +285,6 @@ public static function create(array $props, bool $move = false): File // resize the file on upload if configured $file = $file->manipulate($create); - $file = $file->changeExtension($file, $create['format'] ?? null); // store the content if necessary // (always create files in the default language) @@ -339,7 +337,14 @@ public function manipulate(array|null $options = []): static // generate image file and overwrite it in place $this->kirby()->thumb($this->root(), $this->root(), $options); - return $this->clone([]); + $file = $this->clone(); + + // change the file extension if format option configured + if ($format = $options['format'] ?? null) { + $file = $file->changeExtension($file, $format); + } + + return $file; } /** @@ -388,7 +393,6 @@ public function replace(string $source, bool $move = false): static // apply the resizing/crop options from the blueprint $create = $file->blueprint()->create(); $file = $file->manipulate($create); - $file = $file->changeExtension($file, $create['format'] ?? null); // return a fresh clone return $file->clone(); diff --git a/tests/Cms/Files/FileActionsTest.php b/tests/Cms/Files/FileActionsTest.php index 3d8b91aaa7..655374b479 100644 --- a/tests/Cms/Files/FileActionsTest.php +++ b/tests/Cms/Files/FileActionsTest.php @@ -936,6 +936,57 @@ public function testManipulate($parent) $this->assertSame(100, $replacedFile->height()); } + /** + * @dataProvider parentProvider + */ + public function testManipulateValidFormat($parent) + { + $original = static::FIXTURES . '/test.jpg'; + + $originalFile = File::create([ + 'filename' => 'test.jpg', + 'source' => $original, + 'parent' => $parent + ]); + + $this->assertSame(128, $originalFile->width()); + $this->assertSame(128, $originalFile->height()); + + $replacedFile = $originalFile->manipulate([ + 'width' => 100, + 'height' => 100, + 'format' => 'webp' + ]); + + $this->assertSame('webp', $replacedFile->extension()); + $this->assertSame(100, $replacedFile->width()); + $this->assertSame(100, $replacedFile->height()); + } + + /** + * @dataProvider parentProvider + */ + public function testManipulateInvalidValidFormat($parent) + { + $original = static::FIXTURES . '/test.mp4'; + + $originalFile = File::create([ + 'filename' => 'test.mp4', + 'source' => $original, + 'parent' => $parent + ]); + + $replacedFile = $originalFile->manipulate([ + 'width' => 100, + 'height' => 100, + 'format' => 'webp' + ]); + + // proves strictly that both are the same object + $this->assertSame($originalFile, $replacedFile); + $this->assertSame('mp4', $replacedFile->extension()); + } + public function testChangeNameHooks() { $calls = 0; diff --git a/tests/Cms/Files/fixtures/files/test.mp4 b/tests/Cms/Files/fixtures/files/test.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..3436c5afe439f011c4672133e820e7e131742188 GIT binary patch literal 281806 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 z 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�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�qEosK9emfdLgoZ`LCu%*H@xxn zT>AYw>fNjnhmG+iITYcO%*ji{O!eF=UgVzeA@`%j_h%vXs8a4fVO}=9f`P}h&yz}E zW+gf!$JuSt|GHk|rV*~;`%??Y_T|(rdYQV3;(hl33`_ay^+zTcs1PEV&vi?OjSvYqc|_>V_GssdQLcx+}`UB?U0uv$3$B zqstWsRZ&D18>CzwNyB`fU7AbcJ|`oxs7@qmr#NPE^fx+~*E=({+jYQ{F8JS+jBVgI zee!vRj5_>`#Z*t81vTNb8@_hk`saHD1Wn>NQdtaEGhcf1`DKcjV#-doYS*9-8)b6*g=#JyQr)rA$NavF7%>Y zt%q_;bu7D8sd_V;$N^R5#$;3wRqzEqqCou=BY-VfiOXjn9Cx~rszb_3CKb+f_B*8! zZ8$9xD?A+=tqM>DzQ`I*dT`@U2|Yo8JUPfCSlOsi89wH7yxrX!QjOk#3qoIJ)$X0) zA&PJ~2WvHDgqjlOZ3!^%g?q2Tz601s;qqoCB^eBX?Uh@A~51=`F4$ z@lMW}0w1=X46wvRDkOa>>GlpE>=0L`Fdp{l#-1KR=PVp{QSWxr!rMpYeIp{K(m0_l zecR{sk;1_D>w4EmhA7hC1+(-k*|e(0vfYxb@%a+#@9M+~&CvS$5u#^$K^p~mm9_$$ zbQw`g3JwMVO&W~cmhXmzYFw%5Hk+SOB8(D0So>eR`ZVaexDy5m8lhO-Jy`3AtJet$ z9(e87JCSD|J=#e85SaZEp*6o*F@}#Y%=1IQhDg@$t08^swNtWUEm`$*Z|T7kzN7~Y zRoY9nKPN!Pi)WXZtV**!KF0mL^Oa8YBVfZmh4DLacUkV%J3SRStPj!@ing9ji|(2= z%WBjq%dIFQs;ZVVy2Q$?dO_P%&GY*eNdg@O)cJ1v*Ll@78^z}Yhg4kggJT*O)_%$S zA%Co4h7VSk&|D#gbtyi2RONRo{2w`R$w5}vOw61(KSGcChcVV2G+b+8V{P^gCC}vQ z4j}8Bx%6qKPT=7}f*f}GHB6FiM&<-#F8ym2;MMUgX6xJO0$)JSUC0uROIE1lZ~-gb z)mPl{7tZCj#lFWb$@X-nDaWWd@s_@56r>@Kk_=6O7v}fN)WmbosN63_h<&%6zpW@g ze1rqz4MzB~et?o}k%%P*hUC=IrcH@ z$KKd$nQ~%2z5hC8_LjjLoK{Z!6K6itb$VFcnB zIE?bF{>waYJzqUXm{ti*#9A+{DkDL1Dp1QdV@^W ztF}sneK!0-BarsKPaaL4v?A#K{JAWI`n+nVewax%AEbArxBL|?FwT-2S_OK0^7Gg? z3x4H-#M8oxucYzuyG4#E%$q8Q#1?qD$mLW!mE4AcpERM8qA{CqKf9Dg+`bx4w#rf^ zE$HbDv~NnctMZa!zJAE4dDMq;MsJ?GD(CP?N^ zyV3GHs2WeMmSehT32~+tD<>^E*5J(rypgXam{&5m!%IFPU*+?0sj-6(Ct&AF+W)6`DSjz9Wr+R}>KFBZYnjcu z_ub_)(|o>rM%K)qug$xA&~(mYDQF4~xFBDvi)lDU9&D;v_FCl@(IcZwNG+?$wMp+C z$1?|WXR8Y+^{iZ}^7#OY?%dGM4Is&G?)uIz=p@UK^?ha%GjOYBhW=6Hy1vrRBZYhYR{f3quY)(|Gl+Toy7jXE{YVVV;=PPIG6SiypHIj2`~8f9Xn(?CyK}w7+pEh6V#f_owIN zKq>P}oxy8DAYH+@VH7Q4Vtt}&Z03=nlNt&Oj-hSGzS7+HR!4OCc2$zvy38YnBLx9N zF0wdG99dwd!B!-{;K?oES*ncclPkM{@EK9N{5aUkjviAX6f=lW2r!#skI-$s(#mY#2LYA5l%5$M# z?t=oV{5NW=WJsU4Ens%TmUZ5;zl_xH?K-RzH~s|MPs=#Nh2p@8Z(8^g;qkN5R_kt@ zQf0w-Q}s1j3S)sauu+srMSiLdZt&DJ?dF|39QD@=!;3Att!9XP9f zeeSeKnxMhQgkch)g_dlOLL~X7G*P5(v1hwj2o3X33teOQ46;M?1xX8lcOBr(BR%wR0RuBZp~Fy_3QFNflWLvAVP}bij;-(M_4zw&cFM=4U$& z=2DupDmqapxyG^q4YAhXyA0OOv_@ob;ko;x4^RlT-lGtt`knyQwB=y+8fISExxso` zPK0{Hs`kA@qgPMJlZnt1`LAOQJJ`6w;?Yslz&y7H9?9vh?Qe|oB}^q+DzxX~K8$3W zkqX8g@IoV}Uryz<6hOevUXR>cBkSyU{%-vq%kDYtwDHcxf6d&~v>o zhsxq))4EpZV_i#^i;- zqT1`eUu=0rB9|u1+{mN1U%M`9(51Ny#_*`Tt>@{UQF8~FL=Uajf4BJdODv{*Q^CMg z63@6#_bq#`XP?t34Y38HBaqRYObz_)Bxm}uVvr4V13JZGro_QSw0ap!VL~#9W_ZyU zt{UExVyM>rY5;uQ`yN!N`J5S~@N~RwDMtkK%6Eaio;&@Fpc5^`jZD6phib)E)7;fc)tZq)@5SvZ3f&o-y+e*b%^i3j=zjs4;X zOf^$H#bbI$SbliaM5~D_nyiyE@_7Q>^{!ukF*m>4k;O4hP7tJ#0Zx`K34ux zaQd&(?w!WN_7p40-5`F`D@aX_qzW3;ao)v_?$rQDuJmCIgj1%CR^-&kBJf7N;aMtc zx&%nsS<381*thhOphg@XB#LULO%Q4Qa;%A8>hSJri28UWooIwGYwmsC^`!#=k#MB6 zCdtq%rjWHa>FXxV@xz8}@!H98LJ{pmYUiCuHC|(`y$4)w*l=XP-C6gele?j=SRtOT z(rAtC_d5qNe8@9tRetwS%ASED#iR?bx5SFCE=+m^Ap6ZHYZgsdj!tU7zyyexnFp;) z#T;hy0-6?BdAS>knrKC>Y+Ko0;|s0)uQ!Uhp8)Z8c?!BTS1U z*e%vaMrdxpFv;XYI*z+_xH3Cr99XwV3g2GDk@vUpcT!gE8t904-x}ecE9AOGKS_1j z`Rz&N`jqfMUt*U`QhyaK3c^A&$T*7asbTJPaB^)U_T~U-Nim64QvoL0Z@x=;u$lS( z#YeP$uLk)JlSQNm$HY_I;9x0>+ns=LVmSJD4WUUrWYlW@HhxCwy47M?9YQrA%=kg9 z6L1TD2V+t-ZV-Rzr}e}Sdc7UXw&HF~9}ZvdVffytqO?tBW_VLL@tSa1DO6rG3EAaj zoBN%Yu!R;(s*&%k|09q^3h=E4grdN01=JKuUx(b|aeIsd#g*0}g{}A?Mx`Yo*S`1z zK0^V{G5iQgfk>g?`L4dw!bbvbd4Q+*Gt2-nssCOc148Ky5Wql0zS6#<#2MT&5cGaz6$b&{YwMB?RR99OtK9oK;~~6kfNw*0dj==zDpQq#pO1M#>^)z5Pz{e)e3A zW$IUnnk0J@AMKbqM5wm|_-HgEMU*<{C3(=Fk;xj>!U$lK{6I-@?e3ytme-Y{XvMy_ z%uCm;dVJg#lHRH zkPlWfz&cw#d~)sP5V@Cimr-wL;|&qrzP<_2P8I$NCvE43Hxecg7MghFB<(0~ly#{+y7%?u|hm_ZLOzCJU;qiR2)sbEm52a$z~YW)v%O>kn(} z<^*LAqn)NGzUI=`rhimxp#og1KVq67lC@!ypoQtRiiCCAeYxek6Pli=-yVMUr zAfY|Rj9l?gzNK)2D$6mD^+WF_%o|v*hF<%UhToKJZd4pn9*hi{#VOs>hkPCEH^ErDAnpQcHe1kR{ZQI&MMxM7su9W@Pn;czKF+z~_n zF;q{6gzbOYmN_X#5E*YY163DBys=mdZg%;r~v9JNi%zC}eVL3yX!p5qcQ0 zJ!cYE8K6f1A@1alY!1_5#ogVM&R1YEMjaR)ua1`h;sGSBT>e`;f57I|kVm$EsOB;= zOWmDLr9F0}Fwa6KR$n_$w=rP0QqiwI)uPX#SU-Y$+ml?&-{--nASx>|BS)vF`OdMH z#jZMeI3BllqH{Y_r1aEZsrd`<@!ia^uWjxw(?)+U$b0ly99-d>Y)&Z-CaA~6erCGD z+#?btPeGr8!->kltn9c=3{*}#;0gdjiVjh0k??ijK)h*^LG*Swn=%|FNTIov#vte( zatPNlJ;dwZ{;t?t$VqdoNVGHM;iy@H3mt@sMJIi~}b!;IN9v$V?bT85@t)8bf z&lHHARn-}Wf-eb5M#1?S4{LuQ*o64iyFh~|DDHtskc+w1oXUX@NoI7C&!D42B`D2j zl?O;`-29}4wd-CscHmbj(0ID+Wf)h(irHl3bF$^Wa$Nmn)HejMl z%{0WwKfKW8ss}!8)|vA2FmUY&Kl({WQTTv)2@S`B7B~eR-#Y9!3=Gmhl^DKCooNqj zf9AFJq+=H`1DeVsin(K1egbAD75A|n6zI6FR{iqJKzm&<{KcMY4y!9Mo$B_trHZ|*(~CI#4qJ9)6xnJVSjX#i}3e_orwp=GPk8P=(KPzUgB?991Yy(7f1u3 zLYCB)lv1w%G)o!a@9Oz%!GKoC02Av!Gf$`2<+8@DZy_JxApqh=`yn7m{$%xCO(H4JujJU@Pu$y)a2KOMkY@>sF%nxOZ`417I zCkK0#Z2@lVr(|(ILxGpH%>KjKa+`I6b&ZHzeGKsgLtcDbTg^GIEJs`tS(|{Xd44mX z8IP`l%+-N8w7Euh#DZWlOwFoox~1Jkih@HX3&9)?R|MUpmzfH8339GFuoxvQ>Y7#j zK8m47NLVf)nTV9gTlCb-phdP7toVMV+=yQoGRi(0*`=e;DA4B4F7ulsfTstAzK;LD*MvR)8Arm%&`tM znK_~uYW3(N;>d~2&gSr5gN>pHzu%dCADZxF@dwlOT{TFK^i5YWtIv(|TPxFXiFm#P z#vM=~pz!y_T(6hVc%leV;gF_Bfynqy9=g{(X({K~ZoHOOJ(5W>!*vVnKw{=d6yG{@ z^zpGdpfTV|*ZxCEki7m}3I*;KiC76M+<@l*aJl1$m;mKZUwXgZ4?FZxu7`oT4K&{$ zNeDuwmg6nG&B!SMRAt7W>H05Kfu5Y@ueCP;VShI0*quK8C@_9zCD`aVql3Oq>^f#D zbr<|p{!JzV#hdp*@>eA%lrEF>qI&sO+zgHpmaOlvCW;q)sYDTgcT}Qgv>+13{_70H z%Ku)TH-hZ9NnNB=Lw8{3x5|P}xp=9{E+Um5F&U;M8n-UCbCHKP2nualVzr3q3XS}2 zDjG~6j5R}pxxMMM6Za0m+SyyY9Bik!KPnCU1cDmqvy17ZT_}3^@6~)Y&x}HHf@+?i(HBPwoT}4d9yLQ3KOw}olR(^`HedE}#Tg|Ww3Thw zsjfZRQ{AJxJR%xpzQ;y@>0v3|J(?j-8~8o%h@O?VqL0~q;rjGu^K=9!bmXZven30spH@V`~_ z0R{z+KQ~1H{T&FJ&OZpFi*!ZCb}cm;&!Cxav-TMo@E+j8)@Y7Y`(ZJJ6(jmPXaU&( z3XH&rA}#_y_7k7N9d;f|6faqm59o)f`Op7lo&7%v%wP~nJ;V%`Fx$o#7GYS-q~DUJ zHkW~bPf0MaGLR5>Xu#!?QQWSNZ2-E?jJ$^Z2Ja4U~|B%Qc)aLzyv z4q?rm-5{AsY!-TSf3M`_qn7@)^&zT*A^~HpySk1BT?a#HMLmwE-7NGyu0iix(}wE89A_uzansaIlAOlT^;M@9C; zHb4`*DKgQ^ND_dWRsD?z*N&VU%)?cXzJEhi2|7H+TLf|7V3fOE0K<&y_o|e`MJy`_|+p5X|2Ce3q=uVnV2@?^{u%W2cM{u`UT-KB`3H|Tn``sD*oK14}r*Le9oc8 zO6(jNU<&D?{w&*u0U@3T>lX^a3&GHCQ9BPjEcU^J2jo8ja^PzJK|#)uoHrQkn)-s0 za93Gpu1@NZ3#=+DrBag*5KQy`qRT$)zUi^{UPa!74U&LRMmJ`8)}$`Fv$CQ+Gi@bb zLxKkiifn=95}1pm$@p)~XdXMKo(yCdTv7crvRvQY9@rDNHaoaE?kQVs_TPBw0v&o+ zxruatwqzaU$S}(m;=BYk*p#&DD%5`h8&QwWyI`Jli z49TL*(3+_7n7T?^uIL-M07k&6MpW$Q#FX5Q0OfH~#fg8V=u_A_Ydvx7UMDJl`ShwC z>p6ZuK3eb@84g)?p{n3apixx_YQOzCp7GZwnzOi>AM`dqRS40<_X^!+w^Ctv66I&JHDi76uAXPpfL->zs@CP8pcSSmPZH-JM z+WFtVXLHkIXPwIa9!l4f|2cwhvuQ9VUYL`ZTtb#I0S+d(0OVxJh8;#Q&V_U8rzI^! zV95To6JF~n3r|5z&%!ucIq>d|e+(^lV;u9Ks>U0HkW(Vi^zA;YTIP6!@wl1FkSOOa zfK$f^<#*N{nz2;3Vmz9HXm|BuL{sYxb^&kg(#LKUaKyp;J2keCZVHyk+kdO?EyIt} z+8Ln`!HE&#T< zuB+jBfVY4;Anv~x33Pr4bx>J!B60L6e=$;kTE6}NIAMU(PEZ~CARUktm1Ky-*wFhd zH>b*Ztu_y9FNNrjUb7~AhOZX*SiwH5+oA|z7G!`WWqBYKs#Qu5JfsmI0TNQ3Q$4pX^G(QA}+bhSdb}FaK?TR%=pL}tx z7b-T5gv_X-PE|fIt2t^1P(r`BJGTHWQHtzQNO5be8sxyx@yqyhEg-HN1`HC zpWi$;7{!_XYBjSvA!oD`=ACxUb$bw~yg@8}s*BHrGXN8OQ(x)6u2v|dpSQ_|`pfd& z=1f|zR)DG^x?^o9BiQ~agX`X_{gyk=IQVO4YbCMU zZ{^DI6~uyhaEw<$g+PvkiKqV5*R4gQpwrK6YS#*_E8<$70%mOrK=Xe^ewuXGT0u;6mD>c2C*V-S_xDbsk8U!vDQ0xI z%ScoU2pCy(m=q;2Jd1=*=961_7AW$z+QocUO>?LoW84Z$N2#H0kqQezr?V=m~spKKJ6G< zKx>%93$Gf=`R)lni6(_v^_dzOQr^*s>828?OLuEfM{9LsATAP!(!C@+Owz_tPYH&T z(m)`9iDgZM3;}z^0UuOT4}a>?S<7-^YY`QfrrhoA2JEV)QKBXN@XHs4-CtM?K2rfn zr=lE?@ZtT-SDSIhoKSRoi;(>)!m#53CsnNktd%nAU=bElKy>O3IdI<78YH7T%gsc@ zK-PnvB(_8qDt7&T8zcKB4`ZV3c5dFm3hlbAS=*vdT=85}OyMqK-+?XgyoLm)NR~YP zN$%J!RNO2o<4Wpd$5w8x^K5N8+|b|WC0f_|!`!Z4mOaf&0_>vgOe(BAd4rCtQc#_D z7ma~>K6#Z~U|#rWJ83n2rWW|D@v|fwJk0uOW1Q>>=W$+FHnZ(UYNaZuVp*^>m%x<_ z`G!`xF&5m%7c8#m(6ZZZ&;P9Z(!QoIz1`K>f($E@Q(8zQ23VpwyL9Lx)yYhWbhmPA zREI$Kx0|58^>NgldzpG$S_%E0{KWTV)}h-}ExX4+Pj549NpPfDmeDz^9DM%26!RY_ z7(g-0$wK!51o6PAloD_a+Isu9S zkB-tX>PKs!20R7`=??`AAQcp$CZ2I1a+Siy6*-ac4NZVZ+WyM{`>U`JqN_KFLV#lp z$%oC(4+~hMiQ2x&Tr$RYn~{do~3pLqx&f@V3+&H ziYAxbC$Z-2af^8Ci9-5Ah;`#!79JdCc-o2WvjIHW zMd@xb-{j4h#pF%jZZSMNf%qw5*4*|vN}_{s+aanhhiNd9)8&;Rb0F|GgdXFWJc$La z7t65ofEX`FB??7qq}1r}_S+OxMq8aA;yR(UYIxUs`a8xNL-eILr(V~cW#28ja}1hQ zU<40Tx9}S5R!EjiBv1iCf{3iI?}zMk+ZQb{y_fA1LmN&$X@O9Fv%1o|l`bP=2mv-N zSP$zi^umzTh6pD1RhFcKVx2Cy(;dB#JhHR?JK?`8^$|i32R+d24E*&tN5=US-NmHX z3&pQU`_VPDA2h!jFR%_wQq%1?2ES9P_HZ|gwWcMTMrIzyaPUoP3dMAR5Hu0dr_L&G z&rXwS2SB%fvw@!L)hkgrgqBz85Jfl#J3UGt}wa zikNQdoy4$JX*N^Mt#Q=6@QaJ0AqB3fCAmr5Jfk-R7Tji={pJde%8JO{T8rvcdvGF=5N_a`4qr zjp<>UQ8bX`4v^=@Mdzu3K}m*Am<{R<8-&!{ZJ(2c?gAyPvUGu1OA#pSfTb!TbIup#c25r@ zb}t#plHZ|3e8`m&A(UBE?gvq6?CL%fs#{sxp+eEnMrS~hDM zEvZ1@hv3v7zA+!zCfdJ`rhj9bR6vj4)V+a(9MhVrY?I$x+`l;Xl6HiDKe9d&-T{uJ=l~#f>w+R2W2dY zCYj1eKcIpcBFQlFkv6+EXWOI9jwL(IAbpkxmH=SDf53)69kV~%XK8)8r?S=d(eu!$ z6fvo+50U}Xp%9tj32SUNlceV9#lSydduTxf77F$GA#w5<6#v-BHaRe~$xhlk=sQ%n zGKLDsj*+NH4TjlwiVD{<<|Vn*BJd~*Aw9^Pt)CeI)4X`ITk-Q4|KU3~s*rv|m#||KvoZ%BCX621aRza5~#f_MF?XX(fGzUjYiSExc`3int zbSCqm-*z}f+%b)udAWYd7g^)tLw=!$nTE>snpMQ9r_xVq1Vj`)y&jMd2~4#XaM40o zue z=UQAXUOIEDK&XYO9~MC)1XPIBM`vhHhcM9Dxf9xaor`3POa@56oIlh4p8zKV=ZiIT ze=8uCm(%yBH?Wf-HP@UUL`{L|`ok_B8IVM^a%5dfU298YI?hxIZzVs|1iwMVnTSO+ zX>Kl@ORqY13bBDqGh?@Xxw5IG9e^UvyxU8kh}QKTZ=Qis(INs`d*uS-*gq95Utwf- zvq*UwW`TrFs4i8uXjsxt2ws=c@7y!G_Jm+ zXGGfVSe}Y=?pW0&I?7cjx_NuCe#la&4|RtkrmyIs-todV1N!yTCehBhCF)5>{%J~E){`?tJoB>^i=a9((SW2(L!ad zAi8okD9$Z~qEu$Cu?$&oG8?L!oQSd`B}Bk#xi2p7se_o9ncIqUH!p%FpR<(5aqJI{ zUwK5pGlFUjfkUsEy)>Os0*_slH(7Y}RQN>9kbD37e@hVm2M+3k`^rG-Yy#WnhyIF{ zl)_N!=LAee*>mWtr|qw_$*~z_0Zf4Hxsy$^*uGu)#9Va=XQJC$^^6<~1+OyD97j}h z>?MRV;Mlq;zmxYhaj3@%6XVvpZ#m-2x#ttxz`fg9tQ4qr8B!M_!693KbcV}X<)ntYfR&LO<$_n#-gm4=Fv|d=Lh`H z)Oc^EjlVH#bA!KJ9o&e9i5Qn$q#E@YZp1|f)D*gnXUuYl%w@?C-U6eX;ch3r7Y#=f!v8T9?KiU!iu&cjTDQk zCIhN1{}nQ;&Q_IJQruu~$>dQJR#&8NSXrWN|^F1-T0qI)a0P%8@&4;a?3m2gjSS2ahOpUg) zp!)00%YvnSE%E)TkH+V6@PZ@2g=b_rZi%9s6=jgiY)}6=l>|5vn_8$(Ef*^%ttjw{ z)*P52C$aoR*d=MEtH3+33>h8vYhCNA5KAfD>6rafwG_=af@vNz^#%5!lJT5cz9^rl zUbpMQC}wDTu8h7lBpsc(qT%mZhK2kUV|c=4eQrY&C`oO^$R|@nfy*ZsIB>9wfsSb(s{B-)ySO;0~@o{=-Zu>8$8_a z_?V=z|F&U)IGXpwgYu{5E55)X`C_+f1=uiukSRZmSpIeEJZt8yAwb=?{1fCzv(712 z#vXk|hKkyfJ+ZcvSwy7^wFzTJcJlYN(nD$qx;v*hRJNPOA_|Z4Xt=!-Up8YC=Yrj@ zh_4sh_m@DJu(5c8L=ce)D9#?AZ`6uNCy_@AUJ8~^#3?o?|r?nKY|A?Yk~m@UD4tA+41~8!`o_iXrp0 znfglV={Ez65#&FpJe@Xg5_0Wc9udl6(Z&QPYM%F=;Ca4WDm~+!Bs{vuD;9T@g%%Py zZE7ukN68^DdPD4`KwC4rAdIX%h_n)G8^;HT9{tWXp2%s|c~_)NX}ZGnvAx@tzMlr$ zo&UjpfGT{6jnyLU6cEr*Nx9ZrBA3~&ZO%w${weyZ*^yv*bZbWNzU;-7;i_w;N7c|q zubu;>T|grwTBBynmo!)F1ljOPmsrUP2rC?7pZ74+No!_vHFAVlDQq zrlc=W?sNMnEn5F?-12IN)h9x|+}TjDRTLKKdO#O|diK8nV*Pdz{-x*Z7l zfZi}0o}0+rMAm`qKz{D-203Y82O81{I{2t0XS{QuL2BX_NNdYpAVmy-1HJpZ60Q)D zk9;p~Qvxx|nPMzb1q)#XQjgEeI@k)7q*QBxEMy9A_^unCOo}6y^?lkS2bt$>7Z}Fl zlAac+Y75tQS>{+XJ`3*r1mH!h;f){|W{azIcGs!wfjwXuorxk|#GW0lWqkCbD?iya zh$EM%3Rz%u1AZ0H5&V-JmG6eRrI~b{QO$Z(*h$rEQ%{hFE_8d}y}oOhgj}f?Yi(Yu zF~-}R%WxfTU`eCO^0ZYES^x8vY|o0L9$BmR2~~L;Mf6@BZe8AwDD9g0SHBP*j{5Is z&1W50XSEjViiIPAl=LoKUv34+8|0xo9Lw;|k%A3WaE)*t535G^6E6!{NMo$l4Ao}Y3Vs(ZdQ@dBu{O}g6a_w|x$c-o zCKDTtWn#ot2@hmi22D0Ye&I;`7V_oV25EUj4tSLX6DwL2Fr4E5by1NZ@gYOPF-qEl z?b(WZ!L9rjCH7W5BA?u?P67ycTx;R|{ z$_MBS;OF@lLaaY94&_l4U|>?`mB+>_#0O+$?wfl)4EO|Khw#UU7%;c=Zrr~{PR)R+ zm7%&s`;7q91AzJb8zc4~|1i`|An@)Ri3QaD1qcNh490JMx4ltiUv6VbN=v1~d<=4x z+Tp5xx)DkJWE3t@HZio+ru05QwUJ!Bu5I6EONQP@iylQw=Jl_QB96ed08h9kxA)i? z#F@ZShljM5RQ_(o^m!tf;Kx{c89Nckg%B$9=$EgQM8N`~Y|B{fqzJP=U8Wg!2e&Ga z4PR+xy$5kH&->QP%uW1s4etIzKOx8r%{PRaY-bYXtA);4w!D0b`-MQOY?E|0noXQa zC#{A9c_=IRi@rbqbm9ozDs_EsjMoI(76rBM6(i>*ObjbfPsD%+)tdBIc|Vs|7fAaE z$}CO{^etV8p&l1Q?}aksA7nYs~rkPn?yC z=^CSU&%^j$j==VF9VjaRS135W`5RdJ1xl8Uc@**#Qj!OR5Y8arSvG|b5 zDJWo^Zz%Z6)^*WfTM>X|k2-=M>y;`nQ&${A{m3y_g+(mwU_{EuRu~ESxiHpaY?9mL zJUq*f2q)&SaJ}33x2o0;)@cy%JPh|=RC9L~d_=7%(%?w~`R+Pgjk>a1EATL&kSb^h z2ZN!&j~)0p8RZ$tD$hP5-~5pWyPYFgyzGwzqJZHmQ`C*mXMwPPSO8%k)CEgQl}v%j zb?x!cj(!`hLwKM&C#Obk`r;wGczu;gyLe?bX1jiGEj0+1GZl`kQ9&N!&xo^V$4(qc zn3rJpj^y>(K0t#pYudU*JYRHr*0K%bnd%Bca>bn`nkv8(SM{D6Q^5=f2%<@?MGwLc zxI03Vi8Wtsc6VYr+iI-JbtJeT;$e&%)?*4d4fI3R1j-RA+h5zhdR^14a{Ix$+-3;lCx*@pVgA z#svV?)u}~L7GlvVmka~*se)=ma%0n72v~g6xPamE%Lgu9-lv^W6e1x3J|OuU9tN0dx^Cp*#RCcW7~xeqCX?8Ud%Z0s6}4``#Gtc5yoJSI#48W=cIiy)@oS{4UT|%87-tUb-TkUD zQC{w8S1ix3tR4Ca1Kr6IHa>Qq?7G#0oP^Ze140}NyaW%|J#PUQHd|m_yO7&_ip|F8 zIqIv~S0qsOkhX#S0{i%`i(L@Y88x9ewg)jiI+`@Ek*r4(_C44r23RfR6rd(YdmP-(;_*@ID2 z@9O#1K|ZCUDTh?%ml!<^j)z^P`JEfv11aj1;9-2$oP;w)n8D`3S2S3)=HLTrtgM$~ zKSXJ1&RD9NJs}=k&aZ{dTboicslxqIgYpBU;a2=up7;(d!T#uFYP1tewRfxnwk!W< zg34Y2BDYe^^^lH_V}3K z0}Dz>1LCSI`9&2Qah)?(SdYYp3fXs#v*QMBbyu`yLhUICOCD^LGu>efJh5QM@UqqVOwk6)8N%fUx*f1l{^Ruf*BoTw zqoHf`;|e8=##Qm79F{UmC__YtmD37 z10Lpa0GW0Cuix*-y@Hv}Dm73^kyU(_+viYuF*mu($QwYY<(r_}d)~?ql5a)emX|O{ z-4YuI#(hHBY|Uq~qjtGKi~-60HECd6pPBZH;V9eP)b6Z`XCLe@;2g8fGk7dh6e847 z0!I^IqTzIG?LRGnWw3xsM6%w^~%egY)ABg#e6_HiR{dXRd9Tki;4Wn^vYcSZ{`GnK0Pt4J4*QFtkI1H;UP!w{a zRtvWWvR;-y7|PT>y{?fSs5S)6#85-Zjh$`$W_nT1-upNS^Dn)hX-l^jJ-%Y?l2qNf6k%sig+m!}k^zE)O1q zP+^@3QI_K9@+?zws`C?E`UA+Sp&ih}e;{9f=Bt1pUIoPmb=o*2FooKT z0uP*cc45VmX{3{Ib2#^@RMhO zX<;1E_ese9#)3ANP3Dy<&n@;~Uf+9WgoQs3;Hd|%|GNFCmw_{?S^a$e!?c%*1UtF= zZQogL_Y0Y0OH{RvKCX#e(r>mIOp*g+2J?D)JNPs!7YAEI)}p z>2rV!~1n@)s^Eo!firPlUMSZFZF@*}g};b}w=STSVG4OPBzM3vMNC`gR@ zjFf@r88`8TjlCIK3SvLWV9Id&z&#eVN~imkv%%EIafTOYwPE96;AZ;!0?$|B%r`EDi%De=Z~NK`qv>E<)+s91t!VHQgcl%#Z0^T8>+c$zalt^%9_o zKjf~zL}WEWl?PeX>SObp7aZ^s^>2gTzXVecrj#-TX!Bu-@ox^-pJWNV!@V$I6Hbl= z!R%DH8`j1f68DsXI^{z)4C+K^gSZF1c?f6G?=dI+s`^GSVE&x0j|ZSJ;r?{fAx%uf zt>`?k@x!2CP^kH|!B#Z4{KU9YX;o6YiMO~4w~g+jHQEL&f&66SMV9F>X%FAlIEU%8 zhEs1ui0cE9MofPoY~8WG51$Lj+1cRqHtK#>r=QnCmUrdC!$Wy-(m0g(~W@GU?376G-L?oAi!sEzUQl7u>hdZn=j$ncT!gjwFOZ4 z+D$j&gJ#}{iPP#%2|DbCipTz)XX2;in)btHy<`uhH91-A_Xd0f%?O%{wsj@TRomWl zV5ZBm%GxH{jpuYW*jE#*^C#c2)p6zp@x5b`xj;o=FRcl!LCo7?p8LzO+oZ`);9^8A z$oa;>T#*1`YPX%SnZ&$1dBPAZ31) zgPna;z6TQAHPcJ+HorkUUxkvIAOSCeJyr5@x=+&2@-Qi32Q~V6h71g1&3fHxPOltz zl(&w}2>JSp!;gQU$3ELgB5XuD?3Lw5HH#g7Jut^YFih;RHJ5vpNT6*Zb zMMI}>R3?!@2^dAjr$R3Bfvwo`zf6&wpHPM)N^kFExA8r;P z7v!R-^C9`Jx;ivZOL`r64G;z3@b_Qp*8Bmk+S5U!{uHe)HEHnM5?pXVQeQcucv`zJ zi&g`G0cM3$>3==?>vbAidB5PO;ac-y17GU zbSaTs?A(wx@BO{c7h3=3g=h4&qvAw>W)jxzux}Cd071YRHp!s6i_c%PuyT3z6SG)r zz{>O-yfrt?04F$}pY?F^@<_DLYPn%s8IP4fD*cX!+EtNNzB?r42uQ?t{BDkhED)gB zfhSR>WKcC}DDs!{JQi5{VcJ$(;=Pb-LAFh&w3?KP5L^rsP|@=fs+@L&>>U+eY*9iGjAK*4DkcV^rKy+5gxkkPk!ZBu{_uC?P!L5NO-L`Ga9 z7-(mgY^Wdum;U^g-vLD}A4lM~!5ufDaB-q!mV(%fmGdV~F%<(Bc zSB7=a6x#NmN+2+eDjw=1TpaFXAAsD{IvT7}=8L@vS~&A|)1*2A1|D#O{~zn$KY$}7 z|8y_9_P}4~I(U{5fwaU5PeL_!`rRacprL@ffLOBd=lCfph7WN8B=c8dys}w7&w(3{v#tEfC_CZ_YEAc*7L~r^N%ig3%ho4}_#y*%2x+{s~T>W~tZs z1@H_s?O*yztk>iU(JNQ9b*MUDgzxWsy9E#$8ER*Ikm%+Y5V)8F^9UGS(>mrZpu7ZD z2&c_i@%M(-PnUr{*h)Z;$15yfbze zpS$1?msZ17MmAYH#gs>FnSiEHz#Fb~!%zqMCBq?y*xvKy@oR=WR$!>5%FV^;n33eA znt@Z5j_M%OOI{z#eAr5kbBqB|=aR)5* z?yS0wHK^5CjIzXY`&^fo{q?xTr7IhG#Zj9Vl4NJd^qFQh|NGOjd5O@78$bg>|A=Fe zRxw<-->3OfY=cdH0~jM5ARH^|9g_g9^$|OPoK1B0WVWSvx2mLVz)#f|wXz2Q7fNH{rqo-vcmi ze?nW3f6ZrA@b{n8yXx)z;49p`;RBlhvIAtN75{5O`+p`%gL46itq&o-(S<0F8RuUP zbd;W4@eMkCAF}cqh_RXc=H`ooHM%I2Ge!dBus~KPre8;Vx;XfoUg2tOKBCNET=zA!W+DWnY+VdUF!&Wtiu2%8%0FKhs`^Eenb~h@NALgsx1a+3WJ34}8 z#E7n(uMnE@2%bHQ9QEW;+?9gBrtESBDzN2)ksnAV-BHMZm-H-)ed90UC5~}@FkyG- z4tqUBKD=$|eYv?CQQ60~=DR&Zr*FBnW6WR4{R-lB5a-q%9?r?e1>%*aD9e(tz?iJ?15D%80P#^)W>e8)X%cRlV@X{l0QJ`RU`A~2e?qs<;bDN>Y6_3w0OBJ_a;NbMnH-6s{U&>I08Cn3=mc$?-1vrt~Ol$g^h2IL)z4QR0$mh>E`j;p`=T9gYBoRogevLq-rRL1P~76M<^ud$pIw?fU#9{j%Gdo%-9Peh#jlom z1{oh>N$>U^-IAoj{+Hr}Ni>k_eNDf6c*Tw_HKEx?W%4WVz3}PjK56jUmG`Y!GzcQ$ z`A<<`YNgd^Rbu3bUGD< zmre!2)hXtTGk5_3dgd|#S_3(^aDgUhACABPH$=$)OM3=vkJN!_ZxMl~v6BjpSz5JJUbwQjLvh) zYE)3(3dOMxz})J;#fpsI!N{*fq&W$*jk{azIJF_cD`J;qbZeAIE^2ea+P0yk@eoef zAUd8;e0!3%>NDen>UHg|v>`6b9ZcJ9w>urms{`3u^8%EA@Gn(rSmcvh^JuV`3Bi!{ zN2TY7GW4fjaH4z0iIk%bl23HD92AqA5&1Dj&2zt;SDKx zuz}rOt`A@+h_dsI20!`^Pto-2se|TFO8MY{D#mLO8aFl-IKJXKu825bMnk)8vCX&! zT6Z&CBDx}RxPz!|5kC2$Cpi~6JLxFBC3x7DUirmss?ZLbEcnsz(FL!G?PJ0<`dgmS z7;$VtAjON-9K~X@EFbQH@vq`oWfqy?((4@RmD8dJB(#)Epg|dhyc~xuX-hLUvMTus z)O?f%3-aem{$E1$uSM0IUsO#ehLSv{yk1=A&_o#nL);)0p9QcLP=RuH?N6DF#mX*` zQq8>}>a94n-l3F=;l};`QjEp_sY&r?St4lu46N|_!kp??Bzb+n2LOjxs}D&*(F}m; z5}3_iF3(fyciq*0YW{kle{~7a)b2+j(?56BAH{oY3xNUvbeVYQo2221A0$ijWHoP^ zS!scC`@>0OaHXssJGIb$4y~&1Xr<3WDTJ}Q!e@JB0`4@SQ$6=XlsBZ?B{E=1R?S!; zC2xp;jxRagyXi6!2($isF+I9?h3F3%CB@=m3^yvFW zxV4%6`6H61Pu62Z2#HLHG%&Bv+(0D)g6snI<9g**=1&J|jMeEYR;-Mw7(Nv2-z8Ym zWDCg$Q6j%3|i>vWKLY_YUfMVWDU36w4QTKe>IP%#S0Ed8fG{jbYr8t?%UC_`1)Bx%Vfd zEI+Zz1P6#uIHL7_RCHz-PzO^$zT}YY;=#s4(l42X8%jIQRR-6b1le4uv9SqJ@@?eTvg_Z;^x!<#^H^+=KatE#pR6GLQgYjFg4p~X z_Q4$`aL$hp?x1K2S7U?podXwN!F3&4?zGAklZRRAcQfPgqq=7g`T_uB0ZM80UkH9_ z%Ovk^wqs6Nw0%wT1T-+@vlvWm&HV~w{Z*5E3|90r50HisfJne~(uTi@{Le-&5D`uS z{>TLg512<^VML`4eQIE&2q9z8^9xJ#rMm3xV2=pjOV4FldfMXXOtS`ilIiN0$_~EA zYKB6`qdO<%BL^>&+Z_;zfFHEI6J&Cz0Uz^Hja3EenIe(>+;V;Qv5X7MNfIh;_sOHc zqh;xa)!!N#tRW>E+VJvKe)(#&A$vXulO`gK2@?z5Uzy6vr%Fn~X)QU1%?Dk%ss1J5 zbU)PdE6Y{ke8qPGiCUj>Wp%yZ#8RFt(o;TRifJrYdPrv8_lc$VIs*lldsuQ6Q9ljH zf^&9OHbFvaavn@WM@C~4RHc`LAiqF80eWwp4k`(R>LQBNd~#gk$YB2M86v{N%2i&T z@VM`PT|+yef0=|JQkO||gwPc2bRwjnYBl4XvtM(_gqp#_gXd5n_N_D}!oN&O zm0lAFtS04fBFUab#KG7_1XmG+cK%%5iCg=v+Tv(q{`D`aad8 zCS!2dp$9NEAiZ<-7mwDNgt1#ZmAF=R(UJaOgLz)a53Ilou!n##fb`DI|8Y13T19bs z`m0q3R0IhweZ>oGPlghG=7Blfy&FJanNa5A-vs{c@727ckEe5Z@rV8HL%S(v>{Cv} z{<;$2>t<@d=s9gJ5tuTj$9dxqI*(!nSJwc-gmIurxQe~w(cxm}x<=4R8a~y{gmf#uNDJSD55t8Qe00LJ6#05y{}M4p#n0kDevpHc*7kkENxa;m1pq%(>XN1-aV3j*e@hskxZc}ublO#=g#9GL1_%6qG@AeNAi+X41 zzSnguO@0-|1Lq{31LZRaJf<4OXm&e$o*c&`_J_V8De4?AVtif*OvLXYe$+F(Vrdw~{I^7h0Yydnvzdb{E1`sqXS60|!edDK_G>v2w_L+;-@emV z8aS!dpE`Q02<#Ahmy^=ebbE5lg_XvWqpCA>m(<4k6Fygwz&{=(!Z&BQ1$(Ubnd=Wh z`bv6B{pbb@Cvl^7X#1WfhyGKgDh&7mfX(PVr<1;5F?;52aO0Q>u&}B^*`NO9YOYFKD}@@-helikRJGW~^7@zg z9#Uf4DqvzF;B5B)qv~pgtB~8!sM>AE6&>akTYhiRK^c$={CKbD{IkOj_+mGkBVX9i zNktzg$LM7*w_kEh0oR;oDwP7pT?=J!|5sFl=os3Kv2>b1bEXr-Ka5pqR7F&2F3Y0o zk)jL%)l5p*$L|^IpG-G5ABjbeCD(~0MDp6fTx>tm^A^?Q7cs5_p?>;8FjsQ(@Sa{#SJTDG{6QAkk5ohc*ALl192blTO%&5Uz*BGM}u=k}ZB{6g09 zq|4&hdh!M3)famGe+fJ)C3<6Oeg-R(|WHKB>8uqNu|Sr603W>i}2Ni}_QCByJh;vksfa(!44{t7L*c(pDz?=R|V&-(8$B3B!AEcSvD z`{vy^OjgiE*52GBwwJJ=3wzS+`pVC1CJ+QD|D?= zoZxs=X&Y~#w8b$Jrw3X4H7KQY3K1CQ!L31D{8Vy1#on}uZK)bP&Nde#Feo@$4U|Mu zwKVQ7vl{Sy`%;z=GY;;H{!K9}Y1hj|^so>;QFw?NNDcgDY~(Qh3)bY#^agJQ*3al> zXOG`V$CYHx0fv4u^D~K>Kq}V-FU4rtwmEWc0(A$ue9**7klMZpzw!%_{fK|j0RFKR zf3>edB>xP8_m>~>L#Hb+IdndOVT=c_?6=DT0(95`^nvqSzcR$`soIDLj;%9xaWI-Y zvXJ7|`OG@WQU(d8CPQ&w*HnR3&kM@i5m5ZHrVB}n>9>m%`{-ZAhcP zCuC(Cae%!}VFAILmV6k9kcc)uJxG*aE-B|l)g{ctv~gQJ!EvN^LWk&R9&JqMH=Y8| za1kUe52Q}eqHl1A=2S%P=d?SDZ@gRwP%B@ay7W#;uT?2a6FqRCdZ{2yazev?EvdBO zhXtH~jo+&KUku$T?C=>#K}2{3KTRNF3x@Xb)+nTHqiY8GMJ^6`)cvp{czW*`*%NdZm-7lhye|!hP z!n*MhfC1G>R6T#pr4R>hw7Ynd=R2JH1Bj^+%IF7#-G2?vAIBTX$S)AGrc48cCIB&I zjoE4Rl}BTl_E1R17$Kt`Z&7^6K4bY3w`b;#mv)ff^ZEUyG`vRL^6Cy5NT$Mff&);= zn^Bz_$=0^*w4h0mYXNOWpQ9X%{n`((HMz^(hesy11P z7@bnh(GuD|c;&uw!#y+{bN%u~e&&8914a>?+6t4^@!@!TgWd7{RW2a8Tpbmo&vq`d51%WM#5=uO+;4fDuG zzl>jQki4ukIC9F;`H>tlH zLBpjP?@R{}L{MjQ-YrlsLWwTeXtC)4`o*YwxwsyFjUw6xGifGVoyUZL2$aJw0gSlQs!|ZI?ucv?UuVawVn-7Jd-ojbs)kU!)T4pLjK__oL(AiKAYFOKgw*y$N_kNxg485DFgnwWVL_rkJ+2`Z@MRu<1PyDP_uAYf@eI+w?{; zq-ZRjFemAyek?FrTyT)!hDnicVpa|Aok?>3YfYqapkqIy)MU}Do0k?t?dNF7AC%Ot z*HD{4b+oXX1ZaKGcDD-1M7$$x!96`bDaTEJ^~tgJ4&T?~tn6FX^}=jcd}~JDZ-vQG zX_($^t!-bg?p=zZ`(bjO00}LIhES<@R(*=Hj^*(%eMGtCDg}3KwN@1}wz`T=i5byZ z4Po^yyd!EMkR*#A*k_YjhhwWro|px#*Kn2bo9j{RZ;EiB8P8H2?>SkkEmVf>z;mJg zkg-GMHFj9B=~slau9=5sd5zs-LF(32=tEZ~bdZFV2cR4>w5-ZsCO@^Pu^d?hS#?07 z5w4@_J@=wi1gXn*bInD>RZFMcg$a4av4VN`yajeJP;*P}kXc=TezEYRz6 z*4UDy`&%CTO8a-UQeKv#LUll1RslGtB}od>PLoqOwD5c11RK(L+eg(FzKbyH!E#kS$@bLsG7`r=xBFwXbA zi=}`=1g^r+rc%0Oex|41H3q#z&USd4e5FO~-Q5`DZOA1r71e`JAjtT&zAjp-I;{gJ zeOovO=It(-SVW8qo+Mc{7$yixXhU1@mVkmMbv8RR6k7cc)Tz1%4)-;KC1|R8_lIYK zVI~*g@(?B`*PGf5WQ6PSisc#E%VBNlaTUNwMp~yRLH9PZ5B}i47?KgRRK7xec&3+7 z)cPTCqdWEmSYx9y_+VJiP(ZV9 zKQ&UDznQ)%+6;vbbhn$fkuMSv7EZaznUM{{QKP+}o z-#fX;jCOwKN`!ivUzstV;7<6}74Oh&=2$psRp+~pCnUSirS)F2icpHQ4SU+8I!=)a z5zb@XgcO@5@0o%v6d{FJ>Pz~}U+KubT{Rn1jRZu5W3m~!XB{Dnrih|Q6kPrqmO{~g zdFJ?4!sbBdNqp%*mtu=XBfeM?xSfFQ=3?yxh{i_(-iX3*6})StVXR$5$;m20+Vr-A zjzgj!2K<&t{rZ5m^FVtdhJBD@Ef#C_bPGU*giwyv-}F5&^(TfX%4|Z=VuF4_3|;~P z4RWjKx&G4JCKmIEw-X2c*rp9`HOfD=;Bun=33kEsxeP&%TWqaAiBtjr0PYB7#{U<9f8FT# z;t-uKPy!@(EkZ*x`wB(%<+~J1YFW)tQ@Dme3aSn4H0+!YSvJxF`8dTWNAZ!V%VsB9 zcKAT-zA8E!ca;XfSp@lT27Fwdz7?*}lm|AIeD6~xCZaULaEh(+&85AgsLV2}Kmrrc zzkI-xFRm47FJIv-=xe2%ls4ftjpJb}-*3+?6r={-7f$#vCHkGizs_Y#wqL0K4sl>vvUAHM-DckErGtXl#J zzEVz4)Zh~jUHnol^sP#p%rt9xJq>{=P(2Zm;jrZ7RNkzZ)gXz*F~r6eB-B@VlvcLp zbiI~n4*Ui+vy#a3eMuE1{1MWT{8BhccNVfQz$6S5_Gb?U2A_Xhn#s`PF=D$@djPb> zWL%Nn4&SR8U|Hg=iloMs;Z@^>=9hm(wa#CM0b`O5Wb(;^Ke9|Gi_Q}qEAm7hIcII2 zMZs+AcE;xiw-OMWBPrcZ`(1n)8Y9??evpvCZsbPzyiy;;Fj2FIFF{4K2A-Klp+Ob= zlWiV*;)WEc`Oe>*loed9^+uFb)nCyjmz_ZO7T8xqNy(v)9cd849Y+}q?x#Hf5;38i zAAj>U3+Op_&9b++9U$qSW=S87_`(}4TvIggnr2Jmi3#=AS4R2{o;~fM@g?IEbG--C zbWj^+ToYO4_W(D*M1YNR;xF2)1BD@w(%Jhu{iM!-*p>PH7IiYAIynJD04>6P{)1c4 z@*{>*N@g^WO@R*{o5=@pn?jj$|3w_A8L}ah7`Q($+mSwRl5o!$n7+%_#6b#U0+#|r z4kXuBUh*X-cXV7wtq^c|@=h;YV9o1lw+l1%(%$+$0ayEnL;lS~Wpjr^;Xzf| zocnyKoe4dSaA2#47A`j;y^f8UFP^&-mYAS~`}6N_3^0@WWQteBL@<1cRBHJBp;tXp zy%92*Ww&{ARZ?y!4CaQu2Es$olbG!OOUvcPYvP4U7KZe(z*IGjyn)1YNQIR&V$Sjz@R+-Z$2of z$VazVv`#n%>+kHIRdD`y6EMN&00abua<2Xdx2Zx-_FbG#S;jmNf?6WEL(9P+`1}G?ct#Y;!2B=Xkb|OcfYeQf-n#-g6V-nk zBc=Zub47jntkJUPHikTL>4~+;gLe5NBv;vPMW%Quhq8v2n{#Lu!@zeH zIlHMgR9L26npr4w*lo34Btvd{-pIFOwr8on2^@*w6#Qw4`ghV4{6>_< zJQsTwD82L?$n|tDP@p&JP9@?&jvu2;djQy-Ea-?z%+hUgY>P~DC#b{=?%!FQ_ScV#+K|I{Aq5yS) z-8*dRHS;6A1nv|EihuOTlhXvM6Y5Keh1Id&73I$D_Jn#2`3b?|;urGKB0{sC=LEL^ zHWLh4Eha)9b(GUj?)@XxAlF+_Kr6flXRrmTAJGtSErtCLp6C!bzxhg(;%!}|nzdc) zcu6CsB~cHIfI_rp!>_evSZN$M?DrN_2nytR^X~!0ran%esvlJ1%7Y?*N|s|0?@jYP zY?$<3-t92o_5U+K{Vyg5(l|+K9YFj$oAkoCfqCWJW2wjq0r785C`0GJc>HisY8TKO zqfrl?YlBTyn5<+e0-yaH#Gasq*Og#NQeP@sKlJ4o9Ka?M-~f(awYP+93W%stzt{E- zu625QW0l2yWMy%uX}a+PgS_6xpFAp&@fQ*pv{P<2w3c}u^nwUOvPQkp#g+BZ-3Hda z&w(r6S05OpyS)tv{K2{vv3Px?uVt^*yr1L^-dXFKPLOSZh3`r1QJ)H$NNdOCodk@` z{Y}HB3A^U>L^Ipz%z1XLeoPj`8SJ#Fl$sUB`N zOJI6_s!N(=?$Z6K&<)IMjidzk7QSX?-LW@A?6pxuO3JSGKzo!J-?l4E0ZiLYiFMG3 zt`RE`(ActLX=~8YNn5%%^b%~+^cm;67Gk6BLAU+tnx7uD>wAN#`<+ntsum*clm40D zNl}v4+DhM~JpTfS?*@XSgxw&{pe}9tBzU0p!}9WD(7t_qH7oHt8}9|RKhvGu7&=pd z@v!{SiKV4-a+XMg4nwiZ1JeZpS1gKq%12Pg<374cf437W;0A3K!zk}a&6yy}b zDY2E98p<&8^!m@5>0em5{fQiGJSu1QvntR$l*S*&fDfwD|B7{e!Aw)Ww-Qa0Wgx4w zL_@@~q}6MHO%qUiBs=r(NOz1_3^Bc5G6rFI%~lQIY5GF~`_FtWz#o!XRlbU%N`U|c zgcR(jDG)F-MiXVIRl>YCB;AmJ|H8=Dbr#nZM@;#ovM7KiY~Art`kd9KaGfrxTWR~H zKybubDtA`5^Poj;_D&4NB*cHtcOTnKJ7%BDu1F&P&}+|=xnC)P@pOTq(RhGrbmn03mT`Y5oRDgI1&e0Q#JH4*`9 z%ndBQ4(;z>&_KxfEhVorU7S6mYepw)%!SV-99NBYE8}{JMTPM*K+;j@o;&Nn66m|w8b3$=r-na^!=zcC$a=7?-KnY5zI%SH$lORL2 z`EDCES$Yr9X`BG4Z;k(LRRF)F%^$Gdfcj{ie=`(CVu=+hO6GPg=ORrAe~ed979+%n z9460W=yiXB2)tEhHd-k(f0s4f; z4R#n597m$%HH_p}BoL6vWGz<^CP(g1k#sSw$*rXgyzj*RmQMiNuV)-LTb&+!S0{0~ zy04+9Bss$z3t7K&j^t%@Du)Pc7*=6pPP}3d;0^jYRPIo6=kpxb&f;KfdCfkC0kJ}Ms`m)B! z-G`nR=#kv36C9waeWYdo$Zmgaj`n$`Qn@|4 z&cKgF5~~ZFF>FsB0Q6@5zq%XX>QfjUlp-*a-=+CxOk}iL669thpi(xA^*ng=vNK8- zz6+q}i7t%+4;3}%m#kFv2IXwd%V9-Ix%)32aG8;p2JZN<3_A@5aksD7kSqk0K@y$h9*yeD9dKnrpw=dA=9W zK&;Xo#hl~Le%Usn22!^7l3YSFz#Z9SZPu%#J>g`sOhu0%{)JKKkna{W1OCzPb)qTf z2RW69P7wDo`23gQtmpWKiz;a@!uvMdCg(7P7UGRM>e*%gX-xc)<7~TecJWO~Aujcf zWI!|CU`NIm0#hl-0&*1e0A*g9lK_hrgb@u3=eS>k)6wU_IL>8Z{kC62b?JM*I`Yqw zevPsTZfa85zki?A5Twj-5>3V)4V!v?{BICY6FoX3lANH=g^1m0b@k#pVKS`J~tEo?TVlt}3J4nzW|{ zVC4Y@xqsv~zyXvMwAzPk_GzU=GNct58z>5vNri{asO$-`UKo9r)MngdzPK^ZCJN74@=y6g`aNA!=-_BUHRnDcu)K>==j)+PQ( z9{u;8L;$$P|NrzhSWX~}C4BBZt4RyLBA>f=)ot2u>4GN`y;s@@xQ+CmK^ilB_!Zj2 zYqXT@5`g-Ah@0+rMEdvbQ@*>PGfS$NOKNxPBzvFX@xJA_OSaKbx9#szTS=Qojpt+Z z4NMpAfV)&@3b^X%$jiL(lE%?D<1r3dexcsMzWhnz!ZMtU}W(eh#;um=#8rdR6yj53C|r@)3o; z+8KweQ|T&%xurOP88|Zn*}JvEg9)H}L^MQ0p;HmDRUsp8SB95g=ntDj2m&SnXc~VM zGyq}CH*MUqd^H1B`4EoEn#4$ee&qn8<%d_~kA(I&Tyl}OKe{ytoo$M#^MHg7&bs5p zV+3a=40}JR4n=)OH~|HRtsPjCC4a5njqZfa5FXxP!k&pAIysBm!|aQwZ5? zx> z1opRCdOb<6xO>;2@%p#^*2CT&XYn)k{`|`%pR__}hRpfmQFS3i-?^WDV~qn>p*CXJ z@Dr}exIp6&bQMF`8vUSg5p&@qvNvi>=(xO4C0~MCAmC6g=UvRy*yq8~BVmx&)?f`~ z87bFd=vd^@b$nkj?7(M6a*=>R?vI@&w0(}L^zk-OQM&3j*Y;o-bfnD{M$QT&0b6D7 z9wt!%+|wr-mtbI%LGL%VdER1P#ENsk4IUuj{}beh>(WP>!VcSF(9(`m5`31l&v#l| z17SJY&Tr@a57HA@?aeWUtD7jgfijpNQHAaKRY1e1Fn;oU91BSPR^u3^yJ4=MwEaU} zy5sC~Ly+W;>SNPsN$9((JwML7fXan`6uHYp^-H&}?8dr4-@WBt0I!U|-T$k`eVj&B zKpkQ8nrzqNv^DQ!=}1yF48U8PZhkg3;hZLZF3ic1>Chp;=WuD$A%6D=6^HIWODY7# zunOMSv!nCP@PZy9{7Ourku45M`pN zgaKyo(^L|0^P{2BFX&Z3h!c|D7imY)iaRE3oL{|>G5WH!iYa0MX>(65N&AhA8L0g2 z*`rX;hQW{?Q%CTk$2MuaDoY4PMICJW%D(9Ex^_tw{ zZmH+B-LFFKqMP{qr|13*!3I&Tx!c2O-A#PWCv5xl6FxJ1xTShO74nS%ZMElSd|fv+ zu{zlJ(<9n&269Qo-rO7`4tHxLwx;V#u5kDKV^*qlXm;ixc%lyFIiof|)$a?VnzCzE zLT^!mu1=juqfAxV0hSk#O!!-EgXoUW_{pFlKSz9byj=$Y(!u+yUpckuJw|j0hM1-s zVv5z5gyU-V^<}*FYK#^Q}cJ1M`qvbuTtrNsQ{%}{)lepJ_ZsN$>;ERGtfU$ z5f}{t&;Czs`;*B^zx9M68=LMIgrbq^q*$%MVLk=$H1)q~+n=my(-j5g6p##!pX~E8 z^|mIeO3dOB&gO!~$;IFVk8;ru^t@^|NX`)WF84}jm`)d6lY(R9x=f>}B$%r!YO?%K zqaP9pd&F-hzKfMYUYAYDQ{Fa6Z^OD>&pt=LB5WWCQ+Y_u<9%nME`EeBPuy}8 zvTK$Xi>+FBKRpYuGs*Y)d=vXRxH0W1Fs)Ze#AD~PsBO$H_b`);6n_w2HG80v(8xr^ z**gmGpYJ@aXE!`mjT-K|;Aq8=mr6<}Bmyx$=K+nqxTw`6@cJsAS+?p}FO=pNK^5`K z1l*MyHBtv{L=q#%=;};MB4H}+n)RRYG)ds1I zkAbXE4M}(^i&C31dNMLGF3?27=q&j`wcUf(qWX!EvJUQe$|aA$YE?mBa)LTM+#M`X zRsIH5|IMl@yg2m9#;z3qZORK2QnDS%d+wJImkR%abn&c`V+jv-A>3YE=#W1yRQk$v zhs~6Y&Q(@sr5CI(>fruiln!4Y>lEEvYkCvH z#ha6n?f7Qxch2(}s>v*z?+~hX3M?&vY7j2Cr%IIH1a)V&?^fhKzfP?#P`y(;2>Z{; zv|us{suT8EU)>8^O=t30cEHm{(29NP*d?4LylUrhHAcAwaW|jaWLu3x?fK4FmEb#Q zU45Vc&b<@eH2-;}tR8-4>9lRQ?xgtQ=Fqdpz$hA}uuwy&di3&I#%22ZE_Q1uD8wmD zQl)yb?9PH9LVGWt-E0K&!`}X4!^vH@6DlUu1CHg-b5d-41mP4cd_RA+ZjA$k>BYfA zi~c2f`R@3NuM^})320q~nW?6Pay*6>`OOw0bQ4`Yjp+R163u5!Pj5}9T8A5KbG_(#% z><)?_FH}p-`eSYme(ZeI|0rgEf#rkuGKO;hdRrvOgfTy`avCigk14lI2RwbiY}Er8 zP4*x185+4a*T9|aSAX~hTp%*f&d%+FOWkhOmLWj^Z?*r5X@8gg?uYgj&o{YKiDVZA zI?P+=C-Mh)|(I6a2+e&K#4lWi9q_os)YD$5DdAfh!Gi20>W~Jy$T{73&u+2 zYdEW#AGr52y}-(=y_hJ2a{q*9dw1XP!;N0)4M@4TWjbN@ajSjafgBMWc{HO_%84}SBX{Gf@)gmXV z_Q1gGO!uJK5<#{vn~ZGP zoWz{u699vRa6q!*cG*s}nigJ%3n>3?t)z)V7E5O+WGd8O;(ygmEb-=!g|{8 zO)Bw-_iUBfv!+wJO@PG(d1fc6r(~YU%7L!Tw*aE?b9z98$5yUhx+^VUc>x!O|3fXq zCSN$dw#dsX&I{5p`I>`@1b)Sqp>N9&1k-|febH42?=UPOd4Y>S1o$MtEB3EqM#?8g zOZYosDR#l?jEoTQ6zx9*GXOR`k~%P|?Ep&R{#D2R#}1AGGZK3G?3K=Swk*##_D&|8 zhx?FizniZW^|`nE9o~{0hKNX zyV+JasGXu88Y8>Je7e{W$o{Zqdpphf-8Iv(8#8?J_93C!avOYb6c>=jZjRSJrIsWQ z)UMTE@>r;(dp@@%Ls}hnffTDc9hg169hTVn6y4JvL-4o zOwMS+3ljM|`e@jsS41NWOtY2fIjb9}YaWut7a8N6F)Bt1nqRxYknq1C!o!*;=fJh= zb?7}sVQVh1_E?9ogK&b^(tFqi&WLg}VNg1otkI)5>82)jM9RqmyEYxzh3WQ7l3HvK1 zPCq0T(8)(+x)RC+|67m$8xA$lLm|1Y7=MsTB|FJxwg`G#;5Pb~tH#;PwFJctQ9&t3 zuBJ}CNM2PCqS1WY%ed4MHJ4Ep@Y{2Wgy@_pS@$ME5zUTj_HBVUpTG@G9L({V+9=hu z>*rJSQSHfw_+MeN)1$&E>P>pSMDk7%Em>_-z700!Ba57uRX_x95mLNty{5*8Kjs1m zs1~j272UsaqY)>1VeBd`o=Eh|1jZ^0<)Xuu+*Xe%%P{3JkyGRgnb)(ttfq)?P` zyV#6+sCSsDTHVTAzsM8EM0{f?!rTMmU^@w!`zpTYo(t)4LxAc7MZOb6*WEXqPKr4sCUK> zeJgf3>B{r`QswrRp#Nmb+ML?_tEMl@ffirf)xi)*;a>Yo9-%*1P-hq_G-y}bapQ$- zGw549jZ9qEaon!5_(-k8!maCPuX8W-&;2*(2T>KmR0_!5?S3Yau~;}*C|hx9amzlG z0?-;N3SIB$PF&0u^)IU6V1dvzH$KR}{SVN~tDxRW&YkX{L^bJCMv}X9B3g&at4n!` z%yd27L9t?s7JB*4dclsWzjt(E4<$_;f!3>s+t@imp!lqCKaUuRHVN;(oUSRz42Wr)8fDCUVqrWE$F3QzmlfnZfG)G~>mGc4d*^6n@z34{_hDL) zZyH%}U|31lkte!Bsz=>JgJeTzB5KbYH<)VbcdvPZqY~z3BuWd@1oY z{ytkh$LQ6~so)1aNr9k;M$-eV1*H*yt*dZ^?Y&Vr=d0xI%_%B;4pv75;yt?0B0^fM z&z>B<+t>(w^F+f_@1hLf+>u0cT$rq zgRh}|I4=mPcbBs7!};T@q|&^I9|wJ0U_9lCb%z;am~@-U)Mta)uk^_G_%~k$V89T( zQTn;W))-VoLO8sQ)wSA8k(4>#?U`f-)zKSWr8@dnQ1C>HfpAXNX1)lmSv*Q^k#Le= zuWNP-B`|D~Tkf4L)g6f`E)g&?f%1B14lhm$HA-v_;Z-R~zVFK04&NS8gd~LtwHTCZ z564h7EL8NEpNl{Hda$AWP{Qq|77T@dEGvgIls4uEkwySXx_kMRMbh@ez^nh ze;fn4BRws$BJcvL>M51_sB-_|qAB~Q5I7U1!O7UyEJu?C?s;VD3W0ZI@kXF6YqBH| zN~boMZ%P^@h#GzCwuWx&XLit|7of>fx7cNXIRFmmk-sv_=YggoV48!uq(h1uuz&|> zz&T@od1cIV}5nlO5LTWm)_#E@MxzM1;bIoYE$f$TeYM*0< zezU36PDzS);aYTCYmlwPgdci3?ciQWwq|5GQB&@3Pd%tU{}uWR*2ypawWy)yK&F+S zUQ3^$^~IO28ZLssI~JFi%X=d`ro;%zDWr_IOXRR!)*0&g*U$RuRu^bIE@_8VASU}@ z=j`~7WGlS7-)US`n*I$Ddq@h)gwu;BFmE@o3 zXH7Kv0^J00ME#b_SH)fGfIMBg#-Kh~D1ul=vLtBRd=s_IgM)-W!sdydz}?XaQ5s#y zxI%Nb>VHGGWr0fN_(-&I3+0^sU2s5}q&$VZCT7ZVFW8+IRvs&%4!RedVixO-vy)W* z2w}iK__LJo5D=Y;zmeVAtKr8x3P9$8|Km3ZjO>>Dp5_8n`OTd*#fuN{3{Y1U@h>m{ zVxb*k1EwhXKp0!`HU{+Hzx8?{B1uQVFc-hR3Z+kMZI$4$GPjK-7N=+7Oll%Q+JU-R~;)1mQtN51ZVyp ziKoS0yD~K?j77pTN-={k9!6TPx`YA_KOvNXyt`>HW(Tp(u0)1-6{e8#4DYc| zDhR}PA*I`AjD+fa;@YmD(c#eXx6|y`Wx^Mb~5MZG{ z3uQC^N%}%af7HP-4Gu7R>H)e8K^lRS-L!3mq4Jld(b3}{$B)L86SdJdimC0BN1xFx zsc>~S0OH$}+kAb!nPWK~3HlU0MP-Vu;m>afm=;h1T3l9Ho9CZn8q|!;hFSComO$FJA?XaU048 zg;ccTQY&bk^x!QY-?|_xa3hJ+%1oBsXd!Y6v~hY4WIPW(<){U$EhLJ|v-rgolPm?L zP3+Hf`@5+f5altiPpW|o!*>CxCPo$S=Wc+M3%*~=_O#dscYF>-_$ck%){E7*;4->q zw28t6h{p=#l;bd%FAd?GE*GM4cY4o_rOmkSNa3f9Zz#o=n`IMw-lPa1W9}|rGD4$U z3pVGo8OuZy9KwP4s`Du+>a8v+{5}=%siD>-h3>+MGx%e6Kq$M8V%*&hc}&93$A0ds zwSZ~M^xrsneoO5}C3ijA&gL1utak+Z96iwGxf97FXQ=Ezee?ZE%)grS88Z0UsJuYnNg`t~Cj3|mQ)Vbkr0Y-Hl3yr zJ;n5Zw^<|gJ{{C?oSP83dxJ+^8XbBx^C%RR1Lg#nJd^*1#X!QtoFG7Pdh#pbZ0yD$ z=pDk(nq0sT08gp^AafZ=ptKLUF!`Ozu>ZaUfJ>85M%I7f@)3qoP$PY#O>zvtC<=1e6Xe;l%&tVhSw!}yi@fYN4obfa6d(pz4 zPqHFn{&K}X0iQg%i>XVw2$&L}2QGkouzp*Ber^lE0QI_TMd7{v_3pCV4Y9OQ8lX!) z6S((jlCbhBrBKglb%-Od5vM9>3`es=EKPZ#WRCJ-<@LA> zm%0bdA>rq*4_$v<&QZ&kz;$OL>JqQcw0D&#zjgR5d^?dUxYe{wqBzhnSG0m<_taIH5#lJz61NPcMKm$jyDE) z{eXV@aduOHJ8eRIfW$3iGylyn8wz3-ChpFRSgzUgoNi|kncRo+14E2mUR76yW8E` zHK@B{Z_M!>im`W0IRxQ^8KrK(4lA;+eVGP<_BYG=Em!E8PgZ(#jA4O*5k`qKdN__A zvA=(u&J+){wA|?q7I9_kP@0-lhMaY5Y%(`MAD_PBD3^Rr1*LlMav9_CO*GhBO)Xzk z5^SCcdW`cr7$#jJK<2PzIn^CuQ)A7+Rr4uYTC&g#3tUFF%g&Csz=+PfWLtR`+EfuC zUL1t!Cn+zRozGCrNxb~s`rAxdcHTh%s+^SLed49f01>zE>IQSBFR^6=YOih~!=N=I z-*Q@~eAQ=J^y>%6Q#&h;uv}DUC?O-l*(m&CT4+AV>B|9fmWZ-Ck_=R1CI-`F?MB)7 z$yS9z82w3h-SSLC75EN0yt@I$mKc~Z9aXT3z=bbJp>O(XWai}(XMBEC$t#S}=bf1L{v{joWoVTGl(lGV{cLin!;Qbf8!4+c& z%G!af(CJpdijTbcV}XoD8!%Y?k&g)e@Q16aP)>m+}EaX(fI z1Q7Vz0{$NWfdx4(euc~f>6ynmJgQ#4C{n(x#R`Wedt-J;fIhbvIO zNQ&7pcWhR32s+JVi?Slla~3o>~;L8)YM5Jgx^QX8D*%|))U== zHU!Te16>QY1iC%5#x?BpJNnKQm}300gCTrc#M7TrdQ0I?EqsoGz5KpGRUwjQE^Ad< z)cRavM+R(1NMzPwkU!BUkuV(ksU*yF9o3!~ZUGsBl3qnViCeTZlrps*SeQy7YPPC= zQI#TdVuMsvKL48y=#qFa3!~wpjN~gOw5DX#n7v^jW;h3Cl%W&y2pWUD2fuS&sEdiz zC@XwK`ds@0yD28glSD;7Lp1upMC8(B^gqE?!e4X+bBi3Ae1? ztt*Kiq)4AO{tzg#Zru+%xk{9^8Zgz9KgevQtpH{!ena%S3_$xtxH+Kc31B@G&GgMx zE>S!uWw~H)L+#xYkEOItqWnq}>(D(?e%5?rV~`n5EWHasWJaNr9X%|B7>!s+($J z-ySJMdIs@TQf;09xH!{<24X}a12;XfZ}<4}bQ!r5uQwD^jsODco4EDKv68{5{zP^# zqYgsgZa}e8;J>&H0R$3r0W<6!PQ*X!=wmnF{U;?(fHQ%)c0zwgyOdo^^VN52oajhH zeo}tDciju`3Vo_RAZ$Yd8RGwe4fwY8k_`eN-Ea%flt$ROV~Wp*{YB4q$p;grBx|~k zjblx}RF6soRXOxVb$dXtq$6uuw5@i`X;a9UvN%JG4)uj8mnOjH%&0z~m2%dPr8<;V zRVp8?LZHbd2$dnCuBXUs+{t!JkutV3_0+B<((V$ZQR*S}4!r@+b_;WmbS9yz4t!J) zdTnfbMa^m!aN{tQheuhXH|fPsFKL;K@SMx#icFyu{J_H5sF7TFL_u!3ymKbClEvYx z`g?5mj`Ee&;Xng>O{bRStvl6&II*1DR z`jPTvqnx48!`q0!fbgd}8&9Dk4jXuM@9ve$mZv`Z(&`A+u!V$yirr?FpV*#<6}zEecmBQ) z&8j)90I)nO=1hhBp$q7s zYqTj>p}R!w#8aYm-grGW;TLS`Py&SO_>V&M@5FR)lbwQ061ez=FKGZ8jOx9FIsEl| zE5R9=A-o4HvB^^s7xe*5#@r+t{Oc_^TnVYqBrFn7%}+8-p+hs!w8OH5#f8Tm_R<&B zBcJT&0a_xU_;b2$@Ay9<61Ivl)-k7U$mJE+4+}A`wGUQ#<#Y!`gD_3C>&X0mbkqgE z&6R}xD6#vA(Y5z<)HbY=_b$;D;6Rzc=r?F(`{F+q=*m;*zozZB6eRk*XrFhxFD*FJ z*dro-Ejm(qRo?BK@TflBPGcp-OHsOIGJHc^W#H$4ukByD3dWQrt$oo%wjM)?nZl$T zPHi6^;H%0`vdy6FCw|q5fS+r^x)Ue*2`x!ZCsoc`NmJsf^ z2B9&%Dq(eG4ug4$hSb^VC&5BKB)<5R<{_>wUfsI=q)>;i&&uX8&Q~L`ghAvS1Xezwf4pJQxBPVVV1Y$Y-*qmMn z*{mNVo&23H*;&)%ra-S=S=_G*y56raPvX(V(wYw;WCHkO<@Ue65=3h7F zxgktU;XjiYD7m(QdjbR4U(yxOyIF-M#M{{lYTKA4V`niu4J$1cy~MoD1laAy~nAWnuwinylc7ShJg7+j3* zd3)Hn48BHM>$jY6Xds=IW_j&0e1S}HDLN4*iHoZJ9`r!h`S(*(pde_U%gHcGwD?hn zKTUJ-$;?v6SIlWe7~|+3utiVL_GNjY*2Y`WQ{tXh-~aKG_x)}oTuJ#18amSZjqJI? z|%25HH&Ke0KL8aW*4<(dSnFaceB;+*1-(Qi; zL<_i6`a7;TG37|5a~!=m4+koEu@1NJkS9TCIz_`c>wWZl=gW~vkL`$?=;j&(i~R!a z9vAs#C~3`J@ggiplr%oSIEG3`SfXOTwqmdmJ6^KS(qI`%=xXFY_Zn@jPvoV4I1CdG zQjr0V9GE$G`G29707{Y*Z@u%2g?a}7K4~I)7E*aDG#;c(w^EiS8NKqOjd9h`2w65m z?8U9rx^&_hxC_Pqqk#RD=#-|9KLL7PSk==RlE-FLh47;?ch{%4bWebqZMXTbc zj7HzUY{}3kk9bh=0)6l_KVy%S3Q*54J*dlbTA%JG75vVJ;(IIuZ#*FH$hUhLw3mLsX6N%Hu_%=t?A9s$EFQc>oC) zkI5&s$7Cp5$RBU|DpVHL;QfpmZ=)6Mv)00@AR@TZ_;7z^%0NskOfd^GLy#TFiYZu$ zFPm+L5<98Nv*Jyy4)R2MU9Tt+AAXo8IN82k2O=Kb+FIC)u@OGngBCMA))?cLDW-z^ zmO3~Lzt5)m>@{RX$s)BY2IV&Og%b+@a&3|uLm}yMS|5%+%XT&}qze6hPu3k~0+Ap) z!@?e=p~`)Bb4`f{o4$_|Iw%-BX3W*OE6kTuqPfk%QZLX7Gpe zbhPx3(n+P4z>fjZ6rS>VMu(s~)HDd{YXR#?#tNg4`sNL>kJqf;snKV2s3ijEsX>YT z&2XmtoucXXJhiL=32Kv{%4qJ=82$$k2mSl*PGtkW!OA?SB>F%y`2JTz`{NrU*kx0N z%geQv;$9j1_DD{>nSAi&nE=(29#j`E0sYgtxI;!r=yL9 zrp1Cf4IOnYPME4?@7F0;p{fb$fo&o#s80OHWz^bNe z;0l+Gz-J;Fx-CWbK2%xqckR2;p=dXA&jx;sjJa7D?>GK5Nro9G&n!^u9gb}F#lPf9 zD@T-aT=%;{Yt|M-7jxuL?7?}WP6>jkOMExxd6l>g(nfjc#GO0>6_l*foym`&{7Ss0 za7t6_8Q(gRI)6H2teG%$uuNzIA*I#jSO#r5jpVUW7()ZmQBA|P=i6%tBC!mxmYvHV z0lOFkdv}YvUOYBE?(1_+?v6 zj4I=@@FFPvQ-J%CnwUiSZE#lm#xF4EB=&At?pRY6Dz;`Kn3&8ka%_T+rFsvP4H~C? z0n=vy<6eRhYK-^?7Jt)jrEaGyH;CM-Ar?Kpq5duPXI3kIb%`<@E%hf+0%}%5-)5t? zAO6MNRjGdBCSk-6@u6573%x#v3~E+;X5V@D07e{l1_2=KR%7G>9RBb%x1%4T=`1C< znll?;7TJNv%k#gI8qk`23*Sb7j75=ZS_2IJHL!j)f#-YYiHh$_!+7&zj|_#@J&G?1 z4v?EEru$yVVWXSB;rUxX`%@g@Qv>j_(Yr`e;1PQ10S*Giwf|MlfMJWTwyc8xcY{(n z%Eca1Hnkpb3Q#{w`{x}^?c<%DAC$Vh)EZbOLB(^8&lV$LPil(#0N3r;&AD^X-!W3h zMVW5o#4dX~aHxo}0EtR6fDYwkoJlyEh`loj;D(Fd)SpQ~-oL^WkWZIU8rfpqFZprA zI}%HTvS+{Z5t@Ip=ZFP5s7t;@{=oK>voS!zpNp=CS^Zqh zz^+Zn%AbGDbeGt$?SDw6oH!*o@Bh9Yp1OSif#i@0{OTdZ7=`)+z~0PF*y#d8>W=7TvOce)sup5E41B%TQvR_DHH|gh{XE^MG5=Y3qSvZq)#Db@DPT zzs?A?bL+bb2|#lZryY&yXE#@ga6lf_^~y(x6*)Ht4}2>@AAwLdQN!K~heb3EE{BxO zbL~E@BuN={zq0qZxkyQ56)Luj;Ri(1L2l!Uj>X~do1 zlMy(Hqd!DXw0SNnSj*0jidt!}!~B(-O9{%(m==XpP_v}F_8+tvMRa)IcPQmp^ULB8 zdkc&Fuqt^kwV&740Oip%`bWice}ZGbCyUxpd3E zF*SFUmxhY-US73KB;%vdnvT!Cp$6Q1wo+D+lUl2QnNm4Y^^k**jIdX##;u7luCuy{ z|GfrNGVgO!^x03x=)?1EgQm}Q(VG2Dn`R5&Gj2@8Y&wSHzq4EBkiIxZlAn**woQrUY&D3QcSD(eC)y6(b7+4@*5dTmQ5AI~VJmODhg+h`2lHz)%#vMOKUG|^&x5Btd zA1LBkXX$sBN!_ICqdBKF$8f|?*EA>OKf9f)*rnMLBV|UtVM2hKve7FV>IiC_r0Clq zB8GkG0(W#SwkAKxo0Lb6s>9q}gLzhI6#kVVzb7{K4P!pTXm_jU=deykklMsfNsj%L z`nO)ZlVNN-;rUVKsWNw(uO zgBMwYSbo~FifD#&WA;MKApu#c#ThX?dYFj>UHqQmXWmS~^Cfngj&=HY<^U_(hqBz2 z4+d%i1TWNKXccYK8m$$J(fM$OxD4Ps_>;Yqk8vOpt0x4~;0lOBsTv0F$M+~PlBQKJ zm@1*o)yr>HPzjk;<8v@yLeSm}FuUJoCb7N1yRAs>S|y~O3q1r~X;tA%dX`*qoOpt5tA4f;^oz zBucojb)=$?cg0F6huGv4EvpyYo+VzK#yPp}gojXF(>r5J$NRW_xRb>Ol`L{#ZP934 zsj#BGHGNJ%HRl!|6VgwP1@Y!Ea|)svx<6e;sdfyD zK`JB3>7!BVWpQO+d4PEwbA?tX9g7>DSG9A?XB&>xyYaJc8aZ2_zroWi@%#MW%shR2 zJTwvU>ut33*0OjV^?tE)+#DJ?rEKW?hTr@uWdBnJMp$;V|D2LZX z<49+^=!5c;C*2@%NsKQdBeGvyt6u1~5=jt-(NE<|@Kj(;hI{_H9r!Hep`|dCY%-Z-S zxg31ud|@m^-FJ*oPhuDaW(;kita3oIc_me60#Dn4T@;g~B2!%NKcu%hbKCEZC3x*b zh5)E}=#e4ji{(TUp`_U=)x06#l~ZHad?0-?G@j{3&u4^d3zn;BW?ZUc-~{zU zrfGEt2Ai7DN|hadA`|OMo7iVrr8NC2T2u@hZoVkJEmMZn-^W7T)DwOmC_=Cc z_fcWXS5>>Cwy^-ZN5eD6swcP{D;|7VWt!)=PeNb1$)~f9M24f9{0?&A2b(;;fItU9 z5vx%8EYc@9+Dy|;u3t}P=hj82QHXg{8pSm#JgsuG*o$e{q}H$bQFVW7-Z2p+SC#0B z)1T8g&Tu%GZ1if6h|jAz<*q5KBN5%z5|yf$oHnj_?L2I&?PUebUSafj6)%L42O3m~5Zmb#3)ENaOo`e7)|5m<-)w?-!yYpv z`fW4rM(1q}gK8~f(KytRYCbpQa~=)6su7>XxB>(-dEI75Ph9!TI7lD1>nI88ds=}?v6-Q46dA9Hjte|`ldpU4t(ia?wfNb&zPZg66+cNFO zlHcaL?McZG6^XKqjHNTLpOzvw+NK!EdN;J=<683B(Ox({xU_K&QLB(55-ohG2lkH@CF2A0`2F}XgXnS6JOyTV@tIe! z@&iV3tsXadC^Q2{gDAW1?f{ajg--_F=OhGU<>9^_jnTB`kVc})SmbGk4O<0kft!3d ztN%2K#`%VOD5bDgJS}mPQLe0ecy*z7YdgZOEK6K1`4bbe}=H2cNte0 zq~=#U>TWJ|-`Ok0Vh^JtiuhIQ$kLVyC`}X?+0n`151jmO zu?WtZ`1W%}#=mnON1sV6g5mRrcDBXEB`bf-;hu|nvN6wG>v$Cv5e&zW8V~n@(Xv<5 z#Vw4}5yPe8)2^KtkrB{eDtvNvk$cfyGMWCOCu%8a&pU3Zot`nxS3K5#($QrOax=fV zq+!`q)~nKXbYIte3lvk=paugEv;v$A#C(5GXxJd93=)~-rC;i@JG5Q_%rQW+L zi#mokburrtFDFbX@mx!+$>uYqDUV)`QFd45nLnmgCxpd{$W0q*!&v0vd0a*sg9A9G z-U;9R)uH~+xyQJPNU8C-ejKBfYsF7B9G4U;TYZJ(?0QEbCNCOfCoP*({oJI)uBjXx z$Soy+o=gXhb~SbpB>Ou{YdF%@juBXJo+~nZq9s<*!c?L6iZk!!1nuFjFdOo!duueL z8A2;&buyk@$+oeQ!bi6$NE`yFo?I>iYpYRZ9*Z1>Y_IGi4iC&5@}D>gpQc5Zs@&U= zoC{5egnC-$2J_B2hwAxl@-d3GA8vln-Y(ICtqbRJytJ1zoHDn=SvMrvKCqrJbqmbQ#mGYvagtW7 ztDTW4oQiJT=2rD{s+n94gt!q?Y*;X<`GR7Z!&{vjm&BrV)81&9BlZOx_+^h26LT3w zWacSAy!gWf4l+RBn|ZhcH6hCTRvUg@DDVn?e5|)Yr|2MS=vkr~Yb8EQq>IkGD90-; z;T|Ca2g+UrWQH)6D7J*9ryFwO!tY32uR4bH@QA$1!vulZcafuTxH#J>=Pb4Sx||O;h$OnnkTX30U!x zA&B1v%XFxdeMM-N7VySuF`5HkiNyz-Lp8>_^9IuDYo_t}<76MCBeUc!vrk@q8KoU; z;v6v57lEb-tWL~NZvwVo1JImnpx-#D`QxQ$brXD|n~+!!<61s+b90-lVkh3fBOU6n z<~E^8B+FBYIOipTcYl?nK3zWZix*+XHS@UW-s^Ar>GOq%ob~*$6`VwJ7kw{c#R#f{ z;X1if`pDzH@oL#D8nxoOJ4l@UK^~ux>@2dMDJ0Nyj?$1bLukEIUI*{Brrz*@w7%=c z2lP8F25jJn50*cKGeEM}_w{{elCeJFS;0?#P7AEaf;gVr``ujFiUT_bOOo`pIWFY} z{;cXZto)ecA*Okm_%~u~D>rhcFe){pDKZNpImj%sS9bxBD{|x`vu~1D#%BD~aM4jiBN^{#Um{82&T874g4n>>< zBgxL_yJ8EiZ>dN~(bd%hJWOf_by3e?qqUiYjvBIa*(wNrc2kk(g1N*B)U0kzFmlF< zasX{Glz{O)-fXY=l_z(mUx6|4FG<8``f9N1TU$c)HDT~FDdh*FW!u>enZE3anmeNd zZjZ?RqGp5~yB7$}1W~;0jShD1wT|441qKDYxdYh(N9<4uIF{)!IvSzb4#l()l(SK7 zjgs(nM&OP2vko$*v20uIk03Fs`pp)mk=$w zP4;@gO$xqv%SwKxkXY#W0~)ndgbx zsP*|(R@iApB;@YUu0JdQ9+@G`hRv|q+!CX|ec<%ALyKZ6x|@o3`Ei^~?j?MEw+2CS zYH=e^Jdp1`kD6)qjl%ac-M* z%`41wmU}GJ1T#-zc)FwNOTsL>wlXj^Dzg@y$4QjN{NQQ7-C_ z+|Ai{9;uo*mhd2wUN<%BoykzyjUDKVOCnSxVWz^OdPgjFF#2*}SjJ>Yi!&gh2eLSO zOP#wfiIE~u0LL|cnzR<>+K1yV)t2r4;t8;04vY|g_`<1r?pt0({$eFDiY`a=ew+3#--O8#&FDtTI`TUH0UTERb+2jpN`AieTG*Q#Jf zb+wPbMjjP2e00T z(D=Z~1^mI!UO(k{jTuw0_pi~I!WHyV4`Dse?RBmGOy@~4+61k1iWlc_@50A;4|EAq zmbxkIqq{wOmPl=7u2=&KO?4hbvrLt4>cxkP8#lQb%)xlWSb$ib_! zJlssZ)Ej@lS(*x{JaQ~J?Tc|)E*SwY0|nd05ltf4Rl6`>W70y)Y%IaoRLIP&v-Z7* z+h&FsI?_s9#OoUMfa}z%huMgrYfAslKu_{Ijfc6AJYuHOEg3>ct;_4gunYFS=4clR zvOz9OYwNtq;HzybCP-7^0dGezm5DoCbi;@4FwN2%PLf)r{BweJf#TC*0Q~IbY}>cK z7f!|)*Jm>~6=tjAY!VXdN6_-7j2#Qp$MH_pl37InPmT*IWVY<{(ZLvVeGa) zl6R(IxakW88$++rDePWL2YnZ9fjPqDbZL$8+yWyQKg8i?dM%IvTnG#*Cx6fZqx*5K z24gt_XjQA4Wi(#}u&h|n0>^;`uxEcIg9s!EoJ4PrXa6>1_xl>#W+mm!h6z};&8I8e zY5DUA>kvr4{)euA3Shf>Q~d-M*pv7`dSH}k@DQ5`b3I73~U&kBSAxoXJyFWc*=Qum*3I~^^CX#!-vTW4(2C}NA0?l!_)J0(lDOulT ziu5O5S}2QYqp4Bk+yHc0qz&OuyfbcRsnB3LIAVPaZ^)vq8`fK-*WW+6mW}0i@TBID z?8US@`nx36Y}r$2eERP|y`Hn5MvPd~C6$*z_}=7lVc@GOq(5CF3ipJa@U@=&A`>^z zzGj#4X!WO=2rw61^GQzb3_C$f<#euWlLw}c{qd1Q_=g}9V*YgaCRP0<`PCkf23UR5 zO95T~6;J>iu?Eom!X$jzK&*kB&t?}hQNAptAd@Mh(6f<$u1A6Q>NJ04fAIM! zyFT@N0;S^PWf{^FEjfVD2Mza#grt zGaC;OboI7ifjzAE%9OUyLz@*}rrdk%;3M>S43tb}WjtayCU$q@y*$btqadYw$~>47 z@K_)f8F$9?#GA=tQyXG}0AX$%LyAABes-c;lBh}vr-(cj|E#M~7{ofvi!h{=Y6xqW^h7Q-OhOMnqa z3UI!WpX=Z9-FjE^VmwTQ;GkN;k?V|jM9Q!ZGH}_br0u(W%0B#tGRMvOf;L+26A1wZK|)k0fo=7lCOsR+Vnj#u<%?JIw?7Ek>F~ ztIHTKdgbj$Y{?p)%vDI7dYbVvchkda&y#v-(#Pr&TR(>xBT%&|wc9lcN z8$n;-p|T0&DE<#R#B8W;$QRaCioDR0$}q>4*gvqu;W=(azw85Gb)`F&$JTl^2$(Te zByj&+Q&NKD*!_cx#zv)EDcEgt$=(NMdhK#67g|rs+U@I3>H*;*L<>7Ta5fMwhkxi1 zQeBKI!@)p0Vn_xlA-I;C0S@m9WH|j_4E^A~c;M!Tul zb`3aAv1z+p-Yl{7SG7Dj9iU+0HQ@o-=j#@$u2|8#swHYA?c4Q-yrfuynZ%hfe9d~* z*E9TdT2-4VUv+hlAJcZuG-l%%TW^^hdQBxkdeXmDye|XOSK39&BTa{%j8BTo+CG2G znxxisAn<8KmvftsFU)J9>P2pS>|5V`j^z4sSO@%U2Lc%_|E_}l^VuA7vjO1CFu89K z=!umMb4xr}Jfey`+@HQ!!Uk(ju#nI%6wgON!#PlE2BohR(MPHo#Wp~Eg`7_p9wUkP zItcClHTqhXiPgNqAlfL(##Y=zw1!CrKAzYPuQ(>2gLvy##GbvBVug3BaRA`eg;!(AI!S0p314!*YJ33n** zS&J`$9-&g__2XS7ya65c<8CmFdb8_Ru%g9SOai|Xm>PQ-fi*|uVJq9O{l~#yE`O(; zVdcfZWy<^}l2y>oODb|crW(i8RX*KFq%3a-YrTappCBMC*kMtuDts9)#S*$%hKoR6 zWdDT+VwlLaiV^}zYs9dcT4Z!q((|6X5PfKBEy*$E>H_wuE~?ZABy3WTy}ut%9mZx< z1^99UGAEGn_V0hzr;;A_m*r0oIHh4}0HQY+IYbT<%ZWoF-4e+CC*IoigK`LnI+$CN zP6WxzvCx~yfGj=8-vYxsxvxIQhmHxyvnK?7Tofr|a0G8z6e;H4LL#!pmYuM^kd^7c z5YJwV4wZ-q#|#u1NnzVSU{5p&R1*^mpm{PGy<5ez&_dLFR1KPEM0cXNIY9j0JdfB2 z2ZM8{RQrX!bBefX+}$SY&491w$)NYJt5M?pvdcxlrHv&hET9I zjDg7ZLz4{&yUNV-gLZEQShPt^5tsVK3(+cb!#P#Pv0d3uT2YpQsp?2m_ zBo|#JdKl7}1O)0pAe|8Sp!n}EVw2mJUsR}ntdFfzI9Zd1tc>Wwir_`J7MG+%$RO1U zH9}-u!kWkVJwpma82T@=52@S6FNb5VGJqJ1=993?6^h-^F$)!-eyo1EqHITAwRd+eMx5gf*8G#SLV7v@;u0szwgTcR zj0(=Ay_6YisgUN;a**Rk59D@WKLzBTGh35vBmt!JQ{Jq$yzzx=qzf$%*rH%`t{S2y zQ+@@5E#|n^P4|}u>KfH}w}fG|M`_~A0>)`541Z01)*s80byYzGEt)M#wX%uQGCkD<&i0{5T+$@cmK8ni{h^s1D+cAmHv6DTw| z0XghDurEXz9bAe#DkJ1Xa*eO&ihADP@cH~3KCAB^e8iDm#<5Qbz+s?qO1j}cZz=!S zL;Y#HZMh$XUqz^LAMy`?ENEXQRbVIsx(aMKpOT+{h*q?UtnkU?vw9hs?x;r?8O92| zfErZg@+cey6}y%ymkxx~*9b3cQssZYhbi5K_k_X!R4mj7!;}*R-ZU|JceaG%5c|m| zam}3>KeDq=?D#{XIW0is@NbLs9q^j+so4i*zP)J{>1PXf|NTy`Wo8Jhp|Czxt4 zN5h^Zkf~9>Bl2c@BN|LjTg(}2e^R^N#OIyCjYN}aUvJH~9WYE`YtM52tLFp}R(0=h zX4tj`3|Oy=cbPn;N6U-I>}35qQLMciWSRM07Qp+6>to#AHFyHeyx+9(DDlG*&CN~z z26Uy2$L7^9)BHW?LD*FMHO+EwB$1AEI7s#L2EUUrY6hKz>B zKdcuxs-w+#L*R}MXv6q=OOm9Z!$HE|)eY4%aM5mv!{LJ3UO_a$7KlW?Z>cywbaT+G^&B}S5yia;{ny&N3lq? zqD)!0vzjO6)0wOAYz+IrT&;Q1(qcX0!Glt0OC>xQcDXm>t4^p0q^17!nP{{ZNP)0G zw*TKR#gLL;;xNP%k8sqPNc1AEL#SOcu>Hz?amuh!_i9^LyaK{)MNZ}?ON+V~V)DXZ zN=cvj?cx()@PtsOf%^a(4dwlfUy;-78_ z>@aGmMf`9%4A|iBPoOLP4{Hnx??{P9+?%HcS>oG}pjr1963KcSqrm@h7Pt`UMs zYQgQ(FQmisl!~V06_O;CiqxgZzxoPuRgYr9LmZ=xRyR+eRne``j1X@>Dw+4@cvU>M zsGRkfy5sBa#RN-&$Zfy+OD1VhC-10Yqupc6^w(1+?e-(esmG==7R)jNn!LH3z|GHIP`5CQ=g~ zqKynQ7B9vGA`92k{QI7NT&97x6|I8GVp{7Kul*o_k6t{-8^E=1(R)N8%b^g zBRdxW&I9H$AN`HmPfEU~3Ff0w@1{_2*H@XPNZC;7GB?O6V67a`{4V|cKg2;OZR35O z){P(EGy$WL4+MNJWw58vLV0s+xT4tzWjx`p6XJ01W5_kz9=(d{4ME*J5Hsij)7}2iZoc8F90^1GA?48 z7L(dZk+b)?%9$@5x;z&32PG!T!M7DWUAUSz{zz2xqG0wSc?P)js;xek3sz8JWMMm4 zpY5BpnPJ$9gp(N9bHpfRCHT2X93&F#;Y=LZgKuzg z!1Pztk!ah6Q2E}42}3Smf<6G`Mj(U! zKX5T9mWJVdzos%J!Nu|nd0G2tvD(I|40js%sGBW+jtR^RTudsYQ29o$>!|>7Zj+qq z7Bn1|g}`k}Uy7u`ZZl9*4_m$I^isW0n8$*8UHptd@S$R%of?h#^;&XG6vV|97Z0Q> zG81M*KLc)rIP2QnB_q8i-FC|brbw0$15_{^KUb&XMSGgd?0-}Vg8ADqW6xW zk2)^I^h}K#0rvJIsr+>O3LiO#Fdo2^iJ)2AulE?F9@&Ahg6HxNU4=ph6&gM2&%50e z2GVb1U5H!r61&}5+PwELdq4l&C5th&%lN{S0-MuzAm)gDByljx5q{&Oc7K_7-8_V@NCIsM1uss~7T52n z)pa5V-@XW2J(c+L00!FIS^WVHst?$}2LA363Ea){H@MFSgHlbQ;$Jg>4vaSc3!BpK zGKKHJa$7QatTqF=9$-UmU{5Z`|Kj%lc3(ahHLXUko_EmBF7}%i2N>?BV(f5nSWN9F z?IK>l1abiqA*N+^gFCD9y)O5%PKovZhzrCiG;Dpr zoL<(i&+_WK0tl}HQdzLGDL z-4iXGHVru*%BpTYH|0-~Wq6T}8uDd(hOYhSS8y%=AykU7t@U~?GdlmAP%xH{-LS$w z+Svc9FqPs1TEn`i3P7iN*v+(E)d{Ag$QBX2eN<-eVR&hxRb>j0BpfrRR5uOQ8fRl% zG&2z5=m#fjAgjvNOGlhMU}bAgWZO z+OG9bu19zgwuwc{w~)j2Zge^pec6;9|9I*o`wE%Bzs);m$E8C%;~=SBI)IG=+2k46 zh=G$>1}k@rVje=t{OiR#ZXv@LFRa(UA|Sxvmh+Y+yF8HI4+enpn*db%9zo)9Z7Pt& zz@oOx30}7OuzC1%p<#%3S4ONF-SMS4yeNnXGGq{=NbV=d0^Q#uv@;%1hHP2Tc;00> z*%+xA)vH%cJ>Ho?;i4bkLj&;78XRkWwTzoKfs=PorLiCc687(RwLCSsTE8<Ieoz-!J))Fkd*CjW!B($AyR_UP|Iim@e{PW{8)rrp|7}C8K}2 z1KZ>DypbVuq4bYJ5)|3=8qrTyIJq`=9lrQZFFG3w1eHS|C;o51Io|L0Y!GK$pbEm) zf<9w-W~d+=ZqYULgDPD{Z{a*!=qyq#J7EjFz(FAJO51#m`kV5)Ka|VGFE8(00|@#O z>5n^pfq3ievyr(|Li6*8kuQEEsoQv^Hx@ z(~{{2Bpa2dcp~vm=%jlFQ}35%6w>L={8FWdz*J@R)cD&(DpR%+Ig%QwP(>ga(2mkc z1LNEw?)~(th>=U>j$s#EJ;6!?+WQ2r*m)8z^Pwb6ux?>DKr@~SLOOzx73xpT0j0l^ z3R`jW(cmjKjAPRMUDmqzZpd0C*_M;(65ejNBk=L+B#7{ikrXt+dR=VPbOa)}k2jvG z+{$1r;;k3cwbRFK%xt7R1rruzCK}Gcee{-UF=Rh>J%DDdl9n?#uEz(iT*HeDOUOl^ z!NZf9y*?j*b@bqsHSBAC!yM>Q64*wT^(t`=25MWs&4z*V>9laUpFh@XSZJu#W+qfR zYsKk}hWX+Y0#uMhHh|lsIu5|#fGwvq!g3uNh2&Z$dl^%hX{;VpH<*C7=v6Wn3Kg>B zMX)B%$zo$p3EiSNIljjdu@W%(3R}|gWVm*3;&;oSrCGzEZ8wFSb|pgcC5E*NuUP7a znxv6iCSvtNcMl6`^w3!p{!6r6-agNrZ9hJ>x#>VsFONy?`P%L7;cLq~EIU0OY9V%k z>2#TD`YyNXC>h5PzLkW87vh=dsPd??De%CV1acPt379WmyfHGgKq#e4y^|Unw((Aa z_$M50=nOMqFqzM;*&=?2UUT_GFt6}*?f%998A84R{B^^|{>W9TCFbvuUFB~ePethRQaKHxde%Og>!?Y!#j41R}3 zZ?DS=p8-j0#{dJM1MfgJ7zifD0S19kf$ON_cPD-Cb4nJ>wF{Zx+f$q9$v*P_mXkPA z)1^Yyxj3KnltoUc78$ko679-sL&=RU~>H7rcCal5_cqM|N=R>O0K-RLa)i1dRAf8c)!%tbF1 z);K`ZeL_4Lx67VC=H!-h7lRu(7gMA1 zS>+m2w8ax0wpAROh-1%mW&C%Jvi214;DMcTvHt@VK;C^^6`M;BU>ket?-I1SGgf^} zaVPkJ-453_k`z&ir#{^H#TU2|sKxyy)It5>Drl1Kdt`lOEc7!aT}V_Va2R+2{g+e+ z^(Q>>8WoPf+Ph|sk;-7F=v~o8D$bC&MG!l+3Ib1$n3@kH%J#)%eU_x z#zbEj?-yl7UNY23O7s|B4pkc-kqejmD9&3n1ET0$+Sn(!+u-nmg50DL$)|}lHJ=Ig zYVkB){|{U57+=@(y?@6>W81cEG-=d0jm-v)jRuWvG`5|_b{gA8W2d=yKJ8b(|NZm~ z&MRlG%%1(8Ypun%xnSlCIZi4c;@eF#MERKE9~Mz<{PD^Z!nMD6`lsTCwiROI9E^0S zPdGUjS(e_#^puRgi*}x#(w;@Syd-t7-EA{WTJkYnSX5#-#^B}RGI*gHuWxFTLlYr> z0`sMMqElMa4PuK*n}bez>gx&}FFm*s2J*?ZL(6S)KSKG~ zQ^?9flDqCXaAM)tT2CehVSw|jG>EYr@Z(H{Y4jg;BQkYoC@bN@(bSKHGe?OXr)X5R z$atlE|8<4=X*VQLtYsE?Ge?LRSa_Z{Huq2DH{{=Kib}JnQh2R{LP8WZaO#&WMwCF9 z-%taRH3((kO)skNxmobD_+?duFEAM6FO>Tus!pPxUmqWaO@IbM(9D0}+dpy=!6k!k zbBfXyTvao#0-^sV3Y-f;AO9cz=5?Awo@&Fo=f>-c0{x2Vc4blXHSE=Ful<{3!1377 zAuba&%`6SmQyQ)4H;?G2+_U6E_~FdiAl1bUm#kNvP!|U~V|W`o8MR>5Lb^gv4k5>? zOz}s8R{3v=r6wcSnUe-~$~xMQoV~J9+unsv{7>7^OmubgL#AVcjlUoanKde2!)1S} zA<9NXlM1jIU!KzJfnVYW2MYxY?!PJ``|xSHMd>Xy?#_COrCnS(p|P3}pvpB~AEoIL zE!U1nuWfMQ9QH~xK}Ld{WYTQ+-0wF2AsfHPnHt~H3m|FI!UN4Ijh!3lI|+{ zeV}vF$AeZI{@g|#G?V=#%b}@f3%o(FdJ*~%3@7ZmGg8)->zb7(e>j+lqkPZf!Ls>k zcJhW1DGc2G2Pm5Tb9a$XgZrXSmIHh?luZ#a3~3Z?hP*Roh)p2^W#)trJTM(*a*-mb zWcQwG1kH}$vg$Tv{(7t8%i zb+jZ4l?>U6inln#aIA-jtVgG4^ALp*Y_(CX=|NUS)Z+b^RLNDqP#_D`KP2uS%>fTc zS<{WLiN2tSNwVEXXAGaJI)OgGX7>+|`?H%F*f9_Y6XN=@3z#2YtpeKn`G0vFkTwM< zQ3fPmg_s7kQIwv)l1q}DCV#@2*g=)6sL|aihaW^=8~?s)$O&B5eGL?~JsULiReZH2 zs(hdYTTw{UAQQ1XVSwb}=sWlk7Oom`E&0&>G$Ak3YC!1nQ@AfH7L)8%r83O)aYJH# zvnxvY-AclICE1hY&jNw=gqY$mM``3_sm6J1(j7IkE=_Oe@}v^>uel`*58iY5L% zF|rrQ4$FwpI~`YxC?fYCIql(`Cy~SV_gZYNmPS$~=M=@_d>kHfM0Unh~ahJC7I--SE}FIfp9-G};LH7r_RV9yt{8cep@nf@DwJ>S{3hh7`YS zULPr6%oi{~qFJ?62#7JQOb~xokcc<6l6bw%6b2R@K)rwA+h0wAco71XsIne*oB7NQ zmk0HpMzea7y>UC~&Y>k;jlhUOIlb*T*)(pe+p^3@gglY$SrB7@c>u!p4~hG;sZH!G zya?LX^x)6<0ojW}zUnrkrMv>Y$o_J;KN2%O4Na*J3qfE?Y5}>IFopdluY41_0Z8rQ z|AIJ_n;e*lWEHkho1Z{+&?A0x~{PHeD6a3IxJ8 zouM&51vcx0+qiBwhbJoqiH0=P?Bx%`T*#m23pILAT4i+#(G=a(wWfHvf;)fdr{@&H zSy#uJn0#t^prIo{^PcwqLK2yOGx32j4Kj(nr$b;@@qwI}H@0sH6YnKR+6$(LyV}K^ zd%e#Zp98wIO@#tIdc}06q`(}TCkp8)0i4~-9~w%vc0U8=#{g{+U{PE)b zEt9M*PF1AJ2l?EtIL-v_qgHyTk}==JD^pTuiMX+N5D{K7BZ0o0)G?QdJ~9b44no#* zRAfkhwW$K`5;9^#TX)6wVWucPnek{rQ{AIl3?|JeRyox6NxxAlq<(Z2rag*5QB5Rd zWh5idz!7``8SpK2l^XBo4hjQ68~?#`7*L43=d&_>Jb7S|5?=>NxS&?dnRFIdWp_~! z${MuaTYqdhgWIbDVHnws%>hONr~iNO9KMFFB2mn{i9Nmggc-{ai(U+nJoDtEJc&-A z6Oj7%51o5EtBK&EJopHId2<+d|6eZmRtrkFwc<0!aZcv1>w$515Lgqt!z|kZ*SWBX zDwB;ezYHB&TFG;CPltSeygKFerVhl*$r>w>wdE2ni|{Tp%2K-vqDfZ%NA4)6l`ttK zlhK3i6rOm?_A;F=QRx|TV@pn@9@K_CIWvJmy9XK6qow>X-cE!_Yn8k04@&u2xE+K>`AP%VBnk z-uC364z{*8%Cswtn|jGb>75B{ zAwH#HQZcb_E?@@t=_5Lg$(N%wQq%~zz^!?neF=C@Z)Na!;dbf}(tu|Fv_#Ij6x%wy z=46)8j56CON4qEDp=er5FJl}+q=KA}dD$^JgO5d+G4RU^p7rX@?t%hp%frx#h8zN}O~sV+IAg%2pC2GiTFja$}Vgg?Xt2m`ANWR3n8XnQ1; zF>~3*-w|av-dy0jH&S8&(Mx@vQZT}PXPlqv$TaHtt%{Vcl=(%P0~}HlZhE}P483p& zm;>`)(CzO_ST?m+&(^IMz8 zK8Ih)4v|_)+}-Uo8ucOwjMF)`;bmC}3E4F}f1`BGL->dlPD;s>0p#hrIKR2(x3kRK zI#Wj1Tbs&87Bs@Tr^ACiP-_su#Hbd3AkQiMUF#8-Bk(2ZO=^yWS>}<)-=bwag{>p{ z4EaO6QX=Q#%zDQa0=Vm#=G&AU;|WPcdL_rrLwneG4R~Ba!K`i7V;4|1OF6)b$|;eQ zBqjo_FF|MQ*{Vq#i4Z#|a2p}k;C_0 zixtQ7`1#dh(_Pl#OMB7BMR*zx1_2OrJSNB?Btr;Q4o1JYxV%Cba8OuArIUv*QA$Us zM9e{vM)VuXC~4>&=rH4l*aT41QpxxUj@)=6yJf0wnL@|PN`0qJzQFQJ{u^=urJyAD z4cUzfX1n#+XpHXWtaoI)1i#;PXTy~CT$$zi#9!u@e`}l<%SGvI5@yl5|1AF}bp@e@ zqXIA!U;_MyctQX27sV=b%6pWQ6e;h+taVEVZvdLn{*Aj5&cK=o$td`sGK_+#AB5KU~!sU~L<=Q-`QJB`@0?o3Ami$d%aG9l58g*Znu9 z=AbecBUK5EF$@Ebh@O{>5k>1p~|`p>$lu67u3Thj6M*}{jeSsYgRz? z=IEcL$uY4lo@#LgYd=+_7H7V}eRS8S>G$4h%;l)qTe{GrgqRe)ur-RQ%;D?Te1*=D z+uiK}!Q3JvXdo5i^Ao1YW0oQ09YT&y3zFDRD*I}Wk@x$l{(Br4;x`Y-rWtX*+WOQN zilw#p@zW&eYX!{e(F`Wlam##D9loZVLw**^(VooLIx`R)#{qLg7_GLtbH3yclv-u%7(Z%kQ1iK76t)r-1xe1o zWv`-GSd(50N3v{V#wH_>JoT&NX`l0ECpPG*_G#X?wdP?5RgI~;&Ei#szLGS%9bg^* zn_`i17WsHc9c}pYcFFbT5+jZvEJyQ$8wfCuu|V+SlV=Y+k%*m8qPmIM*rxA$g@gM^mu*+>=1JiV&F zQ0d)i(x$t^CxC1jF-F+I4|M1cdplza9y67!Y{5gt=zTr;r z^a;sc%<5SeF8o@=n7}y%ceFuYEW{iyJ+jTj^#fg@qw0Rd4f4=o0It1##9`dQn?DS5 zcZpccWiyJc-aebAK)^Lw^XF&ItrCSAvQeUNVG|P65);YV1DALaOc~fD@R{&m9(C_e zcY5JkdtX^3Jqca!O7JNRupBx{2y~p_jLS^)VP&eLTwgU975%7=`4@Ad<~YfpW8`Pd zBt2~=%j4fq8i~ibq15%Ah57j;#$~x9N|Rj|kn1AR!yY@B8~PoH z^rG0Zjk$H^)H!QiEpAF}6Ir!!s-c&R zfm`0w?frGUG)F(s~8BQolf67 zJyn})7_A5^*IL#N#y!^pkW#`1(&wvh@3z5tiYk18Q9wx5Uv>qkY0uCp%oK|{9{3#X zzo6A8O+j^7ynrb{F+dE&o3HGRRsAusQ>$RtdUYh2ss#IRxgpv1w+8AA^W5KSXC?cCSj2C3v`_J zsf_ZlNfAAXZ9FrGgcC;wSs?cdeT)`Q`)TU6(dW&nI-}utgLSvTJ3q;^i*yMJCZis4 zCxWfPeaAO64>#Hi#}5OY&)*R`dA>b8mm)=5T=Y8P-CXz7%ug9-mz?(CmA^E;#ZZkG z9=m&vt2y7ojue7RzLn;v+#k^d<{e`pZ;yvY+8Tv0f7dd3HumzMJLm3uuh zt}hH9haBF0TC$dP`!Cm*b_2#8t9P-Ob)yU1AHH8qmh`!zPUFB3*ExALX%S~(EgflO zFx5ORQvSf?S%Q!3n1?xSc4D5f-D!~+1A+6RJe6;pCEo)bdRuP5k@z1ZC6lqy$>ZLi zK1u%*M00K?>Gfc}S}DD@M+<&ypo_93JHJhmV^ZS_{(E96zcax40D|&gOo|9z$Nlx~ zTn#AbFON#Xx6ha#y4|05M#)fO=e5G9ZPeQ&?0dbx`kZFerMq{miC zWysL^q4W^cAL4OkEeuG~wITAd;pllcS)Lfv$|=7c5swiHb!pnbOf-{3hbBqBe#JYp zn+`9kXj-GsR)Wve{B<4Gr$Z zXiW&MLxsyLj!=(xh;$X^o!^x>6vHJ|-dyl-WMW0OaGnRR>sU>YP;#^ zq=nt6XsaHuyue12t*sLsS1$DlQ+ZsmBRg&e6NHY%`%K|8gC9=d2&6}wuP5RA-hqcG z4`^X|F%CvvX6XF|^mM<>CFe=!m|!i7SmJcMt?GS*h8vEP0&@%Y+P;u6uXtZK)E&w( zW|0Q*U|<)}5J}DbZxg$r*IxYjCl9O;h&`H2ZITTONNXDOaQjK3eb}(TU%X(FMK-V7 zFeW+;T0{tpOCco;jkby0W2&84CAnpISbU8))$^e88{K6b(9PcZQ|c7gO>R2ams8gnKF~=_!$Ol$sl0qm`ZfDMSvC+Eo6>4`lfRP4^ti?-W4W@~GUbDl&vBlo$h z0#sT341J6VxX|xSkS+$H82FjE2Q9yHqQtp>wXIg3jRU{!ySD;*o5++ZU<9u~v@{4{ z1=3yjXia=#1@KTzdFDRm)8>W-oHPh+a}0_hF9V2EbS ze##6`F8^@yd|3%1Kyk_Y^TI}0s&Wz>@t}C2>Ql6hkp9aleL&(u*V%hsgM`QFj}>xsV+1pVV{trp_X3Fozw7G=OK#_e zVTlKKV~Mi2tV{b+RU=j(j5|$pMpGSE>m$u&b$<33jei}}lt8`vSgdJfx% zl6vspzsXzS3yXgjbTWNm-Nsta%yD*gOIyX8D3y@>+=di6P?5Es^9*H}WdS?0zbmE5 z43oNhnzn|78~;Jzy$-pUmQ;DZFov)Y=7t_lF%o{_(-Nzr;Z)LLhn10{=7zuYW=Zd7 zaOld&p@H8yPa6gf8r$aRFai;B9}qsF;I5jzTPpqwH9%|4g$~|)xS8`=(cwo!`&~Z368jen1k$2Y5fyZE%e$b@xhRcI^^7B*!GN6DUs)^~W0z)!8ZdgjPx& zNLet@L(5>G527k&f`|_$*!?2LRGbt3Fv{+A;qJ`2o6k>dk4`#^OQ~H)>fdV#Oo9WN zMe%l{3t3K=U6>u-6KcZma1|?z($fqyB7kO5{kh3aKtBgmR3VZ^4?K|m%M<^PEqMVW zMMnw*>`-e)7b0Bxf-&GFPqoLTvzF>t>lV&WBNn@^wLIFyPvFW~Mb~iT+OE+XZXq+w zbL1DEGTZ6X@hyY%HZjfgyrBgs;3}81?^TdqG)UWdSD$s!k=IM;Z!W&Y7^-R>kF|hj z%A1u5TTwIVm&v3hEzVo^eAid&%qxpbwaqS7Y9EBW;=91D?u$TWEPu~&S|Wi=%Eyai z)dezkY}vDT?z|nbfwe^O*H5*MHq(>eR672Yy}m?aaKN<2$(BANnY%XAx_O?gDeK%E zzE3zJDVRkxqV5G1jZdn`G2zLKdFS^qQo3)HQh=n&)s-RIOtV3RR7D9@k_;{q-L7Q` z$Bco!Zq_XVX5Ei($sZYaewHiKXnP*vqg)?bbapbBf_8)?1Dz$%*n4>FO=2z&`n4wz zl;|{#xzcV30pdRP%7p-1OOwVRiVkbaw$)z4jQ6l$0p4}@0}Tq_vXK#S+gf_x%bvVYC(Kn}cd_QQP_smi2n_*z*8&_=yT+ULKAmA{sCV2d&L(h{}E6aWFg z*PT9F@P4LZXbfu4)9i+}38IV8VF%(iPnZ!j``00FSvrld*a`DjyGwnkA3GzqO zj3Jfim>zB3c=F%Y{``Kr;YiPo#6CT9ZlplJVe6%m zm3@FDH=~{3c9c$5a#_r{byDD$Xarna_?~dJ<@d%2Bf}GO0u%j(`Ss0?hg=2tRN6JE znGlmJc*QZOP?%&Z$PRrK%y5x5wX{i%8k(uU@s1lDt|YM~#e}Tfh0V z$jiTf%@fThFMYUpG4MY%9%xoTxH4KSctx<kf)@kuZf7_-XRK1$y{`Vs;zaeJWCuNlW~B~g`hLlE7(jR zWN{0Lg@zK?_MDm9c9VB-;?H>TcAiY|G*hy30~%l=GSIB@H?cr)eZdec`i`aPpqGt2T5$+uehvqbp5O{@ob3X-0r;=- zkAC!A(YJb~@O$T#zft1@5(28j)%`ybG6f0-sJ9+J=3-bBmEGn`_F9VRnH6}$3%O+E z2wNiG_@_oCa#HoOQHPc!sjUWaKmGikbT(hESs_m#4PI=vuJ`ezo_B{skStI(l*6Jn zf3^};V$~pVL60E}`?V01H>XXAy62Ep{WOB@K#H_u^ZCfEdy1MB zH1=gb3z=Tj8Y1#UJC1LCg6y*G{46awVNieTxfG$ajU+p!sB^BQy$DPCD}KCTHP+l> z$7i$!oTI0$JBk5Zttvzz0yPK&=|Xq73`if}^e{@Q0w z-Ve^v6%oI>$p4bkx{;a3emoD>6bNE+FFNo^V-Yv0u-PDY|rFi7a?Cm5ZIT0QaX{7J7By58S z{=d}vYyAW;JW+p3G2V+%ny$nm2_vwDp}!i~q`zvz>-70}6PHpb^380;#O%f*ofPW? zW&%~cMq;*W=*(#hop}e#eB17t}`F`G|}H^-2S? ze8Is35*p7UBi4YyC*?E(D#KgPmZfZaVddMH7*IwNzNwj#7Hi>aj((zlva-WEcR^3GmG){j)W89OIFo zp-wFNc2PR%!zcuBIn-f8KPIq&Aol)ewjV)zB8VHfvmyb!2?xO1%7|oQ{t*v^3m<#T zJ$OCijLG}Wcd){bESnJncjcxHh$wqxSfj5|;q7Z^9%sJbyP3GX3|bI2R$Zm|c?xiT zPT5@=8sFdE83A7q$DhLst;2*;yRN%clsut?$}bz*u73eh4Hz7fhOzRDznCV{b zvVmmgfS%+%6A>$!`2qG_B#~79{}B?)|7+hpmMh=1JeA^DJTfPM@P+yyV}yx{h)CKaNd5clndlH8HE6)X?Q)xCc@pv29n?TMnCRo1i1?g3<=hohf>!T zL^Q@4ni3xKYn^Z0o!8c!wSIQ+nw$0K8o80^wvFHWM6&C#0HcZ2%9eRy*#0wWkrQEp z6830CoJjy%5eJ?UBJi5+?8181%feIpVt9#ZWx0;}Ql+5Gl6PYH&ek8d?^EVo^|-^M z6sqWM$6=|(NwMqsy=sNDH^0fDLOD_xbE`T3MOcTknCiU31ZfP$z(HJZAlhL8>7cSG zo4rT!Z_uO&+{MtYKvl$cB}6uJ%s~G_Zd2I>uug4Hgo6RrhL6HQ(Y{fPLSFZ&mGv$X zVTuQaD|_E<9HJkVZ9njjOYZ!xq8R!CSw*%-{geoCB1x}N?p7@8gDz@`O%hVO)#e!1 zeN#0 z4FXDwWNQ5pC@-w1AXHf^%^X;rEfvg~_qSh-S@^(B(CI+)eA^J6stt z#r~b%Fga~hML56F-Z^$ASyJ?Oz+Cj8nQniMPXSmus$2tDmG_F!@q*<$@^`of(Ce!i z{(D5Z(6wTV^@ntpG+Q~Am$A~N4qI;cFM>#vpj=Y zP8qZGa|3ONN>V%^Ql~ZM8zWbqXn+5jjOmW?C~t{|w@VeMCmwp@AylMJTIB2CehfGq zZW|51$(m5l^+{h|_Tds%$Qo|wHZ8LpOw(Mx7+_JA$*|ckTGmc z-Jw9~T`x0abK<?aM!-10*C%y_)pg}u>2Kma|@d%Nej@NcOlp@V6 zEI&l$D}6`tOTKn%;`(;5GBcQ^&z&j~3DvGU)h~lys78+$R-Xi0ny2V52NP@IM#XtA zE7wHoKl-emvQBq4;6&)wrLa-d9l{NzX>GraXc)pYPT2{vyR0isYDGX}oT5~8hwp~jg@zlZE0eX8(o zC1d#-*0CHhE1Grs5hffsVoZX^c?0sW0{AY4%5Nb}dp?GB=1%fHMuBK6F`FLhdj5|a zfDQyjGBf{Z5HO3x;3+>Xe;7ZR8yP7a0IGQ5vk4R*w(+rODX}3jahN+sPE{B^Bonr^ z52Sj^e-uV=YzJllN@4!^m-2KU-%*=)Im>1e`@*lE%Ndsd8{eBlq~p&sHda0Hw?&Qk zH~QuU?Dz6AjKAT-L3CgJ{X>9mK$)G?y#Emw1oVyz+se^}S-}ekWL491^#+b0;`#CS zFx5FW*=tvNC*I;uiLb5^S%MD%#g$GY?I1ZDG|sO*90cI|33ZQAbks@j*9sON`A0q= zW$?P=fR3VsF)=eM>8tyna$yN{9-a;vOYwc!7{e7W?S~`$9J-N9z-B`pGn2tPRDauo z`}l>cd;?m(d2=A$BG_VhjNhn*qgXO2SVU;(gEsEN@~LN*lio<2Vt0FVRuF~@^;kg<@nibX^vn zo`Ev)gXuJNj%!&XxhEh}rnbioJb@qe)FEyd%d3~zG+<5ZSVK}#Hd*bdtReqD_JjgU@Sim+#tt&)B8P7heOwH;JK#X4KfFh^90!wLQmV~ z6Hsm}y_w;Fu++^zBJ|Q5-Mt9@?7bF&LO5lRQa=N<0yenqKMG7zMNa=p0-=k)&01AE zuvMwp1t<^5M0W7M%9Gl0K~v274blm3U`LAjzB;>Y?9_8Gqur1WLqHn>x`^Dv)U=J+ za!X!r*mjI?33vDhckkF5&JlTx8Y5b>W*G5jpQdP9g_WvhF#Yt_teTCI1UxMtge0AJ z48F;`i5}K6zwEk;7GQR~UYbw47+>^De^q!%v7T1Im9L6<@E8FJ3MU68yZEWMw=PF? zAH(i2p3xKapO7S2av{U)&Ju{K<)la4AKd)F_}BGRKL;hlqs4C>dYNQ0drYD~h39Q? zYAYwb3bl&79&3x0)0$vOWcOD=EgFCbuE6J2D9hXHySkC3Ssy~Tur!X`&`N#R94my(+s#shE!TLuyRKjHkj!Wh$D1W5pjBMsZ#^5uo;>~0 zZm|aE2!bIo*@u!cf~ya6N*QO~r7RjD_~F&HvU~PPqf--8teQpf+e#%pPi&`W29i)i z3rbMrs#4n$_Q>yd#jL-27A$0^FtJwPR({-rcB9~spJTug>z`YN%i!PAerFO|9YImy2^r$M*3Lnh1Wluw+=7C{JS zE}pHg=k|Po;ef^HA7%ypD?o`#r!wTFtb(Et_#7x3_7_(rsp1q8r1`GuQ|3k3;;}i$VhUIZmwt`g2y4xeKxbMdHYB3{0)N<}TwO5w-Sp>BDh{$wXM=`g?h`Cte-;H(mQb z`Bns8CC3WOJKudF_J)9R_k7)wX7PL#q0EdAhDG>zSKJBmZI~w3*WiPQ@#U>fNw&83 zq4olWVvrJtHftd#?koJqqOX1+Sy;vWFubeF0K1$*%*6fc8bxB|3%qdB!R=8QC+@UxO$QR82B7NBzQp>ccu zf_$hQhfE(W;ui|d2J;5c1%R*rpfu=w4QqUeeh_yQO>Q+{R8qMGw=jEE@byl5be*b`gju` zklmeaoy3cDq@__ZpFfnIJ(Ys4U$a#Q52CZLU9-E4PG9vb@K-f^cMgk-t2>O{bWjUL zkI?uJ#;?e2q={z=zh7UebK@epOc*rjFI4-+I+O1GIaFWHVH8S874iw)b|@z^mAdfs zm$RO;Hk1iHt~hC0`$Y~3+91|%&S$r$f{Qv(t^5oEqNJ?Q-S4yZ_HGFyNYKoQFP{Ad zt|4{Rkv=*wC#;?H9t~*DmWRB>M%xUJjh7(Oe$jVTk8EBE-~3a1wX_pDaFbk9TL>-J zVAj<{#J{+T=V7j@I44bYHt|(MT}OI5D^IZ-ol$8b3!uGwHKFln=A7W-O!kyu2cr*5 zW><$xPF9EVM7C4h;lL$=GH7x+BVT;@WKcUuq|n4Zf^NAy8p4H`&ZyehgWjZ=Z$};B zwPe88?sWuDsu5>wwC841jspJ5G5-W1ZpjR+H{hQ8i`oE#Q}`8MXAO=rVP|zPDy&dI zK{<$+qcqL9q5AOGG<5~l@m?<1GJ+uVe2vyV4yw;5%X*kn7r-2V3G*My25f%OEKJ@e z#H%kXHzB&8t}Zt7h#|l$8{dp{7B=OujZ!KTnOT2dpBuKb3yA*7_)ZZ_t}J#>OP}Zp}e- zMn*^P)0BKL`|>X2SFjyGil!^?7y7Ll{(=$DIxVH@KgWN z(ZTrWYQ69~^FH7t^i)lDhw{^(GIp1I=Lv~omo$w$%Q?1l2|0J|>vCCkMv8nieh;xS z8hrKA*h<;1hw|RA6W@iO*|pUodKlPz4o*^uO^zM|MsCSj*`{*^>mzi{i;GhtwoR?f zwo;Z!3`d)fUK~mpzOMGkOEo}-_0py*eC7KT7#9MpFOcJlZ}1uRHpuk zRc~=E_Cc`3wqQ6rpvuAY*81b>Lru1*mrpdVh1e$1P`KUsGIb#56a^ZHV9*6(9)dW& z&N_Z?C$PTU|3+~C2#G(@e7(iU_E;UKsYlk0qtoo_ZyOf0yXS7EZjpkjK5tOkDcbpAA^rzGt+lrBw z$f>h;_O=c->P?v(13cZmJwJ>Kz>c(jmM#69e`nYJ`2}wjp}5D}r+0FkB{}3;oxovO zY~HqRnG-wrJNw?Y_A|HEug8d!U7kVeC-$ZSO*6JTb;DzNFywO)wvV2-2S<>kcl$N6c5>oG=)l(xjEqzi6FUq4p za&w|p349pXavF-0{?{RDA zDDPiX?_m8fp*Y&|N+aH57`$pw*>1!~3OkGwePQQv;rm2GiAoL=@4Z4SoMuV2f0ZiC zlkW-I5%$@#uX2}B|JtbaxV;UYZ;VqqD7)1F#XlJcG4v_kO zpM&Zc`Gcyp{^4?BcZP5)=vr$ALUk;VW>aaBsMlFSR#-jKoX=oe7hS+h=M{~_n2p>r z(g0IOmIY-!ayD`@M&MSiFj>2jKn=_~$19dDc1Wyaqd7;g@1`q=-&RKE^%9mpB7N`1 z(Bg+ITrM2D{<~BnIR+CmVtU2;sNZzV&_3J0J;{r$El3^xk9l9FEc}pZtWgamk{U1G z!CgadAQA?IVv@#G;Hy2UsW^E>jmlGn4cCkigFtx&70Oe&Fyr}K`7uOBRPhUZEbY8gu)xAVY6jchG%8ut6oJvWA%?^ zaMDikt!a_rq&rJ@4RY_dqtT~-Gd3t$vNAS=W3#Mo-R78MogOCEeltl0zrbt|Yp#xa zXYb@6i(r^}W~Xe~c3+F~xYpTN&OZc#OYa&MU{P9B72-9yy{qK(YAc_3KO!kbtnjmZ z=OPC90w7<_Kj00Gg$9%N91lb~&=2!3aQhP{qd%Pz ze7$T?MFHsS_Wx2fh~ORP+tM`{R0xyKg=7#uj&_gZiGKK^PwB__J5BuTM_G5CthrPP z+!H4CDf1ps-*q?z_}+6=TLvtd4kg4pt;H4l1eW!rs0FvHe69&AZ5g8H)*hj^-)~3O z&;4+m=@2EPWCtO|8 zi~3Jy`JT-S+nvfCPNm82p;p~SsC&J4EI)l1ihvw=U-;Xp65pkLyKR2wqTc&(Cs3FE z>JS{)Dbo)>%;o|9L{vW$FWS=C=|eY#55b?0@x=(9*+yzYXIMUP5FSz*COs_r_12#B z-T4rQ&M@AP7o!+s2e`H5tUIFlb`aADY^owFp5#=*2ayub$aq>hj)9+S+UtF~F?xMG z5%}ao5P0F@G}D9fk-IdS$)(sBdw8~I#4v>xsGd5%n^6vY=F?3B2g6H!MC@rj(*p~?6E32?~|Hwm=Udr)?a~U$OAAs5BuU)jWvY8r=6XHf#SgK zdIOkRE(iHz>MYAFjag*;&OTQ~_!#4HFIiNGxWgCq*PCXZyCCy3%{1kpKa!IjkjCZYZ}e|rmP9$;mR4wu||RJ{;q16U6=xiUXpXbqC+=6R8&7*LA7`G6aGF|Chi0 zJK8~WZV0lHuoIfI(eS8m0vC2F3uIe2*Jzlmuu^C4%f#~ed_q?KI-&G4I2VPkmA{~S z4WjETY0<6Me8#u&=a>a`C|o4C>^mDV$r%uGC!txzWc*(naTsWf1Kd)e$u%mU81W7n zQ1kjcw}$wJZ=~1PU;I4B3BYc6BGsBiMuSy`_52EF=WUB0@gdz?I_H>=Fj{v75Y?NZ8=93pO$-b(H)!c% zuD43AxRne&buaS#KQpP(#9@9W&gAH>KYZ%&Ky(wPqQWX@y{xN z@_Cb4FU39>zQ}i}u#;(~{AJ(cr4h01y>ySro7V**=l45!5#qBeGuU*zgTfW>A z%+s^YDxnK_-u((PEDT<{D!Xz=oDJem~MSJAJ+Mz`^L@a;-CFUob6P9`QF#KaqaVC>Q#etPt1 z`siCrTGwSXOGV8P0JdEhYzdXUt7Hz`>~mAw*o7-jw`iw2eHaVK@4}iMbIV72&bp3~ z^sq0-C45Wi2Bd}g4@gV1-$jxgD(zV?fPL&wA4vC=#(c>B=4Id8@e>K^dy%np(zrlU zlYeyw3liE8Fc?T}^e>FIf?Vls<$0?{X**mAe;G4?^wtgp(fkXiy-8>A%K-{VpX+TSqje%ye8d{J&Cb7#oMf1L9y<@Vrs;@@7l9SQm~Wu!JJN|J&iSQFlWNjJ}*%;{p8!dj{RvMfAC9MEX+>c7tbV{r_^ z->>@(J8dVwt8if^05wUf;{2i5#WrF?ll3%o#$L&uRlWY^p=v{<}d00FCo2WjuD1c*{iqN->GP< zG^I?&%9;xP=w%MF&qilF(%oRP21LEX!|hr~)F(I2B9k3&nyQGUtXCSf6Ew47P2bFKtWY+^fAj9svmR*y%%h)Ek6Ke7|9Lu z?3ctErc>w|YgYon@b7T#DC`kv_`-0H$^f(>zlq1O?&ZNw;NOKqBrWoLodv$bU_T&np}L~$_$G_U4}~ao3?oE z`FY~Nv#`h1K>W3Y&_;8sKJu38h1RfO2ZU6uXM2Q#G35-hbRq=bn38X=KdG>$jJJ}* zZy;UNF1snW`#ruw_ixr7%Fn~MMw?Id6a_5}&Ca8PQ;mY)e3YrrcO~Epr!=*4pM32t zToG66v&di!UW6o8%C=Exb)t@4o%TLky-WORObT}k4gt3=yYe`VDNNSYJIE!V?*3Uz zde)qj0!x3#qgd0=6{6w&18k!q0R{1EtQoIMW@e|=_hFsTBQXw#?m$0wj2^q32fF*} zIfnwu6{6&%66Hu=Y?kK15b@}3E2hAz$mlf=z=Zl%^`YjERX*6~ubrFwaoOMw z6Ub-yuzmo7C%c?K9w9IRf5G;u$~i2}0Fs4z%$yW&zR5R#(YQNua)%64;p7RLpu*P|=Okp06q@z~jA(Dhz}8Ob)6C0r zePbQz1JA+{383wthtMR5m`sff4s?X%i8x z*~(AfHj9}ph9H7nF_!Ho6O1_wJlQ-SHH*Fo9reQf)K-UNGnnqA69^NiO8e*};4$7- zITMx+BDLeT_y4i=&f#@!-TQZJHfH0-w$s?Q+1PAs+eTyCwr$&N?BDKl&V%!P-+%Yo zbM?A9KYM1ad)(t5h1)k*QYg5j4UU<)yhLRn>Z?Yf*FgnwzU%28I&fe{#A{ofl-pm% z*zNYJQd~|ir_G7(I_M&S5T5o}3*1G|?{lds;GOwv)GKCUjI6nF;>lr8In{X#Aum~f zq?zq8!&Cu&+B^c;)BlO@9_Br;rFGRS$gzWck5!O_;sknAZky+gU;Yi{jFR$2wb`gE zfvW8g7#+)EC;_3Hui~$hS5QH-3Sp@Fp3A=*5BgL&s^^y=t$qZHV-Sb>qYs;x5Llta+0mq1{&rY-E%wKd z)c5%nw2R-!>7|DHToruDb&yIM90qp$lxN?F#C%y0cj3^wF9}of2<(qyy8ncP-2jwB zq1Q7niM8PgU!vwE@zx0gsW|rG=1+igJ3L>f0jfV&l6{d~xFY`DAS)n}Y8BM>lxH1X zNyy>2XX1e#lf0e|fzm1|3+JkwA+e}Oj;^2(*K2(l*%99^77`I`i2-0q{ zEOEz)O;YIOH?}iAo!ZxD(G`36Vs{IKvQS++@2{LP8Ku-j$8SD>O$KBDq5f@Q7MIH_ zN+^F}X!oKx>14^i1aDFovlXyKjf{lvo-62=5+IMT-`pqUy;7EG7faV*0xT zt@F4Cu{AHi+v}MH1P`TsX2Ain^3Wj~yXuqo=br(j1+n~L2_Qvz9+un(6`)h!dID|% zTq}^q`Hw<0peuOwTILsCGf=?I2BX7J#ii?+>85AauN> z)SCblA<>n_HriHSxZCLM=7pe7$M^FB!Q$efd&1&KdaNwUw%D;2?TRPkZdW1OIg=aK zq4Adk6uk-^50Qp@l0^qlo9`}w2V+!6$H}cno;*_Y5q^~q|5H-CRu`&|k`wsYHdLDu z3S+iPihL+&brjBrsBNyB=L^iD*71?gl(fvcaY5xf$TSu6*)mTa`Kk-tr|;+PAsod| zl0PN2>dKq1Lw0`?Z(I^wzM^c%xV}gb>Fm-7jr*Sla(`~$+;*pXVY|}q$7qK3N#kH7 z)6;XT3|$8aKzPp}rQYsjoS|D1C0fS+=H)xRS2Zan8)vF4oZ9uQ*IVLHY@+GyCUX!g z@%-r6fBhZD63mBEk&vH5jBS*0c~Og)hVkcOPkd73Vj||8igi(S3Ws`d3{)IEaA;1>^5kGGK0R`ae zxS0jMLN=GxilQuNi+^kC_W>}oC6MOzPiD?8awB|_D;K`OLjYXwm&tX)In8!_(|*1d zWo0ayszj1eUCPTDU{E*2U>`IB3h~Ki9g9r4*g-F1ki8y4plmh{I=fJyh}Wd73(kEB zL)H=3lEYu+=hN|z*P#RlhhWH#{GlMA=432-Ngb+&$(Rd#<1L=!{e0-bh>`cx}4$a4Cxj0eH*V zB5@R1XdY#Luc+o8rwR6{s=eA5^F7ird(vu3A*Pi*Tvq~Vn4>C`FsB%6-*KV0f>fU_ zarU02L6v##PdSna8!7F@y^{(8`*GAw%1jCA(ZAfpM(vv!w+-D9DDxitq83WJH2G+C z8&IklAIG50{zjn-6^n_%^mDt81r%XueM(%G$vm0{A0MqRWlNv##_)^qYPaO2SeFrk zAp&%qHuP?`wOa zlS&|e6=E&@J`)>V=G+leVFT0FX#fU*K%b2N1&rYx+|_C3zE{h@oi9ofUnn2AL%79+ zDk^X6ijK{sVm)2f^at_uQL;Sz{FBaO4we;&ikbl6J^+tu+kbdFE3ecr9)9+1kL01u zhd`C*1i@VgYTL=&!FUx1t&mB8!s4Gq?Yw{R_9v!u&y*G@NB%=# z8u*$=>thene*Ys%NEj--*{(vejlcHW3JN1?=qKGN8wzUQ2@RU*1)HWLmGr6+-0A(R zmh5evG}F1%S=Z$nyzOX&xm|>y^*2HK8~eDn!(=Y{kW=}FL=)yGG8h@(cYVS#An-|& z;i1-bdq1tz_OHqq9AP-6r=30TDr;C>jq&+xHmf2U%r;coIyGSPBNGFSsoROs98d@g zU84MoO&T9V^S`GOuqST&V|qwX4#tI(|+oxI#d`me3Fr3 zXzlRO0u1vqJH&PRAY5%5h2Gg5T2040z^H9ng~i_DqTBu6#PlB#fN}D|RcK5ucY)>P zfk3ri<3X=|+D#Q=aJ2ILx+L=UH1*^a_D$GeO78WCAlfGTJ2*p)Hz5TU%mNJ?{W0!% z!q(#FD52bcX`%O^5WLNc)b8CXp!cLDjMX!$IA%VUOp%MTs@-`(H512l3DJkZt^CL- zAAcjSk4D6OdimjB)r3wk!RAuyIT#?e3Zr0^3Uejaf%g5;1PBCoD8JjR<&Y3va%SD7 z>Z!_WM1itFJh#StQrAfK-i>U2@AVo8!reY8A2yo?KmeCOR`>t1MunbN;w+TyiOYEp znh=I#Q~Mj30Bu^#q(96F>r@8DAk%F%R$L+jlB3u04`P55>+?T|ov1S!(MVK2+EaPq zlY9$OS`;@2RQ3M2v3C9kvR>CbBZ-d(A8r!;@@fEJ03YDtKL7*Fh3s#l27<0jxwer1 z_}=irM1`MOCYdb>p1n8&;D#>!1SoGAD90Sa$l-IqDB|;hSBn^T?cIOU^g$AWBcF z--q&AWG=U7pA_5Ql3&tlRB8^O4&Mh{op#O-5%ugv8wQ1jh%C}XH*);*rtj1v8w26F z>mUp4y8azZwldyjGk1A8>0~r(BoJD#aXK#ed9->Tl!`EQgvpC^h7ejr-?WioBKNCk zys`sg@YM)~u}CFpETs6FG%RTsb31+!Zx3=?@PV`0V)>VJnLzVh@m>qv9Aw|LcZU^H zL>enLRfyxMiNR1hTaNbIX+6vbIns^E2xwpy32k@u7TBZs zUamQBG-a7IyLgLZwQ)LBk>iQX&7HrGd_gp*-e^!^v5LjWmhOz>kYP%JQ0=6J%A$&9 zj~)^1c$^UYbR5Z}=(2TB^>si@VYz&iPzT-aZSl@L3fXV4&`33j2Zx~0vEh?9mf7=c z^-bd4-|qYs1rz+g>lP<3R;4>VPWKx7<8|tsN>*(|BKEl&hPHeFC`brogZ(dUDh!)< zvTd_ar_Ue5*+M=BSq3FYAxeE&Hzf(45nHH7Z|AN<6DR>al{!6Et21A~%UV@7mGy+k zhYS9&3s8}W{|7$0nXsN~$~dkd+#{zymghhHhyRB=zeOk$QDwjx3nD9!PWcb&@F>S} z_dCW{^a~>JVZ=WW{kJ{$=ybGL`iGKLBJyY&a z{-;j57mfkC0xI!1fmh!%TH6|Vm1#SEa$1*5xv)ms4!p-9pb|U{;X0Pk=m>?Y5H``U zuoQ09K5(!q_)uP6d8i^)HPvcA`;b$we*I0z7R)AC67$}3{k?0`6_JqzH<{1`<9&7( zce>B>SJfLjbyXUTXi>g1F}-fI$*<_esQb%XBaM~pPeS^|*rcDE3SGlsE$>Re0a7SY zPXWF-uDFr0dq{Ym)WIJVmJ#}y!-QA$izr7Rulvjhk5dnbh@lvWH-YwVjl*tM zNY{tW+nb;(5SKgOTV5^8LB~Vag%N!vMpM)|Ln1*u_)hcD0V}{eDfZrN7-;u184ZZu zZm|U9orK+IFw4#^s?x}7y8Fjhsqmtvqr#K?>U(z+geG+&u-}-s@b^x?u)9}HdmefR zCNH1URFB`nUA|3~I?EU7X7+AwO5l_GP(*kVD1xqU`+1__NfHR1I~8P7g?u5PdP7lC zFaFcgDlU*M_7~hlbyYd$i^}`mBQVpCD}I#dItGTTw!nj}2K%abj?c@z&#>3N_p;Sd z+8*Zql$_wk;INRiU1vNKmM>y*R_bBuSeIL{++!9Z9f$g@m+gX z4n~uDP^J`6#QF0RF#DTvhAL(%$wz6I)H=c4U*@o(D}b~0QXt*>AC!Z`u8ZgL3Tkm4 zfJC~MToQoQ(I~a$ldVcjda<<$u8L2PQuQpslQuPeK^ARGf>1e@#6k0RYUL!d&c_R( znmILoK+7y<`6OL6jIY!@S^^ic4L4**J}8w?A1$LJeamsKhPb$oOv$W=vS-JSzz2a` zZES&T!n*OMfmjs@<2)?eE`kLi-ygtt$O*2E7}$OE(4yGKx&ckRvD%|XHt!khj(RzK z7jH)tslKI_}jWsk?~2`WU0mkl|RTqy^W@1*3n;dzL>a<2EYch(~y ztcqxte8&D6e?J&!suMXC%6yLA(LZ}O_hXK`IP@}?_QY}L{k)_K<(YwtAgg{39Ob3` z+rZ9==4Cp4(0LF@HTQt!$Ob01Zf*&X*K&qUI8Gb6J2G#L2h3+rCS_!PoRJBxNzF6* zrewukWAhg{6r{t?o>I*=oShgZa;CnDLMirBU`dIRPpO3n$3)aXN%HFTT_?d zGH##neb4aXW$J&BquKT=$al83Yidjb$<>}zjP|?KOcS&7QTF;b9Q)trUoqwLIdc}v z|B>w_1+pXlK4E+5mre!jC4a*pIwvhAr;O}Pf0dgV%Z!u*W6#^F&qP~ui`2Bxer|Py zW3KJJf{JV>gyA88oKa84F-cC1;@$t)Hf5D``Iv(i`)VNbpqfKFg&vMA3OrW0>)y4sb777 zVK$3#sAln~>+wn6n`E=vk(fuQ49lqpv!1?wl22{$ze7WSE*rn}7(L10y1)!_E}BTN z#Fe$++q+}VCezVn>~u+84C@5ayj5->kK61{UQ?FKfWnS!s`SJU-JX7-wbo%XnM0+v zu_;WDzhnOxf;mx#Mvvg765708KZ z6DD7(5-Mz|vV|~@n*z$OeYY$SbROce06I8OkW5zHP$KkVi6J_w24dqOmbi}HB4i1D zzoOkt%I9M|P!~-oa(P$b5rLfDRK)QmblV>*Wq;3Sk|VXJ*3@qvRxc;R>e@z4jQME$ z46BE;Jz&ijndrVGD7l=%Lt&qKkQ`!xOk5%?u_bpAF0oj=WA{4T(5v$(#e9?0_%-TK z_^Jk`d)8jouXhxJ%b~Ho$?gj=7ngv~okpG}LaRo~taID@zQ@K}ai{iydIJJS2^7lC zV7nG`O}I-^gZePj?g^2plM@%8*6Hp{46(q7EHVZF0f6&*`hUn1gfw=)7drdQAfvdh zs?N47k(=ABBkl(l9&2I5h2o62mA1T+<`QUd{h|8=3|J26%>0)e_s3TO+!u6%#vgatKmMM#s}Se)>lgu=(E$&U|B~YVYrg*DXpK0lo+&~SG}-9} zT2@KOZV1)#Y^a6Yj#Ep2PvYvu69gTyFtwxOp3BEWTh74My-M|8MCL1y|OB2LT;o_AXzjNXva&b6qhy&6hXI)BDjozQ60;$1n< zzKv#{RxAdwR+)1^bNT?k$Z3Du5s&GAEPc9@Xzyg*og;wFk}#X{IQQ^v>i9 z*#I{g&?m%=Mp1dL6-X=s8;#I3Ch&BA35E7inr<}8z=7R9ewq*j?}P4qaQ`z)!=awG z-+C0XG|>&5&nJ*mGQvyE;;<@MGIp98~|FFQ2z$4 zJErgeju4_3Z_vGrEub2REPChaq2dXz`Z=ZXV!DTwJSj1bGw?co7S!596>6T~i)Qbi zw-&$~$-ksK0BfkC$a-0NUa*o0I0>r52_-&&%Yc`ff9rJ&)rcjS1K{hpG~tQEg}|ht zd}C%JJpkak|No@BD?p$h7Y}Q){^vlpA1f8at4KQIv(kO?S4maF#*{=ZUz>WC2qt2G zb_*FXb4hRr5p((M1k8D)IAxC1(1ABz$EmrpigG0;5AaRRV(Vx(_lA|;pVb_vi@P`! zi6|boqC+eKU(l>ozbR_AprLSor!+71n>PwYv_WP9Reyz1eKRCu5sgA!JaT=1ToD)} zueP6?qGiz5Tnc<&YRIXN^b~>#VtpCNiD1!iX|LOZ>_F8Iggt-%_Z%PsC^`&tKUZ?1 zl*dSKCu?#i`O4t_$Bpt9hN__GhN7Rk{t)UZY$)Mg+j>AS+@JY`V`Q8|jzEI-og{dl zrUdPWv-b{qKa;zmW>W2J!3}zX>C2|z?{^=g39z@HJTInKhwp&pu2Iy(hlV1+fDAHl zw|T2s^(=#; zMUDMJ7}m=GiE&cA=D#|ko(%rc=)~BH(>h&mYX`#E%qu`wIn3o58x6`!{n-Kfxj(fx zH$ZmQrKgIBRd+IwX;~3UZxbrN1K8((2zj}u&+1+m$@dk%FpvZdW2GH3eJI@Sf6tLe zEzw0(h#SfoJOarwBxVr)1<1dJynmflzxCuCAkR3~YiE!^5ZOP{!vFftzqLFsF(zQ8x+ z=oABCYo~6D5NKsfewwY7xWUX7e`8O4itRpfv_3v5{GdmulJzIfC&|y7yl!~#G%l;n zx`d&KE;TFT1pWYfQT+;pn$;g#r(vEupaN>>7n*eO#{$Zzxr*!>nqm(RptJQ*M=yq_I`ar2_^MW-HYln zSN};Q>=TNZ;Fj!w*d$a*@wE2muy74 zd|r=smb-dL>eIkfZVQE5H6m}-L;to>5i`C*Q%B%ggmoF|B~yi8^^Fv|hG9(KZa#1U zMo?JMeJfKQG&zJ0jh_cH2u21(+!H8PJX^`+v4AyrzwL?ILMi(L?fyaL!fS;){9M`m zDYg2(kbOhw}x2)@WRH7a?}R`45K=YkE&%o92nTJo{GWrf}BZ=?%v5V>nZcw{kEi%ZdU zFjI@T%s&II&iFvcK@q+$ZeXrJWG0_CyUI7MXAl;u zdc)3eM$9~5V>#7JF3F`sFlF&B)UdsLG|#!)n(m_%$psL^^B+y`UtVig?I0qp2Q`=g zZ*v=Wts1F3M?EMdf{{km);e#FhMD%h&0Hc~7vv)zucu<{S-@lZA6fWcsvfSIH$(gK zgY)O5L{btt>`|ul_Q6>n{hzZF!0~@Yy+#A<5Z$SK5U!ovo1&#cjC&uz;a2^Bb-h2$ z<4U0Ru+oZH{2<&m*eJX}l2kZoo}9x8BS7~1iq0sK-zv(9gD0c4nqhc3yfI)AayiNe zY;LQ7U~+7IbGAc2156Qtp?b<>2k13x{2(-5yJ={bKiy80OdSc{f0S?@rGf?6k$re1 z_`!5Q&T|bqXJ=}`sB=b(H=x4R@Sg@^;JEUz8JU=amFRjF&_ZLbG~iDk)H_Hg>M5Xq z5hol`R*(M0 zg|pj|u>SWlgZ$_px;^gW9X8$$?A))moTVMu3O@Rt;I}g4j`v>zDLQ~LI@5uT0SV*1 zsNwSi=zf&aM0^}CJ3rPQSc{UjsQH?L1rNbtRn}}))JW>!?^Z`EVQ2aLTyY(rGOUFo zTQk#lk;(j7P`oF0=zSK_IaY8sz;VAGigwR zEzrwD7dphxQ<}>W&*1Z}^XRdYjb;~7qcn{lA)6=TLXVw!_MVFJZ@XIOH&Xwo4uEI) zf9i8|FD!P{{9oyLa^NRXtuRPF>Gyiz8)2d9zZrQ!T92J5e2cf41mnrTz_bG_2bgjG zE6Cl;5okMW;+VpR3_416|8@1>dK|!!@40;_Pet%0EdVGLb_sw>-~Scl{>-NM^S4le zhE)rwNrjd2#VIy8-C%IGP-cP0D0`jjc8DhbdFW{RrDly1RG2)=WHrjwL$^V~`)Tn$ z*Bu1J5Xid1aE@ps;>9z3QUI+ZVEszngipT4AXf=F`9 zzjd@pTlPehIh}Tw{i|!Pf|{bJ!i2scsvrmuK^1&pB;A=+LAhtsRRF)K9^ z#pZn1HAhoDLu=R1MoNUL4DDzCWTIKtd=YuW!6Sy4%@6dq0R}gctEc94tWUh+;U$l$ z&?&g`i;s55`>59fw$?$Xkq90bC@KF)p*o6N99H5TUw{^kP)WUiKY*!-OXu=onKhVc z+k2uGXRIxhs84}{ocN{G17g3R)O3oN!u|xb>zaP(O4)0=H%jQ3#*P2UFhBuZr9J~4 z`|L8?IwxNbaLEHUnfpH?*k8p_6?&acJXJMP?xCs~Ao)1-jqOO&*(?a_wmTK`n=VO^ zU*h-QJKV&eWa!a$rU2^!&cT1_UVqu^6>3)NPp0DUzO*5=?4`#7t^>x&{af$?K;*^f zj9d)#6QEQ8ul|3eF0gO9PdM%z`834k{qPIj@H6&!-U|hq#bqI37X|T}ei`y5c4(C> zZ)ioUgFl0QbeW+H^=bRlNT!GjRKfA_6pyfm{t`>jxvM`;NHf=OLe7s*hV_IeBfGlA z5AEiLVLj2nXSp)9S;n+v^tELgrH0QrU~3x<6-2Cmp))M}HYzs`ysX?C%BvVZlz zF^*P9PaQOP`60N}2)6a}il0}SO5)crrdmr*(Bh{nX$CGj6mwe^LiXEpRe_pQcW#?K z3p$JRl_k6oL!tuA3#Ur2wki=pFNlLIwSuvp8L^^UVG3!?1 zwc@Z{vv<*Dd}J~zKo!2!hx=iLJU4sz>Z091oZl+ir0?`Mk#50L8`xC~?}I860DWum zjanZ^7_`C$Rv0O1FMYNt0C@&d_S21>Q(|VQmr?n0etJKK4$7QFddl7x-Ntvh79JwH z%1QhO3;O@cS`x&i>(a(tCo3&Pit_q49jel->{W6)j5SRfTf}T%2a>Z1|d4; zG1j_)EH1GP&o$V*9ZmTlXom{E>6_wBBbaISbZ)g;Z5qq#`Sbx+N2Mfqm3yVx@P(YD{d+48j7C98zRbx? z<2>}rNs@hhNT~Lu{|VlRuvRdNNeD|UhLXBCb-rHKduXa$aYaZs&@WVI)wA;BlEC}@ z7djKtQbz6Ypc~-nD_Lo&N=Z8Xc=&F2@Aaz<0*!HIr>r{+_49G$%{s+9d$DDyp#09S z`67d*NF3O>7xzsdUDgUFXHs=s)*GH2w_z)tHirG-vHEBfl3ds4DUZ`RQ`l_Y9W-8vLzPD`DKnaDVP!49}xmjT>4v# z>VIITafFb?)-e0cPfBO#3*e{yziQN9LEPBt5417V)Vt;-_Q|?%GH5>`6FKi z*BPs{ORVZ@K6Bl~ud@_QZ3v^B>I9)2SM*Hgb6DKt7uj!$olK_OqKB8oYuKiu7BNYx z28xT#fdic#W*ZX`%e>}THKA2f$%v*X8WRLT1)XSCbr|Y-tVpW}zE;~;K1A{dic)-n zTgq;upg3JVB#_`De^@$<2nh|?#vctS|KOz(ctCkVM#!Q&Xxyx9m0XX6g>#wZ#9}K? z5NQ~xOf}>FHJ0VR>xhbky7^Ra@OBR_4sJvr9xV+?e_!Z>Pfobi`M5avloJ>$xyd9B zcCv8DXU;L|(2NOI0Ot@pgczlVWXf#aG90z4Kot}YnykhCE9A<%`27pVls$Pof*Q5H zM4Tr`(OqGp{l2RDmxshRhW)71T-GQE4JihsO~&e?%(UA>hMyBKg2ZvUt410X$6zon z!to!0A^GdSIxOj3zrDG$W*nj(BeYav#lF@96^XyZomo*O7GBu{Huqn?uz&UN19A(O zPN_m6t8bwMT$~b0r_B{t!U1VxtTbVjW@WGUEfI5t021^LRyAvZMIOwhj2H!Q{aPT6?Qd=TZ)miB zH=Z(te3b(eV1c12?@Ol*jfBRX{&vGq3@Xct3O?JMd$|4rAL- z;(#6{{B_J}&h9jZy4Yw?d7n4{UX+Fe9<0kkDBB?Scr0XnOz3FhcPQKgDV)c`R=CVd z#PJ$2cN4#K%Kbp~ZaSZ?H%Z9*`@zJ{hJMf%2d5lZxnN8I-xdfcoU+ra2|~j%SCar zHru}Hr6eCfBPcdVlV7t1tbAnBCp{KDyq%S6lFDnG=Gb9Oz}frs0cQh1^Ktv%c_wi_np>pedCI= z1~D&K-}pNX2lh7Ph?&5Sa^#e|4RS#4@b?)DNttw9gC+vS(HB}e2hZl*u`GNJE6yiN z7-2Q<d) zGVkaPX)VPHzI<5pks zW58SwgaG4^03hVgkH?U&jAJ$#=1WomKyl%SZwFlPAKI(~7+(1jUDxe4&&pwWQjR98YVh3G&`K0)y$Y{ z0m6SF9Z6N6k2+Jbno=|?DdUaxmE?jb)xnrvXI7Kc?4r|OYeg6u*RwK>ik-?LX3l`n z7%|a_z1v`?aM&k>TvwwMbu^qqKr}@<(wxP*Km<-Y+Yv|7P7fnzfT&znK|#Jby6=DX zF#R0m)>x%z<8W)ejyD3i-oa&h8>n1_`Mh>AM>qJAk-%`jVImk!Eo=XI(O%pb@dNb| z7vAmHB|hE~)Ox?-?@+hnwz;)MB{Xu!f&CUOGbDB(H^{jX-r9Gbu1l}m!|shr5tv9% z;sZe*v8B)md~YTamvV*PW5y+;D`+?j>m2b|MrOiOGMt@y9ly0o zC)E&D&ogx#%hwaDh$YJUZy!7RpqL6*Z`0|ZAOZ-aV%H(E`HpJo%RCkYqL$J~ZtS<1 z{2qI^GPa!NCrv>u)((XyRT}By)r0gE6q-zpou$PgVtg3RnV8rw5hZf{O2~o>wc-ws zB*C694h@CTScwQsN@H;vNw(>1y>&JwHTDdxR&CHl^WHawBkTC}C>}2m;Rjfl3^imK zkYgU(E=hgW?h6q8>y2CSYQP+hmY@tf3l2@qY~72v5q%z8Q~VJ=!d|rB*td(ueGj?< z+dQW+#c88ze;|gaW>^koot#!{-MNxQ^&@{;g=ZuPID4~lpyg+)Ka`lNU|Ow+*BD!b z^(iUTC4K=`0-NU{^wmky2eJe$bine!ai$q6KOiq-P-IVKy^|l(fK@j%!_%}-F9nh1 z39DqM1v5a2?eYi8k%l;gkqRG{f9b2_!a_dW3H?KUs=ew zB?|g;{@$&>XCG!pykw!l<2|;^JllQ-XP?7;=x(#}Lr0`Dwb8LK#?C&S@6*zi4u*(O zk+?@O)!OEh75vHw+QmB6z|}?IoQcgU{KHD(`_`dJ&yb*z1Wr(6&(=9@*!R=puIn8S zNy0F12aF;=(n%%NC96d#gY!k^=Zd&ewV;~&A;K40ehXO{#pXPmR7oMzZ)|jYYE9-L57bSIj zG|}Z5mAvMO%9oET;#it*kmozCesfBz7IH7KHp#dm`$tp`%)Mf{1KyZ}bf3%)LD>Ry zYvMe#Ulcyf@Taq26aCGu85r4drh^W92hrDTR2{2eqAd3G#7?EF_aSN;ICQ8cj^SVd zZ}Z!|s)mUcL$mymm)=#fa4L8|W@=h#d|yG%9Z2I03YRIQaeJz3p|e; z60K>Bl8(OM#F%=bej^Ed6r-#6y)e07q9mGq`NH{{kI?hG{n?EC)8o5ujP4Lm#xw}= zCb4jwk06QyqDu2CC_LG@H@pP6_%P1J2)3&z^mliP6oY{2l7rhNiaAppnOJM?^ITt zTZ9WcERw3zYndy(JwtIV@b`VJKy7IFhaTweKc1?{_o0HMmF*Z$?)@fA%AofrRQiJ( zGaS(eSWCm#s>*G}<92bf;JK=O2~Z`T!dxaqTRkOz;X}Y|1VIe^IC3Y$x)TR9YH8R{ zJmB?pPV}qBH6pAxg7QQZ?(LCx<_rGppfpyt5M3 zv26P3OKS>AYo^bXFa@Rw?jCS4srTGQ$jyGW4n7RAHc83!tGl`UEP5tXvWAeyNj^Cp+&PKBS_gCYPsHFi+Okw0gK4jIZK}HWCgH{on&^@`u#~MxI@k&?N=N+EWU~NGlRnM9mE@5eW6~+iq^kS;P z)~Ey(At=R3>^6I~AxWCI;0l$fGye}oEq~joegU==cSZ#RExjKPvLiL3G~#E1Nhf0jzomzrgNbq`l6-YlU)2HQ^_g{)8T>V1Rw-6-!-7cZx-o zvN(3%rZY56DCPj!x(p3>eqcZ8t`$0#Vr%tn`c2iLXEOoFG*sPrbudOF=wL1041u}J z+d}VBOk>XD<7h78jfQQThDOH`70jz2jo%|rr|NE7T;(BM+0$7|bC3Sulg<71CL342 zW+}X_#O>C*_Y#ee{yLu1-!FDOF_s{WEMERV!|4tIs!DaKPy0AB*r-(Qf=T zU{V9CnIH~7`{t0CK2yyAgCzt9yd5I?m31UU`+TfuuiVOs%$d2xw7{+<+X>d0mpGio z5mW8h`;AhF7d0dxrn)?1WHaZiH=a~)h5TkI?jd21D1zdVl9EfYz$f3BIjMMo=DFS4 z1^5H=hIvhc>BQz-R?Fjzd%|g*+4A|w9RBf6+p>*~dIvi&lV#S8E=KXxll8-ICJ92F zL}gKGMMWs~>QI_$`0k-|zFJYoEwA!9=twh3TkQL2t;k636eQAg5j?F)$-OzUl34MQ zv7DXGuKjH0!dU$@IJNW`3KL>qcw3m?-O*v~y#_`}NS61D_Uqvv-Na%Wq=m-{bG z7>n~9D+mp7BHm5S+}4`bpI5_?h8|uJ-r=x8U-h`L3RuFwL}}Rw8pNkD5m9T$V#N!8 zy;01wWUZ-<;Zf?%EVV$XxA&MXeEIC9@Fm^c&(&m*V16me2=I=&hc2~{FMn&sJef>q zGP_vUo3dvX<*V=ean5*k6=XxkH2*H&kfFqcFQIM7ugK317#>PT$G)|7dAQbpRuz98 zZ0;yY$DfZs4bw=@4E?#G$HpKilsgxO@5RNA>5s!H2{YvO6u;bPLX=bSDD@03e;MZ2 z)vyWLE>4#E5qlU)=o!+%fbpEUnfkbD+v%bmJWsNae+Vs$sg(0u*Xu{wxN&KgL~bkC zM&vRZtVi-?@tA=_%C1+kX=em@$N=LmH>IU|DJ_ss8s@g= z-W@JbF0XbN>Wq)Co+sYNI%ObEz2Vk#KnJOYv4`4Bf#zl@7}U|sL2S}}UZz-ft(ZNk z!WY{Zph)7TfE8g90SH@QJTXto z+c?MXw0bg!AE4tRlCjn91%!w^gCC|qr+E4N$brydB-7|M#=Hd~?ESw`PoubU#nX|x z)ZBK0B0$0V-P5upXbe8L1Cv+|!G86@4k4r#k%S>%4_gz}BvUoF1}G(w$gfwy4$&D1 zO6x@ci8@S{!GB*K3rysdB}Lm$F>Jq z?olhH=R_EwU1eX1yIT7JN1t@mW$MSrRvp=yx-&Kysq@!;tnvkC$D)m9hq4;+ zpq8MRT(7N3FZP4#t_nY0vJWi3%bvb$B+;j!)J79ShnksLvL|Kl^%C{Aw%o*Pe!?v~ zPc(Wu+GbH-+5KNhyD;#*<}6X3khF`q?0lhC&gAmuq6-QhCMnEE)V_`+RaTBn%Jmb< zmrWm8B>j{Sgfo+ja(;!%Jqz=luue!;7Kfuyis|250UntPF$?EctQNsD$6@R0Jy{mVY z8TZX(dJjTdA#Ne0(oM*oQJ~I=&HR8KCudYCvyQpe8t}E-&K#}}12|6F?3$?0)t#Rc zg1L{u$;cdQ294F(q=`qYm$GZ%aTpJ> zjaip#VY>T(LL1#Z8xKw1n1vE`yeU?O*OaF7H^S*LTP%qwEmb-C&6P!R{oB;HV}+Ay z(Xv`abo<#Vo9+arV%!#Bz~@|)8GvW?M9v3Vs8lN+Pqx!LvXbiKSo{pjlaQ z7?+<@aPh|+)W9b=NacWN~H3z<=QE~qmq{SiOTVah0R1;E;tmagc{*F!b<1Pl`@__ms`m!kU z@p$^cC)3wQroo;;@2En2OvrvI^G$NeVrCvY(&XO`f~+}nE|wcdSQ2K-Cs2h?VaS4Q z#~(Q;ATGF1qPgACloG^cZe{7#PAm3t? z=F`oLo|^~*3FI^WRLvEWy@nduvZ9lk0rHPA32a2}OOXXWc~FCUEWdVBo2S{|NuiM< zjLO|dC`@Cu7b+mZ@dojz^56UTK5LMWsc$3SSw)`BY-iXX6lBWd%v`vy&(p;86Sc+9 z6+9Yu*N^{>ncwXxC43q*c7?NdB51YYOC6?gjy$(>$Q4e;9m}U9@o^CxMd(p)p(v`< zTnCT8q;A0I+R7ld2}rk>!x-!-yiz4(t76jZOl`b(q&9ed;h2OeUjer;MvoSf$SdTl z-5Bj^m_(=QjKdJUC!_cjjeOsmi3mkkK^aGtyEA+$-!$SWNKuMyU;2TQ`vj`=Ll&#! z1Q$M5=JKdpUCzP0!~B~5D{ESCj4zB|`Eao*KrI6p-@dyBeu6Qp8rO@z_0hRMC)rxl z2dvgk^Pj}Q{p^Mm&V}=#k+eZg30`TpYjqFe$NgkziRQ8hu}qfD69(J?12{_`VCMz5 z`L3o=^gif1Q3Em=eLL`1wIs{%k30z~HBBdpn>t9cblnl7 z*!bl~pC`4wGiS3r=GU(mr((0sLWLgrE)X5O5QpV%Ni27Eh7R{0dI<&&UWAJ{<*Rf=umbXFKT@AOU+v+qLXfpr^$4aTU)Yv` ze^?42T#A35cI_;|uIpu^b?(C}5R9!Os1seQrx=09i~9}5c8kw1P5Bi~+e(%q_?9Os2&X^LSFZCrePL`(Sd2c{BNX=%1W901nCp(#rpjdE0d3$L&&|SBtPIFz24xqovpx=_Xn{2vBy8 zucLdBlgG41RHDl6o`wni6z}o|Hofg8U~M_FqZOLj?T5*mq`v2(|XSQgDp(&5__~G;5A1?2u+ZU)*D) zfe|mN+9nt`u2MigTM{^0iv+@Kzx(vETMxh?4gbLNmj^YwKh2=G^HL5{-bC7iA{X^( z`)<$pt`s8Kz1C1-^o0qZcp3ln^U-$G*aVJPXJOp)A=+X(t32IFjUJ0|{!x~M+sRl=$+2E#f6~rLtFe~ z-jvZN6Zn_pFXIOR^Gt(Kc^M3`S6{J;5uN6QybA37&O29wi4wxpGVz(cM{=3VSlHGU z@<&FL%26Q3LoF`xmscd4X>sB;gFS1w@Tpm8+dIO`RIfAFX8(h3&S z)8{d`$CN|DJp=w5&0Bpe7NI*6_f$T*p}_`e@IBlPF6+fhY%9jc)aM!EBQ9bC7leNC zsrn=jCsW#fK_^Ke`0fVIO#CrfX-O5(0;5a;iPi-_=D9hGEbWzjNsE1H7?W83SkOXu z$a6Jm_rC0)$75(whO^o8h<*EQ73MKu()Ylzq$`gShnhkw2)?nMeXTa)Ey2yzI^pSO zt(~FLFV*400n_p362UQGec1EuGPaz}gq9upD`v7IJ`vb)A)hruued$BFz3g?^I1N2 znNp<^$hXC^;U695;bYGD!?%COd{79sq)PN$q!YsN#C&;K3cJp*_eAzH8$H+7feqVErCLw;mv4ju7TPs5^ zuUAi8dK%4_%0YTQL)AcR~ZK^vfR!tV%DK*w%R^`p!=0t)+Gd$0t$>K{ArR z?-$q=cTxHx+sLQ#dl4l5A75`7Rade$+-}?ikR$&|Ak@NC+0F-BLNH74@6vw&%cpf-^&u zO`9M=Ur4G)4Y6576O;5-Vu%sV73h?uN(uWAcRaDc0v2o~?~gdmBu(+Ts#C8E_p1a| z`$?bhQ&n}!UJq^pXi=1hUh(667{{uq7fa^IYghS|#Q_i`+dHYu2vxh5RjV{N(aZ zfX%37GE|-70$#Cc%8k~1gB3>(&h{hOB=*{VU(MDzMgtC*X;A%niN>Z|x1_iEJXiwouV_g^wsQLX-~vgA!;4 zJogrGA_YjU)8CjVvHbYtuXcJIqkK%@H1$MM5V*bj^4M{A^Sqx290@GH;`}!|N+LBL z`qxbW;$l00)Q(|J0jq1HU%=JgliNK0haje0P}%+h6{rs&BRCc*-#u`IbPRLdo)bZz z8J(^mtZhBa1oNRmUwN@mYqDOYYha&5^2#hynl5-brwIh@O(%umpiTqUB0rRbFXYJq zqdUjs0$`0-*MI?c12;Vs_+^VIt(QeXoo9ZLvAHn3r}A4|zRKxOZ%Xyz2ykf}xNOP* z^u3REO5T*E9PlX$M+@^wxmbm{{la6hv_Xv}!M3B3C$N3|^%3OD;k-VLVxGK`-RAjb zjs}tkI&aKL8WtWZ{u|QJL_4IiUky+zMI|pIraw{anZe}vFoBX=2&XcU$tevws@tU; zGEo~MY~WbnMwDlxt+55%Li&-bKcBJON+qXUt4NM-FnOkz)4;=%ux(Cbo>lf@!cXja ztE&c$`2g=_rMzPZ_TE~aThM*_IL|MBQ3Z|!wpdGWSFWk5Oc4)SgnbCD{FvlOo{XL@ z@xVk_U3K&AHUGfhM_ngKOyv7{h3))jubMtaI!drbG|CGj(1kqijycaGBz2y(iMJBh zdN1`Sw4XMfr}AButm98^kcGeFU2sxK^%~IHuqwI}1o=IMV2t?n0do^l z6}Sv=V`}^xL(MDn87s^VU9+uTjTeaG_ZUcEB2x1^dVe}4X$Y==@!%HBOdfR6T8WzS z&w1av#)L9E{s%lrRZISW6QN{O?S0~cL6Bh0b+&G^m<5;$oEJ(A2kRp5Uy5q*-nv`1 zTFNeABcz^1)2-_-X3{hrs?#68cVVKk*r$5It@$HV{pxMhKI4Z0*!g@kGY-ufY&z(t zD_ZZV!I;)X-{Y&^H^k$vpAK#AUQRYQ++){_2QOfLBKT&`z&T&iTRS#oaGEq0g47Tp zT?Bi)D{;)An6Fg+CK+J|(P&@QDjGCiULHjs-H7CtiUvM1ojJ6K_J z|LTqJ)S_v>o=rT*!^c`y*XwO>xd!UoHWP$F#b&yoitl3`Cz?|I_Fy%YAW!l)0ovVX zI?Q}^ECq9JDgssr$K6ZR(a^seRRvzh6IP?bUhr!5Z~EtZ0B}jTNRR#?tF$(;59Z3_ zcPw1pD1yen8Q^6np26#8O~BGwGRUQRZ5vC3 zQ&-cWb!mX|!Fe$YH!ydf)sT^U(Xm-5DVzXRmgc_q!CkLsv$_t(I)WLsUy_^}QO9gH zi#vEYd2Cf86Rj!Egu42w#kqk^@>wiw#TXh#_}JO9OJEZH$I0jii9LHJ?U>#BnS@A` zKFN?JY{OEWrH0w{tOyO_YRznIhPlzBq2v=i0o?VDC+4y?l)@|qN5B}r;ZkZXoeSfn z8L*>LvThCl4x=9XdODe+%((AzkN24XlU&9bG)m0>sL$J1T?gK@<_7iJa^bAp@#OY% zRMsgtGY#4{w9{&B1d?o{bT_rze&06-i4JFIkNd$yNf_%qR{hxQ^Sj$3T`fq>FyeiI z6KpBu8!)zY-J_SY74s<-Tl^-`O#USO?O>t)o1WCJm_yF953K56-9pebkp^zYB@~Tm zvX?PaKi~F|c=!ts!cO#tv@wbB@L9s340a=E;;AAH4Ea(Xfw)o3Rh)M?e+;zSO=N0- z6B<@?lXf`7=-Uyz-ncb{eR40zLMKJn*BX;&_C^i#wXJM*;JK@HaYg$mkjV z^q9k|*O^a){y=QL14Yoku^EwC{fv_ndI4hIqx74W`XI_*INA>GIUzt$S2}rj?INAB zbH~7bHz*e#*VQ{51*h;?w-Z0*qAO_+!-`Otz)*R6EhG;%^4!%XZwIbA*!k}D@awXh zl`3Xn8OVabV9UAE+~Rel0CiA9nF({e#QKzGbce@P8S+`~1g%@4Z0#sIy%h$%k}o@a zNTBce%t0DP<;1WM+i|F}PH6Yt6+iYV`=mp)asVEA^zR3z@m^v5ku|6r0j7^{2?7Lk zFX-KJ3^bYXZ{Uj#gX3W*RTvx%)K3FYYK3_h{`hce_2^EVuFjnC<>sqyvKA3K?3 z^ZYYbv<89&><)isBYB!na3=l2!J;!0w-`If_VKM+m){u4ac0wtRfquF-mWBkREy`k z%$E}mfB?bSI+k}qJF!{6SZcm)B*GSywyY7k3Bc+O_ON7NHqg0j`A$s+mn!JFMhLO| z1=+dRX4%uLiC)zkz%>LzEwxX%DO{5G`ia}|r2UEczG&1bvsg?iu?Jsm6Zo=ufpX_B zm>_$-#hchYmiTfNvU)%3hTk;5?!oQ(PiIe3x9UMWw-Q;< z?j!$EJMTwu8Hx%mNz1RW6dn~X5x_^la=w4m4h#dPT!=-d=oY{|Wcv7oXr+oV=-{P} zCnzlpm{J7#m*)B36k29^NI@)+TK`XRR36zM8SBvewGgOjI zt=ijx3q!-pou_=ZUrYJvcsboB%B5IOa0E8O(mmg&)IrH&FXUnRk@W7`P$!&)NfpT>Yf2$RMtOc$cu(|D8p znVon)jL~(?Id(`(HQwCK#WsUShk;#60S3M|&!z^blU3sOQKljWrF!J`Zx^PMUP}s! zhcmz4BHLmu2OM=%0(8%gW~&8#>RB(>gBqqx$TTHrDj(_%l0?D7`l+b+cD#|gytaBS zBM{i(gb#~Z;L%QRPQ)$}IgxF7qP&(9>$Xqj0_cyDgKanR$=;ScJ-SH^mqo^9f&zP= z)1J~1OGcf}yssL*gK$365qpBNj&_oe{wzR9)$98e939z!fjK$9Op1Ikw*Mvo z_gOw08^8Ew%T9_3k8z*i=F*`B!YMYNf5BqmGN#H|+^X;j_g1Z{g8vif{A- zjG|K)Q^-94h>jzjv!HI|42~O)SR&rAY6V%8mfx5Tb&9jJD$JB_$oW84fITWh{>Bj4 z)fJqd+=b?D}XOeD{U zCIwE|PO-zL_qBi(^8TnL7&<6Em{C)$?;wB)>W1o%vLnS3vH@9MXyg|L)++DtQva=+ zfQ0Hgus3y~U9h{idg6J*9kIaa@_93RjmA;;eiNUE6-pc-`3wWV(f0N(weivQLc`gtug&q_b<; zGo#bexjbHD#TBt}7cRHfB{vOBsH=UI;n0nY0fBDs`j*Ri^734E8~O$}4dxQhh<#6l z)p5GpIjqvJ6#H($&d-tOJT7<4QRdJkH5aah#tfyUL=|h^Lx0d}hm%#7ud@cbQXg0@O-iw?) zge}-it@v$v1_Zwun#AzQOld?-(sNR8^TB zrFhtUaAuwODFj>vn11%hP65%9nfWRu`*n9|67fd8xEA@N>ve+`KF!7gjf{`$WUooG9tIw0c z$t+)0>ejWhMyX7D#-LiX78yky*kuYzYnTYGZpDa;4av?N!ie$swZH53lyIjSzWB=% zdmb1T)^Z;fOwG00Hyr{cBe-$e(xIUg*K-SNQ}HQf$zmRXG1JxC`ej0=-)S+1A>p~M zDClv9Pq3g-R&?j{Y5dcM+GK4I19ofHkJ0d!WWOOfGh|!(T7c9*6;sh{TZ2JK z;-Q8m%At9_QxW9hHiG&7OqYiH7cz?=EXmC+&fMpe2UNfH=CDX-Me*?h>@Nj5ARbEt zy5LEKBeZDlU%)1pG!(6s!jwHi;Q`?6agxB?Wc?Y3LycV!-$u&{qXYN{Y#}6sc)PBk(gYHw)GnjYUJ>q=p81g!bvl~Vs8lsKPT262IaG>#wYCL zZc|ia{qJcGq0B>}pb(D>#$YJgE~876lWR**PYy7qdaT7f+Lm+ch+MF}pJQ`h5_XO6 zV=ep4I6(;SiITAUCVfcGe}NY-#U_29>bCF+h8_D2i`)0*hM{U<2Pc z@Ymtr4hvG6#1}VYEbTQ6MdpLVFM^3xfx70{%5EJp7dcTu<^q=luV@50)kE4Xcc~?d zL&rR*OP;&?Fe!U~;4;8phkv`Qz@~jReLfMltiq_8ch<`(4w#k%nC_-wZt-y0OzkFbBb~wo z@c@z_rscLnI;#qN&UUhoh1Q#qdN<4#oT`C;dI{MP4|I0?-aQ6Fo^?gaqUGd{Fgaa1Gk&vCj^_5xePuvsEcq_l zd@;iSizSKf_%kdpugIA=a}uq*JpIe3 zyBtOFb(;}W;}cla4KH~~A9(%PHBsVOOcafkYPcc@|=Ej(w2VN#>_xfcnh&0?UOIYQlBZOyRBe7Io%ka~qQ z|K7w#TYbnz9W~MiGAF0CLQ`f;DzD;)%F%mnFHmp%ac~L=OG{f90K)!6iKV4Vhoun7 zd2(bGLEs2r)%8E_4frv3*u-4lx>E5*+V@pF>;VW5PiSN${`my|OTE39TPd`pXP5C( zAp!@cu5joI=}|i2due|&QK7GCM}Q$WHDRBUw`mC7-7?{N%8g4Iu-q~WVj86(4vY3t zE-%<1tW17Zrs)wUjQqj&758~GiBqN%-k@=%fxSPLlJR zt(F_m8ycA37KJFZ5nCetQIY#@(GOClb|iP5%;EEgTyIM*GW)pst=|~PDZc~>;~GTm z>3`43v8Ndke8{IPuzUJYd?L!>kne-Mfmn|Ddy3!An-$D)!xR4c@^06A{OrU^ph&LY zA|3eytlp`&OyqfWhvF+psK#u7C7jN0bhfnwrx%iIj7<>V2XVDJ!Kw>=hqbV{MAJJF zPJ}vVBx_mf8Kamq)JDO`L&%s>5q%WV8+#;=c0aUoAt}0Vp>yFb&7YB|+@3xM4OeLJ z24=Taew?sN)7dYgTzkyt5rxTSx5N1+-Ddpt_s4jUI?w}huuoS4#k zl?t$)aslK8B(nSRXDrw!D})bMXr}7#$WZ@n)PSF314fRQ&}|R7Ma*HZ4fKc*h1oex zz#I1zu`ltRCej6PFtAqCAHfD~-=3a{Qpg@2tW%7}!+{h9$i*Q(*zlr_`q2(#Z0FyW z4MOFo^ziYxvK(yFr|4Oveh7a=JNwaDUVZFFg7bC>yWnmxgwNT!KSNlIiXU6}!10{s z?1~eoD?02`5nbc1d=3e4Z+}S-SEY1{k6uM6mp#8gGG|krZ8rhZhGET}+i>&=Rims`;mn0JDb43lC5c(*CLKAj9{8AP-_ocGut zy>aH6UwS>z2%~j|BK$ylOTipkQlBu0T!OLiK&3EqSf=cV%H6zv+{Qc%FYN<~96{j| z{uP`od}!y?g}2I9zEg&YBpE2&Sijh5dRF<|sfd^xXIys4Pj&v(?))Zn+myey*n;yB z#w3nkL>yalo=nI0TjpVxyFX~XcQv{o02H~ zR0vF#1()x1dNo`vKD=Q##v1qLjQHL?(;Lww68A>enb8`?SfV2xT2i_g`zOTdi#fqZ zGC&%X{?Tucl1u}P87BmE{x-+b<|>E|mnL+Q08X`JL$oI&TW&i(h4`^4Ey&fjLL;0& z^T2}y_Xu54h-)W;V2jRUjm;huw)I0bZ7L(+qV#|JIB1(p{PX+sXQ=H?s1K0mslih5 z94E~(lv!V1YUd&%op@LGvwBe-fir*?4u3QqG<{zYVWS<%Xhj8jYr8pDOAq8+AZ@uH z@c-tW$p2M!z;fMd7T01!XKG_f0ItS%1k`&L5#f`ISR~%kEpEg@SqdJhSv22x8PhS( zw z^*E9>O!7kcLRN9ExOP?3VBMu5m{j$QpRy|XvOU@2nT)uJ4!;?U71xWMbD#&U-z8%&EGf~ z8=M8%nim6fg*n5B(Iue`e#_2#qM}WzTvfTInD{2RFh7AM&Le zGi;mX9u(RBJIm-qP>WgTM|q)qrOdMXL>1`}daz8d`^7__;~F+Mu5l0ug1%7~GU)%0NkPWm)Wr4@HDh*cs6KU$(23L3A53^Fcnoh6xw zVCs8cVL=rPPGJ)H?k}X*)-pe$Jh|YGEmbr-nyKT$R_#~oZeg5dAqdEGV=dW`Tzi9y z$bbs<>SmWmgld(3cPrPhT!gNG*7>CStNzx~i7#zr>}x-xn$_LR!O5%r;u7?E88QL> z1U*j^BeG-7djcOY`|oe92Pq}H=V9fBLwfCRwk9kVHa<#GpUk_T9C$wr*od015_LPQ;L zZk=mvh1*ALsLK#zyp)1UjTpLbbaG)f;H=||;vZS%(~_zkj!C<4r7lnO=-hswi6gqB z52-)*IuG;eFi%+B8^}&&2lQmR>#=`A)O?aNN`nSf#`VCp97Hh_ys#+!(a%lvXlefu z{Ksw`E$WrN?+pl;tIvd)DVh$7R=)tm?y>tX2f41K>jTYiHcNX<9}Z|1c+)$ms-Toz zEy?MkM&1;x3i|^kp~?z5mh32E^_Yva7o-3Q&S}4@LhGSX34#~#01wC+KQQJN z(yJd)DhNo`Dr7?BR&eB%KrO7euLg$m3@&7mzsdIa?=tDP2DuvOTp-S0U}_|~V64oF zVHed&GMlNfI9AXP+S&$^>RTlmVZY`nVOl{$JAyH$^OcKBPccqFzhq#~fD~pYe@ZNu zUuAymZv z!G7cACGgdY{MYVPJI`!%Mt(PlPaH)`<}IN_*=GfD$|UC6D`Q7QT2gj{3nfcV^u8FX z4(rldN!&B8|Bbf`*7|KF7q|?t`QUr}7O;Z+`@VJsv3o}JqNrvbn9eQ@07pAIbEhTxsnI z8I^tG0dRuR3Xl_s96vLUISDwgp<>@^yEYMZb5}8)m(i~Os1t4HxX_mHnP`kOvGm|? z>|^Gb1g~y7>9!e=;H;Kx=t>lfx5*6`Ed;nl=~!n0}l zK8-?E;!Zl6j;l{2*L_vSYY?zM>!!n-SCO{*VPZiHK#{kt{&dPFkNr}cO}V4Ff}4ap zWZN}F7gq<5^Qk+d>Pn4gmi27rp3z}ArW%HynHo%;RlQg(-b!frVtyVx&GbpG+JYXe%>#fg-6{ST zjlQtN)bp~2Lnm+*V4=JJ2s-O&babB7jQ|P67)SWl;*Z#tb$*Ksz%i8nRdat(ijiI|FOy3gIN?jjHwHk&OEGm9 zH+R-hIim`g91vwU+etD_{Dz`0f&R*aefLeQOZ}UYf;!m_?@E1Iw0z4YRzx_RAUVgR z(fVoox8aaW8WiSKLyFTM*2L) zxYF;8wI7e|Y@F^CD)5W7Kvdm|azD8SG`u<2MPIre3krKyK^Oecj%hp*+}8wxB=akd5Ia)eDM0S8xPKa+V-$m zjI11O+4}*_iYyyqEsUUj=Hh2$U^c+CBu{T!cl?qaF>ymuMD+Z?aW<6_+I#0t{lspb zFGATJYtyv41WvOEFB_KT)8`SDyVqA4F&qVq4hubx@2}~k#h_{V*VXr6Ke%NrL?%lC zX+Dh%pC0BF8+eWqjkhdd<38SM?p0WT`Ddwa4fE}Vw11(}*o2L3MvN>0jD~9{Fj84P zbXha=2dkcIx&3rL-^yOVxXh{e#3BHUG6L2`$T<7I{g&QK{9uRDo%VoJ#vCT*@Hu>D zg3+EOTR)$@F|Y% zr+T%dPY!sWjuA5pu(>wSCajAAY{W$K+i$6of>COVa9qFwFi9c6nQUvbjP;eN`m&3U zFJ_sY$d}2kG+R-8Q(S1>kh91i+58H=McvVF4j{|lH=dF@b$a-Y(l;S~%+Yk_4U0vL zq4?9L4kg=U^ygNMeN5Z##nB4QYnGB&I@_s84m-AvNfk z`AW}BqhsQ^p2AUZA$Y6~uw}e{pD@E<_Vo7IgsvF_r&<(Yk{oD|z};j7t<(SX1_wro z!T;5B2~ukC(^|M5kYc+kc_MV-Z{*6Q)Vu#%grI$`x{f+zLuC5J;y3} z<5o@J{y+tiOZ$JmUORQ*1Q!=*YB(_ABA_9gBh$Y?RRPxBGR(kVfA5~{yS~-GSj59Y7C18mbX5e1)-=JjhlC47X`8=iZu=F@k!eN)u1yAu=rr8M_ z1W^w2hgd)t(oRw7`ehL>v`ZI*(*4?C2EX=*@&Oobwhz0cN8=jJOAnX}y#qTTB*@5_ zbeT27xu?7p5o#L@_;~hx%=#LZ;wO?&CX^Fyk#Jc2Oa*@uf|#22spXf6NCtiP8SCjQ z-l(rPhSC?aOr-FO7wKb5)EQUO?#Z(9snqALaDIe(c&0B#x&;QzR)?nBmp-aBFjtm1 z!n+=Au0E&eBm=7(j8P_5Iasqj(G`jPnyP~%ux|Y81Qh!oiTbT#_m61+(4QuixwCQZ z_5p7VQdZ@7(_|darFEvG!VrvJ1Pm?~KT8x>Z8_W##hgMGUap8dwOkJTIoZfF_@Hdp zM?f4<#kYFDpnceAy-550eDM4w;-O@ERi|Z0@r^zDK}-KK&M1g$yOhjH>_oNI1CiyU zoloT?n93+fqiq3kzB|F}_>9SFJ2q?zI^iDfp)QML5+;}@Ipc&1?ir|ifGM6&=2b8N z>=iC`SeMW!C4{twqdiDJe)WlPql3(7%Kj!rWwp)46sM~Ex1z9x)v9_^q98`1%?%vz zRf`GbD*oMt3FvLfv;*>Wqp`F6<8&U!&^7^^+b3%1r&sA$u-d>T4@iz88j^|uGiZ$Q z&4;8umHCp2S~Ji1BnwZ#g@EB@4*&3VK{XZNO$R`wGXo6~*nMs9DCc!2tIJzh@c)Z0 zr@!gSq-ZmfMzt!0bvn_ByKdNt83ob>EJo(`Key}uubs+dlnVTwmyc(L?v8ShaFrYP z`AO7=K7~3he-a*{UQ`e{`mMjRMI}v51mHxE;i(KU{(WMIM0{(l9pT6RF(xqzAZXHq zB#s`LoK!+Ay8Wf65BCe-2h}2xnMXmTpQSng478IW?tTyWp64~7g-T-Bu3@6fY$nAu$+f6l2OJ}aj*+u^I3WxCn5^z`R%Qf(swyL~7= z!-lz{tgl|H7s{R!`SWRke(-V`TI2NPf3w*)q8$_YDvmWq`1{(ukv-m&U6P0n`-?UYp!Mhq!Cfl30O>YP6kY0cvq z*A}iNUQj^}0fbnB>Sq`^v+ZKr8)ufO)a{Q5uG@H@YYxTkW06}Y;m`NH-!DMai5DZa zjQSr|w-oC6Ld75oDDuo5wmindLh!kIdU&r*b zfiDnw3#tMN{e@B6{{th&X+dy- zm_z663OfuJqP()-=yD^Tm7+4C5+xra`vi)rC|1e$cMe3UqM(=UGw@LR^SnrDu z(B`C0j=>qIsjb+MA=4YL1`sqYHnK7dd-&uqw&Z_qg;Ls*@tQ`?*Lrw)mNItu=dU;-F~eM*KvkG4I>dGe6A3?sNfz z!BH{Q$K2sV$ZpbMi~T1Yare3i)5wSV&|OP~sOq75YJ2C&z!H*939NkeZe!`y(vxgmRbuFGiP-r()cZ-p1rnq|!r#G~301PQ>dK43v~OxSUhh<*N7q z;3S|>y8A;8ZHWpLw?+8RvZyUZpILxFZ#v%!yyea&a15|Q*~5R(!D&_zxSU%eiW3n6 zl5-)H`T9TPKrn3LZOr2IQ-aZ>fCEsBzJWROM5KIrN;h1ba^uidDw(~v=dmF#CPh%; zQssO~&isWRv{Maj@ZNSw@8P@4h>9@3S@E4ZpN=tZHRh5)Cet1rs^R2w*H?ocd$aty zA&{n^`YMK_ikWk$7_zB5p7hDe)XI&^9-PbFygY5%uJK1TrQ_Y-Ov64Vp#^3z(6<8% z9J?m4Giu{UP{fN~R6p?pFGek)9udNXy1R#TPF0b!IXG14g+;YS2~a%rZXa9u%B5mp z&f;qmljUJ3zfi?s)T^6Lg+!8Q;BcR<$B(!9NT-)zGywD7YCe({ zYq9%~;uE;8pW>RytP-AWVF8n8LC3B#EQcxm`&`E8t~po9Nujqh5b=xi%hOH?e$2*P z_?0oNPj=T68yKbFg5ZyQ5d$SU>M@H*e~hk`5eAHS+4?xl2YSaBG>J13ONQY@MFgrp z9bTlbHTf=MPtC}XMW;&YW(++@5DdOtEK{R}KUDg`ca1@;hv!$p~$afDB z`BacWU0wR=;GnijWOcUrc435VRqAIenB38t_eI-7YXaDUaz2($U006=ZsXzz0d?Zw znMS=BaXXU|3+{vI_Z*RjsDtnN?=%1-fbjmoOln$mub{ zoT=y;wpMrtGE!Ax#kI26*|(%1#|weQTHt(akQ|=>5Qil|Y4P)uC>abfmhUwXC?IM% zeDA0Mvp1wZTw%!wtX_5OEJ^`U+ZDk@|0C!JAcK5vP zD$~`haX!?@jc!V{4yvB#zOGi{hL;uv{qnJ~5SMEvyc?(bdC{W-#I1zh>R**wtIBa* z#LpIXO_sc9yJ5`yOlTDeJ%54||B||#x^$DV;aT-6Bw6k*MFn}|Gw5s`ml|2}HB%=3 z=w=3c>z`2V_B>N_mz4^kqxMy=(6xPwO!~W-{M<|69c2U0yn7?a^fMIJ#%Bax_SgQZ zYxO6^P>V82kJ9{lWJU-Bjl+nOu$%mm&7L!%o?j?G7s@KoOW6$~p1_LX2IH?_UF~)X zw?-=Yh9Gb0!zkcjqy}TA7)}r146MAlAhMoZNyD*GUxnA}u*Q{+cjlSMQACh6YSbg- zhnBFj1~^p@=#zGcBIkEpnb0K9${Ua3zN`k&`D0~>@#0{%Wt2s?-R}<9?V?~|2~eSO zu3~8r*^7|W{9d?GU!s(CCH%GW!?KW{_PtvYP(ca)g%?C5>Bl)`MF2`ratdlJ&g72u zQfa)3qm(^Qv<&TyyK9GRE-a6S3~kTdiz+8G#h{a}duVO8PZ;bya2a3|L%(;*ptM+J zSYoVe*kM9&O2l^4{5*w9Hip$zl?!R-G(TAvpn zxjuyS${3RT5Mw`Cwq*R^>G(%MFuoM6{) zDzaP~d172NlUj^zZ2WW&LWfinw%pTG%YR@*o1%0{Vj}zyrN9um3yvB`lmu&qP(-tiBvKL9X(R zE=JB;?zD$|+E(HwF#|>1+tRBrZE9e&djQRqv@ZKk~sM=csw17R4A$n)$DWotz-!ct0Tj`zuu9H?GM_<-=3_{ zogv6N49{R!BspnIEgWkJLR+X0KgrtaXtEN*Jngwn)9|=+V;i}2^>c_+{p3%el}fv(bAtF z^I9hx2$i5vPS9WQ{&gAtxK_oZ*Bgz3S(Vn`stQaX0HlxE6kwH^Tej!AfRGQdh;FT$ zrW{VsJ&eAh`11Oe0oMQ~uzh_e_ph68JVw!W9^&X*_y+`rgFk1zcN_K&?w>G8OU#kF zh?fr`W4x*UAZox9HxV*9aI-uX$|(OIiXnA+K(6Iv-w@co*e6R7yM7En->?h-9Ewk- z6RzKI)bwBbE>@D`_&=PHv3EeOG>7F75NEz>>~~S!oA_0vAH)*h7vFiMboB&^mWLpP z1U@k&LFx$0&*^XPPMSZ#ik@P3JVjzB5Y$_ye7a<}wFH#ctPPr6FSuo`{z@e}FcrB? z-$0U>&Oa=x{S7&?A5t!Ff7{vzYVrtZO}Nu1z-J0?XfWX-U!+sruND$0k?0P%bPAN#PXAE&m)&PlftzVy#j{+62fH&JOnG~ znl%8yK0r^WFKCJ>Sc}F&Gk}3U+m1tmm=!Y!RKvLDyPkd*-A9AlI!u@|7h|+f75KDC zmHd1@D9t48M3_W{b9FvAE8u;4pShxK#6V4bNJne)WY=&v+%;DWSv52%NPOd&t-^3U zFc6>6xNx!FNYmgxoUSfqnap_PTXG|HKwoZ7Enj577t-oJe%T14XEsW*_HL2Q-4Aul zaGL5$aw-XGByjB=^~PsMedVAT>hX#D0zrYRl!(tZ_kM^2MtG0>{Yma)oQu!2{mzmO zuo0c3bgQ%LwgiWf^#Z-6=w}TR@zl+1GgTZK<(?%EZS-=Ab`VG;d+bPT!jHz zb^r}X&cQo}stR36jUH)RJc&PtM4(RlOWeD^z4tGN)cJn?c;*tWBjvgXbpw5KGIE*X zkCBR}mH(L@@7Yq?29Hk4rd+F_sJWcr{y>zm=-Ja$&G+K7qTuH>4@^QoG z5F@M?9#}+bbh4t|QVC}emA)xppBM;DF+}%oRDO_dr7dfNA{6=Gmu+FYN@CK(=vabr zhu$!coVj^v!Vr!a8h`h5Z+o(LQe^XAFwb|T99=lzoK7Ep(@za@yd9?iTRL_nA+Q2A zC+HmrN92Vca5(uO9i zL?}VbbcA_Zn6qN`F!Am1ROz(S3(}S-8!2GVN)7%vN@xy|EC(XtVRXJ*8A*0KO8*PYX zGIjeIm_21M`^e^qrTga_k&9dF%`@NWybOe7-sPayLEloA)t0_c9fZ)UAqh>%hDxEJ zBpULzyBCIG`(Lr*#OHWkIyo@5Pb}CgJfk|xhCtMb<4CGo*pXUWVH`nwu>!$hephh+ zDNPC_lGkR^J9+i_=ww`M*kUtPpjtfigZ5FnR+5hwOR<{I)EI16ag{+PEv@QsjZ z1?%OQOp_eNl1AWK8v&oc$GrU)HxAo-;&S2w!k#oZOcEexn}4~s|3-!b@4Z(pWIgM# zTL8E+drVG;r=xFR9n;58u!4;edS1B0SL1YtE?RtsG~O=4`#TP=-+$yJ15$ANqlQ+E zHGhcKNokwW31Er1|no{M(wlm0TVlz(W? zI#sn^=D~pK@2F(tS+3(fAuyP{%`4)s)~H#CP2uWrI6*T`8btKnY>|Ew~F-qhRo~BpI>tG8x^6TK2rttxJqTf3K>~E`+-6eAOU! zd|OSf^&Z@-G&a@e6&S6^)LM1I1^-2hl#{_SV#~+0Nnfs%ncMR{CWzx*!u=nvWZ%MX z7ETOO4Y}fA_^G^Oxp5?T&G{{pm_xT6!c|gs^AHTD9ww=_fK!1z;{Is2KX3uVykUC* z6ZlEI?SVGI;(L;s`B`05%tXL(B*4hCe;_mODMkXoq>iE4q!>&{|K=0PiCJR>q6l*N zZ}kSAuTsEZ2OU&=l}JoW1TOTaw-OKaub+nsEHI-aqc-#jn<+=Qd2_B}LAsa495kHv zS*hv>V1%CFKcSZd+XG0dXQU1&eh3bGvFSM9zzV1t=vA5O8M3XVI8Vyip4$n65+Fx~j!)h4!Ej4x81V1Sch}(dU^a$F< zrI<&ODdF<57Am3to>bjHejtOx4VD&c6Q+@*bsdN=JGN;;p4zz zzK&WmR#Ly9BF()WQ^@DlxxTl;BBHsz28mOwHm4K{Ps}a9O;GmDS&naRmZ_G37GljG zO*S}f7cFu&T_C0=ZMP>=+P_aPnHW`4Ti>ox9a(HEHb-RV(b$TL(jzgZsv7Y^L$M*Eug zf;F_2x(yV5k)6b;6^z#d(clvLN7Mnov%#xehjcGF)jv-2iC`J_7{%XCtji;D@Ei8| zxALFcm~=QHXKA1#t;egwkbskcJuv?`y1zCzb3=PG+Lfi3+BCgg382e;fBeVK0grWP z_piz&5;?kcE7KrVV@H9pK;D3zNZ5Y707aA0+&1w1js4HESD+L%dzdb;yTyZMg58Xa@aU#T{4mW^LV~<*ejqK_fjj zm5`aJkUsqPOWiO4u8%tKLY<<1Po-llz)F_^C7}FUjCQARXEA367Af(aJq{Y!THh|5 z5W%}Tsk{*8w3eYnq6&CUJJSrwizQ4nRQlBCX{V z_r=4hLEN-y{g&{ie2<)-oEYw%MRFl?9F(skKBmj%qHxunP+mlEy1cfW5*s<8 zoc_d7yzRBNs+u|Ez{V-xu=x!gSgu_BnPjx!aa0FcU;&IM@`Dc_j)~;dqoBU_C}P-i z#9ircA%~BYVlWi-@a}%rxc(*1{M0Z#`}LngCEOQZdsp7uq_{1;)DA`%1Z_K zqSmK$yq55%5KG)J5@h{q9tQ?;hg8c3@tRG5gHSiU9b*yV9AMR^NBhS;?rH{m@(qvj zH(G{M)fY!MCm5R(9P?^lY~Eee*PV3_E^p{pSN>jG0Cf^NX|;iK5zSN^gWnwkQTMrf zPTS_x#=JLc%GfC?(spPkwwz-tTI2>hA($ZspGFMKbf$}0zgu|)PcIewnvQeN(?x&U ze<=7>P85S9Mm9;3u6hZ30kVKtDU*pTGBC-x<)J?Qo+Fjcx+6;2CF0+Pi=>lZRdCUQ8eIAv_)qlq`&z zwU|`A#>3Vud)4^Y8rWtB(;X%M8vLTL6^15)RK-a*A2|oLEeUdE>LWOT9O&n{BGe>> zc8T?o#P5bkvg3KvTSg_MY_o1eOv8|!$HN9>kc$F4{k=_-P`iPfTvIo^2)t3QOLkvx zY#c{tSC$9xxrh}}zgqn+ry9@wA(>c$xoPcur7s>EF#S_iv`lH!4%lY1gb~SvVx{Sa zyHw3ygBc3@w0KhS0<9j!tObnbuYrdu{f>b~+ZGgh&5X5CzZ8yMxg0g4)a^Rq&F&lz z-jAS?8n(?sI@ij3ev9OCc#4VL!vhp`bJOKZgiJq3yxmKv4cxS^f1!BapeY!FblNUO zI-Rb?yeFi~{Nn}x{Px8b#D(pgPDF3oPVr=8py}M6A1b^D#%B8)4?1$1TyD63)7iEA zqL5mop7jOQT{`xITg?XanYEaAM%TjoeFd<&(;rQ!P=}5F3+5Md!Tfcnl)^cvTziG^ zwXR<;a0oEF=8r4{U6kP$CFnaYiONH7W-AFsNVVjpV`c*Gn!xnae@R2LKgC`I%jZrl zL0l?dSWZuemQ@w5vF>v@xQU$oYLt(C@bjBo>GZGkOpo%{*9x=aBNsxlqz2&lA$e-W zUn{yYC8qV;hK8FWuf(jhzrPJApH7Nj#rtG|Q9|Xkq>Q-YYZfC&&olAmFcf`ks#kj4 zh^3o}ZFFqk5#=|#09mRIfX#@WAI~i+<`UOMvBZye`_3CPhp7hgocwWty{i{2Ne8)A zqnb2+4})OqRoY^->5`{zJmxmnk9_hx2%}$M7};m{l(@cQxA(@#?gVp)7*T6r;07Ja z3(I<$)EN-bMLPVP6b#j1ABANk*m42Rjrpn<`YFHM`AH#YuGZr%cPMz$H<|u3IBEX# zu-T|XCss`EnpSMQ8<+UUY5NTtXy~)BpC0Y$l*ptQTQaHG-=%c(^ug*u;}U;%t6lK} zG(Dm0HY~-Psp=u8E$)Z!l}FfFhjuFQqTSrv@v(Q!j2`5L(Tq*GI)f|VaCe2zJ?kUQ zD&(}`dSkGr4CzNTi*#RMR&jGD$HPFR$M>&Z(PLtsUI+J~xm}_H)cK5?OxsdQ?d}z$ z1Rid}0u*BkV|Q>Zqe7yrq~BjT>pyl77!y9(#d360k5GNSh^YwIKFei+c=idEVuF1Y zKruB+-pe80QJMoGSt(-_g1XH3=TdF?gc`um~@b9oCYsXcVL^OJphE=0G} z4(m!Zp1o=sLun6?N~0_8Coly^VOCChneGLCLmCd+If4pHftJ6s=LseZmu`-g$XJ-P zM~{!k)HFu9aF2>G+Uvbt5ARm9TZt$y6o#RuiHGP>>B|DP7(>BKpvWAIHlV-XjlMCe zS#K1xPo*8o6T$h3{(p46V_;rQ_r`n2YHZuK(^!pd+ew4QYGbppZQE&VHMY^%I(MJ; z{l7Tpe9g?B5BL1C_Uvn2YfY1y$_zGQ7#Zz1i4bJq{MFJd0SU>SwOwMU&oC#XTHCjwbof zsL(G`4CbmJ&5+k{g}+}HYIe@+RO+68?8(MWPRQRUs%m9{RlDi;N%??nvw;oj{;G7pAxdkE%0^mb4#ag^=+|4D+Nhfo@^*>wa?m_-cOsRjn!}g^TW11Y zvb_Dw_N_P^>+v@(h<`OYP?gU0W)hX(WCBa$|B>auNZ(@TXh4~CfI;kc{P}Mk?k_xW z+!PayIv=@R-(rgItzKmql01g)Mr^+u5&3Km7ZPjRt;|n^Z>y*0%->ApDUPS{G_VzS zK^Tk#+)G}u$yyEzMXwF%z!A`#L(qIsNM7^yvAU{Qh}If81tAn;aprn zc~iy?lRoCYaeTY>r(r&gmrLI=&wPZc|M?N{=HAcmgt3t>y3$t9PBxdn`T3B>;(o&D zWiH9J>*?}MC7ypB`U3{l%dBY9TTbJF2}^t^%7wb{u}n&P`j$)=4yrF`kNTTG9?w$m zN&(W|D>ACorOnBV=2TTey=clNfBNL=6D&Fr|1v{>FMgJW*kU*VY&yqt4@5;QUV&86 zo#lu8QULCKC`s>6Cc)@41-ei`%c7G0$XO13t?1yu)X}rX@H0>d&0k z5tI8rJV}(U%SKZvv99Md?dk3k27b^2XxVUE)mbVuag%Bv(DJNQmCtfS zaiz+ub1n~)DIr_^d0uF38NM3Z+!F(Lnc+W`wh14K+_W3_l8m_%j6%pZ-Q26IaS`kM zRa7uKf5%{_E3uzlu z{B`UZ-;+=VssrL99(ZANW*6aY0rAvJZCQKc@ikWx+S&j-%TAQOYsU(tf8gH6sr_uK zt1zx<5?On(-7#V?Y}0w~MIOpS+vrthaz35zwK@rXSpxYL8mu-8OV)9V*G?Nlzy|+L zDG?E~_{D$57|o7$z}S>k#RGysCt9US3skw`UOGsIY7zZi6t z3_RDBr}jgXymVHvFk8IK3NckafjSW<|CvSJaW`xqugW*NsFNH)o+ns1o>YioM&~<9 z>r|;X$Av*XiMWOHd-uUnT8ObiYIk8Fw@|FP#jtiaC$G>76O?q}Fc0K~Th3GoEcBFv zYj^~HSr7e%Y_boY<%Eo?Gr`;_DQ!>0pp%P_A&wK5;8SudEI5@Zv=4Dsp43SbtbNuQ z7~LRqv*TpXQ(X~tlqB&*g&~=hL^>~DQlMBn4qemQ!xdJba2&MCSnsQdJcz;#t*GAg z5b6S(RGtWU23GrE+fHQTaz*+8B|$9=G?)rVfkWo)$`;pw3i9Fozb#_G55d3k7T8uJ zYqt68pbQu9F~Lq)7^iQug&hFo(*TtHs#KkZunq=D?}H`$t3!3CT(J%g3-DoJY1=<4 z7Z~TtrwC~qKsM3nu1zH#@d9SM2=c8za0bd>oePX>V9;3b#L|$|4~R(azxA#ExUPxb z@x>40gS9G+rp7@?-II^fhat;sUIcVgUv|RnLkXvpq%fE~q6`7;hv z9KiQMg29Kx<%LI;ro`J>`Zq5USGPuFyh{FpEPya@8tdoYa4p^$H>EJwlvf#Pj~;il znl={3pOdgCfirgw<0><7)U|4xl*8!7vGO(;gL52GI#cvTtWk+GWZ^;=CKK{qH^bHL z{)D0dK6(|65e_X)R(fFe3o1tMiwT?4?09EK$GQ|o^wzR~l6_w%_Lu9CL;3eU={jR` zQ|Q}-t5Y@6Y|$WDyA37kv|OE{gB`Po6+g!xd$hld^On87t#x@`Zv@-5dBW`Y;0(2W z>Ta|Xl1_-d!_RT^iSky#9eOA9@SK|cJk^)AvPTJt#tqy%+W%9iAP79d>jOE8CBMah zPV`8{TQ6Q-(hd+HT0C;bt(mQUfs_SK2dYi~s8V2Dw+=M?SNAq%VSqPGp)&MMzKt1x+j4 zeuteeRb|cWw0o>PMlabf_Xd%>LWHWe$3*ucXWwu9wyS9n*uRb1Azp2u*R1|>6@=3G z{Uv)Pl$P+nmoY`bj1xg&^Ueo2@IvCJ!SYP0qqGa1u5uNo<%M&mLyS3!p1gJ};kp)~WtWchY za14Tbn-z&)JmgGz!iA)hwg87s2eOX`#+pg0BoJ}Sq1LSo!f$tZKTM7%14OK7`3y}d zrttMeAc;eVa=Yyx6GhBr1t~T%Yoer6s@!|wkXX5ITQgSMXtc_>w*9o+N#TyrqeRQt zimxwgw5zyu^ijb2^g2n3kbbHet*ftZT5SOT`Jsf;8vgS>CXzxS9S{g7!nZf@Z7KbR z2vCnxg|qXktYaDFmm0hcg6!h2kHCh}0klG>S2(rz@48x{^8Nlq=iTEo3dRx%y++&y zJsIDDWVzVBldNVg-CY$OG}B;hBrk-B3faWq8jdhhT=>YRha_$)?&^4wfG% zKc6l0rX|%C;L14v`n<6dq|oDMX5Ec{k@3 z0BXSn(8#a~796fLO33fAk>H(P=Rhrazat^-+CqV{$gVs;o$fSNHP~H>ukFNxWRlx# zN>;@bZqcuxs&g+i-yK(ua*10BO}aPE4oJ(xI3_=;tkxqYx0AZs6Ww?Ih$=_>#z@|5=VMp8mBy<|C7kho9Bdq!kP#_;c72h3 zg3HsQ8QZ=*eHMbmHN$xe-XyFKI&{oCiVjoO2X;{Uq5EH$csWUO&dVPcKI|iQUVI4Q zi0k(xO!aVjUs_Yn$!+W>;KsdG$7K=rNZSPd3hP2?Pyh8R0KaT4f1A`H54%iG%wAdA zR>XX{vwd(Vu5Y9i(-~2=9mFbRj;Is}<1-P+wu(^r7(zy+q(ES6{pPozdl8OB$mtr+ z%e(HN=h*!&8cI=4H!mx`!QKsT&YF;YB{M!ZoqyZ@a^RA^ia!sM<8j^+_tZ1V zU{Kr`krNdgH-xvN7`Zqb04WPu^c9eGiMMtx#2@0ihdPx`4E4N!mQ~Zf{D?OimVGTp z-#iB;g7a?j+4!3v<*r9Hp}*;*o$SnK|IbZ!WvZvYum=SOx@tV>ij*~MBzAf{u2AVd zUM-up`=;^40NuTcJaokl4zW1rF!Z-fS4qgnC&hGX0!v&;b?N6;%g(6I|;V*RnPLp+h{#RF2*_>qTW zU-#}l$MxsJ0QBt>{Syt?_7|y`A1lUfIM{zr3wIFBL8-(L%^+mqWqbpNpK-Z zM#=!$-wk@CUF#ez=QQX@CwtGI*n>%XaxSZoPzZSuPXpF#fEsbD?R_pob7ja(mJO|% zHS$JY>6%u~Ns#8%^d{L_P#t*yuurT^$Au2u26d zQVJ!a!prH7s|eM#T?xRoVC!R{jQYu39Wf}N@sukv3Cy!gdx&FwhVs?j-5cl6Eokgj zLd)Hm#shtpi#}W0%eQyHX^dDEu+)@to!$16E1* z93HBc#Ft&RjWA5Mm}ikM_GS*zI=fST+91i(oA}x=tr&4E#7BUmIt;2si>y2=B@k?z zmkfpK2JFT~(#wesK1!5>tUIIfT*K&WBrQAwtHwS#lnRN9vlzbou9*wHElq@PYc?Yv zWVtVO94$@>XS48a6_xrD2{j}k#bX{HK8o7X!%HATLH8k&MSo(Dlc5TsjvD{-_Z|m3a}wRY^5_f1 zipYKyzBLFn)nP<^s(=Btn4;$k!Cm^Lhg6Yy;v06kOUAQd9^X0vc{Ww%}%%z-1zF*FkY=0$0c5&ip-~T7~K(8edeakd~ zuiOV|K&x92ojszV$L{{?csw9=vxKKOJyzj$y(qJDo`a7noMYC)#PPs0S7StAzcMR} zd@PyxrxJAE#-QI4OrW1jPu{sbU&Rq6f27}iF0080{{rH^aY=7gWYZiqYy<->>UItY zsmNm|v4&nBCk{M0ITU&K(t|}h+ozcJr$?W?-zN+`APzo-K9KFc9XwdKQp0fc{E5TR9|Ba&fk z-jep2_U_JYJw?U~tX_L7q6-@HJx)m1N%8mPo@S_wG}lso+~)ME^Lo(OPOf{IecV(( zIj+&SR_NEb=&mi`#Ei%s&eT%2)+S*b+6hKj#A{Ue1d)*_GikK#RV&9_eaQM#Bozbv z9GBEl(oeOEuo*`;ZJHraR)%+rnfm`;)~yks?-`v^8*cUnlHrgV9VLYE}-iT$qG>-bV{p)E6YolIhYB5=U8TQ9Cipm6TXnl12<|F7}or;Y_j(S^i?=8i93rOLo>I$ z1b|iZ=pm%qzOVKws98h`c?Xu+P-tO4MJibuEAw09kP*u4|C^^Lmf!q*_xP#XJmcu& zYL9v9qiyVVH9#(&z1c48P!)V9U(bzsop5c-f2t-Z(D!UKbjq3pdT1lxG#o zUkSSp{2~L%6iPk*FMNKR)GH1d5X`qv5d}eXOOBdvjXp3oZ{Fy&Pa9BaEM~qJ)&9iy z*MfR)ylv4+l5>)IeV(kTre9+lOBYdqG$Pn6OvyL;2|Wgn-P)FTvH&y*n1$Lkhh1GV zOL4+zYCb&mVYyU`^C7hST(RY!`$RAg!(K}>Vn^J_nTN`f3fleh4W#h_yxUH<05;F7 z{h^?$dX!k5V`}Uav$6#wGHaPclCefS{HmN~w>c6qS-6#@UR+kP7-oi63R?vkKU{5TVOJMrGvPW$ zAp|3{xEnscR?A$o{!k167;>)PCCx%Ou@U{cYeWf-b)|#7;`efR%HT&zoGiNe{YnuQ z%7Xq&3lV4c&E;%#IpA$Mn$ttVC{lanS2aul@p?A`OMAuV{K}jPvGuqspW80sMgD#2{JJf1*sBdbh7} zE2EP+m)#@<;_4LaJT4Dy=`AHN6^bB~#_(UT;1f5?EctPe4ZdTE(7d3`Qt#CkLLC)8 zA)b}5$X3+S3GygjJc;JH?KU%$vUI?n*S=--0Oloz>n%dv-`;T|(#m_*C+{Ev<_pU& zzf%~7zDuGP3~t=3QM&7tL_ySXZ0xno7`6~dV?=-^d_dA_{aCnNdDk=t`dZyD9DB8D zdwmD`xf9la=GdsNID?#!;IlmVNU3^}AOL{G09lbF(6EMzC) z|tpA6-^CGX~>@-G3?-Jewkw2MtyYY~1)R#T&n<%r`1{*;oTF!F{QwOYha;^~zmME*%Q*#DOw z*mc{FF|5KmdLy9AuRl0zeKiFVhz(HdllcQDNz0&0>}}L0N$iAcXfY+jF*iBy)=ts4Tua-75}zc60(cRI4DC+-FzFUOhM5iI zwLUt+PeEz>-lN(-bKw)bGHXuWNli#dTRM3yv*x93n{*W&22KC|=AZ zJo5Cy!pYI)jQ#Lf=_5?0V~|rD(m!hD(h_z^w5iW&TE~YQ4K~LdH&W!3l z#V)1~#q(S-?hox!&7vj=0ls3sb_9O{#rG8eR;-TG5{PATGNmhX^;FXEiT!c$ z&zUMK=I@zG1X$^px!7`)oL|(t_!#em`6A#~>?iFFJ|1o79U^bxiz@cB?I`~K^^{05 zm5<@6^%LrvhuOh^Q*ZdkR(T*kz;IUepJ-)*!WZmA-OhEN3PPMePzj8H11A9s18e>j z^DgxyA+FVLEliD>=eLLfco5NXz~Bq=Ae7el|BaX=$C1G%b)JP0WffR#x|XaSfoW}= zJsjnRRxz^Sp#r1IjCi;0oq3t>Hy^LOr{k9GmoJB3J{U5`l8K_D{bX1gxW%VED|NlG zU&JK*bsH#8hFcg8ZH3rER()v$=Rk_7Jay00*zLL1RQnU!UkvC8D9)i)z8bb0nF{Wp zZRhoWjau%vAaGT^s5JbT7rOI31~u*HuaC(|DU5wu2MU!DmkPu+%V%a+NWvH3#b*-! z?Y~Sr2{Y13D;Q!Lid}?oYG`AAwyOW`WcpoTB#3JU7GhM=elYI0XbG2hjan{a8<$niYCd9u zR@`+_mjFjfU45ZVUQM$#k})z!9qfgJ^MX^3 z0U33e3v~D+bp0weaB4WXJ;`P94q_7|s+h%Zm}U7kQJh$ebeScZD7@W3Jb+H4x&Px) zY9_$%J4tG5_@f5iap){*Lp9`RGpEfmB6qyb-7-4;tQ!5ZL`K)c%Yzvz=- zMhT{!D}kyKa+S;1>u>}P1C2lVdz(st!E3-8DI2e@=Atgyi3ld=?BmVvY#~aPQE2Qz`c+dWpsRtNT zj>^a6bGN!HZ=x2jXu5sjp*(l#{>+g`e7w}**{M3IC*Pu+X&k7*i}dYC1#<}T1ydO5 zt~Eb}ZTRkDd7b1;B}%1oX4UU7Xp14uG3RNQ%$jB{z4Ue(q>%d;aU+iH;K0#4bX14s)0&O;k8HIrIS0e?p)Q`RAX5z`5 z))&xJS^GOEvA_j@CXPS47HZ(ijW6r381Ii(5z|NIrrSF>0>E)#N!K573mtgCb62z| z9$W7L61VwB+4@gkIQUa`Lka-I(uD5ZY|@4}DQ+A4?IO!TX^6rrmYMYZ8*8c-tQ ztN4ZRUuGwLpCM@XAbJ$r!=&|LXum{V7u;XN5AW%8`!&k-^OvgSVQsO*nyv#k>=(rO zq|Vzr^t(3>E}Jxb3DIQ^szO+UON^$E1#=ap3M{1C$zf(eu&>bZLAv`X87KX(ckHKy z7hXsTQTw4G-H<)!rwtG8@)E&4u*4W>xv~~`g4+jogdXMr;0YvtS|hdg8gPKFsAlf6bv&qrbSP){0?3sa00ON$NxxSz}^hAW*`7%a|rWd zX}*j8^G4l|u{6e#0Ui($wAbl!U`lTC;7x^QUuk;BOJ@o>J-4!^WGdKYw6dU=v9bWui|M^lv>Fz5@UpL;MXRYFgbfJ&Nt=p{A}J1i|ZmU}IZa7`+{w z*ZYSC4L!5D4m|xdb-9l{gK+YQX8qwV>3BedF=d*AqaF)>V_^Ow%2HjjR&73Yl?`#v zWUO2!_TBmrU!iT^h&z+&-Vd584LppNaM%hCv6l&vACh36b1zBwZ-WB@+ z0N6m#a?Ay=5Uaa0N*J0G39J1?e2#zwMZ%2pM$-QE4&ZpZwNq)>KG289K=0;A{Bm}u zn9k&uBqq6#5ph_WGl)cAaw%-%lERnp-*VzkpN5XK3N*x^OVBl0 z!~Gs5I~&26V86S`Zl144TQHBOzwNK(eRM7Wr%u1Uo`g~|NIy1#>ATFWzf@V0%%F@i zVq?`r)^pt@k{@Ko2JSWM|0!WWztCT}?25OrR6xWPVCO?@Okl4dJtDu|JMhC3d=XBr zeaki91U?1~SO17!P`^pS>S@#HhAh6lvQaEz-eded4ir-VQN4hUZ=pTxdfc;?Yr-+j zZDKe06t@P=k1ar2WoX~=*1q6_VF)P)akq-(`?IsI1m zPk+*O^0i_nk|kvyj^km99}zdYZLN?hUU9DeOo7bL#6mErih0*{L^}&aeP7^{xBCdp2;Q+peV!VKF|yeR{0KPI?ztD{<6^XoJ{@Rln= zCe`KR7pN3EqfWu{tL>NqY-9r>Q5MkNrXlVb`~HDQpiej+CxyrE4y!tn)TGJ1uJk*B zbropdP_;(lkHlf^%3k79LD$mFT7G*9;Mw3qJKR0xHvmPm4|AIOweX=EA~!sti*Cp0 zK2`d(ut<4gb(-d*mS1Qd^V5K+Wt@PFzY#^kP4JCgRrJKr2W0=iR&Ga75~2n>W1_f; zqDR#pN#rRd6zMTIi9P{s4O6jFtd&zyD)0^+aZ{X$d+RmVdZAoM_By=BfaCyTbvPDK zv^n#-sYUgPVUcfBJ<=nJ9`bK(E5puJeGHRtUw#^7H?ci?!_(HIqb?Xg*jUK7MS}gyl5B$qYc<*8{y9Nw$(JS$YmWfK zdWsrcU-jsm=@8ozPr@LmnO?FO8rJjOlV%}JRd;UNnp@&Wj3Le~f6E+6ulZDEP66h3 zEDJ#Qt4Q+*slxcDC0;Q{Z_ci7uii24as|m0yzFy#KTI0vFyJ2+MeOJW;u*B;W^_es z-9Xmu2K%w{S6Nv@2P&pl>wz~4VxByP5!#I(`90}oMGmsnHc#ZAc$Qs! z^FC!-f@8P5*VLFMp-tANZ{rI1sC4$g>KyQ@RUk*^Pyc~VQ@hbY15e${26I*I%Xu~# zLBp1w#?Q`>7t`+y3iebkMQ+n{3Mt zc;9*m^|dl(KAhJJFy(PEdK=os{@k$Q(pN_r#UhB>+>3n*ej+j!)CfNf;Tb&$ndmnR zEtG{sSfl`85gN&sgysDbP`^l9kWeeqttBWsnvHC+-}Nyy7iq6mBIv{2nMwoJ;fx;0 zei>TpvP8ZG#M7rLK+%2xIUwIktSdKuF>6sv2J!^FO6srNMp9RmZMC4f+dT|T5(KeM zC?DX${UEr3Oa-u2l+1)Zhx9O7J}w5k`Y3VhVbe`4WS;W08OZY6g+cRIY-8+NAjmgh z?9HAxtI^I5BC9xM+lkyN4I+^SV1JB0G-nz01I`AzT>g>X{x8(Eva=P3KoX$v4?H9$ zR)glh01*ZTz5mhP{lir8pFe}jZn!XViuFsLImaB2tjcLnni3e5B#6CquMse&L zJE&~QF6-lzI+BF!l%Wbg07%1#B=?(4iHJC?KMp&8qj zI;UI9NoFcAhy_3pos7#e1LMriry?+|G0idODGy4aFR6)@83qQQ%|grzV@+6$%KAxG zve7@qQE51uR0ldN{j~ckpbcea^;T?)JS}3Hc4HYJV)6#gD@>*6H3`o2Wl^(Q3l_1; zLRF?c%~T+gk7x1%U>#WNgMN^#v5zo`i6YoKP(s^5Z{Hk?#6L35^4O7Kr(XHqQ<54Z zeJ&p7*Ea(BG>BTsbH^{W$g!nHHKW#${0D{!%YDQ5o{4f|J)%UP$?JAh+A zh4&xD?62BS`j}E}r0H22}d--SU~z`t({+kdw|enEA^@6!+L{Tgn#)QVYc6!v#Tx~+vcyKIXfv+dNk*9JsS_1=Pa&IlnHhG=4`N6xfPlUR~-HcA0 zwmba*l0>DsJj?xp%%XD`0k=ZZe|PkS~=biGi6SvQp^mEc8{k?)sk(*n~b4Sr}AL zYlWnaVtRgJOml(f#50PHWFpa|mhvpE&eEZl07uw1rF)aeuzK(*GWJjG34#N^fIO(v zF4}B%Gs}oNFz~(j0j(~~H3dyRFTyDRG%C(%1T*q_F`!IBX)7<^x26yNem?^H{ry$d zAb+P12q93cSiZGPzmK`ziA5CxsO*to4cQqnW4>%`Tf7IS_4e(CrKTeCi9jH7!r0vjz7 zJg@vC?P$S``o|jWFXh>}*p0NNB$*2( zLx}QN>N*PST!&y%epO|{WGUdMNWb<*1&yQ~H!>q|4})62J}Lvk_kWO%Cm}Q60NKN(g%IBve_yyZRb>_|L*DuH;E_{Zv2O5{XcCukC=cNPKXlUq_!`M8w6>JSH{6L(X~DDcWa0BPizia>Wm&E8 zdAf1v!X_J$GRXK6ABIMsV5Y_e4mw|P*s5Ai$$QMLzSx_oM882w|iVm%GJ!8y>b;(3*zC;Xgp)I?WUyMi9iQ z!m|QH;O9fPRSR~-sufd5^jV@@W(}4r~JWFM%u(W0sP5|9bZ{)({Y#&YX$M%Qb6E%TW1ET*MEE z8ZZU$FTw0zeYWQyzaA2Qw%tSofSR&8+{5vR#I0GBpbA$ze`<`1pirbbR1L;rg0|u5 z-IJFKCxpkX^cS}JfDhTq6>@HJtmNph+v}v_AuM&!-McpYBPBRE=A`PhBLoHD} z`pH6@V*0O7O+DCN%*j!jOvO@%4Om$2)0Hh`!g)8XT_s%XpD;cn%eYV{omQKSk=2`) zH=3z|&_e3RaYld^EU7cyqdkou7&V_zTq&G|U-VQHkXB(wDJJecXH&CG(bbFctMiB} z5$Mw$41QT2nyuWy>v+3d(Ly9;$=cW8(ye(1<9DD83(|b`lcU(sy3N(Q&^zNKzXNTy z1NiCH*sVYsu#CfPd-194K=3nl^AKKe@)yF6swp)Mb@$!geeLg6pDb0(VZHi7`XI#A z#b3`+(H{6&*ZE3(#A=zv$2gV@3$gDk8SV=Eb{1M%If*GajdyKHigXGe@?dN4$LvEE#!v!(1>8ql|BTM zSLRNR^S#BOmQPQZ{=V%rJxneFgAcQZ$wQPCx!; z?;QL?!Ov-{qUDJyQ)nH7@0QEp3+6yj`T}XhckAAxriH?djCWG{w=tgxDubNtP}Dlm z{%_|5f%VxgJKpJ$+($=`EfRfPerBAt-*w0jWn%plA`_3yGkQyAmL>4 z(RN}IC5N4h%K<=3SL*#8DN>NV6S2JozN$5x3nf9q(VgEPn{|gx@wr*5ub0b#`TLS* z&C%M4Yd&v!hKAU|{6XhG6tV7KOhXD#K~e1HTr7@7a65gn;vb z3fe!?81S$UY{i{kGM-AT6Kqhbqi6ZC`4&&i)9ch7_zDI55=!;`n+W)KKX>CCNU*g{ zfJ|Y}m-msNH}A^p3RgiNr?ZfALLB4vtt!SS5_HNbv&gxX2<8J<$y7^bnmru|=_6M- z-E+KGwJmR_K$n>soRw5&GCx=z=6k}~16Q%b@cQETz`D~9{`>v={RJh;CqUIeKIONNTnvhxM_Jn%Rr^}k!(1zV z*oFvo&bcUNmtnT0>R`vPj%qvA^kDtLp>9#faCdQ9WBD=&dC^AJSt#p`#9e|E& zRp;8&7-thPFZL#Ws!Ur$m9WzX{B3H4QuF`2=e9+!pxhXR4&dwMon7m%FKn*%EO|oQ zctKENX&CAU`XemOZ~n3Lx5RBjtRaW0L~h7-m0+?Yph!c6Gj1cJV<&_Hj*=A@vgupXJs`o0{3Y!`dH=!=2&SzS_=Pg_c!ZoOcf{JUWl! z58l8N$}-LDXy#_}7>`Bc)P<^_f$}V5SF$i7?kw1(9$nwqS!4*l14=G5=cqMfBf+oC z2dw=r2^Vje<`dnb4roa{g|FywvhF(z70r09JSXV4KW1H5r0Az@)bR*-7wnI3pkxi6 z(_V(I--v(YFf#gdiNRX@d;sOGhK;Qq%SNL(CIt#Wk}k^>g=w=Gkhc!5g+ z%e}XL=M#ZfMi9&j)nzW}$GA%^{_K4dF7omH;g$oO0({@?{LU!?du^wZcpEb2o}Lk! z#&n@25dmc3Tirhkp<|X@aDd}&0Yx>CBB9hnV08Jno%w%SBdZ^+q}FRr2_^*|RIp?| ze2hx8uAQ90=m-*r4xCw4=G>~2HWc%q=}F5l)_{H5zEUZ+=w(P5AAGW`+@vQ&oH1BR zvp-wqqM2JYcU7QPPU7Ww`eEWwj1tdRd>>=2MRFZP28Yo>wG{<4*g}$ ze~(R`m*4RAc&gA9Fs!_1TKe)5c1djhN-nDio_XhF+!~`ly3)UgLE(joYbwcEl0GiC zy)=_wCHHn#cMY0AMY$LS*vDdQ71ZHVg-)1?oOwt*&SUQ_RRxjXxki#R2$7>$yX#UDA)HL(90*kTgBuxQ+_{o zAj?nPZFHM;2Nx747x6**8ZqrD8uAGmb866*nm$-<+8pw8`^}M z$;@hf+^g@gGTeE#e`@S~kSL8yp*+Jr+)YkTS7q&f5DdFUjLlQhj0wz?ElLL(Gtq@h zQyn6CO}R#c#RlxOaCpg&!kJZP-5Mql+pL3gxF}l~DbDmWA95!wuCEt6b|b8d^(j@c zEb_Tv;&P_Am0zi}AVPC#8^bSOH>jJrp6R@r4@85F9cPlWJ~kwsky8Z<4%pHlhxvHZ;q$aM|V3o&w#afymimqnEfGOhLLR0CP)xvek#wF$%vo?x9m9n4~@5pn*aWu*4A~6J%>)8qg~trlhjSC~QLkVhiPTLAC-@)+t+=;X%1({%-<4&JidZJDQlR>n8ldX03k z?Gft;qaQ!hl!n*2d{Rf@y)TQK~jT!-9rS~Cpu4*7e;DwooK!P@e(j5NZ z1aUfoPywLTU#z+SMoGGQ4myPaxP!x=QySE*FiO03k$+w;3&T%c6`e0C8!j?#tSj)^ zobtDta9aj-x7j%Sn*Js37j#zk>9o#*93skflU6xHsB;5cJy86%tRo_;@!7uXQFt$g z9^E?NK!#Ur&Q!Afu8!lm`@@02O^jBsAaP9JoKrUI6+M zh{qza#74H#cPdlteW)-XxY}KvL&UNSZ+lBmn0pfwaAxP8S%VF?X=hC|#2b#aPC%JR z+S3xzs>JqU-(T=pFAO}U*rdy8y$3n<;IUl^>CRZQVf@O4ECZnjy_)M09hV9;}7$W8}qn9+St+dNI1gzD?CWXLMza;h}EexY@890wDmZUW@ANF>N!up$_d!XQ`=Qo;skfSBRkEoJJ%mAH)bGy35WPXP-Ry>0s*V zbCiGBIOE#*=I~z^^x4why+qQs-K2vSseWd^gbtqnt}ZSj8Jh6*(jjhgA}ikr`mOS_`}o4WG&a8fF)G!95xcRAO`~H9R!z z%HEVI7zrp;`pcBr5iL4)2ELpe!GLu<2%9eGp{nl#(o8ABQ-=e+9C>A$#@Bd-i)ClB z5gc9gC-RkA6o`7MSgHQZhPhSdCcctP_#MVLD%DGy=62oHNR=f~M)61Qp60>p!m$r! z>X#)ctJdUxt@)fDqb*0nL5Y}dUya0>Tt1L`nm9J3&O-_EAkx@pO5K~=+BNgfbwV{y zd>TjQQKLq2eiK}vbw0ml?|inAy@Gd!a$|3yFcmv}Ed8g2Kd(?G#@_(dvU-}EhSeHR`V=*t3u z5lZF$iw{7Nlwf0;Nj_me9AWxn3N9d`PK1^ifN~V z(FC}C%zotllELUX^Q${9ec`p#JLYo|i)_t_d8XB*;G&eyIaV%3wa_#O^=pl!>|Q)2 z?U)5||00MD>I9>$95HL|2@=7k%T#^!#-icfWHYI;Zt4wf_F06(SZ?h%k5+6w?8Kgo z%Hn73$bk%Bbt`uo^Q|qJQSYz!M+|I{@rtA$T6k95$Z{99a}Ie2(-rK^x5CevNZ)@M z+LRo4-YbQ6NEk)}e@?_Hvxr~-c)*qnnMXvjL_XG;!?{EPNj=|{Le|TQqGE=u zSy4wrxjnugdh)gWnBdc1qweJP>bOZV1-;qDXMG*6S%UqzakIuWM$JxUzTY$#`AVnY z{BhY;))Hd@j5C5);T0jlGW5of%Fjrzlg|0|B~=V6*WrV9T`OcRfEUz!xj@4kfA5w5 zucN-r8gbZIKe9s+e#xA?M65K=z2Zfl@4lb>=?DW@$vvu+2ToX)O|N0#vF!7t5?I(s z&OYJoHt7ei*SKj!X!xCL;n}{N+Qlr>G*Q0q9)MvhU%&py0s|FBq>#LcP$+WM%v#~M zA(pU}L-ykOg)QW}|4ZJH$NIE2yxrcV!shV1cwWX(`EJ9Kc%l#WR?sH7J z;*cte$YO((%Om+0zh{@`lCL-^h^(sL6SY$vvp5GD9n9;UnLF${VM-SQZcD~D2%FG+ zpCO|Uaj==|KV?IG_ucVG9jxH@|Tf&bS^xd8jiU}0+ zXQ1TTDV+>D><#Pm`++UR5Z7RV6rquAJDPKPR;PRC`6+G)<-;yIJ6YI0fP)*OC|B#D z+)^FeZdIz@%qD73Rk<+*6+{($fuAHuKh+3e3s&NS z&Jz5v^<;!4B~c;kSIMw<_}~EMlVLpUGmJewgfCb*?V{i9q(5&TnfH&1m`dY?xAbpc zFhqSmJL$dI^_3xs3UI+H4W^h@)mXM$k~O|qVtcAitk4XvzaJ%eW)QMbkXLCdz{`*k zwWQ=^6x5`}%x!5mEL7u8%dpwRL5Va<{9qe+@#@#0@8(GuB5H(UbN67YBduO1CVJqr zU++Smc?23$`XjLTCqio`SusV7GR_M?z=lcI@2ept_1P&|v6Za)ySMZbe7<4;4OiMr zv%et1Ac*IXn5;^-K0e0B*$Ji>{RrH!Pi1N+?J3LMdS{^i1nY}5g`%xz)1td(&AJ+W z%KB532~}0g8AD=aR=uEYs^67Ge>ebp zgzox0S%KBo6$L;*sFkA1$cD=i`n`P`k)uk3m1w+IefrMPxUoV z{H1fbZL#06ONu?cY3ea5Uc99rIwg77qazz{xN1RzL5NR8oLj^lbtzfI)Vsbhw#-m7($8-h(8VTQ#X@)z{$JY z6mxP_OoJSID3A74(FP^y`^Oti?Pmb-_6HHRMUG2`!UAXxn6yG^QP@xibY47SP%|J`!*1z z{2nmd5bZ^}w$bD~IDxs#tv1lz_{Bx_Cds4E>D@Mk&7eZAyi=E=g0!7@JY^+BC^qsO z4mlF5vjMGe^<{&!se08fVlyuf@jm_Qhy`1CKc?EKS=&5Z=^>pjJwfE5LX`*>8Aewr zo5!o&AF?tWY1BBBy&X^vaj(7=VeE|oA?VbBcf{Uk3>6(L%VOYDOl>X@JJy0M?~Xbz zF`3-XtKF4otFvN3Pxz3e{%IhfdWeo@Ldf*a!OWLX!mvhoPa)haw#O5y%6e>WilTZU zxgr(T!kk2%<53fe(w}gC_mATBGj{!;=ZWm6yp^BL(F&_*K1fB7Kc@jC#GV)|v7n&b z-?ey9&$N9TrC;q_Imu}On#Vqjn*_dE{DJ*|WA?{8dH*Jv|77cUySvg& zljw~%o)tp@eF;YqYR)p`bLvm3W6hpYcdN)D;z5BdvpLb2+GqhhCrr`$L6#1NdLrHO z0U?X}XoGlGt1m;QuoVtWdmH=loT$wiJC>;rmS_nQ_&-(Gu|}Ie4PJWvXlH+<33cBJ zgSc|E=$i>@HdX+9u9zj-0he%!jq1)y2ICtWo?ULd$k*|u7n(Xk^4wE zXOIbC7j@l!dDlIJy58lC!4AS(Dj;2nT^!4lU3%u`oc{5-Jys%!*DDOvZHTOCN)qo4w{7r~^RSw(jRo;fMNcTP6;3tFtN=mW~G8X>K zwg9bl+m7DY;)TttZSi-X@81Vx^gq|=ipyv+$LZeP@-geO8}t~MxyVjziNW-vsdOY} zCOm_OPxJb$Q<{UR8J2)-x8eGAfxj!fbYo*`I++y`+x#?W*JK;Xg}5*vxq-Ojh7Y0` zQbt0Boh{tZweQ4DwX2FXX`A%=cu8Sa!)tb?d7V$0ddLCnqi-Zj=GzL?`oUPjjXMr?T~cu&^U^J=1*tg9 zOF5^F$vq?lj~>!)$=Ye9VgId!G8{S~9gl!{hxXIr8in3i<_uSv^of8CUT84*s~mrJ z0-kKZd@&A#Z&#eo5Jv|fdmc@bzz9!7d0G1qML`?G?mVYGQhM#83(lvZ95DEmu-+>= z+KR8io`QD%E}mu5vH5FFw_c`hE-g{n6&{CS(uz7V(Wlt! z=ufpIPA~dNMd3I@vqu8H30D(^;rEQq?Ql-w5<{xb{9lz3PxJ>i%THM=N0b-2X>ZCN zKXsiV>tq1?2}fG-Q3LX;F|Qlvl146k5I%iFa#p#-&w_gqL zMmJ82I(b11I5gz7nOd6nD*ztYz^B1vxMQvHY&?`*rm+vBiMu_FbJ?M&&?DDn9jlMi%F!-o^Y zU}2a`H$QZn!hnkGRN?&6qHTd!*`mM+vh=6uP=eIgivj5xQa9Bnx(;Z|n^U#XHA4uU z1Voi=gQ^1AGah6*Jf92S-m2s^hP`wad?tkle7XWe`eLwp2|s4shT_#e`iiu?uTDR1 zDea07>TNKN`33r{{n664-!LXu^`?wbY(E}S-hc2bvMfl?S;FnjKiw%`L2JLi*qMsi zzvet(#(W~EH~E^<+ggV8B7jdJF>(@6+ z{}L-y_QJ{lEZqdY8r)CY&Y1g1)QXYhz@XbGL_KWGBm}!FFTYRJi+Skb4+zkjVNIvv#g7p% zm2`ctRz}5jf#`4bwmp#1g>%RWTnl<$j}NOY0x+WtPAlWE)ocmWPZ?bi`H?YG?dBfn z3a)M_SBdaH4*~~^`Gq}Ct9ypt`lyi#`%o%vGZ5MGL}kv_nS{TQ*C7qLWM1E zp>%kXD;Urw1y{OyH-e$~GRCwKFW9!*QPQG|Aes%w=4tJi5}_34X}+z%y=Rn!HscB) zQ&+R?fXW$_V^1w+Zr@*XRK-K=r*fMWT7&GBY z&`XIIjp`)Uyy`}-@%`@6f6V8J15XapoBcR3eelHtJKX0@4!ybaasOCe2xTt4D)13n z%_l^>m~8p&jzs0noz0LC^r-cG)4B!Q#Z_|&{4+5-`>J z9_-GU$98QpVt3c^p9VXGyJ@NpjP=F+?o0`;lyf~}pJjU-0}o|${YwO3Zg5Jb>F6bj zLb1_}Gf%(v)v$LvyLxnx`0;?YrJ8@$1Qs!lTJKYT+t1Zg`Aak&)}Y*Daflb;n)^r@ zAFpQfdl3>%jm19H5SceZ#cbs75oDHb*{+l|AXXCtb3!7*IiEelKET;D%$lTL2N`_` zLf`Jbf3xLp&KQf_>SL*IR#)94w>0@xIQ5ozQz=?rG!50`>X2J6NYus%F54`0IS911 z`*T*r2$+0=aQLjLT>3WRm4Mf079yp(1tn%H1UVrm1GPyN1iTCtB*)}W1`1Rb6+d9( zjS(TbADDLnS~FV$^G^R&<86Wj0T2hs1x%1+^5>vp@L#L=z(;X*5Q1eZn%}zj;QCSf z47~JY;2zQhK;Ql>EThLxI?srsaIJEZbL!x@dFHVY`Wb$w__)%O8j?DOV6D-kDH=fN zt}c+dU;Q;gx><}?A9dz!3enkouQbCgnVMWvc^H@R^@nSo?o#9!yGV%N2zpt_2=>Bk zP^f6;12>&rsM*l7=j|tgqp{cVprspyocF`#{-n%TFZZ|WwV|~^OmM($5vdI%)Ybwo z#R2Yy7$>TrXG44XCC0|lp?1$f1RN8a~`l7 z?r*;%VHjIY%bAXCbF+&?^C?K7&#Ff00&@os4oFdbkTn?@VLLW5nx}@*yD>AT9?1wY zF(sucT97B&=%-)(3@klC?Jef3)8S+{ByCtZ^mN%Qy|dkY67MfL5+sodrE`IS26~=_ z|6L0Pb2(ZOXPPdkwj)-An$4Z5TF8atrOzx@;Wrx7KFA6EHimwYs`8f0T$=$6oCxgw zEdGqm?SL;1bz+ljVb+0ILiZcB~E3C!mLupKtX|w3ujjScLvj#dU`V)$*w2zg;(u^O^`Ngz_QVC`%vtzlN<~Y z+M4(mPbcVE=@jVMgp!!crZIZ!>ZS@dA9xmI`*76`fE4M4E(%W*>B0H%t!&#caa?Wh z4kru5f-F)ilw%ztv&v0jL&J@1d(K+H&NotTRT2ZHve~U@It0#_bldIi+*}_8k~Z`6 zH~)KiV*iiFNt7?)FA_PMx6ZEdI-dd3gVkTitbB`e9FR^kMK{HBy$+k6j0m@4}?qYrqZ|4-E5e~Xo1=kri3I3}t zLlB`&4H3sSH9W9AzZ{GVAssji*nW5VM=@YfDeY|>*2bq85hPB$$$aI&F<*9nL4x2gQ%<^=5wh9!_f^g=|e~Sm`N5za+4Rz}91Hh5eDnGZ{+wEG~=ST+o zB6@C1-+i%%3A>wyaZ6E)v4Cp#1mWjI`cvsK4qfbo5J#4P{HRVmeG+aSWsw3F}#qGl@O8#A+)83CgH1hGO*) z#ZH5TumB6+q1aQPTnx28xUcBgSFi%t(6c+|qo$!@2Ivx#H`z1LJ0B))aZA8V z9&y|~$J#RpJDHTf!|>;>pVb;vOU8OzB9X67d<)n;Ng1?v4>DKKaiUsy)o;I2vMlG3 zj-r;-sAlDqn}FrqKh-zHf2wch-k59rHgaIIV*U6@4{*5JcrUL|#(+YOw6@ez-(Ykb zd60Uoe6CR7EEJ$w^IuP%Zr__V?Yn?NA>fz5wsfC!aPE$gd9ila_Dm@gJ@xf$H=w3%`R+hKEgm z{c;(W8!XK%hw(wg)czg*h{9!_6Lr)4JIuys7xvJ&I5a{DUh@HNJWwTJNu=u1U1SK< zqE0%beNM7+n=d77d5P`M$>+39Yn#gCx*$l6R^rODWM0>6wBo&@eRu*G1eMdn{b~+< z4>Zp<(lTLqP? z4|`(&6U7A^lFcM7ySC+y@c=mn9)&y{Yb;U)Y=>EXCel6Bt?Jl%f~crxUZs8l(~yX$ z{Ig6Fa*|-tb1RE3`EHoX$E{j3L1Fj=_e6A$z7gx^4li!`2gbY<8sGYnqc5PXN5B@iDz*aLpI;42UeXBc^Clb#w`Y+zMindP@vX5bME{HeGC&4QHw zU5gW)OcEz99MSPE5TD%7!|;71E9JdBNYK@7L^e-h`Pl|Hl$13dBeVq*dv<0CoD3}2 zI{i@+lwc5_a)Fn15_aM`Kk$3tc@>vGVglCRsQT$2$D9Xfwj#hhhgu&`rA469%JEm< z=M+_esoP^t5mrO7}lX}kBO1(rV%IoB# zQ2hjd%Pdv$LL0Ejt!S0+#?RrJVk-oU>7e=|lu8!?F+U}mrpw|H+)J0Bwn2|df>GoT z<_*!ZO}!!Ab(IC(iV3onJ;dsxahVn++IQ{_3(+UP5S2T0C2Nr|l$(V+)V0|_S!+gy zbNe$GryiZd^uFy1@^D??jaCBtw?dnkzZEmdxl{KEKWYZ(T$+YgV<9RdYZ+1>8M(lF zSCmV^0$^yzLu;O4FjmG3T&pu+pLD*gP#`9B0#7eqwB8Kx#hWG`ca-flXlyo581lB!)976zHzJ2PVEZ{aGV;*^Rhy&{R7g(j+1x@T}Cm61}8M7j*lYv zN+G0tkCVp{BS_xj4+aJd-1PsZd;R}Yhuxox?nSdKGl{0ZfKYG;U-1d?vc7>nG11#XNf8Nk0 znYCw$7NIRCnbLIVNYlwW?y0AbA&X*1;Amv)>e9)gXb8?dL}dn*#01$gM^LiI8A%MX zLf7PThh_bwk@@YXbq1{wg&qmv`ScN}#x}q*KXXcPRbGaaz-Igt^AVvE*>r+msLhO+ zPX!*tqJ(D5E9JVZ?F?szo+hEV*6VE)EwE&Sfh;edRd^}4!Rm17vwfg_S1Y3*ZlGPL zRJ$qCh_-q|9N&{<=dhw*H=|C7q*j z*=Ey7>5BJPap(fr}HdtwqIp>0C zD9EbUbZ1Tdo><&o-oK#BVTQ z$h7$~_M11a46-&pO33#qowy*%M}2am-hbpGLF}F`rvzO^LDG?kWQ<3D9P*iV6>4M$ z^FFgw&A#ka&wP$hN z=k7B%#)d_1f#S1k6PAX%lT+ETE`GYBU<9RK^JAue4XAYK-6Af3rTD#_^U#g_y3_PN zy#0J%kg_R&>1GV>q7UmDZiAZUKIU(*d1amPXc)$ZuW4bOiKcY>$V~S7VT{}h63%$H z5P?UU-do^bwLml#MdgwUqQ;xbBx}b+LPuTiGytWbLZYMTGp%0gW}0!YlTshA;N4G9%L3yg?;Vr= zrE9${ikfVD&Q?rE_epjZYxyDr7;DZys4NsZ#t#5|y!G{lqgBLP(8WD9$Em&;Cb1!| z$EX*qi>z!4T(0crjj;yb z-+{n!;HsAYpLYd@Fr*fk0tT@ZMof?-8BjEJ{~sC_aMKgofHBMjkfoIgm;OHTG0)Gd zepRa{z}ZhNG1_n0Lcl_AO@JL1Gn4ZH#`Jw&JV4fJ-6zd$v0mwm6GdHRu&w}2Q=dtv z8~jxLR?+tuNl@KMVPtN~4QC=j790)uy&Ov!8M6FvSbpCe&)S)s9?x6O9HUPwoBhyV z(@DuqD;hMELb6+9_7fb5R}L1IVWdk@ybG!C>@-51S-O_YF1BBcBjG(F1!XyZb+*_{ zO|O^s8Ow@g_$8E^1>wH9K|zom$!&4n1*r;O`>mziG&PqP7RC>yW3OI62l`7_q!|fY z<%XfUG2d=v^(N*_bi;lyZhGtu1In8u6J~mZ%z1;cAa;yY9~){#!v_Uh?CGf1?sw+W z`*njgR4`m>zp#QIU9fl@zB%oB2~0w~b+=a{PMkPbygBfpx{(EVsK#AUW4VdBaXqM2 zPOc*rEJ9$ui71EgBu+gKroHX1ActO1a%uilZeN$u_4%Cs>-sfXL&Xl%AV%+Vs=eyxe;&{aR2fb?h5$w0pFG$0D(AcmtpT~n>SRf z0geJqQ;q(mk%)J~q}75FLp%bCrr?VYP5yX)KoC$XE&nI>>euq1eIXUr(@YXw=|K(JM6E#_sn7Iw&LviGsPP z32@0cSt+jt9%U^HVA68Vf%lu$CY{({Yb7QD*a2xj4#XAe zj)Q^Q<45Mdze{vFdisSacN%bJ?@2uKCGgF#MY>DYgIMGHj)=^VuKEO#-g8^4dszV8>WT^9oxZ!O*j+R5Z7P6*E8|g>T6< z*0sN$t8NP=-DgVeA0^))BJ7^GC&{0Im}Ucotd3u@>s6r@Ya*q&gdXH5zZlh;ze4y2 zfX5e|*z`Ic23_{vIMobfbb7d1lVfM`%881{fk?N0D;>E`bG1|@JE+{9&?hu_@Dwq! zJBzvZD%0vnFJV4ZnyO#p9Jx!=b$kl(@w3E{fk2+;m{`EhA^5W}0V?Ky(5==|L?43* z6F{!|nvqoNAP4hm5`Wkv)q71p`e(FN4MHh~7m1 zw~+n?n@1IG5tsygQZH;?R}_!j*7@r#^l!Y?Kdq@f{mImyc{Y*#xf}xt(5*h7^^4lN z>?;>8J4-`K!*p;`6HsU;W1Hwdn4SIobd&5e|)NFanF60Z2dNAonSXr z$b161WtPh!fXj}+SkV>$i>REJ|2y5iIL8p$@KGXJSj)h22w!1Eu9rL@WhZVWWhbCl z65sK2!i*SaZs!6G@o}WX2yKt^EI8@K+WLqU0HOo2&ulJFdYSLlCgLhM&euhiT7?cd zEjF_AE)|W{K|hqFK{UM@!Q+wnp0&mVWA)v&-(!C*V3+9%lVJk{(HqS(vIeIeiX#gd z?6U}AR5ty`2{+T;bz5BjP3P3ewyS@72z21Qf!sl*`}lXnVEZ=g-&^j?Vo-D@h~`dJ zHe|z+-R^j^UHwo33iCnxkq?zdh+j^Iz0n(HAm za}G_@G3~pAeb8w1@wZC0r>9s%XPw0H2uC z01~AG82LFdx4LHy5tmx_&wFeAbKV`0m1H%7`k#CI5EyLPfDZ=%GRVIm@sJ;7>6OXo ze+%gJUk{Z}y+%2Kd|wxV5-Ix+*Xl1e4M@OssyYp;ocbJH2EPiHr&c!!TvfXLOlx~Q z-Lx@Mqwg#0{;NZt?%V?mQLWJXMgW^2X0Gd!YULS#$3&T6;~QbNX(-=2Ssa?G^v?cw zwVu_VE|M5NcT=k)VuR17I$)D_Qw?ciTv88_#Es}Zp(G;C_AqI$2)r**=+0`7yTZ_! z>*me+U%I8_)?kA&?+pW!b4ZvE%>u!BFHCG#041W{n0ud`XS3nm08hM zT1aTJi7Qr@P$|irBXVa zCY#plI3}I@1EF;UHXxtl&;Att-`IA@*HYkT;AwaIf25#mzp34p27ow$pj!?E$^lk5 zi}9Zw>ffj$rkheJ^3(gc{DgGJMmi>1#4MxXF_AA?bpt-dqjfx}p6~>xIp%T;=V1a% zjVMhOonrDNXMyXzVTJj*wZwwz z2;=#8wYIv>V0;kjjN~ji)MVzGPadnZOM`t0>cJl+uBs;()`wBW0Dc8Gvt;{n+t5Y7>}UG2@Kg@I1nG`T=SffaTJ`~d zs7K)}#s5YbjXiY%U~|UKRoT_HD>+5nS5>y-67(W!8PlCzXry~7=kk>Usr0AwVcz$7 z#l5gh-30l5C>7b^5kOHf!_GqI`p&E1Hqsg;Hv`j)KEA(^kq9kxm+{cUIdB|>c`iB^ zq)rW2sRUcKgU#94y?_7`K{ldz$xf3kUMPZ(y1jrmn`+DUpZQR9!vImGd@auSZJ?%U(dowBd51iGOlR?|B)QhND>rWZ z>X4cdS|>#?h`|-&jj@?}v*9dEj$TCe^b65k(J4S7I0|Pu{ZF2evD@_~MvyIl z`5pXxMAIW@l(;1%!)VOiI}?hyR*}3%wP$nnyS^K(@_WgTbdfs9cyr097M-2tE4dAq zZc#4KS$3Qbs$2U?#vy2utoy@^saS)6$<{eobzNe><{KY4&(VcM`8q4Nr*-P{7zcE8 zVs)vSboc^hbsZd+qMjx|<2a=%!aXnn+wNV`@7>3Aj&I5mUP^A# zdZ;yJqIS1YDfj^D>N-fU^w5Uu7p1kul2qG1)(@Unz4Odx*OR)v`C8Pd2UabZh&%o7tTujFJzGE$4>l|hazZiA!_2f z+6`hLg_&7tF`bj{A}=q-O0^ieqz|r8ptu5tA+B>+Uj&^glErS!4>6<_ zxo!>_ayLgN%_21qB}de5ka^m|YO~Q$P&OZ}$C}iDzDVd%(@fqyuVxj(io{{tNbWZXzkU0F3{=t=;Mv_x|O>9e+1Q)Pm# zO3YgpyH*37k!M_)KrrSq(*BNe*(NB+S?kUB{bO|7sF-Bd(HD zka5oWj$MmEF*%M0&!BuF)(M4q%weYBN*^{Ky;+OiMEYx4dnwEVCZwhiRQ1r!M;gQg zi&{!36_h~kBnZBP=o&0HIzm^Eqqh#KE7zfn_0i*MV{=6uq@Ncp)BE_|#iVXhb+u_2 zLu|q8y(CJ4{sRv=m}Y;fR>r47UQsJuY?O(h`37XVp++RnO&J1 zC0VLuT9Cu#9U@+^*pChW&9vaoeOq&`NVyluQs(*ElzxvRQt1c2LAI*`>q$wAW}A%d z@3I&YJ|HpI=NCPGhJYNFRvK@bW=z4uE3Cd=uGfVfACe0XH7WB_elz!%%L3zp!utVI zDPpAK-iCW_pss-pqznIml74e$ulWhL*I!o<<0N&K4(~mg9va{kF8jDhvw$OHH(P>} ziVF}`9}Fh6Az8+fw<9`>DeMPosr7GPmj6+G{+mhyb1o^CuA>XksdSf5IGrZDlXzStl(S%Qdn_rN zSRU|T(j&0&p+_+;KMm8DpA$Y1aT>68w^qS%jr4UeMgKTa$m216Ua8IuIqL0CfsC-f zHbl%VvRM)zs}q5U5F_0;TtgPLk)-J&KQG6t?%NuMw8RsK+c@|0u~@y`wXIH)yZowd zUmSUs7HVk_c;kkjw3PG)&l>DhJl&(j;*qYQf(cU&y=G%s;a!c@`LIB`C{a_%ekD*+udCDXTlQW8c^@|xKfSucj|+@xyppNOi43CSTBp{M0PGbs%PmsdS=T)q z&li!YR;{>(z#VM5c%oj$A0QvWX8rCJ_3qRG;(3YwMKG>;1!jU55UVcoO4?-!XGCdV z;F3HfTzYJrWRoJ z6$FK|mxu*NMY9;GT2w!{DgDMMGbvOd4h$&}Z3850{mH*T%=u7q$Ss0CBTT)kQ2l^) zii36iDg%;1MLA$MP~mdJ+%GhK4@z*yM_nu#Ah$Q>?HHnt*oCe#MV+pA_EZnN7ck-S zmkSHzG9O*BK^oax(jxS2mMID{aE$a{rYpl~$uG6OQku(~(^D6NheGJHm?&(s7AM?) zYC$#sv0C{Xngo7);J%b+-*{QM+v`ju1bD}4dTAkiYfQigG;wni>vmfy+Z;j^+t{k7 zWPb3VL+RiZtiwiX?SMf9e4mU-{%8@BOU?+@e(Yycu*evvCFo+q<}ANTQF&#uGLxYf zw+_2i)`6j7RUb~QXE0TO#T2YoQYB6FYbkWeb<67+r<1L$Dvqk-3_KlI&1gHIkq)Tu zK1a}cs5s!s5;Q0^8pwmY(w#s4g6FQ3>t}}0)SAiViM*oQ8PU`e<-EEjyyIZ6H216g zYAGf&oHcFcP8N_#C{UW$gh&OS`{Nz)v6J48f+`NILwJHv zLRsW?oe0PB8WIi>sG9 zn4vHYZs@UyifRKVPNgnxN(x}`qg#<|rbW%cZS83o8^C)4+pzw2Ss4t8XP8iqoQxMj zIm}^YN$Ng%FcyjjUIDa7_{&!X3L|aL5RYswl6?{xzK?h;|3&RY<~{w-Gb!)?G99+` z)BcRM1Ayqwp!*s29y>_nSIM$Ec|4wPtU%N4CFhp6mC&}+P#+v zOehGa@m?cxIw#FUnR@Dyp`(?y!#*MoQ5Ec7#ljk_;)STsjN$eA1icny>nAHO^rn!R z=+IToPpjiSwm0VxMC?c=y8LAqOlEN3RS;OhM%$r7nNt#J)IfFe&{Mfq6NR^UT|Izc zM`0eFGuhA+y(a-zZ99joi4cSk-R;+@X*lBV}E8fl>h) zuKYJt3tZyB0}X_-F}0w20HDqoH1@cUAAP4oN)fVqR(RG@)nU=lU|{jY*@XXG-@wi& z--&=Tv2s11y?YlRolfiZ>sor2LNvoQP3@;$yid=*4;A)mfMmBQNtU z@VijcJx^{dr}v+#>D1q=qnStz7N-j7Psr89Fz&uG#3@k@d<|!buOQLTtQ^XPsHoxfGMB+5l`T>U{G1O>l zd2#BCAvK+~{X(HvHgYEvhb_bqjB!~3V`|ZI_(=;&(YLlKpK6SLT3@2%B;;FFFG$mc zUL;u_`FoSv4)q^MzO_V4TvZ)?mYETUxvHyds`~^o;tvI20zF$ZrC8|Gg}x^)T&X4* z`NY3#v}b@}mHLmp@E`3c$o_ua46%0V0;{PLBgH}Is^MY0-$3b=l1Ij2j|rAb1PFRu zNuN4ji3U;z-Okv$BzU1s&GW?O3;a#ZP!vue^0IA2|MR zwwC>%xHX2)Z~O$JcP{GMaxD3)o#}G(syv{Iw*R;5FiLve&bc8pUHadi!^Yy(lRw@| zz~;Zf_zyin;I`cd_d%ZXO9gzj>#u=QAP~Cmi%ghnyKpi24!^f#hPt@&h&`Y!BxHm{ z5rTH;Do7@8M0SFeup2jJQJm6!TQ#D;lv__#vbiD8$^pYjXV0*y+{>?KB*+`}c-Tzh zHRvk4FtdJ=Q3&l#T$+ofQi)%i#5lNw{(^*WY$<9QzZu(&CwVis<>jETMIAQ-*qg1F zhlg~G7n1M2`uV)lgh4V-7PW#k@*>z$>-j@8Q_CET?;ltkmQOi zX+@3N7MLpJ^;f0_UM>ww7;UP8o0WiKyD-bhuXe&*~C(RibuJxbrZ3@4}`AsD#bos(JlZ`FB?k8!chr zEt&pB>ar;&#|!n(>cYfQsLYj!=1OaY#8d@z8hbpK}iC6%r?w)4+aukm3K!QJ90j zpTgMoB?6?f%ehelokJ-vF2N~Qn#g-wkb1C_!_;l#!4@U2qsjvF1NQYv;(p173Cu*N zN#ow!NepUEuazFu-d)VvgHvH=*TDKHW&|?jDp2$o6%wak4No8|T~~9Py#4)-|4Yf+ zjiqjZYMO)FWQKS8nYuXs&V9b-Y0~wnt$T>IhM}hqmyB_H4 z!9!L-H~}WO#4vr`zI&C(%w7fDsw`o&ne>Oz~Q!n#Eg1c%R*{d=y>lu6+VG zAMSwWfK_?U_ZVk|v*kd;2*nRIYko6V>hQce^}YzRUl7WPxXwSJT)^QrV5RH?v2n#$ z%YBd)6EF!k*`QZ(j;|O_^K`}SQj<2W-YbxQ@hcFe+kJvkX{$jK5KVxC1i#Zg^51YY zPe2BMFk#ts0sxl}_hY!$j0dWUv_%yi8B1hAn3xq`TVatV9r(e$LE+ zP=gILUQGD4vPf)VN-@NPfYF!vpBBR<2W8_4thle|=$pVYH*_N#ZpSn$ApiT2tfi{x*vEuAQtH#EY}~B2s3SwIaGyg z6dg0%k_2nyVrn$-5+GjbFR$T0t1YG3=C38#A2MW}oY;Ww54^w>#AEV4puVpEx8d-g z12-|uLWOB4ti(`QXvV&Yi|V!G9O+g$sVBCer_~u`&>A%^f{KrNS!^yIJ}B+ zLj`I5G&6W~CP8*slCb?NF%3L=5L;}eHc$!3wbGv78PCg@BxY)`u4sqa4N0^g-At#S zRZrog2tP<`_ys6I0S+X2xUio|Y3}9mEu_z8{d452%EfbfVgLatrF5xj&f_DFVY4Nq z>I)cG@(t0Rd0T5kD%McajT5+due%wX1Pj&%I0Oc~5Je5dd!d3=F>Bt$!OX+5W5Vnp2@)^#7PT4* zaf&$S7t<_IxG&UZY{@2=fduHiv>|HI3izB_rD~-1ZHO}(GB=};QU$OyfxpJ5H$Q&P zJxyMWKyZO8(NBblTj$r!u!5cVAfKvgo9efieF{pHlw}G0GPo* z-vqA0@(<}8jiDnSZ68{U+H!>W$$Qpr`7`txAE`jkJAX{5NRABeqTr1MX@*Y`&x=ev zQbe2=;ikA4`T}(!{2#Mn;42vK3(5q;V2nN`iZp}0x1p_4em}rL*pC#F0A9LuQV+#! zw8IYtKP`ppSW>d?sp~71`w_<9`um67^^gAI7vKtzsUY8{A|xyuWXFJ)00~O}G9TX4 zOFSmdLf*RT+{*)sZuNhA4@1aOTG+QYYyY$jJuH6!=paq&9`tZ#sC3EsRF=Af}!zEi%FP1E{cQ!St-~xk@6Vt6zi->STPHD}{|BILP zL)<5k61sF~VY>8s?STgoP^!H+E-N{t=Uo`J_}I2HI;-92PrUWbW3oFZ8?dVMJ?}n+ zmEFP)7U3eRG zWjdBU{qBP|9O69c>LwSv9YT=pvLJGHFT-#jXJdFpLp_k}^4M5P`n{)g=-m`2Hw~Ji z+yJGJjA?t}FQ1i3FA@lD{-DzC+0g1Lc zEZ_D2$Jbj%<&~^myAKWlg1fs1hu{_*g1fuBOK=J9?(P!YEjU4gySuydJ?zfgy?dWA z&hJ&V22d9zbIqD}xx5JT2yxy{LVq9a*9we-?T5G-zK&TI#jFle2zKzP3F;dUm?-$r zJj1FnDDTsO#?O@!72N01-y!eB;%;?7exA-}3zwx=c@#mTsCxzdxZI=qMDQ3N>>TpS zsytrAIx&hO)sSvxM&vea+2YoDXdJ>arM=gyQJIED+bv3!``HS`0uv)uE-O1%fPyrH z19FN~VLuw3yw{O}1uDcQ?}7zI6~XqmW=hU(x15~yE}Iiarfx&v2)SY>tam2nK(-VI!iBeC7xI%a;$T+K}Q<=!&?$=uzQ)p0h3B9B`!6W&AtD^bk>6 zP-&Y2V%{K{y`Iok6Y6HNe2WKTP)j$)>VT|1e2E%9^Ga&0*?`GHl?JNkpL4t^jB zz$-ofmrNW6OjM&SwKtK2a?8skuNplsAr=fRJ&|%cE%X5`&C4UH=*pY?!j`4A#YO(J zR%X2l!q&k?CE)dasYd%Fh(V$F@{GpZUP1Bis**YaAN*6ED>1?zF0#rE_aksK2-5ri zk-u^j;_7JXm&|f>p~KBjp7r;yP3|hbu{!B7%X@@k=v&@WIAB_L;!rq%={FwiHn6yCN?Ve-lyHBojVBcH_)%>Wkw;vO_W;B6 z!ES+r?bi#1>6!bXBSRg1^Vb6{;QnlAx7YV2;_^q$*6B?4VrlQfgXP@1xNM1jeIQ`%fJ-HkKH+&IMb-Eqb*+lKb=tp=lMmXX zu{tPss& zjX9gfauf*x&0HrdcJQy}T@CDBw73o6@CyGUigkO6G*HtxW=hoy$OV*Gs*{9+yas@w zY~u%VE34)|7azT34?q=znoA0tWb`&#lvI@D2NZ`o90&O^0AB<=m;T8c_6w~-{>h84 zgJ!y?m)qUy099NJeEyFPmLQ^PBU0d0X2+ve#9F`riq5|a0t?*V0Ryi7r}!3diPT{x zPU{(obE^gI0Z?dqc^o5=Pjp#)T<9UViH!d(GejpIFVv#M?f=x;sakI@04J5u~xmT;)8Y5!&`Ke9!Bzp8v1=nn>1>;sq2WZ$<%c7tM1`FB|<%l zMDU}+)|s*6C1m_HQ^{)!KV8Dm)u(S?3E6u|HP2MF-FVQ7WG1JQXC@Y(SD%u(lY>w$*85+ zd#K44J+%oRsd$O)%dS>2MGpFh9NwF*`IGp#5rN+>J*Ee8y&7pOY7lYZk0H7;(X@!c z%5={tPy?!_N04fs0k?RP;?ht)h+Uj*9*Sq0-w0)daTdR*cQ?J_+9qq1*!(yJ&qy&k z3o#e1XgVnt6W`qZ0BC#Mgf*W~3VA#toX!rQi;)vjVm<3w1&v*GKZ9}_!VdUGjK765Up_kDuEjTR zX|y^%1|Q%fia*L3v~}+-Cz=gfcfa-&k#!E>7eQEG@vrO{^~#I6z8qv=t!R)%fz*P3 z+3o-TUEACMvDJQrSB4;^5u=>*-W$deLc-JogYfx>5Zsjv-Sbx#y#C_H%n@RM{TykH zm|hLh@qFJcqx}BJZ@ANvdM>Fzf{R#;0o#Pg4~F<)l)r{J4dg3OlWsI1cnF=k+f`1uYE8?-i({3C}$qA<2Z zHnxqmr&Qadwfd!ba0VpXZ=sXY(=3^k-OXsE?h;87RvP&$pUaEBFOFxXpd^{0j zh9EH??qU5#D<;@xADMHyrrH7!1bU#>_HPIGqOR0S1N+{tL8~~9IE+~ui+X*FQ4K)Q zmAJ}X2Dp^HD`s2&_Hf&E158i>(J#a&AT{pvdO&De1X2(F1r5--U3DWVZ|7sJ$O!{u z#gjj9W~WZTkKAXI`FOjExU!6~zBGV1`Q{{HR!HSygY8xyR~dQGahU$lQzfBOzeLr) zz0T9A(2k(B>>-V=p;Jo@Pl^xCbO7<&81S^%{2;?HYhJIsL$07>cU3*#mFy^-%n1|Kr zVf-Kwb^y7`X1jaxi4nSQ)+nqvB9Kje*a|^fN-rK_e^%0Z26uhHqk#3cj{S?bljvPG z{#EeTY?IBLgUcc!9b%Pr7)*NjlGYL>wd!x?I-AA?DSe+9QH1VY>S&1e(EVy}n%}1) zQGqO|zn$B&_M|2Nt&i{=kLXaHCf49jDXx7GYYtr0fEr(&a_~|VvgNm*7@Fj{YK;~H z)7sW^Sfj@Iy{>s0WV*mt0mEg<-yN4gC$|_S!HZb&F(UDG4a$X6@GVJi7zD5dFxZ&# zKO+7`5)NNQOK)*pRqb!$x$p{Pg)SgTz->9*zexJ)yP=g!A|W{PqRrO5oAbk2C7lp$ zGgvdH-u!GwKPhLb$HGA*)7noykccz(qgJKPoA8Z#=FuW}4dzXqUa_Rjy@V6$3!y+! z>GMxP_OjV|N0UUC#`Kleuwa1!JTPd=-;0v4!;~Ee{n&WH@%DR{(0hc<9QuD0AlfO_ zpFt;?WKqimMZrPEXRP%tmCq)K=v#fq6aTd<9XqCrLx9zmZg*U=DwfIRHM}eWxTfuS z37MN6JsPy$Qy^5XV&?b;9$&NA=z*OK>pny6m9r>pmyaRZ7Vi>T78=LubssQXF;!=2#xzr4X1XXBk-;#(-m5{ z!pqzaLV%YC&}OOforb#y!4$U~-DWt+hepum&$$SVHO>|x8m6Tk_9=!|ULD0iZSVyw zEeQ_x+2`Dga%D8J1|TI8HRdCl&m!Yb2SwP9ORZ_wzcg+fLwz>WI1W@qd+c6{l;M^Y zjKo{d4lDQs<7--+ej;mwaMcBSx$_Jr^|sQP4x~U#AWQO(1N^7ZUe^9PB;^a@jo%b*ZTJ)F+0N zd%r0%FxGzKa)@CT7%O$e+1h#V3(j7%8;2h6u4a_M`$k~?07f@Ss-n-uDowz1x)^w6 z;2vVME+VAC0Cq-8+%zjs;8r6;`PMxUkIWoOHw;lKW!Rl|2ANj)k>!_=*@A4t5VmbQ zoq36?6*7LaS;68QG}Rk2F8{NAnX4Wy%oT0fhL4Xi3Lm>LKUB<|xJWsrq8D<}2;kiG+1~a4x;-*l@8#B*7p?~Viuw#!PnvXYXJG6uh zed)Pujl6?VxX1q7_zj9Xt;4jUC?MEf0i8p4(grzsf}3b}8)kytNdfc*LLen${;Ml7OWJUb}PF!jyEGHV(Xe<_aj!~DB}txo;=$0 zT%ibf%S?wiLQB~u*cfgI^w}u`d_K40%5eWx8p6tP2ZjD~$a^_@U>(59cm9B-wg_fFL4RxQTwG-m=BP~L4maTKQ#VRAt{usrwe)l$`ht;D~iW4(Tl*p31!m+t_0fD zvL5z;`PwO1Z{=nXu3wSedCY=#mkq9DP8IRymR?JqApgm2BjRT!HCMdSE>A-)51V8# z!M9tg+ zB6&S7gdhZbG>Q<0j>+fYH*W~45!Mbr6zU3k95A64W4^`O_)xg(O!&SX&S-4IL>fbO>QY7M0eQ>EgoSJIkZtuDStq;m8 zFkGI|`n3rnf5X^KZ|leS0I2(#Jl^!o+#*;sZoT4l%{po?6kb4RD|?USjrkbNUTXfZhuSnbW|qP*mU}U3i*9abw~_ zybErwelGHCEjiOfuaeVJDJ*Hk6|hq ztXi|FBO}|H%H`*+B-_O1@#)m{WxqLTvH_A4t;vHiQuWfEw=^57`a;=|LH_%PYoNUP z`wx6T{R<<_X_k(qpJZ|Eiy`HPb50H*YOR2nQuWXo8Gdte3Y4IY;Smsoy%mNS{DoW` zdED*%*E>LzAX%6H!3-&01xZsfqWz$x+i zAJ}3{D|$>WvKSm@6dVGD0XX7K25+7Qcojg(N(9m#{!sRpb(xWSF<__=PyAW_?9~G> zuGkOR+~RwoB28Gjn27aZhCnIsVI_7->x}1^E|l*FCWM14pGlTWNumQ<_h3juEG!fO zLj5zsWc|*qMHn03L5y+oz8zXhMRP4KH#r$L1^!hKuP68cq&vyPJ#ufJCo;5c5R!@} zk`j_EmfS}|j>K1{c`E=?Y6RXbwJ@UP4jcp8bq4>fzYo?24nOuXani0Af1I{T7~AXt z=Lo5%P1NX{wF5L{_fn5*^{ir?^DKTB~TnJV_T^C&re{^8XP z54}vB-;-t?K8wb4TtgSA_T9W|G^B~rxjDFPQPw!-8V4I2yXTZ>9=<;9&Ogb`hkas~xk5_M-?1DTqY zzizBs=XnM#IOX0T0jhkM$Grt>aQsXD!7aUY1!f2ia8!X}1jauY;RJCGgfM~frazG6 zCIg76OPBSC&P(jnAnFfPH+#lXhTJkN|AU43hcz4@#-=wssy>dD;7Q?D@TK zA@E5cAn6!(Aj|#{Jvjt0h z0hWSskO9SqfJYeu7?Hcek5kV|-h=MR_|Jr=^whHINolV92|AMBJ4J%*GZ`yS`C0Wm z_S>!s$@YeqKHXj64tBNL>~r+iKVDO#t~F60h1#+f5Kjh=P$_6+efmDru8{mf#9hy@4q0XCx&n>y9MiE92v=s$&IQ2plg5~s3!2;p# ziOpKiq1s7rQ4^mAYHDNFbhN4EJDZ34u*UXVPvZK7)1Mx)Ck{?Jkb?7LrAF3(p{F0h z&L`cT=tm)LSI;sFSJzuzP^M3lX1PY6+%CT{g5z#+7&`1-_hO4dw?P(0`MWqU5m2T3 zc{x%AidW{%pTUxG6z$OWZGq8TDPJ`ZBHhI zyOT9Yo282D!#-w7k+FA2pMGt*_y{e0uT*n*6;UOHS*GQsk2?khoJ|4*Qa%5>-VtLO z-)U%9P&Q&XoA+y{FXu%f-jP(rhWUvo>%yTa9=H$WS8-o2lv?0b{36~&BGDTL{Pg|C zkz|kZpem^VZlhn|AXE)+N0rF!_YYQV9WA%;kkGR#( z*YD12Yff8j?Z34a6WXjX??a1X;A3~QlC;fviUlgxaKdS7avLK{`4)2_(zTei`gG<0 zn)Lqh`K&{Z?1_?%Ap7~JMh1d!CAD`bg9ZTlzwQe#UeW&1WV5 zc}W}Q(1ppm@*7YE_2~tZ{=V9($}Rndz(Yi`UPt#xla~jWiR36PS7$UVgfDL?nQChW zH>m2Qhi;Gd2Z(8r#$wTAZnI7(o+qOwvql#lo><|cK32Tcny^O~*N;@yE^1;s_0BNY zwHByNeTg|v%dh-t$W@ojPe>KK;4smW@o7I{4W4}nmhP1NW$HD*f%@r&9$l4u%Z34= z1s-ue!Oy)P=-#tjfHk=g$Q3~G-hdHj0Pv!XymXR@gVQ=xv)U#A;wx8Ca7iTAV&g&P zOb9VKT=t`*5H0uYR_%#Ja5AiN^|+SNNjHi|LqP9&x?f5P z6{QtH69G5V8%((Il~W>fm>R;_?Fp2XF-PvGm;KQNo=_>PlFjo#&n(UMdU-WlqXU~4 zO~fnaq4t2-8{!tl(4kdm*aSbRLS7i@5)@jGNK@{{(wnisa>rmZK{$O)FTpmLZ*trk zqnuJ}L`i7=b@%*cSXZWAlikeaM_GnJTck`awlMuwHADU{0~o3x5kpQ{+sa7Z&KJ*_|rbX=D=*J zwf{RK>Cl+6a>V&03;>bp7f9^|&gcJS3!=}q4AzBm)3;^qB+&e94X3yz+^D8~%XLjAB$X1|L zk_L=iUE$h(CboC~`B1v_jAI8<|9>{Q6#{%H;hjcA=3e2*Os2=Kk;H^H!#XGPY+JxoY!j z>hyD#TYXLrMoh=WX&Hkg|G43Wjod6JafkikEsTC)>{8p0*QFVu;thTV-L{I*_TQ)A zBSmW;jIj7aU$$sav<6LIjhCqHEI*Y6T*Lcn2HFrurcx1#E1uUVE#s*VZ_A;eaDARt zUDfXWTs%j?Ay_Y1S6mSAX*y9v6&2Hq70Ori7fo0_elmB@K#Pa`4PVJ;Ed?WNBJR&i zHQ~2{6UBxvqIfjfA3b&GRO+3WPVOjq`S?x1JfxgSo5hN+FPWpfm)B3pXkhQZc0DLg zLb_zw+VUVXmA0QW7Pa=eX_kVd?^B<-Az^kaKiX55I(TG`I= zY1`nn8(uv_IfuOjk75K}T5cb8{dgR+;(m^JH(EDQPk;P~#zd(owgDVsVSz02KYLPO z#VY2_quN)irar2b9nKc)2{319VtK(ZOM1Q$%ie=ab!p$T$6{MU=`i67>B?L?@T;;> z@T3-ywRPZ&fTw8Tzre~hlwn2(fTxuzEQ0t>7u_!0o-OsU&1m}oTcLntiT)wV!fsZI zbS<`s9!S%rK$_IQXaYCc$anIToD-)#GH_La20WfbAxXA)`(LA}mCVU4eX8tP34Wdc z9MzU8e-ctuL*9*9?c9MGd4`e7eQ7uO1TW;}e~kZ@;Eko7^aHxmD0MFnexfP`C-?iz z>AXhwgK+090rVOd&p3!6xn_?}dd721pRD=TO^t>^N+?v|iQzKus=18hq7t;Y>R)s!Gt%Bed znwi7{J_xKbr)lt}mFV(3|8uDYnDp!KTQC_j4H;j(>KJc(U$Sh*M3LX}hkN$d+4LI9 zBXe}ESlvrLIBX=veEu3K!K1yjGGszv!CO(*k00!D6>Q@}RYoWnBpn{kd0?Xs%(&7X zmEhg&&TAtDL3;hk&8(JEzIX+tLrv;j3#4=>-;AgR@Hy~m zRM=mL^%#F{o;F71WSf4Uv2Fy?qW{g<-nI+HoF6s?<^UA0D?d~#-zC~F0^>SbmVVhB zv2DYB3)gnOz<9safR^g*6GVnQ6))>Jzoi^?>xn7$VPIkS1tm=O?AzjKn`&>Ws1j&( zNf3{HK1@H=1;3hGljL)QU$E6&j%7uMzf7*9RH0;_iRjIB5E@XL?60A0H^nopsHk;w+-lw9LtpdxbtO|>6w0*e?OQ6ZJc;s# z23e+dhnU-x`?tolzC)RTkgn3E(!u*J&9BlCLec`57KhS&hnhqVfvor`gPmFV0RRgN>IvrF zyf9toxEKFyDbVWv^26DKCNjm9=R&ip`UOyGX;&9(e|R0N$2+_-dc7p{c z6LjO;S>_X?)P5#9BTC0&m!-!Z$CqGJe>;)f3~)|}uEsUT75oLZ3>R}JsSkS(6=t zPd_S*BJ9Qc+d@PjvJs^K2q~oPZr<AjyB8XbeXd%HnMY!VNnG5L~iULVAqAWF0*U1Tk4tO%|3srVSw|Y zeh^_ZbTm9+EN4(iwK~75BvVmblJd45rz7#N(`vKsH^Hc_=ugs~xc$m8YSuC#i7@LLpBn z$a>ZrOpMH(I7W&#Q$|9Ovgl}Eqhe(tCgR~tYd?huQ{tss_W%RG#d;nXlI7*pV0}I$ z8^y+V{$4~LNW;bf8{y3D;=Z(eeRxH6+JNb^3|VD@-KL5a%t&3lJs|^^oQ`W7_CVw7 z6gL^;F6jbt0KD;e`8Q`~SVNUx(2uriTI|IjMv{#HAeu3lwyCj#KSu8YQ(OBS|b|%XQn2(Jukc#;))R6qcuK_BC18<$apJP={3=mW1 zN1Ra}6;zvdTt<*aFWj-#x#%w@pm*u&$5UhXC60fWnd>UR)Fq@}ajA%eOj+hjBz^i} zLQB_Y7BK3{L(=o>)zNld466=7Hupml)S}*9+f;g`UKFLylRT>jQNNK>i|O9tZgKkDfCv5OC5K zUROy|z5`R}!q?c#}JJp^VyvjPD4fMAewkkF$W1h*;zrKzg z9-yuu1+g=GNIOqMr@iib2`8^BFhXFkX2am$q^Qc(Vt?1a>{qgdWVTjuDG_$pEKZ@j zj2WRK5K@^j2+NXE)>XxaEzp(wte92msVbOKMUm#4(U@ml!%HMTmupNOl)NF{QgAlLV!;0%wM(yI(r3ldSZu&B zGf)4?suKs&!~dvXd+5Ro?D$@nqESggWi?s{&9Z1af&H<7C~WYHVZ02Xu~Q62lc9A0 zJFYCogXtJTd<0jJt)06K-i+GK&gzwVw;Z!5EEGSzYbnvwJ3agYnQVWNiUx^u!hHLg zaiR@EM0w-bxrp5Tr=l2{O6N#Pu!*xDVAkZDtDqtC)kN1fr+G#Fd*yKW#zJ9%zX()% zrxo`r7!n@5<0%9d{ZN0`iw)Cx77`)wIT1*v%3p-GCg2U?n?pF*g76E)?}Y@^W7Pjj z(8vY;ARy-gsha=76kJasPvPe`4(DV5Vif|CrwpnGHz~CTyG`}rH44>6hzP5QSDk)1 zgNP^0@|*Vz>iD6WeaZ9O0==|%hBdhsTJ5#*mF0gt4*DU1w=AU zc&&%Dw_^r*r7ExJ-5Q0hP5=Dn@dWQ!BFSQ+>BY)(>!Ew*8lH9+hd6xX^P%~kIV+Bw zMPPf`@AlEVAL!3-6Q|Nizwz_1mYmZu)6+Ox&C2F#&q$5~r$e}%t$z{Cf#-b8jdmn) zm*;87=W*+S{X7A33KB$R43K*5k)&H20x$3t5ocLJ$t$}z0Vl1>%BkTWPR4CiaV^!( zYSJD4nJ9KXLGE9F*OGU!7*uAbc+nD=D5BCzJYPzB!xl_7bP}UpVu^uOk_rca!De9& zqXh)Tr4F5{cTD{Veecv^SwTLrb0JMO88YY*v9Snw zM+!BT7HA}x7Cd-GyL7PQ$C-)kR@KTt8vz7EKp@lo&otS?FuO@j{Zn5vYW}-q@9Wbd z?_FR-M=hoHM;^9??uziR=qb_Q1q&Y($SRLxlM}_|%Cx4=8DKUg01qTH<*&Ii4VCPY zUx0AcQk&dtvMYm@&2@wd*Z_FfFzs*rhSV90e#Vc+zS611YYEW#N6!CeH3o`o#R8To zQqX@+ux<`jS~nMR*YN-%&)cj4@NETcr1r0v-TlAIF~#r)TZ&9gCtWygVDX+@ z`Kn5H{?2|Qv2ftHM)NPnxQ*z95;Q0K=yHgaC^cM*z=xTk!XrA+nmzygXB&Edl|m zDxGrPy^5~P!)d^&Y9+pc3@tYn*0)SVKT_02QcU~J-Y1dSia6}hAcI2C%!ytWzVSkJ|5jPjz57juvC@rM%0|8)t z*V@qDuhRo_gZ>Y*pOqBx^mbM#(~C)j-;4NQLgN}m0xO2Oqs|#X&CXvOFMu7%{ubPT zXq|U`7SNd>O$W$G3$9NHvHtQ%_qPF2CME62Dn;a_@u*JSs7m!gi*f=N+Zzoo8O-c=~L@t$iCJP;rbyYIhK>vxpXbCs~h^8 zk5A>6$7{xujJ{y^(!nmt-eY<5Ss{qdDf&(*7h)WJ*~o4vb6xD>Bjm08#UJf(s4HS+ zYVFO|aw8VhEaQ;2v~;T&j4%dC=b+%Vq6C0Fp7Q<0OM^zubTj*`3%x4Rs3JHc1%G^g z#^M^%aL;{)kIc=o@TvM{?zbIWj>$8jt&VKN0;G)tg5j5iv&|c~OgCHKok1b2fNgEM zCG*_N>EKc*o9{;5!i}WZC{75x@@3+ zn=@a#Ef4{YcP;MUkZEMPJppf*QB~c8*JOtqPxs4y5!wB4%I)Fo#M0N6Fa%k!d#R3! z1ndm-TK$pYicsUb_Xg=bDt_)~VW@a#7<@F^d0(f286bc3w?4)f$7jr)`1`pEl6Er8 zA>axOvj4vl+#jozD=JNbU>CH)TNw949c=X1G9jVo0&HAcvAPr2?z(HjAGNadF%lAy zI7MXhVc)Y%;}WR-KS5Ww3j6E@C}j_uLWO#jP*&1z*|1yqm!meqMdP+V|7;Eod5CGj z@`p~89oK)PSr|`8T}c9+nF+J(jy+CT3i*m`Qi_#PiY8_9NxX9lok9MP%zxa6Xdy?$ zhCnfF%40wD%`FZMUw};d0n^1x=3ph|!P@yiW0#-I0;cA3%zcJ}>B{=GuNlrVsoV1ECMZu=$XVdeRvLYuK6&zLRQbLV%2Kjl>et10OL z&d?JfEPFv6?U_uUrReHlChpIXt&9q6q`v-YFq+?(aY3#)4z0v1tp==wl5o1k@IKu? z){VQjD)`ml15I{-BryCV)4k7TFw>q2^sOyu%{?-HJm??fYjmosr!1?!`zr-@Qf{M| zmP`Qq5dN*mrJ+(9e~8}RxR@aet~o!=1by4mE%HN&jT;F z-evVp*suSU<-m;HbL^UtbOBltItDLTk6}1y-#Gh*p?WAJc?<)2mO-|vI{X;!3-iCH z_1h8c64<7aqUIR2$h>kgPryR_Jj2SToJj%AROw-J!w_+NSp5=BmExawaVn`dGmsIJ zf`VeLA7URve;t0maFcFQ@qtmcO4Cy5YyVkMp|@BaI$FQ|SMNdZbsbZo(QmQk9_;C{ z6UhRq1>wd0*MVLdwvXH6HO)v{PtI=d99`1)7xoJmNleL1QmDsWN@}e~3(a@M=%HN0 z6LcIu*oQUmpy3QWjn7wMna35-%F_@s;khGt?U9Bu4uB4RZi=b2R1!pksGPT4O&$+3 zyt&G~ZRxT0rGz7p`H)YAx~>!d(ebGZ@z)cv*})Zi8q%58HvJj- zU5I`*62LBvOw9)JNxs`fr#mD+spr={mWBpezp9gbw!wf9mk)5X+5QpS{#p}zzyAKQ zxE80ECW|KRF`q`;1z1L39Ve%wN##|CXaiUrkybvDy!RykTXai9rCI7j5>(!yuL9=S zPVEqa`VILX*M9AeVi|b%hXSu|{YQQS=EB>oN?HV3VrpZUoe-v=?@@e?lkf*lYoL7p ztHj|EHAyY_u#pbDVG2<{Bmbt_sVRgyD11aXDPNMVsG;TOlskX?lIODB#7M%_{^6|V zHLDx6ne41Q4&i)gz8jrD?#SR-^+$Ip)|@&|^C2_$|rx)RWc-jz`1fFWe7BQIB`U%;tIiNG<5SWI_>NHx(y2Kn!K$^chI zZ4Wwf`tQUb-<1meLzm1#BNSSmVgxZsUxp!1dr>2fp|ll=8Z`L>#(Eu$@ut$Pmw)!T zedc&;K1Vej431J2?dw8a(LXJxxBO!A+Kd=Pk@_^(QH%0|Vl5>OR-bWz@rb45#9Byl z;`eO>mry8E9-@TSIIWHH)6qSelIP$w(UVXF(!41cWJjOUM}CI*sf`B`-IB+~4u5=i z-ICwmR>@3k&t5y__&JHZ#y%g03}_M|fKWLfAp)*hV#KwH5S_VhC^0;Yk25syu^2`7 z+x;Z#k{RPLdHkbmyPy%+B=fPKDLaVqehWxZX35?Y5%ocrsmEdZx@Xt{DHHlz(<81; z8EW+J8!FiQq7(exU<>8ESf}C2*pt8$+m@p{YS-`r*P%V8xSC1@Wkf!VTlP9QW@X$kNI0@D4zY9G*3&jDubw>P`m zjeIjk<4wFQsS0ROeoeWnQ{t{LS8yiySVz!PsPdx-+vroHE;_PfR4?Xtc^Fc3|Mu1g z9FoydG_xML@3a^2ETd}%nLDn96Qd@RCRU#qiyQ^Q+r(q*Nlj4?l%%OQ+()25_O83s z-e5%95lwy$i(iO;J~_y~Uc$-wcwEbSu%%`FvJ;m}tkGF?u|<&pYlJZu;4=bRb-F=FVZlgU6Oy6>fm+F1unR+F)Py4Q)&;>T_oco|ZEsOn5m#ZrT=EWB zR2B)zQFUs1a-ONr>OQxd+d`d{znb7lITNiYY9M}_xi6ycnL1{Xr**MMf!;G%4*&P) zFR34MCgJSG7*tZ7PdEJqv^~CJdGxt1Q9dkXunXkVMNec?MRG33tsn{^Us*`Si}+P5 z2Sk|mDvrjzlT`(!qR^RwLE1D)wH`hu@!3kWyKOo?fpgA0SxP=2>NvLPsNjzgO-ofR z2F|;lT;ptLfH#XaA#9c#VMpamzf9mT`!s6x|9n7(bZ3d2?P)gD0cE6~=-~mq_TV;| z+ObFLD(_eA01mg{-p7nn zkoUgdqxxIb`?DISSaU0{yw!o4;#eJKHMr4s!Dq`bY&-7w0QqYFUx^O_oI;;ob7^rM zeG}Gub#q3UAGW|izp6;}iP=&8h>&Uebz?1NCu-cKaAaB$YV+fTi!J?Hg(x@qxcrXb zsu0{V8IG4{P>J=}k6|M3T7fQHw!l^t@g~P;mF(5q>S$k#$uI++j)V+TiWnfa2+GjFtbLliwP{2!E3+DRY96#-9K3|pc z7sA?lQXa0>w&`bETw(Kwzg~DK=H08Ty>!JCxx(Xxn&{2gol;NBXV0rA2fA$IL{L1< zQDI}OpOb0HPJ~r-3;opf zWtOy8yz-M zxo#y)E{X`)6R3XtM|*>&0j|c&@I8+q15z?rcf7O|u+wM19eEZL~uIm+rfJJRB zdZG_d-wA}L>VJhdu$iN@smthY9+e=x$yJAXjuj@u?r z?!SUr1FU3lJ^2n|w;saEt)%Me5tNa0pgm+WW8?ljF`I0NygFb>ZO`FebZx}_D2w?T zqz`4mv17q@v246Fh_=L%p@6VZov{n<=pN;#B}LHnbpcZ#J=+9A6fssPpRKSeCh z2)Q_j5)gv4MO8eEZ{?;@bub@bBxo>oe=7zdkM=^i;Egoicza4sPrdwu7R0iyfKC%N zLS+=Jx#MjljhDU+IHte|_5ah&{@_A(KFuKL#p8S`n%kL^`)F13J@AUE`T+i%qt8Tpy;p>y2GmNMD)No-)a;QHRO~HpeVdF3Qy8e9c?XT z9%j7EA5Esy3{^XW3@TVkiY7xP*hYUVHFp^!!X)}DH&?bc-cpq@KG9=Q*>WrC}nnX4EL=MBsBBU z-_R71fSW`HZ|g%I-EtvC^-p-ETFk<1r#doOm?h%R`|V!%lP&=gqdodNC3Tf59ll++ zQJl@f>jzpZ@l?(!5V(;TVFWS0U|h~hBBshou%Z=_)}OCq?!B(p3TABPC5&0^UL=V` z_{>_X09Q)q$P^Cu>Ke?Eq_*wqTXomI1Ul0+17V$|3@mVn1IB{%a*}lbh#cd_#jv#t zHVWZ*5fkHg0?)n^Nvu_db21Km;PCSNBZK{+2I)uGItJ8j7hsb8T%Pn~OUa)=ul^Y|C?Zm)l1?2h2KWNt+V#hO2ApdGP~B%oAxB1f*LPl?7$~j=_YN)Z z`*MAN?SP>Dt%ecu=qp^hL&aq=lRedAjkL-E<3--@7`{8u-nFp5tm;IoublESiv7x% zhA;Yn3Ip{L`QZU>&J9s7jP>8iQU^`6?6p6|HChL$q1fYQ2UXl2d}LatFYU2%18BaI zY{I9Xpa>$dG><{Lb?ke!c}3Z?gmsYZ|4K$3WD?n!%-jIS{8av&gnH6{dB0|FD)&uX zL=;S;(O(4qu|ep}RR2V_89|ZA+iP8+`=G+c8s94(OA($$CM2Q2CD51u(`qyOhi{ZA zAR7l=sAj=#q0%qdn>n`_K5D$T4;xeP41@e4@-ReRey8@`cQvFg=6jM)(9g1-tZEKH z(_^L8kBBly8z37bnnl-+iVvkW%`haroXc_Uj7cNtRPMUuAW}S*%jiAm`KAhf@-8N` z#rjji;icM08a7&FB)KQ@@a+iIaxbqKa)-T3@x-(uqyl988T6909yg=9e*^hKYJi#9W_2o zMhf2`tegzs^9O-6h<{=9PguJeWy{JMa;LDRk>0r-n6|o0k6Rvc4c*sx!L_Ie6-yW* zUgp#u)!iJpgN(34T%ulq7MO}(M-))Wp-_f>v-~QeDY6LJ9ui;V^hf%1B^OiV5|;g? zR;}Kk3(9NTs~k^cvrp0?=f?Wk4YEEeGwVxe5vL7VibaRX!(vaAF^KJxMO4!mt!jL+z2(fVu?@kq3WD$wV6zAO9|93bBmZw}I`rM(LSCF` zqwp&zM8j%4U?nQtL@&pu>3hhJ=gwzhNA>0h!4DTaAxZ0WBUpHlf*-?lkQlxXN>xov z>>_n)b{EGwI@Fn#LW*O&NLSCs_X+FFsYoQ172(GsM4G`vnB>TJ0i&T;ZW|lQmCr4V z8a@nS=WCF63&QMUAjzFk1uW+nddLlbTF`EZE^Cm0^Fn0dvUu)e!+K;JRN(P8{i73Udy9}c^H*^KwKfK&yo&ITy-tlT;2*(8AWihYQ`$K>TUhjb^?j)D_};44 zzwVL+2#%J0zFPP>*Ib8MImmhOuu_77F>sGgTWGv;P}umejn;;dU+0J)^jhR})S2sU zUFGr`qw{FQ(j+H}xygeKrix`=0ii&$>_TdyKxD5odYRt6CKM9jyS8$p;YzLv@+O8> zFt9cdEP8D_#$hMF*T3?p!7BL9T^NN57$KsKz?TG#?)Vd#z5RcmbEm-=WvIxVDH;r!Q#6TW4y9D042d*q5D|$`hDMYO8H&u5p;Ag2 zONcZGrO1#erTTxbL(lX4e((Rk-go_f>s{~jdlzecTzj8=_O-9+?EBoOySo=l=6_zb zt)pDVmTu**=S&?xVw0MEuErXdbXP@{uPd(D`+DRI|1`Sr$_o{Rsv*YPOxq8BqhWb3 z;oJ@%-=|;pNRDbf}6GmtOXL=s7s@ zMBC3lj(j+5apC#k_SXlRCiSYnvsCR>)X0iy?9Q>}tsk4oy~+Kt^@`N!)-&SNWEPF9 zIWXiIduC~ETK0Bif!u1P!x_CLq}5GJmRhy*Fq}|^kjv`tS@I7bNT)9YcK$H5W1$8s zmS4L6gx35w`=fm<; zVj`}*Xf;eOd`BzUXE){<8v8ZbXFflhw6L&A_t~8>qhIiv+3na-OTX;-5~HlRwBt^p zHtXMMb~v&;JKHdMf5g-2nYTtHT%H!B+;&o=cSQY>XCqss$4_6ksB^OajyM)BwXNR` z+eteH?nqLyUY6@)Q`QS#9<^@6ig?kbg*|+8#vR8)_Q259*CX~Ssq{RVy>QFb3PnXb zP2=|aH!iu7-FdUaqzSk2;NShdVIQNA1BV@|yJU{)HA7;7|- z!C~&Q+YdI0UO(_GFn@UF(5sDE>|3MysV)zc$CcHu68Ij z*q7*$wB3K1M?_WjiL)jTd8hCXb%S*Ky`==lD*O(s((SyYfO+<|i5ND6s;)%$zjkK4|!UADn?fZSwFFD>)FU!E;)FyRc-4v*b=Eyiw7rj$WL z*T&SHK93ywkLvR&?nIs3Ys*dkm!HP?<~1GdHKotX@eNN(cWRAZ(Q59hVY`j9x$lLq zU#2@(YE5ZeU}4*4;qH#IS)uJq)~!i+Hq5;A;Ejye9@PaaYl9kxxP@l6?VI?@;)9%9 zosxOX#b$i1a_*kyqytsV*Cyx7>tTuU`LYh#9h+tj!|TUb{n+EbzL(u+qq@qVcXgfZ zlAiwX^2(~ZS#sjjLH=>K2Z>BhP8{=g>AJN!4b2a^&8bTa<&2xWmml%gg9f}p<6D57CU;KWUA_us zlc>MvK3>26@>UFv^*Y0k#B2AeJSK1jad=CpqH0!Nu6JM*_x*ku8&-v)P{YUMev6d|R78@>09|r*F5iX|77{ zykn8!jQ$RHr+ew7CRv$&dhdBIcG(-XRqio$-cypET}c>N-!#cYa_`J@hP&JE@L%Qm z*}dqxTxJzxGk=d_Lw_aJCU%j+rce^3V_1bdl@5a1T zertZ+C&_uUlJ%Le%`<$f3pTYK<4`iX=ip02=}99#)%EVz*Rluqw!vR`-M%||N10eL z+xxXgo9%Uzk1G32SYjp7byM8egej??j~+VG6!XFR$jA=9N=?$3uf)Z)6RO2k-~0MJ zZo(r7s1LcRIhm;VjN9 zZe`Mub8 zYne+I>-E`Frr?w}=uvT-9)4#oPD$Lb_2Vq{9PKgZ%4&~a&A4j2Wplmq0}cBNbB=xZ zq$DLB*B~F6wW;^1J*p_4LDs_!POW9a2j_*OZw%uJ=0q;Wam9*~pA;*42BD zr4RR>6Ppk$pCB`NPG6UZBg*xGvrAGF+8!ytcc{}aujjAcd_2FmsJwOl=XYOksH(+x ziCcHKsQ7$`;9eu!tjaE1Ypf(~^hNXKM#%$v_O8=j>1C19*c7>NrbOHH%;?;d+ehTK zY1kOJU-5op;WDkq=Gu!DXU}iAw<|VW92@f8ld-sG&K;)oRV;n5+22)ic0=^iZw^xr z8FXxW_QdBOmt)>OUlBF3cgJD<_Vw7()9Q>##qF)@UvwUwSW(>^EHlrx`ZoSrm4>;u z|Kq;j&HD|!v`N!e{pgT;%h%5i{IK=>#P|iqef+k~A82%9qqcov$!g;}1~$PDMvfg> z;^E?aF+ia%fqOCCv~}>K`AFqt{TQvEKMa<*II8OX^RunixoDdDSMyKZXEB+?zO_Gc z^VAYX9`EB^q5Eo@!oBbSvl(sA&B${K$(I>bHE@$^XRXN3Ihq}BJU4M23Vrw@?HNMl zOd7=-8`oBSU8NB`Fqdi)A8s)dipC{xbYah3{);0yms1Lvo9!$Io(Z1lkJ?GlkGA-S z+7Z!*Tk6Yfi<>21?dMDH1mF0vc6P|~$f$z4x@Hd*tKBYb6IE+mSBKm-tJG?1y+s_h zcU9}cC2H(QWX-H?)#s*e-uH3C?IHMWy71BnhxGpE0degS=V>MQqIo+Dl>TCbJHM6OHDm+@%t=(m|L#Ml*Q(pU`?7Zzd-+R9C zIooag8!xZo44*4sMmniwPuZvy_-MfCh)4G}wJ+W69QQm)wN~c7V!v_ktDF~aebK5W zzoPv1xerD0X_oC`-Y<$hvc!7w{p>+&jn$4DTHby!(%ISBBc#xiITt{g;zZlam(3r3~};n(WR=rz z`VRQe>eefjGmEbKg??JFso8r_Wn{6t=7$a*#GO^+xn$P6Fxjr)m6_)ALDaH z^-JII;r)YWZkrl-L~MS}4hfyDALH3lI(L3l+H8rvaeTUdpN`ihBp&LPOmyh?FxL2F zUsr|oUvoF~)=X5-Jka20)agV*>p-np+P<@ry*lrj->_|UkApE6wXI*u+?ukE2nkm^-YD?Z-vm+#6sB%%@n&UxF z*Ggohoa)m0(5^#ITix4bu4~>kN;R%&+%u1entqC>)>uZX4Yud*Z|$-^#Y8L5^kI?2 zXpblJ(_e><&v=#KJ6>^VYNAzrbZc{!h+kh+b|I)hb+wZ-{&ohhuTVHv?UY23sraSX z@Ab)C`yus@JqO>}Q*M%cv;yr!d z1V@|o^crO+wKH^`Nmy2b)%t;79sFVp&GeUA`J0+vws@ovyL6{XMW4verserueUYrf zq4xoEYneCk$j}o^h zCUtvdpfTjc^vKPRK6XE=dGWNAW68?L$L|Lx_D}PZOW$xzBi1b_+97bY?i=ksv5mF& z;uXZ>Y^uGtHV%$7F}osmHpz;!Tx{7nWymK53*;4F$)57Fo?6xS+R-O=e|B(a#ut^D z^ZjG(nBkCd1(OV_^i`w%Gmb4jW764W%=?;7Quo>Fvl$ivo5wh5B^BQ8P;eu6(V4@& zp$uOj^+c$lk?KaftWLN%efvI~c@NE7J>jK!)RQ>1DLAJ$7gHn@(nxjvS1T5TzQ{Uv z)ZgLRj*PkEHl6Kt_vSc_sx*`no+qaLLpgN}S6+6_zg^_F=5HTVJDIYin@Zs;3eJ2s z3g$X#UQjz3lDL0)ZszAgaqrA8t4kj|b7`Nx*F~%S_2$EE9mAV)jkV|IEKUvhK4s6G zjZa*A3{yWf_ol);@2KEi_S+V1ktlt{D;GuiW_FDolJM2Wp!>neyq}@X>aFi?`b4cr zEc!H1;+AxmJw10-%jv1h7rtGSYo(zur~Zt(8Q$?@*5{I4M+z^6h3IU~SbOvF{nqtt5EGBo>g#jz^z{aZC3iIsJd&I6%y!4# zS<#PzdykY`X4NYDZUZ;owq}8J*7f8gldfuQAC=VMRPXt{Ha~E*yZEv0^-?X%vX?qX zX6=1+Zj1hPU%uqWnDIAS7j;sIdNSeTE3^3uyP`tRkFyv)xUH@6{)io;jY2Qzv{eW? zTeszr_3SxD;locImdbz7XF}D`Jl$4h$EU}Ch;2AFH}_;}r$fWvgiKSpf7-re+>+g{ zQTd+nHObpQyInI{iA3W?uIXoGb(X2<;jGmCzRHk*rEWDfXncM55k+-R ze~-jJ6xGk~yB?+3^e4A*t#6Fv-3 z6dTHRAMirP|LFq>hm48$-_=>gC1;LIIU_rC*t9-*+?SO`i9U97^g=6E*+%v_JF@)1 zn&W$|)a&#ov|k;iJ+8>{Y{!iFMfXgLAC59hp0W{N0sH#xiHZaHQ${FXJ^f15y6l>6 zQ~kHfa6OOJTHB8{ySgjsHpys@*wc!CHuiZyy36k6ZsRX8Do9u7nmc{TxzPJSk8US7S`8V{>J@+F=-$%R^S0}*E!uVA zXnN9_YNQh|*s z7pJfekqs5b2l5|P7UXp)Eml#x(mJK_rvB%X523Cz7pqT2CY7=NLQTl=Td7A=CQ9Mu zjlP4}kV;GHMnss>*zzv}TdgtvetJ;M5R_G({+@~dSXTJM)E*-O9=tG`#gblV1rD{D z<|i|1l*{P`Lb5&CTQN8~dJG`gXz1^Yy;yu5>v*X~+iIPLrzM6^=W4I&^K?p{8c1 zVZlAbGgPjt_AQLP_He`for8~^*E-TqA!qb!N$Dl>;s>ES%{0bLI3G1YB_wZk@JZfy z<&WZ9UsHO`Om08)u*Z_rX{s@G`#tRqj;hEHzx+0`W6JiK7AmjBUtXmy8sOsQq?$Ww z)Sbd3iA8gjGK{u$l=a)%x~crz&MP@rG85~rEse|%@M%0ATs_EKb9H{#==*v+TbVTf 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 Qm~7{{X!wYMLk151Kjh Date: Thu, 3 Oct 2024 12:53:46 +0300 Subject: [PATCH 42/71] Add unit test for manipulating non images --- tests/Cms/Files/FileActionsTest.php | 32 +++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/tests/Cms/Files/FileActionsTest.php b/tests/Cms/Files/FileActionsTest.php index 655374b479..9a9a90bbe6 100644 --- a/tests/Cms/Files/FileActionsTest.php +++ b/tests/Cms/Files/FileActionsTest.php @@ -915,11 +915,9 @@ public function testUpdate($file) */ public function testManipulate($parent) { - $original = static::FIXTURES . '/test.jpg'; - $originalFile = File::create([ 'filename' => 'test.jpg', - 'source' => $original, + 'source' => static::FIXTURES . '/test.jpg', 'parent' => $parent ]); @@ -939,13 +937,31 @@ public function testManipulate($parent) /** * @dataProvider parentProvider */ - public function testManipulateValidFormat($parent) + public function testManipulateNonImage($parent) { - $original = static::FIXTURES . '/test.jpg'; + $originalFile = File::create([ + 'filename' => 'test.mp4', + 'source' => static::FIXTURES . '/test.mp4', + 'parent' => $parent + ]); + + $replacedFile = $originalFile->manipulate([ + 'width' => 100, + 'height' => 100, + ]); + // proves strictly that both are the same object + $this->assertSame($originalFile, $replacedFile); + } + + /** + * @dataProvider parentProvider + */ + public function testManipulateValidFormat($parent) + { $originalFile = File::create([ 'filename' => 'test.jpg', - 'source' => $original, + 'source' => static::FIXTURES . '/test.jpg', 'parent' => $parent ]); @@ -968,11 +984,9 @@ public function testManipulateValidFormat($parent) */ public function testManipulateInvalidValidFormat($parent) { - $original = static::FIXTURES . '/test.mp4'; - $originalFile = File::create([ 'filename' => 'test.mp4', - 'source' => $original, + 'source' => static::FIXTURES . '/test.mp4', 'parent' => $parent ]); From 05c8f402ad83797a28cda59a22e27063f4a8c10e Mon Sep 17 00:00:00 2001 From: Ahmet Bora Date: Thu, 3 Oct 2024 13:41:35 +0300 Subject: [PATCH 43/71] Fix unit tests --- src/Cms/File.php | 21 +++++++++------- src/Cms/Page.php | 24 +++++++++---------- .../Fields/Mixins/PagePickerMixinTest.php | 15 +++++++----- 3 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/Cms/File.php b/src/Cms/File.php index f5aaa189df..b91f6ee1c1 100644 --- a/src/Cms/File.php +++ b/src/Cms/File.php @@ -338,10 +338,11 @@ public function isAccessible(): bool return false; } - static $accessible = []; + static $accessible = []; + $role = $this->kirby()->user()?->role()->id() ?? '__none__'; + $template = $this->template() ?? '__none__'; + $accessible[$role] ??= []; - $role = $this->kirby()->user()?->role()->id() ?? '__none__'; - $template = $this->template() ?? '__none__'; return $accessible[$role][$template] ??= $this->permissions()->can('access'); } @@ -361,10 +362,11 @@ public function isListable(): bool return false; } - static $listable = []; + static $listable = []; + $role = $this->kirby()->user()?->role()->id() ?? '__none__'; + $template = $this->template() ?? '__none__'; + $listable[$role] ??= []; - $role = $this->kirby()->user()?->role()->id() ?? '__none__'; - $template = $this->template() ?? '__none__'; return $listable[$role][$template] ??= $this->permissions()->can('list'); } @@ -375,10 +377,11 @@ public function isListable(): bool */ public function isReadable(): bool { - static $readable = []; + static $readable = []; + $role = $this->kirby()->user()?->role()->id() ?? '__none__'; + $template = $this->template() ?? '__none__'; + $readable[$role] ??= []; - $role = $this->kirby()->user()?->role()->id() ?? '__none__'; - $template = $this->template() ?? '__none__'; return $readable[$role][$template] ??= $this->permissions()->can('read'); } diff --git a/src/Cms/Page.php b/src/Cms/Page.php index 574a4a385e..413a267396 100644 --- a/src/Cms/Page.php +++ b/src/Cms/Page.php @@ -523,11 +523,11 @@ public function isAccessible(): bool return false; } - static $accessible = []; - - $role = $this->kirby()->user()?->role()->id() ?? '__none__'; - $template = $this->intendedTemplate()->name(); + static $accessible = []; + $role = $this->kirby()->user()?->role()->id() ?? '__none__'; + $template = $this->intendedTemplate()->name(); $accessible[$role] ??= []; + return $accessible[$role][$template] ??= $this->permissions()->can('access'); } @@ -690,11 +690,11 @@ public function isListable(): bool return false; } - static $listable = []; - - $role = $this->kirby()->user()?->role()->id() ?? '__none__'; - $template = $this->intendedTemplate()->name(); + static $listable = []; + $role = $this->kirby()->user()?->role()->id() ?? '__none__'; + $template = $this->intendedTemplate()->name(); $listable[$role] ??= []; + return $listable[$role][$template] ??= $this->permissions()->can('list'); } @@ -747,11 +747,11 @@ public function isPublished(): bool */ public function isReadable(): bool { - static $readable = []; - - $role = $this->kirby()->user()?->role()->id() ?? '__none__'; - $template = $this->intendedTemplate()->name(); + static $readable = []; + $role = $this->kirby()->user()?->role()->id() ?? '__none__'; + $template = $this->intendedTemplate()->name(); $readable[$role] ??= []; + return $readable[$role][$template] ??= $this->permissions()->can('read'); } diff --git a/tests/Form/Fields/Mixins/PagePickerMixinTest.php b/tests/Form/Fields/Mixins/PagePickerMixinTest.php index bd51252302..9197c52508 100644 --- a/tests/Form/Fields/Mixins/PagePickerMixinTest.php +++ b/tests/Form/Fields/Mixins/PagePickerMixinTest.php @@ -11,9 +11,6 @@ class PagePickerMixinTest extends TestCase public function setUp(): void { parent::setUp(); - - // otherwise all pages won't be readable - $this->app->impersonate('kirby'); } public function testPagesWithoutParent() @@ -113,7 +110,7 @@ public function testPagesWithParent() public function testPageChildren() { - $this->app->clone([ + $app = $this->app->clone([ 'fields' => [ 'test' => [ 'mixins' => ['pagepicker'], @@ -128,6 +125,8 @@ public function testPageChildren() ], ]); + $app->impersonate('kirby'); + $page = new Page([ 'slug' => 'test', 'children' => [ @@ -165,7 +164,7 @@ public function testPageChildren() public function testPageChildrenWithoutSubpages() { - $this->app->clone([ + $app = $this->app->clone([ 'fields' => [ 'test' => [ 'mixins' => ['pagepicker'], @@ -181,6 +180,8 @@ public function testPageChildrenWithoutSubpages() ], ]); + $app->impersonate('kirby'); + $page = new Page([ 'slug' => 'test', 'children' => [ @@ -214,7 +215,7 @@ public function testPageChildrenWithoutSubpages() public function testMap() { - $this->app->clone([ + $app = $this->app->clone([ 'fields' => [ 'test' => [ 'mixins' => ['pagepicker'], @@ -232,6 +233,8 @@ public function testMap() ], ]); + $app->impersonate('kirby'); + $page = new Page([ 'slug' => 'test', 'children' => [ From d619400d1c0d7c95b5d315f346bdf2f35714357e Mon Sep 17 00:00:00 2001 From: Ahmet Bora Date: Thu, 3 Oct 2024 14:50:11 +0300 Subject: [PATCH 44/71] Add more unit tests that related manipulate process --- tests/Cms/Files/FileActionsTest.php | 169 ++++++++++++++++++++++++ tests/Cms/Files/fixtures/files/doc.pdf | Bin 0 -> 14335 bytes tests/Cms/Files/fixtures/files/test.pdf | Bin 0 -> 4911 bytes 3 files changed, 169 insertions(+) create mode 100644 tests/Cms/Files/fixtures/files/doc.pdf create mode 100644 tests/Cms/Files/fixtures/files/test.pdf diff --git a/tests/Cms/Files/FileActionsTest.php b/tests/Cms/Files/FileActionsTest.php index 9a9a90bbe6..7d6a5ddaf6 100644 --- a/tests/Cms/Files/FileActionsTest.php +++ b/tests/Cms/Files/FileActionsTest.php @@ -491,6 +491,122 @@ public function testChangeTemplateInvalidAccept() $file->changeTemplate('for-default-b'); } + public function testChangeTemplateManipulate() + { + $testImage = static::FIXTURES . '/test.jpg'; + + $app = $this->app->clone([ + 'blueprints' => [ + 'pages/test-default' => [ + 'sections' => [ + [ + 'type' => 'files', + 'template' => 'manipulate-a' + ], + [ + 'type' => 'files', + 'template' => 'manipulate-b' + ] + ] + ], + 'files/manipulate-a' => [ + 'title' => 'Manipulate A', + ], + 'files/manipulate-b' => [ + 'title' => 'Manipulate B', + 'create' => [ + 'width' => 100, + 'height' => 100, + 'format' => 'webp' + ] + ] + ], + 'site' => [ + 'children' => [ + [ + 'slug' => 'test', + 'template' => 'test-default', + 'files' => [ + [ + 'filename' => 'test.jpg', + 'content' => ['template' => 'manipulate-a'] + ] + ] + ] + ] + ] + ]); + + $app->impersonate('kirby'); + $page = $app->page('test'); + + F::copy($testImage, $page->root() . '/test.jpg'); + F::write($page->root() . '/test.jpg.txt', 'Template: manipulate-a'); + + $file = $page->file('test.jpg'); + $this->assertSame('jpg', $file->extension()); + $this->assertSame(128, $file->width()); + $this->assertSame(128, $file->height()); + + $file = $file->changeTemplate('manipulate-b'); + $this->assertSame('webp', $file->extension()); + $this->assertSame(100, $file->width()); + $this->assertSame(100, $file->height()); + } + + public function testChangeTemplateManipulateNonImage() + { + $app = $this->app->clone([ + 'blueprints' => [ + 'pages/test-default' => [ + 'sections' => [ + [ + 'type' => 'files', + 'template' => 'manipulate-a' + ], + [ + 'type' => 'files', + 'template' => 'manipulate-b' + ] + ] + ], + 'files/manipulate-a' => [ + 'title' => 'Manipulate A', + ], + 'files/manipulate-b' => [ + 'title' => 'Manipulate B', + 'create' => [ + 'width' => 100, + 'height' => 100, + 'format' => 'webp' + ] + ] + ], + 'site' => [ + 'children' => [ + [ + 'slug' => 'test', + 'template' => 'test-default', + 'files' => [ + [ + 'filename' => 'test.pdf', + 'content' => ['template' => 'manipulate-a'] + ] + ] + ] + ] + ] + ]); + + $app->impersonate('kirby'); + + $file = $app->page('test')->file('test.pdf'); + $newFile = $file->changeTemplate('manipulate-b'); + + $this->assertSame('pdf', $file->extension()); + $this->assertSame('pdf', $newFile->extension()); + } + public function testCopyRenewUuid() { // create dumy file @@ -709,6 +825,30 @@ public function testCreateImageAndManipulate($parent) $this->assertSame('test.webp', $result->filename()); } + /** + * @dataProvider parentProvider + */ + public function testCreateManipulateNonImage($parent) + { + $source = static::FIXTURES . '/test.pdf'; + + $result = File::create([ + 'filename' => 'test.pdf', + 'source' => $source, + 'parent' => $parent, + 'blueprint' => [ + 'name' => 'test', + 'create' => [ + 'width' => 100, + 'height' => 100, + 'format' => 'webp' + ] + ] + ]); + + $this->assertFileEquals($source, $result->root()); + } + /** * @dataProvider parentProvider */ @@ -865,6 +1005,35 @@ public function testReplaceImage($parent) $this->assertInstanceOf(Image::class, $replacedFile->asset()); } + /** + * @dataProvider parentProvider + */ + public function testReplaceManipulateNonImage($parent) + { + $original = static::FIXTURES . '/test.pdf'; + $replacement = static::FIXTURES . '/doc.pdf'; + + $originalFile = File::create([ + 'filename' => 'test.pdf', + 'source' => $original, + 'parent' => $parent, + 'blueprint' => [ + 'name' => 'test', + 'create' => [ + 'width' => 100, + 'height' => 100, + 'format' => 'webp' + ] + ] + ]); + + $this->assertFileEquals($original, $originalFile->root()); + + $replacedFile = $originalFile->replace($replacement); + $this->assertFileEquals($replacement, $replacedFile->root()); + $this->assertSame('pdf', $replacedFile->extension()); + } + /** * @dataProvider fileProvider */ diff --git a/tests/Cms/Files/fixtures/files/doc.pdf b/tests/Cms/Files/fixtures/files/doc.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b8c94598ded0496195dd5676ce1a24dd42723cd8 GIT binary patch literal 14335 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 Date: Thu, 3 Oct 2024 15:05:51 +0200 Subject: [PATCH 45/71] Clean up PagePickerMixinTest --- tests/Form/Fields/Mixins/PagePickerMixinTest.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/Form/Fields/Mixins/PagePickerMixinTest.php b/tests/Form/Fields/Mixins/PagePickerMixinTest.php index 9197c52508..c34530524e 100644 --- a/tests/Form/Fields/Mixins/PagePickerMixinTest.php +++ b/tests/Form/Fields/Mixins/PagePickerMixinTest.php @@ -8,11 +8,6 @@ class PagePickerMixinTest extends TestCase { public const TMP = KIRBY_TMP_DIR . '/Form.Fields.PagePickerMixin'; - public function setUp(): void - { - parent::setUp(); - } - public function testPagesWithoutParent() { $app = $this->app->clone([ From b1d013ec6be34dff91fe98ff4d443fbb4e5dd7d9 Mon Sep 17 00:00:00 2001 From: Ahmet Bora Date: Sat, 5 Oct 2024 14:39:48 +0300 Subject: [PATCH 46/71] Normalize license code #6722 --- src/Cms/License.php | 5 +++-- tests/Cms/System/LicenseTest.php | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Cms/License.php b/src/Cms/License.php index 4aa09af089..6179cbb137 100644 --- a/src/Cms/License.php +++ b/src/Cms/License.php @@ -42,8 +42,9 @@ public function __construct( protected string|null $date = null, protected string|null $signature = null, ) { - // normalize the email address - $this->email = $this->email === null ? null : $this->normalizeEmail($this->email); + // normalize arguments + $this->code = $this->code !== null ? trim($this->code) : null; + $this->email = $this->email !== null ? $this->normalizeEmail($this->email) : null; } /** diff --git a/tests/Cms/System/LicenseTest.php b/tests/Cms/System/LicenseTest.php index e413cf5ab4..c83fd3019e 100644 --- a/tests/Cms/System/LicenseTest.php +++ b/tests/Cms/System/LicenseTest.php @@ -271,6 +271,23 @@ public function testLabel() $this->assertSame('Unregistered', $license->label()); } + /** + * @covers ::__construct + * @covers ::normalizeEmail + */ + public function testNormalize() + { + $code = $this->code(LicenseType::Enterprise); + + $license = new License( + code : ' ' . $code . ' ', + email: ' mail@getkirby.com ' + ); + + $this->assertSame($code, $license->code()); + $this->assertSame('mail@getkirby.com', $license->email()); + } + /** * @covers ::normalizeDomain * @dataProvider providerForLicenseUrls From e4a7c8734191cfd8612ea690b6dadb435888e86f Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Sat, 7 Sep 2024 22:40:35 +0200 Subject: [PATCH 47/71] `Panel\Field::role()` allow passing `$roles` --- src/Panel/Field.php | 47 ++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/src/Panel/Field.php b/src/Panel/Field.php index e89571216a..c4e8def757 100644 --- a/src/Panel/Field.php +++ b/src/Panel/Field.php @@ -6,6 +6,7 @@ use Kirby\Cms\File; use Kirby\Cms\ModelWithContent; use Kirby\Cms\Page; +use Kirby\Cms\Roles; use Kirby\Form\Form; use Kirby\Http\Router; use Kirby\Toolkit\I18n; @@ -191,30 +192,32 @@ public static function password(array $props = []): array /** * User role radio buttons */ - public static function role(array $props = []): array - { - $kirby = App::instance(); - $isAdmin = $kirby->user()?->isAdmin() ?? false; - $roles = []; - - foreach ($kirby->roles() as $role) { - // exclude the admin role, if the user - // is not allowed to change role to admin - if ($role->name() === 'admin' && $isAdmin === false) { - continue; - } - - $roles[] = [ - 'text' => $role->title(), - 'info' => $role->description() ?? I18n::translate('role.description.placeholder'), - 'value' => $role->name() - ]; - } + public static function role( + array $props = [], + Roles|null $roles = null + ): array { + $kirby = App::instance(); + + // if no $roles where provided, fall back to all roles + // but exclude the admin role, if the user + // is not allowed to change role to admin + $roles ??= $kirby->roles()->filter( + fn ($role) => + $role->name() !== 'admin' || + $kirby->user()?->isAdmin() === true + ); + + // turn roles into radio field options + $roles = $roles->values(fn ($role) => [ + 'text' => $role->title(), + 'info' => $role->description() ?? I18n::translate('role.description.placeholder'), + 'value' => $role->name() + ]); return array_merge([ - 'label' => I18n::translate('role'), - 'type' => count($roles) <= 1 ? 'hidden' : 'radio', - 'options' => $roles + 'label' => I18n::translate('role'), + 'type' => count($roles) <= 1 ? 'hidden' : 'radio', + 'options' => $roles ], $props); } From 7a90c9e374ece8262a0e278aa03a03656a3a2f6f Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Sat, 7 Sep 2024 22:44:00 +0200 Subject: [PATCH 48/71] Role field: always use radio input --- src/Panel/Field.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Panel/Field.php b/src/Panel/Field.php index c4e8def757..af385a6563 100644 --- a/src/Panel/Field.php +++ b/src/Panel/Field.php @@ -215,9 +215,9 @@ public static function role( ]); return array_merge([ - 'label' => I18n::translate('role'), - 'type' => count($roles) <= 1 ? 'hidden' : 'radio', - 'options' => $roles + 'label' => I18n::translate('role'), + 'type' => count($roles) === 0 ? 'hidden' : 'radio', + 'options' => $roles ], $props); } From ff52c1b570d5099fec1035edfab9c54b4330cac1 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Sat, 7 Sep 2024 22:53:06 +0200 Subject: [PATCH 49/71] Pass `$roles` to `Field::role()` in dialogs --- config/areas/users/dialogs.php | 26 +++++++++++++++++--------- src/Panel/Field.php | 6 ++++-- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/config/areas/users/dialogs.php b/config/areas/users/dialogs.php index 1f1da96561..835af3cccc 100644 --- a/config/areas/users/dialogs.php +++ b/config/areas/users/dialogs.php @@ -20,12 +20,19 @@ 'pattern' => 'users/create', 'load' => function () { $kirby = App::instance(); + $roles = $kirby->roles(); // get default value for role if ($role = $kirby->request()->get('role')) { - $role = $kirby->roles()->find($role)?->id(); + $role = $roles->find($role)?->id(); } + // get role field definition, incl. available role options + $roles = Field::role( + roles: $roles, + props: ['required' => true] + ); + return [ 'component' => 'k-form-dialog', 'props' => [ @@ -39,9 +46,7 @@ 'translation' => Field::translation([ 'required' => true ]), - 'role' => Field::role([ - 'required' => true - ]) + 'role' => $roles ], 'submitButton' => I18n::translate('create'), 'value' => [ @@ -49,7 +54,7 @@ 'email' => '', 'password' => '', 'translation' => $kirby->panelLanguage(), - 'role' => $role ?? $kirby->user()->role()->name() + 'role' => $role ?? $roles['options'][0]['value'] ?? null ] ] ]; @@ -228,10 +233,13 @@ 'component' => 'k-form-dialog', 'props' => [ 'fields' => [ - 'role' => Field::role([ - 'label' => I18n::translate('user.changeRole.select'), - 'required' => true, - ]) + 'role' => Field::role( + roles: App::instance()->roles(), + props: [ + 'label' => I18n::translate('user.changeRole.select'), + 'required' => true, + ] + ) ], 'submitButton' => I18n::translate('user.changeRole'), 'value' => [ diff --git a/src/Panel/Field.php b/src/Panel/Field.php index af385a6563..5fd788431f 100644 --- a/src/Panel/Field.php +++ b/src/Panel/Field.php @@ -199,9 +199,11 @@ public static function role( $kirby = App::instance(); // if no $roles where provided, fall back to all roles - // but exclude the admin role, if the user + $roles ??= $kirby->roles(); + + // exclude the admin role, if the user // is not allowed to change role to admin - $roles ??= $kirby->roles()->filter( + $roles = $roles->filter( fn ($role) => $role->name() !== 'admin' || $kirby->user()?->isAdmin() === true From db1818b550740436be9e525167412dac26ac94b3 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Sat, 7 Sep 2024 22:56:35 +0200 Subject: [PATCH 50/71] Fix cs --- src/Panel/Field.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Panel/Field.php b/src/Panel/Field.php index 5fd788431f..d792fc098e 100644 --- a/src/Panel/Field.php +++ b/src/Panel/Field.php @@ -218,7 +218,7 @@ public static function role( return array_merge([ 'label' => I18n::translate('role'), - 'type' => count($roles) === 0 ? 'hidden' : 'radio', + 'type' => count($roles) < 1 ? 'hidden' : 'radio', 'options' => $roles ], $props); } From 343ed97bd6fbfe7df847496b42d2e3ce772ff730 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Sun, 8 Sep 2024 10:01:14 +0200 Subject: [PATCH 51/71] Use correct roles collections --- config/areas/users/dialogs.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/areas/users/dialogs.php b/config/areas/users/dialogs.php index 835af3cccc..7fe3d1d36e 100644 --- a/config/areas/users/dialogs.php +++ b/config/areas/users/dialogs.php @@ -20,7 +20,7 @@ 'pattern' => 'users/create', 'load' => function () { $kirby = App::instance(); - $roles = $kirby->roles(); + $roles = $kirby->user()->roles('create'); // get default value for role if ($role = $kirby->request()->get('role')) { @@ -234,7 +234,7 @@ 'props' => [ 'fields' => [ 'role' => Field::role( - roles: App::instance()->roles(), + roles: $user->roles('change'), props: [ 'label' => I18n::translate('user.changeRole.select'), 'required' => true, From e876e2d1546ce0b297009b84f6429aeaa464c41a Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Tue, 24 Sep 2024 10:50:22 +0200 Subject: [PATCH 52/71] Add another unit test --- tests/Panel/Areas/UsersDialogsTest.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/Panel/Areas/UsersDialogsTest.php b/tests/Panel/Areas/UsersDialogsTest.php index b1581f1eaa..17995a95ce 100644 --- a/tests/Panel/Areas/UsersDialogsTest.php +++ b/tests/Panel/Areas/UsersDialogsTest.php @@ -35,6 +35,26 @@ public function testCreate(): void $this->assertSame('admin', $props['value']['role']); } + public function testCreateWithRoleQuery(): void + { + $this->app = $this->app->clone([ + 'request' => [ + 'query' => [ + 'role' => 'editor', + ] + ] + ]); + + $this->installEditor(); + $this->login(); + + $dialog = $this->dialog('users/create'); + $props = $dialog['props']; + + $this->assertFormDialog($dialog); + $this->assertSame('editor', $props['value']['role']); + } + public function testCreateOnSubmit(): void { $this->submit([ From 9478d4b85d5d0b845b3eb721052cb2f6ea236aff Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Tue, 8 Oct 2024 10:48:42 +0700 Subject: [PATCH 53/71] Adapt parameter name `User::roles($action)` --- config/areas/users/dialogs.php | 2 +- src/Cms/User.php | 14 +++++++------- src/Cms/UserRules.php | 2 +- src/Panel/User.php | 2 +- tests/Cms/Users/UserTest.php | 6 +++--- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/config/areas/users/dialogs.php b/config/areas/users/dialogs.php index 7fe3d1d36e..29de9af101 100644 --- a/config/areas/users/dialogs.php +++ b/config/areas/users/dialogs.php @@ -234,7 +234,7 @@ 'props' => [ 'fields' => [ 'role' => Field::role( - roles: $user->roles('change'), + roles: $user->roles('changeRole'), props: [ 'label' => I18n::translate('user.changeRole.select'), 'required' => true, diff --git a/src/Cms/User.php b/src/Cms/User.php index 238f1b14de..022603fe85 100644 --- a/src/Cms/User.php +++ b/src/Cms/User.php @@ -577,26 +577,26 @@ public function role(): Role * Returns all available roles for this user, * that can be selected by the authenticated user * - * @param string|null $purpose User action for which the roles are used (create, change) + * @param string|null $action User action for which the roles are used (create, change) */ - public function roles(string|null $purpose = null): Roles + public function roles(string|null $action = null): Roles { $kirby = $this->kirby(); $roles = $kirby->roles(); // for the last admin, // only their current role (admin) is available for changing - if ($purpose === 'change' && $this->isLastAdmin() === true) { + if ($action === 'changeRole' && $this->isLastAdmin() === true) { // a collection with just the one role of the user return $roles->filter('id', $this->role()->id()); } // filter roles based on the user action // as user permissions and/or options can restrict these further - $roles = match ($purpose) { - 'create' => $roles->canBeCreated(), - 'change' => $roles->canBeChanged(), - default => $roles + $roles = match ($action) { + 'create' => $roles->canBeCreated(), + 'changeRole' => $roles->canBeChanged(), + default => $roles }; // exclude the admin role, if the user isn't an admin themselves diff --git a/src/Cms/UserRules.php b/src/Cms/UserRules.php index 0a302d3d45..4ac93b891b 100644 --- a/src/Cms/UserRules.php +++ b/src/Cms/UserRules.php @@ -128,7 +128,7 @@ public static function changeRole(User $user, string $role): bool } // prevent changing to role that is not available for user - if ($user->roles('change')->find($role) instanceof Role === false) { + if ($user->roles('changeRole')->find($role) instanceof Role === false) { throw new InvalidArgumentException([ 'key' => 'user.role.invalid', ]); diff --git a/src/Panel/User.php b/src/Panel/User.php index 75124944b0..01a1813940 100644 --- a/src/Panel/User.php +++ b/src/Panel/User.php @@ -70,7 +70,7 @@ public function dropdown(array $options = []): array 'dialog' => $url . '/changeRole', 'icon' => 'bolt', 'text' => I18n::translate('user.changeRole'), - 'disabled' => $this->isDisabledDropdownOption('changeRole', $options, $permissions) || $this->model->roles('change')->count() < 2 + 'disabled' => $this->isDisabledDropdownOption('changeRole', $options, $permissions) || $this->model->roles('changeRole')->count() < 2 ]; $result[] = [ diff --git a/tests/Cms/Users/UserTest.php b/tests/Cms/Users/UserTest.php index c262f65782..c5cfd70913 100644 --- a/tests/Cms/Users/UserTest.php +++ b/tests/Cms/Users/UserTest.php @@ -380,7 +380,7 @@ public function testRoles(): void // last admin has only admin role as option $user = $app->user('admin@getkirby.com'); - $roles = $user->roles('change')->values(fn ($role) => $role->id()); + $roles = $user->roles('changeRole')->values(fn ($role) => $role->id()); $this->assertSame(['admin'], $roles); } @@ -430,7 +430,7 @@ public function testRolesFilteredForPurpose(): void ]); $app->impersonate('editor@getkirby.com'); - $user = $app->user('editor@getkirby.com'); + $user = $app->user('editor@getkirby.com'); $roles = $user->roles()->values(fn ($role) => $role->id()); $this->assertSame(['client', 'editor', 'guest'], $roles); @@ -438,7 +438,7 @@ public function testRolesFilteredForPurpose(): void $roles = $user->roles('create')->values(fn ($role) => $role->id()); $this->assertSame(['editor', 'guest'], $roles); - $roles = $user->roles('change')->values(fn ($role) => $role->id()); + $roles = $user->roles('changeRole')->values(fn ($role) => $role->id()); $this->assertSame(['client', 'editor'], $roles); } From b5db86a1066bb7a2a255296572f59876fa847dd1 Mon Sep 17 00:00:00 2001 From: Nico Hoffmann Date: Tue, 8 Oct 2024 10:49:14 +0700 Subject: [PATCH 54/71] Explicitly pass `canChange*` props to user view --- panel/src/components/Views/Users/UserAvatar.vue | 8 +++++++- panel/src/components/Views/Users/UserProfile.vue | 12 +++++++++--- panel/src/components/Views/Users/UserView.vue | 14 ++++++++++++-- src/Panel/User.php | 11 ++++++++--- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/panel/src/components/Views/Users/UserAvatar.vue b/panel/src/components/Views/Users/UserAvatar.vue index 9d2999ed67..0e4f7cffa2 100644 --- a/panel/src/components/Views/Users/UserAvatar.vue +++ b/panel/src/components/Views/Users/UserAvatar.vue @@ -1,5 +1,10 @@