From 6e197abb43729cbc1ceb45752f94b4df7d8258de Mon Sep 17 00:00:00 2001 From: dannylamb Date: Mon, 9 Nov 2020 18:57:55 +0000 Subject: [PATCH 01/21] Configurable domains --- Gemini/src/UrlMapper/UrlMapper.php | 174 ----------------------------- 1 file changed, 174 deletions(-) delete mode 100644 Gemini/src/UrlMapper/UrlMapper.php diff --git a/Gemini/src/UrlMapper/UrlMapper.php b/Gemini/src/UrlMapper/UrlMapper.php deleted file mode 100644 index c71614a9..00000000 --- a/Gemini/src/UrlMapper/UrlMapper.php +++ /dev/null @@ -1,174 +0,0 @@ -connection = $connection; - $this->drupalDomain = $drupalDomain; - $this->fedoraDomain = $fedoraDomain; - } - - /** - * {@inheritDoc} - */ - public function getUrls($uuid) - { - $sql = 'SELECT drupal_uri as drupal, fedora_uri as fedora FROM Gemini WHERE uuid = :uuid'; - $result = $this->connection->fetchAssoc( - $sql, - ['uuid' => $uuid] - ); - - if (!empty($this->drupalDomain) && isset($result['drupal'])) { - $result['drupal'] = $this->replaceDomain($result['drupal'], $this->drupalDomain); - } - - if (!empty($this->fedoraDomain) && isset($result['fedora'])) { - $result['fedora'] = $this->replaceDomain($result['fedora'], $this->fedoraDomain); - } - - return $result; - } - - protected function replaceDomain($url, $domain) - { - $parts = parse_url($url); - return "$parts[scheme]://$domain$parts[path]"; - } - - /** - * {@inheritDoc} - */ - public function saveUrls( - $uuid, - $drupal_uri, - $fedora_uri - ) { - $this->connection->beginTransaction(); - // Hash incomming URIs - $fedora_hash = hash('sha512', $fedora_uri); - $drupal_hash = hash('sha512', $drupal_uri); - $now = date("Y-m-d H:i:s", time()); - $db_data = [ - 'uuid' => $uuid, - 'drupal_uri' => $drupal_uri, - 'fedora_uri' => $fedora_uri, - 'drupal_hash' => $drupal_hash, - 'fedora_hash' => $fedora_hash, - 'dateCreated' => $now, - 'dateUpdated' => $now, - ]; - - try { - // Try to insert first, and if the record already exists, update it. - try { - $this->connection->insert('Gemini', $db_data); - $this->connection->commit(); - return true; - } catch (UniqueConstraintViolationException $e) { - // We want to maintain the creation UNIX Timestamp - unset($db_data['dateCreated']); - unset($db_data['uuid']); - $this->connection->update('Gemini', $db_data, ['uuid' => $uuid]); - $this->connection->commit(); - return false; - } - } catch (\Exception $e) { - $this->connection->rollBack(); - throw $e; - } - } - - /** - * {@inheritDoc} - */ - public function deleteUrls($uuid) - { - $this->connection->beginTransaction(); - - try { - $count = $this->connection->delete( - 'Gemini', - ['uuid' => $uuid] - ); - - $this->connection->commit(); - - return $count > 0; - } catch (\Exception $e) { - $this->connection->rollBack(); - throw $e; - } - } - - /** - * {@inheritdoc} - */ - public function findUrls($uri) - { - $parts = parse_url($uri); - $path = $parts['path']; - - $query = - 'SELECT fedora_uri FROM Gemini WHERE drupal_uri LIKE :path union - SELECT drupal_uri FROM Gemini WHERE fedora_uri LIKE :path'; - - $result = $this->connection->fetchAssoc( - $query, - ['path' => "%$path"] - ); - - if (isset($result['fedora_uri'])) { - if (!empty($this->fedoraDomain)) { - $result['fedora_uri'] = $this->replaceDomain($result['fedora_uri'], $this->fedoraDomain); - } - $result['uri'] = $result['fedora_uri']; - unset($result['fedora_uri']); - } - - if (isset($result['drupal_uri'])) { - if (!empty($this->drupalDomain)) { - $result['drupal_uri'] = $this->replaceDomain($result['drupal_uri'], $this->drupalDomain); - } - $result['uri'] = $result['drupal_uri']; - unset($result['drupal_uri']); - } - - return $result; - } -} From be22b10075b87acd2db49cf50bae4c296d236459 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Tue, 10 Nov 2020 14:25:26 +0000 Subject: [PATCH 02/21] Bwahahahaha --- Gemini/.gitignore | 5 - Gemini/README.md | 206 - Gemini/bin/console | 34 - Gemini/cfg/config.example.yaml | 32 - Gemini/composer.json | 49 - Gemini/composer.lock | 5422 ----------------- Gemini/phpunit.xml.dist | 23 - Gemini/src/Controller/GeminiController.php | 174 - .../src/Migrations/Version20180530031926.php | 57 - Gemini/src/UrlMapper/UrlMapperInterface.php | 63 - Gemini/src/UrlMinter/UrlMinter.php | 33 - Gemini/src/UrlMinter/UrlMinterInterface.php | 21 - Gemini/src/app.php | 45 - Gemini/src/console.php | 14 - Gemini/src/index.php | 4 - .../Islandora/Gemini/Tests/DeleteTest.php | 76 - .../Islandora/Gemini/Tests/GetByUriTest.php | 163 - .../tests/Islandora/Gemini/Tests/GetTest.php | 76 - .../tests/Islandora/Gemini/Tests/PostTest.php | 107 - .../tests/Islandora/Gemini/Tests/PutTest.php | 184 - .../Islandora/Gemini/Tests/UrlMapperTest.php | 303 - .../Islandora/Gemini/Tests/UrlMinterTest.php | 70 - 22 files changed, 7161 deletions(-) delete mode 100644 Gemini/.gitignore delete mode 100644 Gemini/README.md delete mode 100644 Gemini/bin/console delete mode 100644 Gemini/cfg/config.example.yaml delete mode 100644 Gemini/composer.json delete mode 100644 Gemini/composer.lock delete mode 100644 Gemini/phpunit.xml.dist delete mode 100644 Gemini/src/Controller/GeminiController.php delete mode 100644 Gemini/src/Migrations/Version20180530031926.php delete mode 100644 Gemini/src/UrlMapper/UrlMapperInterface.php delete mode 100644 Gemini/src/UrlMinter/UrlMinter.php delete mode 100644 Gemini/src/UrlMinter/UrlMinterInterface.php delete mode 100644 Gemini/src/app.php delete mode 100644 Gemini/src/console.php delete mode 100644 Gemini/src/index.php delete mode 100644 Gemini/tests/Islandora/Gemini/Tests/DeleteTest.php delete mode 100644 Gemini/tests/Islandora/Gemini/Tests/GetByUriTest.php delete mode 100644 Gemini/tests/Islandora/Gemini/Tests/GetTest.php delete mode 100644 Gemini/tests/Islandora/Gemini/Tests/PostTest.php delete mode 100644 Gemini/tests/Islandora/Gemini/Tests/PutTest.php delete mode 100644 Gemini/tests/Islandora/Gemini/Tests/UrlMapperTest.php delete mode 100644 Gemini/tests/Islandora/Gemini/Tests/UrlMinterTest.php diff --git a/Gemini/.gitignore b/Gemini/.gitignore deleted file mode 100644 index 8e11490f..00000000 --- a/Gemini/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -/phpunit.xml -/vendor -/build -.idea - diff --git a/Gemini/README.md b/Gemini/README.md deleted file mode 100644 index 721782c3..00000000 --- a/Gemini/README.md +++ /dev/null @@ -1,206 +0,0 @@ -# ![image](https://cloud.githubusercontent.com/assets/2371345/24554336/902613ac-1603-11e7-9c4f-1c79204388e7.png) Gemini -[![Contribution Guidelines][2]](./CONTRIBUTING.md) -[![LICENSE][3]](./LICENSE) - -## Introduction - -A path mapping service for Islandora 8. Gemini is what links content created in Drupal to data stored in Fedora. It has a very simple API and is built on top of a relational database using Doctrine's [database abstraction layer][4]. - -## Installation - -- Install the database of your choice that is [compatible with Doctrine's DBAL][5]. -- Clone this repository. -- Install `composer`. [Install instructions here.][6] -- `$ cd /path/to/Gemini` and run `$ composer install` -- Then either - - For production, configure your web server appropriately (e.g. add a VirtualHost for Gemini in Apache) OR - - For development, run the PHP built-in web server `$ php -S localhost:8888 -t src` from Gemini root. - -Gemini runs on its own database, and requires one table. You'll need to set that up manually. For example, using MySQL: -```mysql -create database gemini; -CREATE TABLE gemini.Gemini ( - id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, - drupal VARCHAR(2048) NOT NULL UNIQUE, - fedora VARCHAR(2048) NOT NULL UNIQUE -) ENGINE=InnoDB; -``` - -## Configuration - -Gemini accepts [configuration for Doctrine's DBAL](http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html) as the `db.options` array in [its config file](./cfg/config.example.yaml) file. Other settings such as the location of Gemini's log file and the base URL of your Fedora server are also in this configuration file. Reasonable defaults provided. Do not commit the configuration file with your MySQL credentials into Git! - -## Usage - -Gemini associates URL paths between resources in Drupal and Fedora. To link the Drupal and Fedora URIs of a resource, a client must mint a new Fedora URI (using a POST) based on the UUID of the node or file in Drupal, and then persist the Gemini record linking the two URIs (using a PUT). - -#### POST / - -Mints a new Fedora URI: - -`curl -v -H "Authorization: Bearer islandora" -H "Content-Type: application/json" -d 'ab70127a-8579-4c17-af07-b3b1eceebb17' http://localhost:8000/gemini/` - -Returns for example: - -``` -< HTTP/1.1 200 OK -< Date: Mon, 29 Oct 2018 19:03:36 GMT -< Server: Apache/2.4.18 (Ubuntu) -< X-Powered-By: PHP/7.0.32-0ubuntu0.16.04.1 -< Cache-Control: no-cache, private -< Vary: Accept-Encoding -< Content-Length: 82 -< Content-Type: text/html; charset=UTF-8 -``` - -`http://localhost:8080/fcrepo/rest/ab/70/12/7a/ab70127a-8579-4c17-af07-b3b1eceebb17` - -#### PUT /{UUID} - -Updates the entry corresponding to the UUID with the Drupal URL: - -`curl -v -H "Authorization: Bearer islandora" -X PUT -H "Content-Type: application/json" -d '{"drupal" : "http://localhost:8000/node/0001", "fedora" : "http://localhost:8080/fcrepo/rest/ab/70/12/7a/ab70127a-8579-4c17-af07-b3b1eceebb17"}' http://localhost:8000/gemini/ab70127a-8579-4c17-af07-b3b1eceebb17` - - -If successful, returns for example: - -``` -HTTP/1.1 201 Created -< Date: Mon, 29 Oct 2018 19:17:41 GMT -< Server: Apache/2.4.18 (Ubuntu) -< X-Powered-By: PHP/7.0.32-0ubuntu0.16.04.1 -< Cache-Control: no-cache, private -< Location: http://localhost:8000/gemini/ab70127a-8579-4c17-af07-b3b1eceebb17 -< Content-Length: 0 -< Content-Type: text/html; charset=UTF-8 -``` - -resulting in the creation of a new record in the Gemini database: - -``` -mysql> select * from Gemini where uuid = 'ab70127a-8579-4c17-af07-b3b1eceebb17'\G -*************************** 1. row *************************** -fedora_hash: 868afb07dbe25dc0539ba91ce4f0d9e5e2cebdc1124935590544abe14b54466ecf925113bcf057c3b1bbb9056e03e918dd60b50ad2047b9ecf44b60db8fb1a91 -drupal_hash: 1cd9033dc7a45e4034bfba5b832f772b2b8a694ece2ac0c16bcc22a3563ee331a90adc843e3657e491ac550776eaff0ec2db521891da2a3a55609d817598b5da - uuid: ab70127a-8579-4c17-af07-b3b1eceebb17 - drupal_uri: http://localhost:8000/node/0001 - fedora_uri: http://localhost:8080/fcrepo/rest/ab/70/12/7a/ab70127a-8579-4c17-af07-b3b1eceebb17 -dateCreated: 2018-10-29 14:17:42 -dateUpdated: 2018-10-29 14:17:42 -1 row in set (0.00 sec) -``` - -#### GET /{UUID} - -Fetches the Drupal/Fedora URIs corresponding to a UUID: - -`curl -H "Authorization: Bearer islandora" http://localhost:8000/gemini/ab70127a-8579-4c17-af07-b3b1eceebb17` - -This request returns, for example: - -``` -< HTTP/1.1 200 OK -< Date: Mon, 29 Oct 2018 20:31:25 GMT -< Server: Apache/2.4.18 (Ubuntu) -< X-Powered-By: PHP/7.0.32-0ubuntu0.16.04.1 -< Cache-Control: no-cache, private -< Content-Length: 163 -< Content-Type: application/json -``` - -```javascript -{ - "drupal":"http:\/\/localhost:8000\/node\/0001", - "fedora":"http:\/\/localhost:8080\/fcrepo\/rest\/ab\/70\/12\/7a\/ab70127a-8579-4c17-af07-b3b1eceebb17" -} -``` - -#### GET /by_uri - -Fetches the alternate URI from Gemini for the one provided in a `X-Islandora-URI` header and returns: -* 200 OK and the URI in a Location header, if it exists in Gemini. -* 404 Not Found, if it doesn't exist in Gemini. - -`curl -i -H"Authorization: Bearer islandora" -H"X-Islandora-URI: http://localhost:8000/node/2" http://localhost:8000/gemini/by_uri` - -This request returns: -``` -HTTP/1.1 200 OK -Date: Thu, 23 May 2019 19:23:15 GMT -Server: Apache/2.4.18 (Ubuntu) -X-Powered-By: PHP/7.2.18-1+ubuntu16.04.1+deb.sury.org+1 -Location: http://localhost:8080/fcrepo/rest/cf/5d/46/74/cf5d4674-282b-499c-9ebc-4c4815d4f9ac -Cache-Control: no-cache, private -Content-Length: 0 -Content-Type: text/html; charset=UTF-8 -``` - -Requesting with the URI from this `Location:` header should return the original URI. - -`curl -i -H"Authorization: Bearer islandora" -H"X-Islandora-URI: http://localhost:8080/fcrepo/rest/cf/5d/46/74/cf5d4674-282b-499c-9ebc-4c4815d4f9ac" http://localhost:8000/gemini/by_uri` - -``` -HTTP/1.1 200 OK -Date: Thu, 23 May 2019 19:25:27 GMT -Server: Apache/2.4.18 (Ubuntu) -X-Powered-By: PHP/7.2.18-1+ubuntu16.04.1+deb.sury.org+1 -Location: http://localhost:8000/node/2 -Cache-Control: no-cache, private -Content-Length: 0 -Content-Type: text/html; charset=UTF-8 -``` - -If a mapping cannot be found then a 404 response is returned. - -`curl -i -H"Authorization: Bearer islandora" -H"X-Islandora-URI: http://localhost:8000/node/99" http://localhost:8000/gemini/by_uri` - -``` -HTTP/1.1 404 Not Found -Date: Thu, 23 May 2019 19:26:36 GMT -Server: Apache/2.4.18 (Ubuntu) -X-Powered-By: PHP/7.2.18-1+ubuntu16.04.1+deb.sury.org+1 -Cache-Control: no-cache, private -Content-Length: 0 -Content-Type: text/html; charset=UTF-8 -``` - -#### DELETE /{UUID} - -Purges the entry corresponding to the UUID from Gemini's database: - -curl -v -X DELETE -H "Authorization: Bearer islandora" http://localhost:8000/gemini/ab70127a-8579-4c17-af07-b3b1eceebb17 - -If successful, this request returns, for example: - -``` -< HTTP/1.1 204 No Content -< Date: Mon, 29 Oct 2018 19:51:39 GMT -< Server: Apache/2.4.18 (Ubuntu) -< X-Powered-By: PHP/7.0.32-0ubuntu0.16.04.1 -< Cache-Control: no-cache, private -< Content-Type: text/html; charset=UTF-8 -``` - -## Maintainers - -Current maintainers: - -* [Daniel Lamb](https://github.com/dannylamb) - -## Development - -If you would like to contribute, please get involved by attending our weekly [Tech Call](https://github.com/Islandora/docuentation/wiki). We love to hear from you! - -If you would like to contribute code to the project, you need to be covered by an Islandora Foundation [Contributor License Agreement](http://islandora.ca/sites/default/files/islandora_cla.pdf) or [Corporate Contributor License Agreement](http://islandora.ca/sites/default/files/islandora_ccla.pdf). Please see the [Contributors](http://islandora.ca/resources/contributors) pages on Islandora.ca for more information. - -We recommend using the [islandora-playbook](https://github.com/Islandora-Devops/islandora-playbook) to get started. - -## License - -[MIT](https://opensource.org/licenses/MIT) - -[2]: http://img.shields.io/badge/CONTRIBUTING-Guidelines-blue.svg -[3]: https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square -[4]: http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/ -[5]: http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/introduction.html -[6]: https://getcomposer.org/download/ diff --git a/Gemini/bin/console b/Gemini/bin/console deleted file mode 100644 index 7365b6e7..00000000 --- a/Gemini/bin/console +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env php -getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev'); - -$app = require __DIR__.'/../src/app.php'; -$console = require __DIR__.'/../src/console.php'; - -$app->register( - new \Kurl\Silex\Provider\DoctrineMigrationsProvider($console), - array( - 'migrations.directory' => __DIR__ . '/../src/Migrations', - 'migrations.namespace' => 'Islandora\Gemini\Migrations', - 'migrations.name' => 'Gemini Migrations', - 'migrations.table_name' => 'gemini_migrations', - ) -); - -$console->setHelperSet($app['migrations.em_helper_set']); -$console->addCommands($app['migrations.commands']); - -$console->run(); diff --git a/Gemini/cfg/config.example.yaml b/Gemini/cfg/config.example.yaml deleted file mode 100644 index 732cda88..00000000 --- a/Gemini/cfg/config.example.yaml +++ /dev/null @@ -1,32 +0,0 @@ ---- - -debug: false - -# Leave these blank unless you know what you're doing. If you're moving -# data from one server to another and the domain changes, set these -# to your new domain. -fedora_domain: -drupal_domain: - -db.options: - driver: pdo_mysql - host: 127.0.0.1 - port: 3306 - dbname: gemini - user: changeme - password: changeme - -log: - # Valid log levels are: - # DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY, NONE - # log level none won't open logfile - level: NONE - file: ../gemini.log - -syn: - # toggles JWT security for service - enable: false - # Path to the syn config file for authentication. - # example can be found here: - # https://github.com/Islandora/Syn/blob/main/conf/syn-settings.example.xml - config: ../syn-settings.xml diff --git a/Gemini/composer.json b/Gemini/composer.json deleted file mode 100644 index aba33bf9..00000000 --- a/Gemini/composer.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "islandora/gemini", - "description": "Path mapping Service between Fedora and Drupal", - "require": { - "silex/silex": "^2.0", - "islandora/crayfish-commons": "dev-dev", - "doctrine/migrations": "^1.7", - "kurl/silex-doctrine-migrations-provider": "^0.3.1", - "php": "^7.3 || ^7.4" - }, - "require-dev": { - "phpunit/phpunit": "^9.0", - "squizlabs/php_codesniffer": "^3.0", - "sebastian/phpcpd": "^6.0" - }, - "minimum-stability": "dev", - "prefer-stable": true, - "autoload": { - "psr-4": { - "Islandora\\Gemini\\": "src/" - } - }, - "scripts": { - "check": [ - "vendor/bin/phpcs --standard=PSR2 src tests", - "vendor/bin/phpcpd --suffix *.php src" - ], - "test": [ - "@check", - "vendor/bin/phpunit" - ] - }, - "config": { - "sort-packages": true - }, - "license": "MIT", - "authors": [ - { - "name": "Islandora Foundation", - "email": "community@islandora.ca", - "role": "Owner" - }, - { - "name": "Daniel Lamb", - "email": "dlamb@islandora.ca", - "role": "Maintainer" - } - ] -} diff --git a/Gemini/composer.lock b/Gemini/composer.lock deleted file mode 100644 index a95e40c0..00000000 --- a/Gemini/composer.lock +++ /dev/null @@ -1,5422 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "613449030e774cc95052c96b667187da", - "packages": [ - { - "name": "doctrine/cache", - "version": "1.10.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "13e3381b25847283a91948d04640543941309727" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727", - "reference": "13e3381b25847283a91948d04640543941309727", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", - "doctrine/coding-standard": "^6.0", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0", - "predis/predis": "~1.0" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/1.10.x" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2020-07-07T18:54:01+00:00" - }, - { - "name": "doctrine/dbal", - "version": "2.12.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "adce7a954a1c2f14f85e94aed90c8489af204086" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/adce7a954a1c2f14f85e94aed90c8489af204086", - "reference": "adce7a954a1c2f14f85e94aed90c8489af204086", - "shasum": "" - }, - "require": { - "doctrine/cache": "^1.0", - "doctrine/event-manager": "^1.0", - "ext-pdo": "*", - "php": "^7.3 || ^8" - }, - "require-dev": { - "doctrine/coding-standard": "^8.1", - "jetbrains/phpstorm-stubs": "^2019.1", - "phpstan/phpstan": "^0.12.40", - "phpunit/phpunit": "^9.4", - "psalm/plugin-phpunit": "^0.10.0", - "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "^3.17.2" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlanywhere", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.12.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], - "time": "2020-11-14T20:26:58+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": "<2.9@dev" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.1.x" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2020-05-29T18:28:51+00:00" - }, - { - "name": "doctrine/migrations", - "version": "v1.8.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/migrations.git", - "reference": "215438c0eef3e5f9b7da7d09c6b90756071b43e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/215438c0eef3e5f9b7da7d09c6b90756071b43e6", - "reference": "215438c0eef3e5f9b7da7d09c6b90756071b43e6", - "shasum": "" - }, - "require": { - "doctrine/dbal": "~2.6", - "ocramius/proxy-manager": "^1.0|^2.0", - "php": "^7.1", - "symfony/console": "~3.3|^4.0" - }, - "require-dev": { - "doctrine/coding-standard": "^1.0", - "doctrine/orm": "~2.5", - "jdorn/sql-formatter": "~1.1", - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "~7.0", - "squizlabs/php_codesniffer": "^3.0", - "symfony/yaml": "~3.3|^4.0" - }, - "suggest": { - "jdorn/sql-formatter": "Allows to generate formatted SQL with the diff command.", - "symfony/yaml": "Allows the use of yaml for migration configuration files." - }, - "bin": [ - "bin/doctrine-migrations" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "v1.8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\Migrations\\": "lib/Doctrine/DBAL/Migrations", - "Doctrine\\Migrations\\": "lib/Doctrine/Migrations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Michael Simonson", - "email": "contact@mikesimonson.com" - } - ], - "description": "Database Schema migrations using Doctrine DBAL", - "homepage": "https://www.doctrine-project.org/projects/migrations.html", - "keywords": [ - "database", - "migrations" - ], - "support": { - "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/1.8" - }, - "time": "2018-06-06T21:00:30+00:00" - }, - { - "name": "easyrdf/easyrdf", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/easyrdf/easyrdf.git", - "reference": "c7b0a9dbcb211eb7de03ee99ff5b52d17f2a8e64" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/easyrdf/easyrdf/zipball/c7b0a9dbcb211eb7de03ee99ff5b52d17f2a8e64", - "reference": "c7b0a9dbcb211eb7de03ee99ff5b52d17f2a8e64", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "ext-pcre": "*", - "ext-xmlreader": "*", - "lib-libxml": "*", - "php": ">=7.1.0" - }, - "require-dev": { - "code-lts/doctum": "^5", - "ml/json-ld": "~1.0", - "phpunit/phpunit": "^7", - "semsol/arc2": "^2.4", - "squizlabs/php_codesniffer": "3.*", - "zendframework/zend-http": "~2.3" - }, - "suggest": { - "ml/json-ld": "~1.0", - "semsol/arc2": "~2.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "EasyRdf\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nicholas Humfrey", - "email": "njh@aelius.com", - "homepage": "http://www.aelius.com/njh/", - "role": "Developer" - }, - { - "name": "Alexey Zakhlestin", - "email": "indeyets@gmail.com", - "homepage": "http://indeyets.ru/", - "role": "Developer" - } - ], - "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.", - "homepage": "http://www.easyrdf.org/", - "keywords": [ - "Linked Data", - "RDF", - "Semantic Web", - "Turtle", - "rdfa", - "sparql" - ], - "support": { - "forum": "http://groups.google.com/group/easyrdf/", - "issues": "http://github.com/easyrdf/easyrdf/issues", - "source": "https://github.com/easyrdf/easyrdf/tree/1.1.1" - }, - "time": "2020-12-02T08:47:31+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.5.5", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5" - }, - "time": "2020-06-16T21:01:06+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "60d379c243457e073cff02bc323a2a86cb355631" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", - "reference": "60d379c243457e073cff02bc323a2a86cb355631", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.4.0" - }, - "time": "2020-09-30T07:37:28+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.7.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", - "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.7.0" - }, - "time": "2020-09-30T07:37:11+00:00" - }, - { - "name": "islandora/chullo", - "version": "dev-dev", - "source": { - "type": "git", - "url": "https://github.com/Islandora/chullo.git", - "reference": "6a5454e2bcdb2b24bf481b842692d4d1de6a0287" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Islandora/chullo/zipball/6a5454e2bcdb2b24bf481b842692d4d1de6a0287", - "reference": "6a5454e2bcdb2b24bf481b842692d4d1de6a0287", - "shasum": "" - }, - "require": { - "easyrdf/easyrdf": "^0.9 || ^1", - "guzzlehttp/guzzle": "^6.1.0", - "ml/json-ld": "^1.0.4", - "php": "^7.3 || ^7.4" - }, - "require-dev": { - "mockery/mockery": "^0.9", - "phpunit/phpunit": "^9.0", - "sebastian/phpcpd": "^6.0", - "squizlabs/php_codesniffer": "^3.0" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "Islandora\\Chullo\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Islandora Foundation", - "email": "community@islandora.ca", - "role": "Owner" - }, - { - "name": "Daniel Lamb", - "email": "dlamb@islandora.ca", - "role": "Maintainer" - }, - { - "name": "Nick Ruest", - "email": "ruestn@gmail.com", - "role": "Maintainer" - } - ], - "description": "A PHP client for interacting with a Fedora 4 server.", - "homepage": "https://github.com/Islandora/chullo", - "support": { - "issues": "https://github.com/Islandora/documentation/issues", - "source": "https://github.com/Islandora/chullo/tree/dev" - }, - "time": "2020-12-11T21:38:08+00:00" - }, - { - "name": "islandora/crayfish-commons", - "version": "dev-dev", - "source": { - "type": "git", - "url": "https://github.com/Islandora/Crayfish-Commons.git", - "reference": "d7c0044723c2089f7757fb5c9dd523397938a8e9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Islandora/Crayfish-Commons/zipball/d7c0044723c2089f7757fb5c9dd523397938a8e9", - "reference": "d7c0044723c2089f7757fb5c9dd523397938a8e9", - "shasum": "" - }, - "require": { - "doctrine/dbal": "~2.2", - "islandora/chullo": "dev-dev", - "monolog/monolog": "^1.22", - "namshi/jose": "^7.2", - "pimple/pimple": "~3.0", - "psr/log": "^1.0.1", - "silex/silex": "^2.0", - "symfony/http-foundation": "^3.2.6", - "symfony/security": "^3.2", - "symfony/yaml": "^3.2" - }, - "require-dev": { - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^5.0", - "sebastian/phpcpd": "^3.0", - "squizlabs/php_codesniffer": "^2.0" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "Islandora\\Crayfish\\Commons\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Islandora Foundation", - "email": "community@islandora.ca", - "role": "Owner" - }, - { - "name": "Daniel Lamb", - "email": "dlamb@islandora.ca", - "role": "Maintainer" - } - ], - "description": "Shared code amongst Islandora Crayfish microservices", - "homepage": "https://github.com/Islandora/Crayfish-Commons", - "support": { - "issues": "https://github.com/Islandora/documentation/issues", - "source": "https://github.com/Islandora/Crayfish-Commons/tree/dev" - }, - "time": "2020-11-12T23:33:17+00:00" - }, - { - "name": "kurl/silex-doctrine-migrations-provider", - "version": "0.3.2", - "source": { - "type": "git", - "url": "https://github.com/breenie/silex-doctrine-migrations-provider.git", - "reference": "d2b9508b180adc3ce2283b9f04798ad353bdfcf6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/breenie/silex-doctrine-migrations-provider/zipball/d2b9508b180adc3ce2283b9f04798ad353bdfcf6", - "reference": "d2b9508b180adc3ce2283b9f04798ad353bdfcf6", - "shasum": "" - }, - "require": { - "doctrine/dbal": "^2.2", - "doctrine/migrations": "^1.5", - "php": "^5.6|^7.0", - "pimple/pimple": "^3.0", - "silex/api": "^2.0", - "symfony/console": "^2.3 | ^3.0", - "symfony/http-foundation": "3.4.35" - }, - "require-dev": { - "doctrine/orm": "^2.2", - "phpunit/phpunit": "^5.7", - "silex/silex": "^2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Kurl\\Silex\\Provider\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A doctrine migrations provider for silex", - "support": { - "issues": "https://github.com/breenie/silex-doctrine-migrations-provider/issues", - "source": "https://github.com/breenie/silex-doctrine-migrations-provider/tree/0.3.2" - }, - "time": "2020-03-23T11:51:42+00:00" - }, - { - "name": "ml/iri", - "version": "1.1.4", - "target-dir": "ML/IRI", - "source": { - "type": "git", - "url": "https://github.com/lanthaler/IRI.git", - "reference": "cbd44fa913e00ea624241b38cefaa99da8d71341" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lanthaler/IRI/zipball/cbd44fa913e00ea624241b38cefaa99da8d71341", - "reference": "cbd44fa913e00ea624241b38cefaa99da8d71341", - "shasum": "" - }, - "require": { - "lib-pcre": ">=4.0", - "php": ">=5.3.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "ML\\IRI": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Markus Lanthaler", - "email": "mail@markus-lanthaler.com", - "homepage": "http://www.markus-lanthaler.com", - "role": "Developer" - } - ], - "description": "IRI handling for PHP", - "homepage": "http://www.markus-lanthaler.com", - "keywords": [ - "URN", - "iri", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/lanthaler/IRI/issues", - "source": "https://github.com/lanthaler/IRI/tree/master" - }, - "time": "2014-01-21T13:43:39+00:00" - }, - { - "name": "ml/json-ld", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/lanthaler/JsonLD.git", - "reference": "c74a1aed5979ed1cfb1be35a55a305fd30e30b93" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lanthaler/JsonLD/zipball/c74a1aed5979ed1cfb1be35a55a305fd30e30b93", - "reference": "c74a1aed5979ed1cfb1be35a55a305fd30e30b93", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ml/iri": "^1.1.1", - "php": ">=5.3.0" - }, - "require-dev": { - "json-ld/tests": "1.0", - "phpunit/phpunit": "^4" - }, - "type": "library", - "autoload": { - "psr-4": { - "ML\\JsonLD\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Markus Lanthaler", - "email": "mail@markus-lanthaler.com", - "homepage": "http://www.markus-lanthaler.com", - "role": "Developer" - } - ], - "description": "JSON-LD Processor for PHP", - "homepage": "http://www.markus-lanthaler.com", - "keywords": [ - "JSON-LD", - "jsonld" - ], - "support": { - "issues": "https://github.com/lanthaler/JsonLD/issues", - "source": "https://github.com/lanthaler/JsonLD/tree/1.2.0" - }, - "time": "2020-06-16T17:45:06+00:00" - }, - { - "name": "monolog/monolog", - "version": "1.25.5", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1817faadd1846cd08be9a49e905dc68823bc38c0", - "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "php-parallel-lint/php-parallel-lint": "^1.0", - "phpunit/phpunit": "~4.5", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "^5.3|^6.0" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/1.25.5" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2020-07-23T08:35:51+00:00" - }, - { - "name": "namshi/jose", - "version": "7.2.3", - "source": { - "type": "git", - "url": "https://github.com/namshi/jose.git", - "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/namshi/jose/zipball/89a24d7eb3040e285dd5925fcad992378b82bcff", - "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff", - "shasum": "" - }, - "require": { - "ext-date": "*", - "ext-hash": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-spl": "*", - "php": ">=5.5", - "symfony/polyfill-php56": "^1.0" - }, - "require-dev": { - "phpseclib/phpseclib": "^2.0", - "phpunit/phpunit": "^4.5|^5.0", - "satooshi/php-coveralls": "^1.0" - }, - "suggest": { - "ext-openssl": "Allows to use OpenSSL as crypto engine.", - "phpseclib/phpseclib": "Allows to use Phpseclib as crypto engine, use version ^2.0." - }, - "type": "library", - "autoload": { - "psr-4": { - "Namshi\\JOSE\\": "src/Namshi/JOSE/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alessandro Nadalin", - "email": "alessandro.nadalin@gmail.com" - }, - { - "name": "Alessandro Cinelli (cirpo)", - "email": "alessandro.cinelli@gmail.com" - } - ], - "description": "JSON Object Signing and Encryption library for PHP.", - "keywords": [ - "JSON Web Signature", - "JSON Web Token", - "JWS", - "json", - "jwt", - "token" - ], - "support": { - "issues": "https://github.com/namshi/jose/issues", - "source": "https://github.com/namshi/jose/tree/master" - }, - "time": "2016-12-05T07:27:31+00:00" - }, - { - "name": "ocramius/proxy-manager", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/Ocramius/ProxyManager.git", - "reference": "57e9272ec0e8deccf09421596e0e2252df440e11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/57e9272ec0e8deccf09421596e0e2252df440e11", - "reference": "57e9272ec0e8deccf09421596e0e2252df440e11", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "zendframework/zend-code": ">2.2.5,<3.0" - }, - "require-dev": { - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "1.5.*" - }, - "suggest": { - "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects", - "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)", - "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)", - "zendframework/zend-stdlib": "To use the hydrator proxy", - "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "ProxyManager\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies", - "homepage": "https://github.com/Ocramius/ProxyManager", - "keywords": [ - "aop", - "lazy loading", - "proxy", - "proxy pattern", - "service proxies" - ], - "support": { - "issues": "https://github.com/Ocramius/ProxyManager/issues", - "source": "https://github.com/Ocramius/ProxyManager/tree/1.0.x" - }, - "time": "2015-08-09T04:28:19+00:00" - }, - { - "name": "pimple/pimple", - "version": "v3.3.1", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/21e45061c3429b1e06233475cc0e1f6fc774d5b0", - "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3.x-dev" - } - }, - "autoload": { - "psr-0": { - "Pimple": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", - "keywords": [ - "container", - "dependency injection" - ], - "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.3.1" - }, - "time": "2020-11-24T20:35:42+00:00" - }, - { - "name": "psr/container", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" - }, - "time": "2017-02-14T16:28:37+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "psr/log", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.3" - }, - "time": "2020-03-23T09:12:05+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "silex/silex", - "version": "v2.2.4", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Silex.git", - "reference": "d2531e5b8099c429b752ad2154e85999c3689057" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Silex/zipball/d2531e5b8099c429b752ad2154e85999c3689057", - "reference": "d2531e5b8099c429b752ad2154e85999c3689057", - "shasum": "" - }, - "require": { - "php": ">=5.5.9", - "pimple/pimple": "~3.0", - "symfony/event-dispatcher": "~2.8|^3.0", - "symfony/http-foundation": "~2.8|^3.0", - "symfony/http-kernel": "~2.8|^3.0", - "symfony/routing": "~2.8|^3.0" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35 || >= 5.0, <5.4.3" - }, - "replace": { - "silex/api": "self.version", - "silex/providers": "self.version" - }, - "require-dev": { - "doctrine/dbal": "~2.2", - "monolog/monolog": "^1.4.1", - "swiftmailer/swiftmailer": "~5", - "symfony/asset": "~2.8|^3.0", - "symfony/browser-kit": "~2.8|^3.0", - "symfony/config": "~2.8|^3.0", - "symfony/css-selector": "~2.8|^3.0", - "symfony/debug": "~2.8|^3.0", - "symfony/doctrine-bridge": "~2.8|^3.0", - "symfony/dom-crawler": "~2.8|^3.0", - "symfony/expression-language": "~2.8|^3.0", - "symfony/finder": "~2.8|^3.0", - "symfony/form": "~2.8|^3.0", - "symfony/intl": "~2.8|^3.0", - "symfony/monolog-bridge": "~2.8|^3.0", - "symfony/options-resolver": "~2.8|^3.0", - "symfony/phpunit-bridge": "^3.2", - "symfony/process": "~2.8|^3.0", - "symfony/security": "~2.8|^3.0", - "symfony/serializer": "~2.8|^3.0", - "symfony/translation": "~2.8|^3.0", - "symfony/twig-bridge": "~2.8|^3.0", - "symfony/validator": "~2.8|^3.0", - "symfony/var-dumper": "~2.8|^3.0", - "symfony/web-link": "^3.3", - "twig/twig": "~1.28|~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Silex\\": "src/Silex" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - } - ], - "description": "The PHP micro-framework based on the Symfony Components", - "homepage": "http://silex.sensiolabs.org", - "keywords": [ - "microframework" - ], - "support": { - "issues": "https://github.com/silexphp/Silex/issues", - "source": "https://github.com/silexphp/Silex/tree/v2.2.4" - }, - "abandoned": "symfony/flex", - "time": "2018-03-16T23:34:20+00:00" - }, - { - "name": "symfony/console", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "a10b1da6fc93080c180bba7219b5ff5b7518fe81" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a10b1da6fc93080c180bba7219b5ff5b7518fe81", - "reference": "a10b1da6fc93080c180bba7219b5ff5b7518fe81", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/console/tree/v3.4.47" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-24T10:57:07+00:00" - }, - { - "name": "symfony/debug", - "version": "v4.4.17", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "65fe7b49868378319b82da3035fb30801b931c47" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/65fe7b49868378319b82da3035fb30801b931c47", - "reference": "65fe7b49868378319b82da3035fb30801b931c47", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/http-kernel": "<3.4" - }, - "require-dev": { - "symfony/http-kernel": "^3.4|^4.0|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.17" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-28T20:42:29+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/master" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-09-07T11:33:47+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "31fde73757b6bad247c54597beef974919ec6860" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/31fde73757b6bad247c54597beef974919ec6860", - "reference": "31fde73757b6bad247c54597beef974919ec6860", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "conflict": { - "symfony/dependency-injection": "<3.3" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/debug": "~3.4|~4.4", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v3.4.47" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-24T10:57:07+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "v3.4.35", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "9e4b3ac8fa3348b4811674d23de32d201de225ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9e4b3ac8fa3348b4811674d23de32d201de225ce", - "reference": "9e4b3ac8fa3348b4811674d23de32d201de225ce", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" - }, - "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony HttpFoundation Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/3.4" - }, - "time": "2019-11-11T12:53:10+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "a98a4c30089e6a2d52a9fa236f718159b539f6f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a98a4c30089e6a2d52a9fa236f718159b539f6f5", - "reference": "a98a4c30089e6a2d52a9fa236f718159b539f6f5", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0", - "symfony/debug": "^3.3.3|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php56": "~1.8" - }, - "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", - "symfony/var-dumper": "<3.3", - "twig/twig": "<1.34|<2.4,>=2" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/cache": "~1.0", - "symfony/browser-kit": "~2.8|~3.0|~4.0", - "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/console": "~2.8|~3.0|~4.0", - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "^3.4.10|^4.0.10", - "symfony/dom-crawler": "~2.8|~3.0|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0", - "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0", - "symfony/templating": "~2.8|~3.0|~4.0", - "symfony/translation": "~2.8|~3.0|~4.0", - "symfony/var-dumper": "~3.3|~4.0" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/finder": "", - "symfony/var-dumper": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony HttpKernel Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-kernel/tree/v3.4.47" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-11-27T08:42:42+00:00" - }, - { - "name": "symfony/inflector", - "version": "v5.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/inflector.git", - "reference": "ba33a08d608c5b26ef768b6652876098dd3ace36" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/ba33a08d608c5b26ef768b6652876098dd3ace36", - "reference": "ba33a08d608c5b26ef768b6652876098dd3ace36", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/string": "^5.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Inflector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Inflector Component", - "homepage": "https://symfony.com", - "keywords": [ - "inflection", - "pluralize", - "singularize", - "string", - "symfony", - "words" - ], - "support": { - "source": "https://github.com/symfony/inflector/tree/v5.2.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-24T12:01:57+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "727d1096295d807c309fb01a851577302394c897" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", - "reference": "727d1096295d807c309fb01a851577302394c897", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-php56", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", - "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "metapackage", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-php70", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "metapackage", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/property-access", - "version": "v4.4.17", - "source": { - "type": "git", - "url": "https://github.com/symfony/property-access.git", - "reference": "ab8184f093095b40c3e7688bc4eb1d0484da327c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/ab8184f093095b40c3e7688bc4eb1d0484da327c", - "reference": "ab8184f093095b40c3e7688bc4eb1d0484da327c", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/inflector": "^3.4|^4.0|^5.0" - }, - "require-dev": { - "symfony/cache": "^3.4|^4.0|^5.0" - }, - "suggest": { - "psr/cache-implementation": "To cache access methods." - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyAccess\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony PropertyAccess Component", - "homepage": "https://symfony.com", - "keywords": [ - "access", - "array", - "extraction", - "index", - "injection", - "object", - "property", - "property path", - "reflection" - ], - "support": { - "source": "https://github.com/symfony/property-access/tree/v4.4.17" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-31T22:44:29+00:00" - }, - { - "name": "symfony/routing", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "3e522ac69cadffd8131cc2b22157fa7662331a6c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3e522ac69cadffd8131cc2b22157fa7662331a6c", - "reference": "3e522ac69cadffd8131cc2b22157fa7662331a6c", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", - "symfony/yaml": "<3.4" - }, - "require-dev": { - "doctrine/annotations": "~1.0", - "psr/log": "~1.0", - "symfony/config": "^3.3.1|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~2.8|~3.0|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "doctrine/annotations": "For using the annotation loader", - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Routing Component", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "support": { - "source": "https://github.com/symfony/routing/tree/v3.4.47" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-24T10:57:07+00:00" - }, - { - "name": "symfony/security", - "version": "v3.4.39", - "source": { - "type": "git", - "url": "https://github.com/symfony/security.git", - "reference": "fde88ec93c864cd7ad0b8953485ed8bd000f8985" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/security/zipball/fde88ec93c864cd7ad0b8953485ed8bd000f8985", - "reference": "fde88ec93c864cd7ad0b8953485ed8bd000f8985", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "^2.8.31|~3.3.13|~3.4|~4.0", - "symfony/http-kernel": "~3.3|~4.0", - "symfony/polyfill-php56": "~1.0", - "symfony/polyfill-php70": "~1.0", - "symfony/property-access": "~2.8|~3.0|~4.0" - }, - "replace": { - "symfony/security-core": "self.version", - "symfony/security-csrf": "self.version", - "symfony/security-guard": "self.version", - "symfony/security-http": "self.version" - }, - "require-dev": { - "psr/container": "^1.0", - "psr/log": "~1.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/ldap": "~3.1|~4.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/routing": "~2.8|~3.0|~4.0", - "symfony/validator": "^3.2.5|~4.0" - }, - "suggest": { - "psr/container-implementation": "To instantiate the Security class", - "symfony/expression-language": "For using the expression voter", - "symfony/form": "", - "symfony/ldap": "For using the LDAP user and authentication providers", - "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", - "symfony/validator": "For using the user password constraint" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Security\\": "" - }, - "exclude-from-classmap": [ - "/Core/Tests/", - "/Csrf/Tests/", - "/Guard/Tests/", - "/Http/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Security Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/security/tree/3.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-03-25T12:02:26+00:00" - }, - { - "name": "symfony/string", - "version": "v5.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/40e975edadd4e32cd16f3753b3bad65d9ac48242", - "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" - }, - "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "files": [ - "Resources/functions.php" - ], - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony String component", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v5.2.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-24T12:08:07+00:00" - }, - { - "name": "symfony/yaml", - "version": "v3.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "88289caa3c166321883f67fe5130188ebbb47094" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/88289caa3c166321883f67fe5130188ebbb47094", - "reference": "88289caa3c166321883f67fe5130188ebbb47094", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" - }, - "require-dev": { - "symfony/console": "~3.4|~4.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v3.4.47" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-24T10:57:07+00:00" - }, - { - "name": "zendframework/zend-code", - "version": "2.6.3", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-code.git", - "reference": "95033f061b083e16cdee60530ec260d7d628b887" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-code/zipball/95033f061b083e16cdee60530ec260d7d628b887", - "reference": "95033f061b083e16cdee60530ec260d7d628b887", - "shasum": "" - }, - "require": { - "php": "^5.5 || 7.0.0 - 7.0.4 || ^7.0.6", - "zendframework/zend-eventmanager": "^2.6 || ^3.0" - }, - "require-dev": { - "doctrine/annotations": "~1.0", - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "^4.8.21", - "zendframework/zend-stdlib": "^2.7 || ^3.0" - }, - "suggest": { - "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", - "zendframework/zend-stdlib": "Zend\\Stdlib component" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev", - "dev-develop": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Zend\\Code\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "provides facilities to generate arbitrary code using an object oriented interface", - "homepage": "https://github.com/zendframework/zend-code", - "keywords": [ - "code", - "zf2" - ], - "support": { - "issues": "https://github.com/zendframework/zend-code/issues", - "source": "https://github.com/zendframework/zend-code/tree/release-2.6" - }, - "abandoned": "laminas/laminas-code", - "time": "2016-04-20T17:26:42+00:00" - }, - { - "name": "zendframework/zend-eventmanager", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-eventmanager.git", - "reference": "a5e2583a211f73604691586b8406ff7296a946dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd", - "reference": "a5e2583a211f73604691586b8406ff7296a946dd", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "athletic/athletic": "^0.1", - "container-interop/container-interop": "^1.1.0", - "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2", - "zendframework/zend-coding-standard": "~1.0.0", - "zendframework/zend-stdlib": "^2.7.3 || ^3.0" - }, - "suggest": { - "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", - "zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev", - "dev-develop": "3.3-dev" - } - }, - "autoload": { - "psr-4": { - "Zend\\EventManager\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Trigger and listen to events within a PHP application", - "homepage": "https://github.com/zendframework/zend-eventmanager", - "keywords": [ - "event", - "eventmanager", - "events", - "zf2" - ], - "support": { - "issues": "https://github.com/zendframework/zend-eventmanager/issues", - "source": "https://github.com/zendframework/zend-eventmanager/tree/master" - }, - "abandoned": "laminas/laminas-eventmanager", - "time": "2018-04-25T15:33:34+00:00" - } - ], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2020-11-10T18:47:58+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.10.2", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2020-11-13T09:40:50+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.10.3", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", - "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.3" - }, - "time": "2020-12-03T17:45:45+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" - }, - "time": "2020-06-27T14:33:11+00:00" - }, - { - "name": "phar-io/version", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/726c026815142e4f8677b7cb7f2249c9ffb7ecae", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.0.3" - }, - "time": "2020-11-30T09:21:21+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" - }, - "time": "2020-09-03T19:13:55+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" - }, - "time": "2020-09-17T18:55:26+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "1.12.1", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0 <9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.12.1" - }, - "time": "2020-09-29T09:10:42+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:44:49+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:57:25+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.5.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.1", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.3", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ], - "files": [ - "src/Framework/Assert/Functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.0" - }, - "funding": [ - { - "url": "https://phpunit.de/donate.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-12-04T05:05:53+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:49:45+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:52:38+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:24:23+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:55:19+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/phpcpd", - "version": "6.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpcpd.git", - "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/f3683aa0db2e8e09287c2bb33a595b2873ea9176", - "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0", - "phpunit/php-timer": "^5.0", - "sebastian/cli-parser": "^1.0", - "sebastian/version": "^3.0" - }, - "bin": [ - "phpcpd" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Copy/Paste Detector (CPD) for PHP code.", - "homepage": "https://github.com/sebastianbergmann/phpcpd", - "support": { - "issues": "https://github.com/sebastianbergmann/phpcpd/issues", - "source": "https://github.com/sebastianbergmann/phpcpd/tree/6.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-12-07T05:39:23+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:17:30+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "2.3.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:18:59+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.5.8", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "9d583721a7157ee997f235f327de038e7ea6dac4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/9d583721a7157ee997f235f327de038e7ea6dac4", - "reference": "9d583721a7157ee997f235f327de038e7ea6dac4", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], - "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" - }, - "time": "2020-10-23T02:01:07+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2020-07-12T23:59:07+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozart/assert/issues", - "source": "https://github.com/webmozart/assert/tree/master" - }, - "time": "2020-07-08T17:02:28+00:00" - } - ], - "aliases": [], - "minimum-stability": "dev", - "stability-flags": { - "islandora/crayfish-commons": 20 - }, - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": "^7.3 || ^7.4" - }, - "platform-dev": [], - "plugin-api-version": "2.0.0" -} diff --git a/Gemini/phpunit.xml.dist b/Gemini/phpunit.xml.dist deleted file mode 100644 index 42ef5b47..00000000 --- a/Gemini/phpunit.xml.dist +++ /dev/null @@ -1,23 +0,0 @@ - - - - - ./src - - - ./src/index.php - ./src/app.php - ./src/console.php - ./src/Migrations - - - - - - - - ./tests/ - - - - diff --git a/Gemini/src/Controller/GeminiController.php b/Gemini/src/Controller/GeminiController.php deleted file mode 100644 index 7f9f32a0..00000000 --- a/Gemini/src/Controller/GeminiController.php +++ /dev/null @@ -1,174 +0,0 @@ -urlMapper = $urlMapper; - $this->urlMinter = $urlMinter; - $this->urlGenerator = $urlGenerator; - } - - /** - * @param string $uuid - * @return \Symfony\Component\HttpFoundation\Response - */ - public function get($uuid) - { - $result = $this->urlMapper->getUrls($uuid); - if (empty($result)) { - return new Response("Could not locate URL pair for $uuid", 404); - } - return new JsonResponse($result, 200); - } - - /** - * @param \Symfony\Component\HttpFoundation\Request $request - * @return \Symfony\Component\HttpFoundation\Response - */ - public function post(Request $request) - { - // Request contents are a UUID. - $uuid = $request->getContent(); - - if (empty($uuid)) { - return new Response( - "Requests to mint new URLS must contain a UUID in the request body", - 400 - ); - } - - $islandora_fedora_endpoint = $request->headers->get('X-Islandora-Fedora-Endpoint', ''); - - try { - return new Response( - $this->urlMinter->mint($uuid, $islandora_fedora_endpoint), - 200 - ); - } catch (\InvalidArgumentException $e) { - return new Response( - $e->getMessage(), - $e->getCode() - ); - } - } - - /** - * @param string $uuid - * @param \Symfony\Component\HttpFoundation\Request $request - * @return \Symfony\Component\HttpFoundation\Response - */ - public function put($uuid, Request $request) - { - // Reject non json requests. - if (0 !== strpos($request->headers->get('Content-Type'), 'application/json')) { - return new Response("Invalid Content-Type. Expecting application/json", 400); - } - - // Parse request and reject malformed bodies. - $urls = json_decode($request->getContent(), true); - - if (!isset($urls['drupal'])) { - return new Response("Missing 'drupal' entry in request body.", 400); - } - - if (!isset($urls['fedora'])) { - return new Response("Missing 'fedora' entry in request body.", 400); - } - - // Save URL pair. - $is_new = $this->urlMapper->saveUrls( - $uuid, - $urls['drupal'], - $urls['fedora'] - ); - - // Return 201 or 204 depending on if a new record was created. - $response = new Response(null, $is_new ? 201 : 204); - if ($is_new) { - // Add a Location header if a new record was created. - $url = $this->urlGenerator->generate( - 'GET_uuid', - ['uuid' => $uuid], - UrlGenerator::ABSOLUTE_URL - ); - $response->headers->add(['Location' => $url]); - } - return $response; - } - - /** - * @param string $uuid - * @return \Symfony\Component\HttpFoundation\Response - */ - public function delete($uuid) - { - $deleted = $this->urlMapper->deleteUrls($uuid); - return new Response(null, $deleted ? 204 : 404); - } - - /** - * Find the opposite URI for the on provided in X-Islandora-URI. - * - * @param \Symfony\Component\HttpFoundation\Request $request - * The incoming request. - * - * @return \Symfony\Component\HttpFoundation\Response - * A response 200 with Location or 404. - */ - public function getByUri(Request $request) - { - if (!$request->headers->has('X-Islandora-URI')) { - return new Response('Require the X-Islandora-URI header', 400); - } - $uri = $request->headers->get('X-Islandora-URI'); - if (is_array($uri)) { - // Can only return one Location header. - $uri = reset($uri); - } - $uri = $this->urlMapper->findUrls($uri); - $headers = []; - if ($uri) { - $headers['Location'] = $uri; - } - return new Response(null, ($uri ? 200 : 404), $headers); - } -} diff --git a/Gemini/src/Migrations/Version20180530031926.php b/Gemini/src/Migrations/Version20180530031926.php deleted file mode 100644 index edf488b0..00000000 --- a/Gemini/src/Migrations/Version20180530031926.php +++ /dev/null @@ -1,57 +0,0 @@ -addSql( - 'DROP TABLE IF EXISTS Gemini;' - ); - - if ('mysql' == $this->connection->getDatabasePlatform()->getName()) { - $this->addSql( - 'CREATE TABLE Gemini (fedora_hash VARCHAR(128) NOT NULL, - drupal_hash VARCHAR(128) NOT NULL, uuid VARCHAR(36) NOT NULL, - drupal_uri LONGTEXT NOT NULL, fedora_uri LONGTEXT NOT NULL, - dateCreated DATETIME NOT NULL, dateUpdated DATETIME NOT NULL, - UNIQUE KEY(fedora_hash, drupal_hash), PRIMARY KEY(uuid)) - DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB' - ); - } elseif ('postgresql' == $this->connection->getDatabasePlatform()->getName()) { - $this->addSql( - 'CREATE TABLE Gemini ( - fedora_hash VARCHAR(128) NOT NULL, - drupal_hash VARCHAR(128) NOT NULL, - uuid VARCHAR(36) PRIMARY KEY, - drupal_uri TEXT NOT NULL, - fedora_uri TEXT NOT NULL, - dateCreated TIMESTAMP NOT NULL, - dateUpdated TIMESTAMP NOT NULL - );' - ); - $this->addSql( - 'CREATE UNIQUE INDEX fedora_drupal_hash ON Gemini (fedora_hash, drupal_hash);' - ); - } else { - $this->abortIf(true, "Only MySQL/MariaDB and PostgreSQL are supported."); - } - } - - public function down(Schema $schema) - { - // this down() migration is auto-generated, please modify it to your needs - $this->abortIf( - $this->connection->getDatabasePlatform()->getName() !== 'mysql', - 'Migration can only be executed safely on \'mysql\'.' - ); - $this->addSql('DROP TABLE Gemini'); - } -} diff --git a/Gemini/src/UrlMapper/UrlMapperInterface.php b/Gemini/src/UrlMapper/UrlMapperInterface.php deleted file mode 100644 index 72901c1f..00000000 --- a/Gemini/src/UrlMapper/UrlMapperInterface.php +++ /dev/null @@ -1,63 +0,0 @@ -register(new IslandoraServiceProvider()); -$app->register(new YamlConfigServiceProvider(__DIR__ . '/../cfg/config.yaml')); -$app['debug'] = $app['crayfish.debug']; -$app['gemini.mapper'] = function ($app) { - return new UrlMapper( - $app['db'], - $app['crayfish.drupal_domain'], - $app['crayfish.fedora_domain'] - ); -}; -$app['gemini.minter'] = function ($app) { - return new UrlMinter(); -}; -$app['gemini.controller'] = function ($app) { - return new GeminiController( - $app['gemini.mapper'], - $app['gemini.minter'], - $app['url_generator'] - ); -}; - -$app->get('/by_uri', "gemini.controller:getByUri"); - -$app->get('/{uuid}', "gemini.controller:get"); - -$app->post('/', "gemini.controller:post"); - -$app->put('/{uuid}', "gemini.controller:put"); - -$app->delete('/{uuid}', "gemini.controller:delete"); - -return $app; diff --git a/Gemini/src/console.php b/Gemini/src/console.php deleted file mode 100644 index c286d60b..00000000 --- a/Gemini/src/console.php +++ /dev/null @@ -1,14 +0,0 @@ -getDefinition() - ->addOption(new InputOption('--env', '-e', InputOption::VALUE_REQUIRED, 'The Environment name.', 'dev')); -$console->setDispatcher($app['dispatcher']); - -return $console; diff --git a/Gemini/src/index.php b/Gemini/src/index.php deleted file mode 100644 index 3e23d477..00000000 --- a/Gemini/src/index.php +++ /dev/null @@ -1,4 +0,0 @@ -run(); diff --git a/Gemini/tests/Islandora/Gemini/Tests/DeleteTest.php b/Gemini/tests/Islandora/Gemini/Tests/DeleteTest.php deleted file mode 100644 index af18a309..00000000 --- a/Gemini/tests/Islandora/Gemini/Tests/DeleteTest.php +++ /dev/null @@ -1,76 +0,0 @@ -prophesize(UrlMapperInterface::class); - $mapper->deleteUrls(Argument::any()) - ->willReturn(0); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->delete("abc"); - - $this->assertTrue( - $response->getStatusCode() == 404, - "Response must be 404 when not found" - ); - } - - /** - * @covers ::__construct - * @covers ::delete - */ - public function testReturns204WhenDeleted() - { - $mapper = $this->prophesize(UrlMapperInterface::class); - $mapper->deleteUrls(Argument::any()) - ->willReturn(1); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->delete("abc"); - - $this->assertTrue( - $response->getStatusCode() == 204, - "Response must be 204 when deleted" - ); - } -} diff --git a/Gemini/tests/Islandora/Gemini/Tests/GetByUriTest.php b/Gemini/tests/Islandora/Gemini/Tests/GetByUriTest.php deleted file mode 100644 index 5134edff..00000000 --- a/Gemini/tests/Islandora/Gemini/Tests/GetByUriTest.php +++ /dev/null @@ -1,163 +0,0 @@ -prophesize(UrlMapperInterface::class); - $mapper->findUrls(Argument::any()) - ->willReturn(['uri' => 'abc']); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $request = new Request(); - $request->headers->add(['X-Islandora-URI' => 'blah']); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->getByUri($request); - - $this->assertEquals( - 200, - $response->getStatusCode(), - "Response must be 200 on success" - ); - $this->assertTrue( - $response->headers->has('Location'), - "Response must have Location header" - ); - $this->assertEquals( - 'abc', - $response->headers->get('Location'), - "Location header should be 'abc'" - ); - } - - /** - * @covers ::getByUri - */ - public function testGetByUriFailed() - { - $mapper = $this->prophesize(UrlMapperInterface::class); - $mapper->findUrls(Argument::any()) - ->willReturn([]); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $request = new Request(); - $request->headers->add(['X-Islandora-URI' => 'blah']); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->getByUri($request); - - $this->assertEquals( - 404, - $response->getStatusCode(), - "Response must be 200 on success" - ); - } - - /** - * @covers ::getByUri - */ - public function testGetByUriMultiple() - { - $mapper = $this->prophesize(UrlMapperInterface::class); - $mapper->findUrls('foo') - ->willReturn(['uri' => 'abc']); - $mapper->findUrls('bar') - ->willReturn(['uri' => 'oops']); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $request = new Request(); - $request->headers->add(['X-Islandora-URI' => ['foo', 'bar']]); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->getByUri($request); - - $this->assertEquals( - 200, - $response->getStatusCode(), - "Response must be 200 on success" - ); - $this->assertTrue( - $response->headers->has('Location'), - "Response must have Location header" - ); - $this->assertEquals( - 'abc', - $response->headers->get('Location'), - "Location header should be 'abc'" - ); - } - - /** - * @covers ::getByUri - */ - public function testGetByUriNoToken() - { - $mapper = $this->prophesize(UrlMapperInterface::class)->reveal(); - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $request = new Request(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->getByUri($request); - - $this->assertEquals( - 400, - $response->getStatusCode(), - "Response must be 400 with no X-Islandora-URI header" - ); - } -} diff --git a/Gemini/tests/Islandora/Gemini/Tests/GetTest.php b/Gemini/tests/Islandora/Gemini/Tests/GetTest.php deleted file mode 100644 index 8ea67256..00000000 --- a/Gemini/tests/Islandora/Gemini/Tests/GetTest.php +++ /dev/null @@ -1,76 +0,0 @@ -prophesize(UrlMapperInterface::class); - $mapper->getUrls(Argument::any()) - ->willReturn([]); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->get("abc"); - - $this->assertTrue( - $response->getStatusCode() == 404, - "Response must be 404 when not found" - ); - } - - /** - * @covers ::__construct - * @covers ::get - */ - public function testReturns200WhenFound() - { - $mapper = $this->prophesize(UrlMapperInterface::class); - $mapper->getUrls(Argument::any()) - ->willReturn(['drupal' => 'foo', 'fedora' => 'bar']); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $response = $controller->get("abc"); - - $this->assertTrue( - $response->getStatusCode() == 200, - "Response must be 200 when found" - ); - } -} diff --git a/Gemini/tests/Islandora/Gemini/Tests/PostTest.php b/Gemini/tests/Islandora/Gemini/Tests/PostTest.php deleted file mode 100644 index 71821df6..00000000 --- a/Gemini/tests/Islandora/Gemini/Tests/PostTest.php +++ /dev/null @@ -1,107 +0,0 @@ -prophesize(UrlMapperInterface::class)->reveal(); - - $minter = new UrlMinter("http://localhost:8080/fcrepo/rest"); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $request = Request::create( - "/", - "POST", - [], - [], - [], - ['CONTENT_TYPE' => 'text/plain'], - '' - ); - - $response = $controller->post($request); - - $this->assertTrue( - $response->getStatusCode() == 400, - "Response must be 400 on empty request" - ); - - $request = Request::create( - "/", - "POST", - [], - [], - [], - ['CONTENT_TYPE' => 'text/plain'], - 'abc' - ); - - $response = $controller->post($request); - - $this->assertTrue( - $response->getStatusCode() == 400, - "Response must be 400 on request with UUID of length < 8" - ); - } - - /** - * @covers ::__construct - * @covers ::post - */ - public function testReturns200OnSuccess() - { - $mapper = $this->prophesize(UrlMapperInterface::class)->reveal(); - - $minter = new UrlMinter("http://localhost:8080/fcrepo/rest"); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $request = Request::create( - "/", - "POST", - [], - [], - [], - ['CONTENT_TYPE' => 'text/plain'], - '5d150b3a-9d1b-437f-87a9-104b8cf15859' - ); - - $response = $controller->post($request); - - $this->assertTrue( - $response->getStatusCode() == 200, - "Response must be 200 when given a proper UUID" - ); - } -} diff --git a/Gemini/tests/Islandora/Gemini/Tests/PutTest.php b/Gemini/tests/Islandora/Gemini/Tests/PutTest.php deleted file mode 100644 index b0f953dc..00000000 --- a/Gemini/tests/Islandora/Gemini/Tests/PutTest.php +++ /dev/null @@ -1,184 +0,0 @@ -prophesize(UrlMapperInterface::class); - $mapper->saveUrls(Argument::any(), Argument::any(), Argument::any()) - ->willReturn(false); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $json_str = '{"drupal" : "http://localhost:8000/node/1?_format=jsonld", "fedora" : ' . - '"http://localhost:8080/fcrepo/rest/5d/15/0b/3a/5d150b3a-9d1b-437f-87a9-104b8cf15859"}'; - - $request = Request::create( - "/5d150b3a-9d1b-437f-87a9-104b8cf15859", - "PUT", - [], - [], - [], - ['CONTENT_TYPE' => 'application/json'], - $json_str - ); - - $response = $controller->put("5d150b3a-9d1b-437f-87a9-104b8cf15859", $request); - - $this->assertTrue( - $response->getStatusCode() == 204, - "Response must be 204 on update" - ); - } - - /** - * @covers ::__construct - * @covers ::put - */ - public function testReturns201OnCreation() - { - $mapper = $this->prophesize(UrlMapperInterface::class); - $mapper->saveUrls(Argument::any(), Argument::any(), Argument::any()) - ->willReturn(true); - $mapper = $mapper->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class); - $generator->generate(Argument::any(), Argument::any(), Argument::any()) - ->willReturn("http://localhost:8000/gemini/5d150b3a-9d1b-437f-87a9-104b8cf15859"); - $generator = $generator->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - $json_str = '{"drupal" : "http://localhost:8000/node/1?_format=jsonld", "fedora" : ' . - '"http://localhost:8080/fcrepo/rest/5d/15/0b/3a/5d150b3a-9d1b-437f-87a9-104b8cf15859"}'; - - $request = Request::create( - "/5d150b3a-9d1b-437f-87a9-104b8cf15859", - "PUT", - [], - [], - [], - ['CONTENT_TYPE' => 'application/json'], - $json_str - ); - - $response = $controller->put("5d150b3a-9d1b-437f-87a9-104b8cf15859", $request); - - $this->assertTrue( - $response->getStatusCode() == 201, - "Response must be 201 on create" - ); - - $this->assertTrue( - $response->headers->has("Location"), - "201 response must contain Location header." - ); - } - - /** - * @covers ::__construct - * @covers ::put - */ - public function testReturns400OnMalformedRequest() - { - $mapper = $this->prophesize(UrlMapperInterface::class)->reveal(); - - $minter = $this->prophesize(UrlMinterInterface::class)->reveal(); - - $generator = $this->prophesize(UrlGenerator::class)->reveal(); - - $controller = new GeminiController( - $mapper, - $minter, - $generator - ); - - // Test non-JSON - $request = Request::create( - "/5d150b3a-9d1b-437f-87a9-104b8cf15859", - "PUT", - [], - [], - [], - ['CONTENT_TYPE' => 'text/plain'], - 'some garbage' - ); - - $response = $controller->put("5d150b3a-9d1b-437f-87a9-104b8cf15859", $request); - - $this->assertTrue( - $response->getStatusCode() == 400, - "Response must be 400 on non JSON requests" - ); - - // Test missing 'drupal' - $request = Request::create( - "/5d150b3a-9d1b-437f-87a9-104b8cf15859", - "PUT", - [], - [], - [], - ['CONTENT_TYPE' => 'application/json'], - '{"fedora" : "http://localhost:8080/fcrepo/rest/5d/15/0b/3a/5d150b3a-9d1b-437f-87a9-104b8cf15859"}' - ); - - $response = $controller->put("5d150b3a-9d1b-437f-87a9-104b8cf15859", $request); - - $this->assertTrue( - $response->getStatusCode() == 400, - "Response must be 400 when 'drupal' entry is missing in request body" - ); - - // Test missing 'fedora' - $request = Request::create( - "/5d150b3a-9d1b-437f-87a9-104b8cf15859", - "PUT", - [], - [], - [], - ['CONTENT_TYPE' => 'application/json'], - '{"drupal" : "http://localhost:8000/node/1?_format=jsonld"}' - ); - - $response = $controller->put("5d150b3a-9d1b-437f-87a9-104b8cf15859", $request); - - $this->assertTrue( - $response->getStatusCode() == 400, - "Response must be 400 when 'fedora' entry is missing in request body" - ); - } -} diff --git a/Gemini/tests/Islandora/Gemini/Tests/UrlMapperTest.php b/Gemini/tests/Islandora/Gemini/Tests/UrlMapperTest.php deleted file mode 100644 index 66f2be50..00000000 --- a/Gemini/tests/Islandora/Gemini/Tests/UrlMapperTest.php +++ /dev/null @@ -1,303 +0,0 @@ -prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn(['fedora' => 'foo', 'drupal' => 'bar']); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - - $results = $mapper->getUrls("abc"); - - $this->assertTrue( - $results['fedora'] == 'foo', - "getUrls() modified connection results. Actual: ${results['fedora']}. Expected: foo" - ); - $this->assertTrue( - $results['drupal'] == 'bar', - "getUrls() modified connection results. Actual: ${results['drupal']}. Expected: bar" - ); - - // Simulate when no record is found. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn([]); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - - $results = $mapper->getUrls("abc"); - - $this->assertTrue( - empty($results), - "getUrls() modified connection results. Expected empty array, received " . json_encode($results) - ); - } - - /** - * @covers ::__construct - * @covers ::getUrls - */ - public function testGetUrlsReturnsModifiedResultsIfConfigured() - { - // Simulate a record being returned. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn(['fedora' => 'http://exapmle.org/foo', 'drupal' => 'http://example.org/bar']); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection, 'drupal.example.org', 'fcrepo.example.org'); - - $results = $mapper->getUrls("abc"); - - $this->assertTrue( - $results['fedora'] == 'http://fcrepo.example.org/foo', - "getUrls() disobeyed configuration. Actual: ${results['fedora']}. Expected: " . - "http://fcrepo.example.org/foo" - ); - $this->assertTrue( - $results['drupal'] == 'http://drupal.example.org/bar', - "getUrls() modified connection results. Actual: ${results['drupal']}. Expected: " . - "http://drupal.example.org/bar" - ); - - // Simulate when no record is found. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn([]); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - - $results = $mapper->getUrls("abc"); - - $this->assertTrue( - empty($results), - "getUrls() modified connection results. Expected empty array, received " . json_encode($results) - ); - } - - /** - * @covers ::__construct - * @covers ::saveUrls - */ - public function testSaveUrlsReturnsTrueOnCreation() - { - // Simulate a record being created. - $connection = $this->prophesize(Connection::class); - $connection->beginTransaction()->shouldBeCalled(); - $connection->insert(Argument::any(), Argument::any()) - ->willReturn(1); - $connection->commit()->shouldBeCalled(); - $connection->rollBack()->shouldNotBeCalled(); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - - $this->assertTrue( - $mapper->saveUrls("foo", "bar", "baz"), - "saveUrls() must return true when a new record is created" - ); - } - - /** - * @covers ::__construct - * @covers ::saveUrls - */ - public function testSaveUrlsReturnsFalseOnUpdate() - { - // Simulate a record being updated. - $exception = $this->prophesize(UniqueConstraintViolationException::class)->reveal(); - - $connection = $this->prophesize(Connection::class); - $connection->beginTransaction()->shouldBeCalled(); - $connection->insert(Argument::any(), Argument::any()) - ->willThrow($exception); - $connection->update(Argument::any(), Argument::any(), Argument::any()) - ->willReturn(1); - $connection->commit()->shouldBeCalled(); - $connection->rollBack()->shouldNotBeCalled(); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - - $this->assertFalse( - $mapper->saveUrls("foo", "bar", "baz"), - "saveUrls() must return false when an existing record is updated" - ); - } - - /** - * @covers ::__construct - * @covers ::saveUrls - */ - public function testSaveUrlsRollsBackOnException() - { - $connection = $this->prophesize(Connection::class); - $connection->beginTransaction()->shouldBeCalled(); - $connection->insert(Argument::any(), Argument::any()) - ->willThrow(new \Exception("")); - $connection->rollBack()->shouldBeCalled(); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - $this->expectException(\Exception::class); - $mapper->saveUrls("foo", "bar", "baz"); - } - - /** - * @covers ::__construct - * @covers ::deleteUrls - */ - public function testDeleteUrlsReturnsTrueIfFound() - { - $connection = $this->prophesize(Connection::class); - $connection->beginTransaction()->shouldBeCalled(); - $connection->delete(Argument::any(), Argument::any()) - ->willReturn(1); - $connection->commit()->shouldBeCalled(); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - - $this->assertTrue( - $mapper->deleteUrls("foo"), - "deleteUrls() must return true when an existing record is deleted" - ); - } - - /** - * @covers ::__construct - * @covers ::deleteUrls - */ - public function testDeleteUrlsReturnsFalseIfNotFound() - { - $connection = $this->prophesize(Connection::class); - $connection->beginTransaction()->shouldBeCalled(); - $connection->delete(Argument::any(), Argument::any()) - ->willReturn(0); - $connection->commit()->shouldBeCalled(); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - - $this->assertFalse( - $mapper->deleteUrls("foo"), - "deleteUrls() must return false when no record is found." - ); - } - - /** - * @covers ::__construct - * @covers ::deleteUrls - */ - public function testDeleteUrlsRollsBackOnException() - { - $connection = $this->prophesize(Connection::class); - $connection->beginTransaction()->shouldBeCalled(); - $connection->delete(Argument::any(), Argument::any()) - ->willThrow(new \Exception("")); - $connection->rollBack()->shouldBeCalled(); - $connection = $connection->reveal(); - - $mapper = new UrlMapper($connection); - $this->expectException(\Exception::class); - $mapper->deleteUrls("foo"); - } - - /** - * @covers ::findUrls - */ - public function testFindUrlsReturnsUnmodifiedIfNotConfigured() - { - // Simulate a record being returned. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn(['uri' => 'foo']); - $connection = $connection->reveal(); - $mapper = new UrlMapper($connection); - $results = $mapper->findUrls("abc"); - $this->assertTrue( - $results['uri'] == 'foo', - "getUrls() modified connection results. Actual: ${results['uri']}. Expected: foo" - ); - // Simulate when no record is found. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn([]); - $connection = $connection->reveal(); - $mapper = new UrlMapper($connection); - $results = $mapper->findUrls("abc"); - $this->assertTrue( - empty($results), - "getUrls() modified connection results. Expected empty array, received " . json_encode($results) - ); - } - - /** - * @covers ::findUrls - */ - public function testFindUrlsReturnsModifiedIfConfigured() - { - // Simulate a record being returned for Fedora. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn(['fedora_uri' => 'http://example.org/foo']); - $connection = $connection->reveal(); - $mapper = new UrlMapper($connection, 'drupal.example.org', 'fcrepo.example.org'); - $results = $mapper->findUrls("abc"); - $this->assertTrue( - $results['uri'] == 'http://fcrepo.example.org/foo', - "getUrls() did not modify connection results. Actual: ${results['uri']}. Expected: " . - "http://fcrepo.example.org/foo" - ); - - // Simulate a record being returned for Drupal. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn(['drupal_uri' => 'http://example.org/bar']); - $connection = $connection->reveal(); - $mapper = new UrlMapper($connection, 'drupal.example.org', 'fcrepo.example.org'); - $results = $mapper->findUrls("abc"); - $this->assertTrue( - $results['uri'] == 'http://drupal.example.org/bar', - "getUrls() did not modify connection results. Actual: ${results['uri']}. Expected: " . - "http://drupal.example.org/bar" - ); - - // Simulate when no record is found. - $connection = $this->prophesize(Connection::class); - $connection->fetchAssoc(Argument::any(), Argument::any()) - ->willReturn([]); - $connection = $connection->reveal(); - $mapper = new UrlMapper($connection, 'drupal.example.org', 'fcrepo.example.org'); - $results = $mapper->findUrls("abc"); - $this->assertTrue( - empty($results), - "getUrls() modified connection results. Expected empty array, received " . json_encode($results) - ); - } -} diff --git a/Gemini/tests/Islandora/Gemini/Tests/UrlMinterTest.php b/Gemini/tests/Islandora/Gemini/Tests/UrlMinterTest.php deleted file mode 100644 index c8e02ec2..00000000 --- a/Gemini/tests/Islandora/Gemini/Tests/UrlMinterTest.php +++ /dev/null @@ -1,70 +0,0 @@ -expectException(\InvalidArgumentException::class, null, 400); - $minter->mint("", ""); - } - - /** - * @covers ::__construct - * @covers ::mint - */ - public function testThrowsExceptionOnShortUUID() - { - $minter = new UrlMinter("http://localhost:8080/fcrepo/rest"); - $this->expectException(\InvalidArgumentException::class, null, 400); - $minter->mint("abcd", "http://localhost:8080/fcrepo/rest/"); - } - - /** - * @covers ::__construct - * @covers ::mint - */ - public function testHandlesMissingTrailingSlashInBaseUrl() - { - $missing_slash = new UrlMinter("http://localhost:8080/fcrepo/rest"); - $first = $missing_slash->mint("5d150b3a-9d1b-437f-87a9-104b8cf15859", "http://localhost:8080/fcrepo/rest/"); - - $with_slash = new UrlMinter("http://localhost:8080/fcrepo/rest/"); - $second = $with_slash->mint("5d150b3a-9d1b-437f-87a9-104b8cf15859", "http://localhost:8080/fcrepo/rest/"); - - $this->assertTrue( - strcmp($first, $second) == 0, - "Minted URLs must be the same whether or not a trailing slash is in the base url." - ); - } - - /** - * @covers ::__construct - * @covers ::mint - */ - public function testMintsUrlWithPairTrees() - { - $minter = new UrlMinter("http://localhost:8080/fcrepo/rest"); - $expected = "http://localhost:8080/fcrepo/rest/5d/15/0b/3a/5d150b3a-9d1b-437f-87a9-104b8cf15859"; - $actual = $minter->mint("5d150b3a-9d1b-437f-87a9-104b8cf15859", "http://localhost:8080/fcrepo/rest/"); - - $this->assertTrue( - strcmp($actual, $expected) == 0, - "Generated URL was not of he correct format. Actual: $actual. Expected: $expected" - ); - } -} From c32a7468aa4490499776fb9d922d5b1ab4e5b608 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Thu, 12 Nov 2020 15:14:47 +0000 Subject: [PATCH 03/21] No gemini --- Milliner/cfg/config.example.yaml | 9 - .../src/Controller/MillinerController.php | 40 ++- Milliner/src/Service/MillinerService.php | 254 +++++++++--------- .../src/Service/MillinerServiceInterface.php | 29 +- Milliner/src/app.php | 11 +- 5 files changed, 151 insertions(+), 192 deletions(-) diff --git a/Milliner/cfg/config.example.yaml b/Milliner/cfg/config.example.yaml index 89133ac3..20ceb36d 100644 --- a/Milliner/cfg/config.example.yaml +++ b/Milliner/cfg/config.example.yaml @@ -4,7 +4,6 @@ fedora_base_url: http://localhost:8080/fcrepo/rest # if drupal_base_url contains a path, be sure to include trailing slash # or relative paths will not resolve correctly. drupal_base_url: http://localhost:8000 -gemini_base_url: http://localhost:8000/gemini modified_date_predicate: http://schema.org/dateModified @@ -12,14 +11,6 @@ strip_format_jsonld: true debug: false -db.options: - driver: pdo_mysql - host: 127.0.0.1 - port: 3306 - dbname: gemini - user: changeme - password: changeme - log: # Valid log levels are: # DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY, NONE diff --git a/Milliner/src/Controller/MillinerController.php b/Milliner/src/Controller/MillinerController.php index 14d2be03..aaaf7c1c 100644 --- a/Milliner/src/Controller/MillinerController.php +++ b/Milliner/src/Controller/MillinerController.php @@ -104,6 +104,7 @@ public function saveMedia($source_field, Request $request) { $token = $request->headers->get("Authorization", null); $json_url = $request->headers->get("Content-Location"); + $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); if (empty($json_url)) { return new Response("Expected JSON url in Content-Location header", 400); @@ -111,8 +112,8 @@ public function saveMedia($source_field, Request $request) try { $response = $this->milliner->saveMedia( - $source_field, $json_url, + $islandora_fedora_endpoint, $token ); @@ -169,21 +170,18 @@ public function saveExternal($uuid, Request $request) public function createNodeVersion($uuid, Request $request) { $token = $request->headers->get("Authorization", null); + $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); + try { - $urls = $this->milliner->getGeminiUrls($uuid, $token); - if (!empty($urls)) { - $fedora_url = $urls['fedora']; - $response = $this->milliner->createVersion( - $fedora_url, - $token - ); - return new Response( - $response->getBody(), - $response->getStatusCode() - ); - } else { - return new Response(404); - } + $response = $this->milliner->createVersion( + $uuid, + $islandora_fedora_endpoint, + $token + ); + return new Response( + $response->getBody(), + $response->getStatusCode() + ); } catch (\Exception $e) { $this->log->error("", ['Exception' => $e]); $code = $e->getCode() == 0 ? 500 : $e->getCode(); @@ -200,16 +198,12 @@ public function createMediaVersion($source_field, Request $request) { $token = $request->headers->get("Authorization", null); $json_url = $request->headers->get("Content-Location"); + $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); - if (empty($json_url)) { - $this->log->error("json url is EMPTY"); - return new Response("Expected JSON url in Content-Location header", 400); - } try { - $urls = $this->milliner->getFileFromMedia($source_field, $json_url, $token); - $fedora_file_url = $urls['fedora']; - $response = $this->milliner->createVersion( - $fedora_file_url, + $response = $this->milliner->createMediaVersion( + $json_url, + $islandora_fedora_endpoint, $token ); return new Response( diff --git a/Milliner/src/Service/MillinerService.php b/Milliner/src/Service/MillinerService.php index 1de11fb1..2b812d0c 100644 --- a/Milliner/src/Service/MillinerService.php +++ b/Milliner/src/Service/MillinerService.php @@ -6,7 +6,7 @@ use GuzzleHttp\Psr7; use GuzzleHttp\Psr7\Response; use Islandora\Chullo\IFedoraApi; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface; use Psr\Log\LoggerInterface; use \DateTime; @@ -26,9 +26,9 @@ class MillinerService implements MillinerServiceInterface protected $drupal; /** - * @var \Islandora\Crayfish\Commons\Client\GeminiClient + * @var \Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface */ - protected $gemini; + protected $mapper; /** * @var \Psr\Log\LoggerInterface @@ -50,7 +50,7 @@ class MillinerService implements MillinerServiceInterface * * @param \Islandora\Chullo\IFedoraApi $fedora * @param \GuzzleHttp\Client - * @param \Islandora\Crayfish\Commons\Client\GeminiClient + * @param \Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface * @param \Psr\Log\LoggerInterface $log * @param string $modifiedDatePredicate * @param string $stripFormatJsonld @@ -58,14 +58,14 @@ class MillinerService implements MillinerServiceInterface public function __construct( IFedoraApi $fedora, Client $drupal, - GeminiClient $gemini, + EntityMapperInterface $mapper, LoggerInterface $log, $modifiedDatePredicate, $stripFormatJsonld ) { $this->fedora = $fedora; $this->drupal = $drupal; - $this->gemini = $gemini; + $this->mapper = $mapper; $this->log = $log; $this->modifiedDatePredicate = $modifiedDatePredicate; $this->stripFormatJsonld = $stripFormatJsonld; @@ -80,21 +80,23 @@ public function saveNode( $islandora_fedora_endpoint, $token = null ) { - $urls = $this->gemini->getUrls($uuid, $token); + $path = $this->mapper->getFedoraPath($uuid); + $islandora_fedora_endpoint = rtrim("/", $islandora_fedora_endpoint); + $fedora_url = "$islandora_fedora_endpoint/$path"; - if (empty($urls)) { + $response = $this->fedora->getResourceHeaders($fedora_url); + if ($response->getStatusCode() == "404") { + $this->log->debug("GOT A 404"); return $this->createNode( - $uuid, - rtrim($jsonld_url, '?_format=jsonld'), $jsonld_url, - $islandora_fedora_endpoint, + $fedora_url, $token ); } else { + $this->log->debug("DID NOT GET 404"); return $this->updateNode( - $urls['drupal'], $jsonld_url, - $urls['fedora'], + $fedora_url, $token ); } @@ -103,10 +105,8 @@ public function saveNode( /** * Creates a new LDP-RS in Fedora from a Node. * - * @param string $uuid - * @param string $entity_url * @param string $jsonld_url - * @param string $islandora_fedora_endpoint + * @param string $fedora_url * @param string $token * * @return \GuzzleHttp\Psr7\Response @@ -115,15 +115,10 @@ public function saveNode( * @throws \GuzzleHttp\Exception\RequestException */ protected function createNode( - $uuid, - $entity_url, $jsonld_url, - $islandora_fedora_endpoint, + $fedora_url, $token = null ) { - // Mint a new Fedora URL. - $fedora_url = $this->gemini->mintFedoraUrl($uuid, $token, $islandora_fedora_endpoint); - // Get the jsonld from Drupal. $headers = empty($token) ? [] : ['Authorization' => $token]; $drupal_response = $this->drupal->get( @@ -136,7 +131,7 @@ protected function createNode( true ); - $subject_url = $this->stripFormatJsonld ? $entity_url : $jsonld_url; + $subject_url = $this->stripFormatJsonld ? rtrim($jsonld_url, '?_format=jsonld') : $jsonld_url; // Mash it into the shape Fedora accepts. $jsonld = $this->processJsonld( @@ -163,14 +158,6 @@ protected function createNode( ); } - // Map the URLS. - $this->gemini->saveUrls( - $uuid, - $subject_url, - $fedora_url, - $token - ); - // Return the response from Fedora. return $response; } @@ -178,7 +165,6 @@ protected function createNode( /** * Updates an existing LDP-RS in Fedora from a Node. * - * @param string $entity_url * @param string $jsonld_url * @param string $fedora_url * @param string $token @@ -189,7 +175,6 @@ protected function createNode( * @throws \GuzzleHttp\Exception\RequestException */ protected function updateNode( - $entity_url, $jsonld_url, $fedora_url, $token = null @@ -245,7 +230,7 @@ protected function updateNode( ); // Mash it into the shape Fedora accepts. - $subject_url = $this->stripFormatJsonld ? $entity_url : $jsonld_url; + $subject_url = $this->stripFormatJsonld ? rtrim($jsonld_url, '?_format=jsonld') : $jsonld_url; $drupal_jsonld = $this->processJsonld( $drupal_jsonld, $subject_url, @@ -372,45 +357,14 @@ protected function getModifiedTimestamp(array $jsonld) * {@inheritDoc} */ public function saveMedia( - $source_field, $json_url, + $islandora_fedora_endpoint, $token = null ) { - $headers = empty($token) ? [] : ['Authorization' => $token]; - $urls = $this->getFileFromMedia($source_field, $json_url, $token); - $fedora_file_url = $urls['fedora']; - $jsonld_url = $urls['jsonld']; - - // Now look for the 'describedby' link header on the file in Fedora. - // I'm using the drupal http client because I have the full - // URI and need to squash redirects in case of external content. - $fedora_response = $this->drupal->head( - $fedora_file_url, - ['allow_redirects' => false, 'headers' => $headers] - ); - $status = $fedora_response->getStatusCode(); - - if ($status != 200 && $status != 307) { - $reason = $fedora_response->getReasonPhrase(); - throw new \RuntimeException( - "Client error: `HEAD $fedora_file_url` resulted in a `$status $reason` response: " . - $fedora_response->getBody(), - $status - ); - } - - $fedora_url = $this->getLinkHeader($fedora_response, "describedby"); - if (empty($fedora_url)) { - throw new \RuntimeException( - "Cannot parse 'describedby' link header from response to `HEAD $fedora_file_url`", - 500 - ); - } - + $urls = $this->getMediaUrls($json_url, $token); return $this->updateNode( - $urls['drupal'], - $jsonld_url, - $fedora_url, + $urls['jsonld'], + $urls['fedora'], $token ); } @@ -443,34 +397,27 @@ public function deleteNode( $uuid, $token = null ) { - $urls = $this->gemini->getUrls($uuid, $token); - - if (!empty($urls)) { - $fedora_url = $urls['fedora']; - $headers = empty($token) ? [] : ['Authorization' => $token]; - $response = $this->fedora->deleteResource( - $fedora_url, - $headers - ); + $path = $this->mapper->getFedoraPath($uuid); + $islandora_fedora_endpoint = rtrim("/", $islandora_fedora_endpoint); + $fedora_url = "$islandora_fedora_endpoint/$path"; - $status = $response->getStatusCode(); - if (!in_array($status, [204, 410, 404])) { - $reason = $response->getReasonPhrase(); - throw new \RuntimeException( - "Client error: `DELETE $fedora_url` resulted in a `$status $reason` response: " . - $response->getBody(), - $status - ); - } - } - - $gemini_success = $this->gemini->deleteUrls($uuid, $token); + $headers = empty($token) ? [] : ['Authorization' => $token]; + $response = $this->fedora->deleteResource( + $fedora_url, + $headers + ); - if ($gemini_success) { - return new Response(204); + $status = $response->getStatusCode(); + if (!in_array($status, [204, 410, 404])) { + $reason = $response->getReasonPhrase(); + throw new \RuntimeException( + "Client error: `DELETE $fedora_url` resulted in a `$status $reason` response: " . + $response->getBody(), + $status + ); } - return new Response(isset($status) ? $status : 404); + return new Response($status); } /** @@ -482,8 +429,9 @@ public function saveExternal( $islandora_fedora_endpoint, $token = null ) { - // Mint a new Fedora URL. - $fedora_url = $this->gemini->mintFedoraUrl($uuid, $token, $islandora_fedora_endpoint); + $path = $this->mapper->getFedoraPath($uuid); + $islandora_fedora_endpoint = rtrim("/", $islandora_fedora_endpoint); + $fedora_url = "$islandora_fedora_endpoint/$path"; $headers = empty($token) ? [] : ['Authorization' => $token]; $mimetype = $this->drupal->head( @@ -510,26 +458,22 @@ public function saveExternal( ); } - // Map the URLS. - $this->gemini->saveUrls( - $uuid, - $external_url, - $fedora_url, - $token - ); - // Return the response from Fedora. return $response; } /** - * Creates a new LDP-RS in Fedora from a Node. * {@inheritDoc} */ public function createVersion( - $fedora_url, + $uuid, + $islandora_fedora_endpoint, $token = null ) { + $path = $this->mapper->getFedoraPath($uuid); + $islandora_fedora_endpoint = rtrim("/", $islandora_fedora_endpoint); + $fedora_url = "$islandora_fedora_endpoint/$path"; + $headers = empty($token) ? [] : ['Authorization' => $token]; $date = new DateTime(); $timestamp = $date->format("D, d M Y H:i:s O"); @@ -560,52 +504,96 @@ public function createVersion( /** * {@inheritDoc} */ - public function getFileFromMedia( - $source_field, + public function createMediaVersion( $json_url, + $islandora_fedora_endpoint, $token = null ) { - // First get the media json from Drupal. + $urls = $this->getMediaUrls($json_url, $token); + $fedora_url = $urls['fedora']; + + $date = new DateTime(); + $timestamp = $date->format("D, d M Y H:i:s O"); + // create version in Fedora. + try { + $response = $this->fedora->createVersion( + $fedora_url, + $timestamp, + null, + $headers + ); + $status = $response->getStatusCode(); + if (!in_array($status, [201])) { + $reason = $response->getReasonPhrase(); + throw new \RuntimeException( + "Client error: `POST $fedora_url` resulted in `$status $reason` response: " . + $response->getBody(), + $status + ); + } + // Return the response from Fedora. + return $response; + } catch (Exception $e) { + $this->log->error('Caught exception when creating version: ', $e->getMessage(), "\n"); + } + } + + protected function getMediaUrls($json_url, $token = null) { + // HEAD drupal to get urls. $headers = empty($token) ? [] : ['Authorization' => $token]; - $drupal_response = $this->drupal->get( + $drupal_response = $this->drupal->head( $json_url, ['headers' => $headers] ); $jsonld_url = $this->getLinkHeader($drupal_response, "alternate", "application/ld+json"); - $media_json = json_decode( - $drupal_response->getBody(), - true - ); + if (empty($jsonld_url)) { + throw new \RuntimeException( + "Cannot parse 'alternate' link header from response to `HEAD $json_url`", + 500 + ); + } - if (!isset($media_json[$source_field]) || empty($media_json[$source_field])) { + $drupal_url = $this->getLinkHeader($drupal_response, "describes"); + if (empty($drupal_url)) { throw new \RuntimeException( - "Cannot parse file UUID from $json_url. Ensure $source_field exists on the media and is populated.", + "Cannot parse 'describes' link header from response to `HEAD $json_url`", 500 ); } - $file_uuid = $media_json[$source_field][0]['target_uuid']; - // Get the file's LDP-NR counterpart in Fedora. - $urls = $this->gemini->getUrls($file_uuid, $token); - if (empty($urls)) { - $file_url = $media_json[$source_field][0]['url']; + // Construct the fedora url + $pieces = explode("_flysystem/", $drupal_url); + $fedora_file_path = end($pieces); + $islandora_fedora_endpoint = rtrim("/", $islandora_fedora_endpoint); + $fedora_file_url = "$islandora_fedora_endpoint/$fedora_file_path" ; + + // Now look for the 'describedby' link header on the file in Fedora. + // I'm using the drupal http client because I have the full + // URI and need to squash redirects in case of external content. + $fedora_response = $this->drupal->head( + $fedora_file_url, + ['allow_redirects' => false, 'headers' => $headers] + ); + $status = $fedora_response->getStatusCode(); + + if ($status != 200 && $status != 307) { + $reason = $fedora_response->getReasonPhrase(); + throw new \RuntimeException( + "Client error: `HEAD $fedora_file_url` resulted in a `$status $reason` response: " . + $fedora_response->getBody(), + $status + ); + } + + $fedora_url = $this->getLinkHeader($fedora_response, "describedby"); + if (empty($fedora_url)) { throw new \RuntimeException( - "$file_url has not been mapped in Gemini with uuid $file_uuid", - 404 + "Cannot parse 'describedby' link header from response to `HEAD $fedora_file_url`", + 500 ); } - return ['fedora'=>$urls['fedora'], 'jsonld' =>$jsonld_url, 'drupal'=>$urls['drupal']]; - } - /** - * {@inheritDoc} - */ - public function getGeminiUrls( - $uuid, - $token = null - ) { - $urls = $this->gemini->getUrls($uuid, $token); - return $urls; + return ['drupal' => $drupal_url, 'fedora' => $fedora_url, 'jsonld' => $jsonld_url]; } } diff --git a/Milliner/src/Service/MillinerServiceInterface.php b/Milliner/src/Service/MillinerServiceInterface.php index 403eb083..e6e33172 100644 --- a/Milliner/src/Service/MillinerServiceInterface.php +++ b/Milliner/src/Service/MillinerServiceInterface.php @@ -27,7 +27,7 @@ public function saveNode( /** * @param $json_url - * @param $jsonld_url + * @param $islandora_fedora_endpoint * @param $token * * @throws \Exception @@ -35,8 +35,8 @@ public function saveNode( * @return \GuzzleHttp\Psr7\Response */ public function saveMedia( - $source_field, $json_url, + $islandora_fedora_endpoint, $token = null ); @@ -71,7 +71,8 @@ public function saveExternal( ); /** - * @param $fedora_url + * @param $uuid + * @param $islandora_fedora_endpoint * @param $token * * @throws \Exception @@ -79,35 +80,23 @@ public function saveExternal( * @return \GuzzleHttp\Psr7\Response */ public function createVersion( - $fedora_url, + $uuid, + $islandora_fedora_endpoint, $token = null ); /** * @param $json_url - * @param $jsonld_url + * @param $islandora_fedora_endpoint * @param $token * * @throws \Exception * * @return array */ - public function getFileFromMedia( - $source_field, + public function createMediaVersion( $json_url, - $token = null - ); - - /** - * @param $uuid - * @param $token - * - * @throws \Exception - * - * @return array - */ - public function getGeminiUrls( - $uuid, + $islandora_fedora_endpoint, $token = null ); } diff --git a/Milliner/src/app.php b/Milliner/src/app.php index ca7c4550..f59b4293 100644 --- a/Milliner/src/app.php +++ b/Milliner/src/app.php @@ -4,9 +4,9 @@ use GuzzleHttp\Client; use Islandora\Chullo\FedoraApi; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapper; use Islandora\Crayfish\Commons\Provider\IslandoraServiceProvider; use Islandora\Crayfish\Commons\Provider\YamlConfigServiceProvider; -use Islandora\Crayfish\Commons\Client\GeminiClient; use Islandora\Milliner\Controller\MillinerController; use Islandora\Milliner\Service\MillinerService; use Pimple\Exception\UnknownIdentifierException; @@ -33,10 +33,7 @@ new MillinerService( FedoraApi::create($app['crayfish.fedora_base_url']), new Client(), - GeminiClient::create( - $app['crayfish.gemini_base_url'], - $app['monolog'] - ), + new EntityMapper(), $app['monolog'], $app['crayfish.modified_date_predicate'], $strip_format_jsonld @@ -48,8 +45,8 @@ $app->post('/node/{uuid}', "milliner.controller:saveNode"); $app->delete('/node/{uuid}', "milliner.controller:deleteNode"); $app->post('/node/{uuid}/version', "milliner.controller:createNodeVersion"); -$app->post('/media/{source_field}', "milliner.controller:saveMedia"); -$app->post('/media/{source_field}/version', 'milliner.controller:createMediaVersion'); +$app->post('/media', "milliner.controller:saveMedia"); +$app->post('/media/version', 'milliner.controller:createMediaVersion'); $app->post('/external/{uuid}', "milliner.controller:saveExternal"); return $app; From fa66790769605e0ea0683a042fbb906d41b8cd95 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Thu, 12 Nov 2020 20:14:19 +0000 Subject: [PATCH 04/21] Nodes and taxonomy terms work. Media needs alapca reworking since source field is no longer required. --- Milliner/src/Controller/MillinerController.php | 2 ++ Milliner/src/Service/MillinerService.php | 12 +++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Milliner/src/Controller/MillinerController.php b/Milliner/src/Controller/MillinerController.php index aaaf7c1c..6c012104 100644 --- a/Milliner/src/Controller/MillinerController.php +++ b/Milliner/src/Controller/MillinerController.php @@ -50,6 +50,8 @@ public function saveNode($uuid, Request $request) return new Response("Expected JSONLD url in Content-Location header", 400); } + $this->log->debug("JSONLD URL: $jsonld_url"); + $this->log->debug("FEDORA ENDPOINT: $islandora_fedora_endpoint"); try { $response = $this->milliner->saveNode( $uuid, diff --git a/Milliner/src/Service/MillinerService.php b/Milliner/src/Service/MillinerService.php index 2b812d0c..a43ce3f9 100644 --- a/Milliner/src/Service/MillinerService.php +++ b/Milliner/src/Service/MillinerService.php @@ -81,7 +81,7 @@ public function saveNode( $token = null ) { $path = $this->mapper->getFedoraPath($uuid); - $islandora_fedora_endpoint = rtrim("/", $islandora_fedora_endpoint); + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); $fedora_url = "$islandora_fedora_endpoint/$path"; $response = $this->fedora->getResourceHeaders($fedora_url); @@ -143,6 +143,8 @@ protected function createNode( // Save it in Fedora. $headers['Content-Type'] = 'application/ld+json'; $headers['Prefer'] = 'return=minimal; handling=lenient'; + $this->log->debug("HEADERS " . json_encode($headers)); + $this->log->debug("FEDORA URL " . $fedora_url); $response = $this->fedora->saveResource( $fedora_url, json_encode($jsonld), @@ -398,7 +400,7 @@ public function deleteNode( $token = null ) { $path = $this->mapper->getFedoraPath($uuid); - $islandora_fedora_endpoint = rtrim("/", $islandora_fedora_endpoint); + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); $fedora_url = "$islandora_fedora_endpoint/$path"; $headers = empty($token) ? [] : ['Authorization' => $token]; @@ -430,7 +432,7 @@ public function saveExternal( $token = null ) { $path = $this->mapper->getFedoraPath($uuid); - $islandora_fedora_endpoint = rtrim("/", $islandora_fedora_endpoint); + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); $fedora_url = "$islandora_fedora_endpoint/$path"; $headers = empty($token) ? [] : ['Authorization' => $token]; @@ -471,7 +473,7 @@ public function createVersion( $token = null ) { $path = $this->mapper->getFedoraPath($uuid); - $islandora_fedora_endpoint = rtrim("/", $islandora_fedora_endpoint); + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); $fedora_url = "$islandora_fedora_endpoint/$path"; $headers = empty($token) ? [] : ['Authorization' => $token]; @@ -565,7 +567,7 @@ protected function getMediaUrls($json_url, $token = null) { // Construct the fedora url $pieces = explode("_flysystem/", $drupal_url); $fedora_file_path = end($pieces); - $islandora_fedora_endpoint = rtrim("/", $islandora_fedora_endpoint); + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); $fedora_file_url = "$islandora_fedora_endpoint/$fedora_file_path" ; // Now look for the 'describedby' link header on the file in Fedora. From 26bf3379f1fccd92c5c1e444f5d59294ee8df3c3 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Fri, 18 Dec 2020 16:43:33 -0400 Subject: [PATCH 05/21] Updating lockfile --- Milliner/composer.json | 2 +- Milliner/composer.lock | 601 ++++++++++++++++++++++++++++------------- 2 files changed, 414 insertions(+), 189 deletions(-) diff --git a/Milliner/composer.json b/Milliner/composer.json index 877e9d31..caed85a5 100644 --- a/Milliner/composer.json +++ b/Milliner/composer.json @@ -4,7 +4,7 @@ "type": "project", "require": { "silex/silex": "^2.0", - "islandora/crayfish-commons": "dev-dev", + "islandora/crayfish-commons": "dev-no-gemini", "islandora/chullo": "dev-dev", "php": "^7.3 || ^7.4" }, diff --git a/Milliner/composer.lock b/Milliner/composer.lock index e9ff0d8e..aed367dd 100644 --- a/Milliner/composer.lock +++ b/Milliner/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8317f2132a61f0f74df3da3aa07466d1", + "content-hash": "8e480aff17b177b08686d95069161412", "packages": [ { "name": "doctrine/cache", @@ -651,16 +651,16 @@ }, { "name": "islandora/crayfish-commons", - "version": "dev-dev", + "version": "dev-no-gemini", "source": { "type": "git", "url": "https://github.com/Islandora/Crayfish-Commons.git", - "reference": "d7c0044723c2089f7757fb5c9dd523397938a8e9" + "reference": "8bdf26baee941d686ac1638cc8204798c3e1c355" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Islandora/Crayfish-Commons/zipball/d7c0044723c2089f7757fb5c9dd523397938a8e9", - "reference": "d7c0044723c2089f7757fb5c9dd523397938a8e9", + "url": "https://api.github.com/repos/Islandora/Crayfish-Commons/zipball/8bdf26baee941d686ac1638cc8204798c3e1c355", + "reference": "8bdf26baee941d686ac1638cc8204798c3e1c355", "shasum": "" }, "require": { @@ -671,17 +671,17 @@ "pimple/pimple": "~3.0", "psr/log": "^1.0.1", "silex/silex": "^2.0", - "symfony/http-foundation": "^3.2.6", - "symfony/security": "^3.2", - "symfony/yaml": "^3.2" + "symfony/http-foundation": "^3.4 || ^4.4", + "symfony/security": "^3.4 || ^4.4", + "symfony/yaml": "^3.4 || ^4.4" }, "require-dev": { "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^5.0", - "sebastian/phpcpd": "^3.0", - "squizlabs/php_codesniffer": "^2.0" + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.0", + "sebastian/phpcpd": "^6.0", + "squizlabs/php_codesniffer": "^3.0" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -708,9 +708,9 @@ "homepage": "https://github.com/Islandora/Crayfish-Commons", "support": { "issues": "https://github.com/Islandora/documentation/issues", - "source": "https://github.com/Islandora/Crayfish-Commons/tree/dev" + "source": "https://github.com/Islandora/Crayfish-Commons/tree/no-gemini" }, - "time": "2020-11-12T23:33:17+00:00" + "time": "2020-12-18T18:48:36+00:00" }, { "name": "ml/iri", @@ -818,16 +818,16 @@ }, { "name": "monolog/monolog", - "version": "1.25.5", + "version": "1.26.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0" + "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1817faadd1846cd08be9a49e905dc68823bc38c0", - "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/2209ddd84e7ef1256b7af205d0717fb62cfc9c33", + "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33", "shasum": "" }, "require": { @@ -843,7 +843,7 @@ "graylog2/gelf-php": "~1.0", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", - "php-parallel-lint/php-parallel-lint": "^1.0", + "phpstan/phpstan": "^0.12.59", "phpunit/phpunit": "~4.5", "ruflin/elastica": ">=0.90 <3.0", "sentry/sentry": "^0.13", @@ -863,11 +863,6 @@ "sentry/sentry": "Allow sending log messages to a Sentry server" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { "psr-4": { "Monolog\\": "src/Monolog" @@ -893,7 +888,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/1.25.5" + "source": "https://github.com/Seldaek/monolog/tree/1.26.0" }, "funding": [ { @@ -905,7 +900,7 @@ "type": "tidelift" } ], - "time": "2020-07-23T08:35:51+00:00" + "time": "2020-12-14T12:56:38+00:00" }, { "name": "namshi/jose", @@ -1229,65 +1224,62 @@ }, { "name": "silex/silex", - "version": "v2.2.4", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/silexphp/Silex.git", - "reference": "d2531e5b8099c429b752ad2154e85999c3689057" + "reference": "6bc31c1b8c4ef614a7115320fd2d3b958032f131" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Silex/zipball/d2531e5b8099c429b752ad2154e85999c3689057", - "reference": "d2531e5b8099c429b752ad2154e85999c3689057", + "url": "https://api.github.com/repos/silexphp/Silex/zipball/6bc31c1b8c4ef614a7115320fd2d3b958032f131", + "reference": "6bc31c1b8c4ef614a7115320fd2d3b958032f131", "shasum": "" }, "require": { - "php": ">=5.5.9", - "pimple/pimple": "~3.0", - "symfony/event-dispatcher": "~2.8|^3.0", - "symfony/http-foundation": "~2.8|^3.0", - "symfony/http-kernel": "~2.8|^3.0", - "symfony/routing": "~2.8|^3.0" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35 || >= 5.0, <5.4.3" + "php": ">=7.1.3", + "pimple/pimple": "^3.0", + "symfony/event-dispatcher": "^4.0", + "symfony/http-foundation": "^4.0", + "symfony/http-kernel": "^4.0", + "symfony/routing": "^4.0" }, "replace": { "silex/api": "self.version", "silex/providers": "self.version" }, "require-dev": { - "doctrine/dbal": "~2.2", + "doctrine/dbal": "^2.2", "monolog/monolog": "^1.4.1", - "swiftmailer/swiftmailer": "~5", - "symfony/asset": "~2.8|^3.0", - "symfony/browser-kit": "~2.8|^3.0", - "symfony/config": "~2.8|^3.0", - "symfony/css-selector": "~2.8|^3.0", - "symfony/debug": "~2.8|^3.0", - "symfony/doctrine-bridge": "~2.8|^3.0", - "symfony/dom-crawler": "~2.8|^3.0", - "symfony/expression-language": "~2.8|^3.0", - "symfony/finder": "~2.8|^3.0", - "symfony/form": "~2.8|^3.0", - "symfony/intl": "~2.8|^3.0", - "symfony/monolog-bridge": "~2.8|^3.0", - "symfony/options-resolver": "~2.8|^3.0", + "swiftmailer/swiftmailer": "^5", + "symfony/asset": "^4.0", + "symfony/browser-kit": "^4.0", + "symfony/config": "^4.0", + "symfony/css-selector": "^4.0", + "symfony/debug": "^4.0", + "symfony/doctrine-bridge": "^4.0", + "symfony/dom-crawler": "^4.0", + "symfony/expression-language": "^4.0", + "symfony/finder": "^4.0", + "symfony/form": "^4.0", + "symfony/intl": "^4.0", + "symfony/monolog-bridge": "^4.0", + "symfony/options-resolver": "^4.0", "symfony/phpunit-bridge": "^3.2", - "symfony/process": "~2.8|^3.0", - "symfony/security": "~2.8|^3.0", - "symfony/serializer": "~2.8|^3.0", - "symfony/translation": "~2.8|^3.0", - "symfony/twig-bridge": "~2.8|^3.0", - "symfony/validator": "~2.8|^3.0", - "symfony/var-dumper": "~2.8|^3.0", - "symfony/web-link": "^3.3", - "twig/twig": "~1.28|~2.0" + "symfony/process": "^4.0", + "symfony/security": "^4.0", + "symfony/serializer": "^4.0", + "symfony/translation": "^4.0", + "symfony/twig-bridge": "^4.0", + "symfony/validator": "^4.0", + "symfony/var-dumper": "^4.0", + "symfony/web-link": "^4.0", + "twig/twig": "^2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "2.3.x-dev" } }, "autoload": { @@ -1316,23 +1308,97 @@ ], "support": { "issues": "https://github.com/silexphp/Silex/issues", - "source": "https://github.com/silexphp/Silex/tree/v2.2.4" + "source": "https://github.com/silexphp/Silex/tree/v2.3.0" }, "abandoned": "symfony/flex", - "time": "2018-03-16T23:34:20+00:00" + "time": "2018-04-20T05:17:01+00:00" + }, + { + "name": "symfony/contracts", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/contracts.git", + "reference": "d3636025e8253c6144358ec0a62773cae588395b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/contracts/zipball/d3636025e8253c6144358ec0a62773cae588395b", + "reference": "d3636025e8253c6144358ec0a62773cae588395b", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "require-dev": { + "psr/cache": "^1.0", + "psr/container": "^1.0", + "symfony/polyfill-intl-idn": "^1.10" + }, + "suggest": { + "psr/cache": "When using the Cache contracts", + "psr/container": "When using the Service contracts", + "symfony/cache-contracts-implementation": "", + "symfony/event-dispatcher-implementation": "", + "symfony/http-client-contracts-implementation": "", + "symfony/service-contracts-implementation": "", + "symfony/translation-contracts-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\": "" + }, + "exclude-from-classmap": [ + "**/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A set of abstractions extracted out of the Symfony components", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/contracts/tree/master" + }, + "time": "2019-04-27T14:29:50+00:00" }, { "name": "symfony/debug", - "version": "v4.4.17", + "version": "v4.4.18", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "65fe7b49868378319b82da3035fb30801b931c47" + "reference": "5dfc7825f3bfe9bb74b23d8b8ce0e0894e32b544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/65fe7b49868378319b82da3035fb30801b931c47", - "reference": "65fe7b49868378319b82da3035fb30801b931c47", + "url": "https://api.github.com/repos/symfony/debug/zipball/5dfc7825f3bfe9bb74b23d8b8ce0e0894e32b544", + "reference": "5dfc7825f3bfe9bb74b23d8b8ce0e0894e32b544", "shasum": "" }, "require": { @@ -1372,7 +1438,7 @@ "description": "Symfony Debug Component", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.17" + "source": "https://github.com/symfony/debug/tree/v4.4.18" }, "funding": [ { @@ -1388,7 +1454,7 @@ "type": "tidelift" } ], - "time": "2020-10-28T20:42:29+00:00" + "time": "2020-12-10T16:34:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1459,31 +1525,38 @@ }, { "name": "symfony/event-dispatcher", - "version": "v3.4.47", + "version": "v4.4.18", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "31fde73757b6bad247c54597beef974919ec6860" + "reference": "5d4c874b0eb1c32d40328a09dbc37307a5a910b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/31fde73757b6bad247c54597beef974919ec6860", - "reference": "31fde73757b6bad247c54597beef974919ec6860", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5d4c874b0eb1c32d40328a09dbc37307a5a910b0", + "reference": "5d4c874b0eb1c32d40328a09dbc37307a5a910b0", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/debug": "~3.4|~4.4", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/dependency-injection": "", @@ -1515,7 +1588,7 @@ "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v3.4.47" + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.18" }, "funding": [ { @@ -1531,29 +1604,110 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2020-12-18T07:41:31+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-06T13:19:58+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.47", + "version": "v4.4.18", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b9885fcce6fe494201da4f70a9309770e9d13dc8" + "reference": "5ebda66b51612516bf338d5f87da2f37ff74cf34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b9885fcce6fe494201da4f70a9309770e9d13dc8", - "reference": "b9885fcce6fe494201da4f70a9309770e9d13dc8", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5ebda66b51612516bf338d5f87da2f37ff74cf34", + "reference": "5ebda66b51612516bf338d5f87da2f37ff74cf34", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": ">=7.1.3", + "symfony/mime": "^4.3|^5.0", "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" + "predis/predis": "~1.0", + "symfony/expression-language": "^3.4|^4.0|^5.0" }, "type": "library", "autoload": { @@ -1581,7 +1735,7 @@ "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v3.4.47" + "source": "https://github.com/symfony/http-foundation/tree/v4.4.18" }, "funding": [ { @@ -1597,35 +1751,37 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2020-12-18T07:41:31+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.47", + "version": "v4.2.12", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "a98a4c30089e6a2d52a9fa236f718159b539f6f5" + "reference": "8a7c5ef599466af6e972c705507f815df9c490ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a98a4c30089e6a2d52a9fa236f718159b539f6f5", - "reference": "a98a4c30089e6a2d52a9fa236f718159b539f6f5", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8a7c5ef599466af6e972c705507f815df9c490ae", + "reference": "8a7c5ef599466af6e972c705507f815df9c490ae", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/log": "~1.0", - "symfony/debug": "^3.3.3|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", + "symfony/contracts": "^1.0.2", + "symfony/debug": "~3.4|~4.0", + "symfony/event-dispatcher": "~4.1", + "symfony/http-foundation": "^4.1.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-php56": "~1.8" }, "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", - "symfony/var-dumper": "<3.3", + "symfony/config": "<3.4", + "symfony/dependency-injection": "<4.2", + "symfony/translation": "<4.2", + "symfony/var-dumper": "<4.1.1", "twig/twig": "<1.34|<2.4,>=2" }, "provide": { @@ -1633,31 +1789,34 @@ }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "~2.8|~3.0|~4.0", - "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/console": "~2.8|~3.0|~4.0", - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "^3.4.10|^4.0.10", - "symfony/dom-crawler": "~2.8|~3.0|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0", + "symfony/browser-kit": "~3.4|~4.0", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/css-selector": "~3.4|~4.0", + "symfony/dependency-injection": "^4.2", + "symfony/dom-crawler": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0", - "symfony/templating": "~2.8|~3.0|~4.0", - "symfony/translation": "~2.8|~3.0|~4.0", - "symfony/var-dumper": "~3.3|~4.0" + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "~4.2", + "symfony/var-dumper": "^4.1.1" }, "suggest": { "symfony/browser-kit": "", "symfony/config": "", "symfony/console": "", "symfony/dependency-injection": "", - "symfony/finder": "", "symfony/var-dumper": "" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, "autoload": { "psr-4": { "Symfony\\Component\\HttpKernel\\": "" @@ -1683,7 +1842,64 @@ "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v3.4.47" + "source": "https://github.com/symfony/http-kernel/tree/v4.2.12" + }, + "time": "2019-11-13T08:51:34+00:00" + }, + { + "name": "symfony/inflector", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/inflector.git", + "reference": "e529917d701a057a12354845150be3e1c4b34084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/inflector/zipball/e529917d701a057a12354845150be3e1c4b34084", + "reference": "e529917d701a057a12354845150be3e1c4b34084", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/string": "~5.1.10|^5.2.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Inflector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Inflector Component", + "homepage": "https://symfony.com", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string", + "symfony", + "words" + ], + "support": { + "source": "https://github.com/symfony/inflector/tree/v5.2.1" }, "funding": [ { @@ -1699,31 +1915,44 @@ "type": "tidelift" } ], - "time": "2020-11-27T08:42:42+00:00" + "time": "2020-12-01T20:15:15+00:00" }, { - "name": "symfony/inflector", - "version": "v5.2.0", + "name": "symfony/mime", + "version": "v5.2.1", "source": { "type": "git", - "url": "https://github.com/symfony/inflector.git", - "reference": "ba33a08d608c5b26ef768b6652876098dd3ace36" + "url": "https://github.com/symfony/mime.git", + "reference": "de97005aef7426ba008c46ba840fc301df577ada" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/ba33a08d608c5b26ef768b6652876098dd3ace36", - "reference": "ba33a08d608c5b26ef768b6652876098dd3ace36", + "url": "https://api.github.com/repos/symfony/mime/zipball/de97005aef7426ba008c46ba840fc301df577ada", + "reference": "de97005aef7426ba008c46ba840fc301df577ada", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", - "symfony/string": "^5.1" + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.1", + "symfony/property-info": "^4.4|^5.1", + "symfony/serializer": "^5.2" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Inflector\\": "" + "Symfony\\Component\\Mime\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -1735,26 +1964,22 @@ ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Inflector Component", + "description": "A library to manipulate MIME messages", "homepage": "https://symfony.com", "keywords": [ - "inflection", - "pluralize", - "singularize", - "string", - "symfony", - "words" + "mime", + "mime-type" ], "support": { - "source": "https://github.com/symfony/inflector/tree/v5.2.0" + "source": "https://github.com/symfony/mime/tree/v5.2.1" }, "funding": [ { @@ -1770,7 +1995,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2020-12-09T18:54:12+00:00" }, { "name": "symfony/polyfill-ctype", @@ -2480,16 +2705,16 @@ }, { "name": "symfony/property-access", - "version": "v4.4.17", + "version": "v4.4.18", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "ab8184f093095b40c3e7688bc4eb1d0484da327c" + "reference": "439d92bc88fdda717f2c31335e8db41483ca5c8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/ab8184f093095b40c3e7688bc4eb1d0484da327c", - "reference": "ab8184f093095b40c3e7688bc4eb1d0484da327c", + "url": "https://api.github.com/repos/symfony/property-access/zipball/439d92bc88fdda717f2c31335e8db41483ca5c8d", + "reference": "439d92bc88fdda717f2c31335e8db41483ca5c8d", "shasum": "" }, "require": { @@ -2539,7 +2764,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v4.4.17" + "source": "https://github.com/symfony/property-access/tree/v4.4.18" }, "funding": [ { @@ -2555,38 +2780,38 @@ "type": "tidelift" } ], - "time": "2020-10-31T22:44:29+00:00" + "time": "2020-12-10T16:34:26+00:00" }, { "name": "symfony/routing", - "version": "v3.4.47", + "version": "v4.4.18", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "3e522ac69cadffd8131cc2b22157fa7662331a6c" + "reference": "80b042c20b035818daec844723e23b9825134ba0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3e522ac69cadffd8131cc2b22157fa7662331a6c", - "reference": "3e522ac69cadffd8131cc2b22157fa7662331a6c", + "url": "https://api.github.com/repos/symfony/routing/zipball/80b042c20b035818daec844723e23b9825134ba0", + "reference": "80b042c20b035818daec844723e23b9825134ba0", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3" }, "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, "require-dev": { - "doctrine/annotations": "~1.0", + "doctrine/annotations": "~1.2", "psr/log": "~1.0", - "symfony/config": "^3.3.1|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~2.8|~3.0|~4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "doctrine/annotations": "For using the annotation loader", @@ -2627,7 +2852,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v3.4.47" + "source": "https://github.com/symfony/routing/tree/v4.4.18" }, "funding": [ { @@ -2643,7 +2868,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2020-12-08T16:59:59+00:00" }, { "name": "symfony/security", @@ -2742,16 +2967,16 @@ }, { "name": "symfony/string", - "version": "v5.2.0", + "version": "v5.2.1", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242" + "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/40e975edadd4e32cd16f3753b3bad65d9ac48242", - "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242", + "url": "https://api.github.com/repos/symfony/string/zipball/5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed", + "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed", "shasum": "" }, "require": { @@ -2805,7 +3030,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.2.0" + "source": "https://github.com/symfony/string/tree/v5.2.1" }, "funding": [ { @@ -2821,31 +3046,31 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:08:07+00:00" + "time": "2020-12-05T07:33:16+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.47", + "version": "v4.4.18", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "88289caa3c166321883f67fe5130188ebbb47094" + "reference": "bbce94f14d73732340740366fcbe63363663a403" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/88289caa3c166321883f67fe5130188ebbb47094", - "reference": "88289caa3c166321883f67fe5130188ebbb47094", + "url": "https://api.github.com/repos/symfony/yaml/zipball/bbce94f14d73732340740366fcbe63363663a403", + "reference": "bbce94f14d73732340740366fcbe63363663a403", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": ">=7.1.3", "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/console": "<3.4" }, "require-dev": { - "symfony/console": "~3.4|~4.0" + "symfony/console": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -2876,7 +3101,7 @@ "description": "Symfony Yaml Component", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v3.4.47" + "source": "https://github.com/symfony/yaml/tree/v4.4.18" }, "funding": [ { @@ -2892,7 +3117,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2020-12-08T16:59:59+00:00" } ], "packages-dev": [ @@ -3141,16 +3366,16 @@ }, { "name": "phar-io/version", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae" + "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/726c026815142e4f8677b7cb7f2249c9ffb7ecae", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae", + "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", + "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", "shasum": "" }, "require": { @@ -3186,9 +3411,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.0.3" + "source": "https://github.com/phar-io/version/tree/3.0.4" }, - "time": "2020-11-30T09:21:21+00:00" + "time": "2020-12-13T23:18:30+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -5053,16 +5278,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v4.4.17", + "version": "v4.4.18", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "30ad9ac96a01913195bf0328d48e29d54fa53e6e" + "reference": "d44fbb02b458fe18d00fea18f24c97cefb87577e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/30ad9ac96a01913195bf0328d48e29d54fa53e6e", - "reference": "30ad9ac96a01913195bf0328d48e29d54fa53e6e", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/d44fbb02b458fe18d00fea18f24c97cefb87577e", + "reference": "d44fbb02b458fe18d00fea18f24c97cefb87577e", "shasum": "" }, "require": { @@ -5106,7 +5331,7 @@ "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v4.4.17" + "source": "https://github.com/symfony/dom-crawler/tree/v4.4.18" }, "funding": [ { @@ -5122,7 +5347,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T11:50:19+00:00" + "time": "2020-12-18T07:41:31+00:00" }, { "name": "theseer/tokenizer", From 5eb68fe8cdfb4b9a6014d941e5e8e93d87f2718d Mon Sep 17 00:00:00 2001 From: dannylamb Date: Tue, 5 Jan 2021 14:44:14 -0400 Subject: [PATCH 06/21] Working on media --- .../src/Controller/MillinerController.php | 2 + Milliner/src/Service/MillinerService.php | 44 +- .../src/Service/MillinerServiceInterface.php | 4 + Milliner/src/app.php | 4 +- .../src/src/Controller/MillinerController.php | 223 +++++++ Milliner/src/src/Service/MillinerService.php | 627 ++++++++++++++++++ .../src/Service/MillinerServiceInterface.php | 106 +++ Milliner/src/src/app.php | 52 ++ Milliner/src/src/index.php | 4 + Milliner/tests.patch | 43 ++ composer.phar | Bin 0 -> 2180422 bytes 11 files changed, 1098 insertions(+), 11 deletions(-) create mode 100644 Milliner/src/src/Controller/MillinerController.php create mode 100644 Milliner/src/src/Service/MillinerService.php create mode 100644 Milliner/src/src/Service/MillinerServiceInterface.php create mode 100644 Milliner/src/src/app.php create mode 100644 Milliner/src/src/index.php create mode 100644 Milliner/tests.patch create mode 100755 composer.phar diff --git a/Milliner/src/Controller/MillinerController.php b/Milliner/src/Controller/MillinerController.php index 6c012104..2aa78cdf 100644 --- a/Milliner/src/Controller/MillinerController.php +++ b/Milliner/src/Controller/MillinerController.php @@ -114,6 +114,7 @@ public function saveMedia($source_field, Request $request) try { $response = $this->milliner->saveMedia( + $source_field, $json_url, $islandora_fedora_endpoint, $token @@ -204,6 +205,7 @@ public function createMediaVersion($source_field, Request $request) try { $response = $this->milliner->createMediaVersion( + $source_field, $json_url, $islandora_fedora_endpoint, $token diff --git a/Milliner/src/Service/MillinerService.php b/Milliner/src/Service/MillinerService.php index a43ce3f9..bf42bf59 100644 --- a/Milliner/src/Service/MillinerService.php +++ b/Milliner/src/Service/MillinerService.php @@ -286,6 +286,9 @@ protected function updateNode( */ protected function processJsonld(array $jsonld, $drupal_url, $fedora_url) { + $this->log->debug("DRUPAL URL: $drupal_url"); + $this->log->debug("FEDORA URL: $fedora_url"); + $this->log->debug("BEFORE: " . json_encode($jsonld)); // Strip out everything other than the resource in question. $resource = array_filter( $jsonld['@graph'], @@ -297,6 +300,8 @@ function (array $elem) use ($drupal_url) { // Put in an fedora url for the resource. $resource[0]['@id'] = $fedora_url; + + $this->log->debug("AFTER: " . json_encode($resource)); return $resource; } @@ -359,11 +364,12 @@ protected function getModifiedTimestamp(array $jsonld) * {@inheritDoc} */ public function saveMedia( + $source_field, $json_url, $islandora_fedora_endpoint, $token = null ) { - $urls = $this->getMediaUrls($json_url, $token); + $urls = $this->getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token); return $this->updateNode( $urls['jsonld'], $urls['fedora'], @@ -507,11 +513,12 @@ public function createVersion( * {@inheritDoc} */ public function createMediaVersion( + $source_field, $json_url, $islandora_fedora_endpoint, $token = null ) { - $urls = $this->getMediaUrls($json_url, $token); + $urls = $this->getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token); $fedora_url = $urls['fedora']; $date = new DateTime(); @@ -540,10 +547,10 @@ public function createMediaVersion( } } - protected function getMediaUrls($json_url, $token = null) { - // HEAD drupal to get urls. + protected function getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token = null) { + // GET request for link headers and file UUID. $headers = empty($token) ? [] : ['Authorization' => $token]; - $drupal_response = $this->drupal->head( + $drupal_response = $this->drupal->get( $json_url, ['headers' => $headers] ); @@ -564,11 +571,30 @@ protected function getMediaUrls($json_url, $token = null) { ); } - // Construct the fedora url - $pieces = explode("_flysystem/", $drupal_url); - $fedora_file_path = end($pieces); + $media_json = json_decode( + $drupal_response->getBody(), + true + ); + + if (!isset($media_json[$source_field]) || empty($media_json[$source_field])) { + throw new \RuntimeException( + "Cannot parse file UUID from $json_url. Ensure $source_field exists on the media and is populated.", + 500 + ); + } + $file_uuid = $media_json[$source_field][0]['target_uuid']; + + // Construct the fedora url. + // Try to handle flysystem files first. $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); - $fedora_file_url = "$islandora_fedora_endpoint/$fedora_file_path" ; + $pieces = explode("_flysystem/fedora", $drupal_url); + if (count($pieces) > 1) { + $fedora_file_path = end($pieces); + } + else { + $fedora_file_path = $this->mapper->getFedoraPath($file_uuid); + } + $fedora_file_url = $islandora_fedora_endpoint . $fedora_file_path; // Now look for the 'describedby' link header on the file in Fedora. // I'm using the drupal http client because I have the full diff --git a/Milliner/src/Service/MillinerServiceInterface.php b/Milliner/src/Service/MillinerServiceInterface.php index e6e33172..1ca07d23 100644 --- a/Milliner/src/Service/MillinerServiceInterface.php +++ b/Milliner/src/Service/MillinerServiceInterface.php @@ -26,6 +26,7 @@ public function saveNode( ); /** + * @param $source_field * @param $json_url * @param $islandora_fedora_endpoint * @param $token @@ -35,6 +36,7 @@ public function saveNode( * @return \GuzzleHttp\Psr7\Response */ public function saveMedia( + $source_field, $json_url, $islandora_fedora_endpoint, $token = null @@ -86,6 +88,7 @@ public function createVersion( ); /** + * @param $source_field * @param $json_url * @param $islandora_fedora_endpoint * @param $token @@ -95,6 +98,7 @@ public function createVersion( * @return array */ public function createMediaVersion( + $source_field, $json_url, $islandora_fedora_endpoint, $token = null diff --git a/Milliner/src/app.php b/Milliner/src/app.php index f59b4293..184cb5dc 100644 --- a/Milliner/src/app.php +++ b/Milliner/src/app.php @@ -45,8 +45,8 @@ $app->post('/node/{uuid}', "milliner.controller:saveNode"); $app->delete('/node/{uuid}', "milliner.controller:deleteNode"); $app->post('/node/{uuid}/version', "milliner.controller:createNodeVersion"); -$app->post('/media', "milliner.controller:saveMedia"); -$app->post('/media/version', 'milliner.controller:createMediaVersion'); +$app->post('/media/{source_field}', "milliner.controller:saveMedia"); +$app->post('/media/{source_field}/version', 'milliner.controller:createMediaVersion'); $app->post('/external/{uuid}', "milliner.controller:saveExternal"); return $app; diff --git a/Milliner/src/src/Controller/MillinerController.php b/Milliner/src/src/Controller/MillinerController.php new file mode 100644 index 00000000..2aa78cdf --- /dev/null +++ b/Milliner/src/src/Controller/MillinerController.php @@ -0,0 +1,223 @@ +milliner = $milliner; + $this->log = $log; + } + + /** + * @param string $uuid + * @param \Symfony\Component\HttpFoundation\Request $request + * @return \Symfony\Component\HttpFoundation\Response + */ + public function saveNode($uuid, Request $request) + { + $token = $request->headers->get("Authorization", null); + $jsonld_url = $request->headers->get("Content-Location"); + $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); + + if (empty($jsonld_url)) { + return new Response("Expected JSONLD url in Content-Location header", 400); + } + + $this->log->debug("JSONLD URL: $jsonld_url"); + $this->log->debug("FEDORA ENDPOINT: $islandora_fedora_endpoint"); + try { + $response = $this->milliner->saveNode( + $uuid, + $jsonld_url, + $islandora_fedora_endpoint, + $token + ); + + return new Response( + $response->getBody(), + $response->getStatusCode() + ); + } catch (\Exception $e) { + $this->log->error("", ['Exception' => $e]); + $code = $e->getCode() == 0 ? 500 : $e->getCode(); + return new Response($e->getMessage(), $code); + } + } + + /** + * @param string $uuid + * @param \Symfony\Component\HttpFoundation\Request $request + * @return \Symfony\Component\HttpFoundation\Response + */ + public function deleteNode($uuid, Request $request) + { + $token = $request->headers->get("Authorization", null); + + try { + $response = $this->milliner->deleteNode( + $uuid, + $token + ); + + return new Response( + $response->getBody(), + $response->getStatusCode() + ); + } catch (\Exception $e) { + $this->log->error("", ['Exception' => $e]); + $code = $e->getCode() == 0 ? 500 : $e->getCode(); + return new Response($e->getMessage(), $code); + } + } + + /** + * @param string $source_field + * @param \Symfony\Component\HttpFoundation\Request $request + * @return \Symfony\Component\HttpFoundation\Response + */ + public function saveMedia($source_field, Request $request) + { + $token = $request->headers->get("Authorization", null); + $json_url = $request->headers->get("Content-Location"); + $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); + + if (empty($json_url)) { + return new Response("Expected JSON url in Content-Location header", 400); + } + + try { + $response = $this->milliner->saveMedia( + $source_field, + $json_url, + $islandora_fedora_endpoint, + $token + ); + + return new Response( + $response->getBody(), + $response->getStatusCode() + ); + } catch (\Exception $e) { + $this->log->error("", ['Exception' => $e]); + $code = $e->getCode() == 0 ? 500 : $e->getCode(); + return new Response($e->getMessage(), $code); + } + } + + /** + * @param string $uuid + * @param \Symfony\Component\HttpFoundation\Request $request + * @return \Symfony\Component\HttpFoundation\Response + */ + public function saveExternal($uuid, Request $request) + { + $token = $request->headers->get("Authorization", null); + $external_url = $request->headers->get("Content-Location"); + $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); + + if (empty($external_url)) { + return new Response("Expected external url in Content-Location header", 400); + } + + try { + $response = $this->milliner->saveExternal( + $uuid, + $external_url, + $islandora_fedora_endpoint, + $token + ); + + return new Response( + $response->getBody(), + $response->getStatusCode() + ); + } catch (\Exception $e) { + $this->log->error("", ['Exception' => $e]); + $code = $e->getCode() == 0 ? 500 : $e->getCode(); + return new Response($e->getMessage(), $code); + } + } + + /** + * @param string $uuid + * @param \Symfony\Component\HttpFoundation\Request $request + * @return \Symfony\Component\HttpFoundation\Response + */ + public function createNodeVersion($uuid, Request $request) + { + $token = $request->headers->get("Authorization", null); + $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); + + try { + $response = $this->milliner->createVersion( + $uuid, + $islandora_fedora_endpoint, + $token + ); + return new Response( + $response->getBody(), + $response->getStatusCode() + ); + } catch (\Exception $e) { + $this->log->error("", ['Exception' => $e]); + $code = $e->getCode() == 0 ? 500 : $e->getCode(); + return new Response($e->getMessage(), $code); + } + } + + /** + * @param string $source_field + * @param \Symfony\Component\HttpFoundation\Request $request + * @return \Symfony\Component\HttpFoundation\Response + */ + public function createMediaVersion($source_field, Request $request) + { + $token = $request->headers->get("Authorization", null); + $json_url = $request->headers->get("Content-Location"); + $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); + + try { + $response = $this->milliner->createMediaVersion( + $source_field, + $json_url, + $islandora_fedora_endpoint, + $token + ); + return new Response( + $response->getBody(), + $response->getStatusCode() + ); + } catch (\Exception $e) { + $this->log->error("", ['Exception' => $e]); + $code = $e->getCode() == 0 ? 500 : $e->getCode(); + return new Response($e->getMessage(), $code); + } + } +} diff --git a/Milliner/src/src/Service/MillinerService.php b/Milliner/src/src/Service/MillinerService.php new file mode 100644 index 00000000..bf42bf59 --- /dev/null +++ b/Milliner/src/src/Service/MillinerService.php @@ -0,0 +1,627 @@ +fedora = $fedora; + $this->drupal = $drupal; + $this->mapper = $mapper; + $this->log = $log; + $this->modifiedDatePredicate = $modifiedDatePredicate; + $this->stripFormatJsonld = $stripFormatJsonld; + } + + /** + * {@inheritDoc} + */ + public function saveNode( + $uuid, + $jsonld_url, + $islandora_fedora_endpoint, + $token = null + ) { + $path = $this->mapper->getFedoraPath($uuid); + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $fedora_url = "$islandora_fedora_endpoint/$path"; + + $response = $this->fedora->getResourceHeaders($fedora_url); + if ($response->getStatusCode() == "404") { + $this->log->debug("GOT A 404"); + return $this->createNode( + $jsonld_url, + $fedora_url, + $token + ); + } else { + $this->log->debug("DID NOT GET 404"); + return $this->updateNode( + $jsonld_url, + $fedora_url, + $token + ); + } + } + + /** + * Creates a new LDP-RS in Fedora from a Node. + * + * @param string $jsonld_url + * @param string $fedora_url + * @param string $token + * + * @return \GuzzleHttp\Psr7\Response + * + * @throws \RuntimeException + * @throws \GuzzleHttp\Exception\RequestException + */ + protected function createNode( + $jsonld_url, + $fedora_url, + $token = null + ) { + // Get the jsonld from Drupal. + $headers = empty($token) ? [] : ['Authorization' => $token]; + $drupal_response = $this->drupal->get( + $jsonld_url, + ['headers' => $headers] + ); + + $jsonld = json_decode( + $drupal_response->getBody(), + true + ); + + $subject_url = $this->stripFormatJsonld ? rtrim($jsonld_url, '?_format=jsonld') : $jsonld_url; + + // Mash it into the shape Fedora accepts. + $jsonld = $this->processJsonld( + $jsonld, + $subject_url, + $fedora_url + ); + + // Save it in Fedora. + $headers['Content-Type'] = 'application/ld+json'; + $headers['Prefer'] = 'return=minimal; handling=lenient'; + $this->log->debug("HEADERS " . json_encode($headers)); + $this->log->debug("FEDORA URL " . $fedora_url); + $response = $this->fedora->saveResource( + $fedora_url, + json_encode($jsonld), + $headers + ); + + $status = $response->getStatusCode(); + if (!in_array($status, [201, 204])) { + $reason = $response->getReasonPhrase(); + throw new \RuntimeException( + "Client error: `PUT $fedora_url` resulted in a `$status $reason` response: " . $response->getBody(), + $status + ); + } + + // Return the response from Fedora. + return $response; + } + + /** + * Updates an existing LDP-RS in Fedora from a Node. + * + * @param string $jsonld_url + * @param string $fedora_url + * @param string $token + * + * @return \GuzzleHttp\Psr7\Response + * + * @throws \RuntimeException + * @throws \GuzzleHttp\Exception\RequestException + */ + protected function updateNode( + $jsonld_url, + $fedora_url, + $token = null + ) { + + // Get the RDF from Fedora. + $headers = empty($token) ? [] : ['Authorization' => $token]; + $headers['Accept'] = 'application/ld+json'; + $fedora_response = $this->fedora->getResource( + $fedora_url, + $headers + ); + + $status = $fedora_response->getStatusCode(); + if ($status != 200) { + $reason = $fedora_response->getReasonPhrase(); + throw new \RuntimeException( + "Client error: `GET $fedora_url` resulted in a `$status $reason` response: " . + $fedora_response->getBody(), + $status + ); + } + + // Strip off the W/ prefix to make the ETag strong. + $etags = $fedora_response->getHeader("ETag"); + $etag = ltrim(reset($etags), "W/"); + + // Get the modified date from the RDF. + $fedora_jsonld = json_decode( + $fedora_response->getBody(), + true + ); + + // Account for the fact that new media haven't got a modified date + // pushed to it from Drupal yet. + try { + $fedora_modified = $this->getModifiedTimestamp( + $fedora_jsonld + ); + } catch (\RuntimeException $e) { + $fedora_modified = 0; + } + + // Get the jsonld from Drupal. + $headers = empty($token) ? [] : ['Authorization' => $token]; + $drupal_response = $this->drupal->get( + $jsonld_url, + ['headers' => $headers] + ); + $drupal_jsonld = json_decode( + $drupal_response->getBody(), + true + ); + + // Mash it into the shape Fedora accepts. + $subject_url = $this->stripFormatJsonld ? rtrim($jsonld_url, '?_format=jsonld') : $jsonld_url; + $drupal_jsonld = $this->processJsonld( + $drupal_jsonld, + $subject_url, + $fedora_url + ); + + // Get the modified date from the RDF. + $drupal_modified = $this->getModifiedTimestamp( + $drupal_jsonld + ); + + // Abort with 412 if the Drupal RDF is stale. + if ($drupal_modified <= $fedora_modified) { + throw new \RuntimeException( + "Not updating $fedora_url because RDF at $jsonld_url is not newer", + 412 + ); + } + + // Conditionally save it in Fedora. + $headers['Content-Type'] = 'application/ld+json'; + $headers['Prefer'] = 'return=minimal; handling=lenient'; + $headers['If-Match'] = $etag; + $response = $this->fedora->saveResource( + $fedora_url, + json_encode($drupal_jsonld), + $headers + ); + + $status = $response->getStatusCode(); + if (!in_array($status, [201, 204])) { + $reason = $response->getReasonPhrase(); + throw new \RuntimeException( + "Client error: `PUT $fedora_url` resulted in a `$status $reason` response: " . $response->getBody(), + $status + ); + } + + // Return the response from Fedora. + return $response; + } + + /** + * Normalizes Drupal jsonld into a shape Fedora understands. + * + * @param array $jsonld + * @param string $drupal_url + * @param string $fedora_url + * + * @return array + */ + protected function processJsonld(array $jsonld, $drupal_url, $fedora_url) + { + $this->log->debug("DRUPAL URL: $drupal_url"); + $this->log->debug("FEDORA URL: $fedora_url"); + $this->log->debug("BEFORE: " . json_encode($jsonld)); + // Strip out everything other than the resource in question. + $resource = array_filter( + $jsonld['@graph'], + function (array $elem) use ($drupal_url) { + return $elem['@id'] == $drupal_url; + } + ); + + // Put in an fedora url for the resource. + $resource[0]['@id'] = $fedora_url; + + + $this->log->debug("AFTER: " . json_encode($resource)); + return $resource; + } + + /** + * Gets the first value for a predicate in a JSONLD array. + * + * @param $jsonld + * @param $predicate + * @param $value + * + * @return mixed string|null + */ + protected function getFirstPredicate(array $jsonld, $predicate, $value = true) + { + $key = $value ? '@value' : '@id'; + $malformed = empty($jsonld) || + !isset($jsonld[0][$predicate]) || + empty($jsonld[0][$predicate]) || + !isset($jsonld[0][$predicate][0][$key]); + + if ($malformed) { + return null; + } + + return $jsonld[0][$predicate][0][$key]; + } + + /** + * Extracts a modified date from jsonld and returns it as a timestamp. + * + * @param array $jsonld + * + * @return int + * + * @throws \RuntimeException + */ + protected function getModifiedTimestamp(array $jsonld) + { + $modified = $this->getFirstPredicate( + $jsonld, + $this->modifiedDatePredicate + ); + + if (empty($modified)) { + throw new \RuntimeException( + "Could not parse {$this->modifiedDatePredicate} from " . json_encode($jsonld), + 500 + ); + } + + $date = \DateTime::createFromFormat( + \DateTime::W3C, + $modified + ); + + return $date->getTimestamp(); + } + + /** + * {@inheritDoc} + */ + public function saveMedia( + $source_field, + $json_url, + $islandora_fedora_endpoint, + $token = null + ) { + $urls = $this->getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token); + return $this->updateNode( + $urls['jsonld'], + $urls['fedora'], + $token + ); + } + + /** + * Gets a Link header with the supplied rel name. + * + * @param $response + * @param $rel_name + * + * @return null|string + */ + protected function getLinkHeader($response, $rel_name, $type = null) + { + $parsed = Psr7\parse_header($response->getHeader("Link")); + foreach ($parsed as $header) { + $has_relation = isset($header['rel']) && $header['rel'] == $rel_name; + $has_type = $type ? isset($header['type']) && $header['type'] == $type : true; + if ($has_type && $has_relation) { + return trim($header[0], '<>'); + } + } + return null; + } + + /** + * {@inheritDoc} + */ + public function deleteNode( + $uuid, + $token = null + ) { + $path = $this->mapper->getFedoraPath($uuid); + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $fedora_url = "$islandora_fedora_endpoint/$path"; + + $headers = empty($token) ? [] : ['Authorization' => $token]; + $response = $this->fedora->deleteResource( + $fedora_url, + $headers + ); + + $status = $response->getStatusCode(); + if (!in_array($status, [204, 410, 404])) { + $reason = $response->getReasonPhrase(); + throw new \RuntimeException( + "Client error: `DELETE $fedora_url` resulted in a `$status $reason` response: " . + $response->getBody(), + $status + ); + } + + return new Response($status); + } + + /** + * {@inheritDoc} + */ + public function saveExternal( + $uuid, + $external_url, + $islandora_fedora_endpoint, + $token = null + ) { + $path = $this->mapper->getFedoraPath($uuid); + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $fedora_url = "$islandora_fedora_endpoint/$path"; + + $headers = empty($token) ? [] : ['Authorization' => $token]; + $mimetype = $this->drupal->head( + $external_url, + ['headers' => $headers] + )->getHeader('Content-Type')[0]; + + // Save it in Fedora as external content. + $external_rel = "http://fedora.info/definitions/fcrepo#ExternalContent"; + $link = '<' . $external_url . '>; rel="' . $external_rel . '"; handling="redirect"; type="' . $mimetype . '"'; + $headers['Link'] = $link; + $response = $this->fedora->saveResource( + $fedora_url, + null, + $headers + ); + + $status = $response->getStatusCode(); + if (!in_array($status, [201, 204])) { + $reason = $response->getReasonPhrase(); + throw new \RuntimeException( + "Client error: `PUT $fedora_url` resulted in a `$status $reason` response: " . $response->getBody(), + $status + ); + } + + // Return the response from Fedora. + return $response; + } + + /** + * {@inheritDoc} + */ + public function createVersion( + $uuid, + $islandora_fedora_endpoint, + $token = null + ) { + $path = $this->mapper->getFedoraPath($uuid); + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $fedora_url = "$islandora_fedora_endpoint/$path"; + + $headers = empty($token) ? [] : ['Authorization' => $token]; + $date = new DateTime(); + $timestamp = $date->format("D, d M Y H:i:s O"); + // create version in Fedora. + try { + $response = $this->fedora->createVersion( + $fedora_url, + $timestamp, + null, + $headers + ); + $status = $response->getStatusCode(); + if (!in_array($status, [201])) { + $reason = $response->getReasonPhrase(); + throw new \RuntimeException( + "Client error: `POST $fedora_url` resulted in `$status $reason` response: " . + $response->getBody(), + $status + ); + } + // Return the response from Fedora. + return $response; + } catch (Exception $e) { + $this->log->error('Caught exception when creating version: ', $e->getMessage(), "\n"); + } + } + + /** + * {@inheritDoc} + */ + public function createMediaVersion( + $source_field, + $json_url, + $islandora_fedora_endpoint, + $token = null + ) { + $urls = $this->getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token); + $fedora_url = $urls['fedora']; + + $date = new DateTime(); + $timestamp = $date->format("D, d M Y H:i:s O"); + // create version in Fedora. + try { + $response = $this->fedora->createVersion( + $fedora_url, + $timestamp, + null, + $headers + ); + $status = $response->getStatusCode(); + if (!in_array($status, [201])) { + $reason = $response->getReasonPhrase(); + throw new \RuntimeException( + "Client error: `POST $fedora_url` resulted in `$status $reason` response: " . + $response->getBody(), + $status + ); + } + // Return the response from Fedora. + return $response; + } catch (Exception $e) { + $this->log->error('Caught exception when creating version: ', $e->getMessage(), "\n"); + } + } + + protected function getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token = null) { + // GET request for link headers and file UUID. + $headers = empty($token) ? [] : ['Authorization' => $token]; + $drupal_response = $this->drupal->get( + $json_url, + ['headers' => $headers] + ); + + $jsonld_url = $this->getLinkHeader($drupal_response, "alternate", "application/ld+json"); + if (empty($jsonld_url)) { + throw new \RuntimeException( + "Cannot parse 'alternate' link header from response to `HEAD $json_url`", + 500 + ); + } + + $drupal_url = $this->getLinkHeader($drupal_response, "describes"); + if (empty($drupal_url)) { + throw new \RuntimeException( + "Cannot parse 'describes' link header from response to `HEAD $json_url`", + 500 + ); + } + + $media_json = json_decode( + $drupal_response->getBody(), + true + ); + + if (!isset($media_json[$source_field]) || empty($media_json[$source_field])) { + throw new \RuntimeException( + "Cannot parse file UUID from $json_url. Ensure $source_field exists on the media and is populated.", + 500 + ); + } + $file_uuid = $media_json[$source_field][0]['target_uuid']; + + // Construct the fedora url. + // Try to handle flysystem files first. + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $pieces = explode("_flysystem/fedora", $drupal_url); + if (count($pieces) > 1) { + $fedora_file_path = end($pieces); + } + else { + $fedora_file_path = $this->mapper->getFedoraPath($file_uuid); + } + $fedora_file_url = $islandora_fedora_endpoint . $fedora_file_path; + + // Now look for the 'describedby' link header on the file in Fedora. + // I'm using the drupal http client because I have the full + // URI and need to squash redirects in case of external content. + $fedora_response = $this->drupal->head( + $fedora_file_url, + ['allow_redirects' => false, 'headers' => $headers] + ); + $status = $fedora_response->getStatusCode(); + + if ($status != 200 && $status != 307) { + $reason = $fedora_response->getReasonPhrase(); + throw new \RuntimeException( + "Client error: `HEAD $fedora_file_url` resulted in a `$status $reason` response: " . + $fedora_response->getBody(), + $status + ); + } + + $fedora_url = $this->getLinkHeader($fedora_response, "describedby"); + if (empty($fedora_url)) { + throw new \RuntimeException( + "Cannot parse 'describedby' link header from response to `HEAD $fedora_file_url`", + 500 + ); + } + + return ['drupal' => $drupal_url, 'fedora' => $fedora_url, 'jsonld' => $jsonld_url]; + } +} diff --git a/Milliner/src/src/Service/MillinerServiceInterface.php b/Milliner/src/src/Service/MillinerServiceInterface.php new file mode 100644 index 00000000..1ca07d23 --- /dev/null +++ b/Milliner/src/src/Service/MillinerServiceInterface.php @@ -0,0 +1,106 @@ +register(new IslandoraServiceProvider()); +$app->register(new YamlConfigServiceProvider(__DIR__ . '/../cfg/config.yaml')); + +$app['debug'] = $app['crayfish.debug']; + +$app['milliner.controller'] = function () use ($app) { + try { + $strip_format_jsonld = filter_var( + $app['crayfish.strip_format_jsonld'], + FILTER_VALIDATE_BOOLEAN + ); + } catch (UnknownIdentifierException $e) { + $strip_format_jsonld = false; + } + + return new MillinerController( + new MillinerService( + FedoraApi::create($app['crayfish.fedora_base_url']), + new Client(), + new EntityMapper(), + $app['monolog'], + $app['crayfish.modified_date_predicate'], + $strip_format_jsonld + ), + $app['monolog'] + ); +}; + +$app->post('/node/{uuid}', "milliner.controller:saveNode"); +$app->delete('/node/{uuid}', "milliner.controller:deleteNode"); +$app->post('/node/{uuid}/version', "milliner.controller:createNodeVersion"); +$app->post('/media/{source_field}', "milliner.controller:saveMedia"); +$app->post('/media/{source_field}/version', 'milliner.controller:createMediaVersion'); +$app->post('/external/{uuid}', "milliner.controller:saveExternal"); + +return $app; diff --git a/Milliner/src/src/index.php b/Milliner/src/src/index.php new file mode 100644 index 00000000..3e23d477 --- /dev/null +++ b/Milliner/src/src/index.php @@ -0,0 +1,4 @@ +run(); diff --git a/Milliner/tests.patch b/Milliner/tests.patch new file mode 100644 index 00000000..52a5c59f --- /dev/null +++ b/Milliner/tests.patch @@ -0,0 +1,43 @@ +diff --git a/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php b/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php +index 09b9e74..e28e5f9 100644 +--- a/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php ++++ b/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php +@@ -48,12 +48,16 @@ class MillinerControllerTest extends TestCase + $milliner = $this->prophesize(MillinerServiceInterface::class); + $milliner->saveNode(Argument::any(), Argument::any(), Argument::any(), Argument::any()) + ->willThrow(new \Exception("Forbidden", 403)); ++ $milliner->getFileFromMedia(Argument::any(), Argument::any(), Argument::any()) ++ ->willThrow(new \Exception("Forbidden", 403)); + $milliner->saveMedia(Argument::any(), Argument::any(), Argument::any()) + ->willThrow(new \Exception("Forbidden", 403)); + $milliner->deleteNode(Argument::any(), Argument::any()) + ->willThrow(new \Exception("Forbidden", 403)); + $milliner->saveExternal(Argument::any(), Argument::any(), Argument::any(), Argument::any()) + ->willThrow(new \Exception("Forbidden", 403)); ++ $milliner->getGeminiUrls(Argument::any(), Argument::any()) ++ ->willThrow(new \Exception("Forbidden", 403)); + $milliner->createVersion(Argument::any(), Argument::any()) + ->willThrow(new \Exception("Forbidden", 403)); + $milliner = $milliner->reveal(); +@@ -473,7 +477,9 @@ class MillinerControllerTest extends TestCase + public function testCreateNodeVersionReturnsSuccessOnSuccess() + { + $milliner = $this->prophesize(MillinerServiceInterface::class); +- $milliner->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ++ $milliner->getGeminiUrls(Argument::any(), Argument::any()) ++ ->willReturn(['fedora' => "http://example.org/fcrepo/abc123", "drupal" => "http://example.org/node/1"]); ++ $milliner->createVersion(Argument::any(), Argument::any()) + ->willReturn(new Response(201)); + $milliner = $milliner->reveal(); + $controller = new MillinerController($milliner, $this->logger); +@@ -499,7 +505,9 @@ class MillinerControllerTest extends TestCase + ); + + $milliner = $this->prophesize(MillinerServiceInterface::class); +- $milliner->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ++ $milliner->getGeminiUrls(Argument::any(), Argument::any()) ++ ->willReturn(['fedora' => "http://example.org/fcrepo/abc123", "drupal" => "http://example.org/node/1"]); ++ $milliner->createVersion(Argument::any(), Argument::any()) + ->willReturn(new Response(204)); + $milliner = $milliner->reveal(); + $controller = new MillinerController($milliner, $this->logger); diff --git a/composer.phar b/composer.phar new file mode 100755 index 0000000000000000000000000000000000000000..1574d12f7577b7bfaadf9b46f97e85dca1ac94ae GIT binary patch literal 2180422 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Û()?)Nhe;nw5sGft!ovDpMDKsj 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 z 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

)&(2Oda1CREQz)^(Wwk61u1Rd{Ai69hRe-0~ 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

@Ei+Hga`00miBlI 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

vLp98bK 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�!z~8Zm{5rzu$hpZq&Q)pr7yTFDP-9+rsn^#B?<} z2R6Lpxs|Bv{D{W0X{5aoCaKz>2kdZ!)O3fqEL~^OecE#r%J1w`iyWwHf9T)Q@N6S2 z)oEQZF?e5(JyRUGwRkwgY%+B%?VLkeP*n12phF1?*{Lp>QbntZCx50w z;>fcE-dQs- zPA0+&iup2_T#qot}cy4gBwPIfMlf}c^fQ; zX$%7q+D+{o4Lz7#q;7papwLe?WD!yv0qxdf4S>U2TqvOx!*^4H2Nq8&4nQ?Cl2cI* zlckQJH9;usZbh_tyN~!(n%LtY^`_@rOB`vY13|MEI*B~K-jwjpPWOhCXg|bz0A(aL zhmM}XhtHA-slO|6zo_}&bppE{&o7jv%bwOKm^Jh!2Aiw zG8sIa#*Za1U^TyskOcmxMwtz_iwwii@AG$lZmv)d2Np!=LQi=4EFRzL<(JE1-$D2A zIN;0UU)xZa9l&$%Hsq{?t?>G#69wvS{%`BzpIT8fn}R-v*!bk}C@A7+bP}&hm@)%p z@Vx7k9C9(1i+zPKN?yhI%6^GA1?@QjlJ(Sp`iKx3)9K{(GJ^N(u)e+ctzM#+JE=1- z)uXeajFw-`$lDEv@UkMT6oShPWE|MFdOYs?f&%1cIEk8XufDy#nTW3sBVY|(6Zdiz z{V6rD`J>7Jn#qiX^7)?I_+NT;gv+^vWd0J zc6y$V^9|q?Nk5&%ry7v$MI$fj^-)A!oxkV{cJ}iO8!gFx>(9d!md1et9Dis&n0>!n z6>tB>e47mh)3gI7IS~qM+#I%9$;O`>S}T+2AdOB;l1HF3reQ)=GiWZVt8M+Cf-;e|C)2vmY!h8!e$UnRB&(Nv#Co)m( zD<~;-*|%F!%d7lU07kdL$$H)E;)cO{tkp#-j<`mU_hT<#*!L{RqudfeV$WUe#{EJc zU7;xeR-MlsAzAb%NDmauI>-#H@K*)bPXew#cs{-bQu0i&Icz#1z6Ad0F|E%bVfk}R z-gh@a>`v$+8MnKJt#@d_O3|}2ShBE^vXe)^O;u|F9djk zRgOZg#6tRlL_){%GVfKB(82bfiSDcMPQXz(s2=E!`!|--7ETBk+4q-m;)5*m1om~z zH)9b?-+0*a!977B+k-o#Did&*;7o+w>%QA(ZbDjRF)769d`nGa-G~~GSiI5hgqJ&= zb)nNEg>+?;ooK-h*?o4nPpcOAxP_MPaUUI*2Y_mY=Dur82=A0>usBGgr7#e8{dnCbS3i z7*4)VZZ<{k%F7v=OC%$z`(p+9j9x}A3u&dPmzzhgP-#H8W&nc_ zCCe`3UiOq;%U%;OS@7NV49U^bHy2NA5I0;I57#o&RbYr~@(&`=9OKbkvSI&hS8xtn ztp4}XGcbIVvGV}eZ2Zgi`>*#8?WS*9;_v_d$4&V1IX125UwThAqxgvM-O)m^R56Z?L*Ia1HO6< zT|WPQM1`Ap_IE#B)vsGUZ2yNZN+%dDe|md=&PC8wWJj*~3{#dZb|NqDalx|zWNG4W z8LZZK=`o_csE3<0Q)hRc$-udFvz6o)J|aPzOWhM9Ue6_Y1pm*>>~PV;sB>=wv?!e% zwowW3VQ-`&AFs2}vwKpwNzUaK!6;OSC>|H*@VOtU;~*V4n7Y8rK*NhVYSja)cPs`d z7{7*?dDMk&wMmQ+jQw;?aY!?xG9e!!K8cKUN(tLy_yDT}{2@~dvaf=I@>uHWo((b8 zm8u08K#4-2nxig5c{O?6G|w*@(?=S{y_7#6FTsTo zUWEfSxIu8#4R;r5_t0KgIjLbRPslMjt<n<37GN!DL1-YPh-F>iSEWC=M+cpk41CepOy&eR{!?PH*vjI0L8e0K77*KAIq5 zn3AzOjEg%3QDpQOcXYTr+`0hmR%~EbZPN+$G!iln?mnO6?UD;B>LZNjIY8>&0(Zb?b>0G{H?LBGI#j(jF#%9O* zSzLns{w%RU&eal@;gDBX1hd@kPq_r+mdxE(xWp$+1~0FjWsGLqWrvDmr)lR00nKp( z^l^o-K!JBUXC~RL7G{z61D}G(iy{nn>4rVmM2hw}k=T7}70j(%tH0k`&8V&1-}T8} zZvFSTuwDB^KP?FFt!K*Q-0u7I!2miv>$`IzOysBvsng$fHv$_osHoTJC=B-q{I#3=@&Hp%J>?5HJ?(}JRLs3x4~XGRnU4&o zg{xI9H_-=R@8uN=8HhNf9^J*=DX(hafT>YxP!R)Y;|+YnG{F0_Op5xt9Mie!`w((J z@G~S)#3s6`l=UJ{xA}Ef%E4+kY?eynofF)b~3Yk1K{viFL^C5tz^xM?K)=SVX1aSnnm?4q5x!`Mv;VkQG1= zl1e1?-IZywCR#{EUiaue!g|T~6EFN*%{Tvl-02RR?(Z!=|8`c~KW)XL^BDtizj0sV z_KtLdn5>xo^ZxX8F1{x}%QS39x9Bf9^hf>;hsuae+7Wow`~o*N^6iBA&<*rDdQ!l5 z&;x_ejI+J6XXu;tOLXc#0i2OPex-cI&{5ufJTt&;fi#T*0y8mi#V)Y7*LTaIgsy~4 zqKc`%A8FyV{dr-pgKzkomB@z+z`xSwjL(Y=QPBSwB=Tjv0W~fbeO=A(1hl}v{Ebo$ z=(po{oe0dLK#c+#0T74O=r?ME{Po}$aPHe<^Iv^Fu-E_LR1R5E~Vn*aukUHm5w`gJ+ zA|$krSn?|S_&6{HC%)I()Zk788YU9NvzTDkQQe)@KB+rLuud0dc!~gzB{#C6GyzyF zwq6#e#(r!gX*TOb`p`;*gn(eye0R&F1w!mEoYcM1h<`jWGeW1n`(;)`zk?Se6gsD!1$)j*qx4-fs}DS){|AZy9=Uyu{X-vCo9;`n;!ZCBd&_Mg0}IRx zr>L%k=f+siezbZ?*h5qG$^gCL30{Os41uvrZ`!DMP!dfkTeR(|NiGSuZb!_?NwY^( zW$|-hbcC*32?wxMY+WHV#dF+K3w}i)P%GjWwIqRX?# z4tF&q^E>Av_u+JTq8;_V#$0=KMz1ce!Ihry=zeTnvpVilz{egJWnR!aOMsg1SOJ z;ju$h@oWPLE}cY!eqKUs%m+6Nk`}wC+S;};Xd=lJCZGcRBoyNu@(a-WNM_n!k9x7M zF1tW|hT(Vf^O|)@*{=mED17YHXbZrW}Kqn=h zHta@G#@VJ(3Yb~C_+q+b@0*9q$N$jixTgMl89fL0hMRyFm5O>Um=C4_ko~ofT}Z)~rwl zS|ok~*6T7L8rqrR{Y74`JKflTUPDzkf}S01^{J(f3zvFBF8LU(jo z@nnmm>a+(_brK^uNfqwqTxrF4cT!=e(n&tt3?2_al;d@Bf0*D02D~;pHMBhrq6o-37Hs|7b2ew?o-oSbz1qcc-vys;9w?7RnGZ*Dqc(`OVF!It^)je~K z=?ZDD^=UHD`{Tmwh248fA2$;{HYn~a$I`y415EhzDt8-+^pp}SR5uuIO9L@42p)IR z)5PZY)@Lv8^$Y})e2v6gJinI{h3*cw3CXKVlk^Tp1A$wP-_NR3?BG*HPlq!Hi1%IOtREIo=+OCP+K=w2kbhq(& zF~B)<0R~pzBln_-QG|hduY{Ae&(5^n9rlJORm83`;y!VaTMOH^X$6i>&)#>jU7 zj%35KE&DQEj@1L`mckpNsAidmJr<ot3xB13`u*hCZ7WcSrIA*vbFTq z?S@{T<1uLB%Jy#u)-rad?jd>ftpup-XezG;0@}kD*>K>~lb;92eYlUo`P7{i6Q-b#B!^uD?G;?#cmYYGJwL z;Q9R1lc&k?8O-i}5g>Y2@R1d<-|;*E3;#BC{a9YW8vK*+5Nw%0rzV1!_gCQ|{_y~S zGaQ=08~fwb^*8hbH!o7f+`bP?K_()AVMqU-^9y|N@6vsk;KHEyo8EBu1q=TO4nLRr zQ(y`pi~g{Z{YY#0J*?sE?Vv9jB=zEeqiJ}c&VJE({g2?Y?3kR5l|pC|B^;f(BY9swiUt-8NN zY>BY??5~v{-6e&-B~3X(T%+)^Ku&9fwM8h@%ZqtjeyS2+5neWaKzEYXl&T*-)*&zI zyl1|~W#q}P*+bxsU=?WwxMSa-t{ zp2lJ=qHN`!r1*^;+^RFve?y}VHdyr1oTTo=Fp%Pvw8v^N?c^GC& z^tS{ig@2xg`?JbS%^G&#U;VwgQzK0F0$6UiSF}rv7fhl-DgTkAF_sO-h0kxjrp_S? zD%)AJbP#m`x%`ts2JO6WlgCe|R0I*$?+*aG-y(OJHr?E$;Y(<7i>U?~W3|Zfl?r1L z?VeA;+hw<|MyezAs;~T6gwA^`Yv?)PGS+AvsF0_ z7NnmCWn|3FMkWb)1lM#d31@>k9mm1LfMm?+4n9L>IYn9aekQyz53mCrpLQhn>}Vk@ zpYGCldI%9J2eErW$a!0kw@_3F>s^oqpTtb1#}T+8AZOVImqRwG(z)YLBx1+Cp(V== z7k7Be?x)-^Z7_$a!!0zQw+M{SrG=+j{orMXEJDyf}q` zg>NJ@=3m&q#J?b+{nN52grC_M#HW7(!I-;z&4eNcsr?H8OqBt^JD`0(#wfW)(VsWy z9PS(5`)l#}Br{nx`h(->;qn3q`mqQ?<~}(J%ZE*aM$iHNVRdr_?}z8W$_9a87KDO> zTN2bOkWTwC*?z<-u++&5(7$nmvp>rw`txHtfB(H$rB;mH5AG}#+*x+&gG#^$kJRsy z9|*WLzj|h{oO?e$=T{((%<=b~4aq?NfmiDO2J&__b!)<(QC3-n$(2<6jMscz^E;Cr zy%}2SunyFtZoZ3@)U}JmnkjNV*2riR>5CFZWxfvHMC@M$x$N)#Q-s+L*Fu{Lt^8~- z2Hq{|yx|0@{1oK93Byx-N=5_HeG90->Ift{BU<{9jUB{lI?H0?{*gJbgqWE3guH?=eu+b7{|x$TF*;)e z=eN7Agu?-rq-g3#w3+Wli|2sa0AG>&n8cH~Z+3T*flds;&$(}b`1Z71kVl-%L`yn# zGYaLQ?HDGCrEiV;DC54QT1$Y_$xTpXV?mO zZ^0vws7TM;guz=bP=|LBJstu%omZ3g@5oc`!f}mxOUhi=K3}X-fgb&o1VDFxZaz!A zb-9*B%qhp{UQtYeONy6gcot?TRR6H2PX?6LF|y<@;$TNKEgUSGx(jos|Auh*MM(OaSBkAj9}j4= z8>9fwrFGn!0j)a=&!!lsJ|}SqF#GD+{k`h5*z%V$a)BjoJt3DucVl_WI%;7Y-;rPJ zLZC3ReQj(HKhh51ehAKvLyL00q=z^aXkDf^#r%{H#ZY+Z;l}CieiF>SH1M5hKH}<9 zo}wGzANH;yoVH=1KsJ6RM!P)q(MwONJ@o=Inc8Tl!@0Z~&){{IR8X5>v<785I4j)Z zP2R?xJ7C6Q-20`JLsa))H)v0rJ3@dWP7O)OL>H`9AuG>MlH+_6|*_Q#QH> zPE0bS#k=c!D8bmbLjXop*7aN=_(Connl6t;i!Pm5T9O%MC2Lu$V2mYCu`Mryw3j>b8 zWTmE2>Wmr~pf5ZjPdWSQEYU)G(mM6ax}kZzo59UzIIK%IE)-WH*Wa~LapC1%c?`M> zs01+xvms6nA|1uhN&%;8ZM*~(w& zQjA80ulC`)Zg?GrK-p(7sOuO?2P`6%#(vR1F@mI|1!~qCRb0tTNLq9!TwxL#^w7<2 zUZlT5|EZ~h!FthW^h9}mL#Pd;e<^Ys3S(E$qFT+)D8I~>lxtdz4XhjP4i(i+dx6qe zSJVx735t9JCtkq)M|<_*zqeQ0!VLuiBnvnkj0RSSx{XP{CUXiA_CJX|zJ_W4%X@YC z$GsX-7LWR-{BE!Q<+158l z=GG&TRi%1>2qSsh_xD$G1#hQtm%Nn%Z>qIcmpxYy`4R^=lDYXf;Q(0jLOltLV8Epf z8EBL#1TFK_W5~os?)OWNJa&2s@tBZEj2_8LkSux&a%{0JC`!1rq-|l3)84p4+>T?u zZYNXRgJPS+!ewz@w|vNtAl0~VL9X)Ngfu%3H7{y>(4UyUU(7LKQnZrek8K1h81dm! zwpjsOox#PtZ4%9pN@Y^t1&f)QDlnN*Hdkk9J8Y7p$4}9A=`3CcwimM_lklF+J z663<_>#K;Kb@G6W4U{A{pF?^g}_;rS-Y3xPgn%<6Pniv zu8T)l9meJry=plfbj$ZCq^;@r zTh)pVu{sQh++CY+U>=W`0BFKDDxcpgOtByPdr}pr>xwrNq$M<>x;kiOQAK=a|?=sBf_4;I_Y_O8* zSZGyD85YqsZ>%+dybtxkA~cJ{Ha4h5`;Z?Pm4Yz9PlWU?^`EZ9YOt*wA@F6dNUNz8 zqL@n$$o%w>F>J1N+o&N0@tzMju3x6`EiF=fB^ZbSBL~Cg61h1&7mtL%nZ3L+cL>|U zDp=no$T5fkeb7+z{(7))OOZ53z0tjFnC_S0G3`$@ey3unzczF7*b3n&>YYFA!9t9A z2Wir2n#hK4WrE=7N9---PbW07x{_XGSf0QZ3rV0-hfk!)dhh)yyhgI2pa27s)0b)Z z1{5(`1%5nkw}pO-JG6N`q(Dh|0WxR9oX+ePmtx)y4<*5#9%n;gnzyWEN$GJFmW7!v zd6yOHaEh%eNi!<~lq<$g$vph}wm1nQFs}k4%N#pFwkr4B4nc8&DsGincc#ns5fi>M z9PAB^$}|2bGBKm%s~iu)%h2nT;_t)mf>&eoaxR(Qa(IX6|IuEJ|M&K4?d>N_S#}3} z*kkdfrv{XJ=(H0U@6q=?x?r z5BkmMZ=JmWU{~A%`$}CF;M%%zC?mpfeb`Sa+mVl2p{^H#y~b+s_C7kjBmp%f^a&xJ zRDP@lb38)|iSa^iLyR%0R1Zu=qx=2i9tXHfwGuWBW~UnrzLSY)4X@YU5t>JWXRY=C z(FcmX2b$u+-)svKXd)LRN944BS=4(b>WD-hw=iGGL>_L~UDtqqM*=wEy7RbpP=G;B zc0PM3p~HgiYvv>Y@AQ_$M^0e+vm4#z;&p|M@z|?(t??=fhRQVO>xVps?5%EOY@S4O zYIkhP<7wWY1vf3wSLtVzEj4$P<8-b}z8WA|2xOLc`~>XhMu78^C|e(mr(4(1XGSlg zn8XQtZC=i^-0A7DWzC#{>C1wDcoMhOR|-`tA}N4aF^b z2$Aj(X^=7AWO!L6!Nd)~r>l-Sfk&VEyG^cmMqMER1frwBRE|KTFLng5r2GP9L`o^T zh*}I07<7*4!Vs{pij)(P-Pf>mpZ4Ln8!T}7&EOgg+0z?sEGpY8i!|Rzf(1uoV&OJe z5z@;IqtxK}iy!)bdahoI+ycnblc~*BoZ~2PCQH`3&-v=tmE@0mHD?zGFUI&s3UGi! zWdI>}A}#4QEP3c_k3N5C22?}iV3KNt?U}b zKxYHPThe`IN0&N0+D=mMfVTk`k}Lrw`Kcp*u(8t%Fhf_iSUb(XshhJK_ss1mhdr%R z?^rag(K)MvFUI*J4oAH^r|-8uRgAx>MzM63d-MS{wFFOQPq^g)+8ngxkg^Nn2;SPc zLDQ1ta5~9ga_N}s0En$L6XjP`HDnAcW52?Yz%Sxw&>T4~QIhg3gMS zwg;orPTaKPZaom-ZHPd{$NlA44Z>|7If40lfFzWuAUQGw+85O*2#}dI4}{aIKgS$^9f`?gFUv#JLkXY zn3x1bbnwz52j!Y3CJ;fK1eZu_5D)JZ;fkA#qGhl{CDEZ7`e;_LB1w2im+CYfI#j2e z))4}m`}EQ-kb<%vy21^NJxDFO6J#y&bjz#eSY2XPR_{R+RVzRy8gnD13r*FNFEEWuBw;lW`nx*m3BzbugS z#XEZ}L?S><{GZQ1f8GP<%6s_{ss4+3y@0rv{!8Y*wZp}~)oJ`wKb&hm*87h9r5|pc zkNWL0hQ|njvWMDpz-UID?Po>!R{&?DTfd=3KKOZ{67inS>R&TNa02SK*mNLt2Y#w` zcl=}ZLuVTDhS@KpH}uInAkBZCGlhrKr~^1~Cx6B=mIbZpk&pef|1jx+W6T2N4g&yd zE%Ocki`m46fhGW#4BgcMVf@uI2Tuv}-Dh(D;OBYlo6!Uwtk~aO_J4ZSyT7~a|MaSN zKT9qCdO*oV$4?S@MIUZ;E7zO5A&|JCdk*~UAV4bdq#b^YADD_TT2iYU9-PY9J1OP> zoRWC}%~f#TE_?Bcu>dT9hSOs3CLxX4?Us}L3z*5Ntxm!qp?n|B6gzj1b>ox{$4SFBe;PPFivrZS0<@T7Us8m$F=9co_C(# zz8{A&f1eHq=)taC!1Ul!8}?wc0!s=5CQg{lUnrEgKd0kie`|XG=DzkA_#V%1;z5z- zbcotFbGn$jP|Mf)DSmvkinMXYOomffUEqFHa9bF5c?LNFJQ(l5xd(puK4Aq_@|V~KOGbP-cWJb&FJ&kdcitD7!gDlB4Dn?AeW%S z{$Qy1O=+<{J+Hc$vgIFpg-kI%qoI8ty?1Djiy3!M<0vlcwg&C}3YH`HT7sxscQbW$ zB=C%GM!BppHo$&RDeVl$aC)UliiYEcB8n&+I~WLQ+ogw-3QE@zFB1uJecvjo!Nfobl#*>gsrct(Wd zE6A1k0eg_KB|0$Q!$*JohggrlUQhpGviME>_D}2S+5W7jx5IDiDJjHAf#(m+Q*3o_ zC@TA+I7S7M#V+WoiI($Au_`}fzyBv6g<8((gvT|M^<_SxR>) zew+Sm3;560QhiQ=S_Ki}x9=aS%(D0E0PQM9z8fXOSkaMMU$z*G8>|byIT+Lft z2)Xt??`bPl5G-tz9Ef*0IAoHY9n_FS6S?R9U<8&1C195^4TxHu$E9)$wX8ewt%n@Q zd~z@Ck+V;gIR?FbhcW#iv@obx=`)@gZ{@X9-L|qSFg*W-TkGFgU^G-a^h9(QcGp-i z3@{pJH`0)tp)P*@eVUC90gU_^|3u0OsnY!()4@ zU-P=d-q#{}-QHl0s^ZoY>i)`({~$sA^-lZ|Kk?U9%|G3NT=iAa#J}Ew49u~P&zt>> z&y*@Ui)3}=@lS)#V4VNIQ_%p-UHY}6Nq?+per8ojFya3;{of#F{G+r261)z1v>#gA zx9a8!A!pwo1i}38$N!Dz{+JcP&&!YBOi5b(2d%=(<)swv!1Y*vYOF7s&iPm+2lU5u zbXPzDet&4bLUbT+;*}hfA~}EOyz-FV13)JE`xdt=>Qelc(awKY6VhKKr!Rks#WT~E z8-@Wv#dN#I%6W9UU~dnP;tbQjligg`e3B3Q3q&kFm0j&F;rwAPa;LY)oeS*Hz1I;nKf!V~eGwU9bfXrfGg(!P;q%)Jp=&^9~}dUg&^My|b^M zNjY9dC+fAZA)|3%#4~gPPo{jW!_y(No(Ep+~|ay&bD~ z3cX#&W-^o{#c*OjDh}nmJS*#~qYqZl3+0NKK$~&@>aX)?Vt_H6JEyr_b6HKd;NqZ5 z1iJtbv95+_O7|8KNU4=?!|9G(t+#w>&M&)z)BOh2p_APuT(LNc?AoAzI0>8@DUaky zbvl#-gx(k5Pusi4UmUkT0;fNlVi(o#r`T?(TxGWOj*~I%j`ux@47CF}K|!_sA+qNC z6dO1WBHO8o{pRYTB4NBswzm)#)03(Dn$zw3_xKui!U>rJ+`!dJb}ymOSr4nCYp*l1 zRetYF^92bJhU!2#(+Xw(n=mrra7dBX8s3u4lw!U`F#Q|igh8)6-}O&)-KAr(S6(wF zsnsFUsPQ&Y!BxJ9QGgkukdBXb&uzMKMf41g*9ujY;}AC$f$^l5(;-Xw#VWkrVRzP}yIM!Hr^OV4Xdq-AZg~^{;58LZkI}7fhsdyI0>srr%d_WUY zQ}8_q8Pub5sueqSvtEO84anoU2f>j|!g$){Jnkg&)3estYH3W?L38HPmCQxUVuM02NbZ}PB(ND)?_r2w#)R10kL8uRzf^rr@So~pG@h2(w zq%e$E^AerrYCr2Y2*E&pSxca<0%(g34(t!K1vD}L?qUMmT!@!yizO{5qn32u2SzwZ zylICH=kp!%u)e)_U^?hr%rFpGCohb8py_tr^YviE0F67}+u*i$WaF{Q3iWPF8MBHw zt&oUVL1q}c++NaOR%_xu_`}+9|6m|z-j9;Gb&N?lTCn1HPOOc~X|tVx29i!C7mw5B zL-2em&%S&GHlyLh&V%9Y(HrU4dJDeYD*w=n`7YJ|-iRUoG9v1q?mMCWs1osCRf!fG zy%G;5(z2_S7b`pUc!~ww&s~@q!dlt#f2n5Sp=S9N@m~B`Mtlo807dw39T@9xJ1{?= z8h&@l|7i#2Z%z#W9QhBf_!m{2)+ue81~AEPUc|yv0XKBrId$;HFuCzs@EDfK-CSJ`As}Th~Hzj>6t&-NoTB zIbV9h>jM($$R-e)#=AXFk6n#(=hpyE2EX5+aSEhD%hE>VOwSn)kZ&ppq*Alygep02 zb(l0<>v5Zw%zc$Eauy1x(+BnzWdQApckjzv0rSSo;Mx2Y^exrpvZEHQhh@1ZlmLyH za2I5e2QQh{ZcGUhS6qy0jO@0or>7f?>!l*Nc2Xm|!kk!=Z=b#ibrbL}N|v^s5u==y`uO(%6Au zgX6QkM-bemP%9YXT8#JZ!D+Q`_5<8Mw9uDQ9Htc(1y|)z5G^>5dYQhQOTHM}UE8@T zUca*A3?1z$xdLb0x%9*dXSmvSAl|(1dC?h>S#eOb6-IJ1qa{6QEW_!5wD)FWkIRX= z@<~SR^1bF&67#bB^Yi8Fp$*=}6e12!kMoQG`@XMCyR`D+o#d@WTH&NdIFs>a1O6o` zQGj~wE6L@0xi*5dOEsb$w1`d9BRL3&VbU#)qP)#F?}it+LB9p+tq99=dZJzFx(|`L z2xtg#^T+oqp2QLqsaWmh9r%-W51SHZ8G*HnP?f&Jj$-|8S#&(5ZT~9pM*Ih<#E(lj zz?Xl^R{6OggdoT2J}OJ#+d94;I}^#sRwZs6`lYB>ev8ZGbs&s#(9{HFwKf)q-~fpQ zM6f7)GLvG-$aocrchh^Fa2N#ugQ{2Cq*LIyqjSO@5@@X6yT1;Ohw&kD9y=urcTw@G zI2SvTz~{#rmq4oxDA(sn@;L1JUaboxakqXmEVS4?#j;jTYl=7-Aj19QsZEVb^${i3 z=71!eY87<95D)uVA==Gg#Mqhv%%j(kzQP zUyg$;Su;8@M}s{JvVCRGm%`J>*LcN~re8u-v&8z?I&xIPB$%*Iv-j@ zBSB$8$e8hB+f(NSCvm*a`=l)5%t@SHEz0I3XT${7UkbV)`)jIl>8Xn#o4`jU>w>uG zWpBYxsC&~VJnSz{3;e!g%LAh1${aD~6WcI(o!u5w zv@R{hGt#uTIP`Q*^jdvijvP|;5U5rd%JYit!vKm@Xh_T?m4? zf}!DSaPvc!@GdD?HVtf;-zz-~`@h!>Q2)97@iVpgadHEX5kKa(|M(U^?{N3udW+v+ zXaA+Q_<4uBAK&6Hg~q>8XV|3RIG{N4UoohM3|!bym{O!lJs6~Ml5vK)C5wyGE~yr( z>EN{G4Tt;&7K;$XR?bWZ{f1XB#xAHgZ8vldEj&U6Khh0}%+`>GXeWs8uG4_8BE!7l zd0J{Cf9)-t?8J?POuzGqwGku%PE~m_^JB9gbC^ow>WO1Gzs$x#Gt99%-fx0BBD-T| zOnakz92L1fz_>gFUHLv6*tfVI%DsN6qM>dNOW)=N;c%>g#dyKFix8Ug+BAIk7ISVb z$wQ3v;%=dD_lL&kQF@fm+Ou|_-Finuytup{5L78!2apz&&m_<=U0h2wI4jhs!tZfL z0j3Kk2-oP6fMXcxufgsB?M)Bm>B^JFGZo#2b*aSh6s#OVlOE2uA6P5xn4!C6 zZxc*&r)Lxwj)u};hr&2V(Pvg^t{B(Gds{C$ zekS827aqy|V4fH}e_Ph0*grO%)S5Z7Y>^FVBE0#pfl_02+yn^F=p{lojypdM@8Wa6 z#(nt&p#<186s=3ZPY6N2Ru+tsi)E^ExNRD;UDIc0BR;q+zhm#e^__lAkJ$-#>pGDq zgsE_{fAchOA4llFgp^UQ`uOMUjlb%S{~QMURcL(G8O*R?*O(v4qdgtg)x84o91KC7 z{%&Rg02pWg!n`33PL++51ChI|4k{J_5?zc4;UlfrfcmfX{rXDK$QGBvh}C#xLnrp0 zI+5Oxo*f?A3>JZwPkHwB?B$VMazf}Qi2(>Kvg@9tsZx(qn^zD;-Gp{aww>t)%IV@A zs*Jl8FbqS^rG2a+ofG$*pk`DX_;Cuv;V`#4_EO?ib@b)ofNv#Q=qjP7`XG1X*2Mxu z%)Z@OiA{uWx6Q-uFOI;nOfYksME5|FyHz6A|C313#607mqAh)@UpH{DOe_`hs5{!O>BdoM~3-z`c~987sju~b4UP;!j|JreE zARXZOj~&O`U-_GkcgLbbmcOM*6e_L!kOy0&%`JpY7foSI^ zroC1j z@N5TaxPp>McwRx*ig`~*(9|Gk{NWDCRG=g80TI8;Sa_-K_saU(T_A+yx_{EXhl^mE z8c|f+Al7zwxrAFs-AUvu?X7@R@;;90-rPy-PEHpI>l=a!1dler7;2TiRj+DxBu&I# z6FtHpzkN_G>Ns^9v@x_Giu*!ftleOVtcu>1j#A2XG?KH^)G^s zWxLyjWx9tus?uy<`91eYS()2-`0YHOc613L34);w*bdu0kTKTk7w)PfjYD=$XP1}V zF+b&5ZF%h;_lHB3D_d^5aOi_AuUlOPobg%NRPMS4uiL}D2kd&eH^h`#O*Dtus44@3 zhv<>2qW!DT7VPv~9S7pX&ReeXga(1>sc)1SwVoR+vW(=gS(2GOj|{3i$5Uq;-0|Er z4v{1_eRLf;Lr~W!E)=i(dQ;yxY0~G1GG0%R$k{+b_TIvw&X^TL591!$B$xEy&+dJ3 z5>CvH1w;UXe#B25lj>Z>Yax2E(!xxW0rY8|qljJ)s{M3FYC&K;_hZ-bIic1G?%j3R zyBfW9Z4b%tcBYA5ePH54FR}hG{Egoq$f!T<=@#*FeZcD{!NCK{j$!)`5dGpF7V#O4rxVE&qKW|Z9h5QRMoa<4W zT9}A|q1Cy`#$j7J+sh&m2eV_)-LuoGi(|F|*lV4HDg6yq9bPUsl$-R+4Ia(qb-y4QHdZ`j{LTo^|kA~0ZxX`nm1bp*b z1e35O;;?y9RpbC>rL=3rm%{cP!uo`3*F296A;dFE4VvyU9~ix| z$LvjACKYvQVU8c?o8?5t$JGy)30~T|fbEP{Y#`?bLSrL5c^&aI(qX!OMX$0W8qv78n8(H_=?#O`~yf$c%e}Th9 zc6K*82Epre%kS7-zJ(*n0=hFzk6yWr*~?8eSy2rS#J0u_ETAuYndy#d zVTiz$NDm`;+s9%z;gOV2*L!n?a61oGa(%+LKHzOkvMP9y$mWfX>?JWyg`$|*;J$4H zl{{XJaQ2>!T*}4qSJRC@yAF$#fI5z*oj)T`RSf;0I8#`WY&uVouwf;HFXCd=|GFFCg_8Zj&P#BnlyTLvCB?S3XcxC2U^T+%B|CO@x zfBrE3d8PR;-s&{*&ZzbvQtgwqV#q~aif2!zRgxLo*(_Ho%x4Ax z_~${2_a!#Rh7f0H=Re+c-$H=Q(+I;M>>XzPCCmDqSN%m;HCwQvhrH@Y2{?iw~ z=2Tmtwt|eak2AqXPBjQ?K!F9>)vIFZFBNb9zkXzV`Ql!GDg@xw_jO|qEBFYO0w-=# zd=ev$!&%>_m!kB=lUDYRzS?MdbmoUg0rgQpB$%B$sir?4Yn#TE{yZcvoms+0(a=M5 zCyl)9#%jLq3ww(8pm9SCGm}5HZYB*Jz(INuVjz&lXgC( z=pcvB2~iH^p(QK_+N%~4{W`$}GQv9o=7eP@g|it+XCqK{XB-fYPT&lAN41pK)^-*Q zvIz)C=%i#2euI4Zl1vaEcHZaw=DY&qdk8>Dl$zs~2q6^D?dqiFeKA2E){wlOL__HR z!`DCgk1PFu@%m@P_W?UFzrFrFzB&_(H%+)pGEE{!X(exk*H5p1<$v@l!@qlt|Nrat z|G#)-KPhD3_5XuF#=vZ?dcsgQgjn5}yCdhrWgHz!d`SC^$(PYVkmgH7?;(LFc;L%A z4vR}-u6?`qM!dz@7Vss$rOV>3kN4|qZKGRk1;$hNZ6ZCC2~3`irmW4)ois(3?Rc{e z(#EMR%a8AL>&sshGJi=m`bC|He>kgL6YpW3pB;T@?_lYxcQut@?Nx8^^5>Vup8^@p zd2mBDZ4chOfxI`G@KXXow*k>$kY0x$d=*mk%-h8o>x{(7*vclh;m55UoX+Q*@4O61 z+Odom_}XcZvB5yxZR|@FEJ)X*2}$uWBe#rpo@Tqz=GSs~Z289_jVQwGFNpbE{Rg-) ze_>WK#~>L0h?D*gHG%(EK@%szThnHant)Fgja$#-I)|~c*&oDd6s3)RxI#$ za3j6rB{K`$NHF6Xyc=2iHv$r?>*Eu?2tjmEm$(R$RS6fU3{XNiKp?&ay&0xdE!+kf zbRQ+>O}U4%!?)m0`h<(Ur)nR~pH+U3MQjz`Q85p8c#;5nyPVei8+@$63134HPr*T6 zNck1unE(76ZNC4NzDjrA(6P%0bPS%$f18;DLED?Q(y!5V7+k*TL&Yp@phw94RWS=| z8F+MMhbV%qv?M>>+pTao_K}>d(z&6RL<~f3-|TKTsr2|k1ER-_Pl-J4Be0tZRgmKR zHuA{jcxFy>v?8IRYB+%aN@phw%R#;%BZyHczH?`QTSTYq)v7B$Y;j;uoRLzLx3ax;RePuw0D ziw%v&dqhiu9Zs_wn~b_^)E*2nn+U_94*mtwS33P{_|@xtv|XKGHGJH`>z5m|tp^Ew;=84^@t0Rc5HDl6nInX-@_M)ia$Ikm;I%XIf+VCJ62hIyK>#*k zbHZtl22o4^;jc9Xkzx|Z9Q+D2lV*JE=zx-2B;$z54?DS@n~JFIreE)l>Xt!MJk1`1 z_hx~g(gBD)@p(eF*^APaOOsY-)o+7~TCbJWIO5~7gVwsbAoek|9snsVB9h5W`9dC5 zXYB|YmWuP(ZSa+HK^`;4;f3Z^`)$Gl>cM~{%t751nhHcui6pcj(~s24R#mWPxf=I? z0G&F|UCU}HA~BDt5Qd4gISa?E3{2+kj5pYN>4rRZ97P!yKHqVL>J6Z~+tF7Xg4R); z7jX-<_f%By`-7B-M&KkvjOd^=3d;eqGgmh4p#Qwv`5@jv418-!!mWtsK=5yE&5@uf z=@vB#U;eUX{`(5gIbVzXulnYX693!k4zDe!?%yP_@9KUl{=T|<|I6xLzRq8CqoAYt zb#*rYpYyH4e+3+~@64JEY?&ZoDXOwKoEqjQ64zPa)qoZ!Y|!`Qh;99peFL)@4m+HCw=KQhF}kCHM&^m>&xr|_>0zh(b*$}T9|ekmhZoih3E^V? zf;VQr!R`mWy*7M0`;SalA%~4@3s=5dp;XWPV{o^-TYnU0j@Uo?R80aX4gyQk^1`E3 zJI3@Yi1ma1VDjf-BNuyNSr-=c9cMP~--3`s!f`7^bf6b}S3S;mou%EF0D5h@-T{{+ z*GZQeN{AzQm4O0R+bg7KJ;==2Knzli!8m!F&UAf_kS=!tpCnC#I4Ca6*E=gE>z(tk zK+t}Ud*^UJzYNDMb~`muQTraA8BKNiGqzme*E}#tBF}(|xYrNcAEVR71zG9Exz6#u z?8J44%0}=qZoLiK7wnmHiK|8IbsA^}=pMewaF<}8ny4Q-8!RM+#%?lZA7oNV5SYRp zl*{}omKk4FmM?gYf*>HtXMEstHmvU*?1mBb?g^>ZnRb0b9ynQ%Kt`|Q4MhO$DO~di z0%Rp0kf2s#WAWjvIlD&McYzo^#_rS!cduifr6l4{iO8C3aL1n&#GxkeR8kGljs_q{ zY*G+co}LKRChq71W42Ta{eWbRSF2S@^>%~4O~mOUJE9f-IR2#=V!3UaU@ zzKuD7ivm*90f+gXSiIlJ24;Qoob4BUkw(|Q#?HPEXg>@ruKWIUX1pf14qfyLHu-aC zrpw_Kb{X|E5c&%b8WvRSHD2b)=}Bz>@YLyS_Qs)9u_hGnk3&o!p}D;b(k79Q4-7=K zyW-0CfWysC=OYa~n$y5%5Jtl7&sKt~+Jjr10Im0V-(dVs+^yl2Mjq{M+QzANqtmuC z>uD2Vxk!>vIn3+3&x3jhO(y!zqIML7mSa~IsrlTAx8jtu)*-2NTQr|UUZt3O=r1`W zJ}OE!SQL%=-G+pu821$d7TY7ac=T2`qAto=Vex%HpiFH!zbTPi$_9%)-FzLSRNj z__uA~GXXCkZr_U6Ktuex-{U00qsX2Rl6Z$dlRVK+K&k;?C%O%H{ysgYHdjW}w7QqyWDrPjRR2_kIU1X8k}FvraaI)$x1-^C z^3vJJ)h8;*c2g^Br@vaboV?Ke-T_&skAzN~N+4pKxY-shBh&H23POqwyXL)&C-<6K z8Lv%mg?wzM$wrcU#7rv+JU#gtg&Jm)N9~TlROkZ22SBmp+~B%Z%Grm@_Vh^9?M>=I zsGoZ6E`3qi!^A4$dRBpEb2-#;yImAH-@w`4J_!*XHX3@Wiq}KkRiN3clcCSl&i47I zdmIsDx?(IIIxUAr1h(W>6f;WbTJWc;cHGHyw-AHKY+N7Ba619PQ!sX1tWSVua%I7wnn>1NSL*?H&ermLAAg6&9ud9G!{;LIh%$>MwhmS^$d(s9X^g ziSF~+v7_=Dp?5fCn^}m5!zp7y`*un(U#q$l6AS8o9J4cFsinNVx=OWA5ePJ8cVJni z7OQ^N5%-{pqy?=`953$$ZY<_7lbrY|I+=TG4;_c1QYd66M=N%$m~Lh;PHV5EnhQ>! zSQ_>d((^BqR9HPgQ1#ze^>1R+x9Wqkb^oPaUv&GN9^!=P6M%x0TvHqP{x3n-f5n8I zwo}OhSD_pahUod8K{T?0CysWgo*ID7ujK>ZlQ0Yw>=R!+FFA?WxU7uTO9ZxEzONz6 z7aUSdrXKH%&RD$;Z-{|{b9iDW7di!{bskaqmG%{4^)O_(6x2&W=EL+FA?iqhjYcr+ zAK50m52JR_xT}-M733|%VF7g-&lpM5F@m%YHeSDY96JGTg=!tJ1|4_JDQsUs(N zk8OPiQDp}n%f2#>L{`*w?QFbatsu{7i{m=&_ope%Q%o3s}7Dxk73LCLhGa@9`w|ubL4eWaqLXm`xAwBAh^qfhcU`T{30&a8g(^o%G zcQqW)q=#SBaP>c|;q6QQ8d9e0f2qxs~_bki-zKHFWMvBw5<0YyG40uL5jYcSUexR!RsUgX&DJ_W{} zf{d{1%cf?Uz|PcTFw}g!_*d{ zh~aNd#jw8k$m@3%=MH|X*z6XPaH<3CVxtt>r{@bqsBJ}3k7`|x%VjQ4TWh<2aP}=! zQrBbm+pd+13`UQh8W4{=60Q)I79Jz!8Ozp6Fn2Q4@5===8;&q9_sykuMScp2u2@XC z+HOygfZre6Gy58dinjo*z9d)kcCZ(S+YJVQp*SatH~XQt{B2se(Fm{|VSDr)^ts7d zyYq8&I`(RHU^O*8-{}C1G5S0|kjI2$0z||{kINRKR}HwQTfmDBQ%>1(Petg$x}D_0 zNm?_K<+33P<(M8@AF!%-xB>4?|G%u|#7@kbF>my-2_v8HE8y6@_8?D`AtL%~G5?~<{4+{}OZPjydvQKT z^fn$J5!epnx}TM~=txWFpBwM?+)Jm(@g9CX14f|OjN3Mr__R9R&NP2iAm-D(gp~>A zOaj=IoctPrr1xs{+fH&wnm7jqwjLHCAny*+Lo7CHuw!apP6a}pHg#4wdhACmY+S+? z&g6IZG$|-=8fSC85Ww`%C+*}WYKo=c***p5>}Un7tP8Fg?N&TLmU3mG-W4`d8)4+S zGu`<2P;sf@zClj&d={x7!3O+( zo3Un1=X1+gJeY-dgjJ>#-n!H5+)qNF#}Bl+=xZ7U{NuVJPiEtbRx;AAf8-5Y$PW=L z(t*~=Xj_wk@Zu5e2sGap%)w^UCnPrGsrwpeZEl;;I2$yJMdc9rT6!SsN#E>l)iFr1 zlhfUH{UsR317!0iNc5{(&Nbtw6Qpg&e-dT>@qhmKXH?eLQ~94Ce^=YN>$|ou-#j6l zS!s&=7x2V;r_RvNpSIO+K_;Xq+V3&-hCa0xYdcf?dFCE~*g1I%F~gnJpL1-G$>VC} zn_n=XHxi2)XN?(h@?HHI3J$zoVTA&F_)X|4ZyDC^>o+RQy#PueOx;f;gx&xAL*5(h zI@|$5&ULUrI4%GPsC1U;JfD5=wx`{@yy#k6qX)eeUQ6#4*>rb_0a| z27Lxh5*}Ai_vD8O2WlL(44a6e(btscdC4<$mw|&d06)Qrvy(wdo4P-kaGH+VZT4i^ z6~4bXZwB5F7N&8a%EfLtZJ#CxZX6wo0;&N8KU~@~ zxSQMO?55n+=(4-tUXg5XV8|GdOcH>5!JVg7uNQEP9#&@NT)sHRd%7Mv4$P`dO-kAp z4RM6Noe@cH1swJ2!5EqtRm%f`HU@528io)RA+iQgk2=;EK!7qQQO zo9Q>2Ho7SH_Zy6ckcA|oK=xpV(l#yWa}7!Kf1Tic$(Bw0Lktsm%@3% zqpx$)-{h`h^Z++M8dtQi%KmkgkJgS+Iuq^qgANQ$$`;7LgJDYB-{kxx2L0_;!TcLX z=1avDe*WY}K!3kle`A#Cx<_Ns8=QDu1~)5e;&lVumy%Ro~m1DZvn27<(uXP1CK#JJ|XDRw~(5}w;ih87C!3m9$Zh?nBn$X zD?~l5YSx)}u7uH?rn2$d`vGM_W~GVkL5%L$71=xmEm#JZ5tT*+kw3*%nMC&9krLa% zdQNOL5Xx1kMF@8U5u0qGIH&itW1r&UK!?J)b)o$NU@Q)4aGQj9NFg!u$KMQg|7AJh znBNU~|12lJKP)oHTLavFLmH?jIk+Td`Ef?HA&MTc{wno<{*>kVE-ag`mF2%tST(md!_Hv6cCYY;1WaKx!-itP6WpKV)MH z6q?W5ps>7edu8F_Z!nPFYr}sYoF`)K($JBxwH zeW}0w+7m3;06IEXJ|H1B7x%3-!$HUf~L-%C1;)`R%8F+p~kb4hwER04jO-cmzP;w>!gN zV?1u)F9k_<^!7b@r(kUiCfhq~IG0&ft;B zZE;NTPPkl&G{B-H`A1Rp=Zf+jIr~=&+TUraH~b|o$hnV; zq?8`jjeTfz2f&z$v(M+BG}Y{B8=VwEXB2@ax0=Hk$3xUtn$J`I6Cn8a&2tuPOxIvu zWU6^!$}zO=;Z1y=o-Q@UsDhRhigr!?cuB7t*|>Kr5=M8BAb+mOF<2=i;{HJpHPB}c zo3g%-(eeH~cdz@Y&;4Xu>B>>JU<7Yua8&gD3u~N(E)yWSQ^GQJNs0^1_3vt!FSm{F zKIL25FT}W;6lSGXE*NIv+K0Qt7BUf65N)Bm!>ewd{Ng%vb@Pr7kSHVyfJX(X!z+Mz zB}JOtN}JluYj~%&siDQ1d)vVZ#LmY1{1T9z>B0GEJ)B%qpoFZYqA*f5DF~|oFCc4v zd{y}_M-f=GP5gSU>|?rlKyNGw&uehp;cRL$(A_M4PU!MAaBpBdu0TPGQxysiO;yx1f+7gJKfzyMIW#Vc$5YV$3JJ8NT_McKm$E-PG z7^DV|nUhT}8y4A<=dN;|f##?C*zX0(+O+HKn=7cH*MfHEGQ8I^{I_6!T>z zlb1lQE50kIqn&RtSfAuTy-5mmwCAf%=5$Yq&K;Zp`Bi|-gjvpCB z&2Qc+yS@#IW8#c<%as(fHN(Qg3R!vKA$N_Z^;~S;N(2+!=zg=#TzTkiovVgSO5F|3 z_N-D#I9r9p0}#5i1Z+d&Xf5-8fjZa5c%R|QQ=<12uH}18rBdLPjjZe@ismQRtm+9n zxt&|OXf}a(jG3IGS}fA80p#Qj9^~nwlH0=y6cGM-ZtfMNO9@Ldnx|-51iOU@#;0~B z3|p*L?tW3pdWkR69ftHU9id@#zpv_XdoL$xfPgJ;5eXqUz>FZ3Zbp%D1>VA9^XglY z$#JoMf%)B&ylH_bt@u6>Zic|At-C41h|lEZQv2s4xxaYyYuKKVSV|yJ8St)_d%Z8Z zdX$#~;-60KiJ1jwTlo;9n90pH)p56;I|)BQJQK4?N_Kz1kEKCgE;dzDw}`x=@yW4Y zqPIhyKG}p%4B*w;z9PXs&&bjC+>+kaEZoK_FQ+)d#1-*|{cf0kRn;}gw75TRl9|ZK z^2ZNkclr4De z-Z~N%a$@x_Y-|oBdTyZus?6yu9oPuHQ@k6qJID|73RiV0$9I0U>A%FyLkSNMW$n6wb? z9I&>0?Wfp6S)aN3YxHJv%j-dp+K%$vwK2DBORY^I+n|>#(0wmuJcgcKuEVfT?Phq}I28kDt zbcyg5ltkVY$LppK7xa#`7ZcDw-4!fNB2KXpcBe-q;ZvN>%X}wY&3kemU7W{tlzKE< zM)So(h7v~#hA`u9xQ)}KRORM~h_Y^bn(T`DWC9|<<5TMyKX(+u^{!e@RLm50v&BU( zP9NK5;uG1v#S4Bk+X=#ubWvfCQ;+RYqTT3Cgf^xU4sguRXk7%#>GgQDWj=%LO{whC zT!lOb^#mb#iX3-Z-C^oOH^rRZ^8`{^xc`*$ms%v+GusHT7oT85rfdzb+~bcYaR?~_ z+NG}x7@T`qD{S;&5)1Za0JOu)*!z1O#RlY&Kh!T(Ml&_8FhiZ zdDUmo3c{&MVAR=$kME@py!QTHU;#fEvVajHS!z$v)5ne)2Xt9ij^G&BIk0buM5>5^*y;K5pmwVs8OTt=taLfw?f)R*E(%ETRL$0p1(q z?WQ4d504!PM6|1|KAQ8x!x){~&Eu(R2)y@1(Q1T!PAk9G=ldssgMJ*U;Bxzyh_K&Y zU!(UPpz6MQ>+Ea$h-qYYumW6#h_-cKVtKlmp7EB;O!tv{CQROUj{$i3Fd-lx;V!;QyfWz~F~8fj_e&X;3JNGw)j+rX zvkj|t3p?5$7oRVo86TI(_jqE}S7rSS&G`8?h5yXV_-F>{6ZC}@t$cUclUe$BiE6(4 zcm!OvhX(3>vEIMc1_=yDU<9#)M{8Y5Fkc(li~owKXHQ4#R`P=BNSR$8ug=>A2yT>r zpYp|kTa45<9rslAi>rA_0!VZ74tA7$xORB5^G-1VO19m$y$`S2PW0^R*$Q421&Qh% z%!mUlAZkdiw{}+(;(}EWn4V9E7it9=7yYnPppjy1%I?0YmD?57oQn{9?=PxKKk`|>8q80l#Q-{c8<_f=@kSf2E( zg<47xP%`alVP8a1<Yi@->9#N4xuvyoibKDp|O=m-Xtvl|v~& zrUX3a^|kz6w*fP6xHIlFx>w?Koc-I3Z$T0V5t65ND0e3XL%JGhRgVS#Yi^jTb8(Cin>BxEV1?#6& z?hbdd23o9J`V^W_EPK;mL_bqBm-Y@HKi!6i4M&@*4S_t*_uy1XY)Ta{zg8vd zewBm;lGWLVcTewia=#`4<_g00IzEwcDfl)^rZMW}!fZ{7OvhKjl#BV;ZxB>frFjDF zw3$JY@Pk=V+fBsl9atVh1PkTS%fv}t$KRxUy%Q6s`i~DiGh`;J$@l^R7+ewm_{$~n z`!4i%mq#9ZUmmG%mq%TSLmdiH#U9EXLR2C(g*=M+2;(j zwFCz)GO)3Xg+t~DP7w$stV53=j&}fq`gut_uW;FdOCo)OHEQ`WrouNN@brE;ECmMe zSFQ%kYr_vXujl|i<8w6pp3H)u8H2dEWfLqP9_9tU!DC_72_oA!E^iA?Cum9S?d_hy ztN(9_IT0&Bi&>;OO9zbgj_ ztlt-CDgTG1N5m}%a=e{b!HnE;U&Div)K>-=#;p=0C|>v`qpzVpR;vM-gy zP2u)2Qj=fBTYoy4$Ar_Fp}~-RuUrO%F}lWlkD0Jj`Ff<{1KEe?1ZiO^$+&l?>zerW zSP}`RkrCX*{p}U1w@Kz{py?UN%A*BBr$or1ECK1@H`b+F%tL|}R3Sr$9a+OCFd(S( zqzE}UQ#6XackCMvG)`$b7H6pzE`^TD_H5=$*Ss{@0NpkD;-91#H_ds!LxH62z9L^Q z9|Lm%t?Xv93?CR=ocTmkwAa%8u}+9{R#39v$FtXM56h^{OL;%epy?)jufFpRVuJZW zrt~pqtuXIp#b^>XepK+E-tUP%g zz)kz)Fn7VW`7l#DUG?$talHa^%ikQ+4$`84s7fI>SRh7E;C?#OZ6#d?EEa-6$8#Jc zn#0-}iAvf{^BpRbXn>Ha%RI(M*?n+R1-z`$p#e8oX23(s#%g#K0CQ(m*Nv{ZXg_xW zwV#bkmaNv3(wX@2qR3(or>JpDIj(tJs|y3zk~1+S97Sy5&$qeftL&gkKt{Ql&mB|2 z-1Etw%plId(;Qs1X{eF>dLDZa3Y606aV_9CI8E~r{GZcJi__f#8)+SER0`m|X|M?^ z_=uCuu1ts8F6M{KIcT>9a2`QA_JQR4diKa2I(|J9{6jF*N3m0WD01eub#(GHXxWw6 z%aFZgBlJ>ZR;!^eGeOGjlk zV7cv$S9?3?JVck@l}I;z7SxClxD7KeXJNwx<6 z3PYbt-6!)IG9SiiK=?r9c0DN zy(nH@bzIyoGAO9qYe^l=YkW6oZ1GR5^AMY!dWbkJyPSC`+OoDoErB=Rw7&#apb(?7 zd6X6knE--#v%C?m=8t0DcYJi&BKTbxp7YwMJ8y4_AvPPD8kX)MNynD!NXd~B=bmV2 z5uVy}^Rk+7^V%7gtK}t#SzEbq4?9lxrIcy*aJ2(1x~2B|ZWti9dhz#lZm0F5J2mA1 z$m^-7pX3S~X{H%`z-&I+%^4L-ma;fYcJ3vbyWA=26z2ATz4<(8$983K&yxTnPW!i^AdF6z=IF zU(`Fm8&V%66M-(e%PdEJNRkY9zT@QMcJVIj2yZ-hlMj?r^Yg9Bt~}L5f|{aNQX^1q zD^A;EJKj@P?H}7kI92?Ml<(0!Js4DwG0Qs7DhVu=d*`mtS6pAI&3f{N#}MXheKX)CUVy(wdVl7C{o7oSU#wU|^LzgfO0+Up<@|?nbfp6U* zBwKI>5M#ly2S|4}^$td=@%{N5cmjK_3Z_Q)s8(B8U`!y)1*pG+K`z#DilBjbcO#b{ ziT^WfJdw}VMX^-uUWLM3g`l&7wQk|P9b7l~{7qhgj6omP#2e2&7r}dL-KZGgf?<&i zW48txg*RyhYWTZ^D;7*JKb%|k7cCYvIIt#vZ`)L$tEhzn|K@$5B__U$d8m@~F#z(O7asZ~!=>b%3f=-JgI;Ahfi9)_BnT*QZf*)35 zR^=rR*^i2Cbm#Yy6c)~rfoLTcCK9`x0AhQ;$w^oRhF2p1{W~v`;L<{Y0t~T)9_Opa z$Y3sU{Tx+!ZB_RKi;OJI+=Z03ZY&gAP*M@z01|_Tqyr6SBj~|+CM)d)gQZ<~OEX6? z$xu*C9-H+!Eegd4ql$l#En2&CBzUVpX!c0-hkKy+AW*rlqmC*m&2U_f4Wg`xiXj$ z%yIaxF8pALHuMYag5xW_Wd1@)0d&s#xWy0r1+iYIqf#qKa(WFo(;5-R{HwO+yM5h1 zt?MGgX#m%7e!5N^jqnXZ7aw+9>70NT{8L-=ZC`g1Z&c_Qm+nq`1`vGNf=QL?YE5%;+mOCtmI>EoUHGL^doKjH0cv%*dTD#^rIyJ#=nrWpETpA%vH6 z*ATMeVe>M`7B)prr7(LN-Lf~fv+T387hj=dik1K!&L&1>qP+6$j8*~qY{%mTyv?>9 zu0^KH1#Dje4I^IFaQ6ZWCFBQL4TB?WdahPFbIRwK%@?& zTLEy;Bi1M11DA;NIz$^xN|Z4Q%|OgJn=fhNoNM{KPO8(Xb3Me(9g^$Uf-kXKVD

zr^LAkH*xUv7V@H2?ETJWkpSaEfxB`JV^J>?4EhkYS*J8JHAcyJ`Z&@TbzVaFHn_kmxD+yy#9Br{UUiPX#A{va7KRQgkJf z3p0clWcL$`@`9x%UGgeu=IM-^^O0bR1L)Sxr@T*|lH@4FBYII=G1@8e`MSNKzyx4M z-EG}D_GMVe?(`Vw56#iBJXLrZQi9E0Kfm8*5+NxH~-Yy7%a_v zZEduF(b~LA`R4Ch8^c!FPehyX7Vo~7g7_CjAg-_xv^eiwU^IV%#KkTU&!NA^!0$j6k1Au|1& z?A{<1TYu?aC*<5ZN-zT*-UEJb0Z{0c2WTGt{u~f?kaSl&D@0U*F+a=98@WQKhe47O z$nVMZE%MVLRSJ%4*yfF`dutBW->Lr2a;7KuO9mx_cxE%_*8!{? zrP~6MrM|d5Aw-mM4kw2*_WlB?9otF=%TEV^JI`{o9?kQ@-Jcd?KlUmdK8}a@<=VSZ zP4~&}!8AfEZ=C9J2=obFv1J*G6sV-XsQ&)m!u+?V>91gt%?C>LqUQ_&anC1CYc9`{ zeQr^NjIxp}yPs5lu;}@!`b#ywmWZ~Sb0bI|l?m)EAx|QuctS6H+jmJy(41=B6VjC8 zeSCz$(e*)k=7PFF#?vHSdeI4wpJKA5%r=E?5@3A0!QA5|zkpmKjz}Kxhj;!kpPfXvM1P2_b4~2<7 zC!lu-tpkS&oTlF1n9SZfpzQg`Py695V*v6mc26^Jovg2yp$*GbmR&}lrzM8=l(%x? z-;y5XU3(U<7|*6_O%nYE;Cj)WqN4G5AW9g}Lte1kip4ID4GKIu}CD zw8ow~QpIYBCoqW!XObMJvd$0n9G~!9&axSNkc`@qj%Fx;s^6yd_1I>b0J)lHiP^(HNX(9aiWT>0d{z1|r0n3*w-~ z=97p8_d2{aTE$PBdod-cD>q!`5Vr(FY&Ub5mv#keY5mKv+J`FjEpY(*PxjpTUbSQMC+GPpQjW*dVQ!?wGywux%Aq4@AHi zK^$lwzB+LcG(h&5OegKcAOI#%3b7_f!9)9vc2&#WkoBzIwkVp0#NAbg=fxU$s`KC@N@Ft%4HG{XzLO;CC zajL`c?*KJlNRN(j^ty0aI-b?piwM%lGCMD&)Pn-vl^zo!U8=xDonz%+HdAqPteus`z&A~YVtW!JFW`+~ls6X@+m{vZTE z`D*6pYicQKMz6~;n9iv17?gZMT^y;OEzn}0=+;HM(j4-^h_nKgWtAVjEif|{2$J}} z)V*1gn`qj#d#+zm=ft-qKuB;12*fDn@k|0S3B)XhU%ziJoD9LH!CrSxr_?c|{!a>pJ*aElnF6O7VIBRM<4W+_Wq%`sZtHU&45FI{V>! z)&Qaq&0Ur>YheXc@K*tEG+a`6U@UBrUZ%zIHN?jexy&0_oqD?|zMJKRyiB0Lx#(Qk ztZsF4+C9Ycg2QaIPY+@3XQAO`S3b6Tj4~d1GOB`!`-M}a-7-Y z&%)LWV$l)+%|>@`KBG6o?ZHHzz)!J+8o+`4U9@~<2y7`ceg9}>O~Tr_-J5CKU$fID za9_4SO~=B&Ey_K=#4+is*hD#7$gJ7%$(CC3-I?3(!|T4|G37$VC~E6;WuC{UBQVj^ z<6f!67$x=GNE~F=hVX+*qb-6Hu_g32@Qb&v>5)u zUsU`5n5_C2>E3T|?DTzOW8>F|QujmcqMjpcq2FS?*vZZi4gZTL@QqkgPyJ6d?1p~0 zwrX;pI2cg6o#^arKTrp3VJF+>LY4V;Urv)@I4~f5@RFA^KYR@hVZ%FERlX}_(BOlC z=3{3G555`9u-|;|GT#vZ%=Onl{onrZ&42c%|7REPw*cj4PK8FzDq_1Zmtj&vN&t~? zu}rFXgtYqy+nl?*kn8ykbkaxSIchl}1N6j=JyW<{@&oRe5r7noG+~(N;mI{_WkmuM zKgZqT{$wpC9SZOkFd!$ZAmd%q7b~$dj%|N|bYM*gpG9{PZ!5ie0v`>!+ih-x!8pJ; zN~#&q=TB2)p5sfUoAcRw;;-Wi?DvLvkFFshy+`(my|Sd9&HTWee8A&56L*4fROH{s zK-m-!G_GH&t22x!2u~s21MeP&!$REQ62spOCk4mH3&4vL65>Z#BRI~TE>~o@=C{g% z(C?R;Pb(x}v-JqP#2}f^OFNr$OB=4NPzpa?)16eJ72tVUF@dbH>4w@(`D*1sb?$}k zFa;lzDZyH^^eE)8Re)xVSJTGp{R&XLVdz9?iXNK7$x*7?>#!-aLw5p5({y04dp=^CDt^uVbZkzOcV4QkyZid`Q$l{wK@}V@0<)cgIW|~mExo&^D2l#2=$>OYWr-Ec?&-c= z?uhw%!g+(X9YYxXP)A151j>%MM#o)8LZp#;ADmW{h%<6F_jPhu(x)G&X*b!@jlTjf zad$(%Zr(Idr!@GV!x&)_8&h+F0~fKr#hCS^Oe}@aQ6Z3;K|OtH@I~6d)sr)Uw4Vdw zV+xaj5BxdH_GhpI@C-=v`3$W=MQBc1PQE_PZEvZBF@_Z}fYZE;7U}`ZqZI`Izi2gJ zYx3gkjXwvf0t9#$1Khw(iN!s4Y`ma=NLFc6AV6<^=$8;Ei$|9awqrm5twqRW z!zKOevC$3>jWm0l<$>D#x7E$jKa%d-d6n0*18bd1N^4 zhQz^fBhE#0sE;Oa)-R;}dR+VVfGiqBzO^B3m0;VdhyC{H+>CwI0o3uLObbF!JW_cD zw)S|sC=EKyi@HVQ4VkkP_=5{9FL3w-fR)&Gah_U|{6wxng+4$p8a(T*-R@#IYLNTO zsQH0ns7DU3CDI+g>N)x49O+B7A*yy7i?d}sfS+D;b_7zf3+j;_gSi6`EJ$F_#lU>t zP4&ZsEclMPT}`v{P+pC_y-ASj35V!qr68U2rfX0&Xz;C>LgqaQvvSs@fl1=EJtUj~ zL313*DMrBP-sN27=5(8BieoprrC*hy`*&?9U0v7u&p3vk`|tl`DhH~@_f=MX-RSS+ z`UH~RL9b8~`xmp%A37}bAad>R3T0q6e095TS^D`~x2wNPfOqf#DDcmQhi3PR0)6FU z;y=BnAV+7Io5vq+*#4`Teb2_eoU-T!PJ;#d>dzbehX5aN-F-baftX%V>Ccdaw=DHN z0QhqaTH7!y90I?AomcT^Jpq4)@%4%vSTcx4eA9hdU7$X&i)y$F>%+<_=i65m+tBlNy-Y0UWAP zwK{~dZ6}eZ&o`knHYpH|k?XcM=SqjjUjdh8L34}!ICu@>WKUJPjir#?Z~LlnB6`ZI zYi4@a14#agi4X|uvTk?xbW#A31Sc(xqWkng5l7DR07AZxe6ozJbtOe1A^F6R`*)6>JTb*@}R}Ot}fs z7NaUsYrKJot4(*`5y1aM0Df!S|2k;{LHyUG?PJg;8o??$yQ4Cx5EMAFd=<(aw7h`;tSE+U)xUNF zAgs~J=`TonvJQ9?Txs_9@|O*%ddtxraa?a5U%217gS&NF%q3sBtx*TX=fTYgkiI}B z9cuT2>BpEDk~^rbO&WtPm>F4g@k6%+_6k5ecMluD#aK=BR>t9!N|992&AO-|Umrx{ z;5&rci^!sy25>87U&`xi8T&AmdB}%7rtYDWWL&boVVhY3We65#lLATV@!h|l>C^4e zEM4oH$*l%^b=aTxE#cW9IU+6N^*R&(Hb4C34Ew8^^S52e#~B85o^R`!E z$|uA--*q5zccToa$1kP9I|2EB_Y7OUX8V70hP{XTKb>p;%V*eI$@(9R13$YG8S|bC z7Fmy3PW{rX?u)!&L+Y3sX?r_>rqf~(??Ud}36SZ4f+HUmVo-A{=UZmzCyyHBgIer2 z58)PiJ5cCp=@}+HDqNiu2-Q1q=0Y#Q_LrSWWWky3+#25lMdx`9Rp)tY4FUrh7H?3c zpQ15XP~oiJT#%=nv_w=os8|)qDDusaOMZA!GVA=%j9#I7V1;84INRF)FX*MNEG<0I;5K?SHQ5Cd7ODjbziq^ z?)oSx1 zYao@KkIis~bad>AL6%{oG?D#mJ)!3#kn|>!bJUK>_6lL@t8vyXU=j}P$v%WdigD zphhUIOCL42?d;O%lpq8`naJyDId_-c9V9V@>@(fXgcrO^>Sh5xTDV1{1L8YNy(5yN zwyT4oylkSaqNZk?9wWTNFXI!M7KHBb#icW6dou>sntYdQgPm($jfai2Dis%qcLrdb;)=Q_QluWyT`0{T~ zh;PjU*okPkDEBqO=BSESRG1w!q^39Yk@bP#KzeO~DI%}{57oRCsCDaI=DX|xZjGGw z#?I)o%k>s0phLXU&jZb~SOJQRmv9{rZ0ko$G&;csNuRq~QhPs^)i`jmFr-x)uOO!7 zQgnWPVgsPisF1rGkyX{ee40d+`5tG`qAKL!VLb>C%OU9tiUWwB=Ao^oB@-lAd;wVv z!4Ys}m%|l-tq08}v=3QXvGkN2VOw|>0d%6NJdU%fKJPGs>>3N*rE}a-f*5(583O!J zrLQ3RX!6^KazXXneD*M?V$LMQovoaV!Q8L94OO|=ooJYlu#K`Re?2TWvv$vAyeAs5 z#XJv+m4fQ&78$vsegc<^LuV{c&stM$g>nS)KCdv^a^sSiC-+n-wAHrm>r8N3Yxg`q zytz9{T4dm~$KAZm)wn4R2_)+Z0*D+QNt{Vf1c|tpPsoL-wN4tFO1Kb-V((U^+B4I# zz-_pnF+{9G_DRVd@xr15#niya%?>z(wotuQy&&(?BFoe`yMT9KfPPUwv8RIh^d4w& zi5lmNFhkP_{*-e9p$q3j3Bfi;pl%-I(idlZBVXfsI*+4qk?TS0E~JPmnlyz~*4M6* zOAl=;#{q{x%lME~;8lX0!X)+rRlxG`qRQ@T3kh0ge>?!UNOCG0Xmd1AH9=D1<7|%8 zF6I-_JPAmm9q6=vGNeDFePZwRUJB0BzmEfdZXWRedK}0M?;FScJ`Vi2cv0W-FIBMB zrV+?c`8`f`0Al{S>i_f7efJGtYqI}oZ7aMbE0|J68&sT}=#O*K))wC&|4N*V8) zx7+rf8o&^Z_L@fddo$mVIP*{sCq-f@SZ?K+3`ubaK!t+z#=-lVfE1KTc-5o-MOXS4 zoyE^l&cC*Q7rmcXUKF2LeSN;;vh<(4CgGkmYh>ACX3$;*fihLlqjeoj3Z$*{xnG&a~E`PY&^*4Tkl?ytk3Ulr*; z{r}&6cDUfZ``LXz>>2tmrnpae`tBDEm&=RaZNCg10UL7{m%+0s-$XGBqd+MRslPV= zjw$|{8WF(bU9MP308^B`dUJCF_4titVDkNTnGN8>nqOeh?%u+tC4i8St1k^;^Vxz9TI{lt3|wXq>dqp?{ zkiEZ=v)j#YiN}`;Lvc;lc$ALe^ziKYAqM}j4gWa1>HTT|-2M5DHvk-cf9K}?G9BDq z-rhCPt-se+z)5?jhdQvng8hu`zH`QQ@EGKa{rQ+G3ZV1qCl;blzNTvst-=K=^NFQk zW>q&aH@|~=0$#3i!$8sxKP%M{C*unjx0Vk4NV=;J1O`rOptc`2p!4rVAuPcxSYELY zM`C;RdJua_*<1GyXt+$|1{5H!@bcc7+}~gFtk`t-`J?DTiZEmVbcLT01~2biR#$I; zZ}36VxPZc?3;pKf<$wPd|>T&RP~yR7A!jI}Tye<>UI;a%V#+h*S{r~mmI zV~_XC1a39_4ZnwlqR4>P@|TXD`yBQgBz&sj3t+Pib2|>Y4p=W7+T)edLWL3W?2Sbr z?lc5ZKeq$~KiCJObVC-MOH!(>%i~ouf?ezT%GeM4h1?v(g2)#L&24q`f|zuXrR6=i zpu+mv-sFM@k)YS$OzQU`H|ikI$!PtgYSFer`8{@N|O zA@T*mtW8^&}nf8OUX1fiJ zBoy}8Tl?J(-0F(B*G?qh%Vm@-9Y>vxC$fgK$u=DKb}Gtnn_D6*V6HsdVPHD$F?`S? z<-9x2vqo(^OYMo#dr(xW9Ph1Ra8_O3MjMS;`l5vAJH1b6>2luRj}3C4b^d4V_D}SQ zO=xe0yuO|F%MMiP6N;R=!AWPqB|#?p<`tSd5d90=-^G!?hq4>F4#gh?U|>muK`dKu z_X)QYEl7L#S@Cn{@YG#Thp^C4$X+%>1Uxe}%??)$?% zD+|or-0>qVx)(J=@P$P!*9mo3Y@JIEnwV2TIN&b`7Uvj|1tg4(%>%gutk4WAEk8w451qcFvPoIv;N9NQPq%h}qRX1P5AmbG zYHCHjzW@8$;d}zY@P`wdc5LAfllUw0@6WsCcNYr}O)Ur#zjH;!#Hjr3ixCdb`qz2< zTeUw0zg#d7s`3UjPv0;QwJJNYYdC};a;9#BUe4ILmdllA%egRb=#SyLj>S2xKZA<)c#6$SY@MmCJo=EQ`8`L-l|b5wu)Ch##`fNt@IReY=9-g3bAssdGQb-uXo zFz9!<6a+!r931TrRCDVIf>(atReU|=&y)1Od&Y3({ryw^?K2i(dH&0R`9>OiTaS|T zkNJ_<6~HDC`w|QH+i``Z%TVOa)#8aJ%;I%kiddxk_d1-FeJT%No+0d354 zEpAEpuHP*ays^)|U7YJS0)xQ)kY--~6se(?N|}8rUG6i5{d~f8Gg39A%a9Ka_VHj% z)&N>_H@Y59Nf^cq!zi5SQI)`p&$ z*i!p|ik@A!X_6td+oUUlDcAgG21;CgRTgvP1e{m7qK&ix1{+*|1RjKnL)9x8oJ>T^ zUe+MQ5KF?O%7KY#+lI8E*oE+_pzT4k^~?zD2}(!R5fXj-;+c`W4bT161m$FSR*(Dj z5r|0qj7{5(T_AJBLdl&r?G|nxmqb z#QA{Dr(q(i#VV)g#l&~Pq-)1#y7ltIUKq++U(;UQn1`g)yPQg*`|WaNvT|*h*i2NJ z2ywX)GhwJ)&?7#<%5-_fTThtEwi*?P;W$4Od*1WUi09`!20UP`yc_ak9D`f1YLtuVag|a37V`R0t69QgnAT2W-3>gqy&axHhqU zThp{HDlju5rBRut8ZvY#SH2goJH)crv;dNna=N9xk%Tkw&_aJl-rUkBGz@qxCG8NT zYaN(*LuGZgrGSc^^6001kfun6L|xV~zt;Y$p9-p+txCLRr3no4 ze@BS?c|$?}{5RSr=!c=iIGL84q??AEYfq_})6$1)fK7qp_1qmTobz)p;0VIkTk3i5 zm9~(Cc!1HHhEd5$UCN~sm>{f9W=!#nb3?TkwGoI8^P9LC=DKX?c751Xa%mUk$lq&y zyfb;00a?b~!QY*5aC_SaR3fWYRxIK`HJ3YxOFG`qAkli_#O4qx4RZlYv!|1{qzC-% z<*Dpqd4K{)$eT6dg6V~Ji-K3>KG?xcSuMeOS0VL{kIqfxP2~bU{z6xTc!TKE@>=g_ zLK(G+jgc`Uy}eJHWD4Qwp14R$5PFVw8*G$? zya!TdqeO3AYxw4#TUTHZw^`K(YbBn+db#B?EtWF2TgsOLq!8A-8>HBA4&PSdFcX>ey)K6R%_<9CxEj2($8d#b?W_Up#Mev(%#h0Hj76_?a zKE(#+$8UxUoKe6<@aZZDpzC|P3ZP^tIAF0vm$#k~M2!Fyh8PNH3$YKE^AD_6@7*<^3Z9Ncy{@yMUwnF-s>p|EfFA=#S6vLO}Od0!Te| zmVFum)7Hre^(TPKG{HLmBL~F%_yK7v`}c0* zH(ASqj`%m-+>g!NYk$DYyTVGD)T#3mNT#XWqE)*AQfsjlPl6+i8p_huScn$JUL4DE z46(^$b5NKiB((Fg?@tAA8gjQ5@4>5n8YhK=AA3P#&F|b=;x%ZNJs(B3yT%0q$G0 zsqU0?L?!`F=`m7DSHBKesy(>%7@ZIus4Wh;+~NSMn(~qwcJB(T#D?cNzKq^H9x>MC zf_(-`508R?+F++hI7CpiUVb}<&k#dsh@td$x*K_?VP?E24TL7q=5wm@A$^EF2wKP> zX;8Wx5m~Ie-MO7MTcOQyMIui1P@cZJxlhXOPu<+H8YEq)x2L-{v$wmv$bI<4)z#6W zN%)-972t9Lh+0j9od2J{_#YA=|03$xd|(d0*>?Zh`8fe9opla5=t8zL9RNj`>?5oh zqEkcS0wpQPTxaG6DW8(e6PxM;(6rZh3>!j(ThchLxHC%QF2kLzD800(M>03!FQF`k zOv?!>e01cy5BQF;I4X`DOD7@m!N!g*$>woK%>0-{NAH@idw_EtmqbgIRHAlX1xh58 zZXZB&zQ&<}J|zY;XwkWIE0^tn;X|q6Qa_*I_rrwKf!(xxYrp!N5lUxlr7G;KZUMFo zGNQwcE3#;wk^zZ_7Z|)QU?c~JS26SoN=F3s!a_jCP=V}L>HW#eh`xa~DhsElg+9=$ zz&xVj8AlUgJak*?Ed1!)CF}Gm;>%iY1>vzL_u^wMjb3kT#nbtQP?*QR?u`ESPWY>2 zgAtgVw=E{Se z9gO&(X@B!%!4eAW*j2>TwS2?5{`P+SuD$!s^|<*@?#KW1dIXRcVPgYBwZ=2BY97^S6?&7eW2B9|OU04+QDepv30MrQB z#P4y8T^2CS0I+>&&Xsi)CnYrquRiUsxHXl$D85SS^4OR!6Bvur0dx?vOjIm6JX+x9 z%(RlujY1qGIyo8nX~_o*3WK3^A9IiDBNhNXNIcrX^#&ns0|R5P8Qs*uti`PWXq&dw z0KV1h6mrcAN}5-(zdst%jmJ=daf0a%r*1!<9yif{ndWvRwP1ad-M7T*xP_#Zu>G#3y#lcPUNqR$?*6Q#dgBAxnI|VqP_w_ zK_l+bcj#u@;OyZJ-u=f6d3ZudoMti26Z|Ynn00FA-qfI$b;cP6wSp(}_yp+j#Cn0& zJMtj=IMU8#k|#oz6L2Zd$~gl|zvF@jG932A3z8I_7`X#B>!wnVPKtjQG%MR(Llj*9ai0D zZaRvSRpc$;1p+vpS(zI5PbPqDqxBiNGiaD= zD=pJ`i`MmL3(F2b8VAWr1j*AyaCbZ3t1TI0WQc4lDW5~9`RW6+!7K9M8PiGEgER9*2=MniWy~0xW;ZQLH1C>-I7m*AT17`!zPpFpkaYSRwE@$>B zcer(*o(GP;1G`lcpK=6%n04UuLOs1=^xQa);~x5X%`WwX%;)z8l%;helSkScNB}V1S;)%EbYBiY@Qsp8x*hxwU37&N?BhZMs%Gw&o4 zzFO?X#f0VIW;>d|?TqJq->BMXw^z28g%{%yF6GlLKhEijMQG%CPvZ1|bVRKW2a~qi zr(8vwX17TEUK{JlygN0k2$@)N=F>k3D5Zkf^)QUDo>^aMO!qTL6{{5=jAAgPm(s6K zK4U5|b2(x=g*#-EEUcQUeTzvTr4!Zl;X~RV%(7i1J+8V~_VCkDkohvhamM@Ib0~Kx zm4u>IgnT$yhl($lFQ?ijSYa&k6a3QTo&YCU&!~vXjFN1LP-2l&Nr3U8pp*BT8#e6U z5@de<+RZOttbcs538`cWAoy(%jlE%rIb}`T$yY`kdhK8A9alEhMKK8HMaa!6-e;rKXQs5BSjSl;9vmGBHe6CK( zY-6;b_TG)lm{B-(Ozxg!eOrY$Twd-s)Us6p5a8O#2Bvc2h!cVLzSe~7iU~AN>L}32 zvWVr0#nVfmpOEX4oU6mMjA|^8r5bGON8l+Q_B>$1c|~bxmE{3-AK+u*oQPCPV%OJV z-uS33?EHQMWdcPkqIXc4`Z5$}(t)@9Ng?)N+kCb26J6h6$3N(C$m%X1mOo7Ew^1hFcbdPuBY6C6CnCS+nThvh z0p#bER-4D)Hnzzx!@UnLQ$YhB_TvPG>7Hwr_cOo#kPZTa&KS-d=(~U_`$eyZCK$Zb z)Q1}7J$8&B4CGtt?HiZ~Fo1wYR}stpHa?SVzx7^?wjQh!GiN>)u5*T8 zamXZEbgLV|da=YGEzlvCvz|O8GQ1`dj zXcR+QiC?wLhhxYL+D$vF2``4C>lGpsXj?ZscFtwj|58FoOjatgf`X zRg7@bq#4nJux|{C&YlxX@e>P}8Krxk;ltmF>UM8Rw%=}*jt@?FxJj78?b|2Fe$rEv zE3yW$zemuLDlI@2^92Jy9tGjD-l1aZ1F$A9)yN;rBi&OtCtVg=u6gDb8el9vNt@K+ z=x2G@CZr=)vKT0w1Ql%g(%4wB>(fpTcwsMQMO zSe|R{xrpCsFSrU~=LE>z_b?(6`#7LeyriaKzpM<}c$8;bFV1clxnL zN>eq@+i=G9?hN{nnH6nOGCcq$L#hvVn70uUv9~r?5jgI@r3C-=inL>fehBr;JtVGV zbB*jCi=37Wtn%#7;IxhK>$S&x?n^;r22!*u&0lt~E4$~E-%w7eT93vbHIXh)*ANyv zpAPRYX3OSn(fYeP^2?zuGO(p%pWwINMM6eQL2`DZ<}yn%T0hWSQ(N-Z#aQ>83JRlDB|oQ zA8-x{on(_2*-4+yeB<0-Hh@ged|au=)<|olCG2Vlcw>&yS z8l-+`op7w7=_grQ>q(Kp{Efol7synCO4TYch2`;MGkIpc-2I0#)EP8wlDN@tRFBCL zrwqI{;8L*LKkPCgxOQ9k`8|d&n@;C#-t8{e5jn~XN^mzW82j{PHiq zt3B9{EY-~VK2(qIw`3vt+B>8Zn+D=rNVgU{xG%-&pX!cxl>iju|DC$yU3PpcWK{Kk zPt{&`p)B)G0hHe{+>3zNe;)QA zOG1k-s5@js^1Xgtc`Mj)kp78-(CKr|*ve z%I5E1-q)*xm-&DH^1fc(TeSaw{qo+L%(rM0j;Tlcmo&!oXVGS{hNYoF_(XK_2dz9~ z)vHx^$psv)RB}5|Fv^}VyvR0?m=KO>>0dR}*V~i9!W4v9GDc#yMU?plZFWchNf&)T zCfZ%sXXki+R3N{6j>n#Y?KLEn9Rdz#lH;_Ae4(GfZxb9upO^608B6TUby#``r6mH> z^9>|NtDG#cam+dJP%1cp1c%{1J(BtX;WC%HWA#VBLKgtnC2@z%qL{S9OQzr0`nRs zEjXa{G98qKJ7tbik9q&XPeh#)IC8zr`h|S#Y}i1VlRD*O%by`wwRx&db}=IQ243F{ z%Lwh*71-f+NeKrdjuPpFed&9b*9B}w`@9Y;dUxN3*#+x_n7XhQpOU!WHj8m?$V?HS zlftY$rsdU!5^~_xjU0sVad-Jp04P3Q)6DMfi@0U{N0s6g95DF$SU@;uxVk4tS&^RU zb6^pCiFu_?(@map>`-qY*-g7g`_+10TW`;K=c5O3ADX_SL_WacDyvkjNkNngoT z+kIg~;8bvLT@>vgqtAs$C{{@k@LX@C5duwxTogLK`C{xpAgX=f5s_N%23C@VeLSnG) zUi9mpGOo0AjaO_JHk(!gkK+(=WW0WVRM-ZUiVgu8)%h4^5$}WZ>gM)N zn)ackG+BQkrW{bk+b`F;2FxrDc9w4mtHK5U<@!j}zzhnC-L+T$NTH5iGf zmxHD}j`H53U>~eY+otDE>qg_Pb$g5J<J&K?*J zEQ=*CjVW)c_-V2S0*htYxLqn1?T(41m1NdVTgZb<381UnTQIcV%}qBs$1u95H$}Jv znR0qCuR@CUyVse*A)MHlwh@2sAr}!hbBl@bM^zbtx!%iw*|{Pa2&%r)6uWJ>3%bc* zka|z+ku@jmNeEO5A3=-aG>7#eZ3r}iWObrxU=KK$oFn)|H)f@9=5`^RXPMmx)@J+R z$@#as_d)kONhrGmD62c~P{YQ&(@Hr*WpBIrnA28qvwHW)^T7dNjO~*}eq*TpPivF^ zrayt&@DYsIXP!&9?zWf`4sMegHjx$2`Gk^nbNQfo5X)vqkwBG=7do zO*i;Y$D=>BDc{DU(2{_z^Dk}6`>}%A{(mtZ-NAnD({DFT-H+o@-i6fFH-Y`PBhr6q zRiH!zGux#)Q2~o(!W=PP0W1PpJ9F@3};2t@5x-55kpA% zJS_t)$=9D-l~3S0K$3hgCj;oQU9ag7@@EY5W)h|kAJan)0^30l0FK|F;(G@xpSM5Xy3B{Ywg_f! zrOnUfMs2f?xc^8t=PykNYlJ_44Up;ZYoD>_pTGERvhY^heGy~n=|hFR{_#0z8PTXZz~Ko)KfQtlTw4r=Q-vbKhz@35ej<8;H35X?K%p=eY?a&7c;0=-7$BpCS;3EmJP)Kpo5kfq zbq}zbY_98d(ZG)+ovt{k!SEci0w2fQy?+&Xc8k}#1Ka4sU-r@tt3AreU;N@$`!QEt z(|8zesU3>h&b?|!Xd5pb1ab;6%a5j)z~RL8){91lZnY2sgD4!0E3@1i^6g@AjChfvbei)K|G~KTUSpf zeirSSG1xn{KY3E}jF@o$^qd*f+*gZSAzKE7kDFbx1zoB@WD&VqI-H4~;V42A*pT|n za!c4u zOc;q5;t}3WD9-^A9^KV633!mz$=vdt*|3lC4uV4Jj&K|IE-=I(F;tz+5K$Wg?**trit0hoL zm#dLoj!}1&^aB^~(aH;2cdT_WCh58}p|A2HBupllwgCQws7E7gM_K zHl=%{@B2e|XF^DX3H|;cuNov6;2g6+Tu=vmN2E8>tiC6lvBrej9Z-UpdRv)Ka#(3# z$?V1ZsSuJb*nr#&bKxom_ToikiRpUjN@u&Ad`N;OUle!Z%!(Y8;^hQ1aF5wBcjMy9 z%}$IuW;S0iqVkS&9Wne;ZTLI2-wRK~k9(wj%3Dz8O_Az-9 z@72sxUmQC5x|w z1KvAeb$GN@c{&n;U~5x=d+W)c`D5l$JHD`*;C7-IuaWndfp^s9U&fcB?+SjdRYcf#47)JDHs`zXLNxW_+ zH4Oc)0)9=jZ0-+Fv>;Dx`Q!7p{~S!7S@3uL(>?z+as1tV&tBikhdYc-6V<5je6CMOoURGn63A%3=Qdd8^K9Xv5=g zQ@2@B=&drpW`#WbI}9B!C49Q-jS7|NTXX8iepl&g*n-5sW+wuMJpaTzHuIhRB^W5}t5r5EX$lMhBmU}5J%!T)q zIEkO*RAs}>r4GN~m=<#eF~=C5KWC&c3Wa|M0SD$jR4bjN&#D8^xzyL!fB%Le_gU_2 zfROU7q>oQf)-$RQOdK5u-&Q_gQw?}|&v7&>o`RI-Yz>-YHPE9hCovs*>isjnJ8i+Y zF$Bc0_RUGQEd}vM)70lra)6bMBo``nI{)k$&yLKWScoh;lG4$d&Tevst6Y1kk;|n1A4zer5ywRl6L2G-`se z=lIlcEHQFAO+P&wCe;R@JKT?U7c4vH{PEHy;Jz>neP%DS1OE$e9H=dS+=9VIT7?K% zdIEmiB=vCvm9$G7mFEH;j6&7pdobMs%9otR)a*c#qZxqd@UE631{CV3Bzw%BLnOq~ zhR233I2v1xR85O*^#Fo)UEFz@if>Xm7iPT$XLedc3cNtyS?vjY3<%pf-l=0RGP*}o zinCVK=SS@Cm8)ml`uwn(Klw0!_o?K;KnUy}`TM8x_P95*Gk}B$?^TMGMswZm|HAWm z(@`1W$4}-LsO`^BASA$>81)LV`HhoV-ol+v0#4Wj7=+w|KF3)9bR@zDP%+Ur)<}Y7 z8I1V>X!CuycPT`e*nbk9KP&J6(v^OAtoZrae8WwDJehYi%$qm;KYlh}PX>zW{KI3) zTCi^VS=9M!ggnL>vI4``EGGIRt{{%y-Q8wKlXZfzh`(DvrwMNL*Huj*&=EV%t|IUH>=ePR(}u&1d1ynNAyU@x^omXQtL4b@PEVFw+0q44jwyMSO#4`? zhn(%*GOd=q09Cm1^dXFBd;)MqFCSD5qjG<$EqzjEdZLHum0X2>b^DIVjAU=8wu)K1 z<-9dYJ2Kcl7{o8AJ38aY^C}?Y zn)C)ilIp#?0w0F>SQQ&}PNE)?CwrAX-FsJYXk<oE04T(kqp|b2xDx=7Mj9HVbGzNeEmpIfJYw0s2F)3x`LqR)$z|L~ z%E^n8Za3XJ^=Q7(EhwKbnhkV-adyu(xXdYEez{IQBjo?_-2FS#$WIm(LMA)u$zA1L z`phiK3iI_viVr)oVXpp5Kfn1NA%Ds}b_7(16x@9Ts2DV8f|pmiyl|^X>%{P_GLc&j z)%-;m1KcU(2oz$Oa3kyK7IL!fqMH~vOv$C9Vz8iIHLX#NM?*tK{C*dc&LKCfJb78v zJpnWhdjS)}m0nna+&UZ+zWnJB`g)K=K4hHW{R>|4DW)Jx&aOQW0BLZSIOi!^m?=US8iOZFSE$X0cFL{qkD>#|4@X%gHzP4~);!i=X z6}xzCT3xzd>B!@{%>Z#Nh~;?c|I6HacRPw@d7}UGDQ?fIHyOF8Od*3z&GgI&?=>181^QSYJQtO9U1jgtrRXOz7)NHk0ACHFM5;4t1{dJX_DQ)f?lKvQ zm45G|SnZM?FzvDH+r9(qe%(wExkORg&C*%Jw88x$y3h8xjp09GZt8! zRA&guF!L&nez&;)X+3^dx&Qmtg!JTwRZ+VyVj zeS9{3@!9|V_4tJZ`Ulrz>ae^maul6faBSNWcgOXBC&(J7V7Fxh%WaIw=u;#Gmq7AX zb;ZTI$7jMT%~&sho6w=FvN_Da%{wyt0PXhn=x|##;T%v~E-sP8^f!F3&y1xQu~+@P zrm_;*2xb;8-5AevJcd0;a-Ps8#6TS2u$`^I9%c!(>J}H<6~+{0C#1U>Veg3kbldmf z1x?P5^|m8?Q9sx`l5cI#-2nu@Q7I4ILf(irhlbV?vznDS29fr4I-O!Tp=LiUhf8@A=9C;$4}z=g{{+TkO;ydpo-9 zv=|su(vd>tMbF#=L%KAFsnvH<@O06$f z1n==zfG?$as&zK#7VcCs;)EL;3Zar7QE!AKVKXoqfCLy(upIXV>F?HWRPO z;bP#0xBz?0sx~cQ@WTawcfP+KOAc5hIFJ$E^yG@|Rz6t`vvkgxfVD!;G-z9ceLQxI zW&}!O3*~y)03}_b4wqrST;PO`2?lbDU7$&VL3FawqqC76h_wGIPJ2- z&N*-WHKi@6>kJR8f+dzLW6v*9VoW;<_MSe)*t7r!LkzwP2cr^Z!u8Hd{#IKC-AI); zQ`WV*47#aVxjU4fDgpdNAuqD8OL9|gH$%X5$}+)?xoY3;Emyjl zkGD7B#Ou)6_u%3_phB^62m0n!P+}oAloEvTsCKRu3kx=yNogu$g0|D8{gQIQN$gCi zHv{C;r8_$(O#Qw&$I8kPg`CjVD*-5`JmxF6706>Uvs2IC#cUA~P%I*w4aEKIbgKqT zEwnS>Kk-Jco?*EE;cs&-^HQB`iQIAC~ydlRotJQZ{<6tYR@Cd@?byz{(G zL9fm|Zj$(#?ehDjN0huxv1`uWodabmBKQ=?7jQ9c`^5m}MsdFx6!Wyhx`7R@*cN@L ze+2x|*o5T)r2E&zo&gLNFdA)(SCNgW*zuiOF^mYzvfj9gf}$1MVkp>$Zb-T)U5Ps3 z0MzI9MGr_6w!T(uZH(*lMy`+k4C7%Lx~^%8YUSs)O=f$%O7MF7IO9)N-h@YAn%qreIHEIaj|+>Ih8 zbmD)+TKw1=Bmeomv3w7%dzFa%8hLpJJis~4CQ{Ws4^BDzy$UXY2TmSyu{;~$xbS*6ww`*i)3WSdrlsc~L}v&pLSIBL7%L!63G} zyDrH^AD=lWlFaCuZs5ZCWq12h5&f=IkRHh&DW8bx(+hdrXRg^UrM2LV2OM0WvOOb& zsXOt-Nx+aOlckHB?QeDr;$`g0qHcr|``JQfcaMt{V8IaZW@cW1V$Ev0z>pcYyOrZM zTWk&^*aF!MEFNWlIJjUeP}|r_zK*W8IeSpd?&IK(4UBiH=|3D8|I@%we>5EMNVx48q};q1-6S!XSp zHz^hPvrtG4!bR58)W@eWQMvP`_T81Xi)tJfHMclc?TN>WF~5}6)i}-Za}0`-}pEUkz#nPqZ0S~c)YU0vs+hIpc#{5jAZD$zZIkzX} zy)v|3eLe4cz}uC)TUlj+iqpzb(hIXTs&0o%=LNIEjUx{mcw{$;6B09?&g8oft6Kuf+$b zJ#g|XF5?Zf{5{O_LzmgbJ2Bom$+Z#mtB$Slegoi1|lo`T&@UZ>+d5xKL;0*>!S zxkSqj=2(eareH=s5YZ(ro^t~!i)5GPeN^5T$pt+2+O?-$sgniT`aqoAF+*srH(Y3x zJXoSdD|Zh%oO6Zhqyn5~60q$Yr`+OdfS!T<%T~@6h!(+Kh68joKL8$K(i+F4T{n|P z!4$Jd*{jk3YGInQnD%HFE?6*kw94qlUTft5ku)6=9K35CiPyJHT&#`)3ou+mD_}>& zNoVI48tX%C+)w%vz31WK4ti}qIkVFH7N>6PeCPuy6z07M^a~c4l+MN9mWX87tIRsP zTTeLa8(&wp@fNJ5r0BpZ=#{^AIl9yZlW)PoD?Z=Xdw}CgJ9K7Y+YPvF#PcnkE0!8< zWPgTe=ybE2ofLvb$YBW76Dyr5tP_{y4cy6xDQ%bSFsDk@@lN##?-qwNxUOoD!%Xx( zt#$D}*t0VQxNRatL>nO9`|)%UN&Yd`r)Q*jirsN1ep2!Ns>sF|UA5M{e(D*h5 zOgo4lh{bK>Z=L{}J6e_nK!r=%O+mJ3aIaQ(5L!PB!a-Bq!f5tjtbKIYD%9LVbGw>n z7RwyQ7RoKPN2z`f!n0FxJgikL@dBJqcH9t#RkkR$RS^`ho!lVXQCtG^(#*#E|p-9=hzodeAUn9T8`m;W_#$Pjj3Cg%uA5@#y$XC^?(%eD#~ za7d4p8dpx-B(%gaKwU!E2}_8ZOmA6$0xK0`IF!ekK)dNaL;2he843Qr$x(&YTfPVk z^R^-wMySDHqr9&hy;z}}o4t~(W9N1tmhYXYXCEPFb_67Wz0E)68IP z6eN7DO-AV=sA)CHNV4NOVPU63j#6$I;QR?mUZy}aFy@+pJNagFDBGE`yFz=ok-q@^ z0PFWO2K$3O_=v8mhXn_LiYVB0-+|?g{lM1bu?W*c7ZyPnJXvm*1TX3g55m+pmg6@t z!jF;0Ull%$9S>^aRytCL(3rHdlPDmO^{s{Z{pRk63$yS*le}sxaLn_<%!C}Mslv?U zkc15&!RoEH4>lLVgX8oX!-6x#L_bXHpBL(v!e{gl{~JDj_I0B5W0dex`1~SF_*+`@ z)|kJg@L7?nU(#Tzl7|G)l5mPCs;Py2LSU>*w3kb%5GAL>I zpht_%*n%dMvDx&lEG@cwV~c?U6k$#DM|nJ+yWfBo-|3 znw#z}1Pk<0^|!IQpn=4=Aa6m=4-s{GRS9kY%=jp7Px+Z6b1MJEQ7S=&KI26&za#iQUGJD$olHf z?gBTgMlgoc5PX+U5~wY}GnLMA>2KY71u;2F6kaeWfP-L~p3 zT7%DKS=G$bQ-3Cx7xU7CB`}tY^UNr&+ZoeQcRY*v>T1dMzU#?QU(Pw9_6d>!=7F#Q zgD`Kh`N~Llof|*3NX_;1<#NJ63N#ofzuL@>aM{36rn9Tb8 zMMo=H6HgUyguOX{BWJU?SfVrKLdFnBSRYZi5ODsP)6xAv23Mqnb@4JOwawL>ZHI+*wgUUIp4}P9kRmp_U6=$dEyR11 zX=j&;xBO(BF(~vTPG|2=gBqPiOfICAiY4TblhJ8TvDma`$X%zTIS-Uu5pOOsf({8OAdDlXB#R) zvs`KF_fRNbS5Co%>Wf6H^jYE4RkH0sf^SQu;B77`-lmBysP4BedkZezE#(ZRsA1jV zdv_!E3BCqGD;2`sZgB;vcQ7uwcr*I6B)6oV!LD>&Qe%Z?OCPH1Hx1at^ZuIQ z#KA_GWy>C~Qa5Y@5}Y=#3)WnTQ#1$vj{}u&dxcQ;E4?cyb}j&(x~(Q*obLHFC` z&1*v!YiuG<8vULiY-JyAm8+gi;WQjmb3d64N6t0to)ibLs>kI7+b@sgU3d5Wy(76b zrZl57F4_?V8Zl+>7v!MrSQA{)5LOz!prEdE z<-lHgxY|xDaVJl{Ttzp5eS(sSn`Pl#0zefuCv@lN-&Ta)0>(7`)$&=S4NyV+V@HfHMLfT+h4V3E=vl**)Ix z>MH}e@N)VM82Aws_-xh%Cmz7NK?c+CheYp}pCK|+egO(}bXnscki3UlF$gtfvr(y@ z6TUx|^Dj3MuiA7ZLV*w{93bw?XYUGyrLqiE+=q3p+Eh83;G4DuN+1L97@q=XTWhsE zEyVGv7AQIPOU2%`hi+VU8qCs2+vU@^JDptak&DE&BJT)Yy^TWLq8SExlK}Kv5;RNIt<}NkLoHUYK5!HN} z_`TY86nH*VxgmAn-j^A6u5B*DbzNdfNa1#04Oh(VK}!TwIk%j#65IJ2IRz}Lk>^po za06f$2 zfDGjz0V`g3)1SZ4epqe2wgXk8)6uUjQJ-sdGE1qB< z$v5r0c+sy{YQUC)f8@(X{COWvB%IX~Q1f4tH7dSk|v^i40=x6(#{pEG)Xj)+3A21g!!;6u1VY05zaf z0cGU!v?}G^v5C!-SIh0x8QeafA^O9ad)x_(9 zW7GLZk1l6DxFu=FW9jTYNL*c<^eo6D2sG(Hq)}v*L#x!n-OVXziUD$Th{0+sI7V`- zc@e4|>($&kPlCmflhb?DW1B)=?$=roxm`pCM%e5owG;(zB=%t587h$w!CFnQGO95( zvZ=Sb`y4h{^X(KGBU^I{lL8Q>D};#|4=AxXWud?;5U%gnt2;zWXd45~CfhH3yif6~ zhUVsZbSNrYA}de#(0C}U#jbYCbtPiMDLhpt9`?_tg~DE~!8w%PN=}0WjB6BD;CyuL zG&?hn{ZVm19HqF?M!lo+0NGmF85r$1umet|F=m!r9VNUIY^Pf>8`F7o98wiG^3^ch zZZ&og^MfO9Gc*Q2r8O)%Krj!lSmfIvPmZj~TaQni*GEt=#;>sQ&H$q6C%Zd$HZHk< z?bj}FuG6BrLMr|y`VyYrGy4iqh}#|KE3i+o1tHyDb@z;PS-+gX4^O#Yc0!k*p=LV+ zFF`8r7eV1()6*49@xcGk+wn8cqZt<~4oStZ{>)fNGqUuT{=sp_7@`y%0jX%{*b~QH z{UTc1@^F_@MxG0MkC@sSSXEKg4a=wQfI{5r0pt(RnR~j*1rsU_=^pl3cko-34o9fy zBVcMyfP>cw#?cTA`}LeP@w*XoM>JWasCYKA5QGH8tAzb7c_PfeAV#w9VAyYY zi66y2)HDCN7~jeTqI@}}=V)l{!_r=SI~!4aUM7GlfdEwk1GG4iWc1j~X~8X_S9 z$0L(T`6cFwW#2L9bBB#ba7YFFRHgLt9S|gg3LKCk10oRcM92_eN_-5IV7@XwUGOzSqr z;(VPT>n7+@y~IcKFl5HbN)eY6Ahyx6^CEtBesvaE297;4gm{msF@*}#o&89V0H@fu z3%<}fph^NJrnLWTGJ||+f%nk?4?IJmF7eSaG{ySO+IGbaWV7Z5c>WP>ct^vqXVvMl zP*$#FC;)n9=5xG_h7_xAl2gL&bICiEtys+zG_XKB4d7|Oddo`L(vdMSz-)!H4%-q4 zBe-*DwA3=w20d~>Z}R2EOt}QlUyuceJ43-y=Eugxq<<`25Y4R2nepO^m)jAdjHc0ijDse}zI*h(xM}p22 z5kU1}@`2(_$K?u;sMem8aL%cCb&eZXl|RJ>IZ5oY34*N;24G119)tXDD~_UDC9c-@ z)efXAE;LMWTXc3Lmf`?jkdHU4y|)bgzI)qy4Dw^!@M0Ot6tgWT%*4z2aC8qBc7D?q zH*g?i+XZrS`sy6sLNH0dj?N|zg67nNtcMz3ilf6d_-Pp&t7(`3&j;o#pcKQ;T;s-c zv3V<}6YIi6X05mQX0=oi#h1?%*Y2%&Qj#IVmS6}<_mo=K^lT4c247yoN_^(`_l(`- zRCEE~SY6e$3xxJJu^wm3Yz*sjaJ05Hg33)YGxDXjDVj^SrTO)2T>!IZed(_0iU4@M z(~?)Z1nAmj+JI>YuwJhAL@UdlkXB?2W`@i{iAq1o*^Xy(50@H;x9|m6VZHY{(MZI zFZt7d!2Ai*XY>%GdLx>hKF*&H0fq66nFSS7Fof2oH)v1vP|XF=s^~cb{K)<)kNFfn zd&u0qe0cqS^Pg!if1vfqkEZ`e^Z#h;kw^32z(C)@0$nS0TuGWV7mtUb?UsN<69MCr zU37DC89__fJ{fI)Kl=#21;#6y00o>OETD7MbUm&)0PRD)std*`@YfR2ku1O2vGeol zc)T0fd>BC#%FWJOX%3Lr-dNLTR^=N+j%w23FmNztug_SZ_ln@#lPc2m&XAL;C#Kl< zr6dgtI)-DvCZT~j>UVb)@1bCyVS#R-1~uJzm9uq=*hFWqOc+8(DbSA!)iFjz;}9wA zvL2eiCP?#gJFHk@_O6A`xuu5|_dlYAK=u4yWCAVx z8|?2Uw6Bord)t z7R~sexpC}KX0Wq2#o@B(gLG^xo1bcTk$S|j;Z_#HgN4X(wvQCT3rSdWK@tw1dBMfVGfNnfjPr=x!SwBYnZijS{7v%mSx@|ncSC90lg(40y~|H zet90}?wH-xHBphMj(@bjdjVs=3ruD;7x}~r+(a`d*or7}5?CgTlNv~}-;7MYhXDA- zsGvY)9E>AmL9{@jn?JQ>*%ujixveB$#WUFZ8~~j@u=g`aVnYpi2Xo6dCjqkG9=4lV zdN}EZ2&sJwwm5W!%+{TON;e|hqiw+)Zq{aAUa5H{&&X>@0*D)mU3{u{^AjgoNwrFA zWvQ2)z?~psW-tLo|G0-3;7x@EM-3~&P8YpC} z@`RVcNP;`XJz-K5pT$Ct12qB^fH!3tE-ilVf$+1Og97q>tEdR%xn&uYgmf`1?b8%D ziI}XwJPNQBNewPHs|%RPHEW78`M*6dA^-lsM0`w(-bXC47%tgGl({Rq82$R|z{LF` zFnNgNKg-5^FEIJ&?g@xq2-7}p>;w;B382pzzGj9EX7O<8I{+4O+tCahH zYFhjxqeH>87<}BYfleLuSrYrP-K69n$m9~oMRs;UjxpW`$lCK0SzNJ@Zk}3Gfc;~> z#pcqrS&^;v%fKYUW-19Uw)`xVD5R23a)|dP~ zGXSppHvp91E8kN4MYKm=^`x)`RKSwUVqvf%AeUA~%!%`+!~A9E&XmUY zB2>r@AnUWzRrzAaAn?6hnWRkIO~g59+pLteLZUP~XQV3H382CYB<2YWx^}Y$EF>WV zyS!}H1Ti=7fYvZ~mcIh(%V4T+q58K8>s(nxDg5(vEZgp5;Qx0IE@pZRF0g}sjX6w` za4rexr*HO@kYZqpBD;{;hYVK@mD{hkfOqdzP40PcJpvG&Za=FW!Gkj6o0t2MzS#B7 zMC)Mr@*L0;gDil?ZSRbPh)uw^fBu=wLLqtD3opa`Y`_j*`mCzN)A#K8$9TE} zihb^Xc6*2Yi&9fK3gw`u9ps?<-E^1pCHI zJw@BdXg2vgQo2o6Y=Iwo5$z<7?km)lgVGl6{+aFt^*-Wr!X5$5a0tSDUZJyWZP*Sj z-+dhGF38o8p&+0b3)kJujg@f)JbsMjok`9i=1zd`15&9=((YF|Z&hV@L7NrNbYW-G!`Oq)WV;|&9OWLyd^1;%^Be;6oo#66{TdwL@>P;- z8LZS8ksFULv)4nQyLZ-6x>u1Oi-!#PqEA#W>mV#lVS5XwGW?E3+ z77A%PDba3snkn{$DZL@Aw{x+lPtC|iA*EuV(j#2~9HJ#jDxPnW!IJyyYUTpPL>Lx( z54+X&eWG^JOq771uQFs@;MLtv*|E3QT7IhToujG{8g{7Bc}h4#goxJ4_+06EixCwN z;CDbATT~0|I(1v++$}@e+K2~F8YkhH+)_w%%>2Y2l+y8r<*rHQ;BwrW(b-t^$T+8B zlB&^`-(6KpzLQM4&58N4&q496Eme~xXImxQX6NvjZBJ;nD2Yr|w)V;l#A^yTKRpH^ z*`c^#F@k#VLJm>{=(j#g)Jzihp(KJ;x_h~8oRpO|XVIW%Ac=Wjvh|LO^@Vuas+dCG z_cJXqoZ+Y`sKa-B%OZmnY}oTz4E=ULTH;N;ZI@S+y>dml13#lH(fby}OAE~iO$A_i z+w@9Zw$^-Bg^G6Gy46sPA^}tn=wPrR1naFAbL2m42?flPFTAGIQ{iJFlI+g7xTK7e z0$RHSdfy)>28Q#yu#>@;3fObl2fe#v^T{lw=+f?~?O?yJj6=)l*Blqx9W(O}tTuNQ^2JUDf5 z%(@-j+q!mMvf$E}OJ}#&?&JujK_r>V6__OmFob5yr3}JIP3x>zbclMOE?+MBwPa@j zGH$P+QdF2|DiJh5j80H}bZ@(}b~rVWv%Zx=-reeyaN2go8Pi1_W>836W58%(0T{B2 zR}Ah(*hJ0B8-fy`X(1_r;nt_srAS%%w3-`8k?@$Oy;)Z#pMBOO!-JyGx{=L8&@sLXO`XG&ZvjAD4>`+wvtjz1 zol>4u&q$PL3st?k0Ix@wW@|~v57TwFaMU}pD@6MCs9Eo4tUumu*O9qd!!R2U#J24E zzGy6QpO{4)gv)N_&`g=N5kQr*b?(n$KW4~YsA+qD-KQI*xGTn{$Jcw6w?oA!?+tj4 zmXUEB#f?tzffy#v-rg_G;-JB~s@+ zODTc%3;a?e0pS78nr3sT=lovAf-bs;W#eo7@Erkt$R@tyHhrE={QB=d$}h4yL>dJ3 zF~6wom3*!)(OYe#AiWKL7%OY6=$lbSGeKYCctEldKf9cKZ!J}BDw`5Y)7>HUFX1xSemiHh<( zrV&_44~kBF^&^kmqm%DOo@GEug9TglJX<@q8i8<6#zTDLaVbDg_xHC=glK;J^^g09 zZ~271T?`9fYAx97<^oi*%uxZ~Y9OLO{^OBzk(b~P`TQC9Mm|2ffBw84j|=%nJ+H^( zLjF+!gdf7J7OyV$4a1(1sGmZrYY`G-POtM;1&Ghnmp2;3@JQb?ccC(mz|lxI12 z?+9qr$XSRe?HR=VblOZ(Cm4Ciq1=4q=%7gj^7`Hkti+8#-h-eQ4Y+!i6g1rCfd;co z@@aNi(gvE;ko4Gu055kjd0Yk=MoYyKva4nfh`qU6Nl8-O#7LjFwa1lQlY{i9j#-5~ zFIHE)0=3mGEoDoFkrr|P$%P=Sd0WZMiuPJiXbexAe7(Z< z3#+cz#j&j54QsfEf`FfSc8?9jp!b$9CPIr!ri z^-!fG&w(cLI%_srp3Y>#xR-WtBq&BNZ5xE*I6+=3<0W3AyMm4ur^>#9!_-P(PFp0f zy$0kac!kWwp_d^?c8C`Bfvo`fJ3H^2MGP2FT-+URLU76hz+aENHm2AK<;PmMXUb|^ z=X>&$V7ZNOH!Mr)$zODF5U_X-w&nB^((glq^U@TW;W4rF>uyHRaRB_zu{c$(K9;_x z%si$mkamNxg_{xk-|?k}4E(!owXj_c%=rprowDSZcFkx|6phxcw=2F<2_f&#R;&-r zHyt;{JY2O$>Y%Ze=R_(W%ED>g^$^zBTW23!@1TK^IlJSbIkzhnxq4t5!9&?mB1RP~ zQ`q}$Au&gNtOzO2y=`5}$&PPbZ*-uj=`2a`2FsZV6Usacw+Gyzc;d1cr< ziV;eth@5Z2q;7FSTrsr-j&~UYer0o*)9X%?OsKyKqjTG>fzQ#MW==DY+s;1Bdww5U zpuXBtsF{P*moU2=jvaEXnc0~+94u$9!Y=OEfz-7JAJCXY{6(WIA>P7>@t7^Ew@(utH_`rMjeLO+_^c~ipvtJBbNrm>ub=nKUHAZf_fXu zG`VdupYO7Lw8(e787?4Oqhob}U77rTyB=^g$*a9+BN`i@K)GO=hV;e&EP&(sba5ds zRKxC99UIcNUL^#*4oWFIx8i;w>eR+L-Yz7nwv-@eu~q7fWad!XL4-pDgr7skt84u( z>@U+uT*hm=0$gwhh4fql8l7zS{I#H(f(Z1QX2B#RT;S`oKAcV$d%G9C0>C}Ynnh5< zHJ8f^wN?S0ePQq(a}PD9IKsvUo!%qV`uFjMqIZs4QQPbC0zPwbpFYfc`*Sfn^4GXs zSqW2{&e1?pzhW0)4WVJJv7qsPmKwOm*zbV`D(t(ThTS@g}WE6g8Y`Vba zo8KkTd=(u1C^jMiHVC!XPa>brjo&q^OPFjJ5w;j7KxmPhuT!1bm#NN&TtWyrsJ9e^ zW!Tvj&}Eaia2~q!AmI7QHRxH9=q2L<9M-ww+5lBsDmSN4qetHGjaBo7bC4OS0HOmQ z`Vl}bI1g^s4}Tu+S>oss>OeIJ3i--aoxjvx!OePl)Lwyp1N>PGbo#$)_TSoSMERX& zf6N2D^E>)>s~;s-P`~tFH7LH+UjRlNg^_Au5dfD}qP-4_BYku0gg8fCHXS{&(D0j{ zJ6ahXox{T0UhhSO_w!w%r3~O$0N~i*W2!9 z%Rp*9E+=r47l%nW^rqAba_g}hF!oa_RmTAgL)5&7L2gx6NoTFO7`UC~qUy98E^ z(wSFqlT7+Rby|MtrhMHKWkO(^tqXE9{BhfKA;4JaMQ$wR-z`3T8pYt(_~riQ|L!Pe z>WAnFPQK+*RjxanNNaZPB!%;db$u=p@zfOkHNg1#FP4{qF}YVi*l$;gYZ*DK=e z4~&WTBblE+_7-m=8F>ul$MA+C@56E9U9Y~x&{rM%qLFH z07}f@?<#@R|I~pll}mymCFTT_>}iFZT|iotuFXc>goqBg{`em1G)}@AtAxL_YE=!RKks#@uMe& z`T{gf7eJ`m+q=xaDE`#t5o=u8`rf0a&uk-i0qfvAq!e#ha~ol-<4&lxs{n%DC66LO z3LdPM5SyocdEA~D`z8rjItRm>P8pB8!Z7c8RxjtXA}O=gyb=zP?q@21G#}f#4D*L&}>XIIk^S<2Qt4H_}P!W$=9rpNv`uj-xHMqR57JAKZH+K%Ccr2x{Z zH%kj0-f-!Ux_B$8hw2~D)V|tH?Wt7Jsd!}k{AHX2-a~Y;2Sjuup*vms{^)FMJ#{~ zNuIB=F*)iFG&Lhohnpc`zpNE|YK>uK+5Jw=qFG<>Qg=>8*Qh>cOUSyQD z1LkLv!bFxMY|98)OZ93EhAf7goU9tp)D3&w3!Oe$Cx}P0?wo=Kn$>NkRG&oydECwq zWF#xcLmTuoY$#WQtHsBzi@7a^1mZ%dwrhM2lB6+Mb-_v!H)>|cyJb)Im1v%E@U-pM zoujc$In2NUR~2jv5CNVi-@&y&vd;mdW=r9i!lI~HjImgGzAVB%gmBMRzg!rDiGv7h zVZ!JK&3eW2_cO*}4>6Z`!pW}mMIA&ZaR>zb1`S+#mUd_+!jf;|n{w(WsuSp?f3e(6xjC*BE*I`0H6r_*TUNLG zu^;XyFxmo){J0a=#~qYjwG;=miRP`kD~!;Q3!*;ZqWPvK}BpQg1skR3g`W;GI5sw0fElGFcEd-q;F5Sh-o?{YC52QmX zf<56b>lQv{CJUd*dl)tGro;r<_kAEUtSJN+y<2yu@23nH{$OR{xNI>AV6E5(>Izg6KUEqd$Zfxd`Hl_nb52X8D}9m)^LZO^R__NZ zWlWthyGIm0KS25GU;tR;y7ynRk}_kPow=+YY?Rx_02<)w&uPz3#Z*}P`A0SrsI<;U z-TrqUe(yG(C#T=J3j~CD{_t)5=q>=W_O06>9GQ?=VtjGE-A9m~dv(AC^$~85f$Nq4 zrj}>OS8&~JNJ3N-$N_2RXISBIO5iXTL>qvQ<}d(Pa&@9MfMzedCOlMRer9&1 z+yE;rKskFHHo)83h8@T)O;8&L36n>eJfQD1F}tgb45n-Q%ePFgK=0&T7_W1n6aua^ z4PcPQq1kR&V8h&y+q8$O)tA+J~)7dmBAggX<6}X}d2c*3XW1V#l z8eV+)2apCIcG)`5Dj!E3`%e4!Z8!a+5yxl`D8u-16D`o{9_v8)O-ZoDm&DCSCQGKj z7;%|!l!2g*&@apf@R;Z*%@Rx#NZm$47^?A!&jA)%#)DlJFp8jIfRIdgM+@p35B(?@ zAaCdcaMPvE;B>(+<;i+OAAlzRr_a9Eif=Un`P*6nk0bdCHA=j$-bZBrn4zMQd|t|B z3WQ;D?P6+Jz+X`6+S^MdB4EGLpK-1r7qi3R4huptk*hTdxHs=~DtD*#PLAyhh9lro zaKB|#-9=~xRlQyUJx(0*m@JL&(!jJ&i_QZ!2(I3-MQn+ zy1yk0<8&-oCb2_)D@O=`n~%pS-nYj!sZj|)+H28WDCdKuTG$4>YyqqZ?ldx+h^=4w zGafJrqYf`$4UQ8xORR0F`%<4f7o~#4?*Vdjt(R?=X)Vqcn7J+&=V}mSY;p8PdpI&} z?QXK^4r)_-h|QamXr8(iBg>JroIzxLifO0V&DAfRmdc~#VLgP(GDb;;!5i<~TTo2=QywuJP^Qx701sB?Al>FADK<7LH zGtCWz&B(NE89SZUtP?cz3^TB;;9C+njjoB+?!t5&cp_J>3${O#W;$y!w6#doWE6!_ZpSYN3AT0HV%XsD?K|CD@WW2lLRu_bIcm+GN87t56l2s4v z0V;RXJ-FlhD0I%YhR1Z$%}kPCt@~cXcia+h@dnH0j_GbAJ8u9+hIs4EYJTNrf}e?_ z9Ex?2Uvw<@Xe)F;Mps)l=c$sX)792?a~a!;fFQ^#uQo0x(7IEzIsr#_GP8ClK_IjJ zIiG>j?9P00R|plgAwsi8#qn8 zs8ENK<9Q5J*{i$B<))d$_O67IjGbmS;&zacvgHxCxyT&(Lv^o&b=#rb`kI_e3baiv zJ>Q?t%lf29OSGOJQWQes7801`5%fP7(oh5xW-_zRMD*cu#g^&LvpZqbK~k;I)Z2Y> zv}>uxZC)JFJlX&rp#mEU_r&GVy#1CIQil;wi&(8*$R`gl+Gu&HpdHT?X+2t>P zdA+TtfBNUwZ=e1RX~M2=il=u6{5Rx35IFYJue6`vDcr{s@_0m_eg7~23P-$L1DZ+~ zupMp^*UQ2WKY>BwF2wdb?H@xw`x{02Y!;ivNDiT~=m7kEvN z!~fXP6+Fq8iNnj_e};$h zaumGtPe(isO+Y{jdRP0c<33)a3iH=%^ldZCpb6Qmjol{vbgc$n{V&j^KD*B2*muA8 zRg221dw;dQf#$)#e)(4WzxwST9{tkB-*3a?*}Wa{>$h(74;}FOcAuZecdzn#(EpnM z3RO*b_8$*?^t?;igsvZd_|q4!*=--==H;dT41?l}@1J{jkTj18>cgi4AH(E}4)!)q ze#^rqf@9wel0QFvaox|F^z_BCPmdn>AqCgfRnWzyA6D-1p6s zVQTw$KaVE@_xIaxFiZUQ+pj;(e*JaUgpVQmu@AgXJdc~ko?wRub8G{P%%>;#xW=EK zeyU*1{be@$>G}2_)5vdC-~Hy7u-Ft``vLhA%)-^%ZM^>O<0I%CAKI~fOhmsu{{L^# zVLto}7kurJpN88nKmGh?w@xL{PwmYeE9g6 zpPwF!--oZ7_2>rw3phwgk$&S#=m3u&c=wx+4)W#AJ$IDXxBKqk=P!Qn=78M!kbw-z z=N|jvPmg9}+KK{zT zezOCA=h)}l`P19Gc>LVs&A)#?Z_R%^xW^LsXvsglb@8MpnT|OW`oy)#?x`j>qSp3V&(~&#=`RV^@|NNA+ zPwwRs`cRyF^2R69qJM#m;qsUDYJokuMeyXi1$fjvwa|cUe5xQoDx3W2vsLKn^{v2_ z|NL}+gggz9JK)&1hoA}&nq%2N^;OikLHO%We@5V^f3s*!=MM_reBi zKP_PC{CN3CBR{q1gIAW>&rh$T@V5cScE44RknDXUk>?rqZ4UkX?F1p{t9KNxf0>W8mE;3FV>j{RN-&KDu-*Xza?2R#4$qd$MvC4S?nr~mQKPdK*5 zupeFkZslX2c?_VpL4F3qFHE0sju6T>3ndJZ|DoFz~|1 z!9V@m|NiOM=V4g)We20-&wu)lpJ1kY+{*J|x!XNLr|0wk{P}x< zU&%k8Yd?H|S?p){@L%Tt`tzfAylcegegEyoo+s4D5B=T^e)tLhb@}V^mkrw1eHcz5 zjQRQYXXr)H6@KTzJkDGFy830lLSZOxdN^(K$Ie>*I>&yQ_YhKd{SxNFr`_YczpAQx3 z8L$}`I#9hehGEoH&@7WtbTg(6i}YGy^4Sq5fviVj)lPAe=KVBhQWB-o+F z@CF!Ef?(GDe1&o-%bb)`1>Xy;Va66n(7GCJ&JD0k2E$5IJ;jO!xm3f1?8`hTRM4mU zd;THQzwf-?|1BE&(Cc-rm~Kw}y9e3l;&`pu|*|GNPIXP(Tz2 z8=kv67g)m*mH`$Nwh7(JVg!vA4#vHL=U6r8#k_oeKAdL5dtbwQcOUQ7D!`IE1!-C~ za5TozOz4}ct;xZpsp?YeLJq#q;CuV+`;Jymnn`~49?h5cxYle(0VR^RKDLBsY+9Hz zfgbX~XZgu0DnT>x_PoF~XKs#GUZvV%SUmc#OV7yz?SnM!qklp+e4Zs=oGSy9xjh?- z4%ZqLdw@P$l$d!HJ|NSXC+03$;V1l^>$Yhdji~(niO>6_X zkm2#A0Z)wWWt#*tnf=+{UzIK`sk?2r$vXRa&Uv#hgVj=1sj5^el}Zw}4SIjzG;6bd zezX2zZENrJd{U_0-mLl8z>~ve%V%xm#0)<`AE3X(J<_4}ZSAOa^s!4v2|nCzRq*}j z?0u*I5f=bOkKqFv!x(El91E*$V0=>D^1Jihx9`4S92YSL{=&Uu`<*||8+#vc(eqvN zeea;&-)o$%)$Ut=?VYqw-#%1&2k$C>;f~3*;k(oRyRX%Qy_?$M?)|&|DQ?a>`*>DB z@?m|v{;>~>ayZ<_v+(8WDH64zx5xcj=`7dz`T@68eYm~fYn<=Cz-_R&=XNkU{a$O- z58gH_>!%powYSaQ-oJ4n&cB;^yeoTpj|`}@N(1kHV_)aI^8L$34fjk|&+n_9{f~c~ z-hM1q_YW$KzutcR(7Sox{$8tgj)rTEVlG$P|JeJuaqzAE*UgvO;oAqi4}XJ{zs*7) z`$I>#8sqHjrh^Mgn;RI<@Ar;Ri#PX`^Gc;z{CL!Atv}W# zd#&}!yLNByuf|_z>aF~?w{?S-)?<4M#jeRQKwu#y7_S2 zcw0Qr5AJcA;jsSx-4^cFPayz%iXY|*J0!#54s`XYXp@w?xK4XvGi_~Tvg;4hT@``zhQ z;o~|Eo*hnxweP)+Z=j?tgrbxooT1JKcPD zHe5f$p^$d}tn{H#JAj?os^PM=)-T6WP!|BIz?MvmMdRDtTKd9Ye+-_n_AAIP4 z*r?||)+)E?_hCEN-al(J`+M)}`^8b?J?=Z+IIAD$h94l?j~|bE=eVu!zWQ$X_4tsU zKt2G>FAtc{k8yNrc(&gAUhg3xbN$2U_`Fib&hUN*_t?S~6+Ue26)L?N=F=6 ze}_3i_$q6E!0%idw@2L}c`&bDy-F9WjdUvIk4A$Ltr`c2sbamH&GAyNe>Fh0hy`8? zo0l&(FFSsF&_N{nmoc2G-%?+jqsz|S?a*9wz=iDs%%?OW3wQn~{rOYczioDVd0Zcd z9fb5}U4fTy2cyC5<)nM-Ury4W0Wt;pOp?>D(yLEtcjKb}bXBeDWsd-fR^!xaGI}77 zd?>al(1*VN%?mawGO`7AQr5}7zQrNR+FhTv9R9&#A1=9?RWEcs%kl4wzZ z$NLcD0)F=M$HQJ1vGl($MsF_q|G?|Tb0W92JQ&bsO7=B^B2{jH00)uAQV}Hp5w2V$ zsp%GSMUiUbew+ycu?%UM19BTFijRnrPixpwpdg(LiKMaKA(8*mS@xd(GJXoOP=auh zDMduvjOF682`(qVDKP6;0X#)y?W);dMW_7He~AFp=&r)jhCx@?SP4e12-TO|GL@p5ZK7qD>)Cru%x~vy#m}5TiH!JFw5n6+_s9nd3WYqH~ zCDyfcyVp%q6d<#NQGQ1OWnlOFUo!&hG6zq1$wjqfrHIY604>9bTJgqr*a`2$R8U}O zo{*^y)5iZuMp*e{dVO_mbrS*4bhvbNjmiq zZTQU=9t7BKcdpi2JGoA0cVlgP1GgZyb31Jus@&Y!zUmN6QfJYMB0IF_{apQl&jegj z+Is;LZ;6dADAy z@2;pQ!v0OS&0onz$Yj@j!v3+&*;zesaw|ljd+s-Sy2EFSf`YbUH6O8ynjuowRkGy_6nPOmqD)ZuOi)Nxx#!THOj;SW%pe*fuQdW@`)9YNL6T+iG{#TX-vUtpj6#GacaY z?)rA8ol_=uEQw`%^?#Vu?alSATziM8>)>SXc6+n!ueG;ZumYRA@GROdHgnCb4#|pU z14Sx%d&on;M*jb4dYf~3#t>~_}HcEa@H$;f%; zfS;)bxy?;@EbXoJ_3aIRV{@ys+uGgAt?#z3F#ca`z+2mD?zWmV<(Rx34tfvZFH)yy z5jPKiF`9OThFX(=C{CujO~13X`(ih@0jqk|^tZNK{?HhgD?)gs(5 z53xVfJZx<3=Af|c?Hy>r&iZ<5t+l?3J3lskxMidsIC;=%lMfBOp#McYqc9jgjJnr1 z6E9O(_K=RTr4v|FsS|&MIgaxouceG)-ud&FR43NaZ zX&Z1gyg_RM&jVo(uj#dc1T}HmA7JRt2qca8obiEF)pbQFQvh)cpO$3->i5Y+PChu?j|T4bE+%(tSi)y=YtVt zkoE{d*B__A6_YxyL!=|61^DSdU=iWrN|gjD4xq(OrAmM<9w zyoltW2!Sr@jz_(_!w7`nyWl;CFo}Mro2$ToRP^fAgT{HjR`g1B@1#~eEA1Eey{Gv) zek0}Oywo_Vo;Ezxz@27|4_@`a%U3>le;~`XJwL#_6 z{Zi%7+e5obwc(XZ$0cOec#Wz@2qmae5$z5<+~Qoo^XHBHUI~XOKdhv%9f>EK>)t`N z=H~c-v`)Asd7*Qmf~@-(pUvnlzG_kt2Dg&QNCOzRH^(a zsIL)yUZHyOp;kIPYIsN0@;;J`yuBhQ%kPzo0u?${DCbMZE8c$oIDbgg)x0X8)KXMU zQ0JW=6{(2ua6k;_qNJ|7&h+%krQUmn%i}^BOK|B@iqN)sO&XMF^=Y=K=2?mh192cS#+3bA` z8JK~I@h9ra6n0JrX-)}LYoNnY2Hn8eKfJ-GU=P^P{cef`YqduQ4z|2GD}&&=mZ?Cnf;y(D-qkezh>ppU~r1$$RWS zmdn2<#|bm|XyHDYf;KKR9igO42*;0TOqi+)<)Q>ZIhH6ejlGs&aA7ARq7lZKj#uio z*n^>Mm-^6eQ(}L{0hG3wm!tU>d6H&;QVkgVm%@L}k(WiR!Q6(U6dai$Dgq z%j(Hx@g2o$nU(IRa)Uo%OoqM`#TRIi`{__Lg7pf05sh9)G^&VCq?PRFac4x2qEG3F z47s2yn%kV4Dpe0k8CEs5qah66l4Kw6O7JlrY!kYlyeAjk{-uyW+DEh=M#{(a3%u32 zf*<-+44f{KhRz+QZBRoiIYG^aZlt&wgGMU8KXz4KHV)+aNq3PpPUUnV(_WE94(0j7 zr_)oq+Ny!(H%>WxV&`~cDsuJjlZGVrd;p?DN@;+~z9#d)+aHSO7>JTw`N`60113Sz zyHLM-#NiAg{d`(Vm17=5|60p`%knh!gVLsd`{y^_lhCQpss*6Vhu+*Y(sbx~lXpM) z^nzqA@}N8ZSDY+homoq2ZlZjPJ?zkSgj=CTuo9&`u92QxqE*7U`&FHDlP-wv^(7s1 zzyP>wW6xKUY&N73utdIf_O<*@0+4@Vmsxx=Fwtk@r*cJH%-F#@6TS}bUn+BMVTx;O zfRAWwd}RPG=I;2TKN>_dG)WR0k89X^!vAC;Lf(K3_m=nj_5Q5pYj=Dy7-Qw~)i3pt zZHzOC^WdXR@=~R7d7OX0nii-T?UPu%%JjK?l(R29I@T6>z{xOi%CH&6N)LK0>G<>{ zvL&FtuW>3yOqFDPCO4zOH=d&}N+NAOKf30%tV*LW}4hHN0uWWW#B4b81(?~RwkF#;qYhz}N3LWR}VXQ(mS zDtZjH%`5}nlgJN|8hv>=8Pr7{hPhaPbr7dkei?h8ei?tpbSV|d;)p7=3BU;n4l$7N z;8PO*y)-3hnskvFfPYf$#MX3>=KkFoU*w6g9%j-2vie8IhFpMBX(krW4aKUhDS`EnO*qGE-N=s5o;Z* zV!4Py8VE+?L#haO%`T*hubi3{DunlD)ucimhNKE{U9wzLgKUB%oKjtAxT8TC_=bwK za+A&mIAOS;y5gaz$j+xOjB-1%Q#KKYzO+3cu^7dArnE}M#*Y}YP6LF#{1J~9=L2l1 z@qyU{n8M@L6OT2aD`RW;dQeXGD=jZBP#D8OMz?YnT>Z!@$LlFgPCN z0DkRaw?@tCx&Vs}3T?K1gfj`dF_lTw_L^BYlqOzHT)I41YjAsaCeV6_ytEVWYw{rH zB>)J189t?1OyV$qD`rG+*MhBkEtJ6o5$><~l@ZudHK$UAUkk&X=VG)oP!%@5mtXvc zu{snR=%r>I*^B6PE8r_NVzDDe9mGS-nO@u?5x_QvanK327%ng6NGK?esY&Z5!%xJY z(x2HwbN~xPx_d!PtN*u|l4fZv`bbtpoafimkLnwcyvgr^AZ-g-xBGC zRH4A@c6CT-x~qAlRw4pG{!fYEcZtB4|qlIR6$&aDN6Y>^&qU`2rtp8{|h*s7wP5y zuwn?km_o#pL_{cSq1Bw^iQykYKs}^D+67K%%-Kujw<-UNeH=@|bS&dPt)PNonYeyY zpM><7ar28WdRSTAGaQa73TzDoTB(G!l}v#)Y}j^o1 zCYZ(ovDlfgn1_b!75_v)NKGMjt;2@FotYy$=njtn8vS$GFl6;RT%*Ap=*rZN92V#4 zNcn%WBYIoW+mu-~=z^O%L_Vqxny!l8Sg8K$(yz+>3z2Gi)$CW`pqJeUYY@)friCoP_v{EyB zm^Q2Bbd*tz`ECXtix$D;k0F*X2@1e!O}1)d7(I!sP6N#RqI!m6<>&@PNq;)R*_D1z z;DSqn!}KYH0mZ5$0<{o9LbTK!16D-u41+{Qmn?*9_$2Y@-#pwyJX&asC5WCL9jrgwHnb=TI(vhxhg?i(%`czMfuyzV2ZR>3L5Q1 zyYeLV)ml)`4Y?Ny>KqJ;Fxq2?v}J zS%qxvL28Dh;kQSFKGmV=B%sZJHbr0MHil-6Lz;{?>D#ho2Lb|vK`Xex)?l8&OASNN zFf^DcFJFr7EQ}h#>45B@N_dk>Gm>c;BT1J|gi8=g=?HNfXBSQT^itsoItDz!PL~8B zhne0(iz04jqZU#RzhGm@BB9)fCSeY4#3SS}0PTv#So{xQq&X)J;bBY{XVV|WX33Z+ z9f<7iVN7@9vCF>v4CIv<v} zItRSR*jcH-$Y$#dV4#IfWzPrlqy^`Nyqn1A;2j>tH zq?Zfy$_}sDYO=;YRbXo1j#a9IcnjfIH5816#g-Waj@0Fszh6sSNr zifJaKUoLs)2_bHx7j zFT}tFA(Sku%YXa`%9VnI-S@eDOzI1Bz}(j|NTLoVQvrf#1oRXo#t<~qK$LR}wo0}z zHQcl0c%RIVSfdFrD_Z{F^_W?9A_ydAOwQC$2Z3z86%|-ehHM{aJG5!xu@^Y~fze@n zQG~!|r9V-)P>q!6@rZ~b1|tQtX&41?$IEn~*Hj10@$V&kCx!>Nz^2Z0C1QOsbEyqq zU{27cGa^8f=F&fD@ZEGiImIUQO2nfjQND>`{m5?&&;Ro92&olz0bt{2Krsb^ix`D+ zDNlgj;t*kDRZ`G%551-m{IH!YOk%9ps#V8Q>K-lznAVtF1KmJqD&^tk}M^k1+O1GA)c92;!@AQnox&b+L!n`g^qy= zwHO&mIN%RTrClY*53f<6fc8mx_-_=~e#6EP9NeWI{qgJ>v2RJ-d*BeU)P*vT6!CTm z(dcCT@|~IVfzI9OE^(;<7ge9Xgc{(PCBT8sBkhhC4Y5hD5xtVKD}{kkExLe(7j77&`lMxOjPNAJ-NG0l zwxD-{IvU#|i!vBH%$BJzWyv*QwcozVnUbb;TeTL9dpuNj>QrZZ18 zUopcSI1AsQ`BDmq;S&QSB3X<|RLIC;-Mc!`W-ioCm@Lr1XVZfd!G>bL6VWP+3nbCw zp}Of6t~b<2faS*}ia>)Qq&mSsqe2!n{eg~<@eSC5v!I-fWu9rod>{BR5~$U2ml)i( z-R+%3opDr@x%-MCD%}c9v0E5HJst0jIyY(e!3E?9#O)8R$ufnaT{+>J2CP>(Au;_I zGz4;wK(p_EWlZ`?bz%AW>RxftqIAKKlfj2qJK|^( zo|6QvGG!;8K4Au8Rjxa(;~p}c__~Tds&*KQSv9ibftxrB6$g~N zxRn#n#J$FfP|ouNl_-`svjjcSJvC_fgk}I>-NqjXfxrX{u&JF_vyXnv#}?TYr8QB+1%8t@LTq|tEbmQ|E>{U`M$FM@ z97YU0Hm*+-B3%vyo6VhQhK!q?;X<~pHNB3}9Zh=-Y}*vF;S2+}D;dy(p&G5ahP~|5 zMJs|sWJ#x4Pd>1zjHS*fR8ztXg*7bUYj2G^G>2*{hwL*on1LZeDe-(I-KwFc)MiDQq437WF*oh^6+leuxV@y3vn~;$+kGXO&8e!@&ep!13OE=ANMa(&B z{)VijIpp|K@IYy;h@aO^LmoEc1etwX`SW|Q(0$|)K zfFhp3YJV(3Myy^=4;{k6$Vi6C(W!${cj9PDU?D7~2T|HJj+ui>FnubcRmhf86^yX0 zq8aT2tuQ16!-x>Bj6TbA45|%FgxSY`Rb^@-ash~&F(0&D6D{~gpNl1vIhRo!kNssgHm@VjDjSVW@V{4TIoC7bw2 ze?;-ZR9|LP7=x{6Ch0V;mtq>Y(E)K*B}R&xQyBEna2;2Zp2@V{!}JMO(G(NIfe6N3Q7SlJIzYJZNUrw^0PA%{IgobfcAUlGydO8Xs$svOfL9^N&3xC2;kZ}Q<@lZXU zvMqT@MRIhTL$p@CV03D^ia{xTbW?@+?~wM(yBcDky4A5jWz}_A;i{mx^V9+w*(FB_ zc|wWNEH$=bEO{_BL=qUSM{JL0YI6+6Y1-`a$3`!^0!7vng4-ZUOXZp~imR9=tYX#+ z5Ac*kv^&IkjR~C9_t>6 zSB!F25@I%vAdgoMqP$|R9AY|U5$mvtjk2rY!p0g1Okvt=j%+Umh~1twkf`)#3Y%Fu-H6X z_$Fc{)#)%_}gA|WT z=%E`oMZ#VLa|*!@nqVJipEg+F8Az9O8u_-4%|m|(wdyI|yv~7mQ9$+7tUweBj?Sbi zkeWe^tw(jFy!ZT|qUyVqEEOP15DqYs(ND1k689cLHSYYPdJs61ZXk_37){;~&&7zx zNyd2WrPrY+OK>-?TI>g8n(-`7E4S^S)~prp8aME!S1&M@FL`UlOs87L1;g^fT|=(q ziWooHQw=bSjg>R%1n?AIqoSDGp;KZ8;YmGckbT`9Tj}CVifRLTlvccaDfa}UJE9N^e}{lD zq88q(R`KJYP%_8)MlQ#a!i)~`K)?&fV!&T^Rje};t^^|lOtJ;3ta8&Fn3@(q6`_zY zER7H^1t9}3fJ;a;{+5QB1DhXSV*h&5V-4i|9yvC zxKIs@G0VTUY@&>|lGaOyM9pn-(~!6CtS0c?+^JY26;sesYe2i$mcb1cVHPm9LDyuS ziG-jM7x72t6V`0>T>)m3DGB{5LVi3A+Y8#r=mAI{$e`qmCP5qnZN|8=mh0p7cVqz3 zbd-#kh^WhSQi29Cg!uiAm=$T2ZYK{&r_v~-bO*i&Qi=vHJfD}tU1FIfv8Tf4x#-ST zorb_HXHi1SB%h6|Ge7AUU+G>H7+)m{eOH)li!~fa0o8iRK=Em*`6&>{=g)Y!-lX6Y zfz|T*Y%Q#o7&;~pQt&0*3&JlLhU}(F+qKzNTYbS1HyZaPDk*9Re&*52kewGNwg^-(gR7lsSFCSn#pCt zte}B|k1jdb9f+eww$l8S!O&DlL78kj92!L*h9M%9l&qaeWrVPz!=7UALiI1uO1ZT` zK(IkL6@-kO#=-yykyU+%Ck^3ND&sfSo6)AELtmwgN^&tJNm*G`aAf3otdN2U#f)1& zlAg#5L`2w7>kKPBmra>qbWb1*HGv89tbU1^1#y5`tKs;iQm{HO7Y-a77!1KW!#8&n z0KFF>Hf*sXEzMkW`#rZpdHpKb}sPZD(o^&Rq_Z7f)hj2Z_y`>H=LuMXXZDvA$iWUw$Vl;vJ_dpIKm)lpOlNL_0AcIn6bF3` zXow3q(K(Y?mZ)`>G)pt}WCpR6n>~$Mw|Dd`$dm?P&J@~BasI~=e`SKdc!?08nQ=G<)EB|A#ISTE6+ySbfRKZdze&tsRL#Cx^fj;JQg9@*Zslh7O~pz z!7Hj1>7)bYh{6@Dy*ZnN>}#%LR553+F@PxR83txNo}uWKx;`KCJ9`gen?pZaA}`EP zC%kyxl|9w&`6b?)h6k?&hc?DKMb=)HD-~0ukd`#nLgQY(oT&wvJq!-8Ilsg@^Uly4 zVi6{X89kPI4?L1to#bEO2aPM2VBI^B`T zdH&xXL3%{cT1`yEBua|g1tA2*YmOrD<_{8)wF<%82%ww^mj%F71u?KA#~y}WqL%yq zRTFXVJ&qSMt~3L{megBDGG8SmxG;9+Fh9whQXOKNPi&IZb3dTmyz5aAN3Id&He z!3Hu7dMjc>6aSWw$Tq@TRC33X37>ZSur&t2pujWm0 zaz!eXP;(e7>z`v6mTm_K!*=~q&A+C6e%#KmdYS$FCiCVcc2ntD*dHx_()`i-Q7imt z_J%jjAI%>_+9~`o?EM%nXHfCeDjHmLo-P0SZ28Udn+*TPUib1FT*VTe@d+%R6P{oa z*GMHQ;9zV55kN2iL4S-xz_Vaof_%`Ei#Y?KSGch5I=H+1@BdnTw)79YEV{s4Sq0Ki z8UbnHZ7pKiKTY z-4@{I#k194m)|V?(*<>)W-{Qzv_aQEGec4oKk;vec-T`Ee%i3cWu*)f2iT!QkjQb+zRb8pB?+p~1!wSY}Rb2I0arL5M~g#;EN8FzeO|>SiBlwJ2%^ z1r-ctC5h1yZCMOGp|+%j53DKr7j(sBxh^MOOSBY55>3TIiHOE=VUUL)VepYnVKDS0 zY1-q_G-IR?*ankN}&_e0*Z!8k+1DkM(qvmhm30jdq z#OX$sy8fB@^ykXO_%q%7@a!2Pn$MmEB|MH41g)8jMGgwW!1@YvEtnEU@!wE;V^k;( zYZHNiu`C9}EL5QpiIizbwCDE&z9A5;iUeUapBbbD4`&D1geQ`|#YJuYh)f3}9{n%$ zM@RSo*7LNg9r`ZJ2VIaY`C%Xe6QXVC@XC%0b zXP^FL5&j%`{rUAx=A!d=Ze{DA<;=w@j6Y0&_zy#*Aww4}PJb-Uw7a^4t@hmK)T(2` zP`VC326xr79Qh}mj9*Thoq!y`-mR>$=3hdAk3SN2s-X(l`f zRg$UtBW3Z-L&s>lA)OW{!6Lpx_B~-iBR*p6trGZ>dOT_18Dc%3X>c5R7FqdLXl{=M3J)5*JtKGPMTbu3@l1%Cu&(W81oR$2K)0 z{%lAqs7MO(5AJe=>w-*6oj8Qc6sZ4VLx686Irhin=Cw~I4^uKR&+4nkGY1Kqi~oIx z3qcK&ELS<=t#EJi$5RT0l|l#*^BYuZiJ(Rah+MA>9&i@n2_Y;iAcFesTke^ z?)sETUg+ah_nvCufq)y2CmXg5bES}}_jZ-hrfIEzE%|SHD8zpjiYYERe_39>c9Yn> zuZVnwJjv{YDOITuDp+C5DD&pzm89i0rm1JoE-qG=f8|Mv-0Ri*JVLhh8~nYcu50Wdm{q-wv1q$*j6=jz{t$3d^Z}0~dJXxVCOUrCSO$x=VqY^l5 zRQfc4!IWz2FT^}`fSN-6K{(28&LOD)7xg8mDrRCwL}oaCnVWM3qx;N|0H&ly1iIY1 zq#HC3`#oH&3|Ao3jKm#7husqj-m#{Umd9Q9C}|OMYknzz0eOjZVgTMeV}QAr|?^N zxjV;-I>4V zb#ZHjirBE`EBEfh7tFAiLnxDbsRdp zp^i+bNmIvKwKGAk5W7d@Mojx*C{Ab@{{t|XEovFFyiBlUxIu=1c^#tGA~t*f=k*)* z2<6l+sDw7g@>oU)h|BO5oQxef8UI7+9Tdpqw8VM**HpT|Cms4Yr@&)bEd$JR5lmzt zaT+jCa}QVKEALk&jd@T1=QUOtk;`&bozo{Nsu=`k>vvbQ z)(MuWX80T+wglZy>2_qPLZ@w+1a3zImJq-{3$`Jhg?mPY^epXi>0QAQPK85*qa}wypZSy`u7yc?PAt0I~;8ZO{=xwv#9paUVi7!9Z zd3mRUGk{})Cqij-NFR5}x|h;5aCG&biIoVpY@69(oHGr8spKvZ+BQd?^gp%Z*h!g9ALc_QR!FDwi!wOA`tA}C;x`2a;HQ0rLHexJBLJyC{ zxZy%$^#30Li>kI7BL7Qj9rj1&oW6ytf|a|oN>ZMXF^&FTG$|OikGx4?Y3DFtO3Iey z`pGII{9$t{pv-^k(pF4>mi3!yE@3Y*wyidtjW~5u5ZRSxm5><@Ti3`{4B~8*<%tU` zgY7Nt!C|v7>pi1b+++|_V;)OPBGo$rv*zv>akDh}9L|isD_whfl9zOnCf&I`ldf9$17?}<(gm|pj+`WSNkir2CPkGiM=5elMKN;}$CKZGy#D>ok5~A=-+xE452A(G#BxJ%0be<2A-1pN zCYD_21?D+|o6tuRq}p_fJG?IUpp^5c{AeXok|^?VL=cz9Gg$$9`T1!ryW7lu&u2eo zSD$~Dvt`Z~m!PK6>e)!YI7z5^)}0&1&Om?6#4MX$50c7lR$y5M0#}QVhPX7%+$? z40pPKT)3?RKI=(Uo|ue&&bz#EIZsQ^F)p!~*O^YH0Lb1EJhj*lz6D#D#1>xeD_>vi zEF&7kdkY*&vL;DqVhyZ-k^wYWvP4Kwsbcj0C$5T6Tc6282_jG?oiJZ$oB~MV;4lMJ zoexRKO;(weK2LN5FHkUXq=<4qME*ym0_xc%fujWebo+Ry=+@`E2SJc12NONH6a+=TdWAH&K#u`7uo^GaJDla3glJvxv zmhpwN2625Iz1yB1;)DFFXVl?jQ4B-z3CVH+V9w~1`)9f|2z-#jGG7aW;R7cgBR_fB zTVKm<;VxZqhkPn^;*V}IcqrI~9qt={9QU)$AJdi6_Vk2UR}0$ij7Vn>G;haau5K`_tYoeTOZs_aG(e>>GBQZ*qravz0O1f zZN1ay9$wUx7^pe-9B*n4=x+WMrgO#PIP3%d>vOkwhjV! zr%jP3-tRoe)-Eh?k02niE(NZb)Nvgm9lQa4$s)pwr#=U_R$b!s)!nGy9p8W{)ZIa9 zJYbBpqedkJ`fAXFn?YSeXsg2k$??lns)0|<*5E7MJEH`P*egh7cC!GO2q9JZX?%kR zL@8NAFihN0gCd+hqVCWYG&~DK@LlkJh)i?H2<3J+SAqYih{H+;jq`l1=#}c;Nv(QT z+Ar>VPxE#BM(p;y)Htf1Hayg*N-4FGLaJwhl!m5OM0;2jrhg(E=D@0H4>#)p;EL8(z8 zm`rQ;QEKYyG*Bp=pDXBPt)ZKqm+Hk8FJCLwi6IBI>hVg7*ohW^ z4j^b(DGDgWYG#m@2&xdnPSI&ai??6QmjMgnsc;unWk~byl!t#$H+FWjxah^ld$fc8 z)0f^SE>@qseLmhYKps^ckJ8{320f8K<%*wI1eiQttA(;&1+cQ~t7|qqRmao#JgPGb z&c+;YsE!3^uM0b65wmU+!xbz_)*T3g!K626;?9l$i~~Z~0Gp)wAoCW(qCyV_5mx;s zfEVVGu4Iwsbgob?)la5Ep$gL=?02ubwY#35J*d{}0VKPBsuDCFBdjb;VqEY1!eAT# z3U`dYPowCd`R$88&erJU>8&3?vPlxPJXtG_mVMtI&6gE9LUpaU3`3TP)s>$NAWH_!g&#w_Rh>vPnH|wnwm9pv_TUs`qyPk1Sn#c#Ez2Suj!8%gee}pB=auI{mN1ewO|_9>*#n zp+7r;Gll=w>*at_n}a9y>|m5V*+0l$IktT*x4pKL+qMOMQh$!R@V_lPpTWv$JG-`% z&22kY0CJ|Wr;TrzoshCCWT(S`!4fusI3{`yReAT#RyoJ@!slsBuOF4evt1q6KKUbx zP8>By9bVNbAK+`qZxaw4x~D^Ml)e6~iwABs7i_`s$2cM1Wn1vXf~MiFoM!h>!{9)O z{?k5g${LNEJ;x&oOH|hsZc$PB&MWHvgYZ~6zdy&pm%%sFF$m4Wx)RK@nA0_AFPMc> z|46@mZLhv>^9ThVJ&WkUhomRwq_Ca}51l-Ex@;!+#akVgy~*dxHpu)$EQ)C+!{EK6 z}+spPTYsRhv7{Wa{hom;fO?71hawf*IgmpHot@a+gRk>;(<+aO%+t{E7c1mFjI9Hva`mDg}j~+G7VR2X&M8W>LsIjeNJvr zy=0KX%hqT_3 zIf)h#oSYAp%gveNnncG4Bbhlb(lA43BJMRiSbjOO6NSQ3**cj><&XDI$|rdT_VIpt z>c0lXN{(1*?TjUQoWxLk3EU8f{8 zE2!?2=0Z(myamwkoMQt`IMk0`nqgC7zfjhZ<4iDW70cm0y7^e1vo2!4d7#M7TpZLk?L z##oCOIP%M)j5h#h+r1rU)JFjKzCFh^Ikd3YF_d$r0-1QQ<=C48QHJU*FM=d23AZE3 z*uU4j2|4+qOtIada;9Ulhh!?d`&6I{bcvj7}WIU_Kh3l{WCd^3l^{!+P}8>RDV~-Em+>3`j}wC*~3+M)#exC zk-H?JPaeKuV($1oB?GdD(|qL!_6%?+{qEi-c~2B#i<|eQ6KP$2Kby;nn1BNm0R#0# z(Q81SHMHShWY=Q>t1sTg(|Y$7XJv6&R_EgBBk^QujT#yG(D-DH2t+g0#q3eG;!ma{ z5*23SAwF6Q6bsD>RwxKRSgTvJf_Kup8+)Qw1g?36v=J*L^#wwz_}?HMBm-PLt@&TO zxJ7eeVJWCtBYYIEGHuWQ`LQ1Z}1pTcH zJX!hCoetwg$St=S7N%x)7&+w~Z7wWagMxF)Mea|W00PEJWY=}=B-R}kP4y&8I}6$4 zlhTyVQWXzXl$ewDax->dsxKIgRpc>s`^}yjoz-6S$ec@^72ND;A=Iy|`sih3j2pMS z(Mq$>g!LXEYpI#7<1H*$^0w)n&4u`6gpEGV+zR3Kf^Ul|tXP9&DYP2~FBd2r_cbk2 zBE^VU1z}48Azq!NrraUh8=5uDTi?6Gb#^DVY|8lqFX(&SmiVDCQ1oqeD~YlNSe$VA zEG#dQU@7DyxKtQD3?~ER6%KC@Vx|vDKDA->z)q9o%F*>kK)^u=-LeA4m_KevEv~X^0|F9s^|s8Uu)ACj!LXcA^e4s?bucFbx%I zKL(XEwq~H(S{zj<06Y~HYI~=B%DD79$vL>0NLZ*X?)UFYCnY(;N<_ZP)c)aBNmd+x zgf!sZBy)3dobGm4p0oS_bUN6wSf@bM&r)HEbevcc_3{ zy6^M-Gcac3M{6R;d6Y6bq37plbUpt# zjjrQh26laV-7o&5)fu!rN}Www9;?et%OiBzrsZ*p3|bzg$R;h1)?yIzC@nUL`57vl z+#>%(6P(=sTF4)#q=Y<~hC0X}qm{{RtA+fLYM9)TTG)Sr-eDLd^8`%2f7FVFEmM;9 zk%{?H8poKEXq=7t5$Xoa$t<9W`Ej}i)XD6fiTbgMcCx?k1js@Q9l1TdKfp-{Was&v zF3vhrMg}Ee6mSlN;$&QsY^Aj}hkkRKCxwBqe3W^siID8?M@4FQiI1Lq^?QRMA6cNT zSVx;w2#SVa5I>t4ToCxe0S$x{=EY|QGiF8{3;X4K7Q4uN!1ZfH+6jd-?)ntp+;2{r zDohikgL*+@@~(`&&WD?HkxsQxTPspO6R~WW7;CXmDn|*`r*e@n6$(}A?AI9yecWej z3#*{exiXy_T{3wJbYUlTPIS~TP}kWaROlA$U9x0R$;&-QQMhZ_y;-7LpkJRQcIE-1WiBlWSsRHbyIVs0;h)E-H5_}3%k(dcS^CLNlSR=)wIg{5GuH%Zp zz?LKvmh4@9VZ`;xXwbjLHJUZ-+Tc!2oXA>;g7bwbIQN@h7RTR1QX{87IYXld<4WlS zl=R5ol>txGyGpH;efxl`1Dqt&0zP=+!@_V+;^2x85pZYDp+v4|&1a5iI{@AVGF%+y z5cLv^xh+7akb*XffMCW;#5$ae#IdUI*yeJTxTk!Dq{EsnH=u{}vVFXEkX>61IiOYr zPgF=?-L2*f-!b!61%{t&vO0;}2NT|v^cu}=6vZdo&zPwXQAwZVT~JQ2ovoh~aFzWC z*QC<18SK>ZJr%522HnXlD$Z1nzYRtmM{!lL(#=E~Il_sbX0JYJw!gRu|JVmKzAXg( zG@q?T^7}OJRdFjWCNGEQmOGA7vIwp1J2%IYN)~~%pFN05{@wTQkgtrZ zNRVjNH7;o><1ya;ccafUr&c_mcy-$xeX;dGl}6;u%!IgKb$lBXEY$VEWbFUjnHTm& z;X?50`zLlU_ffJ4q|Vpwuyb{51Cxb|z$+Fa77fMDomjbI(=J%BsPUdqwFyJWai4*~ z_Sa_(9=>`agn}=e=!twueKENW*wH7#W36(Ee5lP?!4;vk$nQKDjP7m~$KCbQEQ$$m zh~Q|zHpR05`#7-Gb#g~V*=iei5jjQ*6S!ri9DeXmn<2Oy3YVhU+E)~XF7Tvk5@lbD z?Ou0?jPnrPNo;Eoki*Q5hMbJs#Zix`cKinvH*s%-Lv&I%2oH<)nym=Rxm=`ts3B>S zJzI>Y6!o|sb)6}=c*^0BLwpG3H5rC|mJ$|EBV~Cv8VqrrKZUGj`6zSrAd>MjP?&Dq zoSksIpyCV+rXw^H17M9G98*pRP^b)x!S$IuIcRpBG*~K$fHaG+gAv|yf`fJ+4qxd{ zw*J{>WHx-?FWok;9gl|+x4AfCd1tyksN*6sT!R)Y#UuDK58zWL377z% z;%*RJ@`ClK9FK{lRzEl`mut33jf5&Mr%_|R=2PN0hLV}AHoFTAw*%n%IZA$tSfX{T z&TLMacE{;k94FTo;^g|GoCLZBISG`Db8^ETShG2~5kGk2IJvP9CpQ-5B+xC$NuXSW zlem{9eAw(zmM&uR4$JE&&cS9bS_oFJ>n43~bgu5bLn>bk;9c+DnVJrJRJI5-T$eWN z4V?2mvTzZ2k(V`)R!_O9VTPiG)mpf3&%#4zDw3J16^AHh_)JAc7fB?D`RNNNVn@zY zY%{yYHrJl7z{Jq1W165)*%cHqEa+q;`_L+ZoES&AGxOm|D5jbHiRIZ8`xYmqxjGh) zkZ%3UHbYmK&OZPM|F`Gi3r^#8G)|gXrlnquy=gNcMWIcRX{Ln|ahzLp<{0v5mB6$xj)hDMS|&6t zGy4-g(iu_W31F^{#Up&QX(9YS!L(54nU)1rSdcNV3eQll>v}bRg6P6V%N|2q9UOPXnsrRTk#(CUc&8L$!HUjwx2Xy<_cZfh>XPhc6;)xw~hr>Y|SIgmcj?gV) z#zzGk*Zi9Cr`f$YsW^A>9AU2;ufk&&U&k>JNE3JQaMl@8wP3Pwee%d)mo190q8$|C{SWb1n2Fc1E=5daVEHfz>N3yqR%1A zA4^VHPn9kPapF6-(Uh>0(Th4vY4m&6aAFwQe8D|9E?`r6D73y<5(WVrweW&SI7+KO zMVQh=k<^lVNg4{U^9Ah=M+s*#CTdfFN4TA>kZ|9qRCl&~QLq4YZ<}MphQlj1Q62$s zrjdDjQYks4y=~(084ve{Ah`Yo7VT;iM1 z$JA=GvaE_1f=NLKEDUXs5#dz&=ptPemvn)q| zFV=aV1Lv%6MktvOV8pgY8N1*ZuCel4%`GOu+#(VrWV1R)EVc)b>|2}+AKAfpW=;w2 z%)`}L9gRVZ)l0-MoZd-V@g!R{v!bF|loaQ{HLGvYLIl3WggCQ*@w{AIh>UbrN23wD zo21j#1^GF!vsmSc1mT)L=4U*{iRP|uYv^7c*Wz4U4DP_sz zD~jHF5`uvOD=>b5gSOd<_b_a-Ew-yz)jX?r-L9~*7kOqFLLG4C>( zCGq3t7r%sXj}uVQ#fuojHY>v~zk6bL^SvPObB(c=684!IL`5a)f&V)jMa5aW; zlp%?D&^p`fz$)PcPw0l$A~LFQ(YW8|Q>b!P>}CAii$uvzgrjim#QIRMkXQiA@An;* zrIJOVUHQ)QAt+c7R^=cc7V@+HAj?BB+vHm|$BP(b+%i8H+}t ztUkjO^Po~ZJ}=WB@B_1S1}oULH3!~II_lXIC(ZDPhL4+z5o!WV5eb*3$e?<*iryg`Jn|a-WBOwHuWBztb-{R2Y9Wka zEt?;sIib(w-(3$&2xs#Ky`w_a7o!8S!3`aAb2p3tGn4a`JnoRdCZi3EO05{b-rYcG z(+on+BD2z@C#@aeT(-E5SN5U|8Y0FXHoI{DZ|H2_SJU#$=1AeNoIU*`Y<_TE8eOW1 zokPB;o^K?oko7MVYBt@gO*Pev|0QMwR)h}^l*CO0_u7!!_6Fz_nnYQ(KhmBHwne~oLb z1+~}=z=~3gAVW{+M2UfFwvu2a=5%8K1oVQsy+%p|lwRL-p`yqd?+YjyE@X9}`V%_t zI0No%CSY^hNr9+P(L#C=V>$2+D`odj-DI0hC3x#1d{M$}2pnTD%z;x4Ev0JQjmszUeKI2@#+*?lBZ zt)+7{d%7QS%@#}H6vy!p=HY8|f|=9Vw4JF>{0gmW02sb{dbZ)WZ~BAY;QGPQ-6Zy) zS|~?c8%w2#xQ=n1e*4CO&W~}=?{Qc6TM-M8>V83}EOCjp=#>oIbE32Pw2#Y@AHqu< zW);hTW^MOkX0>2WES0G9uJuw`bjIBGPkKF3RY0bdN$tSduZ~3^o`}F|gk&}Pit|-W zLItPO5-EYiofPrU!0K4cxUQP!a+cu`tjr~1Wo|xJ&Wn0(PD;E}IXM&QVZ^o5)x$z4 zjmB6lSrfzTK?bL|(Cjxm&9Gz41I=)Acxb@|%HmZ7YLQ40h4W2u2y1614oBkQ8{^!^ z!ndOfbMXm_2by;0qu-vO=YZdE{VYNHXn+M^!>894?&#&FZXPA- zLBfP)r33T#0yP)w#@xeX-HQ0k&8E4B$@=O-!^FAkb($I_dIv^{zUep?&X?*1RzFIFf z5VME>PK&Ruo`}i;S7r_uiDWwo z5>Yt`lE}-CX~{0fQ20jYf2pyWblH1ybP{%#QK;d4O(+Ec&l#gGKvQ96^StNZ-#J@1 zCtQYy6LEGEsp`E>)Gp3!$b;SkvhZ&4dSM@zPszOnieO|H=^vkHJnIu{y5wXHt zzir}N)7~9243K|06*X7&RMp4e9#5`EKHiwM%?3U5Ey@+_1oq;jeh@Z9@{&(Iunz`z zIKRWk2~+^cwn{T4HXL7#n$BanqAY^uIiTH5x;;m=hGQ;V1fIP7G-Qw^AENs_%dWk< zx$E_8NpaC41ip)!o!=?5qUcLDxz##2(`VDiMT^i^JK~%2LRpqIMAnX)*y}G0@X~B( zqacwvsYPuR7@PABczc;WOIQN9;~Y-|ZaT-afk!zgHNV-D2X-`XoQL+DFwIOn*pxnY zPIlI?4|)s>g)@KI{q8kIIu`IYYxRN~Qm=K}gBv&%cX(48S2@xZu9kcg*r3{7%Xxa0 zN*1BBo`0V`aX3(K-Ye4N{43728U)TXIDmmGk)5O}S-23Lg`%^MT}O$>?@Z7IdCb%W zpHR5Tz1gc4u|nS^K(RJ+6{qGOZt$vU}kj2o%R$7{8ZzmqVd&{F)gk z64@nzA~bhQMUim!tmC?SdY9Gmj_U(@9dy_v3p?u2HA+gp-q(bWxJvjglVTAB@o*qY z#;oowuLYfz55ME?T9AYrX7y5NJzT%*<1AzcFPV-W^daQ2Grru%0cKfQ#sjT&0%mjL zN)$b-_k4f&fGcwy*{fnDa>JO-r2n{FdFy~v=d+K?v;&LG67MZm;&^v_5gT-j^k@gZ zkDH>AXw35vQgZoS=0SUa+Xmw1jM*l+QgTfwN*sV#RV7nTER@?gth?icvG6!Gl`D35 z_@2bhNvOL{aLf_ZvVgXUM_!$-ezRGz;(hg!DVZE?$K~u#9Eca2C zYVrjbXBwd|BBLNYCEAOlndYTYaQcOU=Z!y<1xQ41;UxPFuapmAQf=jL6i&Qz`DG!< zxN^fesotO>!Gp!!$VRpH?zBjXMU6 zd;SQipke2dlYg-AMQBl{jy5R?mg_4aB#p*3G{TS{I48n{9^q-!<@%>XI68jwR=>v5 z?a@1ADm;*IH3{~#v8>DPAK;mwwVdO9%C8!@9?8gG;OwD;ZV%5P(=%^6jFcfTi8fdr z8k|{qQ5upR^-(l5s;9QLD)bG!1~(?Z2?=aT>;hfxjN^xBWcl?J^$tEIa0nvrMhB6Y zx5mcBPB_iFphlc^oh!vrpkO8G_*u2ys8x^cZp%VZK1VD|8vlM*j{@Qvrx1Qa|nImA9-vqGP-0tqq+V;9L*Udyo&9ZCT7`rCI znG+vjq;a~om2=knaTwJl+)5QZ9_QJ$t!!>18S3T)(fqK@u0L?5BX7K&a~)Sp?8$v5 zQ^$ARp_9yg&Sk0#N!0ATap10Z_6Oei4Z@x@ln;JI{``l*op;{EN#n-AAw3DEZ};b2 zJdgFw@gj6FsGsvJQOH?*pL3>q6fDAw_x@<$99iX}g<#P&=sPdMZpeG_LBUMA$h*gu z&BS@1LX;_pNrdtqz-&wQeidQe2vD=s@_smU0G;UVyhIe$zqs*&_f!-?(oAdcA!;r3 zp?NbHJaH7+T@lU++EKe$(1})9AALu>C|IQT9})Zv?~YNaf=0fuxjjF#*B`sL7^Bc> z$GD2}2%aWNw$sp^NJA|2L=lINxShk+(C;WwtT0q`mZnp)EY2162j6-=)`@f$I}G?a zYT=R;1z#i@=bcsw{G*So%Z|c*9E6XsBn%o6+>qNJ1=m)USxgdO=OB09WVzHouigxA zhN<9RANlU%VUss-Zjle^k1p!N&i!wx6yMM6(GTgsj8lK36vqKzMoNWZrCzLG9+b*O z?{_afMzw5D__E{Gzs7@p8X#ot;`>7Jq*1C?ocj9ou+bu*ER`CLx?gE2yQBaU$cWaO4BJ@3m)?)d1gJ;^MC4@;Aq?l}9pH)wVg zcQVVrnZ?EXHtu%=O=J4-Pe2oQ!2ypri3GFvP@)Sy=>^hJW(lDt`8Ol|f^h8b9#(i0 zoL#}qrB(%Wtb65Uo^)}0*d(I}lp^`GgtniTm%YDJBY$!?0;fPy57!r&Fjl-J(g*yf zJFbqq`5~Tl#mNZ%z3+p`h(i0S!==tLh>64lQUn&SIT|$|GARKz<$z74ZzhxB_~rBG zq&};-)dl07mqX*{X>S!&=<+xstBqk-o;(<=lqg0Pj8!E#rW0k0t$h*DDO zbYvcpX%YWqp#?gbNNk2UTnKRjd4vFT=cObJj$??1^*d1Oy$3pElVP180bqUSH*r?V z)mg7O)6X0h@k0u3*5sys(DW zG|h=t%ug}H|MRDH?xr#{VYI$k|x`xr8d%x zCNL}f-=NWNLh$126UbY9X9$;9-5vsly7G#b25@i*yG-e220OVK4ZeAO>}g$;`b<)O zbWP{$Ct8a$={%V#is6W+W86+L^xLp^t7+D4MJO3PLC9+_=e_aL8M0Mf+~t5!8UC); zyfiGPv{TDuxt7!3OD`kfE_;}($Uv(KY-yzBmShJXNu}qZevFx}Ke@`JR5!3s!5q-N zSn+-td)J5r^;cmxVFc-2t^iSLSqxxX>AK@H5@120%d2AA1gy?hy>k_5)nkN9r6I^dCm4UmN%<5OT?20$CDQe%b;R1Wse_>nVztbb-H$MIN?1~D^| zQo39YOy*DKv*RQNoDMMRZZFJh4U34ElGJ76SktNz+x*ro!Ewb`nBS24LdE0=8V61$ z4+qU*p2MV1DWxA&Wn!hd7%N&XZ=1tR8a~VLI8eG0jx6XQ^jam+vmPJZx z*<2p5xnks6#zep9U5q}vYzk@@Bc%(2xdip~?*aMMt5>z+VevhP&b-O&7Y|C6;xg}L z|CiV8fLcuEFTLEa882TxIm&y_z5UW5u84b%y{6}|*rIOc%_~*;^{0zr`C?dE&3^tn zxAM<&N&=Ie&2~F4y$LSZ>w8xtyj@HyA+7-svP!q}dg*Va#bE$iT62KXbs47qH4Z}^ z`B&HpQsH!5+?qw7RiBn$el82+;C^sO2b9;DH!n>vnK%Cmz%0Kp;Fw=Do5rN$e%2Q& zYg$^rRJj@GFIX-agCEa~UqGx#5fCmV1ONa<|B|h`o#l&XZ@eF#Rb>4Jq-9MFwgiTh zf3E0Za=;iVQ_r)>#b@vNlyB#yhR!qrNV!hue(6>bD7}1TAC6~;6a!b(SNMYw#S+mn zn3swA?kxv8t(srn_|491Zt3A4m=|L5GN4_IpLyIx`Xk`5?kKpw{6<3|NI$#_YW6GD z*2n_ME%UbvF~;;ri>PSProR)_pzF;`rVRfDAAeM91eNL26%CA%K&=5v-GVA)4RVms88$e|Z%D#ZsZ;UtuR9mHIPNsaA?;QmN+a^vOkwjWoVl@o?kWBdz?T53bp zuLeB?5~*ug6?O0i62g@)Q>g|%HCqV%abJXBMHU@rbFcuI2oAc+1UqEg;XIVr@+HH7 z7wkom?hbl)*TO0h`iEo$dK!!Hx!qg^{-dH-uO2kc^R=Q^s(UB3>RD;OxbHp9*YW%5 z3fs5pX~RQ}TE5cw;8pPicjbfkN2#*E;uYVY)Qa^wmg1=rF2pPqQC6xH%BTA!T!+4g zc9m)aL2T$SfHtZgA(Ws>MYKEcj*GRz5g_OHO65}H!%FI))Tj{51K4xqnC3CY3#a9L z%{w`*;fkpu&knExrOH7KSc=ERN@EpRfyyhM;fGg0%9qQ8DwRKN993&XpI4}!e5jQU zj~d<)&NmlPxK{*a`8~wd85KHJDCbMZE8c$oIDbggA;Aq$YALEFsPoQ`id01S^7!8Z z8z6L}P^~m-__=~!)*8C$d8uAp@$$7&ofvX}OpKKju@fx-9YD~oQWQ{lDj^1GiJ%Jo zK1HV$E#7`HUj{6Qr@~!Sl_AYJwjADf{MOy|5yn8zAHmk)pV)plxfvD){j2UZ97F!+ zhP5!_s!-5wzuDvULf~{#crf4ZAOwME3#^zlVS2R=8x{vqJyxYxAWMj0H7y6&hHltm z0Y9DXV;z;wwrMp*jX$L)w?jNLmKH0;B-EV16vAjAW|4><+-}y!uE@)m=zp>QHIv3k z&RQXoo~WvqrAq0tUdUG{L_>YCXM!*r-PH+J2{x1Df<*DslDUe*Oq!!f9kD5xB*Y+y ztx>d@-N1I%sLfoBs_FJZ$^tjb^%0VCgux%h^tPDJl0Hej70g#!Ybu%>CTn&&1#IVx zs=Qm2Va9q(m<-2I9VE!BFDi2S#4Jqx_yH@cLa9b=v?UPBRN;x?S)`x;nayTCHM8G8 zKU-ST%?=_V`#3P;moAz+bdcN}BDr=eG=UKXn5Y7Oz|2*m8#39oGm zw?K={pOoU}ki6Oqa{>%xRF1dX{QGtJDXC6+DYulnxOghXu;OKNz}{hm6e<&&6vP0Mvf_lQ-~ppG z5P$jf=P#e1{i2jo0eHd<8G`DH>=OXkol5`tuOF{oXO`1O$CR8&5f%IY^)K&pe7J>%F4*|#p^69DU#4n%O0;T_4 z$|*n$#2BXhTdSkmWpoYd_zrKUjwWNas+lGD^TWG|QoZyMwmn8^7P}gqjbiQi5E#rp68~Lyg3Wng zDO3mYm3j#t8^AzC()h#b9vrCR?H$#T74ETJc5Bxm7RU*nEtt%E2x#Z5^2_cRxBWj@ zJc33d-&}stglh4JxPTm!?tK&>^Meg%i6l%mg#K%MN@1NwxeT7D@Ww-a?Hc}Z?=xKZ zDGdwcr$2lD@~|kSkIUGK)7q|eDaN!(*GXkXVC(SCGGA zA_2lDH$KqLtKYE-h|@*^#gZgv!+9TO+SHPbgl0}!^pRnvp^7I!fA^$86FaYlOfWaP z-hEUZx%eZJ08B!C8TZZ&*89N7}#`Kt>nH#^Cwy-X#Xl=#mV#Sd56xL>K`97A9*jgiR2Di3+un z*7~H3z9;5h06?}DTJ&fbq6f6897z&89AZU+?b_F>rVWT=A#dKIhY%VM=G z(j(B*(C)6_3R?mY%Hze78Vw*JH8GSV%Oz`s384ra_$r9E)lBp)1}hty%#u&`#y~1z z>)ztt?~yPtUgnqaGPzfx$%?^H#J>={I-H7+Oc*WZt_ERjqL{TZhFWdr%t(z^5l*NC z|I5rmd0`1+02q;mWF>>izb5g3vD11f7z&_8Y2X+hfqNoNO*GGi9uoXj*iescBczD9 zHO_EiwZ*YtSk!-%4bZ(%+8D1X(qbp%!A$eF5+oQohHk1vB{e=Yo(!>IFR80$og)u2 zdk*6@3}{!!yB#mDioqmdkjbUNFNOx%D>ER!OPp`Qx(G*!Oa-B2?J&7a5Xmac(>n~W z45A0Ow;1k1ah)DW?y6Bj!%+tP&yU4 z9JOdxLJANiD`MbsoEe2m(zI$qULNeT9H@c!ran+hjauV2mM{~OJnGNg_?+f^xsAYsix}i&B)gvJ z2@(#v_b@6(0F*e6C9_CaMP9wm&IIA2{xSu1@Ql~w0h6#*XjV5s@;YzoW~@w5r42bO z(Qw{??x}8$ARzQfdXmETafW~j|JU&RL;*2g4aI24?%)GW&Zd^+V=&ACR73}&A%rc*^5 z)>jW1A%~YQdCiXTE#^<5GGGNS>JSbGKIE2&6mCj^)M1gS(<%T6jn*b0PoZ_BgL)KZ z6}U$Jzwf#ue=MzU#+JRLgmf;YS~#T38ATyeyu!i*H-0IoV#`E&8zd6#xDul75hzuy6W9)%+Y*OE06-TwAlYD`CC_; zk_r?EGdLyzI)c+d9xXb+$P}m}ToCrU|n4szX66n)pIM{5_x1G zVEj=vN&FIBsHhW~gGeN{bT26yDMU)=JA7juNPD+^UQ(-ivV<$jU1J;cB`4uzM4`%) z=KN^{L2ohI6}9OVS{qAvI6K0lL0KTCmP;I`B7*B7nUYV9uG8QFi#5I|QzOKpMxJs8 z^+MPkbhKsof&%}UCsLrnNWmCYOtP3M&P_;q$Xo@IGrKG{`BN%&!K32}L8FyaT5^iK zH|!_8*3+7*gzZvM>HlNz-QVImj{M=@=dU3CUNykrx57NRVK;IO~AIGlD^y z7#K1GwiH|W+rOVrUHW#;41+GtKJRO?Yt1>QySlo%y1J^mx|*BqEYSW`_Zk;yvDSmeS`SzYjH9?Xjhi@7WY}lVXNjFExq@A2|8qdn!Iz=7^{Zi= zceHlUH!#e`E@1(&K?%xq@RlV?dvKVQYX#0XZUmQ-GortXycpI01X3a6$$`2i9J{+Y zUjUS=UF8md8cIh{O%k+O78*apsu7YN>iLVOi)p^SLlzhpjH3_&w6y42y2 zv{?pW00J=B1rrOZ|1r(U1V*a!nL>v-)4rc7dWGb+26#m;;w$>to5ML+sFLoZQzMHk z;+rr3eT7^;=h$vm8pi^y7Eys}9y=9TfR;%aID;M1Y+)DCK@T4U2Y0Gr$f-O}7m-ZN zqf9b0QOsn9SDdYIbd9tqIT%#PJL(WEEFc4FL>8TIMdHJ*hT@Ym z=VXSfI3~wd-_cMYg`y!x>KrAtQ_PMB2+0JSz)3{!dSw(QdyJ;VHPNP3UlTVhTiO#n zM514hgp-lO_Z)4|!cF+j^=xH3A+XUx9NoKO`;!RDA(%@##++2*B+e+*ODHC5=Rfs_1G(6jwt}qE>mUx=c6`Qm8r2a~9qLzM4>B>@ zv;)yLE2gaMzJ-1Q#}Kuw+Kv%GKKKG&pL{79EfmXiM{k3Gib zy?NO1=1&Ws>Ym5Kr?WG6&-$nnk1Gb)az2p*PBu~0Iq!g2z3J5%E~~_BR?BBKujsEu*6;TiXPHKv7@{={f3&2FXos z_5BL5l>Jl_LOCEL{lT7>oO47lI=At;>Ns_QjLk1mA$2V_Sz#Vau!Xj)0|Ui9soWl1 z9N}zxZ=omi`w(*UPxn+(Vp9oYU~9S(7tsRocxtwgXd@U-+v`%bq+B_mxd&s9s|GYE zbW^psD1O<$uIi!2U>ZN>(F1LK{Hcv&ql+k+@pm-Ol|Qul#ntE)bn92xY|O%5>kA?0 zN>~rDCx?(@tie!HqbZoh?r0GmHN!ZREW#$GN1UOuQINQxbX4*VyE#CVl{!{W#Vhyz z*c`h*b9BbtyU?r!yBXnhW=dH-;cMr7ze(nnAkI_<_#yLy5M^5leBd#UH8q@<2si|$^r?F=5Q1Bj<`Cbhzfkrh z{G?<}2M@wb2G=?pr6L){hNR>n~nL_w(#nQL|6;D;YCUG7@a4-E!#QX@?OEFV}n_F^tAq=XJd{-LTp2*2_Q%BTvy zL5-~oOyfl*oeEK#f5M>pM%;@oL3MFUCR18h7Arb0#4gn^s<3RO{&)RE6B+9PW1hsR z0coWxB6x<5t9vY9K6RQ0-HW3ISSc6cR={cN(T^x78%FTp=rJf2jurzAmewA4EEGAB zD{J;vE$;-`bhS`tOZ!iVwS;&(8sUnhS3RIB#epwlPbIoCUH+n;Ix#dLsMmNU5IG2g~zoYYuAIs zI6nuPQ3;hOu{>ZHJ8ci)c)a)E-WPBthF;SQI#aX2M}{>@wt zne*yT2-QIh(%}naB9k{{Z#k7jF-K9uAay9>aM>V)NNYi4VaW=S@BQ=rHoJ$z1gT&d zM=f@kAVVb?EvGT{j|s!4qP}!4x!Xdf4vM&kQJ1zB2D)m2zfYAa`%Rct+1>qzLsgjrKo$faI(&mrij>b%u~5lW8lmkY62xxG-i(ScQW!E zu2x*y4cX?NMr3PinK!?$z9+DOj9^X}4tp%=RvSL^k3~io2q>E$3 z5%ypOIFfb5W0;x9CuJ}*1F017;JXC_rL9^7ZW&t5 zf`=I2!OxVgms<9}i?lW|pbD z_iT#Ya`&LG2hn3#DeUOq&Kc-gz91kXx+S?PWHEbN{k$ z1L4duml#*k4@*b5&U6K>bviqY-N3m>{L3W*b2fk%<=hIOEiVB|Mz;&10igMHQjlUx zT127M*7Q@YDlL|^y!v?KnwD9DEr;#(MoHngi|9ew$)~fw`2A4!?}xJOjQQ_}vVT96 z-J%txSz!N+tP49>e$ToGuv@UWLRGy)XqKF)NItIN5dYNUK0mOlOYkVtAZ*k>jQ_1ZGo#r!e;*`a=s# zOX6NWWSWm!4IDW^l-3)2KOxZUu@}niY~E`sR_#APw`;YnUy77> zvek~A)GzTFb@0F_=CmV5dWjzsTCQjr90lNBuvmkptfxg$3SQ?9{;|nop+<*KH&@pV zV^%vc4rAnB1AliyXstAlJrK#ANmc)k*kO|M3A*pFA4taJelkip=%&gM%}`Mns0hU@ zn;crvP;DzvpC48@^#YHe4)h(GrYM(c8}h{t3(N0dvB;CmlV4F!p7sM>HOyulmyZ0D zyF&L6O9e6#jLg+Vo(_}M!#L7!-hW9|7g73C^@-bY1VJ>vX$hAf{@gvqF0HlW-ajsH5Gr#+^RdOPsgV=afD7E0+^Q*Jp zf+RK-Qg+g*Vr2Jd_?Ga+k*a!Jl`K5FjqSA{tE40a~)ds4%f% zPSwTMGi%PsDy01Wm4eB)xpuA~XM1h#$gLUX~b4I28I(+mUizsT1FbE>wbY z@0RRLmmTcB9@jy{*9AzS)D1e=ecjwagEgsxRwU`5zsWo3XqoV8>fqIR|DRXA*vHVP z>;t-`&tM2Yr=II9HtHoCh!6->Wr!phu1|1m9ZLLy$z6n!V9M)(SgcXYK zZlbHOrs^BoG;opZ>QXms6B)VDK}M|NpT3C{oBpXe6lj)%df$m{md|3i6iFDnJGqO5bdxpSw*C_NTWTZ7-BX?Y}5P{B$BlmY4Iay zVbnF*65FAG8MEet>U47#GZ{lKIrF-wG6GU2bhh{?>zTN%bp%Jq4t}mi8x`E94%)j( zy(=2Y`&r|oq{&perl?G$LBjQ_ArkSlHs+EzsCE2BUrs-dZY+CypF88(ki+Km&zr zDQHsXuUvxYl7N_6F{UBdFk18;8AI#mZz{YC@+Fsu{C4M#t!qZPbtqt6+&CU(L-0Ci zgr*mG46hH4xLGx>AY=L&%6QF^#~avIy3Xm9pUC~7>Sz}^L9rW;O)FAAQ9Xk;n!EI5 z+gL6POAEv6)Ek0CJt(Y+yRXlv?A{J0#97y!QXpyDrW0&~G^dL?Z6ud30zzIhUl9MY zyf0p6`|0uqAcay0sD?y`t|=$YwAAhoTWg0a%R5Xe6AIpMD7dn@wvAW?mfuOse%4TS zd24IqhePB@U*6l;%}RgOP&#^`61a;^U0Pk=VcO9{q#b>_oML>xsr2SEAhEsnKYQ!j zYpYGzeAQIzdt?b+UEW>8?(vhgr^^u~Bw$hhsVFIN0E2>pEWAS*ba5&EIr^Pz28P(1 zlvaQ)QfrLs5fddXHUE&?>&_!=Wz;d3k;V&Zaq$o4rQjgc6~vq<@_>L{$dNW!`?PnC zQ^fcmI_S*})s>jM3h(xy2Wq1;aRX4sNd1H4VyPNu6wh&egY zP`u$F0RhW15GJM!(Jn6&`mMQ?HyGWJfHZ|ZaMz>V@jm^>An_s!<1Mg|nhNj0SYeqb zX%e=q&E0}WVO!}kxdSoLeTgHNjQJc5PJhA~;}iYlT4fTWJbia8hF{buG^VPP zPv>b}O*fsMklWaJ`OkCLv#YZg^vnOYy@vxHt^VhGzXn8p>%RBU=6}BD(CU#?`M2&n zY!|fp8}+_nErAT;O0p7iIk>)5msLr*s75q^gie0l{&cQP>SnYo=@5Td=zX0RCnIiE zuq$D8cbZ0BZL7eQ!0Q_S%IKzl*=aj5`8R=!2Ft!;ldDVC|uC>!G; zViqPb4n`3@YMFLT$Hz3&B*ugGRbrr}Hkaz{#Wq3VuVa~V7b+?sqDIykT!6I7^(inv?-E@NHtsg6h{72GC-z~Wn`2_&!MWF$Rjs2^hT zf(iKxy8_w)swfb2cIT|arq~xJG=GRIhCe7}G7$Wz`-!EFk7j^AV?i|fw8;&i9%97{ zP6*-nHoJai;)nvHLYkPJON${qJzeZM#zDoQ;Tj;=v@%KU+RV@|;L zpIkQ&X4}EUIqRA>T?<~zz6L>BE4DZ6AK?GDdl3IfcZg6o#;0(_QUKY<@nF7p`(H(w z%7e!mj%KqySavqA0^%YQ;@7JT8~teaw2P#8ioJbInK+fRfGC{Bf!|EA@DmC$QCGO; z`%=rj^`cqXZ~#zCJ{daXk$J0|D|@_i=g?eCxJjS}<0$NEKkdeou`Qp6%ukX~HuhkI zSV(t>#J9Lc7x7O1UP8%kTHPi(xprJtb$;Zna)M86k76sY60O2XjWq~j_R@@@Nj23< z%iF~CqZKi!+A}GVR|^w)97)yyIIm)Q>!g-cq0XzRK$(c3&a%83B$j%!YBd8_wncLT z3kM$e zs$**pG~r?wA#l#x=c28=Z3_fV(M$rGbWCEOa%tqQ+>9a~wU)LDWZb)2>N8EagCKE? z8w8e^1IgZ+3Axz$@y$WObyE4+LV9&dU<{(P@8e;?1CCqSrUCcKpQ?Y?;nn#pYAs&c zc!NC_Z6Tbwgwi2_JJI4PJ0XbYCR^k$C^<#{%7FncIa2_I99lZU(pUqCoHf{u97e`q zYqM$&BSTM45M2;%MoT(cM+ z5y+=;*5S%S$>VY^$u zQld-|KiA&V{GHfO^`JD}eC95s&U1;D!Pz^z2y5KJ5s4e*BJ@W^O)k7WlZ)XEc~O|B z!7rq2mHkWE3=gO|dj!;>dDsDQaDcW1xtX$PLU1l1g-KoC{7u67pOGRqadU=^v=ap4 zBdaLSPSe$KLy^PNL8;H0Yz^Em@XjXAhWI>{6xqw>+|;JoLxC$|*G zq8tYZE7{#z@lygdL6d5%V`KZ|=)r>rUxQ)o zPv%Zl>Q=wGYawMdmGAQpRVNfzfsrt5$HhgjW~%3#;35K)Yh(mR*doSVy}k_+8~Ft{ zXTUCNV~@4hUXq0qH*PVH7KTcf4AUBWt9ZN1TS(lBh9&#M{Mr1m1s`i^cZ<2%?9N5p zA|rq*0scoM*FtQgX8zU=S3lry{^`^C)m6y0f28r&?*E|etc9cXY|qr7gI~ocD0Alp z{3VD4w{9|}f9U4*-FvdsUmD%4du#zmUh3U@^=j$tY-z;HIzCe8NZI+Mhg5nbwS{s2 z(vr&H$Jnn^vnLE?8YMQ>2ueGR{fxu7>s|g^h5h@6_jjbg$0Nwq<__QbtK$E-{>$CsDV^@k zRrfWuQ~T~+=59hk4Fh105n&-m-h{YFWDH+zZz-RcHz73CgWw)-!er4gnGTV=cV7)g zIG(xyMbEcg-WeSUK?@8-o**T-1G$AP@Qh>fT*+;@j5M@(A4|WG*3xE$DoD`;R#`${ zcuGq{Rbb4e)Flr)QHoCugxCJweXkD3AnOJ^)R!TulZ<}i%rO0|T(5&fe82heww0?+ z*b?ZUVk$6qCgQXnpLQi9xD9SGf0g_e+S_Scp~oA`-yI@)a(&})?-?%sT(#R7F{mj} zc$CBz>LO3cq^by*uk;Aa&E$??!04aYk*Va3QsBKsP5)vZLxw%@Q4lx%i=RGwCn>YO zHBN$7zq-5?s;_T-|JhWXT;F0~yI}VLdiv8BAH7>&{N~-Fgqx?MB#a;5*bA}f3d`w< zea=Lg+s9+4ZvgrpKW2c*fm?;C zaq-wi>V?vpmhTuh<0znxx1Ln>1KFX2gupZmOqbZc zf@0v6MB>k5IpcXKNz^NszvH&`gN1|RJAaewphMf50LlC=p%HtI_)Z|7>Dr<{lU`|E z!R5a*BxD6qWgEv)?hk)ew@;H#=mFX;b0(d&bvQJk-;fWP4g21 zFwbAguZyeU1r%w(86v+GK8^Ya$Q<(5We?Yi;oqNM;XDq1yy-EE7_6?Qfi=2i#QOUm zI{V%ElY8@DKmX;y+h4=)FWw?YbRQtCzt@q^6nat8g{ML47;inngx34>-T8k#zk^>(`2U4FhF)xEuG-pO`|j|& z?KNhyMP|rdP7>>MNUxo?axGJsK_E(g!g)Cb5AJ;1Ip`c5gMJ6IzskR}mHfm1e)d+U zgTlCuj8VQ(W(gr(c*!gPT|kWv$LwFr^MB*8am@U8{CP0{{L}dKeD+{r_S4Qjs-Upe ziofG)sTDs63q%?w-JZ#?0+$H7?A^z4LT0|ka>w{L_cf}uQJe(ry*@gH@gbkPkG|qqHC8z8|z@Q{S=WW|v! zLi1{kku>XeM%tU;#nKtOCeXmL$y4Nm^kv4e$p=4S*OW}+4E9VPs^#X%G~G)}U)MWX zel+2VwNcNw5*nxc3=gq)$-As`@xArU)<6lNaC@m79cU=@T;ZR-@N5Xm3bFh;s_MvH zL^=I+UsNy*_!ZW6C|}4MFRtFjYQ7o{5K$Lj+>LdrPvdW>wpcWdz(|t)=-z^!C&qtq zT3AfD`J@2S+jwJK{rxvy2Ox=N4`8BDnvUzme@ub}R9Frt>d{d(G0RXi47_xC?$h7D`-x96vR$%y7(sJ1dmJ_yGFRO4Q<=c1Jg5o6 zAXz-NoW&>#)RLCL()l@0HUbx5EMK@!w#o{r9J2{h2Pz0_gTbh?mh!!(t?)U68{XP1 z)ENjo^V)0bDDj^={LjDnpFhe$syH5D{NRVN(+4$r%Mk?HTD{ka;3L6tuQogfF!kjg zxVy|;kR;I|GQ4Ca6k-()oB41kLI4xQOG+^7iaYP&*h(E*YUQN9l~|Fx5{4pv1$fN= zVg43zIXUF9b_y?pHv&|*W&I0K+qaoW#M}a;rGCLLqqjW^jr2Dc1o*qd zz+igXeU11juqXov)489`cnoZEU}wT;V)#y&7f4rIqa1>LOf=z=_J}ViOKrfEzZg3x zG`C?@%_tWzk+sEg(eZA~GQzDf@EewLgaQS`gl)7|&1EeULMdtrq2$+jubeuu$DBra zU(7LTA(}bcO(H=~z&wsdb@{4$sb+>F z0)dUJbfW>&BSH$oxgj9{Uc=bKCk07&f;RA*bm+`?7Qm8)HJ>TQWUIye4wtFIzA>=;IYoM)Hvg=m7pRO!_k~5 z3L~YbBxEKb69gKTyhw(aBspW^NE(i319l)#LbZr%1|=c^AR=iw2a=JFb4A8FXoRJR zFhFkrCRVYbBIxObMK-7y)?k?gJMfdV3!fxRk{|)K=9KqE+2C>rt!Jv5cr95x-2ZDd z-4DcnE`h01<1kG;mo#K`Kpn0bzRcGlfn9?OHleRq=K|zVLjb;gBpFR)$RHGr%s&jD zMXm79PJ&d|0Gu*2jL(xv3%$7O0B1vhlgB%yA+LABM5~{7xfErTNUIUpbw+}AF5LbA3#v=`)zMQ`n zCHNZHu3}zC^X}`|-ZV7N%D*Gcp~5#{pFy6M=E%`1*B)SXJlECn8pusFPg_oCp1mGN z^R$rD{A2B;72*7AH$T)|tFi-mebx=HYv+^0mxFE08*F`t7qz0_`?*T0*oZ3Tk5{p#}aV(IQ(MvTv^ZLu&IzPx)p?4DfC-}~&Y zzWW1>YW#gjPgI)kTC_lINk%SC(3RaHx-;{6)Yv}U(6M(M7)W0QH} zi*8fHK{ss_fZxeA2tj|E(1fFoE>3f}2vgCBb3*SbFGEMDL;nPxjh7IQh=&x_EUW@{ z+N(x8>00eAD4OSyTw0Rlw;^qPNfU2YMWGEs(9EDSfHxZxKNRT>1u-(gtuX`HA8krn zc<~tUjB(%xsTzq`&ZSO!1^2BZ@2a7W``cj-7&YOO>>?@a`MgRtrK0fSU*nQ3 zX9mjTGMuD;?nuL&HEyZ(GQS_hD@@hP(;n`gDZ1%xj_sxwNV^%{iM}63$zMH+RDbs!dmnrJi%IEDm~annxSIEj$;DAZH5GGUoV_^A z>(5nqb=;!^LvJTS4XoY@+u718=QVlV08USYz(p;WHq2^`Yw=Ampz zR{$S~87JixOquG4J4-^SbSrUzK#JlMvZuA^i8Ftdy~Mn-J5YRk4Eq=Nm}yPd`Tl5m zG#VWBp_KmATb8ucR?sHySj4iz8D1p@tuYwfx)ue|0moqAo*P#^<;Eg^>8w+u5~qwi zyo5ya4}S^nu(#4)_BrwGO@qu1tf-hW(6PZ}hSuMmh?G)2!-nc1>!IPWBO*8_NF`;! zuH)Fq5lM9a8dN~91 zH!H$(fSReC7yhKfn_uHV+S#AycB)Us`b^xDZe zc@DnU>@v(9m1`!^H6pKRR-``h+O)`G%C4Uy@5Yuq*e`c=RPVFGVF4Y}`+~*B7jz;w zv(feSCiBVl^~Xxt>#JrXOP>B1_Rl-|i}%hwDarR#ID(DK2&Em|YIEEj9*--7p6j0~ zN5UXen_MP|XMP?GkDvf2P_5rGqw-g zmTq9mYz|hXnFZl_Y#0xtR4lg}q_L;XEiAB0WIU5ybT?`E0tu~&+Bfh&jWE>kTv$LE z-jriN+-*@dF)tt!%LM4t=PAj|vPA-_1Iywc1BzePAhim_a&V1o+5|0|C>;z!u?XHk zncn9x=|746Gy5e)HU@Y}d$Pi?tFcxRXs0g6xY(5_rhu88>#xeo$YaG3h=i4xGu4Zo zEJ#L&GIIB_VOctSu8v5-Q3rYti~3S47NeaJ65sn=_2Np*VfP$a;_<)Yikyx&2OCiT z5BWzF0{lo8JR)Zm*@QZgqS7S%JASWt7gcQRgLW+J;w&I<`^QqwNHbS`;*@rF03XNr zKcXSQk(U?bHcuFlXf61_FC4R54oVo)24mWLbG*YdNCB|}Uc*(inyM@b^}`5;uk#ND zH#*HP@IJIwyQ?GAunx}2ydyVA9x$|$R>tV2j^r>kZ*?fdX5mHTh11?(O3Egta&aeo z73~Z4*p25_hT? zSJnLqi8{JC0F>k)vm*F7>@8LMe;hr>lAT^K%js-)%+9rZyj4mnZ8cejrHFSyiWA$+ z7hLc!l+$q$HJnk2_kgX^x>N@-HW&FE-5259J*Su{7>rGwSS;u`4JB=HftVp8E1D-2 zSFNVIm$0J4IvDh#o4{JG*@8HY-WxXFhzLwzbC#*G}oB&+yS9fM#E$rJ!P_1h}@LXL8yogBIHXNWEeN5|}vZw?Xz ztX?F9Vtubx5Vm{+Q`Sl&O}1YAAlI`&le0gynZv=8i0t^i%CN|kXU|;!V59*5CK{bs z?$s_tEj3n?&Z>zPz65I%mB!q8M>!%K$N8&(_0E@Ma@y<2hQiol4Mu65-x{hP?etB8 zUoYR zrtI{*kBJ!c?h@(Ompx>w4UUC`;68vB$0|j_sCsZ~&^R4U2z}?zK)?Bi4ujIjMnWtN zFB(g5M50rqz(M>Y4y&MaSWhCktt9YBgcoMwJplkF-f>>y3N7i2I4!Fi4_l?HS(K+hl z>um*+H{c%Y8~zv|!`$}O!}NEoW??}2rhDvwc1R1CZuIu5^}2U#Uh|)^wWUX9#q;f$ ziuc)5URu%mu)FWIsH0p2|`5V?>?n$W=&Dh-(x2 zm(}Ri;ObQ3Tj>-7DmNrhV+iDN?*j7@nYlz;Tv38->D%s)&U zirl614NN9~9uyL^4DIrAxl(ofkni#4`6&-KhDpZ|GENORFQgG9&$gSn?QK*!Ze>8& zAM=<5FM)`GmfXq{j-0eWB3rmF;K+37$wiu4!k4c}h5X7LzxQWc*|E4yT0!a18YliG z+SLU^SQMHlU?hp|kT6m;|7wFiQP%}!xk$%Axow)5@FGAy62)yv?+AG!O3-OQZ$8`j z;c$EHfA-e5*H#bhl*A5%A6LkN$hHdkbeY1SYSdOD7|~abu7+f$Ejv&uL7=|g#RHx) z>FTeWJG&$6L^!U|bRm5ml=ZoFtL&E-Efu8#@mX@emkr@J{v!4S0_<3Q0Wboh)R}g^ zHvya}PzhoI`vamf>R<*3WgP~El=vrP(HKX89h$nLAfbg?n|43aB;epzU)A2Nji7`@ zdPdYa8(gW%b0le^l>%d3JQbk^Zb!^+s+sFU} zgHFCV!5Z+x(cJZbqUk6yHgdMuTZpBg!DdJvVo&Kb51b8rBWI!oI&zj}u#+MJ4Lyam zoMaTzHkd%b$W1UZsre-iTj+Fr_0E&IfULr+bxXz~3lU9FLPwNZjng)V_?}ZX2PQMD zn2>pi$k9S1K@-=WshnH~6`3~3X4{yW&NrC-+Ra*hVTMTi(5B7`vu&VK)_j+7!Wih% zSZXAw^5c6FQh^8o_3W$cu+^Nqp)Yix8J&DS9IKe)j!f|i)&cFWW{2%`9-+($Th{;* z*Ku@!U?@{>&@`4>)7lJU3MmiNx@q5T`D4g0_8~K}DA2gvn!U#+X=-vHcG73WtF8Tng|qb3*bQ2$~_ds6nhE zkgiThQvz|c12>;2y5p#H)V+H7DsBv-7&Y>58eC}7l8%D3In^lC&n7n5YyvqS3-&Y_ zj~kBxIV&c5^TUqc*EgN))ML_C(4gOE6fY}1YQ-xUb>h+zl#Wie1(P9D(bhD30M!Q_ z3=#%7EasLS@pwlROB&$_c%FhA>Qhfzl0nxtLDplML;a&vwYOi zHNB2gIv5hBlvjlJO?J=PrFiJQ#vw!)O(0{!S3=Yq^3`-pM6;(L_Yh28Cn8U!wS=W` zGDI}3@Bul9)f*j0DRXVOu3nlp0FS=+`kxpLmVkGZ0E?Pg4~(eiEu4I}yjFUl>QlV_lD% zIkBOG)-O7DCwHegXgQ+o8j`j=PIAQZx%g05FxVOW8W%~{w5f!5w%XCl0T+`-8Sow4 zwfMSiZ^T0m_X;lUK%x$OHy%j+6;j+vNGQR~Kahk)WtFv}YJO;kfn>5C`4$#H=m6+? zvCe2rAF5!V>o;&s9~Y@I+nc@suw&a6g`m%xMuUbI{R;Zin_NEzDHQ@+r$lwvS^`AZ zp(zetXaEQt(eH4eLcLWQ*^vkoZaccKkymi_=r*LQJG^ufZP_+QScnKQluEYNKvrAg zwaqd>;PCKBPGVdgx%YtlAqrixxhczujMo&=R_*QHiFwe^cx#2E4Oc0pGaifc#cBVN z#jyMG`r>qOY=@uSf5A)YobQYbC>pBasygK_U2q_boMo8k+kvMOyri1}Kkgl&?Je_e z2~oihC+J>uTH1F(7yYq%XbyooKHByDIuCH*7&wE6wrhQk?SkPhak&$_ z6A}#ndr?p3NMh%I-_r+8>wN!neL{X`l?*cGwFV>7M&!v2;_^eDCqldE@W1Wh9v}W_ z&7s}cU^zKKjmO6RorI*t%m^b>q^M}1Wf&C$kuq8sVbHmNgd4J7<)682;|bA->i zngss`850v3??Uj6Zo`smv$_y+&TS|?WsjCeI>A!f=v`FpKghL{Ay`|kz|?8d$gYSK z4|^&|;_((Vvo~4vA=l z&`GW{wG0PIsA3C&ns&M~yk(%L9QXvH0g&L-YF!Ht<#hEM7qc6J8xO{o;OOFl*K^!< z`f-p#s3kIh1=sYsFbziax3Bo~Q9p2A{>@ZA93tIpS{VTZbU*Nhy zu;Ed!cZ{0@zj3Ee33X?8d3Wvb>H5yo<=vG6yb+t%&YyKpp@p2mAxDhHgIn3%-Z)%& zvb>!mis^AV9Gq4mSx_bZk+}-@OY)YTH}E|l4X}SGHoVH+2}tklKK?3i;Ay}Q-{!xH z4dGnZyS1_N!?WGx|IJ%r->cCZWNUpb#+^4B>0xf^yxNY|kS?R>+m`NdI`^U>2N@G3CBl@N)b@~Dj0$%FyE1}pnooGg;5=9Keli^yZ*;K$B2e6^WLV>mJ$&p!- zu>_6;2{=IjDm6kbpr}W;2@I^+@lb-6oZ~c3r-a?!KfWHCg_2C@^H|k**!#JU_{nLz zjUm!(Bn|XaulQI<-u29RE{T;w?@I$c9b1fxcr|K+BOXM1Yn*CNFRuEh$E#ogZnN51 z1N&qg7`zm*CGxSW=(sAqWP&c*2tpT%1zU%;SO zBbfdHvlasMPJ7&#v+w=U+S$b=m`hB4n+lvWUVm^waON~nIM7^lXIm->Hiz1dqR55K z3dkq~uZGbH#*q^cA_cAuFRh*oGasKxbR6RvBveFOO9_J73f@u&<78iuD3i|DnqX!Qjd<|U1*;nCK<+cCC$n)l5xzTtY|GocK z|GU3iJ^y9#t-M)E{yW=|%fM&9?fmW6&iBVVg79XxO%eGUm7i3ZM6wdULC-4uy+R8x;pXV`G^7Nm$XdJMMf2RGOX{&OhKWu z3Ov~a$Dd^;N+Lu=0sKK107%R!RVy zLJ_ggTv)-pJh2&eeGG31Pi_>t-jMDV;xNe6_eH4cApW@EwnkVrcO7wR&4qUx956rZ zo%9eNebl1|Anaq`tlJ74QV+ClTn2E^cL40pT1>Rmt@y8)zTKM(&Dwrk18U z`3byeXD@oly!ne`oV0Hr(I+-9>>G41=>pkpGGmeTfQ_mjP9(C0PB`fnE>aHT!4E*i zx|>cZo%12|J%yDbD5~XnoMeQh?FOuz0dz8g7yKSn-SJP{Cmtn~$j%1L9G>F`3WkpQ zHw-H8CWXfpSsh}NLf#KGV$ITeN2V)fWZ)<@R+7D8d<62kPAJ!?;%KijNt-*8c!#rNxBUOj~?Gbo;P94>SWk`$&D3kQ;ynD<^~m8p?4In(EfSv_%=3d{}J!j z6%4nMy}-EJ$iBEt z)$lf=7)R7G4TU5HE%uk+l3RlGkMb%M6cp&Ql45?1L^z|fR8mFOHP=g| zf$AM&;K%8pLYC4~|4K|^N$o;1B%HHZe%&T2&;~pR))ZnH?61ok2oRf!0}Q;;W!WA> z$<&t)5aE4|cHl*~+h7MGxrAh2^LEPafIzU2y_7gzbE_nSkyzh`_H{8QQPaO zSYaQp^TC<&07p+3)VxrfeUz}oOJo+4*k9|w^s z)p2LgtKr~h@nMu3D4q7v-u8yv%_CU_PH{W|aUd4`JdUZ<_U+KTlocLZyoh=6R%uqY z0yuk zscxW?Z#c=VZ3x?>OgeYcGCB@8i!?&M1nEm*>}O0#o2kLnnSh0Gc({-L_TA36O9#V) z^I3RJI}4w}Z+bRjZcWD;KgE3rni}>=`yjl26+fopLTp@&_++RApXMF|9}d>N>c3z~ zCwN)uc?N|nbq>D&boOq43~Hh+DQOd#1LQC@;N=(mHGa}b>3bsnoE$uvViUY3hsO)4 zal8cfl|L2PR8zhS;&k+G;z{6@G71t|VyB~ckQf1DP>@J{qnP%G^5GDdlpdeLuN{UC zd0~gc^8xq(|6-w;t=L=S22BCU2&6B_8Co7I8+ph12_L9jA5y`v!Geje5(s6mE!-J;78Elw+^q@@ez9Bl0YRh|*)ZZ|zIT z4bmn};7x7Qs?Ulbl`fNqARthjlGF5gS`3@#v!iU5T~BuDW_Z0Ru7*-ccKE8-J%(#T z*R$ZWsZa98TC$#*d7zHIrm3rZnP`hzC=oucjgJ$5sko8lrJ7N^M_eYO2f$v6`DPu% zDj~zygqXT8bLHnL(~+#7KM}HYtQjGXX+$n>Vt<0fQ8^H0X1Pf@ka8t!5 zxL+jRFV%8x|8aD?V(Ouw?kv#G1`6&=F}BI^*=GrfO$oeWqdXnUNa1Mm?M<>;ShgJN zoRrRJWvP5>=?2Vn%ReBFUGoK5^{EDHrDmKYg@PI8XsS+-l&BeS3O!T=N7`T6LxcfR zjl5FRAknYdzy7_`+5h{}-EaT!{LbtW_R;U&#WNp2oyF7s-{n{5fIscsAE+PBe)}s< z3=m=v9>5z6eg*|w!k?2k5i;=SQ0y#9MioiX6&lLp787dLJvobDO56SCys+fz^3`C7 z{I=*;w_N+PGESaTpWY>ubjBfXxNpM+q*QkFLn zf@#tVqlk#ZfP`oy=H5+PG3trrAv;tH&{DpYc!P#wqyPz9Z!-`wZ&tX(!OG>7Ssz2K zoaCtBv@WLtl$XKjPdXXU6!$^)vSWz4$JgTK4;Q+Q7oq>Hbqfj__PlwATlj!*#K-F! z*eUmGf!AnHYw>)lVPZYM1NH7#xiZt5){HwO3RE z-Fw`R7~TvJ14g)iui&5&I0e9fDGCsqM?WLVPRlb?!%!vZUGwG8QEyH2g{S2Tkzvb6 zBCoKNvY#dMXB>RXw9}N~Oo(LnVvs+HoFK3gCKzGsGHUJm$e?Zh+_LuhJJ#A)vBOzZ z!1FJFt6C!PdVw8^?cS-}X-Rmz-{z6Q_5)#|F_=2a58^;gdlmUTj%kWg{9Y0)ejx>1 z%d>t5;ZyVkh@fozv&mHIrq}jwnDpEx9f=^4E&UcKcFrAbM&Pm-eJ7D}Mx5+jGmEh< zJ3v}y#c@>AjHyK7%}PkW!+7lUWao*|DA~ctPyjf=-4VPNSXJ*L0&U@7LEI_}cV|DH z{Z!V=v?Cydu7qGSq!`}7(dN^=3zERZtgc4)p3hcyAHdtbs9cejeF%>iBcW9au)mI~ zut(GcA>y`G@C}195_a2e@0~N0ni)_`I#vwu;XWI7-3DhB8DAdNBNWFX9ZThvKoUm; z{ZV0Wx6Am1^6z5(&L^D$9G~$*(r^)RLR1jeN!q3wl9H8UVM}j*)UIqf5nLC>DbDF0 zGf*;m!IrEhJj@^HXn}91^X-4#I#`$$Y&rabt5h1>M=TC3C}#t$r1wUs5+`K2u!Xbi z5ORW4lp8=T7jP^R$y67gGM3Y->;N=Y3AQs2JK`&?AMUE@!+|-)bg3PcnoyqX-FWz< zRtIw-**-aVoIBmFD=srhooU0Mc{f$s_IS5YimnC9{OLdh;}i6izr-G}_EUpkEMTNATAge%FJ*{1|6q>&l?+&eagNt`yg6zc+4 zPT@dhz;s;H6t6Xu4m9B3)F!4u7$rbgzlIXqC4gDnLsO~&yZfD_WX zBGXefj_bRvC*Zwmoc}AR>$v*bkpj%vuz4<+Dq%rJ z9SOV8bs%9xE5wv8#6u8MuLk)JD<1q7JiLMxUSA{lG5Ru8Au{D(%kH6mtsM&tKFY}m=%*A#jm7we9Fs$aP@GWvFmQ9)qdMa?T{ykP(utYWheB-Pp(u<5{KJB(qSTrqAHrX6&NP zY1PmarJjUXN1_OSrVvz$1)?F?kX!AFD(WZPOJ3H}r-N>YSWk*GzA+A9EN%p87F`MH zNlNl&3M9D)BHTAn%rQw76=fR9EM0eT8&PteQe~sQpWfInD11aJJ3l!R1zfb4{XnqX zH)5+pV?n_qQxhVwYReHu+}3^JE`?&R)Xg1)p^`G{1k{pZ4^+(RDp>56e{i=KTPfuqgz#?knn2}%SCpFDAQ82$k*He* zt1QaMrsCzmnXUxuRpQocY211V^VPtCByc5XD_W;D!WmV#9wUB065ow{^1CbxpHKAO z(D&#;0KV1p#}Vz3u-|lexVpZ5cqp4b3k!GU|6rtthQf#%Gfv}0#LU1Sd_0!UE8(iJ z#Hkxg3YKJ?JZ(w*>v!`TQ7GMf6LFZN<;ws}g+$>=U77yuaauI~)_w`u)PETKFCnCc zp2JuHeLP~LRV~;SoRhg{RNc8l-3GgbRx9SALh*aA@7W*1g$1a7Uf$S{uaE67|GK)l zviEfD*{*M=t|Jvv0t?$9DJ(-%hIuuG-eA+n%x!y zgtTvTiip7xQM-keL6D;?P$?SfL2Ow)L=anFyj?XB!f6ykifay>vez7BwJzu>aC@Lp zgQ?~Yf~?36T0iUBQH`agN#}k!Tgz_1!pI-N3LjYil2=1dviJ ztki)pn(<*BY~IB=*~f!nN24ja4C0P8=N}5$aEBp)$z84mftxT3?|h_z8TR;zQc*h@ zo{|ZY;^^txa5xxxCiAQFJ`^UoRY&_L9$PB{IlQyEy^H&qzT4Ya-liWf2;@MJSm9}R z^rOZ*Q9_hcL_6>4Z=JT71g=kMf5J>EOO9Lijs`ts2}9_xQZe+J@8`kr z$4ZtMvV8YN9~pq(RNoDe)T7nf>J25SHd2YhE%XX!s$aaRUP29k2X_t|qrF}=IFbBs zFOftIo2R&2paK}kLwJxbkuU;hPH{Ee5fG?aC`xiwqru7L&$tXtQg`E=&futzsGsBN zcyJ^a#Ea`&Vxvb@=MtL^w|A_@Z4542IY#6M)=EIb87K$FWT=CyOYYxd9XjIP&Kxt{ zonA53VCA1r`)7S7KLLiUE@T;1EkMP(GbfnNRcA;~c!G=KBxOF5+EL*e;jjp|c82{I zSC=S>*yPjxQ4fbM;MYGtzKdA~p?6wAG+*GTHwlyCCxwVS$O8je7=XcTl|j|ZTdwD}LX&-sSsPX^pEV(+jV=vBz0rB-VfpSmvwKlP+HI`9Zu1hPVL z83Vxr=>S0n`!srmjTk0{R+^z*P`Jf+-XV05A=?;zqy|H#zagnu>*xXyc(R5$_;~lP z%iC+!`cCD!GpgImJ9x$x`d`;~pKR{!Rw#i(GP^%in~$sIXFpVbS%0=VSFQc;*7n-Y zPPMt+T7SB=vA%|P>(5p;_Ey)QeOEm~y=R-d)yDeM_1(4AYIn0@g9d7S4fP&ZPcaLg z0P^yq^^Nu2ALd$**LR;0=Ht!nYPs54-rikbp?s*e_O`b+ch=DSD!@KlfA)AAt*mkR zT|ldNSFL@Ihic~u7i~1vTHXWp+r+P0+1&bJd;Pm7yVaA;4V(?ysUEEXv*kw{YuXe# zwX(6i{&cQdU4FX!9kJW4HUVY3#bSzG_17nBe8u*b@qa6_ilZAVn>Ke3%XWwCX zo@K*_(KMwkhO2Ikh6fvimyoOWH|E$K%DhCX`Xt$kzL`d$MfBqkrqB^i4OyVO?ViyF zg!p-#WZ_CIkki4-4jPd_lBFdK;`VoI&sKiGvKXLveG!h{1O8je{w@xGU_T>N6lLZn z%`b1PZDZsjgmF!mEgvDovwze@;N817zOuaz4qxV>wg6;I`(^WTdgXoE78Q4jhU+xP zvcM(deHw=xz$E_e`sT}Ss~mivrXiKqS1>WJrFf0k`sXKu_h}hYYxDYc%N`&1UR=Ew ztyk9`?Tx2&Fglw=hnixxi@ZF1DJy@7eF>J?*fi77lqSN*gw`fp9H0Uu2dugv6`&Qj zgPei=rk`cj@{`Q}@Y?4SzxezNABEus9M#nD+E|evjIqNfWfgu=whJFPl6*~$2rq@s zd@Cb{*VlDDIucamE>quXkh>*EKp)o%l%f#cp-MG#DlbH8PF@kmS%XXccFuBp5p zt6N+@)rF0UA4ln!P@>^wYo;7Ea%Sjvv?f8{jOS#QQljvV11QT z|2U#XwW?=u25+c+=Sk2#gNVLPR?Y?)bVJk#Ozu4#x1=BJ!s`q|urAT$dbsCB;xA1VgFg>uv-_1d zPde>{1Zfwrqh?hS#DY=Y)F7}QEnhB!@wj{=;*IbiD0Md6+T zvaj?_==--O>|GU~q6sq{>&TlErH;Jl=Tkrq)@L1d@R8J^o7z4Fd^ch1;C->KLsvy$ z3gBu6*FmeJqYjt~{uE%%kgmfuPevWEsQqIhPn1`?Om8*XJU1tY%n22hkR($GDU|BK z4IE=hi|LyTi~KIx)6Op(Mp*Z?G8nZHi$!Ua#Rh?LFVC@(2%WsDEUR==sq--%FErs z4mNV&Xr%PwKJZx&yGO^Ks!Sv%I-;ATj1tC<$J4>lkLU?EnUASi#5JZ?EG~Lnn-8K^ z5oi|m4a?(@XA7FN0b zJ$HUP?bW@fPk*qX)X&MJ#GjWOjIQ)ycmZ?f6YYQGo^PKC1>sE*TC zj69HM{=hSL2+v*;tJE2edEx!SBBkxz467kLTEvkTAZmW*9>_> zUDWs>x=Awr!Grvl-W%}3qj-zn=5P~xrbA(7)mls&jPp3@G%!;k9T~g5jcs1+)S9jm zxJo7-CqJI?1cH|~@z-}gW%e~B1 zi7AHLwv?(S3^?%bG7vYjk8=Ak7&^fanc|1qLX@c>3|G)ewx=zRI5&mc?&La=eP${s zUO##x>oS-?z5-aU>i0yC-Trg2KeRQ1Yqd|QEbA1LpO|*eJQBWW51fse2pgc@NiDSMW1`wGF5I@G2l6N_1A8Qn?gSMtD zOIjcq-N551%#Pcthjre$Dk1l~63jp)h+@R#%xF%#I5B3WuTH5O;Qy3~<1lg{-OJwV zP%#>pCZKLI+5nWGo}AeTjpW^!tscrXXrcA%$!`3H&H7VGAi;|ykFj^p2%((akxfT9 zrg=WwOiIvo8YcPqCRLRaz6gWHZC&UT;gCy-*C9>jLuRqW;mia(6a$X^G<-fL=POyh z#(c;j2iW8`D$W4Z9ln%wf^0S+b^9)JWp!4$)%@!^th8UBNhs2}7;=2bRwn8u^ z0uXN!f5^~@4;6oiz)r?&YWyLY_qPr|Y{l@y>RrMQTMgld)imLUt?9xKtETY7){Vmt zB}&nPBi|?duqEM#)jNhCwj>lX4L{6c6`R5jw|mI&f3StKMSa;XiNPB%_>K^Q%Z1oJ zhd_>CDU=^{)1=ghj|7s&h1d3+N(5}TiFZz6c}?RT%f{xaZ96I!5Sy#C&>+UzAhvsa zM}Tig%)+B`r#-k2zKQQHoGzgheF8Yjj=S)}D@$!1^T}W-3m*aDCF+cxX#VTwLP{X4 z)wHNQ@9ePm&#OL2py+So34)OIakp$Jq&4%8P1=Qow_hDW#|~`)lAQA}pI!37kAP75 zX4*n7sbqtsvaG?$f;leqtkd%2UoFW28(YWvEm3OK*%fx*5GhS$cwswN735~Gywy2g z*zyu5UCx;z7K<#url_>!Gz5?8>lzu`fc6p|8nsU>IJ{lx>J*C;E=90GGRiDp5zvPxB9(F)2{MW6?HPjU5lYG+b1d@>Z1pVc`3~ilXNVMH83t z;%1T)*~hIP&_HnD2-m>j4NS6>($0M-;yjy_@mDK?MJ$^m9n-?QdCA7-aNU`;%AXF( z_3=A*{3}o2r(ad!R@x8{4&Fo=q_3gCsf5vl7@C?D`7-iI?8(g4 z1+O0U4tawOg9yF*a`=YYw-=H-`9yFuSRI)}0XS=iyntB)%dhIhdndref@K3_d?78~ zvL3d8duHZD1}?iRc=qWlvdji;oA))o#BPR7?+f}6C1frDcGua!qye;#WsE9K^1(za&>#L(x`Ei5D!J&b>V#yHe(m;&{nx} z8&>oq*j?S}k`Woj#6g3kDg8OVqX$P=K>z2e$5U!r(+3x0Qh-7ONyT#M zEvlnkB{pk0Z3=)QE$VdPfRHR*p3aIZX%56YHSDFu$HxTdgtz&eK&2d-g4lwpb+L(R z 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%0ApkcP=*4(4{BMMe^e>*_Aa5W~5@=+a2mL0CIT=r< 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

!y7Np*@DJgLj9$f|i6$g8uZ~ftBW)fF>(w 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 R=sS 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 literal 0 HcmV?d00001 From 458be8573483905b4ecc60940f9fb1e79fffb621 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Tue, 5 Jan 2021 14:49:40 -0400 Subject: [PATCH 07/21] whoops --- .../src/src/Controller/MillinerController.php | 223 ------- Milliner/src/src/Service/MillinerService.php | 627 ------------------ .../src/Service/MillinerServiceInterface.php | 106 --- Milliner/src/src/app.php | 52 -- Milliner/src/src/index.php | 4 - 5 files changed, 1012 deletions(-) delete mode 100644 Milliner/src/src/Controller/MillinerController.php delete mode 100644 Milliner/src/src/Service/MillinerService.php delete mode 100644 Milliner/src/src/Service/MillinerServiceInterface.php delete mode 100644 Milliner/src/src/app.php delete mode 100644 Milliner/src/src/index.php diff --git a/Milliner/src/src/Controller/MillinerController.php b/Milliner/src/src/Controller/MillinerController.php deleted file mode 100644 index 2aa78cdf..00000000 --- a/Milliner/src/src/Controller/MillinerController.php +++ /dev/null @@ -1,223 +0,0 @@ -milliner = $milliner; - $this->log = $log; - } - - /** - * @param string $uuid - * @param \Symfony\Component\HttpFoundation\Request $request - * @return \Symfony\Component\HttpFoundation\Response - */ - public function saveNode($uuid, Request $request) - { - $token = $request->headers->get("Authorization", null); - $jsonld_url = $request->headers->get("Content-Location"); - $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); - - if (empty($jsonld_url)) { - return new Response("Expected JSONLD url in Content-Location header", 400); - } - - $this->log->debug("JSONLD URL: $jsonld_url"); - $this->log->debug("FEDORA ENDPOINT: $islandora_fedora_endpoint"); - try { - $response = $this->milliner->saveNode( - $uuid, - $jsonld_url, - $islandora_fedora_endpoint, - $token - ); - - return new Response( - $response->getBody(), - $response->getStatusCode() - ); - } catch (\Exception $e) { - $this->log->error("", ['Exception' => $e]); - $code = $e->getCode() == 0 ? 500 : $e->getCode(); - return new Response($e->getMessage(), $code); - } - } - - /** - * @param string $uuid - * @param \Symfony\Component\HttpFoundation\Request $request - * @return \Symfony\Component\HttpFoundation\Response - */ - public function deleteNode($uuid, Request $request) - { - $token = $request->headers->get("Authorization", null); - - try { - $response = $this->milliner->deleteNode( - $uuid, - $token - ); - - return new Response( - $response->getBody(), - $response->getStatusCode() - ); - } catch (\Exception $e) { - $this->log->error("", ['Exception' => $e]); - $code = $e->getCode() == 0 ? 500 : $e->getCode(); - return new Response($e->getMessage(), $code); - } - } - - /** - * @param string $source_field - * @param \Symfony\Component\HttpFoundation\Request $request - * @return \Symfony\Component\HttpFoundation\Response - */ - public function saveMedia($source_field, Request $request) - { - $token = $request->headers->get("Authorization", null); - $json_url = $request->headers->get("Content-Location"); - $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); - - if (empty($json_url)) { - return new Response("Expected JSON url in Content-Location header", 400); - } - - try { - $response = $this->milliner->saveMedia( - $source_field, - $json_url, - $islandora_fedora_endpoint, - $token - ); - - return new Response( - $response->getBody(), - $response->getStatusCode() - ); - } catch (\Exception $e) { - $this->log->error("", ['Exception' => $e]); - $code = $e->getCode() == 0 ? 500 : $e->getCode(); - return new Response($e->getMessage(), $code); - } - } - - /** - * @param string $uuid - * @param \Symfony\Component\HttpFoundation\Request $request - * @return \Symfony\Component\HttpFoundation\Response - */ - public function saveExternal($uuid, Request $request) - { - $token = $request->headers->get("Authorization", null); - $external_url = $request->headers->get("Content-Location"); - $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); - - if (empty($external_url)) { - return new Response("Expected external url in Content-Location header", 400); - } - - try { - $response = $this->milliner->saveExternal( - $uuid, - $external_url, - $islandora_fedora_endpoint, - $token - ); - - return new Response( - $response->getBody(), - $response->getStatusCode() - ); - } catch (\Exception $e) { - $this->log->error("", ['Exception' => $e]); - $code = $e->getCode() == 0 ? 500 : $e->getCode(); - return new Response($e->getMessage(), $code); - } - } - - /** - * @param string $uuid - * @param \Symfony\Component\HttpFoundation\Request $request - * @return \Symfony\Component\HttpFoundation\Response - */ - public function createNodeVersion($uuid, Request $request) - { - $token = $request->headers->get("Authorization", null); - $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); - - try { - $response = $this->milliner->createVersion( - $uuid, - $islandora_fedora_endpoint, - $token - ); - return new Response( - $response->getBody(), - $response->getStatusCode() - ); - } catch (\Exception $e) { - $this->log->error("", ['Exception' => $e]); - $code = $e->getCode() == 0 ? 500 : $e->getCode(); - return new Response($e->getMessage(), $code); - } - } - - /** - * @param string $source_field - * @param \Symfony\Component\HttpFoundation\Request $request - * @return \Symfony\Component\HttpFoundation\Response - */ - public function createMediaVersion($source_field, Request $request) - { - $token = $request->headers->get("Authorization", null); - $json_url = $request->headers->get("Content-Location"); - $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); - - try { - $response = $this->milliner->createMediaVersion( - $source_field, - $json_url, - $islandora_fedora_endpoint, - $token - ); - return new Response( - $response->getBody(), - $response->getStatusCode() - ); - } catch (\Exception $e) { - $this->log->error("", ['Exception' => $e]); - $code = $e->getCode() == 0 ? 500 : $e->getCode(); - return new Response($e->getMessage(), $code); - } - } -} diff --git a/Milliner/src/src/Service/MillinerService.php b/Milliner/src/src/Service/MillinerService.php deleted file mode 100644 index bf42bf59..00000000 --- a/Milliner/src/src/Service/MillinerService.php +++ /dev/null @@ -1,627 +0,0 @@ -fedora = $fedora; - $this->drupal = $drupal; - $this->mapper = $mapper; - $this->log = $log; - $this->modifiedDatePredicate = $modifiedDatePredicate; - $this->stripFormatJsonld = $stripFormatJsonld; - } - - /** - * {@inheritDoc} - */ - public function saveNode( - $uuid, - $jsonld_url, - $islandora_fedora_endpoint, - $token = null - ) { - $path = $this->mapper->getFedoraPath($uuid); - $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); - $fedora_url = "$islandora_fedora_endpoint/$path"; - - $response = $this->fedora->getResourceHeaders($fedora_url); - if ($response->getStatusCode() == "404") { - $this->log->debug("GOT A 404"); - return $this->createNode( - $jsonld_url, - $fedora_url, - $token - ); - } else { - $this->log->debug("DID NOT GET 404"); - return $this->updateNode( - $jsonld_url, - $fedora_url, - $token - ); - } - } - - /** - * Creates a new LDP-RS in Fedora from a Node. - * - * @param string $jsonld_url - * @param string $fedora_url - * @param string $token - * - * @return \GuzzleHttp\Psr7\Response - * - * @throws \RuntimeException - * @throws \GuzzleHttp\Exception\RequestException - */ - protected function createNode( - $jsonld_url, - $fedora_url, - $token = null - ) { - // Get the jsonld from Drupal. - $headers = empty($token) ? [] : ['Authorization' => $token]; - $drupal_response = $this->drupal->get( - $jsonld_url, - ['headers' => $headers] - ); - - $jsonld = json_decode( - $drupal_response->getBody(), - true - ); - - $subject_url = $this->stripFormatJsonld ? rtrim($jsonld_url, '?_format=jsonld') : $jsonld_url; - - // Mash it into the shape Fedora accepts. - $jsonld = $this->processJsonld( - $jsonld, - $subject_url, - $fedora_url - ); - - // Save it in Fedora. - $headers['Content-Type'] = 'application/ld+json'; - $headers['Prefer'] = 'return=minimal; handling=lenient'; - $this->log->debug("HEADERS " . json_encode($headers)); - $this->log->debug("FEDORA URL " . $fedora_url); - $response = $this->fedora->saveResource( - $fedora_url, - json_encode($jsonld), - $headers - ); - - $status = $response->getStatusCode(); - if (!in_array($status, [201, 204])) { - $reason = $response->getReasonPhrase(); - throw new \RuntimeException( - "Client error: `PUT $fedora_url` resulted in a `$status $reason` response: " . $response->getBody(), - $status - ); - } - - // Return the response from Fedora. - return $response; - } - - /** - * Updates an existing LDP-RS in Fedora from a Node. - * - * @param string $jsonld_url - * @param string $fedora_url - * @param string $token - * - * @return \GuzzleHttp\Psr7\Response - * - * @throws \RuntimeException - * @throws \GuzzleHttp\Exception\RequestException - */ - protected function updateNode( - $jsonld_url, - $fedora_url, - $token = null - ) { - - // Get the RDF from Fedora. - $headers = empty($token) ? [] : ['Authorization' => $token]; - $headers['Accept'] = 'application/ld+json'; - $fedora_response = $this->fedora->getResource( - $fedora_url, - $headers - ); - - $status = $fedora_response->getStatusCode(); - if ($status != 200) { - $reason = $fedora_response->getReasonPhrase(); - throw new \RuntimeException( - "Client error: `GET $fedora_url` resulted in a `$status $reason` response: " . - $fedora_response->getBody(), - $status - ); - } - - // Strip off the W/ prefix to make the ETag strong. - $etags = $fedora_response->getHeader("ETag"); - $etag = ltrim(reset($etags), "W/"); - - // Get the modified date from the RDF. - $fedora_jsonld = json_decode( - $fedora_response->getBody(), - true - ); - - // Account for the fact that new media haven't got a modified date - // pushed to it from Drupal yet. - try { - $fedora_modified = $this->getModifiedTimestamp( - $fedora_jsonld - ); - } catch (\RuntimeException $e) { - $fedora_modified = 0; - } - - // Get the jsonld from Drupal. - $headers = empty($token) ? [] : ['Authorization' => $token]; - $drupal_response = $this->drupal->get( - $jsonld_url, - ['headers' => $headers] - ); - $drupal_jsonld = json_decode( - $drupal_response->getBody(), - true - ); - - // Mash it into the shape Fedora accepts. - $subject_url = $this->stripFormatJsonld ? rtrim($jsonld_url, '?_format=jsonld') : $jsonld_url; - $drupal_jsonld = $this->processJsonld( - $drupal_jsonld, - $subject_url, - $fedora_url - ); - - // Get the modified date from the RDF. - $drupal_modified = $this->getModifiedTimestamp( - $drupal_jsonld - ); - - // Abort with 412 if the Drupal RDF is stale. - if ($drupal_modified <= $fedora_modified) { - throw new \RuntimeException( - "Not updating $fedora_url because RDF at $jsonld_url is not newer", - 412 - ); - } - - // Conditionally save it in Fedora. - $headers['Content-Type'] = 'application/ld+json'; - $headers['Prefer'] = 'return=minimal; handling=lenient'; - $headers['If-Match'] = $etag; - $response = $this->fedora->saveResource( - $fedora_url, - json_encode($drupal_jsonld), - $headers - ); - - $status = $response->getStatusCode(); - if (!in_array($status, [201, 204])) { - $reason = $response->getReasonPhrase(); - throw new \RuntimeException( - "Client error: `PUT $fedora_url` resulted in a `$status $reason` response: " . $response->getBody(), - $status - ); - } - - // Return the response from Fedora. - return $response; - } - - /** - * Normalizes Drupal jsonld into a shape Fedora understands. - * - * @param array $jsonld - * @param string $drupal_url - * @param string $fedora_url - * - * @return array - */ - protected function processJsonld(array $jsonld, $drupal_url, $fedora_url) - { - $this->log->debug("DRUPAL URL: $drupal_url"); - $this->log->debug("FEDORA URL: $fedora_url"); - $this->log->debug("BEFORE: " . json_encode($jsonld)); - // Strip out everything other than the resource in question. - $resource = array_filter( - $jsonld['@graph'], - function (array $elem) use ($drupal_url) { - return $elem['@id'] == $drupal_url; - } - ); - - // Put in an fedora url for the resource. - $resource[0]['@id'] = $fedora_url; - - - $this->log->debug("AFTER: " . json_encode($resource)); - return $resource; - } - - /** - * Gets the first value for a predicate in a JSONLD array. - * - * @param $jsonld - * @param $predicate - * @param $value - * - * @return mixed string|null - */ - protected function getFirstPredicate(array $jsonld, $predicate, $value = true) - { - $key = $value ? '@value' : '@id'; - $malformed = empty($jsonld) || - !isset($jsonld[0][$predicate]) || - empty($jsonld[0][$predicate]) || - !isset($jsonld[0][$predicate][0][$key]); - - if ($malformed) { - return null; - } - - return $jsonld[0][$predicate][0][$key]; - } - - /** - * Extracts a modified date from jsonld and returns it as a timestamp. - * - * @param array $jsonld - * - * @return int - * - * @throws \RuntimeException - */ - protected function getModifiedTimestamp(array $jsonld) - { - $modified = $this->getFirstPredicate( - $jsonld, - $this->modifiedDatePredicate - ); - - if (empty($modified)) { - throw new \RuntimeException( - "Could not parse {$this->modifiedDatePredicate} from " . json_encode($jsonld), - 500 - ); - } - - $date = \DateTime::createFromFormat( - \DateTime::W3C, - $modified - ); - - return $date->getTimestamp(); - } - - /** - * {@inheritDoc} - */ - public function saveMedia( - $source_field, - $json_url, - $islandora_fedora_endpoint, - $token = null - ) { - $urls = $this->getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token); - return $this->updateNode( - $urls['jsonld'], - $urls['fedora'], - $token - ); - } - - /** - * Gets a Link header with the supplied rel name. - * - * @param $response - * @param $rel_name - * - * @return null|string - */ - protected function getLinkHeader($response, $rel_name, $type = null) - { - $parsed = Psr7\parse_header($response->getHeader("Link")); - foreach ($parsed as $header) { - $has_relation = isset($header['rel']) && $header['rel'] == $rel_name; - $has_type = $type ? isset($header['type']) && $header['type'] == $type : true; - if ($has_type && $has_relation) { - return trim($header[0], '<>'); - } - } - return null; - } - - /** - * {@inheritDoc} - */ - public function deleteNode( - $uuid, - $token = null - ) { - $path = $this->mapper->getFedoraPath($uuid); - $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); - $fedora_url = "$islandora_fedora_endpoint/$path"; - - $headers = empty($token) ? [] : ['Authorization' => $token]; - $response = $this->fedora->deleteResource( - $fedora_url, - $headers - ); - - $status = $response->getStatusCode(); - if (!in_array($status, [204, 410, 404])) { - $reason = $response->getReasonPhrase(); - throw new \RuntimeException( - "Client error: `DELETE $fedora_url` resulted in a `$status $reason` response: " . - $response->getBody(), - $status - ); - } - - return new Response($status); - } - - /** - * {@inheritDoc} - */ - public function saveExternal( - $uuid, - $external_url, - $islandora_fedora_endpoint, - $token = null - ) { - $path = $this->mapper->getFedoraPath($uuid); - $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); - $fedora_url = "$islandora_fedora_endpoint/$path"; - - $headers = empty($token) ? [] : ['Authorization' => $token]; - $mimetype = $this->drupal->head( - $external_url, - ['headers' => $headers] - )->getHeader('Content-Type')[0]; - - // Save it in Fedora as external content. - $external_rel = "http://fedora.info/definitions/fcrepo#ExternalContent"; - $link = '<' . $external_url . '>; rel="' . $external_rel . '"; handling="redirect"; type="' . $mimetype . '"'; - $headers['Link'] = $link; - $response = $this->fedora->saveResource( - $fedora_url, - null, - $headers - ); - - $status = $response->getStatusCode(); - if (!in_array($status, [201, 204])) { - $reason = $response->getReasonPhrase(); - throw new \RuntimeException( - "Client error: `PUT $fedora_url` resulted in a `$status $reason` response: " . $response->getBody(), - $status - ); - } - - // Return the response from Fedora. - return $response; - } - - /** - * {@inheritDoc} - */ - public function createVersion( - $uuid, - $islandora_fedora_endpoint, - $token = null - ) { - $path = $this->mapper->getFedoraPath($uuid); - $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); - $fedora_url = "$islandora_fedora_endpoint/$path"; - - $headers = empty($token) ? [] : ['Authorization' => $token]; - $date = new DateTime(); - $timestamp = $date->format("D, d M Y H:i:s O"); - // create version in Fedora. - try { - $response = $this->fedora->createVersion( - $fedora_url, - $timestamp, - null, - $headers - ); - $status = $response->getStatusCode(); - if (!in_array($status, [201])) { - $reason = $response->getReasonPhrase(); - throw new \RuntimeException( - "Client error: `POST $fedora_url` resulted in `$status $reason` response: " . - $response->getBody(), - $status - ); - } - // Return the response from Fedora. - return $response; - } catch (Exception $e) { - $this->log->error('Caught exception when creating version: ', $e->getMessage(), "\n"); - } - } - - /** - * {@inheritDoc} - */ - public function createMediaVersion( - $source_field, - $json_url, - $islandora_fedora_endpoint, - $token = null - ) { - $urls = $this->getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token); - $fedora_url = $urls['fedora']; - - $date = new DateTime(); - $timestamp = $date->format("D, d M Y H:i:s O"); - // create version in Fedora. - try { - $response = $this->fedora->createVersion( - $fedora_url, - $timestamp, - null, - $headers - ); - $status = $response->getStatusCode(); - if (!in_array($status, [201])) { - $reason = $response->getReasonPhrase(); - throw new \RuntimeException( - "Client error: `POST $fedora_url` resulted in `$status $reason` response: " . - $response->getBody(), - $status - ); - } - // Return the response from Fedora. - return $response; - } catch (Exception $e) { - $this->log->error('Caught exception when creating version: ', $e->getMessage(), "\n"); - } - } - - protected function getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token = null) { - // GET request for link headers and file UUID. - $headers = empty($token) ? [] : ['Authorization' => $token]; - $drupal_response = $this->drupal->get( - $json_url, - ['headers' => $headers] - ); - - $jsonld_url = $this->getLinkHeader($drupal_response, "alternate", "application/ld+json"); - if (empty($jsonld_url)) { - throw new \RuntimeException( - "Cannot parse 'alternate' link header from response to `HEAD $json_url`", - 500 - ); - } - - $drupal_url = $this->getLinkHeader($drupal_response, "describes"); - if (empty($drupal_url)) { - throw new \RuntimeException( - "Cannot parse 'describes' link header from response to `HEAD $json_url`", - 500 - ); - } - - $media_json = json_decode( - $drupal_response->getBody(), - true - ); - - if (!isset($media_json[$source_field]) || empty($media_json[$source_field])) { - throw new \RuntimeException( - "Cannot parse file UUID from $json_url. Ensure $source_field exists on the media and is populated.", - 500 - ); - } - $file_uuid = $media_json[$source_field][0]['target_uuid']; - - // Construct the fedora url. - // Try to handle flysystem files first. - $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); - $pieces = explode("_flysystem/fedora", $drupal_url); - if (count($pieces) > 1) { - $fedora_file_path = end($pieces); - } - else { - $fedora_file_path = $this->mapper->getFedoraPath($file_uuid); - } - $fedora_file_url = $islandora_fedora_endpoint . $fedora_file_path; - - // Now look for the 'describedby' link header on the file in Fedora. - // I'm using the drupal http client because I have the full - // URI and need to squash redirects in case of external content. - $fedora_response = $this->drupal->head( - $fedora_file_url, - ['allow_redirects' => false, 'headers' => $headers] - ); - $status = $fedora_response->getStatusCode(); - - if ($status != 200 && $status != 307) { - $reason = $fedora_response->getReasonPhrase(); - throw new \RuntimeException( - "Client error: `HEAD $fedora_file_url` resulted in a `$status $reason` response: " . - $fedora_response->getBody(), - $status - ); - } - - $fedora_url = $this->getLinkHeader($fedora_response, "describedby"); - if (empty($fedora_url)) { - throw new \RuntimeException( - "Cannot parse 'describedby' link header from response to `HEAD $fedora_file_url`", - 500 - ); - } - - return ['drupal' => $drupal_url, 'fedora' => $fedora_url, 'jsonld' => $jsonld_url]; - } -} diff --git a/Milliner/src/src/Service/MillinerServiceInterface.php b/Milliner/src/src/Service/MillinerServiceInterface.php deleted file mode 100644 index 1ca07d23..00000000 --- a/Milliner/src/src/Service/MillinerServiceInterface.php +++ /dev/null @@ -1,106 +0,0 @@ -register(new IslandoraServiceProvider()); -$app->register(new YamlConfigServiceProvider(__DIR__ . '/../cfg/config.yaml')); - -$app['debug'] = $app['crayfish.debug']; - -$app['milliner.controller'] = function () use ($app) { - try { - $strip_format_jsonld = filter_var( - $app['crayfish.strip_format_jsonld'], - FILTER_VALIDATE_BOOLEAN - ); - } catch (UnknownIdentifierException $e) { - $strip_format_jsonld = false; - } - - return new MillinerController( - new MillinerService( - FedoraApi::create($app['crayfish.fedora_base_url']), - new Client(), - new EntityMapper(), - $app['monolog'], - $app['crayfish.modified_date_predicate'], - $strip_format_jsonld - ), - $app['monolog'] - ); -}; - -$app->post('/node/{uuid}', "milliner.controller:saveNode"); -$app->delete('/node/{uuid}', "milliner.controller:deleteNode"); -$app->post('/node/{uuid}/version', "milliner.controller:createNodeVersion"); -$app->post('/media/{source_field}', "milliner.controller:saveMedia"); -$app->post('/media/{source_field}/version', 'milliner.controller:createMediaVersion'); -$app->post('/external/{uuid}', "milliner.controller:saveExternal"); - -return $app; diff --git a/Milliner/src/src/index.php b/Milliner/src/src/index.php deleted file mode 100644 index 3e23d477..00000000 --- a/Milliner/src/src/index.php +++ /dev/null @@ -1,4 +0,0 @@ -run(); From 06ea21fb1c64d96a8ae0b67fd38c8318f24f0523 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Wed, 6 Jan 2021 09:34:39 -0400 Subject: [PATCH 08/21] Working now --- Milliner/src/Service/MillinerService.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/Milliner/src/Service/MillinerService.php b/Milliner/src/Service/MillinerService.php index bf42bf59..69734607 100644 --- a/Milliner/src/Service/MillinerService.php +++ b/Milliner/src/Service/MillinerService.php @@ -181,7 +181,6 @@ protected function updateNode( $fedora_url, $token = null ) { - // Get the RDF from Fedora. $headers = empty($token) ? [] : ['Authorization' => $token]; $headers['Accept'] = 'application/ld+json'; @@ -232,7 +231,10 @@ protected function updateNode( ); // Mash it into the shape Fedora accepts. - $subject_url = $this->stripFormatJsonld ? rtrim($jsonld_url, '?_format=jsonld') : $jsonld_url; + $subject_url = $this->getLinkHeader($drupal_response, "describes"); + if (empty($subject_url)) { + $subject_url = $this->stripFormatJsonld ? rtrim($jsonld_url, '?_format=jsonld') : $jsonld_url; + } $drupal_jsonld = $this->processJsonld( $drupal_jsonld, $subject_url, @@ -290,10 +292,15 @@ protected function processJsonld(array $jsonld, $drupal_url, $fedora_url) $this->log->debug("FEDORA URL: $fedora_url"); $this->log->debug("BEFORE: " . json_encode($jsonld)); // Strip out everything other than the resource in question. + // Ignore http/https. + $parts = parse_url($drupal_url); + $subject_url = $parts['host'] . $parts['path']; $resource = array_filter( $jsonld['@graph'], - function (array $elem) use ($drupal_url) { - return $elem['@id'] == $drupal_url; + function (array $elem) use ($subject_url) { + $parts = parse_url($elem['@id']); + $other_url = $parts['host'] . $parts['path']; + return $other_url == $subject_url; } ); @@ -587,14 +594,14 @@ protected function getMediaUrls($source_field, $json_url, $islandora_fedora_endp // Construct the fedora url. // Try to handle flysystem files first. $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); - $pieces = explode("_flysystem/fedora", $drupal_url); + $pieces = explode("_flysystem/fedora/", $drupal_url); if (count($pieces) > 1) { $fedora_file_path = end($pieces); } else { $fedora_file_path = $this->mapper->getFedoraPath($file_uuid); } - $fedora_file_url = $islandora_fedora_endpoint . $fedora_file_path; + $fedora_file_url = "$islandora_fedora_endpoint/$fedora_file_path"; // Now look for the 'describedby' link header on the file in Fedora. // I'm using the drupal http client because I have the full From 4d13cae3e370cd82fa998fb3be9c3914bd5081e0 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Wed, 6 Jan 2021 12:03:57 -0400 Subject: [PATCH 09/21] working out more kinks --- Milliner/src/Service/MillinerService.php | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Milliner/src/Service/MillinerService.php b/Milliner/src/Service/MillinerService.php index 69734607..4ff3eb4c 100644 --- a/Milliner/src/Service/MillinerService.php +++ b/Milliner/src/Service/MillinerService.php @@ -3,6 +3,7 @@ namespace Islandora\Milliner\Service; use GuzzleHttp\Client; +use GuzzleHttp\Exception\ClientException; use GuzzleHttp\Psr7; use GuzzleHttp\Psr7\Response; use Islandora\Chullo\IFedoraApi; @@ -449,10 +450,21 @@ public function saveExternal( $fedora_url = "$islandora_fedora_endpoint/$path"; $headers = empty($token) ? [] : ['Authorization' => $token]; - $mimetype = $this->drupal->head( - $external_url, - ['headers' => $headers] - )->getHeader('Content-Type')[0]; + // Try it with an without auth b/c files can be public or private. + try { + $drupal_response = $this->drupal->head( + $external_url, + ['headers' => $headers] + ); + } + catch (ClientException $e) { + $this->log->debug("GOT {$e->getCode()}, TRYING WIHTOUT AUTH HEADER"); + $drupal_response = $this->drupal->head( + $external_url, + ['headers' => []] + ); + } + $mimetype = $drupal_response->getHeader('Content-Type')[0]; // Save it in Fedora as external content. $external_rel = "http://fedora.info/definitions/fcrepo#ExternalContent"; From fcd4af54eb77e28696e20f8c5229d0c9404b6cd2 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Thu, 21 Jan 2021 16:57:59 -0400 Subject: [PATCH 10/21] Changes for Fedora 6 --- Milliner/src/Service/MillinerService.php | 17 +++++++++++++++-- Milliner/src/app.php | 12 +++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/Milliner/src/Service/MillinerService.php b/Milliner/src/Service/MillinerService.php index 4ff3eb4c..67110652 100644 --- a/Milliner/src/Service/MillinerService.php +++ b/Milliner/src/Service/MillinerService.php @@ -46,6 +46,11 @@ class MillinerService implements MillinerServiceInterface */ protected $stripFormatJsonld; + /** + * @var bool + */ + protected $fedora6; + /** * MillinerService constructor. * @@ -62,7 +67,8 @@ public function __construct( EntityMapperInterface $mapper, LoggerInterface $log, $modifiedDatePredicate, - $stripFormatJsonld + $stripFormatJsonld, + $fedora6 ) { $this->fedora = $fedora; $this->drupal = $drupal; @@ -70,6 +76,7 @@ public function __construct( $this->log = $log; $this->modifiedDatePredicate = $modifiedDatePredicate; $this->stripFormatJsonld = $stripFormatJsonld; + $this->fedora6 = $fedora6; } /** @@ -185,6 +192,7 @@ protected function updateNode( // Get the RDF from Fedora. $headers = empty($token) ? [] : ['Authorization' => $token]; $headers['Accept'] = 'application/ld+json'; + $headers['Prefer'] = 'handling=lenient'; $fedora_response = $this->fedora->getResource( $fedora_url, $headers @@ -204,6 +212,8 @@ protected function updateNode( $etags = $fedora_response->getHeader("ETag"); $etag = ltrim(reset($etags), "W/"); + $this->log->debug("FEDORA ETAG: $etag"); + // Get the modified date from the RDF. $fedora_jsonld = json_decode( $fedora_response->getBody(), @@ -257,7 +267,10 @@ protected function updateNode( // Conditionally save it in Fedora. $headers['Content-Type'] = 'application/ld+json'; - $headers['Prefer'] = 'return=minimal; handling=lenient'; + $headers['Prefer'] = 'handling=lenient'; + if ($this->fedora6) { + $headers['Prefer'] .= ';received=minimal'; + } $headers['If-Match'] = $etag; $response = $this->fedora->saveResource( $fedora_url, diff --git a/Milliner/src/app.php b/Milliner/src/app.php index 184cb5dc..e80a281e 100644 --- a/Milliner/src/app.php +++ b/Milliner/src/app.php @@ -29,6 +29,15 @@ $strip_format_jsonld = false; } + try { + $fedora6 = filter_var( + $app['crayfish.fedora6'], + FILTER_VALIDATE_BOOLEAN + ); + } catch (UnknownIdentifierException $e) { + $fedora6 = false; + } + return new MillinerController( new MillinerService( FedoraApi::create($app['crayfish.fedora_base_url']), @@ -36,7 +45,8 @@ new EntityMapper(), $app['monolog'], $app['crayfish.modified_date_predicate'], - $strip_format_jsonld + $strip_format_jsonld, + $fedora6 ), $app['monolog'] ); From 71129982975b44f45a87995420e5a778ef403ede Mon Sep 17 00:00:00 2001 From: dannylamb Date: Fri, 22 Jan 2021 15:49:17 -0400 Subject: [PATCH 11/21] Using X-State-Token with X-If-State-Token instead of Etags and If-Match --- Milliner/src/Service/MillinerService.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Milliner/src/Service/MillinerService.php b/Milliner/src/Service/MillinerService.php index 67110652..15612df0 100644 --- a/Milliner/src/Service/MillinerService.php +++ b/Milliner/src/Service/MillinerService.php @@ -192,7 +192,9 @@ protected function updateNode( // Get the RDF from Fedora. $headers = empty($token) ? [] : ['Authorization' => $token]; $headers['Accept'] = 'application/ld+json'; - $headers['Prefer'] = 'handling=lenient'; + if ($this->fedora6) { + $headers['Prefer'] = 'return=representation; omit="http://fedora.info/definitions/v4/repository#ServerManaged"'; + } $fedora_response = $this->fedora->getResource( $fedora_url, $headers @@ -209,10 +211,10 @@ protected function updateNode( } // Strip off the W/ prefix to make the ETag strong. - $etags = $fedora_response->getHeader("ETag"); - $etag = ltrim(reset($etags), "W/"); + $state_tokens = $fedora_response->getHeader("X-State-Token"); + $state_token = '"' . ltrim(reset($state_tokens)) . '"'; - $this->log->debug("FEDORA ETAG: $etag"); + $this->log->debug("FEDORA State Token: $state_token"); // Get the modified date from the RDF. $fedora_jsonld = json_decode( @@ -268,10 +270,10 @@ protected function updateNode( // Conditionally save it in Fedora. $headers['Content-Type'] = 'application/ld+json'; $headers['Prefer'] = 'handling=lenient'; - if ($this->fedora6) { + if (!$this->fedora6) { $headers['Prefer'] .= ';received=minimal'; } - $headers['If-Match'] = $etag; + $headers['X-If-State-Match'] = $state_token; $response = $this->fedora->saveResource( $fedora_url, json_encode($drupal_jsonld), From b06221a925e3e6ffe5109b46cc759f1f96ac39c2 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Thu, 28 Jan 2021 16:49:23 -0400 Subject: [PATCH 12/21] Coding standards --- .../src/Controller/MillinerController.php | 14 +-- Milliner/src/Service/MillinerService.php | 116 +++++++++--------- .../src/Service/MillinerServiceInterface.php | 4 +- Milliner/src/app.php | 2 +- 4 files changed, 68 insertions(+), 68 deletions(-) diff --git a/Milliner/src/Controller/MillinerController.php b/Milliner/src/Controller/MillinerController.php index 2aa78cdf..5860dfcc 100644 --- a/Milliner/src/Controller/MillinerController.php +++ b/Milliner/src/Controller/MillinerController.php @@ -50,8 +50,8 @@ public function saveNode($uuid, Request $request) return new Response("Expected JSONLD url in Content-Location header", 400); } - $this->log->debug("JSONLD URL: $jsonld_url"); - $this->log->debug("FEDORA ENDPOINT: $islandora_fedora_endpoint"); + $this->log->debug("JSONLD URL: $jsonld_url"); + $this->log->debug("FEDORA ENDPOINT: $islandora_fedora_endpoint"); try { $response = $this->milliner->saveNode( $uuid, @@ -114,7 +114,7 @@ public function saveMedia($source_field, Request $request) try { $response = $this->milliner->saveMedia( - $source_field, + $source_field, $json_url, $islandora_fedora_endpoint, $token @@ -174,11 +174,11 @@ public function createNodeVersion($uuid, Request $request) { $token = $request->headers->get("Authorization", null); $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); - + try { $response = $this->milliner->createVersion( $uuid, - $islandora_fedora_endpoint, + $islandora_fedora_endpoint, $token ); return new Response( @@ -205,9 +205,9 @@ public function createMediaVersion($source_field, Request $request) try { $response = $this->milliner->createMediaVersion( - $source_field, + $source_field, $json_url, - $islandora_fedora_endpoint, + $islandora_fedora_endpoint, $token ); return new Response( diff --git a/Milliner/src/Service/MillinerService.php b/Milliner/src/Service/MillinerService.php index 15612df0..63be6322 100644 --- a/Milliner/src/Service/MillinerService.php +++ b/Milliner/src/Service/MillinerService.php @@ -67,8 +67,8 @@ public function __construct( EntityMapperInterface $mapper, LoggerInterface $log, $modifiedDatePredicate, - $stripFormatJsonld, - $fedora6 + $stripFormatJsonld, + $fedora6 ) { $this->fedora = $fedora; $this->drupal = $drupal; @@ -89,19 +89,19 @@ public function saveNode( $token = null ) { $path = $this->mapper->getFedoraPath($uuid); - $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); - $fedora_url = "$islandora_fedora_endpoint/$path"; + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $fedora_url = "$islandora_fedora_endpoint/$path"; - $response = $this->fedora->getResourceHeaders($fedora_url); + $response = $this->fedora->getResourceHeaders($fedora_url); if ($response->getStatusCode() == "404") { - $this->log->debug("GOT A 404"); + $this->log->debug("GOT A 404"); return $this->createNode( $jsonld_url, $fedora_url, $token ); } else { - $this->log->debug("DID NOT GET 404"); + $this->log->debug("DID NOT GET 404"); return $this->updateNode( $jsonld_url, $fedora_url, @@ -151,8 +151,8 @@ protected function createNode( // Save it in Fedora. $headers['Content-Type'] = 'application/ld+json'; $headers['Prefer'] = 'return=minimal; handling=lenient'; - $this->log->debug("HEADERS " . json_encode($headers)); - $this->log->debug("FEDORA URL " . $fedora_url); + $this->log->debug("HEADERS " . json_encode($headers)); + $this->log->debug("FEDORA URL " . $fedora_url); $response = $this->fedora->saveResource( $fedora_url, json_encode($jsonld), @@ -192,9 +192,10 @@ protected function updateNode( // Get the RDF from Fedora. $headers = empty($token) ? [] : ['Authorization' => $token]; $headers['Accept'] = 'application/ld+json'; - if ($this->fedora6) { - $headers['Prefer'] = 'return=representation; omit="http://fedora.info/definitions/v4/repository#ServerManaged"'; - } + if ($this->fedora6) { + $prefer = 'return=representation; omit="http://fedora.info/definitions/v4/repository#ServerManaged"'; + $headers['Prefer'] = $prefer; + } $fedora_response = $this->fedora->getResource( $fedora_url, $headers @@ -214,7 +215,7 @@ protected function updateNode( $state_tokens = $fedora_response->getHeader("X-State-Token"); $state_token = '"' . ltrim(reset($state_tokens)) . '"'; - $this->log->debug("FEDORA State Token: $state_token"); + $this->log->debug("FEDORA State Token: $state_token"); // Get the modified date from the RDF. $fedora_jsonld = json_decode( @@ -270,9 +271,9 @@ protected function updateNode( // Conditionally save it in Fedora. $headers['Content-Type'] = 'application/ld+json'; $headers['Prefer'] = 'handling=lenient'; - if (!$this->fedora6) { - $headers['Prefer'] .= ';received=minimal'; - } + if (!$this->fedora6) { + $headers['Prefer'] .= ';received=minimal'; + } $headers['X-If-State-Match'] = $state_token; $response = $this->fedora->saveResource( $fedora_url, @@ -304,18 +305,18 @@ protected function updateNode( */ protected function processJsonld(array $jsonld, $drupal_url, $fedora_url) { - $this->log->debug("DRUPAL URL: $drupal_url"); - $this->log->debug("FEDORA URL: $fedora_url"); - $this->log->debug("BEFORE: " . json_encode($jsonld)); + $this->log->debug("DRUPAL URL: $drupal_url"); + $this->log->debug("FEDORA URL: $fedora_url"); + $this->log->debug("BEFORE: " . json_encode($jsonld)); // Strip out everything other than the resource in question. - // Ignore http/https. - $parts = parse_url($drupal_url); - $subject_url = $parts['host'] . $parts['path']; + // Ignore http/https. + $parts = parse_url($drupal_url); + $subject_url = $parts['host'] . $parts['path']; $resource = array_filter( $jsonld['@graph'], function (array $elem) use ($subject_url) { - $parts = parse_url($elem['@id']); - $other_url = $parts['host'] . $parts['path']; + $parts = parse_url($elem['@id']); + $other_url = $parts['host'] . $parts['path']; return $other_url == $subject_url; } ); @@ -323,8 +324,8 @@ function (array $elem) use ($subject_url) { // Put in an fedora url for the resource. $resource[0]['@id'] = $fedora_url; - - $this->log->debug("AFTER: " . json_encode($resource)); + + $this->log->debug("AFTER: " . json_encode($resource)); return $resource; } @@ -387,7 +388,7 @@ protected function getModifiedTimestamp(array $jsonld) * {@inheritDoc} */ public function saveMedia( - $source_field, + $source_field, $json_url, $islandora_fedora_endpoint, $token = null @@ -429,8 +430,8 @@ public function deleteNode( $token = null ) { $path = $this->mapper->getFedoraPath($uuid); - $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); - $fedora_url = "$islandora_fedora_endpoint/$path"; + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $fedora_url = "$islandora_fedora_endpoint/$path"; $headers = empty($token) ? [] : ['Authorization' => $token]; $response = $this->fedora->deleteResource( @@ -461,23 +462,22 @@ public function saveExternal( $token = null ) { $path = $this->mapper->getFedoraPath($uuid); - $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); - $fedora_url = "$islandora_fedora_endpoint/$path"; + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $fedora_url = "$islandora_fedora_endpoint/$path"; $headers = empty($token) ? [] : ['Authorization' => $token]; - // Try it with an without auth b/c files can be public or private. + // Try it with an without auth b/c files can be public or private. try { $drupal_response = $this->drupal->head( $external_url, ['headers' => $headers] ); - } - catch (ClientException $e) { - $this->log->debug("GOT {$e->getCode()}, TRYING WIHTOUT AUTH HEADER"); - $drupal_response = $this->drupal->head( - $external_url, - ['headers' => []] - ); + } catch (ClientException $e) { + $this->log->debug("GOT {$e->getCode()}, TRYING WIHTOUT AUTH HEADER"); + $drupal_response = $this->drupal->head( + $external_url, + ['headers' => []] + ); } $mimetype = $drupal_response->getHeader('Content-Type')[0]; @@ -509,12 +509,12 @@ public function saveExternal( */ public function createVersion( $uuid, - $islandora_fedora_endpoint, + $islandora_fedora_endpoint, $token = null ) { $path = $this->mapper->getFedoraPath($uuid); - $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); - $fedora_url = "$islandora_fedora_endpoint/$path"; + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $fedora_url = "$islandora_fedora_endpoint/$path"; $headers = empty($token) ? [] : ['Authorization' => $token]; $date = new DateTime(); @@ -547,13 +547,13 @@ public function createVersion( * {@inheritDoc} */ public function createMediaVersion( - $source_field, + $source_field, $json_url, - $islandora_fedora_endpoint, + $islandora_fedora_endpoint, $token = null ) { $urls = $this->getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token); - $fedora_url = $urls['fedora']; + $fedora_url = $urls['fedora']; $date = new DateTime(); $timestamp = $date->format("D, d M Y H:i:s O"); @@ -581,7 +581,8 @@ public function createMediaVersion( } } - protected function getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token = null) { + protected function getMediaUrls($source_field, $json_url, $islandora_fedora_endpoint, $token = null) + { // GET request for link headers and file UUID. $headers = empty($token) ? [] : ['Authorization' => $token]; $drupal_response = $this->drupal->get( @@ -605,7 +606,7 @@ protected function getMediaUrls($source_field, $json_url, $islandora_fedora_endp ); } - $media_json = json_decode( + $media_json = json_decode( $drupal_response->getBody(), true ); @@ -618,17 +619,16 @@ protected function getMediaUrls($source_field, $json_url, $islandora_fedora_endp } $file_uuid = $media_json[$source_field][0]['target_uuid']; - // Construct the fedora url. - // Try to handle flysystem files first. - $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); - $pieces = explode("_flysystem/fedora/", $drupal_url); - if (count($pieces) > 1) { - $fedora_file_path = end($pieces); - } - else { + // Construct the fedora url. + // Try to handle flysystem files first. + $islandora_fedora_endpoint = rtrim($islandora_fedora_endpoint, "/"); + $pieces = explode("_flysystem/fedora/", $drupal_url); + if (count($pieces) > 1) { + $fedora_file_path = end($pieces); + } else { $fedora_file_path = $this->mapper->getFedoraPath($file_uuid); - } - $fedora_file_url = "$islandora_fedora_endpoint/$fedora_file_path"; + } + $fedora_file_url = "$islandora_fedora_endpoint/$fedora_file_path"; // Now look for the 'describedby' link header on the file in Fedora. // I'm using the drupal http client because I have the full @@ -656,6 +656,6 @@ protected function getMediaUrls($source_field, $json_url, $islandora_fedora_endp ); } - return ['drupal' => $drupal_url, 'fedora' => $fedora_url, 'jsonld' => $jsonld_url]; + return ['drupal' => $drupal_url, 'fedora' => $fedora_url, 'jsonld' => $jsonld_url]; } } diff --git a/Milliner/src/Service/MillinerServiceInterface.php b/Milliner/src/Service/MillinerServiceInterface.php index 1ca07d23..d5059e44 100644 --- a/Milliner/src/Service/MillinerServiceInterface.php +++ b/Milliner/src/Service/MillinerServiceInterface.php @@ -83,7 +83,7 @@ public function saveExternal( */ public function createVersion( $uuid, - $islandora_fedora_endpoint, + $islandora_fedora_endpoint, $token = null ); @@ -100,7 +100,7 @@ public function createVersion( public function createMediaVersion( $source_field, $json_url, - $islandora_fedora_endpoint, + $islandora_fedora_endpoint, $token = null ); } diff --git a/Milliner/src/app.php b/Milliner/src/app.php index e80a281e..b0a138ae 100644 --- a/Milliner/src/app.php +++ b/Milliner/src/app.php @@ -42,7 +42,7 @@ new MillinerService( FedoraApi::create($app['crayfish.fedora_base_url']), new Client(), - new EntityMapper(), + new EntityMapper(), $app['monolog'], $app['crayfish.modified_date_predicate'], $strip_format_jsonld, From 0a4e81bba1f9dd85f108eedff05be9a81206d0a2 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Thu, 28 Jan 2021 16:56:31 -0400 Subject: [PATCH 13/21] Updating lockfile --- Milliner/composer.lock | 288 +++++++++++++++++++++-------------------- 1 file changed, 145 insertions(+), 143 deletions(-) diff --git a/Milliner/composer.lock b/Milliner/composer.lock index aed367dd..e3676385 100644 --- a/Milliner/composer.lock +++ b/Milliner/composer.lock @@ -1389,16 +1389,16 @@ }, { "name": "symfony/debug", - "version": "v4.4.18", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "5dfc7825f3bfe9bb74b23d8b8ce0e0894e32b544" + "reference": "af4987aa4a5630e9615be9d9c3ed1b0f24ca449c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/5dfc7825f3bfe9bb74b23d8b8ce0e0894e32b544", - "reference": "5dfc7825f3bfe9bb74b23d8b8ce0e0894e32b544", + "url": "https://api.github.com/repos/symfony/debug/zipball/af4987aa4a5630e9615be9d9c3ed1b0f24ca449c", + "reference": "af4987aa4a5630e9615be9d9c3ed1b0f24ca449c", "shasum": "" }, "require": { @@ -1435,10 +1435,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "Provides tools to ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.18" + "source": "https://github.com/symfony/debug/tree/v4.4.19" }, "funding": [ { @@ -1454,7 +1454,7 @@ "type": "tidelift" } ], - "time": "2020-12-10T16:34:26+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1525,16 +1525,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v4.4.18", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "5d4c874b0eb1c32d40328a09dbc37307a5a910b0" + "reference": "c352647244bd376bf7d31efbd5401f13f50dad0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5d4c874b0eb1c32d40328a09dbc37307a5a910b0", - "reference": "5d4c874b0eb1c32d40328a09dbc37307a5a910b0", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c352647244bd376bf7d31efbd5401f13f50dad0c", + "reference": "c352647244bd376bf7d31efbd5401f13f50dad0c", "shasum": "" }, "require": { @@ -1585,10 +1585,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.18" + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.19" }, "funding": [ { @@ -1604,7 +1604,7 @@ "type": "tidelift" } ], - "time": "2020-12-18T07:41:31+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -1687,16 +1687,16 @@ }, { "name": "symfony/http-foundation", - "version": "v4.4.18", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5ebda66b51612516bf338d5f87da2f37ff74cf34" + "reference": "8888741b633f6c3d1e572b7735ad2cae3e03f9c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5ebda66b51612516bf338d5f87da2f37ff74cf34", - "reference": "5ebda66b51612516bf338d5f87da2f37ff74cf34", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8888741b633f6c3d1e572b7735ad2cae3e03f9c5", + "reference": "8888741b633f6c3d1e572b7735ad2cae3e03f9c5", "shasum": "" }, "require": { @@ -1732,10 +1732,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony HttpFoundation Component", + "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v4.4.18" + "source": "https://github.com/symfony/http-foundation/tree/v4.4.19" }, "funding": [ { @@ -1751,7 +1751,7 @@ "type": "tidelift" } ], - "time": "2020-12-18T07:41:31+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { "name": "symfony/http-kernel", @@ -1848,16 +1848,16 @@ }, { "name": "symfony/inflector", - "version": "v5.2.1", + "version": "v5.2.2", "source": { "type": "git", "url": "https://github.com/symfony/inflector.git", - "reference": "e529917d701a057a12354845150be3e1c4b34084" + "reference": "4c285002228d0e27480e5eee871f4e3f0a05a4eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/e529917d701a057a12354845150be3e1c4b34084", - "reference": "e529917d701a057a12354845150be3e1c4b34084", + "url": "https://api.github.com/repos/symfony/inflector/zipball/4c285002228d0e27480e5eee871f4e3f0a05a4eb", + "reference": "4c285002228d0e27480e5eee871f4e3f0a05a4eb", "shasum": "" }, "require": { @@ -1888,7 +1888,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Inflector Component", + "description": "Converts words between their singular and plural forms (English only)", "homepage": "https://symfony.com", "keywords": [ "inflection", @@ -1899,7 +1899,7 @@ "words" ], "support": { - "source": "https://github.com/symfony/inflector/tree/v5.2.1" + "source": "https://github.com/symfony/inflector/tree/v5.2.2" }, "funding": [ { @@ -1915,20 +1915,20 @@ "type": "tidelift" } ], - "time": "2020-12-01T20:15:15+00:00" + "time": "2021-01-10T16:29:19+00:00" }, { "name": "symfony/mime", - "version": "v5.2.1", + "version": "v5.2.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "de97005aef7426ba008c46ba840fc301df577ada" + "reference": "37bade585ea100d235c031b258eff93b5b6bb9a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/de97005aef7426ba008c46ba840fc301df577ada", - "reference": "de97005aef7426ba008c46ba840fc301df577ada", + "url": "https://api.github.com/repos/symfony/mime/zipball/37bade585ea100d235c031b258eff93b5b6bb9a9", + "reference": "37bade585ea100d235c031b258eff93b5b6bb9a9", "shasum": "" }, "require": { @@ -1939,6 +1939,8 @@ "symfony/polyfill-php80": "^1.15" }, "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<4.4" }, "require-dev": { @@ -1972,14 +1974,14 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "A library to manipulate MIME messages", + "description": "Allows manipulating MIME messages", "homepage": "https://symfony.com", "keywords": [ "mime", "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.2.1" + "source": "https://github.com/symfony/mime/tree/v5.2.2" }, "funding": [ { @@ -1995,20 +1997,20 @@ "type": "tidelift" } ], - "time": "2020-12-09T18:54:12+00:00" + "time": "2021-01-25T14:08:25+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", "shasum": "" }, "require": { @@ -2020,7 +2022,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2058,7 +2060,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.0" }, "funding": [ { @@ -2074,20 +2076,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" + "reference": "267a9adeb8ecb8071040a740930e077cdfb987af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/267a9adeb8ecb8071040a740930e077cdfb987af", + "reference": "267a9adeb8ecb8071040a740930e077cdfb987af", "shasum": "" }, "require": { @@ -2099,7 +2101,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2139,7 +2141,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.0" }, "funding": [ { @@ -2155,20 +2157,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117" + "reference": "0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44", + "reference": "0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44", "shasum": "" }, "require": { @@ -2182,7 +2184,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2226,7 +2228,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.22.0" }, "funding": [ { @@ -2242,20 +2244,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "727d1096295d807c309fb01a851577302394c897" + "reference": "6e971c891537eb617a00bb07a43d182a6915faba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", - "reference": "727d1096295d807c309fb01a851577302394c897", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/6e971c891537eb617a00bb07a43d182a6915faba", + "reference": "6e971c891537eb617a00bb07a43d182a6915faba", "shasum": "" }, "require": { @@ -2267,7 +2269,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2310,7 +2312,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.0" }, "funding": [ { @@ -2326,20 +2328,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T17:09:11+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" + "reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f377a3dd1fde44d37b9831d68dc8dea3ffd28e13", + "reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13", "shasum": "" }, "require": { @@ -2351,7 +2353,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2390,7 +2392,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.0" }, "funding": [ { @@ -2406,7 +2408,7 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-php56", @@ -2546,16 +2548,16 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930" + "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", + "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", "shasum": "" }, "require": { @@ -2564,7 +2566,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2602,7 +2604,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.22.0" }, "funding": [ { @@ -2618,20 +2620,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", "shasum": "" }, "require": { @@ -2640,7 +2642,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2685,7 +2687,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0" }, "funding": [ { @@ -2701,20 +2703,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/property-access", - "version": "v4.4.18", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "439d92bc88fdda717f2c31335e8db41483ca5c8d" + "reference": "94a1d9837396c71a0d8c31686c16693a15651622" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/439d92bc88fdda717f2c31335e8db41483ca5c8d", - "reference": "439d92bc88fdda717f2c31335e8db41483ca5c8d", + "url": "https://api.github.com/repos/symfony/property-access/zipball/94a1d9837396c71a0d8c31686c16693a15651622", + "reference": "94a1d9837396c71a0d8c31686c16693a15651622", "shasum": "" }, "require": { @@ -2750,7 +2752,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony PropertyAccess Component", + "description": "Provides functions to read and write from/to an object or array using a simple string notation", "homepage": "https://symfony.com", "keywords": [ "access", @@ -2764,7 +2766,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v4.4.18" + "source": "https://github.com/symfony/property-access/tree/v4.4.19" }, "funding": [ { @@ -2780,20 +2782,20 @@ "type": "tidelift" } ], - "time": "2020-12-10T16:34:26+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { "name": "symfony/routing", - "version": "v4.4.18", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "80b042c20b035818daec844723e23b9825134ba0" + "reference": "87529f6e305c7acb162840d1ea57922038072425" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/80b042c20b035818daec844723e23b9825134ba0", - "reference": "80b042c20b035818daec844723e23b9825134ba0", + "url": "https://api.github.com/repos/symfony/routing/zipball/87529f6e305c7acb162840d1ea57922038072425", + "reference": "87529f6e305c7acb162840d1ea57922038072425", "shasum": "" }, "require": { @@ -2805,7 +2807,7 @@ "symfony/yaml": "<3.4" }, "require-dev": { - "doctrine/annotations": "~1.2", + "doctrine/annotations": "^1.10.4", "psr/log": "~1.0", "symfony/config": "^4.2|^5.0", "symfony/dependency-injection": "^3.4|^4.0|^5.0", @@ -2843,7 +2845,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Routing Component", + "description": "Maps an HTTP request to a set of configuration variables", "homepage": "https://symfony.com", "keywords": [ "router", @@ -2852,7 +2854,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v4.4.18" + "source": "https://github.com/symfony/routing/tree/v4.4.19" }, "funding": [ { @@ -2868,7 +2870,7 @@ "type": "tidelift" } ], - "time": "2020-12-08T16:59:59+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { "name": "symfony/security", @@ -2967,16 +2969,16 @@ }, { "name": "symfony/string", - "version": "v5.2.1", + "version": "v5.2.2", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed" + "reference": "c95468897f408dd0aca2ff582074423dd0455122" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed", - "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed", + "url": "https://api.github.com/repos/symfony/string/zipball/c95468897f408dd0aca2ff582074423dd0455122", + "reference": "c95468897f408dd0aca2ff582074423dd0455122", "shasum": "" }, "require": { @@ -3019,7 +3021,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony String component", + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", "homepage": "https://symfony.com", "keywords": [ "grapheme", @@ -3030,7 +3032,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.2.1" + "source": "https://github.com/symfony/string/tree/v5.2.2" }, "funding": [ { @@ -3046,20 +3048,20 @@ "type": "tidelift" } ], - "time": "2020-12-05T07:33:16+00:00" + "time": "2021-01-25T15:14:59+00:00" }, { "name": "symfony/yaml", - "version": "v4.4.18", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "bbce94f14d73732340740366fcbe63363663a403" + "reference": "17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/bbce94f14d73732340740366fcbe63363663a403", - "reference": "bbce94f14d73732340740366fcbe63363663a403", + "url": "https://api.github.com/repos/symfony/yaml/zipball/17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9", + "reference": "17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9", "shasum": "" }, "require": { @@ -3098,10 +3100,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Yaml Component", + "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v4.4.18" + "source": "https://github.com/symfony/yaml/tree/v4.4.19" }, "funding": [ { @@ -3117,7 +3119,7 @@ "type": "tidelift" } ], - "time": "2020-12-08T16:59:59+00:00" + "time": "2021-01-27T09:09:26+00:00" } ], "packages-dev": [ @@ -3250,16 +3252,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.10.3", + "version": "v4.10.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984" + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", - "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", "shasum": "" }, "require": { @@ -3300,9 +3302,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.3" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" }, - "time": "2020-12-03T17:45:45+00:00" + "time": "2020-12-20T10:01:03+00:00" }, { "name": "phar-io/manifest", @@ -3575,16 +3577,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.12.1", + "version": "1.12.2", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d" + "reference": "245710e971a030f42e08f4912863805570f23d39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", + "reference": "245710e971a030f42e08f4912863805570f23d39", "shasum": "" }, "require": { @@ -3596,7 +3598,7 @@ }, "require-dev": { "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0 <9.3" + "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { @@ -3636,9 +3638,9 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.12.1" + "source": "https://github.com/phpspec/prophecy/tree/1.12.2" }, - "time": "2020-09-29T09:10:42+00:00" + "time": "2020-12-19T10:15:11+00:00" }, { "name": "phpunit/php-code-coverage", @@ -3960,16 +3962,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.0", + "version": "9.5.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe" + "reference": "e7bdf4085de85a825f4424eae52c99a1cec2f360" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e7bdf4085de85a825f4424eae52c99a1cec2f360", + "reference": "e7bdf4085de85a825f4424eae52c99a1cec2f360", "shasum": "" }, "require": { @@ -4047,7 +4049,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.0" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.1" }, "funding": [ { @@ -4059,7 +4061,7 @@ "type": "github" } ], - "time": "2020-12-04T05:05:53+00:00" + "time": "2021-01-17T07:42:25+00:00" }, { "name": "sebastian/cli-parser", @@ -5278,16 +5280,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v4.4.18", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "d44fbb02b458fe18d00fea18f24c97cefb87577e" + "reference": "21032c566558255e551d23f4a516434c9e3a9a78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/d44fbb02b458fe18d00fea18f24c97cefb87577e", - "reference": "d44fbb02b458fe18d00fea18f24c97cefb87577e", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/21032c566558255e551d23f4a516434c9e3a9a78", + "reference": "21032c566558255e551d23f4a516434c9e3a9a78", "shasum": "" }, "require": { @@ -5328,10 +5330,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DomCrawler Component", + "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v4.4.18" + "source": "https://github.com/symfony/dom-crawler/tree/v4.4.19" }, "funding": [ { @@ -5347,7 +5349,7 @@ "type": "tidelift" } ], - "time": "2020-12-18T07:41:31+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { "name": "theseer/tokenizer", @@ -5404,12 +5406,12 @@ "version": "1.9.1", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", + "url": "https://github.com/webmozarts/assert.git", "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "shasum": "" }, @@ -5447,8 +5449,8 @@ "validate" ], "support": { - "issues": "https://github.com/webmozart/assert/issues", - "source": "https://github.com/webmozart/assert/tree/master" + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.9.1" }, "time": "2020-07-08T17:02:28+00:00" } From e25e37919913bac320d3963ced5a9464b787cad8 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Wed, 3 Feb 2021 13:31:01 -0400 Subject: [PATCH 14/21] Coding standards and tests passing again --- Milliner/composer.json | 3 +- Milliner/composer.lock | 54 ++- .../src/Controller/MillinerController.php | 2 + Milliner/src/Service/MillinerService.php | 1 + .../src/Service/MillinerServiceInterface.php | 2 + Milliner/static/Media.jsonld | 4 +- .../Milliner/Tests/CreateVersionTest.php | 121 ++--- .../Islandora/Milliner/Tests/DeleteTest.php | 138 +++--- .../Milliner/Tests/MillinerControllerTest.php | 49 +- .../Milliner/Tests/SaveExternalTest.php | 141 ++---- .../Milliner/Tests/SaveMediaTest.php | 163 ++++--- .../Islandora/Milliner/Tests/SaveNodeTest.php | 435 +++++------------- 12 files changed, 417 insertions(+), 696 deletions(-) diff --git a/Milliner/composer.json b/Milliner/composer.json index caed85a5..2e74cf3d 100644 --- a/Milliner/composer.json +++ b/Milliner/composer.json @@ -44,6 +44,7 @@ "symfony/css-selector": "^3.0", "squizlabs/php_codesniffer": "^3.0", "sebastian/phpcpd": "^6.0", - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.0", + "phpspec/prophecy-phpunit": "^2.0" } } diff --git a/Milliner/composer.lock b/Milliner/composer.lock index e3676385..8e64013a 100644 --- a/Milliner/composer.lock +++ b/Milliner/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8e480aff17b177b08686d95069161412", + "content-hash": "7fbed325a6b286b222a39afe0d92fbe7", "packages": [ { "name": "doctrine/cache", @@ -3642,6 +3642,58 @@ }, "time": "2020-12-19T10:15:11+00:00" }, + { + "name": "phpspec/prophecy-phpunit", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy-phpunit.git", + "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/2d7a9df55f257d2cba9b1d0c0963a54960657177", + "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8", + "phpspec/prophecy": "^1.3", + "phpunit/phpunit": "^9.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\PhpUnit\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + } + ], + "description": "Integrating the Prophecy mocking library in PHPUnit test cases", + "homepage": "http://phpspec.net", + "keywords": [ + "phpunit", + "prophecy" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy-phpunit/issues", + "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.0.1" + }, + "time": "2020-07-09T08:33:42+00:00" + }, { "name": "phpunit/php-code-coverage", "version": "9.2.5", diff --git a/Milliner/src/Controller/MillinerController.php b/Milliner/src/Controller/MillinerController.php index 5860dfcc..f5babe21 100644 --- a/Milliner/src/Controller/MillinerController.php +++ b/Milliner/src/Controller/MillinerController.php @@ -79,10 +79,12 @@ public function saveNode($uuid, Request $request) public function deleteNode($uuid, Request $request) { $token = $request->headers->get("Authorization", null); + $islandora_fedora_endpoint = $request->headers->get("X-Islandora-Fedora-Endpoint"); try { $response = $this->milliner->deleteNode( $uuid, + $islandora_fedora_endpoint, $token ); diff --git a/Milliner/src/Service/MillinerService.php b/Milliner/src/Service/MillinerService.php index 63be6322..58590a60 100644 --- a/Milliner/src/Service/MillinerService.php +++ b/Milliner/src/Service/MillinerService.php @@ -427,6 +427,7 @@ protected function getLinkHeader($response, $rel_name, $type = null) */ public function deleteNode( $uuid, + $islandora_fedora_endpoint, $token = null ) { $path = $this->mapper->getFedoraPath($uuid); diff --git a/Milliner/src/Service/MillinerServiceInterface.php b/Milliner/src/Service/MillinerServiceInterface.php index d5059e44..a02b405f 100644 --- a/Milliner/src/Service/MillinerServiceInterface.php +++ b/Milliner/src/Service/MillinerServiceInterface.php @@ -44,6 +44,7 @@ public function saveMedia( /** * @param $uuid + * @param $islandora_fedora_endpoint * @param $token * * @throws \Exception @@ -52,6 +53,7 @@ public function saveMedia( */ public function deleteNode( $uuid, + $islandora_fedora_endpoint, $token = null ); diff --git a/Milliner/static/Media.jsonld b/Milliner/static/Media.jsonld index 6cd98535..76ee6194 100644 --- a/Milliner/static/Media.jsonld +++ b/Milliner/static/Media.jsonld @@ -1,7 +1,7 @@ { "@graph":[ { - "@id":"http:\/\/localhost:8000\/media\/6?_format=jsonld", + "@id":"http:\/\/localhost:8000\/media\/6", "@type":[ "http:\/\/pcdm.org\/use#ServiceFile" ], @@ -56,4 +56,4 @@ "value":"http:\/\/localhost:8000\/sites\/default\/files\/2017-07\/sample_0.jpeg" } ] -} \ No newline at end of file +} diff --git a/Milliner/tests/Islandora/Milliner/Tests/CreateVersionTest.php b/Milliner/tests/Islandora/Milliner/Tests/CreateVersionTest.php index d81a1419..cca0e91c 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/CreateVersionTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/CreateVersionTest.php @@ -7,12 +7,13 @@ use GuzzleHttp\Psr7\Request; use GuzzleHttp\Exception\RequestException; use Islandora\Chullo\IFedoraApi; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface; use Islandora\Milliner\Service\MillinerService; use Monolog\Handler\NullHandler; use Monolog\Logger; use PHPUnit\Framework\TestCase; use Prophecy\Argument; +use Prophecy\PhpUnit\ProphecyTrait; /** * Class MillinerServiceTest @@ -21,6 +22,8 @@ */ class CreateVersionTest extends TestCase { + use ProphecyTrait; + /** * @var LoggerInterface */ @@ -31,6 +34,26 @@ class CreateVersionTest extends TestCase */ protected $modifiedDatePredicate; + /** + * @var string + */ + protected $uuid; + + /** + * @var string + */ + protected $fedoraBaseUrl; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $mapper; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $drupal; + /** * {@inheritdoc} */ @@ -42,6 +65,17 @@ protected function setUp(): void $this->logger->pushHandler(new NullHandler()); $this->modifiedDatePredicate = "http://schema.org/dateModified"; + + $this->uuid = '9541c0c1-5bee-4973-a9d0-e55c1658bc8'; + $this->fedoraBaseUrl = 'http://localhost:8080/fcrepo/rest'; + + $this->mapper = $this->prophesize(EntityMapperInterface::class); + $this->mapper->getFedoraPath($this->uuid) + ->willReturn("{$this->fedoraBaseUrl}/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"); + $this->mapper = $this->mapper->reveal(); + + $this->drupal = $this->prophesize(Client::class); + $this->drupal = $this->drupal->reveal(); } @@ -51,27 +85,6 @@ protected function setUp(): void */ public function testCreateVersionReturnsFedora201() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini->saveUrls(Argument::any(), Argument::any(), Argument::any(), Argument::any()) - ->willReturn(true); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - $fedora_response = new Response(201); $fedora = $this->prophesize(IFedoraApi::class); $fedora->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) @@ -80,15 +93,17 @@ public function testCreateVersionReturnsFedora201() $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->createVersion( - $mapping['fedora'], + $this->uuid, + $this->fedoraBaseUrl, "Bearer islandora" ); @@ -106,27 +121,6 @@ public function testCreateVersionReturnsFedora201() public function testCreateVersionReturnsFedora404() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-9998' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini->saveUrls(Argument::any(), Argument::any(), Argument::any(), Argument::any()) - ->willReturn(true); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - $fedora_response = new Response(404); $fedora = $this->prophesize(IFedoraApi::class); $fedora->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) @@ -137,15 +131,17 @@ public function testCreateVersionReturnsFedora404() $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->createVersion( - $mapping['fedora'], + $this->uuid, + $this->fedoraBaseUrl, "Bearer islandora" ); @@ -163,25 +159,6 @@ public function testCreateVersionReturnsFedora404() */ public function testcreateVersionThrowsOnFedoraSaveError() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - $fedora_get_response = new Response( 200, ['Content-Type' => 'application/ld+json'], @@ -197,15 +174,17 @@ public function testcreateVersionThrowsOnFedoraSaveError() $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->createVersion( - $mapping['fedora'], + $this->uuid, + $this->fedoraBaseUrl, "Bearer islandora" ); diff --git a/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php b/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php index e42b12ff..08152451 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/DeleteTest.php @@ -5,13 +5,14 @@ use GuzzleHttp\Client; use GuzzleHttp\Psr7\Response; use Islandora\Chullo\IFedoraApi; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface; use Islandora\Milliner\Service\MillinerService; use Monolog\Handler\NullHandler; use Monolog\Logger; use Prophecy\Argument; use Psr\Log\LoggerInterface; use PHPUnit\Framework\TestCase; +use Prophecy\PhpUnit\ProphecyTrait; /** * Class MillinerServiceTest @@ -20,6 +21,8 @@ */ class DeleteTest extends TestCase { + use ProphecyTrait; + /** * @var LoggerInterface */ @@ -30,6 +33,26 @@ class DeleteTest extends TestCase */ protected $modifiedDatePredicate; + /** + * @var string + */ + protected $uuid; + + /** + * @var string + */ + protected $fedoraBaseUrl; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $mapper; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $drupal; + /** * {@inheritdoc} */ @@ -41,154 +64,115 @@ protected function setUp(): void $this->logger->pushHandler(new NullHandler()); $this->modifiedDatePredicate = "http://schema.org/dateModified"; + + $this->uuid = '9541c0c1-5bee-4973-a9d0-e55c1658bc8'; + $this->fedoraBaseUrl = 'http://localhost:8080/fcrepo/rest'; + + $this->mapper = $this->prophesize(EntityMapperInterface::class); + $this->mapper->getFedoraPath($this->uuid) + ->willReturn("{$this->fedoraBaseUrl}/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"); + $this->mapper = $this->mapper->reveal(); + + $this->drupal = $this->prophesize(Client::class); + $this->drupal = $this->drupal->reveal(); } /** * @covers ::__construct * @covers ::deleteNode */ - public function testDeleteReturnsFedoraError() + public function testDeleteThrowsFedoraError() { - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn(['drupal' => 'foo', 'fedora' => 'bar']); - $gemini = $gemini->reveal(); - $fedora = $this->prophesize(IFedoraApi::class); $fedora->deleteResource(Argument::any(), Argument::any()) ->willReturn(new Response(403)); $fedora = $fedora->reveal(); - $drupal = $this->prophesize(Client::class)->reveal(); - $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $this->expectException(\RuntimeException::class, null, 403); - $milliner->deleteNode("abc123", "Bearer islandora"); + $milliner->deleteNode($this->uuid, $this->fedoraBaseUrl, "Bearer islandora"); } /** * @covers ::__construct * @covers ::deleteNode */ - public function testDeleteReturns204OnGeminiSuccess() + public function testDeleteReturnsFedoraResult() { - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls("first", Argument::any()) - ->willReturn(['drupal' => 'foo', 'fedora' => 'bar']); - $gemini->getUrls("second", Argument::any()) - ->willReturn([]); - $gemini->deleteUrls(Argument::any(), Argument::any()) - ->willReturn(true); - $gemini = $gemini->reveal(); - $fedora = $this->prophesize(IFedoraApi::class); $fedora->deleteResource(Argument::any(), Argument::any()) - ->willReturn(new Response(404)); + ->willReturn(new Response(204)); $fedora = $fedora->reveal(); - $drupal = $this->prophesize(Client::class)->reveal(); - $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); - $response = $milliner->deleteNode("first", "Bearer islandora"); - $status = $response->getStatusCode(); - $this->assertTrue( - $status == 204, - "Milliner must return 204 when Gemini returns success. Received: $status" - ); - - $response = $milliner->deleteNode("second", "Bearer islandora"); + $response = $milliner->deleteNode($this->uuid, $this->fedoraBaseUrl, "Bearer islandora"); $status = $response->getStatusCode(); $this->assertTrue( $status == 204, - "Milliner must return 204 when Gemini returns success. Received: $status" + "Milliner must return 204 when Fedora returns 204. Received: $status" ); - } - - /** - * @covers ::__construct - * @covers ::deleteNode - */ - public function testDeleteReturns404IfNotMappedAndGeminiFails() - { - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn([]); - $gemini->deleteUrls(Argument::any(), Argument::any()) - ->willReturn(false); - $gemini = $gemini->reveal(); - - $fedora = $this->prophesize(IFedoraApi::class)->reveal(); - $drupal = $this->prophesize(Client::class)->reveal(); + $fedora = $this->prophesize(IFedoraApi::class); + $fedora->deleteResource(Argument::any(), Argument::any()) + ->willReturn(new Response(404)); + $fedora = $fedora->reveal(); $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); - $response = $milliner->deleteNode("abc123", "Bearer islandora"); + $response = $milliner->deleteNode($this->uuid, $this->fedoraBaseUrl, "Bearer islandora"); $status = $response->getStatusCode(); $this->assertTrue( $status == 404, - "Milliner must return 404 when Gemini returns fail and resource was not mapped. Received: $status" + "Milliner must return 404 when Fedora returns 404. Received: $status" ); - } - - /** - * @covers ::__construct - * @covers ::deleteNode - */ - public function testDeleteReturnsFedoraErrorIfMappedButGeminiFails() - { - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn(['drupal' => 'foo', 'fedora' => 'bar']); - $gemini->deleteUrls(Argument::any(), Argument::any()) - ->willReturn(false); - $gemini = $gemini->reveal(); $fedora = $this->prophesize(IFedoraApi::class); $fedora->deleteResource(Argument::any(), Argument::any()) ->willReturn(new Response(410)); $fedora = $fedora->reveal(); - $drupal = $this->prophesize(Client::class)->reveal(); - $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); - $response = $milliner->deleteNode("abc123", "Bearer islandora"); + $response = $milliner->deleteNode($this->uuid, $this->fedoraBaseUrl, "Bearer islandora"); $status = $response->getStatusCode(); $this->assertTrue( $status == 410, - "Milliner must return Fedora response when mapped but Gemini fails. Expected 410, Received: $status" + "Milliner must return 410 when Fedora returns 410. Received: $status" ); } } diff --git a/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php b/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php index 2f749e1e..981b5e9f 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/MillinerControllerTest.php @@ -7,6 +7,7 @@ use Monolog\Handler\NullHandler; use Monolog\Logger; use Prophecy\Argument; +use Prophecy\PhpUnit\ProphecyTrait; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\Request; use GuzzleHttp\Psr7\Response; @@ -19,6 +20,8 @@ */ class MillinerControllerTest extends TestCase { + use ProphecyTrait; + /** * @var LoggerInterface */ @@ -48,24 +51,22 @@ public function testMethodsReturnMillinerErrors() $milliner = $this->prophesize(MillinerServiceInterface::class); $milliner->saveNode(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willThrow(new \Exception("Forbidden", 403)); - $milliner->getFileFromMedia(Argument::any(), Argument::any(), Argument::any()) - ->willThrow(new \Exception("Forbidden", 403)); - $milliner->saveMedia(Argument::any(), Argument::any(), Argument::any()) + $milliner->saveMedia(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willThrow(new \Exception("Forbidden", 403)); - $milliner->deleteNode(Argument::any(), Argument::any()) + $milliner->deleteNode(Argument::any(), Argument::any(), Argument::any()) ->willThrow(new \Exception("Forbidden", 403)); $milliner->saveExternal(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willThrow(new \Exception("Forbidden", 403)); - $milliner->getGeminiUrls(Argument::any(), Argument::any()) + $milliner->createVersion(Argument::any(), Argument::any(), Argument::any()) ->willThrow(new \Exception("Forbidden", 403)); - $milliner->createVersion(Argument::any(), Argument::any()) + $milliner->createMediaVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willThrow(new \Exception("Forbidden", 403)); $milliner = $milliner->reveal(); $controller = new MillinerController($milliner, $this->logger); // Route parameters. - $uuid = 'abc123'; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $source_field = 'field_image'; // Nodes. @@ -189,7 +190,7 @@ public function testSaveNodeReturns400WithoutContentLocation() $milliner = $this->prophesize(MillinerServiceInterface::class)->reveal(); $controller = new MillinerController($milliner, $this->logger); - $uuid = "abc123"; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $request = Request::create( "http://localhost:8000/milliner/node/$uuid", "POST", @@ -246,7 +247,7 @@ public function testSaveExternalReturns400WithoutContentLocation() $milliner = $this->prophesize(MillinerServiceInterface::class)->reveal(); $controller = new MillinerController($milliner, $this->logger); - $uuid = "abc123"; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $request = Request::create( "http://localhost:8000/milliner/external/$uuid", "POST", @@ -279,7 +280,7 @@ public function testSaveNodeReturnsSuccessOnSuccess() $controller = new MillinerController($milliner, $this->logger); // Nodes. - $uuid = "abc123"; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $request = Request::create( "http://localhost:8000/milliner/node/$uuid", "POST", @@ -332,7 +333,7 @@ public function testSaveNodeReturnsSuccessOnSuccess() public function testSaveMediaReturnsSuccessOnSuccess() { $milliner = $this->prophesize(MillinerServiceInterface::class); - $milliner->saveMedia(Argument::any(), Argument::any(), Argument::any()) + $milliner->saveMedia(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willReturn(new Response(201)); $milliner = $milliner->reveal(); $controller = new MillinerController($milliner, $this->logger); @@ -346,6 +347,7 @@ public function testSaveMediaReturnsSuccessOnSuccess() [], [ 'HTTP_AUTHORIZATION' => 'Bearer islandora', + 'X-Islandora-Fedora-Endpoint' => 'http://localhost:8080/fcrepo/rest/', 'HTTP_CONTENT_LOCATION' => 'http://localhost:8000/media/6?_format=json', ] ); @@ -357,7 +359,7 @@ public function testSaveMediaReturnsSuccessOnSuccess() ); $milliner = $this->prophesize(MillinerServiceInterface::class); - $milliner->saveMedia(Argument::any(), Argument::any(), Argument::any()) + $milliner->saveMedia(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willReturn(new Response(204)); $milliner = $milliner->reveal(); $controller = new MillinerController($milliner, $this->logger); @@ -370,6 +372,7 @@ public function testSaveMediaReturnsSuccessOnSuccess() [], [ 'HTTP_AUTHORIZATION' => 'Bearer islandora', + 'X-Islandora-Fedora-Endpoint' => 'http://localhost:8080/fcrepo/rest/', 'HTTP_CONTENT_LOCATION' => 'http://localhost:8000/media/6?_format=json', ] ); @@ -394,7 +397,7 @@ public function testSaveExternalReturnsSuccessOnSuccess() $controller = new MillinerController($milliner, $this->logger); // Nodes. - $uuid = "abc123"; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $request = Request::create( "http://localhost:8000/milliner/external/$uuid", "POST", @@ -447,12 +450,12 @@ public function testSaveExternalReturnsSuccessOnSuccess() public function testDeleteReturnsSuccessOnSuccess() { $milliner = $this->prophesize(MillinerServiceInterface::class); - $milliner->deleteNode(Argument::any(), Argument::any()) + $milliner->deleteNode(Argument::any(), Argument::any(), Argument::any()) ->willReturn(new Response(204)); $milliner = $milliner->reveal(); $controller = new MillinerController($milliner, $this->logger); - $uuid = "abc123"; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $request = Request::create( "http://localhost:8000/milliner/resource/$uuid", "DELETE", @@ -477,15 +480,13 @@ public function testDeleteReturnsSuccessOnSuccess() public function testCreateNodeVersionReturnsSuccessOnSuccess() { $milliner = $this->prophesize(MillinerServiceInterface::class); - $milliner->getGeminiUrls(Argument::any(), Argument::any()) - ->willReturn(['fedora' => "http://example.org/fcrepo/abc123", "drupal" => "http://example.org/node/1"]); $milliner->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willReturn(new Response(201)); $milliner = $milliner->reveal(); $controller = new MillinerController($milliner, $this->logger); // Nodes. - $uuid = "abc123"; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $request = Request::create( "http://localhost:8000/milliner/node/$uuid/version", "POST", @@ -505,8 +506,6 @@ public function testCreateNodeVersionReturnsSuccessOnSuccess() ); $milliner = $this->prophesize(MillinerServiceInterface::class); - $milliner->getGeminiUrls(Argument::any(), Argument::any()) - ->willReturn(['fedora' => "http://example.org/fcrepo/abc123", "drupal" => "http://example.org/node/1"]); $milliner->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willReturn(new Response(204)); $milliner = $milliner->reveal(); @@ -538,15 +537,13 @@ public function testCreateNodeVersionReturnsSuccessOnSuccess() public function testCreateMediaVersionReturnsSuccessOnSuccess() { $milliner = $this->prophesize(MillinerServiceInterface::class); - $milliner->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) + $milliner->createMediaVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willReturn(new Response(201)); - $milliner->getFileFromMedia(Argument::any(), Argument::any(), Argument::any()) - ->willReturn(array('fedora'=>'', 'drupal'=>'', 'jsonld'=>'')); $milliner = $milliner->reveal(); $controller = new MillinerController($milliner, $this->logger); // Nodes. - $uuid = "abc123"; + $uuid = '630e0c1d-1a38-4e3b-84f9-68d519bdc026'; $source_field = 'field_image'; $request = Request::create( "http://localhost:8000/milliner/media/$source_field/version", @@ -567,10 +564,8 @@ public function testCreateMediaVersionReturnsSuccessOnSuccess() ); $milliner = $this->prophesize(MillinerServiceInterface::class); - $milliner->createVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) + $milliner->createMediaVersion(Argument::any(), Argument::any(), Argument::any(), Argument::any()) ->willReturn(new Response(204)); - $milliner->getFileFromMedia(Argument::any(), Argument::any(), Argument::any()) - ->willReturn(array('fedora'=>'', 'drupal'=>'', 'jsonld'=>'')); $milliner = $milliner->reveal(); $controller = new MillinerController($milliner, $this->logger); diff --git a/Milliner/tests/Islandora/Milliner/Tests/SaveExternalTest.php b/Milliner/tests/Islandora/Milliner/Tests/SaveExternalTest.php index 3b891e95..d98f314d 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/SaveExternalTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/SaveExternalTest.php @@ -7,12 +7,13 @@ use GuzzleHttp\Psr7\Request; use GuzzleHttp\Psr7\Response; use Islandora\Chullo\IFedoraApi; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface; use Islandora\Milliner\Service\MillinerService; use Monolog\Handler\NullHandler; use Monolog\Logger; use PHPUnit\Framework\TestCase; use Prophecy\Argument; +use Prophecy\PhpUnit\ProphecyTrait; /** * Class SaveExternalTest @@ -21,6 +22,8 @@ */ class SaveExternalTest extends TestCase { + use ProphecyTrait; + /** * @var LoggerInterface */ @@ -31,6 +34,21 @@ class SaveExternalTest extends TestCase */ protected $modifiedDatePredicate; + /** + * @var string + */ + protected $uuid; + + /** + * @var string + */ + protected $fedoraBaseUrl; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $mapper; + /** * {@inheritdoc} */ @@ -42,48 +60,14 @@ protected function setUp(): void $this->logger->pushHandler(new NullHandler()); $this->modifiedDatePredicate = "http://schema.org/dateModified"; - } - /** - * @covers ::__construct - * @covers ::saveExternal - */ - public function testSaveExternalThrowsOnMintError() - { - $gemini = $this->prophesize(GeminiClient::class); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willThrow( - new RequestException( - "Unauthorized", - new Request('POST', 'http://localhost:8000/gemini'), - new Response(403, [], "Unauthorized") - ) - ); - $gemini = $gemini->reveal(); - - $drupal = $this->prophesize(Client::class); - $drupal = $drupal->reveal(); - - $fedora = $this->prophesize(IFedoraApi::class); - $fedora = $fedora->reveal(); - - $milliner = new MillinerService( - $fedora, - $drupal, - $gemini, - $this->logger, - $this->modifiedDatePredicate, - false - ); - - $this->expectException(\GuzzleHttp\Exception\RequestException::class, null, 403); + $this->uuid = '9541c0c1-5bee-4973-a9d0-e55c1658bc8'; + $this->fedoraBaseUrl = 'http://localhost:8080/fcrepo/rest'; - $milliner->saveExternal( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", - 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - "http://localhost:8080/fcrepo/rest/", - "Bearer islandora" - ); + $this->mapper = $this->prophesize(EntityMapperInterface::class); + $this->mapper->getFedoraPath($this->uuid) + ->willReturn("{$this->fedoraBaseUrl}/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"); + $this->mapper = $this->mapper->reveal(); } /** @@ -92,12 +76,6 @@ public function testSaveExternalThrowsOnMintError() */ public function testSaveExternalThrowsOnHeadError() { - $url = "http://localhost:8080/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc81"; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($url); - $gemini = $gemini->reveal(); - $drupal = $this->prophesize(Client::class); $drupal->head(Argument::any(), Argument::any()) ->willThrow( @@ -115,18 +93,19 @@ public function testSaveExternalThrowsOnHeadError() $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $this->expectException(\GuzzleHttp\Exception\RequestException::class, null, 403); $milliner->saveExternal( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -137,12 +116,6 @@ public function testSaveExternalThrowsOnHeadError() */ public function testSaveExternalThrowsOnPutError() { - $url = "http://localhost:8080/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc81"; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($url); - $gemini = $gemini->reveal(); - $drupal = $this->prophesize(Client::class); $drupal->head(Argument::any(), Argument::any()) ->willReturn(new Response(200, ['Content-Type' => 'image/jpeg'])); @@ -156,67 +129,19 @@ public function testSaveExternalThrowsOnPutError() $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $this->expectException(\RuntimeException::class, null, 403); $milliner->saveExternal( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", - 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - "http://localhost:8080/fcrepo/rest/", - "Bearer islandora" - ); - } - - /** - * @covers ::__construct - * @covers ::saveExternal - */ - public function testSaveExternalThrowsOnGeminiError() - { - $url = "http://localhost:8080/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc81"; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($url); - $gemini->saveUrls(Argument::any(), Argument::any(), Argument::any(), Argument::any()) - ->willThrow( - new RequestException( - "Unauthorized", - new Request('PUT', 'http://localhost:8000/gemini/9541c0c1-5bee-4973-a9d0-e55c1658bc81'), - new Response(403, [], "Unauthorized") - ) - ); - $gemini = $gemini->reveal(); - - $drupal = $this->prophesize(Client::class); - $drupal->head(Argument::any(), Argument::any()) - ->willReturn(new Response(200, ['Content-Type' => 'image/jpeg'])); - $drupal = $drupal->reveal(); - - $fedora = $this->prophesize(IFedoraApi::class); - $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn(new Response(201)); - $fedora = $fedora->reveal(); - - $this->expectException(\GuzzleHttp\Exception\RequestException::class, null, 403); - - $milliner = new MillinerService( - $fedora, - $drupal, - $gemini, - $this->logger, - $this->modifiedDatePredicate, - false - ); - - $milliner->saveExternal( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); } diff --git a/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php b/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php index 6a610396..364c6ffa 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/SaveMediaTest.php @@ -5,12 +5,13 @@ use GuzzleHttp\Client; use GuzzleHttp\Psr7\Response; use Islandora\Chullo\IFedoraApi; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface; use Islandora\Milliner\Service\MillinerService; use Monolog\Handler\NullHandler; use Monolog\Logger; use Prophecy\Argument; use PHPUnit\Framework\TestCase; +use Prophecy\PhpUnit\ProphecyTrait; /** * Class MillinerServiceTest @@ -19,6 +20,8 @@ */ class SaveMediaTest extends TestCase { + use ProphecyTrait; + /** * @var LoggerInterface */ @@ -29,6 +32,21 @@ class SaveMediaTest extends TestCase */ protected $modifiedDatePredicate; + /** + * @var string + */ + protected $uuid; + + /** + * @var string + */ + protected $fedoraBaseUrl; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $mapper; + /** * {@inheritdoc} */ @@ -40,6 +58,14 @@ protected function setUp(): void $this->logger->pushHandler(new NullHandler()); $this->modifiedDatePredicate = "http://schema.org/dateModified"; + + $this->uuid = 'ffb15b4f-54db-44ce-ad0b-3588889a3c9b'; + $this->fedoraBaseUrl = 'http://localhost:8080/fcrepo/rest'; + + $this->mapper = $this->prophesize(EntityMapperInterface::class); + $this->mapper->getFedoraPath($this->uuid) + ->willReturn("{$this->fedoraBaseUrl}/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b"); + $this->mapper = $this->mapper->reveal(); } /** @@ -64,14 +90,13 @@ public function testSaveMediaThrows500WithNoFileField() $fedora = $this->prophesize(IFedoraApi::class)->reveal(); - $gemini = $this->prophesize(GeminiClient::class)->reveal(); - $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); @@ -80,6 +105,7 @@ public function testSaveMediaThrows500WithNoFileField() $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -106,14 +132,13 @@ public function testSaveMediaThrows500WithEmptyFileField() $fedora = $this->prophesize(IFedoraApi::class)->reveal(); - $gemini = $this->prophesize(GeminiClient::class)->reveal(); - $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); @@ -122,6 +147,7 @@ public function testSaveMediaThrows500WithEmptyFileField() $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -148,17 +174,13 @@ public function testSaveMediaThrows404WhenFileIsNotInGemini() $fedora = $this->prophesize(IFedoraApi::class)->reveal(); - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn([]); - $gemini = $gemini->reveal(); - $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); @@ -167,6 +189,7 @@ public function testSaveMediaThrows404WhenFileIsNotInGemini() $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -198,29 +221,22 @@ public function testSaveMediaThrowsFedoraHeadError() $fedora = $this->prophesize(IFedoraApi::class); $fedora = $fedora->reveal(); - $mapping = [ - 'drupal' => 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - 'fedora' => 'http://localhost:8080/fcrepo/rest/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b', - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - $this->expectException(\RuntimeException::class, null, 404); $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -252,21 +268,13 @@ public function testSaveMediaThrows500WhenNoDescribedbyHeader() $fedora = $this->prophesize(IFedoraApi::class); $fedora = $fedora->reveal(); - $mapping = [ - 'drupal' => 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - 'fedora' => 'http://localhost:8080/fcrepo/rest/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b', - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); @@ -275,6 +283,7 @@ public function testSaveMediaThrows500WhenNoDescribedbyHeader() $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -316,21 +325,13 @@ public function testSaveMediaThrowsFedoraGetError() ->willReturn($fedora_get_response); $fedora = $fedora->reveal(); - $mapping = [ - 'drupal' => 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - 'fedora' => 'http://localhost:8080/fcrepo/rest/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b', - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); @@ -339,6 +340,7 @@ public function testSaveMediaThrowsFedoraGetError() $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -392,21 +394,13 @@ public function testSaveMediaThrows412OnStaleData() ->willReturn($fedora_get_response); $fedora = $fedora->reveal(); - $mapping = [ - 'drupal' => 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - 'fedora' => 'http://localhost:8080/fcrepo/rest/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b', - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); @@ -415,6 +409,7 @@ public function testSaveMediaThrows412OnStaleData() $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -473,21 +468,13 @@ public function testSaveMediaThrowsFedoraPutError() ->willReturn($fedora_put_response); $fedora = $fedora->reveal(); - $mapping = [ - 'drupal' => 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - 'fedora' => 'http://localhost:8080/fcrepo/rest/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b', - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); @@ -496,6 +483,7 @@ public function testSaveMediaThrowsFedoraPutError() $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -510,17 +498,21 @@ public function testSaveMediaThrowsFedoraPutError() */ public function testSaveMediaReturnsFedoraSuccess() { + $link = '; rel="alternate"; type="application/ld+json"'; + $link .= ',; rel="describes"'; $drupal_json_response = new Response( 200, [ 'Content-Type' => 'application/json', - "Link" => '; rel="alternate"; type="application/ld+json"', + "Link" => $link, ], file_get_contents(__DIR__ . '/../../../../static/Media.json') ); $drupal_jsonld_response = new Response( 200, - ['Content-Type' => 'application/ld+json'], + [ + 'Content-Type' => 'application/ld+json', + ], file_get_contents(__DIR__ . '/../../../../static/Media.jsonld') ); $drupal = $this->prophesize(Client::class); @@ -554,27 +546,25 @@ public function testSaveMediaReturnsFedoraSuccess() ->willReturn($fedora_put_response); $fedora = $fedora->reveal(); - $mapping = [ - 'drupal' => 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - 'fedora' => 'http://localhost:8080/fcrepo/rest/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b', - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); + $this->mapper = $this->prophesize(EntityMapperInterface::class); + $this->mapper->getFedoraPath('f0fd71b3-1fab-45e1-a5e9-78d50e0d7174') + ->willReturn("{$this->fedoraBaseUrl}/f0/fd/71/b3/f0fd71b3-1fab-45e1-a5e9-78d50e0d7174"); + $this->mapper = $this->mapper->reveal(); $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); @@ -595,17 +585,21 @@ public function testSaveMediaReturnsFedoraSuccess() */ public function testSaveMediaReturnsNoModifiedDate() { + $link = '; rel="alternate"; type="application/ld+json"'; + $link .= ',; rel="describes"'; $drupal_json_response = new Response( 200, [ 'Content-Type' => 'application/json', - "Link" => '; rel="alternate"; type="application/ld+json"', + "Link" => $link, ], file_get_contents(__DIR__ . '/../../../../static/Media.json') ); $drupal_jsonld_response = new Response( 200, - ['Content-Type' => 'application/ld+json'], + [ + 'Content-Type' => 'application/ld+json', + ], file_get_contents(__DIR__ . '/../../../../static/Media.jsonld') ); $drupal = $this->prophesize(Client::class); @@ -622,7 +616,6 @@ public function testSaveMediaReturnsNoModifiedDate() ); $drupal->head(Argument::any(), Argument::any()) ->willReturn($head_response); - $drupal = $drupal->reveal(); $fedora_get_response = new Response( @@ -640,27 +633,25 @@ public function testSaveMediaReturnsNoModifiedDate() ->willReturn($fedora_put_response); $fedora = $fedora->reveal(); - $mapping = [ - 'drupal' => 'http://localhost:8000/sites/default/files/2017-07/sample_0.jpeg', - 'fedora' => 'http://localhost:8080/fcrepo/rest/ff/b1/5b/4f/ffb15b4f-54db-44ce-ad0b-3588889a3c9b', - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); + $this->mapper = $this->prophesize(EntityMapperInterface::class); + $this->mapper->getFedoraPath('f0fd71b3-1fab-45e1-a5e9-78d50e0d7174') + ->willReturn("{$this->fedoraBaseUrl}/f0/fd/71/b3/f0fd71b3-1fab-45e1-a5e9-78d50e0d7174"); + $this->mapper = $this->mapper->reveal(); $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->saveMedia( "field_image", "http://localhost:8000/media/6?_format=json", + $this->fedoraBaseUrl, "Bearer islandora" ); diff --git a/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php b/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php index 451fa94c..0a5c0646 100644 --- a/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php +++ b/Milliner/tests/Islandora/Milliner/Tests/SaveNodeTest.php @@ -7,12 +7,13 @@ use GuzzleHttp\Psr7\Request; use GuzzleHttp\Exception\RequestException; use Islandora\Chullo\IFedoraApi; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface; use Islandora\Milliner\Service\MillinerService; use Monolog\Handler\NullHandler; use Monolog\Logger; use PHPUnit\Framework\TestCase; use Prophecy\Argument; +use Prophecy\PhpUnit\ProphecyTrait; /** * Class MillinerServiceTest @@ -21,6 +22,8 @@ */ class SaveNodeTest extends TestCase { + use ProphecyTrait; + /** * @var LoggerInterface */ @@ -31,6 +34,26 @@ class SaveNodeTest extends TestCase */ protected $modifiedDatePredicate; + /** + * @var string + */ + protected $uuid; + + /** + * @var string + */ + protected $fedoraBaseUrl; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $mapper; + + /** + * @var Islandora\Crayfish\Commons\EntityMapper\EntityMapper + */ + protected $drupal; + /** * {@inheritdoc} */ @@ -42,156 +65,59 @@ protected function setUp(): void $this->logger->pushHandler(new NullHandler()); $this->modifiedDatePredicate = "http://schema.org/dateModified"; - } - - /** - * @covers ::__construct - * @covers ::saveNode - */ - public function testCreateNodeThrowsOnMintError() - { - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn([]); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willThrow( - new RequestException( - "Unauthorized", - new Request('POST', 'http://localhost:8000/gemini'), - new Response(403, [], "Unauthorized") - ) - ); - $gemini = $gemini->reveal(); - - $drupal = $this->prophesize(Client::class); - $drupal = $drupal->reveal(); - - $fedora = $this->prophesize(IFedoraApi::class); - $fedora = $fedora->reveal(); - $milliner = new MillinerService( - $fedora, - $drupal, - $gemini, - $this->logger, - $this->modifiedDatePredicate, - false - ); - - $this->expectException(\GuzzleHttp\Exception\RequestException::class, null, 403); - - $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", - "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", - "Bearer islandora" - ); - } + $this->uuid = '9541c0c1-5bee-4973-a9d0-e55c1658bc8'; + $this->fedoraBaseUrl = 'http://localhost:8080/fcrepo/rest'; - /** - * @covers ::__construct - * @covers ::saveNode - * @covers ::processJsonld - */ - public function testCreateNodeThrowsOnFedoraError() - { - $url = "http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn([]); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($url); - $gemini = $gemini->reveal(); + $this->mapper = $this->prophesize(EntityMapperInterface::class); + $this->mapper->getFedoraPath($this->uuid) + ->willReturn("{$this->fedoraBaseUrl}/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"); + $this->mapper = $this->mapper->reveal(); $drupal_response = new Response( 200, ['Content-Type' => 'application/ld+json'], file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) + $this->drupal = $this->prophesize(Client::class); + $this->drupal->get(Argument::any(), Argument::any()) ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - - $fedora_response = new Response(403, [], null, '1.1', 'UNAUTHORIZED'); - $fedora = $this->prophesize(IFedoraApi::class); - $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($fedora_response); - $fedora = $fedora->reveal(); - - $milliner = new MillinerService( - $fedora, - $drupal, - $gemini, - $this->logger, - $this->modifiedDatePredicate, - false - ); - - $this->expectException(\RuntimeException::class, null, 403); - - $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", - "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", - "Bearer islandora" - ); + $this->drupal = $this->drupal->reveal(); } /** * @covers ::__construct * @covers ::saveNode - * @covers ::createNode * @covers ::processJsonld */ - public function testCreateNodeThrowsOnFedoraSaveError() + public function testCreateNodeThrowsOnFedoraError() { - $url = "http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn([]); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($url); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - - $fedora_get_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/ContentLDP-RS.jsonld') - ); + $fedora_head_response = new Response(404); $fedora_save_response = new Response(403, [], null, '1.1', 'UNAUTHORIZED'); $fedora = $this->prophesize(IFedoraApi::class); - $fedora->getResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($fedora_get_response); + $fedora->getResourceHeaders(Argument::any(), Argument::any(), Argument::any()) + ->willReturn($fedora_head_response); $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) ->willReturn($fedora_save_response); $fedora = $fedora->reveal(); $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $this->expectException(\RuntimeException::class, null, 403); $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - $token = "Bearer islandora" + $this->fedoraBaseUrl, + "Bearer islandora" ); } @@ -203,45 +129,29 @@ public function testCreateNodeThrowsOnFedoraSaveError() */ public function testCreateNodeReturnsFedora201() { - $url = "http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn([]); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($url); - $gemini->saveUrls(Argument::any(), Argument::any(), Argument::any(), Argument::any()) - ->willReturn(true); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - - $fedora_response = new Response(201); + $fedora_head_response = new Response(404); + $fedora_save_response = new Response(201); $fedora = $this->prophesize(IFedoraApi::class); + $fedora->getResourceHeaders(Argument::any(), Argument::any(), Argument::any()) + ->willReturn($fedora_head_response); $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($fedora_response); + ->willReturn($fedora_save_response); $fedora = $fedora->reveal(); $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); @@ -260,45 +170,29 @@ public function testCreateNodeReturnsFedora201() */ public function testCreateNodeReturnsFedora204() { - $url = "http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8"; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn([]); - $gemini->mintFedoraUrl(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($url); - $gemini->saveUrls(Argument::any(), Argument::any(), Argument::any(), Argument::any()) - ->willReturn(true); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - - $fedora_response = new Response(204); + $fedora_head_response = new Response(404); + $fedora_save_response = new Response(204); $fedora = $this->prophesize(IFedoraApi::class); + $fedora->getResourceHeaders(Argument::any(), Argument::any(), Argument::any()) + ->willReturn($fedora_head_response); $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($fedora_response); + ->willReturn($fedora_save_response); $fedora = $fedora->reveal(); $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); @@ -317,40 +211,40 @@ public function testCreateNodeReturnsFedora204() * @covers ::getModifiedTimestamp * @covers ::getFirstPredicate */ - public function testUpdateNodeThrowsOnFedoraGetError() + public function testUpdateNodeThrowsOnFedoraError() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - - $drupal = $this->prophesize(Client::class)->reveal(); - - $fedora_response = new Response(403, [], null, '1.1', 'UNAUTHORIZED'); + $fedora_head_response = new Response(200); + $fedora_get_response = new Response( + 200, + ['Content-Type' => 'application/ld+json'], + file_get_contents(__DIR__ . '/../../../../static/ContentLDP-RS.jsonld') + ); + $fedora_save_response = new Response(403, [], null, '1.1', 'UNAUTHORIZED'); $fedora = $this->prophesize(IFedoraApi::class); + $fedora->getResourceHeaders(Argument::any()) + ->willReturn($fedora_head_response); $fedora->getResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($fedora_response); + ->willReturn($fedora_get_response); + $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) + ->willReturn($fedora_save_response); $fedora = $fedora->reveal(); $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $this->expectException(\RuntimeException::class, null, 403); $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -365,15 +259,6 @@ public function testUpdateNodeThrowsOnFedoraGetError() */ public function testUpdateNodeThrows500OnBadDatePredicate() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - $drupal_response = new Response( 200, ['Content-Type' => 'application/ld+json'], @@ -384,12 +269,15 @@ public function testUpdateNodeThrows500OnBadDatePredicate() ->willReturn($drupal_response); $drupal = $drupal->reveal(); + $fedora_head_response = new Response(200); $fedora_get_response = new Response( 200, ['Content-Type' => 'application/ld+json'], file_get_contents(__DIR__ . '/../../../../static/ContentLDP-RS.jsonld') ); $fedora = $this->prophesize(IFedoraApi::class); + $fedora->getResourceHeaders(Argument::any()) + ->willReturn($fedora_head_response); $fedora->getResource(Argument::any(), Argument::any(), Argument::any()) ->willReturn($fedora_get_response); $fedora = $fedora->reveal(); @@ -399,16 +287,17 @@ public function testUpdateNodeThrows500OnBadDatePredicate() $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, - "total garbage", + $this->modifiedDatePredicate, + false, false ); $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -423,15 +312,6 @@ public function testUpdateNodeThrows500OnBadDatePredicate() */ public function testUpdateNodeThrows412OnStaleContent() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - $drupal_response = new Response( 200, ['Content-Type' => 'application/ld+json'], @@ -442,12 +322,15 @@ public function testUpdateNodeThrows412OnStaleContent() ->willReturn($drupal_response); $drupal = $drupal->reveal(); + $fedora_head_response = new Response(200); $fedora_get_response = new Response( 200, ['Content-Type' => 'application/ld+json'], file_get_contents(__DIR__ . '/../../../../static/ContentLDP-RS.jsonld') ); $fedora = $this->prophesize(IFedoraApi::class); + $fedora->getResourceHeaders(Argument::any()) + ->willReturn($fedora_head_response); $fedora->getResource(Argument::any(), Argument::any(), Argument::any()) ->willReturn($fedora_get_response); $fedora = $fedora->reveal(); @@ -455,79 +338,19 @@ public function testUpdateNodeThrows412OnStaleContent() $milliner = new MillinerService( $fedora, $drupal, - $gemini, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $this->expectException(\RuntimeException::class, null, 412); $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", - "Bearer islandora" - ); - } - - /** - * @covers ::__construct - * @covers ::saveNode - * @covers ::updateNode - * @covers ::processJsonld - * @covers ::getModifiedTimestamp - * @covers ::getFirstPredicate - */ - public function testUpdateNodeThrowsOnFedoraSaveError() - { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - - $fedora_get_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/ContentLDP-RS.jsonld') - ); - $fedora_save_response = new Response(403, [], null, '1.1', 'UNAUTHORIZED'); - $fedora = $this->prophesize(IFedoraApi::class); - $fedora->getResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($fedora_get_response); - $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) - ->willReturn($fedora_save_response); - $fedora = $fedora->reveal(); - - $milliner = new MillinerService( - $fedora, - $drupal, - $gemini, - $this->logger, - $this->modifiedDatePredicate, - false - ); - - $this->expectException(\RuntimeException::class, null, 403); - - $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", - "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); } @@ -542,27 +365,7 @@ public function testUpdateNodeThrowsOnFedoraSaveError() */ public function testUpdateNodeReturnsFedora201() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini->saveUrls(Argument::any(), Argument::any(), Argument::any(), Argument::any()) - ->willReturn(true); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - + $fedora_head_response = new Response(200); $fedora_get_response = new Response( 200, ['Content-Type' => 'application/ld+json'], @@ -570,6 +373,8 @@ public function testUpdateNodeReturnsFedora201() ); $fedora_save_response = new Response(201); $fedora = $this->prophesize(IFedoraApi::class); + $fedora->getResourceHeaders(Argument::any()) + ->willReturn($fedora_head_response); $fedora->getResource(Argument::any(), Argument::any(), Argument::any()) ->willReturn($fedora_get_response); $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) @@ -578,17 +383,18 @@ public function testUpdateNodeReturnsFedora201() $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); @@ -609,27 +415,7 @@ public function testUpdateNodeReturnsFedora201() */ public function testUpdateNodeReturnsFedora204() { - $mapping = [ - 'drupal' => '"http://localhost:8000/node/1?_format=jsonld"', - 'fedora' => 'http://localhost:8080/fcrepo/rest/95/41/c0/c1/9541c0c1-5bee-4973-a9d0-e55c1658bc8' - ]; - $gemini = $this->prophesize(GeminiClient::class); - $gemini->getUrls(Argument::any(), Argument::any()) - ->willReturn($mapping); - $gemini->saveUrls(Argument::any(), Argument::any(), Argument::any(), Argument::any()) - ->willReturn(true); - $gemini = $gemini->reveal(); - - $drupal_response = new Response( - 200, - ['Content-Type' => 'application/ld+json'], - file_get_contents(__DIR__ . '/../../../../static/Content.jsonld') - ); - $drupal = $this->prophesize(Client::class); - $drupal->get(Argument::any(), Argument::any()) - ->willReturn($drupal_response); - $drupal = $drupal->reveal(); - + $fedora_head_response = new Response(200); $fedora_get_response = new Response( 200, ['Content-Type' => 'application/ld+json', 'ETag' => 'W\abc123'], @@ -637,6 +423,8 @@ public function testUpdateNodeReturnsFedora204() ); $fedora_save_response = new Response(204); $fedora = $this->prophesize(IFedoraApi::class); + $fedora->getResourceHeaders(Argument::any()) + ->willReturn($fedora_head_response); $fedora->getResource(Argument::any(), Argument::any(), Argument::any()) ->willReturn($fedora_get_response); $fedora->saveResource(Argument::any(), Argument::any(), Argument::any()) @@ -645,17 +433,18 @@ public function testUpdateNodeReturnsFedora204() $milliner = new MillinerService( $fedora, - $drupal, - $gemini, + $this->drupal, + $this->mapper, $this->logger, $this->modifiedDatePredicate, + false, false ); $response = $milliner->saveNode( - "9541c0c1-5bee-4973-a9d0-e55c1658bc81", + $this->uuid, "http://localhost:8000/node/1?_format=jsonld", - "http://localhost:8080/fcrepo/rest/", + $this->fedoraBaseUrl, "Bearer islandora" ); From de33e103f9093198d6157c0c7bdb005fc6afa1ef Mon Sep 17 00:00:00 2001 From: dannylamb Date: Mon, 1 Mar 2021 16:05:25 -0400 Subject: [PATCH 15/21] Adding no-gemini branch to Recast --- Recast/composer.json | 3 + Recast/composer.lock | 915 +++++++++++++++++++++---------------------- 2 files changed, 460 insertions(+), 458 deletions(-) diff --git a/Recast/composer.json b/Recast/composer.json index 690a8b67..c68d1002 100644 --- a/Recast/composer.json +++ b/Recast/composer.json @@ -46,6 +46,9 @@ "config": { "sort-packages": true }, + "require": { + "islandora/crayfish-commons": "dev-no-gemini" + }, "require-dev": { "symfony/browser-kit": "^3.0", "symfony/css-selector": "^3.0", diff --git a/Recast/composer.lock b/Recast/composer.lock index 4e6e9f7f..7f976612 100644 --- a/Recast/composer.lock +++ b/Recast/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4821fa896f6e9d2e7b54f19499e7b8e5", + "content-hash": "5c11406246cde582cadf6c106872b7c9", "packages": [ { "name": "doctrine/cache", @@ -197,10 +197,6 @@ "sqlserver", "sqlsrv" ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.12.1" - }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -379,11 +375,6 @@ "rdfa", "sparql" ], - "support": { - "forum": "http://groups.google.com/group/easyrdf/", - "issues": "http://github.com/easyrdf/easyrdf/issues", - "source": "https://github.com/easyrdf/easyrdf/tree/1.1.1" - }, "time": "2020-12-02T08:47:31+00:00" }, { @@ -593,12 +584,12 @@ "source": { "type": "git", "url": "https://github.com/Islandora/chullo.git", - "reference": "6a5454e2bcdb2b24bf481b842692d4d1de6a0287" + "reference": "7f7df8847844ab478f65de8377c5678d037cb5e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Islandora/chullo/zipball/6a5454e2bcdb2b24bf481b842692d4d1de6a0287", - "reference": "6a5454e2bcdb2b24bf481b842692d4d1de6a0287", + "url": "https://api.github.com/repos/Islandora/chullo/zipball/7f7df8847844ab478f65de8377c5678d037cb5e3", + "reference": "7f7df8847844ab478f65de8377c5678d037cb5e3", "shasum": "" }, "require": { @@ -613,7 +604,6 @@ "sebastian/phpcpd": "^6.0", "squizlabs/php_codesniffer": "^3.0" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -643,24 +633,20 @@ ], "description": "A PHP client for interacting with a Fedora 4 server.", "homepage": "https://github.com/Islandora/chullo", - "support": { - "issues": "https://github.com/Islandora/documentation/issues", - "source": "https://github.com/Islandora/chullo/tree/dev" - }, - "time": "2020-12-11T21:38:08+00:00" + "time": "2021-02-16T15:51:00+00:00" }, { "name": "islandora/crayfish-commons", - "version": "dev-dev", + "version": "dev-no-gemini", "source": { "type": "git", "url": "https://github.com/Islandora/Crayfish-Commons.git", - "reference": "d7c0044723c2089f7757fb5c9dd523397938a8e9" + "reference": "d6e22f7556c175e93410d5830398068d6b4fcd34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Islandora/Crayfish-Commons/zipball/d7c0044723c2089f7757fb5c9dd523397938a8e9", - "reference": "d7c0044723c2089f7757fb5c9dd523397938a8e9", + "url": "https://api.github.com/repos/Islandora/Crayfish-Commons/zipball/d6e22f7556c175e93410d5830398068d6b4fcd34", + "reference": "d6e22f7556c175e93410d5830398068d6b4fcd34", "shasum": "" }, "require": { @@ -671,17 +657,17 @@ "pimple/pimple": "~3.0", "psr/log": "^1.0.1", "silex/silex": "^2.0", - "symfony/http-foundation": "^3.2.6", - "symfony/security": "^3.2", - "symfony/yaml": "^3.2" + "symfony/http-foundation": "^3.4 || ^4.4", + "symfony/security": "^3.4 || ^4.4", + "symfony/yaml": "^3.4 || ^4.4" }, "require-dev": { "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^5.0", - "sebastian/phpcpd": "^3.0", - "squizlabs/php_codesniffer": "^2.0" + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.0", + "sebastian/phpcpd": "^6.0", + "squizlabs/php_codesniffer": "^3.0" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -706,11 +692,7 @@ ], "description": "Shared code amongst Islandora Crayfish microservices", "homepage": "https://github.com/Islandora/Crayfish-Commons", - "support": { - "issues": "https://github.com/Islandora/documentation/issues", - "source": "https://github.com/Islandora/Crayfish-Commons/tree/dev" - }, - "time": "2020-11-12T23:33:17+00:00" + "time": "2021-02-03T19:58:16+00:00" }, { "name": "ml/iri", @@ -818,16 +800,16 @@ }, { "name": "monolog/monolog", - "version": "1.25.5", + "version": "1.26.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0" + "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1817faadd1846cd08be9a49e905dc68823bc38c0", - "reference": "1817faadd1846cd08be9a49e905dc68823bc38c0", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/2209ddd84e7ef1256b7af205d0717fb62cfc9c33", + "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33", "shasum": "" }, "require": { @@ -843,7 +825,7 @@ "graylog2/gelf-php": "~1.0", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", - "php-parallel-lint/php-parallel-lint": "^1.0", + "phpstan/phpstan": "^0.12.59", "phpunit/phpunit": "~4.5", "ruflin/elastica": ">=0.90 <3.0", "sentry/sentry": "^0.13", @@ -863,11 +845,6 @@ "sentry/sentry": "Allow sending log messages to a Sentry server" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { "psr-4": { "Monolog\\": "src/Monolog" @@ -891,10 +868,6 @@ "logging", "psr-3" ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/1.25.5" - }, "funding": [ { "url": "https://github.com/Seldaek", @@ -905,7 +878,7 @@ "type": "tidelift" } ], - "time": "2020-07-23T08:35:51+00:00" + "time": "2020-12-14T12:56:38+00:00" }, { "name": "namshi/jose", @@ -1022,10 +995,56 @@ "container", "dependency injection" ], + "time": "2020-11-24T20:35:42+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.3.1" + "source": "https://github.com/php-fig/cache/tree/master" }, - "time": "2020-11-24T20:35:42+00:00" + "time": "2016-08-06T20:24:11+00:00" }, { "name": "psr/container", @@ -1229,65 +1248,62 @@ }, { "name": "silex/silex", - "version": "v2.2.4", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/silexphp/Silex.git", - "reference": "d2531e5b8099c429b752ad2154e85999c3689057" + "reference": "6bc31c1b8c4ef614a7115320fd2d3b958032f131" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Silex/zipball/d2531e5b8099c429b752ad2154e85999c3689057", - "reference": "d2531e5b8099c429b752ad2154e85999c3689057", + "url": "https://api.github.com/repos/silexphp/Silex/zipball/6bc31c1b8c4ef614a7115320fd2d3b958032f131", + "reference": "6bc31c1b8c4ef614a7115320fd2d3b958032f131", "shasum": "" }, "require": { - "php": ">=5.5.9", - "pimple/pimple": "~3.0", - "symfony/event-dispatcher": "~2.8|^3.0", - "symfony/http-foundation": "~2.8|^3.0", - "symfony/http-kernel": "~2.8|^3.0", - "symfony/routing": "~2.8|^3.0" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35 || >= 5.0, <5.4.3" + "php": ">=7.1.3", + "pimple/pimple": "^3.0", + "symfony/event-dispatcher": "^4.0", + "symfony/http-foundation": "^4.0", + "symfony/http-kernel": "^4.0", + "symfony/routing": "^4.0" }, "replace": { "silex/api": "self.version", "silex/providers": "self.version" }, "require-dev": { - "doctrine/dbal": "~2.2", + "doctrine/dbal": "^2.2", "monolog/monolog": "^1.4.1", - "swiftmailer/swiftmailer": "~5", - "symfony/asset": "~2.8|^3.0", - "symfony/browser-kit": "~2.8|^3.0", - "symfony/config": "~2.8|^3.0", - "symfony/css-selector": "~2.8|^3.0", - "symfony/debug": "~2.8|^3.0", - "symfony/doctrine-bridge": "~2.8|^3.0", - "symfony/dom-crawler": "~2.8|^3.0", - "symfony/expression-language": "~2.8|^3.0", - "symfony/finder": "~2.8|^3.0", - "symfony/form": "~2.8|^3.0", - "symfony/intl": "~2.8|^3.0", - "symfony/monolog-bridge": "~2.8|^3.0", - "symfony/options-resolver": "~2.8|^3.0", + "swiftmailer/swiftmailer": "^5", + "symfony/asset": "^4.0", + "symfony/browser-kit": "^4.0", + "symfony/config": "^4.0", + "symfony/css-selector": "^4.0", + "symfony/debug": "^4.0", + "symfony/doctrine-bridge": "^4.0", + "symfony/dom-crawler": "^4.0", + "symfony/expression-language": "^4.0", + "symfony/finder": "^4.0", + "symfony/form": "^4.0", + "symfony/intl": "^4.0", + "symfony/monolog-bridge": "^4.0", + "symfony/options-resolver": "^4.0", "symfony/phpunit-bridge": "^3.2", - "symfony/process": "~2.8|^3.0", - "symfony/security": "~2.8|^3.0", - "symfony/serializer": "~2.8|^3.0", - "symfony/translation": "~2.8|^3.0", - "symfony/twig-bridge": "~2.8|^3.0", - "symfony/validator": "~2.8|^3.0", - "symfony/var-dumper": "~2.8|^3.0", - "symfony/web-link": "^3.3", - "twig/twig": "~1.28|~2.0" + "symfony/process": "^4.0", + "symfony/security": "^4.0", + "symfony/serializer": "^4.0", + "symfony/translation": "^4.0", + "symfony/twig-bridge": "^4.0", + "symfony/validator": "^4.0", + "symfony/var-dumper": "^4.0", + "symfony/web-link": "^4.0", + "twig/twig": "^2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "2.3.x-dev" } }, "autoload": { @@ -1314,25 +1330,115 @@ "keywords": [ "microframework" ], + "abandoned": "symfony/flex", + "time": "2018-04-20T05:17:01+00:00" + }, + { + "name": "symfony/contracts", + "version": "v1.1.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/contracts.git", + "reference": "011c20407c4b99d454f44021d023fb39ce23b73d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/contracts/zipball/011c20407c4b99d454f44021d023fb39ce23b73d", + "reference": "011c20407c4b99d454f44021d023fb39ce23b73d", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "psr/cache": "^1.0", + "psr/container": "^1.0" + }, + "replace": { + "symfony/cache-contracts": "self.version", + "symfony/event-dispatcher-contracts": "self.version", + "symfony/http-client-contracts": "self.version", + "symfony/service-contracts": "self.version", + "symfony/translation-contracts": "self.version" + }, + "require-dev": { + "symfony/polyfill-intl-idn": "^1.10" + }, + "suggest": { + "psr/event-dispatcher": "When using the EventDispatcher contracts", + "symfony/cache-implementation": "", + "symfony/event-dispatcher-implementation": "", + "symfony/http-client-implementation": "", + "symfony/service-implementation": "", + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\": "" + }, + "exclude-from-classmap": [ + "**/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A set of abstractions extracted out of the Symfony components", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], "support": { - "issues": "https://github.com/silexphp/Silex/issues", - "source": "https://github.com/silexphp/Silex/tree/v2.2.4" + "source": "https://github.com/symfony/contracts/tree/v1.1.10" }, - "abandoned": "symfony/flex", - "time": "2018-03-16T23:34:20+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-02T16:08:58+00:00" }, { "name": "symfony/debug", - "version": "v4.4.17", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "65fe7b49868378319b82da3035fb30801b931c47" + "reference": "af4987aa4a5630e9615be9d9c3ed1b0f24ca449c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/65fe7b49868378319b82da3035fb30801b931c47", - "reference": "65fe7b49868378319b82da3035fb30801b931c47", + "url": "https://api.github.com/repos/symfony/debug/zipball/af4987aa4a5630e9615be9d9c3ed1b0f24ca449c", + "reference": "af4987aa4a5630e9615be9d9c3ed1b0f24ca449c", "shasum": "" }, "require": { @@ -1369,11 +1475,8 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "Provides tools to ease debugging PHP code", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.17" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1388,7 +1491,7 @@ "type": "tidelift" } ], - "time": "2020-10-28T20:42:29+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1438,9 +1541,6 @@ ], "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/master" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1459,31 +1559,38 @@ }, { "name": "symfony/event-dispatcher", - "version": "v3.4.47", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "31fde73757b6bad247c54597beef974919ec6860" + "reference": "c352647244bd376bf7d31efbd5401f13f50dad0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/31fde73757b6bad247c54597beef974919ec6860", - "reference": "31fde73757b6bad247c54597beef974919ec6860", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c352647244bd376bf7d31efbd5401f13f50dad0c", + "reference": "c352647244bd376bf7d31efbd5401f13f50dad0c", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/debug": "~3.4|~4.4", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/dependency-injection": "", @@ -1512,11 +1619,8 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v3.4.47" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1531,29 +1635,31 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.47", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b9885fcce6fe494201da4f70a9309770e9d13dc8" + "reference": "8888741b633f6c3d1e572b7735ad2cae3e03f9c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b9885fcce6fe494201da4f70a9309770e9d13dc8", - "reference": "b9885fcce6fe494201da4f70a9309770e9d13dc8", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8888741b633f6c3d1e572b7735ad2cae3e03f9c5", + "reference": "8888741b633f6c3d1e572b7735ad2cae3e03f9c5", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": ">=7.1.3", + "symfony/mime": "^4.3|^5.0", "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" + "predis/predis": "~1.0", + "symfony/expression-language": "^3.4|^4.0|^5.0" }, "type": "library", "autoload": { @@ -1578,11 +1684,8 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony HttpFoundation Component", + "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/v3.4.47" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1597,35 +1700,37 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.47", + "version": "v4.2.12", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "a98a4c30089e6a2d52a9fa236f718159b539f6f5" + "reference": "8a7c5ef599466af6e972c705507f815df9c490ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a98a4c30089e6a2d52a9fa236f718159b539f6f5", - "reference": "a98a4c30089e6a2d52a9fa236f718159b539f6f5", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8a7c5ef599466af6e972c705507f815df9c490ae", + "reference": "8a7c5ef599466af6e972c705507f815df9c490ae", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/log": "~1.0", - "symfony/debug": "^3.3.3|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", + "symfony/contracts": "^1.0.2", + "symfony/debug": "~3.4|~4.0", + "symfony/event-dispatcher": "~4.1", + "symfony/http-foundation": "^4.1.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-php56": "~1.8" }, "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", - "symfony/var-dumper": "<3.3", + "symfony/config": "<3.4", + "symfony/dependency-injection": "<4.2", + "symfony/translation": "<4.2", + "symfony/var-dumper": "<4.1.1", "twig/twig": "<1.34|<2.4,>=2" }, "provide": { @@ -1633,31 +1738,34 @@ }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "~2.8|~3.0|~4.0", - "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/console": "~2.8|~3.0|~4.0", - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "^3.4.10|^4.0.10", - "symfony/dom-crawler": "~2.8|~3.0|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0", + "symfony/browser-kit": "~3.4|~4.0", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/css-selector": "~3.4|~4.0", + "symfony/dependency-injection": "^4.2", + "symfony/dom-crawler": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0", - "symfony/templating": "~2.8|~3.0|~4.0", - "symfony/translation": "~2.8|~3.0|~4.0", - "symfony/var-dumper": "~3.3|~4.0" + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "~4.2", + "symfony/var-dumper": "^4.1.1" }, "suggest": { "symfony/browser-kit": "", "symfony/config": "", "symfony/console": "", "symfony/dependency-injection": "", - "symfony/finder": "", "symfony/var-dumper": "" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, "autoload": { "psr-4": { "Symfony\\Component\\HttpKernel\\": "" @@ -1682,9 +1790,60 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-kernel/tree/v3.4.47" + "time": "2019-11-13T08:51:34+00:00" + }, + { + "name": "symfony/inflector", + "version": "v5.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/inflector.git", + "reference": "4c285002228d0e27480e5eee871f4e3f0a05a4eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/inflector/zipball/4c285002228d0e27480e5eee871f4e3f0a05a4eb", + "reference": "4c285002228d0e27480e5eee871f4e3f0a05a4eb", + "shasum": "" }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/string": "~5.1.10|^5.2.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Inflector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts words between their singular and plural forms (English only)", + "homepage": "https://symfony.com", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string", + "symfony", + "words" + ], "funding": [ { "url": "https://symfony.com/sponsor", @@ -1699,31 +1858,46 @@ "type": "tidelift" } ], - "time": "2020-11-27T08:42:42+00:00" + "time": "2021-01-10T16:29:19+00:00" }, { - "name": "symfony/inflector", - "version": "v5.2.0", + "name": "symfony/mime", + "version": "v5.2.3", "source": { "type": "git", - "url": "https://github.com/symfony/inflector.git", - "reference": "ba33a08d608c5b26ef768b6652876098dd3ace36" + "url": "https://github.com/symfony/mime.git", + "reference": "7dee6a43493f39b51ff6c5bb2bd576fe40a76c86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/ba33a08d608c5b26ef768b6652876098dd3ace36", - "reference": "ba33a08d608c5b26ef768b6652876098dd3ace36", + "url": "https://api.github.com/repos/symfony/mime/zipball/7dee6a43493f39b51ff6c5bb2bd576fe40a76c86", + "reference": "7dee6a43493f39b51ff6c5bb2bd576fe40a76c86", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/deprecation-contracts": "^2.1", - "symfony/string": "^5.1" + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.1", + "symfony/property-info": "^4.4|^5.1", + "symfony/serializer": "^5.2" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Inflector\\": "" + "Symfony\\Component\\Mime\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -1735,27 +1909,20 @@ ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Inflector Component", + "description": "Allows manipulating MIME messages", "homepage": "https://symfony.com", "keywords": [ - "inflection", - "pluralize", - "singularize", - "string", - "symfony", - "words" + "mime", + "mime-type" ], - "support": { - "source": "https://github.com/symfony/inflector/tree/v5.2.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1770,20 +1937,20 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2021-02-02T06:10:15+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.20.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", "shasum": "" }, "require": { @@ -1795,7 +1962,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1832,9 +1999,6 @@ "polyfill", "portable" ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1849,20 +2013,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.20.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", "shasum": "" }, "require": { @@ -1874,7 +2038,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1913,9 +2077,6 @@ "portable", "shim" ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.20.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1930,20 +2091,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.20.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117" + "reference": "2d63434d922daf7da8dd863e7907e67ee3031483" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/2d63434d922daf7da8dd863e7907e67ee3031483", + "reference": "2d63434d922daf7da8dd863e7907e67ee3031483", "shasum": "" }, "require": { @@ -1957,7 +2118,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2000,9 +2161,6 @@ "portable", "shim" ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2017,20 +2175,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.20.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "727d1096295d807c309fb01a851577302394c897" + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", - "reference": "727d1096295d807c309fb01a851577302394c897", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", "shasum": "" }, "require": { @@ -2042,7 +2200,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2084,9 +2242,6 @@ "portable", "shim" ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2101,20 +2256,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.20.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", "shasum": "" }, "require": { @@ -2126,7 +2281,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2164,9 +2319,6 @@ "portable", "shim" ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2181,7 +2333,7 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-php56", @@ -2321,16 +2473,16 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.20.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930" + "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", + "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", "shasum": "" }, "require": { @@ -2339,7 +2491,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2376,9 +2528,6 @@ "portable", "shim" ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2393,20 +2542,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.20.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", "shasum": "" }, "require": { @@ -2415,7 +2564,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2459,9 +2608,6 @@ "portable", "shim" ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2476,20 +2622,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/property-access", - "version": "v4.4.17", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "ab8184f093095b40c3e7688bc4eb1d0484da327c" + "reference": "94a1d9837396c71a0d8c31686c16693a15651622" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/ab8184f093095b40c3e7688bc4eb1d0484da327c", - "reference": "ab8184f093095b40c3e7688bc4eb1d0484da327c", + "url": "https://api.github.com/repos/symfony/property-access/zipball/94a1d9837396c71a0d8c31686c16693a15651622", + "reference": "94a1d9837396c71a0d8c31686c16693a15651622", "shasum": "" }, "require": { @@ -2525,7 +2671,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony PropertyAccess Component", + "description": "Provides functions to read and write from/to an object or array using a simple string notation", "homepage": "https://symfony.com", "keywords": [ "access", @@ -2538,9 +2684,6 @@ "property path", "reflection" ], - "support": { - "source": "https://github.com/symfony/property-access/tree/v4.4.17" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2555,38 +2698,38 @@ "type": "tidelift" } ], - "time": "2020-10-31T22:44:29+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { "name": "symfony/routing", - "version": "v3.4.47", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "3e522ac69cadffd8131cc2b22157fa7662331a6c" + "reference": "87529f6e305c7acb162840d1ea57922038072425" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3e522ac69cadffd8131cc2b22157fa7662331a6c", - "reference": "3e522ac69cadffd8131cc2b22157fa7662331a6c", + "url": "https://api.github.com/repos/symfony/routing/zipball/87529f6e305c7acb162840d1ea57922038072425", + "reference": "87529f6e305c7acb162840d1ea57922038072425", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.1.3" }, "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, "require-dev": { - "doctrine/annotations": "~1.0", + "doctrine/annotations": "^1.10.4", "psr/log": "~1.0", - "symfony/config": "^3.3.1|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~2.8|~3.0|~4.0", - "symfony/yaml": "~3.4|~4.0" + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "suggest": { "doctrine/annotations": "For using the annotation loader", @@ -2618,7 +2761,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Routing Component", + "description": "Maps an HTTP request to a set of configuration variables", "homepage": "https://symfony.com", "keywords": [ "router", @@ -2626,9 +2769,6 @@ "uri", "url" ], - "support": { - "source": "https://github.com/symfony/routing/tree/v3.4.47" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2643,7 +2783,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { "name": "symfony/security", @@ -2721,9 +2861,6 @@ ], "description": "Symfony Security Component", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/security/tree/v3.4.47" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2742,16 +2879,16 @@ }, { "name": "symfony/string", - "version": "v5.2.0", + "version": "v5.2.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242" + "reference": "c95468897f408dd0aca2ff582074423dd0455122" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/40e975edadd4e32cd16f3753b3bad65d9ac48242", - "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242", + "url": "https://api.github.com/repos/symfony/string/zipball/c95468897f408dd0aca2ff582074423dd0455122", + "reference": "c95468897f408dd0aca2ff582074423dd0455122", "shasum": "" }, "require": { @@ -2794,7 +2931,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony String component", + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", "homepage": "https://symfony.com", "keywords": [ "grapheme", @@ -2804,9 +2941,6 @@ "utf-8", "utf8" ], - "support": { - "source": "https://github.com/symfony/string/tree/v5.2.0" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2821,31 +2955,31 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:08:07+00:00" + "time": "2021-01-25T15:14:59+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.47", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "88289caa3c166321883f67fe5130188ebbb47094" + "reference": "17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/88289caa3c166321883f67fe5130188ebbb47094", - "reference": "88289caa3c166321883f67fe5130188ebbb47094", + "url": "https://api.github.com/repos/symfony/yaml/zipball/17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9", + "reference": "17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": ">=7.1.3", "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/console": "<3.4" }, "require-dev": { - "symfony/console": "~3.4|~4.0" + "symfony/console": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -2873,11 +3007,8 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Yaml Component", + "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v3.4.47" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2892,7 +3023,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T10:57:07+00:00" + "time": "2021-01-27T09:09:26+00:00" } ], "packages-dev": [ @@ -2945,10 +3076,6 @@ "constructor", "instantiate" ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" - }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -3011,10 +3138,6 @@ "object", "object graph" ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" - }, "funding": [ { "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", @@ -3025,16 +3148,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.10.3", + "version": "v4.10.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984" + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", - "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", "shasum": "" }, "require": { @@ -3073,11 +3196,7 @@ "parser", "php" ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.3" - }, - "time": "2020-12-03T17:45:45+00:00" + "time": "2020-12-20T10:01:03+00:00" }, { "name": "phar-io/manifest", @@ -3133,24 +3252,20 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" - }, "time": "2020-06-27T14:33:11+00:00" }, { "name": "phar-io/version", - "version": "3.0.3", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae" + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/726c026815142e4f8677b7cb7f2249c9ffb7ecae", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { @@ -3184,11 +3299,7 @@ } ], "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.0.3" - }, - "time": "2020-11-30T09:21:21+00:00" + "time": "2021-02-23T14:00:09+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -3350,16 +3461,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.12.1", + "version": "1.12.2", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d" + "reference": "245710e971a030f42e08f4912863805570f23d39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", + "reference": "245710e971a030f42e08f4912863805570f23d39", "shasum": "" }, "require": { @@ -3371,7 +3482,7 @@ }, "require-dev": { "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0 <9.3" + "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { @@ -3409,11 +3520,7 @@ "spy", "stub" ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.12.1" - }, - "time": "2020-09-29T09:10:42+00:00" + "time": "2020-12-19T10:15:11+00:00" }, { "name": "phpunit/php-code-coverage", @@ -3480,10 +3587,6 @@ "testing", "xunit" ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3540,10 +3643,6 @@ "filesystem", "iterator" ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3603,10 +3702,6 @@ "keywords": [ "process" ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3662,10 +3757,6 @@ "keywords": [ "template" ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3721,10 +3812,6 @@ "keywords": [ "timer" ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3735,16 +3822,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.0", + "version": "9.5.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe" + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", - "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f661659747f2f87f9e72095bb207bceb0f151cb4", + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4", "shasum": "" }, "require": { @@ -3820,10 +3907,6 @@ "testing", "xunit" ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.0" - }, "funding": [ { "url": "https://phpunit.de/donate.html", @@ -3834,7 +3917,7 @@ "type": "github" } ], - "time": "2020-12-04T05:05:53+00:00" + "time": "2021-02-02T14:45:58+00:00" }, { "name": "sebastian/cli-parser", @@ -3880,10 +3963,6 @@ ], "description": "Library for parsing CLI options", "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3936,10 +4015,6 @@ ], "description": "Collection of value objects that represent the PHP code units", "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -3991,10 +4066,6 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4065,10 +4136,6 @@ "compare", "equality" ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4122,10 +4189,6 @@ ], "description": "Library for calculating the complexity of PHP code units", "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4188,10 +4251,6 @@ "unidiff", "unified diff" ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4251,10 +4310,6 @@ "environment", "hhvm" ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4328,10 +4383,6 @@ "export", "exporter" ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4392,10 +4443,6 @@ "keywords": [ "global state" ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4449,10 +4496,6 @@ ], "description": "Library for counting the lines of code in PHP source code", "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4506,10 +4549,6 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4561,10 +4600,6 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4622,10 +4657,6 @@ ], "description": "Copy/Paste Detector (CPD) for PHP code.", "homepage": "https://github.com/sebastianbergmann/phpcpd", - "support": { - "issues": "https://github.com/sebastianbergmann/phpcpd/issues", - "source": "https://github.com/sebastianbergmann/phpcpd/tree/6.0.3" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4685,10 +4716,6 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4740,10 +4767,6 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4796,10 +4819,6 @@ ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4849,10 +4868,6 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, "funding": [ { "url": "https://github.com/sebastianbergmann", @@ -4910,11 +4925,6 @@ "phpcs", "standards" ], - "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" - }, "time": "2020-10-23T02:01:07+00:00" }, { @@ -4967,9 +4977,6 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/browser-kit/tree/v3.4.47" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5032,9 +5039,6 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/css-selector/tree/v3.4.47" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5053,16 +5057,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v4.4.17", + "version": "v4.4.19", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "30ad9ac96a01913195bf0328d48e29d54fa53e6e" + "reference": "21032c566558255e551d23f4a516434c9e3a9a78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/30ad9ac96a01913195bf0328d48e29d54fa53e6e", - "reference": "30ad9ac96a01913195bf0328d48e29d54fa53e6e", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/21032c566558255e551d23f4a516434c9e3a9a78", + "reference": "21032c566558255e551d23f4a516434c9e3a9a78", "shasum": "" }, "require": { @@ -5103,11 +5107,8 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DomCrawler Component", + "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v4.4.17" - }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5122,7 +5123,7 @@ "type": "tidelift" } ], - "time": "2020-10-24T11:50:19+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { "name": "theseer/tokenizer", @@ -5235,9 +5236,7 @@ }, "prefer-stable": true, "prefer-lowest": false, - "platform": { - "php": "^7.3 || ^7.4" - }, + "platform": [], "platform-dev": [], - "plugin-api-version": "2.0.0" + "plugin-api-version": "1.1.0" } From b2a83dcd21044a58f777a432e8f5a5518d466450 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Mon, 1 Mar 2021 16:08:28 -0400 Subject: [PATCH 16/21] Gutting gemini client from Recast --- Recast/src/Controller/RecastController.php | 14 ++++++++------ Recast/src/app.php | 11 +++-------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/Recast/src/Controller/RecastController.php b/Recast/src/Controller/RecastController.php index f9d3b728..11c8835f 100644 --- a/Recast/src/Controller/RecastController.php +++ b/Recast/src/Controller/RecastController.php @@ -2,7 +2,7 @@ namespace Islandora\Recast\Controller; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface; use Psr\Log\LoggerInterface; use Silex\Application; use Symfony\Component\HttpFoundation\BinaryFileResponse; @@ -36,9 +36,9 @@ class RecastController private $log; /** - * @var \Islandora\Crayfish\Commons\Client\GeminiClient + * @var \Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface */ - private $geminiClient; + private $entityMapper; /** * @var array @@ -51,14 +51,14 @@ class RecastController /** * RecastController constructor. * - * @param \Islandora\Crayfish\Commons\Client\GeminiClient $geminiClient + * @param \Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface $entityMapper * @param \Psr\Log\LoggerInterface $log */ public function __construct( - GeminiClient $geminiClient, + EntityMapperInterface $entityMapper, LoggerInterface $log ) { - $this->geminiClient = $geminiClient; + $this->entityMapper = $entityMapper; $this->log = $log; } @@ -148,6 +148,7 @@ public function recast(Request $request, Application $app, $operation) $this->log->debug("Checking resource ", [ 'uri' => $uri, ]); + /* $reverse_uri = $this->geminiClient->findByUri($uri, $token); if (!is_null($reverse_uri)) { if (is_array($reverse_uri)) { @@ -176,6 +177,7 @@ public function recast(Request $request, Application $app, $operation) } } } + */ } } if ($request->headers->has('Accept')) { diff --git a/Recast/src/app.php b/Recast/src/app.php index 473d351f..331591a4 100644 --- a/Recast/src/app.php +++ b/Recast/src/app.php @@ -4,7 +4,7 @@ use Islandora\Crayfish\Commons\Provider\IslandoraServiceProvider; use Islandora\Crayfish\Commons\Provider\YamlConfigServiceProvider; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapper; use Islandora\Recast\Controller\RecastController; use Silex\Application; use Symfony\Component\HttpFoundation\Request; @@ -14,13 +14,8 @@ $app->register(new IslandoraServiceProvider()); $app->register(new YamlConfigServiceProvider(__DIR__ . '/../cfg/config.yaml')); -$gc = GeminiClient::create( - $app['crayfish.gemini_base_url'], - $app['monolog'] -); - $test = new RecastController( - $gc, + new EntityMapper(), $app['monolog'] ); @@ -33,4 +28,4 @@ }) ->value('operation', 'add'); -return $app; +return $app; \ No newline at end of file From e2fa1df060af23f454c9cc9e84e07177a0183da6 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Fri, 5 Mar 2021 16:08:41 -0400 Subject: [PATCH 17/21] Tests! --- Recast/composer.json | 12 +- Recast/composer.lock | 4664 +++++++++-------- Recast/src/Controller/RecastController.php | 85 +- Recast/src/app.php | 4 +- Recast/tests/RecastControllerTests.php | 66 +- Recast/tests/resources/drupal_image_add.json | 2 +- .../tests/resources/drupal_image_replace.json | 2 +- Recast/tests/resources/node1.json | 185 + 8 files changed, 2787 insertions(+), 2233 deletions(-) create mode 100644 Recast/tests/resources/node1.json diff --git a/Recast/composer.json b/Recast/composer.json index c68d1002..9af81986 100644 --- a/Recast/composer.json +++ b/Recast/composer.json @@ -3,10 +3,11 @@ "description": "Microservice rewrites Drupal URIs to Fedora URIs", "type": "project", "require": { - "silex/silex": "^2.0", - "islandora/crayfish-commons": "dev-dev", + "php": "^7.3 || ^7.4", "easyrdf/easyrdf": "^0.9 || ^1", - "php": "^7.3 || ^7.4" + "islandora/crayfish-commons": "dev-no-gemini", + "phpspec/prophecy-phpunit": "^2.0", + "silex/silex": "^2.0" }, "minimum-stability": "dev", "prefer-stable": true, @@ -40,15 +41,12 @@ ], "test": [ "@check", - "vendor/bin/phpunit" + "vendor/bin/phpunit --verbose" ] }, "config": { "sort-packages": true }, - "require": { - "islandora/crayfish-commons": "dev-no-gemini" - }, "require-dev": { "symfony/browser-kit": "^3.0", "symfony/css-selector": "^3.0", diff --git a/Recast/composer.lock b/Recast/composer.lock index 7f976612..87792f9a 100644 --- a/Recast/composer.lock +++ b/Recast/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5c11406246cde582cadf6c106872b7c9", + "content-hash": "03b8526f25584100c31b9e2261bb636f", "packages": [ { "name": "doctrine/cache", @@ -197,6 +197,10 @@ "sqlserver", "sqlsrv" ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/2.12.1" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -307,6 +311,75 @@ ], "time": "2020-05-29T18:28:51+00:00" }, + { + "name": "doctrine/instantiator", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-11-10T18:47:58+00:00" + }, { "name": "easyrdf/easyrdf", "version": "1.1.1", @@ -375,6 +448,11 @@ "rdfa", "sparql" ], + "support": { + "forum": "http://groups.google.com/group/easyrdf/", + "issues": "http://github.com/easyrdf/easyrdf/issues", + "source": "https://github.com/easyrdf/easyrdf/tree/1.1.1" + }, "time": "2020-12-02T08:47:31+00:00" }, { @@ -604,6 +682,7 @@ "sebastian/phpcpd": "^6.0", "squizlabs/php_codesniffer": "^3.0" }, + "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -633,6 +712,10 @@ ], "description": "A PHP client for interacting with a Fedora 4 server.", "homepage": "https://github.com/Islandora/chullo", + "support": { + "issues": "https://github.com/Islandora/documentation/issues", + "source": "https://github.com/Islandora/chullo/tree/dev" + }, "time": "2021-02-16T15:51:00+00:00" }, { @@ -692,6 +775,10 @@ ], "description": "Shared code amongst Islandora Crayfish microservices", "homepage": "https://github.com/Islandora/Crayfish-Commons", + "support": { + "issues": "https://github.com/Islandora/documentation/issues", + "source": "https://github.com/Islandora/Crayfish-Commons/tree/no-gemini" + }, "time": "2021-02-03T19:58:16+00:00" }, { @@ -868,6 +955,10 @@ "logging", "psr-3" ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/1.26.0" + }, "funding": [ { "url": "https://github.com/Seldaek", @@ -880,6 +971,64 @@ ], "time": "2020-12-14T12:56:38+00:00" }, + { + "name": "myclabs/deep-copy", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" + }, { "name": "namshi/jose", "version": "7.2.3", @@ -948,183 +1097,198 @@ "time": "2016-12-05T07:27:31+00:00" }, { - "name": "pimple/pimple", - "version": "v3.3.1", + "name": "nikic/php-parser", + "version": "v4.10.4", "source": { "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/21e45061c3429b1e06233475cc0e1f6fc774d5b0", - "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.0" + "ext-tokenizer": "*", + "php": ">=7.0" }, "require-dev": { - "symfony/phpunit-bridge": "^5.0" + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, + "bin": [ + "bin/php-parse" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3.x-dev" + "dev-master": "4.9-dev" } }, "autoload": { - "psr-0": { - "Pimple": "src/" + "psr-4": { + "PhpParser\\": "lib/PhpParser" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nikita Popov" } ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", + "description": "A PHP parser written in PHP", "keywords": [ - "container", - "dependency injection" + "parser", + "php" ], - "time": "2020-11-24T20:35:42+00:00" + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" + }, + "time": "2020-12-20T10:01:03+00:00" }, { - "name": "psr/cache", - "version": "1.0.1", + "name": "phar-io/manifest", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "url": "https://github.com/phar-io/manifest.git", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2020-06-27T14:33:11+00:00" }, { - "name": "psr/container", - "version": "1.0.0", + "name": "phar-io/version", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "url": "https://github.com/phar-io/version.git", + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } ], + "description": "Library for handling version information and constraints", "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.1.0" }, - "time": "2017-02-14T16:28:37+00:00" + "time": "2021-02-23T14:00:09+00:00" }, { - "name": "psr/http-message", - "version": "1.0.1", + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Http\\Message\\": "src/" + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1133,51 +1297,58 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" } ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" }, - "time": "2016-08-06T14:39:51+00:00" + "time": "2020-06-27T09:03:43+00:00" }, { - "name": "psr/log", - "version": "1.1.3", + "name": "phpdocumentor/reflection-docblock", + "version": "5.2.2", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "5.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1186,48 +1357,52 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { - "source": "https://github.com/php-fig/log/tree/1.1.3" + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" }, - "time": "2020-03-23T09:12:05+00:00" + "time": "2020-09-03T19:13:55+00:00" }, { - "name": "ralouphie/getallheaders", - "version": "3.0.3", + "name": "phpdocumentor/type-resolver", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" + "ext-tokenizer": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, "autoload": { - "files": [ - "src/getallheaders.php" - ] + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1235,80 +1410,51 @@ ], "authors": [ { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" } ], - "description": "A polyfill for getallheaders.", + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" }, - "time": "2019-03-08T08:55:37+00:00" + "time": "2020-09-17T18:55:26+00:00" }, { - "name": "silex/silex", - "version": "v2.3.0", + "name": "phpspec/prophecy", + "version": "1.12.2", "source": { "type": "git", - "url": "https://github.com/silexphp/Silex.git", - "reference": "6bc31c1b8c4ef614a7115320fd2d3b958032f131" + "url": "https://github.com/phpspec/prophecy.git", + "reference": "245710e971a030f42e08f4912863805570f23d39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Silex/zipball/6bc31c1b8c4ef614a7115320fd2d3b958032f131", - "reference": "6bc31c1b8c4ef614a7115320fd2d3b958032f131", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", + "reference": "245710e971a030f42e08f4912863805570f23d39", "shasum": "" }, "require": { - "php": ">=7.1.3", - "pimple/pimple": "^3.0", - "symfony/event-dispatcher": "^4.0", - "symfony/http-foundation": "^4.0", - "symfony/http-kernel": "^4.0", - "symfony/routing": "^4.0" - }, - "replace": { - "silex/api": "self.version", - "silex/providers": "self.version" + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "doctrine/dbal": "^2.2", - "monolog/monolog": "^1.4.1", - "swiftmailer/swiftmailer": "^5", - "symfony/asset": "^4.0", - "symfony/browser-kit": "^4.0", - "symfony/config": "^4.0", - "symfony/css-selector": "^4.0", - "symfony/debug": "^4.0", - "symfony/doctrine-bridge": "^4.0", - "symfony/dom-crawler": "^4.0", - "symfony/expression-language": "^4.0", - "symfony/finder": "^4.0", - "symfony/form": "^4.0", - "symfony/intl": "^4.0", - "symfony/monolog-bridge": "^4.0", - "symfony/options-resolver": "^4.0", - "symfony/phpunit-bridge": "^3.2", - "symfony/process": "^4.0", - "symfony/security": "^4.0", - "symfony/serializer": "^4.0", - "symfony/translation": "^4.0", - "symfony/twig-bridge": "^4.0", - "symfony/validator": "^4.0", - "symfony/var-dumper": "^4.0", - "symfony/web-link": "^4.0", - "twig/twig": "^2.0" + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3.x-dev" + "dev-master": "1.11.x-dev" } }, "autoload": { "psr-4": { - "Silex\\": "src/Silex" + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", @@ -1317,72 +1463,60 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" }, { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" } ], - "description": "The PHP micro-framework based on the Symfony Components", - "homepage": "http://silex.sensiolabs.org", + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", "keywords": [ - "microframework" + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" ], - "abandoned": "symfony/flex", - "time": "2018-04-20T05:17:01+00:00" + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.12.2" + }, + "time": "2020-12-19T10:15:11+00:00" }, { - "name": "symfony/contracts", - "version": "v1.1.10", + "name": "phpspec/prophecy-phpunit", + "version": "v2.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/contracts.git", - "reference": "011c20407c4b99d454f44021d023fb39ce23b73d" + "url": "https://github.com/phpspec/prophecy-phpunit.git", + "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/contracts/zipball/011c20407c4b99d454f44021d023fb39ce23b73d", - "reference": "011c20407c4b99d454f44021d023fb39ce23b73d", + "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/2d7a9df55f257d2cba9b1d0c0963a54960657177", + "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177", "shasum": "" }, "require": { - "php": ">=7.1.3", - "psr/cache": "^1.0", - "psr/container": "^1.0" - }, - "replace": { - "symfony/cache-contracts": "self.version", - "symfony/event-dispatcher-contracts": "self.version", - "symfony/http-client-contracts": "self.version", - "symfony/service-contracts": "self.version", - "symfony/translation-contracts": "self.version" - }, - "require-dev": { - "symfony/polyfill-intl-idn": "^1.10" - }, - "suggest": { - "psr/event-dispatcher": "When using the EventDispatcher contracts", - "symfony/cache-implementation": "", - "symfony/event-dispatcher-implementation": "", - "symfony/http-client-implementation": "", - "symfony/service-implementation": "", - "symfony/translation-implementation": "" + "php": "^7.3 || ^8", + "phpspec/prophecy": "^1.3", + "phpunit/phpunit": "^9.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { "psr-4": { - "Symfony\\Contracts\\": "" - }, - "exclude-from-classmap": [ - "**/Tests/" - ] + "Prophecy\\PhpUnit\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1390,518 +1524,474 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Christophe Coevoet", + "email": "stof@notk.org" } ], - "description": "A set of abstractions extracted out of the Symfony components", - "homepage": "https://symfony.com", + "description": "Integrating the Prophecy mocking library in PHPUnit test cases", + "homepage": "http://phpspec.net", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "phpunit", + "prophecy" ], "support": { - "source": "https://github.com/symfony/contracts/tree/v1.1.10" + "issues": "https://github.com/phpspec/prophecy-phpunit/issues", + "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.0.1" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-09-02T16:08:58+00:00" + "time": "2020-07-09T08:33:42+00:00" }, { - "name": "symfony/debug", - "version": "v4.4.19", + "name": "phpunit/php-code-coverage", + "version": "9.2.5", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "af4987aa4a5630e9615be9d9c3ed1b0f24ca449c" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/af4987aa4a5630e9615be9d9c3ed1b0f24ca449c", - "reference": "af4987aa4a5630e9615be9d9c3ed1b0f24ca449c", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", + "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", "shasum": "" }, "require": { - "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/http-kernel": "<3.4" + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.10.2", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "symfony/http-kernel": "^3.4|^4.0|^5.0" + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides tools to ease debugging PHP code", - "homepage": "https://symfony.com", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" + }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2020-11-28T06:44:49+00:00" }, { - "name": "symfony/deprecation-contracts", - "version": "v2.2.0", + "name": "phpunit/php-file-iterator", + "version": "3.0.5", "source": { "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "dev-master": "3.0-dev" } }, "autoload": { - "files": [ - "function.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2020-09-28T05:57:25+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v4.4.19", + "name": "phpunit/php-invoker", + "version": "3.1.1", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "c352647244bd376bf7d31efbd5401f13f50dad0c" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c352647244bd376bf7d31efbd5401f13f50dad0c", - "reference": "c352647244bd376bf7d31efbd5401f13f50dad0c", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/event-dispatcher-contracts": "^1.1" - }, - "conflict": { - "symfony/dependency-injection": "<3.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "1.1" + "php": ">=7.3" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/error-handler": "~3.4|~4.4", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/http-foundation": "^3.4|^4.0|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^3.4|^4.0|^5.0" + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" }, "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "ext-pcntl": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2020-09-28T05:58:55+00:00" }, { - "name": "symfony/http-foundation", - "version": "v4.4.19", + "name": "phpunit/php-text-template", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "8888741b633f6c3d1e572b7735ad2cae3e03f9c5" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8888741b633f6c3d1e572b7735ad2cae3e03f9c5", - "reference": "8888741b633f6c3d1e572b7735ad2cae3e03f9c5", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/mime": "^4.3|^5.0", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.15" + "php": ">=7.3" }, "require-dev": { - "predis/predis": "~1.0", - "symfony/expression-language": "^3.4|^4.0|^5.0" + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2020-10-26T05:33:50+00:00" }, { - "name": "symfony/http-kernel", - "version": "v4.2.12", + "name": "phpunit/php-timer", + "version": "5.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "8a7c5ef599466af6e972c705507f815df9c490ae" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8a7c5ef599466af6e972c705507f815df9c490ae", - "reference": "8a7c5ef599466af6e972c705507f815df9c490ae", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/log": "~1.0", - "symfony/contracts": "^1.0.2", - "symfony/debug": "~3.4|~4.0", - "symfony/event-dispatcher": "~4.1", - "symfony/http-foundation": "^4.1.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php56": "~1.8" - }, - "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<4.2", - "symfony/translation": "<4.2", - "symfony/var-dumper": "<4.1.1", - "twig/twig": "<1.34|<2.4,>=2" - }, - "provide": { - "psr/log-implementation": "1.0" + "php": ">=7.3" }, "require-dev": { - "psr/cache": "~1.0", - "symfony/browser-kit": "~3.4|~4.0", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/css-selector": "~3.4|~4.0", - "symfony/dependency-injection": "^4.2", - "symfony/dom-crawler": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/finder": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~3.4|~4.0", - "symfony/templating": "~3.4|~4.0", - "symfony/translation": "~4.2", - "symfony/var-dumper": "^4.1.1" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/var-dumper": "" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "5.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "description": "Symfony HttpKernel Component", - "homepage": "https://symfony.com", - "time": "2019-11-13T08:51:34+00:00" + "time": "2020-10-26T13:16:10+00:00" }, { - "name": "symfony/inflector", - "version": "v5.2.3", + "name": "phpunit/phpunit", + "version": "9.5.2", "source": { "type": "git", - "url": "https://github.com/symfony/inflector.git", - "reference": "4c285002228d0e27480e5eee871f4e3f0a05a4eb" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/inflector/zipball/4c285002228d0e27480e5eee871f4e3f0a05a4eb", - "reference": "4c285002228d0e27480e5eee871f4e3f0a05a4eb", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f661659747f2f87f9e72095bb207bceb0f151cb4", + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/string": "~5.1.10|^5.2.1" + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.1", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.3", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^2.3", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" }, + "bin": [ + "phpunit" + ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Inflector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Converts words between their singular and plural forms (English only)", - "homepage": "https://symfony.com", + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", "keywords": [ - "inflection", - "pluralize", - "singularize", - "string", - "symfony", - "words" + "phpunit", + "testing", + "xunit" ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.2" + }, "funding": [ { - "url": "https://symfony.com/sponsor", + "url": "https://phpunit.de/donate.html", "type": "custom" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-01-10T16:29:19+00:00" + "time": "2021-02-02T14:45:58+00:00" }, { - "name": "symfony/mime", - "version": "v5.2.3", - "source": { + "name": "pimple/pimple", + "version": "v3.3.1", + "source": { "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "7dee6a43493f39b51ff6c5bb2bd576fe40a76c86" + "url": "https://github.com/silexphp/Pimple.git", + "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/7dee6a43493f39b51ff6c5bb2bd576fe40a76c86", - "reference": "7dee6a43493f39b51ff6c5bb2bd576fe40a76c86", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/21e45061c3429b1e06233475cc0e1f6fc774d5b0", + "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4" + "psr/container": "^1.0" }, "require-dev": { - "egulias/email-validator": "^2.1.10", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/property-access": "^4.4|^5.1", - "symfony/property-info": "^4.4|^5.1", - "symfony/serializer": "^5.2" + "symfony/phpunit-bridge": "^5.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "psr-0": { + "Pimple": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1911,71 +2001,46 @@ { "name": "Fabien Potencier", "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" } ], - "description": "Allows manipulating MIME messages", - "homepage": "https://symfony.com", + "description": "Pimple, a simple Dependency Injection Container", + "homepage": "https://pimple.symfony.com", "keywords": [ - "mime", - "mime-type" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } + "container", + "dependency injection" ], - "time": "2021-02-02T06:10:15+00:00" + "support": { + "source": "https://github.com/silexphp/Pimple/tree/v3.3.1" + }, + "time": "2020-11-24T20:35:42+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.22.1", + "name": "psr/container", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] + "Psr\\Container\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1983,75 +2048,52 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], - "time": "2021-01-07T16:49:33+00:00" + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" + }, + "time": "2017-02-14T16:28:37+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.22.1", + "name": "psr/http-message", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", - "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, - "files": [ - "bootstrap.php" - ] + "Psr\\Http\\Message\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2059,79 +2101,52 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" ], - "time": "2021-01-22T09:19:47+00:00" + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" }, { - "name": "symfony/polyfill-intl-idn", - "version": "v1.22.1", + "name": "psr/log", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "2d63434d922daf7da8dd863e7907e67ee3031483" + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/2d63434d922daf7da8dd863e7907e67ee3031483", - "reference": "2d63434d922daf7da8dd863e7907e67ee3031483", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "1.1.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] + "Psr\\Log\\": "Psr/Log/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2139,83 +2154,47 @@ ], "authors": [ { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } + "log", + "psr", + "psr-3" ], - "time": "2021-01-22T09:19:47+00:00" + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, + "time": "2020-03-23T09:12:05+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.22.1", + "name": "ralouphie/getallheaders", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", - "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=5.6" }, - "suggest": { - "ext-intl": "For best performance" + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" + "src/getallheaders.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -2224,963 +2203,784 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" } ], - "time": "2021-01-22T09:19:47+00:00" + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.22.1", + "name": "sebastian/cli-parser", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" }, - "suggest": { - "ext-mbstring": "For best performance" + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "1.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2020-09-28T06:08:49+00:00" }, { - "name": "symfony/polyfill-php56", - "version": "v1.20.0", + "name": "sebastian/code-unit", + "version": "1.0.8", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", - "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" }, - "type": "metapackage", + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "1.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { - "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0" + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2020-10-26T13:08:54+00:00" }, { - "name": "symfony/polyfill-php70", - "version": "v1.20.0", + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3" }, - "type": "metapackage", + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "2.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { - "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0" + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2020-09-28T05:30:19+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.22.1", + "name": "sebastian/comparator", + "version": "4.0.6", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", - "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "4.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "comparator", + "compare", + "equality" ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2020-10-26T15:49:45+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.22.1", + "name": "sebastian/complexity", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", "shasum": "" }, "require": { - "php": ">=7.1" + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "2.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], "classmap": [ - "Resources/stubs" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2020-10-26T15:52:27+00:00" }, { - "name": "symfony/property-access", - "version": "v4.4.19", + "name": "sebastian/diff", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/property-access.git", - "reference": "94a1d9837396c71a0d8c31686c16693a15651622" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/94a1d9837396c71a0d8c31686c16693a15651622", - "reference": "94a1d9837396c71a0d8c31686c16693a15651622", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/inflector": "^3.4|^4.0|^5.0" + "php": ">=7.3" }, "require-dev": { - "symfony/cache": "^3.4|^4.0|^5.0" - }, - "suggest": { - "psr/cache-implementation": "To cache access methods." + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyAccess\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "Provides functions to read and write from/to an object or array using a simple string notation", - "homepage": "https://symfony.com", + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "access", - "array", - "extraction", - "index", - "injection", - "object", - "property", - "property path", - "reflection" + "diff", + "udiff", + "unidiff", + "unified diff" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2020-10-26T13:10:38+00:00" }, { - "name": "symfony/routing", - "version": "v4.4.19", + "name": "sebastian/environment", + "version": "5.1.3", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "87529f6e305c7acb162840d1ea57922038072425" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/87529f6e305c7acb162840d1ea57922038072425", - "reference": "87529f6e305c7acb162840d1ea57922038072425", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", "shasum": "" }, "require": { - "php": ">=7.1.3" - }, - "conflict": { - "symfony/config": "<4.2", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" + "php": ">=7.3" }, "require-dev": { - "doctrine/annotations": "^1.10.4", - "psr/log": "~1.0", - "symfony/config": "^4.2|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/http-foundation": "^3.4|^4.0|^5.0", - "symfony/yaml": "^3.4|^4.0|^5.0" + "phpunit/phpunit": "^9.3" }, "suggest": { - "doctrine/annotations": "For using the annotation loader", - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" + "ext-posix": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Maps an HTTP request to a set of configuration variables", - "homepage": "https://symfony.com", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ - "router", - "routing", - "uri", - "url" + "Xdebug", + "environment", + "hhvm" ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2020-09-28T05:52:38+00:00" }, { - "name": "symfony/security", - "version": "v3.4.47", + "name": "sebastian/exporter", + "version": "4.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/security.git", - "reference": "7f924370b6fc5927d7561ce2b6fb2b4ceccba63e" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security/zipball/7f924370b6fc5927d7561ce2b6fb2b4ceccba63e", - "reference": "7f924370b6fc5927d7561ce2b6fb2b4ceccba63e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.40|^4.4.7", - "symfony/http-kernel": "~3.3|~4.0", - "symfony/polyfill-php56": "~1.0", - "symfony/polyfill-php70": "~1.0", - "symfony/property-access": "~2.8|~3.0|~4.0" - }, - "replace": { - "symfony/security-core": "self.version", - "symfony/security-csrf": "self.version", - "symfony/security-guard": "self.version", - "symfony/security-http": "self.version" + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "psr/container": "^1.0", - "psr/log": "~1.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/ldap": "~3.1|~4.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/routing": "~2.8|~3.0|~4.0", - "symfony/validator": "^3.2.5|~4.0" - }, - "suggest": { - "psr/container-implementation": "To instantiate the Security class", - "symfony/expression-language": "For using the expression voter", - "symfony/form": "", - "symfony/ldap": "For using the LDAP user and authentication providers", - "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", - "symfony/validator": "For using the user password constraint" + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Security\\": "" - }, - "exclude-from-classmap": [ - "/Core/Tests/", - "/Csrf/Tests/", - "/Guard/Tests/", - "/Http/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Security Component", - "homepage": "https://symfony.com", - "funding": [ + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, { - "url": "https://symfony.com/sponsor", - "type": "custom" + "name": "Volker Dusch", + "email": "github@wallbash.com" }, { - "url": "https://github.com/fabpot", - "type": "github" + "name": "Adam Harvey", + "email": "aharvey@php.net" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "time": "2020-10-28T05:23:51+00:00" + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:24:23+00:00" }, { - "name": "symfony/string", - "version": "v5.2.3", + "name": "sebastian/global-state", + "version": "5.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "c95468897f408dd0aca2ff582074423dd0455122" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/c95468897f408dd0aca2ff582074423dd0455122", - "reference": "c95468897f408dd0aca2ff582074423dd0455122", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "files": [ - "Resources/functions.php" - ], - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" + "global state" ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-01-25T15:14:59+00:00" + "time": "2020-10-26T15:55:19+00:00" }, { - "name": "symfony/yaml", - "version": "v4.4.19", + "name": "sebastian/lines-of-code", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9" + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9", - "reference": "17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" + "nikic/php-parser": "^4.6", + "php": ">=7.3" }, "require-dev": { - "symfony/console": "^3.4|^4.0|^5.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" - } - ], - "packages-dev": [ + "time": "2020-11-28T06:42:11+00:00" + }, { - "name": "doctrine/instantiator", - "version": "1.4.0", + "name": "sebastian/object-enumerator", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2020-10-26T13:12:34+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.10.2", + "name": "sebastian/object-reflector", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" + "php": ">=7.3" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2020-10-26T13:14:26+00:00" }, { - "name": "nikic/php-parser", - "version": "v4.10.4", + "name": "sebastian/recursion-context", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.3" }, "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.3" }, - "bin": [ - "bin/php-parse" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "4.0-dev" } }, "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3188,41 +2988,56 @@ ], "authors": [ { - "name": "Nikita Popov" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2020-12-20T10:01:03+00:00" + "time": "2020-10-26T13:17:30+00:00" }, { - "name": "phar-io/manifest", - "version": "2.0.1", + "name": "sebastian/resource-operations", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -3235,43 +3050,51 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "email": "sebastian@phpunit.de" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2020-06-27T14:33:11+00:00" + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" }, { - "name": "phar-io/version", - "version": "3.1.0", + "name": "sebastian/type", + "version": "2.3.1", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -3282,111 +3105,142 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", - "role": "Developer" + "role": "lead" } ], - "description": "Library for handling version information and constraints", - "time": "2021-02-23T14:00:09+00:00" + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:18:59+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "name": "sebastian/version", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=7.3" }, "type": "library", "extra": { "branch-alias": { - "dev-2.x": "2.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" }, - "time": "2020-06-27T09:03:43+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", + "name": "silex/silex", + "version": "v2.3.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + "url": "https://github.com/silexphp/Silex.git", + "reference": "6bc31c1b8c4ef614a7115320fd2d3b958032f131" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "url": "https://api.github.com/repos/silexphp/Silex/zipball/6bc31c1b8c4ef614a7115320fd2d3b958032f131", + "reference": "6bc31c1b8c4ef614a7115320fd2d3b958032f131", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "php": ">=7.1.3", + "pimple/pimple": "^3.0", + "symfony/event-dispatcher": "^4.0", + "symfony/http-foundation": "^4.0", + "symfony/http-kernel": "^4.0", + "symfony/routing": "^4.0" + }, + "replace": { + "silex/api": "self.version", + "silex/providers": "self.version" }, "require-dev": { - "mockery/mockery": "~1.3.2" + "doctrine/dbal": "^2.2", + "monolog/monolog": "^1.4.1", + "swiftmailer/swiftmailer": "^5", + "symfony/asset": "^4.0", + "symfony/browser-kit": "^4.0", + "symfony/config": "^4.0", + "symfony/css-selector": "^4.0", + "symfony/debug": "^4.0", + "symfony/doctrine-bridge": "^4.0", + "symfony/dom-crawler": "^4.0", + "symfony/expression-language": "^4.0", + "symfony/finder": "^4.0", + "symfony/form": "^4.0", + "symfony/intl": "^4.0", + "symfony/monolog-bridge": "^4.0", + "symfony/options-resolver": "^4.0", + "symfony/phpunit-bridge": "^3.2", + "symfony/process": "^4.0", + "symfony/security": "^4.0", + "symfony/serializer": "^4.0", + "symfony/translation": "^4.0", + "symfony/twig-bridge": "^4.0", + "symfony/validator": "^4.0", + "symfony/var-dumper": "^4.0", + "symfony/web-link": "^4.0", + "twig/twig": "^2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.x-dev" + "dev-master": "2.3.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "Silex\\": "src/Silex" } }, "notification-url": "https://packagist.org/downloads/", @@ -3395,52 +3249,70 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "description": "The PHP micro-framework based on the Symfony Components", + "homepage": "http://silex.sensiolabs.org", + "keywords": [ + "microframework" + ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + "issues": "https://github.com/silexphp/Silex/issues", + "source": "https://github.com/silexphp/Silex/tree/v2.3.0" }, - "time": "2020-09-03T19:13:55+00:00" + "abandoned": "symfony/flex", + "time": "2018-04-20T05:17:01+00:00" }, { - "name": "phpdocumentor/type-resolver", - "version": "1.4.0", + "name": "symfony/contracts", + "version": "v1.1.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + "url": "https://github.com/symfony/contracts.git", + "reference": "d3636025e8253c6144358ec0a62773cae588395b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "url": "https://api.github.com/repos/symfony/contracts/zipball/d3636025e8253c6144358ec0a62773cae588395b", + "reference": "d3636025e8253c6144358ec0a62773cae588395b", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "php": "^7.1.3" }, "require-dev": { - "ext-tokenizer": "*" + "psr/cache": "^1.0", + "psr/container": "^1.0", + "symfony/polyfill-intl-idn": "^1.10" + }, + "suggest": { + "psr/cache": "When using the Cache contracts", + "psr/container": "When using the Service contracts", + "symfony/cache-contracts-implementation": "", + "symfony/event-dispatcher-implementation": "", + "symfony/http-client-contracts-implementation": "", + "symfony/service-contracts-implementation": "", + "symfony/translation-contracts-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" + "dev-master": "1.1-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } + "Symfony\\Contracts\\": "" + }, + "exclude-from-classmap": [ + "**/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3448,52 +3320,62 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "description": "A set of abstractions extracted out of the Symfony components", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + "source": "https://github.com/symfony/contracts/tree/master" }, - "time": "2020-09-17T18:55:26+00:00" + "time": "2019-04-27T14:29:50+00:00" }, { - "name": "phpspec/prophecy", - "version": "1.12.2", + "name": "symfony/debug", + "version": "v4.4.19", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "245710e971a030f42e08f4912863805570f23d39" + "url": "https://github.com/symfony/debug.git", + "reference": "af4987aa4a5630e9615be9d9c3ed1b0f24ca449c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", - "reference": "245710e971a030f42e08f4912863805570f23d39", + "url": "https://api.github.com/repos/symfony/debug/zipball/af4987aa4a5630e9615be9d9c3ed1b0f24ca449c", + "reference": "af4987aa4a5630e9615be9d9c3ed1b0f24ca449c", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "php": ">=7.1.3", + "psr/log": "~1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/http-kernel": "<3.4" }, "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "symfony/http-kernel": "^3.4|^4.0|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11.x-dev" - } - }, "autoload": { "psr-4": { - "Prophecy\\": "src/Prophecy" - } + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3501,1255 +3383,1721 @@ ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" + "description": "Provides tools to ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug/tree/v4.4.19" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2020-12-19T10:15:11+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "9.2.5", + "name": "symfony/deprecation-contracts", + "version": "v2.2.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "classmap": [ - "src/" + "files": [ + "function.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/master" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-11-28T06:44:49+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "3.0.5", + "name": "symfony/event-dispatcher", + "version": "v4.4.19", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "c352647244bd376bf7d31efbd5401f13f50dad0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c352647244bd376bf7d31efbd5401f13f50dad0c", + "reference": "c352647244bd376bf7d31efbd5401f13f50dad0c", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "psr/log": "~1.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.19" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T05:57:25+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { - "name": "phpunit/php-invoker", - "version": "3.1.1", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.9", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "php": ">=7.1.3" }, "suggest": { - "ext-pcntl": "*" + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", "keywords": [ - "process" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.9" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2020-07-06T13:19:58+00:00" }, { - "name": "phpunit/php-text-template", - "version": "2.0.4", + "name": "symfony/http-foundation", + "version": "v4.4.19", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "url": "https://github.com/symfony/http-foundation.git", + "reference": "8888741b633f6c3d1e572b7735ad2cae3e03f9c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8888741b633f6c3d1e572b7735ad2cae3e03f9c5", + "reference": "8888741b633f6c3d1e572b7735ad2cae3e03f9c5", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1.3", + "symfony/mime": "^4.3|^5.0", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "predis/predis": "~1.0", + "symfony/expression-language": "^3.4|^4.0|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v4.4.19" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { - "name": "phpunit/php-timer", - "version": "5.0.3", + "name": "symfony/http-kernel", + "version": "v4.2.12", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "url": "https://github.com/symfony/http-kernel.git", + "reference": "8a7c5ef599466af6e972c705507f815df9c490ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8a7c5ef599466af6e972c705507f815df9c490ae", + "reference": "8a7c5ef599466af6e972c705507f815df9c490ae", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^7.1.3", + "psr/log": "~1.0", + "symfony/contracts": "^1.0.2", + "symfony/debug": "~3.4|~4.0", + "symfony/event-dispatcher": "~4.1", + "symfony/http-foundation": "^4.1.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php56": "~1.8" + }, + "conflict": { + "symfony/config": "<3.4", + "symfony/dependency-injection": "<4.2", + "symfony/translation": "<4.2", + "symfony/var-dumper": "<4.1.1", + "twig/twig": "<1.34|<2.4,>=2" + }, + "provide": { + "psr/log-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "psr/cache": "~1.0", + "symfony/browser-kit": "~3.4|~4.0", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/css-selector": "~3.4|~4.0", + "symfony/dependency-injection": "^4.2", + "symfony/dom-crawler": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", + "symfony/routing": "~3.4|~4.0", + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "~4.2", + "symfony/var-dumper": "^4.1.1" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "", + "symfony/var-dumper": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.2-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Symfony HttpKernel Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v4.2.12" + }, + "time": "2019-11-13T08:51:34+00:00" + }, + { + "name": "symfony/inflector", + "version": "v5.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/inflector.git", + "reference": "4c285002228d0e27480e5eee871f4e3f0a05a4eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/inflector/zipball/4c285002228d0e27480e5eee871f4e3f0a05a4eb", + "reference": "4c285002228d0e27480e5eee871f4e3f0a05a4eb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/string": "~5.1.10|^5.2.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Inflector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts words between their singular and plural forms (English only)", + "homepage": "https://symfony.com", "keywords": [ - "timer" + "inflection", + "pluralize", + "singularize", + "string", + "symfony", + "words" ], + "support": { + "source": "https://github.com/symfony/inflector/tree/v5.2.3" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2021-01-10T16:29:19+00:00" }, { - "name": "phpunit/phpunit", - "version": "9.5.2", + "name": "symfony/mime", + "version": "v5.2.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4" + "url": "https://github.com/symfony/mime.git", + "reference": "7dee6a43493f39b51ff6c5bb2bd576fe40a76c86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f661659747f2f87f9e72095bb207bceb0f151cb4", - "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4", + "url": "https://api.github.com/repos/symfony/mime/zipball/7dee6a43493f39b51ff6c5bb2bd576fe40a76c86", + "reference": "7dee6a43493f39b51ff6c5bb2bd576fe40a76c86", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.1", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.3", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3", - "sebastian/version": "^3.0.2" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.15" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<4.4" }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "require-dev": { + "egulias/email-validator": "^2.1.10", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.1", + "symfony/property-info": "^4.4|^5.1", + "symfony/serializer": "^5.2" }, - "bin": [ - "phpunit" - ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ], - "files": [ - "src/Framework/Assert/Functions.php" + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", "keywords": [ - "phpunit", - "testing", - "xunit" + "mime", + "mime-type" ], + "support": { + "source": "https://github.com/symfony/mime/tree/v5.2.3" + }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2021-02-02T14:45:58+00:00" + "time": "2021-02-02T06:10:15+00:00" }, { - "name": "sebastian/cli-parser", - "version": "1.0.1", + "name": "symfony/polyfill-ctype", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "suggest": { + "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { - "name": "sebastian/code-unit", - "version": "1.0.8", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "name": "symfony/polyfill-intl-idn", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "2d63434d922daf7da8dd863e7907e67ee3031483" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/2d63434d922daf7da8dd863e7907e67ee3031483", + "reference": "2d63434d922daf7da8dd863e7907e67ee3031483", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.22.1" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { - "name": "sebastian/comparator", - "version": "4.0.6", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], "classmap": [ - "src/" + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", "keywords": [ - "comparator", - "compare", - "equality" + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { - "name": "sebastian/complexity", - "version": "2.0.2", + "name": "symfony/polyfill-mbstring", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" + "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { - "name": "sebastian/diff", - "version": "4.0.4", + "name": "symfony/polyfill-php56", + "version": "v1.20.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "php": ">=7.1" }, - "type": "library", + "type": "metapackage", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, - "autoload": { - "classmap": [ - "src/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" + "compatibility", + "polyfill", + "portable", + "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { - "name": "sebastian/environment", - "version": "5.1.3", + "name": "symfony/polyfill-php70", + "version": "v1.20.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", + "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" + "php": ">=7.1" }, - "type": "library", + "type": "metapackage", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, - "autoload": { - "classmap": [ - "src/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "Xdebug", - "environment", - "hhvm" + "compatibility", + "polyfill", + "portable", + "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { - "name": "sebastian/exporter", - "version": "4.0.3", + "name": "symfony/polyfill-php72", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", + "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", "shasum": "" }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, + "require": { + "php": ">=7.1" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "export", - "exporter" + "compatibility", + "polyfill", + "portable", + "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.22.1" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T05:24:23+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { - "name": "sebastian/global-state", - "version": "5.0.2", + "name": "symfony/polyfill-php80", + "version": "v1.22.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], "classmap": [ - "src/" + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "global state" + "compatibility", + "polyfill", + "portable", + "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T15:55:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { - "name": "sebastian/lines-of-code", - "version": "1.0.3", + "name": "symfony/property-access", + "version": "v4.4.19", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "url": "https://github.com/symfony/property-access.git", + "reference": "94a1d9837396c71a0d8c31686c16693a15651622" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/symfony/property-access/zipball/94a1d9837396c71a0d8c31686c16693a15651622", + "reference": "94a1d9837396c71a0d8c31686c16693a15651622", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" + "php": ">=7.1.3", + "symfony/inflector": "^3.4|^4.0|^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "symfony/cache": "^3.4|^4.0|^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } + "suggest": { + "psr/cache-implementation": "To cache access methods." }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "description": "Provides functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v4.4.19" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "4.0.4", + "name": "symfony/routing", + "version": "v4.4.19", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "url": "https://github.com/symfony/routing.git", + "reference": "87529f6e305c7acb162840d1ea57922038072425" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/symfony/routing/zipball/87529f6e305c7acb162840d1ea57922038072425", + "reference": "87529f6e305c7acb162840d1ea57922038072425", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=7.1.3" + }, + "conflict": { + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", + "symfony/yaml": "<3.4" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "doctrine/annotations": "^1.10.4", + "psr/log": "~1.0", + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v4.4.19" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { - "name": "sebastian/object-reflector", - "version": "2.0.4", + "name": "symfony/security", + "version": "v3.4.47", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "url": "https://github.com/symfony/security.git", + "reference": "7f924370b6fc5927d7561ce2b6fb2b4ceccba63e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/symfony/security/zipball/7f924370b6fc5927d7561ce2b6fb2b4ceccba63e", + "reference": "7f924370b6fc5927d7561ce2b6fb2b4ceccba63e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^5.5.9|>=7.0.8", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "~3.4.40|^4.4.7", + "symfony/http-kernel": "~3.3|~4.0", + "symfony/polyfill-php56": "~1.0", + "symfony/polyfill-php70": "~1.0", + "symfony/property-access": "~2.8|~3.0|~4.0" + }, + "replace": { + "symfony/security-core": "self.version", + "symfony/security-csrf": "self.version", + "symfony/security-guard": "self.version", + "symfony/security-http": "self.version" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "psr/container": "^1.0", + "psr/log": "~1.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/ldap": "~3.1|~4.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/routing": "~2.8|~3.0|~4.0", + "symfony/validator": "^3.2.5|~4.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } + "suggest": { + "psr/container-implementation": "To instantiate the Security class", + "symfony/expression-language": "For using the expression voter", + "symfony/form": "", + "symfony/ldap": "For using the LDAP user and authentication providers", + "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", + "symfony/validator": "For using the user password constraint" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Security\\": "" + }, + "exclude-from-classmap": [ + "/Core/Tests/", + "/Csrf/Tests/", + "/Guard/Tests/", + "/Http/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "description": "Symfony Security Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/security/tree/v3.4.47" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2020-10-28T05:23:51+00:00" }, { - "name": "sebastian/phpcpd", - "version": "6.0.3", + "name": "symfony/string", + "version": "v5.2.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpcpd.git", - "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176" + "url": "https://github.com/symfony/string.git", + "reference": "c95468897f408dd0aca2ff582074423dd0455122" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/f3683aa0db2e8e09287c2bb33a595b2873ea9176", - "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176", + "url": "https://api.github.com/repos/symfony/string/zipball/c95468897f408dd0aca2ff582074423dd0455122", + "reference": "c95468897f408dd0aca2ff582074423dd0455122", "shasum": "" }, "require": { - "ext-dom": "*", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0", - "phpunit/php-timer": "^5.0", - "sebastian/cli-parser": "^1.0", - "sebastian/version": "^3.0" + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" }, - "bin": [ - "phpcpd" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.0-dev" - } + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Copy/Paste Detector (CPD) for PHP code.", - "homepage": "https://github.com/sebastianbergmann/phpcpd", + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.2.3" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-12-07T05:39:23+00:00" + "time": "2021-01-25T15:14:59+00:00" }, { - "name": "sebastian/recursion-context", - "version": "4.0.4", + "name": "symfony/yaml", + "version": "v4.4.19", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "url": "https://github.com/symfony/yaml.git", + "reference": "17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/symfony/yaml/zipball/17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9", + "reference": "17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "symfony/console": "^3.4|^4.0|^5.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } + "suggest": { + "symfony/console": "For validating YAML files using the lint command" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v4.4.19" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2021-01-27T09:09:26+00:00" }, { - "name": "sebastian/resource-operations", - "version": "3.0.3", + "name": "theseer/tokenizer", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "75a63c33a8577608444246075ea0af0d052e452a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, "autoload": { "classmap": [ "src/" @@ -4761,93 +5109,108 @@ ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/master" + }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/theseer", "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2020-07-12T23:59:07+00:00" }, { - "name": "sebastian/type", - "version": "2.3.1", + "name": "webmozart/assert", + "version": "1.9.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + "url": "https://github.com/webmozarts/assert.git", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^5.3.3 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^4.8.36 || ^7.5.13" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Webmozart\\Assert\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" ], - "time": "2020-10-26T13:18:59+00:00" - }, + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.9.1" + }, + "time": "2020-07-08T17:02:28+00:00" + } + ], + "packages-dev": [ { - "name": "sebastian/version", - "version": "3.0.2", + "name": "sebastian/phpcpd", + "version": "6.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/sebastianbergmann/phpcpd.git", + "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/f3683aa0db2e8e09287c2bb33a595b2873ea9176", + "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-dom": "*", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0", + "phpunit/php-timer": "^5.0", + "sebastian/cli-parser": "^1.0", + "sebastian/version": "^3.0" }, + "bin": [ + "phpcpd" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "6.0-dev" } }, "autoload": { @@ -4866,15 +5229,19 @@ "role": "lead" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Copy/Paste Detector (CPD) for PHP code.", + "homepage": "https://github.com/sebastianbergmann/phpcpd", + "support": { + "issues": "https://github.com/sebastianbergmann/phpcpd/issues", + "source": "https://github.com/sebastianbergmann/phpcpd/tree/6.0.3" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2020-12-07T05:39:23+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -4925,6 +5292,11 @@ "phpcs", "standards" ], + "support": { + "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", + "source": "https://github.com/squizlabs/PHP_CodeSniffer", + "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + }, "time": "2020-10-23T02:01:07+00:00" }, { @@ -4977,6 +5349,9 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/browser-kit/tree/v3.4.47" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5039,6 +5414,9 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v3.4.47" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5109,6 +5487,9 @@ ], "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v4.4.19" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5124,109 +5505,6 @@ } ], "time": "2021-01-27T09:09:26+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2020-07-12T23:59:07+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozart/assert/issues", - "source": "https://github.com/webmozart/assert/tree/master" - }, - "time": "2020-07-08T17:02:28+00:00" } ], "aliases": [], @@ -5236,7 +5514,9 @@ }, "prefer-stable": true, "prefer-lowest": false, - "platform": [], + "platform": { + "php": "^7.3 || ^7.4" + }, "platform-dev": [], - "plugin-api-version": "1.1.0" + "plugin-api-version": "2.0.0" } diff --git a/Recast/src/Controller/RecastController.php b/Recast/src/Controller/RecastController.php index 11c8835f..4293e405 100644 --- a/Recast/src/Controller/RecastController.php +++ b/Recast/src/Controller/RecastController.php @@ -8,6 +8,8 @@ use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use GuzzleHttp\Client; +use GuzzleHttp\Exception\RequestException; // phpcs:disable if (class_exists('\EasyRdf_Graph')) { @@ -40,6 +42,11 @@ class RecastController */ private $entityMapper; + /** + * @var \GuzzleHttp\Client + */ + private $http; + /** * @var array */ @@ -52,13 +59,16 @@ class RecastController * RecastController constructor. * * @param \Islandora\Crayfish\Commons\EntityMapper\EntityMapperInterface $entityMapper + * @param \GuzzleHttp\Client $http * @param \Psr\Log\LoggerInterface $log */ public function __construct( EntityMapperInterface $entityMapper, + Client $http, LoggerInterface $log ) { $this->entityMapper = $entityMapper; + $this->http = $http; $this->log = $log; } @@ -144,16 +154,25 @@ public function recast(Request $request, Application $app, $operation) $resources = $graph->resources(); foreach ($resources as $uri => $data) { - if (strpos($uri, $app['crayfish.drupal_base_url']) === 0) { - $this->log->debug("Checking resource ", [ - 'uri' => $uri, - ]); - /* - $reverse_uri = $this->geminiClient->findByUri($uri, $token); - if (!is_null($reverse_uri)) { - if (is_array($reverse_uri)) { - $reverse_uri = reset($reverse_uri); - } + // Ignore http vs https + $exploded = explode('://', $uri); + if (count($exploded) > 1) { + $protocol = $exploded[0]; + $without_protocol = $exploded[1]; + } + + // Check for Drupal urls, making sure to ignore Fedora urls. + // They may share a domain so false positives can happen. + $drupal_base_url = $app['crayfish.drupal_base_url']; + $fcrepo_base_url = $app['crayfish.fedora_resource.base_url']; + $is_drupal_url = strpos($without_protocol, $drupal_base_url) === 0 && + strpos($without_protocol, $fcrepo_base_url) !== 0; + if ($is_drupal_url) { + $reverse_uri = $this->getFedoraUrl($uri, $fcrepo_base_url, $token); + + if (!empty($reverse_uri)) { + // Add the protocol back in. + $reverse_uri = "http://$reverse_uri"; // Don't rewrite the current URI (in-case of sameAs) if ($reverse_uri !== $fedora_uri) { $predicate = $this->findPredicateForObject($graph, $uri); @@ -177,7 +196,6 @@ public function recast(Request $request, Application $app, $operation) } } } - */ } } if ($request->headers->has('Accept')) { @@ -236,6 +254,51 @@ function ($item) use ($fedora_uri) { return new Response($new_body, 200, $headers); } + private function getFedoraUrl($drupal_url, $fcrepo_base_url, $token) + { + try { + // Strip off the ld from jsonld. + $drupal_url = rtrim($drupal_url, 'ld'); + $response = $this->http->get($drupal_url, ['Authorization' => $token]); + $json_str = $response->getBody(); + $json = json_decode($json_str, true); + + $is_media = isset($json['bundle']) && + !empty($json['bundle']) && + $json['bundle'][0]['target_type'] == 'media_type'; + + if ($is_media) { + $link_headers = $response->getHeader('Link'); + $describes = $this->describeUri($link_headers); + $this->log->debug("DESCRIBES $describes"); + foreach ($json as $field => $value) { + $is_file = $field != "thumbnail" && + !empty($json[$field]) && + isset($json[$field][0]["url"]) && + $json[$field][0]["url"] == $describes; + + if ($is_file) { + $exploded = explode("_flysystem/fedora", $json[$field][0]["url"]); + $in_fedora = count($exploded) > 1; + if ($in_fedora) { + return rtrim($fcrepo_base_url, '/') . $exploded[1] . "/fcr:metadata"; + } else { + $uuid = $json[$field][0]['target_uuid']; + return rtrim($fcrepo_base_url, '/') . + "/{$this->entityMapper->getFedoraPath($uuid)}/fcr:metadata"; + } + } + } + } else { + $uuid = $json['uuid'][0]['value']; + return rtrim($fcrepo_base_url, '/') . '/' . $this->entityMapper->getFedoraPath($uuid); + } + } catch (RequestException $e) { + $this->log->warn($e->getMessage()); + return null; + } + } + /** * Locate the predicate for an object in a graph. * diff --git a/Recast/src/app.php b/Recast/src/app.php index 331591a4..a1823feb 100644 --- a/Recast/src/app.php +++ b/Recast/src/app.php @@ -2,6 +2,7 @@ require_once __DIR__.'/../vendor/autoload.php'; +use GuzzleHttp\Client; use Islandora\Crayfish\Commons\Provider\IslandoraServiceProvider; use Islandora\Crayfish\Commons\Provider\YamlConfigServiceProvider; use Islandora\Crayfish\Commons\EntityMapper\EntityMapper; @@ -16,6 +17,7 @@ $test = new RecastController( new EntityMapper(), + new Client(), $app['monolog'] ); @@ -28,4 +30,4 @@ }) ->value('operation', 'add'); -return $app; \ No newline at end of file +return $app; diff --git a/Recast/tests/RecastControllerTests.php b/Recast/tests/RecastControllerTests.php index 5a744f63..8d5f3e8d 100644 --- a/Recast/tests/RecastControllerTests.php +++ b/Recast/tests/RecastControllerTests.php @@ -2,11 +2,14 @@ namespace Islandora\Recast\Tests; -use Islandora\Crayfish\Commons\Client\GeminiClient; +use Islandora\Crayfish\Commons\EntityMapper\EntityMapper; +use GuzzleHttp\Client; +use GuzzleHttp\Exception\RequestException; use Islandora\Recast\Controller\RecastController; use Monolog\Logger; use PHPUnit\Framework\TestCase; use Prophecy\Argument; +use Prophecy\PhpUnit\ProphecyTrait; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\StreamInterface; use Silex\Application; @@ -26,8 +29,9 @@ class_alias('\EasyRdf_Graph', ' \EasyRdf\Graph'); */ class RecastControllerTest extends TestCase { + use ProphecyTrait; - private $gemini_prophecy; + private $http_prophecy; private $logger_prophecy; @@ -43,7 +47,7 @@ class RecastControllerTest extends TestCase */ public function setUp(): void { - $this->gemini_prophecy = $this->prophesize(GeminiClient::class); + $this->http_prophecy = $this->prophesize(Client::class); $this->logger_prophecy = $this->prophesize(Logger::class); } @@ -53,7 +57,8 @@ public function setUp(): void public function testOptions() { $controller = new RecastController( - $this->gemini_prophecy->reveal(), + new EntityMapper(), + $this->http_prophecy->reveal(), $this->logger_prophecy->reveal() ); @@ -75,21 +80,32 @@ public function testImageAdd() $output_add = realpath(__DIR__ . '/resources/drupal_image_add.json'); $output_replace = realpath(__DIR__ . '/resources/drupal_image_replace.json'); - - $this->gemini_prophecy->findByUri('http://localhost:8000/user/1?_format=jsonld', Argument::any()) - ->willReturn(null); - $this->gemini_prophecy->findByUri('http://localhost:8000/media/1?_format=jsonld', Argument::any()) - ->willReturn(null); - $this->gemini_prophecy->findByUri('http://localhost:8000/node/1?_format=jsonld', Argument::any()) - ->willReturn('http://localhost:8080/fcrepo/rest/collection1'); + $node_1 = realpath(__DIR__ . '/resources/node1.json'); + + $this->http_prophecy->get('http://localhost:8000/user/1?_format=json', Argument::any()) + ->willThrow( + new RequestException( + "NOT FOUND", + new \GuzzleHttp\Psr7\Request('GET', 'http://localhost:8000/user/1?_format=json') + ) + ); + $this->http_prophecy->get('http://localhost:8000/media/1?_format=json', Argument::any()) + ->willThrow(new RequestException( + "NOT FOUND", + new \GuzzleHttp\Psr7\Request('GET', 'http://localhost:8000/media/1?_format=json') + )); + $this->http_prophecy->get('http://localhost:8000/node/1?_format=json', Argument::any()) + ->willReturn(new \GuzzleHttp\Psr7\Response(200, [], file_get_contents($node_1))); $mock_silex_app = new Application(); - $mock_silex_app['crayfish.drupal_base_url'] = 'http://localhost:8000'; + $mock_silex_app['crayfish.drupal_base_url'] = 'localhost:8000'; + $mock_silex_app['crayfish.fedora_resource.base_url'] = 'localhost:8080/fcrepo/rest'; $mock_fedora_response = $this->getMockFedoraStream(); $controller = new RecastController( - $this->gemini_prophecy->reveal(), + new EntityMapper(), + $this->http_prophecy->reveal(), $this->logger_prophecy->reveal() ); @@ -129,7 +145,8 @@ public function testInvalidType() $mock_silex_app['crayfish.drupal_base_url'] = 'http://localhost:8000'; $controller = new RecastController( - $this->gemini_prophecy->reveal(), + new EntityMapper(), + $this->http_prophecy->reveal(), $this->logger_prophecy->reveal() ); @@ -156,13 +173,21 @@ public function testPrefixes() { $resource_id = 'http://localhost:8080/fcrepo/rest/object1'; - $this->gemini_prophecy->findByUri('http://localhost:8000/user/1?_format=jsonld', Argument::any()) - ->willReturn(null); - $this->gemini_prophecy->findByUri('http://localhost:8000/node/1?_format=jsonld', Argument::any()) - ->willReturn('http://localhost:8080/fcrepo/rest/collection99'); + $node_1 = realpath(__DIR__ . '/resources/node1.json'); + + $this->http_prophecy->get('http://localhost:8000/user/1?_format=json', Argument::any()) + ->willThrow( + new RequestException( + "NOT FOUND", + new \GuzzleHttp\Psr7\Request('GET', 'http://localhost:8000/user/1?_format=json') + ) + ); + $this->http_prophecy->get('http://localhost:8000/node/1?_format=json', Argument::any()) + ->willReturn(new \GuzzleHttp\Psr7\Response(200, [], file_get_contents($node_1))); $mock_silex_app = new Application(); - $mock_silex_app['crayfish.drupal_base_url'] = 'http://localhost:8000'; + $mock_silex_app['crayfish.drupal_base_url'] = 'localhost:8000'; + $mock_silex_app['crayfish.fedora_resource.base_url'] = 'localhost:8080/fcrepo/rest'; $mock_silex_app['crayfish.namespaces'] = $this->namespaces; $mock_fedora_response = $this->getMockFedoraStream( @@ -171,7 +196,8 @@ public function testPrefixes() ); $controller = new RecastController( - $this->gemini_prophecy->reveal(), + new EntityMapper(), + $this->http_prophecy->reveal(), $this->logger_prophecy->reveal() ); diff --git a/Recast/tests/resources/drupal_image_add.json b/Recast/tests/resources/drupal_image_add.json index 972fdeb0..6bbd7f10 100644 --- a/Recast/tests/resources/drupal_image_add.json +++ b/Recast/tests/resources/drupal_image_add.json @@ -73,7 +73,7 @@ "@id": "http://localhost:8000/node/1?_format=jsonld" }, { - "@id": "http://localhost:8080/fcrepo/rest/collection1" + "@id": "http://localhost:8080/fcrepo/rest/b5/5d/ce/b8/b55dceb8-d070-49ce-b37f-f64b1aadb871" } ] } diff --git a/Recast/tests/resources/drupal_image_replace.json b/Recast/tests/resources/drupal_image_replace.json index 4aa76f2c..c1b3392b 100644 --- a/Recast/tests/resources/drupal_image_replace.json +++ b/Recast/tests/resources/drupal_image_replace.json @@ -70,7 +70,7 @@ ], "http://pcdm.org/models#memberOf": [ { - "@id": "http://localhost:8080/fcrepo/rest/collection1" + "@id": "http://localhost:8080/fcrepo/rest/b5/5d/ce/b8/b55dceb8-d070-49ce-b37f-f64b1aadb871" } ] } diff --git a/Recast/tests/resources/node1.json b/Recast/tests/resources/node1.json new file mode 100644 index 00000000..21ef5e67 --- /dev/null +++ b/Recast/tests/resources/node1.json @@ -0,0 +1,185 @@ +{ + "nid": [ + { + "value": 1 + } + ], + "uuid": [ + { + "value": "b55dceb8-d070-49ce-b37f-f64b1aadb871" + } + ], + "vid": [ + { + "value": 48 + } + ], + "langcode": [ + { + "value": "en" + } + ], + "type": [ + { + "target_id": "islandora_object", + "target_type": "node_type", + "target_uuid": "4d81109d-ded5-4e96-8143-18f6534ea270" + } + ], + "revision_timestamp": [ + { + "value": "2019-06-05T04:05:52+00:00", + "format": "Y-m-d\\TH:i:sP" + } + ], + "revision_uid": [ + { + "target_id": 3, + "target_type": "user", + "target_uuid": "f86dc23f-9850-49ad-8d9c-bafb6e93c8bf", + "url": "/user/3" + } + ], + "revision_log": [], + "status": [ + { + "value": true + } + ], + "uid": [ + { + "target_id": 1, + "target_type": "user", + "target_uuid": "f77beca6-3b12-4f61-ae83-947bd848b28a", + "url": "/user/1" + } + ], + "title": [ + { + "value": "Grey and White Tabby Kitten" + } + ], + "created": [ + { + "value": "2019-06-04T14:46:17+00:00", + "format": "Y-m-d\\TH:i:sP" + } + ], + "changed": [ + { + "value": "2019-06-05T04:05:52+00:00", + "format": "Y-m-d\\TH:i:sP" + } + ], + "promote": [ + { + "value": true + } + ], + "sticky": [ + { + "value": false + } + ], + "default_langcode": [ + { + "value": true + } + ], + "revision_translation_affected": [ + { + "value": true + } + ], + "content_translation_source": [ + { + "value": "und" + } + ], + "content_translation_outdated": [ + { + "value": false + } + ], + "field_alternative_title": [], + "field_classification": [], + "field_coordinates": [], + "field_coordinates_text": [], + "field_description": [ + { + "value": "A worried-looking kitten. " + } + ], + "field_dewey_classification": [], + "field_display_hints": [ + { + "target_id": 1, + "target_type": "taxonomy_term", + "target_uuid": "7638c297-e3c3-46c5-ad5d-fb56ee2d915b", + "url": "/taxonomy/term/1" + } + ], + "field_edition": [], + "field_edtf_date": [], + "field_edtf_date_created": [ + { + "value": "2019-04-19" + } + ], + "field_edtf_date_issued": [], + "field_extent": [ + { + "value": "1 item" + } + ], + "field_genre": [], + "field_geographic_subject": [], + "field_identifier": [], + "field_isbn": [], + "field_language": [], + "field_lcc_classification": [], + "field_linked_agent": [], + "field_local_identifier": [], + "field_member_of": [ + { + "target_id": 7, + "target_type": "node", + "target_uuid": "c0bdeca7-7ecc-4745-9e62-224d889d6b74", + "url": "/node/7" + } + ], + "field_model": [ + { + "target_id": 24, + "target_type": "taxonomy_term", + "target_uuid": "d1d40b4e-b608-4604-a4a4-e4fec9e88c38", + "url": "/taxonomy/term/24" + } + ], + "field_note": [], + "field_oclc_number": [], + "field_physical_form": [], + "field_pid": [], + "field_place_published": [], + "field_resource_type": [ + { + "target_id": 5, + "target_type": "taxonomy_term", + "target_uuid": "c785e833-f0f9-489a-b024-a5e7c9258826", + "url": "/taxonomy/term/5" + } + ], + "field_rights": [], + "field_subject": [ + { + "target_id": 27, + "target_type": "taxonomy_term", + "target_uuid": "6f645854-a0ec-4690-a7da-70f7df7bf195", + "url": "/cats" + } + ], + "field_subjects_name": [], + "field_table_of_contents": [], + "field_temporal_subject": [], + "field_weight": [] +} From ae9a35c88d2bdfd0343122a8b5b373d6368cc623 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Thu, 11 Mar 2021 18:45:24 +0000 Subject: [PATCH 18/21] Refixing after breaking it to fix tests lol --- Recast/src/Controller/RecastController.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Recast/src/Controller/RecastController.php b/Recast/src/Controller/RecastController.php index 4293e405..95662b7f 100644 --- a/Recast/src/Controller/RecastController.php +++ b/Recast/src/Controller/RecastController.php @@ -167,6 +167,10 @@ public function recast(Request $request, Application $app, $operation) $fcrepo_base_url = $app['crayfish.fedora_resource.base_url']; $is_drupal_url = strpos($without_protocol, $drupal_base_url) === 0 && strpos($without_protocol, $fcrepo_base_url) !== 0; + + $this->log->debug("Looking for reverse URI for: $uri"); + $this->log->debug("$uri ". $is_drupal_url ? 'is a Drupal URL' : 'is not a Drupal URL'); + if ($is_drupal_url) { $reverse_uri = $this->getFedoraUrl($uri, $fcrepo_base_url, $token); @@ -257,11 +261,14 @@ function ($item) use ($fedora_uri) { private function getFedoraUrl($drupal_url, $fcrepo_base_url, $token) { try { - // Strip off the ld from jsonld. - $drupal_url = rtrim($drupal_url, 'ld'); + // Strip off any query params and force the json format. + $exploded = explode('?', $drupal_url); + $drupal_url = $exploded[0] . '?_format=json'; + $response = $this->http->get($drupal_url, ['Authorization' => $token]); $json_str = $response->getBody(); $json = json_decode($json_str, true); + $this->log->debug("GOT THIS JSON: $json_str"); $is_media = isset($json['bundle']) && !empty($json['bundle']) && From 387f36e4a6dd74f852f8abbe342ba4abc978270f Mon Sep 17 00:00:00 2001 From: dannylamb Date: Fri, 12 Mar 2021 15:27:53 -0400 Subject: [PATCH 19/21] Update composer.json --- Milliner/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Milliner/composer.json b/Milliner/composer.json index 2e74cf3d..d1906325 100644 --- a/Milliner/composer.json +++ b/Milliner/composer.json @@ -4,7 +4,7 @@ "type": "project", "require": { "silex/silex": "^2.0", - "islandora/crayfish-commons": "dev-no-gemini", + "islandora/crayfish-commons": "dev-dev", "islandora/chullo": "dev-dev", "php": "^7.3 || ^7.4" }, From 16b11b37247aa9ce3bf0e671741faaf130fa8745 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Fri, 12 Mar 2021 15:29:12 -0400 Subject: [PATCH 20/21] Update composer.json --- Recast/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Recast/composer.json b/Recast/composer.json index 9af81986..46724f04 100644 --- a/Recast/composer.json +++ b/Recast/composer.json @@ -5,7 +5,7 @@ "require": { "php": "^7.3 || ^7.4", "easyrdf/easyrdf": "^0.9 || ^1", - "islandora/crayfish-commons": "dev-no-gemini", + "islandora/crayfish-commons": "dev-dev", "phpspec/prophecy-phpunit": "^2.0", "silex/silex": "^2.0" }, From 84fd7640b2752d014c9626002158f2da28831973 Mon Sep 17 00:00:00 2001 From: dannylamb Date: Fri, 12 Mar 2021 15:38:25 -0400 Subject: [PATCH 21/21] Updating lockfiles --- Milliner/composer.lock | 278 +++++++++++++++++++++-------------------- Recast/composer.lock | 186 +++++++++++++-------------- 2 files changed, 234 insertions(+), 230 deletions(-) diff --git a/Milliner/composer.lock b/Milliner/composer.lock index 8e64013a..7613376e 100644 --- a/Milliner/composer.lock +++ b/Milliner/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7fbed325a6b286b222a39afe0d92fbe7", + "content-hash": "c8a35b28c6c91a2f29401eb874997e63", "packages": [ { "name": "doctrine/cache", @@ -459,16 +459,16 @@ }, { "name": "guzzlehttp/promises", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "60d379c243457e073cff02bc323a2a86cb355631" + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", - "reference": "60d379c243457e073cff02bc323a2a86cb355631", + "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", "shasum": "" }, "require": { @@ -508,9 +508,9 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.4.0" + "source": "https://github.com/guzzle/promises/tree/1.4.1" }, - "time": "2020-09-30T07:37:28+00:00" + "time": "2021-03-07T09:25:29+00:00" }, { "name": "guzzlehttp/psr7", @@ -593,12 +593,12 @@ "source": { "type": "git", "url": "https://github.com/Islandora/chullo.git", - "reference": "6a5454e2bcdb2b24bf481b842692d4d1de6a0287" + "reference": "7f7df8847844ab478f65de8377c5678d037cb5e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Islandora/chullo/zipball/6a5454e2bcdb2b24bf481b842692d4d1de6a0287", - "reference": "6a5454e2bcdb2b24bf481b842692d4d1de6a0287", + "url": "https://api.github.com/repos/Islandora/chullo/zipball/7f7df8847844ab478f65de8377c5678d037cb5e3", + "reference": "7f7df8847844ab478f65de8377c5678d037cb5e3", "shasum": "" }, "require": { @@ -647,20 +647,20 @@ "issues": "https://github.com/Islandora/documentation/issues", "source": "https://github.com/Islandora/chullo/tree/dev" }, - "time": "2020-12-11T21:38:08+00:00" + "time": "2021-02-16T15:51:00+00:00" }, { "name": "islandora/crayfish-commons", - "version": "dev-no-gemini", + "version": "dev-dev", "source": { "type": "git", "url": "https://github.com/Islandora/Crayfish-Commons.git", - "reference": "8bdf26baee941d686ac1638cc8204798c3e1c355" + "reference": "748c59cd1ddce9ddc9a05e25594cc6a9b230f9c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Islandora/Crayfish-Commons/zipball/8bdf26baee941d686ac1638cc8204798c3e1c355", - "reference": "8bdf26baee941d686ac1638cc8204798c3e1c355", + "url": "https://api.github.com/repos/Islandora/Crayfish-Commons/zipball/748c59cd1ddce9ddc9a05e25594cc6a9b230f9c1", + "reference": "748c59cd1ddce9ddc9a05e25594cc6a9b230f9c1", "shasum": "" }, "require": { @@ -682,6 +682,7 @@ "sebastian/phpcpd": "^6.0", "squizlabs/php_codesniffer": "^3.0" }, + "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -708,9 +709,9 @@ "homepage": "https://github.com/Islandora/Crayfish-Commons", "support": { "issues": "https://github.com/Islandora/documentation/issues", - "source": "https://github.com/Islandora/Crayfish-Commons/tree/no-gemini" + "source": "https://github.com/Islandora/Crayfish-Commons/tree/dev" }, - "time": "2020-12-18T18:48:36+00:00" + "time": "2021-03-12T18:49:29+00:00" }, { "name": "ml/iri", @@ -971,21 +972,21 @@ }, { "name": "pimple/pimple", - "version": "v3.3.1", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/silexphp/Pimple.git", - "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0" + "reference": "86406047271859ffc13424a048541f4531f53601" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/21e45061c3429b1e06233475cc0e1f6fc774d5b0", - "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/86406047271859ffc13424a048541f4531f53601", + "reference": "86406047271859ffc13424a048541f4531f53601", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.0" + "psr/container": "^1.1" }, "require-dev": { "symfony/phpunit-bridge": "^5.0" @@ -993,7 +994,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3.x-dev" + "dev-master": "3.4.x-dev" } }, "autoload": { @@ -1018,33 +1019,28 @@ "dependency injection" ], "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.3.1" + "source": "https://github.com/silexphp/Pimple/tree/v3.4.0" }, - "time": "2020-11-24T20:35:42+00:00" + "time": "2021-03-06T08:28:00+00:00" }, { "name": "psr/container", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -1057,7 +1053,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -1071,9 +1067,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" + "source": "https://github.com/php-fig/container/tree/1.1.1" }, - "time": "2017-02-14T16:28:37+00:00" + "time": "2021-03-05T17:36:06+00:00" }, { "name": "psr/http-message", @@ -1389,16 +1385,16 @@ }, { "name": "symfony/debug", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "af4987aa4a5630e9615be9d9c3ed1b0f24ca449c" + "reference": "157bbec4fd773bae53c5483c50951a5530a2cc16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/af4987aa4a5630e9615be9d9c3ed1b0f24ca449c", - "reference": "af4987aa4a5630e9615be9d9c3ed1b0f24ca449c", + "url": "https://api.github.com/repos/symfony/debug/zipball/157bbec4fd773bae53c5483c50951a5530a2cc16", + "reference": "157bbec4fd773bae53c5483c50951a5530a2cc16", "shasum": "" }, "require": { @@ -1438,7 +1434,7 @@ "description": "Provides tools to ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.19" + "source": "https://github.com/symfony/debug/tree/v4.4.20" }, "funding": [ { @@ -1454,7 +1450,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2021-01-28T16:54:48+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1525,7 +1521,7 @@ }, { "name": "symfony/event-dispatcher", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -1588,7 +1584,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.19" + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.20" }, "funding": [ { @@ -1687,16 +1683,16 @@ }, { "name": "symfony/http-foundation", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "8888741b633f6c3d1e572b7735ad2cae3e03f9c5" + "reference": "02d968647fe61b2f419a8dc70c468a9d30a48d3a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8888741b633f6c3d1e572b7735ad2cae3e03f9c5", - "reference": "8888741b633f6c3d1e572b7735ad2cae3e03f9c5", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/02d968647fe61b2f419a8dc70c468a9d30a48d3a", + "reference": "02d968647fe61b2f419a8dc70c468a9d30a48d3a", "shasum": "" }, "require": { @@ -1735,7 +1731,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v4.4.19" + "source": "https://github.com/symfony/http-foundation/tree/v4.4.20" }, "funding": [ { @@ -1751,7 +1747,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2021-02-25T17:11:33+00:00" }, { "name": "symfony/http-kernel", @@ -1848,7 +1844,7 @@ }, { "name": "symfony/inflector", - "version": "v5.2.2", + "version": "v5.2.4", "source": { "type": "git", "url": "https://github.com/symfony/inflector.git", @@ -1899,7 +1895,7 @@ "words" ], "support": { - "source": "https://github.com/symfony/inflector/tree/v5.2.2" + "source": "https://github.com/symfony/inflector/tree/v5.2.4" }, "funding": [ { @@ -1919,16 +1915,16 @@ }, { "name": "symfony/mime", - "version": "v5.2.2", + "version": "v5.2.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "37bade585ea100d235c031b258eff93b5b6bb9a9" + "reference": "554ba128f1955038b45db5e1fa7e93bfc683b139" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/37bade585ea100d235c031b258eff93b5b6bb9a9", - "reference": "37bade585ea100d235c031b258eff93b5b6bb9a9", + "url": "https://api.github.com/repos/symfony/mime/zipball/554ba128f1955038b45db5e1fa7e93bfc683b139", + "reference": "554ba128f1955038b45db5e1fa7e93bfc683b139", "shasum": "" }, "require": { @@ -1939,12 +1935,13 @@ "symfony/polyfill-php80": "^1.15" }, "conflict": { + "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<4.4" }, "require-dev": { - "egulias/email-validator": "^2.1.10", + "egulias/email-validator": "^2.1.10|^3.1", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/dependency-injection": "^4.4|^5.0", "symfony/property-access": "^4.4|^5.1", @@ -1981,7 +1978,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.2.2" + "source": "https://github.com/symfony/mime/tree/v5.2.5" }, "funding": [ { @@ -1997,11 +1994,11 @@ "type": "tidelift" } ], - "time": "2021-01-25T14:08:25+00:00" + "time": "2021-03-07T16:08:20+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.22.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -2060,7 +2057,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" }, "funding": [ { @@ -2080,16 +2077,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.22.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "267a9adeb8ecb8071040a740930e077cdfb987af" + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/267a9adeb8ecb8071040a740930e077cdfb987af", - "reference": "267a9adeb8ecb8071040a740930e077cdfb987af", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", "shasum": "" }, "require": { @@ -2141,7 +2138,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1" }, "funding": [ { @@ -2157,20 +2154,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.22.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44" + "reference": "2d63434d922daf7da8dd863e7907e67ee3031483" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44", - "reference": "0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/2d63434d922daf7da8dd863e7907e67ee3031483", + "reference": "2d63434d922daf7da8dd863e7907e67ee3031483", "shasum": "" }, "require": { @@ -2228,7 +2225,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.22.1" }, "funding": [ { @@ -2244,20 +2241,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.22.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "6e971c891537eb617a00bb07a43d182a6915faba" + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/6e971c891537eb617a00bb07a43d182a6915faba", - "reference": "6e971c891537eb617a00bb07a43d182a6915faba", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", "shasum": "" }, "require": { @@ -2312,7 +2309,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1" }, "funding": [ { @@ -2328,20 +2325,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T17:09:11+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.22.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13" + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f377a3dd1fde44d37b9831d68dc8dea3ffd28e13", - "reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", "shasum": "" }, "require": { @@ -2392,7 +2389,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" }, "funding": [ { @@ -2408,7 +2405,7 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-php56", @@ -2548,7 +2545,7 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.22.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", @@ -2604,7 +2601,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.22.1" }, "funding": [ { @@ -2624,7 +2621,7 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.22.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", @@ -2687,7 +2684,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" }, "funding": [ { @@ -2707,7 +2704,7 @@ }, { "name": "symfony/property-access", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", @@ -2766,7 +2763,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v4.4.19" + "source": "https://github.com/symfony/property-access/tree/v4.4.20" }, "funding": [ { @@ -2786,16 +2783,16 @@ }, { "name": "symfony/routing", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "87529f6e305c7acb162840d1ea57922038072425" + "reference": "69919991c845b34626664ddc9b3aef9d09d2a5df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/87529f6e305c7acb162840d1ea57922038072425", - "reference": "87529f6e305c7acb162840d1ea57922038072425", + "url": "https://api.github.com/repos/symfony/routing/zipball/69919991c845b34626664ddc9b3aef9d09d2a5df", + "reference": "69919991c845b34626664ddc9b3aef9d09d2a5df", "shasum": "" }, "require": { @@ -2854,7 +2851,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v4.4.19" + "source": "https://github.com/symfony/routing/tree/v4.4.20" }, "funding": [ { @@ -2870,7 +2867,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2021-02-22T15:37:04+00:00" }, { "name": "symfony/security", @@ -2969,16 +2966,16 @@ }, { "name": "symfony/string", - "version": "v5.2.2", + "version": "v5.2.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "c95468897f408dd0aca2ff582074423dd0455122" + "reference": "4e78d7d47061fa183639927ec40d607973699609" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/c95468897f408dd0aca2ff582074423dd0455122", - "reference": "c95468897f408dd0aca2ff582074423dd0455122", + "url": "https://api.github.com/repos/symfony/string/zipball/4e78d7d47061fa183639927ec40d607973699609", + "reference": "4e78d7d47061fa183639927ec40d607973699609", "shasum": "" }, "require": { @@ -3032,7 +3029,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.2.2" + "source": "https://github.com/symfony/string/tree/v5.2.4" }, "funding": [ { @@ -3048,20 +3045,20 @@ "type": "tidelift" } ], - "time": "2021-01-25T15:14:59+00:00" + "time": "2021-02-16T10:20:28+00:00" }, { "name": "symfony/yaml", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9" + "reference": "29e61305e1c79d25f71060903982ead8f533e267" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9", - "reference": "17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9", + "url": "https://api.github.com/repos/symfony/yaml/zipball/29e61305e1c79d25f71060903982ead8f533e267", + "reference": "29e61305e1c79d25f71060903982ead8f533e267", "shasum": "" }, "require": { @@ -3103,7 +3100,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v4.4.19" + "source": "https://github.com/symfony/yaml/tree/v4.4.20" }, "funding": [ { @@ -3119,7 +3116,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2021-02-22T15:36:50+00:00" } ], "packages-dev": [ @@ -3368,16 +3365,16 @@ }, { "name": "phar-io/version", - "version": "3.0.4", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", - "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { @@ -3413,9 +3410,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.0.4" + "source": "https://github.com/phar-io/version/tree/3.1.0" }, - "time": "2020-12-13T23:18:30+00:00" + "time": "2021-02-23T14:00:09+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -4014,16 +4011,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.1", + "version": "9.5.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e7bdf4085de85a825f4424eae52c99a1cec2f360" + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e7bdf4085de85a825f4424eae52c99a1cec2f360", - "reference": "e7bdf4085de85a825f4424eae52c99a1cec2f360", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f661659747f2f87f9e72095bb207bceb0f151cb4", + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4", "shasum": "" }, "require": { @@ -4101,7 +4098,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.1" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.2" }, "funding": [ { @@ -4113,7 +4110,7 @@ "type": "github" } ], - "time": "2021-01-17T07:42:25+00:00" + "time": "2021-02-02T14:45:58+00:00" }, { "name": "sebastian/cli-parser", @@ -5332,16 +5329,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "21032c566558255e551d23f4a516434c9e3a9a78" + "reference": "be133557f1b0e6672367325b508e65da5513a311" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/21032c566558255e551d23f4a516434c9e3a9a78", - "reference": "21032c566558255e551d23f4a516434c9e3a9a78", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/be133557f1b0e6672367325b508e65da5513a311", + "reference": "be133557f1b0e6672367325b508e65da5513a311", "shasum": "" }, "require": { @@ -5385,7 +5382,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v4.4.19" + "source": "https://github.com/symfony/dom-crawler/tree/v4.4.20" }, "funding": [ { @@ -5401,7 +5398,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2021-02-14T12:29:41+00:00" }, { "name": "theseer/tokenizer", @@ -5455,30 +5452,35 @@ }, { "name": "webmozart/assert", - "version": "1.9.1", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", + "php": "^7.2 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -5502,9 +5504,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.9.1" + "source": "https://github.com/webmozarts/assert/tree/1.10.0" }, - "time": "2020-07-08T17:02:28+00:00" + "time": "2021-03-09T10:59:23+00:00" } ], "aliases": [], diff --git a/Recast/composer.lock b/Recast/composer.lock index 87792f9a..fd14a36a 100644 --- a/Recast/composer.lock +++ b/Recast/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "03b8526f25584100c31b9e2261bb636f", + "content-hash": "c26f100c263d064483d95be7de4693d6", "packages": [ { "name": "doctrine/cache", @@ -528,16 +528,16 @@ }, { "name": "guzzlehttp/promises", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "60d379c243457e073cff02bc323a2a86cb355631" + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", - "reference": "60d379c243457e073cff02bc323a2a86cb355631", + "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", "shasum": "" }, "require": { @@ -577,9 +577,9 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.4.0" + "source": "https://github.com/guzzle/promises/tree/1.4.1" }, - "time": "2020-09-30T07:37:28+00:00" + "time": "2021-03-07T09:25:29+00:00" }, { "name": "guzzlehttp/psr7", @@ -720,16 +720,16 @@ }, { "name": "islandora/crayfish-commons", - "version": "dev-no-gemini", + "version": "dev-dev", "source": { "type": "git", "url": "https://github.com/Islandora/Crayfish-Commons.git", - "reference": "d6e22f7556c175e93410d5830398068d6b4fcd34" + "reference": "748c59cd1ddce9ddc9a05e25594cc6a9b230f9c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Islandora/Crayfish-Commons/zipball/d6e22f7556c175e93410d5830398068d6b4fcd34", - "reference": "d6e22f7556c175e93410d5830398068d6b4fcd34", + "url": "https://api.github.com/repos/Islandora/Crayfish-Commons/zipball/748c59cd1ddce9ddc9a05e25594cc6a9b230f9c1", + "reference": "748c59cd1ddce9ddc9a05e25594cc6a9b230f9c1", "shasum": "" }, "require": { @@ -751,6 +751,7 @@ "sebastian/phpcpd": "^6.0", "squizlabs/php_codesniffer": "^3.0" }, + "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -777,9 +778,9 @@ "homepage": "https://github.com/Islandora/Crayfish-Commons", "support": { "issues": "https://github.com/Islandora/documentation/issues", - "source": "https://github.com/Islandora/Crayfish-Commons/tree/no-gemini" + "source": "https://github.com/Islandora/Crayfish-Commons/tree/dev" }, - "time": "2021-02-03T19:58:16+00:00" + "time": "2021-03-12T18:49:29+00:00" }, { "name": "ml/iri", @@ -1963,21 +1964,21 @@ }, { "name": "pimple/pimple", - "version": "v3.3.1", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/silexphp/Pimple.git", - "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0" + "reference": "86406047271859ffc13424a048541f4531f53601" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/21e45061c3429b1e06233475cc0e1f6fc774d5b0", - "reference": "21e45061c3429b1e06233475cc0e1f6fc774d5b0", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/86406047271859ffc13424a048541f4531f53601", + "reference": "86406047271859ffc13424a048541f4531f53601", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.0" + "psr/container": "^1.1" }, "require-dev": { "symfony/phpunit-bridge": "^5.0" @@ -1985,7 +1986,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3.x-dev" + "dev-master": "3.4.x-dev" } }, "autoload": { @@ -2010,33 +2011,28 @@ "dependency injection" ], "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.3.1" + "source": "https://github.com/silexphp/Pimple/tree/v3.4.0" }, - "time": "2020-11-24T20:35:42+00:00" + "time": "2021-03-06T08:28:00+00:00" }, { "name": "psr/container", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -2049,7 +2045,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -2063,9 +2059,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" + "source": "https://github.com/php-fig/container/tree/1.1.1" }, - "time": "2017-02-14T16:28:37+00:00" + "time": "2021-03-05T17:36:06+00:00" }, { "name": "psr/http-message", @@ -3345,16 +3341,16 @@ }, { "name": "symfony/debug", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "af4987aa4a5630e9615be9d9c3ed1b0f24ca449c" + "reference": "157bbec4fd773bae53c5483c50951a5530a2cc16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/af4987aa4a5630e9615be9d9c3ed1b0f24ca449c", - "reference": "af4987aa4a5630e9615be9d9c3ed1b0f24ca449c", + "url": "https://api.github.com/repos/symfony/debug/zipball/157bbec4fd773bae53c5483c50951a5530a2cc16", + "reference": "157bbec4fd773bae53c5483c50951a5530a2cc16", "shasum": "" }, "require": { @@ -3394,7 +3390,7 @@ "description": "Provides tools to ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.19" + "source": "https://github.com/symfony/debug/tree/v4.4.20" }, "funding": [ { @@ -3410,7 +3406,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2021-01-28T16:54:48+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3481,7 +3477,7 @@ }, { "name": "symfony/event-dispatcher", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -3544,7 +3540,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.19" + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.20" }, "funding": [ { @@ -3643,16 +3639,16 @@ }, { "name": "symfony/http-foundation", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "8888741b633f6c3d1e572b7735ad2cae3e03f9c5" + "reference": "02d968647fe61b2f419a8dc70c468a9d30a48d3a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8888741b633f6c3d1e572b7735ad2cae3e03f9c5", - "reference": "8888741b633f6c3d1e572b7735ad2cae3e03f9c5", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/02d968647fe61b2f419a8dc70c468a9d30a48d3a", + "reference": "02d968647fe61b2f419a8dc70c468a9d30a48d3a", "shasum": "" }, "require": { @@ -3691,7 +3687,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v4.4.19" + "source": "https://github.com/symfony/http-foundation/tree/v4.4.20" }, "funding": [ { @@ -3707,7 +3703,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2021-02-25T17:11:33+00:00" }, { "name": "symfony/http-kernel", @@ -3804,7 +3800,7 @@ }, { "name": "symfony/inflector", - "version": "v5.2.3", + "version": "v5.2.4", "source": { "type": "git", "url": "https://github.com/symfony/inflector.git", @@ -3855,7 +3851,7 @@ "words" ], "support": { - "source": "https://github.com/symfony/inflector/tree/v5.2.3" + "source": "https://github.com/symfony/inflector/tree/v5.2.4" }, "funding": [ { @@ -3875,16 +3871,16 @@ }, { "name": "symfony/mime", - "version": "v5.2.3", + "version": "v5.2.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "7dee6a43493f39b51ff6c5bb2bd576fe40a76c86" + "reference": "554ba128f1955038b45db5e1fa7e93bfc683b139" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/7dee6a43493f39b51ff6c5bb2bd576fe40a76c86", - "reference": "7dee6a43493f39b51ff6c5bb2bd576fe40a76c86", + "url": "https://api.github.com/repos/symfony/mime/zipball/554ba128f1955038b45db5e1fa7e93bfc683b139", + "reference": "554ba128f1955038b45db5e1fa7e93bfc683b139", "shasum": "" }, "require": { @@ -3895,12 +3891,13 @@ "symfony/polyfill-php80": "^1.15" }, "conflict": { + "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<4.4" }, "require-dev": { - "egulias/email-validator": "^2.1.10", + "egulias/email-validator": "^2.1.10|^3.1", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/dependency-injection": "^4.4|^5.0", "symfony/property-access": "^4.4|^5.1", @@ -3937,7 +3934,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.2.3" + "source": "https://github.com/symfony/mime/tree/v5.2.5" }, "funding": [ { @@ -3953,7 +3950,7 @@ "type": "tidelift" } ], - "time": "2021-02-02T06:10:15+00:00" + "time": "2021-03-07T16:08:20+00:00" }, { "name": "symfony/polyfill-ctype", @@ -4663,7 +4660,7 @@ }, { "name": "symfony/property-access", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", @@ -4722,7 +4719,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v4.4.19" + "source": "https://github.com/symfony/property-access/tree/v4.4.20" }, "funding": [ { @@ -4742,16 +4739,16 @@ }, { "name": "symfony/routing", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "87529f6e305c7acb162840d1ea57922038072425" + "reference": "69919991c845b34626664ddc9b3aef9d09d2a5df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/87529f6e305c7acb162840d1ea57922038072425", - "reference": "87529f6e305c7acb162840d1ea57922038072425", + "url": "https://api.github.com/repos/symfony/routing/zipball/69919991c845b34626664ddc9b3aef9d09d2a5df", + "reference": "69919991c845b34626664ddc9b3aef9d09d2a5df", "shasum": "" }, "require": { @@ -4810,7 +4807,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v4.4.19" + "source": "https://github.com/symfony/routing/tree/v4.4.20" }, "funding": [ { @@ -4826,7 +4823,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2021-02-22T15:37:04+00:00" }, { "name": "symfony/security", @@ -4925,16 +4922,16 @@ }, { "name": "symfony/string", - "version": "v5.2.3", + "version": "v5.2.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "c95468897f408dd0aca2ff582074423dd0455122" + "reference": "4e78d7d47061fa183639927ec40d607973699609" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/c95468897f408dd0aca2ff582074423dd0455122", - "reference": "c95468897f408dd0aca2ff582074423dd0455122", + "url": "https://api.github.com/repos/symfony/string/zipball/4e78d7d47061fa183639927ec40d607973699609", + "reference": "4e78d7d47061fa183639927ec40d607973699609", "shasum": "" }, "require": { @@ -4988,7 +4985,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.2.3" + "source": "https://github.com/symfony/string/tree/v5.2.4" }, "funding": [ { @@ -5004,20 +5001,20 @@ "type": "tidelift" } ], - "time": "2021-01-25T15:14:59+00:00" + "time": "2021-02-16T10:20:28+00:00" }, { "name": "symfony/yaml", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9" + "reference": "29e61305e1c79d25f71060903982ead8f533e267" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9", - "reference": "17ed9f14c1aa05b1a5cf2e2c5ef2d0be28058ef9", + "url": "https://api.github.com/repos/symfony/yaml/zipball/29e61305e1c79d25f71060903982ead8f533e267", + "reference": "29e61305e1c79d25f71060903982ead8f533e267", "shasum": "" }, "require": { @@ -5059,7 +5056,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v4.4.19" + "source": "https://github.com/symfony/yaml/tree/v4.4.20" }, "funding": [ { @@ -5075,7 +5072,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2021-02-22T15:36:50+00:00" }, { "name": "theseer/tokenizer", @@ -5129,30 +5126,35 @@ }, { "name": "webmozart/assert", - "version": "1.9.1", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", + "php": "^7.2 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -5176,9 +5178,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.9.1" + "source": "https://github.com/webmozarts/assert/tree/1.10.0" }, - "time": "2020-07-08T17:02:28+00:00" + "time": "2021-03-09T10:59:23+00:00" } ], "packages-dev": [ @@ -5435,16 +5437,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v4.4.19", + "version": "v4.4.20", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "21032c566558255e551d23f4a516434c9e3a9a78" + "reference": "be133557f1b0e6672367325b508e65da5513a311" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/21032c566558255e551d23f4a516434c9e3a9a78", - "reference": "21032c566558255e551d23f4a516434c9e3a9a78", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/be133557f1b0e6672367325b508e65da5513a311", + "reference": "be133557f1b0e6672367325b508e65da5513a311", "shasum": "" }, "require": { @@ -5488,7 +5490,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v4.4.19" + "source": "https://github.com/symfony/dom-crawler/tree/v4.4.20" }, "funding": [ { @@ -5504,7 +5506,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T09:09:26+00:00" + "time": "2021-02-14T12:29:41+00:00" } ], "aliases": [],