geek 4 éve
szülő
commit
68e258d306
62 módosított fájl, 1791 hozzáadás és 0 törlés
  1. 38 0
      vendor/cakephp/datasource/SimplePaginator.php
  2. 3 0
      vendor/psr/container/.gitignore
  3. 21 0
      vendor/psr/container/LICENSE
  4. 5 0
      vendor/psr/container/README.md
  5. 27 0
      vendor/psr/container/composer.json
  6. 13 0
      vendor/psr/container/src/ContainerExceptionInterface.php
  7. 37 0
      vendor/psr/container/src/ContainerInterface.php
  8. 13 0
      vendor/psr/container/src/NotFoundExceptionInterface.php
  9. 18 0
      vendor/psr/log/Psr/Log/Test/DummyTest.php
  10. 37 0
      vendor/robmorgan/phinx/src/Phinx/Util/Expression.php
  11. 21 0
      vendor/symfony/console/Exception/MissingInputException.php
  12. 64 0
      vendor/symfony/console/Helper/Dumper.php
  13. 67 0
      vendor/symfony/console/Output/TrimmedBufferOutput.php
  14. 19 0
      vendor/symfony/polyfill-php73/LICENSE
  15. 43 0
      vendor/symfony/polyfill-php73/Php73.php
  16. 18 0
      vendor/symfony/polyfill-php73/README.md
  17. 14 0
      vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php
  18. 31 0
      vendor/symfony/polyfill-php73/bootstrap.php
  19. 36 0
      vendor/symfony/polyfill-php73/composer.json
  20. 19 0
      vendor/symfony/polyfill-php80/LICENSE
  21. 105 0
      vendor/symfony/polyfill-php80/Php80.php
  22. 24 0
      vendor/symfony/polyfill-php80/README.md
  23. 22 0
      vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php
  24. 11 0
      vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php
  25. 5 0
      vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php
  26. 5 0
      vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php
  27. 42 0
      vendor/symfony/polyfill-php80/bootstrap.php
  28. 40 0
      vendor/symfony/polyfill-php80/composer.json
  29. 3 0
      vendor/symfony/service-contracts/.gitignore
  30. 27 0
      vendor/symfony/service-contracts/Attribute/Required.php
  31. 5 0
      vendor/symfony/service-contracts/CHANGELOG.md
  32. 19 0
      vendor/symfony/service-contracts/LICENSE
  33. 9 0
      vendor/symfony/service-contracts/README.md
  34. 30 0
      vendor/symfony/service-contracts/ResetInterface.php
  35. 126 0
      vendor/symfony/service-contracts/ServiceLocatorTrait.php
  36. 36 0
      vendor/symfony/service-contracts/ServiceProviderInterface.php
  37. 53 0
      vendor/symfony/service-contracts/ServiceSubscriberInterface.php
  38. 63 0
      vendor/symfony/service-contracts/ServiceSubscriberTrait.php
  39. 92 0
      vendor/symfony/service-contracts/Test/ServiceLocatorTest.php
  40. 38 0
      vendor/symfony/service-contracts/composer.json
  41. 3 0
      vendor/topthink/think-captcha/.gitignore
  42. 32 0
      vendor/topthink/think-captcha/LICENSE
  43. 33 0
      vendor/topthink/think-captcha/README.md
  44. BIN
      vendor/topthink/think-captcha/assets/bgs/1.jpg
  45. BIN
      vendor/topthink/think-captcha/assets/bgs/2.jpg
  46. BIN
      vendor/topthink/think-captcha/assets/bgs/3.jpg
  47. BIN
      vendor/topthink/think-captcha/assets/bgs/4.jpg
  48. BIN
      vendor/topthink/think-captcha/assets/bgs/5.jpg
  49. BIN
      vendor/topthink/think-captcha/assets/bgs/6.jpg
  50. BIN
      vendor/topthink/think-captcha/assets/bgs/7.jpg
  51. BIN
      vendor/topthink/think-captcha/assets/bgs/8.jpg
  52. BIN
      vendor/topthink/think-captcha/assets/ttfs/1.ttf
  53. BIN
      vendor/topthink/think-captcha/assets/ttfs/2.ttf
  54. BIN
      vendor/topthink/think-captcha/assets/ttfs/3.ttf
  55. BIN
      vendor/topthink/think-captcha/assets/ttfs/4.ttf
  56. BIN
      vendor/topthink/think-captcha/assets/ttfs/5.ttf
  57. BIN
      vendor/topthink/think-captcha/assets/ttfs/6.ttf
  58. BIN
      vendor/topthink/think-captcha/assets/zhttfs/1.ttf
  59. 22 0
      vendor/topthink/think-captcha/composer.json
  60. 320 0
      vendor/topthink/think-captcha/src/Captcha.php
  61. 23 0
      vendor/topthink/think-captcha/src/CaptchaController.php
  62. 59 0
      vendor/topthink/think-captcha/src/helper.php

+ 38 - 0
vendor/cakephp/datasource/SimplePaginator.php

@@ -0,0 +1,38 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
+ * @link          http://cakephp.org CakePHP(tm) Project
+ * @since         3.9.0
+ * @license       http://www.opensource.org/licenses/mit-license.php MIT License
+ */
+namespace Cake\Datasource;
+
+/**
+ * Simplified paginator which avoids potentially expensives queries
+ * to get the total count of records.
+ *
+ * When using a simple paginator you will not be able to generate page numbers.
+ * Instead use only the prev/next pagination controls, and handle 404 errors
+ * when pagination goes past the available result set.
+ */
+class SimplePaginator extends Paginator
+{
+    /**
+     * Simple pagination does not perform any count query, so this method returns `null`.
+     *
+     * @param \Cake\Datasource\QueryInterface $query Query instance.
+     * @param array $data Pagination data.
+     * @return int|null
+     */
+    protected function getCount(QueryInterface $query, array $data)
+    {
+        return null;
+    }
+}

