From 5fc72273aa2febc62a21473b2b2d018b604d8f6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Mon, 22 Jul 2024 18:40:57 +0200 Subject: [PATCH 01/15] refactor: Update Laravel drivers in README.md The supported Laravel drivers in the README.md file have been updated to include MySQL, MariaDB, PostgreSQL, SQLite, SQL Server, and MongoDB. This change ensures that the information provided to users is accurate and up-to-date. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2e810ef..0be5beb 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ If you want to use some helpers with [Inertia](https://inertiajs.com/), you can ## Features -- 💽 All Laravel databases are supported: MySQL, MariaDB, PostgreSQL, SQLite, SQL Server, [MongoDB](https://github.com/mongodb/laravel-mongodb) +- 💽 Supported Laravel drivers: MySQL, MariaDB, PostgreSQL, SQLite, SQL Server, [MongoDB](https://github.com/mongodb/laravel-mongodb) - 💬 Generate TS types for [Eloquent models](https://laravel.com/docs/master/eloquent) - 👭 Generate TS types for [Eloquent relations](https://laravel.com/docs/master/eloquent-relationships) - 🪄 Generate TS types for [`casts`](https://laravel.com/docs/11.x/eloquent-mutators#attribute-casting) (include native `enum` support) From d7f3700bc2893a4e2f2edc1455263d6d64448dbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Tue, 23 Jul 2024 10:42:10 +0200 Subject: [PATCH 02/15] docs --- README.md | 8 +- docs/examples.md | 241 +++++++++++++----- tests/EloquentTypeArtisanMysqlTest.php | 25 ++ ...anTest.php => EloquentTypeArtisanTest.php} | 0 ...serTest.php => EloquentTypeParserTest.php} | 0 tests/docs/Movie.php | 68 +++++ tests/docs/create_movie_table.php | 25 ++ tests/docs/freeze.md | 7 + tests/docs/output/.gitignore | 2 + tests/docs/types-eloquent.d.ts | 25 ++ 10 files changed, 339 insertions(+), 62 deletions(-) create mode 100644 tests/EloquentTypeArtisanMysqlTest.php rename tests/{EloquentArtisanTest.php => EloquentTypeArtisanTest.php} (100%) rename tests/{EloquentParserTest.php => EloquentTypeParserTest.php} (100%) create mode 100644 tests/docs/Movie.php create mode 100644 tests/docs/create_movie_table.php create mode 100644 tests/docs/freeze.md create mode 100644 tests/docs/output/.gitignore create mode 100644 tests/docs/types-eloquent.d.ts diff --git a/README.md b/README.md index 0be5beb..54a31e4 100644 --- a/README.md +++ b/README.md @@ -214,7 +214,7 @@ With options: - --`R`|`routes-path`: Path to routes directory. - --`O`|`output-path`: Path to output. -## More +## Advanced ### MongoDB @@ -222,9 +222,7 @@ With options: Database isn't parsed like with relational databases. The package will parse `key`, `fillable` and `hidden` to get all fields. If some fields are missing, you can [override them manually](https://github.com/kiwilan/typescriptable-laravel#override-models). All relations and accessors are supported. -### Troubleshooting - -#### Database prefix +### Database prefix You can use `prefix` variable into `config/database.php` file. @@ -236,7 +234,7 @@ You can use `prefix` variable into `config/database.php` file. ], ``` -#### Override models +### Override models `kiwilan/typescriptable-laravel` will cover many cases, but if you want to override some models, you can just create a type like `resources/js/types/index.ts` and extends `Model` type. diff --git a/docs/examples.md b/docs/examples.md index e9a39d6..b789af8 100644 --- a/docs/examples.md +++ b/docs/examples.md @@ -7,87 +7,195 @@ An example of Eloquent model. ```php 'array', + 'budget' => PublishStatusEnum::class, + 'homepage' => PublishStatusEnum::class, + 'revenue' => 'integer', + 'is_multilingual' => 'boolean', + 'added_at' => 'datetime:Y-m-d', ]; - protected $withCount = [ - 'chapters', + protected $appends = [ + 'show_route', + 'api_route', ]; - protected $casts = [ - 'status' => PublishStatusEnum::class, - 'published_at' => 'datetime:Y-m-d', + protected $hidden = [ + 'budget', + 'edition', ]; - public function getTimeToReadAttribute(): int + public function registerMediaConversions(?Media $media = null): void + { + $this + ->addMediaConversion('preview') + ->fit(Fit::Contain, 300, 300) + ->nonQueued(); + } - public function chapters(): HasMany + public function getShowRouteAttribute(): string + { + return 'movies.show'; + } - public function category(): BelongsTo + /** + * @return string + */ + protected function apiRoute(): Attribute + { + return Attribute::make( + get: fn (?string $value) => ucfirst($value), + ); + } - public function author(): BelongsTo + public function similars(): \Illuminate\Database\Eloquent\Relations\BelongsToMany + { + return $this->belongsToMany(Movie::class, 'similars', 'movie_id', 'similar_id'); + } + + public function recommendations(): \Illuminate\Database\Eloquent\Relations\BelongsToMany + { + return $this->belongsToMany(Movie::class, 'recommendations', 'movie_id', 'recommendation_id'); + } - public function tags(): BelongsToMany + public function members(): \Illuminate\Database\Eloquent\Relations\MorphToMany + { + return $this + ->morphToMany(Member::class, 'memberable') + ->withPivot([ + 'character', + 'job', + 'department', + 'order', + 'is_adult', + 'known_for_department', + 'is_crew', + ]) + ->orderBy('order'); + } + + public function author(): BelongsTo + { + return $this->belongsTo(Author::class, 'author_id'); + } } ``` TS file generated at `resources/js/types-eloquent.d.ts` -```typescript -declare namespace App { - declare namespace Models { - export type Story = { - id: number; - title: string; - slug?: string; - abstract?: string; - original_link?: string; - picture?: string; - status: "draft" | "scheduled" | "published"; - published_at?: Date; - meta_title?: string; - meta_description?: string; - created_at?: Date; - updated_at?: Date; - author_id?: number; - category_id?: number; - time_to_read?: number; - chapters?: Chapter[]; - category?: Category; - author?: Author; - tags?: Tag[]; - chapters_count?: number; - tags_count?: number; - }; +```ts +declare namespace App.Models { + export interface Movie { + id: string; + tmdb_id?: number; + title?: string; + year?: number; + subtitles: any[]; + slug: string; + french_title?: string; + original_title?: string; + release_date?: string; + original_language?: string; + overview?: string; + popularity?: number; + is_adult?: number; + homepage?: "draft" | "scheduled" | "published"; + tagline?: string; + status?: string; + certification?: string; + tmdb_url?: string; + imdb_id?: string; + runtime?: number; + budget: "draft" | "scheduled" | "published"; + revenue?: number; + edition?: string; + version?: string; + library?: string; + is_multilingual: boolean; + poster?: string; + poster_tmdb?: string; + poster_color?: string; + backdrop?: string; + backdrop_tmdb?: string; + author_id?: number; + added_at?: string; + fetched_at?: string; + fetched_has_failed: number; + created_at?: string; + updated_at?: string; + show_route?: string; + api_route?: string; + similars_count?: number; + recommendations_count?: number; + members_count?: number; + media_count?: number; + similars?: App.Models.Movie[]; + recommendations?: App.Models.Movie[]; + members?: App.Models.Member[]; + author?: App.Models.NestedAuthor; + media?: any[]; } - // With `paginate` option. - export type PaginateLink = { +} + +declare namespace App { + export interface PaginateLink { url: string; label: string; active: boolean; - }; - export type Paginate = { + } + export interface Paginate { data: T[]; current_page: number; first_page_url: string; @@ -101,7 +209,26 @@ declare namespace App { prev_page_url: string; to: number; total: number; - }; + } + export interface ApiPaginate { + data: T[]; + links: { + first?: string; + last?: string; + prev?: string; + next?: string; + }; + meta: { + current_page: number; + from: number; + last_page: number; + links: App.PaginateLink[]; + path: string; + per_page: number; + to: number; + total: number; + }; + } } ``` @@ -112,7 +239,7 @@ Usage in Vue component. ```vue ``` @@ -122,7 +249,7 @@ Or with paginate option. ```vue ``` diff --git a/tests/EloquentTypeArtisanMysqlTest.php b/tests/EloquentTypeArtisanMysqlTest.php new file mode 100644 index 0000000..368156d --- /dev/null +++ b/tests/EloquentTypeArtisanMysqlTest.php @@ -0,0 +1,25 @@ +execute(); + + $eloquent = outputDir(TypescriptableConfig::eloquentFilename()); + expect($eloquent)->toBeFile(); +}); diff --git a/tests/EloquentArtisanTest.php b/tests/EloquentTypeArtisanTest.php similarity index 100% rename from tests/EloquentArtisanTest.php rename to tests/EloquentTypeArtisanTest.php diff --git a/tests/EloquentParserTest.php b/tests/EloquentTypeParserTest.php similarity index 100% rename from tests/EloquentParserTest.php rename to tests/EloquentTypeParserTest.php diff --git a/tests/docs/Movie.php b/tests/docs/Movie.php new file mode 100644 index 0000000..3a9d328 --- /dev/null +++ b/tests/docs/Movie.php @@ -0,0 +1,68 @@ + 'array', + 'budget' => \Kiwilan\Typescriptable\Tests\Data\Enums\BudgetEnum::class, + 'homepage' => \Kiwilan\Typescriptable\Tests\Data\Enums\HomePageEnum::class, + 'revenue' => 'integer', + 'is_multilingual' => 'boolean', + 'added_at' => 'datetime:Y-m-d', + ]; + + protected $appends = [ + 'show_route', + 'api_route', + ]; + + protected $hidden = [ + 'budget', + 'edition', + ]; + + public function getShowRouteAttribute(): string + { + return 'movies.show'; + } + + /** + * @return string + */ + protected function apiRoute(): \Illuminate\Database\Eloquent\Casts\Attribute + { + return \Illuminate\Database\Eloquent\Casts\Attribute::make( + get: fn (?string $value) => ucfirst($value), + ); + } + + public function recommendations(): \Illuminate\Database\Eloquent\Relations\BelongsToMany + { + return $this->belongsToMany(Movie::class, 'recommendations', 'movie_id', 'recommendation_id'); + } + + public function members(): \Illuminate\Database\Eloquent\Relations\MorphToMany + { + return $this->morphToMany(Member::class, 'memberable'); + } + + public function author(): \Illuminate\Database\Eloquent\Relations\BelongsTo + { + return $this->belongsTo(\Kiwilan\Typescriptable\Tests\Data\Models\Nested\Author::class, 'author_id'); + } +} diff --git a/tests/docs/create_movie_table.php b/tests/docs/create_movie_table.php new file mode 100644 index 0000000..5d1c8ca --- /dev/null +++ b/tests/docs/create_movie_table.php @@ -0,0 +1,25 @@ +ulid('id')->primary(); + $table->string('title')->nullable()->unique(); + $table->json('subtitles'); + $table->string('homepage')->nullable(); + $table->enum('budget', [ + \Kiwilan\Typescriptable\Tests\Data\Enums\BudgetEnum::high->value, + \Kiwilan\Typescriptable\Tests\Data\Enums\BudgetEnum::middle->value, + \Kiwilan\Typescriptable\Tests\Data\Enums\BudgetEnum::low->value, + ])->default(\Kiwilan\Typescriptable\Tests\Data\Enums\BudgetEnum::high); + $table->bigInteger('revenue')->nullable(); + $table->boolean('is_multilingual')->default(false); + $table->foreignId('author_id')->nullable()->constrained('authors')->nullOnDelete(); + $table->dateTime('added_at')->nullable(); + $table->dateTime('fetched_at')->nullable(); + $table->timestamps(); + }); + } +}; diff --git a/tests/docs/freeze.md b/tests/docs/freeze.md new file mode 100644 index 0000000..fdc9475 --- /dev/null +++ b/tests/docs/freeze.md @@ -0,0 +1,7 @@ +# Freeze + +```sh +freeze tests/docs/create_movie_table.php --theme github-dark --window --font.family "Victor Mono" -o tests/docs/output/create_movie_table.png +freeze tests/docs/Movie.php --theme github-dark --window --font.family "Victor Mono" -o tests/docs/output/movie.png +freeze tests/docs/types-eloquent.d.ts --theme github-dark --window --font.family "Victor Mono" -o tests/docs/output/types-eloquent.png +``` diff --git a/tests/docs/output/.gitignore b/tests/docs/output/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/tests/docs/output/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tests/docs/types-eloquent.d.ts b/tests/docs/types-eloquent.d.ts new file mode 100644 index 0000000..04fb63c --- /dev/null +++ b/tests/docs/types-eloquent.d.ts @@ -0,0 +1,25 @@ +declare namespace App.Models { + export interface Movie { + id: string + title?: string + subtitles: any[] + homepage?: 'imdb' | 'tmdb' + budget: 'high' | 'middle' | 'low' + revenue?: number + is_multilingual: boolean + added_at?: string + fetched_at?: string + author_id?: number + created_at?: string + updated_at?: string + show_route?: string + api_route?: string + similars_count?: number + recommendations_count?: number + members_count?: number + media_count?: number + recommendations?: App.Models.Movie[] + members?: App.Models.Member[] + author?: App.Models.NestedAuthor + } +} From 4997f28af9061f9c7e9154930abf5641054c548d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Tue, 23 Jul 2024 20:33:11 +0200 Subject: [PATCH 03/15] Refactoring routes --- README.md | 34 +- config/typescriptable.php | 14 +- src/Commands/TypescriptableCommand.php | 28 +- src/Commands/TypescriptableRoutesCommand.php | 24 +- .../TypescriptableSettingsCommand.php | 16 +- src/Typed/Database/Table.php | 2 +- src/Typed/Database/Types/IColumn.php | 2 +- src/Typed/Database/Types/MysqlColumn.php | 2 +- src/Typed/Database/Types/PostgreColumn.php | 2 +- src/Typed/Database/Types/SqlServerColumn.php | 2 +- src/Typed/Database/Types/SqliteColumn.php | 2 +- src/Typed/Eloquent/EloquentTypeArtisan.php | 4 +- src/Typed/Eloquent/EloquentTypeParser.php | 6 +- .../Eloquent/Parser/ParserModelFillable.php | 2 +- .../PrinterToPhp.php} | 6 +- .../PrinterToTypescript.php} | 6 +- .../{Schema => Schemas}/Model/SchemaModel.php | 2 +- .../Model/SchemaModelAttribute.php | 2 +- .../Model/SchemaModelRelation.php | 2 +- .../{Schema => Schemas}/SchemaApp.php | 6 +- src/Typed/EloquentType.php | 10 +- src/Typed/Route/Models/TypeRoute.php | 177 -- src/Typed/Route/Models/TypeRouteParam.php | 75 - src/Typed/Route/Printer/PrinterToList.php | 92 + .../PrinterToTypes.php} | 55 +- src/Typed/Route/RouteConfig.php | 17 + src/Typed/Route/RouteGenerator.php | 132 - src/Typed/Route/RouteList.php | 110 - src/Typed/Route/Schemas/RouteTypeItem.php | 152 ++ .../Route/Schemas/RouteTypeItemParam.php | 33 + src/Typed/RouteType.php | 107 +- src/Typescriptable.php | 5 +- tests/CommandRoutesTest.php | 1 - tests/Data/Enums/BudgetEnum.php | 10 + tests/Data/Enums/HomePageEnum.php | 9 + .../migrations/create_models_tables.php | 4 +- .../create_models_tables_mongodb.php | 235 -- tests/Data/routes.json | 2168 +++++++++-------- tests/RouteTypeTest.php | 9 +- tests/TestCase.php | 7 +- tests/docs/Movie.php | 25 +- tests/docs/example.gif | Bin 0 -> 367828 bytes 42 files changed, 1673 insertions(+), 1924 deletions(-) rename src/Typed/Eloquent/{Converter/EloquentToPhp.php => Printer/PrinterToPhp.php} (94%) rename src/Typed/Eloquent/{Converter/EloquentToTypescript.php => Printer/PrinterToTypescript.php} (92%) rename src/Typed/Eloquent/{Schema => Schemas}/Model/SchemaModel.php (98%) rename src/Typed/Eloquent/{Schema => Schemas}/Model/SchemaModelAttribute.php (98%) rename src/Typed/Eloquent/{Schema => Schemas}/Model/SchemaModelRelation.php (97%) rename src/Typed/Eloquent/{Schema => Schemas}/SchemaApp.php (96%) delete mode 100644 src/Typed/Route/Models/TypeRoute.php delete mode 100644 src/Typed/Route/Models/TypeRouteParam.php create mode 100644 src/Typed/Route/Printer/PrinterToList.php rename src/Typed/Route/{RouteTypes.php => Printer/PrinterToTypes.php} (72%) create mode 100644 src/Typed/Route/RouteConfig.php delete mode 100644 src/Typed/Route/RouteGenerator.php delete mode 100644 src/Typed/Route/RouteList.php create mode 100644 src/Typed/Route/Schemas/RouteTypeItem.php create mode 100644 src/Typed/Route/Schemas/RouteTypeItemParam.php create mode 100644 tests/Data/Enums/BudgetEnum.php create mode 100644 tests/Data/Enums/HomePageEnum.php delete mode 100644 tests/Data/database/migrations/create_models_tables_mongodb.php create mode 100644 tests/docs/example.gif diff --git a/README.md b/README.md index 54a31e4..faf8ff4 100644 --- a/README.md +++ b/README.md @@ -12,22 +12,20 @@ [![laravel][laravel-src]][laravel-href] [![npm][npm-version-src]][npm-version-href] -PHP package for Laravel **to type Eloquent models**, **routes**, [**Spatie Settings**](https://github.com/spatie/laravel-settings) with **autogenerated TypeScript**. +PHP package for Laravel to type [**Eloquent models**](https://laravel.com/docs/master/eloquent), [**routes**](https://laravel.com/docs/master/routing), [**Spatie Settings**](https://github.com/spatie/laravel-settings) with **autogenerated TypeScript**. -If you want to use some helpers with [Inertia](https://inertiajs.com/), you can install [associated NPM package](https://github.com/kiwilan/typescriptable-laravel/blob/main/plugin/README.md). +If you want to use some helpers with [Inertia](https://inertiajs.com/), you can install [associated NPM package](#about-npm-package-kiwilantypescriptable-laravel). -> [!NOTE] -> -> - [`kiwilan/typescriptable-laravel`](https://packagist.org/packages/kiwilan/typescriptable-laravel): current PHP package for [Laravel](https://laravel.com/). -> - [`@kiwilan/typescriptable-laravel`](https://github.com/kiwilan/typescriptable-laravel/blob/main/plugin/README.md): optional NPM package to use with [Vite](https://vitejs.dev/) and [Inertia](https://inertiajs.com/) to have some helpers, if you want to know more about, [check documentation](https://github.com/kiwilan/typescriptable-laravel/blob/main/plugin/README.md). -> - [`tightenco/ziggy`](https://github.com/tighten/ziggy) is required **only** for [`@kiwilan/typescriptable-laravel`](https://github.com/kiwilan/typescriptable-laravel/blob/main/plugin/README.md) (NPM package) +![Eldorado Road Both Scene](https://i.giphy.com/1ffOwHDZehVb6JlRid.webp) + +> Because you need PHP and Typescript. ## Features - 💽 Supported Laravel drivers: MySQL, MariaDB, PostgreSQL, SQLite, SQL Server, [MongoDB](https://github.com/mongodb/laravel-mongodb) - 💬 Generate TS types for [Eloquent models](https://laravel.com/docs/master/eloquent) - 👭 Generate TS types for [Eloquent relations](https://laravel.com/docs/master/eloquent-relationships) -- 🪄 Generate TS types for [`casts`](https://laravel.com/docs/11.x/eloquent-mutators#attribute-casting) (include native `enum` support) +- 🪄 Generate TS types for [`casts`](https://laravel.com/docs/master/eloquent-mutators#attribute-casting) (include native `enum` support) - 📝 Generate TS types for `appends` and all [`accessors`](https://laravel.com/docs/master/eloquent-mutators#accessors-and-mutators) - `Illuminate\Database\Eloquent\Casts\Attribute` with PHPDoc - [`get*Attribute`](https://laravel.com/docs/8.x/eloquent-mutators#defining-an-accessor) methods @@ -44,10 +42,6 @@ If you want to use some helpers with [Inertia](https://inertiajs.com/), you can - `php artisan typescriptable:settings` for `spatie/laravel-settings` - `php artisan typescriptable:routes` for Laravel routes -![Eldorado Road Both Scene](https://i.giphy.com/1ffOwHDZehVb6JlRid.webp) - -> Because you need PHP and Typescript. - ### Roadmap - [ ] Add parser for [calebporzio/sushi](https://github.com/calebporzio/sushi) @@ -146,7 +140,7 @@ Here is a complete `tsconfig.json` file example (you can adapt paths): NPM package is fully optional, you can use only PHP package. It's built for [Vite](https://vitejs.dev/) with [`laravel-vite-plugin`](https://github.com/laravel/vite-plugin) and [Inertia](https://inertiajs.com/) (only for [Vue 3](https://vuejs.org/)). It's SSR compatible. -This package add some helpers to use **Laravel routes** fully typed with TypeScript into Vue components and some composables to use with Vue. +This package add some helpers to use **Laravel routes** fully typed with TypeScript into Vue components and some composables to use with Vue. The best setup to install this package is to use [Jetstream](https://jetstream.laravel.com), a Laravel starter kit and [`tightenco/ziggy`](https://github.com/tighten/ziggy) is required. Read full documentation here: [`@kiwilan/typescriptable-laravel`](https://github.com/kiwilan/typescriptable-laravel/blob/main/plugin/README.md). @@ -160,7 +154,7 @@ php artisan vendor:publish --tag="typescriptable-config" > [!IMPORTANT] > -> You can configure `engine.eloquent` with `artisan` or `parser` to change parser engine. By default, it uses `artisan` command with [`model:show`](https://blog.laravel.com/laravel-new-model-show-command) command. `artisan` is default engine because it's more reliable and faster than `parser` engine. +> You can configure `engine.eloquent` with `artisan` or `parser` to change parser engine. By default, it uses `artisan` command with [`model:show`](https://blog.laravel.com/laravel-new-model-show-command) command. `artisan` is default engine because it's more reliable and faster than `parser` engine. With MongoDB, the engine doesn't matter because MongoDB database can't be parsed like relational databases. ## Usage @@ -258,10 +252,22 @@ const book = ref(); ``` +### Print PHP classes + +If you want to print PHP classes, you can use `--php-path` option with `php artisan typescriptable:eloquent` command. + +```bash +php artisan typescriptable:eloquent --php-path=app/print +``` + +These classes will be generated from Eloquent models as real PHP classes. + ### Examples Check [examples](docs/examples.md) documentation. +![Example output](tests/docs/example.gif) + ### Testing Create a `.env` file with your database configuration diff --git a/config/typescriptable.php b/config/typescriptable.php index 3502cd5..3e9ad67 100644 --- a/config/typescriptable.php +++ b/config/typescriptable.php @@ -62,8 +62,8 @@ * Options for the routes. */ 'routes' => [ - 'filename' => 'types-routes.d.ts', - 'filename_list' => 'routes.ts', + 'types' => 'types-routes.d.ts', + 'list' => 'routes.ts', /** * Use routes `path` instead of `name` for the type name. */ @@ -73,19 +73,21 @@ */ 'skip' => [ 'name' => [ - '__clockwork.*', 'debugbar.*', 'horizon.*', 'telescope.*', 'nova.*', 'lighthouse.*', - 'livewire.*', - 'ignition.*', 'filament.*', 'log-viewer.*', + 'two-factor.*', ], 'path' => [ - 'api/*', + '_ignition/*', + '__clockwork/*', + 'clockwork/*', + 'two-factor-challenge', + 'livewire', ], ], ], diff --git a/src/Commands/TypescriptableCommand.php b/src/Commands/TypescriptableCommand.php index 1bd9ae2..af3842f 100644 --- a/src/Commands/TypescriptableCommand.php +++ b/src/Commands/TypescriptableCommand.php @@ -14,42 +14,34 @@ class TypescriptableCommand extends Command public $description = 'Generate types.'; - public function __construct( - public bool $eloquent = false, - public bool $routes = false, - public bool $settings = false, - ) { - parent::__construct(); - } - public function handle(): int { $this->newLine(); $this->info('Generating types...'); - $this->eloquent = $this->option('eloquent') ?: false; - $this->routes = $this->option('routes') ?: false; - $this->settings = $this->option('settings') ?: false; + $eloquent = $this->option('eloquent') ?: false; + $routes = $this->option('routes') ?: false; + $settings = $this->option('settings') ?: false; - if (! $this->eloquent && ! $this->routes && ! $this->settings) { - $this->eloquent = true; - $this->routes = true; - $this->settings = true; + if (! $eloquent && ! $routes && ! $settings) { + $eloquent = true; + $routes = true; + $settings = true; } - if ($this->eloquent) { + if ($eloquent) { $this->info('Generating types for Eloquent...'); Artisan::call('typescriptable:eloquent', [ ], $this->output); } - if ($this->routes) { + if ($routes) { $this->info('Generating types for Routes...'); Artisan::call('typescriptable:routes', [ ], $this->output); } - if ($this->settings) { + if ($settings) { $this->info('Generating types for Settings...'); Artisan::call('typescriptable:settings', [ ], $this->output); diff --git a/src/Commands/TypescriptableRoutesCommand.php b/src/Commands/TypescriptableRoutesCommand.php index 7e08ea1..76ab09d 100644 --- a/src/Commands/TypescriptableRoutesCommand.php +++ b/src/Commands/TypescriptableRoutesCommand.php @@ -3,32 +3,26 @@ namespace Kiwilan\Typescriptable\Commands; use Illuminate\Console\Command; +use Kiwilan\Typescriptable\Typed\Route\RouteConfig; use Kiwilan\Typescriptable\Typescriptable; class TypescriptableRoutesCommand extends Command { public $signature = 'typescriptable:routes - {--j|json : Path to JSON route list} - {--l|list : Print a TS file with all routes as object} - {--o|output-path : Path to output TS file}'; + {--o|output-path : Path to output TS file} + {--l|list : Print a TS file with all routes as object}'; public $description = 'Generate Routes types.'; - public function __construct( - public ?string $json_output = null, - public ?bool $with_list = false, - public ?string $output_path = null, - ) { - parent::__construct(); - } - public function handle(): int { - $this->json_output = (string) $this->option('json'); - $this->with_list = (bool) $this->option('list'); - $this->output_path = (string) $this->option('output-path'); + $outputPath = (string) $this->option('output-path'); + $withList = (bool) $this->option('list'); - Typescriptable::routes($this->json_output, $this->with_list, $this->output_path); + Typescriptable::routes(new RouteConfig( + outputPath: $outputPath, + withList: $withList, + )); $this->info('Generated Routes types.'); diff --git a/src/Commands/TypescriptableSettingsCommand.php b/src/Commands/TypescriptableSettingsCommand.php index b3a6278..0591e8e 100644 --- a/src/Commands/TypescriptableSettingsCommand.php +++ b/src/Commands/TypescriptableSettingsCommand.php @@ -14,21 +14,13 @@ class TypescriptableSettingsCommand extends Command public $description = 'Generate Spatie Settings types.'; - public function __construct( - public ?string $settingsPath = null, - public ?string $outputPath = null, - public ?string $extends = null, - ) { - parent::__construct(); - } - public function handle(): int { - $this->settingsPath = (string) $this->option('settings-path'); - $this->outputPath = (string) $this->option('output-path'); - $this->extends = (string) $this->option('extends'); + $settingsPath = (string) $this->option('settings-path'); + $outputPath = (string) $this->option('output-path'); + $extends = (string) $this->option('extends'); - Typescriptable::settings($this->settingsPath, $this->outputPath, $this->extends); + Typescriptable::settings($settingsPath, $outputPath, $extends); $this->info('Generated settings types.'); diff --git a/src/Typed/Database/Table.php b/src/Typed/Database/Table.php index 7098320..aaa9b15 100644 --- a/src/Typed/Database/Table.php +++ b/src/Typed/Database/Table.php @@ -8,7 +8,7 @@ use Kiwilan\Typescriptable\Typed\Database\Types\PostgreColumn; use Kiwilan\Typescriptable\Typed\Database\Types\SqliteColumn; use Kiwilan\Typescriptable\Typed\Database\Types\SqlServerColumn; -use Kiwilan\Typescriptable\Typed\Eloquent\Schema\Model\SchemaModelAttribute; +use Kiwilan\Typescriptable\Typed\Eloquent\Schemas\Model\SchemaModelAttribute; class Table { diff --git a/src/Typed/Database/Types/IColumn.php b/src/Typed/Database/Types/IColumn.php index 7a94f95..26fdb01 100644 --- a/src/Typed/Database/Types/IColumn.php +++ b/src/Typed/Database/Types/IColumn.php @@ -2,7 +2,7 @@ namespace Kiwilan\Typescriptable\Typed\Database\Types; -use Kiwilan\Typescriptable\Typed\Eloquent\Schema\Model\SchemaModelAttribute; +use Kiwilan\Typescriptable\Typed\Eloquent\Schemas\Model\SchemaModelAttribute; interface IColumn { diff --git a/src/Typed/Database/Types/MysqlColumn.php b/src/Typed/Database/Types/MysqlColumn.php index 75d4c30..ea74d95 100644 --- a/src/Typed/Database/Types/MysqlColumn.php +++ b/src/Typed/Database/Types/MysqlColumn.php @@ -2,7 +2,7 @@ namespace Kiwilan\Typescriptable\Typed\Database\Types; -use Kiwilan\Typescriptable\Typed\Eloquent\Schema\Model\SchemaModelAttribute; +use Kiwilan\Typescriptable\Typed\Eloquent\Schemas\Model\SchemaModelAttribute; class MysqlColumn implements IColumn { diff --git a/src/Typed/Database/Types/PostgreColumn.php b/src/Typed/Database/Types/PostgreColumn.php index 030cbd8..6923ae6 100644 --- a/src/Typed/Database/Types/PostgreColumn.php +++ b/src/Typed/Database/Types/PostgreColumn.php @@ -2,7 +2,7 @@ namespace Kiwilan\Typescriptable\Typed\Database\Types; -use Kiwilan\Typescriptable\Typed\Eloquent\Schema\Model\SchemaModelAttribute; +use Kiwilan\Typescriptable\Typed\Eloquent\Schemas\Model\SchemaModelAttribute; class PostgreColumn implements IColumn { diff --git a/src/Typed/Database/Types/SqlServerColumn.php b/src/Typed/Database/Types/SqlServerColumn.php index 9793d11..4941118 100644 --- a/src/Typed/Database/Types/SqlServerColumn.php +++ b/src/Typed/Database/Types/SqlServerColumn.php @@ -2,7 +2,7 @@ namespace Kiwilan\Typescriptable\Typed\Database\Types; -use Kiwilan\Typescriptable\Typed\Eloquent\Schema\Model\SchemaModelAttribute; +use Kiwilan\Typescriptable\Typed\Eloquent\Schemas\Model\SchemaModelAttribute; class SqlServerColumn implements IColumn { diff --git a/src/Typed/Database/Types/SqliteColumn.php b/src/Typed/Database/Types/SqliteColumn.php index 4e27b06..5ea3e53 100644 --- a/src/Typed/Database/Types/SqliteColumn.php +++ b/src/Typed/Database/Types/SqliteColumn.php @@ -2,7 +2,7 @@ namespace Kiwilan\Typescriptable\Typed\Database\Types; -use Kiwilan\Typescriptable\Typed\Eloquent\Schema\Model\SchemaModelAttribute; +use Kiwilan\Typescriptable\Typed\Eloquent\Schemas\Model\SchemaModelAttribute; class SqliteColumn implements IColumn { diff --git a/src/Typed/Eloquent/EloquentTypeArtisan.php b/src/Typed/Eloquent/EloquentTypeArtisan.php index 62873c2..66d8dc7 100644 --- a/src/Typed/Eloquent/EloquentTypeArtisan.php +++ b/src/Typed/Eloquent/EloquentTypeArtisan.php @@ -3,8 +3,8 @@ namespace Kiwilan\Typescriptable\Typed\Eloquent; use Illuminate\Support\Facades\Artisan; -use Kiwilan\Typescriptable\Typed\Eloquent\Schema\Model\SchemaModel; -use Kiwilan\Typescriptable\Typed\Eloquent\Schema\SchemaApp; +use Kiwilan\Typescriptable\Typed\Eloquent\Schemas\Model\SchemaModel; +use Kiwilan\Typescriptable\Typed\Eloquent\Schemas\SchemaApp; use Kiwilan\Typescriptable\Typed\EloquentType; use Kiwilan\Typescriptable\Typed\Utils\Schema\SchemaClass; use Kiwilan\Typescriptable\Typed\Utils\Schema\SchemaCollection; diff --git a/src/Typed/Eloquent/EloquentTypeParser.php b/src/Typed/Eloquent/EloquentTypeParser.php index 5607091..52e0922 100644 --- a/src/Typed/Eloquent/EloquentTypeParser.php +++ b/src/Typed/Eloquent/EloquentTypeParser.php @@ -5,9 +5,9 @@ use Illuminate\Database\Eloquent\Model; use Kiwilan\Typescriptable\Typed\Database\Table; use Kiwilan\Typescriptable\Typed\Eloquent\Parser\ParserRelation; -use Kiwilan\Typescriptable\Typed\Eloquent\Schema\Model\SchemaModel; -use Kiwilan\Typescriptable\Typed\Eloquent\Schema\Model\SchemaModelAttribute; -use Kiwilan\Typescriptable\Typed\Eloquent\Schema\SchemaApp; +use Kiwilan\Typescriptable\Typed\Eloquent\Schemas\Model\SchemaModel; +use Kiwilan\Typescriptable\Typed\Eloquent\Schemas\Model\SchemaModelAttribute; +use Kiwilan\Typescriptable\Typed\Eloquent\Schemas\SchemaApp; use Kiwilan\Typescriptable\Typed\EloquentType; use Kiwilan\Typescriptable\Typed\Utils\Schema\SchemaClass; use Kiwilan\Typescriptable\Typed\Utils\Schema\SchemaCollection; diff --git a/src/Typed/Eloquent/Parser/ParserModelFillable.php b/src/Typed/Eloquent/Parser/ParserModelFillable.php index 2bda7dc..a247594 100644 --- a/src/Typed/Eloquent/Parser/ParserModelFillable.php +++ b/src/Typed/Eloquent/Parser/ParserModelFillable.php @@ -3,7 +3,7 @@ namespace Kiwilan\Typescriptable\Typed\Eloquent\Parser; use Illuminate\Database\Eloquent\Model; -use Kiwilan\Typescriptable\Typed\Eloquent\Schema\Model\SchemaModelAttribute; +use Kiwilan\Typescriptable\Typed\Eloquent\Schemas\Model\SchemaModelAttribute; use Kiwilan\Typescriptable\Typed\Utils\Schema\SchemaClass; class ParserModelFillable diff --git a/src/Typed/Eloquent/Converter/EloquentToPhp.php b/src/Typed/Eloquent/Printer/PrinterToPhp.php similarity index 94% rename from src/Typed/Eloquent/Converter/EloquentToPhp.php rename to src/Typed/Eloquent/Printer/PrinterToPhp.php index e50e9c4..83e850d 100644 --- a/src/Typed/Eloquent/Converter/EloquentToPhp.php +++ b/src/Typed/Eloquent/Printer/PrinterToPhp.php @@ -1,11 +1,11 @@ */ public array $content; diff --git a/src/Typed/Eloquent/Converter/EloquentToTypescript.php b/src/Typed/Eloquent/Printer/PrinterToTypescript.php similarity index 92% rename from src/Typed/Eloquent/Converter/EloquentToTypescript.php rename to src/Typed/Eloquent/Printer/PrinterToTypescript.php index 3bd1864..7021432 100644 --- a/src/Typed/Eloquent/Converter/EloquentToTypescript.php +++ b/src/Typed/Eloquent/Printer/PrinterToTypescript.php @@ -1,14 +1,14 @@ run(); - $typescript = EloquentToTypescript::make($type->app()->models(), "{$type->config()->outputPath}/{$type->config()->tsFilename}"); + $typescript = PrinterToTypescript::make($type->app()->models(), "{$type->config()->outputPath}/{$type->config()->tsFilename}"); $typescript->print(); if ($type->config()->phpPath) { - $php = EloquentToPhp::make($type->app()->models(), $type->config()->phpPath); + $php = PrinterToPhp::make($type->app()->models(), $type->config()->phpPath); $php->print(); } diff --git a/src/Typed/Route/Models/TypeRoute.php b/src/Typed/Route/Models/TypeRoute.php deleted file mode 100644 index 39d4672..0000000 --- a/src/Typed/Route/Models/TypeRoute.php +++ /dev/null @@ -1,177 +0,0 @@ -uri(); - $cleanPath = Str::replace('/', '.', $path); - $cleanPath = Str::replace('{', ' ', $cleanPath); - $cleanPath = Str::replace('}', ' ', $cleanPath); - $cleanPath = Str::replace('?', ' ', $cleanPath); - $camelPath = Str::camel($cleanPath); - - $name = $route->getName(); - $namePath = $camelPath; - - if (! $name) { - $name = $route->uri(); - } - - $type = new self( - id: self::generateId($route), - uri: $route->uri(), - fullUri: $route->uri() !== '/' ? "/{$route->uri()}" : '/', - name: $name, - namePath: $namePath, - - ); - - $type->methods = $route->methods(); - $type->parameters = TypeRouteParam::make($route); - $type->method = $type->setMethod(); - $type->nameCamel = $type->dashesToCamelCase($type->name); - $type->namePathCamel = $type->dashesToCamelCase($type->namePath).ucfirst($type->method); - $type->routeName = $type->namePathCamel; - - return $type; - } - - public static function generateId(Route $route): string - { - $methods = $route->methods(); - $methods = implode(' ', $methods); - $id = "{$methods} {$route->uri()}"; - - return Str::slug($id); - } - - public function addMethods(array $methods): self - { - $this->methods = array_merge($this->methods, $methods); - - return $this; - } - - public function id(): string - { - return $this->id; - } - - public function uri(): string - { - return $this->uri; - } - - public function fullUri(): string - { - return $this->fullUri; - } - - public function name(): ?string - { - return $this->name; - } - - public function namePath(): ?string - { - return $this->namePath; - } - - public function nameCamel(): ?string - { - return $this->nameCamel; - } - - public function namePathCamel(): ?string - { - return $this->namePathCamel; - } - - public function routeName(): ?string - { - return $this->routeName; - } - - public function methods(): array - { - return $this->methods; - } - - public function method(): string - { - return $this->method; - } - - /** - * @return TypeRouteParam[] - */ - public function parameters(): array - { - return $this->parameters; - } - - public function nameType(): string - { - return TypescriptableConfig::routesUsePath() - ? $this->namePathCamel() - : $this->nameCamel(); - } - - public function pathType(): string - { - return TypescriptableConfig::routesUsePath() - ? $this->fullUri() - : $this->name(); - } - - private function setMethod(): string - { - $method = 'GET'; - - foreach ($this->methods as $value) { - if ($value !== 'HEAD') { - $method = $value; - } - } - - return $method; - } - - private function dashesToCamelCase(string $string, bool $capitalizeFirstCharacter = false) - { - $str = str_replace('-', '', ucwords($string, '.')); - - if (! $capitalizeFirstCharacter) { - $str = lcfirst($str); - } - - $str = str_replace('.', '', $str); - - return ucfirst($str); - } -} diff --git a/src/Typed/Route/Models/TypeRouteParam.php b/src/Typed/Route/Models/TypeRouteParam.php deleted file mode 100644 index 99230ad..0000000 --- a/src/Typed/Route/Models/TypeRouteParam.php +++ /dev/null @@ -1,75 +0,0 @@ -uri, $params); - - if (array_key_exists(1, $params)) { - $params = $params[1]; - } - - /** @var TypeRouteParam[] */ - $list = []; - - foreach ($params as $param) { - $name = $param; - $required = true; - - if (str_contains($param, '?')) { - $name = str_replace('?', '', $param); - $required = false; - } - - $list[] = new TypeRouteParam( - uri: $route->uri, - name: $name, - required: $required, - ); - } - - return $list; - } - - public function uri(): string - { - return $this->uri; - } - - public function name(): string - { - return $this->name; - } - - public function type(): string - { - return $this->type; - } - - public function required(): bool - { - return $this->required; - } - - public function default(): ?string - { - return $this->default; - } -} diff --git a/src/Typed/Route/Printer/PrinterToList.php b/src/Typed/Route/Printer/PrinterToList.php new file mode 100644 index 0000000..f8f4e2b --- /dev/null +++ b/src/Typed/Route/Printer/PrinterToList.php @@ -0,0 +1,92 @@ + $routes + */ + public static function make(Collection $routes): string + { + $self = new self(); + + $contents = []; + foreach ($routes as $route) { + $contents[] = $self->typescript($route); + } + + return $self->template(implode("\n", $contents)); + } + + private function template(string $contents): string + { + $head = Typescriptable::head(); + $appUrl = config('app.url'); + + return << = { + {$contents}, + } + + declare global { + interface Window { + Routes: Record + } + } + + const appUrl = '{$appUrl}' + + if (typeof window !== 'undefined') { + window.Routes = Routes + } + + export { Routes, appUrl } + + typescript; + } + + private function typescript(RouteTypeItem $route): string + { + $params = collect($route->parameters()) + ->map(fn (RouteTypeItemParam $param) => "{$param->name()}: 'string',"); + + if ($params->isEmpty()) { + $params = 'params: undefined'; + } else { + $params = $params->join(' '); + if (str_contains($params, ',')) { + $paramsExplode = explode(',', $params); + $paramsExplode = array_map(fn ($param) => trim($param), $paramsExplode); + $paramsExplode = array_filter($paramsExplode, fn ($param) => ! empty($param)); + $paramsExplode = array_map(fn ($param) => "{$param},", $paramsExplode); + $params = implode("\n ", $paramsExplode); + } + $params = <<methods(); + $methods = array_filter($methods, fn ($method) => $method !== 'HEAD'); + $methods = array_map(fn ($method) => "'{$method}'", $methods); + $methods = implode(', ', $methods); + + return <<name()}': { + name: '{$route->name()}', + path: '{$route->uri()}', + {$params}, + methods: [{$methods}], + } + typescript; + } +} diff --git a/src/Typed/Route/RouteTypes.php b/src/Typed/Route/Printer/PrinterToTypes.php similarity index 72% rename from src/Typed/Route/RouteTypes.php rename to src/Typed/Route/Printer/PrinterToTypes.php index 2784821..647f165 100644 --- a/src/Typed/Route/RouteTypes.php +++ b/src/Typed/Route/Printer/PrinterToTypes.php @@ -1,18 +1,15 @@ */ - protected Collection $routes; - // ROUTE NAMES protected ?string $tsNames = null; @@ -40,15 +37,24 @@ class RouteTypes protected ?string $tsGlobalTypesDelete = null; /** - * @param Collection $routes + * @param Collection $routes + */ + protected function __construct( + protected Collection $routes, + ) {} + + /** + * @param Collection $routes */ - public static function make(Collection $routes): self + public static function make(Collection $routes): string { - $self = new self(); - $self->routes = $routes; - $self->parse(); + $self = new self($routes); - return $self; + $self->tsNames = $self->typescriptNames(); + $self->tsPaths = $self->typescriptPaths(); + $self->tsParams = $self->typescriptParams(); + + return $self->get(); } public function get(): string @@ -86,17 +92,10 @@ public function get(): string typescript; } - private function parse() - { - $this->tsNames = $this->setTsNames(); - $this->tsPaths = $this->setTsPaths(); - $this->tsParams = $this->setTsParams(); - } - - private function setTsNames(): string + private function typescriptNames(): string { $names = []; - $this->collectRoutes(function (TypeRoute $route) use (&$names) { + $this->collectRoutes(function (RouteTypeItem $route) use (&$names) { $names[] = "'{$route->name()}'"; }); @@ -106,10 +105,10 @@ private function setTsNames(): string return implode(' | ', $names); } - private function setTsPaths(): string + private function typescriptPaths(): string { $uri = []; - $this->collectRoutes(function (TypeRoute $route) use (&$uri) { + $this->collectRoutes(function (RouteTypeItem $route) use (&$uri) { if ($route->uri() === '/') { $uri[] = "'/'"; @@ -125,14 +124,14 @@ private function setTsPaths(): string return implode(' | ', $uri); } - private function setTsParams(): string + private function typescriptParams(): string { - return $this->collectRoutes(function (TypeRoute $route) { + return $this->collectRoutes(function (RouteTypeItem $route) { $hasParams = count($route->parameters()) > 0; if ($hasParams) { $params = collect($route->parameters()) - ->map(fn (TypeRouteParam $param) => "'{$param->name()}': App.Route.ParamType") + ->map(fn (RouteTypeItemParam $param) => "'{$param->name()}': App.Route.ParamType") ->join("\n"); return " '{$route->name()}': {\n {$params}\n }"; @@ -144,7 +143,7 @@ private function setTsParams(): string private function collectRoutes(Closure $closure, ?string $join = null): string|Collection { - $routes = $this->routes->map(fn (TypeRoute $route, string $key) => $closure($route, $key)); + $routes = $this->routes->map(fn (RouteTypeItem $route, string $key) => $closure($route, $key)); if ($join) { return $routes->join($join); diff --git a/src/Typed/Route/RouteConfig.php b/src/Typed/Route/RouteConfig.php new file mode 100644 index 0000000..5826741 --- /dev/null +++ b/src/Typed/Route/RouteConfig.php @@ -0,0 +1,17 @@ +pathTypes = $pathTypes.DIRECTORY_SEPARATOR.TypescriptableConfig::routesFilename(); + $this->pathList = $pathList.DIRECTORY_SEPARATOR.TypescriptableConfig::routesFilenameList(); + } +} diff --git a/src/Typed/Route/RouteGenerator.php b/src/Typed/Route/RouteGenerator.php deleted file mode 100644 index c094711..0000000 --- a/src/Typed/Route/RouteGenerator.php +++ /dev/null @@ -1,132 +0,0 @@ - */ - protected Collection $routes; - - public static function make(?string $list = null): self - { - $self = new self(); - $self->routes = $self->parse($list); - - return $self; - } - - public function get(): Collection - { - return $this->routes; - } - - /** - * @return Collection - */ - private function parse(?string $list = null): Collection - { - /** @var Collection $items */ - $items = collect([]); - if ($list) { - $content = file_get_contents($list); - $content = json_decode($content, true); - $content = collect($content); - - $content->each(function (array $route) use (&$items) { - $methods = $route['methods'] ?? []; - $uri = $route['uri'] ?? ''; - - $route = new Route( - methods: $methods, - uri: $uri, - action: [ - 'middleware' => $route['middleware'] ?? [], - 'as' => $route['name'] ?? null, - ], - ); - - $route->uri = $uri; - - $items->push($route); - }); - } else { - /** @var Collection $items */ - $items = collect(FacadesRoute::getRoutes()); - } - - /** @var TypeRoute[] $routes */ - $routes = $items->mapWithKeys(function (Route $route) { - $id = TypeRoute::generateId($route); - - return [$id => $route]; - }) - ->filter() - ->map(fn (Route $route) => TypeRoute::make($route)) - ->toArray(); - - // for testing - // file_put_contents( - // database_path('routes.json'), - // json_encode(collect(FacadesRoute::getRoutes())->toArray(), JSON_PRETTY_PRINT) - // ); - $list = []; - - foreach ($routes as $id => $route) { - if (! $this->skipRouteName($route)) { - $list[$id] = $route; - } - } - - foreach ($list as $route) { - if ($this->skipRoutePath($route)) { - unset($list[$route->name()]); - } - } - - return collect($list); - } - - private function skipRouteName(TypeRoute $route): bool - { - $skip_name = []; - $skippable_name = TypescriptableConfig::routesSkipName(); - - foreach ($skippable_name as $item) { - $item = str_replace('.*', '', $item); - array_push($skip_name, $item); - } - - foreach ($skip_name as $type => $item) { - if (str_starts_with($route->name(), $item)) { - return true; - } - } - - return false; - } - - private function skipRoutePath(TypeRoute $route): bool - { - $skip_path = []; - $skippable_path = TypescriptableConfig::routesSkipPath(); - - foreach ($skippable_path as $item) { - $item = str_replace('/*', '', $item); - array_push($skip_path, $item); - } - - foreach ($skip_path as $type => $item) { - if (str_starts_with($route->uri(), $item)) { - return true; - } - } - - return false; - } -} diff --git a/src/Typed/Route/RouteList.php b/src/Typed/Route/RouteList.php deleted file mode 100644 index 0ad2331..0000000 --- a/src/Typed/Route/RouteList.php +++ /dev/null @@ -1,110 +0,0 @@ - */ - protected Collection $routes; - - protected ?string $typescript = null; - - /** - * @param Collection $routes - */ - public static function make(Collection $routes): self - { - $self = new self(); - - $items = collect([]); - $routes->each(function (TypeRoute $route) use ($items) { - if ($items->has($route->name())) { - $item = $items->get($route->name()); - $route = $route->addMethods($item->methods()); - $items->put($route->name(), $route); - - return; - } - - $items->put($route->name(), $route); - }); - $self->routes = $items; - $self->typescript = $self->setTypescript(); - - return $self; - } - - public function get(): string - { - $head = Typescriptable::head(); - $appUrl = config('app.url'); - - return << = { - {$this->typescript}, - } - - declare global { - interface Window { - Routes: Record - } - } - - const appUrl = '{$appUrl}' - - if (typeof window !== 'undefined') { - window.Routes = Routes - } - - export { Routes, appUrl } - - typescript; - } - - private function setTypescript(): string - { - $list = $this->routes->map(function (TypeRoute $route) { - $params = collect($route->parameters()) - ->map(fn (TypeRouteParam $param) => "{$param->name()}: 'string',"); - - if ($params->isEmpty()) { - $params = 'params: undefined'; - } else { - $params = $params->join(' '); - if (str_contains($params, ',')) { - $paramsExplode = explode(',', $params); - $paramsExplode = array_map(fn ($param) => trim($param), $paramsExplode); - $paramsExplode = array_filter($paramsExplode, fn ($param) => ! empty($param)); - $paramsExplode = array_map(fn ($param) => "{$param},", $paramsExplode); - $params = implode("\n ", $paramsExplode); - } - $params = <<methods(); - $methods = array_filter($methods, fn ($method) => $method !== 'HEAD'); - $methods = array_map(fn ($method) => "'{$method}'", $methods); - $methods = implode(', ', $methods); - - return <<name()}': { - name: '{$route->name()}', - path: '{$route->fullUri()}', - {$params}, - methods: [{$methods}], - } - typescript; - }); - - return $list->join(",\n"); - } -} diff --git a/src/Typed/Route/Schemas/RouteTypeItem.php b/src/Typed/Route/Schemas/RouteTypeItem.php new file mode 100644 index 0000000..c103063 --- /dev/null +++ b/src/Typed/Route/Schemas/RouteTypeItem.php @@ -0,0 +1,152 @@ + $route + */ + public static function make(array $route): self + { + $method = $route['method'] ?? 'GET|HEAD'; + $methods = explode('|', $method); + $uri = $route['uri'] ?? '/'; + + $self = new self( + domain: $route['domain'] ?? null, + uri: "/{$uri}", + name: $route['name'] ?? null, + action: $route['action'] ?? null, + methodMain: $methods[0] ?? 'GET', + methods: $methods, + middlewares: $route['middleware'] ?? [], + ); + $self->id = $self->generateId(); + $self->parameters = $self->parseParameters(); + + if (! $self->name) { + $self->name = Str::slug($self->uri, '.'); + } + + return $self; + } + + public function domain(): ?string + { + return $this->domain; + } + + public function uri(): string + { + return $this->uri; + } + + public function name(): ?string + { + return $this->name; + } + + public function action(): ?string + { + return $this->action; + } + + public function methodMain(): string + { + return $this->methodMain; + } + + /** + * @return string[] + */ + public function methods(): array + { + return $this->methods; + } + + /** + * @return RouteTypeItemParam[] + */ + public function parameters(): array + { + return $this->parameters; + } + + /** + * @return string[] + */ + public function middlewares(): array + { + return $this->middlewares; + } + + public function id(): string + { + return $this->id; + } + + private function generateId(): string + { + $name = $this->uri; + if ($this->name) { + $name = $this->name; + } + $name = str_replace('/', '.', $name); + $id = strtolower("{$this->methodMain} {$name}"); + + return Str::slug($id, '.'); + } + + /** + * @return RouteTypeItemParam[] + */ + private function parseParameters(): array + { + $params = []; + preg_match_all('/\{([^\}]+)\}/', $this->uri, $params); + + if (array_key_exists(1, $params)) { + $params = $params[1]; + } + + /** @var RouteTypeItemParam[] */ + $items = []; + + foreach ($params as $param) { + $name = $param; + $required = true; + + if (str_contains($param, '?')) { + $name = str_replace('?', '', $param); + $required = false; + } + + $items[] = new RouteTypeItemParam( + name: $name, + required: $required, + ); + } + + return $items; + } +} diff --git a/src/Typed/Route/Schemas/RouteTypeItemParam.php b/src/Typed/Route/Schemas/RouteTypeItemParam.php new file mode 100644 index 0000000..2def8f9 --- /dev/null +++ b/src/Typed/Route/Schemas/RouteTypeItemParam.php @@ -0,0 +1,33 @@ +name; + } + + public function type(): string + { + return $this->type; + } + + public function required(): bool + { + return $this->required; + } + + public function default(): ?string + { + return $this->default; + } +} diff --git a/src/Typed/RouteType.php b/src/Typed/RouteType.php index d079e27..0e5d351 100644 --- a/src/Typed/RouteType.php +++ b/src/Typed/RouteType.php @@ -2,44 +2,109 @@ namespace Kiwilan\Typescriptable\Typed; +use Illuminate\Foundation\Console\RouteListCommand; +use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\File; -use Kiwilan\Typescriptable\Typed\Route\RouteGenerator; -use Kiwilan\Typescriptable\Typed\Route\RouteList; -use Kiwilan\Typescriptable\Typed\Route\RouteTypes; +use Kiwilan\Typescriptable\Typed\Route\Printer\PrinterToList; +use Kiwilan\Typescriptable\Typed\Route\Printer\PrinterToTypes; +use Kiwilan\Typescriptable\Typed\Route\RouteConfig; +use Kiwilan\Typescriptable\Typed\Route\Schemas\RouteTypeItem; use Kiwilan\Typescriptable\TypescriptableConfig; class RouteType { + /** + * @param Collection $routes + */ protected function __construct( - public string $path, - public string $pathList, + protected RouteConfig $config, + protected ?Collection $routes = null, + protected ?string $typescriptList = null, + protected ?string $typescriptTypes = null, ) {} - public static function make(?string $jsonOutput = null, bool $withList = false, ?string $outputPath = null): self + public static function make(RouteConfig $config): self { - $filename = TypescriptableConfig::routesFilename(); - $filenameRoutes = TypescriptableConfig::routesFilenameList(); + $self = new self($config); + $self->routes = $self->parseRoutes(); - $routes = RouteGenerator::make($jsonOutput)->get(); - $routeTypes = RouteTypes::make($routes)->get(); - $routeList = RouteList::make($routes)->get(); + $self->typescriptList = PrinterToList::make($self->routes); + ray($self->typescriptList); + $self->typescriptTypes = PrinterToTypes::make($self->routes); + ray($self->typescriptTypes); - $file = $outputPath.DIRECTORY_SEPARATOR.$filename; - $fileRoutes = $outputPath.DIRECTORY_SEPARATOR.$filenameRoutes; + // handle TypescriptableConfig::routesUsePath() - if (! $outputPath) { - $file = TypescriptableConfig::setPath($filename); - $fileRoutes = TypescriptableConfig::setPath($filenameRoutes); + // if (! $outputPath) { + // $file = TypescriptableConfig::setPath($filename); + // $fileRoutes = TypescriptableConfig::setPath($filenameRoutes); + // } + + // $self->print($file, $routeTypes); + // if ($withList) { + // $self->print($fileRoutes, $routeList); + // } + + return $self; + } + + /** + * @return Collection + */ + private function parseRoutes(): Collection + { + if ($this->config->json === null) { + Artisan::call(RouteListCommand::class); + $json = Artisan::output(); + $this->config->json = json_decode($json, true); } - $self = new self($file, $fileRoutes); + $routes = $this->config->json; + + $skipNames = $this->toSkip(TypescriptableConfig::routesSkipName()); + $skipPaths = $this->toSkip(TypescriptableConfig::routesSkipPath()); + + $routes = array_filter($routes, fn ($route) => $this->filterBy($route, 'uri', $skipPaths)); + $routes = array_filter($routes, fn ($route) => $this->filterBy($route, 'name', $skipNames)); + $routes = array_values($routes); - $self->print($file, $routeTypes); - if ($withList) { - $self->print($fileRoutes, $routeList); + $collect = collect(); + foreach ($routes as $route) { + $item = RouteTypeItem::make($route); + $collect->put($item->id(), $item); } - return $self; + return $collect; + } + + /** + * Get the routes to skip. + * + * @param string[] $toSkip + * @return string[] + */ + private function toSkip(array $toSkip): array + { + $items = []; + foreach ($toSkip as $item) { + $item = str_replace('/*', '', $item); + $item = str_replace('.*', '', $item); + array_push($items, $item); + } + + return $items; + } + + private function filterBy(array $route, string $attribute, array $toSkip): bool + { + foreach ($toSkip as $skip) { + if (str_starts_with($route[$attribute], $skip)) { + return false; + } + } + + return true; } private function print(string $path, string $content): void diff --git a/src/Typescriptable.php b/src/Typescriptable.php index 7a476dd..6f52b27 100755 --- a/src/Typescriptable.php +++ b/src/Typescriptable.php @@ -4,6 +4,7 @@ use Kiwilan\Typescriptable\Typed\Eloquent\EloquentConfig; use Kiwilan\Typescriptable\Typed\EloquentType; +use Kiwilan\Typescriptable\Typed\Route\RouteConfig; use Kiwilan\Typescriptable\Typed\RouteType; use Kiwilan\Typescriptable\Typed\SettingType; @@ -30,9 +31,9 @@ public static function models(EloquentConfig $config): EloquentType return EloquentType::make($config)->execute(); } - public static function routes(string $json_output, bool $with_list, string $output_path): RouteType + public static function routes(RouteConfig $config): RouteType { - return RouteType::make($json_output, $with_list, $output_path); + return RouteType::make($config); } public static function settings(string $settings_path, string $output_path, string $extends): ?SettingType diff --git a/tests/CommandRoutesTest.php b/tests/CommandRoutesTest.php index 4181d80..c7b2278 100644 --- a/tests/CommandRoutesTest.php +++ b/tests/CommandRoutesTest.php @@ -9,7 +9,6 @@ it('can be run', function () { Artisan::call('typescriptable:routes', [ - '--json' => routes(), '--list' => true, '--output-path' => outputDir(), ]); diff --git a/tests/Data/Enums/BudgetEnum.php b/tests/Data/Enums/BudgetEnum.php new file mode 100644 index 0000000..54e8263 --- /dev/null +++ b/tests/Data/Enums/BudgetEnum.php @@ -0,0 +1,10 @@ +id(); $table->string('name'); - $table->string('slug')->unique()->index()->nullable(); + $table->string('slug')->unique()->nullable(); $table->string('avatar')->nullable(); $table->timestamps(); @@ -65,7 +65,7 @@ public function up(): void $table->id(); $table->string('name'); - $table->string('slug')->unique()->index()->nullable(); + $table->string('slug')->unique()->nullable(); $table->string('picture')->nullable(); $table->string('color')->nullable(); diff --git a/tests/Data/database/migrations/create_models_tables_mongodb.php b/tests/Data/database/migrations/create_models_tables_mongodb.php deleted file mode 100644 index f875320..0000000 --- a/tests/Data/database/migrations/create_models_tables_mongodb.php +++ /dev/null @@ -1,235 +0,0 @@ -id(); - $table->string('name'); - $table->string('email')->unique(); - $table->timestamp('email_verified_at')->nullable(); - $table->string('password'); - $table->rememberToken(); - $table->foreignId('current_team_id')->nullable(); - $table->string('profile_photo_path', 2048)->nullable(); - $table->boolean('is_admin')->default(false); - $table->timestamps(); - }); - - Schema::create('stories', function (Blueprint $table) { - $table->id(); - - $table->string('title'); - $table->string('slug')->unique()->nullable(); - $table->text('abstract')->nullable(); - $table->string('original_link')->nullable(); - $table->text('picture')->nullable(); - $table->string('status')->default(PublishStatusEnum::draft->value); - $table->dateTime('published_at')->nullable(); - $table->string('format')->nullable(); - - $table->string('meta_title')->nullable(); - $table->string('meta_description')->nullable(); - - $table->timestamps(); - }); - - Schema::create('authors', function (Blueprint $table) { - $table->id(); - - $table->string('name'); - $table->string('slug')->unique()->nullable(); - $table->string('avatar')->nullable(); - - $table->timestamps(); - }); - - Schema::create('chapters', function (Blueprint $table) { - $table->id(); - - $table->string('name')->nullable(); - $table->text('content')->nullable(); - $table->integer('time_to_read')->nullable(); - $table->integer('number')->nullable(); - - $table->timestamps(); - }); - - Schema::create('categories', function (Blueprint $table) { - $table->id(); - - $table->string('name'); - $table->string('slug')->unique()->nullable(); - $table->string('picture')->nullable(); - $table->string('color')->nullable(); - - $table->timestamps(); - }); - - Schema::table('stories', function (Blueprint $table) { - $table->foreignId('author_id')->nullable()->constrained('authors')->nullOnDelete(); - $table->foreignId('category_id')->nullable()->constrained('categories')->nullOnDelete(); - }); - - Schema::table('chapters', function (Blueprint $table) { - $table->foreignId('story_id')->nullable()->constrained('stories')->nullOnDelete(); - }); - - Schema::create('tags', function (Blueprint $table) { - $table->id(); - $table->string('name'); - $table->string('slug')->unique(); - $table->timestamps(); - }); - - Schema::create('story_tag', function (Blueprint $table) { - $table->id(); - $table->foreignId('tag_id')->constrained('tags')->cascadeOnDelete(); - $table->foreignId('story_id')->constrained('stories')->cascadeOnDelete(); - }); - - Schema::create('comments', function (Blueprint $table) { - $table->id(); - - $table->string('name')->nullable(); - $table->string('email')->nullable(); - $table->string('url')->nullable(); - $table->text('content')->nullable(); - - $table->boolean('is_approved')->default(false); - $table->timestamp('approved_at')->nullable(); - $table->timestamp('rejected_at')->nullable(); - - $table->foreignId('comment_id') - ->nullable() - ->constrained('comments') - ->onDelete('no action'); - - $table->morphs('commentable'); - - $table->timestamps(); - }); - - Schema::create('members', function (Blueprint $table) { - $table->id(); - - $table->unsignedBigInteger('tmdb_id')->nullable(); - $table->string('credit_id')->nullable(); - $table->unsignedSmallInteger('gender')->default(1); - $table->string('name')->nullable(); - $table->string('original_name')->nullable(); - $table->float('popularity')->nullable(); - $table->string('poster')->nullable(); - $table->string('poster_tmdb')->nullable(); - $table->string('poster_color')->nullable(); - $table->string('tmdb_url')->nullable(); - - $table->timestamps(); - }); - - Schema::create('memberables', function (Blueprint $table) { - $table->foreignId('member_id')->index(); - $table->string('character')->nullable(); - $table->string('job')->nullable(); - $table->string('department')->nullable(); - $table->integer('order')->nullable(); - $table->boolean('is_adult')->default(false); - $table->string('known_for_department')->nullable(); - $table->boolean('is_crew')->nullable(); - $table->ulidMorphs('memberable'); - }); - - Schema::create('movies', function (Blueprint $table) { - $table->ulid('id')->primary(); - - $table->integer('tmdb_id')->nullable(); - $table->string('title')->nullable()->unique(); - $table->integer('year')->nullable(); - $table->json('subtitles'); - $table->string('slug')->unique(); - $table->string('french_title')->nullable(); - $table->string('original_title')->nullable(); - $table->date('release_date')->nullable(); - $table->string('original_language')->nullable(); - $table->text('overview')->nullable(); - $table->float('popularity')->nullable(); - $table->boolean('is_adult')->nullable(); - $table->string('homepage')->nullable(); - $table->string('tagline')->nullable(); - $table->string('status')->nullable(); - $table->string('certification')->nullable(); - $table->string('tmdb_url')->nullable(); - - $table->string('imdb_id')->nullable(); - $table->integer('runtime')->nullable(); - $table->enum('budget', [ - PublishStatusEnum::draft->value, - PublishStatusEnum::scheduled->value, - PublishStatusEnum::published->value, - ])->default(PublishStatusEnum::draft); - $table->bigInteger('revenue')->nullable(); - $table->string('edition')->nullable(); - $table->string('version')->nullable(); - $table->string('library')->nullable(); - $table->boolean('is_multilingual')->default(false); - - $table->string('poster')->nullable(); - $table->string('poster_tmdb')->nullable(); - $table->string('poster_color')->nullable(); - - $table->string('backdrop')->nullable(); - $table->string('backdrop_tmdb')->nullable(); - - $table->foreignId('author_id')->nullable()->constrained('authors')->nullOnDelete(); - - $table->dateTime('added_at')->nullable(); - $table->dateTime('fetched_at')->nullable(); - $table->boolean('fetched_has_failed')->default(false); - - $table->timestamps(); - }); - - Schema::create('media', function (Blueprint $table) { - $table->id(); - - $table->morphs('model'); - $table->uuid()->nullable()->unique(); - $table->string('collection_name'); - $table->string('name'); - $table->string('file_name'); - $table->string('mime_type')->nullable(); - $table->string('disk'); - $table->string('conversions_disk')->nullable(); - $table->unsignedBigInteger('size'); - $table->json('manipulations'); - $table->json('custom_properties'); - $table->json('generated_conversions'); - $table->json('responsive_images'); - $table->unsignedInteger('order_column')->nullable()->index(); - - $table->nullableTimestamps(); - }); - } - - public function down(): void - { - Schema::dropIfExists('users'); - Schema::dropIfExists('stories'); - Schema::dropIfExists('authors'); - Schema::dropIfExists('chapters'); - Schema::dropIfExists('categories'); - Schema::dropIfExists('tags'); - Schema::dropIfExists('story_tag'); - Schema::dropIfExists('comments'); - Schema::dropIfExists('members'); - Schema::dropIfExists('memberables'); - Schema::dropIfExists('movies'); - Schema::dropIfExists('media'); - } -}; diff --git a/tests/Data/routes.json b/tests/Data/routes.json index 44f8252..b79ebe4 100644 --- a/tests/Data/routes.json +++ b/tests/Data/routes.json @@ -1,1289 +1,1421 @@ -{ - "api/user": { +[ + { + "domain": null, + "method": "GET|HEAD", + "uri": "/", + "name": "home", + "action": "App\\Http\\Controllers\\App\\HomeController@index", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "__clockwork", "name": null, - "methods": ["GET", "HEAD"], - "uri": "api/user", - "action": "Closure", - "middleware": ["api", "auth:sanctum"], - "example": "http://app.p1pdd.test/api/user", - "parameters": [] + "action": "Clockwork\\Support\\Laravel\\ClockworkController@webRedirect", + "middleware": [] }, - "current-user-photo.destroy": { - "name": "current-user-photo.destroy", - "methods": ["DELETE"], - "uri": "user/profile-photo", - "action": "Laravel\\Jetstream\\Http\\Controllers\\Inertia\\ProfilePhotoController@destroy", - "middleware": [ - "web", - "auth:sanctum", - "Laravel\\Jetstream\\Http\\Middleware\\AuthenticateSession" - ], - "example": "http://app.p1pdd.test/user/profile-photo", - "parameters": [] - }, - "current-user.destroy": { - "name": "current-user.destroy", - "methods": ["DELETE"], - "uri": "user", - "action": "Laravel\\Jetstream\\Http\\Controllers\\Inertia\\CurrentUserController@destroy", - "middleware": [ - "web", - "auth:sanctum", - "Laravel\\Jetstream\\Http\\Middleware\\AuthenticateSession" - ], - "example": "http://app.p1pdd.test/user", - "parameters": [] - }, - "dashboard": { - "name": "dashboard", - "methods": ["GET", "HEAD"], - "uri": "dashboard", - "action": "Closure", - "middleware": [ - "web", - "auth:sanctum", - "Laravel\\Jetstream\\Http\\Middleware\\AuthenticateSession", - "verified" - ], - "example": "http://app.p1pdd.test/dashboard", - "parameters": [] - }, - "download.show": { - "name": "download.show", - "methods": ["GET", "HEAD"], - "uri": "download/{feed_slug}/{podcast_slug}", - "action": "App\\Http\\Controllers\\DownloadController@show", + { + "domain": null, + "method": "GET|HEAD", + "uri": "__clockwork/app", + "name": null, + "action": "Clockwork\\Support\\Laravel\\ClockworkController@webIndex", + "middleware": [] + }, + { + "domain": null, + "method": "POST", + "uri": "__clockwork/auth", + "name": null, + "action": "Clockwork\\Support\\Laravel\\ClockworkController@authenticate", + "middleware": [] + }, + { + "domain": null, + "method": "PUT", + "uri": "__clockwork/{id}", + "name": null, + "action": "Clockwork\\Support\\Laravel\\ClockworkController@updateData", + "middleware": [] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "__clockwork/{id}/extended", + "name": null, + "action": "Clockwork\\Support\\Laravel\\ClockworkController@getExtendedData", + "middleware": [] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "__clockwork/{id}/{direction?}/{count?}", + "name": null, + "action": "Clockwork\\Support\\Laravel\\ClockworkController@getData", + "middleware": [] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "__clockwork/{path}", + "name": null, + "action": "Clockwork\\Support\\Laravel\\ClockworkController@webAsset", + "middleware": [] + }, + { + "domain": null, + "method": "POST", + "uri": "_ignition/execute-solution", + "name": "ignition.executeSolution", + "action": "Spatie\\LaravelIgnition\\Http\\Controllers\\ExecuteSolutionController", "middleware": [ - "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/download/{podcast_slug}", - "parameters": ["feed_slug", "podcast_slug"] - }, - "feeds.index": { - "name": "feeds.index", - "methods": ["GET", "HEAD"], - "uri": "feeds", - "action": "App\\Http\\Controllers\\FeedController@index", + "Spatie\\LaravelIgnition\\Http\\Middleware\\RunnableSolutionsEnabled" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "_ignition/health-check", + "name": "ignition.healthCheck", + "action": "Spatie\\LaravelIgnition\\Http\\Controllers\\HealthCheckController", "middleware": [ - "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/feeds", - "parameters": [] - }, - "feeds.show": { - "name": "feeds.show", - "methods": ["GET", "HEAD"], - "uri": "feeds/{feed_slug}", - "action": "App\\Http\\Controllers\\FeedController@show", + "Spatie\\LaravelIgnition\\Http\\Middleware\\RunnableSolutionsEnabled" + ] + }, + { + "domain": null, + "method": "POST", + "uri": "_ignition/update-config", + "name": "ignition.updateConfig", + "action": "Spatie\\LaravelIgnition\\Http\\Controllers\\UpdateConfigController", "middleware": [ - "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/feeds/{feed_slug}", - "parameters": ["feed_slug"] - }, - "filament.asset": { - "name": "filament.asset", - "methods": ["GET", "HEAD"], - "uri": "filament/assets/{file}", - "action": "Filament\\Http\\Controllers\\AssetController", + "Spatie\\LaravelIgnition\\Http\\Middleware\\RunnableSolutionsEnabled" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "about", + "name": "about", + "action": "App\\Http\\Controllers\\App\\HomeController@about", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "about/home", + "name": "about.home", + "action": "App\\Http\\Controllers\\App\\HomeController@aboutHome", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "about/home/{slug}", + "name": "about.home.slug", + "action": "App\\Http\\Controllers\\App\\HomeController@aboutHomeSlug", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "about/params/{author}", + "name": "about.params.author", + "action": "App\\Http\\Controllers\\App\\HomeController@aboutParamsAuthor", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin", + "name": "filament.admin.pages.dashboard", + "action": "Filament\\Pages\\Dashboard", "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", - "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", - "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages" - ], - "example": "http://app.p1pdd.test/filament/assets/{file}", - "parameters": ["file"] - }, - "filament.auth.login": { - "name": "filament.auth.login", - "methods": ["GET", "HEAD"], - "uri": "admin/login", - "action": "App\\Filament\\Pages\\Auth\\Login", - "middleware": [ - "Illuminate\\Cookie\\Middleware\\EncryptCookies", - "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", - "Illuminate\\Session\\Middleware\\StartSession", + "Filament\\Http\\Middleware\\Authenticate", "Illuminate\\Session\\Middleware\\AuthenticateSession", - "Illuminate\\View\\Middleware\\ShareErrorsFromSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages" - ], - "example": "http://app.p1pdd.test/admin/login", - "parameters": [] - }, - "filament.auth.logout": { - "name": "filament.auth.logout", - "methods": ["POST"], - "uri": "filament/logout", - "action": "Closure", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/audiobook-tracks", + "name": "filament.admin.resources.audiobook-tracks.index", + "action": "App\\Filament\\Resources\\AudiobookTrackResource\\Pages\\ListAudiobookTracks", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", - "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", - "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages" - ], - "example": "http://app.p1pdd.test/filament/logout", - "parameters": [] - }, - "filament.pages.dashboard": { - "name": "filament.pages.dashboard", - "methods": ["GET", "HEAD"], - "uri": "admin", - "action": "Filament\\Pages\\Dashboard", - "middleware": [ - "Illuminate\\Cookie\\Middleware\\EncryptCookies", - "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", - "Illuminate\\Session\\Middleware\\StartSession", + "Filament\\Http\\Middleware\\Authenticate", "Illuminate\\Session\\Middleware\\AuthenticateSession", - "Illuminate\\View\\Middleware\\ShareErrorsFromSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin", - "parameters": [] - }, - "filament.pages.page/home": { - "name": "filament.pages.page/home", - "methods": ["GET", "HEAD"], - "uri": "admin/page/home", - "action": "App\\Filament\\Pages\\ManageHome", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/audiobook-tracks/create", + "name": "filament.admin.resources.audiobook-tracks.create", + "action": "App\\Filament\\Resources\\AudiobookTrackResource\\Pages\\CreateAudiobookTrack", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", - "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", - "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/page/home", - "parameters": [] - }, - "filament.resources.blog/categories.create": { - "name": "filament.resources.blog/categories.create", - "methods": ["GET", "HEAD"], - "uri": "admin/blog/categories/create", - "action": "App\\Filament\\Resources\\CategoryResource\\Pages\\CreateCategory", - "middleware": [ - "Illuminate\\Cookie\\Middleware\\EncryptCookies", - "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", - "Illuminate\\Session\\Middleware\\StartSession", + "Filament\\Http\\Middleware\\Authenticate", "Illuminate\\Session\\Middleware\\AuthenticateSession", - "Illuminate\\View\\Middleware\\ShareErrorsFromSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/blog/categories/create", - "parameters": [] - }, - "filament.resources.blog/categories.edit": { - "name": "filament.resources.blog/categories.edit", - "methods": ["GET", "HEAD"], - "uri": "admin/blog/categories/{record}/edit", - "action": "App\\Filament\\Resources\\CategoryResource\\Pages\\EditCategory", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/audiobook-tracks/{record}/edit", + "name": "filament.admin.resources.audiobook-tracks.edit", + "action": "App\\Filament\\Resources\\AudiobookTrackResource\\Pages\\EditAudiobookTrack", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", - "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", - "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/blog/categories/{record}/edit", - "parameters": ["record"] - }, - "filament.resources.blog/categories.index": { - "name": "filament.resources.blog/categories.index", - "methods": ["GET", "HEAD"], - "uri": "admin/blog/categories", - "action": "App\\Filament\\Resources\\CategoryResource\\Pages\\ListCategories", - "middleware": [ - "Illuminate\\Cookie\\Middleware\\EncryptCookies", - "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", - "Illuminate\\Session\\Middleware\\StartSession", + "Filament\\Http\\Middleware\\Authenticate", "Illuminate\\Session\\Middleware\\AuthenticateSession", - "Illuminate\\View\\Middleware\\ShareErrorsFromSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/blog/categories", - "parameters": [] - }, - "filament.resources.blog/comments.create": { - "name": "filament.resources.blog/comments.create", - "methods": ["GET", "HEAD"], - "uri": "admin/blog/comments/create", - "action": "App\\Filament\\Resources\\CommentResource\\Pages\\CreateComment", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/authors", + "name": "filament.admin.resources.authors.index", + "action": "App\\Filament\\Resources\\AuthorResource\\Pages\\ListAuthors", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", - "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", - "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/blog/comments/create", - "parameters": [] - }, - "filament.resources.blog/comments.edit": { - "name": "filament.resources.blog/comments.edit", - "methods": ["GET", "HEAD"], - "uri": "admin/blog/comments/{record}/edit", - "action": "App\\Filament\\Resources\\CommentResource\\Pages\\EditComment", - "middleware": [ - "Illuminate\\Cookie\\Middleware\\EncryptCookies", - "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", - "Illuminate\\Session\\Middleware\\StartSession", + "Filament\\Http\\Middleware\\Authenticate", "Illuminate\\Session\\Middleware\\AuthenticateSession", - "Illuminate\\View\\Middleware\\ShareErrorsFromSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/blog/comments/{record}/edit", - "parameters": ["record"] - }, - "filament.resources.blog/comments.index": { - "name": "filament.resources.blog/comments.index", - "methods": ["GET", "HEAD"], - "uri": "admin/blog/comments", - "action": "App\\Filament\\Resources\\CommentResource\\Pages\\ListComments", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/authors/create", + "name": "filament.admin.resources.authors.create", + "action": "App\\Filament\\Resources\\AuthorResource\\Pages\\CreateAuthor", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/blog/comments", - "parameters": [] - }, - "filament.resources.blog/posts.create": { - "name": "filament.resources.blog/posts.create", - "methods": ["GET", "HEAD"], - "uri": "admin/blog/posts/create", - "action": "App\\Filament\\Resources\\PostResource\\Pages\\CreatePost", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/authors/{record}/edit", + "name": "filament.admin.resources.authors.edit", + "action": "App\\Filament\\Resources\\AuthorResource\\Pages\\EditAuthor", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/blog/posts/create", - "parameters": [] - }, - "filament.resources.blog/posts.edit": { - "name": "filament.resources.blog/posts.edit", - "methods": ["GET", "HEAD"], - "uri": "admin/blog/posts/{record}/edit", - "action": "App\\Filament\\Resources\\PostResource\\Pages\\EditPost", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/books", + "name": "filament.admin.resources.books.index", + "action": "App\\Filament\\Resources\\BookResource\\Pages\\ListBooks", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/blog/posts/{record}/edit", - "parameters": ["record"] - }, - "filament.resources.blog/posts.index": { - "name": "filament.resources.blog/posts.index", - "methods": ["GET", "HEAD"], - "uri": "admin/blog/posts", - "action": "App\\Filament\\Resources\\PostResource\\Pages\\ListPosts", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/books/create", + "name": "filament.admin.resources.books.create", + "action": "App\\Filament\\Resources\\BookResource\\Pages\\CreateBook", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/blog/posts", - "parameters": [] - }, - "filament.resources.blog/users.create": { - "name": "filament.resources.blog/users.create", - "methods": ["GET", "HEAD"], - "uri": "admin/blog/users/create", - "action": "App\\Filament\\Resources\\UserResource\\Pages\\CreateUser", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/books/{record}/edit", + "name": "filament.admin.resources.books.edit", + "action": "App\\Filament\\Resources\\BookResource\\Pages\\EditBook", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/blog/users/create", - "parameters": [] - }, - "filament.resources.blog/users.edit": { - "name": "filament.resources.blog/users.edit", - "methods": ["GET", "HEAD"], - "uri": "admin/blog/users/{record}/edit", - "action": "App\\Filament\\Resources\\UserResource\\Pages\\EditUser", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/downloads", + "name": "filament.admin.resources.downloads.index", + "action": "App\\Filament\\Resources\\DownloadResource\\Pages\\ListDownload", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/blog/users/{record}/edit", - "parameters": ["record"] - }, - "filament.resources.blog/users.index": { - "name": "filament.resources.blog/users.index", - "methods": ["GET", "HEAD"], - "uri": "admin/blog/users", - "action": "App\\Filament\\Resources\\UserResource\\Pages\\ListUsers", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/files", + "name": "filament.admin.resources.files.index", + "action": "App\\Filament\\Resources\\FileResource\\Pages\\ListFiles", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/blog/users", - "parameters": [] - }, - "filament.resources.page/pages.create": { - "name": "filament.resources.page/pages.create", - "methods": ["GET", "HEAD"], - "uri": "admin/page/pages/create", - "action": "App\\Filament\\Resources\\PageResource\\Pages\\CreatePage", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/files/create", + "name": "filament.admin.resources.files.create", + "action": "App\\Filament\\Resources\\FileResource\\Pages\\CreateFile", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/page/pages/create", - "parameters": [] - }, - "filament.resources.page/pages.edit": { - "name": "filament.resources.page/pages.edit", - "methods": ["GET", "HEAD"], - "uri": "admin/page/pages/{record}/edit", - "action": "App\\Filament\\Resources\\PageResource\\Pages\\EditPage", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/files/{record}/edit", + "name": "filament.admin.resources.files.edit", + "action": "App\\Filament\\Resources\\FileResource\\Pages\\EditFile", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/page/pages/{record}/edit", - "parameters": ["record"] - }, - "filament.resources.page/pages.index": { - "name": "filament.resources.page/pages.index", - "methods": ["GET", "HEAD"], - "uri": "admin/page/pages", - "action": "App\\Filament\\Resources\\PageResource\\Pages\\ListPages", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/libraries", + "name": "filament.admin.resources.libraries.index", + "action": "App\\Filament\\Resources\\LibraryResource\\Pages\\ListLibraries", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/page/pages", - "parameters": [] - }, - "filament.resources.podcast/feeds.create": { - "name": "filament.resources.podcast/feeds.create", - "methods": ["GET", "HEAD"], - "uri": "admin/podcast/feeds/create", - "action": "App\\Filament\\Resources\\FeedResource\\Pages\\CreateFeed", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/libraries/create", + "name": "filament.admin.resources.libraries.create", + "action": "App\\Filament\\Resources\\LibraryResource\\Pages\\CreateLibrary", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/podcast/feeds/create", - "parameters": [] - }, - "filament.resources.podcast/feeds.edit": { - "name": "filament.resources.podcast/feeds.edit", - "methods": ["GET", "HEAD"], - "uri": "admin/podcast/feeds/{record}/edit", - "action": "App\\Filament\\Resources\\FeedResource\\Pages\\EditFeed", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/libraries/{record}/edit", + "name": "filament.admin.resources.libraries.edit", + "action": "App\\Filament\\Resources\\LibraryResource\\Pages\\EditLibrary", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/podcast/feeds/{record}/edit", - "parameters": ["record"] - }, - "filament.resources.podcast/feeds.index": { - "name": "filament.resources.podcast/feeds.index", - "methods": ["GET", "HEAD"], - "uri": "admin/podcast/feeds", - "action": "App\\Filament\\Resources\\FeedResource\\Pages\\ListFeeds", + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/login", + "name": "filament.admin.auth.login", + "action": "App\\Filament\\Pages\\Auth\\Login", "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/podcast/feeds", - "parameters": [] - }, - "filament.resources.podcast/podcasts.create": { - "name": "filament.resources.podcast/podcasts.create", - "methods": ["GET", "HEAD"], - "uri": "admin/podcast/podcasts/create", - "action": "App\\Filament\\Resources\\PodcastResource\\Pages\\CreatePodcast", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "POST", + "uri": "admin/logout", + "name": "filament.admin.auth.logout", + "action": "Filament\\Http\\Controllers\\Auth\\LogoutController", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/podcast/podcasts/create", - "parameters": [] - }, - "filament.resources.podcast/podcasts.edit": { - "name": "filament.resources.podcast/podcasts.edit", - "methods": ["GET", "HEAD"], - "uri": "admin/podcast/podcasts/{record}/edit", - "action": "App\\Filament\\Resources\\PodcastResource\\Pages\\EditPodcast", - "middleware": [ + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/queue-monitors", + "name": "filament.admin.resources.queue-monitors.index", + "action": "Croustibat\\FilamentJobsMonitor\\Resources\\QueueMonitorResource\\Pages\\ListQueueMonitors", + "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/podcast/podcasts/{record}/edit", - "parameters": ["record"] - }, - "filament.resources.podcast/podcasts.index": { - "name": "filament.resources.podcast/podcasts.index", - "methods": ["GET", "HEAD"], - "uri": "admin/podcast/podcasts", - "action": "App\\Filament\\Resources\\PodcastResource\\Pages\\ListPodcasts", + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/series", + "name": "filament.admin.resources.series.index", + "action": "App\\Filament\\Resources\\SerieResource\\Pages\\ListSeries", "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/podcast/podcasts", - "parameters": [] - }, - "filament.resources.podcast/series.create": { - "name": "filament.resources.podcast/series.create", - "methods": ["GET", "HEAD"], - "uri": "admin/podcast/series/create", + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/series/create", + "name": "filament.admin.resources.series.create", "action": "App\\Filament\\Resources\\SerieResource\\Pages\\CreateSerie", "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", + "Filament\\Http\\Middleware\\Authenticate", + "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/podcast/series/create", - "parameters": [] - }, - "filament.resources.podcast/series.edit": { - "name": "filament.resources.podcast/series.edit", - "methods": ["GET", "HEAD"], - "uri": "admin/podcast/series/{record}/edit", + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "admin/series/{record}/edit", + "name": "filament.admin.resources.series.edit", "action": "App\\Filament\\Resources\\SerieResource\\Pages\\EditSerie", "middleware": [ + "Filament\\Http\\Middleware\\SetUpPanel:admin", "Illuminate\\Cookie\\Middleware\\EncryptCookies", "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", "Illuminate\\Session\\Middleware\\StartSession", - "Illuminate\\Session\\Middleware\\AuthenticateSession", "Illuminate\\View\\Middleware\\ShareErrorsFromSession", - "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", - "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/podcast/series/{record}/edit", - "parameters": ["record"] - }, - "filament.resources.podcast/series.index": { - "name": "filament.resources.podcast/series.index", - "methods": ["GET", "HEAD"], - "uri": "admin/podcast/series", - "action": "App\\Filament\\Resources\\SerieResource\\Pages\\ListSeries", - "middleware": [ - "Illuminate\\Cookie\\Middleware\\EncryptCookies", - "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse", - "Illuminate\\Session\\Middleware\\StartSession", + "Filament\\Http\\Middleware\\Authenticate", "Illuminate\\Session\\Middleware\\AuthenticateSession", - "Illuminate\\View\\Middleware\\ShareErrorsFromSession", "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken", "Illuminate\\Routing\\Middleware\\SubstituteBindings", - "Filament\\Http\\Middleware\\DispatchServingFilamentEvent", - "Filament\\Http\\Middleware\\MirrorConfigToSubpackages", - "Filament\\Http\\Middleware\\Authenticate" - ], - "example": "http://app.p1pdd.test/admin/podcast/series", - "parameters": [] - }, - "home": { - "name": "home", - "methods": ["GET", "HEAD"], - "uri": "/", - "action": "App\\Http\\Controllers\\HomeController@index", + "Filament\\Http\\Middleware\\DisableBladeIconComponents", + "Filament\\Http\\Middleware\\DispatchServingFilamentEvent" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "api/authors/{author}/books", + "name": "api.authors.books", + "action": "App\\Http\\Controllers\\Api\\AuthorController@books", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "api/authors/{author}/counts", + "name": "api.authors.counts", + "action": "App\\Http\\Controllers\\Api\\AuthorController@counts", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "api/authors/{author}/series", + "name": "api.authors.series", + "action": "App\\Http\\Controllers\\Api\\AuthorController@series", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "api/books/latest", + "name": "api.books.latest", + "action": "App\\Http\\Controllers\\Api\\BookController@latest", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "api/books/latest/{library}", + "name": "api.books.latest.library", + "action": "App\\Http\\Controllers\\Api\\BookController@latestLibrary", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "api/books/related/{book}", + "name": "api.books.related", + "action": "App\\Http\\Controllers\\Api\\BookController@related", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "api/books/released", + "name": "api.books.released", + "action": "App\\Http\\Controllers\\Api\\BookController@released", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "api/downloads/book/{book}", + "name": "api.downloads.book", + "action": "App\\Http\\Controllers\\Api\\DownloadController@book", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "api/downloads/serie/{serie}", + "name": "api.downloads.serie", + "action": "App\\Http\\Controllers\\Api\\DownloadController@serie", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "api/languages", + "name": "api.languages.index", + "action": "App\\Http\\Controllers\\Api\\LanguageController@index", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "api/libraries", + "name": "api.libraries.index", + "action": "App\\Http\\Controllers\\Api\\LibraryController@index", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "api/search", + "name": "api.search.index", + "action": "App\\Http\\Controllers\\Api\\SearchController@index", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "api/size/book/{book}", + "name": "api.sizes.book", + "action": "App\\Http\\Controllers\\Api\\SizeController@book", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "api/size/serie/{serie}", + "name": "api.sizes.serie", + "action": "App\\Http\\Controllers\\Api\\SizeController@serie", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "authors", + "name": "authors.index", + "action": "App\\Http\\Controllers\\App\\AuthorController@index", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "authors/{author}", + "name": "authors.show", + "action": "App\\Http\\Controllers\\App\\AuthorController@show", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "clockwork", + "name": null, + "action": "Clockwork\\Support\\Laravel\\ClockworkController@webRedirect", + "middleware": [] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "clockwork/app", + "name": null, + "action": "Clockwork\\Support\\Laravel\\ClockworkController@webIndex", + "middleware": [] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "clockwork/{path}", + "name": null, + "action": "Clockwork\\Support\\Laravel\\ClockworkController@webAsset", + "middleware": [] + }, + { + "domain": null, + "method": "POST", + "uri": "email/verification-notification", + "name": "verification.send", + "action": "Laravel\\Fortify\\Http\\Controllers\\EmailVerificationNotificationController@store", "middleware": [ "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test//", - "parameters": [] + "Illuminate\\Auth\\Middleware\\Authenticate:web", + "Illuminate\\Routing\\Middleware\\ThrottleRequests:6,1" + ] }, - "ignition.executeSolution": { - "name": "ignition.executeSolution", - "methods": ["POST"], - "uri": "_ignition/execute-solution", - "action": "Spatie\\LaravelIgnition\\Http\\Controllers\\ExecuteSolutionController", + { + "domain": null, + "method": "GET|HEAD", + "uri": "email/verify/{id}/{hash}", + "name": "verification.verify", + "action": "Laravel\\Fortify\\Http\\Controllers\\VerifyEmailController@__invoke", "middleware": [ - "Spatie\\LaravelIgnition\\Http\\Middleware\\RunnableSolutionsEnabled" - ], - "example": "http://app.p1pdd.test/_ignition/execute-solution", - "parameters": [] - }, - "ignition.healthCheck": { - "name": "ignition.healthCheck", - "methods": ["GET", "HEAD"], - "uri": "_ignition/health-check", - "action": "Spatie\\LaravelIgnition\\Http\\Controllers\\HealthCheckController", + "web", + "Illuminate\\Auth\\Middleware\\Authenticate:web", + "Illuminate\\Routing\\Middleware\\ValidateSignature", + "Illuminate\\Routing\\Middleware\\ThrottleRequests:6,1" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "filament/exports/{export}/download", + "name": "filament.exports.download", + "action": "Filament\\Actions\\Exports\\Http\\Controllers\\DownloadExport", + "middleware": ["filament.actions"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "filament/imports/{import}/failed-rows/download", + "name": "filament.imports.failed-rows.download", + "action": "Filament\\Actions\\Imports\\Http\\Controllers\\DownloadImportFailureCsv", + "middleware": ["filament.actions"] + }, + { + "domain": null, + "method": "POST", + "uri": "forgot-password", + "name": "password.email", + "action": "Laravel\\Fortify\\Http\\Controllers\\PasswordResetLinkController@store", "middleware": [ - "Spatie\\LaravelIgnition\\Http\\Middleware\\RunnableSolutionsEnabled" - ], - "example": "http://app.p1pdd.test/_ignition/health-check", - "parameters": [] + "web", + "Illuminate\\Auth\\Middleware\\RedirectIfAuthenticated:web" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "form/message", + "name": "form.message", + "action": "App\\Http\\Controllers\\App\\FormController@message", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "POST", + "uri": "form/message", + "name": "form.message.post", + "action": "App\\Http\\Controllers\\App\\FormController@messageSubmit", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "libraries", + "name": "libraries.index", + "action": "App\\Http\\Controllers\\App\\LibraryController@index", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "libraries/{library}", + "name": "libraries.show", + "action": "App\\Http\\Controllers\\App\\LibraryController@show", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "libraries/{library}/series", + "name": "series.index", + "action": "App\\Http\\Controllers\\App\\SerieController@index", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "libraries/{library}/series/{serie}", + "name": "series.show", + "action": "App\\Http\\Controllers\\App\\SerieController@show", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "libraries/{library}/{book}", + "name": "books.show", + "action": "App\\Http\\Controllers\\App\\BookController@show", + "middleware": ["web"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "livewire/livewire.js", + "name": null, + "action": "Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile", + "middleware": [] }, - "ignition.updateConfig": { - "name": "ignition.updateConfig", - "methods": ["POST"], - "uri": "_ignition/update-config", - "action": "Spatie\\LaravelIgnition\\Http\\Controllers\\UpdateConfigController", - "middleware": [ - "Spatie\\LaravelIgnition\\Http\\Middleware\\RunnableSolutionsEnabled" - ], - "example": "http://app.p1pdd.test/_ignition/update-config", - "parameters": [] - }, - "livewire.message": { - "name": "livewire.message", - "methods": ["POST"], - "uri": "livewire/message/{name}", - "action": "Livewire\\Controllers\\HttpConnectionHandler", - "middleware": ["web"], - "example": "http://app.p1pdd.test/livewire/message/{name}", - "parameters": ["name"] - }, - "livewire.message-localized": { - "name": "livewire.message-localized", - "methods": ["POST"], - "uri": "{locale}/livewire/message/{name}", - "action": "Livewire\\Controllers\\HttpConnectionHandler", - "middleware": ["web"], - "example": "http://app.p1pdd.test/{locale}/livewire/message/{name}", - "parameters": ["locale", "name"] - }, - "livewire.preview-file": { - "name": "livewire.preview-file", - "methods": ["GET", "HEAD"], - "uri": "livewire/preview-file/{filename}", - "action": "Livewire\\Controllers\\FilePreviewHandler@handle", - "middleware": ["web"], - "example": "http://app.p1pdd.test/livewire/preview-file/{filename}", - "parameters": ["filename"] + { + "domain": null, + "method": "GET|HEAD", + "uri": "livewire/livewire.min.js.map", + "name": null, + "action": "Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps", + "middleware": [] }, - "livewire.upload-file": { - "name": "livewire.upload-file", - "methods": ["POST"], + { + "domain": null, + "method": "GET|HEAD", + "uri": "livewire/preview-file/{filename}", + "name": "livewire.preview-file", + "action": "Livewire\\Features\\SupportFileUploads\\FilePreviewController@handle", + "middleware": ["web"] + }, + { + "domain": null, + "method": "POST", + "uri": "livewire/update", + "name": "livewire.update", + "action": "Livewire\\Mechanisms\\HandleRequests\\HandleRequests@handleUpdate", + "middleware": ["web"] + }, + { + "domain": null, + "method": "POST", "uri": "livewire/upload-file", - "action": "Livewire\\Controllers\\FileUploadHandler@handle", - "middleware": ["web"], - "example": "http://app.p1pdd.test/livewire/upload-file", - "parameters": [] - }, - "livewire/livewire.js": { - "name": null, - "methods": ["GET", "HEAD"], - "uri": "livewire/livewire.js", - "action": "Livewire\\Controllers\\LivewireJavaScriptAssets@source", - "middleware": [], - "example": "http://app.p1pdd.test/livewire/livewire.js", - "parameters": [] + "name": "livewire.upload-file", + "action": "Livewire\\Features\\SupportFileUploads\\FileUploadController@handle", + "middleware": [ + "web", + "Illuminate\\Routing\\Middleware\\ThrottleRequests:60,1" + ] }, - "livewire/livewire.js.map": { - "name": null, - "methods": ["GET", "HEAD"], - "uri": "livewire/livewire.js.map", - "action": "Livewire\\Controllers\\LivewireJavaScriptAssets@maps", - "middleware": [], - "example": "http://app.p1pdd.test/livewire/livewire.js.map", - "parameters": [] - }, - "log-viewer.files": { - "name": "log-viewer.files", - "methods": ["GET", "HEAD"], - "uri": "log-viewer/api/files", - "action": "Opcodes\\LogViewer\\Http\\Controllers\\FilesController@index", + { + "domain": null, + "method": "POST", + "uri": "log-viewer/api/clear-cache-all", + "name": "log-viewer.files.clear-cache-all", + "action": "Opcodes\\LogViewer\\Http\\Controllers\\FilesController@clearCacheAll", "middleware": [ "Opcodes\\LogViewer\\Http\\Middleware\\EnsureFrontendRequestsAreStateful", "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer", - "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware" - ], - "example": "http://app.p1pdd.test/log-viewer/api/files", - "parameters": [] + "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware", + "Opcodes\\LogViewer\\Http\\Middleware\\JsonResourceWithoutWrappingMiddleware" + ] }, - "log-viewer.files.clear-cache": { - "name": "log-viewer.files.clear-cache", - "methods": ["POST"], - "uri": "log-viewer/api/files/{fileIdentifier}/clear-cache", - "action": "Opcodes\\LogViewer\\Http\\Controllers\\FilesController@clearCache", + { + "domain": null, + "method": "POST", + "uri": "log-viewer/api/delete-multiple-files", + "name": "log-viewer.files.delete-multiple-files", + "action": "Opcodes\\LogViewer\\Http\\Controllers\\FilesController@deleteMultipleFiles", "middleware": [ "Opcodes\\LogViewer\\Http\\Middleware\\EnsureFrontendRequestsAreStateful", "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer", - "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware" - ], - "example": "http://app.p1pdd.test/log-viewer/api/files/{fileIdentifier}/clear-cache", - "parameters": ["fileIdentifier"] + "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware", + "Opcodes\\LogViewer\\Http\\Middleware\\JsonResourceWithoutWrappingMiddleware" + ] }, - "log-viewer.files.clear-cache-all": { - "name": "log-viewer.files.clear-cache-all", - "methods": ["POST"], - "uri": "log-viewer/api/clear-cache-all", - "action": "Opcodes\\LogViewer\\Http\\Controllers\\FilesController@clearCacheAll", + { + "domain": null, + "method": "GET|HEAD", + "uri": "log-viewer/api/files", + "name": "log-viewer.files", + "action": "Opcodes\\LogViewer\\Http\\Controllers\\FilesController@index", "middleware": [ "Opcodes\\LogViewer\\Http\\Middleware\\EnsureFrontendRequestsAreStateful", "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer", - "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware" - ], - "example": "http://app.p1pdd.test/log-viewer/api/clear-cache-all", - "parameters": [] + "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware", + "Opcodes\\LogViewer\\Http\\Middleware\\JsonResourceWithoutWrappingMiddleware" + ] }, - "log-viewer.files.delete": { - "name": "log-viewer.files.delete", - "methods": ["DELETE"], + { + "domain": null, + "method": "DELETE", "uri": "log-viewer/api/files/{fileIdentifier}", + "name": "log-viewer.files.delete", "action": "Opcodes\\LogViewer\\Http\\Controllers\\FilesController@delete", "middleware": [ "Opcodes\\LogViewer\\Http\\Middleware\\EnsureFrontendRequestsAreStateful", "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer", - "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware" - ], - "example": "http://app.p1pdd.test/log-viewer/api/files/{fileIdentifier}", - "parameters": ["fileIdentifier"] + "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware", + "Opcodes\\LogViewer\\Http\\Middleware\\JsonResourceWithoutWrappingMiddleware" + ] }, - "log-viewer.files.delete-multiple-files": { - "name": "log-viewer.files.delete-multiple-files", - "methods": ["POST"], - "uri": "log-viewer/api/delete-multiple-files", - "action": "Opcodes\\LogViewer\\Http\\Controllers\\FilesController@deleteMultipleFiles", + { + "domain": null, + "method": "POST", + "uri": "log-viewer/api/files/{fileIdentifier}/clear-cache", + "name": "log-viewer.files.clear-cache", + "action": "Opcodes\\LogViewer\\Http\\Controllers\\FilesController@clearCache", "middleware": [ "Opcodes\\LogViewer\\Http\\Middleware\\EnsureFrontendRequestsAreStateful", "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer", - "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware" - ], - "example": "http://app.p1pdd.test/log-viewer/api/delete-multiple-files", - "parameters": [] + "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware", + "Opcodes\\LogViewer\\Http\\Middleware\\JsonResourceWithoutWrappingMiddleware" + ] }, - "log-viewer.files.download": { - "name": "log-viewer.files.download", - "methods": ["GET", "HEAD"], + { + "domain": null, + "method": "GET|HEAD", "uri": "log-viewer/api/files/{fileIdentifier}/download", + "name": "log-viewer.files.download", "action": "Opcodes\\LogViewer\\Http\\Controllers\\FilesController@download", "middleware": [ "Opcodes\\LogViewer\\Http\\Middleware\\EnsureFrontendRequestsAreStateful", "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer", - "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware" - ], - "example": "http://app.p1pdd.test/log-viewer/api/files/{fileIdentifier}/download", - "parameters": ["fileIdentifier"] + "Illuminate\\Routing\\Middleware\\ValidateSignature" + ] }, - "log-viewer.folders": { - "name": "log-viewer.folders", - "methods": ["GET", "HEAD"], - "uri": "log-viewer/api/folders", - "action": "Opcodes\\LogViewer\\Http\\Controllers\\FoldersController@index", + { + "domain": null, + "method": "GET|HEAD", + "uri": "log-viewer/api/files/{fileIdentifier}/download/request", + "name": "log-viewer.files.request-download", + "action": "Opcodes\\LogViewer\\Http\\Controllers\\FilesController@requestDownload", "middleware": [ "Opcodes\\LogViewer\\Http\\Middleware\\EnsureFrontendRequestsAreStateful", "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer", - "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware" - ], - "example": "http://app.p1pdd.test/log-viewer/api/folders", - "parameters": [] + "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware", + "Opcodes\\LogViewer\\Http\\Middleware\\JsonResourceWithoutWrappingMiddleware" + ] }, - "log-viewer.folders.clear-cache": { - "name": "log-viewer.folders.clear-cache", - "methods": ["POST"], - "uri": "log-viewer/api/folders/{folderIdentifier}/clear-cache", - "action": "Opcodes\\LogViewer\\Http\\Controllers\\FoldersController@clearCache", + { + "domain": null, + "method": "GET|HEAD", + "uri": "log-viewer/api/folders", + "name": "log-viewer.folders", + "action": "Opcodes\\LogViewer\\Http\\Controllers\\FoldersController@index", "middleware": [ "Opcodes\\LogViewer\\Http\\Middleware\\EnsureFrontendRequestsAreStateful", "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer", - "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware" - ], - "example": "http://app.p1pdd.test/log-viewer/api/folders/{folderIdentifier}/clear-cache", - "parameters": ["folderIdentifier"] + "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware", + "Opcodes\\LogViewer\\Http\\Middleware\\JsonResourceWithoutWrappingMiddleware" + ] }, - "log-viewer.folders.delete": { - "name": "log-viewer.folders.delete", - "methods": ["DELETE"], + { + "domain": null, + "method": "DELETE", "uri": "log-viewer/api/folders/{folderIdentifier}", + "name": "log-viewer.folders.delete", "action": "Opcodes\\LogViewer\\Http\\Controllers\\FoldersController@delete", "middleware": [ "Opcodes\\LogViewer\\Http\\Middleware\\EnsureFrontendRequestsAreStateful", "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer", - "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware" - ], - "example": "http://app.p1pdd.test/log-viewer/api/folders/{folderIdentifier}", - "parameters": ["folderIdentifier"] + "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware", + "Opcodes\\LogViewer\\Http\\Middleware\\JsonResourceWithoutWrappingMiddleware" + ] }, - "log-viewer.folders.download": { - "name": "log-viewer.folders.download", - "methods": ["GET", "HEAD"], + { + "domain": null, + "method": "POST", + "uri": "log-viewer/api/folders/{folderIdentifier}/clear-cache", + "name": "log-viewer.folders.clear-cache", + "action": "Opcodes\\LogViewer\\Http\\Controllers\\FoldersController@clearCache", + "middleware": [ + "Opcodes\\LogViewer\\Http\\Middleware\\EnsureFrontendRequestsAreStateful", + "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer", + "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware", + "Opcodes\\LogViewer\\Http\\Middleware\\JsonResourceWithoutWrappingMiddleware" + ] + }, + { + "domain": null, + "method": "GET|HEAD", "uri": "log-viewer/api/folders/{folderIdentifier}/download", + "name": "log-viewer.folders.download", "action": "Opcodes\\LogViewer\\Http\\Controllers\\FoldersController@download", "middleware": [ "Opcodes\\LogViewer\\Http\\Middleware\\EnsureFrontendRequestsAreStateful", "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer", - "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware" - ], - "example": "http://app.p1pdd.test/log-viewer/api/folders/{folderIdentifier}/download", - "parameters": ["folderIdentifier"] + "Illuminate\\Routing\\Middleware\\ValidateSignature" + ] }, - "log-viewer.hosts": { - "name": "log-viewer.hosts", - "methods": ["GET", "HEAD"], - "uri": "log-viewer/api/hosts", - "action": "Opcodes\\LogViewer\\Http\\Controllers\\HostsController@index", + { + "domain": null, + "method": "GET|HEAD", + "uri": "log-viewer/api/folders/{folderIdentifier}/download/request", + "name": "log-viewer.folders.request-download", + "action": "Opcodes\\LogViewer\\Http\\Controllers\\FoldersController@requestDownload", "middleware": [ "Opcodes\\LogViewer\\Http\\Middleware\\EnsureFrontendRequestsAreStateful", - "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer" - ], - "example": "http://app.p1pdd.test/log-viewer/api/hosts", - "parameters": [] + "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer", + "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware", + "Opcodes\\LogViewer\\Http\\Middleware\\JsonResourceWithoutWrappingMiddleware" + ] }, - "log-viewer.index": { - "name": "log-viewer.index", - "methods": ["GET", "HEAD"], - "uri": "log-viewer/{view?}", - "action": "Opcodes\\LogViewer\\Http\\Controllers\\IndexController", + { + "domain": null, + "method": "GET|HEAD", + "uri": "log-viewer/api/hosts", + "name": "log-viewer.hosts", + "action": "Opcodes\\LogViewer\\Http\\Controllers\\HostsController@index", "middleware": [ - "web", + "Opcodes\\LogViewer\\Http\\Middleware\\EnsureFrontendRequestsAreStateful", "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer" - ], - "example": "http://app.p1pdd.test/log-viewer/{view?}", - "parameters": ["view"] + ] }, - "log-viewer.logs": { - "name": "log-viewer.logs", - "methods": ["GET", "HEAD"], + { + "domain": null, + "method": "GET|HEAD", "uri": "log-viewer/api/logs", + "name": "log-viewer.logs", "action": "Opcodes\\LogViewer\\Http\\Controllers\\LogsController@index", "middleware": [ "Opcodes\\LogViewer\\Http\\Middleware\\EnsureFrontendRequestsAreStateful", "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer", - "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware" - ], - "example": "http://app.p1pdd.test/log-viewer/api/logs", - "parameters": [] + "Opcodes\\LogViewer\\Http\\Middleware\\ForwardRequestToHostMiddleware", + "Opcodes\\LogViewer\\Http\\Middleware\\JsonResourceWithoutWrappingMiddleware" + ] }, - "login": { - "name": null, - "methods": ["POST"], + { + "domain": null, + "method": "GET|HEAD", + "uri": "log-viewer/{view?}", + "name": "log-viewer.index", + "action": "Opcodes\\LogViewer\\Http\\Controllers\\IndexController", + "middleware": [ + "web", + "Opcodes\\LogViewer\\Http\\Middleware\\AuthorizeLogViewer" + ] + }, + { + "domain": null, + "method": "POST", "uri": "login", + "name": null, "action": "Laravel\\Fortify\\Http\\Controllers\\AuthenticatedSessionController@store", - "middleware": ["web", "guest:web", "throttle:login"], - "example": "http://app.p1pdd.test/login", - "parameters": [] + "middleware": [ + "web", + "Illuminate\\Auth\\Middleware\\RedirectIfAuthenticated:web", + "Illuminate\\Routing\\Middleware\\ThrottleRequests:login" + ] }, - "logout": { - "name": "logout", - "methods": ["POST"], + { + "domain": null, + "method": "POST", "uri": "logout", + "name": "logout", "action": "Laravel\\Fortify\\Http\\Controllers\\AuthenticatedSessionController@destroy", - "middleware": ["web"], - "example": "http://app.p1pdd.test/logout", - "parameters": [] - }, - "other-browser-sessions.destroy": { - "name": "other-browser-sessions.destroy", - "methods": ["DELETE"], - "uri": "user/other-browser-sessions", - "action": "Laravel\\Jetstream\\Http\\Controllers\\Inertia\\OtherBrowserSessionsController@destroy", - "middleware": [ - "web", - "auth:sanctum", - "Laravel\\Jetstream\\Http\\Middleware\\AuthenticateSession" - ], - "example": "http://app.p1pdd.test/user/other-browser-sessions", - "parameters": [] - }, - "page.about": { - "name": "page.about", - "methods": ["GET", "HEAD"], - "uri": "a-propos", - "action": "App\\Http\\Controllers\\HomeController@page", - "middleware": [ - "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/a-propos", - "parameters": [] - }, - "page.p1pdd": { - "name": "page.p1pdd", - "methods": ["GET", "HEAD"], - "uri": "p1pdd", - "action": "App\\Http\\Controllers\\HomeController@p1pdd", + "middleware": ["web", "Illuminate\\Auth\\Middleware\\Authenticate:web"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "opds", + "name": "opds.index", + "action": "App\\Http\\Controllers\\Opds\\IndexController@index", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "opds/authors", + "name": "opds.authors.index", + "action": "App\\Http\\Controllers\\Opds\\AuthorController@index", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "opds/authors/{character}", + "name": "opds.authors.character", + "action": "App\\Http\\Controllers\\Opds\\AuthorController@character", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "opds/authors/{character}/{author}", + "name": "opds.authors.show", + "action": "App\\Http\\Controllers\\Opds\\AuthorController@show", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "opds/books/{book}", + "name": "opds.books.show", + "action": "App\\Http\\Controllers\\Opds\\BookController@show", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "opds/latest", + "name": "opds.latest", + "action": "App\\Http\\Controllers\\Opds\\IndexController@latest", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "opds/random", + "name": "opds.random", + "action": "App\\Http\\Controllers\\Opds\\IndexController@random", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "opds/search", + "name": "opds.search", + "action": "App\\Http\\Controllers\\Opds\\IndexController@search", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "opds/series", + "name": "opds.series.index", + "action": "App\\Http\\Controllers\\Opds\\SerieController@index", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "opds/series/{character}", + "name": "opds.series.character", + "action": "App\\Http\\Controllers\\Opds\\SerieController@character", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "opds/series/{character}/{serie}", + "name": "opds.series.show", + "action": "App\\Http\\Controllers\\Opds\\SerieController@show", + "middleware": ["api", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "pages/help", + "name": "pages.help", + "action": "App\\Http\\Controllers\\App\\PageController@help", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "POST", + "uri": "register", + "name": null, + "action": "Laravel\\Fortify\\Http\\Controllers\\RegisteredUserController@store", "middleware": [ "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/p1pdd", - "parameters": [] - }, - "page.pqd2p": { - "name": "page.pqd2p", - "methods": ["GET", "HEAD"], - "uri": "pqd2p", - "action": "App\\Http\\Controllers\\HomeController@pqd2p", + "Illuminate\\Auth\\Middleware\\RedirectIfAuthenticated:web" + ] + }, + { + "domain": null, + "method": "POST", + "uri": "reset-password", + "name": "password.update", + "action": "Laravel\\Fortify\\Http\\Controllers\\NewPasswordController@store", "middleware": [ "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/pqd2p", - "parameters": [] - }, - "page.subscribe": { - "name": "page.subscribe", - "methods": ["GET", "HEAD"], - "uri": "s-abonner", - "action": "App\\Http\\Controllers\\HomeController@subscribe", + "Illuminate\\Auth\\Middleware\\RedirectIfAuthenticated:web" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "sanctum/csrf-cookie", + "name": "sanctum.csrf-cookie", + "action": "Laravel\\Sanctum\\Http\\Controllers\\CsrfCookieController@show", + "middleware": ["web"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "search", + "name": "search.index", + "action": "App\\Http\\Controllers\\App\\SearchController@index", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "tags", + "name": "tags.index", + "action": "App\\Http\\Controllers\\App\\TagController@index", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "tags/{tag}", + "name": "tags.show", + "action": "App\\Http\\Controllers\\App\\TagController@show", + "middleware": ["web", "Illuminate\\Routing\\Middleware\\SubstituteBindings"] + }, + { + "domain": null, + "method": "POST", + "uri": "two-factor-challenge", + "name": null, + "action": "Laravel\\Fortify\\Http\\Controllers\\TwoFactorAuthenticatedSessionController@store", "middleware": [ "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/s-abonner", - "parameters": [] + "Illuminate\\Auth\\Middleware\\RedirectIfAuthenticated:web", + "Illuminate\\Routing\\Middleware\\ThrottleRequests:two-factor" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "up", + "name": null, + "action": "Closure", + "middleware": [] }, - "password.confirm": { - "name": "password.confirm", - "methods": ["POST"], + { + "domain": null, + "method": "POST", "uri": "user/confirm-password", + "name": "password.confirm", "action": "Laravel\\Fortify\\Http\\Controllers\\ConfirmablePasswordController@store", - "middleware": ["web", "auth:web"], - "example": "http://app.p1pdd.test/user/confirm-password", - "parameters": [] + "middleware": ["web", "Illuminate\\Auth\\Middleware\\Authenticate:web"] }, - "password.confirmation": { - "name": "password.confirmation", - "methods": ["GET", "HEAD"], + { + "domain": null, + "method": "GET|HEAD", "uri": "user/confirmed-password-status", + "name": "password.confirmation", "action": "Laravel\\Fortify\\Http\\Controllers\\ConfirmedPasswordStatusController@show", - "middleware": ["web", "auth:web"], - "example": "http://app.p1pdd.test/user/confirmed-password-status", - "parameters": [] - }, - "password.email": { - "name": "password.email", - "methods": ["POST"], - "uri": "forgot-password", - "action": "Laravel\\Fortify\\Http\\Controllers\\PasswordResetLinkController@store", - "middleware": ["web", "guest:web"], - "example": "http://app.p1pdd.test/forgot-password", - "parameters": [] + "middleware": ["web", "Illuminate\\Auth\\Middleware\\Authenticate:web"] }, - "password.request": { - "name": "password.request", - "methods": ["GET", "HEAD"], - "uri": "forgot-password", - "action": "Laravel\\Fortify\\Http\\Controllers\\PasswordResetLinkController@create", - "middleware": ["web", "guest:web"], - "example": "http://app.p1pdd.test/forgot-password", - "parameters": [] - }, - "password.reset": { - "name": "password.reset", - "methods": ["GET", "HEAD"], - "uri": "reset-password/{token}", - "action": "Laravel\\Fortify\\Http\\Controllers\\NewPasswordController@create", - "middleware": ["web", "guest:web"], - "example": "http://app.p1pdd.test/reset-password/{token}", - "parameters": ["token"] - }, - "password.update": { - "name": "password.update", - "methods": ["POST"], - "uri": "reset-password", - "action": "Laravel\\Fortify\\Http\\Controllers\\NewPasswordController@store", - "middleware": ["web", "guest:web"], - "example": "http://app.p1pdd.test/reset-password", - "parameters": [] - }, - "podcasts.index": { - "name": "podcasts.index", - "methods": ["GET", "HEAD"], - "uri": "podcasts", - "action": "App\\Http\\Controllers\\PodcastController@index", - "middleware": [ - "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/podcasts", - "parameters": [] - }, - "podcasts.show": { - "name": "podcasts.show", - "methods": ["GET", "HEAD"], - "uri": "podcasts/{feed_slug}/{podcast_slug}", - "action": "App\\Http\\Controllers\\PodcastController@show", - "middleware": [ - "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/podcasts/{podcast_slug}", - "parameters": ["feed_slug", "podcast_slug"] - }, - "posts.index": { - "name": "posts.index", - "methods": ["GET", "HEAD"], - "uri": "blog", - "action": "App\\Http\\Controllers\\PostController@index", + { + "domain": null, + "method": "POST", + "uri": "user/confirmed-two-factor-authentication", + "name": "two-factor.confirm", + "action": "Laravel\\Fortify\\Http\\Controllers\\ConfirmedTwoFactorAuthenticationController@store", "middleware": [ "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/blog", - "parameters": [] - }, - "posts.show": { - "name": "posts.show", - "methods": ["GET", "HEAD"], - "uri": "blog/{post_slug}", - "action": "App\\Http\\Controllers\\PostController@show", + "Illuminate\\Auth\\Middleware\\Authenticate:web", + "Illuminate\\Auth\\Middleware\\RequirePassword" + ] + }, + { + "domain": null, + "method": "DELETE", + "uri": "user/other-browser-sessions", + "name": "other-browser-sessions.destroy", + "action": "Laravel\\Jetstream\\Http\\Controllers\\Inertia\\OtherBrowserSessionsController@destroy", "middleware": [ "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/blog/{post_slug}", - "parameters": ["post_slug"] + "Illuminate\\Auth\\Middleware\\Authenticate:sanctum", + "Laravel\\Jetstream\\Http\\Middleware\\AuthenticateSession" + ] }, - "profile.show": { - "name": "profile.show", - "methods": ["GET", "HEAD"], + { + "domain": null, + "method": "PUT", + "uri": "user/password", + "name": "user-password.update", + "action": "Laravel\\Fortify\\Http\\Controllers\\PasswordController@update", + "middleware": ["web", "Illuminate\\Auth\\Middleware\\Authenticate:web"] + }, + { + "domain": null, + "method": "GET|HEAD", "uri": "user/profile", + "name": "profile.show", "action": "Laravel\\Jetstream\\Http\\Controllers\\Inertia\\UserProfileController@show", "middleware": [ "web", - "auth:sanctum", + "Illuminate\\Auth\\Middleware\\Authenticate:sanctum", "Laravel\\Jetstream\\Http\\Middleware\\AuthenticateSession" - ], - "example": "http://app.p1pdd.test/user/profile", - "parameters": [] - }, - "rss.index": { - "name": "rss.index", - "methods": ["GET", "HEAD"], - "uri": "rss", - "action": "App\\Http\\Controllers\\RssController@index", - "middleware": [ - "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/rss", - "parameters": [] - }, - "rss.show": { - "name": "rss.show", - "methods": ["GET", "HEAD"], - "uri": "rss/{feed_slug}", - "action": "App\\Http\\Controllers\\RssController@show", - "middleware": [ - "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/rss/{feed_slug}", - "parameters": ["feed_slug"] + ] }, - "sanctum.csrf-cookie": { - "name": "sanctum.csrf-cookie", - "methods": ["GET", "HEAD"], - "uri": "sanctum/csrf-cookie", - "action": "Laravel\\Sanctum\\Http\\Controllers\\CsrfCookieController@show", - "middleware": ["web"], - "example": "http://app.p1pdd.test/sanctum/csrf-cookie", - "parameters": [] - }, - "submission.index": { - "name": "submission.index", - "methods": ["GET", "HEAD"], - "uri": "contact", - "action": "App\\Http\\Controllers\\SubmissionController@index", - "middleware": [ - "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/contact", - "parameters": [] - }, - "submission.store": { - "name": "submission.store", - "methods": ["POST"], - "uri": "contact", - "action": "App\\Http\\Controllers\\SubmissionController@store", + { + "domain": null, + "method": "PUT", + "uri": "user/profile-information", + "name": "user-profile-information.update", + "action": "Laravel\\Fortify\\Http\\Controllers\\ProfileInformationController@update", + "middleware": ["web", "Illuminate\\Auth\\Middleware\\Authenticate:web"] + }, + { + "domain": null, + "method": "DELETE", + "uri": "user/profile-photo", + "name": "current-user-photo.destroy", + "action": "Laravel\\Jetstream\\Http\\Controllers\\Inertia\\ProfilePhotoController@destroy", "middleware": [ "web", - "Illuminate\\Routing\\Middleware\\SubstituteBindings" - ], - "example": "http://app.p1pdd.test/contact", - "parameters": [] - }, - "two-factor-challenge": { - "name": null, - "methods": ["POST"], - "uri": "two-factor-challenge", - "action": "Laravel\\Fortify\\Http\\Controllers\\TwoFactorAuthenticatedSessionController@store", - "middleware": ["web", "guest:web", "throttle:two-factor"], - "example": "http://app.p1pdd.test/two-factor-challenge", - "parameters": [] - }, - "two-factor.confirm": { - "name": "two-factor.confirm", - "methods": ["POST"], - "uri": "user/confirmed-two-factor-authentication", - "action": "Laravel\\Fortify\\Http\\Controllers\\ConfirmedTwoFactorAuthenticationController@store", - "middleware": ["web", "auth:web", "password.confirm"], - "example": "http://app.p1pdd.test/user/confirmed-two-factor-authentication", - "parameters": [] + "Illuminate\\Auth\\Middleware\\Authenticate:sanctum", + "Laravel\\Jetstream\\Http\\Middleware\\AuthenticateSession" + ] }, - "two-factor.disable": { - "name": "two-factor.disable", - "methods": ["DELETE"], + { + "domain": null, + "method": "POST", "uri": "user/two-factor-authentication", - "action": "Laravel\\Fortify\\Http\\Controllers\\TwoFactorAuthenticationController@destroy", - "middleware": ["web", "auth:web", "password.confirm"], - "example": "http://app.p1pdd.test/user/two-factor-authentication", - "parameters": [] - }, - "two-factor.enable": { "name": "two-factor.enable", - "methods": ["POST"], - "uri": "user/two-factor-authentication", "action": "Laravel\\Fortify\\Http\\Controllers\\TwoFactorAuthenticationController@store", - "middleware": ["web", "auth:web", "password.confirm"], - "example": "http://app.p1pdd.test/user/two-factor-authentication", - "parameters": [] + "middleware": [ + "web", + "Illuminate\\Auth\\Middleware\\Authenticate:web", + "Illuminate\\Auth\\Middleware\\RequirePassword" + ] }, - "two-factor.login": { - "name": "two-factor.login", - "methods": ["GET", "HEAD"], - "uri": "two-factor-challenge", - "action": "Laravel\\Fortify\\Http\\Controllers\\TwoFactorAuthenticatedSessionController@create", - "middleware": ["web", "guest:web"], - "example": "http://app.p1pdd.test/two-factor-challenge", - "parameters": [] + { + "domain": null, + "method": "DELETE", + "uri": "user/two-factor-authentication", + "name": "two-factor.disable", + "action": "Laravel\\Fortify\\Http\\Controllers\\TwoFactorAuthenticationController@destroy", + "middleware": [ + "web", + "Illuminate\\Auth\\Middleware\\Authenticate:web", + "Illuminate\\Auth\\Middleware\\RequirePassword" + ] }, - "two-factor.qr-code": { - "name": "two-factor.qr-code", - "methods": ["GET", "HEAD"], + { + "domain": null, + "method": "GET|HEAD", "uri": "user/two-factor-qr-code", + "name": "two-factor.qr-code", "action": "Laravel\\Fortify\\Http\\Controllers\\TwoFactorQrCodeController@show", - "middleware": ["web", "auth:web", "password.confirm"], - "example": "http://app.p1pdd.test/user/two-factor-qr-code", - "parameters": [] + "middleware": [ + "web", + "Illuminate\\Auth\\Middleware\\Authenticate:web", + "Illuminate\\Auth\\Middleware\\RequirePassword" + ] }, - "two-factor.recovery-codes": { - "name": "two-factor.recovery-codes", - "methods": ["GET", "HEAD"], + { + "domain": null, + "method": "GET|HEAD", "uri": "user/two-factor-recovery-codes", + "name": "two-factor.recovery-codes", "action": "Laravel\\Fortify\\Http\\Controllers\\RecoveryCodeController@index", - "middleware": ["web", "auth:web", "password.confirm"], - "example": "http://app.p1pdd.test/user/two-factor-recovery-codes", - "parameters": [] - }, - "two-factor.secret-key": { - "name": "two-factor.secret-key", - "methods": ["GET", "HEAD"], - "uri": "user/two-factor-secret-key", - "action": "Laravel\\Fortify\\Http\\Controllers\\TwoFactorSecretKeyController@show", - "middleware": ["web", "auth:web", "password.confirm"], - "example": "http://app.p1pdd.test/user/two-factor-secret-key", - "parameters": [] - }, - "user-password.update": { - "name": "user-password.update", - "methods": ["PUT"], - "uri": "user/password", - "action": "Laravel\\Fortify\\Http\\Controllers\\PasswordController@update", - "middleware": ["web", "auth:web"], - "example": "http://app.p1pdd.test/user/password", - "parameters": [] - }, - "user-profile-information.update": { - "name": "user-profile-information.update", - "methods": ["PUT"], - "uri": "user/profile-information", - "action": "Laravel\\Fortify\\Http\\Controllers\\ProfileInformationController@update", - "middleware": ["web", "auth:web"], - "example": "http://app.p1pdd.test/user/profile-information", - "parameters": [] - }, - "user/confirm-password": { - "name": null, - "methods": ["GET", "HEAD"], - "uri": "user/confirm-password", - "action": "Laravel\\Fortify\\Http\\Controllers\\ConfirmablePasswordController@show", - "middleware": ["web", "auth:web"], - "example": "http://app.p1pdd.test/user/confirm-password", - "parameters": [] + "middleware": [ + "web", + "Illuminate\\Auth\\Middleware\\Authenticate:web", + "Illuminate\\Auth\\Middleware\\RequirePassword" + ] }, - "user/two-factor-recovery-codes": { - "name": null, - "methods": ["POST"], + { + "domain": null, + "method": "POST", "uri": "user/two-factor-recovery-codes", + "name": null, "action": "Laravel\\Fortify\\Http\\Controllers\\RecoveryCodeController@store", - "middleware": ["web", "auth:web", "password.confirm"], - "example": "http://app.p1pdd.test/user/two-factor-recovery-codes", - "parameters": [] + "middleware": [ + "web", + "Illuminate\\Auth\\Middleware\\Authenticate:web", + "Illuminate\\Auth\\Middleware\\RequirePassword" + ] + }, + { + "domain": null, + "method": "GET|HEAD", + "uri": "user/two-factor-secret-key", + "name": "two-factor.secret-key", + "action": "Laravel\\Fortify\\Http\\Controllers\\TwoFactorSecretKeyController@show", + "middleware": [ + "web", + "Illuminate\\Auth\\Middleware\\Authenticate:web", + "Illuminate\\Auth\\Middleware\\RequirePassword" + ] } -} +] diff --git a/tests/RouteTypeTest.php b/tests/RouteTypeTest.php index 3238d28..e78aea3 100644 --- a/tests/RouteTypeTest.php +++ b/tests/RouteTypeTest.php @@ -1,5 +1,6 @@ database); } - if ($driver->name === 'mongodb') { - $migration = include __DIR__.'/Data/database/migrations/create_models_tables_mongodb.php'; - } else { - $migration = include __DIR__.'/Data/database/migrations/create_models_tables.php'; - } - + $migration = include __DIR__.'/Data/database/migrations/create_models_tables.php'; $migration->up(); } } diff --git a/tests/docs/Movie.php b/tests/docs/Movie.php index 3a9d328..c5d62aa 100644 --- a/tests/docs/Movie.php +++ b/tests/docs/Movie.php @@ -5,17 +5,8 @@ class Movie extends \Illuminate\Database\Eloquent\Model { use \Illuminate\Database\Eloquent\Concerns\HasUlids; - use \Illuminate\Database\Eloquent\Factories\HasFactory; - protected $fillable = [ - 'title', - 'subtitles', - 'homepage', - 'revenue', - 'is_multilingual', - 'added_at', - 'fetched_at', - ]; + protected $fillable = ['title', 'subtitles', 'homepage', 'revenue', 'is_multilingual', 'added_at', 'fetched_at']; protected $casts = [ 'subtitles' => 'array', @@ -26,15 +17,9 @@ class Movie extends \Illuminate\Database\Eloquent\Model 'added_at' => 'datetime:Y-m-d', ]; - protected $appends = [ - 'show_route', - 'api_route', - ]; + protected $appends = ['show_route', 'api_route']; - protected $hidden = [ - 'budget', - 'edition', - ]; + protected $hidden = ['budget', 'edition']; public function getShowRouteAttribute(): string { @@ -46,9 +31,7 @@ public function getShowRouteAttribute(): string */ protected function apiRoute(): \Illuminate\Database\Eloquent\Casts\Attribute { - return \Illuminate\Database\Eloquent\Casts\Attribute::make( - get: fn (?string $value) => ucfirst($value), - ); + return \Illuminate\Database\Eloquent\Casts\Attribute::make(get: fn (?string $value) => ucfirst($value)); } public function recommendations(): \Illuminate\Database\Eloquent\Relations\BelongsToMany diff --git a/tests/docs/example.gif b/tests/docs/example.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f0704bf5b21ea6df4d7310ddd2b7d80976f6719 GIT binary patch literal 367828 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�?3t9~r zn)qREoVO$BVT>f92v+s3*D)i3%qAur-)1-x293Pz1p%mH%_5KppUiJ6bX?+Xj1Wde zb_E2TSY7KRawn$EjevV8|C`VfIH<(@4l`7o3mK(w6ck3J1;$Ve2Q#HfMb?c6jx>m< z23W&d+VYmT%%v`O$;)2)@|V83VGbFGtWpg#JVA^W4-GN{?HuuQmyrV&)W{nk%)%_p zfCFtz*%#dLD~qvNlfW3*MW7jQc#YXa8Tn#?4#u)85gS(Bmyt_ z%8ios7OW1 zL4@f{iD01(6fmY8|8yv#rwWmX5-GwSOz_OpH2_=--3=3hfz2}1CV1z}-2nQPzsr>9 zcZw({i}D4LQy3#|M^T;yHwp@1w7{YiiRbgWgbANDW(^*zX!h)QGY-U$nui(a^y0XX zo`f}ID@zIaATWrU#o!YYElvYrc^hk%RcOQuU}KuLC%npZ6q_7I3KV!imZHd|k&3C( z=CIKLm_`<<8L0~tsf3xzh6mnEs&bdh+~zv>xzLTSba4{{EF|lOT9so&k`N%qiBE}_ zB9=T2g4JVXE<9)OVMV5})s3D<0<|dvGR$%dCZx&&f{;OPOHqvB8mgzIIT2g6_}0y! zHLXg^#TZ-w|GPAN4S5FXgE6uI*om<5l#(R?0}kP_gE;m~=fhY(ZAOy^a2TQ87nrakUx=@@L(A| zsM27|Mbh547HOktSm?T1ttsN@I{;n_#@kXxf`hQ&%A@2fC#{W zO*3;3XBck*I8bSh5`(@;!y*VH}wH90{{s|yuZ-69wv^x7J| zX5E^N|N4MZYK_f>SzIv!lq3$5E`SE^V3ZIOp^pCa8CBM>0THc$!zT$H&F%nS`h~)< zR3U>JU*HHOso;m~78#U2;fR;z%w-)}Xb+$y#6>2TqqjgcW1PI&OXk2Bt)Qi>qhU6R zB!mzN@U0YnGBwwqq|E&vX=HH9MV;OS2f zHBg8ph9o%M=vuExGtc1kZbkJV+?A%&F(>KT6b)%rdw?XML5oHNA`p^zMKgq9#^e=) z|5A8&lo)s0)(Feu@VMAJ;$Z=*r!B+RXB=nw<^TyxAR-GBSeS4t91+3xDZ@HJ$m@}Xqf$$Dsk=IjJCJ2fdexdR5dO@%VB5FmSj0RdJ3V=*HWL4sjq@B#@HGxZjP9AJ8WScnNQ1bUc1 z0>DSwa)}&9iE%K9x`AAt!FdJ11a6@kJ}?Rh*cg8x2}p)tP>6+%AOw;SA{C(oS6B;( zu!cx62e)`HKJ^5n@HJSdh4{4zs8VB3xG7r$3UL@xtw1kXXn~CZ27?i7|E(|wTUcg( zg?%S<3~1;f=$8wmVuI}0j_&x5@EDKsxBw8KRXcE5m%#y(6LI;dk7(i*4L||@_=Or) z0Tu9%{YU{tMjRI40y4m0;n+J4X>z(jhqfUJ#b9L-@c^EnapX800XdMW*d_W{XpmSC zJGPIm(|jr!8+e2iEQyb{kpkB!1S5HqZm3}`Fp;sblXO-Q8Nib?wUaGCkyJ8~Tn3On zSt_stkq`3(IJb^ofd>vmhj38}NjZ;Nxs_bmm0tOkyu=+`1(v@73+k9AG-(Wozyq$9 zH_nHX`BOh|sZwCzC}}X4dq$P_LQ9RIi_ee>QaP1zMwWzGn1*?n|A?8Gs=@#YshA_8 z2v49k3NQkS01a1k7@%N)Ht9ES=^IuM1r*l+LohNXIUJdZ3;4p74px;DaRv2a2|o#x zQfQQpS(~qy1AP~fsJK|ehK$54`2j!KmvHFDxJw2u(u?DaAVYm9AE$je5sWw zUztp%|K> z8oHqz+Myo$p&%NfB08cZTB0U;q9~f8f+GZdM}kPe1~3|<|7M_|Dq5p9dZRd+qkus41%zk?f7M5-~&RCrEJNhT-v2x z`lVo68;WxPiisGyppjKNjtlXmVcMo{`lfJ7q8#vaHz+x2G6VN`IC)xl9^iFO2cO50 zYI-wfvDg(?vU=fR1&B%q*RCJ z=2akL9G_KB#gUv|5eBBvY{;Rk(0Z@oGl@%aOG;u>QPy~=wOuJEDCWI}qdK`RU zG_D}1ykeGt=@k;Cu7E z0VWIZvf7BWvC#l3@B;64vBKIVE1*h@gzcfD4d7XByxM%+s2wfQG&pFZB{4fj~RGz>5HsW{i;}9cw6#$cUIwiF0uT zgMeZOp?qot0c3!CFyjb{+OrO0;=;wc-%mRDgYYL88-FD|2su^eSr%(2W4Iu0Amnx8sUGCvOuqvse^I|d-xTk zITs&hQ<>ZtoBU!DBM}kft|)96p66_DRAbc(h&WUUvFjB!a0rq*#p-O!4BgNU{m`}% z1EQ*e0_!>i3zWv3%*Cus8QsI}?NO0AexQVe<^oNDV(TY#0-ZNRNomLQGyR z<}z0euK;P0zY)t2{ncO{)({N=+_8cGika^)+f^AZsgwu!}&Kewl1khLh1r|BC z3PySxkquce+{1~a$w;l$7(3aYpu6gAB#w}~z^#w>G}Yo((5iyktexNbz2Er?ESGb1 zXf4|hLxazf2L`@^SJkS=wA(g|zomNM5Wa$*#spRAL8SFy&Kjb@SWNv1D2TOu*el z3wQSiYQE-b&SufgQidE67z`1L9oRD6;y@~Mkj=^m;loo+<2GJx5|Q5iOxo@3Pr}Q> zivF2fD?R{a+PPumNIllZ;uvPT% z?9d+V8_HBv73#_&P5+<+>Q^r6Mg-Dw4IJ_%a8U!KT>-H|$S%+-MbMCr8_q861Yht5kD%24ehRpgvYGL zU(p8Y^&1N-?l%=mjA8D-#@&!L=i44i3a~(t=DO}HuBIS=O1SRK@=nh60-)5|fCCj^k1q(@MHFh369TC! zPfag5l+&%RO@#lbRajsG5)l4ckm(aKboU4WSNB81GF6j{P|)B(ga%>U zvPP|tgM7g7%dRPkJnF}2K7M0i9=2ei9$7n&|t$6sYg;G46~O5R7`6aAZ4r)8nj#;*fvJG z30RBClr?YW+}ZPI(4j?-CSBU}Y1FAzuV&ra^=sI%WzVKv+xBhTxpnX6-P`wX;K79t zCtm#Xj5B%!?pZFzL*@iU?ASSz+)k0O1U#&nUcC+V5Id&dCBQ&B_3G21EI!I1d7JNN zE*OnrJ^h|DEJ6cu1!uDoTAC3C7hHf5(4&Jqxool;gpp*h@+_e#mja7{<&6b4)VJH1kX}(^PX!HrsUb zO*rF}b51(z9Fu|>ir~(RB4U7mF%yb_Vv0VqD@cMo2ZdsX4GQAGga!`sU1)t4FefB8(|DZHt~d#H@IZWhbvG-$bu_!n6-*jH<5%55?shavYxmg z!5~;=eV_^>NL^2zs!=+5$2~V_K(rAg?hN=l?rM zgCWSsHmgo&J!0HAsEzlt7Cc!777M`K>`OZX7IjYO_)Lm;(2=nS@Z8v6&R9k~($ z6wU%xWEo*^q*=)Ke$80UM5p;s_hm9d3j=c>lm$b=-5; zeRtk__x*R^gBN~y;)^%_c;u5;etG7bcm8?kqnCbq>Z`Z@dhD~;etYh__x^kEvw!L2 zsvpq6?C@X1Xzqe1IDgLZ8D2kq`s=sq%iEF_h4S7glt!x57GX@f}NP_p729o5Pl_9}Mw_-SwF^J?OAYm$w02=m9jA(2_rHBSb9=mpzKTwdI1^C zj3y(YT+=P%m_}$uQ<`zA15x}X30k!BAc)At3=cwz$E4woC){H$4>Ex(0s|PeC?ajv zsLg~3B5&%XXFY#%Nrx@+F-id8s9K>3bBbmJu-L>Yw>eL7>aZA!IAsTDVb5N0#GXQX zjUr&dlhTxEii`mRM0@cHL|`;DGQfo)P*Y8cB4rE__2@d2dH*IU7{jEEF#}8KS&LCL z@s5L0U>0_Y6eIKk4_(?=OVt?&O1=r3@JyV6gdtMU{DBtjGz}0UQG%a#W~KC;=`_9i zRj?Mv1;r>En07Lmq4X~zLLdYl5?PuI-~kcIN(vhgF}6l#m8RAN>Rk=-*N}kpuYdJs z#-!jhe11lRB9f$uWQi1983LSz4Grb8nIa1WVz7VBMMX9{SG^)c6HmRPglehMXPjcQ zk^tIN8)y;d_SzwXWR@ic z<_v68b5`2=bWVhDFlxEbPZ_)-ucTqn()#w<{qUmu%h*1XJ44KbJ=5(iT7^1{RsQ<|+0Gfu@S_M=~A(bV0La0Yjg*P55 z)wQCGl)?0bKuAIoh8V+3GYo555kl8v2A3BzaM)eX!B#-kbLPxoh;6TWR;6I$zs^ilR7D&*H6S;^=j(5vjq%@B zmT?wxO^HSj5q%_PV4M?j!or>k;=8VbFXhdJKpZ0#|MoXNm2h%iqxn#b?ox{_W&|NT zfCqB*_^+9r5E|6{BQ1b67v-*+~Shhi)usLlr@Bt53 zM7xnoNsQ;h^>YDC++MuN1ds^g_Yg7u-+41XFT4gdTS z)*DB=Bh-muSQcnoF!Nu{_|KZu5W`6Ta2ni%kTGVf}Ku9QCkOz>$7Wd|NR#II2D_#NT(c+kWYp#9S zv5)8jr>YQ^fT{^tKl&4f0-O~@82^R|ktjouni(qv7f=vgsE`=z30Nq{iHkYZp7up_||qYMZmwE6?W z2=qP(T&D`jh4-Tz7o0*tm<#}^!1{xPOX2}z04SG}h(9A16>C45&_JUgzbTv$UmJi1 z6v6H5g_PQ+@GH9Lv!zy`g}ND#0%-=YY2&(eqvhhno1-w48`$9jI z8-swpwac(x@B~@Xw+dtlHFGf|7{e2^5DJl+DyRi4+?OO806|Q{33;mwY%~%)364R* z?TfJ^6aYJe#1f$p?!z_qJO9OVnuXhY2!w!x+am_?N{W!+z*@*cU$VtsC_jFIj+H7! zj$xrlB&(aU8&F`X&Hw>b2*wd%JNt`>RnQykGlU?-n*(7V;fn}n;ivuMBkW5>Ck(<< z5IX0}M|}hzxEZd>kgpD6D4@!MD+mdAB*OPg2-7l(o2w>Gs5Sjc5j2#FQI^pKA-`Ytf}rR52VWiVR!{8 zKsuxYBd!cei+qFTI{(O?;0Uq=rYxWc@k0m&OOYqA8(smX8jz+%c~ddLvq41cOsAwxqoAe97y)1ag))L0DEuP@+CB{HfRL*JmwbX! z(2|j%foBYazyv0J6FU+>w+8cs$XrcBX+?h_KTSZ+p$x&dti@ZLx?{2g7vO=1(m@h9 zAxq4R67aEx5dQ^mDTLdT1|UcgP!P_JOa*8_s;Y4|3k4ZJhzc-4E=-4J7dCw zOd2_B1ZYSoHslzz{D}NI#VeXbo7mE{#D#mCx>2Z20+_KSBv6z%3JD>(sjNb_$fGa) z%qBgjKb_PzEs+(=iR9u=9vm}r%+dptyK6Mb#;C=DkOa@%5O3;JIm5LajYGi8~j|usf8Ml7U3LC`U-miFS0*hq|w!5HJ~&QW2$2=>yhg_|@!_O5c>j zK#Ydr3IOdS(f}x#9W*X8ow`Q2FHr+jgbV;O^-S#a(lXMQ+a%Bu%YrtYx)I6=L+H@r zGryBmE_Ussz3f$%@Fk5TR-LF-TNKi?oUkJ*D;#xDU~C9sJcu$V#$z1Say6#QItpmb zjD6)*qY!`{QqdzqR1j3y%vjl+pwJ%!fp+ypRIJ1Dh{|InfVlg>ASJS+*w;M;!6Vhv zIwe&oEn1_6o(8K<(HaIL;DY)>SKG`^VQ5ep8(4#Afj>kF^pmkUNXVU4mV=#)Hlv09 z>;F>5cvDNoK>rg_%P7>Zbrk=Cx;V{KSuiCxy;tnZ&j88Hl6b47z1cv!(<1%Yv_*=^ zn}f&F&!LM+U=_Q66;-`F(yMilqtQrbuJ0||v4&_N9(Hi!mE zRe(o32+Y&GgusB#%LLG?j4(ZjcdcK-#Z+MM+q6W)BQmwwomUVj0R>)Q25#U6zW)S_ zWfC3&;6ysyf~!RBN>-5kStAXLu~N}T+_a+|VG;(M2C>G7n2Bcu*v)7#4wh0`k+)Uz z-N~&~t=(T!+0N|H$a1CID^1#Iwa$N>L?cK^^ab1w{)o7&S`>bO?QIMori>XIhS2Sj zN6m~9^jZ(;OG>;{&2X~_^0Lx}UO0tZacl%-9b@UW7*+jXj~&x3R@Wi!lJ8X+eStE^ z_*LvX1;>pDU$s@xD6q_+VaKS)4m>ts?b!MHNJ2)x;56W{;lB_B4m`xiMGAo?EQ!k(Jlq?+d59aCq%)Env7Ap-yMw=DTL@wZhGu?dXpUxQe&*W)uOP#|SJ>RQO&nV2Uccm7 zEPdg;Tw=~GVRJs`;lU7mJk3UUvWszH&782A5Lq7XBiRk-rNO^~sOLHA;~)jqyS?0q zFgBxjN24g^gm~gVHsz5CNN(g`sdS}$^%5>#*LYe6x*}%KSX;d41vQ>onGM&5gUgXN zigLVC>&4tbJ_bphjQ3ic65K`@CFB0eh2^st%az7f-D7{&R6QnS&Ab7ni z#OrO2FQLO~>Zb4Eenv>$9|5tgG2j9Frs+&JhJTuaiiFXly#LbDK5pMbYLtu0pB~5b zo;mtP@K9=Pou1e9<7krJ!A8bt;G|iqX4GTezUgKIBY5c6E$?}JQ3D^~77|x1Mzo~d zySDxaKdXiPu5OAjz*c6i@rLmo-(oaV-x8TEdkyTm>E#cL=paqrM4nX|XX3_YS_Yxq zf`9>4_;N50b1@(DiG5jdyw$O_@&(24{`O|M1?R06?Yyj}RhaMfwj2>&Z9U&}n8D?E zexv;AVSJWWjl^y)3GXw9NL?kt70$uhD()WaX93P@*X~z=PGR}-Gn7?T?Mo(l%t87~ zg&c*u%}hsFaI1q>SuFRAD>m}HR%-Myeu5JyLM-mZd8SjGu~1bl4n8&}#q9frmEADK0ob8S&vsgtS_0Pc=*?Rhfe4Wwd6I{S6M*0dwb90v zqd|g8iYWGo+LzCM>kS^A(5{%cf$Fn5H+1i>n6RqSCMcAr+O!H)3k9NiL!eh_(@He({;~w#CJ;-vb zYMMu7XTyVZs&~;hZ;&PNRsC%*^Y@(wW*jeSf{&ZT7kuxXYa(~WJZ^YJes}_9@`)ez zC`VUKPmy8XYmQHG7-UYT_Y7|YM=S={0`8}Q!h6z0eK-I3qG#^lBzwi5bf3R}{O6is z#q`Ai2r0!*Sr|azAi{)ymMJlqaKH#)p8rPRDn&ygMN$bKB5YAi6Gx7Xj`?u-a7?p5 zCJlCw_yFORlq(OC>eXQ;LQNzEghZ&s7$KYqQ{)=;V8SX`8dh!sCIjaxn+D%Jy8=Kc zR+Ak{8EZ&W*wdavE4~yP(vqfh8PoB*Y%7t-Ou`+~#Ds0wMF&8-V1_}__tOZET*vv#r<8#QEgnJ^DdJ-|mmUag` z7zH-5L6l==<}e1yEJ{H*$zqKu+;FojpC9-I{Lr}D-jqU)6f!lgTUNSmLiEj7>_S5Y zdS0xIoD1%QaOFzc`B1R=0a75JcmIee?Mw@;a7{2MJ$+V-i6@o@xvX-RSY|9^#&CZ* zgqda!mB*4x2W3GY0qwPbnpqu!k{NF@^#n^T&Ly-!Dy|Jx;X#TFW1WO7cGwdPvsiN@ z91f885dr#@xKb5*#Rf|&2zKOMPlh}r*IdL6a2R?V&NwBNRa$u^mRV}KC6`@#`6ZZP zia92kWtw>=nrW)JCYx=#`6irkwn^8ICqih_eJYu?5R-H5_ZS`okU|S|JA%|o501B&%iP#!wfnS)YNH_66qYE09sjUi}=l0;A&QywiYzIiNp|Y zbj{Y2ZuyaDqF}8mL@T8jKL59jrB{9!s#te&^dFZz@c0lVw`G|kcOk(gYeH$jCLxkO z7W5jnNA3mQwoM+0m95`qo7{5E%~YrW%t8z7df9Eqk}-#ZW}syu)fCpcQND#;syr~t zq7lS~#D+20GECZg!0?A}d{bhY6|4Pqs33!)I`~zDLv_pIg>QJ4p)nht`C$qn7JK5Z zI7JJiV#{cRkc%{n``wj5+;Sr_Wnipb2MKoyuC7IfR0ERMmU~dT778mT)m2-4HP%^c zy*1Zed;K-oVT(Ps)k;>8p0ZH4@?utto<$jmRDBq3jQWz>C(f#hY!pl)+BxZaw0zvt z#Tz$VM^~lkJy$QMSpOzOGnRB&_>=6e>SUF#B3B1g(weLB!VBs;c%zY~U2|tk55qT> zC!yWQahCXOoPCR#zpTKWmCB(@>mT|6& zEF*Rzvs+I@*#8!%Ng+L|ag^T@Qj=;?=V=e29Dxk9pQYFd8sU?grCO2;E@tow2&%%_ zg2lNZ=Br;YG1%v>^uKjgEQ5nF5_168FI0(aje+^&N?IZdbtS}E(+P=woRXdtxN%?J zgI&l@lnN(y01S-e0o~|0u3stVb_mJ<8`wyjF=9mlwgH#`Pv$3SL9aAZgGgNvgdi4v zQHh{a-6Nd`nh2sUF#0Rw^_r)>?&!+}Z1|q~ZUxC)uH=L;QxWibX*;z6P5{}Y$ulfL z0}EIn1%DVuGvwz=V4Y|TWHg>hPI*k=h|Xgs5(GQ@HZG#{u4E_EkWeCl3~3O93LNnn zGnka;81rgDB8RKxl9T&h-Nn+K?DvE(O>$P%s;;W!%c|rnGSPq;|c+Vz!>ytXV zCI1bnpjmKSm>30FFmz|sRvI?q)D~z$uirrn-F|}6o31mC0?@!H5K)%Ju#P7g07Y4q z@YHLPpqlK`Dty(J(qV;=RpeHve*gY6 zpaU)FK@+;rhPIM5L8dF&&Sev)cyum8{OD8^i)nfjVG7lgibt0R51j?f|+tx)wGqLoDg zFiaPQST!D$yVc!O{#d+f}pA}W;>Qlv*F>Tn6#+j?I|R{dK3GeGXGj|abKtc zW8SNFZcALCt{FV(l;?d5{4q6Z5s|J^S9Y^jSD)= z7aBZS6BkE>s9)i4Tq9y&PKS9hhQ9U%cw*@LMmxAGHiEQU8{S!m2v2}Q5mneq zE`C{eXBWMKCS`gq1VQgi0oE9shWeuc4BgS0$glukb;gAe&HxI)p9I`-kFD|JhXnb9 zLZQ2n*{Yb!Z_@HlpW<9d4GK>fLI^D=%6Bws+mAY;^V^fgnz=ln$-_^|QbI?tef0PLWgx5>lpH)PP zA(U4X-4d|@m|0xJD{xlZLaikjtWjVU4TU6t+Z1X7X_-ZP(3MXR;r>~I z8Q@?6JONiYp#_}W9cGIZIv|BI^3WSlK}f)tPf3q)S+G*>Jz}r1;Oou77%n5|SimN9BL6`O0Z73rc%7YCLWQA)EmDFdzRp%y ziUzs`zx7!{2oymH%|jrRG%OT&lmal?l?e7CH%3>7@Kd%}1fv+^m5BuiO)cenn57KJ2vf~uP>N=3 zWF`%urNWh^W=iGdTvDVgW@3T{U#b#Lnr4&jm{DS7UrJXHs-rb^nqjYmVh14nzIGB!1?ne(ooK_NPh` zl7A)uW-Q>eR2i?q(n2Qa)_jwx=um@7M)h>bgL;j(DCn9@D6TA|Fawy2A~D2&D^oNOD5UPw||Nl`6gt{o_f+7N@PUv2b4F8LQ~bRm^~DVT<-n2za}iiXPN zry^-3a5RpGHG@9Bo^1(LqOBiQcq5?ohJ^8unJy^})hVBT$w*X$Ce&U-l4+P27A$PS zpmJFGjj4$mDx^lLq)sZO4q6VN92I}!DaCfImYh$Z*=WSdNstbypSg%Qk}S-|tjx|V%>vb< zmdUe@2|0~yn|v(GwrB^us-;HgpZ{e{%En3i2-^MdY|TDE&>n5gMy=FNE!B2M5rqjJ z2+yf@Ne%4BEG}qe!6+ga2ooL})dgCjWC@1G2~k{awJsButnI%}KvTR{)!r@M=B?gV z<<_PKH7-jaaKTeC2Q-AOgdWDjsi_$VLLjJGr=CgMj-?VXZsS(2ozXxj!6|bDVT()c)D&KWWnR&C?33Qm*_;_ z0`BWpZhMA}6n#bxw5sKr0S`26+}1!JfSQ_^69z>J8w_vb7VOY2U+gBx7))hHM6XsT zZ{RYm=jw>cvKr=I>)y7n`~SW#*Qlt6qzt3nm8>d&i{yguHjA&>B^)vzngDNByc&lU z@bVQfhxrPSVn!`UZKCl)?2E)`rT>l1gYu3;!Su$fd@)K|$9V1%9M6oF44=kLeCP(M{!Q~;_(`QsB zQqGf_xWbm1G9c3cS5Pq)_p&ela+lnPGmhrmiALMuGM1!m7T>2>1OR8q5;Ds%HAOHU zTS;YZ35Yc+mBeY9Br^YcV12Aa4)lWdUCAT|vlk&vG_Q&4cyj1&U#w(m(xyogv&J;9 zbD-Jrr4+-BF4mfq0W;i4Na6Fm{46jZG(soz{56nCDBr!kUVP@UT}t%nAty!sq#oC1 z7Y#FI?&wt!9|>HvVV0#>9^?d&w6?YqN>52y7O!+l^c+8JekefXF2H#z)d+}m3&|(9 z?sFga#8H;CL;vCe6Au_K2Sy5zfCc1nP|NgHX#y}b?@i-$QeW%8h-x~U>{crEME}rU z*z{PIlTPCW3^8&H)^Scd^+$83({`Rl@8(#e&|%K009>;W-}ThBvQ7!wz#fM94i_fshy&D+bDQ~50V=fVuck#pnT}I$Kf^Z zw9=)Tn=sS`?KTo9z|qIT8ZPwUW~i{m0EI)ET>||9B|K@eT>&L1cU_brqqN!%N{mM? z4I~7XbpMm$dZhr~Np~X*X=tn%4{V(-{C1>3f^O^g7d^KDp7--bPuKQe4RWFbH=20A zf*`O_uLuEt%Yq@G;bQ!BLZH&xNOyW~w3Ki&ZQ$xjj`w?;cYFVBk4VD)f!hJ@U*?KW zbjx>dw^Zna5>y?d0*paaXt?iIf&VoTCyv5q(tsu`xQVkDR-ZL%AVTlOcQ3TUm4+k; z`*wtYH;&t<;9{SZClVfH_;O3Qa{l3wr^k4vfz$!l8EF8CH_jEjK{2c@D~32JWPu^j z*+9a1i?d=9!&eW-*>*EhqvHj7mJ!0hc>@7JT*@QYL;k`5(Np zSojRk(Bpn5+|q2g_>jmjKzj9l3TfgY3Ma$`A}ANs1Tb`Y9SE&#Pdl~OtLoO4wD15q z$8Kf`dp@NKN9PTb2zuGgh%zrrq_Kh}P(n@U)f+Wk<8*o>Y!WW8Y#`M(RYDRpu3TA| z87-_kBA8h}lht%9`PQv26Sac8TY~h3VX?_VDDw9*&;p*x1{jcYr}Nf)HJZ1h?qP%+ z?*+WZsY|!z`JVaTDI|F1y@DpNyDs3CR_q{A%eySBn^06Zx(Hn^0DLW)*l-QojQ?=6 zm-WIXD1ykVv7Zdxq96T3pSXcfJj%Ct8g^PEC^^biZ?7aBU;9ycAr57PqPn#?FK*fl zqCAj`GcJVKy4!~1!OH5YvlQb(!5_UgQ%_gXmH;GCqGsQ#okGry*w7b!z^hvk=lch~ zbB6{|-$6yog6#31`l99uq(DlkRaxdZJ&YxH*j*=T*x26!U3F@ZkNKn=B+1C~&h7GBZ%c@lKlwxH9j zZE2$9=xBj~DCzEjT_VY2ve0u2WfNHmscz;A%UN^0tvT+Z5! zl^+Ezym0gzEW}ST& z+GwSnmfBmLk}))4MzFxCBWwL*8AWwt@!JOO3%)A(z^-R%FmhDf%XI3qqQ( z{XpK?y~h$p>D*Qa1#*mnb*`#9HdqST>53t7uLI_OO#g`z&=?|BLiT#rIxJX>30ojY z!ksVelh_?#GR6{K!$RW2zJ?~Pz=S#=Pqw-@lsRS_-hXF;dfdG2ijePU@_rZ?i3hrb8fuU!<0K%6>0K2N)LuBD zgX>KwNzgtY8N+yC1fA7|G(nh9n@&%T=T2Hzei6}Geeb52yZ zuihiWM^C)k{Po|T|Ni~|AAkWA-~b6&Km#5SfxWs^W7ZZ3nxyJc;1ZqrKyxn$Hpz9g z+FJz^6uS?}D{d`f$=a|*E7KV#0CnJMLsXK|IH;T`G7b-I^B5Zl$p#-ls)?P^ z-Fix9A3jR%khLSC<+PQMB}w8pt3rYsTb03+u*MQ*AS50Xk(npGPCEC483b1~M-5So zM-ZzDXK+Zz6%s^hr^`hh(oo1TRLu+}N?93UxJTLj@i>1lBN`O~1SY`Xf-ra{22hxl zzf{36s2tPt^maEf&JsevMBgx#c(hUx#Q$!kVgel4*-m%96P{TjpY?_TOGvU1kKLr3 zHnAwbpjB@bxsZ=S%A&gj9u%PoRp>$)+E9l+6rvH8D6zH(zR*157|Wm+{vznjSc;GU zU>JpT1ec?Ju4{6)>cFX_h!LPo(T*os;J%DO2={0*Bz$@)!N_>c#xbQ(A3B9j)@K|B z?X!Z&)0G;bH_4}^Qei9Ol_H^dGJUEJXN}2a5w)kYb3Q7JNmGRC5>Utb*llrXgx#T* zp)O8JvN1X&Ybj_JnS;$yY`zNWn2`BNjRr|jgX<|wuINY`qSKp&s}RI2uW^88U8;qyLEMN2}6;VYu~cmBc0X9@Rt40+xv(73S8KX-vlf zqZGfn(2{7YaPK}($dxez(FqusXL{ebV?smD` z-C2~NVUkr?SKDR;vTCA=@ndB%%zHzQ3gD=3o#=e&TVMO$7r*({?|%8aE4y76j1A&J zTpIZ;kJ1x!#*GFdlK0cR){3}l(?AL+oPzB**QG_QYjkUMLgSPaQoSvvE#*V95mdOs zm@$_{N<)h@ zgfFZSQOSvwjFdB8CP;Y5f&W3DN;dLXLJ5^+YZv{BSK1c011MIk3~iO>6!SP+?e%LQ za=-&S^T0BsWl4qs^T?&`$GVG+>3M$R0$c<~2-~_<=NKo5I^X#Xv``;EIh@rpPlv8~ zJ~I!vQ)LR51**YiZ8c$`gge{WO2I72U`H(0+v-cFZ`06Mi}l+vdRP$$K67!I>^bIo zav&b&utI3;0#6&FK-ul?vYG7)@Q#-+*n}>cQJiZ4clo3_esv3uUA_K(8{FX*_qfSj zZgZbI*n$o4Qd$s{*n&oaXbE%;hQYD;W;=+H1dRpikP58KY-Y{Ca2rVs#Q)Ap*yX~` znxxuln0Bx$Cj$7yqyMzn;A&)Z-6hO zmJH{pTI^@!xN3ajFCQ(3UPvpDi@F$e%6Z1q%Y~d6qfnCI0+(-W9vU^{E}odf8tJ%J zshF940*weHI+Js^u^EMP@VC$dK4dnU)UQQmU^w?&*!vuIAbSfmCFMitV8iDaE)1oZ zDR}9S1c2V!1%XWf3bULL}xci2)dsIC_wmZDf$AooZXD#1c*_tD` z)^#Fpsb^Nd9g&^1Y3h3l0c9Lo2qxMk|wqBG- zAqn?Gq9Fr6a?81lHkz(J{jB0MrH@}bj=vuOB_R;#>J6-@916+yWY z;|dg^jsk=h(u)63NC^4>6fz?t&j|-K?i7HrmJj`C&=5*N(xT)cM$VoXcDr7);+V(su6P{XQ1aA*Mr zPmqZs@BaZsjtxmqPC)LGUQM?+kK~92^i;1SM$ZV3YuA>mv}!8#3?w+R$Mt3=2Hy{< zAVW))4z@(H3tJ7jsb;cd=Q7 zMs>m{R%|8SYN#o2LDjNQiA-w@F;L%7Vk*9BiN1)*<2~TT5GSCN*$pgG6_f5lIR-M?LA^n$mp>ms`BQ<>mO^uqSO#Ab}}F5 z1^>FS&2-@@35w+8sxK$tBnit2{p=-wl7ZyXAr-FexX{n!t|SHRGwjZUQW6qbg8$L% zk{kQZC)2_v7qK1R2nl`j!$wW=Hu6y_Pbi5}^9s@Mkn%NW^VUYqBbpK_8*%5NQU;te zC9Lu}(Ggj;QcIWt4ziLs%8#h75-?X0^IDNJ+si27Qb8A#K^xRTAC!R1&o(uUPxQs8 z7_k`p;20F^RA~iA?XqGlbpIaCORwxRW3xLA zp%Dsl8%J+1clEtEin?fYA;D5Px}-}nvo6(Q+Tc@St~4l9hIVAG>Sj<884@TbF&i-n z3g4}4K*}IPlt@wNf}&LNR*Xu!X=t>SGjGyB|1MYitQ7q!XVyapr7Mm^O}rizJOIs1 z!En%&rpahb#x(&zZA^ZJ3WmoTZoy`A zbQM07B~rjS(Ih(&YapZ2YB6mERh4VI)@#2OY@yF!*GAJaHXe0VDk#G($_AsT?k)c1 zFiQ?5S7UlCqF1wy%j9-gXXSg+5BxuRW(*G3%P2L#9PoO2)Idt18GR5a4~9>F zb7EXX2v%XAwn$wuuxcR_0RGNZK7+C{XBDC+`$8ho6oipX7ylZ%Ra{L1V2f&-#FSux z3TQJ&(h$}p7Z$ZdikX7TIiXTwEvWu48< zl8dZL1MUPMFaj7?;D8ylqlT4B-%LZn9u}z3(yDbtowxE&c-$H+QJ18!D;Rz z2Qxq{GGGj{Vi+9FE$&uD=5)TUOLULj0`Z(z7l4n^HG*Uv81$hMUn7xPs5;|EgMgR;B zZJz?q2+A0}?BqpX!8VRL_>gyRrNR&%%|-iwh4B?!G{FVRI0X~|7G`9-A) z7Ww!A%s43Qn3o&I(XRN^P)&esF78@GoXcWvNV0oT617I6GRn9E60&r0^`}^)p08L5 zxS8Ng1Q^^|1I}1&)2-AJIhb`JOC#;FS^*4tt^bpTp$>qVCA|$iB=ViBqjIi77EJA) zuQ<<2cGu{wH^f3L*Z>%^=~fT8P>D@xc`sGIWIx4Zf)mxFG~mumIZ-A#k)C2(JUK3E z%vG|0jB|Qp?2~}W_z7h2Ewb8}Ge8RD=2agB1Gtj+p6ym>^`Zkz265U2V8c4Bnk7=g zPac2<6d@kJIjn0SWNz5df+MVrj*fLR8m!rf6I-zto3R^P+B&8(C8uEHc^Cq#el4bv z3HgXFgfWAzvNNKx3E4ft0~l-=H2|N@Kc1+ZYpv1dhf!e4C`XpqvBP1%^8SZ$Oa07mT~+@BjzD zdn$b3XofV7rJ}(dJn^z{V0$$MOdG^=d$zwY3~#kal)JwT!4E6e`_$sZgANbSI}JX3 z_>RW=7zF7kT+*;^9IxOCct9)yDv!E*zu~(VHZvlW5MqL)9bL=8LpzNrnS@oGZjXG( zi!%9q`Vh~$D;*e2kU@eam4dC)%QG;v{igp_Hs&sL8?#rVem8vhvRX~|J4nLDl&Ac_ zv71-6G81C9%{E2^g?q|@5DZwPYK_pJP5Y%DC(39u@H{i+84$a%PaV}$ zUDX}*d)nj)*kD{MdPth6m)>9wY#rC@fQMCN4ARPs!SA7OJ=bxa%lK^*N+Fca#Rv@H z*pdAWu;ZXnE(NA;grs0BO~@a4Wn zCUF9!01-gJ+#5j(euO$SdB%o)*frV21cBZ?!4TwI-8G@!pN||39@&4G24}sAvY-(H zzT?pQW+(yN@u0GL&=czY*~166ZM*+fVBI|u9^5sdq{k!;EWzB{y$*EwBH+*2(>(!{ zAmUeE5T1Z&{|T>LK-hc!3BZ*GVO|RFy#Q)p3}S2AH-6|#2jEwJ4t_$`mvv}EA|Uy_ z=MjSoxPaoPeGP+I;Wy!jeW2r|a_kd;$vJ}GCWtyLzTW#FiBZU$sJ`cgJKXsmLyZLHK;_Tf03ANqntteI0P_!} z-1QoNrk(BE{q6tJD|N-%^Y;JphadQ7-VDmtD%QRIa6kGB-vwG7{zT|NOKO>on5 z)x%%>$DjQ93)%D?{L>#1vr+-}Lj6f?V0i@`4Q{P+oGI+T{qetvD1KQ0;tez~0R}91 zuwZ~f0t_2EG>EXk!iNkaQoN|ZB1VcDH+J0EaLlqg6G58%=rLi*lnGWkJctsci(;e{ zTy%M}08EJ{7sh<~Gbf^DQg9mWc`_(cj!G|@X+|>VQJ^ZP?zHMK1+Y>!F*c<-HSAKb zVg;0~=%D4;wP&q<%~)0JRhDhp+VvV&u3EZo^I{}*Oi10kgbN!!j5x94#f%#}ehfLX z&WD6AL6*oAzU^t0v^m zJgS%s-M<}zrZl>^WD>o4E7$N)U?Aekt6RU0U2_eZZ?k*<4nDm2@#M>!KaW2B zP*>mBN9g1|Q_SH(BMYlxTylDn{oZ-EsRo~7k`yCYfozF{M}WUQupbEymS>4E3Fd}J zD`wOngAaWO)5~lMj!0sOlT~QMgeI=YVv8=m2xE*g&N$f|#*CpNjep@H;aX3DSd1=j zbajy>xww#{cx)WgpN=LyQ4AqG(KrGwsXUORXLS^Vn~qQllBHo_;9?9gy$G`mEm=(I zWSee+CxtOmzDfUQop#=dXP$cQiPQucc8*yn1hqqgYC#eo6q0*#wm6i?DTn4BT+Q z5>HHV#TH*oA|$90$ZH3>z_KsK*`+a3n>@@n;(-S{d7H>CzYKHCGS7@163ajmnG0-W z!R}!bWWoQ&aMd-^%*w;&@J1Ezy2xA4x<*`CDgY{I#LaECpv#psZ_RbrUVjZXMzG}a z+DXu1)WO*=fwByjDrRBKGhE@6LE32(S(y@6OErPre*b-Uo)fV041yDC5HezjFV(l* zOTVP@REPr(_~T>sjklQ3yx|t*mS^QOVS|(1IpvO1IE)Xa|4pA_4|MQ3UP9AvJzW)w<@V0Gik|M2?{n8(_M71_FP`&+3G_8dGz<;&0Rs+-qjg9<8A6^fB zYvEfN`n$3?UzFmhNaELB9jt;JQi0?GK8}c0At##;y^qWI;)ma*$QXhZ1T#$2rg8=U z!J_{Zf9TO_VDX2={DF8<;llqE=pOQ1VHtC(-~|_`i7T}4F#5Sd!-TNBqgbF63Ityt z^!F%M^sg4B=-z|)00iwlqy_A`-YC>2ydVm3h(g>BC^AP8Pz)o34tYuqU7`d@5W<0q zBLpSV$B{nds}>g0VIL@Xkt}FpVGAoonj}F+N(5qrZsLL^*65%NGzUwH+X@oHn6Ff9 zE{?DOnNcjDh%{0n7s~(z8p((RglR$;B1%kbcrX=`vEq=F00kFYQ9!oj0A-0WqV7V{ z4EPChVT!OJcr?(O#5qN7lw{8_z|@!}nc;-bFoX(oA&h*D@`^CjR3MF{3no7364w6+ z1`{~b0YfazOs68EGoJ}fnwc?^YZC?)2cQIC(1Mz!(b$D7<4MMS>665gmteMT#r*>pu4yPKj6oQ%$buBk`vl(NR<+(0W^e5%ggO9s zwiJ0nR?&7S;2ME?b=3=0RVal%09OgTEr4&0JKDhd;Jm9SMjg;A1!`IVwd@UA>xS|K zxPsDtSmj(?tH9jg(y<{UI4>TKaS8|%xUq9Ua25hf;yE7Wq5^G{&Pe}7+UL@@x571Q zZ9zPT*Vu;;X#gURH4vE6;rj63z zUt@3+o3fZUy2rheH|WCT#!wSaG9Wd5b9_1v;lX}5J`8EE1j-NPa8`;DKZejikH~JD zx+gMTXuEqQ>@HK=a8cGIRgqz1ic#6^q^NdcVLpmEbg4qnl=XKbR) z31oRLKu(b@MVzcF8K^@j?&Y}RLNrYz6TwH3Z=au?KdGsqS4@ND8j!@3sjc5XlC{O*!HUY?S}>(hn&EHA+eh7$ll>IdM3_ zWnnaKm+z@Oq74R!S<*~kU?q}|dog_dWWS?3+Pe>RV}X%*$Zh`cEPn;VTaEqfYu`ln zMFdEcm_gDr3?t%YgBgw15V>oZ0Ffgx8`vNSP6{P3yj}(?z<{48C?ZG%+n_O0@nR&< z0$D&&QFnLrhZNX`5sQ>}p8<4gu?f(C3wZD+DIf#~(rpcaKhVb^Ef7U&7Z;K=1|66K z#%6d7u_epXf%*Yk_tpykF$Xe0X8vYEFTn-x2Mb(c;M`}h$ zdH{HYN`qAzl7B-nHCC8WRCf}s&3|g21 z0%!(YgnsWe3U`EpVDx18G!gChbG4X;)b)cK$6+vchp&iRgo6v`f;GixhWxh>#FYj6 zM+%Q91#MV z+r%;UwRZJYOJ$*etJH@ML3&sefi<{`1K|@}g?tNvkPHDBJVgNVrHr)zaL))o=YmSg zHW4`h4C`1VBIgp)5pd0*hzel=S;I!vqk{_Z6kugkXVR1dzy)U6Iv8gZo{&&XXAE-* zl}^|bVknAym~!_u6anOxnqW#(WfY*{33w9#B!FgPd4)|>ncG7Pgc2v?hnBBUiO(o( z>o=0Iwh&)La|u}s0ZC&jq=_E3l*0c3nrF!n#P&t(6PYX5Byht#VzqOdKuz%khy^hb zq!&QE7-L7&5ET-LLeLA#z+rI1nV#1R$yl1u082>slQox}bhA-JMF3BcfeQf!d-Io> z41tD z2!z>{4lWrFZ9~WU2p^IUbWvacQJkrjR~~lcm+2;7A{J8GR-pn0i-|SGpHI z>Jsh4m^bR0K=FK7+GKE*Qv2cqk`Q)8IieEbq6-+2LHc!j*>jj<0gFnLpE;$fF{lke zo6!Jw5CWS6;G#ttrw_$%9riklI)$lVrL#GcBr2mPn4HeJpMhGXoe2y~c8x4)kz{&2 ziW)jk;iS|yh>j`%=P8}jQ=yj#7%;{VR3Hkfa0vtoZ-s!YaDZuia|*Oa5iP(SoF-#* zd70RhKWKqz4uApQ3a)7puHqV?u!m@;+A|y)5|Ch{!y2c~S6|y&O_l<$@J2)4siFC* zulsr!CxfERV{Q?eqQw6Pke=6L;WVu=$yud}6wL9T%+`_;$y@PR2Nxu!xFnn(4b3i?zoI~n$9iEyQ8Cv%B3kaw$j3Af<6p9{L7E4tDkk0({L zkyoQ)aUcySu@wI)uRpseBOnZ2`m@B!ueXc4xtnN6s{j#L3fALXCNV*?_?M?b391UQ zLm9MFL2Q=;hL1a@@Mcg^i?vS!vMW2BBMPUeSvF7MWILL;=OPKU6#$hbRV=RxsPyz+om3E0!qX@yS>!bvLku$NekOQ>3 zYsYtt#{O39up0ZDR#J+!2jyPXai=55?Vy_up#Ucq!3a|>yMS2 z6HaUqR@Xh-JFoc(3XaTPsud*j3k%O63zEPFO0Z)AEEXo3vh1sr*c-BZg9N$t$l5f& z*ILE-yGo}p%ArNdJdDPHS;tAW3Zgv9WYS0)U`BiQU@~BB7sjU)7NII)_4B)`7gt3Q0Y1Mo#ggTg+HqR0Dfqm?N~fx~&L zSmOUTB{l4@T@fb{smD6ZLUuJegaR56B+LuLV>=A1 z?BURkO>h(~xE*`ZbjQ6;$;2N0#K{}dt^61yP1q;>zC}9}&2U5`Nwee1-tFzJz?bjjB-0xVBxw_H3WK9c5-S1R&;m zeSm+8+{#_25=`Q)DgchzPpW=lTuJC z$B4lP0%{GjpsdA=!y2QFDjpmRT;l!B)cAbpPM&H7PV2QkF>rI5Y5lmqC>2LuT3^Yf z1Le19W7Rj&yjT^X!|vvyotHd~$(j6Z2ayW2U_*nh0E*`0gW&=VR^Ft^ws#%N#0^*V z%rUW=vwT+)vQ57H3R5FLVm!Mdl7KlSb|9arL|n&+Iq)#!FAuDUi1D z-oten=ynmdG+!U!zQ!W0$FrPkOl$7${>^rq_3-@cg9qf&mR?c#NIdQ)%<&Xn zkz5YjMW4ckoKqiu@&%v73{kKw&)sS<>E;{rm+V?;4w|B6AzGozpU*hJ=kvoie*~7k z6O8VC&fhsJutELDQt$oW4^2dqVV`_&_&)Y@44gKi2^$Xf6~4#`% zcO$)akUZVC0HJ_@03ppJ4Mdnw;Q)pUl^7G$a85HW4HqWVfGgF5iya4AGDgE9!Z*?8 zj2uWxn2V7XG)_QCa#=-%6L8VW(2zv0jSDq}jESUKpqK-46!Vn8<5Dxt-V{aX3FyKU z!&Y%zn$-ocqzWYs;{i46reY(Y9_^Yi&9gBA7Os6dz~%o{loQ)3+-j+SM?=k&pd7(- zf!IdJ{wiccQS876uVCd=c;y)$ok%Z2GR&}#U$+Wa=`w57n5L|9VX?w`5pG?!of9fL z7WN}&yu&~V6n*=xvAelbGfa#NrrcbQ7bi5bOp(}(bh9=!gR-&l**Q?6WmuJzQUO_7 z&u#&=1Pl-zF_3pqI_1iu$qh+wg{y;3U923#R9T9>`h_P%Sp%?;^p+CJkSB(^?ifg7 z`pJi)^h=?=VwPKIl>Is=ZaDrnoMv{ya4Hx=jnZt-|W|>xCI?DeTV}yW8yS29SO`wTuM???`Og_Mj;BFuxkcbHk1oa#(PsWU3iO!cg z1WBZ~qS-{y0kr##fa%6mZJ9U`qG1?22a>X;n;=t&2j$G8MNHQ?#d9f0m+~>D#)?rC zBPD)w;fjlVm=H-@J(_?EP!n1O7)mdK5XkQ^3f4MF?{o85L!G!Ae^vvMh$ zs7vTe`k-Y@B`5{Jva`=ZQ|ffDQOfl;1O zB!vea=pYSXo)NAgaZiTd3&I z6=smhWWcdvE2_>R2`Z+PJOy5c;D3AOmO~h30gxFu)SK(!+8V8?l_wzvujY_ja=K6j z22NGhn-M}-gDG_cJ8ZGXCcA92&qh0Kwby35ZMWa%H9mh^^~$NQ?=JGlySeB&BDq$9 zrWcdrrTFg14C2lO4L!!nT!v%yHcWp*<N&??f@d5L7J!l4}U($#Q<-{vvCE$0+9FvR;r-D^3|(!t8)~xa^Ww4VeT})8c5_M zrMe?Aqzc7&8oA1JuIvQrBL>7@AbiFuSdGLk7EwS3`oc8i4QT>zN(%u5CRQ7jaw6>1ib#nD3EO@ zgvTnGtAYU_YjnaNJTNdSi~mrX&^Eh;YFW zz39V~G~hH+%z+DBs6(*6l8XoiK!jXV$>cPMJ%{}1IZ5K!@PN?^M1TREuz&{qFr|xU zl){{2_~r~5QzcsT;hbqO#4&?7fD?{}4d|qVlk&+aF{(-u$|NW$C{fJ*m82I)NkbOi zP|ctXY8b#E#5qCY973)F4-d7_I<=>nWAM`qD)pQ;>jsK{F7i>dP~=S!iVK2m?Qm!U zpHS)4ifFvTpmOKwLfvq*8KAhR z83f_9GSX?KPAuyPRF}I{RP_(%>;qLxi6mJZ^c2yU9!G6MS!L3M02nhPsAf07zGl@) zAA6KA7CAC55+I|mLr5d(D2hAgagU{Gl0!dRg##|k5&XsAdWM64dFqN7lMdhBw5Kx zZlFSxa7-t)g1?xOij$m#3otx@4X=RTmjCCK0WZdnP}5UG`B(#Bv?)wrP@k9`dmWXC z*%-87!($ULhXne$7J>j_{+=l2Q;dsFr_jXyLRAYZU%40P?c-z;DrQhfRj{=1^C_S= zf_3Woi&bF7bQSIAoH@uN+%q+;!W`@4G>3ebfkj@a;$cH0T1#BkGbD7KkQ$r{zBBmwA};DMl=re_Ogjcf&2d!kDd6d0miX{&)k zNDisRng^hOH!#)I5mi z$XvdNHe6DjpoTS!wh$(yj2f;ek9rh#3@0^uBt}^Dc^i%d3Fqm|$?gyw?z^EM?z<=t z_=CO0oJJae0v6BKw?GCIzj(&qE%CtIUDp`jcwQNy3O;aZ3M_y5U!^7kf-b-W3{Snn#Y@s!&K0pn zSu4(~3JFzcea(b$1=!1A^a*)D3zR^6#ktCqH_Knk=kzk^@flHh}$ zG48KDye0tp=kuQbn~%SF`@L}44>}1x%HtIA%ON!~BJPtE@#;LpixljGy(h>4dGfw8 zdBFM;3*F1V2aK2M69@~izio;pI&na_5<&VqK*dXq1-yvIs|nUazQG_t1H_0TLYV&y zVhkoIgRR3o7@z_wNIL#7zUFfk8vK!(Q6m_n5z*s8I>~`2_&@=SLK4_L8u&l<1Htjr zKI)+zI1{`vB*QW^!!ty~G*m7Q95M9XoZwZRULcto>V#8;}sSh~a)xkL=Hvo!?8P!z>c zB*juRMYGun)JQ}%tRKANIs==CH0lVlII+FsLo)2RCDgm`TSc{z7rm34UThH>7=x5U zB4IqmWE{jdQ^sa=#%F}aXp}}W1PNAhMw>~*E1(5PKm@>vJJkau9=oA3tONgg*|9&2 zLRhN9yko|(!3>)-gwIl>0i4EqbdeSi3}m#&edNb}^v8b$NDdJKPx!KEoC8bHMgDjK z;@ZZ9e2Z+-M@>`$PslRCBY|b&yLhBWR~pEI%)1m|t1-%v0D^^=0tQx~wulVKl_WXW zQAw7B$(WSMnWV{@B*PR)zL&Jgo#aUzvjChNfz#{Bn#4(+9Ll3a%A{1vrDV#cbjqiM z%BYmesiexPw92c*%BntC^vbUU%diy7u_Vi~G|RI@%d}L>wPee-^bpP4leiRu z%=5XY%m6Kv6&G_x8n8yUypah&f?C|WJxRw`dOp3}F~IaRzr3Xua7h2ggv`j4Ok9#A zrnAh7%$~(m$_encTo6pt63Ju~gkylY$&8T>kcC%BKO9q^aFoc@Doh(20a`dg)0`!h z5H_Q<&E4e9-aL^UNGSkgt-dS(DUga>z|74&&N@Im7HScp1QF=W5m7m;ecZ^t+Zf%1 z8$SsrTnd)D%rV%|8{ZTW=~NNCPV!{W_H<85%p0h9f;xjQrNj(FaH?BWkq5H5 z>)a4?W1X^59q??%i?q4e9L&_yJ5Th_^<q4Hb{dT^&0HzQ38VMh14vucYDrNu*_mePE9HQECA zpkl~S$`P~Ld=VfmLDbw;R`W9%3p^n>sZnUqd%Bc7tRMe*tC(GNO%EwYa>W*G?HNN; z(h}JTnS<0(0oFspR#G_E4H;1rkqRyCi0fk4rhC+~*`?zESZoc1f#nZ@iPaY=jC}2m zb`98GwWX@yA%)zl&@{r-RM>edmQw}UkOk3wg~U<)5D*}mIyzAhQ6Dm`SLQqzko?sZ znL;C&!)O7&TPe{V#UxcJy*L}C5PZz?Gy)zd!J_4YTJ2a8>DOv`y{8?RH$d9g8(Kd^ zf*cJ*zG*~pHOE_dy-$MFsiB^yMFJzJpH)x-vceJRkES8bGx&tt%F*ChCk3whUHTfdD#DId7r6O+X%QZi!DJjF@kUH2$fq} zt@Tim_1w?JN|Gg&mg0~?2s&#}g%c3QmPJNfnJ5i-f;T;p0BBq)nb`~+twNmCpH(i> z>|8~3pqp6Q5%CVa?FhGkjXV6^z~kH!8P`OlMV%bh(g+>(N{CGi#M$&z6A@jFTdwxv zIS5n4yM@<|`qvEt-%Ko2!dr|~@VN5X3iL%03t3#FtX(s)n+j6j<>g<><==(S+*QO7 zRRrAvHek2x-pfcU5P<_`0FYS#LSAt}hM*hB(||WUq3$%e>yh0KDGZ8LigNVGDE!Xj z_}~uwS*dWvveBJd<6xw@oOuYZk+h81K4g`F)7{;6leo4{0V2$O@g}vZI zeBK-y;>D<72|i+|XvH`5U#;+Av5>qOO@UkpQjXKu8@|Dqm_+jkR$!vEk>g=qaWF4l z3d|tXUaDFr?qC=$A|TedGv*&)mEYH(85Uh)`i%)YK0Fx1XI7f-lgNI)`#9ElVNgq^Nc zg3O>S?g=r@V}u}IxXvIUxaa?mW9U}^Xx23@cm8L^9^nqagHu4~;y{GY1iP(X21rY0 za(yR{5H1&B1I(W2-_U@39;3D{6dz~=?ghLw3Wu8{52 z4vM;xgqP-&zD_cDZtG_|IK}qonm&#yndP)=1rYw^?AGp{3}w^{I8t^bp(}%;$N{E8 zX-QBWS|}A=>kBTSri>Nk#o*RvfCW-m6Q4Bg5Invqh?Go2C^m< z(1?=4DG61ZG+`*QmTKV`^zZb6aHhjL02W@-?lSwfx6)Llle8;^l9LSq@Et+$0Vv}1 z>hO^|CS35>S!EcJHgEqI6D7L(D5^rvOFHk`QiR_q-pxR>O(3XXcBzxF_IeR#!RH z^L^tZzlk-st!H|MIc3l_Y9iLMXfC0ugD{jC|0tS^>$(Bq?}e-~8DK%9((-=u^j>ci z)0{k~EzoN8)Cn9=fb$Qt^(8yDEAty#zC@N1ar7>98A}&5j#vm+3BnQvTIe&*?!i2Q zB(6~fI+}%7mGl2(_wn5!G$hY1sz9n**aR2fr(+o_O~Hk9KW9F-9DCAmXlT;y#`k>Z zZadWqu@#Y_DH=NP_G*eCj*GIu$*W_{8U=6x5^|qWwmaU~zZ{y+n5NSH{zN@SyYRCB z87i|$J{&hxkH{iDrg;ciAW+3ife&(%pq&^X!-z%BPHoxnctPjb9l^vnK}!gnxiolC z^X0eYoqC?9mRFW6E{1sK;v#{0wX&2i)*x++~Q(};+tCBb%r!u4q%I4*xsibu={PXPugWZC7n zTmokXO&@QyU`P!KP1j5y7)ilOb{KWg3n}*9C(HnV}LM!ZlrWX+8O1UNBOaP%5|t2itK+rk4wJs5OHG zh6t_oidz%BVvKwp0eKN6L}s*#E-@LV=0O_30$f}RylDZM0~|)@qwZnU*-8gxT3cU# zU6`maN{)(%Oh(2j=AMQM`YMA#0RWP$6^0z9u-j)r6blj;@#L>UV++_1wB6El!CmtX*rYj4y@E`SE#h>=g= z4rh$WBa`|b4*;f`VTm4tCYq3l5|vtSoe`E4DdooXZ5kA&!>JaM%=0}XNN)<1g7Z<+UF$JX zBS=^+eocdFj3yy*h%r$Q2th(f^!;JtGd4lU=1nZRc+(sjwkC8)BTCuaj@5#3c$pn4 zWOY*NHAxheEv)Tz+LK;cYGsOaoq`aeA_QM8f&)9|-%R@ljkp-KO*;QiSI)r&7{kN+ z)^Yvup5H;?>A9qz<0|i$Cnix|7{>^YXH3mj3iF2W!z-eTET(~-?pvN>NHojJM+jy} zIjM>^)$bp(Al9sPw8{6w^ETzF{!yn_!1$G`1faeI+>8eo8G+|+0s|_P;aN9fLK&EV zm#)QTfJk~&%U-k-oNQ@U;<8b^Vs|r?DNTa`TOkWu=)xDmForUmAq{J2!=wysZM4u7 zLR2BK9|AFmLbQe|KyZ-}^)GoFyBu6J!M+xxAUuIc0Toqelx=a%X;9-}$L?2@vwiUy zwnNGR6W5GmoUwAvi4>z!){{R3B1mK_ni>m+w9;AZX+yC@iwOUe#gO!FZR9!4_4eqt z9EA-bTbmyOv1B~XVd@y8fE`bMR>Go8XA@UTVT=IT3%nuHd_nUYQ;x&P0i0-eT*O`@ z8#fx5*$PAhqTk+*q9XzpFg?Xc%%)@kO0^{NmD@uK3E@Ji8C8v!MIl8le3wh52unai z)7 zKn99xR0~`uYk5q=t&~R8qHYa&sD#`DI`~R`Iu4>nVICgUQ>cRd=m}#0MiS%y+L8F(^DR})#V;qyO&=iEsD5D`_wvfgY7I#WsVypq z2&$czD4~s~0Ubt-^A|I?Ag(+)j}(lVx@5K~0!J-HGlip7pCL94)CB8SJ!u9dJR!Te zWoQ!}IepLA^2e98{;^~IgS`XjCfmhUUomjs0ERWOypv$wWG~> z11UgbDf8e8eh*zYAr^7L1LeWyPH|qd7~`5jNqR+aKO!WQN$a z!mjm^c~e+jq99mnf2=|PBbz~mu3{O_F>;Zk0ook>q!>(U#2A3wWy$vSb9Lk1FIy2e z(`{C1Oper(Px(>)HnES~vlF3-jH0Z@d2as|eHp1s4Gqh7;5x^!6D8P?12FS;tG#Fj zSv~QG?Y8R}Qgtx>IBEn*Seh2f)(tKkoliBl*~x`Q+-cw2flDQ`yFh+%LI#WGNSYHG z+nYeh#HWcmpq4c%veKo;Ce2Ne_`|If?I@Jz-(f$R5YG@_sd4d)=OrZ1#(^Xu>+M=o z3J{mi4k(2QFgl8cF2k$7tJK^mLXUE%n6(q}q+9IqkApnqA|E-)PmILgjJUl`xrDSt zQLzd+`yfCC(40nL^PAt?60VfD(r98NoCi9}Q!Xn)1n$J1hW#qy9Y&z1w$d~Z&IxodTW)&SkJ095loxpK#wLVd7=|%mK?bf?ZR&d_t zf;jMg4N7@-AAFYykFe2P)9{Cf63kV>df5vr{P$-LQ-K(;WC3fiUCAL}0xIAFGGGHb zpi^+0s@YalfB;?C#RdHsy#@aj*-2Ka2_Gr603|)2_a($={gTmz7~c_`&nVmA<_;#Kfp zm7!r?q)`|FB!=X|QQ~-A1VUa} zNCgWF^U>#W~c*P1r5EO)gr+E}A5V zg@g>~4gHN!NIm~l!wuXlG2>j)WnJ3kUE<|aIHOSpph$)U5ZuB*AVV1p*YXitWvLu6 ziVpY*KzVItMwDaG9pcfEpxMt04o1*QM^p=6#U z3)U1^DcosBMNuNAQ}`V#Z=~&0-$bVpNJ6S?*uv4M1Q$ zXE}Kbk%9jbm9*tPYEc-$WnO}4h>GZllBme-W&b$^74R4_SdjZgqEnKQZ*tSYeVIi9 z7;lavg8q$1N+Eo>-rgaSf{N#b>P9U&(Q^c$*hHN%{YGYaS*rPCW?l_ux~6HG;}zH* z!hDO9YDUjgPgLmU_dTAAMx*6OWQ8=Rg)Zpt2&w5DnsTm*CgtQbQ5#cGr~yjoR4rC@ z<|Cv4+~2H=oEnr|?qmtV0%={u6HJz&{wU9>W`+=I8{Xt2t|x0ognxFMFwlwfVIprT{31xRg<$4vV_fKrN(=Vq}X_oT!Z^X#7EAF1F%5I-G?$de+kd&>?sSiejWzFPJ)}E6J;b|aeUSJP#iDX^rlAxN7zCLPNIELh8&NIAZLIl8k z!bV$dXQLJiQ?jR&?r1j^W^)eCj|{_o>PRu@q)&k4)(kAU2}R|B!X$Pi#6FJw#D*q3 zh;jN1aI($2nd26{pc4+I%V4CeD8i{Z>XW9~x^^n{wQr1}88WZH#wjHbw$X&R=mqvDit1>bx}r{_M$$SC?yD3_+3+eZ<|z;$gJ60qMr4A-T!OaL=7gT3yOu4c?3yH0 zfe~Cm_`q2(j%V2Q>-*G!8T^v90&nmN@9+{YIzHnjHHSbD5l_Wp+Kj*hEWiYefLXYn zkc~kGK=0Dff*xUnH{wq-lmZQ~hemJ#Fqp6JlH=2i?*!yPpq*+Ytpafk6}@UL1P&FcizGmUf?g~n5J(l>Y#mfll6wDB90ATB zgo#;50tsYq2lRn344G^-?4NBCrYa%IZ7;-vO*7B}32OvtXlBr{SM<7oCg5yi)*cUJ zuk@bB1h#-~yg^JrFA@X_)Tpe|RFPlAZxtcQzYcNsN>?K?Dj4YR>_Ov+fI@IZuLX>i zFysOuGO=uBZ~0;_+K@s_L=lh`i_VR2fq*Y7jV$d9?P$E347~CAxr~kg0}M-VdVvyn zC87AdvF)? z?+E{H%=T6zMY1GUFhCh!rABFx=5H4pK_eFmr^@HtLJ#_qa_)&3kM93d0#gws`&4JZ zL>Eu5$Z#at60r}L49Je&$c%!N9hxEBaULIoFZofkb#W`MZ9}kfD;H{jc~c`OvJHof z=Q`+x}@-8ptX(lVeQU_E~=4^sEE0WiZj3j{9hUV^vCaa+WMV%IJLM!w_ zGjv_ns&o2fLI9@A;mAbz9w{hFE|@P0@vorW9`ymB?s}4@+FYQ7tiK`870@0ll=LvL z0vP`;4%Y%ReXY~DwCK^oC&H-B$l>Y+u`Zwr8z9+GpV3f%tTz$R(;@W55;e)lSnsj4 z2xmtM1lrdzmwE~{tyroF7sW!v+gTn(BfJ{+e9KF}!tLe4+dBUn52S>IjDn)@2i}zO zDzvm(hhbVXiRg6?B_;9XkPJ`|H9Fx3P|Y+=<8NF@f%&rZOZPELum~{FwdiR=7Nm6+ zGlcEwHOxXDEzoqGS~O(8HA9R73gII`U!lxG$SGX(mDu&D)Lu#Jf}q(X3AistGla<^ znn%C&3b&-v4WBzTwaB!B$dch@e>7Qf!J#x;S_t(`2TD$Z)M{_9B9!k6dZNEt6YT}J zpduW!PSuaJG(|L@RZ*$I!tOGh^==DVXHw>UWOq};LdL4LRckcQtle{$f^F*pOq)y= z*duDKqT%t{V&k>M5&-q)w=Jtqf&}+alhg?n+kLz6aohh%czy1Jx-^(EfwWKq6}$&E zssaXbb(Q%Xk^#1Z_jej_!GZMU04iy<{mu50L_^bfjobK*o2Vm?3LZK|3A`LJ)xq?g zH6rjp767ebG)5txf`ODNru2bM^Nl5}LZnPHWw^^Q2>~QbIr>qsJ+_wyL|Z8gv2;lJ zZzuwk>nZXEqOI(&PAXC$BvB5)(VWxyuf>L)zqzyRZy?n9oSQ)^=LNF8!esYW2QV3# zvGf=e@f>806ySlAWQgFXO}?2svbM znF~A&o%LT6Y!t=Uj8PliZgfe5v>V;sIZ{dmUqnK1BS$wwDT=fpf(QmC zum8gHd49O}o^!rO*%A$W{9TzF$PwKEU=NGQrUCt{zbbnYwJlj8abbfV6^|d`wj-f<8zCo;;k_w)ES(%6t zB&cvzQThwCImtjbLeMLvUftH8#RbZL8p8YU;2yu2tgh|PUhOY&d-uDhk9hwn_e)C? z@UMKDerV)$^ExjEf4^x_nTM-4hgU5wE?kryesFW=3gFfKkx2-|OjT!4VrtOkceU7? z7_qP($4z1}6M@lqw14ORN+TYa@Obza(>&MG(m&T~DzE0wW!US+Kd;-PXjz)l8TS5g zUf3C9-(Kr|xfZ3Z$};&7zwyxYo2H$|t(w%9CdJy^cb}sA^+s+S{t+#eS;zc+ryafB z*!#9I+y-6?GJd{G^LJnP@4NG7`;i)UZKqaW$VCns2jGZzTA$u_cOTY9Z{CYOSkGFH z7&*MAv5^ryn-`t&NyF&3#yirNTd?bonXlV&Kga-Ak=~^|(}gmwB?SaC40cC-b-MiO zdEL(3oh9f6PnV>ilY081Vyb=c;hUzB9q(Thad{Ie$m-{0@96Pn|KuO5A+M2sYr9D( z-;)3+R?S|Tut}gQOQsgpC%9`RGGKIbm9ji^QrKjCmU?6^x8oo*s+0u*C??$+jT{@3N%g7HY>W?=ko>nanUHN!02)Ub^Cai>xthxe|%h=y$+Fc|?cUcjgk!#+x31wLrx5be{$7+8o99F$L6q&EC9E zFm(?&)`G49Ejup;f$Z2DUPTVdpNBM8HVB(WjX}fxfNkqhKaN-5Jphi@1L?EZD&h2; z1tcOoro(S5p*#TVk>uG<-G5FNx>RgPlZv^_9D5y6j`|(Xz{;gH*%QC&iAJ!@+M<5m04ecF}|EM z5w9khWFa7-wE-CiEU@*5DM$vp4=b>Lr~$eSds#xHvR7ncpW@5334~+fDKIrM4$gSr zh{kynM9sN-t%dJB_#YHok`a)_gPVe6o+boqh}vq50j)T*z|;m~#niq7Ec;}$G6ezf zk2g0EyqPiaikH?UcQ--yRkFZvPHh8L6K@yoUem}Z52ST09E|iqa@h|c)Y*k_O45*g z#Q~UbD%Man#wy`;8MOoti0WzKLcxqR)aL2odqsfBn`dRUSC{>?2hGP*zie@kv#4Pz zm=Pm9L6Ro37W7)#^sh`vrHO!nHr64FHZE6}<(cmo`?ii~?|)6gbe?zUKbQ(GiQ5i| zr07lvX9;Ar=f^92bVn8UIh|l1M#9;&Ma)%Iu{Yato)N9@JG>h2a`$I2z#Q))9aV$! zlY**9RAjQlya%xE^&0^N6^{IUoClK$W=_V^Vzr)oh}|T~P0xJLY28DLO)XAe9peFa zdFqb4>~_%&W7ULjDSC1&@)#S4o%5`RzVD{b8WfM{cQM=rF`i>=!y=8SWh#tZsvNNeyX|l0DVOe4l zLmHf0cjiiEcFHPY_)%_1zRTQU=ALrE8GWph3NVr-mDEe-w zzN5Vi%(8at!C)D$I*~ZP>rczI442rM9s2yVvh(Z9@g#{ zg|K{#?QX1?2peb7=`AbrRdY#l-}8+q7~g?V0NyVCiD$T=E@!G+5}6Q12pUG&p2l!g zK0(uvhJKtjgQCnpOo|8JG2G>c_BIt&&_f(y2oEMQxzkzxX(u$F#v}<3ZVS+l!~{Pi z#j$xosdTlf?dD=HL8g3iw+4yPA8!_);y7hPM$SGiJ2@_u>#DJXB`ytDkqhO)lh4@q zf?MlWhNjQalcx~&QuBCa=T~=v_r9_S49DAOSAKAME*?~l3cz4h*{HK7ezk1Yy#Bz+ z=QFn^9YS-XclOcAT{~<4D}SzP89_2yqQ|O(Pm!!^TmJO8kQ)Z+hp3nSMW|pGM&sA^ z!?RULl`dF@(ZW+#vI{WVw^N&f42k53a)HcKVz!U|nNwU3<|!$SRK5w>05lC3nDA~- zHPw!`|FtA>84%o)DWj&f55wrlEv(!=x&P!Fv_bBjq3rJy6(mzMp6{7VFua;^cuzpM zevtYMlu#_+ARMiqM58x_V=jq{ro=twn)>UX@d9mfp_HsQbD8;IwMXD+yhBOEdAxNIg z7&`_vzKs()gA-EUco9e~Nf(-o+7l;%r?6mYs#lP?FW3OeNUmwaC!uXv8Kvea{@zcz z`QJ^L8VY^>=`1J1z4TLRx^3DH^cgn*+#yZVOQv}yO(SjwWUB~Imin%Uc~Qmiy@is; zH+cO3)XU3vb#Mwp)!_8DoUo5!~|H)-p|VMj4E!v}Qv zI0QWe)U*k2kz$5qmZxu8PcXp0nhidE64mwbg-{^ia+|INvblAU!E7*5w<0yFHuJm7 zc$W+VapOj$#fMXGK*#XRS7Sh1A85Lz*@^Q&qiS8)@dT9~QzRl=Uj^R1OU}X6MOldi`N0U!j1VrdC zpyRfhzq6QjO)zT=yGxH7I$YyK_@PC558q?6xDs+(c zPGtK<7Xv_RU~@_8k~bDChTC8VvG9XLFL4$upRj?nQ?nl#SUC(?hZxw*CQ!L&H@$FR zo(d%29f@&SV87oG=TKciDo?N;o0$36?3VG3Grl!EgV7=81DXFh{h|GBz?UH5+APVe z+td54(sbw2s6{y?bZ05-imJyI@xkS6EPXx_&BF)#MregC#1~o8D=jWVD7;QIV1Pk_ z@wvQ(oPxzUt7#dZ_npbVnUeCd^wf3yTPJkOt#o>pVwQL)j*dZ9Gm^136NFwO)k*&2 zo*P@hAgyShb^%$Wt^X%^=^DjgKG<3F$+TyH>DXht&HT#z# z<;h$=?j<4e`2e#J>Y|Yva@V{VAGI*6zEegdw7si9(82GTHxvF^qcpfQHE8O^j&jfm zXy%hm3+UY-v90P$B@fW^GY`a;frWxi;g-B74UT20_|4phQW?%4vbp;UuBCX>#f~n? zFR5XRR~4+er*lo`m%Kle34r8;ss8bzI~^W+l4)QHPX8roUI`?az9K#cyWce@r2E*3etd$a`6_pLzA?9j<%- zeaZcJ&B9XZ-N|Il(c3Xk<>DMn9m2idsOR^h>!%$lj-(9F{&;o z(e-vq^>1FNrY#{GF=clRD8Ncf^3ssjTYW{uFUFQD#%1U3jjcR{hrZ#jiJSg+-PX@+ zna~a?`G=_z6PE>{4m%TeIf~rZ{hR4S`{IsV|J>zSj*%|!40!e}U@!O~AR`Xl?*9#~ z&vvySL{BgAF#nF9+<&d{F@CpV{XP@o>1`FlgVK##L%aWeRgOPF{b0Fvsc?08>BgpE zR-J_)?89pGaTBjE-hILSkzN`1YVcO|w>}H$oD4HnQ?kFs_L<3!{ypgLEX-KWFO99e z?QSs^%?nbutU?-={%1@^dn+)jus(T0;h zB>27Pm!JVdZnmEww(%gKuyTmMACN7zELiH{#I67M@tFYw-|o*}i&_tSXpD94ZVKe# zYol}mw9lO`*KHXhazAg^$-T>$9y&dXNX0+;ZunlyjS3L-CqL+r&-j5&7}TCzRS7E( z&NC-pNGNK^f7i(U7h^g9Pql*eSW!kv0?3M|Q)|6@$*{1IJ&04=eKy zlc`|OsdfEND*SVv@0Ae3&AX-fpXei5A_eb74h@2Sp5HqJF+lF|FQBrQ?j_gvByVL! z9hW`0vg0T`2#%Hqe(1(n9z>tBA-=QS3I{bB|JUf%XtE<`|J=~)5u?~Yz6tD72cd2OGYC8tUU7j$S1;k^vL*4STQ!MYv zv5F`vAumU%Zi{B8yWhP}jW=glt^bk@Cu0=83Q9UtGReOBHPDNTZPDAS=gRyCZDFO`iyN9{O+5jq`)8$7#V93Jo`3wv=zn->Q_Xtq_VmlPp@b`ZVTDQs zCO@kzeulsk{6p&t3(X5hV1?Cl)W>#WmMMtxd351H&CAXzQIFyoONlr30CFYmm9SL_ z_q9uXdw7dPNuJ#`hVLW}KB@DdI%P9KsH(K-oGCs2ma-wN{ilZ=AQMERXlr@+MW`bWUe0DBQ*H9A!(!cblojB}9JfNK z0n0w1Hd);5cC1~d=QT-Ht`mTLLSJd8>tgurTzmTSX6JO1{E@J-qCJzO4^tViJ%h8q zYvw?AYeIWG_pzfGdsv2^Bir+E2$wtk`^FyG3?bD@$&~8Is_ADFb4+FBCN%Zn8BWxt zsH&{d7a>lLFpU9J>FE~Z*DA4eE0fQ_H&QI_AF@z+@icxdX1?!wbd$)^gQPYg{htjD z99=ESzTA%5caL9oJiID9+RDR6xACjd=$9|p7C19uG)*sXr~KxoPM?Ys;3KGCC;RmQ zX`oLl`4Q6?Qr1=mr1dM26^)Cr`ZboNHqH}I)ryCGw3rn#2@DIOV!cVFIXR1f-Hbe3 zNO&oyaMRJ9sz4Jk8*R?lbALYJ{XH~bzT-a3a*`&7kspgrCgBn>Yp=!(;4OsZjXR*9 z1OsOGBU|9yB^J{Ali3TGON+BL{sH`3VlXlDPt-TC_3oDoSv4$2eEEG5rnGihqCFcM z@ai<1G2en!e_)j}v>~1-(T0Ve8L;-5Kqg-k?=!skqs+JR66M-Wb?2>E{GGCg3%e2M zcQ9d9sdP(@m~7`Rz~5kiJLq__7U zMod4Z5L8RjQXDneHvnr9?mwq)E{#t1_?xl)MX&Fdv9=U5w|F>~jjRq*A1L16h@umG zPQ_T}9$~kOc%#MMH1Q_P{!obZ%ZB7huG)@5^bWPR%yefPUO0n21}c!^G>iX)#>>uk z!lMppf2Zy$7%`Y?6s`Pr?)JgJ_jh_b;hr!EVhbCILPZSt>k$dUN`jY}(O7+{Bx>*& zKjGoCq5eGHmpomp_8E}0q5@|jk8+*VzndfBDSfu?!rfE+XCBYty?jqnk0RY2CL-yb zbSwQde`9Uk)joPrZ9)IWfEnG9rr&=%Hu)U6Lb(UbfI*C57T~`|r(fG&ugrSNNsw}T z9(uA?` z?-G!qEoV1>U~_uoAmBR7^Mka);4Gf`^#|u1kiwn32R{nk%s$jn=TIQI^*mHJVcCAp z4tQA8J22;Hjar%R6KbanhhOKYwzdbq*c^n5z_e4F&DjNz&Fg zkN{K^F{0&>?E0B#21y^vskw9+eu&vUh|(JI+v+BAzoU)m{_aojD6!xd<-#z+;9!>U3=fuYw&y4}7jwD%s_Xpy>PXvX#53j4<4IeE z1gG_1-^u%hH>4hE&dZsl=eRjP_$wb(^xdR3@zvd&6sU-UIaG3p{c{QPG?wpO46Wk9 zW-L-yWGjx@)^{tO-KTCVfjjiT!kRas&i*dLW)>dAeumb@Nm49RX}%VI)0KIdxsXlb zgz-&97Hl1O+B1dNqzZiI*!7UKRQpa5l^VU+$uZXz-OIJM_1nv{_o?5@cMc7Io!Sgv zNJJZN^Tp=8xVu>);Hg+aBcD(f=0s1rNUVAIgnE0N1+bk|$(W0kb}texEL?1Kdy;N{KuSh*wAEJ02HsHef^=S zW5xfdxo5xOsO9Om4_Pz{JpkrJfjMlfLB-F8k8R+nCI0p~UGd|NCEI}G&NZLLDk48b`S`?9 zx+#}`jPrExA6Dgb2&okSp?2-Ww&hx%Z!TDHl0mKtlt2! z@(QfC`SRqRO^HXqWE$nZ4hX#Tx_h<6ltd^4Ih zqRkkMNbwm#drd82R;uHHiUT59QCW1+Z(0Zc<$o5RQs3(vHEB=bcDlL+c_0r?p0S{k zyx5F;FsX_1__(Eml8`5tP+`hU9N}5F1%Wg|UNgX04w2xxTcRSEzW2zQ&vGV;&(b0U zYwn-Lyrplz4}DaWKDIh`52hF#iK&^Yo;bdpSK-jLs~h-Kd|RP^N8TaRP)6-Q{WYZO z;i%S?T;D;Ty4FL52)dD4g$>(GcB_s%*wd^ekqYKP?U#>%xRKx11adJZgstWB@9*zV z#G$Thu{Y}T-}1L2qXP_sXjIS2Gw8!(Dqy1dbLtpmt*3d#U&157Hgj?A1L6ny-CW+` zEha5WIsFU%e$mltDs`m_mfVh~bg!zYEH2`hf|IC4#gdp!80lC(=+la&)}**Gr=b-2 zv+1h{G!)86nj<(%c#6b)S@(q`QFqS$TQEsTdW@eN4~Stj-(sCwB50k6F-;R4MA6R z|y zUd1=w?u;22DP6jg?&qf@6+qteZ-%}#*z|e@PPLTy4m?*gxJMB+j489p#NKJTGsETh z)rSpy@)jY!^kd`G#MkE+(@&hW$`X0rIDXU5$+oG3UX$Z7 zLXJ}iBQH#QaW!?BrNxdFnlB=}a7e^)Ydd~a8)>GGLmLiw@q2cQx@w!zY6eqTC{hq! z@OG9<$AcW{H}1$prMN4Dgr!+&3PS4uSoHEfP`)aBN(K{4#|WOLV~FdTG!WukA#2LB zbJB&i7_bi-Cupy;)+u?(bEFnxmE6#X8_(sc={(-cKPd#8_-elNp!if#ezX;so};(t zz-vFfdgkln_@5gx3f;Do;J+)$b!BLq(@8VrWx)wRmI5=IS{=QMbq5($2j=PzFusIA zc~_J(uRX=xkdz)yzQ5pN9a?58&5|I9#@*7NL(BNs>vEPdQTsj35Hju=mbev6W23EE zCgLvTy@gH=Uvy%I--Xj6$`KK>n#`O_hWz=hH?zNBSV{?5(Zc^;O*Qw0&c$t4rm;%{ z@Va{i`Z3Oo@5g5gY@wWXT7!_)gAzZm5=)tUA5r_5=jj=BcsilD8(g&Bcx z`JF%cVC8K|&$jR$ZERSZY220;5oXs8Uzrwv`q-@^sUW@Pt&rl8x5?7o+RJu@Ng0O` zxde-^*9J7VCr{!rweRW|R$_D|4#yz-eyU^I`8sdYQzS-321C+Y*`$RY47o3y+;a*l zUP97-88rdkL;cic6d0ksT(O>2Kmzn>|Jv%M=`hvE*#OT%=1!woyNTRuM00+NfH`bf z-W4Po$W6J!Z63pj29CZ2g$7{(g8*)6Xk=!vSgn$b6$|5>zTyFsTq5fCGE8REkp>C! zKvQ8dB>=v9e{UfD1mFd&0JAxop`cqbxOludDte38b_r!D$SWfv|DlW9@!Ay|w61gw zz`qUx@rYlB(S`CkXyWgh+Hz3GNKj`2Ps-uCmFB|&CUrwVZs|+-%eyFAEXe|G?*=11 zmI({dCFPNCNRh*%w!<>*Nc6bygbOCIVV~>e%*7(4LE(r1upbUXvL!?`+z7kH6pPAC zcF{$Oo118n_zXT9#bTxV^se-Q;X%NZ;&y;$FuXy@ag2?5;ycf`I43C!k5p)g-1_<+%b97WiH=4)u5KVpw16-CyRK*T?h;1>}cgGU|c-_%EP@Z^9; zC>%#bo0>hOOKYyVHT7^i3yDozVLnnl7*gz`JPKtd+q1@n8RUndvL3P*{e%90=e{Ru zj1#mPS<5HCN5!rAxSJO|O^gJSQ*Ito1rdFWhd`+p{yHqozCQP*WvJ#hy;N8KyZ)Zh z#a$PI$=k|xzP-yRJ)+KZ3iH%Nlm2~7Y@SyyZJC3c184mFo1w~LVi5Nc1q`SlsiBCnznjy zf4UtMLB$kM$lgwZ)yr7-Ufig$2Sh3Z!Vi(xi;^e;1@BP>D$A9k!v!)~sk`nGPvnqV z$pz`ug)fB*VXZe5w&1GCg~MMNW5RMES+{)1ywrtdzC~r9yX*(%;D7wPr4JOQ17+Ph6p=7NIs&AAVG{wO26+S0 zX8h>r3?He7qZ*LrpOzmaVH#Mg81u=_{+*=_eGN?w5*TSHbP1+|4!_@d-_Zh}&1SDI z1O9aQ7`OmS*h7*zwb`Xb*)NWhfRH z6-8)l!H+p3TbP{uR>Fsb?)Qa}v%+&|8zWw>StT)sLW}e!idx4fY7Ulxy?7Zj4pVZ7 z*|r~2SvqkL4Hcfe1m8fhCIHm?>+8T<#VABcr%-zWd$SY}j0HeoBUI|^?RAF8S<$S0 zn@8-ykK{ks3udyrFW1|DyVk7IY3+&bHkQ#Z)8|k-VRNglR&%3v< z$Ks6uBNI)xesu*+HVJ<#=Tt&UerOeIaM0S0(>X*&X|+WdX<||w;#7g9XxhhGE(HoL z*uHL}80}_ki+^X!LqRp)GEj+V*ezv%I{FDK?g^dy6A1B%nxj+n_!IZ7CtK$a4aCR{ zDgKW$?NE^p?Y|1>BdfRgQzHa{ossto4O*G0A=#YW!!+H(dCo5OZD0!x{j!Akqr96o zNXgeu+3}Zf>2-;x4s~KS?e7FjobHwe;Tpc~WzZvSbybm&L*#5Y&BK488=c!&z2~Q2 zJKk=AhUU_2i(mZgfAK2DPKXRs2-9&+Q9nptmSI~~k7pif69j1=xGp?_yOi9YIt7?v{%E2br?G5|IS~Z4I zl@unc6Ua$rWR!Wo?L_4BItMQ@tU>60d-wgpul@D^JtEeOQc*r_ch! zg0M%=>5;UdUO{!vdhd_o#wTC2{GK3}i1XV6sY+sbQID~{_#2zhYxn+x)0~IIO zmU9%hB6ff0DSzytpC76UfA#?}@=yU1ns6_D)3>>!x9a6^g?RNB=RVDZKBw}&UkI|5 z8rhk)-%Sm`kV)3Zjdll&zR(Zz4V}L!(HazZWqp3SdfwS|FAj0`a&n#4MsH^4>7_`# znrp<**4-wW)YNB6jnj6%?aD^uyjlMc3?BL1=+Owh7UWV3exmWsIDM7|RJh)87geKn zTl3FS3!rm?Ytq_f*;ZW?J>KZ;!~*6{v6;ID~V^r+bwX0&$@iNyEWG~l}(X(+s zSMM6FDyolf26R(0doGk7(GzVekT2kV&r4D}E(ER%u+SEW5%$wE&*+$TLh|gQ-d#L; z=K#vS@yr52n`4jG3s6ORI88axS3s!Vl9s=pD4+7f}T%^~uW zU0SeeHSA)q-hU2nx4ojpl2SZv_4oHHO|{o{&aWNa=c-(cn$!bZOpva>dke~@*yirh z^+%SzoPGRf9rt{`7Dv5k{01N2dNbL(Sz=-G7>B@?%n`e{y-{)awDzl=o9r`D5_FyX++l=Gc%cuPDK*_f?s0hMH4=49K)c)EjpfU(+Mz^YR&wlxR2#PQaE|!z=LRF zA^a)y!S}E$Tyl5=&Q)$X>eCN;pTfkb;-i5u)>EQJVA4AYU>|pyc21{8WBI^;JmK? z0z>*TH>U%L)Kta<8}T752?6z283mV9=mi+{KW2(A$B`JBbhAeVsgh1aOZnD?-J3HsiO$-`?$o+dSR39 zI6|bAQP$aWZa|x_Bq$a}`YAIQAAz(i7gSbjohX+KiqprGc1WDp7~T{vx&} zD~@^2YvHf-;Lv=cz{C?PVFQ_cx}7RH?dxW~q+6*ziX2<=G!y`gQ;oJcmrw2~lbL{A z>3r29J(f5UpCe&mipw^RNv_h5K4MDOzU@Bf5KqY5&(Gr~fJufJ~Rtj4xZ!gsIGvxodu^8WeqJ-6szU%$H%z^q~T7#hV3d>m6~BWdcXl4pj( z%9@s}u$8K3vZ%mHg(lG>b4NP0RY^;Bij#{3zA7{d+DRN)1Bhnq*()m|_&nHmQ{~n% zqm5eS_GX0yx|$(YcLdBLMCd6IsX zcgY6iBkS)L7JPIA+`GKrNg|m)L4yKa_lQEJPsAJMZ~eWgLq|4LD-Fw z80yrQAgK)$!ejTJ87Ld9(-FhkNr)Go12YMlZ?mL2$D zj_H^7xJNH&!8Z#Ijg!{UC5Q!z01Q*dA7>gAO9D|1&c!X~oj-!CQO+W|`(EBmdgLfN z#^3Lu-=K!3X{_?%i6fB2gCGpm_5xSM>QNO{IAnDMf={d0KvDv2n;)l7_4jl^*L8p@ znSIZy0c#0M_@bL&F2D~Z8ePHMRJIV+YOeytYEJR759^ozJu z;`ZtBbq4zG6uck!A(cHAEWtDDmG)j>(pIpov?-8E z@`plSCyt7DKDjD!^MS0>=xap@e@h;{Ag;U>4MpFUV?>N%utV2BCIBTX5SH1WM=N31 zwa|R*S+UNuX=xWj@rB;ARb@fOeNSAzO9Ol8YS)LWX9CzBk^YGbkZ|OvbDNl{o$b#%A z&<2=(&i{%51z)BD#c9)_3A)`{}Bu60~)^ts#U^2c99gKedq zo+i{UD!}=@<7)r@-6v6h0`OE$YePbzt!Yt#UcyeVCVfKNAN>jR)pL5iSQFaW9Cb7B zhSU1`erWfVn-Dejx>x^gf)p|yfipDk&?}2{bSsF*s~BG_nT2U3ygklmzASL3?drQRqCf??P23U%?)e>XwVDG{?3cN!;+PUPk6TEe#0^(dMgI;^k`s&k&xTn6uapR3YAD%18$iqS}Kk5)P2cBiey{1Zo zx^6yW3;mWaYaXyubr3I2>av`D93MCj7**DHD>&2mG z{J?s1qe0(ie7tKQ8Lt~1Bemt!;T=77)eiJYnUf7KXxSh$w z`+_h=8a;54VTT$WM%89K2p%V4;2VFK1FQ-n9#m@Rqt!uJ5J*MitUviv-Sa<30<%M4 z?kbIG@!o&=krkDS#d8!W3&a|zezi%l0L<~MAVzU6mhTeD44aEl)R%aIj2)O$--s*_ z1$2@{ApRm1Y2wc<;1J6c&cEwy7}9fLYnp>bjpqS_$C=lCk&uG5I8O(m!6c%@a55Wa zpjHV4lPlm|;|;4o9JT_Ri{i|&FaDxnRBsU3Wm>~V&<{C9S#sdR#`t@{6frAo#YMe& z5%YV`#}^kZ;$bjtiK===gt(=4WDbpH7^iu8iUt9e!dGdKJ&@1Hv=E#EM{=(-C2@>v z6SGP;epcE2+fJn$d%_4@&hb@;*rd$?>s+V&F(zmV|x2rft1{Yp}n}C}Dg{Hz*IW75*$)x(RFl7LP60Op2 z#M{j@hdNxH5_+7AXnBEq;MJTvRX6QFIu@Z8pBZz@n)H0U@3TImXBk^@Pq4Iz=zn`-+_)EeRr;E!KL2{g4ej ztg(VGIa9NbV9>qBT%J7cBORBPB4-eoB3!SV)H9lAokIU=R6r%U*_S#1J=q&(pc$N; z4>1z1@9XjssZpKKs(8_xBEg2{dVzU5=8+doOY;G)|3t)i`V3+*H5tb}?Xd$$X9grP z16G34Sj)%6rjk^_X&-GWI*P4gE4%{xf!Me zF{X@mt{D{6Yj2j!G$IYJxSPHgNIt{$HjBirGaLBD8AAPXuM>2fDTZ0T^ag8&AGze4 zL`bCza+KTz_GCU20Bo|-l!yX!J$(pXXsb6TehyEO0~${G&8&W58%Y8yG3ySh0&UnQ z+XQrJX^XauMO}@}&c_j$uu1Jen8e3qmnmcNnla$?WkLWHt*x#&XSQ&E-h~Dz!%bT9 zGCAA?kW!VoM=biC;S4=843setNgs}<<7Kj>nNI~MEFd>&XBW#`A*0Wo=X1hA(wiVm zknWLeI_D-x;+b;Y<@v((U)RR@h|Kyx^hW?@EJmg-hI35)WfW=C)N_cJ?C+5uK~z zn^vHM+15)Vn}&iM^`wVvW%4XooX|j%{1$;yo}+iOHQ7(63rKHRdXV$48plG5s#A9@<^2aHYaM6)G(Gd8arP7 zK6*ije#Mn5y>@PYt_*lea)cXfwCWe@3Tx{a^;n)T_802l0TavD_Yw4fp%-7B zL`b@R&E=F5^DCd>1s?&={1QAxiXG8;_hY!?D$CkLwZ$wTf*+h`)Z?qON!NqYw*%&D z3&3`l)-Imx&{fi1KRJ!VB|*9nOw7R7F-Au(31YJO%DE zCxVPm|8@I>U9VR{S3JT^uuLV#7RT-M_hR}q#yM|H0i83|WIY5rnLBo;g?r1{B8X6c zvwcsn5~L>ncyY!v9>HclyuIgaw6^l5S<3`J+nS@5DM93UTE_JE?QBHsF4@H}6Q_0I zJlFBo2CgsCxMhL7wkPnK=Jm~lcPzQWBu-kG>Tw8K^^HU5{Y_l}?A>MB ztGI(9k2-f9bF5&G-g9xZi{n({@Eha+GXI!(?ehk1Oj{uwhc1SkS}`e{Z^)p8ehPwr zU*#4*l{pu8Gd=~MHZtQz*Kk7FtVV9yrV#Tg?QfOIHQu=FO*#wY^SH2yo#`!kMM(ZO z$mL=vo*nvv`Ss&Jh7Qa#&KEWx$8?AnU}TLu#3!D9YIo9QkBS1e_~xt_I_aB-rZ@C} z@a>T(-d;6j9fFmTw|rLOlU%dJry0#2b83GHak_QV`Kl?E^U*Utkr-+2_rV*$ac_}p zB|t8tn2fAm!$T)!0*KcWc*mCRSZz9ao+eb0sG>rfKP^(k^8`L>GwPvod>I)dcHk1g z3n&bPWDkPlYm8?Y^?ZGycZv_vRjEaNAv)-It)?V~rTFW0Ai=doniaJzc6vuk-`8&i zuTVRR1^1Xx7UCr}7#{h>x(dNRzcVvslqbvI{JBFS0cbzBmX;{PNHNlI@Zjf;J?dCv zuSbWStpvyGrSpWP`Xyd8_!phqZNoSrvJ6YFYa=_z4aE4NGjj$L%eyAS^20ytz|ZAA zOgjG++=e;El`B>8Pz+rROC{N>QM>NL1Je-*A@_^2I7J0;kL6}O9xCGVF^3)^rMp+f zzBO!&kDn1Z&fK#i?QtBD9_=H1liUk3iDB}wGx;CCe!)UMfO9T=bbK>kww6D%!N*>Y zm99sr3I;%mH$?O}bQHs0j*Jdrk#QH073YIk*E+wzC}_co3!ryFz6|aT-;75>GFIX# zw^p_?4<=R^N-J-fY{sm#+>Cbe+tly_^#(f4Paw-jZwN3NMrLuk)0<+!1#9naW!HA4 ze~{L{q0|p<`6hH|oZJ;1;Gy!UR|24L5l7xfeF}Dvef@#!DANpkooQeP;9Z>VoUiR* z`26#>t9hJ+k{@@A<8DU)UA7;QU`C^3JmdGO0REc^3;W7y^|ZuFIsthfYDeKlcqJ(pUpjpA^`dcC9!r1E_fOQ%@zRi;7d3 zK<>y5Qs%hsl~HiA11^W08T4?qbfmE4@RDEsbgnp4(I8)aqQ6v0{ zBog))CC*IV$7PmI63@*Kn*DZpvh@8gcH*eqc&NUIpoz86J&u)Ex+6qSt?;amfiKMM zk6wnMKG>AdJxOwSa-=b)iLFg|^7G7g)7?=fcVMR0Gw8Kz>82oS(zjQkTJCukn@qh9 zcM~-dtdKGsbAegXEidM)o#*|;MywLYG(YXqy}6t!E@=_nmfKD^3W47F9Cz?Kk|C*u zZVTx9Jt|}H`m|XA`Xy+v1#nPoS^qx(en5f0c!}7%OiwCZ@bX@v1&*JC42}3r7l5j1 zJ$ zsmFvkh%M%n#2Co+KceKP=1sey8f}f!pYytRY4({TtUb*YY9(aW3Oo4x8gVc23 z{m0t=RgxD7Ag`2#Kbc4m2}YlIkr+{=pon7LAcuzt6Ge(Dz{etF6-YpMj;9I&!SZ}+ z2ue`PGXMNp3xRUR47y$OGjxg_Kn$vh$cT^_T2BpH|9?n*o@+axbqQz#Id_tcz#)R( z{Y@tEq^P?2aUc2Vg*W)qQHOZ|t#^ex*Ed+XH9o!Nm1V!*`QSK)Xa4d~cbdO}Wvz|- zS55`|JPEQ%Uiq$yC^+Az2(luq%bM~hq>lEPs}$&*L<iP6Lr*=x_q8T2?!5=CfEhN8&xF@ifH z|2kv&0tdf4y1>!Kk&Oo@R&*{uq6%@Wch^-}S=nrW)J zCYx=#`6irk$~h;Ub=vtQ2Uys##~x5n@Sk&9v|$pNQ^@h>OJbZMfk->-F`!#^Kmq7g zXLzCCLs%^OQX!&v`YEWPiYm=b*31IKK`B_G2`I$~;|Z&qR3Va-B!~pYGCii$3{wQw z+F_O|GH2Vc56$tUd^r^37(|+d_Rxk@=2jQ6QaQv!GcvYmokMq2vOz-;Op+a?{6X0* zC*V3|u3MGd@!tjQVLDPMkPaZwyK=JoPz;}t5z%)ctw|$C7(^l}!U>allPjnm#FG?= z2~*ljL>cuE!Oqdbifm3nWi3h_|5w>UxE3pktXpSAROBk$RxF`KEc4}Mg(+}EMZ!6Q z8ceCkzyVW2%g)Tv8z^6=3$?2;nOv$ukIeL4pFJDVh(?DjvWTlpxfgA=63d2$bQPy8 zv(Vx~@c=7A5|JQQk70G1E_XDZb=&<5(RbmcMYnk%iPXa?tGzy5#qjc zl9<8GI!hjygEF-+F<*)RDIbO!J`QY?1b%+vFrIXIEsMn{@zbjaWsGGG2HnWRNu577 zq>4_v1s7UN8qu7|5FrxmOI=_25X8sdxjggDJO4cN(Mvx)_0?N{J((eB!KWNaAPTLZ zgnpSE6o*=*sQ3uQu*VK3|8XEGrPp=ekY!+%&w)W8+=31N{g>)L0RQ*DTby88(lQ&& zFs8c!NTC^J3z^u?RllOmN?3oW9o%$;GO}gPO3oSGLx3Wb+ktFXHIkEM;_$6-jcZ=} zLC-@D*POKBhE|H0@z`(@tv!Sb#d3&Q9*D-$(Jzb^g3xZrBt}3LqKQnj@$O&-EMsp5`z|30C&m+;LgdHV?_?v^&irE-;Os29{AVuMilVJklr6D!F0pGe@b zm`r@oQV0R@DPHSe$V##WlNyz`a?jar;WL^%_MgV*)NY1gjTulQRMcpKGVpxDC!?5!T-MVv9F*n#;P|H8k)5M79i$PmhUomS?sJGu-U{RGkjc&;gk_c9`-iYPEO`2dLrIl(Mo zD%ipP&u2189s*^9Mb}YPV>U%eIe%(|D-0DDn;GK)8TbrDHcgGLE5<3nFjS#3GDoS( zMI6U8M}*K}u&#aS|8k<7N?wT)n=_8r2=JppR`Y1hI0YV_(1OgSMUhS!Q7 z3zeN@l%R_c+Z9NvX0*g;g^G*h8su%2fyh3QbD9jIX#+Oks#nK)N?AJOm4NbyDN*8H zG{zDkX&oX&tbj{|+;Wv6yF(}v5r!V9Abo9G>;MY!+66BRCprn5GTmtmBs4Qamn7~t zr&%KR{}m&`Sv;&Zdz-e#LNyh_U_*AZFg&cHvn98oM2gvv3#o!KbT_5N7*bqR3m1>O zV?t~~gDm7B6S>GnJ~EQ0=O`8=z)@l_FascZ+#<9=4_4k2mcx1w^ogXSMQ~q8A<|Lq zUAfG1aHxDhaDp|Lpv`Q4vzy-xhlLF$Y>yT38smbHp2lx?%{T_211;z`v;?U>HC6_j znydvPWVcD7CSy;CvCVSis{TAK87lFKO>=r6S{4_%B%;=X$Z%bw77<$u_twSHYp(h_ z^<7<^SG=Z)G1|Hcoa3BpI4ihvHHMlz6)Rl$7#{^uEPz4S(GXgK+_Fug0#Ns!kkjC`u?=V+?`Wyu4W%X5!~t)0n$w4fPeM?MH&wo-mGZ^J z3t(9tA)cfO`%RpGLuLg>aC#DV$j_zqoxuNK0NmluH52xClR}(3nS5y*g=d@Ymtpur z8YV6YN_Vti6a42&EE>Yb&DgyhJ-788PWVTN?^lvg@5;HKb~;RldSf& zv%T$Ze>>dSv}7nH;ZX&XGD?cDhc)b=q7;n*O3$}Zhj2M~FNQC`AR#Phz39ZxQL zDcL@P#w+?TTB1B#m`o=fC9JuOQGmYvpqEy#$s{G>M*k!wP(`VD?vSky9VN5VP+o|h zZcW`boyZg50VH&VF&F~Y7?;e6Q`CST9*p0>WzE199MN@`15uXyIhPce2LGKzcrgv1 zv56mq!Wu*Ydd0vIs8`0Z7k_~V)BIlFgj~Cf+yK~>$thodDUU=o0U7v#|EBd)^HtY` zpa~4PLaFeK+kD5UHih44oPczM$~YQmYl=UFaaKAq4ZS z$!(Ng+-RbMoy_&w;uQ@W7{(v6ebLJF!s>y=CafE@85)OC+lbwo|0-snn0O-+>KrrB z)Od|SZLM36MUtZx;BoOlS5#1OdC&t!pINZN!C3?(am@wN)`e+c#HAwrV4zYl4H%Zm z3w**I%nOv162=AJ#`)JVew+=`7Y^Q6$(>vQ^kA7>z<0plnRwyQh{?G5n&t@)6r!6H z79AHx71ANi5tgE^^pV7TVbmEM)oBg=(Up*>A+e+zL?VwA(Um8rRy#(~PWs9l0isrJ zC0BN(SAOM~2x8$KV&iE?m;uWD2wvl@&qqbd6olRU#0fE7V;tU@HYyM-?$KRDz_E!5 zI*y{Ac@s4B(?L9y)a9Wp0;U$;(@&boMY>fC-QL{fUh$b#|1sj1c$iWS~VZH)35FW+m0^oAc#TLQ;+KG-Xa2L@nOMQktH4!4aF7 z+-R~=e0k(U%oloM9Ke8_$jL;%2u^-+TnwgMm}r2!FryQuNrPBJouS_oUY|rp3+No3 z>K)|%iIPzAV>cdK0RB>VMnrFl2^><5Kp+Ve)hl)oVtVQ&#pZWTBwy9n zm=Z*|aAbOzLNLDSNTQW7w$cI!A&eS?%ElE+zKLDs&<&+Wo017U+ARLv1QR+5b4n@! zj+eJu?Bi9WsVXUALYo*S#W0jYr6O0w8U&t};`80bp^C|zQQzbBMrLIIo@P>RR@(zj zYAD7V0b~HCe%9I)>>_C@c=8CaZCBK?TW;0ku?mOzy#&b|&1){G!VaLerHOeW27Isw zWu_#ozC_Eq5`4A`XXc`N&P{w7E`I7#|D}SgnrMy>G@mu9W&y>ahgs!}%%&%fqsC%o z+(uESx+VlZE4)En&>93Gxa~m{4J)1q{T1zvZSCnwq-12!a1Ev0lq!;hNNt*{@g6Vo zCa)gqU5y3+yRrZPK!6z7K}yXi`_NAa>;R!~fR6U+;OvRL?CbYF8P&+>0eG*v_KC~v zKpQmgJCfT?(Bml%tY$@60OWu!m|wUyE?ol5o~lU8|Vn(8Z|};LuteyllLPtd~wimcD=$AdZ-_D!stqF6G{; zj*?w5z#5e13GNk|3~<^dpYQhwP zMeORzbS0_~1OlE~C+bioSnSA6Mpta&WJ4k`0aM+wWn&Td-zLBfr(P*W%0xrxm&dZw zB@d3KrQCT8fdE^9_+(nio)Tvo?(rFfe!-whHX|k|A6WE@9|W(z0+N}e=4yIwu{Mnr zMWoje*K$Z&QVPl7)p!XH$s^3F3o*Rwqj6!%Js36xI}0G|4S zRQqy(2h6}3G$Iu2LE?FUK(jAKwLuXOij(a?2naMmw<|>G9Ta##2tWZAc&`MU0YbBY zK<~32oWaU|iT(hn4@XoL)#e100yKES6XXC7m_aR^F{SM9Y=9pa@IVeIL5mCnK+Y~6 z6!ndyLLDSE8^B*61d}*|0uqd1VJ;xWhRYiibs#WXASg94=fX-D0Zl&vBoqTQaMp$t zGMR+%9T1obpm0W1!X$(Nq3qHm9Ki~-^$~o8F-`&|SixQQKqBCk?|Iw^qk#>ywH0WZ zE61>!Fu)O50b~Q%{~bW~>{-VL`!!ylV9kz+*oFxY2j~y?Y)e;jRQNOxTmdOq+YxKf zDJTIC7y>Iy4Z9fv4=BMXl+6M>GE|#(9aPbb8G<++3oguo5YTiQc(py!X*5_uaZ^H7 z1P3iVgG`6@Bf|nU2jo@e4ylrfHC_S~5eN@3TO+vkX&dk+93iCEf*JVq6TC5%#&H%# zQ7c>lP5ZzV+(<1Pv$2(S4rD=e;~R28AYMo}dGGN8N5~(ThzlrnAK*e%Bz188M}g9E z+5m$Ck#`orbSemVCJjR$6t@uEcND+vE~AM@go0tW^$TQL4GWlb=+_{yH43xb;TGm6 z)b(9A0bFYt|9g@$C0}G;zd&1`hh*j|c*AuR2>A-wKw@t;wMyrhkg>TfSL+}vLK1jb z8-g$#a8I6Cf4@Sgmg0QpKp(uq-zGqdz`}a}w1-S{H!~+pR@*8tI8|7i!!=qos5glB zfrY2;GiA$9lY$~x2NDd!0%EuUKldL2dZ5d0N00((Z~=P@2< zFo6$p-%pJKwgrO7D1nD-@O6~qpON)4v_i6Sh1I!=wR`i4q`<*Rb&XRaEnCE z0Q;jqvv&jw0K|?RAs7%ac#wgI83Jbz9B>d~M2QnAN|e!}VniNe@YK12@gc+sIWlC_ z$Yo9+Hb^Xlgy@1t4w*A&Dlj>~kTD?w3_hsQVd4lH4-nR%dDLda3`*FjtkPkm{|1)` zTNU#WVCqeZD~MRJ(!@r=0T4JWc-i&qiw6-_G@!U)h}R=43by<`(cMCX*y;B&02IFmU)G6RLP?@MN7uOWRA#X*`}nLsf#S$duV1C!Og(V zDl~b~6m>&)d~+p7c!?ykn6F{+wpO3U(+G*(AwB^MM~{vW?>Rq&jNlCqFw)DcwKqu1 zz_f^3&;=I%s_W|rx#-G`uY_5f{rnTqKm{F?&_WG8 z6wyQ#U6fJE0@wkQ7_e&8OG+)R6jO?L%9PWCNCC!$PW{|;Mj?j5<%ubCB-JocUA?r` zS7kjYg-xIl1lCxynpII&b=7pzj8dqj7&G!5%#31c8825~f#vmCXnA#(QEDf$_PJwL z5pz^&qwUt)UA?uy%~t4aHe7UnO?O>vzkQb?Pnt0VsMBZ}2D6)>|1*SLb^ZMp;D7}l znBam9J~*fuBKXIKe!=b(jlv;%o_31m7APcf#KE96TB)QyLpn(C^p zz8dSSwcgsWDvVjhqclJ^rV6S3bODi9vM?KK4&rzl?zrQYRNV|n0VP$oxgNNKKU$e% z*EjyIckjY2wq#qq4fnGTR_Z8e@yHJz;}l9hH0X&|6rmy0F`DT^amhs=o%GU8KOOaE z?bOAX)+ctl;iOYHX@x{4xgGc1aVH}5*?kwO_umU2S$IWd|1Tc-Kvg9kq7h^%<=Et< zpPu^at-pTg4up6@2^pBjUf{JP8=w5~;RGN3;L~59ef8U~UN;HfpP&Bv?Z038nDO7A z|Ni~|AAkWA-~b6&Km#5SfeBRL0vXsq2R;yj5tQHrDOf@GSrCI6)Zhj=*g+3|5QHIA z;P)!H8WG;agi5*G30c@e7rqdNF_hs957jqW5JH4pzy%~^aKQj7!4t4}k5WpJiZPIo zhDlW75}DXUCk8A8N#KAFpV%iFxU4xL6vEPUQMMTNfoYl`K~^R}2wX%bg;iAJ8rj%J zH@;CKJJ)ZsKdp$yGt%HgNYD~f z9C*Qq2*rS1dQvU@N(^}prGg6qQw6592ryOw%aXz5m8CL5G*c;rF>0j-(_E!9Imt}I zWkeEWgXB2LSx$4F6Mj>$gC5q|PApU)FIYH(jQZq-HPF)}GiawBpg>GS!9WyL;MD_Q z(ac%R0bkO}LNOTHP=_|O7d&9q0+x1+l~pST#sJ0fCW3}gkinmT;y@)pdXpw_q6h5S zfFtgpOyv#Y5MsGW4=@o^t^8pbSF z(n6JB7S=!p9C9>)THxuR&5(k$Qox2c9F{l2$OU2%d#*2~;R=29(;=&>6_0kIP%8KY z8nj{sQ>1iMBW-D-4v`2JGOc5}1_xVDM|byXAyRACMC z7Q&?_@vFH4o7`?$02dSs)=!E0SFK*_|FUM&EN5@xS7o=9ECJCxk zt5XJMn0FRHpsyKld6P}-R$9Il6(WwoU_Pax8Eoj34~mh<=bjkFDOPcc!`n{*$dPUh zpuj}78!qp1S6Jd5uPDq*jYv4aRRm>kyXLSA_ol0;@+FuM5ZNj+n8FJB-E3z=@!vje zpb`Q;6oE5!;6WrfBVY(Iuc$x_^9F+numbUID}&+Q8soQir3i;Tyr%_s$^x%|#eG-Y zXFvZL&}AqHSBz*{*G11MM;3Nz3& zt#rJV9ZaFpSlEH2sS}AFi^8X@|9OKaQc=05$O5neYD5u90f{QWvI>C+L@A>42Vn;S zb`F~LDQZm!R1PM-9Q6@n9jl-EfZ=XsYXKxuu?dZ71P`?Cb{{xbvkF_*6it{B2f}cN zHTWS8Q9zMJ+C2zAkinQ!jz|p9;D>ix;Q~>p@>DKxggE%Y-ed^Nt~L+_ci-Cv9AK%m zQRr}c-@yvW6p2^JPzjQ9JPcFZ$|t^Tm>QILPe8cEnafa-EO220cjUFRm9i4M4(PrV zW^=sUOjI^(qSl}YM4boV+Z6m^6wM|&MCd%DnD4sQlz{oJ@=ObEf^!%{q(~il{mnps z9qeHjy95Va=m8u$q|ueb|JwJkcDK(UD{{2M8R)*wDP-5XTA2G=<$zWMm0BYD+ymYD z-UhhqsSvP@?QA_mi)Zwrpcu0RgrXOS)VVu$)HD2zgi#3(nF` zGQ|lR)vPFiX^K4+7g(XJWkl2^$!Z3KPJeqd99Jit3PZZBWdlcqq7sfcerjJ3M~^Gt zb|lqzPdr-F(vtiR1J_U@kY8HvPyZk>IQ}F`>+w5eIlaO2Dq_47w^9qZU-X53kHuM79b%g$?Vnx@F2ni)=psu!_$Y+iP_FzE?pn?RDAQhegbZF%>8etjg046TtnrP)- z{$M;5U_YR0ZJ9p|A4_dG%IMC~=gS>hS zy{011paBjwKztBt$cl~uBfa@D;h?jGbUi$o*3JN6P2PvY)oI|Wk zfZ(Jn!Jd$gdV=n7ti>vVt_}|i9Zk++rOeJO%`}iAWhW5W@mQ84UqV6#iYqIMtg@&D z#4wWJm{KBE4^s$X85)rwzos@o!47ky0CD7yL~JUa;20V~B3Jqb78k%5>oNdF>a#+Ers5#&l#fMnv7{ivqn^=4Fd-aS<;hM_BDgG< z(C;unVHCr~)yyjsVr?9aOaei{DwHzy8gL+=;~v{gADf3NL&6d_aw{W*Rf_Bn=B&dI zM6t^8!pe;xQ&TI9pcrt-aH$faEt&N4jT``zg%Jvt}!bR z|8x5olK`Uezn;tnoW-Lwt^iUrD{SBsL==VQqDA9!GF1zidU7HrZ#6MsJ$uwg%L~Fv zASCiEKOqn_P2@l!q8=q80xhiPlmZNlAS+Hz65wR1EMb%86MBHJKzkDtv!#|GLL;r} zB}7jgmlI9XR87~EU}E422XEDgY9%!T3c%1M$TKVS2|7t_3W%x=u;2jVNjmi-uiVp6 z4;4`pwZ{Sw$O^y{P7@&xkU|gQKb!JMDWVmuZdWW%N~<#3w1Pli??B@-me`B6cI8o3 zPy-}YZ*mbC^}`WLP9vtzMZ;iMHq;>Ivf2b77h`MnKeRU#TvKWETcE)q4zfJ|4g zO4$@%<5gbgHCO2B?N*2Z<`jjbkOAsc8fGDCbOU^gw5KSe@P6P74m@FOEtKr13tHDXkQuT)!NDJ@|FHdcJX zX(1Oh*OZ4CT{R?x)gq=(XX8lwQqd9IQDld}6d$4iY^Owc7DxA$7K?QvkX2Chut1qr zVy{+W`D!fmtVFJ04@uKnl@wbILR+15HHk`mXy99MLtG=`Q;x(S%vEfa|9}u>mP-A} zO?K`kUUpdN)o=e6a054=26hI{psYeFU&He)aDdWMO`h!ZAOhB(2901Hc`9B4hm|0(yW9?tpr!m-}9Izw9b|aq(z@7PL~) zF{@X6m9ZycRnsI6Mp200#P<$-aW8v9Y6FF4rveB{*M9F802wuPMHM#XF>EPyYz3ff z6|7sWLl89Kb#)hwwldBjB2{-qZUJ}|mREP7Y81|AfLrBm1($<6|JZ{C_s}@t3;(qz z^i?84;0xt|@ahh70akHMgwVXRPbb0%3D3K3cn!ROgq6vZ8npmG;1XU91cvnVRQGv{ zuJrgX@<0!6YxgZ!C-R~=@($5=Pu4cOv~2~Uc)9j?nMR7Gm^ZhUTsXNGy{-7?o35l}QrqsB2FX z*Fv?+(I}t+YFRSWiG=YqBFfHLZjy%ii5P8Jn9r1`c7n_7+b{ zG9vCU}ad&d|6!l4@jkf50H5*$Pr_6O>MVyDhPR+Z8sPCFQ`4$in-KRvUrQd*%;n+ zs>SvJ^<*wpR4~(+X<>1m-B?3|R%t6mXjiDLoeUUh{{?Dmw7`^yi}%E8BdjX#8l@e% zKkZR(B|@6d_4lT7qa@mGb>XXtw@VqDO!<~Zn8P?>nzAd~vQJ2+d6K4Md8Yj-r(Kx4 z^wg&Zg9nYPX){9QdaUIpLKFeCC!UwdPB{TCY<3C2DQBdJMa3$Cw|P}|cnjd0k(P@e zgsE>zu-dgw);c17b}Ss>74h#DX)4OR7il|mSLymYEK@ViZ-)h7djlDv0|l#ynIaM| zNU4smz0|L-b+HG)q9;&X4vFZ9+oNS0sYUuKfG^ol2txW6zbE^$16;rdyn(Ru?B<9k zSm1CYVhRTJm#YvVtTUHuIwwbaB5JZ<8XC=<|AVT0Wpy7Sw)2A6;P$;8xPaB`cTIwu zG1;55x+RM0V!OsS%`p*d%AV7h0ZOadzWcl17#LafCb&Dh_qZa2d{zybFM(BRU{5$F z1OtMYGlzHpBN~&}+r-gW!W&T3D`B2KBp!JyUU-XzRH{1_^7Dp|I# zn`b)k;8v=V-0G{U|J%1)9GvfZId<;o;I;)=kc@{mFGFFv4Z@@D&%38DX+8AD{|iL3 z!U|3_tyf*Hi5$N^q4{oHM9;4-Yx%Sd{{yF83g;JE6bjG{*X0x@h&o$dk;#7eHV&I(J+uhw6NRHmA01hn%RCvbr&F>1J z0j^8r##0VV05>2&tY#TUtaAqni~&rtC#}O=Nx_dWHuQoClikcvS6DuAzwIPt z^5k~u7DqT9&Rly~YGH^JK!-^AUR=<#U*dJz~ep#5Yq(7@@X|K+KcWme3asMF7QBiU1!W8yUcD}|xGQveubVT=|) z3YJa)yas0VeGCZ4Ye_+VsN@xxrc1=#=NsdSMiWUEIObH41Qmf!CV&l;r5u41EnCHN z`nLjs;oIJw^;_Td`KMpo?s2_9@9f|P?5Y9uP7IQO((=6k^oa*~9}2$k)aFj)JU|Qv z4+@H)_s^ia!*A|*-`-uqUbTStt<%v)O}*L^)-c6$CZ-V@VH0{U9z*|I!yj>mA>53C z7G@Wxc1RIKQ}uI?p;kc>;y)KIIp*IYQvre&tzpk{39Mx)!2l)81Qj4qfY34|0|;1v z1{3wKpHUd+pVk-@5LYB-! zhyx%TD*H6lnh0Id`jui#(Okc1Va!5ShHzbsCR<)nNmU83VWbo((gaJ_WEXuQLVEV< zvN2E!US??3tn#X5by!XS)eNC!P`zNW$yH3!0*G@apMrE5w_upBpQTciswCYUv|?+z zj5-&^m#lh`==|~lDP1zKLzF@AnHd3!%bP!sKE3+&?AyD44?n*A`Sk1CzmGq^{{8&> z`~MGMfC3IkV1Wi6|A=6M3N8rW3|O2Y#~yO5F@*_dxwJtNYqY^(5*)O|!W0m4sKpEm zNU%c^61Y}`7bA+{p?477;9?sk?sk%cFJch`j_Waj!Fft-l9@r8C}CM+5M=>Mk+ht` zg#sh=A;}0`O)$qQxELwLg-c?#Wi6+?p%HP41mdMqlz_sfC!4s*CYmv6as^#kSi+fS zgedvI7)=`VWEMWQbQ*Uuo~Hs%GdXfd7!WXU1R628)`TC6HX1`5KPeT)AeTllL>w!0 zWkVc^R8k3}RzT2M4`Zb&DH>L!Y2F2$UW&$tnKm&PL>%CRYExXjXTd4J)NrU`B>++0 z1B4(_T1z<`|Jl-z2f^Zr6mL+{0d^fIQY5u7)$k`Qh@_xYAE{ic39>>cQb)82AVJA1 zwHQq!~F)(jWPGDva77GI2U#u{(TamOBi z406aKk4$pOCKuR15qs>wK(EA60CU3$KmfA@gSu>y1U2KFUCe3iJaK&*q(HRH6%Ac< zvm_)96Vf9nX|dBcyYyHo-3Coq0~c&?K?6K1#kJQmMzD3)S#xc+j7al^wO?eTZ8Tjo z!`-%-318d+(HhA6HAG1B-80h|>K*sof)kea-q=mBbP8pr1>1Os3V{nOEhL*lX2_n* zdFP&g{|878Kdg`j57sDALkhgm5CHJvRD`Q+Id)>PGmq8VTd}q(pf>6ypit!cR|q_10gHefHXK&wcma`(^X@;{TUMEzLB7{RJzm&wl&u zOHbe!9traJ_#L;PNio9Y(AR0kq=LNi9B!@utWw5IK(6>afwW9q7$D8#VAT~id3wk6|acJENXF!TS+Z|t4V=8AXM57H z3?rWNC6s6e8`gQvfC_Y=1f^pLL}UjEouNWJOVKvpQ-mUjjW7qD0u-iTA^-s?|B{Aq zA$y+CE>ijcPH!ryN!`RtxxpeD(D-M7E@CLfRBBWF0#>l1@X+*>YEi+Y@Txze z{Sbe?GO1=wA{0|m%mcJk*7X#kupoeHkwB9?%^n1_?wLRv3Sd3Mp@HL%=eZu(xe3E`VO)3qC6UrwlT-#x0n29$YH+zr*WtMdl!2 zthw1WxJX5ji8tptw*Y!~uJEkssQeZl7eWfR-FgrUNHtw9Vb zBr5|vP{I>(@PG%bxi2y>Hxgu!+yall5Ufeu(|AU1cL&!rb+#wt8zF!RpuxEx z+yNiBJIQu>v0sAnXW|^9gXK}54Q#Li_>v6*7#`ZzJdB|i!~o+UpV5dpaPb!?u4f`A zxr|hha=t{mJt)6;v-`KTpd7*DY0J)Cj@qnMw};I54F(g^|8m3xq+sAms6o7eOkjSO zI$2L>;n|Szgm*vq#}CLs*3tcPSA$RC=Vmx>BF1GdI9ysn0J5&%4)?gry<)tsh?QR} zff^;0Lwuh>UxXc@JxIt4m6qFv9F$N!*n#lgu{QWLlz2OwK}ARe!YzuP7~*W!7|rNB z0BPZ0szkLIm8~oQd)0_u;Km~cG1AlmVZP2EqZghCnADA?oiJgR-K`Kw=Qp7N+ErE) z_4^iOm%(~SFkB*pEKe9r!DydToL_0!9ZiG>Fsn%xXLVBeKfhvUyS-=V(_&;4TE@EdIkg$54hYO0p zaE(w528bxfkPv9mSoy?hbH{@{=z~8}M7xg+0BVJgr130h) zawP{%I2Yn22T<Gmr!cWrc(yX4xTEVz2`vH-&(;e(GTu_$3W|&@h4k4Y?o)T)+i_ zuqFS4NFA_Jq|gU*@CPFy4C7P)X%!9 zH>R})pfUtja2H8I7m1HYJB zAi@clfCkeT1yI2WgEnfWwTw|<1=WXXb3u%zH3&taDSfjBpJ0xK_6CkcN^1yia6l`* zi)_gpeLV3U5#aU?7Uc(0s!K z9=bss&(sR6=!&aB8ZHrG!Bi`{Fm*7o3D5uyp$CLFiIX|0lWy}?uX6*xmKIxv7Ud;T zR51f#2od6y1cP#vSa1L@;dn6dlUUGR|6Q0-?EwO!z=nn303taIxnO$(kU7y{lLPPv z(6A>|k&l}&H35c#Fwsu0AVLX{kHgVsmRMvG!2^AP1jc|1mva%&pb4chWYx7KsUcR# zw1~sAE^gOmRsemALpF(!2pbRq4UmQq5fr558iCf1Il^0G;|HODj4{C|Lj@65;Ru7a z0jHu=3vdS`Mis3oXr1{9=EndPR+}G2nqCqG*7%r|hBftgk7)52D*+!RpbA^rm6{cY zDMcQQ&{C$|0W;@a*!f=P=t3WlrYgE>eUkORabU!k8)L>vnW(80pP*X9b7*M60h}-h zQ= zaS3dA3C-!D>}G=^Xr14Iop%X(re-G*siLb;qLY<$by0#eh>*0{fhx$D!{AxpL5h5% zhpS*uFcD!V3Y9L4SAB7JE+e5XaRy%C zY!8B0g^&rwYOKeKtjQ`3Y)E6_)QOc?8~;VB8$lZ`d3GtvlGf1~9kHo?v!jY3qx;mC zc8N?V2uh*%sauC+vzdX!atDI|74QnLx2OU`K`VA4rl4tlZAJvWsTfuf1%Ia#a}fhl z3YC>0j8!3k6W4C$pDon6d~AE_q{{CcBy{YCcQ6#cRBFR9+7PSH&r-FOzNBW>6=Ai~zzpFFzT->2;%mO2hP7@eskJbqX?rCupm0JUzs53Q9@{j` z!*uy8o!Mox|9Q!_bkUbRCJ4r0Om!O*qk(n#J8+|L43vt2H7g%ZI(=i?1D}8fFMz=r zEOHY!t%p0d+xMD9wYa;OuU}yW8l1ruoUcLgnQ~))>OnK?v%$M5vBHTTv9`Mq0Ro3{ zzUN!MKAgU1ak{Rny45+d*{P@y5xZ^!zxlfg!i$i$duq6gsn-b#3e0p7Mg#1Mp216r z#|y?`EXIFiWelJ)z`9<0H8wl&SBjShZY;fOOuc&0Yt}2ZZ6;rC{Kk4LAyxr zEXadA$ezZA{ussW+pf+Md&l6&k35$IaJKhbdXH?$(^;~i3K4MYi5@k;1^f!37i-98 z$))V0|6x0%&6SHHOn$BG%BDcWk1Hb}JTZ%gx|GQ_Jn_n}dax9g5FnKrN&;Be1NlO>gI~dgqhSxU7UN8gy z%+UU+!;V^r=fs- z|3KuLn`^@q+YH2BYBm(F<`((hSO!?YVY2F(U!CsyxB`>WqV1%RUVgwEV9^trpXl zxGl!QO)bo6b^(lXkD5C?$SfZS<5KTo$dIks(~P<>3D&GDxAOVAZ;jO_{g<6RyWlLv zEA6!9JOHt_rxR1tzLlu(yw~TA-s#OiyNcKr(YytHy%0gQN*mY^!B#uqwDIjL|50nS z>Ookb)}pyEt*BfPINTZeI}r}Ag8ujawQ zX{14A+eA&Lvi)!-Zn?dUDB#!`!d=4!N*}ZnlI#J^`L$ndHpC0g64i0d#}M6>Sl)V? zg6Na2+8tfT+1)uTH#9H|cxxV>(7Rl=XE&?fRc_^1jzjFt*lD~XFwx$)YS_Ap&xxHK zHlmB|QR9Y%9ob#clr7rasQ|E%;Ap$LqlVHjq0$k~(xt5t>^$Ar0cY_U!8d)danRoa zV9P-re`Bk#i+<;*dKZk!aGRmZ2OA=*&&T|2rP#(4Eaf z4!eh%sYc!xY@m<23qN25s^>A`X@<>MuIszb>j)$P{MXliEjRP+v*cX{Y7(FuMEs5p+vEs=q_j_rEeaK}Bi7!K|C>)>x2+5tQlw;lm6y}nxwp+3`>Sd&|9C5%p>o?fxBJ>cT2+9yZY7Eiu(Sz37r=z=)-l8(QsU z?bRo(ou1B@Xo(&6GT@Cg4CJ}$KQ5`XJKh6yfqZ74r%osz&t;q4>n-o{FF!phlUqNT zTUww8U-%F*k4qjf10KWyW`0h2TzJnmXaO)~^}P{ifb>k026*r=Dx`-Z4v4&$npB{n@YmAG6qu z?E%@uy-xXek{1Io!vYZE0p2?WfHiF#P)j4CO%-v*Gr$2lbN<5KX8-qG1RTHt08wNL z0|Es(oY?~<#DxnUir8rrqTob|6)BduWsMmeiycQr^JF9ii5g>GL2ET(K*5icgp71C z1{bVhu->Sg7-7}2KQ2gadRAxU01G=uJ!wI*53plnIugZ|D#23=T+Cc8#S_fcCsUE| zEKpF8F(WIBzOrBt*D^^WQwTA1Oqh_N6dNs5BH-!Xy$uc}ioo{;CQM;gY}jBUPN+m1 z>P`d{%5Xz8roz-c!nlbFhCK#_LbG6E<|cY6Mo0vBXy!^*ICF^MCzPMS6Rj}rff)9k zP@FhC=9^PCnisl{I7)=+P?H9yKf7+oI|}gNPZ2dkLcMxH82=fOm6^&n(6h1?Gw5RV zU}%nFz|16VfyB}=Xo9rQf#!)uiaMoIP=6q+KHj1P5z&Zh>7@~3nh6-2(js8IR=|*9 z!7E@1O1lCisV^x*EWv327jj`sLAd1N!J}ew(9k0GJPGe9OQ1nXz3pzqF-IMDDW{~eN-M9#GD|JDPMm`$4*C4;(LIR6FGNuR+bi@szjMFH(8+AVdb{IJ7n9SLli4nK z%!+Np?TrkAM*HLl({lO?f}G6F_FOdNt%wY9!{y|!O1#aHgU>$UcMuMm&=z0#qe zoogsOm@+kHLq4`>#8QiSW|jXYLPD0IV_qdim)VLjI7P7A*dh*#2D(eFx8}NQufGO6 zY_Z2CyKJ-1Mmue_*Jhi?229uiPAql^Vcn-V*#9AkBnWHE_jPnySoV09Uh5ikp zHXBeu01rn#^F8cGnxNW~Na8@G5sxA=cth<@H-g@gpf6ykT^dHf7Z=pwb+ID~>7IwW zm8dR#V<3d-<{&!0jDQWCW1)GP_q-<@Etam*wcF~Jg98%TPMgm$C0}Mn2;}@%#fx9%~h-nm~8s#|0z0e>R zy@=jks<0^wiYG&G1Y{ruIY>el(vXKlWFi&0$h#GRag2mylX6hT3DGfA<5)TJ+lX-s80 zQ<~P)rZ>fDPIbCdp7yky5A|tKg*sHC7S*UnMe0b6K#5cVhXkW=$s3b8RjO9is#nEo zRvq%ltg3A(lv-u_Jkg$LcGawBMQd8sy4H^F025l&CM;bbh(H_-p!gw04gBe{th|A( ze+6t{1v^;6MiMqyNJtF0S^xS;JISq?}5Y$J)RU7`^ULU;{y`eYk>j7G5z ztO6J`ENp63yIR(^*0oz|K>rffG$uJf0bi$?f*8>EBP@7fw@;Ztn$nbndtQPGU7Wxv zCbpfs)W>UAa8F#h1i|uD#|Xu+L}p*RUG8?*yWef?L%a}!B<#U*h{Zwx8K8wW+!jb; zID>nCS%kbL1b#{afhsgYg&P$G7ohc1AL`)2u5sayNyHT>_F5fK2&0eSg>Zx=JYfnO z6#{2y!*8&t#RWhizK>b&hlK=R`38prc9_C_lY|j#XoMrx@h^bUX5cwUS4(wR1{b_Y zV;fi4$3F&gkcIru6GI^^8`eu>@5|ob_K3t@EV7DMtlt(F!U4gV04)C7W9=%5$H)a+ zrL2jg6ab@ELq>C&)&IO^HhVJ!dMLt5kSw_v%-{$J*})9-JcCDiAa7HEg5~O201}5l zAX5;uhN4`<#{oJCeEty#I?-ZlMB>Vl8-p3%3ShfWD8S3>S`2U;0m`z|GKHi;nN0w0vI7w<8{v%*u_ zWgwyk9ne4us_+V9ta>73EXJ*I-vJ&x%CDx*!B|!=`cPG5dTmJx58?uguwEw@QXs)t z%)FmgIsdH#qzVZMa$f_W^pheu4yE{W&jw+rQdD5k5gwj#1+$~w<#5M;{`J3q{!au7 z=4Al8>j)-m5!s@+7MeT5fs+{kv4d-}MeB%%aJ-?20Xv|#A1MQ5&^#b`3N0fyiU5OU zK)nmPqobJ`^Rob2K#P?KL9u&`7ul;TaIUPAfyV%VFN>oDLm>{KKe70uh|!n;h&?kf zi2Vt80|o*UfHZ)H>KVI*B_TQ)s7MKm zcmrrSKB9O9Sy;Ct!Vgi(5me-|F4V!ILV(2BMbGcHSsOwUMB3#90gBmid$8+0@jJZD? z`ITJs#f!wqjMPY)Vu11zlZn%xW89Hs1Q=#4F&1dNIE1{%GqU?4NwdfZN|VW%r2om9 zoCS?D$1Ow0LrgsdQ$!+U2~$+XS**qNFqIzK!~y8U8wtpSBuKM}MF?q1aa%|d+=RZl z4oPSMYODx+RHLcf$gmX4u_Q~K!lFErJopjGzGyT+12j1)$!7EtJ($4XTgm!?2)ESB zg0lleaezorg}@Zd!4w6;B+Sg)z(Lf>?TEsj43@@JfK3p}?*j&2+qKKogp*LmIk>uB zdp0y$%5IYc%xo2>B!H>O$1I}-sXPWZ8cNCGrx+Q5tU!-tJ059@pj#BhvgFO)^v&P= zC?v}}g;`5K0TY9hxPObwlY}#sY)OlFGl)peh&zKdfJ0*pN&Sh0aa0AIJpYYzWK5p4 z%EuH>$@~xCyQB0}Pp_j0xZpja*}nSPSaK^hpAMO!E{G^cacZ!%=zy5Y|hB`N)}2tT8<*hF7?Pq!>QvGELNk z%GE3gu=LMCLnTrON#eVLKY+PSK%o!>${c}A2=&r01=BEPr8%275K}{GyhDn3Ne*Ss zy7W*#u|SI~0V!3XoJ>45(OLz;15=UaYfphxRQ-I&mGFUvd{P&Yz3Rw<-Kd*%Gs7PNf|&dcEHgJ-RmVLgPp1gV zqj{7E+mTav#K)+DXSmd01r8x{&HPNwV|7$zHNt_N!QfB=XhkLJlNMgx){3>*i^W(W zVS)6Lvn;Y6b1m1t1hHWGyXVXagt$&r?a=kwQ1hrxt}M87HUEzzxW=TMhztb8<6pInK^6v|O7tJ7eEK1zW=IKrGnAsDO+ACg4iz^3eaN=D^RaSKAtnne z$<-~TQ4u*x%+-LYG0g$MkDuwA3CI{q*q%~snF7cGRsa@7R0JQIq)s88Mcq$iZB21Q z3AKGziFL?cNX@>b0p7b^PK4IrkiU?-8>Z7&x7FV5<^SH_Y=9{cMktUQzI0QfkekE- z!)wfwK>IT}5C}V9+=W31FQBjYwLIVo-y%>~B>X>uqc0D;%N((|?(CuwC?hNUgO4CO z3)qBKaA25W1qb#7NF?2Q9on(7tBe^21a1TjIR#6E#ZI9s=YhFeAX@~*1w|lX@gxD5 zTLnZAFiQB-Krj_x5#DorRH~DNKS<#A=t1cPh8^}crs&l!&*?A|Aa z;wZ+*2EYOKqAe^C+`9qbyi}MOuwv=Nfd!xdfuMk)-~j#gw<$EM;AO|?bZR-oiL02CQdOGKK@)yV1oiM1N|7<+QA7{K|TKz0?E{4M(&6z z;MbL*g;5v-pQYhc4$s~FB@C%lDK_R~M&|xw00@x4b*-Pts@cyj9VG~!CM)?{YrhIZ)H3N91qNAOx!i~J;Ar~_Pck!i|>e0132 zedv%D>5=xaW#-BVtLP*Vf}K#_^zq>6<^PLOP(qTX>6*6bn`WkzUa=~;2~XsY^Sb*`3!glUAc<>ZW$;rzWTj_&}(p>Z-QttH$cA*6OY1>aO$29?4gdos*h-3VHiS0ow}$JuhU>3@luf8XKcWR?T4=fE>%R7DWUh)gpv`a#HQoz^ z68-DMR_w(VYStw!nYLcWmh8!Mb?Kq@eBG7VhCD?g*<$>><{Ol$3xi z?&fyx=U%PjZWPw0ima#+=*I5s*8lFbDl=RlY+8i{(Wc>^+wSr<@AEz?`Adb(J`H}| zY|zO8(MIq2rtkW0DM%=qF$)ey{BHa9@BapHmWm4#rWgX{2%k4l&o9*!-C-Nfa5*+U`*G*6(XYwX@@+|3?ldgyeucO+T z#3#q{EZ6dhtp)kU)!>dy8X43rC-X8l^X2t&LyZgE04%$@c(T-H}pea@a&`I32u>D_TlMnR798bN%wChFqKsR) z_w`=~_FK;YPq0Fm4)$Y5_P8#soHLLPPxfbrc8AsgDZr3djP`5C_N^AJG|%>K_ja7- z@NXCQaUbgG(Qk4`_jG^g(^dC&cXug9*msxrd1qUlruTct_iJ^5v(5K@_jgV8Pb~cR zfhYK}#Bb&<_=Hz@jl}SvUigQHc-`KKB98cqw|M@8E@SZYi|6=`hqot4xlH%?ktcaI z^8raY)RI^EmG?23F8_3vhxwS_E)oz1I+yvI$9dIi0e;W$a2mR205}7_>(Kr3mkCIG9{nclEB$2=eK^w5C2H!jTYVW0mZ-m@9%qeENJj2|Ip9)moNYHU;Nm6Jt0^B_t$%Dk_F?3 z|N8%XDL4jNIB@&te}Et$a3H~g1`i@ksBj^}h7KP>j3{v;#fla$V$7&@XYC(oWfe*z6EbSTlHMvo#*s&r|_46tB5 zU@CPg)v8vnV$G^`E7z`Gzk&@bb}ZSlX3u(@@QT(1lxW|=jVpI9-MV(~;?1jfFWIVtKZ6b}dNk?Mrca|zt$MY@ zKg*tEPX9=v7PMw#3bW3wdpGaizJCJ`E_^s;L$6~abkXbCvN^<`Lysw`Ll111;DsZSSfYt1qL`wJbkR^l2MLI1 zkQv4}x1x%r=psws;jcv zs;jTU8mp|c(psynx8j8GQfy6UU5-n#3r!ydcrv(sL??YHBeyY9R5-n;L=10THb!xLY;@y8>dyz0A{DD>#VcYli(1?w7rW@iFM=_QVjLqG%V@?kqA`tX zTq7IX=*Bm~F^+PaBOU8#$2;ONk9yoAAN%OXKLRq4f*d3v3u(whA~KPRTqGkK>BvVy zGLn*B?8aGM2KOB`s@d z%Uj|ym%7{~FMH|BUjj3j!WC9(BGn&$zCjT|7Y0Yb5Gn?An zCO5n3&2NG;oZ=iOIm>CzbD}ey>Rcx~+v(1C!ZV)ooF_f&Y0rD&GoSk0CqMh?&wm0m zpaLBzK?`cogCaDc3SB5e8|u)9LNuZhohU^sYSD{gG@}~bC`UW$(T{>Oq#_+DNlR+d zlcF@GDqSf{Tk6u6!ZfBboheOgYSWwIG^aYdVGC>6!y-1Zid`&Y8~^Lr$3ix;lASDND{I-y zVm7my-7IH2>)FqOHngH0Eon<@+S8&owW?h$Yg_Bu*TOcovYjn$Yirxv;x@Os-7Rl> z>)YP~H@LzbE^&)%+~XoQxyoHGbDQhj=R!BS(w#1Kt83lsVmG_m-7a^#>)r2yH@xB< zFL}#r-t(e2z3N>rd)w>Y_rf>6@|`bz>ucZp;y1tg-7kOp>)-zZIKToPFo6qf-~%H# z!3th5gB$GN2SYf*5}q)HD{SElV>rVa-Y|zd?BNfCIK(0zF^NlT;uE7d#VTGgi(BmC z7sEKlGM+JwYi#2i<2c7U-Z77R?BgE;ImkjDGLegHQ}=$*0P>8t!r)TTjM&{y52Rfd+qCA13TEl9yYOy zZR}$sJK4%!HnW@U>}Nwe+R~mjwX1FIYhydx+TJ#|yY207gFD>f9yhtmZSHfUJKgGD zH@n;I?svmG-twL|z3Xl7d*eIb`rbFc`|a<41OGhW0v|ZR3vTd(BRt^>UpT`X?(m00 zJmM0cIK?Y&@rz?T;~L*M$2;!vkApnqA|E-)OK$R$qdes*UpdQL?(&zzJmxZ=In8Ts z^PA&5=Q`gx&wK9kp94MULLWNOi*EFzBR%O#Upmv9?)0ZaJ?c`QI@POg^{Zn&>ssGB z*SqfZuY*18Vjnx%%Wn3wqdo0vUpw2|?)JCCJ??U!JKgJU_q*dg?|R=m-}~EJmo8I`O9NI^P1m0=R5ED&x1bnq8~l!OKKKHxt{qKW6{Nf)!`O9zq^P@lg>R&(m+wcDO!$1D= zpFjQUZ~yz_KmYpQKmYsh|NjGE01Ds$5?}!u-~l3F0xIAFGGGHb-~&Qn1WMopQeXvI z;00n}25R62a$pB~;0J}5DMWC5@8V<;SnNX5-Q;mGGP-s;S)k(6iVR~QehQZ;T2+G7HZ)Z za$y&G;TM8o7>eN-l3^K|;TfV~8t$s$8nR&C+RG*V+VTH`fhV>W8zHgaP(dgC{OV>pWAIFe&I zn&Ua5V>+tiI-V?4^^Jkn!5+T%UqV?OHRKJsHf`r|(WWIzh!KoVp@ibg;H z03rDV1;_y004xsx2mn?GHU|I*{{R6997wRB!Gj1BDqP60p~Hs|BTAe|v7*I`7&B_z z$g!ixk03*e97(dI$&)Bks$9vkrOTHvW6GRKv!>0PICJXU$+M@=pFo2O9ZIyQ(W6L{ zDqYI7sne%Wqe`7hwW`&tShH%~%C)Q4uVBN99ZR;X*|TWVs$I*rt=qS7Ql&FUqCEMSW{qXbVwfoLc%_hM&zTd89!C>oFt6t6e>6l8695I;9Aa*4Q8^x@_l&OJl-`m}aW!rX!6prJ>z9G6qD4F#2Pc z4}B@=gO-TN>8r5D|0?UOw2p}es2?KnkQn8enxG*Nsk&->SLj*mvB)N??6S+QGThAZy4VLc0NchWk?D5B#HUcpN zh(fez#SJ(L(G_>XODV`O$1L;AG{1-=#OY3p^1#7noPv=x2QBo_L>J9k6e6EnazrPy zt8zq<7W}f&R99{F)mXnp#;0wHI?=l9@*I)2c($7L*=VP&_S#Qv2P$~j_6V??K~h9^ zkyEp+_uhQ>|Lu25Zc_=jMRC$CZ_kp-_xIwAH}3f33L%m7p`&6Xh9PsChsnhk9S3G1 zheIy<=%klUbQEYb65DrI`N56jG`2$NX05z@rqc?q87Kv#V&gBi(m|+7{^G) zGMe#>XiTFT*T}{;y77&0jH4XqNXI(b@s4=RqaOFj$3FV;kAMuMAO}gvLK^arh)kp+ z7s<#*I`WZ_jHDzdNy$oD@{*X$q$W4X$xeFmlb{TxC`U=kQkwFVs7$3QR~f`8P(cE) ztU{tFQUoHf@|L*F7Z)lwkP0ZG1SSY(Fd1P6<3%I^zqo+0a>>kQGHVQvFhLoxbpT0B z;+ojRCL^dY5nBYo084PDILBG53P9qTkC5dUOmIyTkYEw;Jm)nL(M=$Llbra>XQs-) z|ISH3q5|_d06KZe1S%u~oyK&?1MC^jhU)X75KU7x2Re`u%yXGsV5bSVAP^&Hfe1#( zzy?P81zQ$mp?oL;0Y+MY3CyP;S}?*8CZGY9el(&u&1r@Zae`}ZlOT+^<}_h?PDw;S zAP`_iDVWiNZ8$Xtw{R&z7Fr5m@W83sxIrn3HIOe1qXo9Wfe)}MgF)0%r)W*p;?6d>@cSRY_gC4gZELD0c2 zM3C59Wa9@5c&S=9%h~7zAgC9G$U6PW&AS3&1!vvN1ctGV1n6m@FOceH2q0Dq|6u8{ zJJ5h;hhTtg;Gm?P4X$uc6M;uy^8mAKNLxujoL^`|nFZOv4|dU5sv3j^KnTHYci@7? z4g?oK=)f|EOWyJV#+>aO>O&&X)=8LQAkMWdOmh%}n*v~=2w0{8d~l1da@V^8;lMVM zFkbT-_`r1;?Ia|jUWb@Lo|9OFcmxvPWlF&XJCH3(9V!qD@IbH~{;xqY&;wuW7QrY^ zv0JDBS`;K=!VNJ)Pv`ko3iCj|1!=)^v9#g&4#PQ)6>&ix8w^*e_{c~`3tP2W+J#V| z1nEs~g$>e+9V3;YKISTs0UYEXC;7`@9t%$q$`A#U;UH7au@9hoUn~ zkT1j;$YIX2p0grjibl?wj7YAHaZC_jSh>yjeDj?{?ByZrKp3grv!o{t6@Io8pplCJ zN738^HV@>&H|DXMKfUNKb2$zl<}#&M&FZ3{cfk#gNSaA~gDr?U(X^hkkO{Ki{)bu9x!^WX+z z1wt?=Q16Y~{N@}nX|lMYs<3vYXu`Vz&s{&(8L?b7U6@*9Zl$(E?Sw{qA^w2n7g$ z@#g)!>v<2n;0I6m!W;hZh)=xY7ti>{JO1&IkG$k3Px;DQ{_>d5yyiF0`ObU(^PmsC z=tocb(wqMDs87A>SI_#^yZ-gCkG2{`R=fz3z9<``-Kh_rMRn@P|+Q;v4_? z$WOlVm(Tp>JOBC6kG}M$PyOm!|N7X^zV^4z{qB4J``{11|Mmu{OC`=`q$6? z_J{BbRCmApnK%Gun0Ws9XQEa0Q1krzzlRBsZvQuc7<2^|AX_D2XEG3f2XTN1(FGRJ zckB^?v}6Gm=zs*6fqx?cJy2vQkqbZ22Q^1xAO=(W$6*(N06dUc6QKZOr48CZT^cxp zdlL+K`1h&8n+fa8j_=IWWZce2D{g-nw zkOKoyZ~GMljCE2$FoYFRgh!}$sRo5+h&2fC16Fl$D1lv6m=Mw>1PiEWLI8$5s1RZ} zc4c^md>9vtaa3f02qQ3vWzchd|nK+1vZ~%67h?@3^ihu~1W)P@DiG;Xm#-;|Wh>C&+0FM}pjEE87#R1GvYpU1> z78nA!unV`~00n??Uw{AuZ~-E43&OYnaiD4hpjQ$YU|7WgdJ=$RwE@O50UwYAx{wPi zU;ubFWD5|C5C8()D1e`)0S;h}#5j$nrVv|z0Hu%%!pH&$Fjxnn2TJ&iefW<}u}<%F z0+J93{X_z;C=k%pPBZoh1a(lx)l-W=1`x(?1My((WRUxoiWSvQ25C(u5OPXT0Ve=V z1gViHpa==&Z47y7s;CGciIOT=5SDh5Jp~D||Ar!0xCP+F2SF$UCiikzr46{Ck4g{% z+dvHO=37HKh9($l2$6=tP+~^rT*5GF1^`$-paYOKa7kAX90+kaa8)sI3+m`tOemI@ z<&_9=0eiTQO!WgyIaa`6bS7AbYzUBgi4-KcZ)KoqyA)Ia*HI+!Z)2co$F^_AqX@9Z zUIgio3wdS&K?Vegid?WuJOv4s*h?j827nm>{B#16Ig&nA0kKpD#szK_6=9|s0lq|9 z1(BJ5d6^YZm?MxVqm>AUiJ8GPR}m477bjq-6ASQ1n@$x|YEP&w&Ku1Jy=*-OFHWb2ep#$r(omQj%~S1bmh0&!5Pd661g5!OkC z?gnYZX>NKFjo4so0)dqHd5u2cqXgk@4rdSnxBwuq4TK;NE6`dFz-&VbpanX28Kx&X z=2}0R147`GZfOH{sam^OrUSv9fQM=>z*Sgc1h)VJs@4I*5DeOQpm-V-Br0f(U{t-N z2)-#$YJeq-IaE)!QInaH0+CTF|N3!(HV}R4nIbH$= zumNjUyWj&gC9NVrux5$_4A=+iNP=9Z07j^AxR#~^rghM|kJ4(bBoi?L{sqgVw&6$y;6h+|-gG8;FX+HZ(R ziL4l5n$@SIYHTG*xrBR8^ZF3c)&(~(hex}#BQ~-F3$?OZU=ZN1R!fCi5Cbq6TdAvB zY#WcYOSWSu1@?K55b(Rd`=2GawoZr;F6aZy5T|^Qg>gH#&MOl+E3a>w2r(&4J*Ap` z%W&rkxDeWB*89Dh|M_MI5KRpkiIIDWLOW(Q8BCT7sfenw>kGcz>JXsDyqnRmKv=p8 z`>zA>v%Oa%tkCb3FDVzs&%Ps)M^ zjHLdxzyJ)z53CIvZ~;r)#&KZ3#0z+DrUwa7RWPW!ADqW95xp~t0;7qq{l>T8s=eXM z!VsFFB8egv|D~FIjKcs>sObBs0s+WE>=92Ya4$Gk1ggJG+fe?yu-R6nPfW!lhD@#}P@-QG35}Y|?&ZFjo3kkF zWF}y$IXAjOs%|3KgH5P){rUk;Tfl0TzX;)6AT6ar${W$ zcZd+^|JK3xeA7`9!hO8Uz{H7<49xs2%rRR9y*!GCI7^@jxr=JAiR#Oc>dYJJr!?8V ziJGmwL{JiHY^TZ)NUPNAT)L$DX{+jw153u>$%_f`r0o37uIhIHfg&JCE-I9=Elq0oQ4&<7+5 zT?oa)fPfqDa6CV+4O2@58bHwp0cr$5+ghx@)LH;sN!UZM0@*yuhTYu} z|AE+8LYXF@sbqkNy&O~}Fino#)7*P?)})pe<|$pqet)-~Y`{?@CwucHiR*n-alVI0#?#wgmeX!N3p#2#^3E*aP1= zusgs5y8r?o?sCz+5N2u9t!vZ#+fjI>R3DxMm!(~6+k^`6;VVE4?)lepNpvZGRoty` z#E@9RAOm(OZ!)*z9H0QX@NUC-mz(U}RxVlzeh`T8PkMrp+2oK0mE~JLii}{9#Z{?e z(5KmC-~J3??ZgNKg{@our-qug;Gy<915Ub@2a7z#i|8N5+ z*K4KlZkYT6)M?lCcvX)cs|#VYQELPBJYrgvq$4MA0%rqeHDUw$=t*z`P#Xg63F^qZ z+)s(gynujUpktsO>P1drUs$|XzUyUns;-n=RWJtSO$LoS5T*6&#;$Bs;JB_S-=^u+ zi%P@teVEBruDdktj@wbfj_t_~Q`PwxgW zaq`##LQveizVTJj$W_73{rAc6%+_adf*gPHRN?Vd0rCqW@)LovW}yKw{|JvLU-NvK z*;m2x3X!8D|CD<@C}Z98Hb3+{QCtt66$Bs*IDY9a(6JIhrx!gI9iX1_O!QXYJ9|g- zSHJaK-}PSq^YQOeu-}Y|*_HZBfazFQUU-x!@_jsT8dcXI4 z-}iq1_kbVxfdp@l0W&BU-_1Q`Iw*in!ov+-}#>Z z`Jf;AqCfhiU;3th`lz4!s=xZI-}y`X)o&LC|G?6tVe-unK@xBX zmv9M(5Ixahom1Ww{0|Tn01PBp(BMIY2^B76 zXfTZ$HE9r{ff%LX#fC^OZM=j;2}Y11MJ_Z`hRH~j7{?sok`g2Z9n7vYw6MbF&6^>l z6x1Rj=gx!_2;EH3#O2W;5QGR3Mg-|d4TL6qeA>mvjj0Q-D8OkGL&raux5sY2?iBrn}IA6;Z$w>9K5F6c|v zCfU{@Jwd_Ovu6ip;XcL%-uf>j4SdjLK-4VYVVJOjqHaG3lW=dK6|}ML76gey%7yS4 z(j~ryKma0`1_!!ehiv>~YXu-UkZ&XwEYv25_B6EdMjUh0aYr6|^zla^gA{T|A_J&k zCE13w?UF-$BWTG>oWv{&Lk>9vw<3>A&a~w+M2Z6-Aed00EebGGL>KrllK`U#k|Kiw zHjp73@eVRV4?PfA5IxZd01Gtu^fIde1KSL0Fay@){{sYIfMBN1kpfh}%Z3U(FvnlC z(PKcEm{C*FH3ul@3p3rqkVuiF;1JS-HuxbIrxa2E2p$kK$bleIr1T;d?L%pRQfV9$ zRbq=Z_E=<-Rd!isn|1bCgT_cwNJKcok|5rC+Z8E`Vja>r!HcadEB6V4%;QA zT*L^BbhTQSJBGG!mue}x;ByEg>;~FfniHyff-Oo6x(mPsZ@P(Fe%QdNA{rOFaE080 z>t2}>-qTLPwJ@A<$r*Rt@4}0au4FAB56tw_Q4dOWg9IZiumwNAsN}da@4I!@uP#0C z+r7QQcIleXqFxG&lKs{eF~06~g81+uS2i){{lC8%6IpuA_ijE+?O*o(d+@^-e|+-G zN4bgvNPxry_D2{)`wFJ@+YI&DFTs7CgQkCd`w?j=XhhVne?A+DA%cSjf*6n^9w7)4 zs$``rsR3zKFhm8dmOu*HW1tGSt0xA@-0tVrd&qs_3`3 zAxLhOL&ybmfdGUk;1;4%0s?aJfnVsr2KE^QHeyl~gCu|#yPzW&5kiP0T!0YF&;g2w zA%eT%2Lf~I<1nORkR$*jjgI<7BY{DPz8OFlgv@~uJjv`fe>-S|tj{|M8U#grs1TLs(0ILzA9B|F15&0v{7UxU>NedMg9uVxyG>SRYNP+btlaeupmAUp~(Nx;UOj(Zhs^rDtJaBeVy5rgN6=`O1s40IQ% zUgT*fm9+Y2yl8b>U+^{ttv!nias>=J62k{P@TNgrbtz~{b0O56j&pm_3uY{MQapjr zg6619A?(6)$YqrQbPIqCNLQA0gl`U_)4bZ^V8y)1a5l1u$zfdOc{fPz8iOZ{kA-X- zx8MPOIY|uF+KR7<|MM^|9RRmoaUy3Jq#pg=V^k*iF~YP7f-X|85^Bw3SeTKha_KkJ#OhpWOEj>84BrB$th zPEK1*phLcvfYuF!^GszEfc!NLjMi#^%{2xEjRTGHa*JYNfN&0qsF}VO=GV zRt9C!(>Byw1QrCL**pQ9!89v`ZHFbrK?Z1;CeXMm5Wv78fK1-Du&)m6ZhH9XV}ptC z1^6tNxhHO2|0fUfFA4#n7sYEF7y(Z+dTtaZGxXkihj03QjU@682h1^f&_8dWqa z5$xibPS=Cu;u!=H-yH81ZGywE<10>TW8s|Xe6IudD z!2LlK|9A)_$Z$zV8%dxQVQD8kA`-yX;QDY4Skp&LYkosv?g5Pg!8T3Tq#p=PWg37K zGQattC+zf{*!f>w&WgUsmuA_;SuRpLwAdzXwYBhZ`8e!$Cf?X=A?jKIIg9doxh1fa z_RF?sk`56-JU6KrxEU20BS3zOzkw5hrU5bv7@158r&9{R^vHlBYrjEYzyh&>2MjqM z7`uc!IfDQOY#WFXoE)C`fGyxRrW+Y0Kse;tur3<9-m$2MnU1{EJ02tge8WNKnYyZT zuveK7J?J_P{D{O6l$fi*qhpm-$&gNo!VcsB5rL#4FenRfreHF{E8~gcN~m%%B?0`u z|5*vb3!E4x1hdDhLp!`fJj_EqBo@o-p30ju-Qd1~AREt{1VKayMvw&bJBrq;z2S?h zh{+bFfy9AOAgNLUtMaO@={zS}20~!TkKg%IH%aMTu@Ir>%B$zXh`=F2hLct-tKXWmN|9n!y zi#$B6i^0+HfwiMZpb@PAM?kp0;gFb1nm>?39t6Oye7eUel#eaA3JH`Kk+ilT_$M+{ zKp(K9IrPIl{7Ik;N}(J|qAb2i_%oFN#D-uZ$oRbMV+chczo)>o-`fZ^utX)00ID*G zqIt?C@gPh~2r=Nq!y(HA+K5ZU2<4MJf+z#*3mUsBg9vawu{6JfAOodj0_E$LTD+iB z^va_wMe;KaNLaPLFt_zPKw~^XznQk4v^M%X!!Wd$f>cavbU!w%Ns2MSgP_T-aX{&q z6&7T|AuPCL3^@k;u^rI49UK_8xknf)O@i=+9zZ9CSimC8m}Zm}aSNUs@H%58u>aOE zuInhyV;m2NObFT(&a>#O0Z_mB(n!X9NUYN?99#lwgfRVsOm;L$i~tj?Q^}-&j&Lgq zn%qLa=uH@8#_KFk`S4C{w7^y&xT362`@B#5%umH*%8;-bpTwG2<4;{=AODfHyF4p1 zhycGVs!Lb{rot+$R2mNgv`Qni+M7M362*fUOHT7NCNTtv2+^&w%2cVoSTh^9ygXhb zqQI=nRz!$Ei=h+snYGlu67WmB1kC6oM4DoR3SdjKKu63nNVhr8#ym~b+|AjHOrG4V zPO(h-#5g%r$7lN;i}Ma_n8^e*O$x9$FZD<}d4VaNK*PDr!MRf6c}EYd9si3f5EXn# z2)ns0Jqs^&Pk!rxQiy|n+d+NH910jfoear@>;MEP)IxPgql-gUiODS0%;+4kjf~9+ zxi)_E(u#XR72Hll+J=;r(v$4QNF~Q5&=X)Nuc@$3IE|#w>OuvK#)`QBORcyMh|;V3 zPyM`AT+LNo-Bo5;t3zA}|5S(wNQ6gltGJTNA$YTqBBDen1H*Ka0|={@Vgy9^(Uh=6 z4y`l=`ov6}&_~n6O5BJ~^t=k)#11V8;OMHZdPMkDPS$5h5u<<5^Ft^X#Sm?up~XdBa1 zbrU&ah8|NfEd@sij4|{&+1N@CJ2lNRCBa<)*^^x`)~vt*>51P8*%2|6M3u0%H^6;+4*)XtPlIbB%Zx+tFYT8^BMl?6bxF#;R-0Ui@u_QC~Kr9)o*Tfhxm!5v)I z@YQVz*2;U=mwKt3GCeLZ1H_6ANXW%#Ngw{vspxA6tW-1v3d?Tgn$K;^3RNJb+EB9u zfOJ(?qbkv}T3pwCDazH2u!`Lcz1M>HJR*AC#a)E|=~o<;AOFKWh=4Vr`l%@(C7FR_ z*qwMaha)9I9~AY#Sv9NFPiX zZDcKHvV+TC;6Hjt!V+qseds zkq5ZR{HsTd)UBH1NxFr}v5jB}M&P(5Tp=D}A}(ShK8oN4iCsj*U)!3K5YWn7B6-bR zsN20nfQ?^W2&~LR+wYjhLl zrAO^tIz9jjqbQf~JrtMQIa2KZB0(fhI}LCY*gjM*oI+1C!Jm2vQ4-?&=;^X z3dy<7kEoldz=0n?U^^}4MFvlTj2!~0TI>xPF=Y%D)?`SX&RQL=+MHu!hT9cpVvupBC*J+kFybr9OXMp^K(xfeqxY zfj+aC;q+DH<$YLCb>wAKQfrpv>BZRUh0;srW-1**-E0nv3}u7>Wt7P2s7>2!dN81Q zWtvq8&%Ehcj#IN`)aisr7uKW|92lP-PK2BtWXOVt zkYKjvP*|$So~hR6=Y4DOxKN}g%j#$=8S;r|ELVW8vbjm^xpiP%);?biCj>ojWoRZeY~ zM@(vMNu}5eKDaei2>3)y7(wUiF1lj;+7~3#=4^_Cz|?6TVY&T3fh_Ay1xNUFHnOel z@ZRC>KI$C2Zn;*ipR1H8lh*zAQk>^$xo(v^;| zjDpE_6H3JJ;D~6kJY6Qp7EyDP3St_Jh)R)G2!ICY+U@8+L~M@!-KVtY)Mg03ehP_U zPODyIzH&k6Ug;0C;ersx=$+(`sN~0N=B@p0R8}Jie5i>W4zMLzjF3BUJnrV)j`eil zcH{x*)^1OFZf!(JqsvFQF>?O`V*l(;(}yI|$jB@+Pt1gP+a%v$R!IQenoQzG=Jj-G zly2{m>X4vr8H#4#8HG^jl^nDsH3z28Fv8T!513kkPG zZ~)Rg&wjo`8|hnv3|Pw_cRluKNrXZ3V~>7H@GI3ZA-??>}?yh(?*WACqk#N`(zpVxSV3g{Ns7=cw|bzxH}L$h?U-*g5oUA02> zG{_bR;wo>YJy$<+Qj<}#@6oS{N=|PnPZwB4kRkOMG(1~%R(~^R z&ovfrAhS1QH=AN#gfluegI){L9Z1INQTQ(Xg6Zr)U6_e47(9dsxQ0{x9Y;FG0XSNL zX-`de>!nlDe?!tI{r{cIWUq}mB`bnBP%x1Exf8j8Kaqk3(1G^_gYP&bs2f9tb8P{P zRM)Wpz#;ttfPmUk!#-Nr=-1yd%9ohr0r2Ml9q7mrQA3Zj5D>_U<1Y&18GiNth0k(p zuB$B#80WnMh$ch^g4qQG*FXS6AOsl}r^rApAarEYqeLObi~tA$S#S{}1s)D3d?{)2 zixG_&nQ7}Y(7=a;0J_NVu^=UpD++qx81PX^A0OB>Ky1>5g%2URWP$(!3}wU)I+PAs z8Dy8wh%1DC`B=b5uBsZ7Y}4>lVFITUBIeRz;H<_kIbvw}>8l3;xM+hY_=rGgfua+1 zU6o0MVXv%45&z@>(qV~0xj$HR5!i$R;a^fz&Wyq1ZIKO+Ig>7J`ZVg)s#mja?fNzB z*s^ESu5J4^?%cX}^X~2YH}K%XhZ8Su{5W#sR2WS%@n{jF63r`=Hq)FDi4%~xV60%` zI&?@U5+On%sf@zq;1@mm{)juq2+~V13NLBWqA0EpUAlxsFCzURf{_~i8EBv(`f+AR ze+e#lAcPGjqy~Qx9-;;lu$AFnec4Sy0(=UQp`C&lm6wQN>4`^QbogbM9&?gB*W!6k zU{nPpkd)ZnBm>6x$a*VIf*ye<$Os(?;?;OtFFu%+5eF1eB*Zp5P{d4SoDE4o?0Ql$pKsGK`dJDnS+kAGweX1s8!Kl4Vy2lZ}*AN{LNg3K4@R zTm%5Ii%hrxA(ESL=AZyGU1o_9Sv&mlrVnoYG!YQkYzn7ZsM+G!Pm%!|XQ)qN>Vr03 z@)8V13jh=91!oNcYcR8F)6$K>JSt42v4ZN$W<-E$LkqqxijzVbq$%pGT;5U&tRY;q z#jQ7N>I+L<<_Xd;!@6114l$i}0iPL#^r)2aX2XJ58ii2hFTrSY!?O-@GRy;*5Y(Fimpb$c445{!3e+|aj|BuDaB0!4z%^m1S4O#% zW&f8paj<;vAT3w9Fb?9LH2^W@a?Aq{d_m@K#BWaJP-z@#DhyXFC-*eeQA<5F)m2-4 zHP%^cy*1Zed;N8BRj3hNj*lb~!D$Dy2MHr&yr|F^imaXE0U4H&2zBWpGWT<8P@xhR ziSWHh89T0~h9QPn!5I>X|A$c;h8!~aA%DM6vgYe=Qu*%HzMMrMiBsC{N81^eRu2`kwG@@&EM8R z$Or4O3-;M(Zws_4W$+~q%&f2$X?<`Ueh76z*^3N0+z#pq9c?#hM1Zlr+og|8QZp}-0#vpZYezShRA%j0%eCCQi%9SCDlh zTL@4Wwn)IG))xZ~{=y{_&|g>VMJo%|DI-S_h7EA=K3srd2pO=&|9l964eC%B9@NMW ziHHpsh~NrRNB}NMmYx+T5q=^dpA88Sj2!MT0|zV3FJhJ|T$E6I3HV}q7C?*&wy-D| zx!wynxC;!X2Luc&A_z197Q?(yiAKC02Mz|oVPM03#CSlzB7;CQa^QY?nSd?g*uWm1 zW&?Y~$RKz~n(KY+i41gs1Xc2dQb?+UP%P9Nap6ZoY~h1a5CIV{Xc@54vj3L0yd^Gk zsmopRvX{R6B`}Fo1u75|jif2&F^P#x((ZMdPy4N^FpE=-_%rD12Xv_ujEe(-5pm}lxZBL#dq%?SKdjT8<=$=KYp zowIZ$JJlJNfA%w>Zq%nkPjiKN(i5T#MNLy4kWGU&l%uBE0!I}kvW!gBqa8J=I4}Cn z_Qg;(AXTVJ_K8x9!t|Ik4JJ-=s?(kFw5LA(DNutd)S(i!sJ&!JAdQMs5p<-UN_FZw zby!iXi8P;3#Trr)_|&a(wX0tJDp5HY;sy4C&a480BY45U40o)9^j9$mc1-yGppIn za<;Rc)vWwl`dQz^VF4BxElEL;)U8Q`j=Ri&X;CZN+0wSQw!JNGbF16k^0v3W{Vi~V zE8O7{x46bVE^?Er+~qR2xz2qqbfYWX=~B14*1axvv#Z_ha<{wQ{VsUJE8g*vx4g3< zzz1S$-u1G#z3zQ4eB&$M&k_I_J%H6}=d0iS^0&YK{V#w6JT(e%2^fReKr02T-~}_d z!47^fgvZN*ARy$b5xy{nGpykabGXBLg;QlcEaDN9xWpztG5?CWc7^s$HN`G|F^pp@ z;~ArP#WH9yjdQHy9rL)yKKAY!Mf>9+6S>GnJ~EO=YY;Ccxyep`GL)k%<)LD$hEu*W zmb0woEpvG|S+#JN!z|`8lex@ACh!hUYvwhxxy^2V^N1%PERDjs&UU^tp7U&83pfnN zdj2z@11;!5>y`jD$%Q)!t>{HFy3vl_D+Pr0lt)v#(w4q7rhBRdM=|5Dnf^4WLoMo2 zAIDK5BsHp2t?E^?`lG`TW2<8=>siyf(JK&It#hsGUGsX(U+y)qgDvb~`?yJ{BsQ{> zt?XrEc!NS_HngKH?P;6W2rQ;HwzIA6ZA(`Q*XB03!~ZSrap#t479lsf)2;4x2bQV7 zcs9G^E$?~LTc}+q7dCKlMKIU9-~RqLz^OJ$F!dn60Y5mx6RvRLY=Hmdkk?FD=x z0%LY|1-?*B%Y!cTUQWP$368F{)68$e-iuzd-9jO;h+2*Wap+dRIxQV#Wu;z00|?%w z1Dg8ux%hdr4?xvyEszbja+LxIU^3R@4sgdZDm6~LJKo=#p1gk)?>q<2y%vSnY0|tk zacGxB^RD-G7QQu3^xBf4Dh0*!ouqyz>g4~fg#QpWJ}ws^fCY};SH;5pqgH*qZ!)jX zhdyEQch`J+Dn;3)qh9W|pSBj_2=q<5fEm8;{qI|l!U6mu_)=^R^-2Ky$xqZI{M?lS zz3K)ymXv*!qU>f(i!ET(^l1eA6~NN5h8FZfg~bIhI9+4_gYh|4(NRhGt;Pxj!_D2E z1~S{N!JKLE!SB_CnfTtjxeEloK&K3p_h=u$Kp$}EK`;=*85PHbZQX2SRQh#H2&PHF zlwWBm0ItzSWUs19rJfSNU z!Iofy3lg4j{F?ZY-ABC-N9~gWP=sr(1`yVa_&wIvoZSo>Au*%`ANFB-Gy&&1p$@Pi zNbF$__Mliq+7D#nUfqIRl?GWDpi11@Xz)fEdJhk@z!w$4$;_VJ`Jl~oUmXr3u<47; zs76Sz-D!ZB1m;j7>J%c*p+*n}XdKh~B-*`f;cHCd&`6^~452r^pf>2DX(S^sZk{Cq z6*Jb;UC3h6P}mpoftfrbS66K;X*%v9+1~0%GF&^ZU4O2K} zgf{^|6pTR`L}VFA58zaQM2>+pu?7&9!fNb^GMdIZE+QemQ=-iT7VVQ1T!3nEqG&u^ zOwH3x4Z%I-L~mQVF)qEF_KI%$Ch zfB;WURTm89gxLZG4CPSf(*X3rO>)2mnBg9|ooXfJCUwA9?j90(h=ytnq)L8eE3uOe)znNurA>YSAHbABO@Lm4Wr}3w1)yLbIA-W^1^{Ya z^_k2r;KCJn4+pfRDAmOl@c%)2A*CmNBLYZeWLni193=s4=4VF5O{!petVK$qB~Iel zTb`z8?#>FSWiaMr{-7NQb>?249$Chv4TX92s_!KA5TzUdD1U(4Wtg+eJaxFe0?X@;Va z7%nPj;NvU`rxJ9*E(FaF*r=E?V3|N^oVt-ex(h(Ylyj~Wgvx+yx+$fK0O^eprZVY$ zx=cELC$wr<6x`0=j3)}92#=V6BA5XgkiqMGNB{^=b0C65DuM|tNo>q0YItPl@uxNV zr}rEL8ac|j-TxX`SSXw%K?p$RS=di52m?F<>#z_42b`v2t;`z%O)e}z2sl8u9NYX1 zky9iA#rjW*ILZw?Kmwd5E&xq6W&|d}sG7cNCSE{e@B+gULX!XsMsxrKBtf}=(#u+G z6ykusHmnQiOv3I91Z=Dw{QwSxn22`C3N&mM$}36rj1d(q6s3t)0RWl&fX?Y=rD$U* z`Y36bBWrl+t7L2kaDW5EKw%`UQydst-i7mtg`ezzLg~R$?gbAZ&}q6M5CG~oVyN6A zfSuN@+Lpr0rU@@pEChV4%~W7r21EJXTiJ3f(6AzX5=<|Iz;>$9*zRl#EI`4AEz+ik zF9d-Ml>frlf`BgYMCq;V3gqWaQf?6SLJ)|A1B5Q?7V0+wuH-WAfF{aa!6L~3rxNTV zMi_+ngg_=Sq1E~c(K0OydSqVo-2N?&uVTG zXS2W z(&ql=MmXPQybGOiKmmi$vlhXvoSK~o=g_iZ5nQFJq8;y|qYZ@E5d6je{v#S{NsL-= zn0$nz$lpiY%Lqe>6!I=j?7+Eg3+s9yI{JVGpPj|D>^1-cJrRKWsGueJa6W2)4Lq%4 z+5asKFIGmhqtj?@M?SC;goF;19?vlGu1N4jgdKCPZQH6AgfB{Q+#eJ!Z8OyGn zjN%4QsT7AIMqNesa6qgW(Bmrc5};WkB{4*d@%=^14|JNYJeKk1X*{VNHe3qp60u#t z>a9883d_I@2TS#;gsWUCKvJNregDoa6ncvNTPCNI4X#KgcKyq z42J~2?93qz-VmHFfS#lI?(%-2uXsAoc-%;PRBQ2M#EEdm2%JFuI-XNP6}tkk(&Zq$ zy73N=OuYsHpeCIZouM(w;{rnOHrOD@IA8)c=+5Nl;zi@DR-HoJg$EmoD*JCq{{Mvo z;zBTVr;8RPH?9;U1F|+A-pF1pw1B`15H0{{T{mVaI}ZWS(Puy>Z1}1~WoB)C(xU^9 zR1``m4@WdSo9f-RaF98#SlFWpYn5Hu=a2r$I|r};vvFE+^fDUcN-P$iJ{v+u1`nWg zTySqV11ALM0MO+u!eSBT{mi@LgtF*Tj;N|9kynP0?!I7j0|$Hgr5>eZg|KsIqa zlk}Y8g&A9IWVqk}Km{+KwS)Px`UW$ML;^9FhWjov0F=S|%EqZ!Fhz4Iutu{;LZ2R0 zvjO|=TXB3tzKY>Cr%XR+EoOv5zw10thAX!iV($edlK-SggM<%g zF+2?MUw_u zcu8z;3YbiGi&eD}G=&N?qQ0h z$a$UUx)yd!7i&xnuwhT=4_xzV1uK2(^*A54D(iN;rW48blkV{@121n}n4&0^Fg1S= zWVkb2?6c$9Wn!m}D@Nj{j3EfSwhJ$`jkVZK*QHPtQXvU)X>jcjg#XbowzfRaH+Cb@ z5BN3&F!316I6CqIjY~NZu=Ia2@`^XOUNf+SN_R=GaCZ~x@&REc8m}-?I9*P05411_ zgIPfyx6Rb2kPCUx7@S_v^G|$5D1Q)Ef3#L#m5W>QD;lty&oY1eH>2wpfCICDd&db7 z&KQIUL$=36R)D5&`Z3GKV6TgVr!s`cg@nf|VB7Z=2Z5DgczK&ThkF_~@3aB5q*N$6 z$Qm`FZfr}oAMCney?B|sO99NfUgoZ#hd4>af!Fc+7#hK? z#J~z{zy-KAQ$^9Pw`A1mg*=KiPIp>D0p@IDbVjiBx3yL3c>j3p@%DTh#I}b!Od#HH zXRtVH`Ccdaj;BVfcli{zdcX&#I0tIM;(H2HGQ3Trc*6x07km#dfChlUeY&t}JN8SZ zJDvRK1yuV67ywy7^3Zy3x3?&3XZ61mdORmJs&{P?fMroOy3IG(qw|P>KS2d}2z=s= zVW8(E3_Z~k{Rs5$Y2Y`gYq&=E`)W_~MbE2T2{x;{!18(XtK+T&V@8?)f!BY%tvfc1 z2Eo^t{nx{^#-mZNUv`+|!kwD^qZBKQZ<2j&1Kfvjm8VW7H^IJ=sM&Y+rFuQZv;YXu zlfA7*Lg{S(e`=XeeK7DI_LSQ@50)zsA0(0D$003b^7C`zaN%#RPw{dcL-NC6I>N$**!IOp zh#Gw0@?7-j;D?DVD;eOHC`1rfQ$p}z;BZzR*aktqn9%NygQpu?INTOkk-!O9w2+}K zHQXfI66Bt)!Rf=L9a3(9&WqweT|ijm{<4A4uDw8*T}a81+1bxhRcq$a`7{w<_j4ET zuPuY)_*ftp7jysu8|?C1kiiBWd=SD2C7h7L3N5@4!wfatki!l={1C(tMI4dD5=}f2 z#S~Rsk;NACD*+NJG^*f)L{6)M3`kC>0RN#XV00ok4O_S^NVax(>$J^gy3qz~W4 z20ER!;U?Yi-(t_j?Kh%7oi?m@3TWhc3v}349BSgxsNR6uG;J7(8 zT0ku?u_@Cb|77b^Cq8d^(jnwxQ$n!I8j6TZJO{-Jt|Bg239uyyA+*lGdI(0j`H*C= zQN1`jtcVzJ8191TL>=sk!VY7NF#zcdlCsv`%q$@#JB5fBB45p~)YV*ljhIDiqK!(- ze*NOhUxRZKELPR29?nFF&joIcb=AWbdX%Iq zWGEU!(sbP^2GJl2cZm(6+_~RL#Z72DK5oT!vTwQG#%tH)U6#^p^$elg27~DVqhT8? z79yS@Qd)+OyiCs1cY8E&&6k_Sjo8XycD8Qeetigmzf$&cV3TeFr zuNe8{m0zCu=AC~Y`sk&fp8tA_L)Q4?)5bVqk%So8F~rXSM%j3M)ix-u)QPyoN-UYu z((aqV6cg*;{rZ{n>h9LvXxHms+*E)HN!0%Llpr{ufSMCQo$}SQQPHhja7$D+Muj#2 zzO6Hj(;0+pQVQKvuyDOl)T#%rWsKBKCVu?yL z->&?%I9r^ndTCVS8rj%JH@*>$ag^g6TSNjAL_i}Q%U(o8hP{L!ViE^P8jvu=KBST4 zWFRC-18;OhL{9E;P5%I+%xD(B%n9ypcEh9t(0D?oJ!BAVqseqaU>+#Gsg$ZaTiBjB zy94SajIK;Vy~f5v)U+~ePcs|(dT1vhEO0eKOk%4dr@FxDM1D*ZCR`{W6r2r;5QovA zed2H!o2*bj$4kgGWf@5$XaSRCB%Uo7G#&l5?gM!WO-fcqLb72lSy`N-QJM&xWAaN< zpLu2%s};*$_Q*INJf&+OIW-^@po*Q7NXsrW%U~w3YyHdTI4>ByZ8~mW+62SyY8fXw zeiWo373oMxT2hmqw4{j$?RJ(MtHZtgIKM7a5`fN>=yd*+W8KsRF$ZkjzU5Z2B!!2z7^)Q$k479wu z7A^F`1p`P|t`5g5plyy(gOHsHNBC1_$ZjF5ommh{#?&2%Hkn@hn+a3W71mu7oJ^HL zbN{9|F&?L&RFc8(Y|_?24oPNW*{nEgmfqY6L989f0e9A70Ue0eBqFS8TfBQ21vrJY z84W0%UjKuG0q5>`1-L;pZ5xvVZ?gq0pe#x$Twx1e7{eLX@P;#d(=tea3lShgOI_-{ zNi3oQA(lV|6mfz`;L*g7_;85Lpd&;u0Yi$_?X?EN0&OgKAg8pNX00)L0FZvS>`q%o^24LB6{;(&+tcE7Gz+`aS*|Mg%X0dUYP|J zpmJkSGTmWt01Q-K08c!aBnc)YBsvI>Kpx=OCMp&e1xT}Gv9TLMWVc6POf;3BoGH`^ zIu2=0!fpyHDJ=}+FMY`K1s1RaZ5(+acOLZyxO4*^B*CnWy8#H~Oo0px!m$Xv=&R8T zhW`yT=CqySrjc;)63DFAoe;3V1#IC9NEcxx!Po!=v=Z%SgMrVz<^ZUBq8dH$KnDs~ zbqOD7XLWlh7K$q2LrElH`Ie>s#pEG(Nyx`V6_;XQu zFZ^wcmnLieLF~T+hLnej0{emeHe{c&E=d3Jgx7!#YDa`pFF*U)NCHO*VQSw81K%Lw zA6rC^d%Qw6Fzr8nnZAJZ>=VPRjKc=?jgJG{{GvX}5B!8L2ZCjTBBDz8&-irVnB47k zdfg(n-u<*KTxc>w!Pq66< z5-|IIpxAQmgs>>&-VFhL4?6e?=FVyWV-Nm_PXXWWm;!GbU@vVr!1&w`>LMZo?{8^r z$pG4~34LM5G-9sw?U}mH3%?Ky!%z&zkPMq=3=lyPMj#Q)fD3R0#(;wi5jLzk3x@yqkqBs;P!Y{?P7oge6MK^782?*{#}+XYQ&9>C zAa1rv7SlAt(a^@)|1<-x|^ynXU_sV2A3(*M6}bpAjG3sxHjY8pREn zU{N8zY9AeO0z_>&>Tw&Ps1gfO9Dj!hGGG;nr6Ymy8^Mtm(GkyRDWeW4BN6E)i=Y4; zU?Trz3-q8&EI=3E(Ix&dBA5dc8?gctaS^Ffbq28?RWd8jaTaTlqXqyHopKN|V4$|8 z+{#cb*OD#U(k*7uC!Ok2 zF&C3D8`Ci#6EZ!6Z3ZqfE5ve!5H43|FipfSm1j1TD>HG&EfYy2E7LSj6E#y)HCOYE zK!c-L(}+GVE=53;5T-Meha+sDG~E)m+|oAA2{waMIERxsi_Bk(P; z?Fkp=0u0KnIjS3)Dal6hRYIK^K%k8`MD`6hb3ZLMN0$ zE7U?S6hkvqLpPK|JJdrz6huQ*L`RfFOVmV96h%{1MgLcnMO)NGUlc}TR7Pi%Mr+hY zZxly!R7ZD|M|;#qe-ucAR7i)ENQ=}+j}%FhR7sbVNt@J3pA<@?R7$6mN~_dLuM|tO zR7-xN;cR8HrVPV3Z8?-Wn-R8RMm zPy5tQ{}fOIRZs_&Pz%*i4;4`pRZ$m}Q5)4!9~Dv~RZ=IFQY+O`FBMZWRZ};WQ#;jD zKNVC%Ra8fnR7=%VPZd>DRaIA&Ra@0nUlmqkRaR$}R%_K(ZxvT_RabYFS9{f0e-&7R zRal3WSc}zIj}=*yRauvnS)0{apA}l8Ra&Q&TK}unTCWvbvsGKSm0P>jTfY@t!&O|z zm0Zi!T+bC<(^Xy9m0jD_UEdX6<5fT9RYR^|%3Ka#E0A9Im0#ad3hotP+p}LshRq5V zI0qJC6ILy&uwd_tGQqSHI^h-xlr~?W7cTZ;M!xAq!TMHWPD2JYW?zVG1+^WlvKOW_DsH=XrUAApk*ti4)P#k$F^qc!WC+v z7V=<_+CXmQc4XIcZp*epu%Hc2c0t%+ZvXf8d0y6rus{yl06vXC4$>2mtl=7FU}%{M zZ~>-pF(7d_1aS>lMcSZpOGE%7cR>hOakHWt8rKc##Bbpf7bh13uwX?5pm3!YMBKm) zcD4&7RTp{L zV05bi1Ll=rWOsRyH+7G&M6Lh>JeNa2w{Leh$LMxMYFBuXX>(EJa*-Dc?mz`RffF|2 zeY=)?Da3r&mw87-eMx11JtJz3(~hzhMaTdJY6?U~KoZ{YLGS<;W`Tk$I2Pa*kxs#a zDfkrd7C2hLZSf#T>>z9@xE0oxB>(cDf@k3rem6f<*bb1WZ7DbwFt>RGmqGr329P0i z0l))jzylaW0APT0>qHe`zkmbi(#SbHY~6^z$=IiwA&0egeQ6C5{R3Uof;(B+ObxnqGt$~j#Mh+rbiWdiZr8h(B*)`PQPZ1Xs2Ec>0ANfz+ALPBAm^^%-xx?%`gY5m|D*jgtNdPDj;q%Rsn z4BBd~*qBMgwnKWaF$ASm8X^K)MTj?;QDmqidU$I9r^gVvGxwR9yX$@$w1s*Z()x{z zo0*(CsF8@7clnJ7d#o$Pk(nAr=wPlrq^x_}GtjzpS9uv^8${fime2c%Hw3l|8pX{Z^AEIeD_^RaD6!z*Pl zB0EAf7;{A%A^!$=n@#(=v&F`4W8KxqFJ#stPE1@02TqJ6rl|65F)sM4FNy`5MkGOq%Puc*Abx)Rp$T@ z;p@(>+5eq=*?&FPlU=fbqYToJ5f(w&{V*Z&FxMx61f1R3%|OGW0NJ;F4GHOPvVGUt z(1EXgK{U8!jiAMKq7G&O6h^w8+qt|$d!Aif#d*0CPQlhIR#{XpbO=|16K1zv=%#ydUDq(HujpSFD3X3Xp!ZWOnRNKJ+c$6fnO>`~d5d#`XI?=#Q2T zy0G&*m!d}>g+brw>tgp;Bk!FaE`B(3;f;>ApexR zK=j>P06ZV>k6yvEVxmnUls!J=$@mVe9>P^8yo=iEC${|AzzcGg_yGcdz=1^Ms7R$s z6)Hbo{>&LNkj|eg1O;Ak2$7&4QwdXfdRVbyvSe67np}0wgA$W0Te@uNhDNd?F8?=n z>3qr3rq-Ml z{ixXV>e|muY>Bp1mGUXrxpX7WI5x$lAQ~!P9`)(TkCciY*ea`GiY;3?8Ow6Ys_@QN zfqNbHRJch1OM{S6DGmD=bJVzXD`M@KxiJ7NY&lu8#z}E%mTjyl>rxbK0U!`mR}{gE z#g@{4QbMHVl1xB?bYc<-E)~m6LPQ4o^AnQPsE#s%JM&2<%sd&$B@*{Z?3*|D zUR{0j?d8uC9P_9>{R2z}CR*Q~dnHs+5f_Z0Af9}T1W@3C37$Ygei7tW*Z(QBu%W~e zu()yrg%#N`ODA%*G=(d(oH$Dz9#(|KhIzfzhAgM}Mo=BGpeW0UuCzheET_OCODsUn z0*f6jfieq^EFEE?jyKNI3Wmg0Q9+efUWuiB#EAgJ2PgaX5tkR z8;7asMVrZ-iKdz}aPp-Rf6$=9h#_ra4Gp#}Q;nc*?G)x@$QhRw9e!%`CJf5Ju%>1M zrBaQOP*J1GSE^L=>7bPogejeNcG@O2XWr%^SEkyzNlSYQk|z-=6e_ArhhDmBq?{-^ zkWhUtiX0Y_X7QydVZOEup)xr|SfIJCV#GkT5sK>{C`tPVRL2M^ssE}ophD3=$|6%u zy1tGXthBGu5T=wyF;xRKld8*SZbp;|E~W9dq{21B5^Ee+tX{>b8?VeDshQ*ww6B`? z{>y7sA>A=O%o(o3&tfn3zi)9zH5yia7hc2p81CKsiqo{b}_DXO0054q0TVWqbwqGFm3+Ad~ulQ+Uu_> z$P(1EsMVm0D$1F*$|<`=@S85K53{5UNpqnB^~|MR3-oGq6a6uZbiZj#Dm3ic#nC0d zvM{s)%@OIkA6B03D%5yooD_rGJz1#m+BrkpCuQw7aYDZmc>l zGsLBmZ8AZ7y`pNfg(^c9L7wzFeDN;xo{ZwL8n_?416juiB#ewv1(nc^K@cL+vF|=Jm_QO0xX&0W0G%=% z@PJf6pCk|=0rzo1fCPkC3Dk$b045MURr22m7FZ=M31kufYv23SC%+MvFo5#mUvZFx zhb3r;LwQ<49YO?!S_z~LcCdqmROFHt(GW&5qLD>R)Co3ZAq#b|P%9>rhg!@66iPgT z06IaWvxNjnPOAtOU10|-9Ki@|K+=qeQwH|{XpP)?1pk4G!zC}#Wp#4179HfEEK|r~ zk96o_MDE~+WKbhc7u%yTs^I}X_AzDyiyAe6Vgxb@!d`xyTXVZ$Byrbj+jQVMeb`LFeH*$(B%wvnZ>+1)Yaoe*IecqiwYi2V1Q0!IC}mG= zyFyx0AqQsCffdp;*EN(uOi8|mlh^Wq5(O{^xKJya#<)WluAt9)3WO8aDCj{!S%Yqx zBw){*W)P3{C4(J9nPODf(iYlKgCevI$}-)a8vn_wI~1j6YH@=+(^63Y2xVL@MW`H% z!I#`Hg_9QP%2zy~D{V@02HOjpDRgL2cMh^vJiLP^6#AiI3N@TK&EDVO#R)Iafl@G- z2vAp%k&~{dX)6-zRrUzfW89ICAgd7|6$j0bT!Cv^G|3cd`G;E~N@Vf0DNMcDRWC3z zkk=4X#o#7Ur8%?P!7&hWF=EdKFjX#l6vv%m*!SjIxI1qiW8+B z#W{mS_R=@p1TAl67OZR*QzpKYX;8N-+5bH$W0_sJ!?z$y7kAP?j|asgcUQVcKS;_C zima zDB?OHA;Sq2p(Qg^cp&&OPenY8h+2)IISjI}Bqk(~2so$36g~lrRY#;cWWhyOxq}_d z*h3%Zw4CXLH;*DGC zQkRFD3jVGHsITktrwGXsvUb_5r)%??KUxu?rFp<7dD~8i3$c$hhLn#o<)xr1!*BUf zD7i)IF|1iD;B~hq=(Px3;<}ecKL54RHauro@XY6)cC8|LWLJjZ;wXE@bP0eP?lGUj z%`q8c8TrMS>2|1BklNY1&ee4%kvUguNG`jcSm~tv$hV{s#<-yt^^oriHe3%>war5I z43cJOZxz)Kg;i9xy_;A|nr^3shC$2JtL&9f^wYU(HiRFIOiH&KZRlNPyytk&ay1ts zS;$+t=u9d#l8C_?FV^%DD4QzLh_rIErRyU6W5FI(g-N!gjt zSDTVQ0Rw(8np&FPbZ--N(*H`;G7;pQ(Y4*XafJ(+!708{MSBS0VZSzo+*IkHiA+&o z56MWLebJW9rF;C9f&+YEi%GkC?<^^>2nBKg4%c|XBz6LcKdf^qJSPevxp0Q4)ie_xj|C}R1{Z+`PZUuF;--3S;d?ygDnX6y@_E&$gy z+*iXgpi!Tv&6dMN*uA%zXZ)0@j^?fz9bmUZdP$N#bN6q4vW$2E2IH>5>uKXpd^b6Q z!4j19C_ptZRp%k(rvF-iCM<_F1e>-Z$CEV5(tbwaQxTC>3m9@Q2P&9^F~ufs#`iN< z5r6_1bzW0%T4ZY^*lw7@Q`~k`z(pqN=UpfTemrM%>xX8*l5|ECTK^|pfYdrqGj9+$ zGj!x@@Ahg+gM$-yaszRHJV+O07eosO7E{o0VPkX7wi4C!aa>_oZc|FufOE96HKSHL zk_8hd$amE@QD~@eMHLez2UkTQgT4`LsfBd`Coc>LSVaghyVh@P7=frW7fknYe0CA! zhccrxH4LL=ndWeu)`x$BXcjRUlo(Yr*nr{IgSaMls&;fxp#tQ0e{*GsvO+!jKu$sq|OkU|8p2)hVji&{5>eES z?s$%|C=hW}igT8BcEt)yrAbzYepgWgU}X~ZhmXY(g6UU=V+e(QGzW+=cFg7%Tj-D0 zpm(1phk2GU2iY|{n2>&BfE;O%p9n0Ku@XNRG6O?aMR17%0Zfm0fhKov6XkN22MB!@{MDSNLWknY!$A1H;O29iWzkxye)@F#!1l$4^T6L~0CZwHjfv5?rLQhuXn z8NpDmv;T!t_>xO7g`1*uAeV4!xQKGKlt=l5a`tWbhlFzZ5^d>)S7|;L$!$-_P={iL zR-=B^lz-WkY6?h&Gow`B*O&2!mrUgW+VXUdd49&TNh=~WM>v*q$w-I*UqGP0HIm=#KNU0`l1SECqMRI0d$dr5PZHfvC6gE*=aD5-}(3Zru|q8qAK zf{1UP_?HMNmQe_kqiK?L@s~@2g%vq}8%l6Z0GDQnN#FL8YyhTOTAf8;l}Ac57U`7B zb|_IvhEK77pa>C8>7s*4ZOFi+bpeK$c%f=K7i~ILQVIYXs+oX!pG294|5j;55SA)R zrK(e!i)vAH2dD`-i|FH;0+EX@@r)~?j0d)xEKva`U_T>(s;N2x8w3E#0h`5%j3xm; zs+#|*@FPFSDXY*~EE|Fcs`qgqf_!t4okzBM+9~&KxgxF*3+72> zP!^9+!mQcqt5afl-RiC1I-4y4pQ$6C>6Lu}$$g-9l+BYB?V1&ol3JHa8N-tbo3KnA z*pQwgrDSSwf@-Fb#-K>*pfcgE?y4%9as`UBHlCqeKY6JZXrTQyshtQB9SSvs7Hl0+ zuxa6m5L<)Fb`b~Ru8(yncL1p!TUZ6#u2Uzk1R7^4tFobze}D*Z#xgE3`z<2qU7Y5q zTMCFm3Q~y^v*~iC@|vW8xv+xJu={8iI{Tym$)ij|sAYL`4r`NXX%Sf(L<$YtDwLc=fUAo#LwR9F zzHxk|IILJ!thINn7GaG-BE7Ysj=Tr0PByJ8f}R9%3Q{D!-zy}i&>`VUVvk_HC4j!^ ztG*@hs?o=^FG0Ckc&-H@)M38P{th%pSo_Ht`o`?ECKF(uriJZq6~y0;)D!}@CsMSH17OBkx~CKk-U zZ8EV>DlbQ?DXr?2@M5l_rJf^w$*_PLiMJ!GTCMIpEd zT)>3NfOR`GIouaTyfQrJoy&kGER41w^`~vDsQwtpIoyR;N2m%67XJE~A#=p~OGxqS zmhbC1$m21aTdApO$e|Xx=+T-f)TtVV0;zkOt1GIKN2(~W2wVWmu`K_~-ujET%bTX_ zVq_r8yZm_4n5)6tb37(Q_LaQk3lYm}SKH~l{Pjh4@K4&Ldr@}1s?iGByG7P|&3Ld} zOJrM1WXv@dX5ma8WL6sE>Nl2LmjFq>41B-lBmnOW&+*K+{z*o2unDEoW&zv)2GdHs#Om56 zZeSJ*9mP87q{aoMo;j9OJGOz!#df8&B*L{!9hf&7w)`wn{pSBkAU)N0X~|pk$&nSI(lcB z@z-emG+7M4K^4z?;=z$TO`faQ0v5`wxv8ZKeWz=i72%vN){7_Bj4m;{w%p2_T@k(v z7Q>s`x=J%hW+7Tu%yfawa;3~y(VZb7t$y^K)e8|(RLBq}t(?2P)w-VVdmrli9Lvqz z_EUN88=sMS#p^7vPw0fmJ-8TCRQi0t2HdX{na+bP*zEjELS2fbHn<$k#}T*4F1#}o zJth`yF=?tp938l32Yw;?mxg-D9gW?qX~QpJ-+4lA-FN?|2%6JFJhze!$^WgIOf2B$ z^vxfP)=T}CQ%j}%eQ;+@saaUnT`Fgeo7HBl1Q988xuKwFdYVRyxF~McmDQ#{E5;6) zCxu9RGp&#l>*9c$*PqPSbzGgtm6<@!k35ToM5;qm=+v4N+!5X3nMB!@ZCRJys-s=X zED?C3CycJGo2+aSGSskZ8!fdstRV@tUhi;xjsqKvF08ovJoENbJJ=(N(^vMs&gJiD1Ncwk?B zwOXU#%_8Lq z7HmKZ?pg9GFX((e=oOpWjiH`jvgh);=mewh88N^1`ROrA@O@S_MBLp{dVlTyujm@- z1WCixgw-ue>a#WLq=q{1J*9Gpu`*tvMh^dwZXoI?tWy*@*E$Q?Ki_~$PnMqfpU5Bw z_$9TDIFb0i(=AMwp-J`;Vcs=f>UBZ)RE%;$-PCvg)Q`;J-oCZf9>zo-GCJ$g{YQQl zyK6pI?Vj%AjVnlS2Jmhg#Di)vS{Sh59kHd6)0MyJlrHaIN$)i9e?9IYMnCNqcj7S7 zaaGT>hP|PSEcsCG$#ri&%27d{jpm%H@S6JEn0>pfZ4m^qyQo|py|`hWtzZv-9}uE> z6c*+J5kiMo{lbd^z#K%NuzPq;Lpufw)C#N#ED$7L5yOpC;xB%;jU>Su&1E6-84>?& z0wp)jL&!d0H%}}8L5BvaApi^(M0o#Dp(<)#lqiIVipHHK3X4EID5nNNi~z0}n<1y7 z#Xm+moOV#pfx@xy#)XAyiNJ99w+ju;Y0tyl@EUWs$0pNjW4?QVOP;`<6=NiKNE3H3He#hy|89h&TckSEeYUlUh!hY?e;e zwCEyGX0d}=9uL|U51i(-s1;ej!eY)-W)ZiiI%1hN3&Lsv1vU0u;g-oeW&s7QHu5uQ z3UfPQ?cG>D^m9ZJfcOC0>!Mrc!!}d_^1X|UX!Bw$n~bv}4^+|eAc&^|fDMFoQibG- zyg&@R?Y>|}n;YVA*w4Z^>S-wz4WiFIk5qY(FB&SYh`uj1#BU@wDBk#DECACOBOh@d z;^UA@vu0uFRl&7=Quvw4w|xT|q)r6G$@Ncei7N&?N$S#n+}F5f|3R zG%AzBE4u$D8wF&e2f6T}>y{uqt|+631Wb_-m0+d0u>x{svSRoCKscP-ZHXT_T4d!Xcfsvcq&m4;liyJp$0REDiX#D7zsQDNi`(mS0vyT8DvqKL_{PPaRNzHvQv^6r7$Bgi4&kQHhGwZEKbo0TEwCg>pGZj>|ia2 z3E&jpJO#X50nUC6Cz_qeLpYb!5ox)i6P<7cEIzbNX@&w1c>qPSu-UFGtjnEw$OAm- z6~g~4z=B`+q{X!|LW@~UGobn8<|41Nu!bcpN61it2ULIzHDyET1@s?4P*5r!tbE!s6;W(WF zpmal3sx^kD9f=qtqcH6#&p;Z|kv_!>c}&GkQNcTMAr+_YQK23=A=aF(f^v7@9V%}6 zQkuSxi9Y24A|-l|w`nLhjZ>>ejrv8))aOEcgPu;Rv5HLywgxbGV`O3&R*f3tLGlV7 z=HwdHkJ7*xz9WJhH~~^lsHO&=;~6!ex{0y=Mqxq-f;PYa)FMSkrazQwQdzs9488v@ zkGFl(VjKHM%n>#xTq-G=So$EMdIBU(#Upds>ZB1R0JhsGK!2oI1XF;NqcH`ko1D6# z&C(TfWrd0O`iP#4^-&o%b?kXpnmmfZG16Z+vH(%t~Ei06#+Tmwf3b*xPa{qSh80PTlK>; z2r(JwquP_IAjZfYBaDZ;3IjrKxzyM!C+ZrJz}_^ZQRE8HT+H9eQf|4&7;YGgw2KtC zj>S_%Zbt^Ema8J>aB+DWR8y*@9M{;(kv;AiHD|BrF1fV=j&6;YT7#^HkG%iGU8*u9 zq70&;NXG@{oOp{QNIacHkUj+gZLhp&g8=FgW#}X^PZcbPRGrd9djW`FXA_^L&PQt=!;XVig=V{h!TEZOISGQPO?OHL8{RoV zo5w2{cPqn>5%Z`u*rOXNcuA7fK_Fy<0!2R-$dRm7v~T#}Q+F9~uFknsoUTgA0PXTd zTr!(;PKipFxoU4dcbI4(8xzj}++!mJh5%gU#z5E{j)8H$|NJF*te6J?f0!UjN(Gy{ zIVz~mBmvC4&%v`|#}TGN%d7mpUYGsfYv1qQ&PVDPaV`b3Rgla0j13$&{Ku%)1yeBn z2J;eswuFNv$D;)YG7R|-^?%cqCob#SgJ;MKtuu;yh!mjI&{e~mV z$GKRX^8}hh^utnk7~s4}E5JU=VX;5>J(n;)j02fGd7iXu8b2U7toysb6AI%?1;vv; z9vQg0vxZcFsk?)TJ9xki>z|E6IiA@$5$qG5Dzw*;IEst67kmjvdx9t!12U+9F^B@L z&=t9efC{idRpW{p{J|i!K^)|@SQEkufVGtHK_%S5N^3%A>IfQa!bHiz5fOlGQWnh8 z!FoG_F9gFd%#$GqjXLnQ&#Qwv;6jUFgETZltbmrVXoEETmoa>gIjqCial=pabD66VNckL-Zll5JUmAjYZUsE|7yca6~>q8`=MoyoaF!LBs$rNW@GW#QaeR zNR&i3U_{sOL@g=;L{vqtP()I+4>y=ZQyj(mkwZbGgFLL05AXpSu(G|%x#5$=PmHw` zBF0)2MCluXz6wM+(4sq(L}8?pm+%pi5}8P(uwPV|UF=1P!bUXI#BKyem$-sfM8;I4 zzkun+Wjw9U>Su|)-MMH$QR)j~{aI$`M$8WSBcymT*)I)&GmV3m< zl*q(3@E?Q(jba=|J4~%qC`e&UM{8t8ECEL{Tu8>Vj}-`lU^qvK62(|FM>ae~ZxP5g zbi|W1#*AE(beTmm+(@=4NtlerU~EQyd;lQug^~XxNsnYnf@H;+G?I7xmQoyoI1ENt z8(5|sW%e3SZijo3$bW62_ z%elya9vFspjLW;kONj!3LCVXn?5j&;3yF}xMY_HRkjTD7%ojv}ZP*2YOw7lGOewmX z-iu6(U;!7b%*?z?2*6Cu^vut+kG5>f4d6>dqsy8EO-3RC$4t%E{Jd&&&Dc~VLJ$IZ z#DN>Y%>)2U*#r??@BswaP2LpFI?)1V&;bhwPT~B^>+t|6sgY`E9~SF^7?{W89L~&? z0%6E2>x?(ibjXCf&b0IcG6^m80Zj_Xff)bT$?yck?*z}ZyZ{|whHYfe$aG8hv`ew% z0~^52{uBaS7{grnP44u}2rz+1V9oke&;?~sLkorn1qKK;00M2$gW!WF^2iF+(7E`- z4V8=K>=OxEEK^Xu%ke$tw$}`d#rAV~QfCz=q2Te57?1c)ZBt$00#Q3%+cDa zLJcsb?9=Fh(X3&b)+B%%NP+}SRH^?l)JpBUCA|)`VF5{Y*pBtsj|JI~71@y`*^)KclSSE-RoRtg*_L(LmxbAw zmD!o4*_yT4o5k6j)!Cip*`ELP*`Ed4pcUGoCEB7j+M`9 z%+=h@<=oEo+|LEw&=uX$CEe0B-P1+g)K%TpW!=_w-PeWP*p=PcrQO=K-P^_8+|}LP z<=x)(-QNY?;1%BCCEnsS-s45y-sgqh=#}2-rQYhb-s{EQ?A6}w<=*b~ z-tPt9@D*RoJA)?cpE3vLN=-A#Nt_KsPmX7GYhNa#Bkt{$ECm z;wo0-HGbYJK4VZ5V%H(!>j;-6XqIQO<710UGgj6cmSQ#r(whv*=0#trV zZ)4?0RAmgdpCfSMlO$6th-C=&ML!ngUiM|h7-`qMd;>Yxeim_XKDLqQ0N4R zTH;VNsB!uxal+L$5GSm@CU_y^0&X@Wc4&u|=!2NHQ^0Ca*r)q7=aaVUyT)sImWzz$ z=)U%Ay9JbDYG*Sz6&3E3S23nZnS`1iCTA`P3FxGnmSji<6+-spMfnuVo|VN`X-e8b zF1;iX-ek-68G*6!_QTd0wWfJ~bNMTm+R&v?CjwxW_Xo7_Xr}6~fjtc*O z4|AzLh`{pOp78Qb%j_=mP3Lr|J@ZD3?@rm`Tq1G+@N;VJ@s2Q+MQCJ8wq#O1@BKyz zKJN(krUF+#WJ6i=A-Ly4XL9Tor)X-IGLa@Ny@FUa?h953Xi~O)?1)Oo@P<-DUEV%1 z@APZOcBK7u^A7bQA9XuNf%iU$LBEPQ7jR;Z>ZnEm&gS-A2l6;B^hQc|bze<`=yjV$ z0ll6)XJG?q%9qmMaJE47eomHTLE`#}7KDa{X|e;Qg!a@}m#b#<>)>)Pk3vLl3v18z zjpulu-S$`)b(kP`a3^#hPxbpg6-H3`m1p@>F;I7h30lVpRU!eFw|UflbAA86ce2D| zJP3Hp`1zMO;#L5sZ#sAeZ((@(;<$MDthlCaYbXzQ2@n_Y5GV1y*7%Os`mLwgkMDK> z810uB`R^|GldrT}d?`mE$Lrj;YkjY`tcU#H2mX-V_RSA@HeY;M zVsdluY|j_R95?KDZ+k(XgpxlA%LjMUpNqOrecR5H*l&)y*ZbB#2-^R5iEVLivDEb7 zSO4|TSVw#Q;`jELM}ZMoqNr@IFRO1jL zktYeuOkB9gAVP{B1z-_)1eU8K0$s(*((#lmHXVmh>@*9{5|}o#kW}e$V4Yc@Yz_o9 zt4+&rzOy)73EV0;OQkGK6;*)kpaA`!AS>jnf}udH zRZ`AE3zM_J((EZ%p4TR{t(@{KcSOhp?J3zpYsV?Iz@k$fR>JaaD^|*~ZBWf(8|`w; zHS3DHWy-0Spp^34ufP8S9I(Ix6I`&t2P2%YQGt=b;HH@(0+~V)ATnB0Rj9#8373wL z8eoV#{7A&0De{P8k0@d>XdrKlvd0uvu!zYeh-QWWgLBQ8SZaLXN+F)~(Ja? zc!&vSC)tt&ic$;N0m`~f6NLpHc^r4A)Fj#4$(#Q%G2M#SP&3_h9y;Zu zc;@;>C53sH-yOQ>qmy2`>8GQfy6U9oy?R%t{Ioh$IedVC?FeYlgzLNW-n;L=10THb z!xNv`sE-$4{1!HBqmA>?!=D#u^H{rBUazyAC4-@pI=12BLB93TM;Xuty^Fo6nOAOjodzz0Gwf)bn{ z1uJO53t}*X8r&cUJLtg=f-r<493cryXu|&!qA-OjTpVFojB!{^Ro1Z5y&P)$+AB=sl|HoQU^oS32)s__asssfXe zl!GVBVvK8Sf-Pfk4E^|)iff>vl>$=5HOTnLUjj3j!WRcx~cgTh$YDX>0Y-Sjr znar+qftqCu3JtOemseZ^k!y)SuV!USayn|9b8II=8|u)9dQbo`phi3?;srU(;SO|| zQxVTI&nsYb4jhGJ7rMa7J24!mqgk))9h-z8d zqBXnP-7a^*mjz`kL%I;b!Zwe=2@jxm6}g@3Krs16CES4qp3rMDnyZ5JuF|8PNX0X0 z@CyF&SD*@^!yUJ|#D%oMi@c;JfYAuL%YtqW$5h3A1%ZlX$d@wlok1!#fnF6D*semo z#vD-V6r5=)#VTI$ie;753e7gJF(IrR`H10F2$7Q>SOzjGTwfWt7q8U3uP5FL*iYV; z!Yc3tK&^qP!L9!&bFkapD`Pp!T29?1m4UXz(jXN^SjvtCTm<(n1-=;;Niuqg zK0$<;iS{%xf=x+EeWsZr5T*z~iHndnB!i+axg{ZA5=UdCam4J+$~R%_=to2P(H{DW z3ap%vcPb;9fbL{*X^b{Zd%>f(J#5zCJA-3*P9RN1U!`$;of_m4PIiU}Cjv_6E#o@Z zy54obytq<`MT2`JPh%ZKBUJXQ$-zz!t@GQ}$fvYJ$1Y$VSFmNm|=i z+|w$FFhL~BZSHfUJKZcwYNx#N*%Cu!4$1)XdEiX%BJk47WL_wnuYqmmXdB1vOU*(&=q3Kh6u^PA&5=Q_7Jir5{_tyHnJuRb=id5KuSDZ|z@7y3Xr+3X=e zc`2Hua>c7|^{Zo@Kx;(BJ~u9q_#XSC*-mrGpEB!dr+g{aN^g2M+yMs3klY_6X^K0{l!)+AgCyAPsk3;Y4X1~5V>=yg%w3*v zY|y>wnZ5rMEF@#{^=5cc7w`P%LqGahNic3-@p>U%zVeb^DcCEy`JHqg<%SnM$=OJQ z^P?aAA1A^e>Kj=K`#mfbFa!PTZ~yz_pZ=D4vBb^-+`* zV8DsQ92inx5f%)JMWaPp4(8wp$QJIsmG!ycIK|ok>d_S#Ajq{*jkRFkLCu=Iljl)j z6iVR~MxPN77q@M5>UnkwQO zD;8h}dPM6v<2L#o*h$nR>f$+~V>&((0m9rsoZ=&Lq2`SsKfxObnxinD$Bb#B9g5k- zyw?)YK`hEetsF=#StDq@*B{^#U2!Auc_T%DW11yfo*A5ZF`qhOWJYQv5K&jS;obkg zU6Up%l;i>9pHag@3Iv?-8*=zTL5#aA-SflA52O$p#O_7Pid(@KuVF}0)-B-llMk{@W42b>yT?$koSnJPeD7o;9G zURpIM10CSyDhOMp;T1?g)i@zqrkR=9iLT**1TQrD+^j}-7kyvJCk=+(2P|_;0 zBOJLR^38w>V5S!+)(`#x2qxuMtUwS5K@ODUSNi5}0_XnRRBkN;0QMdd5~u%R8C^b_ zlxP*FB>AKnIj3K#!k3K`ZV?t-5u@HI=3vn!au#RaUBNX))?g9lb8J%|J|_)SS2RMA zBJf~bjAwa1rzyyR;~m9PwqhpfQR>m>dTk~*8l0tV1q%p45bVGg0A+A8XoEUv@XUc7 z;SuS{o=4q*gmzdP$fif~(H&jiPS62{dcYgW0eYF}iH_)ad4Pg_=r<~uA2?Qrssbv& zC`GO)9+^UIx+h$eB9C5ZgVm^EVt`H1!FEFAK0<^5SlEQ75eC#KYa%9BTtF}Y0XAsC zgJNlxYU!2&jNnCQS8xCj?7~)ZX_=bonWE`_1eY-a-7jbZA1r8^%IW`{(rKM~g%NOq zNZrA5hD9Ivz?j-;pbF}s66#hwR{9<1S8M?@*Z>8@X`w=Dq)O_8(!r8>z>tas1+YK? zOlqfk>ZgKgsEX>Sl4_}%>Zzh?s;cU$vTCckD)FS6-NY&leHEn4s(;k#qvYzV@@lW@ zhaL>W0@w{92*U+DY6nfJ1CZ&V#DOpn!m{4S7qmbU7+!!305I4>wfgF|ax3HIfDBwI z-GBfPWGk&=0}f2UvD(K3+`tXEBz{Q2Fz|q}Hp&$c!@R0%x9aP@hD9!H!v^Flf`LFE z+$vXS00?9Nw8{m$f@{F~ivb|)jyj4hY{LgQ?0h6a#a`@OECBxyD66B0fXDLd$flD^ zY0eP+T3Kw)v)i#V!167=6{x8tu`x zY^3Nx4+w#K+-cHc#jaM)&q^#)ENu%^=y)OR*2e79cCAws0L)IU(Pr&d0PR+Qfeu8E zKW^>W%7+DHgA1fANs(>UMy=bb?A#7S+fr@6xD?)!Y~V`iF;pf*YyvX;9$D~JJ>uSf z8QvWvLv?N};gpD2Xh96{=2HO!FO;nmK!6M=z>LJefeu2>`hd+kDnyh*yJ7?Ay2Z-^ zsz>|+>(Z_b)GjWRtNA;%-;OE53Tf2b^o|9`Ex; z1p!QMK0W|5(5v#^D;Q|5?b7b=CM;JdfDFLtSM-7pkfl0gs)g^fa@xg@IoyBgh2Gx@432f_0~rh1Ow~3fCU(^;Bspu%_9=BsURtxH6r6T zwh_UZMHOsB!-$1}g1}RKD--4B@Ir(F1cNT5?wvwFFswk*F2FDd1M{#z17i;64#4!> zf(#2o59dG-U_%cJaVg|3q-+5$IBO9vi#Ghi*FMGZhO1HVK`;mdGXQ}w{4Z66?6Z0V z0tj&rTd_9qun;paTAXkGc7+3oEco$24~+3JU_<}&gl>Tb0SDx3m_h(k5JJ;_aUW+d zeI&p(lN@fWYKq#SV%w=o(!a3@dSF(ob< zibb&9nxa-B1~+9{Oyi`1h0dDrN8kW62oVTq!wcl_UUYyU+wekwa5Uv+2s`oITtE+C z?VVyS@iGMk@IWwRu~WdU-1<%05`(syul#<+Fb~83Dl;=b&KA&eHpIb#=B6DhYPgn%}g&lO}?$m<_31jC|_2JAo%1a$vC#w16ZMVQvGTMz&-D=|6)fmX^6N#k=z zdsHN|G#o8+Gr#me0JJU*fZCSyOz(saTeD8StmaHr^c}?Yr4m6xU)mpd*dJh~-?f2Xdze(g$yS+?91!1J57?>c?O04BiB#iO zgaB8MS1e181;{`T^fR1Tz-NO&!A?MEgQz=?2Wa1N@#-?S zdcSsT!!$R8Xa^j3a{u;u1TyfN98R;g0w6aBT=iWu_;n-mXA^*KC-;2kH=Kx%YbO9j z8#uW}<4{+$f-~oRhrn$kn0))|3d8}1s|G?4fOSV~OlpAGdc;#dg`-k;2;g@`r}luE zwgq$n1&j~9^1%Wq0BLLZAaFPVJP{w*I7P(og9}7um#%C>1Q=wvNYu7+-?N6VH*qWZ zrEU0$N8Sa*fdRCu2DG?*N3s7vfOU?~c5S1$XK&>dgg3HjIgt-ScpCt8`}fTtLV`r~ zCmLjy_W_f?c7bDcPZv{}YXGBv(s&aBbZ<0_n|O!kv|87x!9^)QaRLp(m4gMAGG51F znbD|?den^vCuL_1aM&@dUl(Dge`VZ;1t9t{ZeyRIlGNO<1ADLoJ48#uXL!Xn&#gs^ zgfMIa7vJ#n=s@~fZ?t!`pE|n|@PQ6IPc}>OY9Emm@9ysE01Grz5zMX#Z1(eP!wYb# zM_2X=Xt7o!m=45lZZ|9dQ?;e zj{8f+^hfXl(<1!&jJOR*`iMg_MSuYF#JnQk!a0k;z7PEm_JAXvYdvwG9aR_|8$zy{$BO5R@y~$rO)cb4G1A~Vn8#5#*Qp-Cb-+%+WK+==1 zey=S@V?4YoK^&;+Zztib68zM(?n@I!(iKngy~5=#?+%^QF-{@^Ap) zZ#%_4G5|z9&To4HhkO_0JJp|V!avSPm%Yh{z*59HFw0mK=^qL<3F|AU?Dctdu)CI_p5w$AHcw4hu|w;!`>4Pkqv> zFsDl@@~t0o9+FS-)k5Oq*X1279u`-b!e*HnFO|Pf*;X6zBtX5wrDD|kQv*QAQ33#f zfK8h?%}}P|;6VWdAx6Y7gH@4;7cpXt@CZ^zj~_vToHX(TA|@G8rX3(6VH*pn5C_=svFihZ1P^im zAv6S{lwm-4_)5S>1A<*ZUTncgLB~v$5s@ZXqVt800a7(=B|@;55FWWYuT&dY$XP9tB1A?LAAUtg_x3&w$N9xGz75X6u7J zCFlZXLJGHWNk46Ncz^@1bOF&r{d~I*LEkzUEFuWtTEMFX&T=gy2gJG%fT8rdi-=&* zYGJej`k2iI#|VlJ8zZKwY9Io90AiR9MBpKY9dtneM*JXpAjS=dOdvcBG0ICvU$n76 zszLvfN>Uge{<`P_!5}K&yv#V$p@$qP6puXXm_bXAmum9!!3{cdj?e`NNwkzkeY@bO zZPxQqm>}08vO&3$lX$;FETfP^GQPKu}uk|rtR%pimV6H(79 z#fYU0E=(Y}QbtsOB^?MbY5^c_SV30~DC3kMTnvTq(q6ptQQK{~?bh3G!3|g3amg*$ z+;h=QSKW2lZP(p*;f+_`dFicpTqBfGCJU52x#krn_gcaWWM&WuqI|Ky=nfh@DeILQ z{l$3fWexFF7`L!p#GR)l~t3p=3gCQqiDl!$2fu3nQ5;1)hhqW zr3!)t=kk;Yq{#G9J-}2&i5G2v#mI;oWOywls;oi@DO=v#iw`TEHcNh_SQx3Sk>xR*f!*s9!Rmhq&774kfAzHwpo5eyRLwUMerW>WH*1 zDsC-+Q52%f%M8YF%aM+|XKdmm6qpBQ|4^6MG34&$9osa^hs5I^ipxon zujg_;B|^+*nIIsqf4ux8Q`@*sCzpT{*}WJW=F=`1k8X!Jq}qk+@J(m5H1+=vC~kt2 zROSS`x1p>LJP?B0l#qeZ{q7}Sh(Q4(7$Bou&3>%9Qnt$0E0tWUYwPnK<01kzQE9LV zKr-C`+@q5cyy^)TAp@-{aG|SlPjy&I9$|vVmmYv7U`_B+5@I z?aW?PwBi-9m_;pak&9jQ;upafMlp_&Ae`XD^M+uGYY0Lrn^bTSJqR_>{&BC|>0XOmo`l;CCZokdi?>NR|N$u%^f_Z(&;U>(v0;U0`lDr8ZaKIm!X^Yr0_F42Bq=%hpmnFDTuQEh z3v97UCeqShHg|_X*r2j;B7{gV{2~=2^yQin3F9RvP!UU=WP3d({atbU64v5#k2L^0e5Uk~(_+~qz zO7Vlfq*M`%`a|gv(V{DGrd?dhr@#blZlxH=6^MzFGDva^N>l$t2}+QND5S&|9j((s z8LBw{-7SIniAmFbI#13emW+*c>|-GtS;4h-R>5*2av=_9#PkE%`JNuiOEwOs8ylK zGo}DLYPMiVjOVoyu_{raw-9H%1A=xNelspMJZU~9{4$jjeVP*PEvy>uEwD-hT%4r3ubP zISp*yQu5cK8TAoPvjdZgLIebKn{Hn|Ik@8Lq;e9xMeP4dEYj0pV;D8Aai}ozCjOao zK}rJb>S_w5b1nf#IR4RgC)_Os>@uD&u(2w);XCNylc^bWsvh3UQ3%55!GS&Bb}zE5 z75mt$Hh8iN)^?Gl63x5#BVAf?9GL5sB6@G?Cq!e#;u@wziE8SWF}tM&6zbP}^~LO= z5uIp7FPhPfcJ!kot42CVMF5ICSTaT?5z#8a18>BL3Mv+`W558AWnt|=Dt!!;1xyfo zr0pWdhzOEA0%zh1<~n;8oSzJNxn2Hp6o=561w2U`9&Rqnu6q~Z&Fwh`tg?$^M_loe z7bDVEaZti}mE8F`FmUT*w(E8iz+PknvAoN&YRdmDLN`vFNd$9K0i2P&P?=CM@NZdV zm+w9&as(jztzCJ>M zDpvKLy@6Ubj?dhzYF6U2h3V#`L*%-0UJ&`Tx^0VpYiUQ?`VauE>>|2yq|<}-33uRY zNUxpkZFl?I;U0InV^PxjRE9C~^I1)k7672;m!6g0w>hU zvAcD=$Lm+_{;%ZNR_|2@f;!j_UjZ-RuLa@KpA4i}^-Wi{$^(r;;IrE(824u%J}`W2 zh`iqSejgQ$`|sx6AOysJ{aZdC@}Gb6MmI4(fplF0?=oIAHj2%GiLe{X*ahjNk$;I=$VmkHzyfAUn|2`u z190xta1Gh84c+h!;Sh}K&bX2R(=IL3AYx(ojuWndkN_`_My=EW?9?#C8m@r`5HS%I z@$q_0^5lgI5FrsHaS|!95-m{@BLTQ_s9cIH-z)$J=BL+ou6(czEusjgnoViQ&bn3) z@{&MLq9hj4A{A#3=VAx0me72tE#u%VBEW5{lt5UvAr^@-78{BJ0B0C`AP0T{1l)(` z3W);0?h2<57&(yFU;<5wF-o}41C8UMuJPbt2rafT7LBg?lr6dfYHpOV9KBBuw9yB6 z;0AVq7JZS!q$W_5@dX}W05Si9O`MMa@r^fr!85ke`@(I-rs9IOach{T+;}hG?!wM& z(Hqeb1eHJpS1u^>MjOac1|VSnRPV(!u#bc+TWawJmjD_;We0s=$AB>=f}k8@5vGdJ ztL#Z9o~|NKh~O@=+pg}Ss*qjO(Oa@mPTs^FrA0q-XCH52zM3HRJ~9blG7hcsDzP#v zwQ?)ra1J4_4yWJ_6=u`;&<`ah@Q8pAX@?LyCK(jZ58yH`;ZhJIueRbPW^5)eZ6>(R zWllQiyU?n{9u6f;iMx`HJ^(xU^F6t8MrpK0ZS+QQ)QY?kBC_D_^3D!Hi!5F34_{&x3Wo4N zh7DAvm!gqJ9q}$rKrf~L^i?(qU54_k@&j_tvD%ocsc`28HlY9ZDXMhBF=0u@Iwcf? zg4rySCjlr86S7HHXlDo%KS5LC#7hb;AUurh1Mu_%)lK?lvl?sDp=`t`=*=SM^f;Z6 zLkq5@xD%izbm$uH3N+v+QgKl8YXL^-LU_fig~e zl_)t5PHh83ad5GW;#ifY4{$)JkktecGDpd^T+Q`d(G^E`G-YZ_@A7cdT8$AS!tY*! zUe!z)3a=3HPTijW^e)HXUja5?1r}h*pz<=Q*3d-<0n@M;lsfrF?Ucmo@W}w4iFr`( zE|LvYr$zRLp}@Y+Vhd71Lr6}KZb{;x2R!U3dzBA}FkDV{7+jm1dhq|;76l;I-IyIPg{GIE!4);)FPN(&VuBnZPo zbs|}{Hk0*Le;~+&={{*y7u%%6DhFp)CC9Ve5dte7ZpQAwffFOLHo?&3K%Cz)>r%X8=Wd_D=bzA7jE%vT!>+S z@1j^UqOUTwQI)OS(#?Y}_l9vehjn;|?Im+NO$AIXwWQ*Qv7(M%#$E@EU<4sQI#AqW(;sEkYT`EM11l1;ZmNRoV_dvvOPIgcHvoU8^YcVrxeYK;C z*G<_kd1aK1b0Ll`XR5~Ob~`Co`>6pdrzlToT#bM@R}y>M!)AkOR{d=-Wj75=%yB!V z2X+(br1pM|W-|eBY_QjU_gKIRxtG4+fpwOD>1*8B6n9%hAhR{)b_s?&76(~Wf-MTy zP-1*dS%4oHQ>6Rd$`Gi^**@T|_ny8G@vT1)OG2XHr4u zW)Kpr42yswRr!Of_I+_teLK;F-*Po`h}sdKozcm?+j@Mq&O%jI*$Or z52}F%jA0d4;bE4+V*shsDuQ%jz@i}{ii=3`>bZ)r*zz#1T_6%=WHT!O_=U$<7;()7 z3?qKkIRAPo>5}e=63R~W*k>i8jqlOrXf`(a)7T0l2AGOk0x}o+CV5ss2R`6M$de<1 zAbo}qbRI_sG8LE8QF{x{IKfz-Xi#L!FI(1XLze6ZAoZOvc#Yo}CSS>R0hD5)R&9+| zi26+ncHsv026rl>kFXk~S~dK;)o%z`QvC!tZGVZu!HTINjnBuQ+Ns`dk7#0z^~r0wGV3Sm=ij|6@0-N+$!h5 z8mhq)=ztB{zz--|V>FE#1fdNm+`?<1q9dYYG~5k3oTAZER8j$7sX-Z5K@QXs3y#5G z{(!^jz!R#W8aVo0-IBrup&FJ!5U+>}9>Mb7+X|t#x0~5~y8u!gKswIP zfDdfK>*_>L>hS`+ysE2`O@PzSz5Eq*M{>5p0Q`Id>Zf~}S0yxHIFeu)uRK!Jr!_#p z&JCbJ+H)wFVGIcXF{{gS`kc(Wx-XjLHE>EeGJwpB4^Qa~81#SulE4LavqnBZ)6GL0 z`ptna#FNvC2W+7LT)jq8j9P+W0|*^je&7b~?6^un)5qK9beby3yZ{CvP}Z|&$FI_T zgBNt5WxK#Y6y4Oz*GjZIiEg6R`M_&HM`nSr)&KldJ}M<%P+5Ziz!#W&IDEsKU^{9v zDBg=bN@_cr7x;U0K?ANm_HGwGMHYf_fyp5tP!#(zR)7G=96%iMeS}@!HGY-}Ko@M_ zxqacwWv?{oT-WtPl2<4P>ihygAP06j0{5NYi$l%P3*KMeI#sjj%DZ_97XXC(W^9O7 zYFcSfKGV&e2jV>769DGN! zDNySW=iV&|dcaH}@1HowvnT>apq<|Z#FRn?Jal=}EV-NiWAsTMzrfzvUt<0~pNvVL z^tTiME|na~$%)!l_O~GhGQeBYZr;drp72|Lt4t`E{)3eux{H}5eBuX)QEwJf`H3+Y zey*!+KR9~b0E~|u3CEB%r;fR_^~@%brW0TOWYL?A5M zQP|V)3(jI6s}c;FQWk9hAUY5MK(L@ef+B#3IB0Ny4PXNqBFwQ3h>sr@bxlxWP|GfD z7B6no=0d{|i3o6n%y`9M24)pSj?^gepaX>*2|Db-vuCy#3#1&>@B*XE76TmUkU=3Q zK|L~7{s6YIAR!%6c{mu*g2%2VHI;M#0^y`pZ9dcg>L`%Y*NvtJE#&xW@T$}px3ZPu z7$+O9hzfXsXq)3gP7A_}iu4L5Y{3L%%@WjwRxK|A3_(!*QTav^zY!KA6j#65@W!U$YsVAAL3L zB7_k5Ii}!(3^wTCgAhh2;e-@cXyJtzW~kwY9Cqm8haiS1;)o=cXyS<-%^`>ioNPje zP!hG_0gIdX(Zv;V2teE)G}_pO97Zr`j51mOI0b+da?IGGjS42&q6ckshvJj~Y6Fo= zhDoGF0a+fYM*(1l8D^JH{a0ppUx=w@0ae8q0t+h`0AoQ&zWIOy9aQzB7H6iW$93xg zVOvcTu*qN_+vIXvLB8~m!2}(w0B0Xt5W0Z~a4x_{OA^H~2%IZ~U_gF;E|957epb5R z0BefbW}_ECDyaw?@EMjAd|+A%2!Il##igK9%2Aqg4lzKanf|8W773KXLIR}HS%95* zwyB_8E)+WynK5$Uz?~sv09L7>f>1z^VNn1=u-XE^tfZ4#Fz&TH3{z|dYszb>sgrWb zY7wb5d#A8*3A`(8NcMWr1UFz4?T@YhhKa7R;-=c&1quXvSx9S-%RcT+`5Z^uC&6q+Pqg7K**hVNlof*`|P|^sf7(UsEm8>!xwK0PQ@p${PN5< z@BH)7M=!mFM!0bsC)ao~z2AfXAiq6|!Cg*#P4hx_r9_|0{=Gq{uOA^~wy5qt2$4On zfe*a!?Y=@QDsef)54*#VT6yidf8|7PTmcSIppxUwj1}wkRQ7VB=(D zL|HG|rJy5gxyt8)$@8hENKjlprkG zsJvK8(3Sv<0|!2U00NY7loG_4D}hPOVjA<9$V{d(m&wd#I`f&(jHWcFNzH0n^P1Sq zrZ%_9&2D=0o8SzmILArOa+>p;=uD?N*U8Ryy7QgzOxza4HcDK^6L+dHpab&>y;h2n zm0$ShJqJqAf*SOo2>sg%{#eW{2!kpKo!lU9&`1XgvJZ%)TuMS9!35MMqY(|MNJmQ2 zlCpCH^(&@xxGWoCg5 zSYX}*1U0@{5{fm%nGF%gD#sw`O?3lU&Du^xRN@Ktu!tRO9uE{%3{{U)7@~l!R(054 zPADM@Ax~mAOV17kR(=p#K?>QL*iuqx0t1jLggB5=&2m<;tD|3ZmL*v&)pl@K;H+x< z_FCA6aGrv-ELw+4T#~v02GsE6K{#QJF)9-kGcd)8%D^2CWq@-ELcnf@(y+3@R0w;` z5DOUVvn|M=Gfpkhc&S(uJ@BA1@a+wIZCE=YH1>qqAmoJ#03FaW$~}VNYeTYOuUqja zzP%BKa5vQd1sMc`rw`I;fgJ;a_r@0+yGW%ehY^F$Mu=e!ThJmAjFt(n4#cJ%ie5y= z-v{{DL>2Ch4S2yv!0CY^Bt}bSO_&P+!>71F4st@

mTV*C3{#!5jpv#Z_Db6(%Bs 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%0D4JF7a}B;pWal!>OF8U0f*uv4z1SAx?3b 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 YMJy Date: Tue, 23 Jul 2024 18:33:37 +0000 Subject: [PATCH 04/15] Fix styling --- src/Typed/Eloquent/EloquentTypeParser.php | 2 +- src/Typed/Eloquent/Parser/ParserModelFillable.php | 2 +- src/Typed/Route/Printer/PrinterToList.php | 2 +- src/Typed/Utils/Schema/SchemaClass.php | 2 +- tests/EloquentConfigTest.php | 2 +- tests/TestCase.php | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Typed/Eloquent/EloquentTypeParser.php b/src/Typed/Eloquent/EloquentTypeParser.php index 52e0922..bcc4429 100644 --- a/src/Typed/Eloquent/EloquentTypeParser.php +++ b/src/Typed/Eloquent/EloquentTypeParser.php @@ -39,7 +39,7 @@ private function parseModels(array $schemas): array foreach ($schemas as $schema) { $namespace = $schema->namespace(); /** @var Model */ - $instance = new $namespace(); + $instance = new $namespace; $tableName = $instance->getTable(); if ($this->app->databasePrefix()) { diff --git a/src/Typed/Eloquent/Parser/ParserModelFillable.php b/src/Typed/Eloquent/Parser/ParserModelFillable.php index a247594..fd91830 100644 --- a/src/Typed/Eloquent/Parser/ParserModelFillable.php +++ b/src/Typed/Eloquent/Parser/ParserModelFillable.php @@ -26,7 +26,7 @@ public static function make(SchemaClass $schemaClass): self $model = $self->namespace; /** @var Model */ - $instance = new $model(); + $instance = new $model; $key = $instance->getKeyName(); $casts = $instance->getCasts(); diff --git a/src/Typed/Route/Printer/PrinterToList.php b/src/Typed/Route/Printer/PrinterToList.php index f8f4e2b..e226ba5 100644 --- a/src/Typed/Route/Printer/PrinterToList.php +++ b/src/Typed/Route/Printer/PrinterToList.php @@ -14,7 +14,7 @@ class PrinterToList */ public static function make(Collection $routes): string { - $self = new self(); + $self = new self; $contents = []; foreach ($routes as $route) { diff --git a/src/Typed/Utils/Schema/SchemaClass.php b/src/Typed/Utils/Schema/SchemaClass.php index f22a4ff..6a1677e 100644 --- a/src/Typed/Utils/Schema/SchemaClass.php +++ b/src/Typed/Utils/Schema/SchemaClass.php @@ -34,7 +34,7 @@ public static function make(SplFileInfo $file, string $basePath): ?self $instance = null; try { - $instance = new $namespace(); + $instance = new $namespace; } catch (\Throwable $th) { return null; } diff --git a/tests/EloquentConfigTest.php b/tests/EloquentConfigTest.php index 0cbdd3f..fb151ee 100644 --- a/tests/EloquentConfigTest.php +++ b/tests/EloquentConfigTest.php @@ -7,7 +7,7 @@ 'Kiwilan\\Typescriptable\\Tests\\Data\\Models\\SushiTest', ]]); - $config = new EloquentConfig(); + $config = new EloquentConfig; expect($config->modelsPath)->toContain('vendor/orchestra/testbench-core/laravel/app/Models'); expect($config->outputPath)->toContain('vendor/orchestra/testbench-core/laravel/resources/js'); diff --git a/tests/TestCase.php b/tests/TestCase.php index 7563de9..97856a9 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -46,7 +46,7 @@ public static function pdo(Driver $driver): PDO */ private static function getDriver(?string $type = null): Driver { - $driver = new Driver(); + $driver = new Driver; $dotenv = Dotenv::createMutable(getcwd()); $data = $dotenv->load(); From 8d9122e25dcfeccbfd01a676ff7ce4afd7d011a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Wed, 24 Jul 2024 10:24:43 +0200 Subject: [PATCH 05/15] refactor: Update TypescriptableConfig to use 'eloquent' instead of 'models' for the parser engine --- config/typescriptable.php | 22 ++++- src/Commands/EloquentListCommand.php | 8 +- .../TypescriptableEloquentCommand.php | 19 +---- src/Commands/TypescriptableRoutesCommand.php | 13 +-- .../TypescriptableSettingsCommand.php | 11 +-- src/Typed/Eloquent/EloquentConfig.php | 23 ++--- ...rinterToPhp.php => PrinterEloquentPhp.php} | 2 +- .../Printer/PrinterEloquentTypescript.php | 52 ++++++++++++ .../Eloquent/Printer/PrinterToTypescript.php | 70 --------------- src/Typed/EloquentType.php | 22 +++-- ...PrinterToList.php => PrinterRouteList.php} | 48 +++++++---- ...interToTypes.php => PrinterRouteTypes.php} | 85 +++++++------------ src/Typed/Route/RouteConfig.php | 18 +++- src/Typed/Route/Schemas/RouteTypeItem.php | 5 +- src/Typed/RouteType.php | 68 ++++++++------- src/Typed/Setting/SettingItem.php | 80 ----------------- src/Typed/Setting/SettingTypescript.php | 53 ------------ src/Typed/SettingType.php | 56 ------------ .../Settings/Printer/PrinterSettings.php | 36 ++++++++ .../Settings/Schemas/SettingItemProperty.php | 72 ++++++++++++++++ src/Typed/Settings/Schemas/SettingsItem.php | 59 +++++++++++++ src/Typed/Settings/SettingsConfig.php | 23 +++++ src/Typed/SettingsType.php | 68 +++++++++++++++ src/Typed/Utils/EloquentList.php | 2 +- src/Typed/Utils/TypescriptableUtils.php | 18 ++++ src/Typescriptable.php | 11 +-- src/TypescriptableConfig.php | 15 ++++ tests/CommandEloquentTest.php | 21 ++--- tests/CommandRoutesTest.php | 7 +- tests/CommandSettingsTest.php | 12 +-- tests/EloquentTypeArtisanMysqlTest.php | 14 ++- tests/RouteTypeTest.php | 12 ++- tests/SettingsTypeTest.php | 5 +- tests/TestCase.php | 16 +++- tests/output/.gitignore | 2 - 35 files changed, 572 insertions(+), 476 deletions(-) rename src/Typed/Eloquent/Printer/{PrinterToPhp.php => PrinterEloquentPhp.php} (99%) create mode 100644 src/Typed/Eloquent/Printer/PrinterEloquentTypescript.php delete mode 100644 src/Typed/Eloquent/Printer/PrinterToTypescript.php rename src/Typed/Route/Printer/{PrinterToList.php => PrinterRouteList.php} (75%) rename src/Typed/Route/Printer/{PrinterToTypes.php => PrinterRouteTypes.php} (55%) delete mode 100644 src/Typed/Setting/SettingItem.php delete mode 100644 src/Typed/Setting/SettingTypescript.php delete mode 100644 src/Typed/SettingType.php create mode 100644 src/Typed/Settings/Printer/PrinterSettings.php create mode 100644 src/Typed/Settings/Schemas/SettingItemProperty.php create mode 100644 src/Typed/Settings/Schemas/SettingsItem.php create mode 100644 src/Typed/Settings/SettingsConfig.php create mode 100644 src/Typed/SettingsType.php create mode 100644 src/Typed/Utils/TypescriptableUtils.php delete mode 100644 tests/output/.gitignore diff --git a/config/typescriptable.php b/config/typescriptable.php index 3e9ad67..63c7804 100644 --- a/config/typescriptable.php +++ b/config/typescriptable.php @@ -13,7 +13,7 @@ ], /** - * The path to the output directory. + * The path to the output directory for all the types. */ 'output_path' => resource_path('js'), @@ -29,6 +29,8 @@ /** * The path to print PHP classes if you want to convert Models to simple classes. * If null will not print PHP classes. + * + * @example `app_path('Raw')` */ 'php_path' => null, /** @@ -51,6 +53,10 @@ * The path to the settings directory. */ 'directory' => app_path('Settings'), + /** + * Extended class for the settings. + */ + 'extends' => 'Spatie\LaravelSettings\Settings', /** * Settings to skip. */ @@ -62,8 +68,22 @@ * Options for the routes. */ 'routes' => [ + /** + * The path to the routes types. + */ 'types' => 'types-routes.d.ts', + /** + * The path to the routes list. + */ 'list' => 'routes.ts', + /** + * Whether to print the list of routes. + */ + 'print_list' => true, + /** + * Add routes to `window` from list, can be find with `window.Routes`. + */ + 'add_to_window' => true, /** * Use routes `path` instead of `name` for the type name. */ diff --git a/src/Commands/EloquentListCommand.php b/src/Commands/EloquentListCommand.php index 7be8a60..2d97c86 100644 --- a/src/Commands/EloquentListCommand.php +++ b/src/Commands/EloquentListCommand.php @@ -5,20 +5,16 @@ use Illuminate\Console\Command; use Kiwilan\Typescriptable\Typed\Utils\EloquentList; use Kiwilan\Typescriptable\Typed\Utils\Schema\SchemaClass; -use Kiwilan\Typescriptable\TypescriptableConfig; class EloquentListCommand extends Command { - public $signature = 'eloquent:list - {modelPath? : The path to the models.}'; + public $signature = 'eloquent:list'; public $description = 'List all Eloquent models.'; public function handle(): int { - $modelPath = $this->argument('modelPath') ?? TypescriptableConfig::eloquentDirectory(); - - $list = EloquentList::make($modelPath); + $list = EloquentList::make(); $this->table( ['Name', 'Namespace', 'Path'], diff --git a/src/Commands/TypescriptableEloquentCommand.php b/src/Commands/TypescriptableEloquentCommand.php index 917cd3e..eaf3f13 100644 --- a/src/Commands/TypescriptableEloquentCommand.php +++ b/src/Commands/TypescriptableEloquentCommand.php @@ -3,16 +3,11 @@ namespace Kiwilan\Typescriptable\Commands; use Illuminate\Console\Command; -use Kiwilan\Typescriptable\Typed\Eloquent\EloquentConfig; use Kiwilan\Typescriptable\Typescriptable; class TypescriptableEloquentCommand extends Command { - public $signature = 'typescriptable:eloquent - {--M|models-path : Path to Eloquent models directory} - {--O|output-path : Path to output} - {--P|php-path : Path to output PHP classes, if null will not print PHP classes} - {--A|parser : Use parser engine}'; + public $signature = 'typescriptable:eloquent'; public $description = 'Generate Eloquent models types.'; @@ -27,17 +22,7 @@ protected function configure() public function handle(): int { - $modelsPath = (string) $this->option('models-path'); - $outputPath = (string) $this->option('output-path'); - $phpPath = (string) $this->option('php-path'); - $parser = (bool) $this->option('parser'); - - $service = Typescriptable::models(new EloquentConfig( - modelsPath: $modelsPath, - outputPath: $outputPath, - phpPath: $phpPath, - useParser: $parser, - )); + $service = Typescriptable::models(); $namespaces = []; foreach ($service->app()->models() as $model) { diff --git a/src/Commands/TypescriptableRoutesCommand.php b/src/Commands/TypescriptableRoutesCommand.php index 76ab09d..ff073b9 100644 --- a/src/Commands/TypescriptableRoutesCommand.php +++ b/src/Commands/TypescriptableRoutesCommand.php @@ -3,26 +3,17 @@ namespace Kiwilan\Typescriptable\Commands; use Illuminate\Console\Command; -use Kiwilan\Typescriptable\Typed\Route\RouteConfig; use Kiwilan\Typescriptable\Typescriptable; class TypescriptableRoutesCommand extends Command { - public $signature = 'typescriptable:routes - {--o|output-path : Path to output TS file} - {--l|list : Print a TS file with all routes as object}'; + public $signature = 'typescriptable:routes'; public $description = 'Generate Routes types.'; public function handle(): int { - $outputPath = (string) $this->option('output-path'); - $withList = (bool) $this->option('list'); - - Typescriptable::routes(new RouteConfig( - outputPath: $outputPath, - withList: $withList, - )); + Typescriptable::routes(); $this->info('Generated Routes types.'); diff --git a/src/Commands/TypescriptableSettingsCommand.php b/src/Commands/TypescriptableSettingsCommand.php index 0591e8e..2580e6f 100644 --- a/src/Commands/TypescriptableSettingsCommand.php +++ b/src/Commands/TypescriptableSettingsCommand.php @@ -7,20 +7,13 @@ class TypescriptableSettingsCommand extends Command { - public $signature = 'typescriptable:settings - {--S|settings-path : Path to settings directory} - {--O|output-path : Path to output} - {--E|extends : Extends class to parse}'; + public $signature = 'typescriptable:settings'; public $description = 'Generate Spatie Settings types.'; public function handle(): int { - $settingsPath = (string) $this->option('settings-path'); - $outputPath = (string) $this->option('output-path'); - $extends = (string) $this->option('extends'); - - Typescriptable::settings($settingsPath, $outputPath, $extends); + Typescriptable::settings(); $this->info('Generated settings types.'); diff --git a/src/Typed/Eloquent/EloquentConfig.php b/src/Typed/Eloquent/EloquentConfig.php index d4f7b2a..9efe0df 100644 --- a/src/Typed/Eloquent/EloquentConfig.php +++ b/src/Typed/Eloquent/EloquentConfig.php @@ -8,27 +8,14 @@ class EloquentConfig { public function __construct( public ?string $modelsPath = null, - public ?string $outputPath = null, public ?string $phpPath = null, public bool $useParser = false, public array $skipModels = [], - public ?string $tsFilename = null, + public ?string $typescriptFilename = null, ) { - if (! $this->modelsPath) { - $this->modelsPath = TypescriptableConfig::eloquentDirectory(); - } - - $this->tsFilename = TypescriptableConfig::eloquentFilename(); - if (! $this->outputPath) { - $this->outputPath = TypescriptableConfig::setPath(); - } - - if (! $this->phpPath) { - $this->phpPath = TypescriptableConfig::eloquentPhpPath(); - } - - if (count($this->skipModels) === 0) { - $this->skipModels = TypescriptableConfig::eloquentSkip(); - } + $this->modelsPath = TypescriptableConfig::eloquentDirectory(); + $this->typescriptFilename = TypescriptableConfig::eloquentFilename(); + $this->phpPath = TypescriptableConfig::eloquentPhpPath(); + $this->skipModels = TypescriptableConfig::eloquentSkip(); } } diff --git a/src/Typed/Eloquent/Printer/PrinterToPhp.php b/src/Typed/Eloquent/Printer/PrinterEloquentPhp.php similarity index 99% rename from src/Typed/Eloquent/Printer/PrinterToPhp.php rename to src/Typed/Eloquent/Printer/PrinterEloquentPhp.php index 83e850d..6119485 100644 --- a/src/Typed/Eloquent/Printer/PrinterToPhp.php +++ b/src/Typed/Eloquent/Printer/PrinterEloquentPhp.php @@ -5,7 +5,7 @@ use Illuminate\Support\Facades\File; use Kiwilan\Typescriptable\Typed\Eloquent\Schemas\Model\SchemaModel; -class PrinterToPhp +class PrinterEloquentPhp { /** @var array */ public array $content; diff --git a/src/Typed/Eloquent/Printer/PrinterEloquentTypescript.php b/src/Typed/Eloquent/Printer/PrinterEloquentTypescript.php new file mode 100644 index 0000000..f6ccbe6 --- /dev/null +++ b/src/Typed/Eloquent/Printer/PrinterEloquentTypescript.php @@ -0,0 +1,52 @@ + $model) { + $contents[] = " export interface {$model->schemaClass()?->fullname()} {"; + + foreach ($model->attributes() as $attributeName => $attribute) { + $field = $attribute->nullable() ? "{$attributeName}?" : $attributeName; + $contents[] = " {$field}: {$attribute->typescriptType()}"; + } + + foreach ($model->relations() as $relationName => $relation) { + $contents[] = " {$relationName}?: {$relation->typescriptType()}"; + } + + $contents[] = ' }'; + } + + $contents[] = '}'; + $contents[] = ''; + + if (TypescriptableConfig::eloquentPaginate()) { + $contents[] = 'declare namespace App {'; + $contents[] = LaravelPaginateType::make(); + $contents[] = '}'; + } + $contents[] = ''; + + return implode(PHP_EOL, $contents); + } +} diff --git a/src/Typed/Eloquent/Printer/PrinterToTypescript.php b/src/Typed/Eloquent/Printer/PrinterToTypescript.php deleted file mode 100644 index 7021432..0000000 --- a/src/Typed/Eloquent/Printer/PrinterToTypescript.php +++ /dev/null @@ -1,70 +0,0 @@ - $model) { - $content[] = " export interface {$model->schemaClass()?->fullname()} {"; - - foreach ($model->attributes() as $attributeName => $attribute) { - $field = $attribute->nullable() ? "{$attributeName}?" : $attributeName; - $content[] = " {$field}: {$attribute->typescriptType()}"; - } - - foreach ($model->relations() as $relationName => $relation) { - $content[] = " {$relationName}?: {$relation->typescriptType()}"; - } - - $content[] = ' }'; - } - - $content[] = '}'; - $content[] = ''; - - if (TypescriptableConfig::eloquentPaginate()) { - $content[] = 'declare namespace App {'; - $content[] = LaravelPaginateType::make(); - $content[] = '}'; - } - $content[] = ''; - - $self->content = implode(PHP_EOL, $content); - - return $self; - } - - public function print(): void - { - if (! File::exists(dirname($this->path))) { - File::makeDirectory(dirname($this->path)); - } - File::delete($this->path); - - File::put($this->path, $this->content); - } -} diff --git a/src/Typed/EloquentType.php b/src/Typed/EloquentType.php index 810b1d0..17c3c05 100644 --- a/src/Typed/EloquentType.php +++ b/src/Typed/EloquentType.php @@ -6,10 +6,12 @@ use Kiwilan\Typescriptable\Typed\Eloquent\EloquentTypeArtisan; use Kiwilan\Typescriptable\Typed\Eloquent\EloquentTypeParser; use Kiwilan\Typescriptable\Typed\Eloquent\Parser\ParserModelFillable; -use Kiwilan\Typescriptable\Typed\Eloquent\Printer\PrinterToPhp; -use Kiwilan\Typescriptable\Typed\Eloquent\Printer\PrinterToTypescript; +use Kiwilan\Typescriptable\Typed\Eloquent\Printer\PrinterEloquentPhp; +use Kiwilan\Typescriptable\Typed\Eloquent\Printer\PrinterEloquentTypescript; use Kiwilan\Typescriptable\Typed\Eloquent\Schemas\SchemaApp; use Kiwilan\Typescriptable\Typed\Utils\Schema\SchemaClass; +use Kiwilan\Typescriptable\Typed\Utils\TypescriptableUtils; +use Kiwilan\Typescriptable\TypescriptableConfig; class EloquentType { @@ -17,9 +19,10 @@ class EloquentType protected function __construct( protected EloquentConfig $config, + protected ?string $typescript = null, ) {} - public static function make(EloquentConfig $config): self + public static function make(EloquentConfig $config = new EloquentConfig()): self { return new self($config); } @@ -35,12 +38,12 @@ public function execute(): self $type->run(); - $typescript = PrinterToTypescript::make($type->app()->models(), "{$type->config()->outputPath}/{$type->config()->tsFilename}"); - $typescript->print(); + $type->typescript = PrinterEloquentTypescript::make($type->app()->models()); + TypescriptableUtils::print($type->typescript, TypescriptableConfig::setPath($type->config()->typescriptFilename)); if ($type->config()->phpPath) { - $php = PrinterToPhp::make($type->app()->models(), $type->config()->phpPath); - $php->print(); + $printer = PrinterEloquentPhp::make($type->app()->models(), $type->config()->phpPath); + $printer->print(); } return $type; @@ -60,6 +63,11 @@ public function config(): EloquentConfig return $this->config; } + public function typescript(): ?string + { + return $this->typescript; + } + /** * Parse MongoDB model. */ diff --git a/src/Typed/Route/Printer/PrinterToList.php b/src/Typed/Route/Printer/PrinterRouteList.php similarity index 75% rename from src/Typed/Route/Printer/PrinterToList.php rename to src/Typed/Route/Printer/PrinterRouteList.php index f8f4e2b..4dc887f 100644 --- a/src/Typed/Route/Printer/PrinterToList.php +++ b/src/Typed/Route/Printer/PrinterRouteList.php @@ -6,8 +6,9 @@ use Kiwilan\Typescriptable\Typed\Route\Schemas\RouteTypeItem; use Kiwilan\Typescriptable\Typed\Route\Schemas\RouteTypeItemParam; use Kiwilan\Typescriptable\Typescriptable; +use Kiwilan\Typescriptable\TypescriptableConfig; -class PrinterToList +class PrinterRouteList { /** * @param Collection $routes @@ -29,24 +30,35 @@ private function template(string $contents): string $head = Typescriptable::head(); $appUrl = config('app.url'); - return << = { - {$contents}, - } + $global = ''; + $addToWindow = ''; + if (TypescriptableConfig::routesAddToWindow()) { + $global = <<<'typescript' - declare global { - interface Window { - Routes: Record - } - } + declare global { + interface Window { + Routes: Record + } + } - const appUrl = '{$appUrl}' + typescript; + $addToWindow = <<<'typescript' - if (typeof window !== 'undefined') { - window.Routes = Routes + if (typeof window !== 'undefined') { + window.Routes = Routes + } + + typescript; } + return << = { + {$contents} + } + {$global} + const appUrl = '{$appUrl}' + {$addToWindow} export { Routes, appUrl } typescript; @@ -80,13 +92,17 @@ private function typescript(RouteTypeItem $route): string $methods = array_map(fn ($method) => "'{$method}'", $methods); $methods = implode(', ', $methods); + $name = TypescriptableConfig::routesUsePath() + ? $route->uri() + : $route->name(); + return <<name()}': { + '{$name}': { name: '{$route->name()}', path: '{$route->uri()}', {$params}, methods: [{$methods}], - } + }, typescript; } } diff --git a/src/Typed/Route/Printer/PrinterToTypes.php b/src/Typed/Route/Printer/PrinterRouteTypes.php similarity index 55% rename from src/Typed/Route/Printer/PrinterToTypes.php rename to src/Typed/Route/Printer/PrinterRouteTypes.php index 647f165..6bf4293 100644 --- a/src/Typed/Route/Printer/PrinterToTypes.php +++ b/src/Typed/Route/Printer/PrinterRouteTypes.php @@ -7,40 +7,18 @@ use Kiwilan\Typescriptable\Typed\Route\Schemas\RouteTypeItem; use Kiwilan\Typescriptable\Typed\Route\Schemas\RouteTypeItemParam; use Kiwilan\Typescriptable\Typescriptable; +use Kiwilan\Typescriptable\TypescriptableConfig; -class PrinterToTypes +class PrinterRouteTypes { - // ROUTE NAMES - - protected ?string $tsNames = null; - - protected ?string $tsPaths = null; - - protected ?string $tsParams = null; - - // GLOBAL TYPES - - protected ?string $tsTypes = null; - - protected ?string $tsGlobalTypes = null; - - // TYPES - - protected ?string $tsGlobalTypesGet = null; - - protected ?string $tsGlobalTypesPost = null; - - protected ?string $tsGlobalTypesPut = null; - - protected ?string $tsGlobalTypesPatch = null; - - protected ?string $tsGlobalTypesDelete = null; - /** * @param Collection $routes */ protected function __construct( protected Collection $routes, + protected ?string $routeNames = null, + protected ?string $routePaths = null, + protected ?string $routeParams = null, ) {} /** @@ -50,34 +28,28 @@ public static function make(Collection $routes): string { $self = new self($routes); - $self->tsNames = $self->typescriptNames(); - $self->tsPaths = $self->typescriptPaths(); - $self->tsParams = $self->typescriptParams(); + $routeNames = $self->parseRouteNames(); + $self->routeNames = empty($routeNames) ? 'never' : $routeNames; - return $self->get(); - } + $routePaths = $self->parseRoutePaths(); + $self->routePaths = empty($routePaths) ? 'never' : $routePaths; - public function get(): string - { - $this->tsNames = empty($this->tsNames) ? 'never' : $this->tsNames; - $this->tsPaths = empty($this->tsPaths) ? 'never' : $this->tsPaths; + $self->routeParams = $self->parseRouteParams(); - $this->tsGlobalTypes = empty($this->tsGlobalTypes) ? 'never' : $this->tsGlobalTypes; - $this->tsGlobalTypesGet = empty($this->tsGlobalTypesGet) ? 'never' : $this->tsGlobalTypesGet; - $this->tsGlobalTypesPost = empty($this->tsGlobalTypesPost) ? 'never' : $this->tsGlobalTypesPost; - $this->tsGlobalTypesPut = empty($this->tsGlobalTypesPut) ? 'never' : $this->tsGlobalTypesPut; - $this->tsGlobalTypesPatch = empty($this->tsGlobalTypesPatch) ? 'never' : $this->tsGlobalTypesPatch; - $this->tsGlobalTypesDelete = empty($this->tsGlobalTypesDelete) ? 'never' : $this->tsGlobalTypesDelete; + return $self->typescript(); + } + public function typescript(): string + { $head = Typescriptable::head(); return <<tsNames}; - export type Path = {$this->tsPaths}; + export type Name = {$this->routeNames}; + export type Path = {$this->routePaths}; export interface Params { - {$this->tsParams} + {$this->routeParams} } export type Method = 'HEAD' | 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' @@ -92,11 +64,15 @@ public function get(): string typescript; } - private function typescriptNames(): string + private function parseRouteNames(): string { $names = []; $this->collectRoutes(function (RouteTypeItem $route) use (&$names) { - $names[] = "'{$route->name()}'"; + $name = TypescriptableConfig::routesUsePath() + ? $route->uri() + : $route->name(); + + $names[] = "'{$name}'"; }); $names = array_unique($names); @@ -105,7 +81,7 @@ private function typescriptNames(): string return implode(' | ', $names); } - private function typescriptPaths(): string + private function parseRoutePaths(): string { $uri = []; $this->collectRoutes(function (RouteTypeItem $route) use (&$uri) { @@ -115,7 +91,7 @@ private function typescriptPaths(): string return; } - $uri[] = "'/{$route->uri()}'"; + $uri[] = "'{$route->uri()}'"; }); $uri = array_unique($uri); @@ -124,19 +100,22 @@ private function typescriptPaths(): string return implode(' | ', $uri); } - private function typescriptParams(): string + private function parseRouteParams(): string { return $this->collectRoutes(function (RouteTypeItem $route) { $hasParams = count($route->parameters()) > 0; + $name = TypescriptableConfig::routesUsePath() + ? $route->uri() + : $route->name(); if ($hasParams) { $params = collect($route->parameters()) ->map(fn (RouteTypeItemParam $param) => "'{$param->name()}': App.Route.ParamType") - ->join("\n"); + ->join("\n "); - return " '{$route->name()}': {\n {$params}\n }"; + return " '$name}': {\n {$params}\n }"; } else { - return " '{$route->name()}': never"; + return " '{$name}': never"; } }, "\n"); } diff --git a/src/Typed/Route/RouteConfig.php b/src/Typed/Route/RouteConfig.php index 5826741..a454ade 100644 --- a/src/Typed/Route/RouteConfig.php +++ b/src/Typed/Route/RouteConfig.php @@ -6,12 +6,22 @@ class RouteConfig { + /** + * @param string[] $namesToSkip + * @param string[] $pathsToSkip + */ public function __construct( - public ?string $pathTypes = null, - public ?string $pathList = null, + public ?string $filenameTypes = null, + public ?string $filenameList = null, + public bool $printList = true, public ?array $json = null, + public array $namesToSkip = [], + public array $pathsToSkip = [], ) { - $this->pathTypes = $pathTypes.DIRECTORY_SEPARATOR.TypescriptableConfig::routesFilename(); - $this->pathList = $pathList.DIRECTORY_SEPARATOR.TypescriptableConfig::routesFilenameList(); + $this->filenameTypes = TypescriptableConfig::routesFilename(); + $this->filenameList = TypescriptableConfig::routesFilenameList(); + $this->printList = TypescriptableConfig::routesPrintList(); + $this->namesToSkip = TypescriptableConfig::routesSkipName(); + $this->pathsToSkip = TypescriptableConfig::routesSkipPath(); } } diff --git a/src/Typed/Route/Schemas/RouteTypeItem.php b/src/Typed/Route/Schemas/RouteTypeItem.php index c103063..8931f0c 100644 --- a/src/Typed/Route/Schemas/RouteTypeItem.php +++ b/src/Typed/Route/Schemas/RouteTypeItem.php @@ -34,7 +34,7 @@ public static function make(array $route): self $self = new self( domain: $route['domain'] ?? null, - uri: "/{$uri}", + uri: $uri === '/' ? $uri : "/{$uri}", name: $route['name'] ?? null, action: $route['action'] ?? null, methodMain: $methods[0] ?? 'GET', @@ -45,7 +45,8 @@ public static function make(array $route): self $self->parameters = $self->parseParameters(); if (! $self->name) { - $self->name = Str::slug($self->uri, '.'); + $name = str_replace('/', '.', $self->uri); + $self->name = Str::slug($name, '.'); } return $self; diff --git a/src/Typed/RouteType.php b/src/Typed/RouteType.php index 0e5d351..22e51d3 100644 --- a/src/Typed/RouteType.php +++ b/src/Typed/RouteType.php @@ -5,11 +5,11 @@ use Illuminate\Foundation\Console\RouteListCommand; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Artisan; -use Illuminate\Support\Facades\File; -use Kiwilan\Typescriptable\Typed\Route\Printer\PrinterToList; -use Kiwilan\Typescriptable\Typed\Route\Printer\PrinterToTypes; +use Kiwilan\Typescriptable\Typed\Route\Printer\PrinterRouteList; +use Kiwilan\Typescriptable\Typed\Route\Printer\PrinterRouteTypes; use Kiwilan\Typescriptable\Typed\Route\RouteConfig; use Kiwilan\Typescriptable\Typed\Route\Schemas\RouteTypeItem; +use Kiwilan\Typescriptable\Typed\Utils\TypescriptableUtils; use Kiwilan\Typescriptable\TypescriptableConfig; class RouteType @@ -24,29 +24,43 @@ protected function __construct( protected ?string $typescriptTypes = null, ) {} - public static function make(RouteConfig $config): self + public static function make(RouteConfig $config = new RouteConfig()): self { $self = new self($config); $self->routes = $self->parseRoutes(); - $self->typescriptList = PrinterToList::make($self->routes); - ray($self->typescriptList); - $self->typescriptTypes = PrinterToTypes::make($self->routes); - ray($self->typescriptTypes); + $self->typescriptTypes = PrinterRouteTypes::make($self->routes); + $self->typescriptList = PrinterRouteList::make($self->routes); - // handle TypescriptableConfig::routesUsePath() + TypescriptableUtils::print($self->typescriptTypes, TypescriptableConfig::setPath($self->config->filenameTypes)); + if ($self->config->printList) { + TypescriptableUtils::print($self->typescriptList, TypescriptableConfig::setPath($self->config->filenameList)); + } - // if (! $outputPath) { - // $file = TypescriptableConfig::setPath($filename); - // $fileRoutes = TypescriptableConfig::setPath($filenameRoutes); - // } + return $self; + } - // $self->print($file, $routeTypes); - // if ($withList) { - // $self->print($fileRoutes, $routeList); - // } + public function config(): RouteConfig + { + return $this->config; + } - return $self; + /** + * @return Collection + */ + public function routes(): Collection + { + return $this->routes; + } + + public function typescriptList(): ?string + { + return $this->typescriptList; + } + + public function typescriptTypes(): ?string + { + return $this->typescriptTypes; } /** @@ -62,9 +76,12 @@ private function parseRoutes(): Collection $routes = $this->config->json; - $skipNames = $this->toSkip(TypescriptableConfig::routesSkipName()); - $skipPaths = $this->toSkip(TypescriptableConfig::routesSkipPath()); + $skipNames = $this->toSkip($this->config->namesToSkip); + $skipPaths = $this->toSkip($this->config->pathsToSkip); + if (! $routes) { + throw new \Exception('No routes found.'); + } $routes = array_filter($routes, fn ($route) => $this->filterBy($route, 'uri', $skipPaths)); $routes = array_filter($routes, fn ($route) => $this->filterBy($route, 'name', $skipNames)); $routes = array_values($routes); @@ -106,15 +123,4 @@ private function filterBy(array $route, string $attribute, array $toSkip): bool return true; } - - private function print(string $path, string $content): void - { - if (! File::exists(dirname($path))) { - File::makeDirectory(dirname($path)); - } - - File::delete($path); - - File::put($path, $content); - } } diff --git a/src/Typed/Setting/SettingItem.php b/src/Typed/Setting/SettingItem.php deleted file mode 100644 index 6c6ef20..0000000 --- a/src/Typed/Setting/SettingItem.php +++ /dev/null @@ -1,80 +0,0 @@ -reflect()->getProperties() as $property) { - if ($class->namespace() === $property->class) { - $item = SettingItemProperty::make($property); - $properties[$item->name] = $item; - } - } - - $self = new self( - class: $class, - name: $class->name(), - properties: $properties, - ); - - return $self; - } -} - -class SettingItemProperty -{ - protected function __construct( - public string $name, - public string $type = 'mixed', - public bool $isNullable = false, - public bool $isBuiltin = false, - public string $typeTs = 'any', - ) {} - - public static function make(ReflectionProperty $property): self - { - $type = $property->getType(); - $extra = $property->getDocComment(); - $typeDoc = null; - if ($extra) { - $phpDoc = "/**\n* @var array\n*/"; - $regex = '/@var\s+(.*)/'; - preg_match($regex, $phpDoc, $matches); - $typeDoc = $matches[1]; - } - - $phpType = $type instanceof ReflectionNamedType ? $type->getName() : 'mixed'; - if ($typeDoc) { - $phpType = $typeDoc; - } - - $self = new self( - name: $property->getName(), - type: $phpType, - isNullable: $type->allowsNull(), - isBuiltin: $type instanceof ReflectionNamedType ? $type->isBuiltin() : false, - ); - - $parser = ParserPhpType::make($self->type); - $self->typeTs = $parser->typescriptType(); - - return $self; - } -} diff --git a/src/Typed/Setting/SettingTypescript.php b/src/Typed/Setting/SettingTypescript.php deleted file mode 100644 index 36558fe..0000000 --- a/src/Typed/Setting/SettingTypescript.php +++ /dev/null @@ -1,53 +0,0 @@ - $items - */ - public static function make(array $items, string $path): self - { - $self = new self($path); - - /** @var string[] */ - $content = []; - - $content = array_merge($content, Typescriptable::TS_HEAD); - $content[] = 'declare namespace App.Settings {'; - - foreach ($items as $model => $item) { - $content[] = " export interface {$model} {"; - foreach ($item->properties as $field => $property) { - $field = $property->isNullable ? "{$field}?" : $field; - $content[] = " {$field}: {$property->typeTs}"; - } - $content[] = ' }'; - } - $content[] = '}'; - $content[] = ''; - - $self->content = implode(PHP_EOL, $content); - - return $self; - } - - public function print(): void - { - if (! File::exists(dirname($this->path))) { - File::makeDirectory(dirname($this->path)); - } - File::delete($this->path); - - File::put($this->path, $this->content); - } -} diff --git a/src/Typed/SettingType.php b/src/Typed/SettingType.php deleted file mode 100644 index 1e63b49..0000000 --- a/src/Typed/SettingType.php +++ /dev/null @@ -1,56 +0,0 @@ -items(), fn (SchemaClass $item) => $item->extends() === $extends); - - $self = new self($settingsPath, $outputPath); - - foreach ($items as $item) { - $item = SettingItem::make($item); - $self->items[$item->name] = $item; - } - - $typescript = SettingTypescript::make($self->items, "{$outputPath}/{$tsFilename}"); - $typescript->print(); - - return $self; - } -} diff --git a/src/Typed/Settings/Printer/PrinterSettings.php b/src/Typed/Settings/Printer/PrinterSettings.php new file mode 100644 index 0000000..33eb75c --- /dev/null +++ b/src/Typed/Settings/Printer/PrinterSettings.php @@ -0,0 +1,36 @@ + $items + */ + public static function make(array $items): string + { + $self = new self(); + + /** @var string[] */ + $content = []; + + $content = array_merge($content, Typescriptable::TS_HEAD); + $content[] = 'declare namespace App.Settings {'; + + foreach ($items as $model => $item) { + $content[] = " export interface {$model} {"; + foreach ($item->properties() as $field => $property) { + $field = $property->isNullable() ? "{$field}?" : $field; + $content[] = " {$field}: {$property->typescriptType()}"; + } + $content[] = ' }'; + } + $content[] = '}'; + $content[] = ''; + + return implode(PHP_EOL, $content); + } +} diff --git a/src/Typed/Settings/Schemas/SettingItemProperty.php b/src/Typed/Settings/Schemas/SettingItemProperty.php new file mode 100644 index 0000000..29c2945 --- /dev/null +++ b/src/Typed/Settings/Schemas/SettingItemProperty.php @@ -0,0 +1,72 @@ +getType(); + $extra = $property->getDocComment(); + $typeDoc = null; + if ($extra) { + $phpDoc = "/**\n* @var array\n*/"; + $regex = '/@var\s+(.*)/'; + preg_match($regex, $phpDoc, $matches); + $typeDoc = $matches[1]; + } + + $phpType = $phpType instanceof ReflectionNamedType ? $phpType->getName() : 'mixed'; + if ($typeDoc) { + $phpType = $typeDoc; + } + + $self = new self( + name: $property->getName(), + phpType: $phpType, + // isNullable: $phpType->allowsNull(), + // isBuiltin: $phpType instanceof ReflectionNamedType ? $phpType->isBuiltin() : false, + ); + + $self->typescriptType = ParserPhpType::toTypescript($self->phpType); + + return $self; + } + + public function name(): string + { + return $this->name; + } + + public function phpType(): string + { + return $this->phpType; + } + + public function isNullable(): bool + { + return $this->isNullable; + } + + public function isBuiltin(): bool + { + return $this->isBuiltin; + } + + public function typescriptType(): string + { + return $this->typescriptType; + } +} diff --git a/src/Typed/Settings/Schemas/SettingsItem.php b/src/Typed/Settings/Schemas/SettingsItem.php new file mode 100644 index 0000000..87f4450 --- /dev/null +++ b/src/Typed/Settings/Schemas/SettingsItem.php @@ -0,0 +1,59 @@ +reflect()->getProperties() as $property) { + if ($class->namespace() === $property->class) { + $item = SettingItemProperty::make($property); + $properties[$item->name()] = $item; + } + } + + $self = new self( + class: $class, + name: $class->name(), + properties: $properties, + ); + + return $self; + } + + public function class(): SchemaClass + { + return $this->class; + } + + public function name(): string + { + return $this->name; + } + + /** + * @return SettingItemProperty[] + */ + public function properties(): array + { + return $this->properties; + } + + public function property(string $name): SettingItemProperty + { + return $this->properties[$name]; + } +} diff --git a/src/Typed/Settings/SettingsConfig.php b/src/Typed/Settings/SettingsConfig.php new file mode 100644 index 0000000..e00c9d1 --- /dev/null +++ b/src/Typed/Settings/SettingsConfig.php @@ -0,0 +1,23 @@ +filename = TypescriptableConfig::settingsFilename(); + $this->directory = TypescriptableConfig::settingsDirectory(); + $this->extends = TypescriptableConfig::settingsExtends(); + $this->toSkip = TypescriptableConfig::settingsSkip(); + } +} diff --git a/src/Typed/SettingsType.php b/src/Typed/SettingsType.php new file mode 100644 index 0000000..13abec3 --- /dev/null +++ b/src/Typed/SettingsType.php @@ -0,0 +1,68 @@ + $items + */ + protected function __construct( + protected SettingsConfig $config, + protected array $items = [], + protected ?string $typescript = null, + ) {} + + public static function make(SettingsConfig $config = new SettingsConfig()): ?self + { + $self = new self($config); + + if (! file_exists($self->config->directory)) { + return null; + } + + $collect = SchemaCollection::make($self->config->directory, $self->config->toSkip); + $items = array_filter($collect->items(), fn (SchemaClass $item) => $item->extends() === $self->config->extends); + + foreach ($items as $item) { + $item = SettingsItem::make($item); + $self->items[$item->name()] = $item; + } + + $printer = PrinterSettings::make($self->items); + TypescriptableUtils::print($printer, TypescriptableConfig::setPath($self->config->filename)); + + return $self; + } + + public function config(): SettingsConfig + { + return $this->config; + } + + /** + * @return array + */ + public function items(): array + { + return $this->items; + } + + public function item(string $name): SettingsItem + { + return $this->items[$name]; + } + + public function typescript(): ?string + { + return $this->typescript; + } +} diff --git a/src/Typed/Utils/EloquentList.php b/src/Typed/Utils/EloquentList.php index 72074f7..f9ce59f 100644 --- a/src/Typed/Utils/EloquentList.php +++ b/src/Typed/Utils/EloquentList.php @@ -19,7 +19,7 @@ protected function __construct( public static function make(?string $path = null): self { if (! $path) { - $path = app_path().'/Models'; + $path = TypescriptableConfig::eloquentDirectory(); } $self = new self($path); diff --git a/src/Typed/Utils/TypescriptableUtils.php b/src/Typed/Utils/TypescriptableUtils.php new file mode 100644 index 0000000..7884824 --- /dev/null +++ b/src/Typed/Utils/TypescriptableUtils.php @@ -0,0 +1,18 @@ +execute(); } - public static function routes(RouteConfig $config): RouteType + public static function routes(RouteConfig $config = new RouteConfig()): RouteType { return RouteType::make($config); } - public static function settings(string $settings_path, string $output_path, string $extends): ?SettingType + public static function settings(SettingsConfig $config = new SettingsConfig()): ?SettingsType { - return SettingType::make($settings_path, $output_path, $extends); + return SettingsType::make($config); } } diff --git a/src/TypescriptableConfig.php b/src/TypescriptableConfig.php index 2bff57f..9d24aab 100644 --- a/src/TypescriptableConfig.php +++ b/src/TypescriptableConfig.php @@ -77,6 +77,11 @@ public static function settingsDirectory(): string return config('typescriptable.settings.directory') ?? app_path('Settings'); } + public static function settingsExtends(): ?string + { + return config('typescriptable.settings.extends') ?? null; + } + public static function settingsSkip(): array { return config('typescriptable.settings.skip') ?? []; @@ -92,6 +97,16 @@ public static function routesFilenameList(): string return config('typescriptable.routes.filename_list') ?? 'routes.ts'; } + public static function routesPrintList(): bool + { + return config('typescriptable.routes.print_list') ?? true; + } + + public static function routesAddToWindow(): bool + { + return config('typescriptable.routes.add_to_window') ?? true; + } + public static function routesUsePath(): bool { return config('typescriptable.routes.use_path') ?? false; diff --git a/tests/CommandEloquentTest.php b/tests/CommandEloquentTest.php index 382167b..cb7c1aa 100644 --- a/tests/CommandEloquentTest.php +++ b/tests/CommandEloquentTest.php @@ -6,17 +6,16 @@ use Kiwilan\Typescriptable\TypescriptableConfig; beforeEach(function () { - deleteFile(outputDir('types-eloquent.d.ts')); + deleteFile(outputDir(TypescriptableConfig::eloquentFilename())); + config()->set('typescriptable.eloquent.directory', models()); + config()->set('typescriptable.eloquent.php_path', outputDir('php')); + config()->set('typescriptable.eloquent.paginate', true); }); it('can use command', function () { + config()->set('typescriptable.engine.eloquent', 'artisan'); TestCase::setupDatabase('sqlite'); - Artisan::call(TypescriptableEloquentCommand::class, [ - '--models-path' => models(), - '--output-path' => outputDir(), - '--php-path' => outputDir().'/php', - '--parser' => false, - ]); + Artisan::call(TypescriptableEloquentCommand::class); expect(true)->toBeTrue(); // fake assertion to check if the command runs without error $eloquent = outputDir(TypescriptableConfig::eloquentFilename()); @@ -24,12 +23,8 @@ }); it('can use alias command', function () { - Artisan::call('typescriptable:models', [ - '--models-path' => models(), - '--output-path' => outputDir(), - '--php-path' => outputDir().'/php', - '--parser' => true, - ]); + config()->set('typescriptable.engine.eloquent', 'parser'); + Artisan::call('typescriptable:models'); expect(true)->toBeTrue(); // fake assertion to check if the command runs without error $eloquent = outputDir(TypescriptableConfig::eloquentFilename()); diff --git a/tests/CommandRoutesTest.php b/tests/CommandRoutesTest.php index c7b2278..c6e1edf 100644 --- a/tests/CommandRoutesTest.php +++ b/tests/CommandRoutesTest.php @@ -4,14 +4,11 @@ use Kiwilan\Typescriptable\TypescriptableConfig; beforeEach(function () { - deleteFile(outputDir('types-routes.d.ts')); + deleteFile(outputDir(TypescriptableConfig::routesFilename())); }); it('can be run', function () { - Artisan::call('typescriptable:routes', [ - '--list' => true, - '--output-path' => outputDir(), - ]); + Artisan::call('typescriptable:routes'); $routes = outputDir(TypescriptableConfig::routesFilename()); expect($routes)->toBeFile(); diff --git a/tests/CommandSettingsTest.php b/tests/CommandSettingsTest.php index 072a8f1..bc440db 100644 --- a/tests/CommandSettingsTest.php +++ b/tests/CommandSettingsTest.php @@ -6,14 +6,16 @@ beforeEach(function () { deleteFile(outputDir('types-settings.d.ts')); + + deleteFile(outputDir(TypescriptableConfig::settingsFilename())); + config()->set('typescriptable.settings.filename', settingsDir()); + config()->set('typescriptable.settings.directory', setttingsOutputDir()); + config()->set('typescriptable.settings.extends', settingsExtends()); + config()->set('typescriptable.settings.skip', []); }); it('can be run', function () { - Artisan::call(TypescriptableSettingsCommand::class, [ - '--settings-path' => settingsDir(), - '--output-path' => setttingsOutputDir(), - '--extends' => settingsExtends(), - ]); + Artisan::call(TypescriptableSettingsCommand::class); $settings = outputDir(TypescriptableConfig::settingsFilename()); expect($settings)->toBeFile(); diff --git a/tests/EloquentTypeArtisanMysqlTest.php b/tests/EloquentTypeArtisanMysqlTest.php index 368156d..8f60f3b 100644 --- a/tests/EloquentTypeArtisanMysqlTest.php +++ b/tests/EloquentTypeArtisanMysqlTest.php @@ -6,7 +6,15 @@ use Kiwilan\Typescriptable\TypescriptableConfig; beforeEach(function () { - deleteFile(outputDir('types-eloquent.d.ts')); + deleteFile(outputDir(TypescriptableConfig::eloquentFilename())); + config()->set('typescriptable.output_path', outputDir()); + config()->set('typescriptable.engine.eloquent', 'artisan'); + config()->set('typescriptable.eloquent.directory', models()); + config()->set('typescriptable.eloquent.php_path', outputDir('php')); + config()->set('typescriptable.eloquent.paginate', true); + config()->set('typescriptable.eloquent.skip', [ + 'Kiwilan\\Typescriptable\\Tests\\Data\\Models\\SushiTest' + ]); }); it('can be run with artisan', function () { @@ -14,10 +22,10 @@ $type = EloquentType::make(new EloquentConfig( modelsPath: models(), - outputPath: outputDir(), + outputPath: , phpPath: outputDir().'/php', useParser: false, - skipModels: ['Kiwilan\\Typescriptable\\Tests\\Data\\Models\\SushiTest'], + skipModels: [], ))->execute(); $eloquent = outputDir(TypescriptableConfig::eloquentFilename()); diff --git a/tests/RouteTypeTest.php b/tests/RouteTypeTest.php index e78aea3..f10db9c 100644 --- a/tests/RouteTypeTest.php +++ b/tests/RouteTypeTest.php @@ -2,15 +2,21 @@ use Kiwilan\Typescriptable\Typed\Route\RouteConfig; use Kiwilan\Typescriptable\Typed\RouteType; +use Kiwilan\Typescriptable\TypescriptableConfig; beforeEach(function () { - deleteFile(outputDir('types-routes.d.ts')); + deleteFile(outputDir(TypescriptableConfig::routesFilename())); + deleteFile(outputDir(TypescriptableConfig::routesFilenameList())); + + config()->set('typescriptable.routes.filename', 'types-routes.d.ts'); + config()->set('typescriptable.routes.filename_list', 'routes.ts'); + config()->set('typescriptable.routes.print_list', true); + config()->set('typescriptable.routes.add_to_window', false); + config()->set('typescriptable.routes.use_path', false); }); it('can type routes', function () { $type = RouteType::make(new RouteConfig( - pathTypes: outputDir(), - pathList: outputDir(), json: json_decode(file_get_contents(routes()), true), )); ray($type); diff --git a/tests/SettingsTypeTest.php b/tests/SettingsTypeTest.php index 7daaf4e..021a68c 100644 --- a/tests/SettingsTypeTest.php +++ b/tests/SettingsTypeTest.php @@ -1,11 +1,12 @@ set('media-library.media_model', \Spatie\MediaLibrary\MediaCollections\Models\Media::class); + + config()->set('typescriptable.routes.filename', 'types-routes.d.ts'); + config()->set('typescriptable.routes.filename_list', 'routes.ts'); + config()->set('typescriptable.routes.print_list', true); + config()->set('typescriptable.routes.add_to_window', false); + config()->set('typescriptable.routes.use_path', false); + + config()->set('typescriptable.output_path', outputDir()); + + config()->set('typescriptable.eloquent.directory', models()); + config()->set('typescriptable.eloquent.php_path', outputDir('php')); + config()->set('typescriptable.eloquent.paginate', true); + + config()->set('typescriptable.engine.eloquent', 'artisan'); } public static function setupDatabase(?string $type = null): void @@ -159,9 +173,7 @@ public static function setupDatabase(?string $type = null): void // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), ], 'mongodb' => [ - 'driver' => 'mongodb', 'dsn' => $driver->url, - 'database' => $driver->database, ], ]; diff --git a/tests/output/.gitignore b/tests/output/.gitignore deleted file mode 100644 index d6b7ef3..0000000 --- a/tests/output/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore From 9f02530754403eb89762472fc31dd612ebc135fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Thu, 25 Jul 2024 12:03:11 +0200 Subject: [PATCH 06/15] Fix tests, improve configs --- src/Typed/Eloquent/EloquentConfig.php | 23 +++++++++--- src/Typed/Route/RouteConfig.php | 23 +++++++++--- src/Typed/RouteType.php | 2 +- src/Typed/Settings/SettingsConfig.php | 19 +++++++--- src/TypescriptableConfig.php | 10 +++--- tests/CommandSettingsTest.php | 7 ++-- tests/CommandTypescriptableTest.php | 7 ++-- tests/EloquentConfigTest.php | 22 ++++++------ tests/EloquentListTest.php | 10 +++--- tests/EloquentTypeArtisanMysqlTest.php | 33 ----------------- tests/EloquentTypeArtisanTest.php | 13 +++---- tests/EloquentTypeParserTest.php | 13 +++---- tests/EloquentTypescriptTest.php | 12 ++----- tests/MongodbTest.php | 15 ++------ tests/Pest.php | 50 ++++++++++++++++++++------ tests/RouteTypeTest.php | 4 +-- tests/SchemaAppTest.php | 16 ++++----- tests/TypescriptableConfigTest.php | 4 +++ tests/output/.gitignore | 2 ++ 19 files changed, 151 insertions(+), 134 deletions(-) delete mode 100644 tests/EloquentTypeArtisanMysqlTest.php create mode 100644 tests/output/.gitignore diff --git a/src/Typed/Eloquent/EloquentConfig.php b/src/Typed/Eloquent/EloquentConfig.php index 9efe0df..0a2ae14 100644 --- a/src/Typed/Eloquent/EloquentConfig.php +++ b/src/Typed/Eloquent/EloquentConfig.php @@ -13,9 +13,24 @@ public function __construct( public array $skipModels = [], public ?string $typescriptFilename = null, ) { - $this->modelsPath = TypescriptableConfig::eloquentDirectory(); - $this->typescriptFilename = TypescriptableConfig::eloquentFilename(); - $this->phpPath = TypescriptableConfig::eloquentPhpPath(); - $this->skipModels = TypescriptableConfig::eloquentSkip(); + if (! $this->modelsPath) { + $this->modelsPath = TypescriptableConfig::eloquentDirectory(); + } + + if (! $this->useParser) { + $this->useParser = TypescriptableConfig::engineEloquent() === 'parser'; + } + + if (! $this->phpPath) { + $this->phpPath = TypescriptableConfig::eloquentPhpPath(); + } + + if (! $this->skipModels) { + $this->skipModels = TypescriptableConfig::eloquentSkip(); + } + + if (! $this->typescriptFilename) { + $this->typescriptFilename = TypescriptableConfig::eloquentFilename(); + } } } diff --git a/src/Typed/Route/RouteConfig.php b/src/Typed/Route/RouteConfig.php index a454ade..227a1e2 100644 --- a/src/Typed/Route/RouteConfig.php +++ b/src/Typed/Route/RouteConfig.php @@ -18,10 +18,23 @@ public function __construct( public array $namesToSkip = [], public array $pathsToSkip = [], ) { - $this->filenameTypes = TypescriptableConfig::routesFilename(); - $this->filenameList = TypescriptableConfig::routesFilenameList(); - $this->printList = TypescriptableConfig::routesPrintList(); - $this->namesToSkip = TypescriptableConfig::routesSkipName(); - $this->pathsToSkip = TypescriptableConfig::routesSkipPath(); + if (! $this->filenameTypes) { + $this->filenameTypes = TypescriptableConfig::routesFilename(); + } + + if (! $this->filenameList) { + $this->filenameList = TypescriptableConfig::routesFilenameList(); + } + + if (! $this->printList) { + $this->printList = TypescriptableConfig::routesPrintList(); + } + if (! $this->namesToSkip) { + $this->namesToSkip = TypescriptableConfig::routesSkipName(); + } + + if (! $this->pathsToSkip) { + $this->pathsToSkip = TypescriptableConfig::routesSkipPath(); + } } } diff --git a/src/Typed/RouteType.php b/src/Typed/RouteType.php index 22e51d3..02ef142 100644 --- a/src/Typed/RouteType.php +++ b/src/Typed/RouteType.php @@ -80,7 +80,7 @@ private function parseRoutes(): Collection $skipPaths = $this->toSkip($this->config->pathsToSkip); if (! $routes) { - throw new \Exception('No routes found.'); + return collect(); } $routes = array_filter($routes, fn ($route) => $this->filterBy($route, 'uri', $skipPaths)); $routes = array_filter($routes, fn ($route) => $this->filterBy($route, 'name', $skipNames)); diff --git a/src/Typed/Settings/SettingsConfig.php b/src/Typed/Settings/SettingsConfig.php index e00c9d1..f6b3374 100644 --- a/src/Typed/Settings/SettingsConfig.php +++ b/src/Typed/Settings/SettingsConfig.php @@ -15,9 +15,20 @@ public function __construct( public ?string $extends = null, public array $toSkip = [], ) { - $this->filename = TypescriptableConfig::settingsFilename(); - $this->directory = TypescriptableConfig::settingsDirectory(); - $this->extends = TypescriptableConfig::settingsExtends(); - $this->toSkip = TypescriptableConfig::settingsSkip(); + if (! $this->filename) { + $this->filename = TypescriptableConfig::settingsFilename(); + } + + if (! $this->directory) { + $this->directory = TypescriptableConfig::settingsDirectory(); + } + + if (! $this->extends) { + $this->extends = TypescriptableConfig::settingsExtends(); + } + + if (! $this->toSkip) { + $this->toSkip = TypescriptableConfig::settingsSkip(); + } } } diff --git a/src/TypescriptableConfig.php b/src/TypescriptableConfig.php index 9d24aab..c6e35ee 100644 --- a/src/TypescriptableConfig.php +++ b/src/TypescriptableConfig.php @@ -115,23 +115,25 @@ public static function routesUsePath(): bool public static function routesSkipName(): array { return config('typescriptable.routes.skip.name') ?? [ - '__clockwork.*', 'debugbar.*', 'horizon.*', 'telescope.*', 'nova.*', 'lighthouse.*', - 'livewire.*', - 'ignition.*', 'filament.*', 'log-viewer.*', + 'two-factor.*', ]; } public static function routesSkipPath(): array { return config('typescriptable.routes.skip.path') ?? [ - 'api/*', + '_ignition/*', + '__clockwork/*', + 'clockwork/*', + 'two-factor-challenge', + 'livewire', ]; } diff --git a/tests/CommandSettingsTest.php b/tests/CommandSettingsTest.php index bc440db..edc7e59 100644 --- a/tests/CommandSettingsTest.php +++ b/tests/CommandSettingsTest.php @@ -5,11 +5,10 @@ use Kiwilan\Typescriptable\TypescriptableConfig; beforeEach(function () { - deleteFile(outputDir('types-settings.d.ts')); - deleteFile(outputDir(TypescriptableConfig::settingsFilename())); - config()->set('typescriptable.settings.filename', settingsDir()); - config()->set('typescriptable.settings.directory', setttingsOutputDir()); + + config()->set('typescriptable.settings.filename', 'types-settings.d.ts'); + config()->set('typescriptable.settings.directory', settingsDir()); config()->set('typescriptable.settings.extends', settingsExtends()); config()->set('typescriptable.settings.skip', []); }); diff --git a/tests/CommandTypescriptableTest.php b/tests/CommandTypescriptableTest.php index 7c15555..784cf2f 100644 --- a/tests/CommandTypescriptableTest.php +++ b/tests/CommandTypescriptableTest.php @@ -3,11 +3,12 @@ use Illuminate\Support\Facades\Artisan; use Kiwilan\Typescriptable\Commands\TypescriptableCommand; use Kiwilan\Typescriptable\Tests\TestCase; +use Kiwilan\Typescriptable\TypescriptableConfig; beforeEach(function () { - deleteFile(outputDir('types-eloquent.d.ts')); - deleteFile(outputDir('types-routes.d.ts')); - deleteFile(outputDir('types-settings.d.ts')); + deleteFile(outputDir(TypescriptableConfig::eloquentFilename())); + deleteFile(outputDir(TypescriptableConfig::routesFilename())); + deleteFile(outputDir(TypescriptableConfig::settingsFilename())); }); it('can use command', function () { diff --git a/tests/EloquentConfigTest.php b/tests/EloquentConfigTest.php index fb151ee..ff507b7 100644 --- a/tests/EloquentConfigTest.php +++ b/tests/EloquentConfigTest.php @@ -3,34 +3,34 @@ use Kiwilan\Typescriptable\Typed\Eloquent\EloquentConfig; it('can use default config', function () { - config(['typescriptable.eloquent.skip' => [ + config()->set('typescriptable.eloquent.php_path', null); + config()->set('typescriptable.eloquent.skip', [ 'Kiwilan\\Typescriptable\\Tests\\Data\\Models\\SushiTest', - ]]); + ]); - $config = new EloquentConfig; + $config = new EloquentConfig(); - expect($config->modelsPath)->toContain('vendor/orchestra/testbench-core/laravel/app/Models'); - expect($config->outputPath)->toContain('vendor/orchestra/testbench-core/laravel/resources/js'); + expect($config->modelsPath)->toContain('tests/Data/Models'); expect($config->phpPath)->toBeNull(); expect($config->useParser)->toBeFalse(); - expect($config->tsFilename)->toBe('types-eloquent.d.ts'); + expect($config->typescriptFilename)->toBe('types-eloquent.d.ts'); expect($config->skipModels)->toBeArray(); expect(count($config->skipModels))->toBe(1); expect($config->skipModels[0])->toBe('Kiwilan\Typescriptable\Tests\Data\Models\SushiTest'); $config = new EloquentConfig( modelsPath: models(), - outputPath: outputDir(), - phpPath: outputDir().'/php', + phpPath: outputDir('php'), useParser: false, skipModels: ['App\\Models\\SushiTest'], + typescriptFilename: 'eloquent.d.ts', ); + ray($config); expect($config->modelsPath)->toBe(models()); - expect($config->outputPath)->toBe(outputDir()); - expect($config->phpPath)->toBe(outputDir().'/php'); + expect($config->phpPath)->toBe(outputDir('php')); expect($config->useParser)->toBeFalse(); - expect($config->tsFilename)->toBe('types-eloquent.d.ts'); + expect($config->typescriptFilename)->toBe('eloquent.d.ts'); expect($config->skipModels)->toBeArray(); expect(count($config->skipModels))->toBe(1); expect($config->skipModels[0])->toBe('App\Models\SushiTest'); diff --git a/tests/EloquentListTest.php b/tests/EloquentListTest.php index f2d96c1..c624b70 100644 --- a/tests/EloquentListTest.php +++ b/tests/EloquentListTest.php @@ -3,18 +3,20 @@ use Illuminate\Support\Facades\Artisan; use Kiwilan\Typescriptable\Typed\Utils\EloquentList; +beforeEach(function () { + eloquentConfig(); +}); + it('can list models', function () { $list = EloquentList::make(models()); expect($list->models())->toBeArray(); expect($list->path())->toBe(models()); - expect(count($list->models()))->toBe(9); + expect(count($list->models()))->toBe(8); }); it('can use command', function () { - Artisan::call('eloquent:list', [ - 'modelPath' => models(), - ]); + Artisan::call('eloquent:list'); $output = Artisan::output(); expect($output)->toContain('Name'); diff --git a/tests/EloquentTypeArtisanMysqlTest.php b/tests/EloquentTypeArtisanMysqlTest.php deleted file mode 100644 index 8f60f3b..0000000 --- a/tests/EloquentTypeArtisanMysqlTest.php +++ /dev/null @@ -1,33 +0,0 @@ -set('typescriptable.output_path', outputDir()); - config()->set('typescriptable.engine.eloquent', 'artisan'); - config()->set('typescriptable.eloquent.directory', models()); - config()->set('typescriptable.eloquent.php_path', outputDir('php')); - config()->set('typescriptable.eloquent.paginate', true); - config()->set('typescriptable.eloquent.skip', [ - 'Kiwilan\\Typescriptable\\Tests\\Data\\Models\\SushiTest' - ]); -}); - -it('can be run with artisan', function () { - TestCase::setupDatabase('mysql'); - - $type = EloquentType::make(new EloquentConfig( - modelsPath: models(), - outputPath: , - phpPath: outputDir().'/php', - useParser: false, - skipModels: [], - ))->execute(); - - $eloquent = outputDir(TypescriptableConfig::eloquentFilename()); - expect($eloquent)->toBeFile(); -}); diff --git a/tests/EloquentTypeArtisanTest.php b/tests/EloquentTypeArtisanTest.php index 34739a3..8ae04b7 100644 --- a/tests/EloquentTypeArtisanTest.php +++ b/tests/EloquentTypeArtisanTest.php @@ -1,20 +1,17 @@ execute(); + $type = EloquentType::make()->execute(); $app = $type->app(); $movie = $app->getModel('Kiwilan\Typescriptable\Tests\Data\Models\Movie'); diff --git a/tests/EloquentTypeParserTest.php b/tests/EloquentTypeParserTest.php index d5d5cd3..5a90778 100644 --- a/tests/EloquentTypeParserTest.php +++ b/tests/EloquentTypeParserTest.php @@ -1,20 +1,17 @@ execute(); + $type = EloquentType::make()->execute(); $app = $type->app(); $movie = $app->getModel('Kiwilan\Typescriptable\Tests\Data\Models\Movie'); diff --git a/tests/EloquentTypescriptTest.php b/tests/EloquentTypescriptTest.php index ac3306a..aa98b6c 100644 --- a/tests/EloquentTypescriptTest.php +++ b/tests/EloquentTypescriptTest.php @@ -1,26 +1,18 @@ app(); expect($app->driver())->toBe($driver); diff --git a/tests/MongodbTest.php b/tests/MongodbTest.php index 7b6d51a..fe052ad 100644 --- a/tests/MongodbTest.php +++ b/tests/MongodbTest.php @@ -1,26 +1,15 @@ execute(); + $type = EloquentType::make()->execute(); $app = $type->app(); $movie = $app->getModel('Kiwilan\Typescriptable\Tests\Data\Models\Movie'); diff --git a/tests/Pest.php b/tests/Pest.php index 7a00aa7..ced44e6 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -2,6 +2,7 @@ use Dotenv\Dotenv; use Kiwilan\Typescriptable\Tests\TestCase; +use Kiwilan\Typescriptable\TypescriptableConfig; foreach (glob('.output/*') as $file) { if (basename($file) !== '.gitignore') { @@ -51,6 +52,21 @@ function models(): string return "{$currentDir}/tests/Data/Models"; } +function eloquentConfig(string $eloquentEngine = 'artisan'): void +{ + deleteFile(outputDir(TypescriptableConfig::eloquentFilename())); + deleteDir(outputDir(TypescriptableConfig::eloquentPhpPath())); + + config()->set('typescriptable.output_path', outputDir()); + config()->set('typescriptable.engine.eloquent', $eloquentEngine); + config()->set('typescriptable.eloquent.directory', models()); + config()->set('typescriptable.eloquent.php_path', outputDir('php')); + config()->set('typescriptable.eloquent.paginate', true); + config()->set('typescriptable.eloquent.skip', [ + 'Kiwilan\\Typescriptable\\Tests\\Data\\Models\\SushiTest', + ]); +} + function routes(): string { $currentDir = getcwd(); @@ -74,21 +90,35 @@ function deleteFile(string $file): void function deleteDir(string $dir): void { - if (! is_dir($dir)) { - return; - } - - foreach (scandir($dir) as $file) { + // if (! is_dir($dir)) { + // return; + // } + + // foreach (scandir($dir) as $file) { + + // if (is_dir("$dir/$file")) { + // deleteDir("$dir/$file"); + // } else { + // unlink("$dir/$file"); + // } + // } + // rmdir($dir); + + $files = glob("{$dir}/*"); + foreach ($files as $file) { if ($file === '.' || $file === '..') { continue; } - if (is_dir("$dir/$file")) { - deleteDir("$dir/$file"); - } else { - unlink("$dir/$file"); + if ($file === '.gitignore') { + continue; + } + if (is_file($file)) { + unlink($file); + } elseif (is_dir($file)) { + deleteDir($file); + rmdir($file); } } - rmdir($dir); } function settingsDir(): string diff --git a/tests/RouteTypeTest.php b/tests/RouteTypeTest.php index f10db9c..8a45910 100644 --- a/tests/RouteTypeTest.php +++ b/tests/RouteTypeTest.php @@ -8,8 +8,8 @@ deleteFile(outputDir(TypescriptableConfig::routesFilename())); deleteFile(outputDir(TypescriptableConfig::routesFilenameList())); - config()->set('typescriptable.routes.filename', 'types-routes.d.ts'); - config()->set('typescriptable.routes.filename_list', 'routes.ts'); + config()->set('typescriptable.routes.filename', TypescriptableConfig::routesFilename()); + config()->set('typescriptable.routes.filename_list', TypescriptableConfig::routesFilenameList()); config()->set('typescriptable.routes.print_list', true); config()->set('typescriptable.routes.add_to_window', false); config()->set('typescriptable.routes.use_path', false); diff --git a/tests/SchemaAppTest.php b/tests/SchemaAppTest.php index 1faf788..b7e2bd7 100644 --- a/tests/SchemaAppTest.php +++ b/tests/SchemaAppTest.php @@ -1,19 +1,16 @@ execute(); + $type = EloquentType::make()->execute(); $app = $type->app(); @@ -29,10 +26,9 @@ $config = $type->config(); expect($config->modelsPath)->toBe(models()); - expect($config->outputPath)->toBe(outputDir()); expect($config->phpPath)->toBe(outputDir().'/php'); expect($config->useParser)->toBeFalse(); - expect($config->tsFilename)->toBe('types-eloquent.d.ts'); + expect($config->typescriptFilename)->toBe('types-eloquent.d.ts'); expect($config->skipModels)->toBeArray(); expect(count($config->skipModels))->toBe(1); expect($config->skipModels[0])->toBe('Kiwilan\Typescriptable\Tests\Data\Models\SushiTest'); diff --git a/tests/TypescriptableConfigTest.php b/tests/TypescriptableConfigTest.php index 0d58edd..07e7645 100644 --- a/tests/TypescriptableConfigTest.php +++ b/tests/TypescriptableConfigTest.php @@ -4,6 +4,7 @@ it('config is ok', function () { config()->set('typescriptable.engine.eloquent', 'parser'); + config()->set('typescriptable.eloquent.php_path', null); deleteDir(TypescriptableConfig::outputPath()); expect(TypescriptableConfig::engineEloquent())->toBeString(); @@ -17,9 +18,12 @@ expect(TypescriptableConfig::eloquentPaginate())->toBeBool(); expect(TypescriptableConfig::settingsFilename())->toBeString(); expect(TypescriptableConfig::settingsDirectory())->toBeString(); + expect(TypescriptableConfig::settingsExtends())->toBeString(); expect(TypescriptableConfig::settingsSkip())->toBeArray(); expect(TypescriptableConfig::routesFilename())->toBeString(); expect(TypescriptableConfig::routesFilenameList())->toBeString(); + expect(TypescriptableConfig::routesPrintList())->toBeBool(); + expect(TypescriptableConfig::routesAddToWindow())->toBeBool(); expect(TypescriptableConfig::routesUsePath())->toBeBool(); expect(TypescriptableConfig::routesSkipName())->toBeArray(); expect(TypescriptableConfig::routesSkipPath())->toBeArray(); diff --git a/tests/output/.gitignore b/tests/output/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/tests/output/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore From 4792ee6099694c8943cdb6e4cccaa227194a94ac Mon Sep 17 00:00:00 2001 From: ewilan-riviere Date: Thu, 25 Jul 2024 10:03:35 +0000 Subject: [PATCH 07/15] Fix styling --- src/Typed/Eloquent/Printer/PrinterEloquentTypescript.php | 2 +- src/Typed/EloquentType.php | 2 +- src/Typed/RouteType.php | 2 +- src/Typed/Settings/Printer/PrinterSettings.php | 2 +- src/Typed/SettingsType.php | 2 +- src/Typescriptable.php | 6 +++--- tests/EloquentConfigTest.php | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Typed/Eloquent/Printer/PrinterEloquentTypescript.php b/src/Typed/Eloquent/Printer/PrinterEloquentTypescript.php index f6ccbe6..703be52 100644 --- a/src/Typed/Eloquent/Printer/PrinterEloquentTypescript.php +++ b/src/Typed/Eloquent/Printer/PrinterEloquentTypescript.php @@ -14,7 +14,7 @@ class PrinterEloquentTypescript */ public static function make(array $models): string { - $self = new self(); + $self = new self; /** @var string[] */ $contents = []; diff --git a/src/Typed/EloquentType.php b/src/Typed/EloquentType.php index 17c3c05..03cc4cf 100644 --- a/src/Typed/EloquentType.php +++ b/src/Typed/EloquentType.php @@ -22,7 +22,7 @@ protected function __construct( protected ?string $typescript = null, ) {} - public static function make(EloquentConfig $config = new EloquentConfig()): self + public static function make(EloquentConfig $config = new EloquentConfig): self { return new self($config); } diff --git a/src/Typed/RouteType.php b/src/Typed/RouteType.php index 02ef142..857fca3 100644 --- a/src/Typed/RouteType.php +++ b/src/Typed/RouteType.php @@ -24,7 +24,7 @@ protected function __construct( protected ?string $typescriptTypes = null, ) {} - public static function make(RouteConfig $config = new RouteConfig()): self + public static function make(RouteConfig $config = new RouteConfig): self { $self = new self($config); $self->routes = $self->parseRoutes(); diff --git a/src/Typed/Settings/Printer/PrinterSettings.php b/src/Typed/Settings/Printer/PrinterSettings.php index 33eb75c..b7fd6d1 100644 --- a/src/Typed/Settings/Printer/PrinterSettings.php +++ b/src/Typed/Settings/Printer/PrinterSettings.php @@ -12,7 +12,7 @@ class PrinterSettings */ public static function make(array $items): string { - $self = new self(); + $self = new self; /** @var string[] */ $content = []; diff --git a/src/Typed/SettingsType.php b/src/Typed/SettingsType.php index 13abec3..2e40f16 100644 --- a/src/Typed/SettingsType.php +++ b/src/Typed/SettingsType.php @@ -21,7 +21,7 @@ protected function __construct( protected ?string $typescript = null, ) {} - public static function make(SettingsConfig $config = new SettingsConfig()): ?self + public static function make(SettingsConfig $config = new SettingsConfig): ?self { $self = new self($config); diff --git a/src/Typescriptable.php b/src/Typescriptable.php index 36a9877..0713eca 100755 --- a/src/Typescriptable.php +++ b/src/Typescriptable.php @@ -27,17 +27,17 @@ public static function head(): string return implode(PHP_EOL, self::TS_HEAD); } - public static function models(EloquentConfig $config = new EloquentConfig()): EloquentType + public static function models(EloquentConfig $config = new EloquentConfig): EloquentType { return EloquentType::make($config)->execute(); } - public static function routes(RouteConfig $config = new RouteConfig()): RouteType + public static function routes(RouteConfig $config = new RouteConfig): RouteType { return RouteType::make($config); } - public static function settings(SettingsConfig $config = new SettingsConfig()): ?SettingsType + public static function settings(SettingsConfig $config = new SettingsConfig): ?SettingsType { return SettingsType::make($config); } diff --git a/tests/EloquentConfigTest.php b/tests/EloquentConfigTest.php index ff507b7..d87f944 100644 --- a/tests/EloquentConfigTest.php +++ b/tests/EloquentConfigTest.php @@ -8,7 +8,7 @@ 'Kiwilan\\Typescriptable\\Tests\\Data\\Models\\SushiTest', ]); - $config = new EloquentConfig(); + $config = new EloquentConfig; expect($config->modelsPath)->toContain('tests/Data/Models'); expect($config->phpPath)->toBeNull(); From a3aa92c69094ce0fad9fc8fe07372bc4b947a905 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Thu, 25 Jul 2024 12:03:46 +0200 Subject: [PATCH 08/15] refactor: Correct database type for id field in EloquentTypeParserTest The database type for the id field in the EloquentTypeParserTest has been corrected from 'char(26)' to 'character(26)'. This change ensures that the database type is accurate and aligns with the expected values in the test. --- tests/EloquentTypeParserTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/EloquentTypeParserTest.php b/tests/EloquentTypeParserTest.php index 5a90778..635918d 100644 --- a/tests/EloquentTypeParserTest.php +++ b/tests/EloquentTypeParserTest.php @@ -41,7 +41,7 @@ $id = $movie->getAttribute('id'); expect($id->name())->toBe('id'); - expect($id->databaseType())->toBeIn(['char(26)', 'varchar', 'character', 'nchar']); + expect($id->databaseType())->toBeIn(['character(26)', 'varchar', 'character', 'nchar']); expect($id->nullable())->toBeFalse(); expect($id->default())->toBeNull(); expect($id->fillable())->toBeFalse(); From 171f21302341ed26bd123b9d9f28599392d67af8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Thu, 25 Jul 2024 12:04:48 +0200 Subject: [PATCH 09/15] refactor: Update database types in EloquentTypeParserTest The database types in the EloquentTypeParserTest have been updated to include additional options for the 'id' and 'title' fields. This change ensures that the test covers a wider range of possible database types and improves the accuracy of the test results. --- tests/EloquentTypeParserTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/EloquentTypeParserTest.php b/tests/EloquentTypeParserTest.php index 635918d..6fa739d 100644 --- a/tests/EloquentTypeParserTest.php +++ b/tests/EloquentTypeParserTest.php @@ -41,7 +41,7 @@ $id = $movie->getAttribute('id'); expect($id->name())->toBe('id'); - expect($id->databaseType())->toBeIn(['character(26)', 'varchar', 'character', 'nchar']); + expect($id->databaseType())->toBeIn(['char(26)', 'character(26)', 'varchar', 'character', 'nchar', 'nchar(52)']); expect($id->nullable())->toBeFalse(); expect($id->default())->toBeNull(); expect($id->fillable())->toBeFalse(); @@ -53,7 +53,7 @@ $title = $movie->getAttribute('title'); expect($title->name())->toBe('title'); - expect($title->databaseType())->toBeIn(['varchar(255)', 'varchar', 'character varying', 'nvarchar']); + expect($title->databaseType())->toBeIn(['varchar(255)', 'character varying(255)', 'varchar', 'character varying', 'nvarchar']); expect($title->nullable())->toBeTrue(); expect($title->default())->toBeNull(); expect($title->fillable())->toBeTrue(); From 453fd534c0fc190525ad00d57f9b9d5744865e1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Thu, 25 Jul 2024 12:06:08 +0200 Subject: [PATCH 10/15] refactor: Update database types in EloquentTypeParserTest --- tests/EloquentTypeParserTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/EloquentTypeParserTest.php b/tests/EloquentTypeParserTest.php index 6fa739d..49d8b81 100644 --- a/tests/EloquentTypeParserTest.php +++ b/tests/EloquentTypeParserTest.php @@ -53,7 +53,7 @@ $title = $movie->getAttribute('title'); expect($title->name())->toBe('title'); - expect($title->databaseType())->toBeIn(['varchar(255)', 'character varying(255)', 'varchar', 'character varying', 'nvarchar']); + expect($title->databaseType())->toBeIn(['varchar(255)', 'character varying(255)', 'nvarchar(510)', 'varchar', 'character varying', 'nvarchar']); expect($title->nullable())->toBeTrue(); expect($title->default())->toBeNull(); expect($title->fillable())->toBeTrue(); @@ -65,7 +65,7 @@ $budget = $movie->getAttribute('budget'); expect($budget->name())->toBe('budget'); - expect($budget->databaseType())->toBeIn(["enum('draft','scheduled','published')", 'varchar', 'character varying', 'nvarchar']); + expect($budget->databaseType())->toBeIn(["enum('draft','scheduled','published')", 'varchar', 'character varying(255)', 'nvarchar(510)', 'character varying', 'nvarchar']); expect($budget->increments())->toBeFalse(); expect($budget->nullable())->toBeFalse(); expect($budget->default())->toBeIn(['draft', "'draft'", "'draft'::character varying", "('draft')"]); From 4face422c038e8aa7d7fefc30a132d77dd61ebd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Thu, 25 Jul 2024 12:36:39 +0200 Subject: [PATCH 11/15] refactor: Update database types in EloquentTypeParserTest --- .../Settings/Schemas/SettingItemProperty.php | 24 +++++-- src/Typed/SettingsType.php | 24 +++---- tests/EloquentConfigTest.php | 1 - tests/RouteTypeTest.php | 70 ++++++++++++++++++- tests/SettingsTypeTest.php | 29 +++++++- 5 files changed, 125 insertions(+), 23 deletions(-) diff --git a/src/Typed/Settings/Schemas/SettingItemProperty.php b/src/Typed/Settings/Schemas/SettingItemProperty.php index 29c2945..36ede9a 100644 --- a/src/Typed/Settings/Schemas/SettingItemProperty.php +++ b/src/Typed/Settings/Schemas/SettingItemProperty.php @@ -18,26 +18,36 @@ protected function __construct( public static function make(ReflectionProperty $property): self { - $phpType = $property->getType(); - $extra = $property->getDocComment(); + $reflectionPropertyType = $property->getType(); + $docComment = $property->getDocComment(); $typeDoc = null; - if ($extra) { + if ($docComment) { $phpDoc = "/**\n* @var array\n*/"; $regex = '/@var\s+(.*)/'; preg_match($regex, $phpDoc, $matches); $typeDoc = $matches[1]; } - $phpType = $phpType instanceof ReflectionNamedType ? $phpType->getName() : 'mixed'; + $name = $property->getName(); + $phpType = 'mixed'; + $isNullable = false; + $isBuiltin = false; + + if ($reflectionPropertyType instanceof ReflectionNamedType) { + $phpType = $reflectionPropertyType->getName(); + $isNullable = $reflectionPropertyType->allowsNull(); + $isBuiltin = $reflectionPropertyType->isBuiltin(); + } + if ($typeDoc) { $phpType = $typeDoc; } $self = new self( - name: $property->getName(), + name: $name, phpType: $phpType, - // isNullable: $phpType->allowsNull(), - // isBuiltin: $phpType instanceof ReflectionNamedType ? $phpType->isBuiltin() : false, + isNullable: $isNullable, + isBuiltin: $isBuiltin, ); $self->typescriptType = ParserPhpType::toTypescript($self->phpType); diff --git a/src/Typed/SettingsType.php b/src/Typed/SettingsType.php index 2e40f16..93b97f3 100644 --- a/src/Typed/SettingsType.php +++ b/src/Typed/SettingsType.php @@ -13,11 +13,11 @@ class SettingsType { /** - * @param array $items + * @param array $settings */ protected function __construct( protected SettingsConfig $config, - protected array $items = [], + protected array $settings = [], protected ?string $typescript = null, ) {} @@ -30,15 +30,15 @@ public static function make(SettingsConfig $config = new SettingsConfig): ?self } $collect = SchemaCollection::make($self->config->directory, $self->config->toSkip); - $items = array_filter($collect->items(), fn (SchemaClass $item) => $item->extends() === $self->config->extends); + $settings = array_filter($collect->items(), fn (SchemaClass $item) => $item->extends() === $self->config->extends); - foreach ($items as $item) { - $item = SettingsItem::make($item); - $self->items[$item->name()] = $item; + foreach ($settings as $setting) { + $setting = SettingsItem::make($setting); + $self->settings[$setting->name()] = $setting; } - $printer = PrinterSettings::make($self->items); - TypescriptableUtils::print($printer, TypescriptableConfig::setPath($self->config->filename)); + $self->typescript = PrinterSettings::make($self->settings); + TypescriptableUtils::print($self->typescript, TypescriptableConfig::setPath($self->config->filename)); return $self; } @@ -51,14 +51,14 @@ public function config(): SettingsConfig /** * @return array */ - public function items(): array + public function settings(): array { - return $this->items; + return $this->settings; } - public function item(string $name): SettingsItem + public function setting(string $name): SettingsItem { - return $this->items[$name]; + return $this->settings[$name]; } public function typescript(): ?string diff --git a/tests/EloquentConfigTest.php b/tests/EloquentConfigTest.php index d87f944..608af92 100644 --- a/tests/EloquentConfigTest.php +++ b/tests/EloquentConfigTest.php @@ -25,7 +25,6 @@ skipModels: ['App\\Models\\SushiTest'], typescriptFilename: 'eloquent.d.ts', ); - ray($config); expect($config->modelsPath)->toBe(models()); expect($config->phpPath)->toBe(outputDir('php')); diff --git a/tests/RouteTypeTest.php b/tests/RouteTypeTest.php index 8a45910..ba9548e 100644 --- a/tests/RouteTypeTest.php +++ b/tests/RouteTypeTest.php @@ -1,6 +1,8 @@ routes(); + + $config = $type->config(); + + expect($config->filenameTypes)->toBe(TypescriptableConfig::routesFilename()); + expect($config->filenameList)->toBe(TypescriptableConfig::routesFilenameList()); + expect($config->printList)->toBeTrue(); + expect($config->json)->toBeArray(); + expect($config->namesToSkip)->toBeArray(); + expect($config->pathsToSkip)->toBeArray(); + + expect($routes->toArray())->toBeArray(); + expect($routes->toArray())->not->toBeEmpty(); + expect($routes->count())->toBe(60); + + $typescriptList = $type->typescriptList(); + expect($typescriptList)->toBeString(); + + $typescriptTypes = $type->typescriptTypes(); + expect($typescriptTypes)->toBeString(); + + $getHome = $routes->get('get.home'); + expect($getHome)->toBeInstanceOf(RouteTypeItem::class); + expect($getHome->uri())->toBe('/'); + expect($getHome->name())->toBe('home'); + expect($getHome->action())->toBe('App\Http\Controllers\App\HomeController@index'); + expect($getHome->methodMain())->toBe('GET'); + expect($getHome->methods())->toBeArray(); + expect($getHome->methods())->toContain('GET'); + expect($getHome->methods())->toContain('HEAD'); + expect($getHome->middlewares())->toBeArray(); + expect($getHome->middlewares())->toContain('web'); + expect($getHome->middlewares())->toContain('Illuminate\Routing\Middleware\SubstituteBindings'); + expect($getHome->parameters())->toBeArray(); + expect($getHome->parameters())->toBeEmpty(); + expect($getHome->id())->toBe('get.home'); + + $getLibrariesShow = $routes->get('get.libraries.show'); + expect($getLibrariesShow)->toBeInstanceOf(RouteTypeItem::class); + expect($getLibrariesShow->uri())->toBe('/libraries/{library}'); + expect($getLibrariesShow->name())->toBe('libraries.show'); + expect($getLibrariesShow->action())->toBe('App\Http\Controllers\App\LibraryController@show'); + expect($getLibrariesShow->parameters())->toBeArray(); + expect($getLibrariesShow->parameters())->not->toBeEmpty(); + expect($getLibrariesShow->parameters())->toHaveCount(1); + $param = $getLibrariesShow->parameters()[0]; + expect($param)->toBeInstanceOf(RouteTypeItemParam::class); + expect($param->name())->toBe('library'); + expect($param->type())->toBe('string'); + expect($param->required())->toBeTrue(); + expect($param->default())->toBeNull(); + expect($getLibrariesShow->id())->toBe('get.libraries.show'); + + $putUserPasswordUpdate = $routes->get('put.user.password.update'); + expect($putUserPasswordUpdate)->toBeInstanceOf(RouteTypeItem::class); + expect($putUserPasswordUpdate->uri())->toBe('/user/password'); + expect($putUserPasswordUpdate->name())->toBe('user-password.update'); + expect($putUserPasswordUpdate->action())->toBe('Laravel\Fortify\Http\Controllers\PasswordController@update'); + expect($putUserPasswordUpdate->methodMain())->toBe('PUT'); + expect($putUserPasswordUpdate->methods())->toBeArray(); + expect($putUserPasswordUpdate->methods())->toContain('PUT'); + expect($putUserPasswordUpdate->middlewares())->toBeArray(); + expect($putUserPasswordUpdate->middlewares())->toContain('web'); + expect($putUserPasswordUpdate->middlewares())->toContain('Illuminate\Auth\Middleware\Authenticate:web'); + expect($putUserPasswordUpdate->parameters())->toBeArray(); + expect($putUserPasswordUpdate->parameters())->toBeEmpty(); + expect($putUserPasswordUpdate->id())->toBe('put.user.password.update'); }); diff --git a/tests/SettingsTypeTest.php b/tests/SettingsTypeTest.php index 021a68c..349dde9 100644 --- a/tests/SettingsTypeTest.php +++ b/tests/SettingsTypeTest.php @@ -1,12 +1,37 @@ set('typescriptable.settings.filename', TypescriptableConfig::settingsFilename()); + config()->set('typescriptable.settings.directory', settingsDir()); + config()->set('typescriptable.settings.extends', settingsExtends()); + config()->set('typescriptable.settings.skip', []); }); it('can type settings', function () { - // settingsDir(), setttingsOutputDir(), settingsExtends() $type = SettingsType::make(); + + $settings = $type->settings(); + expect($settings)->toBeArray(); + expect(count($settings))->toBe(1); + + $homeSetting = $type->setting('HomeSettings'); + expect($homeSetting->name())->toBe('HomeSettings'); + expect($homeSetting->properties())->toBeArray(); + expect($homeSetting->properties())->toHaveKey('hero_title_main'); + + $hero_title_main = $homeSetting->properties()['hero_title_main']; + expect($hero_title_main->name())->toBe('hero_title_main'); + expect($hero_title_main->phpType())->toBe('string'); + expect($hero_title_main->isNullable())->toBeTrue(); + expect($hero_title_main->isBuiltin())->toBeTrue(); + expect($hero_title_main->typescriptType())->toBe('string'); + + expect($type->config())->toBeInstanceOf(SettingsConfig::class); + expect($type->typescript())->toBeString(); }); From 7f9715d94fa0e305fc95f1bbf98d525052c5d314 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Thu, 25 Jul 2024 12:49:47 +0200 Subject: [PATCH 12/15] refactor: Update EloquentType::make() method signature The `EloquentType::make()` method signature has been updated to correctly instantiate the `EloquentConfig` object. This change ensures that the method behaves as expected and avoids any potential errors related to object instantiation. --- src/Typed/EloquentType.php | 2 +- tests/EloquentTypeArtisanMysqlTest.php | 18 ++++++++++++++++++ tests/TestCase.php | 3 +-- 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 tests/EloquentTypeArtisanMysqlTest.php diff --git a/src/Typed/EloquentType.php b/src/Typed/EloquentType.php index 03cc4cf..17c3c05 100644 --- a/src/Typed/EloquentType.php +++ b/src/Typed/EloquentType.php @@ -22,7 +22,7 @@ protected function __construct( protected ?string $typescript = null, ) {} - public static function make(EloquentConfig $config = new EloquentConfig): self + public static function make(EloquentConfig $config = new EloquentConfig()): self { return new self($config); } diff --git a/tests/EloquentTypeArtisanMysqlTest.php b/tests/EloquentTypeArtisanMysqlTest.php new file mode 100644 index 0000000..2e83d99 --- /dev/null +++ b/tests/EloquentTypeArtisanMysqlTest.php @@ -0,0 +1,18 @@ +execute(); + + $eloquent = outputDir(TypescriptableConfig::eloquentFilename()); + expect($eloquent)->toBeFile(); +}); diff --git a/tests/TestCase.php b/tests/TestCase.php index 5652a48..6b801e3 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -17,6 +17,7 @@ class TestCase extends Orchestra protected function setUp(): void { parent::setUp(); + self::init(); Factory::guessFactoryNamesUsing( fn (string $modelName) => 'Kiwilan\\Typescriptable\\Database\\Factories\\'.class_basename($modelName).'Factory' @@ -122,8 +123,6 @@ public static function init() public static function setupDatabase(?string $type = null): void { - self::init(); - if (! $type) { return; } From 518091619ef9917d254278db89c89ce5f01111ce Mon Sep 17 00:00:00 2001 From: ewilan-riviere Date: Thu, 25 Jul 2024 10:50:09 +0000 Subject: [PATCH 13/15] Fix styling --- src/Typed/EloquentType.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Typed/EloquentType.php b/src/Typed/EloquentType.php index 17c3c05..03cc4cf 100644 --- a/src/Typed/EloquentType.php +++ b/src/Typed/EloquentType.php @@ -22,7 +22,7 @@ protected function __construct( protected ?string $typescript = null, ) {} - public static function make(EloquentConfig $config = new EloquentConfig()): self + public static function make(EloquentConfig $config = new EloquentConfig): self { return new self($config); } From 2bc0e0f933c07083e0a7da37d142c35f8de9e251 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Thu, 25 Jul 2024 13:00:54 +0200 Subject: [PATCH 14/15] refactor: Update EloquentType::make() method signature --- README.md | 2 ++ composer.json | 2 +- src/Typed/{ => Eloquent}/EloquentType.php | 5 +---- src/Typed/Eloquent/EloquentTypeArtisan.php | 1 - src/Typed/Eloquent/EloquentTypeParser.php | 1 - src/Typed/{ => Route}/RouteType.php | 3 +-- src/Typed/{ => Settings}/SettingsType.php | 3 +-- src/Typescriptable.php | 6 +++--- tests/EloquentTypeArtisanMysqlTest.php | 2 +- tests/EloquentTypeArtisanTest.php | 2 +- tests/EloquentTypeParserTest.php | 2 +- tests/MongodbTest.php | 2 +- tests/RouteTypeTest.php | 2 +- tests/SchemaAppTest.php | 2 +- tests/SettingsTypeTest.php | 2 +- 15 files changed, 16 insertions(+), 21 deletions(-) rename src/Typed/{ => Eloquent}/EloquentType.php (90%) rename src/Typed/{ => Route}/RouteType.php (97%) rename src/Typed/{ => Settings}/SettingsType.php (95%) diff --git a/README.md b/README.md index faf8ff4..ed1b4b2 100644 --- a/README.md +++ b/README.md @@ -152,6 +152,8 @@ You can publish the config file php artisan vendor:publish --tag="typescriptable-config" ``` +A config example is available here: [config/typescriptable.php](https://github.com/kiwilan/typescriptable-laravel/blob/main/config/typescriptable.php). + > [!IMPORTANT] > > You can configure `engine.eloquent` with `artisan` or `parser` to change parser engine. By default, it uses `artisan` command with [`model:show`](https://blog.laravel.com/laravel-new-model-show-command) command. `artisan` is default engine because it's more reliable and faster than `parser` engine. With MongoDB, the engine doesn't matter because MongoDB database can't be parsed like relational databases. diff --git a/composer.json b/composer.json index 442ea27..8dba37c 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "kiwilan/typescriptable-laravel", "description": "PHP package for Laravel to type Eloquent models, routes, Spatie Settings with autogenerated TypeScript. If you want to use some helpers with Inertia, you can install associated NPM package.", - "version": "3.0.0", + "version": "3.1.0", "keywords": [ "kiwilan", "laravel", diff --git a/src/Typed/EloquentType.php b/src/Typed/Eloquent/EloquentType.php similarity index 90% rename from src/Typed/EloquentType.php rename to src/Typed/Eloquent/EloquentType.php index 17c3c05..26c5a3b 100644 --- a/src/Typed/EloquentType.php +++ b/src/Typed/Eloquent/EloquentType.php @@ -1,10 +1,7 @@ Date: Thu, 25 Jul 2024 13:05:49 +0200 Subject: [PATCH 15/15] docs --- README.md | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index ed1b4b2..136a1a4 100644 --- a/README.md +++ b/README.md @@ -178,12 +178,6 @@ Generate `resources/js/types-eloquent.d.ts` file with all models types. php artisan typescriptable:eloquent ``` -With options: - -- --`M`|`models-path`: Path to models directory. -- --`O`|`output-path`: Path to output. -- --`P`|`php-path`: Path to output PHP classes, if null will not print PHP classes. - ### Spatie Settings If you use [`spatie/laravel-settings`](https://github.com/spatie/laravel-settings), you can generate `resources/js/types-settings.d.ts` file with all settings types. @@ -192,11 +186,6 @@ If you use [`spatie/laravel-settings`](https://github.com/spatie/laravel-setting php artisan typescriptable:settings ``` -With options: - -- --`S`|`settings-path`: Path to settings directory. -- --`O`|`output-path`: Path to output. - ### Routes Generate `resources/js/types-routes.d.ts` file with all routes types and `resources/js/routes.ts` for routes references. @@ -205,10 +194,13 @@ Generate `resources/js/types-routes.d.ts` file with all routes types and `resour php artisan typescriptable:routes ``` -With options: +### Eloquent listing + +Show all Eloquent models with `eloquent:list` command. -- --`R`|`routes-path`: Path to routes directory. -- --`O`|`output-path`: Path to output. +```bash +php artisan eloquent:list +``` ## Advanced