diff --git a/.github/ISSUE_TEMPLATE/1_BUG.md b/.github/ISSUE_TEMPLATE/1_BUG.md new file mode 100644 index 00000000000..7b44a6f91e5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1_BUG.md @@ -0,0 +1,39 @@ +--- +name: 🐞 Bug Report for PHPUnit 9 and PHPUnit 10 +about: Something is broken in PHPUnit 9 and in PHPUnit 10? +labels: type/bug, version/9, version/10 +--- + + + +| Q | A +| --------------------| --------------- +| PHPUnit version | x.y.z +| PHP version | x.y.z +| Installation Method | Composer / PHAR + +#### Summary + + + +#### Current behavior + + + +#### How to reproduce + + + +#### Expected behavior + + diff --git a/.github/ISSUE_TEMPLATE/2_BUG_PHPUNIT_10.md b/.github/ISSUE_TEMPLATE/2_BUG_PHPUNIT_10.md new file mode 100644 index 00000000000..6976ad44234 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2_BUG_PHPUNIT_10.md @@ -0,0 +1,39 @@ +--- +name: 🐞 Bug Report for PHPUnit 10 +about: Something is broken in PHPUnit 10, but it works in PHPUnit 9? +labels: type/bug, version/10 +--- + + + +| Q | A +| --------------------| --------------- +| PHPUnit version | x.y.z +| PHP version | x.y.z +| Installation Method | Composer / PHAR + +#### Summary + + + +#### Current behavior + + + +#### How to reproduce + + + +#### Expected behavior + + diff --git a/.github/ISSUE_TEMPLATE/BUG.md b/.github/ISSUE_TEMPLATE/3_BUG_PHPUNIT_9.md similarity index 91% rename from .github/ISSUE_TEMPLATE/BUG.md rename to .github/ISSUE_TEMPLATE/3_BUG_PHPUNIT_9.md index b9db2c64ad1..2b0d58909a7 100644 --- a/.github/ISSUE_TEMPLATE/BUG.md +++ b/.github/ISSUE_TEMPLATE/3_BUG_PHPUNIT_9.md @@ -1,7 +1,7 @@ --- -name: 🐞 Bug Report -about: Something is broken? -labels: type/bug +name: 🐞 Bug Report for PHPUnit 9 +about: Something is broken in PHPUnit 9, but it works in PHPUnit 10? +labels: type/bug, version/9 --- + +| Q | A +| --------------------| --------------- +| PHPUnit version | x.y.z +| PHP version | x.y.z +| Installation Method | Composer / PHAR + +#### Summary + + + +#### Current behavior + + + +#### How to reproduce + + + +#### Expected behavior + + diff --git a/.github/ISSUE_TEMPLATE/5_COMPATIBILITY_PHPUNIT_9.md b/.github/ISSUE_TEMPLATE/5_COMPATIBILITY_PHPUNIT_9.md new file mode 100644 index 00000000000..029316ecded --- /dev/null +++ b/.github/ISSUE_TEMPLATE/5_COMPATIBILITY_PHPUNIT_9.md @@ -0,0 +1,39 @@ +--- +name: ⚠️ PHP Compatibility Issue in PHPUnit 9 +about: A change in a new version of PHP requires adaption in PHPUnit 9? +labels: type/change-in-php-requires-adaptation, version/9 +--- + + + +| Q | A +| --------------------| --------------- +| PHPUnit version | x.y.z +| PHP version | x.y.z +| Installation Method | Composer / PHAR + +#### Summary + + + +#### Current behavior + + + +#### How to reproduce + + + +#### Expected behavior + + diff --git a/.github/ISSUE_TEMPLATE/6_COMPATIBILITY_PHPUNIT_8.md b/.github/ISSUE_TEMPLATE/6_COMPATIBILITY_PHPUNIT_8.md new file mode 100644 index 00000000000..f3137317489 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/6_COMPATIBILITY_PHPUNIT_8.md @@ -0,0 +1,39 @@ +--- +name: ⚠️ PHP Compatibility Issue in PHPUnit 8 +about: A change in a new version of PHP requires adaption in PHPUnit 8? +labels: type/change-in-php-requires-adaptation, version/8 +--- + + + +| Q | A +| --------------------| --------------- +| PHPUnit version | x.y.z +| PHP version | x.y.z +| Installation Method | Composer / PHAR + +#### Summary + + + +#### Current behavior + + + +#### How to reproduce + + + +#### Expected behavior + + diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md b/.github/ISSUE_TEMPLATE/7_FEATURE_REQUEST.md similarity index 100% rename from .github/ISSUE_TEMPLATE/FEATURE_REQUEST.md rename to .github/ISSUE_TEMPLATE/7_FEATURE_REQUEST.md diff --git a/.phive/phars.xml b/.phive/phars.xml index 9e7784c0738..152b950a255 100644 --- a/.phive/phars.xml +++ b/.phive/phars.xml @@ -1,8 +1,8 @@ - - + + - + diff --git a/ChangeLog-10.0.md b/ChangeLog-10.0.md index 9901f1b4cfe..601003f7867 100644 --- a/ChangeLog-10.0.md +++ b/ChangeLog-10.0.md @@ -2,6 +2,12 @@ All notable changes of the PHPUnit 10.0 release series are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles. +## [10.0.8] - 2023-02-18 + +### Fixed + +* [#5210](https://github.com/sebastianbergmann/phpunit/issues/5210): Exceptions raised in `TestCase::tearDown()` are not handled correctly + ## [10.0.7] - 2023-02-08 ### Changed @@ -111,6 +117,7 @@ All notable changes of the PHPUnit 10.0 release series are documented in this fi * The `forceCoversAnnotation` attribute of the `` element of PHPUnit's XML configuration file has been renamed to `requireCoverageMetadata` * The `beStrictAboutCoversAnnotation` attribute of the `` element of PHPUnit's XML configuration file has been renamed to `beStrictAboutCoverageMetadata` * The public methods of `PHPUnit\Framework\Assert` and `PHPUnit\Framework\TestCase` are now `final` +* The `PHPUnit\Framework\TestCase::onNotSuccessfulTest()` method can no longer manipulate the outcome of a test * The `--testdox` CLI option no longer replaces the default progress output, but only the default result output * The CLI test runner now only stops after a test errored when `--stop-on-error` or `--stop-on-defect` is used * The CLI test runner now only stops after a test failed when `--stop-on-failure` or `--stop-on-defect` is used @@ -183,6 +190,7 @@ All notable changes of the PHPUnit 10.0 release series are documented in this fi * PHP 7.3, PHP 7.4, and PHP 8.0 are no longer supported * `phpunit/php-code-coverage` [no longer supports PHPDBG and Xdebug 2](https://github.com/sebastianbergmann/php-code-coverage/blob/10.0.0/ChangeLog.md#1000---2023-02-03) +[10.0.8]: https://github.com/sebastianbergmann/phpunit/compare/10.0.7...10.0.8 [10.0.7]: https://github.com/sebastianbergmann/phpunit/compare/10.0.6...10.0.7 [10.0.6]: https://github.com/sebastianbergmann/phpunit/compare/10.0.5...10.0.6 [10.0.5]: https://github.com/sebastianbergmann/phpunit/compare/10.0.4...10.0.5 diff --git a/ChangeLog-9.6.md b/ChangeLog-9.6.md index 2491e3034b8..5549f9cdb3b 100644 --- a/ChangeLog-9.6.md +++ b/ChangeLog-9.6.md @@ -19,7 +19,7 @@ All notable changes of the PHPUnit 9.6 release series are documented in this fil ### Fixed * [#5073](https://github.com/sebastianbergmann/phpunit/issues/5073): `--no-extensions` CLI option only prevents extension PHARs from being loaded -* [#5160](https://github.com/sebastianbergmann/phpunit/issues/5160): PHPUnit 9.6 misses deprecations for assertions and constraints removed in PHPUnit 10 +* [#5160](https://github.com/sebastianbergmann/phpunit/issues/5160): Deprecate `assertClassHasAttribute()`, `assertClassNotHasAttribute()`, `assertClassHasStaticAttribute()`, `assertClassNotHasStaticAttribute()`, `assertObjectHasAttribute()`, `assertObjectNotHasAttribute()`, `classHasAttribute()`, `classHasStaticAttribute()`, and `objectHasAttribute()` ## [9.6.0] - 2023-02-03 diff --git a/src/Framework/TestCase.php b/src/Framework/TestCase.php index 25b746ebab2..4397e6af720 100644 --- a/src/Framework/TestCase.php +++ b/src/Framework/TestCase.php @@ -591,13 +591,11 @@ final public function runBare(): void clearstatcache(); $hookMethods = (new HookMethods)->hookMethods(static::class); - $hasMetRequirements = false; $this->numberOfAssertionsPerformed = 0; $currentWorkingDirectory = getcwd(); try { $this->checkRequirements(); - $hasMetRequirements = true; if ($this->inIsolation) { $this->invokeBeforeClassHookMethods($hookMethods, $emitter); @@ -620,6 +618,11 @@ final public function runBare(): void $this->verifyMockObjects(); $this->invokePostConditionHookMethods($hookMethods, $emitter); + $this->invokeAfterTestHookMethods($hookMethods, $emitter); + + if ($this->inIsolation) { + $this->invokeAfterClassHookMethods($hookMethods, $emitter); + } $this->status = TestStatus::success(); } catch (IncompleteTest $e) { @@ -675,20 +678,6 @@ final public function runBare(): void $this->mockObjects = []; - // Tear down the fixture. An exception raised in tearDown() will be - // caught and passed on when no exception was raised before. - try { - if ($hasMetRequirements) { - $this->invokeAfterTestHookMethods($hookMethods, $emitter); - - if ($this->inIsolation) { - $this->invokeAfterClassHookMethods($hookMethods, $emitter); - } - } - } catch (Throwable $_e) { - $e = $e ?? $_e; - } - if (isset($_e)) { $this->status = TestStatus::error($_e->getMessage()); } diff --git a/src/Runner/Version.php b/src/Runner/Version.php index 39f1bf08792..87334bb1afe 100644 --- a/src/Runner/Version.php +++ b/src/Runner/Version.php @@ -34,7 +34,7 @@ public static function id(): string } if (self::$version === '') { - self::$version = (new VersionId('10.0.7', dirname(__DIR__, 2)))->asString(); + self::$version = (new VersionId('10.0.8', dirname(__DIR__, 2)))->asString(); } return self::$version; diff --git a/src/TextUI/Help.php b/src/TextUI/Help.php index bae83135445..1106904bd25 100644 --- a/src/TextUI/Help.php +++ b/src/TextUI/Help.php @@ -53,8 +53,8 @@ final class Help ['arg' => '--list-groups', 'desc' => 'List available test groups'], ['arg' => '--group ', 'desc' => 'Only run tests from the specified group(s)'], ['arg' => '--exclude-group ', 'desc' => 'Exclude tests from the specified group(s)'], - ['arg' => '--covers ', 'desc' => 'Only run tests annotated with "@covers "'], - ['arg' => '--uses ', 'desc' => 'Only run tests annotated with "@uses "'], + ['arg' => '--covers ', 'desc' => 'Only run tests that intend to cover '], + ['arg' => '--uses ', 'desc' => 'Only run tests that intend to use '], ['arg' => '--list-tests', 'desc' => 'List available tests'], ['arg' => '--list-tests-xml ', 'desc' => 'List available tests in XML format'], ['arg' => '--filter ', 'desc' => 'Filter which tests to run'], @@ -67,7 +67,7 @@ final class Help ['arg' => '--static-backup', 'desc' => 'Backup and restore static properties for each test'], ['spacer' => ''], - ['arg' => '--strict-coverage', 'desc' => 'Be strict about code coverage attributes and annotations'], + ['arg' => '--strict-coverage', 'desc' => 'Be strict about code coverage metadata'], ['arg' => '--strict-global-state', 'desc' => 'Be strict about changes to global state'], ['arg' => '--disallow-test-output', 'desc' => 'Be strict about output during tests'], ['arg' => '--enforce-time-limit', 'desc' => 'Enforce time limit based on test size'], @@ -94,8 +94,8 @@ final class Help ['arg' => '--do-not-cache-result', 'desc' => 'Do not write test results to cache file'], ['spacer' => ''], - ['arg' => '--order-by ', 'desc' => 'Run tests in order: default|defects|duration|no-depends|random|reverse|size'], - ['arg' => '--random-order-seed ', 'desc' => 'Use a specific random seed for random order'], + ['arg' => '--order-by ', 'desc' => 'Run tests in order: default|defects|depends|duration|no-depends|random|reverse|size'], + ['arg' => '--random-order-seed ', 'desc' => 'Use the specified random seed when running tests in random order'], ], 'Reporting' => [ @@ -119,40 +119,40 @@ final class Help ['arg' => '--reverse-list', 'desc' => 'Print defects in reverse order'], ['spacer' => ''], - ['arg' => '--teamcity', 'desc' => 'Report test execution progress in TeamCity format'], - ['arg' => '--testdox', 'desc' => 'Report test results in TestDox format'], + ['arg' => '--teamcity', 'desc' => 'Replace default progress and result output with TeamCity format'], + ['arg' => '--testdox', 'desc' => 'Replace default result output with TestDox format'], ], 'Logging' => [ - ['arg' => '--log-junit ', 'desc' => 'Log test execution in JUnit XML format to file'], - ['arg' => '--log-teamcity ', 'desc' => 'Log test execution in TeamCity format to file'], - ['arg' => '--testdox-html ', 'desc' => 'Write documentation in HTML format to file'], - ['arg' => '--testdox-text ', 'desc' => 'Write documentation in Text format to file'], + ['arg' => '--log-junit ', 'desc' => 'Write test results in JUnit XML format to file'], + ['arg' => '--log-teamcity ', 'desc' => 'Write test results in TeamCity format to file'], + ['arg' => '--testdox-html ', 'desc' => 'Write test results in TestDox format (HTML) to file'], + ['arg' => '--testdox-text ', 'desc' => 'Write test results in TestDox format (plain text) to file'], ['arg' => '--log-events-text ', 'desc' => 'Stream events as plain text to file'], - ['arg' => '--log-events-verbose-text ', 'desc' => 'Stream events as plain text to file (with telemetry information)'], - ['arg' => '--no-logging', 'desc' => 'Ignore logging configuration'], + ['arg' => '--log-events-verbose-text ', 'desc' => 'Stream events as plain text (with telemetry information) to file'], + ['arg' => '--no-logging', 'desc' => 'Ignore logging configured in the XML configuration file'], ], 'Code Coverage' => [ - ['arg' => '--coverage-clover ', 'desc' => 'Generate code coverage report in Clover XML format'], - ['arg' => '--coverage-cobertura ', 'desc' => 'Generate code coverage report in Cobertura XML format'], - ['arg' => '--coverage-crap4j ', 'desc' => 'Generate code coverage report in Crap4J XML format'], - ['arg' => '--coverage-html ', 'desc' => 'Generate code coverage report in HTML format'], - ['arg' => '--coverage-php ', 'desc' => 'Export PHP_CodeCoverage object to file'], - ['arg' => '--coverage-text=', 'desc' => 'Generate code coverage report in text format [default: standard output]'], - ['arg' => '--coverage-xml ', 'desc' => 'Generate code coverage report in PHPUnit XML format'], + ['arg' => '--coverage-clover ', 'desc' => 'Write code coverage report in Clover XML format to file'], + ['arg' => '--coverage-cobertura ', 'desc' => 'Write code coverage report in Cobertura XML format to file'], + ['arg' => '--coverage-crap4j ', 'desc' => 'Write code coverage report in Crap4J XML format to file'], + ['arg' => '--coverage-html ', 'desc' => 'Write code coverage report in HTML format to directory'], + ['arg' => '--coverage-php ', 'desc' => 'Write serialized code coverage data to file'], + ['arg' => '--coverage-text=', 'desc' => 'Write code coverage report in text format to file [default: standard output]'], + ['arg' => '--coverage-xml ', 'desc' => 'Write code coverage report in XML format to directory'], ['arg' => '--warm-coverage-cache', 'desc' => 'Warm static analysis cache'], - ['arg' => '--coverage-filter ', 'desc' => 'Include in code coverage analysis'], - ['arg' => '--path-coverage', 'desc' => 'Perform path coverage analysis'], - ['arg' => '--disable-coverage-ignore', 'desc' => 'Disable attributes and annotations for ignoring code coverage'], - ['arg' => '--no-coverage', 'desc' => 'Ignore code coverage configuration'], + ['arg' => '--coverage-filter ', 'desc' => 'Include in code coverage reporting'], + ['arg' => '--path-coverage', 'desc' => 'Report path coverage in addition to line coverage'], + ['arg' => '--disable-coverage-ignore', 'desc' => 'Disable metadata for ignoring code coverage'], + ['arg' => '--no-coverage', 'desc' => 'Ignore code coverage reporting configured in the XML configuration file'], ], 'Miscellaneous' => [ ['arg' => '-h|--help', 'desc' => 'Prints this usage information'], ['arg' => '--version', 'desc' => 'Prints the version and exits'], - ['arg' => '--atleast-version ', 'desc' => 'Checks that version is greater than min and exits'], - ['arg' => '--check-version', 'desc' => 'Check whether PHPUnit is the latest version'], + ['arg' => '--atleast-version ', 'desc' => 'Checks that version is greater than and exits'], + ['arg' => '--check-version', 'desc' => 'Check whether PHPUnit is the latest version and exits'], ], ]; diff --git a/tests/end-to-end/_files/output-cli-help-color.txt b/tests/end-to-end/_files/output-cli-help-color.txt index c31f6e9eb83..35abf43001a 100644 --- a/tests/end-to-end/_files/output-cli-help-color.txt +++ b/tests/end-to-end/_files/output-cli-help-color.txt @@ -28,9 +28,8 @@ --list-groups  List available test groups --group   Only run tests from the specified group(s) --exclude-group   Exclude tests from the specified group(s) - --covers   Only run tests annotated with "@covers - " - --uses   Only run tests annotated with "@uses " + --covers   Only run tests that intend to cover + --uses   Only run tests that intend to use --list-tests  List available tests --list-tests-xml   List available tests in XML format --filter   Filter which tests to run @@ -44,8 +43,7 @@ --static-backup  Backup and restore static properties for each test - --strict-coverage  Be strict about code coverage attributes and - annotations + --strict-coverage  Be strict about code coverage metadata --strict-global-state  Be strict about changes to global state --disallow-test-output  Be strict about output during tests --enforce-time-limit  Enforce time limit based on test size @@ -71,9 +69,9 @@ --do-not-cache-result  Do not write test results to cache file --order-by   Run tests in order: - default|defects|duration|no-depends|random|reverse|size - --random-order-seed   Use a specific random seed for random - order + default|defects|depends|duration|no-depends|random|reverse|size + --random-order-seed   Use the specified random seed when running + tests in random order Reporting: @@ -100,48 +98,56 @@ tests --reverse-list  Print defects in reverse order - --teamcity  Report test execution progress in TeamCity + --teamcity  Replace default progress and result output + with TeamCity format + --testdox  Replace default result output with TestDox format - --testdox  Report test results in TestDox format Logging: - --log-junit   Log test execution in JUnit XML format to + --log-junit   Write test results in JUnit XML format to file - --log-teamcity   Log test execution in TeamCity format to + --log-teamcity   Write test results in TeamCity format to file - --testdox-html   Write documentation in HTML format to file - --testdox-text   Write documentation in Text format to file + --testdox-html   Write test results in TestDox format (HTML) + to file + --testdox-text   Write test results in TestDox format (plain + text) to file --log-events-text   Stream events as plain text to file - --log-events-verbose-text  Stream events as plain text to file (with - telemetry information) - --no-logging  Ignore logging configuration + --log-events-verbose-text  Stream events as plain text (with telemetry + information) to file + --no-logging  Ignore logging configured in the XML + configuration file Code Coverage: - --coverage-clover   Generate code coverage report in Clover XML - format - --coverage-cobertura   Generate code coverage report in Cobertura - XML format - --coverage-crap4j   Generate code coverage report in Crap4J XML - format - --coverage-html   Generate code coverage report in HTML format - --coverage-php   Export PHP_CodeCoverage object to file - --coverage-text=  Generate code coverage report in text format - [default: standard output] - --coverage-xml   Generate code coverage report in PHPUnit XML - format + --coverage-clover   Write code coverage report in Clover XML + format to file + --coverage-cobertura   Write code coverage report in Cobertura XML + format to file + --coverage-crap4j   Write code coverage report in Crap4J XML + format to file + --coverage-html   Write code coverage report in HTML format to + directory + --coverage-php   Write serialized code coverage data to file + --coverage-text=  Write code coverage report in text format to + file [default: standard output] + --coverage-xml   Write code coverage report in XML format to + directory --warm-coverage-cache  Warm static analysis cache - --coverage-filter   Include in code coverage analysis - --path-coverage  Perform path coverage analysis - --disable-coverage-ignore  Disable attributes and annotations for - ignoring code coverage - --no-coverage  Ignore code coverage configuration + --coverage-filter   Include in code coverage reporting + --path-coverage  Report path coverage in addition to line + coverage + --disable-coverage-ignore  Disable metadata for ignoring code coverage + --no-coverage  Ignore code coverage reporting configured in + the XML configuration file Miscellaneous: -h|--help  Prints this usage information --version  Prints the version and exits - --atleast-version   Checks that version is greater than min and - exits + --atleast-version   Checks that version is greater than + and exits --check-version  Check whether PHPUnit is the latest version + and exits + diff --git a/tests/end-to-end/_files/output-cli-usage.txt b/tests/end-to-end/_files/output-cli-usage.txt index 1cf353b05fd..30eb64d3112 100644 --- a/tests/end-to-end/_files/output-cli-usage.txt +++ b/tests/end-to-end/_files/output-cli-usage.txt @@ -24,8 +24,8 @@ Selection: --list-groups List available test groups --group Only run tests from the specified group(s) --exclude-group Exclude tests from the specified group(s) - --covers Only run tests annotated with "@covers " - --uses Only run tests annotated with "@uses " + --covers Only run tests that intend to cover + --uses Only run tests that intend to use --list-tests List available tests --list-tests-xml List available tests in XML format --filter Filter which tests to run @@ -37,7 +37,7 @@ Execution: --globals-backup Backup and restore $GLOBALS for each test --static-backup Backup and restore static properties for each test - --strict-coverage Be strict about code coverage attributes and annotations + --strict-coverage Be strict about code coverage metadata --strict-global-state Be strict about changes to global state --disallow-test-output Be strict about output during tests --enforce-time-limit Enforce time limit based on test size @@ -60,8 +60,8 @@ Execution: --cache-result Write test results to cache file --do-not-cache-result Do not write test results to cache file - --order-by Run tests in order: default|defects|duration|no-depends|random|reverse|size - --random-order-seed Use a specific random seed for random order + --order-by Run tests in order: default|defects|depends|duration|no-depends|random|reverse|size + --random-order-seed Use the specified random seed when running tests in random order Reporting: @@ -82,37 +82,37 @@ Reporting: --display-warnings Display details for warnings triggered by tests --reverse-list Print defects in reverse order - --teamcity Report test execution progress in TeamCity format - --testdox Report test results in TestDox format + --teamcity Replace default progress and result output with TeamCity format + --testdox Replace default result output with TestDox format Logging: - --log-junit Log test execution in JUnit XML format to file - --log-teamcity Log test execution in TeamCity format to file - --testdox-html Write documentation in HTML format to file - --testdox-text Write documentation in Text format to file + --log-junit Write test results in JUnit XML format to file + --log-teamcity Write test results in TeamCity format to file + --testdox-html Write test results in TestDox format (HTML) to file + --testdox-text Write test results in TestDox format (plain text) to file --log-events-text Stream events as plain text to file - --log-events-verbose-text Stream events as plain text to file (with telemetry information) - --no-logging Ignore logging configuration + --log-events-verbose-text Stream events as plain text (with telemetry information) to file + --no-logging Ignore logging configured in the XML configuration file Code Coverage: - --coverage-clover Generate code coverage report in Clover XML format - --coverage-cobertura Generate code coverage report in Cobertura XML format - --coverage-crap4j Generate code coverage report in Crap4J XML format - --coverage-html Generate code coverage report in HTML format - --coverage-php Export PHP_CodeCoverage object to file - --coverage-text= Generate code coverage report in text format [default: standard output] - --coverage-xml Generate code coverage report in PHPUnit XML format + --coverage-clover Write code coverage report in Clover XML format to file + --coverage-cobertura Write code coverage report in Cobertura XML format to file + --coverage-crap4j Write code coverage report in Crap4J XML format to file + --coverage-html Write code coverage report in HTML format to directory + --coverage-php Write serialized code coverage data to file + --coverage-text= Write code coverage report in text format to file [default: standard output] + --coverage-xml Write code coverage report in XML format to directory --warm-coverage-cache Warm static analysis cache - --coverage-filter Include in code coverage analysis - --path-coverage Perform path coverage analysis - --disable-coverage-ignore Disable attributes and annotations for ignoring code coverage - --no-coverage Ignore code coverage configuration + --coverage-filter Include in code coverage reporting + --path-coverage Report path coverage in addition to line coverage + --disable-coverage-ignore Disable metadata for ignoring code coverage + --no-coverage Ignore code coverage reporting configured in the XML configuration file Miscellaneous: -h|--help Prints this usage information --version Prints the version and exits - --atleast-version Checks that version is greater than min and exits - --check-version Check whether PHPUnit is the latest version + --atleast-version Checks that version is greater than and exits + --check-version Check whether PHPUnit is the latest version and exits diff --git a/tests/end-to-end/event/test-template-methods.phpt b/tests/end-to-end/event/test-template-methods.phpt index 2a98e17e375..8d92f73de7b 100644 --- a/tests/end-to-end/event/test-template-methods.phpt +++ b/tests/end-to-end/event/test-template-methods.phpt @@ -47,10 +47,10 @@ Assertion Succeeded (Constraint: is true) Post Condition Method Called (PHPUnit\TestFixture\Event\TemplateMethodsTest::assertPostConditions) Post Condition Method Finished: - PHPUnit\TestFixture\Event\TemplateMethodsTest::assertPostConditions -Test Passed (PHPUnit\TestFixture\Event\TemplateMethodsTest::testOne) After Test Method Called (PHPUnit\TestFixture\Event\TemplateMethodsTest::tearDown) After Test Method Finished: - PHPUnit\TestFixture\Event\TemplateMethodsTest::tearDown +Test Passed (PHPUnit\TestFixture\Event\TemplateMethodsTest::testOne) Test Finished (PHPUnit\TestFixture\Event\TemplateMethodsTest::testOne) Test Preparation Started (PHPUnit\TestFixture\Event\TemplateMethodsTest::testTwo) Before Test Method Called (PHPUnit\TestFixture\Event\TemplateMethodsTest::setUp) @@ -64,10 +64,10 @@ Assertion Succeeded (Constraint: is true) Post Condition Method Called (PHPUnit\TestFixture\Event\TemplateMethodsTest::assertPostConditions) Post Condition Method Finished: - PHPUnit\TestFixture\Event\TemplateMethodsTest::assertPostConditions -Test Passed (PHPUnit\TestFixture\Event\TemplateMethodsTest::testTwo) After Test Method Called (PHPUnit\TestFixture\Event\TemplateMethodsTest::tearDown) After Test Method Finished: - PHPUnit\TestFixture\Event\TemplateMethodsTest::tearDown +Test Passed (PHPUnit\TestFixture\Event\TemplateMethodsTest::testTwo) Test Finished (PHPUnit\TestFixture\Event\TemplateMethodsTest::testTwo) After Last Test Method Called (PHPUnit\TestFixture\Event\TemplateMethodsTest::tearDownAfterClass) After Last Test Method Finished: diff --git a/tests/end-to-end/regression/5192.phpt b/tests/end-to-end/regression/5192.phpt new file mode 100644 index 00000000000..3a159514270 --- /dev/null +++ b/tests/end-to-end/regression/5192.phpt @@ -0,0 +1,16 @@ +--TEST-- +https://github.com/sebastianbergmann/phpunit/issues/5192 +--FILE-- +run($_SERVER['argv']); +--XFAIL-- +https://github.com/sebastianbergmann/phpunit/issues/5192 +--EXPECTF-- +PHPUnit %s by Sebastian Bergmann and contributors. + +No tests executed! diff --git a/tests/end-to-end/regression/5192/phpunit.xml b/tests/end-to-end/regression/5192/phpunit.xml new file mode 100644 index 00000000000..0dbd87e2524 --- /dev/null +++ b/tests/end-to-end/regression/5192/phpunit.xml @@ -0,0 +1,10 @@ + + + + + tests + + + diff --git a/tests/end-to-end/regression/5192/tests/.gitkeep b/tests/end-to-end/regression/5192/tests/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/end-to-end/regression/5210.phpt b/tests/end-to-end/regression/5210.phpt new file mode 100644 index 00000000000..efac9e93d50 --- /dev/null +++ b/tests/end-to-end/regression/5210.phpt @@ -0,0 +1,29 @@ +--TEST-- +https://github.com/sebastianbergmann/phpunit/issues/5210 +--FILE-- +run($_SERVER['argv']); +--EXPECTF-- +PHPUnit %s by Sebastian Bergmann and contributors. + +Runtime: %s + +E 1 / 1 (100%) + +Time: %s, Memory: %s + +There was 1 error: + +1) Issue5210Test::testOne +Exception: test + +%s:%d + +ERRORS! +Tests: 1, Assertions: 1, Errors: 1. diff --git a/tests/end-to-end/regression/5210/Issue5210Test.php b/tests/end-to-end/regression/5210/Issue5210Test.php new file mode 100644 index 00000000000..85ed03f978c --- /dev/null +++ b/tests/end-to-end/regression/5210/Issue5210Test.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +use PHPUnit\Framework\TestCase; + +final class Issue5210Test extends TestCase +{ + protected function tearDown(): void + { + throw new \Exception('test'); + } + + public function testOne(): void + { + $this->assertTrue(true); + } +} diff --git a/tools/composer b/tools/composer index decd0873c2e..cc434ae5878 100755 Binary files a/tools/composer and b/tools/composer differ diff --git a/tools/php-cs-fixer b/tools/php-cs-fixer index 7f455dcb1fa..6e70d2d9fea 100755 Binary files a/tools/php-cs-fixer and b/tools/php-cs-fixer differ diff --git a/tools/phpab b/tools/phpab index e2ca8045ceb..1fbfb99b7bb 100755 --- a/tools/phpab +++ b/tools/phpab @@ -128,12 +128,10 @@ spl_autoload_register( 'theseer\\autoload\\parserinterface' => '/phpab/ParserInterface.php', 'theseer\\autoload\\pathcomparator' => '/phpab/PathComparator.php', 'theseer\\autoload\\pharbuilder' => '/phpab/PharBuilder.php', - 'theseer\\autoload\\runner' => '/phpab/Runner.php', 'theseer\\autoload\\sourcefile' => '/phpab/SourceFile.php', 'theseer\\autoload\\staticlistrenderer' => '/phpab/StaticListRenderer.php', 'theseer\\autoload\\staticrenderer' => '/phpab/StaticRenderer.php', 'theseer\\autoload\\staticrequirelistrenderer' => '/phpab/StaticRequireListRenderer.php', - 'theseer\\autoload\\unitvisitor' => '/phpab/UnitVisitor.php', 'theseer\\autoload\\version' => '/phpab/Version.php', 'theseer\\directoryscanner\\directoryscanner' => '/vendor/theseer/directoryscanner/src/directoryscanner.php', 'theseer\\directoryscanner\\exception' => '/vendor/theseer/directoryscanner/src/directoryscanner.php', @@ -152,22 +150,22 @@ spl_autoload_register( ); Phar::mapPhar('phpab.phar'); -define('PHPAB_VERSION', '1.27.1'); +define('PHPAB_VERSION', '1.27.2'); $factory = new \TheSeer\Autoload\Factory(); $factory->getCLI()->run(); exit(0); __HALT_COMPILER(); ?> -* -phpab.phar8vendor/theseer/directoryscanner/src/directoryscanner.php"aA P7vendor/theseer/directoryscanner/src/filesonlyfilter.php -a;l<vendor/theseer/directoryscanner/src/includeexcludefilter.phparŴ1vendor/theseer/directoryscanner/src/phpfilter.php -a\n;'vendor/zetacomponents/base/src/base.phpYa\0vendor/zetacomponents/base/src/base_autoload.phpNaH¬Lvendor/zetacomponents/base/src/exceptions/double_class_repository_prefix.phpVa6w7vendor/zetacomponents/base/src/exceptions/exception.phpa CTsAvendor/zetacomponents/base/src/exceptions/extension_not_found.php6a~9 <vendor/zetacomponents/base/src/exceptions/file_exception.php-a5vendor/zetacomponents/base/src/exceptions/file_io.phpaO;<vendor/zetacomponents/base/src/exceptions/file_not_found.phpJa,T]DX=vendor/zetacomponents/base/src/exceptions/file_permission.php aDg7Ivendor/zetacomponents/base/src/exceptions/functionality_not_supported.php>a V&JFvendor/zetacomponents/base/src/exceptions/init_callback_configured.phpa: Dvendor/zetacomponents/base/src/exceptions/invalid_callback_class.php_a -Z»Bvendor/zetacomponents/base/src/exceptions/invalid_parent_class.phpEa@vendor/zetacomponents/base/src/exceptions/property_not_found.phpa"yAAvendor/zetacomponents/base/src/exceptions/property_permission.phpfaW>D?vendor/zetacomponents/base/src/exceptions/setting_not_found.phpTaH[Y;vendor/zetacomponents/base/src/exceptions/setting_value.php[a3vendor/zetacomponents/base/src/exceptions/value.phpa.Ѵ6vendor/zetacomponents/base/src/exceptions/whatever.php a8K0vendor/zetacomponents/base/src/ezc_bootstrap.phpaU–~P+vendor/zetacomponents/base/src/features.php.a -''vendor/zetacomponents/base/src/file.phpIHau'vendor/zetacomponents/base/src/init.phpVaukoGvendor/zetacomponents/base/src/interfaces/configuration_initializer.phpaE8vendor/zetacomponents/base/src/interfaces/exportable.phpaB59vendor/zetacomponents/base/src/interfaces/persistable.phpa9J +vendor/zetacomponents/base/src/metadata.phpab0vendor/zetacomponents/base/src/metadata/pear.phpa<3vendor/zetacomponents/base/src/metadata/tarball.phpa g^*vendor/zetacomponents/base/src/options.phpaK)vendor/zetacomponents/base/src/struct.php?at<vendor/zetacomponents/base/src/structs/file_find_context.php a-њ?vendor/zetacomponents/base/src/structs/repository_directory.php aL8'U<vendor/zetacomponents/console-tools/src/console_autoload.phprai>vendor/zetacomponents/console-tools/src/dialog/menu_dialog.phpa1wԴBvendor/zetacomponents/console-tools/src/dialog/question_dialog.php"a tQvendor/zetacomponents/console-tools/src/dialog/validators/menu_dialog_default.phpa+Xvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_collection.phpaONUvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_mapping.phpaFSvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_regex.phpa{Rvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_type.phpCa(9vendor/zetacomponents/console-tools/src/dialog_viewer.php" -a?R28?vendor/zetacomponents/console-tools/src/exceptions/argument.phpaX δRvendor/zetacomponents/console-tools/src/exceptions/argument_already_registered.phpE a/wm'Svendor/zetacomponents/console-tools/src/exceptions/argument_mandatory_violation.phpa Hvendor/zetacomponents/console-tools/src/exceptions/argument_too_many.phpa*Y۴Nvendor/zetacomponents/console-tools/src/exceptions/argument_type_violation.phpsau[:MCvendor/zetacomponents/console-tools/src/exceptions/dialog_abort.phpa"@vendor/zetacomponents/console-tools/src/exceptions/exception.phpaP[ Jvendor/zetacomponents/console-tools/src/exceptions/invalid_option_name.phpadLvendor/zetacomponents/console-tools/src/exceptions/invalid_output_target.phpa]vmwIvendor/zetacomponents/console-tools/src/exceptions/no_position_stored.phpaRGyMvendor/zetacomponents/console-tools/src/exceptions/no_valid_dialog_result.phpaX=vendor/zetacomponents/console-tools/src/exceptions/option.phpa}YPvendor/zetacomponents/console-tools/src/exceptions/option_already_registered.phpa-/ߴQvendor/zetacomponents/console-tools/src/exceptions/option_arguments_violation.phpa~xRvendor/zetacomponents/console-tools/src/exceptions/option_dependency_violation.phparQvendor/zetacomponents/console-tools/src/exceptions/option_exclusion_violation.phpahVmQvendor/zetacomponents/console-tools/src/exceptions/option_mandatory_violation.phphaYXpAKvendor/zetacomponents/console-tools/src/exceptions/option_missing_value.phpaF^Fvendor/zetacomponents/console-tools/src/exceptions/option_no_alias.php aHvendor/zetacomponents/console-tools/src/exceptions/option_not_exists.php$a6ESvendor/zetacomponents/console-tools/src/exceptions/option_string_not_wellformed.php a0Mvendor/zetacomponents/console-tools/src/exceptions/option_too_many_values.phpwaLvendor/zetacomponents/console-tools/src/exceptions/option_type_violation.phpaD/1vendor/zetacomponents/console-tools/src/input.phpa&Ǖ:vendor/zetacomponents/console-tools/src/input/argument.phpah";vendor/zetacomponents/console-tools/src/input/arguments.phpt"aثJvendor/zetacomponents/console-tools/src/input/help_generators/standard.php9aBj8vendor/zetacomponents/console-tools/src/input/option.phpJOa"NEvendor/zetacomponents/console-tools/src/input/validators/standard.phpa x=vendor/zetacomponents/console-tools/src/interfaces/dialog.phpT a*/Z;Gvendor/zetacomponents/console-tools/src/interfaces/dialog_validator.phpa 5Kvendor/zetacomponents/console-tools/src/interfaces/input_help_generator.phpatӁFvendor/zetacomponents/console-tools/src/interfaces/input_validator.phpyaeutovLvendor/zetacomponents/console-tools/src/interfaces/menu_dialog_validator.phpaTPvendor/zetacomponents/console-tools/src/interfaces/question_dialog_validator.phpa&cִ:vendor/zetacomponents/console-tools/src/options/dialog.php2 a3Y?vendor/zetacomponents/console-tools/src/options/menu_dialog.phpa1vf:vendor/zetacomponents/console-tools/src/options/output.phpa0ِI?vendor/zetacomponents/console-tools/src/options/progressbar.phpate%Cvendor/zetacomponents/console-tools/src/options/progressmonitor.phpF a Cvendor/zetacomponents/console-tools/src/options/question_dialog.phpaWia=vendor/zetacomponents/console-tools/src/options/statusbar.php ap~[9vendor/zetacomponents/console-tools/src/options/table.phpL"aseK2vendor/zetacomponents/console-tools/src/output.phpMaW?7vendor/zetacomponents/console-tools/src/progressbar.php:adm|;vendor/zetacomponents/console-tools/src/progressmonitor.phpZaq5vendor/zetacomponents/console-tools/src/statusbar.php aj rM?vendor/zetacomponents/console-tools/src/structs/option_rule.phpa Avendor/zetacomponents/console-tools/src/structs/output_format.phpkah+-Bvendor/zetacomponents/console-tools/src/structs/output_formats.phpab!-1vendor/zetacomponents/console-tools/src/table.phpBtae56vendor/zetacomponents/console-tools/src/table/cell.phpa+(Կ5vendor/zetacomponents/console-tools/src/table/row.php0a -/8vendor/zetacomponents/console-tools/src/tools/string.phpaF)phpab/Application.phpJ&a phpab/AutoloadRenderer.phpc#a - phpab/CLI.php^a 'δphpab/Cache.php@a "9phpab/CacheEntry.phpaд"phpab/CacheWarmingListRenderer.phpasy?phpab/CachingParser.phpaPI!phpab/Collector.php a66phpab/CollectorResult.phpT a-phpab/ComposerIterator.php0aVQBphpab/Config.phpC3a (ܴphpab/DependencySorter.phpmaos:phpab/Factory.php a8phpab/Logger.phpa  Ŵphpab/ParseResult.phpgaWߪphpab/Parser.phpSa{rphpab/ParserInterface.phpaphpab/PathComparator.phpfahaphpab/PharBuilder.phpga= #״phpab/Runner.phpra.Fphpab/SourceFile.phpa%phpab/StaticListRenderer.phpazphpab/StaticRenderer.phpa$Ŵ#phpab/StaticRequireListRenderer.php"aLXOphpab/UnitVisitor.phpa"zMphpab/Version.php -aj&Ӵ"phpab/templates/ci/default.php.tpla/]iphpab/templates/ci/phar.php.tpla~ phpab/templates/ci/php52.php.tpla ^@N"phpab/templates/cs/default.php.tplaBw#phpab/templates/cs/phar.php.tpla2q$ phpab/templates/cs/php52.php.tpla&N˴phpab/templates/static.php.tplap휺"phpab/templates/staticphar.php.tplWaT.ִYsbk CL^_j?[!QI4F6ۻ{:&)nwo{{_~[<,Nޝ;ċURhLÇ??DB/zI*?3JZp'{4 4#"CɄ7 Ld.Z'La4x$E2Â' M$~ +* +phpab.phar8vendor/theseer/directoryscanner/src/directoryscanner.php" cA P7vendor/theseer/directoryscanner/src/filesonlyfilter.php + c;l<vendor/theseer/directoryscanner/src/includeexcludefilter.php crŤ1vendor/theseer/directoryscanner/src/phpfilter.php + c\n;'vendor/zetacomponents/base/src/base.phpY c\0vendor/zetacomponents/base/src/base_autoload.phpN cH¬Lvendor/zetacomponents/base/src/exceptions/double_class_repository_prefix.phpV c6w7vendor/zetacomponents/base/src/exceptions/exception.php c CTsAvendor/zetacomponents/base/src/exceptions/extension_not_found.php6 c~9 <vendor/zetacomponents/base/src/exceptions/file_exception.php- c5vendor/zetacomponents/base/src/exceptions/file_io.php cO;<vendor/zetacomponents/base/src/exceptions/file_not_found.phpJ c,T]DX=vendor/zetacomponents/base/src/exceptions/file_permission.php cDg7Ivendor/zetacomponents/base/src/exceptions/functionality_not_supported.php> c V&JFvendor/zetacomponents/base/src/exceptions/init_callback_configured.php c: Dvendor/zetacomponents/base/src/exceptions/invalid_callback_class.php_ c +Z»Bvendor/zetacomponents/base/src/exceptions/invalid_parent_class.phpE c@vendor/zetacomponents/base/src/exceptions/property_not_found.php c"yAAvendor/zetacomponents/base/src/exceptions/property_permission.phpf cW>D?vendor/zetacomponents/base/src/exceptions/setting_not_found.phpT cH[Y;vendor/zetacomponents/base/src/exceptions/setting_value.php[ c3vendor/zetacomponents/base/src/exceptions/value.php c.Ѥ6vendor/zetacomponents/base/src/exceptions/whatever.php  c8K0vendor/zetacomponents/base/src/ezc_bootstrap.php cU–~P+vendor/zetacomponents/base/src/features.php. c +''vendor/zetacomponents/base/src/file.phpIH cu'vendor/zetacomponents/base/src/init.phpV cukoGvendor/zetacomponents/base/src/interfaces/configuration_initializer.php cE8vendor/zetacomponents/base/src/interfaces/exportable.php cB59vendor/zetacomponents/base/src/interfaces/persistable.php c9J +vendor/zetacomponents/base/src/metadata.php cb0vendor/zetacomponents/base/src/metadata/pear.php c<3vendor/zetacomponents/base/src/metadata/tarball.php c g^*vendor/zetacomponents/base/src/options.php cK)vendor/zetacomponents/base/src/struct.php? ct<vendor/zetacomponents/base/src/structs/file_find_context.php c-њ?vendor/zetacomponents/base/src/structs/repository_directory.php cL8'U<vendor/zetacomponents/console-tools/src/console_autoload.phpr ci>vendor/zetacomponents/console-tools/src/dialog/menu_dialog.php c1wԤBvendor/zetacomponents/console-tools/src/dialog/question_dialog.php" c tQvendor/zetacomponents/console-tools/src/dialog/validators/menu_dialog_default.php c+Xvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_collection.php cONUvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_mapping.php cFSvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_regex.php c{Rvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_type.phpC c(9vendor/zetacomponents/console-tools/src/dialog_viewer.php" + c?R28?vendor/zetacomponents/console-tools/src/exceptions/argument.php cX ΤRvendor/zetacomponents/console-tools/src/exceptions/argument_already_registered.phpE c/wm'Svendor/zetacomponents/console-tools/src/exceptions/argument_mandatory_violation.php c Hvendor/zetacomponents/console-tools/src/exceptions/argument_too_many.php c*YۤNvendor/zetacomponents/console-tools/src/exceptions/argument_type_violation.phps cu[:MCvendor/zetacomponents/console-tools/src/exceptions/dialog_abort.php c"@vendor/zetacomponents/console-tools/src/exceptions/exception.php cP[ Jvendor/zetacomponents/console-tools/src/exceptions/invalid_option_name.php cdLvendor/zetacomponents/console-tools/src/exceptions/invalid_output_target.php c]vmwIvendor/zetacomponents/console-tools/src/exceptions/no_position_stored.php cRGyMvendor/zetacomponents/console-tools/src/exceptions/no_valid_dialog_result.php cX=vendor/zetacomponents/console-tools/src/exceptions/option.php c}YPvendor/zetacomponents/console-tools/src/exceptions/option_already_registered.php c-/ߤQvendor/zetacomponents/console-tools/src/exceptions/option_arguments_violation.php c~xRvendor/zetacomponents/console-tools/src/exceptions/option_dependency_violation.php crQvendor/zetacomponents/console-tools/src/exceptions/option_exclusion_violation.php chVmQvendor/zetacomponents/console-tools/src/exceptions/option_mandatory_violation.phph cYXpAKvendor/zetacomponents/console-tools/src/exceptions/option_missing_value.php cF^Fvendor/zetacomponents/console-tools/src/exceptions/option_no_alias.php  cHvendor/zetacomponents/console-tools/src/exceptions/option_not_exists.php$ c6ESvendor/zetacomponents/console-tools/src/exceptions/option_string_not_wellformed.php  c0Mvendor/zetacomponents/console-tools/src/exceptions/option_too_many_values.phpw cLvendor/zetacomponents/console-tools/src/exceptions/option_type_violation.php cD/1vendor/zetacomponents/console-tools/src/input.php c&Ǖ:vendor/zetacomponents/console-tools/src/input/argument.php ch";vendor/zetacomponents/console-tools/src/input/arguments.phpt" cثJvendor/zetacomponents/console-tools/src/input/help_generators/standard.php9 cBj8vendor/zetacomponents/console-tools/src/input/option.phpJO c"NEvendor/zetacomponents/console-tools/src/input/validators/standard.php c x=vendor/zetacomponents/console-tools/src/interfaces/dialog.phpT c*/Z;Gvendor/zetacomponents/console-tools/src/interfaces/dialog_validator.php c 5Kvendor/zetacomponents/console-tools/src/interfaces/input_help_generator.php ctӁFvendor/zetacomponents/console-tools/src/interfaces/input_validator.phpy ceutovLvendor/zetacomponents/console-tools/src/interfaces/menu_dialog_validator.php cTPvendor/zetacomponents/console-tools/src/interfaces/question_dialog_validator.php c&c֤:vendor/zetacomponents/console-tools/src/options/dialog.php2 c3Y?vendor/zetacomponents/console-tools/src/options/menu_dialog.php c1vf:vendor/zetacomponents/console-tools/src/options/output.php c0ِI?vendor/zetacomponents/console-tools/src/options/progressbar.php cte%Cvendor/zetacomponents/console-tools/src/options/progressmonitor.phpF c Cvendor/zetacomponents/console-tools/src/options/question_dialog.php cWia=vendor/zetacomponents/console-tools/src/options/statusbar.php cp~[9vendor/zetacomponents/console-tools/src/options/table.phpL" cseK2vendor/zetacomponents/console-tools/src/output.phpM cW?7vendor/zetacomponents/console-tools/src/progressbar.php: cdm|;vendor/zetacomponents/console-tools/src/progressmonitor.phpZ cq5vendor/zetacomponents/console-tools/src/statusbar.php cj rM?vendor/zetacomponents/console-tools/src/structs/option_rule.php c Avendor/zetacomponents/console-tools/src/structs/output_format.phpk ch+-Bvendor/zetacomponents/console-tools/src/structs/output_formats.php cb!-1vendor/zetacomponents/console-tools/src/table.phpBt ce56vendor/zetacomponents/console-tools/src/table/cell.php c+(Կ5vendor/zetacomponents/console-tools/src/table/row.php0 c +/8vendor/zetacomponents/console-tools/src/tools/string.php cF)phpab/Application.phpJ& c lphpab/AutoloadRenderer.phpc# c + phpab/CLI.phpC^ c.C:phpab/Cache.php@ c "9phpab/CacheEntry.php cФ"phpab/CacheWarmingListRenderer.php csy?phpab/CachingParser.php cPI!phpab/Collector.php c66phpab/CollectorResult.phpT c-phpab/ComposerIterator.php0 cVQBphpab/Config.phpC3 c =phpab/DependencySorter.phpm coɢpphpab/Factory.php c#Tphpab/Logger.php c I9~phpab/ParseResult.phpg cWߪphpab/Parser.phpS cphpab/ParserInterface.php cphpab/PathComparator.phpf chaphpab/PharBuilder.phpg c=61_phpab/SourceFile.php c%phpab/StaticListRenderer.php czphpab/StaticRenderer.php c}xȤ#phpab/StaticRequireListRenderer.php" cLXOphpab/Version.php + cj"phpab/templates/ci/default.php.tpl c/]iphpab/templates/ci/phar.php.tpl c~ phpab/templates/ci/php52.php.tpl c ^@N"phpab/templates/cs/default.php.tpl cBw#phpab/templates/cs/phar.php.tpl c2q$ phpab/templates/cs/php52.php.tpl c&Nˤphpab/templates/static.php.tpl cp휺"phpab/templates/staticphar.php.tplW cT.֤Ysbk CL^_j?[!QI4F6ۻ{:&)nwo{{_~[<,Nޝ;ċURhLÇ??DB/zI*?3JZp'{4 4#"CɄ7 Ld.Z'La4x$E2Â' M$~ |^8 9f0#? >!<=Wzni$z)Rēz,M喊4V& $@S\8KZ᪓ <9; ZK (~;7]U{kҊ=\Rfzghh6I 0 ]g3TvL0*#"\xPY`r۬ͨvD%8i0D!det8]]#F@%됓:CIqGepmY]iyٷz9`X4a-\Z4Rj8㫡Hn̶W&-jݕLe$!]тLd8;nWE{`kCffѬEt5ehٺC4z+ t ܒZV'3bh]ue|g|ZxGoi[uOpӮE<Z"]ijpU"bf邑=C.lۘINDf)}}-?NNHdJ  &x!%f8e+9, gct|uu<NFpq/Nx$?:24cAN R\>9 -6N2?=t/'laqk"bK DSLtRI-}Kl5Qiw6Sz=?tg^O/BmCRLF9sojX.AzեIZa&^+L;C1jM XbQ@c1e<1 UK S;?dbfZt%X$ӵ[Ęle n˳Kh. ,1<<Ԅ/؝*"qjL>λL4z|zS ZC/UqNWӦrNbcTE2uG79M܇. #_얃L`BqACX QK`r1VCsY%um) 4ݖ'^U"B+׌۵ c1P:j~:RRhku&e!WF|pw4;>DzzWdgg稕.3MQ}88$*)}:K^cIeVzܰUncQR10o؞86R q|؁Sij SJvҜv\gLT!8^*l:IT`\eIbnnD )lӏt?׵"K!)kl>|L @k!8'~-~xQ5^%J?rxR+dEN'dx+S*|{V+Rכ+vEIbKz6(hT#zYcѵeorF&xJ1`H^|6[J 6rkI$^U2%4i.¹XHpyxd_0dT=M ^j m//R1JWLw\u7Oɵ{mqv0נᛘMX&j,:([?qF6O8aBrS "9y voc0lmp%`urP:yZ,a4O<Yk<$ =s+ȝ%|AI4YEE^xA$ ց.9#m"!ns(xvX80|%&7m[Ѩ'-oW[a0&F&֦sVc~3 2nmghJ!vOz4:F#%cHWN,d8av=휲0oƭ>t:"B2 ` ACR_: eS_sܖZA+`h# |jMw[rJ+ 3 #s,v\GjG`:|"BJtc`~*y?*BsW< E!@ C/@}RUR^([%a)Eؚ8mwzb_n,ZgEE %>6a}:ǜ˱F8^tJa y kIȽD5rȑD~f -^vzQԖ<ޣV,G׮>yܩg㒧Dj_csd3::(%M=[l%J-+Xx"4}"LMK[$cRje8`mXu*ϫ-SRc#cb 3[X.Y$+ !9pS T+#W -jUZ/g\k\&ogcY*bUtЁ7_;S1JZQһDq) 8u'ҟSi a͙U!ERGM٢h-IAu`C*(9rPZ+*ۙa6e jHpɫ>J/:FX%jqe|7TGW2I -SʠD}B*/#q%jQ6[c3Ւlϊ5XPI%8I*)H~;BX()^ˆ?ɂM5U]પT*5$7z$T׬{mbQ}1ݰi=?@8VO/ NGTdL f1n -ƒ3a#a?\鳥>54QC٪ Um 7w{w8{OcG\4(Y2|IlxCSJA".q}c֕@Q9ԨGEzLoJ17S7zFF+!)VhTE=TTTVۋO8Yb_g*gtVSt,k>mVƘ "&RFro^BU9K,7qe FMi -]hªk F窒r6^VJ8 ;Q9[B~u]Fgb(Riw}:UC ^aс Jg?-b0.HB5t!w  -GTYx5,A"-0B%g~!obGͳreTRxQ wx^V7UbJFє"i=dKS.HAF+Wo[cova -s}w媬f]O&>Uݟs/9ǟ*YT8 ,ٺ6aeg_O YmsH_J-"lq: $-J`+j$]_w@\|0h^MnϏ9tQ7&|_/0e$ѝY -}Tߞ7Dm!0u -RBދy#A`gA!Oq.gWAGXr!n!,yf>1hO_ -H\Y&>CvgG 0fq4.e^zn) ,<ОGe?F*`&Z h^ -B?X -ޣ J-ᢵAk9j)x/E1!_b agB~c!e"`ZKAU",ׯBq+Vd?TP %1h/ 게3 -&7G%1a/"i043fi"fgHPI -HZ,.mt,3|otڱ/.={9s±"1'3`}9jԷ -ṕg[n A?ك FsA߾= [J5k1 rٱwRmo@Q #o:i4vFC2gݾi_Y6rzo