+ 3 - 0
vendor/psr/container/.gitignore

@@ -0,0 +1,3 @@
+composer.lock
+composer.phar
+/vendor/

+ 21 - 0
vendor/psr/container/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013-2016 container-interop
+Copyright (c) 2016 PHP Framework Interoperability Group
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 5 - 0
vendor/psr/container/README.md

@@ -0,0 +1,5 @@
+# PSR Container
+
+This repository holds all interfaces/classes/traits related to [PSR-11](https://github.com/container-interop/fig-standards/blob/master/proposed/container.md).
+
+Note that this is not a container implementation of its own. See the specification for more details.

+ 27 - 0
vendor/psr/container/composer.json

@@ -0,0 +1,27 @@
+{
+    "name": "psr/container",
+    "type": "library",
+    "description": "Common Container Interface (PHP FIG PSR-11)",
+    "keywords": ["psr", "psr-11", "container", "container-interop", "container-interface"],
+    "homepage": "https://github.com/php-fig/container",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "PHP-FIG",
+            "homepage": "http://www.php-fig.org/"
+        }
+    ],
+    "require": {
+        "php": ">=5.3.0"
+    },
+    "autoload": {
+        "psr-4": {
+            "Psr\\Container\\": "src/"
+        }
+    },
+    "extra": {
+        "branch-alias": {
+            "dev-master": "1.0.x-dev"
+        }
+    }
+}

+ 13 - 0
vendor/psr/container/src/ContainerExceptionInterface.php

@@ -0,0 +1,13 @@
+<?php
+/**
+ * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
+ */
+
+namespace Psr\Container;
+
+/**
+ * Base interface representing a generic exception in a container.
+ */
+interface ContainerExceptionInterface
+{
+}

+ 37 - 0
vendor/psr/container/src/ContainerInterface.php

@@ -0,0 +1,37 @@
+<?php
+/**
+ * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
+ */
+
+namespace Psr\Container;
+
+/**
+ * Describes the interface of a container that exposes methods to read its entries.
+ */
+interface ContainerInterface
+{
+    /**
+     * Finds an entry of the container by its identifier and returns it.
+     *
+     * @param string $id Identifier of the entry to look for.
+     *
+     * @throws NotFoundExceptionInterface  No entry was found for **this** identifier.
+     * @throws ContainerExceptionInterface Error while retrieving the entry.
+     *
+     * @return mixed Entry.
+     */
+    public function get($id);
+
+    /**
+     * Returns true if the container can return an entry for the given identifier.
+     * Returns false otherwise.
+     *
+     * `has($id)` returning true does not mean that `get($id)` will not throw an exception.
+     * It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`.
+     *
+     * @param string $id Identifier of the entry to look for.
+     *
+     * @return bool
+     */
+    public function has($id);
+}

+ 13 - 0
vendor/psr/container/src/NotFoundExceptionInterface.php

@@ -0,0 +1,13 @@
+<?php
+/**
+ * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
+ */
+
+namespace Psr\Container;
+
+/**
+ * No entry was found in the container.
+ */
+interface NotFoundExceptionInterface extends ContainerExceptionInterface
+{
+}

+ 18 - 0
vendor/psr/log/Psr/Log/Test/DummyTest.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace Psr\Log\Test;
+
+/**
+ * This class is internal and does not follow the BC promise.
+ *
+ * Do NOT use this class in any way.
+ *
+ * @internal
+ */
+class DummyTest
+{
+    public function __toString()
+    {
+        return 'DummyTest';
+    }
+}

+ 37 - 0
vendor/robmorgan/phinx/src/Phinx/Util/Expression.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace Phinx\Util;
+
+class Expression
+{
+    /**
+     * @var string The expression
+     */
+    private $value;
+
+    /**
+     * @param string $value The expression
+     */
+    public function __construct($value)
+    {
+        $this->value = $value;
+    }
+
+    /**
+     * @return string Returns the expression
+     */
+    public function __toString()
+    {
+        return $this->value;
+    }
+
+    /**
+     * @param string $value The expression
+     *
+     * @return self
+     */
+    public static function from($value)
+    {
+        return new self($value);
+    }
+}

+ 21 - 0
vendor/symfony/console/Exception/MissingInputException.php

@@ -0,0 +1,21 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Exception;
+
+/**
+ * Represents failure to read input from stdin.
+ *
+ * @author Gabriel Ostrolucký <gabriel.ostrolucky@gmail.com>
+ */
+class MissingInputException extends RuntimeException implements ExceptionInterface
+{
+}

+ 64 - 0
vendor/symfony/console/Helper/Dumper.php

@@ -0,0 +1,64 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Helper;
+
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\VarDumper\Cloner\ClonerInterface;
+use Symfony\Component\VarDumper\Cloner\VarCloner;
+use Symfony\Component\VarDumper\Dumper\CliDumper;
+
+/**
+ * @author Roland Franssen <franssen.roland@gmail.com>
+ */
+final class Dumper
+{
+    private $output;
+    private $dumper;
+    private $cloner;
+    private $handler;
+
+    public function __construct(OutputInterface $output, CliDumper $dumper = null, ClonerInterface $cloner = null)
+    {
+        $this->output = $output;
+        $this->dumper = $dumper;
+        $this->cloner = $cloner;
+
+        if (class_exists(CliDumper::class)) {
+            $this->handler = function ($var): string {
+                $dumper = $this->dumper ?? $this->dumper = new CliDumper(null, null, CliDumper::DUMP_LIGHT_ARRAY | CliDumper::DUMP_COMMA_SEPARATOR);
+                $dumper->setColors($this->output->isDecorated());
+
+                return rtrim($dumper->dump(($this->cloner ?? $this->cloner = new VarCloner())->cloneVar($var)->withRefHandles(false), true));
+            };
+        } else {
+            $this->handler = function ($var): string {
+                switch (true) {
+                    case null === $var:
+                        return 'null';
+                    case true === $var:
+                        return 'true';
+                    case false === $var:
+                        return 'false';
+                    case \is_string($var):
+                        return '"'.$var.'"';
+                    default:
+                        return rtrim(print_r($var, true));
+                }
+            };
+        }
+    }
+
+    public function __invoke($var): string
+    {
+        return ($this->handler)($var);
+    }
+}

+ 67 - 0
vendor/symfony/console/Output/TrimmedBufferOutput.php