wƮM/{Y3ypD> B=z8`sM| vE >\Znp)&LE^y'JE<0.5ZvH>خrlJ%|vKbׂ}fMʫ]eΌw?osLrQޭBQuտk ,V{tD$kW'9V$O{Y`9 se k5}/Oy74]y*$ fƳ_J,T jN<6ם%isѤGnATWfޗgid@f$bwZeqB}W~^$GPCJK~4f,V -S4ӏ8D7O)H2{( z-mD;xB6\p,I.T>{*骓4-Db>+V^ 4 yhܔD&}`!$U8 Gey-8M[yęL&]2ӏ#E"J>N\S-dLBM8W|܃U2Y|s -]KK(f4CGOiTp;Nie*f3I8ѵy" ΢K@3Q-GH>bA3V8)ccf k-I[+tXl .u:%EP%%f&/iO"TLfZ+ʼ Jg4FӍwi,3cs{s[}|P*^|sE_+"\ @@oiZ16G,x1jXoz0EvNFֲ8%R)3 F4,:LN1%v`6r}ueG)PzڠM18:5 S,>tj:QU0D5L5~"8j2 -5fbh=D:TȳC< WJy2mbfA\JuE}PŖ-U; -vUs>ё+4ȶ4)G8!=(`a|rUAj6Xx`/A: (cԆ_(3/gg>jCq]~V-WvG`Ҿيl1BݟT,;8ϒoK:rAXz%F"'ju1gMox8y 8fÅ Ωлo =|O7W案 -V59\4m~Pd ptDt 0VOYb`IR0e ~(j x3i2:%Sm N6eсx>08]nPWR!@s*:V*Z<āт )3<9%!nĵFcc28UX>#BF4fեWgqNлBpKAdx:DڽT Fz6NQJ3m-}*Mvmŀf; %"i 8Iw\mzbeg\2O mSkYiFMWhgf"&[7ukM]]4(Y3cy pgS=*u goTF#SoV>" '+Ǎ6E݊P2m|AJ@X.,k(7BC׳[ E]^F۰,,Fil)y= ^z#lv 뛮۷]š0. hqUIekӵ8mvs C0BB iiS{TKm}Z+6fNw'ek7r5(yefjQU̘:P.[UMl?nUq욧yT݋/+  3]6qZS=+MksFdk®A^S㱛8咥(euHB#.k4/~}r8WU{Oob5k7ϗ? tuA pnsqa\Bl%8s<&U`qzrxff3?X:u9_ḻLDPGfْ ' ͖G87C<:|vNЂM&?LY W"yBECZS:Kl 8$ {v+j=Մ^47 !d}k^HJÄ-̐d8N9XFn/0h`ex:a^Y߁ɨ{<  _ⁱV 3~ F{6u1nݛvu8H uϺ9%kF03c>n;BTO>R<-6l&!t4 "vv=3:e'?aV+1lgHr p;2, z&{u6.abD`8ZAjJA)ӑqNxz}궍;IqӱQ"V h 鸋C\IwЯ>@wH׃>  ^T>ާPk:Ơ$9>' aY~4mGswlȵF1J[@yр7gdZ=aΧ.2/'KF}x>U+i]WU V6=7WZnvV^] ֓_a`ob dǜi=ݑQj!;jlFP%('Q:! A(! !/fGͻBh>vs&@hE3~șуEM{΄"W51ѴLB\M^`]vP -]}Y\F(ݘ;1-د։Yl39 PcKpX6[yK,y[o\a︅,IsNo)*؍V^6bQBe}?e.g-a>xZvNϟh} љwCijRk|1gGGGl2iݧs ȥx߷9$.ӽR 0CPr3R蚯d)" T^yOf -ikTy$UsvY<@nY榘+v"9{WFZtioZ(UFӚqg Uq - _aj4k0W#sd-we|`AvcfƔc'Ȥfbu$`VaL@ ` -AA3xVt.t+j4\r|%e ﳆYi] ?ĎP%d3P汆,FR.6Ƀ@r &S+C }; MR=!% Mi_.Amw g >_}pЅЩ\ԣ}Gp]P䃫QF#ZBv,n1:m-X-0۵Y'J %DIti+?XP87>34ϗ JhČpV㰎u? xT!0 -yh\uLN*cժsMծ>BLJzTBO8sk1OTslU-`['T0AwTRQ3c (E;K@ v]5H4I&+*VYO.Z!(Z-9h;ꉠ8¬XFPqu45ЪGuNP9NbʪTG}a[-.،{H8?XU`rMz+J ֦Ǎ.ccLbtMkFBnȝ^M%/$$XTi'XlKꊗ[Dw4P"VN#|eq,a"! L&xTA ] -ΤGTY@(Q2x1(=t/7 !AXsi`B -k_}~eLc$ξ!B7UD -GIoJ%SO݅N{s$Io - R59l&*@mKԏ+7PFʣBA r*iR#NF_&Jŝ'=T9J Sڞdҥ P%o5O9E@%@>ٛ *abȱs=+_,%y1^x=3Bqɮ=p/,TNYԶ3nEJyl9'v@Vv"?[rg;x~ "mѿљ4-_. ۂgNiXrPu뵻Xt+GMr]oz2cO 9'9̹{E j-}k4A*j" e{.O2n]>QpXZȨ2ϙ -Ny" ;tgDċbx2N޽!+&_ 9q)t{3pH!Gy]d'n{%:϶Ļ39|&n^~7j!{澻]=kE]@g{XC9|-m'c%8?9|+dʜ|o'ANaO`*I=Z5$E,%J"ox"[bLʄ~W7l`&)^-V\@-,]g! qtS^z{T_%*_*a^C[h!BLR|vJ*8-+MPJͥ} =J2W9_Kd.Op?*~?PT$*ehMC+Lg7a3ruU/_w7y?0.{.~IV,?~KHk\frAE6"jI +Kd,|RAxsVA<>$:EƁ[ +}y9 r-%uS$d<] F "GK1Ycb8]P{`$X)‚pw,20 k@BMBbeY e&碐e.Xf"s3(b +@M;{wt>F_͞уG<4;?ZwAϰlЇ=|:t,fn#L<Ӈ`9 ۆx`"=d`C46`3m@Қ# 3j+ьdްwS1(MgHRn9fw2-4Xm3@7^@`|5w`P1*QT(~30;TgZF!vߺhGr{ltMbiF(5D\l COoQGduI݉eܓ>'7c:ǀѨ'-oWk؟a0&F&ަsVc~3M2aYcghJ#vOz4:F#%cHW,d8aN=04n1t:"BmвL`LAGR_: eS_ ܖzI+`h3 |jOw[rJ+3+s,v\GjG`:|"BJtc`~*y?Uସy-z. +zY胕 rՃcԜ`][xb y" t XGiI?vM96-3 +S| +METEf4*R?!R6u5q"0ίWLL/Yq)>}ZR†S7L/Sst96NjN]~y9 %>ᕤ|\*rAn98ȭ!VÈc4ʖڒ'{bT(]6_q#`3{\H56GL6{>Kӄ#R +,a|ѳUN_!R''BP9[ĜiiKd으,|WZ|,r[?hjK3B"씫U؁$HÌ#pMr><=d%Ă9䂑 gnI@>Vje|*CIZ+ko־<5^qjv6,"&)\eK8| Prg&r}44:9fQE+Jz/(e=0nRsxb0ZZ2t wԔ-ʖؒߔ:L+ jխef,p?~T@@B^ 8wUʟ,'@Qg4q×@-Z!)^cujUovS%5ExQ3it_il56_d{V.' H-gAq' +&#`IbU{V`$ 6(UbU,;kFia)HY7x/ b avz8~ WjU qXK^՝ɘb\%;abWIK}>ji +UAnF[? +pyďiP`eR񆦔 mt[YicY# ׻q%I$z%PM~B٭ N8~l 㙢p=ךK4%`Ša5$lt&o^0I P i,g'/+;0%̥rƁ7ZL"Ig$H!^GF? jԕ Jީ5,tshjd-*7 [5nK8MxˀaqB:De,Y]P*1cbH7M9đRwߖc5cbKGl"^3`=6ίrh,g,tۺz(*ᨨY/i4M 7V~h#$eڊ<J[gJS{1 =pY0kXՌvvDZcb}2fBD .mTf[PjNKOw>Z"I6plVhnU+ӯ5/u{pgoi} +|;W2ZN!8-iNB2垘\Ar8|JUYݿ\RB(@<'19[چB8LJ5.!3+׸C_o{CwT@req]@p!8DG^9 |CnܵWJB[m~~*&Ssiڵ_\׽(0;ba9*HԴS?"\S\>QIb%8ke,^P8 3L`QC膩<*'5(k +r+wsv~%K/h"Zh2-ȗ2X%޲|@?IW:O +_|Emm䱺PIаI#.!M;]N,^^Uo{+H53_gb-u^sYmsH_J-"lq: $-JV,$H]_w@\|0h^MoӣϏ9tQ79&|⟿|`X@';! ^7DmF0uRdBދA2.0Xfd)gWaG'r!o!,sX$A8g>1hO_ +H\y.Her9'0Y!eLB/-d%^f9ړ,=HIDKqf!CSP,Å=ڠ.Z6XBP$B9" % ~.dG8.R6q B=X%d:+WiE#LZ|)(fPE P0!p9Pd<hteQ!mH')bhYVĻ]pӱGݳzйƗtkǾrY 标ϱ;co Ǧǜ<\qX CQF~(1m-g.Z<͡}p7l)լ0<+^f5K=IZh\H]c܇g^hQ9;v+R|xNqloYp1yr]=eƮB!٢Q6Gg9xAA&RmF5%0-pi:}3 z(J֠k!1`VC˱]c+L<&iz,s] 96)6sH "v>ꎻ:3ޥοV&flK1vXGyjP:"kq{W⫓#1VBZipw]eX=>_f5k,ZR',KXA{(~ + 넿gKP!4o40,Rb L\Pwⱹ,aDk~MZy%~e}xVOVd@" +yZƐw|'Ez5D +JGOc|0E>C|$"ϠѨF'[_Y̒BG:OB,ݏb*pr7MIk2ߧf)MrͿ^spxTAL(TEcGdu,; >8R$b@=z5@4B쇳~L=XE !'77l*a}oM$~F3)V&b1CF]'R,*8=c{J{a.Z#$<:iq.Am<2?f˰"rIv\SKQ4 UXbVn)s/cU &ʨ2ob'ꬴtc]\oV_ƾ;,EF\Ŋ5<920йśvVe:^a9LD:+qEN&6cn& 1SL8zM)> C]QA +`6h!@ -Fb/\},3,>tj:QU0D5L5~"8j2 +5fbh=DD :TȳC< WJy2mbfA>ơ-7e[v|G(ӧ 0|#+'W=h;m=hS.Q5p2j䂹>!SU=`U9$Q~%9;4QH,j4L݀r+ji_c<"Jf+ŬN v?B|KYv4M2O|[^=z+G79QN}a6. dpNeޝxĿ|\mx*5EL ֥Ulu@mi_"nX#${H]D}BTMI,(KE VH/O0ɝ)q@8[\˘r: + ~WAUi:e&ύ4NO!`ou@)0 uކf!'vd!0}NcKE7 _n;I+Af[Xtݾz,qFszNjo([+piS4co:IEOR-Fkڰ:ݝ꯱ȱF֠[mVewGW13cfHjJC lU5=mU=x`sDZ+z_*W$9fl㴲z~=/OW|;ksFdk)w +nKXHF&3# =@.k4=~}Z|87ӐU}vͿGo~`5[7O? tuA p;nspa\/Bl!8s<&E`qzrxfd?w)_lıLDPCfٜ3' G85C<; |vNЌ &?LY "yBECZS:Il 8$ {v+j3njB/^Sھq/$kxvaBfftEl2A'IϜqd,a ŸB323욣#$> }x!gRM&F? 42fb-3ut/O: IF!FAS8e'_``^ˠ|{Sc0d)<^55_K` 7`~ aXcN=^Mf0sS$e/bq"&UEL @"85ebûsx8yb.G j2`Ycs%Cއ;" AK,:qiKT5ثKo\{bq]zHFK.7a7߱znfF5)#AwN R.#qkp 0+2%6"Z`%.I$E5*v[kWbn4ޙr(9,Vg³ۡA߄2g*Sfy?-\F|TI8彥Edj;lʚeP~ +ڄAt9(p|sbcS$ޚ0Z}0 +)V6]pBcu^$Wu'|P%eO*Uڐ]Kw|0 g2(M=ӻ}4:.D+Qkq,@zg ]fy-E0 L<͑؂U/JSt cƺpt|_F~ΘCg~EAKG9$.ӽR 0CPrj3R/2]X*Hx'3pPJ9<*w9 v ,HE ,SSLtqڕ~ě"JU{EѴ|\2HlDU%Fܠm'W, ?uʫ\Y]<5qؾsĕ沪1 2BlR̪?F UgJ$R\S[9xP#H[ ҹӵZp9Em$(kb8gIu[,Z4#bK&f扆,FR.6Ƀ@r &S+C f}; Msl4:Pw_`HRmMij/%LkĄ>'ruAANn{:x{VWx I]?ɡe] ,廝drD~lx?3+㊈Eӈ5>nQ +ND HO,zV*y" ;tgDċXx2ֶyEt8|My=ExK!G9]d'nz%:϶Ļ/9|'&n>~5j{nݍΞ|.ٶmS=,V1tՒT^ym_߈!2%_@${P!ąl["GT?ro8*?IKȻH~}[1j%HDZvcVO6 $eAEj=}R‘Ж_K7e_nAI[2_F5?Er9K9!$hrz{ʊ_Ѳ^nD +ۇNܣ$/cHVp wCHXV0.$|vm|5ʃͯ7\Q] Imqy3T\cs?+ݺ WTsR +BRoܒlBQW6`?Ob Y,W-Mִ~4T]O0}ϯ"TE04mo PeŚk[}iB'$Ͻğt Ih5ew-"kPEa0Ab2a_ـIg^6:2:B9Z5jQwH$8K渒X0%39Prxҵܞ_v=45t ߹79 :o$<)%D# 4um D痿tѿ!7@>qkё=c5.G'>):!ˎ.5`>jǓ'۹$֨yPǒ,er(/-GJL=HXgٓJKΑ|u})Pcq I#^sbL'5Xn \ݢrRp{x+P{/-N АjOOj|\nöun0 y 8jM;H5RI#ABNk;X5_b%|39eqOޡ&d&{"/NJAU:Ga:>K!2,=ȇ\owl(Lv3EL@pF.|F.X-^8h <7Q#S5k=//H>] Lvo-.d0ےBnIu*yk7tžfp9o[ĦBfR+-SޫlɈNW;bEfO=5bEn Hs`3 s.jJcv}n [#6h af^0nmu6Ω$w[燣 0,sSEF{k)0->?2k*'BXU|r=}y} ?3ͷ mY#0~lbz8++=W`Q91"vmʶѱr_|o{=<~p$U E=RbNcxN,O}N`BxJ"N6aO4‹8>=Khy& -E~gq|2&6U q.PL~)5YHdZ i[UMN =#xN)0c[QCx7: EdU[i8={3[.",NƬ.-tO4xPlrf@ػbku4;"X0-_(a&P!JxhI,Kg+ɫD-"ۏus}])/wզydHPޭ"9bRm+i]/D-(]vv=]O9<)YZ,cWzX,5Zmo8_Z.\ ]Ul9ֱl"ѱ6mPoDr8m$q8p8j{tyI)V1Q.9}WJЧlm4# nK?`ou&wDB}Mu(]>}"J `}<`Sf)?=nH!nHuֶa_rvЀTW7pvCxAH6vLC^Gc9Exc}Ʒ7U<( -(-EGMB}) `1% D2~oȘenm~}=O-8M $ll]Fyn>#mDήQ#/,r14$t_-|x9<ЦNL _'::t}:,FG"RҚh3ɥf /U='uͤuk R%sհbi03S#H7UF}rYZļP'Ơ.2<z6qH7OC#9׆:>hjj\3 /p6?@d^砣R1P:8HÅ]"Y3ҭl,ojg}df2-LB,|0uҧfϦ]0X{l=2X31PՅaا,T4 Z<%H{ZdOsm:԰utS22tiD ->4HC[2!!{@,c!|G&L4t`%[d҃۵ܯГ`YK,t6՚wЂ`@%hYipaG+u}S5^m4Id>m#DvVg20H opiII6 0@Sn!wXZ}si\(*s;<ՇrT;ô2e~1d0+^H:w_w!Hd'TΏf%DPRJ]UpU$PܳA;]{ c%d-[GT/!_d%)'d"G>b۫` |40=+6f8eꌺ#U#poK΀}Th\_E7 \A_^q$}`e ֮=[Kp䭄y'* UZ gEvدp@S X, +t kCK,lPE #S%i׀3¶31r2ʔ +O{k8,܃#@[!8Ipk+L۴NqaZWY¾ZybmU`*6Xo1 -fJhؘLFal`%9BY 57nCC)w/*HBW 07dBNOQ}N}JY^s=8IeYz]P"9e/ITfַ͓a!;dF{[!w -RH&N=p_r&-QNybH?aV{{6-wm˴)xH46) =TȾգ$t2f*=C~h> ޚ#b71cpyGXS)> -e6+`&/4ώxMyaДK6<.IH;%jNYK*6,qWа%c]M[0cy ~(2JJJf6/Z)ѳ 5 FC']4?x@Z 1uu^$9PeGN=%}z -sxU`jxΤ0h fJrLv1u1N5qSijp,_-p mIq?.8j@ʟ1?V"Vd_ -gb|# ̾"rQ~RԴI.fΧ5y5&\gPaؠlv\UhhC!LV+=TY3N58R][O[ZGqxMsN:BUh&(D4Y$SCj'}?+)9)NNKcSbxy,J`fKn7إTA8RHؽ=m`Z~ZcAџ9HI|`p34VpF*yQ+-!S2PGB' |ON/Y$Ov)|72(r* AqF] J~/IGqR vu_nji -=JBf6u?ccC==ӽq >90o!gܵKC!2  o s7:]x!M~ȭc4#/`@)<}40.+ Lٙ1&N ɚ}U0a -)' uDYG}9`6%hC*5ِ{Aql|+n/f`4hQP58aq7d?s{(5*LM֞sFnϻQ3<}7g8s;=cp&! i!};],J}dR8&8[ zFq#YԞ OXbQӧp.Y[B;8O to&nEkCQV.nm``c+x4d]SPi0 ha Nwٶv=a?e|bTw -GQiM`K-ͿVVFһ˯E Ffvn>tֳ+\>[]Ub"[|͇|)~ACju߈"HnUlDzTYo3d嬐wgłt(l8vA_Qcϰ!80~](0-{JFmO|vfÍ0hǨUUW!{q[핇]Qe5v1]vGVVeZW˰u=:YmOHί!3ʼ~aIYہEBuX9r;j_|8!͐zG) s~_AOcyg_ǀE 3Hy| 4\yCCœu 6IwRMpƄR;n<! C~r#N%a|~!eBi//p HR~tOΐ,u@K2Rq>h"aNpXU?bᖧAH6mP !| 8A %A,iȢe #u<$-'b "^b%i&l9%z\3e0!^$1a eDd?b6H0fَgR^qhYVĻ0]pw;c_3c\4`j/oƒ ۚ bOcNV.jŃk?`;`^.-Ѐ/jC4]9%&gz+πs۞ȻseN ,[xyrMa p3pB:jDe;7K[1 /D+8h՜qnbjЪM@צkDj9K2fiZG+r_lr+?y,9+ȗ"%0"f>]M/cwvǩt(ax -T۰KW1;k1;Zt$ sV҆H+6 Sczr}NJ'7a] NJ؊ LI#j=x>M}!s -+8$rfRv(oKFƝMbNx^jiMj??pxG{0AejmJ IFovQ5 QS9ħ.V -h ^UM]A$V>EKћdxȧCcTJwsLX 5$T榈> &F0ܧxY':0./df1D![@ds}.Iq os6ᠼ@mLɮQA Gq殓$zm[ZVAcyԬ_fz*?T}+g8TR>CKդ¨:]D{n iԒ,[9}2-˾\Z_ڑ=\嘩J"Ux.6T -D_ߺ7\][=)A98%ܳtRQ傜jڛ,@xO&A}5:$Yi5^Zk]dRsbIexI"bAKMmPt SBBdmv9<+SO)O n"-ߵ}ޝڜtE\zKK]k=t!JC݁K}V\O -5ZQdJ\QihG隥[(a0TJbEju0в4w}*6Q8đTb`N@dpbp:Vgw5?95vgUD9TWT֎)}H_]%i8\ZRd| -'Tˇ])+ӑ=¤6=[6Wk['Ys/&]S3RymR)̾GM>Sz+)sJ{w>$I!H8&qwʵT\,bRi e!1`RQW,t&߆|wڨ튥!%ʷ&gpBfAHkBs,mH}S^,7n Vt]+!cܶ!@S'X>OK]}_GUQo6~8yp5֥BKM@{(uFi{U# -$[4tmzA0ݧm{]3DOŊ$},Lhufs8 hDF"aTĸp|HiP!N-!CH0nXİ\ 8HLBڥÂP_No>$C̾O+"U) 3q|&Й:v4 K8$p_m) $.qlc kضuϟq@y6>)/ ;~iu{0Wv .z靃"9Una>9KޗY7͋לJª?Ax#f6wfU.eݻS#kdXZR[obנ]3_(S۸j$mj_罃ILLHr^v)ٖ߮Dp~ZvW7'ϟ?!I;_yLy˭߈M]qD޸I}cBhc:%ltDBls҉šw'?!'Qǔ=9|7&A8ҋI"&`zc4R2̋c:!0MC|432"6hF㝄.R-"iJ8"b{|îTR~{cxB#NOJThfRN@#D^'x1~̄".d4i/[86Z`DdG=6a|wFA%s\AkrBQPuh1%\LoD:S!EY4c3^>W(8q,}14 | !{$p~cmb: Ӈ F>cgb1MCb FϱLI^;XM84ZNI3%I|5|f[Ng܇) 20u!bmdca %Gv"pbɧ;l;Y r"Mb̶?L~fXlI84>JEj!GThv,gCaGmڻ۷FلIyod[(?es8 k>RFw=3?xQl)Ӂ a{  l;"$ -tfIе>}DɲSe#'d#d-? -dKK}bt>ZH<f*}H?= رXȶr}nՖTy ~ -яE{vtW| ڔ_RɟOM28n̞Nz9ׯjM.NI)d`FВpdMall5i(O3Qѵf -HpeB!U>A%s/Y sm*qZn/A; ˟zS% ɨ+õ3ɀsS8}b{OQ -b |2Y(<s҂'t D[R_9Q)kM,h2$f.T`M1+nnbLF}, nUG5"BI @?/hܞ!jԯ}4^rDʆ$U!Ƭ*\|=u˗{e0c`7jI ߋՊjY+oTxpA}yxnH+^Vt9bK2IR9]Nhܩ碭rs, -  PqUC:@zD:|89]cACFD蠢sq*pu!79[`3 AǽMF&>I+SH@'b)tgfi -}\3U!W]>pH47e>^V!F 0uw$L Z [MүkDuI -!3;U9m.zdLD*:JGea@ih+vaaVEy4ERFWӨv6m0KGm}mZ1f5kh{ -J–Do 8Wo> -$/ؕC˘cւc2󏹲 -7Ek8Ê/l0mqǸɤFH kKQd&)>J]oMACjbSJR_"ŋ]8 iο^퀲]yvl!\v -&@beoTh줆 9-pRךlElK3;ޣt X?#e -Dh_ -@G1ȉd"Ml&!g{wap5Vmɔ UV#d}KT+`"MԝF%˷A.fdZB $A)yRw|MqեDM*č@ts5_=P;:Nܧ9bRl'܅)J\^VQS,*iAy#{/F  9 r>́14p9Rp+ul- LQ@3H._|}WS_ktD3h)Qm h6Q0F;i4u. h,V9窞;5.:aapGy5sֵla웆!Н8#<;Nj,!g'՜cv\Β<%zGhZ}a}Ⱥ{`"ʡʼD J@N  nxmZ[2/ԑ4D z;Fe;VNB%mrho=L:PGHiBʎl !\D_Us,Q z1|e3`+ B~O%l[q`7's= &agϨ6^=w6?ljֿS]Bu/:عIbIwpdGu7?-8 z1"6E̞{ȞFfwe~Hl ˑ*/ a?@4u$Q Ӟ?|v.5+?Jm]t^; ڊb;Ƿ?DкLwr"n uwa@^j[4#\vkTRFڡBDIѥd a>'K.jý-IN_P b[e0e/Hu)Qhqae܄N#*>wC@<>^y$AR-"`҅w ap<"zAە|z2Sv$  -qJT;nl6VHn8&q*;C9ƤfVv ]V vNS{R~TM0| Uhc_DJp;icR<3%ɥK_.jj՝p4S`fKRuu[:Ô"G~0sy|M򗪲+Ѹ >Z,}햋j|O|}rz!,f1hd*9 -NΗ>\FdQIR".iTw8+o{|/`'i-~T@g; %|9qp 1ut@&0I:t͜.AjV$*9}K ?un`*\Yns)F#fsشupIC*ڥ,/EU.ld5TɎ?e]©N♷; _j`V>Cy`Q Qj_!o& BW  ]*/#Kטr5Wv -j_b3CMa77bse+$Ր虯 q׌vӆ lbaA|\BK+9!ȃ+M֬˲[k|J6Y -<ܭijʷR9 *vMT?fhH*q+=J+wb.ũ[^I&ڤ!p3ZEI]mA]{ -ĎKbx5o'JԗۚEpB,ZnwEѵefd[#-i:iᾧ{vPǞ"=Q|\{p׃:זXE4`jcX?{|>U X›%\zCeuK=ز_zM|ˣ;;c EQUCĔ5lUbHv ?LHFJ׳`tCX'$O!;NH$oKh)/ -UӃEfh2-+ja_j-MTX 6KPّIO㵿Vf{7zQAN0{Q<= qArM6k[k!i"^dYkΌ~⑂ǖmoRtaR*<=xF&ȁ^P6}F6BGrECgmA&Ap׆fSC^[8X~DX(D􉺥JHgO/\+yUc l1.^v6' ˩C…jbl$B<®D oēvcB2Tӧ-ɶYScVGRn0+% 7!c dvh&i6P4̼Y8>Q`B-H.=l56<%Xa#U1s5 x +E~gq|2&6U q.PL~)5YHdZ i[UMN =#xN)0c[QCx7: EdU[i8={3[.",NƬ.-tO4xPlrf@ػbku4;"X0-_(a&P!JxhI,Kg+ɫD-"ۏus}])/wզydHPޭ"9bRm+i]/D-(]vv=]O9<)YZ,cWzX,5Zmo8_Z.\͡ \nr"c{%٠-Ecml'I(pHpp8׏# Sݭb8]r?^>;QC0ȯ6. iD;68nw](|С˭Y&G/^ d]L6-=F=ili☺d ʎ? +|"iCw).R`rwQ 6EmM K "ȇT Yކ} %Cں;@?DR]m3g K!1 ={UREPV0?(x+ ~" 4 ]h3eĔ$f~.w$KhH,!cYBt/?q(4.tu19F gkC?l2 |Z~fjBl@:&sC3M23~95Gp̚3LKJkKid6&1WL5:֭)JHU҇j ˜L#NTR%gmjBLLDKā#ІjV< r#\Fq4~_zJ@ vgcde.LKFgf' 04~KZa,>vW`!@Bltc͌k`C#W|aPS&ph iqʒv>ϵP2M\MW*H^l[ȹs -D}|B\,_"~63>mm޾8Tvw{s,dӭ݊j-zV i я3sD&kEM& 6vE"³)f ILx$9$YQbD E%&ۀhMAF;ai IsAʣhRB"WQ^DȔffxO;# }Vקi#]@zR:?w9WDsyn>q&DJ[JXژ ┩3꒏WqA/M;Qq|U݀pY|y đ&`Z0_?n-ipbÑETiAe3c­M&'`Flȧ''LЁA-~&C zRFVL!L9_"#bȱ˘*S<Dr<m&%0E`c2}1)gYr԰ =ܱK^Vx  +]/7` 1C:=GA +:˦)e-f{W%J@t&guA j"JG7^'S)5OZ߆ņx2ANloa򖷆N*O*K!8Kt~ +&Ga8y;"iYжe-Ӧ\^#$D&ܞS!V=4N HK +%\xk9D(B/qmN cM}@+M ٬<ӬZ<;"5)^BS.P$#g#o 6+9f-ݫHK'\AÖU^w7n|(B- +p()m++ټTk!D240 Y8lwmiyLPlyg@u^꫷oN;=tM+qU{{c1[tN^+HJ=xszћ7YYEm82 + +Dq/c\-_$*t,SC'T\+4Gb xHB2IiAQ!`!yZ"E!YT@,ib'))4Y )ӆT,^)#$KDVT.4Fh*pځdF(6KM"usZO. +G((SЅޭD)"վdGsA6:,۪&^aB5D#L5f"A n +2J&K$#LqRDiЀ5m">CߔʫFSI8Uxk y{7f6p|~=a960]Wq>!ZQQc;!}NGK0 #5vLFc (Ec!v8;3$`!Y*&lsY!edH1 1{0#ӿ/"1>мmCE>qq?y8\{-Zq # +#,ǣ{nEE޶su(.Ka:գ3I¶%FE=Vk_3b-XOU[#)}]4V=Х~}É|e[uj0ɸ\D苠cedhgnƾ.3Ҍ N['1HY@8dž4鐋AϮ@RH)MG-gc=AѸ_YԞ OX'bQӧp.Y{p{I +u7"۵(^x+c׶YNf0]boNpwM) R4zi[eAk+]m8]ϲ1~O/X(EѱDϺ[#Uwp8M3 L?JhBVzva^ν-ۧzvkUr˿Jl>XrKק7C/2hh7T=;aqYiwmj _hׯ*mtҡroX? '.2t >w0B)QlhK2Rnko|O7nA 5?zZ[Uxr^yVlӵ;:jwdk`UF 8QyuE {*~SY[o~ϯV. zNVD8f(8"K^]/98`O6Cr8/nwG޾=0MvixsǏ~&xg _!m=@hg.E "$8hB~-O`Vkql۠@#BP$~q..QK)lYӐE5G..x(tI&f[NZ'YEJLٲGXsJ$$)g69aBIb:ʈd&l`2Ͳ)P7K)2ѲwnsRw KfΌLpрr̳smkf8.>]x9Yy6>xF+0~_:yLCLZ8bhX顤gKjB9\2+aunz 8G:,u3+Kwirk83ݩ=@`|3e)=F'@2JstG=b5wiLM`nGs%fRXFĬy}Y_w̿c7JNJKE ;Q>wFL03ʯ%G i-w9O%m舔谒k0>GgqxpQpOkFEMP48`΄A?⬖?=K7Mgcؤ2'/1C"`v,e[n(ymk)/愌祖Tan0 AcZR|+gϟeٗݫ \TY;3kiT +:eCV[k˝g22%H#0[N0 +Tº\BM@{%)3S$+7M;K aL\jRpnД|B, 0PY{^,})]ʐ.{ΣcJhV^H#~O9gEq*~)iSyzְݻS󏮈Ko|)0KyǝN5Yi;pɕ2OjkIF+=J,W)+=j6m(]tV%JIHQR;=U>ZwOC&jt8*Zl NL4{ҽQ@uJ>:ƂnSJv(*21J? +oR +߇е[SϵU+EƗpB=A|ؕ>C.Lj>3lsqu+du5lbھѵ;~<#Xz ;~397g=ABDzlrwi LX~g?iq\{&ێ -Lu.P9Ų*&Px +JS&e}Bgmh[a'8})hm-FOlXRy|kYT߬4I}MhޠMo*Ջƍbъ_b6d 6DC^"*])wK.oUn8+EN&AM -6YrE* +٢%"CZneu%̛7?.W]o77ѵI_n n_&e .ڀF'_5%2/LuΡ5jFuQgJWƃyݿjT^lMf$C̾+"UY8>DI~Ѕ%O-O'\0 + +8&̧˜;RN=L"g툂')gV?"A$] +G(*L FN8r5XqV <)Gn[ሕzbVS B6O5@sZ ևufNmnӐ[:hgm-)Yk TWy'nmf;i[,wYgLk7qBJq&<^ܔAģR?{hdp.pnC ' 0%!GwFg*1 cWGvawg~3*γ1Oy`!cOp觹J&wCL vib aS}mu}7_[;j u:Sn0 Mݽ[JSڪʂ["9Ii(e!exxR +$;V#|H5y~i\\1 1<6$~q.Y820R w͆1a%8wW npe2ag%/`E!M(o~s6ۍBipbbR΀OV΂ =*ES?KJOXs+MNb/[F5ֶF%>>9KޗY7͋לJª?Ax#f6wfU.eݻS#kdXZR[obנ]3_(ko8{[dv+.Ul^KnH CD-$~3D2NlCbp8/R~bd'9i;I} /wvr+b>%3׿a7.|w~ߚҷ8ژF4J[tEq.c/O2I, eON= oYΣ& mXǃ`s,n:V}&;CֱorL`?$}_k9جaJ cG]coYXvkXfg Ȁy9>2])."<0Xk54rjnmw8200o#~1c$tpڣy=:9&ywmsj>m&m6ahb?`A7|>qY=G !Ԁ&~ ?!^[&xdsX3(8aێ <Y3wfmbo}lTkhc?0g:7ρJDD}=j%Owƻ;t)n+v,p칻=Gy[F4UE#Fс!]NT p͂j-_)L*ݴ%Rc7l/V+rje#R)% 9]s"ھ d{q[p&HwwW:SqgRY3+T fJWU 3SlOX9CFD蠢sq*pu!9[`s AǽMF&>I+SH@'b)tfo +}\3U!W]>pH,e>^V!F 0uw$L Z [MүkDuI +!s;U9m.zdLD*Kz04@Z;00+~l2 )iT;و6mOvZ-gY $Gd{ +J–Do 8go> +$/ؗC˘cւc2\Y٢5TaT6Oumx 7u=h6|i`I?$6ŧW] C4M)hHMlrT A RX$q׿x/Gd!ӳ8m77P+O[`47;$ݓNPc;쭊"-07n[ZsHmibf{N|W(3!((9Lę?qٌ8l4.QƊ-jWY}\#{U +99XHs$8sgQmjPKY!P3+@P +%pԝ\p;ȱIvY傸32xr&t1crOWxd94ɮ)>x5fMG4sVޖKnnCFS7ha€jELsZCB`V|Wy$@[Y]Ͼi K<̳vrvIK^/$fDž,ɳ_gxԉUg6n쳕HvD%.iWU,mU'LPk}Johw8mڑQ@}y!J A7*sser-i$ECfׁ:FJbVvek]\I"McJfЋ3R([1g{&x*!Owdeޚ04?F1 ?v~F?D]FP?N{c&U#K>8|gm%AG_ЛǍ)btCt4b 6+cF`#X`YPy$``g-K76]; =pW]qQjڠ;߹];!UJ]G qg% *WV+mܢy[j2Z}"N.%+ I=Q^rV[(b5Y~z!u 3Ip_TuQ[M, 7d) 3uI4/%r#n??/]!x= _$X/ivrg'3ewLk =PTJƖlshe+Nc"3cL@a6jmg +eꞰlW;'EaGwX知mf/=iE+7oZ0&M.:S\2KqY݉j 'LZ~`|jwIГJgRHߐWfNtoHRUv%wVqާZqQXO9{HNY/$,L%\cҧH۲auw8j: t$vgf] 5MV%cl9x\0[inw9Ylں͚up!SSszSVMRmKO*6Pdǟ.SZ@[|gB/50 kx NqGMSLtw +45; +Xy[hH ߧfjI*q+=J+wr!ũ[^I&ڤ!f4 ~ƻ,),4zcrsU$Ò3۟(R_n~Q12hM^^ F6W͚nȦe^T䲦*gӯn vJB:{vHDsm} +t\[bҀaLgQSTcCp +oVp/`~Y5pE,MȻ,O~EU StMV!"&.0"#[)b~̃eaI?֖8!%%/W|"V͏D2CiYV R{heb$_ʎtHz9$(>2)'QAN0{Q<= qArM6k[k!i"^dYkΌ~⑂ǖmoRtaR*<=xF&ȁ^P6}F6BGrECgmA&Ap׆fSC^[8X~DX(D􉺥JHgO/\+yUc l1.^v6' ˩C…jbl$B<®D oēvcB2Tӧ-ɶYScVGRn0+% 7!c dvh&i6P4̼Y8>Q`B-H.=l56<%Xa#U1s5 x QL7Qe0)D36=SX4F5,+P0ܐ@4WjZF׭+qF -bݖ  R(&1:iMCe{,O ''yuWAxƚ&;;"25\´K&Un\)SnhYkfp%NwyF0$V>Q= ni'wn+'6O\f^c_,3(N[ E>9fiG8E>EAއYgEQ-k;e?T"5*bw],x?Xmo_qZee\$+mim: 8٨,l1 -Zo 3g̙|^۷R7]a6iӇ}8};Y"ɣrIx2.C@0LH=x3W"dEe IHK)(JHl"8JlE4K|FieN4$` 2A ͣ<!-) -qς?Xq>GM$xT"?ٸotZ8ICZ> g`>T$ͣзHR Pƪ5 y\d5Y **,C%a:YETAyK!R g"^BRR|Ps(Զ7 a|ZĴbT/T'e:ŚI:_#_ b0:P\& iц9=$ĀZ#Í -,Xi&A\, }W.*WBy]|3 aDߗ?594ȽI/Ev ^A .jF#Z8 qht9ʪ#>}V6 ,/(ERvL`L>%UNu%єQ2ZULiC]+e3%♾[كo̿&bi{_OV z|-=&s?6x-tT2XuR-Zyџ4ʱն?cU CAxejQ툫 zʢ:t~T;F5ȕ̗&HWnL(y&+rs{Z-?qF\} -S0M˜8TB:VٷDV)<.ꆈvo m`+g>pִO=V/JFE;/f3{:4ES(urtBdvlyŪK$X6@筘.wRPC5K A_d[(o_kQD/L(P"BF˶(Ntvfk\;9!K򧍌Tp+2E8찞Q߹TjsAE sR=:ng\'9x"Nc{K0 Yg=Sn0 + @4 YK^דCX+6lg."GzK/jܦPsOG0%@s Ub*$ˈi*{@AaX3%֌#c6bK>MD ߱TU5,a/,M!/YZ#mOrzb 9cH\I <$Jb$M܊[Z|D8וLkv cw{Fm[V˲V5s<ˉ̶ -s~&,v`#fs7ffd48t2އ1n%owڶ!6;@̈́Һ7D5N+H8<'t;f|*S3rdVPYӴM -1D-,/PN+Lp݄dܿSYv1F6wXa]@\4Pe m(>o#Ɓgr&oa,l+JnYJI 2CCZ~l:$Y-TFZ~Ugy-10 EwdLŤ.q;%/OOzC3(=dיf/iu''x֑ bq}߮1{S(ZlɌ^IkwXmoH_1"W4[a+4UuKrѩY is]>԰;/<3;ŋzAtE7iA^zW!#K$ b?&">?.Pgm#Ii\fw2<:o92"e IHe.)J(O,je%~@4[:G-M˂Vi-g:3Ik!. -P}P&azRZE;rJ !])|e"㭆$-@5HS l8 ;5h%㟠/ D@?:0 ʕL -Ezc'K -V~!ȏMTv+v)]Id` -Kv^lYY\H$%ؔ\3J IM$ʑبeqjh5eeu݈/JBV$Xޕᘄc#sDkl4׎{4dLFXx< CuxgLK1j:p3Ǽd9rg3¶Gyt>鞑ekp: -X63W0lKLHC@j@{'*fe;lPjlbiVL ^[^ -&%.] ] r2r~eWIUκJ-s2FUIQVp\ߜk?H>VNlZKLM Dct$W['$VRf4VQӑTQ{pK {a%w <%)jȿ%OPN/}Bq=e,BC 5xOG\vD2?^ٞ况wԫ{gdQY >,51v\hY&+Qe'GN>($)NOV7g[G<^o'q%SJoՁXH6Euڎt5e!0ŨUKNo`8^?'L/1QO!]eKbO4TUhiMi=CS ^r\*\yB5+όCOt*6\iJ(?y+|u񨐫uB\,ş*N~.GmhIZ+?]͎aNOND"|> ?LJ=:mg?HYZ8HWk||^e<~\X|އ 64k6#0ӭu :ffas>9-^/_71LNNf+͟CJ㵆8ƍv}uHT,ly6{O!JH{l=xO(^*IZ#;KZq9)𷧩7oZO ܴT*.֖m1CLQz|t$ +m^5 C5uF[#X@B.j w(-aZ&%T}Ta(enwfcOƀ/a+wK!yOCwfs}{;PJ.Z\{"UU"8%zQ3N0 } -&Fw1$$*&I&!w'ҵKvo塌/Д\ pH:|Fȹ1J' +T;$$Ec6ۯ(`u\dVKGnFpcIspK ċV=CRSJ ˄V^ 7S7 !F ma1C}*1T!3BHi]ŜVp@{8,osL;6adO3_Va]nJmX Oz#KaUXzq7m'gfQj07tp ݦҡK8d0tIH'hi=% -yCܽw'=5}Kޟ}8~rZҨi5}?uB~ܪ"Z68u!,J6lՖ.h%5ijriGfe5O4WB;XV--TQ<3N5Ym+ Z6,h?XUrUYl?p|SwsU`Jf n೙z0Sj\:[DBXꓨȜWYͮ{Aϯ(V`?B嫅[!}P,>ž)5ZٔYc7"b:[HCr*kkL>ED3iɺ@4^ JZ[Q4!#ؕ^%֗ZS(ޣ,sA"Hnܘړ8>i4$#/Lc~9Nh>0(M" qVy~1Sb&1$D ΄CΪI=zUUJPIq˭g?bC?W/G^9j-)#^ϕ[߽ _ٌtN0q_4+ -Tp0gO8w^ߏmJ@y9Т5]!PjhzD’ a7NM鰇͟onE9Q= ni'wn+'6O\f^c_,3(N[ E>9fiG8E>EAއYgEQ-k;e?T"5*bw],x?XmoJ_qZee\$UW-I^ɍf`\k1~X>0s9oϜ9lp=u*g9i6oddN$O"%x>cR2!E,\!0yy&$!-(!.P#( Ml.uzO90F7-D6\(M> r`q%4I0R-f㾝ia$ j)s0qSE4&B""I1@jD,IDsգd,ī hm|r.\% +'[ +A.(69* +P˶&\5V&vZnXc5V4L:xHB욧u`PXGH 1a^b}l͘ɚR6xXyΕo&~:wVQ&uk]t{a0jV+7 ?yd05l2=,,Z';>[ˇ[rt7x4:V+˷Y40\[ Lbw{֭;9Oi~pz1akpgfg/w]ufOC-Cg{YPϸ5V X-Z5o窀ϷoҵT6<ӽwA}SzE<EL3,ggپÁo9vAG`c+<}`lJN7&A,L!]* 툱_qlo]vY-ls-嬵,r8T2aBy]+2zw;.Yzavo6勞`< +~24˹`_?ɾn/|5FM~䍪\pD?%e1׋21Am[y I.kP,:(FE+BzFY#Yٛ<0$V 5jB (6mcLh02x_΂n"xUr_-T>3}@c#٧0 &1x95hL&ph$YH/F*y#oZۀ^~nywK[B21&U5;ӎr֕DSFhV%s<3VDv|/n% lhd1[-KI>Zb?;n)I_n4ƫuo1yǪ:n!=u݌lAW}?X^0N8akϯW\nEю,J#)N\Ni ^\|9nb(_qV{$q58,cz-赞 JQqBhabccQ߉rk''dI񷱕jDǟ3;W +Ym.cdN'R`=PAd~i,\}o a;7lr>|_M +1D-,/PN+Lp݄dܿSYv1F6wXa]@\4Pe m(>o#Ɓgr&oa,l+JnYJI 2CCZ~l:$Y-TFZ~Ugy-10 EwdLŤ.q;%/OOzC3(=dיf/iu''x֑ bq}߮1{S(ZlɌ^IkwXmoH_1"W4z.I1>I°NbpyI.:3 ;mNˇvgfg[zu@h -7o~}_IOʬ靏O8XۈcR9e2ٽ [ ȢEYDiB~RK2 ZYD=2VNQqGi~ӲUF(ـ6LZf(dH,B<w~$q%I^V8qe*HCHyx +`٬Hya*I(ze  i;N*x b?ZhKц%O5Lr%B B _,|8 +DFJe%X’t+[i7@V#-$"II&!6% BREr%6*FtY<cMkpA7˸7.wm8&yWbdhpMcƶ52gcpy d;$.=8p'LW'1Z\M#K\ +W=dӥ x5ލz. {V41/,qaN&lZf_#\kgJUrUjI1 V%FD]>Xugq~s2>+X8qj/q2u^6Q>m 4&}\!#WlȒ;JހXEMGRkPFq-1oe+3f%D#Z?!C:QhyN +A 6rIlw{}g{S~m?]G}g5F ,7pZ"'X_z|:68>1n;N2ϗOAZ##(2>|_;|/VIng504+ïh bc$/`1D|<^ks|`JmW'D2qΆiiփ:5RtJ83K{z5LMK8MZѾ^gޏK9/iD+ƐOp̏paRBJ*NFH،(Y?F~g6od 6rtK9j;4dqWm6gJ7 u"h,>My0?ߏ#%[6Rȯ[Ud45RQ'.$EۦRՔ&VM.ȬYhTcժ*ygpFR6meAF=CGSYS4k]oyjR` +Z |6SfsVmKgH+5U5X}u*+uo301 +lGr^|uk7ŧ7Y+2vsZ}CYZ [g iHTez#b'Ȟi&MA"YkZIkY0JX;ռ}BKTkcJ^{%c.HDɭ3B{G7g>dEi̯ g 71&1Iww// pJ$fBPHa™p^pڲ u{rAA +):)¹5Ɯ&ݠypgVM+ew73рN6^ &_KfE*uy4.~mJ@y9Т5]!PjhzD’ a7NM鰇͟onE90֊2q8YVUW5.5-^sކȭT?{ǥ䱜߽bsvX`<ۦ%0},ryn[FYw&X8&b|5,/hIPmJ0s!l >.Z Ŋ Ld;t!C9sz wSIW! .S^8#41|9pʁu4n-igi.2r]FÏ@t %؀c63ZS;:,-*y^+,yr}_hvC7ǧ!<~dwT6l|ۋ0fz8j<:[_hu9^G9Y%~mj0 y vH`K=6= &VRS[wliÏ>IݱK xT$N5G1D @@ -935,5 +925,4 @@ T Ŋ Ld*;␇K̽aru=hJeI_ :S}G'w: a@Ld4E(aiX~2)km*ݳ:-O3.OT%z؁ff :Ήx%8,+Ӻ.adv?=hMzkrmRmZ߉QaA :'t&6.򇦨Y uA -@ Es\@@BQpgCh8PSo{?벆T$OBXiYP|Q~3jfK3,n>HAԀXH) q8HAԀXH) q8Qtz" ѨW;Zn㳳PvBEů8r%GBMB \ No newline at end of file