@@ -0,0 +1,67 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Console\Output;
+
+use Symfony\Component\Console\Exception\InvalidArgumentException;
+use Symfony\Component\Console\Formatter\OutputFormatterInterface;
+
+/**
+ * A BufferedOutput that keeps only the last N chars.
+ *
+ * @author Jérémy Derussé <jeremy@derusse.com>
+ */
+class TrimmedBufferOutput extends Output
+{
+    private $maxLength;
+    private $buffer = '';
+
+    public function __construct(
+        int $maxLength,
+        ?int $verbosity = self::VERBOSITY_NORMAL,
+        bool $decorated = false,
+        OutputFormatterInterface $formatter = null
+    ) {
+        if ($maxLength <= 0) {
+            throw new InvalidArgumentException(sprintf('"%s()" expects a strictly positive maxLength. Got %d.', __METHOD__, $maxLength));
+        }
+
+        parent::__construct($verbosity, $decorated, $formatter);
+        $this->maxLength = $maxLength;
+    }
+
+    /**
+     * Empties buffer and returns its content.
+     *
+     * @return string
+     */
+    public function fetch()
+    {
+        $content = $this->buffer;
+        $this->buffer = '';
+
+        return $content;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function doWrite($message, $newline)
+    {
+        $this->buffer .= $message;
+
+        if ($newline) {
+            $this->buffer .= \PHP_EOL;
+        }
+
+        $this->buffer = substr($this->buffer, 0 - $this->maxLength);
+    }
+}

+ 19 - 0
vendor/symfony/polyfill-php73/LICENSE

@@ -0,0 +1,19 @@
+Copyright (c) 2018-2019 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 43 - 0
vendor/symfony/polyfill-php73/Php73.php

@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Php73;
+
+/**
+ * @author Gabriel Caruso <carusogabriel34@gmail.com>
+ * @author Ion Bazan <ion.bazan@gmail.com>
+ *
+ * @internal
+ */
+final class Php73
+{
+    public static $startAt = 1533462603;
+
+    /**
+     * @param bool $asNum
+     *
+     * @return array|float|int
+     */
+    public static function hrtime($asNum = false)
+    {
+        $ns = microtime(false);
+        $s = substr($ns, 11) - self::$startAt;
+        $ns = 1E9 * (float) $ns;
+
+        if ($asNum) {
+            $ns += $s * 1E9;
+
+            return \PHP_INT_SIZE === 4 ? $ns : (int) $ns;
+        }
+
+        return array($s, (int) $ns);
+    }
+}

+ 18 - 0
vendor/symfony/polyfill-php73/README.md

@@ -0,0 +1,18 @@
+Symfony Polyfill / Php73
+========================
+
+This component provides functions added to PHP 7.3 core:
+
+- [`array_key_first`](https://php.net/array_key_first)
+- [`array_key_last`](https://php.net/array_key_last)
+- [`hrtime`](https://php.net/function.hrtime)
+- [`is_countable`](https://php.net/is_countable)
+- [`JsonException`](https://php.net/JsonException)
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).

+ 14 - 0
vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php

@@ -0,0 +1,14 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+class JsonException extends Exception
+{
+}

+ 31 - 0
vendor/symfony/polyfill-php73/bootstrap.php

@@ -0,0 +1,31 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Php73 as p;
+
+if (PHP_VERSION_ID >= 70300) {
+    return;
+}
+
+if (!function_exists('is_countable')) {
+    function is_countable($value) { return is_array($value) || $value instanceof Countable || $value instanceof ResourceBundle || $value instanceof SimpleXmlElement; }
+}
+if (!function_exists('hrtime')) {
+    require_once __DIR__.'/Php73.php';
+    p\Php73::$startAt = (int) microtime(true);
+    function hrtime($as_number  = false) { return p\Php73::hrtime($as_number ); }
+}
+if (!function_exists('array_key_first')) {
+    function array_key_first(array $array) { foreach ($array as $key => $value) { return $key; } }
+}
+if (!function_exists('array_key_last')) {
+    function array_key_last(array $array) { return key(array_slice($array, -1, 1, true)); }
+}

+ 36 - 0
vendor/symfony/polyfill-php73/composer.json

@@ -0,0 +1,36 @@
+{
+    "name": "symfony/polyfill-php73",
+    "type": "library",
+    "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+    "keywords": ["polyfill", "shim", "compatibility", "portable"],
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Nicolas Grekas",
+            "email": "p@tchwork.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=7.1"
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Polyfill\\Php73\\": "" },
+        "files": [ "bootstrap.php" ],
+        "classmap": [ "Resources/stubs" ]
+    },
+    "minimum-stability": "dev",
+    "extra": {
+        "branch-alias": {
+            "dev-main": "1.20-dev"
+        },
+        "thanks": {
+            "name": "symfony/polyfill",
+            "url": "https://github.com/symfony/polyfill"
+        }
+    }
+}

+ 19 - 0
vendor/symfony/polyfill-php80/LICENSE

@@ -0,0 +1,19 @@
+Copyright (c) 2020 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 105 - 0
vendor/symfony/polyfill-php80/Php80.php

@@ -0,0 +1,105 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Php80;
+
+/**
+ * @author Ion Bazan <ion.bazan@gmail.com>
+ * @author Nico Oelgart <nicoswd@gmail.com>
+ * @author Nicolas Grekas <p@tchwork.com>
+ *
+ * @internal
+ */
+final class Php80
+{
+    public static function fdiv(float $dividend, float $divisor): float
+    {
+        return @($dividend / $divisor);
+    }
+
+    public static function get_debug_type($value): string
+    {
+        switch (true) {
+            case null === $value: return 'null';
+            case \is_bool($value): return 'bool';
+            case \is_string($value): return 'string';
+            case \is_array($value): return 'array';
+            case \is_int($value): return 'int';
+            case \is_float($value): return 'float';
+            case \is_object($value): break;
+            case $value instanceof \__PHP_Incomplete_Class: return '__PHP_Incomplete_Class';
+            default:
+                if (null === $type = @get_resource_type($value)) {
+                    return 'unknown';
+                }
+
+                if ('Unknown' === $type) {
+                    $type = 'closed';
+                }
+
+                return "resource ($type)";
+        }
+
+        $class = \get_class($value);
+
+        if (false === strpos($class, '@')) {
+            return $class;
+        }
+
+        return (get_parent_class($class) ?: key(class_implements($class)) ?: 'class').'@anonymous';
+    }
+
+    public static function get_resource_id($res): int
+    {
+        if (!\is_resource($res) && null === @get_resource_type($res)) {
+            throw new \TypeError(sprintf('Argument 1 passed to get_resource_id() must be of the type resource, %s given', get_debug_type($res)));
+        }
+
+        return (int) $res;
+    }
+
+    public static function preg_last_error_msg(): string
+    {
+        switch (preg_last_error()) {
+            case PREG_INTERNAL_ERROR:
+                return 'Internal error';
+            case PREG_BAD_UTF8_ERROR:
+                return 'Malformed UTF-8 characters, possibly incorrectly encoded';
+            case PREG_BAD_UTF8_OFFSET_ERROR:
+                return 'The offset did not correspond to the beginning of a valid UTF-8 code point';
+            case PREG_BACKTRACK_LIMIT_ERROR:
+                return 'Backtrack limit exhausted';
+            case PREG_RECURSION_LIMIT_ERROR:
+                return 'Recursion limit exhausted';
+            case PREG_JIT_STACKLIMIT_ERROR:
+                return 'JIT stack limit exhausted';
+            case PREG_NO_ERROR:
+                return 'No error';
+            default:
+                return 'Unknown error';
+        }
+    }
+
+    public static function str_contains(string $haystack, string $needle): bool
+    {
+        return '' === $needle || false !== strpos($haystack, $needle);
+    }
+
+    public static function str_starts_with(string $haystack, string $needle): bool
+    {
+        return 0 === \strncmp($haystack, $needle, \strlen($needle));
+    }
+
+    public static function str_ends_with(string $haystack, string $needle): bool
+    {
+        return '' === $needle || ('' !== $haystack && 0 === \substr_compare($haystack, $needle, -\strlen($needle)));
+    }
+}

+ 24 - 0
vendor/symfony/polyfill-php80/README.md

@@ -0,0 +1,24 @@
+Symfony Polyfill / Php80
+========================
+
+This component provides features added to PHP 8.0 core:
+
+- `Stringable` interface
+- [`fdiv`](https://php.net/fdiv)
+- `ValueError` class
+- `UnhandledMatchError` class
+- `FILTER_VALIDATE_BOOL` constant
+- [`get_debug_type`](https://php.net/get_debug_type)
+- [`preg_last_error_msg`](https://php.net/preg_last_error_msg)
+- [`str_contains`](https://php.net/str_contains)
+- [`str_starts_with`](https://php.net/str_starts_with)
+- [`str_ends_with`](https://php.net/str_ends_with)
+- [`get_resource_id`](https://php.net/get_resource_id)
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).

+ 22 - 0
vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php

@@ -0,0 +1,22 @@
+<?php
+
+#[Attribute(Attribute::TARGET_CLASS)]
+final class Attribute
+{
+    const TARGET_CLASS = 1;
+    const TARGET_FUNCTION = 2;
+    const TARGET_METHOD = 4;
+    const TARGET_PROPERTY = 8;
+    const TARGET_CLASS_CONSTANT = 16;
+    const TARGET_PARAMETER = 32;
+    const TARGET_ALL = 63;
+    const IS_REPEATABLE = 64;
+
+    /** @var int */
+    public $flags;
+
+    public function __construct(int $flags = Attribute::TARGET_ALL)
+    {
+        $this->flags = $flags;
+    }
+}

+ 11 - 0
vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php

@@ -0,0 +1,11 @@
+<?php
+
+if (\PHP_VERSION_ID < 80000) {
+    interface Stringable
+    {
+        /**
+         * @return string
+         */
+        public function __toString();
+    }
+}

+ 5 - 0
vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php

@@ -0,0 +1,5 @@
+<?php
+
+class UnhandledMatchError extends Error
+{
+}

+ 5 - 0
vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php

@@ -0,0 +1,5 @@
+<?php
+
+class ValueError extends Error
+{
+}

+ 42 - 0
vendor/symfony/polyfill-php80/bootstrap.php

@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Php80 as p;
+
+if (PHP_VERSION_ID >= 80000) {
+    return;
+}
+
+if (!defined('FILTER_VALIDATE_BOOL') && defined('FILTER_VALIDATE_BOOLEAN')) {
+    define('FILTER_VALIDATE_BOOL', FILTER_VALIDATE_BOOLEAN);
+}
+
+if (!function_exists('fdiv')) {
+    function fdiv(float $num1, float $num2): float { return p\Php80::fdiv($num1, $num2); }
+}
+if (!function_exists('preg_last_error_msg')) {
+    function preg_last_error_msg(): string { return p\Php80::preg_last_error_msg(); }
+}
+if (!function_exists('str_contains')) {
+    function str_contains(string $haystack, string $needle): bool { return p\Php80::str_contains($haystack, $needle); }
+}
+if (!function_exists('str_starts_with')) {
+    function str_starts_with(string $haystack, string $needle): bool { return p\Php80::str_starts_with($haystack, $needle); }
+}
+if (!function_exists('str_ends_with')) {
+    function str_ends_with(string $haystack, string $needle): bool { return p\Php80::str_ends_with($haystack, $needle); }
+}
+if (!function_exists('get_debug_type')) {
+    function get_debug_type($value): string { return p\Php80::get_debug_type($value); }
+}
+if (!function_exists('get_resource_id')) {
+    function get_resource_id($res): int { return p\Php80::get_resource_id($res); }
+}

+ 40 - 0
vendor/symfony/polyfill-php80/composer.json

@@ -0,0 +1,40 @@
+{
+    "name": "symfony/polyfill-php80",
+    "type": "library",
+    "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+    "keywords": ["polyfill", "shim", "compatibility", "portable"],
+    "homepage": "https://symfony.com",
+    "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"
+        }
+    ],
+    "require": {
+        "php": ">=7.1"
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Polyfill\\Php80\\": "" },
+        "files": [ "bootstrap.php" ],
+        "classmap": [ "Resources/stubs" ]
+    },
+    "minimum-stability": "dev",
+    "extra": {
+        "branch-alias": {
+            "dev-main": "1.20-dev"
+        },
+        "thanks": {
+            "name": "symfony/polyfill",
+            "url": "https://github.com/symfony/polyfill"
+        }
+    }
+}

+ 3 - 0
vendor/symfony/service-contracts/.gitignore

@@ -0,0 +1,3 @@
+vendor/
+composer.lock
+phpunit.xml

+ 27 - 0
vendor/symfony/service-contracts/Attribute/Required.php

@@ -0,0 +1,27 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Contracts\Service\Attribute;
+
+use Attribute;
+
+/**
+ * A required dependency.
+ *
+ * This attribute indicates that a property holds a required dependency. The annotated property or method should be
+ * considered during the instantiation process of the containing class.
+ *
+ * @author Alexander M. Turek <me@derrabus.de>
+ */
+#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_PROPERTY)]
+final class Required
+{
+}

+ 5 - 0
vendor/symfony/service-contracts/CHANGELOG.md

@@ -0,0 +1,5 @@
+CHANGELOG
+=========
+
+The changelog is maintained for all Symfony contracts at the following URL:
+https://github.com/symfony/contracts/blob/master/CHANGELOG.md

+ 19 - 0
vendor/symfony/service-contracts/LICENSE

@@ -0,0 +1,19 @@
+Copyright (c) 2018-2020 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 9 - 0
vendor/symfony/service-contracts/README.md

@@ -0,0 +1,9 @@
+Symfony Service Contracts
+=========================
+
+A set of abstractions extracted out of the Symfony components.
+
+Can be used to build on semantics that the Symfony components proved useful - and
+that already have battle tested implementations.
+
+See https://github.com/symfony/contracts/blob/master/README.md for more information.

+ 30 - 0
vendor/symfony/service-contracts/ResetInterface.php

@@ -0,0 +1,30 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Contracts\Service;
+
+/**
+ * Provides a way to reset an object to its initial state.
+ *
+ * When calling the "reset()" method on an object, it should be put back to its
+ * initial state. This usually means clearing any internal buffers and forwarding
+ * the call to internal dependencies. All properties of the object should be put
+ * back to the same state it had when it was first ready to use.
+ *
+ * This method could be called, for example, to recycle objects that are used as
+ * services, so that they can be used to handle several requests in the same
+ * process loop (note that we advise making your services stateless instead of
+ * implementing this interface when possible.)
+ */
+interface ResetInterface
+{
+    public function reset();
+}

+ 126 - 0
vendor/symfony/service-contracts/ServiceLocatorTrait.php

@@ -0,0 +1,126 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Contracts\Service;
+
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\NotFoundExceptionInterface;
+
+// Help opcache.preload discover always-needed symbols
+class_exists(ContainerExceptionInterface::class);
+class_exists(NotFoundExceptionInterface::class);
+
+/**
+ * A trait to help implement ServiceProviderInterface.
+ *
+ * @author Robin Chalas <robin.chalas@gmail.com>
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+trait ServiceLocatorTrait
+{
+    private $factories;
+    private $loading = [];
+    private $providedTypes;
+
+    /**
+     * @param callable[] $factories
+     */
+    public function __construct(array $factories)
+    {
+        $this->factories = $factories;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * @return bool
+     */
+    public function has($id)
+    {
+        return isset($this->factories[$id]);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function get($id)
+    {
+        if (!isset($this->factories[$id])) {
+            throw $this->createNotFoundException($id);
+        }
+
+        if (isset($this->loading[$id])) {
+            $ids = array_values($this->loading);
+            $ids = \array_slice($this->loading, array_search($id, $ids));
+            $ids[] = $id;
+
+            throw $this->createCircularReferenceException($id, $ids);
+        }
+
+        $this->loading[$id] = $id;
+        try {
+            return $this->factories[$id]($this);
+        } finally {
+            unset($this->loading[$id]);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getProvidedServices(): array
+    {
+        if (null === $this->providedTypes) {
+            $this->providedTypes = [];
+
+            foreach ($this->factories as $name => $factory) {
+                if (!\is_callable($factory)) {
+                    $this->providedTypes[$name] = '?';
+                } else {
+                    $type = (new \ReflectionFunction($factory))->getReturnType();
+
+                    $this->providedTypes[$name] = $type ? ($type->allowsNull() ? '?' : '').($type instanceof \ReflectionNamedType ? $type->getName() : $type) : '?';
+                }
+            }
+        }
+
+        return $this->providedTypes;
+    }
+
+    private function createNotFoundException(string $id): NotFoundExceptionInterface
+    {
+        if (!$alternatives = array_keys($this->factories)) {
+            $message = 'is empty...';
+        } else {
+            $last = array_pop($alternatives);
+            if ($alternatives) {
+                $message = sprintf('only knows about the "%s" and "%s" services.', implode('", "', $alternatives), $last);
+            } else {
+                $message = sprintf('only knows about the "%s" service.', $last);
+            }
+        }
+
+        if ($this->loading) {
+            $message = sprintf('The service "%s" has a dependency on a non-existent service "%s". This locator %s', end($this->loading), $id, $message);
+        } else {
+            $message = sprintf('Service "%s" not found: the current service locator %s', $id, $message);
+        }
+
+        return new class($message) extends \InvalidArgumentException implements NotFoundExceptionInterface {
+        };
+    }
+
+    private function createCircularReferenceException(string $id, array $path): ContainerExceptionInterface
+    {
+        return new class(sprintf('Circular reference detected for service "%s", path: "%s".', $id, implode(' -> ', $path))) extends \RuntimeException implements ContainerExceptionInterface {
+        };
+    }
+}

+ 36 - 0
vendor/symfony/service-contracts/ServiceProviderInterface.php

@@ -0,0 +1,36 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Contracts\Service;
+
+use Psr\Container\ContainerInterface;
+
+/**
+ * A ServiceProviderInterface exposes the identifiers and the types of services provided by a container.
+ *
+ * @author Nicolas Grekas <p@tchwork.com>
+ * @author Mateusz Sip <mateusz.sip@gmail.com>
+ */
+interface ServiceProviderInterface extends ContainerInterface
+{
+    /**
+     * Returns an associative array of service types keyed by the identifiers provided by the current container.
+     *
+     * Examples:
+     *
+     *  * ['logger' => 'Psr\Log\LoggerInterface'] means the object provides a service named "logger" that implements Psr\Log\LoggerInterface
+     *  * ['foo' => '?'] means the container provides service name "foo" of unspecified type
+     *  * ['bar' => '?Bar\Baz'] means the container provides a service "bar" of type Bar\Baz|null
+     *
+     * @return string[] The provided service types, keyed by service names
+     */
+    public function getProvidedServices(): array;
+}

+ 53 - 0
vendor/symfony/service-contracts/ServiceSubscriberInterface.php

@@ -0,0 +1,53 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Contracts\Service;
+
+/**
+ * A ServiceSubscriber exposes its dependencies via the static {@link getSubscribedServices} method.
+ *
+ * The getSubscribedServices method returns an array of service types required by such instances,
+ * optionally keyed by the service names used internally. Service types that start with an interrogation
+ * mark "?" are optional, while the other ones are mandatory service dependencies.
+ *
+ * The injected service locators SHOULD NOT allow access to any other services not specified by the method.
+ *
+ * It is expected that ServiceSubscriber instances consume PSR-11-based service locators internally.
+ * This interface does not dictate any injection method for these service locators, although constructor
+ * injection is recommended.
+ *
+ * @author Nicolas Grekas <p@tchwork.com>
+ */
+interface ServiceSubscriberInterface
+{
+    /**
+     * Returns an array of service types required by such instances, optionally keyed by the service names used internally.
+     *
+     * For mandatory dependencies:
+     *
+     *  * ['logger' => 'Psr\Log\LoggerInterface'] means the objects use the "logger" name
+     *    internally to fetch a service which must implement Psr\Log\LoggerInterface.
+     *  * ['loggers' => 'Psr\Log\LoggerInterface[]'] means the objects use the "loggers" name
+     *    internally to fetch an iterable of Psr\Log\LoggerInterface instances.
+     *  * ['Psr\Log\LoggerInterface'] is a shortcut for
+     *  * ['Psr\Log\LoggerInterface' => 'Psr\Log\LoggerInterface']
+     *
+     * otherwise:
+     *
+     *  * ['logger' => '?Psr\Log\LoggerInterface'] denotes an optional dependency
+     *  * ['loggers' => '?Psr\Log\LoggerInterface[]'] denotes an optional iterable dependency
+     *  * ['?Psr\Log\LoggerInterface'] is a shortcut for
+     *  * ['Psr\Log\LoggerInterface' => '?Psr\Log\LoggerInterface']
+     *
+     * @return array The required service types, optionally keyed by service names
+     */
+    public static function getSubscribedServices();
+}

+ 63 - 0
vendor/symfony/service-contracts/ServiceSubscriberTrait.php

@@ -0,0 +1,63 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Contracts\Service;
+
+use Psr\Container\ContainerInterface;
+
+/**
+ * Implementation of ServiceSubscriberInterface that determines subscribed services from
+ * private method return types. Service ids are available as "ClassName::methodName".
+ *
+ * @author Kevin Bond <kevinbond@gmail.com>
+ */
+trait ServiceSubscriberTrait
+{
+    /** @var ContainerInterface */
+    protected $container;
+
+    public static function getSubscribedServices(): array
+    {
+        static $services;
+
+        if (null !== $services) {
+            return $services;
+        }
+
+        $services = \is_callable(['parent', __FUNCTION__]) ? parent::getSubscribedServices() : [];
+
+        foreach ((new \ReflectionClass(self::class))->getMethods() as $method) {
+            if ($method->isStatic() || $method->isAbstract() || $method->isGenerator() || $method->isInternal() || $method->getNumberOfRequiredParameters()) {
+                continue;
+            }
+
+            if (self::class === $method->getDeclaringClass()->name && ($returnType = $method->getReturnType()) && !$returnType->isBuiltin()) {
+                $services[self::class.'::'.$method->name] = '?'.($returnType instanceof \ReflectionNamedType ? $returnType->getName() : $type);
+            }
+        }
+
+        return $services;
+    }
+
+    /**
+     * @required
+     */
+    public function setContainer(ContainerInterface $container)
+    {
+        $this->container = $container;
+
+        if (\is_callable(['parent', __FUNCTION__])) {
+            return parent::setContainer($container);
+        }
+
+        return null;
+    }
+}

+ 92 - 0
vendor/symfony/service-contracts/Test/ServiceLocatorTest.php

@@ -0,0 +1,92 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Contracts\Service\Test;
+
+use PHPUnit\Framework\TestCase;
+use Psr\Container\ContainerInterface;
+use Symfony\Contracts\Service\ServiceLocatorTrait;
+
+abstract class ServiceLocatorTest extends TestCase
+{
+    protected function getServiceLocator(array $factories)
+    {
+        return new class($factories) implements ContainerInterface {
+            use ServiceLocatorTrait;
+        };
+    }
+
+    public function testHas()
+    {
+        $locator = $this->getServiceLocator([
+            'foo' => function () { return 'bar'; },
+            'bar' => function () { return 'baz'; },
+            function () { return 'dummy'; },
+        ]);
+
+        $this->assertTrue($locator->has('foo'));
+        $this->assertTrue($locator->has('bar'));
+        $this->assertFalse($locator->has('dummy'));
+    }
+
+    public function testGet()
+    {
+        $locator = $this->getServiceLocator([
+            'foo' => function () { return 'bar'; },
+            'bar' => function () { return 'baz'; },
+        ]);
+
+        $this->assertSame('bar', $locator->get('foo'));
+        $this->assertSame('baz', $locator->get('bar'));
+    }
+
+    public function testGetDoesNotMemoize()
+    {
+        $i = 0;
+        $locator = $this->getServiceLocator([
+            'foo' => function () use (&$i) {
+                ++$i;
+
+                return 'bar';
+            },
+        ]);
+
+        $this->assertSame('bar', $locator->get('foo'));
+        $this->assertSame('bar', $locator->get('foo'));
+        $this->assertSame(2, $i);
+    }
+
+    public function testThrowsOnUndefinedInternalService()
+    {
+        if (!$this->getExpectedException()) {
+            $this->expectException('Psr\Container\NotFoundExceptionInterface');
+            $this->expectExceptionMessage('The service "foo" has a dependency on a non-existent service "bar". This locator only knows about the "foo" service.');
+        }
+        $locator = $this->getServiceLocator([
+            'foo' => function () use (&$locator) { return $locator->get('bar'); },
+        ]);
+
+        $locator->get('foo');
+    }
+
+    public function testThrowsOnCircularReference()
+    {
+        $this->expectException('Psr\Container\ContainerExceptionInterface');
+        $this->expectExceptionMessage('Circular reference detected for service "bar", path: "bar -> baz -> bar".');
+        $locator = $this->getServiceLocator([
+            'foo' => function () use (&$locator) { return $locator->get('bar'); },
+            'bar' => function () use (&$locator) { return $locator->get('baz'); },
+            'baz' => function () use (&$locator) { return $locator->get('bar'); },
+        ]);
+
+        $locator->get('foo');
+    }
+}

+ 38 - 0
vendor/symfony/service-contracts/composer.json

@@ -0,0 +1,38 @@
+{
+    "name": "symfony/service-contracts",
+    "type": "library",
+    "description": "Generic abstractions related to writing services",
+    "keywords": ["abstractions", "contracts", "decoupling", "interfaces", "interoperability", "standards"],
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Nicolas Grekas",
+            "email": "p@tchwork.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=7.2.5",
+        "psr/container": "^1.0"
+    },
+    "suggest": {
+        "symfony/service-implementation": ""
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Contracts\\Service\\": "" }
+    },
+    "minimum-stability": "dev",
+    "extra": {
+        "branch-alias": {
+            "dev-master": "2.2-dev"
+        },
+        "thanks": {
+            "name": "symfony/contracts",
+            "url": "https://github.com/symfony/contracts"
+        }
+    }
+}

+ 3 - 0
vendor/topthink/think-captcha/.gitignore

@@ -0,0 +1,3 @@
+/vendor/
+/composer.lock
+.idea

+ 32 - 0
vendor/topthink/think-captcha/LICENSE

@@ -0,0 +1,32 @@
+
+ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
+版权所有Copyright © 2006-2016 by ThinkPHP (http://thinkphp.cn)
+All rights reserved。
+ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
+
+Apache Licence是著名的非盈利开源组织Apache采用的协议。
+该协议和BSD类似,鼓励代码共享和尊重原作者的著作权,
+允许代码修改,再作为开源或商业软件发布。需要满足
+的条件:
+1. 需要给代码的用户一份Apache Licence ;
+2. 如果你修改了代码,需要在被修改的文件中说明;
+3. 在延伸的代码中(修改和有源代码衍生的代码中)需要
+带有原来代码中的协议,商标,专利声明和其他原来作者规
+定需要包含的说明;
+4. 如果再发布的产品中包含一个Notice文件,则在Notice文
+件中需要带有本协议内容。你可以在Notice中增加自己的
+许可,但不可以表现为对Apache Licence构成更改。
+具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.

+ 33 - 0
vendor/topthink/think-captcha/README.md

@@ -0,0 +1,33 @@
+# think-captcha
+thinkphp5.1 验证码类库
+
+## 安装
+> composer require topthink/think-captcha
+
+
+##使用
+
+###模板里输出验证码
+
+~~~
+<div>{:captcha_img()}</div>
+~~~
+或者
+~~~
+<div><img src="{:captcha_src()}" alt="captcha" /></div>
+~~~
+> 上面两种的最终效果是一样的
+
+### 控制器里验证
+使用TP5的内置验证功能即可
+~~~
+$this->validate($data,[
+    'captcha|验证码'=>'require|captcha'
+]);
+~~~
+或者手动验证
+~~~
+if(!captcha_check($captcha)){
+ //验证失败
+};
+~~~

BIN
vendor/topthink/think-captcha/assets/bgs/1.jpg


BIN
vendor/topthink/think-captcha/assets/bgs/2.jpg


BIN
vendor/topthink/think-captcha/assets/bgs/3.jpg


BIN
vendor/topthink/think-captcha/assets/bgs/4.jpg


BIN
vendor/topthink/think-captcha/assets/bgs/5.jpg


BIN
vendor/topthink/think-captcha/assets/bgs/6.jpg


BIN
vendor/topthink/think-captcha/assets/bgs/7.jpg


BIN
vendor/topthink/think-captcha/assets/bgs/8.jpg


BIN
vendor/topthink/think-captcha/assets/ttfs/1.ttf


BIN
vendor/topthink/think-captcha/assets/ttfs/2.ttf


BIN
vendor/topthink/think-captcha/assets/ttfs/3.ttf


BIN
vendor/topthink/think-captcha/assets/ttfs/4.ttf


BIN
vendor/topthink/think-captcha/assets/ttfs/5.ttf


BIN
vendor/topthink/think-captcha/assets/ttfs/6.ttf


BIN
vendor/topthink/think-captcha/assets/zhttfs/1.ttf


+ 22 - 0
vendor/topthink/think-captcha/composer.json

@@ -0,0 +1,22 @@
+{
+    "name": "topthink/think-captcha",
+    "description": "captcha package for thinkphp5",
+    "authors": [
+        {
+            "name": "yunwuxin",
+            "email": "448901948@qq.com"
+        }
+    ],
+    "license": "Apache-2.0",
+    "require": {
+    	"topthink/framework": "5.1.*"
+    },
+    "autoload": {
+        "psr-4": {
+            "think\\captcha\\": "src/"
+        },
+        "files": [
+            "src/helper.php"
+        ]
+    }
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 320 - 0
vendor/topthink/think-captcha/src/Captcha.php


+ 23 - 0
vendor/topthink/think-captcha/src/CaptchaController.php

@@ -0,0 +1,23 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2006-2015 http://thinkphp.cn All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: yunwuxin <448901948@qq.com>
+// +----------------------------------------------------------------------
+
+namespace think\captcha;
+
+use think\facade\Config;
+
+class CaptchaController
+{
+    public function index($id = "")
+    {
+        $captcha = new Captcha((array) Config::pull('captcha'));
+        return $captcha->entry($id);
+    }
+}

+ 59 - 0
vendor/topthink/think-captcha/src/helper.php

@@ -0,0 +1,59 @@
+<?php
+// +----------------------------------------------------------------------
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2006-2015 http://thinkphp.cn All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+// +----------------------------------------------------------------------
+// | Author: yunwuxin <448901948@qq.com>
+// +----------------------------------------------------------------------
+
+Route::get('captcha/[:id]', "\\think\\captcha\\CaptchaController@index");
+
+Validate::extend('captcha', function ($value, $id = '') {
+    return captcha_check($value, $id);
+});
+
+Validate::setTypeMsg('captcha', ':attribute错误!');
+
+/**
+ * @param string $id
+ * @param array  $config
+ * @return \think\Response
+ */
+function captcha($id = '', $config = [])
+{
+    $captcha = new \think\captcha\Captcha($config);
+    return $captcha->entry($id);
+}
+
+/**
+ * @param $id
+ * @return string
+ */
+function captcha_src($id = '')
+{
+    return Url::build('/captcha' . ($id ? "/{$id}" : ''));
+}
+
+/**
+ * @param $id
+ * @return mixed
+ */
+function captcha_img($id = '')
+{
+    return '<img src="' . captcha_src($id) . '" alt="captcha" />';
+}
+
+/**
+ * @param        $value
+ * @param string $id
+ * @param array  $config
+ * @return bool
+ */
+function captcha_check($value, $id = '')
+{
+    $captcha = new \think\captcha\Captcha((array) Config::pull('captcha'));
+    return $captcha->check($value, $id);
+}