diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..da112a1
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Файлы, игнорируемые по умолчанию
+/shelf/
+/workspace.xml
+# Запросы HTTP-клиента в редакторе
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/anb_php_components_pack.iml b/.idea/anb_php_components_pack.iml
new file mode 100644
index 0000000..b0be567
--- /dev/null
+++ b/.idea/anb_php_components_pack.iml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..a64a26d
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/php-test-framework.xml b/.idea/php-test-framework.xml
new file mode 100644
index 0000000..9e52408
--- /dev/null
+++ b/.idea/php-test-framework.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/php.xml b/.idea/php.xml
new file mode 100644
index 0000000..957357b
--- /dev/null
+++ b/.idea/php.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/phpunit.xml b/.idea/phpunit.xml
new file mode 100644
index 0000000..4f8104c
--- /dev/null
+++ b/.idea/phpunit.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..7ddb4aa
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,36 @@
+{
+ "name": "goodboyalex/php_components_pack",
+ "description": "[RU] Набор компонентов для сайта на PHP / [EN] A set of components for PHP website",
+ "minimum-stability": "dev",
+ "keywords": [
+ "components"
+ ],
+ "homepage": "https://gitverse.ru/babaev-an/anb_php_components_pack",
+ "license": "GPL-3.0-or-later",
+ "type": "library",
+ "authors": [
+ {
+ "name": "Alexander Babaev",
+ "email": "contact_with_us@babaev-an.ru"
+ }
+ ],
+ "require": {
+ "php": ">=8.4",
+ "ext-mbstring": "*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": ">=11.5.6"
+ },
+ "autoload": {
+ "psr-4": {
+ "goodboyalex\\php_components_pack\\": "sources",
+ "goodboyalex\\php_components_pack\\classes\\": "sources/classes",
+ "goodboyalex\\php_components_pack\\enums\\": "sources/enums",
+ "goodboyalex\\php_components_pack\\extensions\\": "sources/extensions",
+ "goodboyalex\\php_components_pack\\interfaces\\": "sources/interfaces",
+ "goodboyalex\\php_components_pack\\models\\": "sources/models",
+ "goodboyalex\\php_components_pack\\traits\\": "sources/traits",
+ "goodboyalex\\php_components_pack\\tests\\": "tests"
+ }
+ }
+}
\ No newline at end of file
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000..86e9e65
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,1613 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "397ce2fd8c196db9f04cbac66a42584e",
+ "packages": [],
+ "packages-dev": [
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "4764e040f8743e92b86c36f488f32d0265dd1dae"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/4764e040f8743e92b86c36f488f32d0265dd1dae",
+ "reference": "4764e040f8743e92b86c36f488f32d0265dd1dae",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3 <3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpspec/prophecy": "^1.10",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "default-branch": true,
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.x"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-11-26T13:04:49+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v5.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "447a020a1f875a434d62f2a401f53b82a396e494"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494",
+ "reference": "447a020a1f875a434d62f2a401f53b82a396e494",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0"
+ },
+ "time": "2024-12-30T11:07:19+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "time": "2022-02-21T01:04:05+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "30b614244b02907cf0b2edc559fd5e24bd05ea57"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/30b614244b02907cf0b2edc559fd5e24bd05ea57",
+ "reference": "30b614244b02907cf0b2edc559fd5e24bd05ea57",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^5.4.0",
+ "php": ">=8.3",
+ "phpunit/php-file-iterator": "^6.0-dev",
+ "phpunit/php-text-template": "^5.0-dev",
+ "sebastian/complexity": "^5.0-dev",
+ "sebastian/environment": "^8.0-dev",
+ "sebastian/lines-of-code": "^4.0-dev",
+ "sebastian/version": "^6.0-dev",
+ "theseer/tokenizer": "^1.2.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "suggest": {
+ "ext-pcov": "PHP extension that provides line coverage",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "12.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-28T10:09:07+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "a1339a60b2206324e440c4a3806bbd873fda0860"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a1339a60b2206324e440c4a3806bbd873fda0860",
+ "reference": "a1339a60b2206324e440c4a3806bbd873fda0860",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-15T13:41:39+00:00"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "a79e641e661a20d3b8c264b0b3b9eb0d98f98506"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/a79e641e661a20d3b8c264b0b3b9eb0d98f98506",
+ "reference": "a79e641e661a20d3b8c264b0b3b9eb0d98f98506",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "security": "https://github.com/sebastianbergmann/php-invoker/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T08:05:12+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "0199874fd3f2ae19aa9813bdfcb68e67671eee64"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0199874fd3f2ae19aa9813bdfcb68e67671eee64",
+ "reference": "0199874fd3f2ae19aa9813bdfcb68e67671eee64",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T08:08:04+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "aa0f95babbd87f096f1c20364204f195dd4b4608"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/aa0f95babbd87f096f1c20364204f195dd4b4608",
+ "reference": "aa0f95babbd87f096f1c20364204f195dd4b4608",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "8.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "security": "https://github.com/sebastianbergmann/php-timer/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T08:10:48+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "9f2ebaf18f7741a5ee587f80a42632edaa42d424"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9f2ebaf18f7741a5ee587f80a42632edaa42d424",
+ "reference": "9f2ebaf18f7741a5ee587f80a42632edaa42d424",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.12.1",
+ "phar-io/manifest": "^2.0.4",
+ "phar-io/version": "^3.2.1",
+ "php": ">=8.3",
+ "phpunit/php-code-coverage": "^12.0-dev",
+ "phpunit/php-file-iterator": "^6.0-dev",
+ "phpunit/php-invoker": "^6.0-dev",
+ "phpunit/php-text-template": "^5.0-dev",
+ "phpunit/php-timer": "^8.0-dev",
+ "sebastian/cli-parser": "^4.0-dev",
+ "sebastian/comparator": "^7.0-dev",
+ "sebastian/diff": "^7.0-dev",
+ "sebastian/environment": "^8.0-dev",
+ "sebastian/exporter": "^7.0-dev",
+ "sebastian/global-state": "^8.0-dev",
+ "sebastian/object-enumerator": "^7.0-dev",
+ "sebastian/type": "^6.0-dev",
+ "sebastian/version": "^6.0-dev",
+ "staabm/side-effects-detector": "^1.0.5"
+ },
+ "default-branch": true,
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "12.0-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsors.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-01-31T07:29:09+00:00"
+ },
+ {
+ "name": "sebastian/cli-parser",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "7f79d38ab02a0cb4089f31207ca11b74f49c7848"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/7f79d38ab02a0cb4089f31207ca11b74f49c7848",
+ "reference": "7f79d38ab02a0cb4089f31207ca11b74f49c7848",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T08:13:26+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "07f683f544931bc816c47faf894e387f2216a1e9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/07f683f544931bc816c47faf894e387f2216a1e9",
+ "reference": "07f683f544931bc816c47faf894e387f2216a1e9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "php": ">=8.3",
+ "sebastian/diff": "^7.0",
+ "sebastian/exporter": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "suggest": {
+ "ext-bcmath": "For comparing BcMath\\Number objects"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "security": "https://github.com/sebastianbergmann/comparator/security/policy",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T09:21:21+00:00"
+ },
+ {
+ "name": "sebastian/complexity",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "eec688b04904c5ecfa3b94f59bc60485209805a9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/eec688b04904c5ecfa3b94f59bc60485209805a9",
+ "reference": "eec688b04904c5ecfa3b94f59bc60485209805a9",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "security": "https://github.com/sebastianbergmann/complexity/security/policy",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T08:20:43+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "87a9594e6994ba8ee9010836903305a64c895083"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/87a9594e6994ba8ee9010836903305a64c895083",
+ "reference": "87a9594e6994ba8ee9010836903305a64c895083",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "security": "https://github.com/sebastianbergmann/diff/security/policy",
+ "source": "https://github.com/sebastianbergmann/diff/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T09:04:01+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "92b1a897b49e191a8fbca823d75bc0e157ff7cdb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/92b1a897b49e191a8fbca823d75bc0e157ff7cdb",
+ "reference": "92b1a897b49e191a8fbca823d75bc0e157ff7cdb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "8.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "https://github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "security": "https://github.com/sebastianbergmann/environment/security/policy",
+ "source": "https://github.com/sebastianbergmann/environment/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T08:28:42+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "17e38c7a602c690c6f097b6aeaf47d0771ace9ca"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/17e38c7a602c690c6f097b6aeaf47d0771ace9ca",
+ "reference": "17e38c7a602c690c6f097b6aeaf47d0771ace9ca",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": ">=8.3",
+ "sebastian/recursion-context": "^7.0-dev"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "security": "https://github.com/sebastianbergmann/exporter/security/policy",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T08:54:00+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "8a089e5a2a118a6725b603a47be1d1a9da1b9a68"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/8a089e5a2a118a6725b603a47be1d1a9da1b9a68",
+ "reference": "8a089e5a2a118a6725b603a47be1d1a9da1b9a68",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3",
+ "sebastian/object-reflector": "^5.0",
+ "sebastian/recursion-context": "^7.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "8.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "https://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "security": "https://github.com/sebastianbergmann/global-state/security/policy",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T09:14:38+00:00"
+ },
+ {
+ "name": "sebastian/lines-of-code",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "fe8070ab1160c447839048ab240c07c448caa2b2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/fe8070ab1160c447839048ab240c07c448caa2b2",
+ "reference": "fe8070ab1160c447839048ab240c07c448caa2b2",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T08:36:53+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "250d806a14baca8c4b37823426277dbcb8d4440d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/250d806a14baca8c4b37823426277dbcb8d4440d",
+ "reference": "250d806a14baca8c4b37823426277dbcb8d4440d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3",
+ "sebastian/object-reflector": "^5.0",
+ "sebastian/recursion-context": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T08:38:51+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "7dddd66b56ba05cb474de46b2b623e92b42bff3a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/7dddd66b56ba05cb474de46b2b623e92b42bff3a",
+ "reference": "7dddd66b56ba05cb474de46b2b623e92b42bff3a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "security": "https://github.com/sebastianbergmann/object-reflector/security/policy",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T08:40:54+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "c9442e27dc9965ad453397725830d8ecb5497410"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/c9442e27dc9965ad453397725830d8ecb5497410",
+ "reference": "c9442e27dc9965ad453397725830d8ecb5497410",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T08:53:18+00:00"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "b07de32ccc63961cfcf87c4531816388dbaf264f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b07de32ccc63961cfcf87c4531816388dbaf264f",
+ "reference": "b07de32ccc63961cfcf87c4531816388dbaf264f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "security": "https://github.com/sebastianbergmann/type/security/policy",
+ "source": "https://github.com/sebastianbergmann/type/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T08:45:13+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "3e8786f0e004140c3be066577af51e7ea0446e54"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e8786f0e004140c3be066577af51e7ea0446e54",
+ "reference": "3e8786f0e004140c3be066577af51e7ea0446e54",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "security": "https://github.com/sebastianbergmann/version/security/policy",
+ "source": "https://github.com/sebastianbergmann/version/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-01-16T08:47:17+00:00"
+ },
+ {
+ "name": "staabm/side-effects-detector",
+ "version": "1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/staabm/side-effects-detector.git",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.6",
+ "phpunit/phpunit": "^9.6.21",
+ "symfony/var-dumper": "^5.4.43",
+ "tomasvotruba/type-coverage": "1.0.0",
+ "tomasvotruba/unused-public": "1.0.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "lib/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A static analysis tool to detect side effects in PHP code",
+ "keywords": [
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/staabm/side-effects-detector/issues",
+ "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/staabm",
+ "type": "github"
+ }
+ ],
+ "time": "2024-10-20T05:08:20+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:36:25+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "dev",
+ "stability-flags": {},
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=8.4",
+ "ext-mbstring": "*"
+ },
+ "platform-dev": {},
+ "plugin-api-version": "2.6.0"
+}
diff --git a/index.php b/index.php
new file mode 100644
index 0000000..287914c
--- /dev/null
+++ b/index.php
@@ -0,0 +1,6 @@
+Value = $defValue;
+ }
+
+ /**
+ * При выводе GetStringMessages выводит только ошибки.
+ *
+ * @return Closure Возвращает функцию, проверяющую сообщение на соответствие типу.
+ */
+ public static function GET_STRING_ERROR_ONLY (): Closure
+ {
+ return fn (ActionStateMessageModel $message)
+ => $message->MessageType === MessageType::Error;
+ }
+
+ /**
+ * При выводе GetStringMessages выводит ошибки и предупреждения.
+ *
+ * @return Closure Возвращает функцию, проверяющую сообщение на соответствие типу.
+ */
+ public static function GET_STRING_ERROR_AND_WARNING (): Closure
+ {
+ return fn (ActionStateMessageModel $message)
+ => $message->MessageType === MessageType::Error
+ || $message->MessageType === MessageType::Warning;
+ }
+
+ /**
+ * При выводе GetStringMessages выводит все сообщения.
+ *
+ * @return Closure Возвращает функцию, проверяющую сообщение на соответствие типу.
+ */
+ public static function GET_STRING_ALL (): Closure
+ {
+ return fn (ActionStateMessageModel $message) => true;
+ }
+
+ /**
+ * Добавляет данные из другого состояния.
+ *
+ * @param ActionState $state Другое состояние
+ * @param bool $clearAllBefore Очищать сообщения перед добавлением (true) или просто добавить к текущим (false)
+ *
+ * @return void
+ */
+ public function AddState (ActionState $state, bool $clearAllBefore = false): void
+ {
+ // Если нужно очистить список сообщений
+ if ($clearAllBefore)
+ // - то очищаю список сообщений
+ $this->Clear(fn (ActionStateMessageModel $message) => true);
+
+ // Добавляю сообщения из другого состояния
+ $this->AddRange($state->GetMessages(function (ActionStateMessageModel $message)
+ {
+ return true;
+ }));
+
+ // Добавляю значение
+ $this->Value = $state->Value;
+ }
+
+ /**
+ * Очищает список сообщений, согласно условию.
+ *
+ * @param callable $predicate Условие выборки
+ *
+ * @return void
+ */
+ public function Clear (callable $predicate): void
+ {
+ // Выбираю все сообщения, удовлетворяющие условию
+ $list = $this->GetMessages($predicate);
+
+ // Удаляю их из списка
+ $this->Messages = array_diff($this->Messages, $list);
+ }
+
+ /**
+ * Выбирает сообщения по условию predicate.
+ *
+ * @param callable $predicate Условие выборки
+ *
+ * @return array Список отобранных сообщений
+ */
+ public function GetMessages (callable $predicate): array
+ {
+ // Получаю список элементов
+ $list = [];
+
+ // Для каждого элемента
+ foreach ($this->Messages as $actionStateMessage)
+ // - если он подходит под условие
+ if ($predicate($actionStateMessage))
+ // - добавляю его в список
+ $list[] = $actionStateMessage;
+
+ // Возвращаю список
+ return $list;
+ }
+
+ /**
+ * Добавляет список
+ *
+ * @param array $messages Список сообщений
+ *
+ * @return void
+ */
+ public function AddRange (array $messages): void
+ {
+ $this->Messages = array_merge($this->Messages, $messages);
+ }
+
+ /**
+ * Возвращает список сообщений (параметр Message у каждого сообщения).
+ *
+ * @param callable $predicate Условие выборки
+ * @param string $separator Разделитель
+ *
+ * @return string Список сообщений
+ */
+ public function GetStringMessages (callable $predicate, string $separator = '\n'): string
+ {
+ // Делаю выборку
+ $list = $this->GetMessages($predicate);
+
+ // Формирую список сообщений
+ $result = [];
+
+ // Для каждого сообщения из выборки
+ foreach ($list as $message) {
+ // - если оно не нужного нам класса
+ if (!$message instanceof ActionStateMessageModel)
+ // -- то пропускаю
+ continue;
+
+ // - добавляю сообщение
+ $result[] = $message->Message;
+ }
+
+ // Возвращаю список
+ return implode($separator, $result);
+ }
+
+ /**
+ * Добавляет сообщение о критической ошибке.
+ *
+ * @param string $message Сообщение
+ *
+ * @return void
+ */
+ public function AddCritical (string $message): void
+ {
+ $this->Add(new ActionStateMessageModel(MessageType::Error, true, $message));
+ }
+
+ /**
+ * Добавление сообщения.
+ *
+ * @param ActionStateMessageModel $message Сообщение
+ *
+ * @return void
+ */
+ public function Add (ActionStateMessageModel $message): void
+ {
+ $this->Messages[] = $message;
+ }
+
+ /**
+ * Добавляет сообщение об ошибке.
+ *
+ * @param string $message Сообщение
+ *
+ * @return void
+ */
+ public function AddError (string $message): void
+ {
+ $this->Add(new ActionStateMessageModel(MessageType::Error, false, $message));
+ }
+
+ /**
+ * Добавляет предупреждение.
+ *
+ * @param string $message Сообщение.
+ *
+ * @return void
+ */
+ public function AddWarning (string $message): void
+ {
+ $this->Add(new ActionStateMessageModel(MessageType::Warning, false, $message));
+ }
+
+ /**
+ * Добавляет информационное сообщение.
+ *
+ * @param string $message Сообщение.
+ *
+ * @return void
+ */
+ public function AddInfo (string $message): void
+ {
+ $this->Add(new ActionStateMessageModel(MessageType::Info, false, $message));
+ }
+
+ /**
+ * Проверяет, есть ли информационные сообщения.
+ *
+ * @return bool Наличие сообщений
+ */
+ public function HasInfos (): bool
+ {
+ return $this->Count(fn (ActionStateMessageModel $message) => $message->MessageType == MessageType::Info) > 0;
+ }
+
+ /**
+ * Количество сообщений, удовлетворяющих условию.
+ *
+ * @param callable $predicate Условие выборки
+ *
+ * @return int Число сообщений
+ */
+ public function Count (callable $predicate): int
+ {
+ // Получаю список сообщений
+ $list = $this->GetMessages($predicate);
+
+ // Возвращаю результат
+ return count($list);
+ }
+
+ /**
+ * Проверяет, успешно ли завершилась операция.
+ *
+ * @param bool $onlyCritical Игнорировать все некритические ошибки и предупреждения (не рекомендуется!)
+ *
+ * @return bool Успешно ли завершилась операция.
+ */
+ public function IsSuccess (bool $onlyCritical = false): bool
+ {
+ // Если нужно учитывать только критические ошибки
+ if ($onlyCritical)
+ // - то проверяю наличие критических ошибок
+ return !$this->HasErrors($onlyCritical);
+
+ // Возвращаю результат
+ return !$this->HasErrors() && !$this->HasWarnings();
+ }
+
+ /**
+ * Проверяет, есть ли ошибки.
+ *
+ * @param bool $onlyCritical Учитывать только критические ошибки.
+ *
+ * @return bool Наличие ошибок.
+ */
+ public function HasErrors (bool $onlyCritical = false): bool
+ {
+ return $this->Count(function (ActionStateMessageModel $message) use ($onlyCritical): bool
+ {
+ // - сравниваю тип сообщения
+ if ($message->MessageType != MessageType::Error)
+ // -- если не совпадает, то возвращаю false
+ return false;
+
+ // - если нужно выводить только критические ошибки, а сообщение не критическое
+ if ($onlyCritical && !$message->IsCritical)
+ // -- то возвращаю false
+ return false;
+
+ // Возвращаю true
+ return true;
+ });
+ }
+
+ /**
+ * Проверяет, есть ли предупреждения.
+ *
+ * @return bool Наличие предупреждений
+ */
+ public function HasWarnings (): bool
+ {
+ return $this->Count(fn (ActionStateMessageModel $message) => $message->MessageType == MessageType::Warning) > 0;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function Serialize (): string
+ {
+ // Создаю список сообщений
+ $list = [];
+
+ // Для каждого сообщения
+ foreach ($this->Messages as $message)
+ // - сериализую его и добавляю в список
+ $list[] = $message->Serialize();
+
+ // Возвращаю результат
+ return serialize($list);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function UnSerialize (string $serialized): void
+ {
+ // Очищаю список сообщений
+ $this->Clear(fn (ActionStateMessageModel $message) => true);
+
+ // Десериализую список сообщений
+ $list = unserialize($serialized);
+
+ // Для каждого сообщения
+ foreach ($list as $messageSerialized) {
+ // - создаю новое сообщение
+ $message = new ActionStateMessageModel();
+ // - десериализую его
+ $message->UnSerialize($messageSerialized);
+ // - добавляю в список
+ $this->Add($message);
+ }
+ }
+}
\ No newline at end of file
diff --git a/sources/classes/ClassMapper.php b/sources/classes/ClassMapper.php
new file mode 100644
index 0000000..1d7cfa3
--- /dev/null
+++ b/sources/classes/ClassMapper.php
@@ -0,0 +1,335 @@
+ [],
+ 'allowed' => []
+ ];
+
+ /**
+ * Передаёт одинаковые параметры из класса $from в класс $to, учитывая игнорируемые ($ignoredProperties) и
+ * разрешенные ($allowedProperties) свойства.
+ *
+ * @param object $from Класс-донор
+ * @param object $to Класс-приемник
+ * @param array $options Параметры привязки свойств (см атрибут Bind).
+ *
+ * @return void
+ */
+ public static function MapClass (object $from, object $to, array $options = self::DefaultOptions): void
+ {
+ // Если есть игнорируемые или разрешенные свойства
+ if (!(count($options['ignored']) == 0 && count($options['allowed']) == 0))
+ // -- то для каждого игнорируемого свойства
+ foreach ($options['ignored'] as $ignoredProperty)
+ // --- и если оно есть в массиве разрешенных
+ if (in_array($ignoredProperty, $options['allowed']))
+ // ---- то исключаю его из массива разрешенных
+ unset($options['allowed'][array_search($ignoredProperty, $options['allowed'])]);
+
+ // Получаю массив свойств
+ $properties = get_class_vars(get_class($from));
+
+ // Для каждого элемента массива
+ foreach ($properties as $name => $value) {
+ // - если свойство игнорируется
+ if (in_array($name, $options['ignored']))
+ // -- пропускаю
+ continue;
+
+ // - если свойство не разрешено
+ if (count($options['allowed']) > 0 && !in_array($name, $options['allowed']))
+ // -- пропускаю
+ continue;
+
+ // - если свойство есть в объекте
+ if (property_exists($to, $name))
+ // -- то присваиваю значение
+ $to->$name = $from->$name;
+ }
+ }
+
+ /**
+ * Подготавливает значения свойств класса.
+ *
+ * @param array $params Данные запроса.
+ * @param ReflectionClass $classReflector Анализатор класса.
+ * @param array $options Массив свойств привязки.
+ *
+ * @return array Массив данных класса.
+ */
+ public static function PrepareClassProperties (array $params, ReflectionClass $classReflector,
+ array $options = self::DefaultOptions): array
+ {
+ // Создаю массив данных класса
+ $classData = [];
+
+ // Для каждого свойства класса
+ foreach ($classReflector->getProperties() as $property) {
+ // - получаю имя свойства
+ $propertyName = $property->getName();
+
+ // - если это свойство задано в массиве параметров
+ if (array_key_exists($propertyName, $params)) {
+ // -- если задан массив разрешённых свойств
+ if (!empty($options["allowed"]))
+ // --- если свойство не разрешено
+ if (!in_array($propertyName, $options["allowed"]))
+ // ---- то пропускаю
+ continue;
+
+ // -- если задан массив запрещённых свойств
+ if (!empty($options["ignored"]))
+ // --- если свойство должно игнорироваться
+ if (in_array($propertyName, $options["ignored"]))
+ // ---- то пропускаю
+ continue;
+
+ // -- добавляю значение свойства в результат
+ $classData[$propertyName] = $params[$propertyName];
+ }
+ else {
+ // - в противном случае, пробегаю массив параметров
+ foreach ($params as $key => $value) {
+ // -- если в имени параметра есть разделитель "_"
+ if (str_starts_with($key, $propertyName . "_")) {
+ // -- разбиваю имя параметра на части
+ $keyParts = explode("_", $key);
+
+ // -- добавляю значение свойства в результат
+ self::GetClassParametersArrayParser($classData, $keyParts, $value);
+ }
+ }
+ }
+ }
+
+ // Возвращаю массив данных класса
+ return $classData;
+ }
+
+ /**
+ * Парсит массив свойств класса.
+ *
+ * @param array $source Исходный массив (он же и результат парсинга).
+ * @param array $parametersKeys Массив имен свойств. Например, Page_Meta_Id должен быть разбит на
+ * ["Page", "Meta", "Id"].
+ * @param mixed $value Значение свойства.
+ * @param array $options Массив параметров привязки свойств.
+ *
+ * @return void
+ */
+ public static function GetClassParametersArrayParser (array &$source, array $parametersKeys, mixed $value,
+ array $options = self::DefaultOptions): void
+ {
+ // Если массив имен свойств пустой
+ if (empty($parametersKeys))
+ // - то прерываю парсинг
+ return;
+
+ // Получаю имя текущего свойства
+ $currentName = array_shift($parametersKeys);
+
+ // Если текущего свойства нет в массиве
+ if (!isset($source[$currentName]))
+ // - то создаю его
+ $source[$currentName] = [];
+
+ // Если массив имен свойств содержит только одно свойство
+ if (count($parametersKeys) === 0) {
+ // - если задан массив разрешённых свойств
+ if (!empty($options["allowed"]))
+ // --- если свойство не разрешено
+ if (!in_array($currentName, $options["allowed"]))
+ // ---- то пропускаю
+ return;
+
+ // -- если задан массив запрещённых свойств
+ if (!empty($options["ignored"]))
+ // --- если свойство должно игнорироваться
+ if (in_array($currentName, $options["ignored"]))
+ // ---- то пропускаю
+ return;
+
+ // - добавляю значение свойства в результат
+ $source[$currentName] = $value;
+ }
+ else
+ // - иначе продолжаю парсинг
+ self::GetClassParametersArrayParser($source[$currentName], $parametersKeys, $value, $options);
+ }
+
+ /**
+ * Переводит данные из массива в объект класса.
+ *
+ * @param string $className Имя класса
+ * @param array $properties Массив данных
+ *
+ * @return mixed Объект класса
+ * @throws Exception
+ */
+ public static function MapToClassProperty (string $className, array $properties): mixed
+ {
+ // Создаю
+ try {
+ $classReflector = new ReflectionClass($className);
+
+ // Создаю объект класса
+ $classObj = new $className();
+
+ // Для каждого свойства класса
+ foreach ($properties as $key => $value) {
+ // - проверяю наличие свойства
+ if (!$classReflector->hasProperty($key))
+ // -- иду к следующему
+ continue;
+
+ // - получаю данные про свойство
+ // -- само свойство
+ $property = $classReflector->getProperty($key);
+ // -- тип свойства
+ $propertyType = $property->getType();
+
+ // - если значение является классом
+ if (!$propertyType->isBuiltin() && is_array($value)) {
+ // -- присваиваю объект
+ self::SetParameterToClass($classReflector, $key, $classObj,
+ self::MapToClassProperty($propertyType->getName(), $value));
+
+ // -- следующий элемент
+ continue;
+ }
+
+ // - если значение является датой
+ if ($classObj->$key instanceof DateTimeInterface) {
+ // -- получаю дату
+ $dateValue = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $value . " 00:00:00");
+
+ // -- если не получилось
+ if ($dateValue === false)
+ // --- то добавляю дату по умолчанию (1970-01-01 00:00:00)
+ $dateValue = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', "1970-01-01 00:00:00");
+
+ // -- присваиваю дату
+ self::SetParameterToClass($classReflector, $key, $classObj, $dateValue);
+
+ // -- следующий элемент
+ continue;
+ }
+
+ // - если значение является перечислением
+ if ($classObj->$key instanceof UnitEnum) {
+ // -- если значение уже является перечислением
+ if ($value instanceof UnitEnum)
+ // --- присваиваю перечисление
+ self::SetParameterToClass($classReflector, $key, $classObj, $value);
+ else
+ // -- иначе
+ self::SetParameterToClass($classReflector, $key, $classObj,
+ is_numeric($value) ? $classObj->$key::FromInt($value) : $classObj->$key::FromName($value));
+
+ // -- следующий элемент
+ continue;
+ }
+
+ // - если значение является NULL
+ if ($value == "null") {
+ // -- присваиваю NULL
+ self::SetParameterToClass($classReflector, $key, $classObj,
+ is_array($key) ? [] : null);
+
+ // -- следующий элемент
+ continue;
+ }
+
+ // - присваиваю значение
+ self::SetParameterToClass($classReflector, $key, $classObj, $value);
+ }
+
+ // Возвращаю объект класса
+ return $classObj;
+ }
+ catch (Exception $exception) {
+ throw new Exception($exception->getMessage());
+ }
+ }
+
+ /**
+ * Присваивает значение параметра объекту класса.
+ *
+ * @param ReflectionClass $classReflector Рефлектор класса.
+ * @param string $propertyName Имя свойства.
+ * @param mixed $classObj Объект класса.
+ * @param mixed $value Значение.
+ *
+ * @throws Exception
+ */
+ public static function SetParameterToClass (ReflectionClass $classReflector, string $propertyName,
+ mixed $classObj, mixed $value): void
+ {
+ try {
+ // Получаю свойство
+ $property = $classReflector->getProperty($propertyName);
+
+ /**
+ * Устанавливаю доступ значения свойства.
+ *
+ * @noinspection PhpExpressionResultUnusedInspection
+ */
+ $property->setAccessible(true);
+
+ // Если значение null
+ if ($value == null || $value == "null")
+ // - то присваиваю значение по умолчанию
+ $value = self::GetDefaults($property->getType()->getName());
+
+ // Присваиваю значение
+ $property->setValue($classObj, $value);
+ }
+ catch (ReflectionException $exception) {
+ // Выбрасываю исключение
+ throw new Exception($exception->getMessage());
+ }
+ }
+
+ /**
+ * Получает значение по умолчанию для разных типов данных.
+ *
+ * @param string $typeName Имя типа данных.
+ *
+ * @return mixed|null Результат.
+ */
+ public static function GetDefaults (string $typeName): mixed
+ {
+ return match ($typeName) {
+ 'int' => 0,
+ 'float' => 0.0,
+ 'bool' => false,
+ 'string' => '',
+ 'array' => [],
+ 'object' => new stdClass(),
+ default => null,
+ };
+ }
+}
\ No newline at end of file
diff --git a/sources/classes/ObjectArray.php b/sources/classes/ObjectArray.php
new file mode 100644
index 0000000..ff34cb5
--- /dev/null
+++ b/sources/classes/ObjectArray.php
@@ -0,0 +1,60 @@
+Container = $array;
+ }
+
+ /**
+ * Возвращает массив объектов, хранящихся в данном классе.
+ *
+ * @return array Массив объектов, хранящихся в данном классе.
+ */
+ public function ToArray (): array
+ {
+ return $this->Container;
+ }
+}
\ No newline at end of file
diff --git a/sources/enums/MessageType.php b/sources/enums/MessageType.php
new file mode 100644
index 0000000..e00f6f6
--- /dev/null
+++ b/sources/enums/MessageType.php
@@ -0,0 +1,39 @@
+ !is_null($value) && $value !== '');
+
+ // Переиндексируем массив
+ if ($reOrder)
+ $result = array_values($result);
+
+ // Возвращаем результат
+ return $result;
+ }
+
+ /**
+ * Выделяет в смешанном массиве ассоциативный массив
+ *
+ * @param array $array Исходный массив
+ *
+ * @return array Ассоциативный массив, содержащийся в исходном массиве
+ */
+ public static function GetAssociativePart (array $array): array
+ {
+ // Фильтруем массив, оставляя только элементы со строковыми ключами
+ return array_filter($array, fn ($key) => self::IsStringKey($key), ARRAY_FILTER_USE_KEY);
+ }
+
+ /**
+ * Функция для проверки, является ли ключ строковым
+ *
+ * @param mixed $key Ключ
+ *
+ * @return bool Является ли ключ строковым типом
+ */
+ public static function IsStringKey (mixed $key): bool
+ {
+ return !is_int($key);
+ }
+}
\ No newline at end of file
diff --git a/sources/extensions/GUIDExtension.php b/sources/extensions/GUIDExtension.php
new file mode 100644
index 0000000..fb5b289
--- /dev/null
+++ b/sources/extensions/GUIDExtension.php
@@ -0,0 +1,147 @@
+MessageType = $type;
+ $this->IsCritical = $isCritical;
+ $this->Message = $message;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function UnSerialize (string $serialized): void
+ {
+ // Десериализую массив
+ $thisNew = unserialize($serialized);
+
+ try {
+ // Получаю класс
+ $class = ClassMapper::MapToClassProperty(get_class($this), $thisNew);
+ }
+ catch (Exception) {
+ $class = new ActionStateMessageModel();
+ }
+
+ // Заполняю текущий класс
+ ClassMapper::MapClass($class, $this);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function Serialize (): string
+ {
+ // Создаю массив результата
+ $result = [];
+
+ // Получаю свойства класса
+ $properties = get_object_vars($this);
+
+ // Для каждого свойства класса
+ foreach ($properties as $key => $value) {
+
+ // - если значение является перечислением
+ if ($value instanceof UnitEnum) {
+ // -- получаю перечисление
+ $result[$key] = $value->name;
+
+ // -- следующий элемент
+ continue;
+ }
+
+ // - если значение является NULL
+ if ($value == null) {
+ // -- присваиваю NULL
+ $result[$key] = "null";
+ // -- следующий элемент
+ continue;
+ }
+
+ // - присваиваю значение
+ $result[$key] = $value;
+ }
+
+ // Сериализую массив и вывожу его
+ return serialize($result);
+ }
+}
\ No newline at end of file
diff --git a/sources/traits/EnumExtensionsTrait.php b/sources/traits/EnumExtensionsTrait.php
new file mode 100644
index 0000000..3f1bed6
--- /dev/null
+++ b/sources/traits/EnumExtensionsTrait.php
@@ -0,0 +1,80 @@
+hasCase($name))
+ // - если нет - ошибка
+ throw new InvalidArgumentException(sprintf("Enumeration name '%s' does not exist!", $name));
+
+ try {
+ $result = $reflection->getCase($name)->getValue();
+ }
+ catch (ReflectionException) {
+
+ $result = new static();
+ }
+
+ return $result;
+ }
+
+ /**
+ * Получает значение перечисления
+ *
+ * @return string Значение перечисления
+ */
+ public function GetValue (): string
+ {
+ return $this->name;
+ }
+
+ /**
+ * Конвертирует в перечисление из int.
+ *
+ * @param int $value Значение перечисления в формате int
+ *
+ * @return MessageType|EnumExtensionsTrait Объект
+ * перечисления
+ */
+ public static function FromInt (int $value): self
+ {
+ return self::tryFrom($value);
+ }
+
+ /**
+ * Переводит тип в INT
+ *
+ * @return int Значение типа в INT
+ */
+ public function ToInt (): int
+ {
+ return $this->value;
+ }
+}
\ No newline at end of file
diff --git a/sources/traits/ObjectArray/ObjectArrayBasicTrait.php b/sources/traits/ObjectArray/ObjectArrayBasicTrait.php
new file mode 100644
index 0000000..b427d23
--- /dev/null
+++ b/sources/traits/ObjectArray/ObjectArrayBasicTrait.php
@@ -0,0 +1,90 @@
+Container[$offset]);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function offsetGet (mixed $offset): mixed
+ {
+ return $this->container[$offset] ?? null;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function offsetSet (mixed $offset, mixed $value): void
+ {
+ // Если смещение не указано
+ if (is_null($offset))
+ // - то добавляем объект в конец массива.
+ $this->Container[] = $value;
+ else
+ // - иначе добавляем объект по указанному смещению.
+ $this->Container[$offset] = $value;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function offsetUnset (mixed $offset): void
+ {
+ unset($this->Container[$offset]);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getIterator (): ArrayIterator
+ {
+ return new ArrayIterator($this->Container);
+ }
+
+ /**
+ * Существует ли элемент по указанному смещению.
+ *
+ * @param mixed $offset Смещение.
+ *
+ * @return bool Существует ли элемент по указанному смещению.
+ */
+ public function __isset (mixed $offset): bool
+ {
+ return isset($this->data[$offset]);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function Serialize (): string
+ {
+ return serialize($this->Container);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function UnSerialize (string $serialized): void
+ {
+ $this->Container = unserialize($serialized);
+ }
+}
\ No newline at end of file
diff --git a/sources/traits/ObjectArray/ObjectArrayConstantsTrait.php b/sources/traits/ObjectArray/ObjectArrayConstantsTrait.php
new file mode 100644
index 0000000..fd25a79
--- /dev/null
+++ b/sources/traits/ObjectArray/ObjectArrayConstantsTrait.php
@@ -0,0 +1,26 @@
+ $currentPropertyValue === $searchPropertyValue;
+ }
+ }
+}
\ No newline at end of file
diff --git a/sources/traits/ObjectArray/ObjectArrayLINQTrait.php b/sources/traits/ObjectArray/ObjectArrayLINQTrait.php
new file mode 100644
index 0000000..616a163
--- /dev/null
+++ b/sources/traits/ObjectArray/ObjectArrayLINQTrait.php
@@ -0,0 +1,283 @@
+Container,
+ fn ($min, $item) => $min === null || $itemValuePredicate($item) < $itemValuePredicate($min) ? $item : $min);
+ }
+
+ /**
+ * Возвращает объект, значение свойства которого максимально.
+ *
+ * @param callable $itemValuePredicate Функция, возвращающая значение свойства объекта.
+ * Параметром является объект массива.
+ *
+ * @return mixed|null Объект, значение свойства которого максимально.
+ */
+ public function MaxBy (callable $itemValuePredicate): mixed
+ {
+ return array_reduce($this->Container,
+ fn ($max, $item) => $max === null || $itemValuePredicate($item) > $itemValuePredicate($max) ? $item : $max);
+ }
+
+ /**
+ * Выделяет из массива объектов объект, удовлетворяющий условию. Если объектов несколько, то выбирается первый
+ * встречающийся объект из них. Если объектов нет, вернёт false.
+ *
+ * @param callable|null $selectCondition Функция выборки объектов fn (mixed $item): bool
. Вместо неё
+ * можно использовать null, тогда функция выберет текущий объект. По умолчанию, null.
+ *
+ * @return false|mixed Выбранный объект, удовлетворяющий условию, или false, если таких нет.
+ */
+ public function GetRow (?callable $selectCondition = null): mixed
+ {
+ // Если условие не задано
+ if ($selectCondition === null || !is_callable($selectCondition)) {
+ // - то если массив не пуст
+ if (count($this->Container) > 0)
+ // -- возвращаем первый элемент
+ return $this->Container[0];
+ else
+ // -- иначе возвращаем false
+ return false;
+ }
+
+ // Получаем результаты выборки из массива по условию $selectCondition
+ $result = $this->GetRows($selectCondition);
+
+ // Если результат не найден
+ if (count($result) == 0)
+ // - возвращаем false
+ return false;
+
+ // Возвращаем результат
+ return $result[0];
+ }
+
+ /**
+ * Выделяет из массива объектов объекты, удовлетворяющие условию.
+ *
+ * @param callable|null $selectCondition Функция выборки объектов fn (mixed $item): bool
. Вместо неё
+ * можно использовать null, тогда функция будет выбирать все объекты. По умолчанию, null.
+ *
+ * @return ObjectArray Массив объектов, удовлетворяющих условию
+ */
+ public function GetRows (?callable $selectCondition = null): ObjectArray
+ {
+ // Если условие не задано
+ if ($selectCondition === null || !is_callable($selectCondition))
+ // - то возвращаем все элементы
+ return new ObjectArray($this->Container);
+
+ // Создаём результирующий массив
+ $result = [];
+
+ // Проходим по массиву
+ foreach ($this->Container as $item) {
+ // - пропускаем не объекты
+ if (!is_object($item))
+ continue;
+
+ // - если объект удовлетворяет условию
+ if ($selectCondition($item))
+ // -- добавляем его в результат
+ $result[] = $item;
+ }
+
+ // Возвращаем результат
+ return new ObjectArray($result);
+ }
+
+ /**
+ * Получение значение единичного поля. Если полей по выборке будет больше одного, то вернёт первое из них.
+ *
+ * @param string $column Требуемый столбец
+ * @param callable|null $wherePredicate Условие выборки fn (mixed $item): bool
, которое проверяет,
+ * подходит элемент или нет.
+ *
+ * @return mixed|null Результат запроса или null в случае ошибки
+ */
+ public function GetValue (string $column, ?callable $wherePredicate = null): mixed
+ {
+ // Получаю колонку
+ $result = $this->GetColumn($column, $wherePredicate);
+
+ // Если результат пуст
+ if (count($result) == 0)
+ // -- возвращаю null
+ return null;
+
+ // Возвращаю результат
+ return $result[0];
+ }
+
+ /**
+ * Получает колонку в массиве данных.
+ *
+ * @param string $column Имя колонки.
+ * @param callable|null $wherePredicate Условие выборки fn (mixed $item): bool
, которое проверяет,
+ * подходит элемент или нет.
+ *
+ * @return array Ассоциированный массив с результатом выборки.
+ */
+ public function GetColumn (string $column, ?callable $wherePredicate = null): array
+ {
+ // Создаю результат
+ $result = [];
+
+ // Прохожу по массиву
+ foreach ($this->Container as $item) {
+ // - пропускаю не объекты
+ if (!is_object($item))
+ continue;
+
+ // - пропускаю не имеющие требуемого свойства
+ if (!property_exists($item, $column))
+ continue;
+
+ // - пропускаю не удовлетворяющие условию
+ if ($wherePredicate !== null && !$wherePredicate($item))
+ continue;
+
+ // - добавляю значение свойства в результат
+ $result[] = $item->$column;
+ }
+
+ // Возвращаю результат
+ return $result;
+ }
+
+ /**
+ * Заменяет данные в строке\ массива.
+ *
+ * @param mixed $setItem Заменяемые элемент.
+ * @param callable $wherePredicate Условие выборки fn (mixed $item): bool
, которое проверяет,
+ * подходит элемент или нет.
+ *
+ * @return bool Результат выполнения
+ */
+ public function Update (array $setItems, callable $wherePredicate): bool
+ {
+ // Удаляю элементы
+ $result = $this->Delete($wherePredicate);
+
+ // Добавляю новые элементы
+ foreach ($setItems as $item)
+ $this->Container[] = $item;
+
+ // Возвращаю результат
+ return $result;
+ }
+
+ /**
+ * Удаляет строки по условию.
+ *
+ * @param callable|null $wherePredicate Условие выборки fn (mixed $item): bool
, которое проверяет,
+ * подходит элемент или нет.
+ *
+ * @return bool Результат выполнения. Будет true, если все строки, удовлетворяющие условию удалены успешно,
+ * иначе false.
+ */
+ public function Delete (?callable $wherePredicate = null): bool
+ {
+ // Задаю результат
+ $result = true;
+
+ // Получаю массив строк
+ $array = $this->GetRows($wherePredicate);
+
+ // Каждый элемент в этих строках
+ foreach ($array as $item) {
+ // - получаю его индекс в основном массиве
+ $key = array_search($item, $this->Container);
+
+ // - и если индекс найден
+ if ($key !== false) {
+ // -- удаляю элемент из основного массива
+ $resultArray = array_splice($this->Container, $key, 1);
+
+ // -- и если удаление прошло успешно, то будет true
+ $result = $result && count($resultArray) > 0;
+ }
+ }
+
+ // Возвращаю результат
+ return $result;
+ }
+
+ /**
+ * Проверяет, существует ли объект в массиве.
+ *
+ * @param callable|null $where Условие выборки fn (mixed $item): bool
, которое проверяет, подходит ли
+ * объект или нет. Может принимать вместо замыкания null, тогда вернёт false. По умолчанию null.
+ *
+ * @return bool Результат проверки
+ */
+ public function IsExist (?callable $where = null): bool
+ {
+ // Если условие не задано
+ if ($where === null || !is_callable($where))
+ // - то возвращаем false
+ return false;
+
+ // Вывожу результат
+ return $this->Count($where) > 0;
+ }
+
+ /**
+ * Считает количество объектов в массиве, удовлетворяющих условию.
+ *
+ * @param callable|null $predicate Функция, возвращающая bool: true, если объект удовлетворяет условию, false, если
+ * не удовлетворяет. Параметром является объект массива. Вместо функции можно передать null, тогда результатом
+ * будет общее количество объектов в массиве. По умолчанию, null.
+ *
+ * @return int Количество объектов, удовлетворяющих условию
+ */
+ public function Count (?callable $predicate = null): int
+ {
+ // Если условие не задано
+ if ($predicate === null || !is_callable($predicate))
+ // - то возвращаем общее количество объектов
+ return count($this->Container);
+
+ // Создаём результирующее число
+ $result = 0;
+
+ // Проходим по массиву
+ foreach ($this->Container as $item) {
+ // - пропускаем не объекты
+ if (!is_object($item))
+ continue;
+
+ // - если элемент удовлетворяет условию
+ if ($predicate($item))
+ // -- добавляем счётчик
+ $result++;
+ }
+
+ // Возвращаем результат
+ return $result;
+ }
+}
\ No newline at end of file
diff --git a/sources/traits/ObjectArray/ObjectArraySearchAndSortTrait.php b/sources/traits/ObjectArray/ObjectArraySearchAndSortTrait.php
new file mode 100644
index 0000000..861c99d
--- /dev/null
+++ b/sources/traits/ObjectArray/ObjectArraySearchAndSortTrait.php
@@ -0,0 +1,129 @@
+fn (mixed $item): mixed => $item->,
+ * возвращающая сравниваемый объект. Возвращаемое значение должно быть значением свойства этого объекта.
+ *
+ *
+ * class Demo;
+ * {
+ * public string $Property1;
+ * public string $Property2;
+ * public function __construct(string $Property1, string $Property2)
+ * {
+ * $this->Property1 = $Property1;
+ * $this->Property2 = $Property2;
+ * }
+ * }
+ * $array = new ObjectArray (
+ * [
+ * new Demo('1', '2'),
+ * new Demo('5', '6'),
+ * new Demo('3', '4')
+ * ]);
+ *
+ * // output:
+ * // [Demo('1', '2'), Demo('3', '4'), Demo('5', '6')]
+ * $result = $array->SortCallback($array, fn ($item): mixed => $item->Property1);
+ *
+ * @param bool $descending Направление сортировки
+ *
+ * @return array Отсортированный массив объектов
+ */
+ public function SortCallback (callable $objectPropertyValuePredicate, bool $descending = false): array
+ {
+ // Создаём результирующий массив
+ $result = array_merge($this->Container, []);
+
+ // Сортируем массив
+ usort($result,
+ fn ($a, $b)
+ => !$descending
+ ? $objectPropertyValuePredicate($a) <=> $objectPropertyValuePredicate($b)
+ : $objectPropertyValuePredicate($b) <=> $objectPropertyValuePredicate($a));
+
+ // Возвращаем результат
+ return $result;
+ }
+
+ /**
+ * Сортирует массив объектов, по значению свойства объекта.
+ *
+ * @param string $objectProperty Имя свойства объекта
+ * @param bool $descending Направление сортировки
+ *
+ * @return array Отсортированный массив объектов
+ */
+ public function Sort (string $objectProperty, bool $descending = false): array
+ {
+ // Создаём результирующий массив
+ $result = array_merge($this->Container, []);
+
+ // Сортируем массив
+ usort($result,
+ fn ($a, $b)
+ => !$descending
+ ? $a->$objectProperty <=> $b->$objectProperty
+ : $b->$objectProperty <=> $a->$objectProperty);
+
+ // Возвращаем результат
+ return $result;
+ }
+
+ /**
+ * Поиск объекта в массиве объектов по значению свойства объекта.
+ *
+ * @param string $forProperty Имя искомого свойства объекта.
+ * @param mixed $searchValue Искомое значение свойства объекта.
+ * @param callable|null $compareFunction Функция сравнения, принимающая два параметра: mixed $currentPropertyValue
+ * (текущее значение свойства) и mixed $searchPropertyValue (поисковое значение свойства) и возвращает bool -
+ * true, если значение свойства совпадает с искомым, false - если не совпадает. Если передаётся null, то будет
+ * использоваться DefaultComparerFunction. По умолчанию, null.
+ *
+ * @return mixed Объект, найденный по значению свойства или null, если не найден
+ */
+ public function Search (string $forProperty, mixed $searchValue, ?callable $compareFunction = null): mixed
+ {
+ // Проходим по массиву
+ foreach ($this->Container as $item) {
+ // - пропускаем не объекты
+ if (!is_object($item))
+ continue;
+
+ // - пропускаем, если значение свойства нет в этом объекте
+ if (!property_exists($item, $forProperty))
+ continue;
+
+ // - пропускаем, если значение свойства не задано
+ if (!isset($item->$forProperty))
+ continue;
+
+ // - если не задана функция сравнения
+ if (is_null($compareFunction) || !is_callable($compareFunction))
+ // -- то устанавливаем функцию сравнения по умолчанию
+ $compareFunction = $this->DefaultComparerFunction;
+
+ // - если значение свойства совпадает с искомым
+ if ($compareFunction($item->$forProperty, $searchValue))
+ // -- возвращаем объект
+ return $item;
+ }
+
+ // Если мы сюда дошли, значить объект не найден - возвращаем null
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/tests/classes/ClassMapperTest.php b/tests/classes/ClassMapperTest.php
new file mode 100644
index 0000000..fe283d7
--- /dev/null
+++ b/tests/classes/ClassMapperTest.php
@@ -0,0 +1,30 @@
+PrepareForTest();
+
+ $a = new \goodboyalex\php_components_pack\tests\data\A();
+ $a->a = 'a';
+ $a->b = 2;
+ $a->c = true;
+
+ $b = new B();
+ ClassMapper::MapClass($a, $b);
+
+ $this->assertEquals('a', $b->a);
+ $this->assertEquals(2, $b->b);
+ }
+
+ private function PrepareForTest (): void
+ {
+ require_once __DIR__ . '/../../sources/classes/classMapper.php';
+ }
+}
diff --git a/tests/data/A.php b/tests/data/A.php
new file mode 100644
index 0000000..384d64a
--- /dev/null
+++ b/tests/data/A.php
@@ -0,0 +1,10 @@
+PrepareForTest();
+
+ $array = [
+ 'a' => 'a',
+ 'b' => 'b',
+ 'c' => '',
+ 'd' => null,
+ 'e' => 0,
+ 'f' => false
+ ];
+
+ $this->assertEquals([
+ 'a' => 'a',
+ 'b' => 'b',
+ 'e' => 0,
+ 'f' => false
+ ], ArrayExtension::RemoveEmpties($array));
+ }
+
+ private function PrepareForTest (): void
+ {
+ require_once __DIR__ . '/../../sources/extensions/ArrayExtension.php';
+ }
+
+ public function testIsStringKey ()
+ {
+ $this->PrepareForTest();
+
+ $this->assertTrue(ArrayExtension::IsStringKey('a'));
+ $this->assertFalse(ArrayExtension::IsStringKey(1));
+
+ }
+
+ public function testGetAssociativePart ()
+ {
+ $this->PrepareForTest();
+
+ $array = [
+ 'a' => 'a',
+ 'b' => 'b',
+ 'c' => 'c',
+ 'd' => 'd',
+ 'e',
+ 'f'
+ ];
+
+ $this->assertEquals([
+ 'a' => 'a',
+ 'b' => 'b',
+ 'c' => 'c',
+ 'd' => 'd'
+ ], ArrayExtension::GetAssociativePart($array));
+
+ }
+}
diff --git a/tests/extensions/GUIDExtensionTest.php b/tests/extensions/GUIDExtensionTest.php
new file mode 100644
index 0000000..b6781c9
--- /dev/null
+++ b/tests/extensions/GUIDExtensionTest.php
@@ -0,0 +1,51 @@
+PrepareForTest();
+
+ $guid = GUIDExtension::Generate();
+ $this->assertTrue(strlen($guid) === 36);
+ }
+
+ public function testIsNotValidOrEmpty ()
+ {
+ $this->PrepareForTest();
+
+ $guid = GUIDExtension::Generate();
+ $this->assertFalse(GUIDExtension::IsNotValidOrEmpty($guid));
+
+ $guid = '12345678-91101-1121-3141-516171819202';
+ $this->assertTrue(GUIDExtension::IsNotValidOrEmpty($guid));
+
+ $guid = GUIDExtension::GUIDEmpty;
+ $this->assertTrue(GUIDExtension::IsNotValidOrEmpty($guid));
+ }
+
+ public function testValidate ()
+ {
+ $this->PrepareForTest();
+
+ $guid = GUIDExtension::Generate();
+ $this->assertFalse(GUIDExtension::IsNotValidOrEmpty($guid));
+
+ $guid = '12345678-91101-1121-3141-516171819202';
+ $this->assertTrue(GUIDExtension::IsNotValidOrEmpty($guid));
+
+ $guid = GUIDExtension::GUIDEmpty;
+ $this->assertTrue(GUIDExtension::IsNotValidOrEmpty($guid));
+ }
+
+ private function PrepareForTest (): void
+ {
+ require_once __DIR__ . '/../../sources/extensions/StringExtension.php';
+ require_once __DIR__ . '/../../sources/extensions/GUIDExtension.php';
+ }
+}
diff --git a/tests/extensions/StringExtensionTest.php b/tests/extensions/StringExtensionTest.php
new file mode 100644
index 0000000..61184b2
--- /dev/null
+++ b/tests/extensions/StringExtensionTest.php
@@ -0,0 +1,66 @@
+PrepareForTest();
+
+ $this->assertTrue(StringExtension::isNullOrWhitespace(''));
+ $this->assertTrue(StringExtension::isNullOrWhitespace(' '));
+ $this->assertTrue(StringExtension::isNullOrWhitespace(null));
+ $this->assertFalse(StringExtension::isNullOrWhitespace('TEST'));
+
+ }
+
+ private function PrepareForTest (): void
+ {
+ require_once __DIR__ . '/../../sources/extensions/StringExtension.php';
+ }
+
+ public function testConvertToLatin ()
+ {
+ $this->PrepareForTest();
+
+ $this->assertEquals('test', StringExtension::ConvertToLatin('тест'));
+ $this->assertEquals('test', StringExtension::ConvertToLatin('test'));
+
+ }
+
+ public function testIsNullOrEmpty ()
+ {
+ $this->PrepareForTest();
+
+ $this->assertTrue(StringExtension::isNullOrEmpty(''));
+ $this->assertTrue(StringExtension::isNullOrEmpty(null));
+ $this->assertFalse(StringExtension::isNullOrEmpty('TEST'));
+
+ }
+
+ public function testCompare ()
+ {
+ $this->PrepareForTest();
+
+ $this->assertEquals(0, StringExtension::Compare('test', 'test'));
+ $this->assertEquals(-1, StringExtension::Compare('test', 'test1'));
+ $this->assertEquals(1, StringExtension::Compare('test2', 'test'));
+ }
+
+ public function testGetShortText ()
+ {
+ $this->PrepareForTest();
+
+ $this->assertEquals('test', StringExtension::GetShortText('test', 4));
+ $this->assertEquals('test', StringExtension::GetShortText('test', 10));
+ $this->assertEquals('test', StringExtension::GetShortText('test of this', 4));
+ $this->assertEquals('t', StringExtension::GetShortText('test', 1));
+ $this->assertEquals('', StringExtension::GetShortText('test', 0));
+
+ }
+}
diff --git a/vendor/autoload.php b/vendor/autoload.php
new file mode 100644
index 0000000..24632e4
--- /dev/null
+++ b/vendor/autoload.php
@@ -0,0 +1,25 @@
+realpath = realpath($opened_path) ?: $opened_path;
+ $opened_path = $this->realpath;
+ $this->handle = fopen($this->realpath, $mode);
+ $this->position = 0;
+
+ return (bool) $this->handle;
+ }
+
+ public function stream_read($count)
+ {
+ $data = fread($this->handle, $count);
+
+ if ($this->position === 0) {
+ $data = preg_replace('{^#!.*\r?\n}', '', $data);
+ }
+
+ $this->position += strlen($data);
+
+ return $data;
+ }
+
+ public function stream_cast($castAs)
+ {
+ return $this->handle;
+ }
+
+ public function stream_close()
+ {
+ fclose($this->handle);
+ }
+
+ public function stream_lock($operation)
+ {
+ return $operation ? flock($this->handle, $operation) : true;
+ }
+
+ public function stream_seek($offset, $whence)
+ {
+ if (0 === fseek($this->handle, $offset, $whence)) {
+ $this->position = ftell($this->handle);
+ return true;
+ }
+
+ return false;
+ }
+
+ public function stream_tell()
+ {
+ return $this->position;
+ }
+
+ public function stream_eof()
+ {
+ return feof($this->handle);
+ }
+
+ public function stream_stat()
+ {
+ return array();
+ }
+
+ public function stream_set_option($option, $arg1, $arg2)
+ {
+ return true;
+ }
+
+ public function url_stat($path, $flags)
+ {
+ $path = substr($path, 17);
+ if (file_exists($path)) {
+ return stat($path);
+ }
+
+ return false;
+ }
+ }
+ }
+
+ if (
+ (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
+ || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
+ ) {
+ return include("phpvfscomposer://" . __DIR__ . '/..'.'/nikic/php-parser/bin/php-parse');
+ }
+}
+
+return include __DIR__ . '/..'.'/nikic/php-parser/bin/php-parse';
diff --git a/vendor/bin/php-parse.bat b/vendor/bin/php-parse.bat
new file mode 100644
index 0000000..2c5096d
--- /dev/null
+++ b/vendor/bin/php-parse.bat
@@ -0,0 +1,5 @@
+@ECHO OFF
+setlocal DISABLEDELAYEDEXPANSION
+SET BIN_TARGET=%~dp0/php-parse
+SET COMPOSER_RUNTIME_BIN_DIR=%~dp0
+php "%BIN_TARGET%" %*
diff --git a/vendor/bin/phpunit b/vendor/bin/phpunit
new file mode 100644
index 0000000..b5b530a
--- /dev/null
+++ b/vendor/bin/phpunit
@@ -0,0 +1,122 @@
+#!/usr/bin/env php
+realpath = realpath($opened_path) ?: $opened_path;
+ $opened_path = 'phpvfscomposer://'.$this->realpath;
+ $this->handle = fopen($this->realpath, $mode);
+ $this->position = 0;
+
+ return (bool) $this->handle;
+ }
+
+ public function stream_read($count)
+ {
+ $data = fread($this->handle, $count);
+
+ if ($this->position === 0) {
+ $data = preg_replace('{^#!.*\r?\n}', '', $data);
+ }
+ $data = str_replace('__DIR__', var_export(dirname($this->realpath), true), $data);
+ $data = str_replace('__FILE__', var_export($this->realpath, true), $data);
+
+ $this->position += strlen($data);
+
+ return $data;
+ }
+
+ public function stream_cast($castAs)
+ {
+ return $this->handle;
+ }
+
+ public function stream_close()
+ {
+ fclose($this->handle);
+ }
+
+ public function stream_lock($operation)
+ {
+ return $operation ? flock($this->handle, $operation) : true;
+ }
+
+ public function stream_seek($offset, $whence)
+ {
+ if (0 === fseek($this->handle, $offset, $whence)) {
+ $this->position = ftell($this->handle);
+ return true;
+ }
+
+ return false;
+ }
+
+ public function stream_tell()
+ {
+ return $this->position;
+ }
+
+ public function stream_eof()
+ {
+ return feof($this->handle);
+ }
+
+ public function stream_stat()
+ {
+ return array();
+ }
+
+ public function stream_set_option($option, $arg1, $arg2)
+ {
+ return true;
+ }
+
+ public function url_stat($path, $flags)
+ {
+ $path = substr($path, 17);
+ if (file_exists($path)) {
+ return stat($path);
+ }
+
+ return false;
+ }
+ }
+ }
+
+ if (
+ (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
+ || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
+ ) {
+ return include("phpvfscomposer://" . __DIR__ . '/..'.'/phpunit/phpunit/phpunit');
+ }
+}
+
+return include __DIR__ . '/..'.'/phpunit/phpunit/phpunit';
diff --git a/vendor/bin/phpunit.bat b/vendor/bin/phpunit.bat
new file mode 100644
index 0000000..2a070cd
--- /dev/null
+++ b/vendor/bin/phpunit.bat
@@ -0,0 +1,5 @@
+@ECHO OFF
+setlocal DISABLEDELAYEDEXPANSION
+SET BIN_TARGET=%~dp0/phpunit
+SET COMPOSER_RUNTIME_BIN_DIR=%~dp0
+php "%BIN_TARGET%" %*
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
new file mode 100644
index 0000000..7824d8f
--- /dev/null
+++ b/vendor/composer/ClassLoader.php
@@ -0,0 +1,579 @@
+
+ * Jordi Boggiano
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier
+ * @author Jordi Boggiano
+ * @see https://www.php-fig.org/psr/psr-0/
+ * @see https://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ /** @var \Closure(string):void */
+ private static $includeFile;
+
+ /** @var string|null */
+ private $vendorDir;
+
+ // PSR-4
+ /**
+ * @var array>
+ */
+ private $prefixLengthsPsr4 = array();
+ /**
+ * @var array>
+ */
+ private $prefixDirsPsr4 = array();
+ /**
+ * @var list
+ */
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ /**
+ * List of PSR-0 prefixes
+ *
+ * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
+ *
+ * @var array>>
+ */
+ private $prefixesPsr0 = array();
+ /**
+ * @var list
+ */
+ private $fallbackDirsPsr0 = array();
+
+ /** @var bool */
+ private $useIncludePath = false;
+
+ /**
+ * @var array
+ */
+ private $classMap = array();
+
+ /** @var bool */
+ private $classMapAuthoritative = false;
+
+ /**
+ * @var array
+ */
+ private $missingClasses = array();
+
+ /** @var string|null */
+ private $apcuPrefix;
+
+ /**
+ * @var array
+ */
+ private static $registeredLoaders = array();
+
+ /**
+ * @param string|null $vendorDir
+ */
+ public function __construct($vendorDir = null)
+ {
+ $this->vendorDir = $vendorDir;
+ self::initializeIncludeClosure();
+ }
+
+ /**
+ * @return array>
+ */
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
+ }
+
+ return array();
+ }
+
+ /**
+ * @return array>
+ */
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ /**
+ * @return list
+ */
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ /**
+ * @return list
+ */
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ /**
+ * @return array Array of classname => path
+ */
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ *
+ * @return void
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param list|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @return void
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ $paths = (array) $paths;
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param list|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return void
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ $paths = (array) $paths;
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param list|string $paths The PSR-0 base directories
+ *
+ * @return void
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param list|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return void
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ *
+ * @return void
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ *
+ * @return void
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ *
+ * @return void
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ *
+ * @return void
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+
+ if (null === $this->vendorDir) {
+ return;
+ }
+
+ if ($prepend) {
+ self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
+ } else {
+ unset(self::$registeredLoaders[$this->vendorDir]);
+ self::$registeredLoaders[$this->vendorDir] = $this;
+ }
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ *
+ * @return void
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+
+ if (null !== $this->vendorDir) {
+ unset(self::$registeredLoaders[$this->vendorDir]);
+ }
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return true|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ $includeFile = self::$includeFile;
+ $includeFile($file);
+
+ return true;
+ }
+
+ return null;
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ /**
+ * Returns the currently registered loaders keyed by their corresponding vendor directories.
+ *
+ * @return array
+ */
+ public static function getRegisteredLoaders()
+ {
+ return self::$registeredLoaders;
+ }
+
+ /**
+ * @param string $class
+ * @param string $ext
+ * @return string|false
+ */
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath . '\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ if (file_exists($file = $dir . $pathEnd)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+
+ /**
+ * @return void
+ */
+ private static function initializeIncludeClosure()
+ {
+ if (self::$includeFile !== null) {
+ return;
+ }
+
+ /**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ *
+ * @param string $file
+ * @return void
+ */
+ self::$includeFile = \Closure::bind(static function($file) {
+ include $file;
+ }, null, null);
+ }
+}
diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php
new file mode 100644
index 0000000..51e734a
--- /dev/null
+++ b/vendor/composer/InstalledVersions.php
@@ -0,0 +1,359 @@
+
+ * Jordi Boggiano
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer;
+
+use Composer\Autoload\ClassLoader;
+use Composer\Semver\VersionParser;
+
+/**
+ * This class is copied in every Composer installed project and available to all
+ *
+ * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
+ *
+ * To require its presence, you can require `composer-runtime-api ^2.0`
+ *
+ * @final
+ */
+class InstalledVersions
+{
+ /**
+ * @var mixed[]|null
+ * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null
+ */
+ private static $installed;
+
+ /**
+ * @var bool|null
+ */
+ private static $canGetVendors;
+
+ /**
+ * @var array[]
+ * @psalm-var array}>
+ */
+ private static $installedByVendor = array();
+
+ /**
+ * Returns a list of all package names which are present, either by being installed, replaced or provided
+ *
+ * @return string[]
+ * @psalm-return list
+ */
+ public static function getInstalledPackages()
+ {
+ $packages = array();
+ foreach (self::getInstalled() as $installed) {
+ $packages[] = array_keys($installed['versions']);
+ }
+
+ if (1 === \count($packages)) {
+ return $packages[0];
+ }
+
+ return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
+ }
+
+ /**
+ * Returns a list of all package names with a specific type e.g. 'library'
+ *
+ * @param string $type
+ * @return string[]
+ * @psalm-return list
+ */
+ public static function getInstalledPackagesByType($type)
+ {
+ $packagesByType = array();
+
+ foreach (self::getInstalled() as $installed) {
+ foreach ($installed['versions'] as $name => $package) {
+ if (isset($package['type']) && $package['type'] === $type) {
+ $packagesByType[] = $name;
+ }
+ }
+ }
+
+ return $packagesByType;
+ }
+
+ /**
+ * Checks whether the given package is installed
+ *
+ * This also returns true if the package name is provided or replaced by another package
+ *
+ * @param string $packageName
+ * @param bool $includeDevRequirements
+ * @return bool
+ */
+ public static function isInstalled($packageName, $includeDevRequirements = true)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (isset($installed['versions'][$packageName])) {
+ return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Checks whether the given package satisfies a version constraint
+ *
+ * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
+ *
+ * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
+ *
+ * @param VersionParser $parser Install composer/semver to have access to this class and functionality
+ * @param string $packageName
+ * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
+ * @return bool
+ */
+ public static function satisfies(VersionParser $parser, $packageName, $constraint)
+ {
+ $constraint = $parser->parseConstraints((string) $constraint);
+ $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
+
+ return $provided->matches($constraint);
+ }
+
+ /**
+ * Returns a version constraint representing all the range(s) which are installed for a given package
+ *
+ * It is easier to use this via isInstalled() with the $constraint argument if you need to check
+ * whether a given version of a package is installed, and not just whether it exists
+ *
+ * @param string $packageName
+ * @return string Version constraint usable with composer/semver
+ */
+ public static function getVersionRanges($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ $ranges = array();
+ if (isset($installed['versions'][$packageName]['pretty_version'])) {
+ $ranges[] = $installed['versions'][$packageName]['pretty_version'];
+ }
+ if (array_key_exists('aliases', $installed['versions'][$packageName])) {
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
+ }
+ if (array_key_exists('replaced', $installed['versions'][$packageName])) {
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
+ }
+ if (array_key_exists('provided', $installed['versions'][$packageName])) {
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
+ }
+
+ return implode(' || ', $ranges);
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @param string $packageName
+ * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
+ */
+ public static function getVersion($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ if (!isset($installed['versions'][$packageName]['version'])) {
+ return null;
+ }
+
+ return $installed['versions'][$packageName]['version'];
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @param string $packageName
+ * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
+ */
+ public static function getPrettyVersion($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ if (!isset($installed['versions'][$packageName]['pretty_version'])) {
+ return null;
+ }
+
+ return $installed['versions'][$packageName]['pretty_version'];
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @param string $packageName
+ * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
+ */
+ public static function getReference($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ if (!isset($installed['versions'][$packageName]['reference'])) {
+ return null;
+ }
+
+ return $installed['versions'][$packageName]['reference'];
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @param string $packageName
+ * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
+ */
+ public static function getInstallPath($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @return array
+ * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
+ */
+ public static function getRootPackage()
+ {
+ $installed = self::getInstalled();
+
+ return $installed[0]['root'];
+ }
+
+ /**
+ * Returns the raw installed.php data for custom implementations
+ *
+ * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
+ * @return array[]
+ * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}
+ */
+ public static function getRawData()
+ {
+ @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
+
+ if (null === self::$installed) {
+ // only require the installed.php file if this file is loaded from its dumped location,
+ // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
+ if (substr(__DIR__, -8, 1) !== 'C') {
+ self::$installed = include __DIR__ . '/installed.php';
+ } else {
+ self::$installed = array();
+ }
+ }
+
+ return self::$installed;
+ }
+
+ /**
+ * Returns the raw data of all installed.php which are currently loaded for custom implementations
+ *
+ * @return array[]
+ * @psalm-return list}>
+ */
+ public static function getAllRawData()
+ {
+ return self::getInstalled();
+ }
+
+ /**
+ * Lets you reload the static array from another file
+ *
+ * This is only useful for complex integrations in which a project needs to use
+ * this class but then also needs to execute another project's autoloader in process,
+ * and wants to ensure both projects have access to their version of installed.php.
+ *
+ * A typical case would be PHPUnit, where it would need to make sure it reads all
+ * the data it needs from this class, then call reload() with
+ * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
+ * the project in which it runs can then also use this class safely, without
+ * interference between PHPUnit's dependencies and the project's dependencies.
+ *
+ * @param array[] $data A vendor/composer/installed.php data set
+ * @return void
+ *
+ * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data
+ */
+ public static function reload($data)
+ {
+ self::$installed = $data;
+ self::$installedByVendor = array();
+ }
+
+ /**
+ * @return array[]
+ * @psalm-return list}>
+ */
+ private static function getInstalled()
+ {
+ if (null === self::$canGetVendors) {
+ self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
+ }
+
+ $installed = array();
+
+ if (self::$canGetVendors) {
+ foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
+ if (isset(self::$installedByVendor[$vendorDir])) {
+ $installed[] = self::$installedByVendor[$vendorDir];
+ } elseif (is_file($vendorDir.'/composer/installed.php')) {
+ /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */
+ $required = require $vendorDir.'/composer/installed.php';
+ $installed[] = self::$installedByVendor[$vendorDir] = $required;
+ if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
+ self::$installed = $installed[count($installed) - 1];
+ }
+ }
+ }
+ }
+
+ if (null === self::$installed) {
+ // only require the installed.php file if this file is loaded from its dumped location,
+ // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
+ if (substr(__DIR__, -8, 1) !== 'C') {
+ /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */
+ $required = require __DIR__ . '/installed.php';
+ self::$installed = $required;
+ } else {
+ self::$installed = array();
+ }
+ }
+
+ if (self::$installed !== array()) {
+ $installed[] = self::$installed;
+ }
+
+ return $installed;
+ }
+}
diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE
new file mode 100644
index 0000000..f27399a
--- /dev/null
+++ b/vendor/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+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.
+
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
new file mode 100644
index 0000000..5fafdeb
--- /dev/null
+++ b/vendor/composer/autoload_classmap.php
@@ -0,0 +1,1519 @@
+ $vendorDir . '/composer/InstalledVersions.php',
+ 'DeepCopy\\DeepCopy' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/DeepCopy.php',
+ 'DeepCopy\\Exception\\CloneException' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php',
+ 'DeepCopy\\Exception\\PropertyException' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php',
+ 'DeepCopy\\Filter\\ChainableFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/ChainableFilter.php',
+ 'DeepCopy\\Filter\\Doctrine\\DoctrineCollectionFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php',
+ 'DeepCopy\\Filter\\Doctrine\\DoctrineEmptyCollectionFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php',
+ 'DeepCopy\\Filter\\Doctrine\\DoctrineProxyFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php',
+ 'DeepCopy\\Filter\\Filter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php',
+ 'DeepCopy\\Filter\\KeepFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php',
+ 'DeepCopy\\Filter\\ReplaceFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php',
+ 'DeepCopy\\Filter\\SetNullFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php',
+ 'DeepCopy\\Matcher\\Doctrine\\DoctrineProxyMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php',
+ 'DeepCopy\\Matcher\\Matcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/Matcher.php',
+ 'DeepCopy\\Matcher\\PropertyMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyMatcher.php',
+ 'DeepCopy\\Matcher\\PropertyNameMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php',
+ 'DeepCopy\\Matcher\\PropertyTypeMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php',
+ 'DeepCopy\\Reflection\\ReflectionHelper' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php',
+ 'DeepCopy\\TypeFilter\\Date\\DateIntervalFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php',
+ 'DeepCopy\\TypeFilter\\Date\\DatePeriodFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DatePeriodFilter.php',
+ 'DeepCopy\\TypeFilter\\ReplaceFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php',
+ 'DeepCopy\\TypeFilter\\ShallowCopyFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php',
+ 'DeepCopy\\TypeFilter\\Spl\\ArrayObjectFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.php',
+ 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedList' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php',
+ 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedListFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php',
+ 'DeepCopy\\TypeFilter\\TypeFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php',
+ 'DeepCopy\\TypeMatcher\\TypeMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php',
+ 'PHPUnit\\Event\\Application\\Finished' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Application/Finished.php',
+ 'PHPUnit\\Event\\Application\\FinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Application/FinishedSubscriber.php',
+ 'PHPUnit\\Event\\Application\\Started' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Application/Started.php',
+ 'PHPUnit\\Event\\Application\\StartedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Application/StartedSubscriber.php',
+ 'PHPUnit\\Event\\Code\\ClassMethod' => $vendorDir . '/phpunit/phpunit/src/Event/Value/ClassMethod.php',
+ 'PHPUnit\\Event\\Code\\ComparisonFailure' => $vendorDir . '/phpunit/phpunit/src/Event/Value/ComparisonFailure.php',
+ 'PHPUnit\\Event\\Code\\ComparisonFailureBuilder' => $vendorDir . '/phpunit/phpunit/src/Event/Value/ComparisonFailureBuilder.php',
+ 'PHPUnit\\Event\\Code\\IssueTrigger\\DirectTrigger' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/Issue/DirectTrigger.php',
+ 'PHPUnit\\Event\\Code\\IssueTrigger\\IndirectTrigger' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/Issue/IndirectTrigger.php',
+ 'PHPUnit\\Event\\Code\\IssueTrigger\\IssueTrigger' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/Issue/IssueTrigger.php',
+ 'PHPUnit\\Event\\Code\\IssueTrigger\\SelfTrigger' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/Issue/SelfTrigger.php',
+ 'PHPUnit\\Event\\Code\\IssueTrigger\\TestTrigger' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/Issue/TestTrigger.php',
+ 'PHPUnit\\Event\\Code\\IssueTrigger\\UnknownTrigger' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/Issue/UnknownTrigger.php',
+ 'PHPUnit\\Event\\Code\\NoTestCaseObjectOnCallStackException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/NoTestCaseObjectOnCallStackException.php',
+ 'PHPUnit\\Event\\Code\\Phpt' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/Phpt.php',
+ 'PHPUnit\\Event\\Code\\Test' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/Test.php',
+ 'PHPUnit\\Event\\Code\\TestCollection' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/TestCollection.php',
+ 'PHPUnit\\Event\\Code\\TestCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/TestCollectionIterator.php',
+ 'PHPUnit\\Event\\Code\\TestDox' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/TestDox.php',
+ 'PHPUnit\\Event\\Code\\TestDoxBuilder' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/TestDoxBuilder.php',
+ 'PHPUnit\\Event\\Code\\TestMethod' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/TestMethod.php',
+ 'PHPUnit\\Event\\Code\\TestMethodBuilder' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/TestMethodBuilder.php',
+ 'PHPUnit\\Event\\Code\\Throwable' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Throwable.php',
+ 'PHPUnit\\Event\\Code\\ThrowableBuilder' => $vendorDir . '/phpunit/phpunit/src/Event/Value/ThrowableBuilder.php',
+ 'PHPUnit\\Event\\CollectingDispatcher' => $vendorDir . '/phpunit/phpunit/src/Event/Dispatcher/CollectingDispatcher.php',
+ 'PHPUnit\\Event\\DeferringDispatcher' => $vendorDir . '/phpunit/phpunit/src/Event/Dispatcher/DeferringDispatcher.php',
+ 'PHPUnit\\Event\\DirectDispatcher' => $vendorDir . '/phpunit/phpunit/src/Event/Dispatcher/DirectDispatcher.php',
+ 'PHPUnit\\Event\\Dispatcher' => $vendorDir . '/phpunit/phpunit/src/Event/Dispatcher/Dispatcher.php',
+ 'PHPUnit\\Event\\DispatchingEmitter' => $vendorDir . '/phpunit/phpunit/src/Event/Emitter/DispatchingEmitter.php',
+ 'PHPUnit\\Event\\Emitter' => $vendorDir . '/phpunit/phpunit/src/Event/Emitter/Emitter.php',
+ 'PHPUnit\\Event\\Event' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Event.php',
+ 'PHPUnit\\Event\\EventAlreadyAssignedException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/EventAlreadyAssignedException.php',
+ 'PHPUnit\\Event\\EventCollection' => $vendorDir . '/phpunit/phpunit/src/Event/Events/EventCollection.php',
+ 'PHPUnit\\Event\\EventCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/Event/Events/EventCollectionIterator.php',
+ 'PHPUnit\\Event\\EventFacadeIsSealedException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/EventFacadeIsSealedException.php',
+ 'PHPUnit\\Event\\Exception' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/Exception.php',
+ 'PHPUnit\\Event\\Facade' => $vendorDir . '/phpunit/phpunit/src/Event/Facade.php',
+ 'PHPUnit\\Event\\InvalidArgumentException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/InvalidArgumentException.php',
+ 'PHPUnit\\Event\\InvalidEventException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/InvalidEventException.php',
+ 'PHPUnit\\Event\\InvalidSubscriberException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/InvalidSubscriberException.php',
+ 'PHPUnit\\Event\\MapError' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/MapError.php',
+ 'PHPUnit\\Event\\NoPreviousThrowableException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/NoPreviousThrowableException.php',
+ 'PHPUnit\\Event\\RuntimeException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/RuntimeException.php',
+ 'PHPUnit\\Event\\Runtime\\OperatingSystem' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Runtime/OperatingSystem.php',
+ 'PHPUnit\\Event\\Runtime\\PHP' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Runtime/PHP.php',
+ 'PHPUnit\\Event\\Runtime\\PHPUnit' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Runtime/PHPUnit.php',
+ 'PHPUnit\\Event\\Runtime\\Runtime' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Runtime/Runtime.php',
+ 'PHPUnit\\Event\\SubscribableDispatcher' => $vendorDir . '/phpunit/phpunit/src/Event/Dispatcher/SubscribableDispatcher.php',
+ 'PHPUnit\\Event\\Subscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Subscriber.php',
+ 'PHPUnit\\Event\\SubscriberTypeAlreadyRegisteredException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/SubscriberTypeAlreadyRegisteredException.php',
+ 'PHPUnit\\Event\\Telemetry\\Duration' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Telemetry/Duration.php',
+ 'PHPUnit\\Event\\Telemetry\\GarbageCollectorStatus' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Telemetry/GarbageCollectorStatus.php',
+ 'PHPUnit\\Event\\Telemetry\\GarbageCollectorStatusProvider' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Telemetry/GarbageCollectorStatusProvider.php',
+ 'PHPUnit\\Event\\Telemetry\\HRTime' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Telemetry/HRTime.php',
+ 'PHPUnit\\Event\\Telemetry\\Info' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Telemetry/Info.php',
+ 'PHPUnit\\Event\\Telemetry\\MemoryMeter' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Telemetry/MemoryMeter.php',
+ 'PHPUnit\\Event\\Telemetry\\MemoryUsage' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Telemetry/MemoryUsage.php',
+ 'PHPUnit\\Event\\Telemetry\\Snapshot' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Telemetry/Snapshot.php',
+ 'PHPUnit\\Event\\Telemetry\\StopWatch' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Telemetry/StopWatch.php',
+ 'PHPUnit\\Event\\Telemetry\\System' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Telemetry/System.php',
+ 'PHPUnit\\Event\\Telemetry\\SystemGarbageCollectorStatusProvider' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Telemetry/SystemGarbageCollectorStatusProvider.php',
+ 'PHPUnit\\Event\\Telemetry\\SystemMemoryMeter' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Telemetry/SystemMemoryMeter.php',
+ 'PHPUnit\\Event\\Telemetry\\SystemStopWatch' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Telemetry/SystemStopWatch.php',
+ 'PHPUnit\\Event\\Telemetry\\SystemStopWatchWithOffset' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Telemetry/SystemStopWatchWithOffset.php',
+ 'PHPUnit\\Event\\TestData\\DataFromDataProvider' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/TestData/DataFromDataProvider.php',
+ 'PHPUnit\\Event\\TestData\\DataFromTestDependency' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/TestData/DataFromTestDependency.php',
+ 'PHPUnit\\Event\\TestData\\NoDataSetFromDataProviderException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/NoDataSetFromDataProviderException.php',
+ 'PHPUnit\\Event\\TestData\\TestData' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/TestData/TestData.php',
+ 'PHPUnit\\Event\\TestData\\TestDataCollection' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/TestData/TestDataCollection.php',
+ 'PHPUnit\\Event\\TestData\\TestDataCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/Event/Value/Test/TestData/TestDataCollectionIterator.php',
+ 'PHPUnit\\Event\\TestRunner\\BootstrapFinished' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/BootstrapFinished.php',
+ 'PHPUnit\\Event\\TestRunner\\BootstrapFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/BootstrapFinishedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\ChildProcessFinished' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ChildProcessFinished.php',
+ 'PHPUnit\\Event\\TestRunner\\ChildProcessFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ChildProcessFinishedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\ChildProcessStarted' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ChildProcessStarted.php',
+ 'PHPUnit\\Event\\TestRunner\\ChildProcessStartedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ChildProcessStartedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\Configured' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/Configured.php',
+ 'PHPUnit\\Event\\TestRunner\\ConfiguredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ConfiguredSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\DeprecationTriggered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/DeprecationTriggered.php',
+ 'PHPUnit\\Event\\TestRunner\\DeprecationTriggeredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/DeprecationTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\EventFacadeSealed' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/EventFacadeSealed.php',
+ 'PHPUnit\\Event\\TestRunner\\EventFacadeSealedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/EventFacadeSealedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\ExecutionAborted' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ExecutionAborted.php',
+ 'PHPUnit\\Event\\TestRunner\\ExecutionAbortedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ExecutionAbortedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\ExecutionFinished' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ExecutionFinished.php',
+ 'PHPUnit\\Event\\TestRunner\\ExecutionFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ExecutionFinishedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\ExecutionStarted' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ExecutionStarted.php',
+ 'PHPUnit\\Event\\TestRunner\\ExecutionStartedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ExecutionStartedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\ExtensionBootstrapped' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ExtensionBootstrapped.php',
+ 'PHPUnit\\Event\\TestRunner\\ExtensionBootstrappedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ExtensionBootstrappedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\ExtensionLoadedFromPhar' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ExtensionLoadedFromPhar.php',
+ 'PHPUnit\\Event\\TestRunner\\ExtensionLoadedFromPharSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/ExtensionLoadedFromPharSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\Finished' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/Finished.php',
+ 'PHPUnit\\Event\\TestRunner\\FinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/FinishedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\GarbageCollectionDisabled' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/GarbageCollectionDisabled.php',
+ 'PHPUnit\\Event\\TestRunner\\GarbageCollectionDisabledSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/GarbageCollectionDisabledSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\GarbageCollectionEnabled' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/GarbageCollectionEnabled.php',
+ 'PHPUnit\\Event\\TestRunner\\GarbageCollectionEnabledSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/GarbageCollectionEnabledSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\GarbageCollectionTriggered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/GarbageCollectionTriggered.php',
+ 'PHPUnit\\Event\\TestRunner\\GarbageCollectionTriggeredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/GarbageCollectionTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\Started' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/Started.php',
+ 'PHPUnit\\Event\\TestRunner\\StartedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/StartedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\WarningTriggered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/WarningTriggered.php',
+ 'PHPUnit\\Event\\TestRunner\\WarningTriggeredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestRunner/WarningTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\TestSuite\\Filtered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestSuite/Filtered.php',
+ 'PHPUnit\\Event\\TestSuite\\FilteredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestSuite/FilteredSubscriber.php',
+ 'PHPUnit\\Event\\TestSuite\\Finished' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestSuite/Finished.php',
+ 'PHPUnit\\Event\\TestSuite\\FinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestSuite/FinishedSubscriber.php',
+ 'PHPUnit\\Event\\TestSuite\\Loaded' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestSuite/Loaded.php',
+ 'PHPUnit\\Event\\TestSuite\\LoadedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestSuite/LoadedSubscriber.php',
+ 'PHPUnit\\Event\\TestSuite\\Skipped' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestSuite/Skipped.php',
+ 'PHPUnit\\Event\\TestSuite\\SkippedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestSuite/SkippedSubscriber.php',
+ 'PHPUnit\\Event\\TestSuite\\Sorted' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestSuite/Sorted.php',
+ 'PHPUnit\\Event\\TestSuite\\SortedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestSuite/SortedSubscriber.php',
+ 'PHPUnit\\Event\\TestSuite\\Started' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestSuite/Started.php',
+ 'PHPUnit\\Event\\TestSuite\\StartedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/TestSuite/StartedSubscriber.php',
+ 'PHPUnit\\Event\\TestSuite\\TestSuite' => $vendorDir . '/phpunit/phpunit/src/Event/Value/TestSuite/TestSuite.php',
+ 'PHPUnit\\Event\\TestSuite\\TestSuiteBuilder' => $vendorDir . '/phpunit/phpunit/src/Event/Value/TestSuite/TestSuiteBuilder.php',
+ 'PHPUnit\\Event\\TestSuite\\TestSuiteForTestClass' => $vendorDir . '/phpunit/phpunit/src/Event/Value/TestSuite/TestSuiteForTestClass.php',
+ 'PHPUnit\\Event\\TestSuite\\TestSuiteForTestMethodWithDataProvider' => $vendorDir . '/phpunit/phpunit/src/Event/Value/TestSuite/TestSuiteForTestMethodWithDataProvider.php',
+ 'PHPUnit\\Event\\TestSuite\\TestSuiteWithName' => $vendorDir . '/phpunit/phpunit/src/Event/Value/TestSuite/TestSuiteWithName.php',
+ 'PHPUnit\\Event\\Test\\AfterLastTestMethodCalled' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterLastTestMethodCalled.php',
+ 'PHPUnit\\Event\\Test\\AfterLastTestMethodCalledSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterLastTestMethodCalledSubscriber.php',
+ 'PHPUnit\\Event\\Test\\AfterLastTestMethodErrored' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterLastTestMethodErrored.php',
+ 'PHPUnit\\Event\\Test\\AfterLastTestMethodErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterLastTestMethodErroredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\AfterLastTestMethodFinished' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterLastTestMethodFinished.php',
+ 'PHPUnit\\Event\\Test\\AfterLastTestMethodFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterLastTestMethodFinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\AfterTestMethodCalled' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterTestMethodCalled.php',
+ 'PHPUnit\\Event\\Test\\AfterTestMethodCalledSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterTestMethodCalledSubscriber.php',
+ 'PHPUnit\\Event\\Test\\AfterTestMethodErrored' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterTestMethodErrored.php',
+ 'PHPUnit\\Event\\Test\\AfterTestMethodErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterTestMethodErroredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\AfterTestMethodFinished' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterTestMethodFinished.php',
+ 'PHPUnit\\Event\\Test\\AfterTestMethodFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterTestMethodFinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodCalled' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalled.php',
+ 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodCalledSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalledSubscriber.php',
+ 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodErrored' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeFirstTestMethodErrored.php',
+ 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeFirstTestMethodErroredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodFinished' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinished.php',
+ 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\BeforeTestMethodCalled' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeTestMethodCalled.php',
+ 'PHPUnit\\Event\\Test\\BeforeTestMethodCalledSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeTestMethodCalledSubscriber.php',
+ 'PHPUnit\\Event\\Test\\BeforeTestMethodErrored' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeTestMethodErrored.php',
+ 'PHPUnit\\Event\\Test\\BeforeTestMethodErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeTestMethodErroredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\BeforeTestMethodFinished' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeTestMethodFinished.php',
+ 'PHPUnit\\Event\\Test\\BeforeTestMethodFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeTestMethodFinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\ComparatorRegistered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/ComparatorRegistered.php',
+ 'PHPUnit\\Event\\Test\\ComparatorRegisteredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/ComparatorRegisteredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\ConsideredRisky' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/ConsideredRisky.php',
+ 'PHPUnit\\Event\\Test\\ConsideredRiskySubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/ConsideredRiskySubscriber.php',
+ 'PHPUnit\\Event\\Test\\DataProviderMethodCalled' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/DataProviderMethodCalled.php',
+ 'PHPUnit\\Event\\Test\\DataProviderMethodCalledSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/DataProviderMethodCalledSubscriber.php',
+ 'PHPUnit\\Event\\Test\\DataProviderMethodFinished' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/DataProviderMethodFinished.php',
+ 'PHPUnit\\Event\\Test\\DataProviderMethodFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/DataProviderMethodFinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\DeprecationTriggered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/DeprecationTriggered.php',
+ 'PHPUnit\\Event\\Test\\DeprecationTriggeredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/DeprecationTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\ErrorTriggered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/ErrorTriggered.php',
+ 'PHPUnit\\Event\\Test\\ErrorTriggeredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/ErrorTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\Errored' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Outcome/Errored.php',
+ 'PHPUnit\\Event\\Test\\ErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Outcome/ErroredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\Failed' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Outcome/Failed.php',
+ 'PHPUnit\\Event\\Test\\FailedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Outcome/FailedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\Finished' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/Finished.php',
+ 'PHPUnit\\Event\\Test\\FinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/FinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\MarkedIncomplete' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Outcome/MarkedIncomplete.php',
+ 'PHPUnit\\Event\\Test\\MarkedIncompleteSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Outcome/MarkedIncompleteSubscriber.php',
+ 'PHPUnit\\Event\\Test\\MockObjectCreated' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/MockObjectCreated.php',
+ 'PHPUnit\\Event\\Test\\MockObjectCreatedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/MockObjectCreatedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\MockObjectForIntersectionOfInterfacesCreated' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreated.php',
+ 'PHPUnit\\Event\\Test\\MockObjectForIntersectionOfInterfacesCreatedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreatedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\NoComparisonFailureException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/NoComparisonFailureException.php',
+ 'PHPUnit\\Event\\Test\\NoticeTriggered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/NoticeTriggered.php',
+ 'PHPUnit\\Event\\Test\\NoticeTriggeredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/NoticeTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PartialMockObjectCreated' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/PartialMockObjectCreated.php',
+ 'PHPUnit\\Event\\Test\\PartialMockObjectCreatedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/PartialMockObjectCreatedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\Passed' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Outcome/Passed.php',
+ 'PHPUnit\\Event\\Test\\PassedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Outcome/PassedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PhpDeprecationTriggered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpDeprecationTriggered.php',
+ 'PHPUnit\\Event\\Test\\PhpDeprecationTriggeredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpDeprecationTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PhpNoticeTriggered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpNoticeTriggered.php',
+ 'PHPUnit\\Event\\Test\\PhpNoticeTriggeredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpNoticeTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PhpWarningTriggered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpWarningTriggered.php',
+ 'PHPUnit\\Event\\Test\\PhpWarningTriggeredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpWarningTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PhpunitDeprecationTriggered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpunitDeprecationTriggered.php',
+ 'PHPUnit\\Event\\Test\\PhpunitDeprecationTriggeredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpunitDeprecationTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PhpunitErrorTriggered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpunitErrorTriggered.php',
+ 'PHPUnit\\Event\\Test\\PhpunitErrorTriggeredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpunitErrorTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PhpunitWarningTriggered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpunitWarningTriggered.php',
+ 'PHPUnit\\Event\\Test\\PhpunitWarningTriggeredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpunitWarningTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PostConditionCalled' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PostConditionCalled.php',
+ 'PHPUnit\\Event\\Test\\PostConditionCalledSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PostConditionCalledSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PostConditionErrored' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PostConditionErrored.php',
+ 'PHPUnit\\Event\\Test\\PostConditionErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PostConditionErroredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PostConditionFinished' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PostConditionFinished.php',
+ 'PHPUnit\\Event\\Test\\PostConditionFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PostConditionFinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PreConditionCalled' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PreConditionCalled.php',
+ 'PHPUnit\\Event\\Test\\PreConditionCalledSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PreConditionCalledSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PreConditionErrored' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PreConditionErrored.php',
+ 'PHPUnit\\Event\\Test\\PreConditionErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PreConditionErroredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PreConditionFinished' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PreConditionFinished.php',
+ 'PHPUnit\\Event\\Test\\PreConditionFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PreConditionFinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PreparationFailed' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/PreparationFailed.php',
+ 'PHPUnit\\Event\\Test\\PreparationFailedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/PreparationFailedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PreparationStarted' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/PreparationStarted.php',
+ 'PHPUnit\\Event\\Test\\PreparationStartedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/PreparationStartedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\Prepared' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/Prepared.php',
+ 'PHPUnit\\Event\\Test\\PreparedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/PreparedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PrintedUnexpectedOutput' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/PrintedUnexpectedOutput.php',
+ 'PHPUnit\\Event\\Test\\PrintedUnexpectedOutputSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/PrintedUnexpectedOutputSubscriber.php',
+ 'PHPUnit\\Event\\Test\\Skipped' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Outcome/Skipped.php',
+ 'PHPUnit\\Event\\Test\\SkippedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Outcome/SkippedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\TestStubCreated' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/TestStubCreated.php',
+ 'PHPUnit\\Event\\Test\\TestStubCreatedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/TestStubCreatedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\TestStubForIntersectionOfInterfacesCreated' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreated.php',
+ 'PHPUnit\\Event\\Test\\TestStubForIntersectionOfInterfacesCreatedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreatedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\WarningTriggered' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/WarningTriggered.php',
+ 'PHPUnit\\Event\\Test\\WarningTriggeredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Event/Events/Test/Issue/WarningTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Tracer\\Tracer' => $vendorDir . '/phpunit/phpunit/src/Event/Tracer.php',
+ 'PHPUnit\\Event\\TypeMap' => $vendorDir . '/phpunit/phpunit/src/Event/TypeMap.php',
+ 'PHPUnit\\Event\\UnknownEventException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/UnknownEventException.php',
+ 'PHPUnit\\Event\\UnknownEventTypeException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/UnknownEventTypeException.php',
+ 'PHPUnit\\Event\\UnknownSubscriberException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/UnknownSubscriberException.php',
+ 'PHPUnit\\Event\\UnknownSubscriberTypeException' => $vendorDir . '/phpunit/phpunit/src/Event/Exception/UnknownSubscriberTypeException.php',
+ 'PHPUnit\\Exception' => $vendorDir . '/phpunit/phpunit/src/Exception.php',
+ 'PHPUnit\\Framework\\ActualValueIsNotAnObjectException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ObjectEquals/ActualValueIsNotAnObjectException.php',
+ 'PHPUnit\\Framework\\Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php',
+ 'PHPUnit\\Framework\\AssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/AssertionFailedError.php',
+ 'PHPUnit\\Framework\\Attributes\\After' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/After.php',
+ 'PHPUnit\\Framework\\Attributes\\AfterClass' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/AfterClass.php',
+ 'PHPUnit\\Framework\\Attributes\\BackupGlobals' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/BackupGlobals.php',
+ 'PHPUnit\\Framework\\Attributes\\BackupStaticProperties' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/BackupStaticProperties.php',
+ 'PHPUnit\\Framework\\Attributes\\Before' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/Before.php',
+ 'PHPUnit\\Framework\\Attributes\\BeforeClass' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/BeforeClass.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversClass' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/CoversClass.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversClassesThatExtendClass' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/CoversClassesThatExtendClass.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversClassesThatImplementInterface' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/CoversClassesThatImplementInterface.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversFunction' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/CoversFunction.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/CoversMethod.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversNamespace' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/CoversNamespace.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversNothing' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/CoversNothing.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversTrait' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/CoversTrait.php',
+ 'PHPUnit\\Framework\\Attributes\\DataProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/DataProvider.php',
+ 'PHPUnit\\Framework\\Attributes\\DataProviderExternal' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/DataProviderExternal.php',
+ 'PHPUnit\\Framework\\Attributes\\Depends' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/Depends.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsExternal' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/DependsExternal.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsExternalUsingDeepClone' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/DependsExternalUsingDeepClone.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsExternalUsingShallowClone' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/DependsExternalUsingShallowClone.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsOnClass' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/DependsOnClass.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsOnClassUsingDeepClone' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/DependsOnClassUsingDeepClone.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsOnClassUsingShallowClone' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/DependsOnClassUsingShallowClone.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsUsingDeepClone' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/DependsUsingDeepClone.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsUsingShallowClone' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/DependsUsingShallowClone.php',
+ 'PHPUnit\\Framework\\Attributes\\DisableReturnValueGenerationForTestDoubles' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/DisableReturnValueGenerationForTestDoubles.php',
+ 'PHPUnit\\Framework\\Attributes\\DoesNotPerformAssertions' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/DoesNotPerformAssertions.php',
+ 'PHPUnit\\Framework\\Attributes\\ExcludeGlobalVariableFromBackup' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/ExcludeGlobalVariableFromBackup.php',
+ 'PHPUnit\\Framework\\Attributes\\ExcludeStaticPropertyFromBackup' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/ExcludeStaticPropertyFromBackup.php',
+ 'PHPUnit\\Framework\\Attributes\\Group' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/Group.php',
+ 'PHPUnit\\Framework\\Attributes\\IgnoreDeprecations' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/IgnoreDeprecations.php',
+ 'PHPUnit\\Framework\\Attributes\\IgnorePhpunitDeprecations' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/IgnorePhpunitDeprecations.php',
+ 'PHPUnit\\Framework\\Attributes\\Large' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/Large.php',
+ 'PHPUnit\\Framework\\Attributes\\Medium' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/Medium.php',
+ 'PHPUnit\\Framework\\Attributes\\PostCondition' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/PostCondition.php',
+ 'PHPUnit\\Framework\\Attributes\\PreCondition' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/PreCondition.php',
+ 'PHPUnit\\Framework\\Attributes\\PreserveGlobalState' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/PreserveGlobalState.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresEnvironmentVariable' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/RequiresEnvironmentVariable.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresFunction' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/RequiresFunction.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/RequiresMethod.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresOperatingSystem' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/RequiresOperatingSystem.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresOperatingSystemFamily' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/RequiresOperatingSystemFamily.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresPhp' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/RequiresPhp.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresPhpExtension' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/RequiresPhpExtension.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresPhpunit' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/RequiresPhpunit.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresPhpunitExtension' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/RequiresPhpunitExtension.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresSetting' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/RequiresSetting.php',
+ 'PHPUnit\\Framework\\Attributes\\RunClassInSeparateProcess' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/RunClassInSeparateProcess.php',
+ 'PHPUnit\\Framework\\Attributes\\RunInSeparateProcess' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/RunInSeparateProcess.php',
+ 'PHPUnit\\Framework\\Attributes\\RunTestsInSeparateProcesses' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/RunTestsInSeparateProcesses.php',
+ 'PHPUnit\\Framework\\Attributes\\Small' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/Small.php',
+ 'PHPUnit\\Framework\\Attributes\\Test' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/Test.php',
+ 'PHPUnit\\Framework\\Attributes\\TestDox' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/TestDox.php',
+ 'PHPUnit\\Framework\\Attributes\\TestWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/TestWith.php',
+ 'PHPUnit\\Framework\\Attributes\\TestWithJson' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/TestWithJson.php',
+ 'PHPUnit\\Framework\\Attributes\\Ticket' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/Ticket.php',
+ 'PHPUnit\\Framework\\Attributes\\UsesClass' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/UsesClass.php',
+ 'PHPUnit\\Framework\\Attributes\\UsesClassesThatExtendClass' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/UsesClassesThatExtendClass.php',
+ 'PHPUnit\\Framework\\Attributes\\UsesClassesThatImplementInterface' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/UsesClassesThatImplementInterface.php',
+ 'PHPUnit\\Framework\\Attributes\\UsesFunction' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/UsesFunction.php',
+ 'PHPUnit\\Framework\\Attributes\\UsesMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/UsesMethod.php',
+ 'PHPUnit\\Framework\\Attributes\\UsesNamespace' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/UsesNamespace.php',
+ 'PHPUnit\\Framework\\Attributes\\UsesTrait' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/UsesTrait.php',
+ 'PHPUnit\\Framework\\Attributes\\WithoutErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Framework/Attributes/WithoutErrorHandler.php',
+ 'PHPUnit\\Framework\\CodeCoverageException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.php',
+ 'PHPUnit\\Framework\\ComparisonMethodDoesNotAcceptParameterTypeException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotAcceptParameterTypeException.php',
+ 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareBoolReturnTypeException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareBoolReturnTypeException.php',
+ 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareExactlyOneParameterException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareExactlyOneParameterException.php',
+ 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareParameterTypeException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareParameterTypeException.php',
+ 'PHPUnit\\Framework\\ComparisonMethodDoesNotExistException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotExistException.php',
+ 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/ArrayHasKey.php',
+ 'PHPUnit\\Framework\\Constraint\\BinaryOperator' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/BinaryOperator.php',
+ 'PHPUnit\\Framework\\Constraint\\Callback' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Callback.php',
+ 'PHPUnit\\Framework\\Constraint\\Constraint' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php',
+ 'PHPUnit\\Framework\\Constraint\\Count' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/Count.php',
+ 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/DirectoryExists.php',
+ 'PHPUnit\\Framework\\Constraint\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception/Exception.php',
+ 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionCode.php',
+ 'PHPUnit\\Framework\\Constraint\\ExceptionMessageIsOrContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionMessageIsOrContains.php',
+ 'PHPUnit\\Framework\\Constraint\\ExceptionMessageMatchesRegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionMessageMatchesRegularExpression.php',
+ 'PHPUnit\\Framework\\Constraint\\FileExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/FileExists.php',
+ 'PHPUnit\\Framework\\Constraint\\GreaterThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/GreaterThan.php',
+ 'PHPUnit\\Framework\\Constraint\\IsAnything' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php',
+ 'PHPUnit\\Framework\\Constraint\\IsEmpty' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/IsEmpty.php',
+ 'PHPUnit\\Framework\\Constraint\\IsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqual.php',
+ 'PHPUnit\\Framework\\Constraint\\IsEqualCanonicalizing' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualCanonicalizing.php',
+ 'PHPUnit\\Framework\\Constraint\\IsEqualIgnoringCase' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualIgnoringCase.php',
+ 'PHPUnit\\Framework\\Constraint\\IsEqualWithDelta' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualWithDelta.php',
+ 'PHPUnit\\Framework\\Constraint\\IsFalse' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Boolean/IsFalse.php',
+ 'PHPUnit\\Framework\\Constraint\\IsFinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Math/IsFinite.php',
+ 'PHPUnit\\Framework\\Constraint\\IsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php',
+ 'PHPUnit\\Framework\\Constraint\\IsInfinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Math/IsInfinite.php',
+ 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Type/IsInstanceOf.php',
+ 'PHPUnit\\Framework\\Constraint\\IsJson' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/IsJson.php',
+ 'PHPUnit\\Framework\\Constraint\\IsList' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/IsList.php',
+ 'PHPUnit\\Framework\\Constraint\\IsNan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Math/IsNan.php',
+ 'PHPUnit\\Framework\\Constraint\\IsNull' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Type/IsNull.php',
+ 'PHPUnit\\Framework\\Constraint\\IsReadable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/IsReadable.php',
+ 'PHPUnit\\Framework\\Constraint\\IsTrue' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Boolean/IsTrue.php',
+ 'PHPUnit\\Framework\\Constraint\\IsType' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Type/IsType.php',
+ 'PHPUnit\\Framework\\Constraint\\IsWritable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/IsWritable.php',
+ 'PHPUnit\\Framework\\Constraint\\JsonMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php',
+ 'PHPUnit\\Framework\\Constraint\\LessThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/LessThan.php',
+ 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalAnd.php',
+ 'PHPUnit\\Framework\\Constraint\\LogicalNot' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalNot.php',
+ 'PHPUnit\\Framework\\Constraint\\LogicalOr' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalOr.php',
+ 'PHPUnit\\Framework\\Constraint\\LogicalXor' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalXor.php',
+ 'PHPUnit\\Framework\\Constraint\\ObjectEquals' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Object/ObjectEquals.php',
+ 'PHPUnit\\Framework\\Constraint\\ObjectHasProperty' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Object/ObjectHasProperty.php',
+ 'PHPUnit\\Framework\\Constraint\\Operator' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/Operator.php',
+ 'PHPUnit\\Framework\\Constraint\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/RegularExpression.php',
+ 'PHPUnit\\Framework\\Constraint\\SameSize' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/SameSize.php',
+ 'PHPUnit\\Framework\\Constraint\\StringContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/StringContains.php',
+ 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/StringEndsWith.php',
+ 'PHPUnit\\Framework\\Constraint\\StringEqualsStringIgnoringLineEndings' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/StringEqualsStringIgnoringLineEndings.php',
+ 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/StringMatchesFormatDescription.php',
+ 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/StringStartsWith.php',
+ 'PHPUnit\\Framework\\Constraint\\TraversableContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContains.php',
+ 'PHPUnit\\Framework\\Constraint\\TraversableContainsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsEqual.php',
+ 'PHPUnit\\Framework\\Constraint\\TraversableContainsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsIdentical.php',
+ 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsOnly.php',
+ 'PHPUnit\\Framework\\Constraint\\UnaryOperator' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/UnaryOperator.php',
+ 'PHPUnit\\Framework\\DataProviderTestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php',
+ 'PHPUnit\\Framework\\EmptyStringException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/EmptyStringException.php',
+ 'PHPUnit\\Framework\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Exception.php',
+ 'PHPUnit\\Framework\\ExecutionOrderDependency' => $vendorDir . '/phpunit/phpunit/src/Framework/ExecutionOrderDependency.php',
+ 'PHPUnit\\Framework\\ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ExpectationFailedException.php',
+ 'PHPUnit\\Framework\\GeneratorNotSupportedException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/GeneratorNotSupportedException.php',
+ 'PHPUnit\\Framework\\IncompleteTest' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Incomplete/IncompleteTest.php',
+ 'PHPUnit\\Framework\\IncompleteTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Incomplete/IncompleteTestError.php',
+ 'PHPUnit\\Framework\\InvalidArgumentException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.php',
+ 'PHPUnit\\Framework\\InvalidCoversTargetException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.php',
+ 'PHPUnit\\Framework\\InvalidDataProviderException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.php',
+ 'PHPUnit\\Framework\\InvalidDependencyException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidDependencyException.php',
+ 'PHPUnit\\Framework\\IsolatedTestRunner' => $vendorDir . '/phpunit/phpunit/src/Framework/TestRunner/IsolatedTestRunner.php',
+ 'PHPUnit\\Framework\\IsolatedTestRunnerRegistry' => $vendorDir . '/phpunit/phpunit/src/Framework/TestRunner/IsolatedTestRunnerRegistry.php',
+ 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/BadMethodCallException.php',
+ 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/Identity.php',
+ 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/InvocationMocker.php',
+ 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/InvocationStubber.php',
+ 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/MethodNameMatch.php',
+ 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/ParametersMatch.php',
+ 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/Stub.php',
+ 'PHPUnit\\Framework\\MockObject\\CannotUseOnlyMethodsException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php',
+ 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php',
+ 'PHPUnit\\Framework\\MockObject\\DoubledCloneMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/DoubledCloneMethod.php',
+ 'PHPUnit\\Framework\\MockObject\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsEnumerationException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ClassIsEnumerationException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsFinalException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ClassIsFinalException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\DoubledClass' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/DoubledClass.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\DoubledMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/DoubledMethod.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\DoubledMethodSet' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/DoubledMethodSet.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\DuplicateMethodException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/DuplicateMethodException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/Exception.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\Generator' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Generator.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\HookedProperty' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/HookedProperty.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\HookedPropertyGenerator' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/HookedPropertyGenerator.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\InvalidMethodNameException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/InvalidMethodNameException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\MethodNamedMethodException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/MethodNamedMethodException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\NameAlreadyInUseException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/NameAlreadyInUseException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\ReflectionException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ReflectionException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\RuntimeException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/RuntimeException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\TemplateLoader' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/TemplateLoader.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\UnknownTypeException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/UnknownTypeException.php',
+ 'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.php',
+ 'PHPUnit\\Framework\\MockObject\\Invocation' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Invocation.php',
+ 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/InvocationHandler.php',
+ 'PHPUnit\\Framework\\MockObject\\MatchBuilderNotFoundException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MatchBuilderNotFoundException.php',
+ 'PHPUnit\\Framework\\MockObject\\Matcher' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Matcher.php',
+ 'PHPUnit\\Framework\\MockObject\\MatcherAlreadyRegisteredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.php',
+ 'PHPUnit\\Framework\\MockObject\\Method' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/Method.php',
+ 'PHPUnit\\Framework\\MockObject\\MethodCannotBeConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodCannotBeConfiguredException.php',
+ 'PHPUnit\\Framework\\MockObject\\MethodNameAlreadyConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.php',
+ 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/MethodNameConstraint.php',
+ 'PHPUnit\\Framework\\MockObject\\MethodNameNotConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodNameNotConfiguredException.php',
+ 'PHPUnit\\Framework\\MockObject\\MethodParametersAlreadyConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.php',
+ 'PHPUnit\\Framework\\MockObject\\MockBuilder' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockBuilder.php',
+ 'PHPUnit\\Framework\\MockObject\\MockObject' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Interface/MockObject.php',
+ 'PHPUnit\\Framework\\MockObject\\MockObjectApi' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/MockObjectApi.php',
+ 'PHPUnit\\Framework\\MockObject\\MockObjectInternal' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Interface/MockObjectInternal.php',
+ 'PHPUnit\\Framework\\MockObject\\NeverReturningMethodException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/NeverReturningMethodException.php',
+ 'PHPUnit\\Framework\\MockObject\\NoMoreReturnValuesConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/NoMoreReturnValuesConfiguredException.php',
+ 'PHPUnit\\Framework\\MockObject\\ProxiedCloneMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/ProxiedCloneMethod.php',
+ 'PHPUnit\\Framework\\MockObject\\ReturnValueGenerator' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/ReturnValueGenerator.php',
+ 'PHPUnit\\Framework\\MockObject\\ReturnValueNotConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/AnyInvokedCount.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/AnyParameters.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/InvocationOrder.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/InvokedAtLeastCount.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/InvokedAtLeastOnce.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/InvokedAtMostCount.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/InvokedCount.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/MethodName.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/Parameters.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/ParametersRule.php',
+ 'PHPUnit\\Framework\\MockObject\\RuntimeException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/RuntimeException.php',
+ 'PHPUnit\\Framework\\MockObject\\Runtime\\PropertyGetHook' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/PropertyHook/PropertyGetHook.php',
+ 'PHPUnit\\Framework\\MockObject\\Runtime\\PropertyHook' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/PropertyHook/PropertyHook.php',
+ 'PHPUnit\\Framework\\MockObject\\Runtime\\PropertySetHook' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/PropertyHook/PropertySetHook.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Interface/Stub.php',
+ 'PHPUnit\\Framework\\MockObject\\StubApi' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/StubApi.php',
+ 'PHPUnit\\Framework\\MockObject\\StubInternal' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Interface/StubInternal.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ConsecutiveCalls.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/Exception.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnArgument.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnCallback.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnReference.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnSelf.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnStub.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnValueMap.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/Stub.php',
+ 'PHPUnit\\Framework\\MockObject\\TestDoubleState' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/TestDoubleState.php',
+ 'PHPUnit\\Framework\\NativeType' => $vendorDir . '/phpunit/phpunit/src/Framework/NativeType.php',
+ 'PHPUnit\\Framework\\NoChildTestSuiteException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php',
+ 'PHPUnit\\Framework\\PhptAssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/PhptAssertionFailedError.php',
+ 'PHPUnit\\Framework\\ProcessIsolationException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ProcessIsolationException.php',
+ 'PHPUnit\\Framework\\Reorderable' => $vendorDir . '/phpunit/phpunit/src/Framework/Reorderable.php',
+ 'PHPUnit\\Framework\\SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php',
+ 'PHPUnit\\Framework\\SeparateProcessTestRunner' => $vendorDir . '/phpunit/phpunit/src/Framework/TestRunner/SeparateProcessTestRunner.php',
+ 'PHPUnit\\Framework\\SkippedTest' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Skipped/SkippedTest.php',
+ 'PHPUnit\\Framework\\SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Skipped/SkippedTestSuiteError.php',
+ 'PHPUnit\\Framework\\SkippedWithMessageException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Skipped/SkippedWithMessageException.php',
+ 'PHPUnit\\Framework\\Test' => $vendorDir . '/phpunit/phpunit/src/Framework/Test.php',
+ 'PHPUnit\\Framework\\TestBuilder' => $vendorDir . '/phpunit/phpunit/src/Framework/TestBuilder.php',
+ 'PHPUnit\\Framework\\TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php',
+ 'PHPUnit\\Framework\\TestRunner' => $vendorDir . '/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php',
+ 'PHPUnit\\Framework\\TestSize\\Known' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSize/Known.php',
+ 'PHPUnit\\Framework\\TestSize\\Large' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSize/Large.php',
+ 'PHPUnit\\Framework\\TestSize\\Medium' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSize/Medium.php',
+ 'PHPUnit\\Framework\\TestSize\\Small' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSize/Small.php',
+ 'PHPUnit\\Framework\\TestSize\\TestSize' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSize/TestSize.php',
+ 'PHPUnit\\Framework\\TestSize\\Unknown' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSize/Unknown.php',
+ 'PHPUnit\\Framework\\TestStatus\\Deprecation' => $vendorDir . '/phpunit/phpunit/src/Framework/TestStatus/Deprecation.php',
+ 'PHPUnit\\Framework\\TestStatus\\Error' => $vendorDir . '/phpunit/phpunit/src/Framework/TestStatus/Error.php',
+ 'PHPUnit\\Framework\\TestStatus\\Failure' => $vendorDir . '/phpunit/phpunit/src/Framework/TestStatus/Failure.php',
+ 'PHPUnit\\Framework\\TestStatus\\Incomplete' => $vendorDir . '/phpunit/phpunit/src/Framework/TestStatus/Incomplete.php',
+ 'PHPUnit\\Framework\\TestStatus\\Known' => $vendorDir . '/phpunit/phpunit/src/Framework/TestStatus/Known.php',
+ 'PHPUnit\\Framework\\TestStatus\\Notice' => $vendorDir . '/phpunit/phpunit/src/Framework/TestStatus/Notice.php',
+ 'PHPUnit\\Framework\\TestStatus\\Risky' => $vendorDir . '/phpunit/phpunit/src/Framework/TestStatus/Risky.php',
+ 'PHPUnit\\Framework\\TestStatus\\Skipped' => $vendorDir . '/phpunit/phpunit/src/Framework/TestStatus/Skipped.php',
+ 'PHPUnit\\Framework\\TestStatus\\Success' => $vendorDir . '/phpunit/phpunit/src/Framework/TestStatus/Success.php',
+ 'PHPUnit\\Framework\\TestStatus\\TestStatus' => $vendorDir . '/phpunit/phpunit/src/Framework/TestStatus/TestStatus.php',
+ 'PHPUnit\\Framework\\TestStatus\\Unknown' => $vendorDir . '/phpunit/phpunit/src/Framework/TestStatus/Unknown.php',
+ 'PHPUnit\\Framework\\TestStatus\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/TestStatus/Warning.php',
+ 'PHPUnit\\Framework\\TestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite.php',
+ 'PHPUnit\\Framework\\TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php',
+ 'PHPUnit\\Framework\\UnknownClassOrInterfaceException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/UnknownClassOrInterfaceException.php',
+ 'PHPUnit\\Framework\\UnknownNativeTypeException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/UnknownNativeTypeException.php',
+ 'PHPUnit\\Logging\\EventLogger' => $vendorDir . '/phpunit/phpunit/src/Logging/EventLogger.php',
+ 'PHPUnit\\Logging\\JUnit\\JunitXmlLogger' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/JunitXmlLogger.php',
+ 'PHPUnit\\Logging\\JUnit\\Subscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/Subscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestErroredSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestFailedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestFailedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestFinishedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestMarkedIncompleteSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestMarkedIncompleteSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestPreparationFailedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestPreparationFailedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestPreparationStartedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestPreparationStartedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestPreparedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestPreparedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestPrintedUnexpectedOutputSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestPrintedUnexpectedOutputSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestRunnerExecutionFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestRunnerExecutionFinishedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestSkippedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestSkippedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestSuiteFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestSuiteFinishedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestSuiteStartedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestSuiteStartedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\Subscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/Subscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TeamCityLogger' => $vendorDir . '/phpunit/phpunit/src/Logging/TeamCity/TeamCityLogger.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestConsideredRiskySubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestConsideredRiskySubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestErroredSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestFailedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestFailedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestFinishedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestMarkedIncompleteSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestMarkedIncompleteSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestPreparedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestPreparedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestRunnerExecutionFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestRunnerExecutionFinishedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestSkippedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestSkippedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestSuiteBeforeFirstTestMethodErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestSuiteBeforeFirstTestMethodErroredSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestSuiteFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestSuiteFinishedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestSuiteSkippedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestSuiteSkippedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestSuiteStartedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestSuiteStartedSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\HtmlRenderer' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/HtmlRenderer.php',
+ 'PHPUnit\\Logging\\TestDox\\NamePrettifier' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/NamePrettifier.php',
+ 'PHPUnit\\Logging\\TestDox\\PlainTextRenderer' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/PlainTextRenderer.php',
+ 'PHPUnit\\Logging\\TestDox\\Subscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/Subscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestConsideredRiskySubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestConsideredRiskySubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestErroredSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestFailedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestFailedSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestFinishedSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestMarkedIncompleteSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestMarkedIncompleteSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestPassedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestPassedSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestPreparedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestPreparedSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestResult' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/TestResult.php',
+ 'PHPUnit\\Logging\\TestDox\\TestResultCollection' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/TestResultCollection.php',
+ 'PHPUnit\\Logging\\TestDox\\TestResultCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/TestResultCollectionIterator.php',
+ 'PHPUnit\\Logging\\TestDox\\TestResultCollector' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/TestResultCollector.php',
+ 'PHPUnit\\Logging\\TestDox\\TestSkippedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestSkippedSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredDeprecationSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredNoticeSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredNoticeSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpDeprecationSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpNoticeSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpWarningSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitDeprecationSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitErrorSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitWarningSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredWarningSubscriber' => $vendorDir . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredWarningSubscriber.php',
+ 'PHPUnit\\Metadata\\After' => $vendorDir . '/phpunit/phpunit/src/Metadata/After.php',
+ 'PHPUnit\\Metadata\\AfterClass' => $vendorDir . '/phpunit/phpunit/src/Metadata/AfterClass.php',
+ 'PHPUnit\\Metadata\\Api\\CodeCoverage' => $vendorDir . '/phpunit/phpunit/src/Metadata/Api/CodeCoverage.php',
+ 'PHPUnit\\Metadata\\Api\\DataProvider' => $vendorDir . '/phpunit/phpunit/src/Metadata/Api/DataProvider.php',
+ 'PHPUnit\\Metadata\\Api\\Dependencies' => $vendorDir . '/phpunit/phpunit/src/Metadata/Api/Dependencies.php',
+ 'PHPUnit\\Metadata\\Api\\Groups' => $vendorDir . '/phpunit/phpunit/src/Metadata/Api/Groups.php',
+ 'PHPUnit\\Metadata\\Api\\HookMethods' => $vendorDir . '/phpunit/phpunit/src/Metadata/Api/HookMethods.php',
+ 'PHPUnit\\Metadata\\Api\\Requirements' => $vendorDir . '/phpunit/phpunit/src/Metadata/Api/Requirements.php',
+ 'PHPUnit\\Metadata\\BackupGlobals' => $vendorDir . '/phpunit/phpunit/src/Metadata/BackupGlobals.php',
+ 'PHPUnit\\Metadata\\BackupStaticProperties' => $vendorDir . '/phpunit/phpunit/src/Metadata/BackupStaticProperties.php',
+ 'PHPUnit\\Metadata\\Before' => $vendorDir . '/phpunit/phpunit/src/Metadata/Before.php',
+ 'PHPUnit\\Metadata\\BeforeClass' => $vendorDir . '/phpunit/phpunit/src/Metadata/BeforeClass.php',
+ 'PHPUnit\\Metadata\\CoversClass' => $vendorDir . '/phpunit/phpunit/src/Metadata/CoversClass.php',
+ 'PHPUnit\\Metadata\\CoversClassesThatExtendClass' => $vendorDir . '/phpunit/phpunit/src/Metadata/CoversClassesThatExtendClass.php',
+ 'PHPUnit\\Metadata\\CoversClassesThatImplementInterface' => $vendorDir . '/phpunit/phpunit/src/Metadata/CoversClassesThatImplementInterface.php',
+ 'PHPUnit\\Metadata\\CoversFunction' => $vendorDir . '/phpunit/phpunit/src/Metadata/CoversFunction.php',
+ 'PHPUnit\\Metadata\\CoversMethod' => $vendorDir . '/phpunit/phpunit/src/Metadata/CoversMethod.php',
+ 'PHPUnit\\Metadata\\CoversNamespace' => $vendorDir . '/phpunit/phpunit/src/Metadata/CoversNamespace.php',
+ 'PHPUnit\\Metadata\\CoversNothing' => $vendorDir . '/phpunit/phpunit/src/Metadata/CoversNothing.php',
+ 'PHPUnit\\Metadata\\CoversTrait' => $vendorDir . '/phpunit/phpunit/src/Metadata/CoversTrait.php',
+ 'PHPUnit\\Metadata\\DataProvider' => $vendorDir . '/phpunit/phpunit/src/Metadata/DataProvider.php',
+ 'PHPUnit\\Metadata\\DependsOnClass' => $vendorDir . '/phpunit/phpunit/src/Metadata/DependsOnClass.php',
+ 'PHPUnit\\Metadata\\DependsOnMethod' => $vendorDir . '/phpunit/phpunit/src/Metadata/DependsOnMethod.php',
+ 'PHPUnit\\Metadata\\DisableReturnValueGenerationForTestDoubles' => $vendorDir . '/phpunit/phpunit/src/Metadata/DisableReturnValueGenerationForTestDoubles.php',
+ 'PHPUnit\\Metadata\\DoesNotPerformAssertions' => $vendorDir . '/phpunit/phpunit/src/Metadata/DoesNotPerformAssertions.php',
+ 'PHPUnit\\Metadata\\Exception' => $vendorDir . '/phpunit/phpunit/src/Metadata/Exception/Exception.php',
+ 'PHPUnit\\Metadata\\ExcludeGlobalVariableFromBackup' => $vendorDir . '/phpunit/phpunit/src/Metadata/ExcludeGlobalVariableFromBackup.php',
+ 'PHPUnit\\Metadata\\ExcludeStaticPropertyFromBackup' => $vendorDir . '/phpunit/phpunit/src/Metadata/ExcludeStaticPropertyFromBackup.php',
+ 'PHPUnit\\Metadata\\Group' => $vendorDir . '/phpunit/phpunit/src/Metadata/Group.php',
+ 'PHPUnit\\Metadata\\IgnoreDeprecations' => $vendorDir . '/phpunit/phpunit/src/Metadata/IgnoreDeprecations.php',
+ 'PHPUnit\\Metadata\\IgnorePhpunitDeprecations' => $vendorDir . '/phpunit/phpunit/src/Metadata/IgnorePhpunitDeprecations.php',
+ 'PHPUnit\\Metadata\\InvalidVersionRequirementException' => $vendorDir . '/phpunit/phpunit/src/Metadata/Exception/InvalidVersionRequirementException.php',
+ 'PHPUnit\\Metadata\\Metadata' => $vendorDir . '/phpunit/phpunit/src/Metadata/Metadata.php',
+ 'PHPUnit\\Metadata\\MetadataCollection' => $vendorDir . '/phpunit/phpunit/src/Metadata/MetadataCollection.php',
+ 'PHPUnit\\Metadata\\MetadataCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/Metadata/MetadataCollectionIterator.php',
+ 'PHPUnit\\Metadata\\NoVersionRequirementException' => $vendorDir . '/phpunit/phpunit/src/Metadata/Exception/NoVersionRequirementException.php',
+ 'PHPUnit\\Metadata\\Parser\\AttributeParser' => $vendorDir . '/phpunit/phpunit/src/Metadata/Parser/AttributeParser.php',
+ 'PHPUnit\\Metadata\\Parser\\CachingParser' => $vendorDir . '/phpunit/phpunit/src/Metadata/Parser/CachingParser.php',
+ 'PHPUnit\\Metadata\\Parser\\Parser' => $vendorDir . '/phpunit/phpunit/src/Metadata/Parser/Parser.php',
+ 'PHPUnit\\Metadata\\Parser\\Registry' => $vendorDir . '/phpunit/phpunit/src/Metadata/Parser/Registry.php',
+ 'PHPUnit\\Metadata\\PostCondition' => $vendorDir . '/phpunit/phpunit/src/Metadata/PostCondition.php',
+ 'PHPUnit\\Metadata\\PreCondition' => $vendorDir . '/phpunit/phpunit/src/Metadata/PreCondition.php',
+ 'PHPUnit\\Metadata\\PreserveGlobalState' => $vendorDir . '/phpunit/phpunit/src/Metadata/PreserveGlobalState.php',
+ 'PHPUnit\\Metadata\\RequiresEnvironmentVariable' => $vendorDir . '/phpunit/phpunit/src/Metadata/RequiresEnvironmentVariable.php',
+ 'PHPUnit\\Metadata\\RequiresFunction' => $vendorDir . '/phpunit/phpunit/src/Metadata/RequiresFunction.php',
+ 'PHPUnit\\Metadata\\RequiresMethod' => $vendorDir . '/phpunit/phpunit/src/Metadata/RequiresMethod.php',
+ 'PHPUnit\\Metadata\\RequiresOperatingSystem' => $vendorDir . '/phpunit/phpunit/src/Metadata/RequiresOperatingSystem.php',
+ 'PHPUnit\\Metadata\\RequiresOperatingSystemFamily' => $vendorDir . '/phpunit/phpunit/src/Metadata/RequiresOperatingSystemFamily.php',
+ 'PHPUnit\\Metadata\\RequiresPhp' => $vendorDir . '/phpunit/phpunit/src/Metadata/RequiresPhp.php',
+ 'PHPUnit\\Metadata\\RequiresPhpExtension' => $vendorDir . '/phpunit/phpunit/src/Metadata/RequiresPhpExtension.php',
+ 'PHPUnit\\Metadata\\RequiresPhpunit' => $vendorDir . '/phpunit/phpunit/src/Metadata/RequiresPhpunit.php',
+ 'PHPUnit\\Metadata\\RequiresPhpunitExtension' => $vendorDir . '/phpunit/phpunit/src/Metadata/RequiresPhpunitExtension.php',
+ 'PHPUnit\\Metadata\\RequiresSetting' => $vendorDir . '/phpunit/phpunit/src/Metadata/RequiresSetting.php',
+ 'PHPUnit\\Metadata\\RunClassInSeparateProcess' => $vendorDir . '/phpunit/phpunit/src/Metadata/RunClassInSeparateProcess.php',
+ 'PHPUnit\\Metadata\\RunInSeparateProcess' => $vendorDir . '/phpunit/phpunit/src/Metadata/RunInSeparateProcess.php',
+ 'PHPUnit\\Metadata\\RunTestsInSeparateProcesses' => $vendorDir . '/phpunit/phpunit/src/Metadata/RunTestsInSeparateProcesses.php',
+ 'PHPUnit\\Metadata\\Test' => $vendorDir . '/phpunit/phpunit/src/Metadata/Test.php',
+ 'PHPUnit\\Metadata\\TestDox' => $vendorDir . '/phpunit/phpunit/src/Metadata/TestDox.php',
+ 'PHPUnit\\Metadata\\TestWith' => $vendorDir . '/phpunit/phpunit/src/Metadata/TestWith.php',
+ 'PHPUnit\\Metadata\\UsesClass' => $vendorDir . '/phpunit/phpunit/src/Metadata/UsesClass.php',
+ 'PHPUnit\\Metadata\\UsesClassesThatExtendClass' => $vendorDir . '/phpunit/phpunit/src/Metadata/UsesClassesThatExtendClass.php',
+ 'PHPUnit\\Metadata\\UsesClassesThatImplementInterface' => $vendorDir . '/phpunit/phpunit/src/Metadata/UsesClassesThatImplementInterface.php',
+ 'PHPUnit\\Metadata\\UsesFunction' => $vendorDir . '/phpunit/phpunit/src/Metadata/UsesFunction.php',
+ 'PHPUnit\\Metadata\\UsesMethod' => $vendorDir . '/phpunit/phpunit/src/Metadata/UsesMethod.php',
+ 'PHPUnit\\Metadata\\UsesNamespace' => $vendorDir . '/phpunit/phpunit/src/Metadata/UsesNamespace.php',
+ 'PHPUnit\\Metadata\\UsesTrait' => $vendorDir . '/phpunit/phpunit/src/Metadata/UsesTrait.php',
+ 'PHPUnit\\Metadata\\Version\\ComparisonRequirement' => $vendorDir . '/phpunit/phpunit/src/Metadata/Version/ComparisonRequirement.php',
+ 'PHPUnit\\Metadata\\Version\\ConstraintRequirement' => $vendorDir . '/phpunit/phpunit/src/Metadata/Version/ConstraintRequirement.php',
+ 'PHPUnit\\Metadata\\Version\\Requirement' => $vendorDir . '/phpunit/phpunit/src/Metadata/Version/Requirement.php',
+ 'PHPUnit\\Metadata\\WithoutErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Metadata/WithoutErrorHandler.php',
+ 'PHPUnit\\Runner\\Baseline\\Baseline' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/Baseline.php',
+ 'PHPUnit\\Runner\\Baseline\\CannotLoadBaselineException' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/Exception/CannotLoadBaselineException.php',
+ 'PHPUnit\\Runner\\Baseline\\FileDoesNotHaveLineException' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/Exception/FileDoesNotHaveLineException.php',
+ 'PHPUnit\\Runner\\Baseline\\Generator' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/Generator.php',
+ 'PHPUnit\\Runner\\Baseline\\Issue' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/Issue.php',
+ 'PHPUnit\\Runner\\Baseline\\Reader' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/Reader.php',
+ 'PHPUnit\\Runner\\Baseline\\RelativePathCalculator' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/RelativePathCalculator.php',
+ 'PHPUnit\\Runner\\Baseline\\Subscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/Subscriber/Subscriber.php',
+ 'PHPUnit\\Runner\\Baseline\\TestTriggeredDeprecationSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/Subscriber/TestTriggeredDeprecationSubscriber.php',
+ 'PHPUnit\\Runner\\Baseline\\TestTriggeredNoticeSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/Subscriber/TestTriggeredNoticeSubscriber.php',
+ 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpDeprecationSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/Subscriber/TestTriggeredPhpDeprecationSubscriber.php',
+ 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpNoticeSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/Subscriber/TestTriggeredPhpNoticeSubscriber.php',
+ 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpWarningSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/Subscriber/TestTriggeredPhpWarningSubscriber.php',
+ 'PHPUnit\\Runner\\Baseline\\TestTriggeredWarningSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/Subscriber/TestTriggeredWarningSubscriber.php',
+ 'PHPUnit\\Runner\\Baseline\\Writer' => $vendorDir . '/phpunit/phpunit/src/Runner/Baseline/Writer.php',
+ 'PHPUnit\\Runner\\ClassCannotBeFoundException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/ClassCannotBeFoundException.php',
+ 'PHPUnit\\Runner\\ClassDoesNotExtendTestCaseException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/ClassDoesNotExtendTestCaseException.php',
+ 'PHPUnit\\Runner\\ClassIsAbstractException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/ClassIsAbstractException.php',
+ 'PHPUnit\\Runner\\CodeCoverage' => $vendorDir . '/phpunit/phpunit/src/Runner/CodeCoverage.php',
+ 'PHPUnit\\Runner\\DeprecationCollector\\Collector' => $vendorDir . '/phpunit/phpunit/src/Runner/DeprecationCollector/Collector.php',
+ 'PHPUnit\\Runner\\DeprecationCollector\\Facade' => $vendorDir . '/phpunit/phpunit/src/Runner/DeprecationCollector/Facade.php',
+ 'PHPUnit\\Runner\\DeprecationCollector\\Subscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/DeprecationCollector/Subscriber/Subscriber.php',
+ 'PHPUnit\\Runner\\DeprecationCollector\\TestPreparedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/DeprecationCollector/Subscriber/TestPreparedSubscriber.php',
+ 'PHPUnit\\Runner\\DeprecationCollector\\TestTriggeredDeprecationSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/DeprecationCollector/Subscriber/TestTriggeredDeprecationSubscriber.php',
+ 'PHPUnit\\Runner\\DirectoryDoesNotExistException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/DirectoryDoesNotExistException.php',
+ 'PHPUnit\\Runner\\ErrorException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/ErrorException.php',
+ 'PHPUnit\\Runner\\ErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Runner/ErrorHandler.php',
+ 'PHPUnit\\Runner\\Exception' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/Exception.php',
+ 'PHPUnit\\Runner\\Extension\\Extension' => $vendorDir . '/phpunit/phpunit/src/Runner/Extension/Extension.php',
+ 'PHPUnit\\Runner\\Extension\\ExtensionBootstrapper' => $vendorDir . '/phpunit/phpunit/src/Runner/Extension/ExtensionBootstrapper.php',
+ 'PHPUnit\\Runner\\Extension\\Facade' => $vendorDir . '/phpunit/phpunit/src/Runner/Extension/Facade.php',
+ 'PHPUnit\\Runner\\Extension\\ParameterCollection' => $vendorDir . '/phpunit/phpunit/src/Runner/Extension/ParameterCollection.php',
+ 'PHPUnit\\Runner\\Extension\\PharLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/Extension/PharLoader.php',
+ 'PHPUnit\\Runner\\FileDoesNotExistException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/FileDoesNotExistException.php',
+ 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php',
+ 'PHPUnit\\Runner\\Filter\\ExcludeNameFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/ExcludeNameFilterIterator.php',
+ 'PHPUnit\\Runner\\Filter\\Factory' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Factory.php',
+ 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php',
+ 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php',
+ 'PHPUnit\\Runner\\Filter\\IncludeNameFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/IncludeNameFilterIterator.php',
+ 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php',
+ 'PHPUnit\\Runner\\Filter\\TestIdFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/TestIdFilterIterator.php',
+ 'PHPUnit\\Runner\\GarbageCollection\\ExecutionFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/GarbageCollection/Subscriber/ExecutionFinishedSubscriber.php',
+ 'PHPUnit\\Runner\\GarbageCollection\\ExecutionStartedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/GarbageCollection/Subscriber/ExecutionStartedSubscriber.php',
+ 'PHPUnit\\Runner\\GarbageCollection\\GarbageCollectionHandler' => $vendorDir . '/phpunit/phpunit/src/Runner/GarbageCollection/GarbageCollectionHandler.php',
+ 'PHPUnit\\Runner\\GarbageCollection\\Subscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/GarbageCollection/Subscriber/Subscriber.php',
+ 'PHPUnit\\Runner\\GarbageCollection\\TestFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/GarbageCollection/Subscriber/TestFinishedSubscriber.php',
+ 'PHPUnit\\Runner\\HookMethod' => $vendorDir . '/phpunit/phpunit/src/Runner/HookMethod/HookMethod.php',
+ 'PHPUnit\\Runner\\HookMethodCollection' => $vendorDir . '/phpunit/phpunit/src/Runner/HookMethod/HookMethodCollection.php',
+ 'PHPUnit\\Runner\\InvalidOrderException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/InvalidOrderException.php',
+ 'PHPUnit\\Runner\\InvalidPhptFileException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/InvalidPhptFileException.php',
+ 'PHPUnit\\Runner\\ParameterDoesNotExistException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/ParameterDoesNotExistException.php',
+ 'PHPUnit\\Runner\\PhptExternalFileCannotBeLoadedException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/PhptExternalFileCannotBeLoadedException.php',
+ 'PHPUnit\\Runner\\PhptTestCase' => $vendorDir . '/phpunit/phpunit/src/Runner/PHPT/PhptTestCase.php',
+ 'PHPUnit\\Runner\\ResultCache\\DefaultResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/DefaultResultCache.php',
+ 'PHPUnit\\Runner\\ResultCache\\NullResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/NullResultCache.php',
+ 'PHPUnit\\Runner\\ResultCache\\ResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/ResultCache.php',
+ 'PHPUnit\\Runner\\ResultCache\\ResultCacheHandler' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/ResultCacheHandler.php',
+ 'PHPUnit\\Runner\\ResultCache\\Subscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/Subscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestConsideredRiskySubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestConsideredRiskySubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestErroredSubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestFailedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestFailedSubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestFinishedSubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestMarkedIncompleteSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestMarkedIncompleteSubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestPreparedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestPreparedSubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestSkippedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestSkippedSubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestSuiteFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestSuiteFinishedSubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestSuiteStartedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestSuiteStartedSubscriber.php',
+ 'PHPUnit\\Runner\\TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php',
+ 'PHPUnit\\Runner\\TestSuiteSorter' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteSorter.php',
+ 'PHPUnit\\Runner\\UnsupportedPhptSectionException' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception/UnsupportedPhptSectionException.php',
+ 'PHPUnit\\Runner\\Version' => $vendorDir . '/phpunit/phpunit/src/Runner/Version.php',
+ 'PHPUnit\\TestRunner\\IssueFilter' => $vendorDir . '/phpunit/phpunit/src/Runner/IssueFilter.php',
+ 'PHPUnit\\TestRunner\\TestResult\\AfterTestClassMethodErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/AfterTestClassMethodErroredSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\BeforeTestClassMethodErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/BeforeTestClassMethodErroredSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\Collector' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Collector.php',
+ 'PHPUnit\\TestRunner\\TestResult\\ExecutionStartedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/ExecutionStartedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\Facade' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Facade.php',
+ 'PHPUnit\\TestRunner\\TestResult\\Issues\\Issue' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Issue.php',
+ 'PHPUnit\\TestRunner\\TestResult\\PassedTests' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/PassedTests.php',
+ 'PHPUnit\\TestRunner\\TestResult\\Subscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/Subscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestConsideredRiskySubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestConsideredRiskySubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestErroredSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestFailedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestFailedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestFinishedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestMarkedIncompleteSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestMarkedIncompleteSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestPreparedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestPreparedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestResult' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/TestResult.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestRunnerTriggeredDeprecationSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestRunnerTriggeredDeprecationSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestRunnerTriggeredWarningSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestRunnerTriggeredWarningSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestSkippedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestSkippedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestSuiteFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestSuiteFinishedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestSuiteSkippedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestSuiteSkippedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestSuiteStartedSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestSuiteStartedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredDeprecationSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredErrorSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredErrorSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredNoticeSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredNoticeSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpDeprecationSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpNoticeSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpWarningSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpunitDeprecationSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpunitErrorSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpunitWarningSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredWarningSubscriber' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredWarningSubscriber.php',
+ 'PHPUnit\\TextUI\\Application' => $vendorDir . '/phpunit/phpunit/src/TextUI/Application.php',
+ 'PHPUnit\\TextUI\\CannotOpenSocketException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/CannotOpenSocketException.php',
+ 'PHPUnit\\TextUI\\CliArguments\\Builder' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Cli/Builder.php',
+ 'PHPUnit\\TextUI\\CliArguments\\Configuration' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Cli/Configuration.php',
+ 'PHPUnit\\TextUI\\CliArguments\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Cli/Exception.php',
+ 'PHPUnit\\TextUI\\CliArguments\\XmlConfigurationFileFinder' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Cli/XmlConfigurationFileFinder.php',
+ 'PHPUnit\\TextUI\\Command\\AtLeastVersionCommand' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command/Commands/AtLeastVersionCommand.php',
+ 'PHPUnit\\TextUI\\Command\\Command' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command/Command.php',
+ 'PHPUnit\\TextUI\\Command\\GenerateConfigurationCommand' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command/Commands/GenerateConfigurationCommand.php',
+ 'PHPUnit\\TextUI\\Command\\ListGroupsCommand' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command/Commands/ListGroupsCommand.php',
+ 'PHPUnit\\TextUI\\Command\\ListTestFilesCommand' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command/Commands/ListTestFilesCommand.php',
+ 'PHPUnit\\TextUI\\Command\\ListTestSuitesCommand' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command/Commands/ListTestSuitesCommand.php',
+ 'PHPUnit\\TextUI\\Command\\ListTestsAsTextCommand' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command/Commands/ListTestsAsTextCommand.php',
+ 'PHPUnit\\TextUI\\Command\\ListTestsAsXmlCommand' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command/Commands/ListTestsAsXmlCommand.php',
+ 'PHPUnit\\TextUI\\Command\\MigrateConfigurationCommand' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command/Commands/MigrateConfigurationCommand.php',
+ 'PHPUnit\\TextUI\\Command\\Result' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command/Result.php',
+ 'PHPUnit\\TextUI\\Command\\ShowHelpCommand' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command/Commands/ShowHelpCommand.php',
+ 'PHPUnit\\TextUI\\Command\\ShowVersionCommand' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command/Commands/ShowVersionCommand.php',
+ 'PHPUnit\\TextUI\\Command\\VersionCheckCommand' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command/Commands/VersionCheckCommand.php',
+ 'PHPUnit\\TextUI\\Command\\WarmCodeCoverageCacheCommand' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command/Commands/WarmCodeCoverageCacheCommand.php',
+ 'PHPUnit\\TextUI\\Configuration\\Builder' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Builder.php',
+ 'PHPUnit\\TextUI\\Configuration\\CodeCoverageFilterRegistry' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/CodeCoverageFilterRegistry.php',
+ 'PHPUnit\\TextUI\\Configuration\\CodeCoverageReportNotConfiguredException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/CodeCoverageReportNotConfiguredException.php',
+ 'PHPUnit\\TextUI\\Configuration\\Configuration' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Configuration.php',
+ 'PHPUnit\\TextUI\\Configuration\\ConfigurationCannotBeBuiltException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/ConfigurationCannotBeBuiltException.php',
+ 'PHPUnit\\TextUI\\Configuration\\Constant' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/Constant.php',
+ 'PHPUnit\\TextUI\\Configuration\\ConstantCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/ConstantCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\ConstantCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/ConstantCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\Directory' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/Directory.php',
+ 'PHPUnit\\TextUI\\Configuration\\DirectoryCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/DirectoryCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\DirectoryCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/DirectoryCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/Exception.php',
+ 'PHPUnit\\TextUI\\Configuration\\ExtensionBootstrap' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/ExtensionBootstrap.php',
+ 'PHPUnit\\TextUI\\Configuration\\ExtensionBootstrapCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/ExtensionBootstrapCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\ExtensionBootstrapCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/ExtensionBootstrapCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\File' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/File.php',
+ 'PHPUnit\\TextUI\\Configuration\\FileCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/FileCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\FileCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/FileCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\FilterDirectory' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/FilterDirectory.php',
+ 'PHPUnit\\TextUI\\Configuration\\FilterDirectoryCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/FilterDirectoryCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\FilterDirectoryCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/FilterDirectoryCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\FilterNotConfiguredException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/FilterNotConfiguredException.php',
+ 'PHPUnit\\TextUI\\Configuration\\Group' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/Group.php',
+ 'PHPUnit\\TextUI\\Configuration\\GroupCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/GroupCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\GroupCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/GroupCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\IniSetting' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/IniSetting.php',
+ 'PHPUnit\\TextUI\\Configuration\\IniSettingCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/IniSettingCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\IniSettingCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/IniSettingCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\LoggingNotConfiguredException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/LoggingNotConfiguredException.php',
+ 'PHPUnit\\TextUI\\Configuration\\Merger' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Merger.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoBaselineException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoBaselineException.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoBootstrapException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoBootstrapException.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoCacheDirectoryException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoCacheDirectoryException.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoConfigurationFileException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoConfigurationFileException.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoCoverageCacheDirectoryException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoCoverageCacheDirectoryException.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoCustomCssFileException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoCustomCssFileException.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoDefaultTestSuiteException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoDefaultTestSuiteException.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoPharExtensionDirectoryException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoPharExtensionDirectoryException.php',
+ 'PHPUnit\\TextUI\\Configuration\\Php' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/Php.php',
+ 'PHPUnit\\TextUI\\Configuration\\PhpHandler' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/PhpHandler.php',
+ 'PHPUnit\\TextUI\\Configuration\\Registry' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Registry.php',
+ 'PHPUnit\\TextUI\\Configuration\\Source' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/Source.php',
+ 'PHPUnit\\TextUI\\Configuration\\SourceFilter' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/SourceFilter.php',
+ 'PHPUnit\\TextUI\\Configuration\\SourceMapper' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/SourceMapper.php',
+ 'PHPUnit\\TextUI\\Configuration\\SpecificDeprecationToStopOnNotConfiguredException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/SpecificDeprecationToStopOnNotConfiguredException.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestDirectory' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestDirectory.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestDirectoryCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestDirectoryCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestDirectoryCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestDirectoryCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestFile' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestFile.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestFileCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestFileCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestFileCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestFileCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestSuite' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestSuite.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestSuiteBuilder' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/TestSuiteBuilder.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestSuiteCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestSuiteCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestSuiteCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestSuiteCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\Variable' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/Variable.php',
+ 'PHPUnit\\TextUI\\Configuration\\VariableCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/VariableCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\VariableCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Value/VariableCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/Exception.php',
+ 'PHPUnit\\TextUI\\Help' => $vendorDir . '/phpunit/phpunit/src/TextUI/Help.php',
+ 'PHPUnit\\TextUI\\InvalidSocketException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/InvalidSocketException.php',
+ 'PHPUnit\\TextUI\\Output\\DefaultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Printer/DefaultPrinter.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\BeforeTestClassMethodErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/BeforeTestClassMethodErroredSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\ProgressPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/ProgressPrinter.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\Subscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/Subscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestConsideredRiskySubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestConsideredRiskySubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestErroredSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestErroredSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestFailedSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestFailedSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestFinishedSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestFinishedSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestMarkedIncompleteSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestMarkedIncompleteSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestPreparedSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestPreparedSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestRunnerExecutionStartedSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestRunnerExecutionStartedSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestSkippedSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestSkippedSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredDeprecationSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredDeprecationSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredErrorSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredErrorSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredNoticeSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredNoticeSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpDeprecationSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpDeprecationSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpNoticeSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpNoticeSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpWarningSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpWarningSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpunitDeprecationSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpunitWarningSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitWarningSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredWarningSubscriber' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredWarningSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/ResultPrinter.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\UnexpectedOutputPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Default/UnexpectedOutputPrinter.php',
+ 'PHPUnit\\TextUI\\Output\\Facade' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Facade.php',
+ 'PHPUnit\\TextUI\\Output\\NullPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Printer/NullPrinter.php',
+ 'PHPUnit\\TextUI\\Output\\Printer' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/Printer/Printer.php',
+ 'PHPUnit\\TextUI\\Output\\SummaryPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/SummaryPrinter.php',
+ 'PHPUnit\\TextUI\\Output\\TestDox\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/Output/TestDox/ResultPrinter.php',
+ 'PHPUnit\\TextUI\\RuntimeException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/RuntimeException.php',
+ 'PHPUnit\\TextUI\\ShellExitCodeCalculator' => $vendorDir . '/phpunit/phpunit/src/TextUI/ShellExitCodeCalculator.php',
+ 'PHPUnit\\TextUI\\TestDirectoryNotFoundException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/TestDirectoryNotFoundException.php',
+ 'PHPUnit\\TextUI\\TestFileNotFoundException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/TestFileNotFoundException.php',
+ 'PHPUnit\\TextUI\\TestRunner' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestRunner.php',
+ 'PHPUnit\\TextUI\\TestSuiteFilterProcessor' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestSuiteFilterProcessor.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CannotFindSchemaException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Exception/CannotFindSchemaException.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/CodeCoverage.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Clover' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/Report/Clover.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Cobertura' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/Report/Cobertura.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Crap4j' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/Report/Crap4j.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Html' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/Report/Html.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Php' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/Report/Php.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Text' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/Report/Text.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Xml' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/Report/Xml.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Configuration' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Configuration.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\ConvertLogTypes' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/ConvertLogTypes.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCloverToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/CoverageCloverToReport.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCrap4jToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/CoverageCrap4jToReport.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageHtmlToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/CoverageHtmlToReport.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CoveragePhpToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/CoveragePhpToReport.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageTextToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/CoverageTextToReport.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageXmlToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/CoverageXmlToReport.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\DefaultConfiguration' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/DefaultConfiguration.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Exception.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\FailedSchemaDetectionResult' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/SchemaDetector/FailedSchemaDetectionResult.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Generator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Generator.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Groups' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Groups.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\IntroduceCacheDirectoryAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCacheDirectoryAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\IntroduceCoverageElement' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCoverageElement.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\LoadedFromFileConfiguration' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/LoadedFromFileConfiguration.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Loader' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Loader.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\LogToReportMigration' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/LogToReportMigration.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Junit' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Logging/Junit.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Logging' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Logging/Logging.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TeamCity' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Logging/TeamCity.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Html' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Logging/TestDox/Html.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Text' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Logging/TestDox/Text.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Migration' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/Migration.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilder' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/MigrationBuilder.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/MigrationException.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Migrator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrator.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromFilterWhitelistToCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromRootToCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromRootToCoverage.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\MoveCoverageDirectoriesToSource' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/MoveCoverageDirectoriesToSource.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistExcludesToCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistExcludesToCoverage.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistIncludesToCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistIncludesToCoverage.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\PHPUnit' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/PHPUnit.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveBeStrictAboutTodoAnnotatedTestsAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutTodoAnnotatedTestsAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCacheResultFileAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheResultFileAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCacheTokensAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheTokensAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveConversionToExceptionsAttributes' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveConversionToExceptionsAttributes.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCoverageElementCacheDirectoryAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementCacheDirectoryAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCoverageElementIncludeUncoveredFilesAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementIncludeUncoveredFilesAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCoverageElementProcessUncoveredFilesAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementProcessUncoveredFilesAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveEmptyFilter' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveEmptyFilter.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveListeners' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveListeners.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveLogTypes' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveLogTypes.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveLoggingElements' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveLoggingElements.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveNoInteractionAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveNoInteractionAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemovePrinterAttributes' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemovePrinterAttributes.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveRegisterMockObjectsFromTestArgumentsRecursivelyAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveRegisterMockObjectsFromTestArgumentsRecursivelyAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveTestDoxGroupsElement' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestDoxGroupsElement.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveTestSuiteLoaderAttributes' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestSuiteLoaderAttributes.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveVerboseAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveVerboseAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RenameBackupStaticAttributesAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RenameBackupStaticAttributesAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RenameBeStrictAboutCoversAnnotationAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RenameBeStrictAboutCoversAnnotationAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RenameForceCoversAnnotationAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RenameForceCoversAnnotationAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\ReplaceRestrictDeprecationsWithIgnoreDeprecations' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/ReplaceRestrictDeprecationsWithIgnoreDeprecations.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaDetectionResult' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/SchemaDetector/SchemaDetectionResult.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaDetector' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/SchemaDetector/SchemaDetector.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaFinder' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/SchemaFinder.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\SnapshotNodeList' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/SnapshotNodeList.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\SuccessfulSchemaDetectionResult' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/SchemaDetector/SuccessfulSchemaDetectionResult.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuiteMapper' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/TestSuiteMapper.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\UpdateSchemaLocation' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/UpdateSchemaLocation.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\ValidationResult' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Validator/ValidationResult.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Validator' => $vendorDir . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Validator/Validator.php',
+ 'PHPUnit\\Util\\Color' => $vendorDir . '/phpunit/phpunit/src/Util/Color.php',
+ 'PHPUnit\\Util\\Exception' => $vendorDir . '/phpunit/phpunit/src/Util/Exception/Exception.php',
+ 'PHPUnit\\Util\\ExcludeList' => $vendorDir . '/phpunit/phpunit/src/Util/ExcludeList.php',
+ 'PHPUnit\\Util\\Exporter' => $vendorDir . '/phpunit/phpunit/src/Util/Exporter.php',
+ 'PHPUnit\\Util\\Filesystem' => $vendorDir . '/phpunit/phpunit/src/Util/Filesystem.php',
+ 'PHPUnit\\Util\\Filter' => $vendorDir . '/phpunit/phpunit/src/Util/Filter.php',
+ 'PHPUnit\\Util\\GlobalState' => $vendorDir . '/phpunit/phpunit/src/Util/GlobalState.php',
+ 'PHPUnit\\Util\\Http\\Downloader' => $vendorDir . '/phpunit/phpunit/src/Util/Http/Downloader.php',
+ 'PHPUnit\\Util\\Http\\PhpDownloader' => $vendorDir . '/phpunit/phpunit/src/Util/Http/PhpDownloader.php',
+ 'PHPUnit\\Util\\InvalidDirectoryException' => $vendorDir . '/phpunit/phpunit/src/Util/Exception/InvalidDirectoryException.php',
+ 'PHPUnit\\Util\\InvalidJsonException' => $vendorDir . '/phpunit/phpunit/src/Util/Exception/InvalidJsonException.php',
+ 'PHPUnit\\Util\\InvalidVersionOperatorException' => $vendorDir . '/phpunit/phpunit/src/Util/Exception/InvalidVersionOperatorException.php',
+ 'PHPUnit\\Util\\Json' => $vendorDir . '/phpunit/phpunit/src/Util/Json.php',
+ 'PHPUnit\\Util\\PHP\\DefaultJobRunner' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/DefaultJobRunner.php',
+ 'PHPUnit\\Util\\PHP\\Job' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/Job.php',
+ 'PHPUnit\\Util\\PHP\\JobRunner' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/JobRunner.php',
+ 'PHPUnit\\Util\\PHP\\JobRunnerRegistry' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/JobRunnerRegistry.php',
+ 'PHPUnit\\Util\\PHP\\PhpProcessException' => $vendorDir . '/phpunit/phpunit/src/Util/Exception/PhpProcessException.php',
+ 'PHPUnit\\Util\\PHP\\Result' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/Result.php',
+ 'PHPUnit\\Util\\Reflection' => $vendorDir . '/phpunit/phpunit/src/Util/Reflection.php',
+ 'PHPUnit\\Util\\Test' => $vendorDir . '/phpunit/phpunit/src/Util/Test.php',
+ 'PHPUnit\\Util\\ThrowableToStringMapper' => $vendorDir . '/phpunit/phpunit/src/Util/ThrowableToStringMapper.php',
+ 'PHPUnit\\Util\\VersionComparisonOperator' => $vendorDir . '/phpunit/phpunit/src/Util/VersionComparisonOperator.php',
+ 'PHPUnit\\Util\\Xml' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/Xml.php',
+ 'PHPUnit\\Util\\Xml\\Loader' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/Loader.php',
+ 'PHPUnit\\Util\\Xml\\XmlException' => $vendorDir . '/phpunit/phpunit/src/Util/Exception/XmlException.php',
+ 'PharIo\\Manifest\\Application' => $vendorDir . '/phar-io/manifest/src/values/Application.php',
+ 'PharIo\\Manifest\\ApplicationName' => $vendorDir . '/phar-io/manifest/src/values/ApplicationName.php',
+ 'PharIo\\Manifest\\Author' => $vendorDir . '/phar-io/manifest/src/values/Author.php',
+ 'PharIo\\Manifest\\AuthorCollection' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollection.php',
+ 'PharIo\\Manifest\\AuthorCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollectionIterator.php',
+ 'PharIo\\Manifest\\AuthorElement' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElement.php',
+ 'PharIo\\Manifest\\AuthorElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElementCollection.php',
+ 'PharIo\\Manifest\\BundledComponent' => $vendorDir . '/phar-io/manifest/src/values/BundledComponent.php',
+ 'PharIo\\Manifest\\BundledComponentCollection' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollection.php',
+ 'PharIo\\Manifest\\BundledComponentCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php',
+ 'PharIo\\Manifest\\BundlesElement' => $vendorDir . '/phar-io/manifest/src/xml/BundlesElement.php',
+ 'PharIo\\Manifest\\ComponentElement' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElement.php',
+ 'PharIo\\Manifest\\ComponentElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElementCollection.php',
+ 'PharIo\\Manifest\\ContainsElement' => $vendorDir . '/phar-io/manifest/src/xml/ContainsElement.php',
+ 'PharIo\\Manifest\\CopyrightElement' => $vendorDir . '/phar-io/manifest/src/xml/CopyrightElement.php',
+ 'PharIo\\Manifest\\CopyrightInformation' => $vendorDir . '/phar-io/manifest/src/values/CopyrightInformation.php',
+ 'PharIo\\Manifest\\ElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ElementCollection.php',
+ 'PharIo\\Manifest\\ElementCollectionException' => $vendorDir . '/phar-io/manifest/src/exceptions/ElementCollectionException.php',
+ 'PharIo\\Manifest\\Email' => $vendorDir . '/phar-io/manifest/src/values/Email.php',
+ 'PharIo\\Manifest\\Exception' => $vendorDir . '/phar-io/manifest/src/exceptions/Exception.php',
+ 'PharIo\\Manifest\\ExtElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtElement.php',
+ 'PharIo\\Manifest\\ExtElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ExtElementCollection.php',
+ 'PharIo\\Manifest\\Extension' => $vendorDir . '/phar-io/manifest/src/values/Extension.php',
+ 'PharIo\\Manifest\\ExtensionElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtensionElement.php',
+ 'PharIo\\Manifest\\InvalidApplicationNameException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php',
+ 'PharIo\\Manifest\\InvalidEmailException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidEmailException.php',
+ 'PharIo\\Manifest\\InvalidUrlException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidUrlException.php',
+ 'PharIo\\Manifest\\Library' => $vendorDir . '/phar-io/manifest/src/values/Library.php',
+ 'PharIo\\Manifest\\License' => $vendorDir . '/phar-io/manifest/src/values/License.php',
+ 'PharIo\\Manifest\\LicenseElement' => $vendorDir . '/phar-io/manifest/src/xml/LicenseElement.php',
+ 'PharIo\\Manifest\\Manifest' => $vendorDir . '/phar-io/manifest/src/values/Manifest.php',
+ 'PharIo\\Manifest\\ManifestDocument' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocument.php',
+ 'PharIo\\Manifest\\ManifestDocumentException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php',
+ 'PharIo\\Manifest\\ManifestDocumentLoadingException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php',
+ 'PharIo\\Manifest\\ManifestDocumentMapper' => $vendorDir . '/phar-io/manifest/src/ManifestDocumentMapper.php',
+ 'PharIo\\Manifest\\ManifestDocumentMapperException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php',
+ 'PharIo\\Manifest\\ManifestElement' => $vendorDir . '/phar-io/manifest/src/xml/ManifestElement.php',
+ 'PharIo\\Manifest\\ManifestElementException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestElementException.php',
+ 'PharIo\\Manifest\\ManifestLoader' => $vendorDir . '/phar-io/manifest/src/ManifestLoader.php',
+ 'PharIo\\Manifest\\ManifestLoaderException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php',
+ 'PharIo\\Manifest\\ManifestSerializer' => $vendorDir . '/phar-io/manifest/src/ManifestSerializer.php',
+ 'PharIo\\Manifest\\NoEmailAddressException' => $vendorDir . '/phar-io/manifest/src/exceptions/NoEmailAddressException.php',
+ 'PharIo\\Manifest\\PhpElement' => $vendorDir . '/phar-io/manifest/src/xml/PhpElement.php',
+ 'PharIo\\Manifest\\PhpExtensionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpExtensionRequirement.php',
+ 'PharIo\\Manifest\\PhpVersionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpVersionRequirement.php',
+ 'PharIo\\Manifest\\Requirement' => $vendorDir . '/phar-io/manifest/src/values/Requirement.php',
+ 'PharIo\\Manifest\\RequirementCollection' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollection.php',
+ 'PharIo\\Manifest\\RequirementCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollectionIterator.php',
+ 'PharIo\\Manifest\\RequiresElement' => $vendorDir . '/phar-io/manifest/src/xml/RequiresElement.php',
+ 'PharIo\\Manifest\\Type' => $vendorDir . '/phar-io/manifest/src/values/Type.php',
+ 'PharIo\\Manifest\\Url' => $vendorDir . '/phar-io/manifest/src/values/Url.php',
+ 'PharIo\\Version\\AbstractVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/AbstractVersionConstraint.php',
+ 'PharIo\\Version\\AndVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/constraints/AndVersionConstraintGroup.php',
+ 'PharIo\\Version\\AnyVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/AnyVersionConstraint.php',
+ 'PharIo\\Version\\BuildMetaData' => $vendorDir . '/phar-io/version/src/BuildMetaData.php',
+ 'PharIo\\Version\\ExactVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/ExactVersionConstraint.php',
+ 'PharIo\\Version\\Exception' => $vendorDir . '/phar-io/version/src/exceptions/Exception.php',
+ 'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php',
+ 'PharIo\\Version\\InvalidPreReleaseSuffixException' => $vendorDir . '/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php',
+ 'PharIo\\Version\\InvalidVersionException' => $vendorDir . '/phar-io/version/src/exceptions/InvalidVersionException.php',
+ 'PharIo\\Version\\NoBuildMetaDataException' => $vendorDir . '/phar-io/version/src/exceptions/NoBuildMetaDataException.php',
+ 'PharIo\\Version\\NoPreReleaseSuffixException' => $vendorDir . '/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php',
+ 'PharIo\\Version\\OrVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/constraints/OrVersionConstraintGroup.php',
+ 'PharIo\\Version\\PreReleaseSuffix' => $vendorDir . '/phar-io/version/src/PreReleaseSuffix.php',
+ 'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php',
+ 'PharIo\\Version\\SpecificMajorVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php',
+ 'PharIo\\Version\\UnsupportedVersionConstraintException' => $vendorDir . '/phar-io/version/src/exceptions/UnsupportedVersionConstraintException.php',
+ 'PharIo\\Version\\Version' => $vendorDir . '/phar-io/version/src/Version.php',
+ 'PharIo\\Version\\VersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/VersionConstraint.php',
+ 'PharIo\\Version\\VersionConstraintParser' => $vendorDir . '/phar-io/version/src/VersionConstraintParser.php',
+ 'PharIo\\Version\\VersionConstraintValue' => $vendorDir . '/phar-io/version/src/VersionConstraintValue.php',
+ 'PharIo\\Version\\VersionNumber' => $vendorDir . '/phar-io/version/src/VersionNumber.php',
+ 'PhpParser\\Builder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder.php',
+ 'PhpParser\\BuilderFactory' => $vendorDir . '/nikic/php-parser/lib/PhpParser/BuilderFactory.php',
+ 'PhpParser\\BuilderHelpers' => $vendorDir . '/nikic/php-parser/lib/PhpParser/BuilderHelpers.php',
+ 'PhpParser\\Builder\\ClassConst' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php',
+ 'PhpParser\\Builder\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Class_.php',
+ 'PhpParser\\Builder\\Declaration' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Declaration.php',
+ 'PhpParser\\Builder\\EnumCase' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php',
+ 'PhpParser\\Builder\\Enum_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Enum_.php',
+ 'PhpParser\\Builder\\FunctionLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php',
+ 'PhpParser\\Builder\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Function_.php',
+ 'PhpParser\\Builder\\Interface_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Interface_.php',
+ 'PhpParser\\Builder\\Method' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Method.php',
+ 'PhpParser\\Builder\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php',
+ 'PhpParser\\Builder\\Param' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Param.php',
+ 'PhpParser\\Builder\\Property' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Property.php',
+ 'PhpParser\\Builder\\TraitUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php',
+ 'PhpParser\\Builder\\TraitUseAdaptation' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php',
+ 'PhpParser\\Builder\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Trait_.php',
+ 'PhpParser\\Builder\\Use_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Use_.php',
+ 'PhpParser\\Comment' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Comment.php',
+ 'PhpParser\\Comment\\Doc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Comment/Doc.php',
+ 'PhpParser\\ConstExprEvaluationException' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php',
+ 'PhpParser\\ConstExprEvaluator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php',
+ 'PhpParser\\Error' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Error.php',
+ 'PhpParser\\ErrorHandler' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ErrorHandler.php',
+ 'PhpParser\\ErrorHandler\\Collecting' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php',
+ 'PhpParser\\ErrorHandler\\Throwing' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php',
+ 'PhpParser\\Internal\\DiffElem' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php',
+ 'PhpParser\\Internal\\Differ' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/Differ.php',
+ 'PhpParser\\Internal\\PrintableNewAnonClassNode' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php',
+ 'PhpParser\\Internal\\TokenPolyfill' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php',
+ 'PhpParser\\Internal\\TokenStream' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php',
+ 'PhpParser\\JsonDecoder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/JsonDecoder.php',
+ 'PhpParser\\Lexer' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer.php',
+ 'PhpParser\\Lexer\\Emulative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\AsymmetricVisibilityTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\EnumTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\ExplicitOctalEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\PropertyTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\ReadonlyFunctionTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\ReadonlyTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php',
+ 'PhpParser\\Modifiers' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Modifiers.php',
+ 'PhpParser\\NameContext' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NameContext.php',
+ 'PhpParser\\Node' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node.php',
+ 'PhpParser\\NodeAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php',
+ 'PhpParser\\NodeDumper' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeDumper.php',
+ 'PhpParser\\NodeFinder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeFinder.php',
+ 'PhpParser\\NodeTraverser' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeTraverser.php',
+ 'PhpParser\\NodeTraverserInterface' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php',
+ 'PhpParser\\NodeVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor.php',
+ 'PhpParser\\NodeVisitorAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php',
+ 'PhpParser\\NodeVisitor\\CloningVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php',
+ 'PhpParser\\NodeVisitor\\CommentAnnotatingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php',
+ 'PhpParser\\NodeVisitor\\FindingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php',
+ 'PhpParser\\NodeVisitor\\FirstFindingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php',
+ 'PhpParser\\NodeVisitor\\NameResolver' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php',
+ 'PhpParser\\NodeVisitor\\NodeConnectingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php',
+ 'PhpParser\\NodeVisitor\\ParentConnectingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php',
+ 'PhpParser\\Node\\Arg' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Arg.php',
+ 'PhpParser\\Node\\ArrayItem' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php',
+ 'PhpParser\\Node\\Attribute' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Attribute.php',
+ 'PhpParser\\Node\\AttributeGroup' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php',
+ 'PhpParser\\Node\\ClosureUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php',
+ 'PhpParser\\Node\\ComplexType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/ComplexType.php',
+ 'PhpParser\\Node\\Const_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Const_.php',
+ 'PhpParser\\Node\\DeclareItem' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php',
+ 'PhpParser\\Node\\Expr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr.php',
+ 'PhpParser\\Node\\Expr\\ArrayDimFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php',
+ 'PhpParser\\Node\\Expr\\ArrayItem' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php',
+ 'PhpParser\\Node\\Expr\\Array_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php',
+ 'PhpParser\\Node\\Expr\\ArrowFunction' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php',
+ 'PhpParser\\Node\\Expr\\Assign' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php',
+ 'PhpParser\\Node\\Expr\\AssignOp' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Coalesce' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Div' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php',
+ 'PhpParser\\Node\\Expr\\AssignRef' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Coalesce' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php',
+ 'PhpParser\\Node\\Expr\\BitwiseNot' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php',
+ 'PhpParser\\Node\\Expr\\BooleanNot' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php',
+ 'PhpParser\\Node\\Expr\\CallLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php',
+ 'PhpParser\\Node\\Expr\\Cast' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php',
+ 'PhpParser\\Node\\Expr\\Cast\\Array_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php',
+ 'PhpParser\\Node\\Expr\\Cast\\Bool_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php',
+ 'PhpParser\\Node\\Expr\\Cast\\Double' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php',
+ 'PhpParser\\Node\\Expr\\Cast\\Int_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php',
+ 'PhpParser\\Node\\Expr\\Cast\\Object_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php',
+ 'PhpParser\\Node\\Expr\\Cast\\String_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php',
+ 'PhpParser\\Node\\Expr\\Cast\\Unset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php',
+ 'PhpParser\\Node\\Expr\\ClassConstFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php',
+ 'PhpParser\\Node\\Expr\\Clone_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php',
+ 'PhpParser\\Node\\Expr\\Closure' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php',
+ 'PhpParser\\Node\\Expr\\ClosureUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php',
+ 'PhpParser\\Node\\Expr\\ConstFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php',
+ 'PhpParser\\Node\\Expr\\Empty_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php',
+ 'PhpParser\\Node\\Expr\\Error' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php',
+ 'PhpParser\\Node\\Expr\\ErrorSuppress' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php',
+ 'PhpParser\\Node\\Expr\\Eval_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php',
+ 'PhpParser\\Node\\Expr\\Exit_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php',
+ 'PhpParser\\Node\\Expr\\FuncCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php',
+ 'PhpParser\\Node\\Expr\\Include_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php',
+ 'PhpParser\\Node\\Expr\\Instanceof_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php',
+ 'PhpParser\\Node\\Expr\\Isset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php',
+ 'PhpParser\\Node\\Expr\\List_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php',
+ 'PhpParser\\Node\\Expr\\Match_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php',
+ 'PhpParser\\Node\\Expr\\MethodCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php',
+ 'PhpParser\\Node\\Expr\\New_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php',
+ 'PhpParser\\Node\\Expr\\NullsafeMethodCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php',
+ 'PhpParser\\Node\\Expr\\NullsafePropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php',
+ 'PhpParser\\Node\\Expr\\PostDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php',
+ 'PhpParser\\Node\\Expr\\PostInc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php',
+ 'PhpParser\\Node\\Expr\\PreDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php',
+ 'PhpParser\\Node\\Expr\\PreInc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php',
+ 'PhpParser\\Node\\Expr\\Print_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php',
+ 'PhpParser\\Node\\Expr\\PropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php',
+ 'PhpParser\\Node\\Expr\\ShellExec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php',
+ 'PhpParser\\Node\\Expr\\StaticCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php',
+ 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php',
+ 'PhpParser\\Node\\Expr\\Ternary' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php',
+ 'PhpParser\\Node\\Expr\\Throw_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php',
+ 'PhpParser\\Node\\Expr\\UnaryMinus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php',
+ 'PhpParser\\Node\\Expr\\UnaryPlus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php',
+ 'PhpParser\\Node\\Expr\\Variable' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php',
+ 'PhpParser\\Node\\Expr\\YieldFrom' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php',
+ 'PhpParser\\Node\\Expr\\Yield_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php',
+ 'PhpParser\\Node\\FunctionLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php',
+ 'PhpParser\\Node\\Identifier' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Identifier.php',
+ 'PhpParser\\Node\\InterpolatedStringPart' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php',
+ 'PhpParser\\Node\\IntersectionType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php',
+ 'PhpParser\\Node\\MatchArm' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/MatchArm.php',
+ 'PhpParser\\Node\\Name' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name.php',
+ 'PhpParser\\Node\\Name\\FullyQualified' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php',
+ 'PhpParser\\Node\\Name\\Relative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php',
+ 'PhpParser\\Node\\NullableType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/NullableType.php',
+ 'PhpParser\\Node\\Param' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Param.php',
+ 'PhpParser\\Node\\PropertyHook' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php',
+ 'PhpParser\\Node\\PropertyItem' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php',
+ 'PhpParser\\Node\\Scalar' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar.php',
+ 'PhpParser\\Node\\Scalar\\DNumber' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php',
+ 'PhpParser\\Node\\Scalar\\Encapsed' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php',
+ 'PhpParser\\Node\\Scalar\\EncapsedStringPart' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php',
+ 'PhpParser\\Node\\Scalar\\Float_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/Float_.php',
+ 'PhpParser\\Node\\Scalar\\Int_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php',
+ 'PhpParser\\Node\\Scalar\\InterpolatedString' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php',
+ 'PhpParser\\Node\\Scalar\\LNumber' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\File' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Property' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Property.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php',
+ 'PhpParser\\Node\\Scalar\\String_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php',
+ 'PhpParser\\Node\\StaticVar' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/StaticVar.php',
+ 'PhpParser\\Node\\Stmt' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt.php',
+ 'PhpParser\\Node\\Stmt\\Block' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Block.php',
+ 'PhpParser\\Node\\Stmt\\Break_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php',
+ 'PhpParser\\Node\\Stmt\\Case_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php',
+ 'PhpParser\\Node\\Stmt\\Catch_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php',
+ 'PhpParser\\Node\\Stmt\\ClassConst' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php',
+ 'PhpParser\\Node\\Stmt\\ClassLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php',
+ 'PhpParser\\Node\\Stmt\\ClassMethod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php',
+ 'PhpParser\\Node\\Stmt\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php',
+ 'PhpParser\\Node\\Stmt\\Const_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php',
+ 'PhpParser\\Node\\Stmt\\Continue_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php',
+ 'PhpParser\\Node\\Stmt\\DeclareDeclare' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php',
+ 'PhpParser\\Node\\Stmt\\Declare_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php',
+ 'PhpParser\\Node\\Stmt\\Do_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php',
+ 'PhpParser\\Node\\Stmt\\Echo_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php',
+ 'PhpParser\\Node\\Stmt\\ElseIf_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php',
+ 'PhpParser\\Node\\Stmt\\Else_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php',
+ 'PhpParser\\Node\\Stmt\\EnumCase' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php',
+ 'PhpParser\\Node\\Stmt\\Enum_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php',
+ 'PhpParser\\Node\\Stmt\\Expression' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php',
+ 'PhpParser\\Node\\Stmt\\Finally_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php',
+ 'PhpParser\\Node\\Stmt\\For_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php',
+ 'PhpParser\\Node\\Stmt\\Foreach_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php',
+ 'PhpParser\\Node\\Stmt\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php',
+ 'PhpParser\\Node\\Stmt\\Global_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php',
+ 'PhpParser\\Node\\Stmt\\Goto_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php',
+ 'PhpParser\\Node\\Stmt\\GroupUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php',
+ 'PhpParser\\Node\\Stmt\\HaltCompiler' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php',
+ 'PhpParser\\Node\\Stmt\\If_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php',
+ 'PhpParser\\Node\\Stmt\\InlineHTML' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php',
+ 'PhpParser\\Node\\Stmt\\Interface_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php',
+ 'PhpParser\\Node\\Stmt\\Label' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php',
+ 'PhpParser\\Node\\Stmt\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php',
+ 'PhpParser\\Node\\Stmt\\Nop' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php',
+ 'PhpParser\\Node\\Stmt\\Property' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php',
+ 'PhpParser\\Node\\Stmt\\PropertyProperty' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php',
+ 'PhpParser\\Node\\Stmt\\Return_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php',
+ 'PhpParser\\Node\\Stmt\\StaticVar' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php',
+ 'PhpParser\\Node\\Stmt\\Static_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php',
+ 'PhpParser\\Node\\Stmt\\Switch_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php',
+ 'PhpParser\\Node\\Stmt\\TraitUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php',
+ 'PhpParser\\Node\\Stmt\\TraitUseAdaptation' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php',
+ 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php',
+ 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Precedence' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php',
+ 'PhpParser\\Node\\Stmt\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php',
+ 'PhpParser\\Node\\Stmt\\TryCatch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php',
+ 'PhpParser\\Node\\Stmt\\Unset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php',
+ 'PhpParser\\Node\\Stmt\\UseUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php',
+ 'PhpParser\\Node\\Stmt\\Use_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php',
+ 'PhpParser\\Node\\Stmt\\While_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php',
+ 'PhpParser\\Node\\UnionType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/UnionType.php',
+ 'PhpParser\\Node\\UseItem' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/UseItem.php',
+ 'PhpParser\\Node\\VarLikeIdentifier' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php',
+ 'PhpParser\\Node\\VariadicPlaceholder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php',
+ 'PhpParser\\Parser' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser.php',
+ 'PhpParser\\ParserAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php',
+ 'PhpParser\\ParserFactory' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ParserFactory.php',
+ 'PhpParser\\Parser\\Php7' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Php7.php',
+ 'PhpParser\\Parser\\Php8' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Php8.php',
+ 'PhpParser\\PhpVersion' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PhpVersion.php',
+ 'PhpParser\\PrettyPrinter' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinter.php',
+ 'PhpParser\\PrettyPrinterAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php',
+ 'PhpParser\\PrettyPrinter\\Standard' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php',
+ 'PhpParser\\Token' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Token.php',
+ 'SebastianBergmann\\CliParser\\AmbiguousOptionException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/AmbiguousOptionException.php',
+ 'SebastianBergmann\\CliParser\\Exception' => $vendorDir . '/sebastian/cli-parser/src/exceptions/Exception.php',
+ 'SebastianBergmann\\CliParser\\OptionDoesNotAllowArgumentException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/OptionDoesNotAllowArgumentException.php',
+ 'SebastianBergmann\\CliParser\\Parser' => $vendorDir . '/sebastian/cli-parser/src/Parser.php',
+ 'SebastianBergmann\\CliParser\\RequiredOptionArgumentMissingException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/RequiredOptionArgumentMissingException.php',
+ 'SebastianBergmann\\CliParser\\UnknownOptionException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/UnknownOptionException.php',
+ 'SebastianBergmann\\CodeCoverage\\BranchAndPathCoverageNotSupportedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php',
+ 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php',
+ 'SebastianBergmann\\CodeCoverage\\Data\\ProcessedCodeCoverageData' => $vendorDir . '/phpunit/php-code-coverage/src/Data/ProcessedCodeCoverageData.php',
+ 'SebastianBergmann\\CodeCoverage\\Data\\RawCodeCoverageData' => $vendorDir . '/phpunit/php-code-coverage/src/Data/RawCodeCoverageData.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\PathExistsButIsNotDirectoryException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\PcovDriver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PcovDriver.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\PcovNotAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/PcovNotAvailableException.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\Selector' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Selector.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\WriteOperationFailedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/WriteOperationFailedException.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\XdebugDriver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/XdebugDriver.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/XdebugNotAvailableException.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotEnabledException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/XdebugNotEnabledException.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\XdebugVersionNotSupportedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/XdebugVersionNotSupportedException.php',
+ 'SebastianBergmann\\CodeCoverage\\Exception' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/Exception.php',
+ 'SebastianBergmann\\CodeCoverage\\FileCouldNotBeWrittenException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/FileCouldNotBeWrittenException.php',
+ 'SebastianBergmann\\CodeCoverage\\Filter' => $vendorDir . '/phpunit/php-code-coverage/src/Filter.php',
+ 'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php',
+ 'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverAvailableException.php',
+ 'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverWithPathCoverageSupportAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php',
+ 'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => $vendorDir . '/phpunit/php-code-coverage/src/Node/AbstractNode.php',
+ 'SebastianBergmann\\CodeCoverage\\Node\\Builder' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Builder.php',
+ 'SebastianBergmann\\CodeCoverage\\Node\\CrapIndex' => $vendorDir . '/phpunit/php-code-coverage/src/Node/CrapIndex.php',
+ 'SebastianBergmann\\CodeCoverage\\Node\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Directory.php',
+ 'SebastianBergmann\\CodeCoverage\\Node\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Node/File.php',
+ 'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Iterator.php',
+ 'SebastianBergmann\\CodeCoverage\\ParserException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ParserException.php',
+ 'SebastianBergmann\\CodeCoverage\\ReflectionException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ReflectionException.php',
+ 'SebastianBergmann\\CodeCoverage\\ReportAlreadyFinalizedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ReportAlreadyFinalizedException.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Clover' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Clover.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Cobertura' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Cobertura.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Crap4j.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Colors' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Colors.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\CustomCssFile' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/CustomCssFile.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Facade.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => $vendorDir . '/phpunit/php-code-coverage/src/Report/PHP.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Text' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Text.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Thresholds' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Thresholds.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/File.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Method.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Node.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Project.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Report.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Source.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysisCacheNotConfiguredException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CacheWarmer' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\Class_' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/Value/Class_.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CodeUnitFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ExecutableLinesFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\FileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\Function_' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/Value/Function_.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\IgnoredLinesFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\Interface_' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/Value/Interface_.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\LinesOfCode' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/Value/LinesOfCode.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\Method' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/Value/Method.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\Trait_' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/Value/Trait_.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\Visibility' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/Value/Visibility.php',
+ 'SebastianBergmann\\CodeCoverage\\TestIdMissingException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\Class_' => $vendorDir . '/phpunit/php-code-coverage/src/Target/Class_.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\ClassesThatExtendClass' => $vendorDir . '/phpunit/php-code-coverage/src/Target/ClassesThatExtendClass.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\ClassesThatImplementInterface' => $vendorDir . '/phpunit/php-code-coverage/src/Target/ClassesThatImplementInterface.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\Function_' => $vendorDir . '/phpunit/php-code-coverage/src/Target/Function_.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\InvalidCodeCoverageTargetException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/InvalidCodeCoverageTargetException.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\MapBuilder' => $vendorDir . '/phpunit/php-code-coverage/src/Target/MapBuilder.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\Mapper' => $vendorDir . '/phpunit/php-code-coverage/src/Target/Mapper.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\Method' => $vendorDir . '/phpunit/php-code-coverage/src/Target/Method.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\Namespace_' => $vendorDir . '/phpunit/php-code-coverage/src/Target/Namespace_.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\Target' => $vendorDir . '/phpunit/php-code-coverage/src/Target/Target.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\TargetCollection' => $vendorDir . '/phpunit/php-code-coverage/src/Target/TargetCollection.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\TargetCollectionIterator' => $vendorDir . '/phpunit/php-code-coverage/src/Target/TargetCollectionIterator.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\TargetCollectionValidator' => $vendorDir . '/phpunit/php-code-coverage/src/Target/TargetCollectionValidator.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\Trait_' => $vendorDir . '/phpunit/php-code-coverage/src/Target/Trait_.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\ValidationFailure' => $vendorDir . '/phpunit/php-code-coverage/src/Target/ValidationFailure.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\ValidationResult' => $vendorDir . '/phpunit/php-code-coverage/src/Target/ValidationResult.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\ValidationSuccess' => $vendorDir . '/phpunit/php-code-coverage/src/Target/ValidationSuccess.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Known' => $vendorDir . '/phpunit/php-code-coverage/src/TestSize/Known.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Large' => $vendorDir . '/phpunit/php-code-coverage/src/TestSize/Large.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Medium' => $vendorDir . '/phpunit/php-code-coverage/src/TestSize/Medium.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Small' => $vendorDir . '/phpunit/php-code-coverage/src/TestSize/Small.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\TestSize' => $vendorDir . '/phpunit/php-code-coverage/src/TestSize/TestSize.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Unknown' => $vendorDir . '/phpunit/php-code-coverage/src/TestSize/Unknown.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Failure' => $vendorDir . '/phpunit/php-code-coverage/src/TestStatus/Failure.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Known' => $vendorDir . '/phpunit/php-code-coverage/src/TestStatus/Known.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Success' => $vendorDir . '/phpunit/php-code-coverage/src/TestStatus/Success.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\TestStatus' => $vendorDir . '/phpunit/php-code-coverage/src/TestStatus/TestStatus.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Unknown' => $vendorDir . '/phpunit/php-code-coverage/src/TestStatus/Unknown.php',
+ 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php',
+ 'SebastianBergmann\\CodeCoverage\\Util\\DirectoryCouldNotBeCreatedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php',
+ 'SebastianBergmann\\CodeCoverage\\Util\\Filesystem' => $vendorDir . '/phpunit/php-code-coverage/src/Util/Filesystem.php',
+ 'SebastianBergmann\\CodeCoverage\\Util\\Percentage' => $vendorDir . '/phpunit/php-code-coverage/src/Util/Percentage.php',
+ 'SebastianBergmann\\CodeCoverage\\Version' => $vendorDir . '/phpunit/php-code-coverage/src/Version.php',
+ 'SebastianBergmann\\CodeCoverage\\XmlException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/XmlException.php',
+ 'SebastianBergmann\\Comparator\\ArrayComparator' => $vendorDir . '/sebastian/comparator/src/ArrayComparator.php',
+ 'SebastianBergmann\\Comparator\\Comparator' => $vendorDir . '/sebastian/comparator/src/Comparator.php',
+ 'SebastianBergmann\\Comparator\\ComparisonFailure' => $vendorDir . '/sebastian/comparator/src/ComparisonFailure.php',
+ 'SebastianBergmann\\Comparator\\DOMNodeComparator' => $vendorDir . '/sebastian/comparator/src/DOMNodeComparator.php',
+ 'SebastianBergmann\\Comparator\\DateTimeComparator' => $vendorDir . '/sebastian/comparator/src/DateTimeComparator.php',
+ 'SebastianBergmann\\Comparator\\EnumerationComparator' => $vendorDir . '/sebastian/comparator/src/EnumerationComparator.php',
+ 'SebastianBergmann\\Comparator\\Exception' => $vendorDir . '/sebastian/comparator/src/exceptions/Exception.php',
+ 'SebastianBergmann\\Comparator\\ExceptionComparator' => $vendorDir . '/sebastian/comparator/src/ExceptionComparator.php',
+ 'SebastianBergmann\\Comparator\\Factory' => $vendorDir . '/sebastian/comparator/src/Factory.php',
+ 'SebastianBergmann\\Comparator\\MockObjectComparator' => $vendorDir . '/sebastian/comparator/src/MockObjectComparator.php',
+ 'SebastianBergmann\\Comparator\\NumberComparator' => $vendorDir . '/sebastian/comparator/src/NumberComparator.php',
+ 'SebastianBergmann\\Comparator\\NumericComparator' => $vendorDir . '/sebastian/comparator/src/NumericComparator.php',
+ 'SebastianBergmann\\Comparator\\ObjectComparator' => $vendorDir . '/sebastian/comparator/src/ObjectComparator.php',
+ 'SebastianBergmann\\Comparator\\ResourceComparator' => $vendorDir . '/sebastian/comparator/src/ResourceComparator.php',
+ 'SebastianBergmann\\Comparator\\RuntimeException' => $vendorDir . '/sebastian/comparator/src/exceptions/RuntimeException.php',
+ 'SebastianBergmann\\Comparator\\ScalarComparator' => $vendorDir . '/sebastian/comparator/src/ScalarComparator.php',
+ 'SebastianBergmann\\Comparator\\SplObjectStorageComparator' => $vendorDir . '/sebastian/comparator/src/SplObjectStorageComparator.php',
+ 'SebastianBergmann\\Comparator\\TypeComparator' => $vendorDir . '/sebastian/comparator/src/TypeComparator.php',
+ 'SebastianBergmann\\Complexity\\Calculator' => $vendorDir . '/sebastian/complexity/src/Calculator.php',
+ 'SebastianBergmann\\Complexity\\Complexity' => $vendorDir . '/sebastian/complexity/src/Complexity/Complexity.php',
+ 'SebastianBergmann\\Complexity\\ComplexityCalculatingVisitor' => $vendorDir . '/sebastian/complexity/src/Visitor/ComplexityCalculatingVisitor.php',
+ 'SebastianBergmann\\Complexity\\ComplexityCollection' => $vendorDir . '/sebastian/complexity/src/Complexity/ComplexityCollection.php',
+ 'SebastianBergmann\\Complexity\\ComplexityCollectionIterator' => $vendorDir . '/sebastian/complexity/src/Complexity/ComplexityCollectionIterator.php',
+ 'SebastianBergmann\\Complexity\\CyclomaticComplexityCalculatingVisitor' => $vendorDir . '/sebastian/complexity/src/Visitor/CyclomaticComplexityCalculatingVisitor.php',
+ 'SebastianBergmann\\Complexity\\Exception' => $vendorDir . '/sebastian/complexity/src/Exception/Exception.php',
+ 'SebastianBergmann\\Complexity\\RuntimeException' => $vendorDir . '/sebastian/complexity/src/Exception/RuntimeException.php',
+ 'SebastianBergmann\\Diff\\Chunk' => $vendorDir . '/sebastian/diff/src/Chunk.php',
+ 'SebastianBergmann\\Diff\\ConfigurationException' => $vendorDir . '/sebastian/diff/src/Exception/ConfigurationException.php',
+ 'SebastianBergmann\\Diff\\Diff' => $vendorDir . '/sebastian/diff/src/Diff.php',
+ 'SebastianBergmann\\Diff\\Differ' => $vendorDir . '/sebastian/diff/src/Differ.php',
+ 'SebastianBergmann\\Diff\\Exception' => $vendorDir . '/sebastian/diff/src/Exception/Exception.php',
+ 'SebastianBergmann\\Diff\\InvalidArgumentException' => $vendorDir . '/sebastian/diff/src/Exception/InvalidArgumentException.php',
+ 'SebastianBergmann\\Diff\\Line' => $vendorDir . '/sebastian/diff/src/Line.php',
+ 'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php',
+ 'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php',
+ 'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php',
+ 'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php',
+ 'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => $vendorDir . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php',
+ 'SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php',
+ 'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php',
+ 'SebastianBergmann\\Diff\\Parser' => $vendorDir . '/sebastian/diff/src/Parser.php',
+ 'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php',
+ 'SebastianBergmann\\Environment\\Console' => $vendorDir . '/sebastian/environment/src/Console.php',
+ 'SebastianBergmann\\Environment\\Runtime' => $vendorDir . '/sebastian/environment/src/Runtime.php',
+ 'SebastianBergmann\\Exporter\\Exporter' => $vendorDir . '/sebastian/exporter/src/Exporter.php',
+ 'SebastianBergmann\\FileIterator\\ExcludeIterator' => $vendorDir . '/phpunit/php-file-iterator/src/ExcludeIterator.php',
+ 'SebastianBergmann\\FileIterator\\Facade' => $vendorDir . '/phpunit/php-file-iterator/src/Facade.php',
+ 'SebastianBergmann\\FileIterator\\Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php',
+ 'SebastianBergmann\\FileIterator\\Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php',
+ 'SebastianBergmann\\GlobalState\\CodeExporter' => $vendorDir . '/sebastian/global-state/src/CodeExporter.php',
+ 'SebastianBergmann\\GlobalState\\Exception' => $vendorDir . '/sebastian/global-state/src/exceptions/Exception.php',
+ 'SebastianBergmann\\GlobalState\\ExcludeList' => $vendorDir . '/sebastian/global-state/src/ExcludeList.php',
+ 'SebastianBergmann\\GlobalState\\Restorer' => $vendorDir . '/sebastian/global-state/src/Restorer.php',
+ 'SebastianBergmann\\GlobalState\\RuntimeException' => $vendorDir . '/sebastian/global-state/src/exceptions/RuntimeException.php',
+ 'SebastianBergmann\\GlobalState\\Snapshot' => $vendorDir . '/sebastian/global-state/src/Snapshot.php',
+ 'SebastianBergmann\\Invoker\\Exception' => $vendorDir . '/phpunit/php-invoker/src/exceptions/Exception.php',
+ 'SebastianBergmann\\Invoker\\Invoker' => $vendorDir . '/phpunit/php-invoker/src/Invoker.php',
+ 'SebastianBergmann\\Invoker\\ProcessControlExtensionNotLoadedException' => $vendorDir . '/phpunit/php-invoker/src/exceptions/ProcessControlExtensionNotLoadedException.php',
+ 'SebastianBergmann\\Invoker\\TimeoutException' => $vendorDir . '/phpunit/php-invoker/src/exceptions/TimeoutException.php',
+ 'SebastianBergmann\\LinesOfCode\\Counter' => $vendorDir . '/sebastian/lines-of-code/src/Counter.php',
+ 'SebastianBergmann\\LinesOfCode\\Exception' => $vendorDir . '/sebastian/lines-of-code/src/Exception/Exception.php',
+ 'SebastianBergmann\\LinesOfCode\\IllogicalValuesException' => $vendorDir . '/sebastian/lines-of-code/src/Exception/IllogicalValuesException.php',
+ 'SebastianBergmann\\LinesOfCode\\LineCountingVisitor' => $vendorDir . '/sebastian/lines-of-code/src/LineCountingVisitor.php',
+ 'SebastianBergmann\\LinesOfCode\\LinesOfCode' => $vendorDir . '/sebastian/lines-of-code/src/LinesOfCode.php',
+ 'SebastianBergmann\\LinesOfCode\\RuntimeException' => $vendorDir . '/sebastian/lines-of-code/src/Exception/RuntimeException.php',
+ 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => $vendorDir . '/sebastian/object-enumerator/src/Enumerator.php',
+ 'SebastianBergmann\\ObjectReflector\\ObjectReflector' => $vendorDir . '/sebastian/object-reflector/src/ObjectReflector.php',
+ 'SebastianBergmann\\RecursionContext\\Context' => $vendorDir . '/sebastian/recursion-context/src/Context.php',
+ 'SebastianBergmann\\Template\\Exception' => $vendorDir . '/phpunit/php-text-template/src/exceptions/Exception.php',
+ 'SebastianBergmann\\Template\\InvalidArgumentException' => $vendorDir . '/phpunit/php-text-template/src/exceptions/InvalidArgumentException.php',
+ 'SebastianBergmann\\Template\\RuntimeException' => $vendorDir . '/phpunit/php-text-template/src/exceptions/RuntimeException.php',
+ 'SebastianBergmann\\Template\\Template' => $vendorDir . '/phpunit/php-text-template/src/Template.php',
+ 'SebastianBergmann\\Timer\\Duration' => $vendorDir . '/phpunit/php-timer/src/Duration.php',
+ 'SebastianBergmann\\Timer\\Exception' => $vendorDir . '/phpunit/php-timer/src/exceptions/Exception.php',
+ 'SebastianBergmann\\Timer\\NoActiveTimerException' => $vendorDir . '/phpunit/php-timer/src/exceptions/NoActiveTimerException.php',
+ 'SebastianBergmann\\Timer\\ResourceUsageFormatter' => $vendorDir . '/phpunit/php-timer/src/ResourceUsageFormatter.php',
+ 'SebastianBergmann\\Timer\\TimeSinceStartOfRequestNotAvailableException' => $vendorDir . '/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php',
+ 'SebastianBergmann\\Timer\\Timer' => $vendorDir . '/phpunit/php-timer/src/Timer.php',
+ 'SebastianBergmann\\Type\\CallableType' => $vendorDir . '/sebastian/type/src/type/CallableType.php',
+ 'SebastianBergmann\\Type\\Exception' => $vendorDir . '/sebastian/type/src/exception/Exception.php',
+ 'SebastianBergmann\\Type\\FalseType' => $vendorDir . '/sebastian/type/src/type/FalseType.php',
+ 'SebastianBergmann\\Type\\GenericObjectType' => $vendorDir . '/sebastian/type/src/type/GenericObjectType.php',
+ 'SebastianBergmann\\Type\\IntersectionType' => $vendorDir . '/sebastian/type/src/type/IntersectionType.php',
+ 'SebastianBergmann\\Type\\IterableType' => $vendorDir . '/sebastian/type/src/type/IterableType.php',
+ 'SebastianBergmann\\Type\\MixedType' => $vendorDir . '/sebastian/type/src/type/MixedType.php',
+ 'SebastianBergmann\\Type\\NeverType' => $vendorDir . '/sebastian/type/src/type/NeverType.php',
+ 'SebastianBergmann\\Type\\NullType' => $vendorDir . '/sebastian/type/src/type/NullType.php',
+ 'SebastianBergmann\\Type\\ObjectType' => $vendorDir . '/sebastian/type/src/type/ObjectType.php',
+ 'SebastianBergmann\\Type\\Parameter' => $vendorDir . '/sebastian/type/src/Parameter.php',
+ 'SebastianBergmann\\Type\\ReflectionMapper' => $vendorDir . '/sebastian/type/src/ReflectionMapper.php',
+ 'SebastianBergmann\\Type\\RuntimeException' => $vendorDir . '/sebastian/type/src/exception/RuntimeException.php',
+ 'SebastianBergmann\\Type\\SimpleType' => $vendorDir . '/sebastian/type/src/type/SimpleType.php',
+ 'SebastianBergmann\\Type\\StaticType' => $vendorDir . '/sebastian/type/src/type/StaticType.php',
+ 'SebastianBergmann\\Type\\TrueType' => $vendorDir . '/sebastian/type/src/type/TrueType.php',
+ 'SebastianBergmann\\Type\\Type' => $vendorDir . '/sebastian/type/src/type/Type.php',
+ 'SebastianBergmann\\Type\\TypeName' => $vendorDir . '/sebastian/type/src/TypeName.php',
+ 'SebastianBergmann\\Type\\UnionType' => $vendorDir . '/sebastian/type/src/type/UnionType.php',
+ 'SebastianBergmann\\Type\\UnknownType' => $vendorDir . '/sebastian/type/src/type/UnknownType.php',
+ 'SebastianBergmann\\Type\\VoidType' => $vendorDir . '/sebastian/type/src/type/VoidType.php',
+ 'SebastianBergmann\\Version' => $vendorDir . '/sebastian/version/src/Version.php',
+ 'TheSeer\\Tokenizer\\Exception' => $vendorDir . '/theseer/tokenizer/src/Exception.php',
+ 'TheSeer\\Tokenizer\\NamespaceUri' => $vendorDir . '/theseer/tokenizer/src/NamespaceUri.php',
+ 'TheSeer\\Tokenizer\\NamespaceUriException' => $vendorDir . '/theseer/tokenizer/src/NamespaceUriException.php',
+ 'TheSeer\\Tokenizer\\Token' => $vendorDir . '/theseer/tokenizer/src/Token.php',
+ 'TheSeer\\Tokenizer\\TokenCollection' => $vendorDir . '/theseer/tokenizer/src/TokenCollection.php',
+ 'TheSeer\\Tokenizer\\TokenCollectionException' => $vendorDir . '/theseer/tokenizer/src/TokenCollectionException.php',
+ 'TheSeer\\Tokenizer\\Tokenizer' => $vendorDir . '/theseer/tokenizer/src/Tokenizer.php',
+ 'TheSeer\\Tokenizer\\XMLSerializer' => $vendorDir . '/theseer/tokenizer/src/XMLSerializer.php',
+ 'goodboyalex\\php_components_pack\\classes\\ActionState' => $baseDir . '/sources/classes/ActionState.php',
+ 'goodboyalex\\php_components_pack\\classes\\ClassMapper' => $baseDir . '/sources/classes/ClassMapper.php',
+ 'goodboyalex\\php_components_pack\\enums\\MessageType' => $baseDir . '/sources/enums/MessageType.php',
+ 'goodboyalex\\php_components_pack\\extensions\\ArrayExtension' => $baseDir . '/sources/extensions/ArrayExtension.php',
+ 'goodboyalex\\php_components_pack\\extensions\\GUIDExtension' => $baseDir . '/sources/extensions/GUIDExtension.php',
+ 'goodboyalex\\php_components_pack\\extensions\\StringExtension' => $baseDir . '/sources/extensions/StringExtension.php',
+ 'goodboyalex\\php_components_pack\\interfaces\\ISerializable' => $baseDir . '/sources/interfaces/ISerializable.php',
+ 'goodboyalex\\php_components_pack\\models\\ActionStateMessageModel' => $baseDir . '/sources/models/ActionStateMessageModel.php',
+ 'goodboyalex\\php_components_pack\\tests\\GUIDExtensionTest' => $baseDir . '/tests/GUIDExtensionTest.php',
+ 'goodboyalex\\php_components_pack\\traits\\EnumExtensionsTrait' => $baseDir . '/sources/traits/EnumExtensionsTrait.php',
+ 'staabm\\SideEffectsDetector\\SideEffect' => $vendorDir . '/staabm/side-effects-detector/lib/SideEffect.php',
+ 'staabm\\SideEffectsDetector\\SideEffectsDetector' => $vendorDir . '/staabm/side-effects-detector/lib/SideEffectsDetector.php',
+);
diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php
new file mode 100644
index 0000000..2530eb4
--- /dev/null
+++ b/vendor/composer/autoload_files.php
@@ -0,0 +1,11 @@
+ $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
+ 'ec07570ca5a812141189b1fa81503674' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert/Functions.php',
+);
diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php
new file mode 100644
index 0000000..15a2ff3
--- /dev/null
+++ b/vendor/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+ array($baseDir . '/sources/traits'),
+ 'goodboyalex\\php_components_pack\\tests\\' => array($baseDir . '/tests'),
+ 'goodboyalex\\php_components_pack\\models\\' => array($baseDir . '/sources/models'),
+ 'goodboyalex\\php_components_pack\\interfaces\\' => array($baseDir . '/sources/interfaces'),
+ 'goodboyalex\\php_components_pack\\extensions\\' => array($baseDir . '/sources/extensions'),
+ 'goodboyalex\\php_components_pack\\enums\\' => array($baseDir . '/sources/enums'),
+ 'goodboyalex\\php_components_pack\\' => array($baseDir . '/sources'),
+ 'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'),
+ 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'),
+);
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
new file mode 100644
index 0000000..9103995
--- /dev/null
+++ b/vendor/composer/autoload_real.php
@@ -0,0 +1,50 @@
+register(true);
+
+ $filesToLoad = \Composer\Autoload\ComposerStaticInitc00e5b601adae61bbbc3f6be4864ef55::$files;
+ $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
+ if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+ $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+
+ require $file;
+ }
+ }, null, null);
+ foreach ($filesToLoad as $fileIdentifier => $file) {
+ $requireFile($fileIdentifier, $file);
+ }
+
+ return $loader;
+ }
+}
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
new file mode 100644
index 0000000..5ad742f
--- /dev/null
+++ b/vendor/composer/autoload_static.php
@@ -0,0 +1,1596 @@
+ __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
+ 'ec07570ca5a812141189b1fa81503674' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert/Functions.php',
+ );
+
+ public static $prefixLengthsPsr4 = array (
+ 'g' =>
+ array (
+ 'goodboyalex\\php_components_pack\\traits\\' => 39,
+ 'goodboyalex\\php_components_pack\\tests\\' => 38,
+ 'goodboyalex\\php_components_pack\\models\\' => 39,
+ 'goodboyalex\\php_components_pack\\interfaces\\' => 43,
+ 'goodboyalex\\php_components_pack\\extensions\\' => 43,
+ 'goodboyalex\\php_components_pack\\enums\\' => 38,
+ 'goodboyalex\\php_components_pack\\' => 32,
+ ),
+ 'P' =>
+ array (
+ 'PhpParser\\' => 10,
+ ),
+ 'D' =>
+ array (
+ 'DeepCopy\\' => 9,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'goodboyalex\\php_components_pack\\traits\\' =>
+ array (
+ 0 => __DIR__ . '/../..' . '/sources/traits',
+ ),
+ 'goodboyalex\\php_components_pack\\tests\\' =>
+ array (
+ 0 => __DIR__ . '/../..' . '/tests',
+ ),
+ 'goodboyalex\\php_components_pack\\models\\' =>
+ array (
+ 0 => __DIR__ . '/../..' . '/sources/models',
+ ),
+ 'goodboyalex\\php_components_pack\\interfaces\\' =>
+ array (
+ 0 => __DIR__ . '/../..' . '/sources/interfaces',
+ ),
+ 'goodboyalex\\php_components_pack\\extensions\\' =>
+ array (
+ 0 => __DIR__ . '/../..' . '/sources/extensions',
+ ),
+ 'goodboyalex\\php_components_pack\\enums\\' =>
+ array (
+ 0 => __DIR__ . '/../..' . '/sources/enums',
+ ),
+ 'goodboyalex\\php_components_pack\\' =>
+ array (
+ 0 => __DIR__ . '/../..' . '/sources',
+ ),
+ 'PhpParser\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser',
+ ),
+ 'DeepCopy\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy',
+ ),
+ );
+
+ public static $classMap = array (
+ 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
+ 'DeepCopy\\DeepCopy' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/DeepCopy.php',
+ 'DeepCopy\\Exception\\CloneException' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php',
+ 'DeepCopy\\Exception\\PropertyException' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php',
+ 'DeepCopy\\Filter\\ChainableFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/ChainableFilter.php',
+ 'DeepCopy\\Filter\\Doctrine\\DoctrineCollectionFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php',
+ 'DeepCopy\\Filter\\Doctrine\\DoctrineEmptyCollectionFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php',
+ 'DeepCopy\\Filter\\Doctrine\\DoctrineProxyFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php',
+ 'DeepCopy\\Filter\\Filter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php',
+ 'DeepCopy\\Filter\\KeepFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php',
+ 'DeepCopy\\Filter\\ReplaceFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php',
+ 'DeepCopy\\Filter\\SetNullFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php',
+ 'DeepCopy\\Matcher\\Doctrine\\DoctrineProxyMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php',
+ 'DeepCopy\\Matcher\\Matcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/Matcher.php',
+ 'DeepCopy\\Matcher\\PropertyMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyMatcher.php',
+ 'DeepCopy\\Matcher\\PropertyNameMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php',
+ 'DeepCopy\\Matcher\\PropertyTypeMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php',
+ 'DeepCopy\\Reflection\\ReflectionHelper' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php',
+ 'DeepCopy\\TypeFilter\\Date\\DateIntervalFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php',
+ 'DeepCopy\\TypeFilter\\Date\\DatePeriodFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DatePeriodFilter.php',
+ 'DeepCopy\\TypeFilter\\ReplaceFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php',
+ 'DeepCopy\\TypeFilter\\ShallowCopyFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php',
+ 'DeepCopy\\TypeFilter\\Spl\\ArrayObjectFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.php',
+ 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedList' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php',
+ 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedListFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php',
+ 'DeepCopy\\TypeFilter\\TypeFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php',
+ 'DeepCopy\\TypeMatcher\\TypeMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php',
+ 'PHPUnit\\Event\\Application\\Finished' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Application/Finished.php',
+ 'PHPUnit\\Event\\Application\\FinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Application/FinishedSubscriber.php',
+ 'PHPUnit\\Event\\Application\\Started' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Application/Started.php',
+ 'PHPUnit\\Event\\Application\\StartedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Application/StartedSubscriber.php',
+ 'PHPUnit\\Event\\Code\\ClassMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/ClassMethod.php',
+ 'PHPUnit\\Event\\Code\\ComparisonFailure' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/ComparisonFailure.php',
+ 'PHPUnit\\Event\\Code\\ComparisonFailureBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/ComparisonFailureBuilder.php',
+ 'PHPUnit\\Event\\Code\\IssueTrigger\\DirectTrigger' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/Issue/DirectTrigger.php',
+ 'PHPUnit\\Event\\Code\\IssueTrigger\\IndirectTrigger' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/Issue/IndirectTrigger.php',
+ 'PHPUnit\\Event\\Code\\IssueTrigger\\IssueTrigger' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/Issue/IssueTrigger.php',
+ 'PHPUnit\\Event\\Code\\IssueTrigger\\SelfTrigger' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/Issue/SelfTrigger.php',
+ 'PHPUnit\\Event\\Code\\IssueTrigger\\TestTrigger' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/Issue/TestTrigger.php',
+ 'PHPUnit\\Event\\Code\\IssueTrigger\\UnknownTrigger' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/Issue/UnknownTrigger.php',
+ 'PHPUnit\\Event\\Code\\NoTestCaseObjectOnCallStackException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/NoTestCaseObjectOnCallStackException.php',
+ 'PHPUnit\\Event\\Code\\Phpt' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/Phpt.php',
+ 'PHPUnit\\Event\\Code\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/Test.php',
+ 'PHPUnit\\Event\\Code\\TestCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/TestCollection.php',
+ 'PHPUnit\\Event\\Code\\TestCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/TestCollectionIterator.php',
+ 'PHPUnit\\Event\\Code\\TestDox' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/TestDox.php',
+ 'PHPUnit\\Event\\Code\\TestDoxBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/TestDoxBuilder.php',
+ 'PHPUnit\\Event\\Code\\TestMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/TestMethod.php',
+ 'PHPUnit\\Event\\Code\\TestMethodBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/TestMethodBuilder.php',
+ 'PHPUnit\\Event\\Code\\Throwable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Throwable.php',
+ 'PHPUnit\\Event\\Code\\ThrowableBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/ThrowableBuilder.php',
+ 'PHPUnit\\Event\\CollectingDispatcher' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Dispatcher/CollectingDispatcher.php',
+ 'PHPUnit\\Event\\DeferringDispatcher' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Dispatcher/DeferringDispatcher.php',
+ 'PHPUnit\\Event\\DirectDispatcher' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Dispatcher/DirectDispatcher.php',
+ 'PHPUnit\\Event\\Dispatcher' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Dispatcher/Dispatcher.php',
+ 'PHPUnit\\Event\\DispatchingEmitter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Emitter/DispatchingEmitter.php',
+ 'PHPUnit\\Event\\Emitter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Emitter/Emitter.php',
+ 'PHPUnit\\Event\\Event' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Event.php',
+ 'PHPUnit\\Event\\EventAlreadyAssignedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/EventAlreadyAssignedException.php',
+ 'PHPUnit\\Event\\EventCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/EventCollection.php',
+ 'PHPUnit\\Event\\EventCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/EventCollectionIterator.php',
+ 'PHPUnit\\Event\\EventFacadeIsSealedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/EventFacadeIsSealedException.php',
+ 'PHPUnit\\Event\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/Exception.php',
+ 'PHPUnit\\Event\\Facade' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Facade.php',
+ 'PHPUnit\\Event\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/InvalidArgumentException.php',
+ 'PHPUnit\\Event\\InvalidEventException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/InvalidEventException.php',
+ 'PHPUnit\\Event\\InvalidSubscriberException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/InvalidSubscriberException.php',
+ 'PHPUnit\\Event\\MapError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/MapError.php',
+ 'PHPUnit\\Event\\NoPreviousThrowableException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/NoPreviousThrowableException.php',
+ 'PHPUnit\\Event\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/RuntimeException.php',
+ 'PHPUnit\\Event\\Runtime\\OperatingSystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Runtime/OperatingSystem.php',
+ 'PHPUnit\\Event\\Runtime\\PHP' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Runtime/PHP.php',
+ 'PHPUnit\\Event\\Runtime\\PHPUnit' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Runtime/PHPUnit.php',
+ 'PHPUnit\\Event\\Runtime\\Runtime' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Runtime/Runtime.php',
+ 'PHPUnit\\Event\\SubscribableDispatcher' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Dispatcher/SubscribableDispatcher.php',
+ 'PHPUnit\\Event\\Subscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Subscriber.php',
+ 'PHPUnit\\Event\\SubscriberTypeAlreadyRegisteredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/SubscriberTypeAlreadyRegisteredException.php',
+ 'PHPUnit\\Event\\Telemetry\\Duration' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Telemetry/Duration.php',
+ 'PHPUnit\\Event\\Telemetry\\GarbageCollectorStatus' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Telemetry/GarbageCollectorStatus.php',
+ 'PHPUnit\\Event\\Telemetry\\GarbageCollectorStatusProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Telemetry/GarbageCollectorStatusProvider.php',
+ 'PHPUnit\\Event\\Telemetry\\HRTime' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Telemetry/HRTime.php',
+ 'PHPUnit\\Event\\Telemetry\\Info' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Telemetry/Info.php',
+ 'PHPUnit\\Event\\Telemetry\\MemoryMeter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Telemetry/MemoryMeter.php',
+ 'PHPUnit\\Event\\Telemetry\\MemoryUsage' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Telemetry/MemoryUsage.php',
+ 'PHPUnit\\Event\\Telemetry\\Snapshot' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Telemetry/Snapshot.php',
+ 'PHPUnit\\Event\\Telemetry\\StopWatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Telemetry/StopWatch.php',
+ 'PHPUnit\\Event\\Telemetry\\System' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Telemetry/System.php',
+ 'PHPUnit\\Event\\Telemetry\\SystemGarbageCollectorStatusProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Telemetry/SystemGarbageCollectorStatusProvider.php',
+ 'PHPUnit\\Event\\Telemetry\\SystemMemoryMeter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Telemetry/SystemMemoryMeter.php',
+ 'PHPUnit\\Event\\Telemetry\\SystemStopWatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Telemetry/SystemStopWatch.php',
+ 'PHPUnit\\Event\\Telemetry\\SystemStopWatchWithOffset' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Telemetry/SystemStopWatchWithOffset.php',
+ 'PHPUnit\\Event\\TestData\\DataFromDataProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/TestData/DataFromDataProvider.php',
+ 'PHPUnit\\Event\\TestData\\DataFromTestDependency' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/TestData/DataFromTestDependency.php',
+ 'PHPUnit\\Event\\TestData\\NoDataSetFromDataProviderException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/NoDataSetFromDataProviderException.php',
+ 'PHPUnit\\Event\\TestData\\TestData' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/TestData/TestData.php',
+ 'PHPUnit\\Event\\TestData\\TestDataCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/TestData/TestDataCollection.php',
+ 'PHPUnit\\Event\\TestData\\TestDataCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/Test/TestData/TestDataCollectionIterator.php',
+ 'PHPUnit\\Event\\TestRunner\\BootstrapFinished' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/BootstrapFinished.php',
+ 'PHPUnit\\Event\\TestRunner\\BootstrapFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/BootstrapFinishedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\ChildProcessFinished' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ChildProcessFinished.php',
+ 'PHPUnit\\Event\\TestRunner\\ChildProcessFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ChildProcessFinishedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\ChildProcessStarted' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ChildProcessStarted.php',
+ 'PHPUnit\\Event\\TestRunner\\ChildProcessStartedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ChildProcessStartedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\Configured' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/Configured.php',
+ 'PHPUnit\\Event\\TestRunner\\ConfiguredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ConfiguredSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\DeprecationTriggered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/DeprecationTriggered.php',
+ 'PHPUnit\\Event\\TestRunner\\DeprecationTriggeredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/DeprecationTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\EventFacadeSealed' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/EventFacadeSealed.php',
+ 'PHPUnit\\Event\\TestRunner\\EventFacadeSealedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/EventFacadeSealedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\ExecutionAborted' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ExecutionAborted.php',
+ 'PHPUnit\\Event\\TestRunner\\ExecutionAbortedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ExecutionAbortedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\ExecutionFinished' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ExecutionFinished.php',
+ 'PHPUnit\\Event\\TestRunner\\ExecutionFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ExecutionFinishedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\ExecutionStarted' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ExecutionStarted.php',
+ 'PHPUnit\\Event\\TestRunner\\ExecutionStartedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ExecutionStartedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\ExtensionBootstrapped' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ExtensionBootstrapped.php',
+ 'PHPUnit\\Event\\TestRunner\\ExtensionBootstrappedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ExtensionBootstrappedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\ExtensionLoadedFromPhar' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ExtensionLoadedFromPhar.php',
+ 'PHPUnit\\Event\\TestRunner\\ExtensionLoadedFromPharSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/ExtensionLoadedFromPharSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\Finished' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/Finished.php',
+ 'PHPUnit\\Event\\TestRunner\\FinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/FinishedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\GarbageCollectionDisabled' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/GarbageCollectionDisabled.php',
+ 'PHPUnit\\Event\\TestRunner\\GarbageCollectionDisabledSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/GarbageCollectionDisabledSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\GarbageCollectionEnabled' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/GarbageCollectionEnabled.php',
+ 'PHPUnit\\Event\\TestRunner\\GarbageCollectionEnabledSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/GarbageCollectionEnabledSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\GarbageCollectionTriggered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/GarbageCollectionTriggered.php',
+ 'PHPUnit\\Event\\TestRunner\\GarbageCollectionTriggeredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/GarbageCollectionTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\Started' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/Started.php',
+ 'PHPUnit\\Event\\TestRunner\\StartedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/StartedSubscriber.php',
+ 'PHPUnit\\Event\\TestRunner\\WarningTriggered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/WarningTriggered.php',
+ 'PHPUnit\\Event\\TestRunner\\WarningTriggeredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestRunner/WarningTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\TestSuite\\Filtered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestSuite/Filtered.php',
+ 'PHPUnit\\Event\\TestSuite\\FilteredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestSuite/FilteredSubscriber.php',
+ 'PHPUnit\\Event\\TestSuite\\Finished' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestSuite/Finished.php',
+ 'PHPUnit\\Event\\TestSuite\\FinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestSuite/FinishedSubscriber.php',
+ 'PHPUnit\\Event\\TestSuite\\Loaded' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestSuite/Loaded.php',
+ 'PHPUnit\\Event\\TestSuite\\LoadedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestSuite/LoadedSubscriber.php',
+ 'PHPUnit\\Event\\TestSuite\\Skipped' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestSuite/Skipped.php',
+ 'PHPUnit\\Event\\TestSuite\\SkippedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestSuite/SkippedSubscriber.php',
+ 'PHPUnit\\Event\\TestSuite\\Sorted' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestSuite/Sorted.php',
+ 'PHPUnit\\Event\\TestSuite\\SortedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestSuite/SortedSubscriber.php',
+ 'PHPUnit\\Event\\TestSuite\\Started' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestSuite/Started.php',
+ 'PHPUnit\\Event\\TestSuite\\StartedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/TestSuite/StartedSubscriber.php',
+ 'PHPUnit\\Event\\TestSuite\\TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/TestSuite/TestSuite.php',
+ 'PHPUnit\\Event\\TestSuite\\TestSuiteBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/TestSuite/TestSuiteBuilder.php',
+ 'PHPUnit\\Event\\TestSuite\\TestSuiteForTestClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/TestSuite/TestSuiteForTestClass.php',
+ 'PHPUnit\\Event\\TestSuite\\TestSuiteForTestMethodWithDataProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/TestSuite/TestSuiteForTestMethodWithDataProvider.php',
+ 'PHPUnit\\Event\\TestSuite\\TestSuiteWithName' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Value/TestSuite/TestSuiteWithName.php',
+ 'PHPUnit\\Event\\Test\\AfterLastTestMethodCalled' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterLastTestMethodCalled.php',
+ 'PHPUnit\\Event\\Test\\AfterLastTestMethodCalledSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterLastTestMethodCalledSubscriber.php',
+ 'PHPUnit\\Event\\Test\\AfterLastTestMethodErrored' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterLastTestMethodErrored.php',
+ 'PHPUnit\\Event\\Test\\AfterLastTestMethodErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterLastTestMethodErroredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\AfterLastTestMethodFinished' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterLastTestMethodFinished.php',
+ 'PHPUnit\\Event\\Test\\AfterLastTestMethodFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterLastTestMethodFinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\AfterTestMethodCalled' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterTestMethodCalled.php',
+ 'PHPUnit\\Event\\Test\\AfterTestMethodCalledSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterTestMethodCalledSubscriber.php',
+ 'PHPUnit\\Event\\Test\\AfterTestMethodErrored' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterTestMethodErrored.php',
+ 'PHPUnit\\Event\\Test\\AfterTestMethodErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterTestMethodErroredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\AfterTestMethodFinished' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterTestMethodFinished.php',
+ 'PHPUnit\\Event\\Test\\AfterTestMethodFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/AfterTestMethodFinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodCalled' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalled.php',
+ 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodCalledSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalledSubscriber.php',
+ 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodErrored' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeFirstTestMethodErrored.php',
+ 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeFirstTestMethodErroredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodFinished' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinished.php',
+ 'PHPUnit\\Event\\Test\\BeforeFirstTestMethodFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\BeforeTestMethodCalled' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeTestMethodCalled.php',
+ 'PHPUnit\\Event\\Test\\BeforeTestMethodCalledSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeTestMethodCalledSubscriber.php',
+ 'PHPUnit\\Event\\Test\\BeforeTestMethodErrored' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeTestMethodErrored.php',
+ 'PHPUnit\\Event\\Test\\BeforeTestMethodErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeTestMethodErroredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\BeforeTestMethodFinished' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeTestMethodFinished.php',
+ 'PHPUnit\\Event\\Test\\BeforeTestMethodFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/BeforeTestMethodFinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\ComparatorRegistered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/ComparatorRegistered.php',
+ 'PHPUnit\\Event\\Test\\ComparatorRegisteredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/ComparatorRegisteredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\ConsideredRisky' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/ConsideredRisky.php',
+ 'PHPUnit\\Event\\Test\\ConsideredRiskySubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/ConsideredRiskySubscriber.php',
+ 'PHPUnit\\Event\\Test\\DataProviderMethodCalled' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/DataProviderMethodCalled.php',
+ 'PHPUnit\\Event\\Test\\DataProviderMethodCalledSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/DataProviderMethodCalledSubscriber.php',
+ 'PHPUnit\\Event\\Test\\DataProviderMethodFinished' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/DataProviderMethodFinished.php',
+ 'PHPUnit\\Event\\Test\\DataProviderMethodFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/DataProviderMethodFinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\DeprecationTriggered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/DeprecationTriggered.php',
+ 'PHPUnit\\Event\\Test\\DeprecationTriggeredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/DeprecationTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\ErrorTriggered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/ErrorTriggered.php',
+ 'PHPUnit\\Event\\Test\\ErrorTriggeredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/ErrorTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\Errored' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Outcome/Errored.php',
+ 'PHPUnit\\Event\\Test\\ErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Outcome/ErroredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\Failed' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Outcome/Failed.php',
+ 'PHPUnit\\Event\\Test\\FailedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Outcome/FailedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\Finished' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/Finished.php',
+ 'PHPUnit\\Event\\Test\\FinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/FinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\MarkedIncomplete' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Outcome/MarkedIncomplete.php',
+ 'PHPUnit\\Event\\Test\\MarkedIncompleteSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Outcome/MarkedIncompleteSubscriber.php',
+ 'PHPUnit\\Event\\Test\\MockObjectCreated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/MockObjectCreated.php',
+ 'PHPUnit\\Event\\Test\\MockObjectCreatedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/MockObjectCreatedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\MockObjectForIntersectionOfInterfacesCreated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreated.php',
+ 'PHPUnit\\Event\\Test\\MockObjectForIntersectionOfInterfacesCreatedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreatedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\NoComparisonFailureException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/NoComparisonFailureException.php',
+ 'PHPUnit\\Event\\Test\\NoticeTriggered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/NoticeTriggered.php',
+ 'PHPUnit\\Event\\Test\\NoticeTriggeredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/NoticeTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PartialMockObjectCreated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/PartialMockObjectCreated.php',
+ 'PHPUnit\\Event\\Test\\PartialMockObjectCreatedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/PartialMockObjectCreatedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\Passed' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Outcome/Passed.php',
+ 'PHPUnit\\Event\\Test\\PassedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Outcome/PassedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PhpDeprecationTriggered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpDeprecationTriggered.php',
+ 'PHPUnit\\Event\\Test\\PhpDeprecationTriggeredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpDeprecationTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PhpNoticeTriggered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpNoticeTriggered.php',
+ 'PHPUnit\\Event\\Test\\PhpNoticeTriggeredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpNoticeTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PhpWarningTriggered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpWarningTriggered.php',
+ 'PHPUnit\\Event\\Test\\PhpWarningTriggeredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpWarningTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PhpunitDeprecationTriggered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpunitDeprecationTriggered.php',
+ 'PHPUnit\\Event\\Test\\PhpunitDeprecationTriggeredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpunitDeprecationTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PhpunitErrorTriggered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpunitErrorTriggered.php',
+ 'PHPUnit\\Event\\Test\\PhpunitErrorTriggeredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpunitErrorTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PhpunitWarningTriggered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpunitWarningTriggered.php',
+ 'PHPUnit\\Event\\Test\\PhpunitWarningTriggeredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/PhpunitWarningTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PostConditionCalled' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PostConditionCalled.php',
+ 'PHPUnit\\Event\\Test\\PostConditionCalledSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PostConditionCalledSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PostConditionErrored' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PostConditionErrored.php',
+ 'PHPUnit\\Event\\Test\\PostConditionErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PostConditionErroredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PostConditionFinished' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PostConditionFinished.php',
+ 'PHPUnit\\Event\\Test\\PostConditionFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PostConditionFinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PreConditionCalled' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PreConditionCalled.php',
+ 'PHPUnit\\Event\\Test\\PreConditionCalledSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PreConditionCalledSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PreConditionErrored' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PreConditionErrored.php',
+ 'PHPUnit\\Event\\Test\\PreConditionErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PreConditionErroredSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PreConditionFinished' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PreConditionFinished.php',
+ 'PHPUnit\\Event\\Test\\PreConditionFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/HookMethod/PreConditionFinishedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PreparationFailed' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/PreparationFailed.php',
+ 'PHPUnit\\Event\\Test\\PreparationFailedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/PreparationFailedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PreparationStarted' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/PreparationStarted.php',
+ 'PHPUnit\\Event\\Test\\PreparationStartedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/PreparationStartedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\Prepared' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/Prepared.php',
+ 'PHPUnit\\Event\\Test\\PreparedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Lifecycle/PreparedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\PrintedUnexpectedOutput' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/PrintedUnexpectedOutput.php',
+ 'PHPUnit\\Event\\Test\\PrintedUnexpectedOutputSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/PrintedUnexpectedOutputSubscriber.php',
+ 'PHPUnit\\Event\\Test\\Skipped' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Outcome/Skipped.php',
+ 'PHPUnit\\Event\\Test\\SkippedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Outcome/SkippedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\TestStubCreated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/TestStubCreated.php',
+ 'PHPUnit\\Event\\Test\\TestStubCreatedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/TestStubCreatedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\TestStubForIntersectionOfInterfacesCreated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreated.php',
+ 'PHPUnit\\Event\\Test\\TestStubForIntersectionOfInterfacesCreatedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreatedSubscriber.php',
+ 'PHPUnit\\Event\\Test\\WarningTriggered' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/WarningTriggered.php',
+ 'PHPUnit\\Event\\Test\\WarningTriggeredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Events/Test/Issue/WarningTriggeredSubscriber.php',
+ 'PHPUnit\\Event\\Tracer\\Tracer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Tracer.php',
+ 'PHPUnit\\Event\\TypeMap' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/TypeMap.php',
+ 'PHPUnit\\Event\\UnknownEventException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/UnknownEventException.php',
+ 'PHPUnit\\Event\\UnknownEventTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/UnknownEventTypeException.php',
+ 'PHPUnit\\Event\\UnknownSubscriberException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/UnknownSubscriberException.php',
+ 'PHPUnit\\Event\\UnknownSubscriberTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Event/Exception/UnknownSubscriberTypeException.php',
+ 'PHPUnit\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Exception.php',
+ 'PHPUnit\\Framework\\ActualValueIsNotAnObjectException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ObjectEquals/ActualValueIsNotAnObjectException.php',
+ 'PHPUnit\\Framework\\Assert' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert.php',
+ 'PHPUnit\\Framework\\AssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/AssertionFailedError.php',
+ 'PHPUnit\\Framework\\Attributes\\After' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/After.php',
+ 'PHPUnit\\Framework\\Attributes\\AfterClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/AfterClass.php',
+ 'PHPUnit\\Framework\\Attributes\\BackupGlobals' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/BackupGlobals.php',
+ 'PHPUnit\\Framework\\Attributes\\BackupStaticProperties' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/BackupStaticProperties.php',
+ 'PHPUnit\\Framework\\Attributes\\Before' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/Before.php',
+ 'PHPUnit\\Framework\\Attributes\\BeforeClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/BeforeClass.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/CoversClass.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversClassesThatExtendClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/CoversClassesThatExtendClass.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversClassesThatImplementInterface' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/CoversClassesThatImplementInterface.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversFunction' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/CoversFunction.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/CoversMethod.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversNamespace' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/CoversNamespace.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversNothing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/CoversNothing.php',
+ 'PHPUnit\\Framework\\Attributes\\CoversTrait' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/CoversTrait.php',
+ 'PHPUnit\\Framework\\Attributes\\DataProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/DataProvider.php',
+ 'PHPUnit\\Framework\\Attributes\\DataProviderExternal' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/DataProviderExternal.php',
+ 'PHPUnit\\Framework\\Attributes\\Depends' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/Depends.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsExternal' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/DependsExternal.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsExternalUsingDeepClone' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/DependsExternalUsingDeepClone.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsExternalUsingShallowClone' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/DependsExternalUsingShallowClone.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsOnClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/DependsOnClass.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsOnClassUsingDeepClone' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/DependsOnClassUsingDeepClone.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsOnClassUsingShallowClone' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/DependsOnClassUsingShallowClone.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsUsingDeepClone' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/DependsUsingDeepClone.php',
+ 'PHPUnit\\Framework\\Attributes\\DependsUsingShallowClone' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/DependsUsingShallowClone.php',
+ 'PHPUnit\\Framework\\Attributes\\DisableReturnValueGenerationForTestDoubles' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/DisableReturnValueGenerationForTestDoubles.php',
+ 'PHPUnit\\Framework\\Attributes\\DoesNotPerformAssertions' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/DoesNotPerformAssertions.php',
+ 'PHPUnit\\Framework\\Attributes\\ExcludeGlobalVariableFromBackup' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/ExcludeGlobalVariableFromBackup.php',
+ 'PHPUnit\\Framework\\Attributes\\ExcludeStaticPropertyFromBackup' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/ExcludeStaticPropertyFromBackup.php',
+ 'PHPUnit\\Framework\\Attributes\\Group' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/Group.php',
+ 'PHPUnit\\Framework\\Attributes\\IgnoreDeprecations' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/IgnoreDeprecations.php',
+ 'PHPUnit\\Framework\\Attributes\\IgnorePhpunitDeprecations' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/IgnorePhpunitDeprecations.php',
+ 'PHPUnit\\Framework\\Attributes\\Large' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/Large.php',
+ 'PHPUnit\\Framework\\Attributes\\Medium' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/Medium.php',
+ 'PHPUnit\\Framework\\Attributes\\PostCondition' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/PostCondition.php',
+ 'PHPUnit\\Framework\\Attributes\\PreCondition' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/PreCondition.php',
+ 'PHPUnit\\Framework\\Attributes\\PreserveGlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/PreserveGlobalState.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresEnvironmentVariable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/RequiresEnvironmentVariable.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresFunction' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/RequiresFunction.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/RequiresMethod.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresOperatingSystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/RequiresOperatingSystem.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresOperatingSystemFamily' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/RequiresOperatingSystemFamily.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresPhp' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/RequiresPhp.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresPhpExtension' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/RequiresPhpExtension.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresPhpunit' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/RequiresPhpunit.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresPhpunitExtension' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/RequiresPhpunitExtension.php',
+ 'PHPUnit\\Framework\\Attributes\\RequiresSetting' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/RequiresSetting.php',
+ 'PHPUnit\\Framework\\Attributes\\RunClassInSeparateProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/RunClassInSeparateProcess.php',
+ 'PHPUnit\\Framework\\Attributes\\RunInSeparateProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/RunInSeparateProcess.php',
+ 'PHPUnit\\Framework\\Attributes\\RunTestsInSeparateProcesses' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/RunTestsInSeparateProcesses.php',
+ 'PHPUnit\\Framework\\Attributes\\Small' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/Small.php',
+ 'PHPUnit\\Framework\\Attributes\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/Test.php',
+ 'PHPUnit\\Framework\\Attributes\\TestDox' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/TestDox.php',
+ 'PHPUnit\\Framework\\Attributes\\TestWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/TestWith.php',
+ 'PHPUnit\\Framework\\Attributes\\TestWithJson' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/TestWithJson.php',
+ 'PHPUnit\\Framework\\Attributes\\Ticket' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/Ticket.php',
+ 'PHPUnit\\Framework\\Attributes\\UsesClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/UsesClass.php',
+ 'PHPUnit\\Framework\\Attributes\\UsesClassesThatExtendClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/UsesClassesThatExtendClass.php',
+ 'PHPUnit\\Framework\\Attributes\\UsesClassesThatImplementInterface' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/UsesClassesThatImplementInterface.php',
+ 'PHPUnit\\Framework\\Attributes\\UsesFunction' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/UsesFunction.php',
+ 'PHPUnit\\Framework\\Attributes\\UsesMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/UsesMethod.php',
+ 'PHPUnit\\Framework\\Attributes\\UsesNamespace' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/UsesNamespace.php',
+ 'PHPUnit\\Framework\\Attributes\\UsesTrait' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/UsesTrait.php',
+ 'PHPUnit\\Framework\\Attributes\\WithoutErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Attributes/WithoutErrorHandler.php',
+ 'PHPUnit\\Framework\\CodeCoverageException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.php',
+ 'PHPUnit\\Framework\\ComparisonMethodDoesNotAcceptParameterTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotAcceptParameterTypeException.php',
+ 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareBoolReturnTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareBoolReturnTypeException.php',
+ 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareExactlyOneParameterException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareExactlyOneParameterException.php',
+ 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareParameterTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareParameterTypeException.php',
+ 'PHPUnit\\Framework\\ComparisonMethodDoesNotExistException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotExistException.php',
+ 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/ArrayHasKey.php',
+ 'PHPUnit\\Framework\\Constraint\\BinaryOperator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/BinaryOperator.php',
+ 'PHPUnit\\Framework\\Constraint\\Callback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Callback.php',
+ 'PHPUnit\\Framework\\Constraint\\Constraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php',
+ 'PHPUnit\\Framework\\Constraint\\Count' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/Count.php',
+ 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/DirectoryExists.php',
+ 'PHPUnit\\Framework\\Constraint\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception/Exception.php',
+ 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionCode.php',
+ 'PHPUnit\\Framework\\Constraint\\ExceptionMessageIsOrContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionMessageIsOrContains.php',
+ 'PHPUnit\\Framework\\Constraint\\ExceptionMessageMatchesRegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionMessageMatchesRegularExpression.php',
+ 'PHPUnit\\Framework\\Constraint\\FileExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/FileExists.php',
+ 'PHPUnit\\Framework\\Constraint\\GreaterThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/GreaterThan.php',
+ 'PHPUnit\\Framework\\Constraint\\IsAnything' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php',
+ 'PHPUnit\\Framework\\Constraint\\IsEmpty' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/IsEmpty.php',
+ 'PHPUnit\\Framework\\Constraint\\IsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqual.php',
+ 'PHPUnit\\Framework\\Constraint\\IsEqualCanonicalizing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualCanonicalizing.php',
+ 'PHPUnit\\Framework\\Constraint\\IsEqualIgnoringCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualIgnoringCase.php',
+ 'PHPUnit\\Framework\\Constraint\\IsEqualWithDelta' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualWithDelta.php',
+ 'PHPUnit\\Framework\\Constraint\\IsFalse' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Boolean/IsFalse.php',
+ 'PHPUnit\\Framework\\Constraint\\IsFinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Math/IsFinite.php',
+ 'PHPUnit\\Framework\\Constraint\\IsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php',
+ 'PHPUnit\\Framework\\Constraint\\IsInfinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Math/IsInfinite.php',
+ 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Type/IsInstanceOf.php',
+ 'PHPUnit\\Framework\\Constraint\\IsJson' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/IsJson.php',
+ 'PHPUnit\\Framework\\Constraint\\IsList' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/IsList.php',
+ 'PHPUnit\\Framework\\Constraint\\IsNan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Math/IsNan.php',
+ 'PHPUnit\\Framework\\Constraint\\IsNull' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Type/IsNull.php',
+ 'PHPUnit\\Framework\\Constraint\\IsReadable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/IsReadable.php',
+ 'PHPUnit\\Framework\\Constraint\\IsTrue' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Boolean/IsTrue.php',
+ 'PHPUnit\\Framework\\Constraint\\IsType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Type/IsType.php',
+ 'PHPUnit\\Framework\\Constraint\\IsWritable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/IsWritable.php',
+ 'PHPUnit\\Framework\\Constraint\\JsonMatches' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php',
+ 'PHPUnit\\Framework\\Constraint\\LessThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/LessThan.php',
+ 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalAnd.php',
+ 'PHPUnit\\Framework\\Constraint\\LogicalNot' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalNot.php',
+ 'PHPUnit\\Framework\\Constraint\\LogicalOr' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalOr.php',
+ 'PHPUnit\\Framework\\Constraint\\LogicalXor' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalXor.php',
+ 'PHPUnit\\Framework\\Constraint\\ObjectEquals' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Object/ObjectEquals.php',
+ 'PHPUnit\\Framework\\Constraint\\ObjectHasProperty' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Object/ObjectHasProperty.php',
+ 'PHPUnit\\Framework\\Constraint\\Operator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/Operator.php',
+ 'PHPUnit\\Framework\\Constraint\\RegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/RegularExpression.php',
+ 'PHPUnit\\Framework\\Constraint\\SameSize' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/SameSize.php',
+ 'PHPUnit\\Framework\\Constraint\\StringContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/StringContains.php',
+ 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/StringEndsWith.php',
+ 'PHPUnit\\Framework\\Constraint\\StringEqualsStringIgnoringLineEndings' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/StringEqualsStringIgnoringLineEndings.php',
+ 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/StringMatchesFormatDescription.php',
+ 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/StringStartsWith.php',
+ 'PHPUnit\\Framework\\Constraint\\TraversableContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContains.php',
+ 'PHPUnit\\Framework\\Constraint\\TraversableContainsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsEqual.php',
+ 'PHPUnit\\Framework\\Constraint\\TraversableContainsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsIdentical.php',
+ 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsOnly.php',
+ 'PHPUnit\\Framework\\Constraint\\UnaryOperator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/UnaryOperator.php',
+ 'PHPUnit\\Framework\\DataProviderTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php',
+ 'PHPUnit\\Framework\\EmptyStringException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/EmptyStringException.php',
+ 'PHPUnit\\Framework\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Exception.php',
+ 'PHPUnit\\Framework\\ExecutionOrderDependency' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExecutionOrderDependency.php',
+ 'PHPUnit\\Framework\\ExpectationFailedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ExpectationFailedException.php',
+ 'PHPUnit\\Framework\\GeneratorNotSupportedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/GeneratorNotSupportedException.php',
+ 'PHPUnit\\Framework\\IncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Incomplete/IncompleteTest.php',
+ 'PHPUnit\\Framework\\IncompleteTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Incomplete/IncompleteTestError.php',
+ 'PHPUnit\\Framework\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.php',
+ 'PHPUnit\\Framework\\InvalidCoversTargetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.php',
+ 'PHPUnit\\Framework\\InvalidDataProviderException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.php',
+ 'PHPUnit\\Framework\\InvalidDependencyException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidDependencyException.php',
+ 'PHPUnit\\Framework\\IsolatedTestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestRunner/IsolatedTestRunner.php',
+ 'PHPUnit\\Framework\\IsolatedTestRunnerRegistry' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestRunner/IsolatedTestRunnerRegistry.php',
+ 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/BadMethodCallException.php',
+ 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/Identity.php',
+ 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/InvocationMocker.php',
+ 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/InvocationStubber.php',
+ 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/MethodNameMatch.php',
+ 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/ParametersMatch.php',
+ 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Builder/Stub.php',
+ 'PHPUnit\\Framework\\MockObject\\CannotUseOnlyMethodsException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php',
+ 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php',
+ 'PHPUnit\\Framework\\MockObject\\DoubledCloneMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/DoubledCloneMethod.php',
+ 'PHPUnit\\Framework\\MockObject\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsEnumerationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ClassIsEnumerationException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsFinalException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ClassIsFinalException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\DoubledClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/DoubledClass.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\DoubledMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/DoubledMethod.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\DoubledMethodSet' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/DoubledMethodSet.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\DuplicateMethodException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/DuplicateMethodException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/Exception.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\Generator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Generator.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\HookedProperty' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/HookedProperty.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\HookedPropertyGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/HookedPropertyGenerator.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\InvalidMethodNameException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/InvalidMethodNameException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\MethodNamedMethodException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/MethodNamedMethodException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\NameAlreadyInUseException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/NameAlreadyInUseException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\ReflectionException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/ReflectionException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/RuntimeException.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\TemplateLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/TemplateLoader.php',
+ 'PHPUnit\\Framework\\MockObject\\Generator\\UnknownTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator/Exception/UnknownTypeException.php',
+ 'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.php',
+ 'PHPUnit\\Framework\\MockObject\\Invocation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Invocation.php',
+ 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/InvocationHandler.php',
+ 'PHPUnit\\Framework\\MockObject\\MatchBuilderNotFoundException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MatchBuilderNotFoundException.php',
+ 'PHPUnit\\Framework\\MockObject\\Matcher' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Matcher.php',
+ 'PHPUnit\\Framework\\MockObject\\MatcherAlreadyRegisteredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.php',
+ 'PHPUnit\\Framework\\MockObject\\Method' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/Method.php',
+ 'PHPUnit\\Framework\\MockObject\\MethodCannotBeConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodCannotBeConfiguredException.php',
+ 'PHPUnit\\Framework\\MockObject\\MethodNameAlreadyConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.php',
+ 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/MethodNameConstraint.php',
+ 'PHPUnit\\Framework\\MockObject\\MethodNameNotConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodNameNotConfiguredException.php',
+ 'PHPUnit\\Framework\\MockObject\\MethodParametersAlreadyConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.php',
+ 'PHPUnit\\Framework\\MockObject\\MockBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockBuilder.php',
+ 'PHPUnit\\Framework\\MockObject\\MockObject' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Interface/MockObject.php',
+ 'PHPUnit\\Framework\\MockObject\\MockObjectApi' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/MockObjectApi.php',
+ 'PHPUnit\\Framework\\MockObject\\MockObjectInternal' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Interface/MockObjectInternal.php',
+ 'PHPUnit\\Framework\\MockObject\\NeverReturningMethodException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/NeverReturningMethodException.php',
+ 'PHPUnit\\Framework\\MockObject\\NoMoreReturnValuesConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/NoMoreReturnValuesConfiguredException.php',
+ 'PHPUnit\\Framework\\MockObject\\ProxiedCloneMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/ProxiedCloneMethod.php',
+ 'PHPUnit\\Framework\\MockObject\\ReturnValueGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/ReturnValueGenerator.php',
+ 'PHPUnit\\Framework\\MockObject\\ReturnValueNotConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/AnyInvokedCount.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/AnyParameters.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/InvocationOrder.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/InvokedAtLeastCount.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/InvokedAtLeastOnce.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/InvokedAtMostCount.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/InvokedCount.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/MethodName.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/Parameters.php',
+ 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Rule/ParametersRule.php',
+ 'PHPUnit\\Framework\\MockObject\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/RuntimeException.php',
+ 'PHPUnit\\Framework\\MockObject\\Runtime\\PropertyGetHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/PropertyHook/PropertyGetHook.php',
+ 'PHPUnit\\Framework\\MockObject\\Runtime\\PropertyHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/PropertyHook/PropertyHook.php',
+ 'PHPUnit\\Framework\\MockObject\\Runtime\\PropertySetHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/PropertyHook/PropertySetHook.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Interface/Stub.php',
+ 'PHPUnit\\Framework\\MockObject\\StubApi' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/StubApi.php',
+ 'PHPUnit\\Framework\\MockObject\\StubInternal' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Interface/StubInternal.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ConsecutiveCalls.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/Exception.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnArgument.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnCallback.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnReference.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnSelf.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnStub.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/ReturnValueMap.php',
+ 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Stub/Stub.php',
+ 'PHPUnit\\Framework\\MockObject\\TestDoubleState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Runtime/Api/TestDoubleState.php',
+ 'PHPUnit\\Framework\\NativeType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/NativeType.php',
+ 'PHPUnit\\Framework\\NoChildTestSuiteException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php',
+ 'PHPUnit\\Framework\\PhptAssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/PhptAssertionFailedError.php',
+ 'PHPUnit\\Framework\\ProcessIsolationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ProcessIsolationException.php',
+ 'PHPUnit\\Framework\\Reorderable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Reorderable.php',
+ 'PHPUnit\\Framework\\SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SelfDescribing.php',
+ 'PHPUnit\\Framework\\SeparateProcessTestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestRunner/SeparateProcessTestRunner.php',
+ 'PHPUnit\\Framework\\SkippedTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Skipped/SkippedTest.php',
+ 'PHPUnit\\Framework\\SkippedTestSuiteError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Skipped/SkippedTestSuiteError.php',
+ 'PHPUnit\\Framework\\SkippedWithMessageException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Skipped/SkippedWithMessageException.php',
+ 'PHPUnit\\Framework\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Test.php',
+ 'PHPUnit\\Framework\\TestBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestBuilder.php',
+ 'PHPUnit\\Framework\\TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestCase.php',
+ 'PHPUnit\\Framework\\TestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestRunner/TestRunner.php',
+ 'PHPUnit\\Framework\\TestSize\\Known' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSize/Known.php',
+ 'PHPUnit\\Framework\\TestSize\\Large' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSize/Large.php',
+ 'PHPUnit\\Framework\\TestSize\\Medium' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSize/Medium.php',
+ 'PHPUnit\\Framework\\TestSize\\Small' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSize/Small.php',
+ 'PHPUnit\\Framework\\TestSize\\TestSize' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSize/TestSize.php',
+ 'PHPUnit\\Framework\\TestSize\\Unknown' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSize/Unknown.php',
+ 'PHPUnit\\Framework\\TestStatus\\Deprecation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestStatus/Deprecation.php',
+ 'PHPUnit\\Framework\\TestStatus\\Error' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestStatus/Error.php',
+ 'PHPUnit\\Framework\\TestStatus\\Failure' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestStatus/Failure.php',
+ 'PHPUnit\\Framework\\TestStatus\\Incomplete' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestStatus/Incomplete.php',
+ 'PHPUnit\\Framework\\TestStatus\\Known' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestStatus/Known.php',
+ 'PHPUnit\\Framework\\TestStatus\\Notice' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestStatus/Notice.php',
+ 'PHPUnit\\Framework\\TestStatus\\Risky' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestStatus/Risky.php',
+ 'PHPUnit\\Framework\\TestStatus\\Skipped' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestStatus/Skipped.php',
+ 'PHPUnit\\Framework\\TestStatus\\Success' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestStatus/Success.php',
+ 'PHPUnit\\Framework\\TestStatus\\TestStatus' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestStatus/TestStatus.php',
+ 'PHPUnit\\Framework\\TestStatus\\Unknown' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestStatus/Unknown.php',
+ 'PHPUnit\\Framework\\TestStatus\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestStatus/Warning.php',
+ 'PHPUnit\\Framework\\TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuite.php',
+ 'PHPUnit\\Framework\\TestSuiteIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php',
+ 'PHPUnit\\Framework\\UnknownClassOrInterfaceException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/UnknownClassOrInterfaceException.php',
+ 'PHPUnit\\Framework\\UnknownNativeTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/UnknownNativeTypeException.php',
+ 'PHPUnit\\Logging\\EventLogger' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/EventLogger.php',
+ 'PHPUnit\\Logging\\JUnit\\JunitXmlLogger' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/JunitXmlLogger.php',
+ 'PHPUnit\\Logging\\JUnit\\Subscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/Subscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestErroredSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestFailedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestFailedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestFinishedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestMarkedIncompleteSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestMarkedIncompleteSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestPreparationFailedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestPreparationFailedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestPreparationStartedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestPreparationStartedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestPreparedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestPreparedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestPrintedUnexpectedOutputSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestPrintedUnexpectedOutputSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestRunnerExecutionFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestRunnerExecutionFinishedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestSkippedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestSkippedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestSuiteFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestSuiteFinishedSubscriber.php',
+ 'PHPUnit\\Logging\\JUnit\\TestSuiteStartedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/JUnit/Subscriber/TestSuiteStartedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\Subscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/Subscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TeamCityLogger' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TeamCity/TeamCityLogger.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestConsideredRiskySubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestConsideredRiskySubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestErroredSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestFailedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestFailedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestFinishedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestMarkedIncompleteSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestMarkedIncompleteSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestPreparedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestPreparedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestRunnerExecutionFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestRunnerExecutionFinishedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestSkippedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestSkippedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestSuiteBeforeFirstTestMethodErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestSuiteBeforeFirstTestMethodErroredSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestSuiteFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestSuiteFinishedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestSuiteSkippedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestSuiteSkippedSubscriber.php',
+ 'PHPUnit\\Logging\\TeamCity\\TestSuiteStartedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TeamCity/Subscriber/TestSuiteStartedSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\HtmlRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/HtmlRenderer.php',
+ 'PHPUnit\\Logging\\TestDox\\NamePrettifier' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/NamePrettifier.php',
+ 'PHPUnit\\Logging\\TestDox\\PlainTextRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/PlainTextRenderer.php',
+ 'PHPUnit\\Logging\\TestDox\\Subscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/Subscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestConsideredRiskySubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestConsideredRiskySubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestErroredSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestFailedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestFailedSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestFinishedSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestMarkedIncompleteSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestMarkedIncompleteSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestPassedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestPassedSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestPreparedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestPreparedSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/TestResult.php',
+ 'PHPUnit\\Logging\\TestDox\\TestResultCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/TestResultCollection.php',
+ 'PHPUnit\\Logging\\TestDox\\TestResultCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/TestResultCollectionIterator.php',
+ 'PHPUnit\\Logging\\TestDox\\TestResultCollector' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/TestResultCollector.php',
+ 'PHPUnit\\Logging\\TestDox\\TestSkippedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestSkippedSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredDeprecationSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredNoticeSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredNoticeSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpDeprecationSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpNoticeSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpWarningSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitDeprecationSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitErrorSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitWarningSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php',
+ 'PHPUnit\\Logging\\TestDox\\TestTriggeredWarningSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Logging/TestDox/TestResult/Subscriber/TestTriggeredWarningSubscriber.php',
+ 'PHPUnit\\Metadata\\After' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/After.php',
+ 'PHPUnit\\Metadata\\AfterClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/AfterClass.php',
+ 'PHPUnit\\Metadata\\Api\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Api/CodeCoverage.php',
+ 'PHPUnit\\Metadata\\Api\\DataProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Api/DataProvider.php',
+ 'PHPUnit\\Metadata\\Api\\Dependencies' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Api/Dependencies.php',
+ 'PHPUnit\\Metadata\\Api\\Groups' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Api/Groups.php',
+ 'PHPUnit\\Metadata\\Api\\HookMethods' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Api/HookMethods.php',
+ 'PHPUnit\\Metadata\\Api\\Requirements' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Api/Requirements.php',
+ 'PHPUnit\\Metadata\\BackupGlobals' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/BackupGlobals.php',
+ 'PHPUnit\\Metadata\\BackupStaticProperties' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/BackupStaticProperties.php',
+ 'PHPUnit\\Metadata\\Before' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Before.php',
+ 'PHPUnit\\Metadata\\BeforeClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/BeforeClass.php',
+ 'PHPUnit\\Metadata\\CoversClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/CoversClass.php',
+ 'PHPUnit\\Metadata\\CoversClassesThatExtendClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/CoversClassesThatExtendClass.php',
+ 'PHPUnit\\Metadata\\CoversClassesThatImplementInterface' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/CoversClassesThatImplementInterface.php',
+ 'PHPUnit\\Metadata\\CoversFunction' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/CoversFunction.php',
+ 'PHPUnit\\Metadata\\CoversMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/CoversMethod.php',
+ 'PHPUnit\\Metadata\\CoversNamespace' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/CoversNamespace.php',
+ 'PHPUnit\\Metadata\\CoversNothing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/CoversNothing.php',
+ 'PHPUnit\\Metadata\\CoversTrait' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/CoversTrait.php',
+ 'PHPUnit\\Metadata\\DataProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/DataProvider.php',
+ 'PHPUnit\\Metadata\\DependsOnClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/DependsOnClass.php',
+ 'PHPUnit\\Metadata\\DependsOnMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/DependsOnMethod.php',
+ 'PHPUnit\\Metadata\\DisableReturnValueGenerationForTestDoubles' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/DisableReturnValueGenerationForTestDoubles.php',
+ 'PHPUnit\\Metadata\\DoesNotPerformAssertions' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/DoesNotPerformAssertions.php',
+ 'PHPUnit\\Metadata\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Exception/Exception.php',
+ 'PHPUnit\\Metadata\\ExcludeGlobalVariableFromBackup' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/ExcludeGlobalVariableFromBackup.php',
+ 'PHPUnit\\Metadata\\ExcludeStaticPropertyFromBackup' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/ExcludeStaticPropertyFromBackup.php',
+ 'PHPUnit\\Metadata\\Group' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Group.php',
+ 'PHPUnit\\Metadata\\IgnoreDeprecations' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/IgnoreDeprecations.php',
+ 'PHPUnit\\Metadata\\IgnorePhpunitDeprecations' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/IgnorePhpunitDeprecations.php',
+ 'PHPUnit\\Metadata\\InvalidVersionRequirementException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Exception/InvalidVersionRequirementException.php',
+ 'PHPUnit\\Metadata\\Metadata' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Metadata.php',
+ 'PHPUnit\\Metadata\\MetadataCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/MetadataCollection.php',
+ 'PHPUnit\\Metadata\\MetadataCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/MetadataCollectionIterator.php',
+ 'PHPUnit\\Metadata\\NoVersionRequirementException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Exception/NoVersionRequirementException.php',
+ 'PHPUnit\\Metadata\\Parser\\AttributeParser' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Parser/AttributeParser.php',
+ 'PHPUnit\\Metadata\\Parser\\CachingParser' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Parser/CachingParser.php',
+ 'PHPUnit\\Metadata\\Parser\\Parser' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Parser/Parser.php',
+ 'PHPUnit\\Metadata\\Parser\\Registry' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Parser/Registry.php',
+ 'PHPUnit\\Metadata\\PostCondition' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/PostCondition.php',
+ 'PHPUnit\\Metadata\\PreCondition' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/PreCondition.php',
+ 'PHPUnit\\Metadata\\PreserveGlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/PreserveGlobalState.php',
+ 'PHPUnit\\Metadata\\RequiresEnvironmentVariable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/RequiresEnvironmentVariable.php',
+ 'PHPUnit\\Metadata\\RequiresFunction' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/RequiresFunction.php',
+ 'PHPUnit\\Metadata\\RequiresMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/RequiresMethod.php',
+ 'PHPUnit\\Metadata\\RequiresOperatingSystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/RequiresOperatingSystem.php',
+ 'PHPUnit\\Metadata\\RequiresOperatingSystemFamily' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/RequiresOperatingSystemFamily.php',
+ 'PHPUnit\\Metadata\\RequiresPhp' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/RequiresPhp.php',
+ 'PHPUnit\\Metadata\\RequiresPhpExtension' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/RequiresPhpExtension.php',
+ 'PHPUnit\\Metadata\\RequiresPhpunit' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/RequiresPhpunit.php',
+ 'PHPUnit\\Metadata\\RequiresPhpunitExtension' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/RequiresPhpunitExtension.php',
+ 'PHPUnit\\Metadata\\RequiresSetting' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/RequiresSetting.php',
+ 'PHPUnit\\Metadata\\RunClassInSeparateProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/RunClassInSeparateProcess.php',
+ 'PHPUnit\\Metadata\\RunInSeparateProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/RunInSeparateProcess.php',
+ 'PHPUnit\\Metadata\\RunTestsInSeparateProcesses' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/RunTestsInSeparateProcesses.php',
+ 'PHPUnit\\Metadata\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Test.php',
+ 'PHPUnit\\Metadata\\TestDox' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/TestDox.php',
+ 'PHPUnit\\Metadata\\TestWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/TestWith.php',
+ 'PHPUnit\\Metadata\\UsesClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/UsesClass.php',
+ 'PHPUnit\\Metadata\\UsesClassesThatExtendClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/UsesClassesThatExtendClass.php',
+ 'PHPUnit\\Metadata\\UsesClassesThatImplementInterface' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/UsesClassesThatImplementInterface.php',
+ 'PHPUnit\\Metadata\\UsesFunction' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/UsesFunction.php',
+ 'PHPUnit\\Metadata\\UsesMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/UsesMethod.php',
+ 'PHPUnit\\Metadata\\UsesNamespace' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/UsesNamespace.php',
+ 'PHPUnit\\Metadata\\UsesTrait' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/UsesTrait.php',
+ 'PHPUnit\\Metadata\\Version\\ComparisonRequirement' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Version/ComparisonRequirement.php',
+ 'PHPUnit\\Metadata\\Version\\ConstraintRequirement' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Version/ConstraintRequirement.php',
+ 'PHPUnit\\Metadata\\Version\\Requirement' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Version/Requirement.php',
+ 'PHPUnit\\Metadata\\WithoutErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/WithoutErrorHandler.php',
+ 'PHPUnit\\Runner\\Baseline\\Baseline' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/Baseline.php',
+ 'PHPUnit\\Runner\\Baseline\\CannotLoadBaselineException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/Exception/CannotLoadBaselineException.php',
+ 'PHPUnit\\Runner\\Baseline\\FileDoesNotHaveLineException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/Exception/FileDoesNotHaveLineException.php',
+ 'PHPUnit\\Runner\\Baseline\\Generator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/Generator.php',
+ 'PHPUnit\\Runner\\Baseline\\Issue' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/Issue.php',
+ 'PHPUnit\\Runner\\Baseline\\Reader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/Reader.php',
+ 'PHPUnit\\Runner\\Baseline\\RelativePathCalculator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/RelativePathCalculator.php',
+ 'PHPUnit\\Runner\\Baseline\\Subscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/Subscriber/Subscriber.php',
+ 'PHPUnit\\Runner\\Baseline\\TestTriggeredDeprecationSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/Subscriber/TestTriggeredDeprecationSubscriber.php',
+ 'PHPUnit\\Runner\\Baseline\\TestTriggeredNoticeSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/Subscriber/TestTriggeredNoticeSubscriber.php',
+ 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpDeprecationSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/Subscriber/TestTriggeredPhpDeprecationSubscriber.php',
+ 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpNoticeSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/Subscriber/TestTriggeredPhpNoticeSubscriber.php',
+ 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpWarningSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/Subscriber/TestTriggeredPhpWarningSubscriber.php',
+ 'PHPUnit\\Runner\\Baseline\\TestTriggeredWarningSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/Subscriber/TestTriggeredWarningSubscriber.php',
+ 'PHPUnit\\Runner\\Baseline\\Writer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Baseline/Writer.php',
+ 'PHPUnit\\Runner\\ClassCannotBeFoundException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/ClassCannotBeFoundException.php',
+ 'PHPUnit\\Runner\\ClassDoesNotExtendTestCaseException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/ClassDoesNotExtendTestCaseException.php',
+ 'PHPUnit\\Runner\\ClassIsAbstractException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/ClassIsAbstractException.php',
+ 'PHPUnit\\Runner\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/CodeCoverage.php',
+ 'PHPUnit\\Runner\\DeprecationCollector\\Collector' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/DeprecationCollector/Collector.php',
+ 'PHPUnit\\Runner\\DeprecationCollector\\Facade' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/DeprecationCollector/Facade.php',
+ 'PHPUnit\\Runner\\DeprecationCollector\\Subscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/DeprecationCollector/Subscriber/Subscriber.php',
+ 'PHPUnit\\Runner\\DeprecationCollector\\TestPreparedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/DeprecationCollector/Subscriber/TestPreparedSubscriber.php',
+ 'PHPUnit\\Runner\\DeprecationCollector\\TestTriggeredDeprecationSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/DeprecationCollector/Subscriber/TestTriggeredDeprecationSubscriber.php',
+ 'PHPUnit\\Runner\\DirectoryDoesNotExistException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/DirectoryDoesNotExistException.php',
+ 'PHPUnit\\Runner\\ErrorException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/ErrorException.php',
+ 'PHPUnit\\Runner\\ErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ErrorHandler.php',
+ 'PHPUnit\\Runner\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/Exception.php',
+ 'PHPUnit\\Runner\\Extension\\Extension' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Extension/Extension.php',
+ 'PHPUnit\\Runner\\Extension\\ExtensionBootstrapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Extension/ExtensionBootstrapper.php',
+ 'PHPUnit\\Runner\\Extension\\Facade' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Extension/Facade.php',
+ 'PHPUnit\\Runner\\Extension\\ParameterCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Extension/ParameterCollection.php',
+ 'PHPUnit\\Runner\\Extension\\PharLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Extension/PharLoader.php',
+ 'PHPUnit\\Runner\\FileDoesNotExistException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/FileDoesNotExistException.php',
+ 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php',
+ 'PHPUnit\\Runner\\Filter\\ExcludeNameFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/ExcludeNameFilterIterator.php',
+ 'PHPUnit\\Runner\\Filter\\Factory' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Factory.php',
+ 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php',
+ 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php',
+ 'PHPUnit\\Runner\\Filter\\IncludeNameFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/IncludeNameFilterIterator.php',
+ 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php',
+ 'PHPUnit\\Runner\\Filter\\TestIdFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/TestIdFilterIterator.php',
+ 'PHPUnit\\Runner\\GarbageCollection\\ExecutionFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/GarbageCollection/Subscriber/ExecutionFinishedSubscriber.php',
+ 'PHPUnit\\Runner\\GarbageCollection\\ExecutionStartedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/GarbageCollection/Subscriber/ExecutionStartedSubscriber.php',
+ 'PHPUnit\\Runner\\GarbageCollection\\GarbageCollectionHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/GarbageCollection/GarbageCollectionHandler.php',
+ 'PHPUnit\\Runner\\GarbageCollection\\Subscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/GarbageCollection/Subscriber/Subscriber.php',
+ 'PHPUnit\\Runner\\GarbageCollection\\TestFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/GarbageCollection/Subscriber/TestFinishedSubscriber.php',
+ 'PHPUnit\\Runner\\HookMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/HookMethod/HookMethod.php',
+ 'PHPUnit\\Runner\\HookMethodCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/HookMethod/HookMethodCollection.php',
+ 'PHPUnit\\Runner\\InvalidOrderException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/InvalidOrderException.php',
+ 'PHPUnit\\Runner\\InvalidPhptFileException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/InvalidPhptFileException.php',
+ 'PHPUnit\\Runner\\ParameterDoesNotExistException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/ParameterDoesNotExistException.php',
+ 'PHPUnit\\Runner\\PhptExternalFileCannotBeLoadedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/PhptExternalFileCannotBeLoadedException.php',
+ 'PHPUnit\\Runner\\PhptTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/PHPT/PhptTestCase.php',
+ 'PHPUnit\\Runner\\ResultCache\\DefaultResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/DefaultResultCache.php',
+ 'PHPUnit\\Runner\\ResultCache\\NullResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/NullResultCache.php',
+ 'PHPUnit\\Runner\\ResultCache\\ResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/ResultCache.php',
+ 'PHPUnit\\Runner\\ResultCache\\ResultCacheHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/ResultCacheHandler.php',
+ 'PHPUnit\\Runner\\ResultCache\\Subscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/Subscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestConsideredRiskySubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestConsideredRiskySubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestErroredSubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestFailedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestFailedSubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestFinishedSubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestMarkedIncompleteSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestMarkedIncompleteSubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestPreparedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestPreparedSubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestSkippedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestSkippedSubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestSuiteFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestSuiteFinishedSubscriber.php',
+ 'PHPUnit\\Runner\\ResultCache\\TestSuiteStartedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCache/Subscriber/TestSuiteStartedSubscriber.php',
+ 'PHPUnit\\Runner\\TestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php',
+ 'PHPUnit\\Runner\\TestSuiteSorter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteSorter.php',
+ 'PHPUnit\\Runner\\UnsupportedPhptSectionException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception/UnsupportedPhptSectionException.php',
+ 'PHPUnit\\Runner\\Version' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Version.php',
+ 'PHPUnit\\TestRunner\\IssueFilter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/IssueFilter.php',
+ 'PHPUnit\\TestRunner\\TestResult\\AfterTestClassMethodErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/AfterTestClassMethodErroredSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\BeforeTestClassMethodErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/BeforeTestClassMethodErroredSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\Collector' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Collector.php',
+ 'PHPUnit\\TestRunner\\TestResult\\ExecutionStartedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/ExecutionStartedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\Facade' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Facade.php',
+ 'PHPUnit\\TestRunner\\TestResult\\Issues\\Issue' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Issue.php',
+ 'PHPUnit\\TestRunner\\TestResult\\PassedTests' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/PassedTests.php',
+ 'PHPUnit\\TestRunner\\TestResult\\Subscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/Subscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestConsideredRiskySubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestConsideredRiskySubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestErroredSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestFailedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestFailedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestFinishedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestMarkedIncompleteSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestMarkedIncompleteSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestPreparedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestPreparedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/TestResult.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestRunnerTriggeredDeprecationSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestRunnerTriggeredDeprecationSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestRunnerTriggeredWarningSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestRunnerTriggeredWarningSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestSkippedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestSkippedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestSuiteFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestSuiteFinishedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestSuiteSkippedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestSuiteSkippedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestSuiteStartedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestSuiteStartedSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredDeprecationSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredErrorSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredErrorSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredNoticeSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredNoticeSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpDeprecationSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpNoticeSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpWarningSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpunitDeprecationSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpunitErrorSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredPhpunitWarningSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php',
+ 'PHPUnit\\TestRunner\\TestResult\\TestTriggeredWarningSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResult/Subscriber/TestTriggeredWarningSubscriber.php',
+ 'PHPUnit\\TextUI\\Application' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Application.php',
+ 'PHPUnit\\TextUI\\CannotOpenSocketException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/CannotOpenSocketException.php',
+ 'PHPUnit\\TextUI\\CliArguments\\Builder' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Cli/Builder.php',
+ 'PHPUnit\\TextUI\\CliArguments\\Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Cli/Configuration.php',
+ 'PHPUnit\\TextUI\\CliArguments\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Cli/Exception.php',
+ 'PHPUnit\\TextUI\\CliArguments\\XmlConfigurationFileFinder' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Cli/XmlConfigurationFileFinder.php',
+ 'PHPUnit\\TextUI\\Command\\AtLeastVersionCommand' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command/Commands/AtLeastVersionCommand.php',
+ 'PHPUnit\\TextUI\\Command\\Command' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command/Command.php',
+ 'PHPUnit\\TextUI\\Command\\GenerateConfigurationCommand' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command/Commands/GenerateConfigurationCommand.php',
+ 'PHPUnit\\TextUI\\Command\\ListGroupsCommand' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command/Commands/ListGroupsCommand.php',
+ 'PHPUnit\\TextUI\\Command\\ListTestFilesCommand' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command/Commands/ListTestFilesCommand.php',
+ 'PHPUnit\\TextUI\\Command\\ListTestSuitesCommand' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command/Commands/ListTestSuitesCommand.php',
+ 'PHPUnit\\TextUI\\Command\\ListTestsAsTextCommand' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command/Commands/ListTestsAsTextCommand.php',
+ 'PHPUnit\\TextUI\\Command\\ListTestsAsXmlCommand' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command/Commands/ListTestsAsXmlCommand.php',
+ 'PHPUnit\\TextUI\\Command\\MigrateConfigurationCommand' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command/Commands/MigrateConfigurationCommand.php',
+ 'PHPUnit\\TextUI\\Command\\Result' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command/Result.php',
+ 'PHPUnit\\TextUI\\Command\\ShowHelpCommand' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command/Commands/ShowHelpCommand.php',
+ 'PHPUnit\\TextUI\\Command\\ShowVersionCommand' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command/Commands/ShowVersionCommand.php',
+ 'PHPUnit\\TextUI\\Command\\VersionCheckCommand' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command/Commands/VersionCheckCommand.php',
+ 'PHPUnit\\TextUI\\Command\\WarmCodeCoverageCacheCommand' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command/Commands/WarmCodeCoverageCacheCommand.php',
+ 'PHPUnit\\TextUI\\Configuration\\Builder' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Builder.php',
+ 'PHPUnit\\TextUI\\Configuration\\CodeCoverageFilterRegistry' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/CodeCoverageFilterRegistry.php',
+ 'PHPUnit\\TextUI\\Configuration\\CodeCoverageReportNotConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/CodeCoverageReportNotConfiguredException.php',
+ 'PHPUnit\\TextUI\\Configuration\\Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Configuration.php',
+ 'PHPUnit\\TextUI\\Configuration\\ConfigurationCannotBeBuiltException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/ConfigurationCannotBeBuiltException.php',
+ 'PHPUnit\\TextUI\\Configuration\\Constant' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/Constant.php',
+ 'PHPUnit\\TextUI\\Configuration\\ConstantCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/ConstantCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\ConstantCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/ConstantCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\Directory' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/Directory.php',
+ 'PHPUnit\\TextUI\\Configuration\\DirectoryCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/DirectoryCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\DirectoryCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/DirectoryCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/Exception.php',
+ 'PHPUnit\\TextUI\\Configuration\\ExtensionBootstrap' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/ExtensionBootstrap.php',
+ 'PHPUnit\\TextUI\\Configuration\\ExtensionBootstrapCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/ExtensionBootstrapCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\ExtensionBootstrapCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/ExtensionBootstrapCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\File' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/File.php',
+ 'PHPUnit\\TextUI\\Configuration\\FileCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/FileCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\FileCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/FileCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\FilterDirectory' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/FilterDirectory.php',
+ 'PHPUnit\\TextUI\\Configuration\\FilterDirectoryCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/FilterDirectoryCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\FilterDirectoryCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/FilterDirectoryCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\FilterNotConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/FilterNotConfiguredException.php',
+ 'PHPUnit\\TextUI\\Configuration\\Group' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/Group.php',
+ 'PHPUnit\\TextUI\\Configuration\\GroupCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/GroupCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\GroupCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/GroupCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\IniSetting' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/IniSetting.php',
+ 'PHPUnit\\TextUI\\Configuration\\IniSettingCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/IniSettingCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\IniSettingCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/IniSettingCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\LoggingNotConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/LoggingNotConfiguredException.php',
+ 'PHPUnit\\TextUI\\Configuration\\Merger' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Merger.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoBaselineException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoBaselineException.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoBootstrapException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoBootstrapException.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoCacheDirectoryException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoCacheDirectoryException.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoConfigurationFileException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoConfigurationFileException.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoCoverageCacheDirectoryException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoCoverageCacheDirectoryException.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoCustomCssFileException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoCustomCssFileException.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoDefaultTestSuiteException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoDefaultTestSuiteException.php',
+ 'PHPUnit\\TextUI\\Configuration\\NoPharExtensionDirectoryException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/NoPharExtensionDirectoryException.php',
+ 'PHPUnit\\TextUI\\Configuration\\Php' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/Php.php',
+ 'PHPUnit\\TextUI\\Configuration\\PhpHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/PhpHandler.php',
+ 'PHPUnit\\TextUI\\Configuration\\Registry' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Registry.php',
+ 'PHPUnit\\TextUI\\Configuration\\Source' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/Source.php',
+ 'PHPUnit\\TextUI\\Configuration\\SourceFilter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/SourceFilter.php',
+ 'PHPUnit\\TextUI\\Configuration\\SourceMapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/SourceMapper.php',
+ 'PHPUnit\\TextUI\\Configuration\\SpecificDeprecationToStopOnNotConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/SpecificDeprecationToStopOnNotConfiguredException.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestDirectory' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestDirectory.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestDirectoryCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestDirectoryCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestDirectoryCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestDirectoryCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestFile' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestFile.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestFileCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestFileCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestFileCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestFileCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestSuite.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestSuiteBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/TestSuiteBuilder.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestSuiteCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestSuiteCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\TestSuiteCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/TestSuiteCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Configuration\\Variable' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/Variable.php',
+ 'PHPUnit\\TextUI\\Configuration\\VariableCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/VariableCollection.php',
+ 'PHPUnit\\TextUI\\Configuration\\VariableCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Value/VariableCollectionIterator.php',
+ 'PHPUnit\\TextUI\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/Exception.php',
+ 'PHPUnit\\TextUI\\Help' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Help.php',
+ 'PHPUnit\\TextUI\\InvalidSocketException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/InvalidSocketException.php',
+ 'PHPUnit\\TextUI\\Output\\DefaultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Printer/DefaultPrinter.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\BeforeTestClassMethodErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/BeforeTestClassMethodErroredSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\ProgressPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/ProgressPrinter.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\Subscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/Subscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestConsideredRiskySubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestConsideredRiskySubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestErroredSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestErroredSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestFailedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestFailedSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestFinishedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestFinishedSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestMarkedIncompleteSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestMarkedIncompleteSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestPreparedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestPreparedSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestRunnerExecutionStartedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestRunnerExecutionStartedSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestSkippedSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestSkippedSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredDeprecationSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredDeprecationSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredErrorSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredErrorSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredNoticeSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredNoticeSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpDeprecationSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpDeprecationSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpNoticeSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpNoticeSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpWarningSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpWarningSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpunitDeprecationSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpunitWarningSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitWarningSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredWarningSubscriber' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredWarningSubscriber.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/ResultPrinter.php',
+ 'PHPUnit\\TextUI\\Output\\Default\\UnexpectedOutputPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Default/UnexpectedOutputPrinter.php',
+ 'PHPUnit\\TextUI\\Output\\Facade' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Facade.php',
+ 'PHPUnit\\TextUI\\Output\\NullPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Printer/NullPrinter.php',
+ 'PHPUnit\\TextUI\\Output\\Printer' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/Printer/Printer.php',
+ 'PHPUnit\\TextUI\\Output\\SummaryPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/SummaryPrinter.php',
+ 'PHPUnit\\TextUI\\Output\\TestDox\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Output/TestDox/ResultPrinter.php',
+ 'PHPUnit\\TextUI\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/RuntimeException.php',
+ 'PHPUnit\\TextUI\\ShellExitCodeCalculator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/ShellExitCodeCalculator.php',
+ 'PHPUnit\\TextUI\\TestDirectoryNotFoundException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/TestDirectoryNotFoundException.php',
+ 'PHPUnit\\TextUI\\TestFileNotFoundException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/TestFileNotFoundException.php',
+ 'PHPUnit\\TextUI\\TestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/TestRunner.php',
+ 'PHPUnit\\TextUI\\TestSuiteFilterProcessor' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/TestSuiteFilterProcessor.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CannotFindSchemaException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Exception/CannotFindSchemaException.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/CodeCoverage.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Clover' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/Report/Clover.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Cobertura' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/Report/Cobertura.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Crap4j' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/Report/Crap4j.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Html' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/Report/Html.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Php' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/Report/Php.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Text' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/Report/Text.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Xml' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/CodeCoverage/Report/Xml.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Configuration.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\ConvertLogTypes' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/ConvertLogTypes.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCloverToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/CoverageCloverToReport.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCrap4jToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/CoverageCrap4jToReport.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageHtmlToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/CoverageHtmlToReport.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CoveragePhpToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/CoveragePhpToReport.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageTextToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/CoverageTextToReport.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageXmlToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/CoverageXmlToReport.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\DefaultConfiguration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/DefaultConfiguration.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Exception.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\FailedSchemaDetectionResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/SchemaDetector/FailedSchemaDetectionResult.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Generator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Generator.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Groups' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Groups.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\IntroduceCacheDirectoryAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCacheDirectoryAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\IntroduceCoverageElement' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCoverageElement.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\LoadedFromFileConfiguration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/LoadedFromFileConfiguration.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Loader' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Loader.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\LogToReportMigration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/LogToReportMigration.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Junit' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Logging/Junit.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Logging' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Logging/Logging.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TeamCity' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Logging/TeamCity.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Html' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Logging/TestDox/Html.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Text' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Logging/TestDox/Text.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Migration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/Migration.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/MigrationBuilder.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/MigrationException.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Migrator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrator.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromFilterWhitelistToCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromRootToCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromRootToCoverage.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\MoveCoverageDirectoriesToSource' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/MoveCoverageDirectoriesToSource.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistExcludesToCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistExcludesToCoverage.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistIncludesToCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistIncludesToCoverage.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\PHPUnit' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/PHPUnit.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveBeStrictAboutTodoAnnotatedTestsAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutTodoAnnotatedTestsAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCacheResultFileAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheResultFileAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCacheTokensAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheTokensAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveConversionToExceptionsAttributes' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveConversionToExceptionsAttributes.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCoverageElementCacheDirectoryAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementCacheDirectoryAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCoverageElementIncludeUncoveredFilesAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementIncludeUncoveredFilesAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCoverageElementProcessUncoveredFilesAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementProcessUncoveredFilesAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveEmptyFilter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveEmptyFilter.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveListeners' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveListeners.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveLogTypes' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveLogTypes.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveLoggingElements' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveLoggingElements.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveNoInteractionAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveNoInteractionAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemovePrinterAttributes' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemovePrinterAttributes.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveRegisterMockObjectsFromTestArgumentsRecursivelyAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveRegisterMockObjectsFromTestArgumentsRecursivelyAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveTestDoxGroupsElement' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestDoxGroupsElement.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveTestSuiteLoaderAttributes' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestSuiteLoaderAttributes.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveVerboseAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RemoveVerboseAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RenameBackupStaticAttributesAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RenameBackupStaticAttributesAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RenameBeStrictAboutCoversAnnotationAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RenameBeStrictAboutCoversAnnotationAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\RenameForceCoversAnnotationAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/RenameForceCoversAnnotationAttribute.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\ReplaceRestrictDeprecationsWithIgnoreDeprecations' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/ReplaceRestrictDeprecationsWithIgnoreDeprecations.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaDetectionResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/SchemaDetector/SchemaDetectionResult.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaDetector' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/SchemaDetector/SchemaDetector.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaFinder' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/SchemaFinder.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\SnapshotNodeList' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/SnapshotNodeList.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\SuccessfulSchemaDetectionResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/SchemaDetector/SuccessfulSchemaDetectionResult.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuiteMapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/TestSuiteMapper.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\UpdateSchemaLocation' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Migration/Migrations/UpdateSchemaLocation.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\ValidationResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Validator/ValidationResult.php',
+ 'PHPUnit\\TextUI\\XmlConfiguration\\Validator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Configuration/Xml/Validator/Validator.php',
+ 'PHPUnit\\Util\\Color' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Color.php',
+ 'PHPUnit\\Util\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exception/Exception.php',
+ 'PHPUnit\\Util\\ExcludeList' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ExcludeList.php',
+ 'PHPUnit\\Util\\Exporter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exporter.php',
+ 'PHPUnit\\Util\\Filesystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filesystem.php',
+ 'PHPUnit\\Util\\Filter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filter.php',
+ 'PHPUnit\\Util\\GlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/GlobalState.php',
+ 'PHPUnit\\Util\\Http\\Downloader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Http/Downloader.php',
+ 'PHPUnit\\Util\\Http\\PhpDownloader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Http/PhpDownloader.php',
+ 'PHPUnit\\Util\\InvalidDirectoryException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exception/InvalidDirectoryException.php',
+ 'PHPUnit\\Util\\InvalidJsonException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exception/InvalidJsonException.php',
+ 'PHPUnit\\Util\\InvalidVersionOperatorException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exception/InvalidVersionOperatorException.php',
+ 'PHPUnit\\Util\\Json' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Json.php',
+ 'PHPUnit\\Util\\PHP\\DefaultJobRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/DefaultJobRunner.php',
+ 'PHPUnit\\Util\\PHP\\Job' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/Job.php',
+ 'PHPUnit\\Util\\PHP\\JobRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/JobRunner.php',
+ 'PHPUnit\\Util\\PHP\\JobRunnerRegistry' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/JobRunnerRegistry.php',
+ 'PHPUnit\\Util\\PHP\\PhpProcessException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exception/PhpProcessException.php',
+ 'PHPUnit\\Util\\PHP\\Result' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/Result.php',
+ 'PHPUnit\\Util\\Reflection' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Reflection.php',
+ 'PHPUnit\\Util\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Test.php',
+ 'PHPUnit\\Util\\ThrowableToStringMapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ThrowableToStringMapper.php',
+ 'PHPUnit\\Util\\VersionComparisonOperator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/VersionComparisonOperator.php',
+ 'PHPUnit\\Util\\Xml' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/Xml.php',
+ 'PHPUnit\\Util\\Xml\\Loader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/Loader.php',
+ 'PHPUnit\\Util\\Xml\\XmlException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exception/XmlException.php',
+ 'PharIo\\Manifest\\Application' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Application.php',
+ 'PharIo\\Manifest\\ApplicationName' => __DIR__ . '/..' . '/phar-io/manifest/src/values/ApplicationName.php',
+ 'PharIo\\Manifest\\Author' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Author.php',
+ 'PharIo\\Manifest\\AuthorCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/AuthorCollection.php',
+ 'PharIo\\Manifest\\AuthorCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/AuthorCollectionIterator.php',
+ 'PharIo\\Manifest\\AuthorElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/AuthorElement.php',
+ 'PharIo\\Manifest\\AuthorElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/AuthorElementCollection.php',
+ 'PharIo\\Manifest\\BundledComponent' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponent.php',
+ 'PharIo\\Manifest\\BundledComponentCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponentCollection.php',
+ 'PharIo\\Manifest\\BundledComponentCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php',
+ 'PharIo\\Manifest\\BundlesElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/BundlesElement.php',
+ 'PharIo\\Manifest\\ComponentElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ComponentElement.php',
+ 'PharIo\\Manifest\\ComponentElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ComponentElementCollection.php',
+ 'PharIo\\Manifest\\ContainsElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ContainsElement.php',
+ 'PharIo\\Manifest\\CopyrightElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/CopyrightElement.php',
+ 'PharIo\\Manifest\\CopyrightInformation' => __DIR__ . '/..' . '/phar-io/manifest/src/values/CopyrightInformation.php',
+ 'PharIo\\Manifest\\ElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ElementCollection.php',
+ 'PharIo\\Manifest\\ElementCollectionException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ElementCollectionException.php',
+ 'PharIo\\Manifest\\Email' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Email.php',
+ 'PharIo\\Manifest\\Exception' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/Exception.php',
+ 'PharIo\\Manifest\\ExtElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElement.php',
+ 'PharIo\\Manifest\\ExtElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElementCollection.php',
+ 'PharIo\\Manifest\\Extension' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Extension.php',
+ 'PharIo\\Manifest\\ExtensionElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtensionElement.php',
+ 'PharIo\\Manifest\\InvalidApplicationNameException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php',
+ 'PharIo\\Manifest\\InvalidEmailException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidEmailException.php',
+ 'PharIo\\Manifest\\InvalidUrlException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidUrlException.php',
+ 'PharIo\\Manifest\\Library' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Library.php',
+ 'PharIo\\Manifest\\License' => __DIR__ . '/..' . '/phar-io/manifest/src/values/License.php',
+ 'PharIo\\Manifest\\LicenseElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/LicenseElement.php',
+ 'PharIo\\Manifest\\Manifest' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Manifest.php',
+ 'PharIo\\Manifest\\ManifestDocument' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestDocument.php',
+ 'PharIo\\Manifest\\ManifestDocumentException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php',
+ 'PharIo\\Manifest\\ManifestDocumentLoadingException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php',
+ 'PharIo\\Manifest\\ManifestDocumentMapper' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestDocumentMapper.php',
+ 'PharIo\\Manifest\\ManifestDocumentMapperException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php',
+ 'PharIo\\Manifest\\ManifestElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestElement.php',
+ 'PharIo\\Manifest\\ManifestElementException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestElementException.php',
+ 'PharIo\\Manifest\\ManifestLoader' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestLoader.php',
+ 'PharIo\\Manifest\\ManifestLoaderException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php',
+ 'PharIo\\Manifest\\ManifestSerializer' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestSerializer.php',
+ 'PharIo\\Manifest\\NoEmailAddressException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/NoEmailAddressException.php',
+ 'PharIo\\Manifest\\PhpElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/PhpElement.php',
+ 'PharIo\\Manifest\\PhpExtensionRequirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/PhpExtensionRequirement.php',
+ 'PharIo\\Manifest\\PhpVersionRequirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/PhpVersionRequirement.php',
+ 'PharIo\\Manifest\\Requirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Requirement.php',
+ 'PharIo\\Manifest\\RequirementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/RequirementCollection.php',
+ 'PharIo\\Manifest\\RequirementCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/RequirementCollectionIterator.php',
+ 'PharIo\\Manifest\\RequiresElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/RequiresElement.php',
+ 'PharIo\\Manifest\\Type' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Type.php',
+ 'PharIo\\Manifest\\Url' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Url.php',
+ 'PharIo\\Version\\AbstractVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AbstractVersionConstraint.php',
+ 'PharIo\\Version\\AndVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AndVersionConstraintGroup.php',
+ 'PharIo\\Version\\AnyVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AnyVersionConstraint.php',
+ 'PharIo\\Version\\BuildMetaData' => __DIR__ . '/..' . '/phar-io/version/src/BuildMetaData.php',
+ 'PharIo\\Version\\ExactVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/ExactVersionConstraint.php',
+ 'PharIo\\Version\\Exception' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/Exception.php',
+ 'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php',
+ 'PharIo\\Version\\InvalidPreReleaseSuffixException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php',
+ 'PharIo\\Version\\InvalidVersionException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/InvalidVersionException.php',
+ 'PharIo\\Version\\NoBuildMetaDataException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/NoBuildMetaDataException.php',
+ 'PharIo\\Version\\NoPreReleaseSuffixException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php',
+ 'PharIo\\Version\\OrVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/constraints/OrVersionConstraintGroup.php',
+ 'PharIo\\Version\\PreReleaseSuffix' => __DIR__ . '/..' . '/phar-io/version/src/PreReleaseSuffix.php',
+ 'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php',
+ 'PharIo\\Version\\SpecificMajorVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php',
+ 'PharIo\\Version\\UnsupportedVersionConstraintException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/UnsupportedVersionConstraintException.php',
+ 'PharIo\\Version\\Version' => __DIR__ . '/..' . '/phar-io/version/src/Version.php',
+ 'PharIo\\Version\\VersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/VersionConstraint.php',
+ 'PharIo\\Version\\VersionConstraintParser' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintParser.php',
+ 'PharIo\\Version\\VersionConstraintValue' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintValue.php',
+ 'PharIo\\Version\\VersionNumber' => __DIR__ . '/..' . '/phar-io/version/src/VersionNumber.php',
+ 'PhpParser\\Builder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder.php',
+ 'PhpParser\\BuilderFactory' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/BuilderFactory.php',
+ 'PhpParser\\BuilderHelpers' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/BuilderHelpers.php',
+ 'PhpParser\\Builder\\ClassConst' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php',
+ 'PhpParser\\Builder\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Class_.php',
+ 'PhpParser\\Builder\\Declaration' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Declaration.php',
+ 'PhpParser\\Builder\\EnumCase' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php',
+ 'PhpParser\\Builder\\Enum_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Enum_.php',
+ 'PhpParser\\Builder\\FunctionLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php',
+ 'PhpParser\\Builder\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Function_.php',
+ 'PhpParser\\Builder\\Interface_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Interface_.php',
+ 'PhpParser\\Builder\\Method' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Method.php',
+ 'PhpParser\\Builder\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php',
+ 'PhpParser\\Builder\\Param' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Param.php',
+ 'PhpParser\\Builder\\Property' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Property.php',
+ 'PhpParser\\Builder\\TraitUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php',
+ 'PhpParser\\Builder\\TraitUseAdaptation' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php',
+ 'PhpParser\\Builder\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Trait_.php',
+ 'PhpParser\\Builder\\Use_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Use_.php',
+ 'PhpParser\\Comment' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Comment.php',
+ 'PhpParser\\Comment\\Doc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Comment/Doc.php',
+ 'PhpParser\\ConstExprEvaluationException' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php',
+ 'PhpParser\\ConstExprEvaluator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php',
+ 'PhpParser\\Error' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Error.php',
+ 'PhpParser\\ErrorHandler' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ErrorHandler.php',
+ 'PhpParser\\ErrorHandler\\Collecting' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php',
+ 'PhpParser\\ErrorHandler\\Throwing' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php',
+ 'PhpParser\\Internal\\DiffElem' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php',
+ 'PhpParser\\Internal\\Differ' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/Differ.php',
+ 'PhpParser\\Internal\\PrintableNewAnonClassNode' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php',
+ 'PhpParser\\Internal\\TokenPolyfill' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php',
+ 'PhpParser\\Internal\\TokenStream' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php',
+ 'PhpParser\\JsonDecoder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/JsonDecoder.php',
+ 'PhpParser\\Lexer' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer.php',
+ 'PhpParser\\Lexer\\Emulative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\AsymmetricVisibilityTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\EnumTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\ExplicitOctalEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\PropertyTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\ReadonlyFunctionTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\ReadonlyTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php',
+ 'PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php',
+ 'PhpParser\\Modifiers' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Modifiers.php',
+ 'PhpParser\\NameContext' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NameContext.php',
+ 'PhpParser\\Node' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node.php',
+ 'PhpParser\\NodeAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php',
+ 'PhpParser\\NodeDumper' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeDumper.php',
+ 'PhpParser\\NodeFinder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeFinder.php',
+ 'PhpParser\\NodeTraverser' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeTraverser.php',
+ 'PhpParser\\NodeTraverserInterface' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php',
+ 'PhpParser\\NodeVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor.php',
+ 'PhpParser\\NodeVisitorAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php',
+ 'PhpParser\\NodeVisitor\\CloningVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php',
+ 'PhpParser\\NodeVisitor\\CommentAnnotatingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php',
+ 'PhpParser\\NodeVisitor\\FindingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php',
+ 'PhpParser\\NodeVisitor\\FirstFindingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php',
+ 'PhpParser\\NodeVisitor\\NameResolver' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php',
+ 'PhpParser\\NodeVisitor\\NodeConnectingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php',
+ 'PhpParser\\NodeVisitor\\ParentConnectingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php',
+ 'PhpParser\\Node\\Arg' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Arg.php',
+ 'PhpParser\\Node\\ArrayItem' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php',
+ 'PhpParser\\Node\\Attribute' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Attribute.php',
+ 'PhpParser\\Node\\AttributeGroup' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php',
+ 'PhpParser\\Node\\ClosureUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php',
+ 'PhpParser\\Node\\ComplexType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/ComplexType.php',
+ 'PhpParser\\Node\\Const_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Const_.php',
+ 'PhpParser\\Node\\DeclareItem' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php',
+ 'PhpParser\\Node\\Expr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr.php',
+ 'PhpParser\\Node\\Expr\\ArrayDimFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php',
+ 'PhpParser\\Node\\Expr\\ArrayItem' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php',
+ 'PhpParser\\Node\\Expr\\Array_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php',
+ 'PhpParser\\Node\\Expr\\ArrowFunction' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php',
+ 'PhpParser\\Node\\Expr\\Assign' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php',
+ 'PhpParser\\Node\\Expr\\AssignOp' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Coalesce' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Div' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php',
+ 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php',
+ 'PhpParser\\Node\\Expr\\AssignRef' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Coalesce' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php',
+ 'PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php',
+ 'PhpParser\\Node\\Expr\\BitwiseNot' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php',
+ 'PhpParser\\Node\\Expr\\BooleanNot' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php',
+ 'PhpParser\\Node\\Expr\\CallLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php',
+ 'PhpParser\\Node\\Expr\\Cast' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php',
+ 'PhpParser\\Node\\Expr\\Cast\\Array_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php',
+ 'PhpParser\\Node\\Expr\\Cast\\Bool_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php',
+ 'PhpParser\\Node\\Expr\\Cast\\Double' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php',
+ 'PhpParser\\Node\\Expr\\Cast\\Int_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php',
+ 'PhpParser\\Node\\Expr\\Cast\\Object_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php',
+ 'PhpParser\\Node\\Expr\\Cast\\String_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php',
+ 'PhpParser\\Node\\Expr\\Cast\\Unset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php',
+ 'PhpParser\\Node\\Expr\\ClassConstFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php',
+ 'PhpParser\\Node\\Expr\\Clone_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php',
+ 'PhpParser\\Node\\Expr\\Closure' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php',
+ 'PhpParser\\Node\\Expr\\ClosureUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php',
+ 'PhpParser\\Node\\Expr\\ConstFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php',
+ 'PhpParser\\Node\\Expr\\Empty_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php',
+ 'PhpParser\\Node\\Expr\\Error' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php',
+ 'PhpParser\\Node\\Expr\\ErrorSuppress' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php',
+ 'PhpParser\\Node\\Expr\\Eval_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php',
+ 'PhpParser\\Node\\Expr\\Exit_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php',
+ 'PhpParser\\Node\\Expr\\FuncCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php',
+ 'PhpParser\\Node\\Expr\\Include_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php',
+ 'PhpParser\\Node\\Expr\\Instanceof_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php',
+ 'PhpParser\\Node\\Expr\\Isset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php',
+ 'PhpParser\\Node\\Expr\\List_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php',
+ 'PhpParser\\Node\\Expr\\Match_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php',
+ 'PhpParser\\Node\\Expr\\MethodCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php',
+ 'PhpParser\\Node\\Expr\\New_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php',
+ 'PhpParser\\Node\\Expr\\NullsafeMethodCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php',
+ 'PhpParser\\Node\\Expr\\NullsafePropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php',
+ 'PhpParser\\Node\\Expr\\PostDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php',
+ 'PhpParser\\Node\\Expr\\PostInc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php',
+ 'PhpParser\\Node\\Expr\\PreDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php',
+ 'PhpParser\\Node\\Expr\\PreInc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php',
+ 'PhpParser\\Node\\Expr\\Print_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php',
+ 'PhpParser\\Node\\Expr\\PropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php',
+ 'PhpParser\\Node\\Expr\\ShellExec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php',
+ 'PhpParser\\Node\\Expr\\StaticCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php',
+ 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php',
+ 'PhpParser\\Node\\Expr\\Ternary' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php',
+ 'PhpParser\\Node\\Expr\\Throw_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php',
+ 'PhpParser\\Node\\Expr\\UnaryMinus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php',
+ 'PhpParser\\Node\\Expr\\UnaryPlus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php',
+ 'PhpParser\\Node\\Expr\\Variable' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php',
+ 'PhpParser\\Node\\Expr\\YieldFrom' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php',
+ 'PhpParser\\Node\\Expr\\Yield_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php',
+ 'PhpParser\\Node\\FunctionLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php',
+ 'PhpParser\\Node\\Identifier' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Identifier.php',
+ 'PhpParser\\Node\\InterpolatedStringPart' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php',
+ 'PhpParser\\Node\\IntersectionType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php',
+ 'PhpParser\\Node\\MatchArm' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/MatchArm.php',
+ 'PhpParser\\Node\\Name' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name.php',
+ 'PhpParser\\Node\\Name\\FullyQualified' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php',
+ 'PhpParser\\Node\\Name\\Relative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php',
+ 'PhpParser\\Node\\NullableType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/NullableType.php',
+ 'PhpParser\\Node\\Param' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Param.php',
+ 'PhpParser\\Node\\PropertyHook' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php',
+ 'PhpParser\\Node\\PropertyItem' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php',
+ 'PhpParser\\Node\\Scalar' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar.php',
+ 'PhpParser\\Node\\Scalar\\DNumber' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php',
+ 'PhpParser\\Node\\Scalar\\Encapsed' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php',
+ 'PhpParser\\Node\\Scalar\\EncapsedStringPart' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php',
+ 'PhpParser\\Node\\Scalar\\Float_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/Float_.php',
+ 'PhpParser\\Node\\Scalar\\Int_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php',
+ 'PhpParser\\Node\\Scalar\\InterpolatedString' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php',
+ 'PhpParser\\Node\\Scalar\\LNumber' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\File' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Property' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Property.php',
+ 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php',
+ 'PhpParser\\Node\\Scalar\\String_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php',
+ 'PhpParser\\Node\\StaticVar' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/StaticVar.php',
+ 'PhpParser\\Node\\Stmt' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt.php',
+ 'PhpParser\\Node\\Stmt\\Block' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Block.php',
+ 'PhpParser\\Node\\Stmt\\Break_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php',
+ 'PhpParser\\Node\\Stmt\\Case_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php',
+ 'PhpParser\\Node\\Stmt\\Catch_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php',
+ 'PhpParser\\Node\\Stmt\\ClassConst' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php',
+ 'PhpParser\\Node\\Stmt\\ClassLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php',
+ 'PhpParser\\Node\\Stmt\\ClassMethod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php',
+ 'PhpParser\\Node\\Stmt\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php',
+ 'PhpParser\\Node\\Stmt\\Const_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php',
+ 'PhpParser\\Node\\Stmt\\Continue_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php',
+ 'PhpParser\\Node\\Stmt\\DeclareDeclare' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php',
+ 'PhpParser\\Node\\Stmt\\Declare_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php',
+ 'PhpParser\\Node\\Stmt\\Do_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php',
+ 'PhpParser\\Node\\Stmt\\Echo_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php',
+ 'PhpParser\\Node\\Stmt\\ElseIf_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php',
+ 'PhpParser\\Node\\Stmt\\Else_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php',
+ 'PhpParser\\Node\\Stmt\\EnumCase' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php',
+ 'PhpParser\\Node\\Stmt\\Enum_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php',
+ 'PhpParser\\Node\\Stmt\\Expression' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php',
+ 'PhpParser\\Node\\Stmt\\Finally_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php',
+ 'PhpParser\\Node\\Stmt\\For_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php',
+ 'PhpParser\\Node\\Stmt\\Foreach_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php',
+ 'PhpParser\\Node\\Stmt\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php',
+ 'PhpParser\\Node\\Stmt\\Global_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php',
+ 'PhpParser\\Node\\Stmt\\Goto_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php',
+ 'PhpParser\\Node\\Stmt\\GroupUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php',
+ 'PhpParser\\Node\\Stmt\\HaltCompiler' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php',
+ 'PhpParser\\Node\\Stmt\\If_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php',
+ 'PhpParser\\Node\\Stmt\\InlineHTML' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php',
+ 'PhpParser\\Node\\Stmt\\Interface_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php',
+ 'PhpParser\\Node\\Stmt\\Label' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php',
+ 'PhpParser\\Node\\Stmt\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php',
+ 'PhpParser\\Node\\Stmt\\Nop' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php',
+ 'PhpParser\\Node\\Stmt\\Property' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php',
+ 'PhpParser\\Node\\Stmt\\PropertyProperty' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php',
+ 'PhpParser\\Node\\Stmt\\Return_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php',
+ 'PhpParser\\Node\\Stmt\\StaticVar' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php',
+ 'PhpParser\\Node\\Stmt\\Static_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php',
+ 'PhpParser\\Node\\Stmt\\Switch_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php',
+ 'PhpParser\\Node\\Stmt\\TraitUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php',
+ 'PhpParser\\Node\\Stmt\\TraitUseAdaptation' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php',
+ 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php',
+ 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Precedence' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php',
+ 'PhpParser\\Node\\Stmt\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php',
+ 'PhpParser\\Node\\Stmt\\TryCatch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php',
+ 'PhpParser\\Node\\Stmt\\Unset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php',
+ 'PhpParser\\Node\\Stmt\\UseUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php',
+ 'PhpParser\\Node\\Stmt\\Use_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php',
+ 'PhpParser\\Node\\Stmt\\While_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php',
+ 'PhpParser\\Node\\UnionType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/UnionType.php',
+ 'PhpParser\\Node\\UseItem' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/UseItem.php',
+ 'PhpParser\\Node\\VarLikeIdentifier' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php',
+ 'PhpParser\\Node\\VariadicPlaceholder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php',
+ 'PhpParser\\Parser' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser.php',
+ 'PhpParser\\ParserAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php',
+ 'PhpParser\\ParserFactory' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ParserFactory.php',
+ 'PhpParser\\Parser\\Php7' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Php7.php',
+ 'PhpParser\\Parser\\Php8' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Php8.php',
+ 'PhpParser\\PhpVersion' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PhpVersion.php',
+ 'PhpParser\\PrettyPrinter' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinter.php',
+ 'PhpParser\\PrettyPrinterAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php',
+ 'PhpParser\\PrettyPrinter\\Standard' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php',
+ 'PhpParser\\Token' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Token.php',
+ 'SebastianBergmann\\CliParser\\AmbiguousOptionException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/AmbiguousOptionException.php',
+ 'SebastianBergmann\\CliParser\\Exception' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/Exception.php',
+ 'SebastianBergmann\\CliParser\\OptionDoesNotAllowArgumentException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/OptionDoesNotAllowArgumentException.php',
+ 'SebastianBergmann\\CliParser\\Parser' => __DIR__ . '/..' . '/sebastian/cli-parser/src/Parser.php',
+ 'SebastianBergmann\\CliParser\\RequiredOptionArgumentMissingException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/RequiredOptionArgumentMissingException.php',
+ 'SebastianBergmann\\CliParser\\UnknownOptionException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/UnknownOptionException.php',
+ 'SebastianBergmann\\CodeCoverage\\BranchAndPathCoverageNotSupportedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php',
+ 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/CodeCoverage.php',
+ 'SebastianBergmann\\CodeCoverage\\Data\\ProcessedCodeCoverageData' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Data/ProcessedCodeCoverageData.php',
+ 'SebastianBergmann\\CodeCoverage\\Data\\RawCodeCoverageData' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Data/RawCodeCoverageData.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Driver.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\PathExistsButIsNotDirectoryException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\PcovDriver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PcovDriver.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\PcovNotAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/PcovNotAvailableException.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\Selector' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Selector.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\WriteOperationFailedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/WriteOperationFailedException.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\XdebugDriver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/XdebugDriver.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/XdebugNotAvailableException.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotEnabledException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/XdebugNotEnabledException.php',
+ 'SebastianBergmann\\CodeCoverage\\Driver\\XdebugVersionNotSupportedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/XdebugVersionNotSupportedException.php',
+ 'SebastianBergmann\\CodeCoverage\\Exception' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/Exception.php',
+ 'SebastianBergmann\\CodeCoverage\\FileCouldNotBeWrittenException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/FileCouldNotBeWrittenException.php',
+ 'SebastianBergmann\\CodeCoverage\\Filter' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Filter.php',
+ 'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php',
+ 'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverAvailableException.php',
+ 'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverWithPathCoverageSupportAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php',
+ 'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/AbstractNode.php',
+ 'SebastianBergmann\\CodeCoverage\\Node\\Builder' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Builder.php',
+ 'SebastianBergmann\\CodeCoverage\\Node\\CrapIndex' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/CrapIndex.php',
+ 'SebastianBergmann\\CodeCoverage\\Node\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Directory.php',
+ 'SebastianBergmann\\CodeCoverage\\Node\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/File.php',
+ 'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Iterator.php',
+ 'SebastianBergmann\\CodeCoverage\\ParserException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ParserException.php',
+ 'SebastianBergmann\\CodeCoverage\\ReflectionException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ReflectionException.php',
+ 'SebastianBergmann\\CodeCoverage\\ReportAlreadyFinalizedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ReportAlreadyFinalizedException.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Clover' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Clover.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Cobertura' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Cobertura.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Crap4j.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Colors' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Colors.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\CustomCssFile' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/CustomCssFile.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Facade.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/PHP.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Text' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Text.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Thresholds' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Thresholds.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/File.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Method.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Node.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Project.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Report.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Source.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php',
+ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysisCacheNotConfiguredException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CacheWarmer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\Class_' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/Value/Class_.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CodeUnitFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ExecutableLinesFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\FileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\Function_' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/Value/Function_.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\IgnoredLinesFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\Interface_' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/Value/Interface_.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\LinesOfCode' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/Value/LinesOfCode.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\Method' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/Value/Method.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\Trait_' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/Value/Trait_.php',
+ 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\Visibility' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/Value/Visibility.php',
+ 'SebastianBergmann\\CodeCoverage\\TestIdMissingException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\Class_' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/Class_.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\ClassesThatExtendClass' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/ClassesThatExtendClass.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\ClassesThatImplementInterface' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/ClassesThatImplementInterface.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\Function_' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/Function_.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\InvalidCodeCoverageTargetException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/InvalidCodeCoverageTargetException.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\MapBuilder' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/MapBuilder.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\Mapper' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/Mapper.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\Method' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/Method.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\Namespace_' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/Namespace_.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\Target' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/Target.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\TargetCollection' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/TargetCollection.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\TargetCollectionIterator' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/TargetCollectionIterator.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\TargetCollectionValidator' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/TargetCollectionValidator.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\Trait_' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/Trait_.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\ValidationFailure' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/ValidationFailure.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\ValidationResult' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/ValidationResult.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\Target\\ValidationSuccess' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Target/ValidationSuccess.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Known' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestSize/Known.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Large' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestSize/Large.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Medium' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestSize/Medium.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Small' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestSize/Small.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\TestSize' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestSize/TestSize.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestSize\\Unknown' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestSize/Unknown.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Failure' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestStatus/Failure.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Known' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestStatus/Known.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Success' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestStatus/Success.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\TestStatus' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestStatus/TestStatus.php',
+ 'SebastianBergmann\\CodeCoverage\\Test\\TestStatus\\Unknown' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/TestStatus/Unknown.php',
+ 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php',
+ 'SebastianBergmann\\CodeCoverage\\Util\\DirectoryCouldNotBeCreatedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php',
+ 'SebastianBergmann\\CodeCoverage\\Util\\Filesystem' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util/Filesystem.php',
+ 'SebastianBergmann\\CodeCoverage\\Util\\Percentage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util/Percentage.php',
+ 'SebastianBergmann\\CodeCoverage\\Version' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Version.php',
+ 'SebastianBergmann\\CodeCoverage\\XmlException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/XmlException.php',
+ 'SebastianBergmann\\Comparator\\ArrayComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ArrayComparator.php',
+ 'SebastianBergmann\\Comparator\\Comparator' => __DIR__ . '/..' . '/sebastian/comparator/src/Comparator.php',
+ 'SebastianBergmann\\Comparator\\ComparisonFailure' => __DIR__ . '/..' . '/sebastian/comparator/src/ComparisonFailure.php',
+ 'SebastianBergmann\\Comparator\\DOMNodeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DOMNodeComparator.php',
+ 'SebastianBergmann\\Comparator\\DateTimeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DateTimeComparator.php',
+ 'SebastianBergmann\\Comparator\\EnumerationComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/EnumerationComparator.php',
+ 'SebastianBergmann\\Comparator\\Exception' => __DIR__ . '/..' . '/sebastian/comparator/src/exceptions/Exception.php',
+ 'SebastianBergmann\\Comparator\\ExceptionComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ExceptionComparator.php',
+ 'SebastianBergmann\\Comparator\\Factory' => __DIR__ . '/..' . '/sebastian/comparator/src/Factory.php',
+ 'SebastianBergmann\\Comparator\\MockObjectComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/MockObjectComparator.php',
+ 'SebastianBergmann\\Comparator\\NumberComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/NumberComparator.php',
+ 'SebastianBergmann\\Comparator\\NumericComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/NumericComparator.php',
+ 'SebastianBergmann\\Comparator\\ObjectComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ObjectComparator.php',
+ 'SebastianBergmann\\Comparator\\ResourceComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ResourceComparator.php',
+ 'SebastianBergmann\\Comparator\\RuntimeException' => __DIR__ . '/..' . '/sebastian/comparator/src/exceptions/RuntimeException.php',
+ 'SebastianBergmann\\Comparator\\ScalarComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ScalarComparator.php',
+ 'SebastianBergmann\\Comparator\\SplObjectStorageComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/SplObjectStorageComparator.php',
+ 'SebastianBergmann\\Comparator\\TypeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/TypeComparator.php',
+ 'SebastianBergmann\\Complexity\\Calculator' => __DIR__ . '/..' . '/sebastian/complexity/src/Calculator.php',
+ 'SebastianBergmann\\Complexity\\Complexity' => __DIR__ . '/..' . '/sebastian/complexity/src/Complexity/Complexity.php',
+ 'SebastianBergmann\\Complexity\\ComplexityCalculatingVisitor' => __DIR__ . '/..' . '/sebastian/complexity/src/Visitor/ComplexityCalculatingVisitor.php',
+ 'SebastianBergmann\\Complexity\\ComplexityCollection' => __DIR__ . '/..' . '/sebastian/complexity/src/Complexity/ComplexityCollection.php',
+ 'SebastianBergmann\\Complexity\\ComplexityCollectionIterator' => __DIR__ . '/..' . '/sebastian/complexity/src/Complexity/ComplexityCollectionIterator.php',
+ 'SebastianBergmann\\Complexity\\CyclomaticComplexityCalculatingVisitor' => __DIR__ . '/..' . '/sebastian/complexity/src/Visitor/CyclomaticComplexityCalculatingVisitor.php',
+ 'SebastianBergmann\\Complexity\\Exception' => __DIR__ . '/..' . '/sebastian/complexity/src/Exception/Exception.php',
+ 'SebastianBergmann\\Complexity\\RuntimeException' => __DIR__ . '/..' . '/sebastian/complexity/src/Exception/RuntimeException.php',
+ 'SebastianBergmann\\Diff\\Chunk' => __DIR__ . '/..' . '/sebastian/diff/src/Chunk.php',
+ 'SebastianBergmann\\Diff\\ConfigurationException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/ConfigurationException.php',
+ 'SebastianBergmann\\Diff\\Diff' => __DIR__ . '/..' . '/sebastian/diff/src/Diff.php',
+ 'SebastianBergmann\\Diff\\Differ' => __DIR__ . '/..' . '/sebastian/diff/src/Differ.php',
+ 'SebastianBergmann\\Diff\\Exception' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/Exception.php',
+ 'SebastianBergmann\\Diff\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/InvalidArgumentException.php',
+ 'SebastianBergmann\\Diff\\Line' => __DIR__ . '/..' . '/sebastian/diff/src/Line.php',
+ 'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php',
+ 'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php',
+ 'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php',
+ 'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php',
+ 'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php',
+ 'SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php',
+ 'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php',
+ 'SebastianBergmann\\Diff\\Parser' => __DIR__ . '/..' . '/sebastian/diff/src/Parser.php',
+ 'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php',
+ 'SebastianBergmann\\Environment\\Console' => __DIR__ . '/..' . '/sebastian/environment/src/Console.php',
+ 'SebastianBergmann\\Environment\\Runtime' => __DIR__ . '/..' . '/sebastian/environment/src/Runtime.php',
+ 'SebastianBergmann\\Exporter\\Exporter' => __DIR__ . '/..' . '/sebastian/exporter/src/Exporter.php',
+ 'SebastianBergmann\\FileIterator\\ExcludeIterator' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/ExcludeIterator.php',
+ 'SebastianBergmann\\FileIterator\\Facade' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Facade.php',
+ 'SebastianBergmann\\FileIterator\\Factory' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Factory.php',
+ 'SebastianBergmann\\FileIterator\\Iterator' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Iterator.php',
+ 'SebastianBergmann\\GlobalState\\CodeExporter' => __DIR__ . '/..' . '/sebastian/global-state/src/CodeExporter.php',
+ 'SebastianBergmann\\GlobalState\\Exception' => __DIR__ . '/..' . '/sebastian/global-state/src/exceptions/Exception.php',
+ 'SebastianBergmann\\GlobalState\\ExcludeList' => __DIR__ . '/..' . '/sebastian/global-state/src/ExcludeList.php',
+ 'SebastianBergmann\\GlobalState\\Restorer' => __DIR__ . '/..' . '/sebastian/global-state/src/Restorer.php',
+ 'SebastianBergmann\\GlobalState\\RuntimeException' => __DIR__ . '/..' . '/sebastian/global-state/src/exceptions/RuntimeException.php',
+ 'SebastianBergmann\\GlobalState\\Snapshot' => __DIR__ . '/..' . '/sebastian/global-state/src/Snapshot.php',
+ 'SebastianBergmann\\Invoker\\Exception' => __DIR__ . '/..' . '/phpunit/php-invoker/src/exceptions/Exception.php',
+ 'SebastianBergmann\\Invoker\\Invoker' => __DIR__ . '/..' . '/phpunit/php-invoker/src/Invoker.php',
+ 'SebastianBergmann\\Invoker\\ProcessControlExtensionNotLoadedException' => __DIR__ . '/..' . '/phpunit/php-invoker/src/exceptions/ProcessControlExtensionNotLoadedException.php',
+ 'SebastianBergmann\\Invoker\\TimeoutException' => __DIR__ . '/..' . '/phpunit/php-invoker/src/exceptions/TimeoutException.php',
+ 'SebastianBergmann\\LinesOfCode\\Counter' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/Counter.php',
+ 'SebastianBergmann\\LinesOfCode\\Exception' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/Exception/Exception.php',
+ 'SebastianBergmann\\LinesOfCode\\IllogicalValuesException' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/Exception/IllogicalValuesException.php',
+ 'SebastianBergmann\\LinesOfCode\\LineCountingVisitor' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/LineCountingVisitor.php',
+ 'SebastianBergmann\\LinesOfCode\\LinesOfCode' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/LinesOfCode.php',
+ 'SebastianBergmann\\LinesOfCode\\RuntimeException' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/Exception/RuntimeException.php',
+ 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Enumerator.php',
+ 'SebastianBergmann\\ObjectReflector\\ObjectReflector' => __DIR__ . '/..' . '/sebastian/object-reflector/src/ObjectReflector.php',
+ 'SebastianBergmann\\RecursionContext\\Context' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Context.php',
+ 'SebastianBergmann\\Template\\Exception' => __DIR__ . '/..' . '/phpunit/php-text-template/src/exceptions/Exception.php',
+ 'SebastianBergmann\\Template\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/php-text-template/src/exceptions/InvalidArgumentException.php',
+ 'SebastianBergmann\\Template\\RuntimeException' => __DIR__ . '/..' . '/phpunit/php-text-template/src/exceptions/RuntimeException.php',
+ 'SebastianBergmann\\Template\\Template' => __DIR__ . '/..' . '/phpunit/php-text-template/src/Template.php',
+ 'SebastianBergmann\\Timer\\Duration' => __DIR__ . '/..' . '/phpunit/php-timer/src/Duration.php',
+ 'SebastianBergmann\\Timer\\Exception' => __DIR__ . '/..' . '/phpunit/php-timer/src/exceptions/Exception.php',
+ 'SebastianBergmann\\Timer\\NoActiveTimerException' => __DIR__ . '/..' . '/phpunit/php-timer/src/exceptions/NoActiveTimerException.php',
+ 'SebastianBergmann\\Timer\\ResourceUsageFormatter' => __DIR__ . '/..' . '/phpunit/php-timer/src/ResourceUsageFormatter.php',
+ 'SebastianBergmann\\Timer\\TimeSinceStartOfRequestNotAvailableException' => __DIR__ . '/..' . '/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php',
+ 'SebastianBergmann\\Timer\\Timer' => __DIR__ . '/..' . '/phpunit/php-timer/src/Timer.php',
+ 'SebastianBergmann\\Type\\CallableType' => __DIR__ . '/..' . '/sebastian/type/src/type/CallableType.php',
+ 'SebastianBergmann\\Type\\Exception' => __DIR__ . '/..' . '/sebastian/type/src/exception/Exception.php',
+ 'SebastianBergmann\\Type\\FalseType' => __DIR__ . '/..' . '/sebastian/type/src/type/FalseType.php',
+ 'SebastianBergmann\\Type\\GenericObjectType' => __DIR__ . '/..' . '/sebastian/type/src/type/GenericObjectType.php',
+ 'SebastianBergmann\\Type\\IntersectionType' => __DIR__ . '/..' . '/sebastian/type/src/type/IntersectionType.php',
+ 'SebastianBergmann\\Type\\IterableType' => __DIR__ . '/..' . '/sebastian/type/src/type/IterableType.php',
+ 'SebastianBergmann\\Type\\MixedType' => __DIR__ . '/..' . '/sebastian/type/src/type/MixedType.php',
+ 'SebastianBergmann\\Type\\NeverType' => __DIR__ . '/..' . '/sebastian/type/src/type/NeverType.php',
+ 'SebastianBergmann\\Type\\NullType' => __DIR__ . '/..' . '/sebastian/type/src/type/NullType.php',
+ 'SebastianBergmann\\Type\\ObjectType' => __DIR__ . '/..' . '/sebastian/type/src/type/ObjectType.php',
+ 'SebastianBergmann\\Type\\Parameter' => __DIR__ . '/..' . '/sebastian/type/src/Parameter.php',
+ 'SebastianBergmann\\Type\\ReflectionMapper' => __DIR__ . '/..' . '/sebastian/type/src/ReflectionMapper.php',
+ 'SebastianBergmann\\Type\\RuntimeException' => __DIR__ . '/..' . '/sebastian/type/src/exception/RuntimeException.php',
+ 'SebastianBergmann\\Type\\SimpleType' => __DIR__ . '/..' . '/sebastian/type/src/type/SimpleType.php',
+ 'SebastianBergmann\\Type\\StaticType' => __DIR__ . '/..' . '/sebastian/type/src/type/StaticType.php',
+ 'SebastianBergmann\\Type\\TrueType' => __DIR__ . '/..' . '/sebastian/type/src/type/TrueType.php',
+ 'SebastianBergmann\\Type\\Type' => __DIR__ . '/..' . '/sebastian/type/src/type/Type.php',
+ 'SebastianBergmann\\Type\\TypeName' => __DIR__ . '/..' . '/sebastian/type/src/TypeName.php',
+ 'SebastianBergmann\\Type\\UnionType' => __DIR__ . '/..' . '/sebastian/type/src/type/UnionType.php',
+ 'SebastianBergmann\\Type\\UnknownType' => __DIR__ . '/..' . '/sebastian/type/src/type/UnknownType.php',
+ 'SebastianBergmann\\Type\\VoidType' => __DIR__ . '/..' . '/sebastian/type/src/type/VoidType.php',
+ 'SebastianBergmann\\Version' => __DIR__ . '/..' . '/sebastian/version/src/Version.php',
+ 'TheSeer\\Tokenizer\\Exception' => __DIR__ . '/..' . '/theseer/tokenizer/src/Exception.php',
+ 'TheSeer\\Tokenizer\\NamespaceUri' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUri.php',
+ 'TheSeer\\Tokenizer\\NamespaceUriException' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUriException.php',
+ 'TheSeer\\Tokenizer\\Token' => __DIR__ . '/..' . '/theseer/tokenizer/src/Token.php',
+ 'TheSeer\\Tokenizer\\TokenCollection' => __DIR__ . '/..' . '/theseer/tokenizer/src/TokenCollection.php',
+ 'TheSeer\\Tokenizer\\TokenCollectionException' => __DIR__ . '/..' . '/theseer/tokenizer/src/TokenCollectionException.php',
+ 'TheSeer\\Tokenizer\\Tokenizer' => __DIR__ . '/..' . '/theseer/tokenizer/src/Tokenizer.php',
+ 'TheSeer\\Tokenizer\\XMLSerializer' => __DIR__ . '/..' . '/theseer/tokenizer/src/XMLSerializer.php',
+ 'goodboyalex\\php_components_pack\\classes\\ActionState' => __DIR__ . '/../..' . '/sources/classes/ActionState.php',
+ 'goodboyalex\\php_components_pack\\classes\\ClassMapper' => __DIR__ . '/../..' . '/sources/classes/ClassMapper.php',
+ 'goodboyalex\\php_components_pack\\enums\\MessageType' => __DIR__ . '/../..' . '/sources/enums/MessageType.php',
+ 'goodboyalex\\php_components_pack\\extensions\\ArrayExtension' => __DIR__ . '/../..' . '/sources/extensions/ArrayExtension.php',
+ 'goodboyalex\\php_components_pack\\extensions\\GUIDExtension' => __DIR__ . '/../..' . '/sources/extensions/GUIDExtension.php',
+ 'goodboyalex\\php_components_pack\\extensions\\StringExtension' => __DIR__ . '/../..' . '/sources/extensions/StringExtension.php',
+ 'goodboyalex\\php_components_pack\\interfaces\\ISerializable' => __DIR__ . '/../..' . '/sources/interfaces/ISerializable.php',
+ 'goodboyalex\\php_components_pack\\models\\ActionStateMessageModel' => __DIR__ . '/../..' . '/sources/models/ActionStateMessageModel.php',
+ 'goodboyalex\\php_components_pack\\tests\\GUIDExtensionTest' => __DIR__ . '/../..' . '/tests/GUIDExtensionTest.php',
+ 'goodboyalex\\php_components_pack\\traits\\EnumExtensionsTrait' => __DIR__ . '/../..' . '/sources/traits/EnumExtensionsTrait.php',
+ 'staabm\\SideEffectsDetector\\SideEffect' => __DIR__ . '/..' . '/staabm/side-effects-detector/lib/SideEffect.php',
+ 'staabm\\SideEffectsDetector\\SideEffectsDetector' => __DIR__ . '/..' . '/staabm/side-effects-detector/lib/SideEffectsDetector.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitc00e5b601adae61bbbc3f6be4864ef55::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitc00e5b601adae61bbbc3f6be4864ef55::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitc00e5b601adae61bbbc3f6be4864ef55::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
new file mode 100644
index 0000000..2bb36d4
--- /dev/null
+++ b/vendor/composer/installed.json
@@ -0,0 +1,1698 @@
+{
+ "packages": [
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.x-dev",
+ "version_normalized": "1.9999999.9999999.9999999-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "4764e040f8743e92b86c36f488f32d0265dd1dae"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/4764e040f8743e92b86c36f488f32d0265dd1dae",
+ "reference": "4764e040f8743e92b86c36f488f32d0265dd1dae",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3 <3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpspec/prophecy": "^1.10",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "time": "2024-11-26T13:04:49+00:00",
+ "default-branch": true,
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.x"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "install-path": "../myclabs/deep-copy"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v5.4.0",
+ "version_normalized": "5.4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "447a020a1f875a434d62f2a401f53b82a396e494"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494",
+ "reference": "447a020a1f875a434d62f2a401f53b82a396e494",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^9.0"
+ },
+ "time": "2024-12-30T11:07:19+00:00",
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0"
+ },
+ "install-path": "../nikic/php-parser"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "dev-master",
+ "version_normalized": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
+ },
+ "time": "2024-03-03T12:33:53+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "install-path": "../phar-io/manifest"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "3.2.1",
+ "version_normalized": "3.2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "time": "2022-02-21T01:04:05+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "install-path": "../phar-io/version"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "30b614244b02907cf0b2edc559fd5e24bd05ea57"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/30b614244b02907cf0b2edc559fd5e24bd05ea57",
+ "reference": "30b614244b02907cf0b2edc559fd5e24bd05ea57",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^5.4.0",
+ "php": ">=8.3",
+ "phpunit/php-file-iterator": "^6.0-dev",
+ "phpunit/php-text-template": "^5.0-dev",
+ "sebastian/complexity": "^5.0-dev",
+ "sebastian/environment": "^8.0-dev",
+ "sebastian/lines-of-code": "^4.0-dev",
+ "sebastian/version": "^6.0-dev",
+ "theseer/tokenizer": "^1.2.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "suggest": {
+ "ext-pcov": "PHP extension that provides line coverage",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ },
+ "time": "2025-01-28T10:09:07+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "12.0.x-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../phpunit/php-code-coverage"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "a1339a60b2206324e440c4a3806bbd873fda0860"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a1339a60b2206324e440c4a3806bbd873fda0860",
+ "reference": "a1339a60b2206324e440c4a3806bbd873fda0860",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0"
+ },
+ "time": "2025-01-15T13:41:39+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../phpunit/php-file-iterator"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "a79e641e661a20d3b8c264b0b3b9eb0d98f98506"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/a79e641e661a20d3b8c264b0b3b9eb0d98f98506",
+ "reference": "a79e641e661a20d3b8c264b0b3b9eb0d98f98506",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "time": "2025-01-16T08:05:12+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "security": "https://github.com/sebastianbergmann/php-invoker/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../phpunit/php-invoker"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "0199874fd3f2ae19aa9813bdfcb68e67671eee64"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0199874fd3f2ae19aa9813bdfcb68e67671eee64",
+ "reference": "0199874fd3f2ae19aa9813bdfcb68e67671eee64",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "time": "2025-01-16T08:08:04+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../phpunit/php-text-template"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "aa0f95babbd87f096f1c20364204f195dd4b4608"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/aa0f95babbd87f096f1c20364204f195dd4b4608",
+ "reference": "aa0f95babbd87f096f1c20364204f195dd4b4608",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "time": "2025-01-16T08:10:48+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "8.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "security": "https://github.com/sebastianbergmann/php-timer/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../phpunit/php-timer"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "9f2ebaf18f7741a5ee587f80a42632edaa42d424"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9f2ebaf18f7741a5ee587f80a42632edaa42d424",
+ "reference": "9f2ebaf18f7741a5ee587f80a42632edaa42d424",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.12.1",
+ "phar-io/manifest": "^2.0.4",
+ "phar-io/version": "^3.2.1",
+ "php": ">=8.3",
+ "phpunit/php-code-coverage": "^12.0-dev",
+ "phpunit/php-file-iterator": "^6.0-dev",
+ "phpunit/php-invoker": "^6.0-dev",
+ "phpunit/php-text-template": "^5.0-dev",
+ "phpunit/php-timer": "^8.0-dev",
+ "sebastian/cli-parser": "^4.0-dev",
+ "sebastian/comparator": "^7.0-dev",
+ "sebastian/diff": "^7.0-dev",
+ "sebastian/environment": "^8.0-dev",
+ "sebastian/exporter": "^7.0-dev",
+ "sebastian/global-state": "^8.0-dev",
+ "sebastian/object-enumerator": "^7.0-dev",
+ "sebastian/type": "^6.0-dev",
+ "sebastian/version": "^6.0-dev",
+ "staabm/side-effects-detector": "^1.0.5"
+ },
+ "time": "2025-01-31T07:29:09+00:00",
+ "default-branch": true,
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "12.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsors.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
+ "type": "tidelift"
+ }
+ ],
+ "install-path": "../phpunit/phpunit"
+ },
+ {
+ "name": "sebastian/cli-parser",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "7f79d38ab02a0cb4089f31207ca11b74f49c7848"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/7f79d38ab02a0cb4089f31207ca11b74f49c7848",
+ "reference": "7f79d38ab02a0cb4089f31207ca11b74f49c7848",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "time": "2025-01-16T08:13:26+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../sebastian/cli-parser"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "07f683f544931bc816c47faf894e387f2216a1e9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/07f683f544931bc816c47faf894e387f2216a1e9",
+ "reference": "07f683f544931bc816c47faf894e387f2216a1e9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "php": ">=8.3",
+ "sebastian/diff": "^7.0",
+ "sebastian/exporter": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "suggest": {
+ "ext-bcmath": "For comparing BcMath\\Number objects"
+ },
+ "time": "2025-01-16T09:21:21+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "security": "https://github.com/sebastianbergmann/comparator/security/policy",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../sebastian/comparator"
+ },
+ {
+ "name": "sebastian/complexity",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "eec688b04904c5ecfa3b94f59bc60485209805a9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/eec688b04904c5ecfa3b94f59bc60485209805a9",
+ "reference": "eec688b04904c5ecfa3b94f59bc60485209805a9",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "time": "2025-01-16T08:20:43+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "security": "https://github.com/sebastianbergmann/complexity/security/policy",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../sebastian/complexity"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "87a9594e6994ba8ee9010836903305a64c895083"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/87a9594e6994ba8ee9010836903305a64c895083",
+ "reference": "87a9594e6994ba8ee9010836903305a64c895083",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "time": "2025-01-16T09:04:01+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "security": "https://github.com/sebastianbergmann/diff/security/policy",
+ "source": "https://github.com/sebastianbergmann/diff/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../sebastian/diff"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "92b1a897b49e191a8fbca823d75bc0e157ff7cdb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/92b1a897b49e191a8fbca823d75bc0e157ff7cdb",
+ "reference": "92b1a897b49e191a8fbca823d75bc0e157ff7cdb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "time": "2025-01-16T08:28:42+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "8.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "https://github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "security": "https://github.com/sebastianbergmann/environment/security/policy",
+ "source": "https://github.com/sebastianbergmann/environment/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../sebastian/environment"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "17e38c7a602c690c6f097b6aeaf47d0771ace9ca"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/17e38c7a602c690c6f097b6aeaf47d0771ace9ca",
+ "reference": "17e38c7a602c690c6f097b6aeaf47d0771ace9ca",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": ">=8.3",
+ "sebastian/recursion-context": "^7.0-dev"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "time": "2025-01-16T08:54:00+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "security": "https://github.com/sebastianbergmann/exporter/security/policy",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../sebastian/exporter"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "8a089e5a2a118a6725b603a47be1d1a9da1b9a68"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/8a089e5a2a118a6725b603a47be1d1a9da1b9a68",
+ "reference": "8a089e5a2a118a6725b603a47be1d1a9da1b9a68",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3",
+ "sebastian/object-reflector": "^5.0",
+ "sebastian/recursion-context": "^7.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "time": "2025-01-16T09:14:38+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "8.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "https://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "security": "https://github.com/sebastianbergmann/global-state/security/policy",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../sebastian/global-state"
+ },
+ {
+ "name": "sebastian/lines-of-code",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "fe8070ab1160c447839048ab240c07c448caa2b2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/fe8070ab1160c447839048ab240c07c448caa2b2",
+ "reference": "fe8070ab1160c447839048ab240c07c448caa2b2",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "time": "2025-01-16T08:36:53+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../sebastian/lines-of-code"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "250d806a14baca8c4b37823426277dbcb8d4440d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/250d806a14baca8c4b37823426277dbcb8d4440d",
+ "reference": "250d806a14baca8c4b37823426277dbcb8d4440d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3",
+ "sebastian/object-reflector": "^5.0",
+ "sebastian/recursion-context": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "time": "2025-01-16T08:38:51+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../sebastian/object-enumerator"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "7dddd66b56ba05cb474de46b2b623e92b42bff3a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/7dddd66b56ba05cb474de46b2b623e92b42bff3a",
+ "reference": "7dddd66b56ba05cb474de46b2b623e92b42bff3a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "time": "2025-01-16T08:40:54+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "security": "https://github.com/sebastianbergmann/object-reflector/security/policy",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../sebastian/object-reflector"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "c9442e27dc9965ad453397725830d8ecb5497410"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/c9442e27dc9965ad453397725830d8ecb5497410",
+ "reference": "c9442e27dc9965ad453397725830d8ecb5497410",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "time": "2025-01-16T08:53:18+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../sebastian/recursion-context"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "b07de32ccc63961cfcf87c4531816388dbaf264f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b07de32ccc63961cfcf87c4531816388dbaf264f",
+ "reference": "b07de32ccc63961cfcf87c4531816388dbaf264f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0-dev"
+ },
+ "time": "2025-01-16T08:45:13+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "security": "https://github.com/sebastianbergmann/type/security/policy",
+ "source": "https://github.com/sebastianbergmann/type/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../sebastian/type"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "dev-main",
+ "version_normalized": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "3e8786f0e004140c3be066577af51e7ea0446e54"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e8786f0e004140c3be066577af51e7ea0446e54",
+ "reference": "3e8786f0e004140c3be066577af51e7ea0446e54",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.3"
+ },
+ "time": "2025-01-16T08:47:17+00:00",
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "6.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "security": "https://github.com/sebastianbergmann/version/security/policy",
+ "source": "https://github.com/sebastianbergmann/version/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "install-path": "../sebastian/version"
+ },
+ {
+ "name": "staabm/side-effects-detector",
+ "version": "1.0.5",
+ "version_normalized": "1.0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/staabm/side-effects-detector.git",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.6",
+ "phpunit/phpunit": "^9.6.21",
+ "symfony/var-dumper": "^5.4.43",
+ "tomasvotruba/type-coverage": "1.0.0",
+ "tomasvotruba/unused-public": "1.0.0"
+ },
+ "time": "2024-10-20T05:08:20+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "lib/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A static analysis tool to detect side effects in PHP code",
+ "keywords": [
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/staabm/side-effects-detector/issues",
+ "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/staabm",
+ "type": "github"
+ }
+ ],
+ "install-path": "../staabm/side-effects-detector"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.2.3",
+ "version_normalized": "1.2.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "time": "2024-03-03T12:36:25+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "install-path": "../theseer/tokenizer"
+ }
+ ],
+ "dev": true,
+ "dev-package-names": [
+ "myclabs/deep-copy",
+ "nikic/php-parser",
+ "phar-io/manifest",
+ "phar-io/version",
+ "phpunit/php-code-coverage",
+ "phpunit/php-file-iterator",
+ "phpunit/php-invoker",
+ "phpunit/php-text-template",
+ "phpunit/php-timer",
+ "phpunit/phpunit",
+ "sebastian/cli-parser",
+ "sebastian/comparator",
+ "sebastian/complexity",
+ "sebastian/diff",
+ "sebastian/environment",
+ "sebastian/exporter",
+ "sebastian/global-state",
+ "sebastian/lines-of-code",
+ "sebastian/object-enumerator",
+ "sebastian/object-reflector",
+ "sebastian/recursion-context",
+ "sebastian/type",
+ "sebastian/version",
+ "staabm/side-effects-detector",
+ "theseer/tokenizer"
+ ]
+}
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
new file mode 100644
index 0000000..61493ff
--- /dev/null
+++ b/vendor/composer/installed.php
@@ -0,0 +1,288 @@
+ array(
+ 'name' => 'goodboyalex/php_components_pack',
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'reference' => 'f1a79d66ec29418af66448e6eca584eddfe31d4d',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../../',
+ 'aliases' => array(),
+ 'dev' => true,
+ ),
+ 'versions' => array(
+ 'goodboyalex/php_components_pack' => array(
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'reference' => 'f1a79d66ec29418af66448e6eca584eddfe31d4d',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../../',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
+ 'myclabs/deep-copy' => array(
+ 'pretty_version' => '1.x-dev',
+ 'version' => '1.9999999.9999999.9999999-dev',
+ 'reference' => '4764e040f8743e92b86c36f488f32d0265dd1dae',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../myclabs/deep-copy',
+ 'aliases' => array(),
+ 'dev_requirement' => true,
+ ),
+ 'nikic/php-parser' => array(
+ 'pretty_version' => 'v5.4.0',
+ 'version' => '5.4.0.0',
+ 'reference' => '447a020a1f875a434d62f2a401f53b82a396e494',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../nikic/php-parser',
+ 'aliases' => array(),
+ 'dev_requirement' => true,
+ ),
+ 'phar-io/manifest' => array(
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'reference' => '54750ef60c58e43759730615a392c31c80e23176',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../phar-io/manifest',
+ 'aliases' => array(
+ 0 => '2.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'phar-io/version' => array(
+ 'pretty_version' => '3.2.1',
+ 'version' => '3.2.1.0',
+ 'reference' => '4f7fd7836c6f332bb2933569e566a0d6c4cbed74',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../phar-io/version',
+ 'aliases' => array(),
+ 'dev_requirement' => true,
+ ),
+ 'phpunit/php-code-coverage' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => '30b614244b02907cf0b2edc559fd5e24bd05ea57',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../phpunit/php-code-coverage',
+ 'aliases' => array(
+ 0 => '12.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'phpunit/php-file-iterator' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => 'a1339a60b2206324e440c4a3806bbd873fda0860',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../phpunit/php-file-iterator',
+ 'aliases' => array(
+ 0 => '6.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'phpunit/php-invoker' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => 'a79e641e661a20d3b8c264b0b3b9eb0d98f98506',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../phpunit/php-invoker',
+ 'aliases' => array(
+ 0 => '6.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'phpunit/php-text-template' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => '0199874fd3f2ae19aa9813bdfcb68e67671eee64',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../phpunit/php-text-template',
+ 'aliases' => array(
+ 0 => '5.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'phpunit/php-timer' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => 'aa0f95babbd87f096f1c20364204f195dd4b4608',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../phpunit/php-timer',
+ 'aliases' => array(
+ 0 => '8.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'phpunit/phpunit' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => '9f2ebaf18f7741a5ee587f80a42632edaa42d424',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../phpunit/phpunit',
+ 'aliases' => array(
+ 0 => '12.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'sebastian/cli-parser' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => '7f79d38ab02a0cb4089f31207ca11b74f49c7848',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../sebastian/cli-parser',
+ 'aliases' => array(
+ 0 => '4.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'sebastian/comparator' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => '07f683f544931bc816c47faf894e387f2216a1e9',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../sebastian/comparator',
+ 'aliases' => array(
+ 0 => '7.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'sebastian/complexity' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => 'eec688b04904c5ecfa3b94f59bc60485209805a9',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../sebastian/complexity',
+ 'aliases' => array(
+ 0 => '5.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'sebastian/diff' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => '87a9594e6994ba8ee9010836903305a64c895083',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../sebastian/diff',
+ 'aliases' => array(
+ 0 => '7.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'sebastian/environment' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => '92b1a897b49e191a8fbca823d75bc0e157ff7cdb',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../sebastian/environment',
+ 'aliases' => array(
+ 0 => '8.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'sebastian/exporter' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => '17e38c7a602c690c6f097b6aeaf47d0771ace9ca',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../sebastian/exporter',
+ 'aliases' => array(
+ 0 => '7.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'sebastian/global-state' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => '8a089e5a2a118a6725b603a47be1d1a9da1b9a68',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../sebastian/global-state',
+ 'aliases' => array(
+ 0 => '8.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'sebastian/lines-of-code' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => 'fe8070ab1160c447839048ab240c07c448caa2b2',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../sebastian/lines-of-code',
+ 'aliases' => array(
+ 0 => '4.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'sebastian/object-enumerator' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => '250d806a14baca8c4b37823426277dbcb8d4440d',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../sebastian/object-enumerator',
+ 'aliases' => array(
+ 0 => '7.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'sebastian/object-reflector' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => '7dddd66b56ba05cb474de46b2b623e92b42bff3a',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../sebastian/object-reflector',
+ 'aliases' => array(
+ 0 => '5.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'sebastian/recursion-context' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => 'c9442e27dc9965ad453397725830d8ecb5497410',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../sebastian/recursion-context',
+ 'aliases' => array(
+ 0 => '7.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'sebastian/type' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => 'b07de32ccc63961cfcf87c4531816388dbaf264f',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../sebastian/type',
+ 'aliases' => array(
+ 0 => '6.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'sebastian/version' => array(
+ 'pretty_version' => 'dev-main',
+ 'version' => 'dev-main',
+ 'reference' => '3e8786f0e004140c3be066577af51e7ea0446e54',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../sebastian/version',
+ 'aliases' => array(
+ 0 => '6.0.x-dev',
+ ),
+ 'dev_requirement' => true,
+ ),
+ 'staabm/side-effects-detector' => array(
+ 'pretty_version' => '1.0.5',
+ 'version' => '1.0.5.0',
+ 'reference' => 'd8334211a140ce329c13726d4a715adbddd0a163',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../staabm/side-effects-detector',
+ 'aliases' => array(),
+ 'dev_requirement' => true,
+ ),
+ 'theseer/tokenizer' => array(
+ 'pretty_version' => '1.2.3',
+ 'version' => '1.2.3.0',
+ 'reference' => '737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../theseer/tokenizer',
+ 'aliases' => array(),
+ 'dev_requirement' => true,
+ ),
+ ),
+);
diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php
new file mode 100644
index 0000000..da85af8
--- /dev/null
+++ b/vendor/composer/platform_check.php
@@ -0,0 +1,26 @@
+= 80400)) {
+ $issues[] = 'Your Composer dependencies require a PHP version ">= 8.4.0". You are running ' . PHP_VERSION . '.';
+}
+
+if ($issues) {
+ if (!headers_sent()) {
+ header('HTTP/1.1 500 Internal Server Error');
+ }
+ if (!ini_get('display_errors')) {
+ if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
+ fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
+ } elseif (!headers_sent()) {
+ echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
+ }
+ }
+ trigger_error(
+ 'Composer detected issues in your platform: ' . implode(' ', $issues),
+ E_USER_ERROR
+ );
+}
diff --git a/vendor/myclabs/deep-copy/LICENSE b/vendor/myclabs/deep-copy/LICENSE
new file mode 100644
index 0000000..c3e8350
--- /dev/null
+++ b/vendor/myclabs/deep-copy/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2013 My C-Sense
+
+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.
diff --git a/vendor/myclabs/deep-copy/README.md b/vendor/myclabs/deep-copy/README.md
new file mode 100644
index 0000000..88ae14c
--- /dev/null
+++ b/vendor/myclabs/deep-copy/README.md
@@ -0,0 +1,406 @@
+# DeepCopy
+
+DeepCopy helps you create deep copies (clones) of your objects. It is designed to handle cycles in the association graph.
+
+[](https://packagist.org/packages/myclabs/deep-copy)
+[](https://github.com/myclabs/DeepCopy/actions/workflows/ci.yaml)
+
+## Table of Contents
+
+1. [How](#how)
+1. [Why](#why)
+ 1. [Using simply `clone`](#using-simply-clone)
+ 1. [Overriding `__clone()`](#overriding-__clone)
+ 1. [With `DeepCopy`](#with-deepcopy)
+1. [How it works](#how-it-works)
+1. [Going further](#going-further)
+ 1. [Matchers](#matchers)
+ 1. [Property name](#property-name)
+ 1. [Specific property](#specific-property)
+ 1. [Type](#type)
+ 1. [Filters](#filters)
+ 1. [`SetNullFilter`](#setnullfilter-filter)
+ 1. [`KeepFilter`](#keepfilter-filter)
+ 1. [`DoctrineCollectionFilter`](#doctrinecollectionfilter-filter)
+ 1. [`DoctrineEmptyCollectionFilter`](#doctrineemptycollectionfilter-filter)
+ 1. [`DoctrineProxyFilter`](#doctrineproxyfilter-filter)
+ 1. [`ReplaceFilter`](#replacefilter-type-filter)
+ 1. [`ShallowCopyFilter`](#shallowcopyfilter-type-filter)
+1. [Edge cases](#edge-cases)
+1. [Contributing](#contributing)
+ 1. [Tests](#tests)
+
+
+## How?
+
+Install with Composer:
+
+```
+composer require myclabs/deep-copy
+```
+
+Use it:
+
+```php
+use DeepCopy\DeepCopy;
+
+$copier = new DeepCopy();
+$myCopy = $copier->copy($myObject);
+```
+
+
+## Why?
+
+- How do you create copies of your objects?
+
+```php
+$myCopy = clone $myObject;
+```
+
+- How do you create **deep** copies of your objects (i.e. copying also all the objects referenced in the properties)?
+
+You use [`__clone()`](http://www.php.net/manual/en/language.oop5.cloning.php#object.clone) and implement the behavior
+yourself.
+
+- But how do you handle **cycles** in the association graph?
+
+Now you're in for a big mess :(
+
+
+
+
+### Using simply `clone`
+
+
+
+
+### Overriding `__clone()`
+
+
+
+
+### With `DeepCopy`
+
+
+
+
+## How it works
+
+DeepCopy recursively traverses all the object's properties and clones them. To avoid cloning the same object twice it
+keeps a hash map of all instances and thus preserves the object graph.
+
+To use it:
+
+```php
+use function DeepCopy\deep_copy;
+
+$copy = deep_copy($var);
+```
+
+Alternatively, you can create your own `DeepCopy` instance to configure it differently for example:
+
+```php
+use DeepCopy\DeepCopy;
+
+$copier = new DeepCopy(true);
+
+$copy = $copier->copy($var);
+```
+
+You may want to roll your own deep copy function:
+
+```php
+namespace Acme;
+
+use DeepCopy\DeepCopy;
+
+function deep_copy($var)
+{
+ static $copier = null;
+
+ if (null === $copier) {
+ $copier = new DeepCopy(true);
+ }
+
+ return $copier->copy($var);
+}
+```
+
+
+## Going further
+
+You can add filters to customize the copy process.
+
+The method to add a filter is `DeepCopy\DeepCopy::addFilter($filter, $matcher)`,
+with `$filter` implementing `DeepCopy\Filter\Filter`
+and `$matcher` implementing `DeepCopy\Matcher\Matcher`.
+
+We provide some generic filters and matchers.
+
+
+### Matchers
+
+ - `DeepCopy\Matcher` applies on a object attribute.
+ - `DeepCopy\TypeMatcher` applies on any element found in graph, including array elements.
+
+
+#### Property name
+
+The `PropertyNameMatcher` will match a property by its name:
+
+```php
+use DeepCopy\Matcher\PropertyNameMatcher;
+
+// Will apply a filter to any property of any objects named "id"
+$matcher = new PropertyNameMatcher('id');
+```
+
+
+#### Specific property
+
+The `PropertyMatcher` will match a specific property of a specific class:
+
+```php
+use DeepCopy\Matcher\PropertyMatcher;
+
+// Will apply a filter to the property "id" of any objects of the class "MyClass"
+$matcher = new PropertyMatcher('MyClass', 'id');
+```
+
+
+#### Type
+
+The `TypeMatcher` will match any element by its type (instance of a class or any value that could be parameter of
+[gettype()](http://php.net/manual/en/function.gettype.php) function):
+
+```php
+use DeepCopy\TypeMatcher\TypeMatcher;
+
+// Will apply a filter to any object that is an instance of Doctrine\Common\Collections\Collection
+$matcher = new TypeMatcher('Doctrine\Common\Collections\Collection');
+```
+
+
+### Filters
+
+- `DeepCopy\Filter` applies a transformation to the object attribute matched by `DeepCopy\Matcher`
+- `DeepCopy\TypeFilter` applies a transformation to any element matched by `DeepCopy\TypeMatcher`
+
+By design, matching a filter will stop the chain of filters (i.e. the next ones will not be applied).
+Using the ([`ChainableFilter`](#chainablefilter-filter)) won't stop the chain of filters.
+
+
+#### `SetNullFilter` (filter)
+
+Let's say for example that you are copying a database record (or a Doctrine entity), so you want the copy not to have
+any ID:
+
+```php
+use DeepCopy\DeepCopy;
+use DeepCopy\Filter\SetNullFilter;
+use DeepCopy\Matcher\PropertyNameMatcher;
+
+$object = MyClass::load(123);
+echo $object->id; // 123
+
+$copier = new DeepCopy();
+$copier->addFilter(new SetNullFilter(), new PropertyNameMatcher('id'));
+
+$copy = $copier->copy($object);
+
+echo $copy->id; // null
+```
+
+
+#### `KeepFilter` (filter)
+
+If you want a property to remain untouched (for example, an association to an object):
+
+```php
+use DeepCopy\DeepCopy;
+use DeepCopy\Filter\KeepFilter;
+use DeepCopy\Matcher\PropertyMatcher;
+
+$copier = new DeepCopy();
+$copier->addFilter(new KeepFilter(), new PropertyMatcher('MyClass', 'category'));
+
+$copy = $copier->copy($object);
+// $copy->category has not been touched
+```
+
+
+#### `ChainableFilter` (filter)
+
+If you use cloning on proxy classes, you might want to apply two filters for:
+1. loading the data
+2. applying a transformation
+
+You can use the `ChainableFilter` as a decorator of the proxy loader filter, which won't stop the chain of filters (i.e.
+the next ones may be applied).
+
+
+```php
+use DeepCopy\DeepCopy;
+use DeepCopy\Filter\ChainableFilter;
+use DeepCopy\Filter\Doctrine\DoctrineProxyFilter;
+use DeepCopy\Filter\SetNullFilter;
+use DeepCopy\Matcher\Doctrine\DoctrineProxyMatcher;
+use DeepCopy\Matcher\PropertyNameMatcher;
+
+$copier = new DeepCopy();
+$copier->addFilter(new ChainableFilter(new DoctrineProxyFilter()), new DoctrineProxyMatcher());
+$copier->addFilter(new SetNullFilter(), new PropertyNameMatcher('id'));
+
+$copy = $copier->copy($object);
+
+echo $copy->id; // null
+```
+
+
+#### `DoctrineCollectionFilter` (filter)
+
+If you use Doctrine and want to copy an entity, you will need to use the `DoctrineCollectionFilter`:
+
+```php
+use DeepCopy\DeepCopy;
+use DeepCopy\Filter\Doctrine\DoctrineCollectionFilter;
+use DeepCopy\Matcher\PropertyTypeMatcher;
+
+$copier = new DeepCopy();
+$copier->addFilter(new DoctrineCollectionFilter(), new PropertyTypeMatcher('Doctrine\Common\Collections\Collection'));
+
+$copy = $copier->copy($object);
+```
+
+
+#### `DoctrineEmptyCollectionFilter` (filter)
+
+If you use Doctrine and want to copy an entity who contains a `Collection` that you want to be reset, you can use the
+`DoctrineEmptyCollectionFilter`
+
+```php
+use DeepCopy\DeepCopy;
+use DeepCopy\Filter\Doctrine\DoctrineEmptyCollectionFilter;
+use DeepCopy\Matcher\PropertyMatcher;
+
+$copier = new DeepCopy();
+$copier->addFilter(new DoctrineEmptyCollectionFilter(), new PropertyMatcher('MyClass', 'myProperty'));
+
+$copy = $copier->copy($object);
+
+// $copy->myProperty will return an empty collection
+```
+
+
+#### `DoctrineProxyFilter` (filter)
+
+If you use Doctrine and use cloning on lazy loaded entities, you might encounter errors mentioning missing fields on a
+Doctrine proxy class (...\\\_\_CG\_\_\Proxy).
+You can use the `DoctrineProxyFilter` to load the actual entity behind the Doctrine proxy class.
+**Make sure, though, to put this as one of your very first filters in the filter chain so that the entity is loaded
+before other filters are applied!**
+We recommend to decorate the `DoctrineProxyFilter` with the `ChainableFilter` to allow applying other filters to the
+cloned lazy loaded entities.
+
+```php
+use DeepCopy\DeepCopy;
+use DeepCopy\Filter\Doctrine\DoctrineProxyFilter;
+use DeepCopy\Matcher\Doctrine\DoctrineProxyMatcher;
+
+$copier = new DeepCopy();
+$copier->addFilter(new ChainableFilter(new DoctrineProxyFilter()), new DoctrineProxyMatcher());
+
+$copy = $copier->copy($object);
+
+// $copy should now contain a clone of all entities, including those that were not yet fully loaded.
+```
+
+
+#### `ReplaceFilter` (type filter)
+
+1. If you want to replace the value of a property:
+
+```php
+use DeepCopy\DeepCopy;
+use DeepCopy\Filter\ReplaceFilter;
+use DeepCopy\Matcher\PropertyMatcher;
+
+$copier = new DeepCopy();
+$callback = function ($currentValue) {
+ return $currentValue . ' (copy)'
+};
+$copier->addFilter(new ReplaceFilter($callback), new PropertyMatcher('MyClass', 'title'));
+
+$copy = $copier->copy($object);
+
+// $copy->title will contain the data returned by the callback, e.g. 'The title (copy)'
+```
+
+2. If you want to replace whole element:
+
+```php
+use DeepCopy\DeepCopy;
+use DeepCopy\TypeFilter\ReplaceFilter;
+use DeepCopy\TypeMatcher\TypeMatcher;
+
+$copier = new DeepCopy();
+$callback = function (MyClass $myClass) {
+ return get_class($myClass);
+};
+$copier->addTypeFilter(new ReplaceFilter($callback), new TypeMatcher('MyClass'));
+
+$copy = $copier->copy([new MyClass, 'some string', new MyClass]);
+
+// $copy will contain ['MyClass', 'some string', 'MyClass']
+```
+
+
+The `$callback` parameter of the `ReplaceFilter` constructor accepts any PHP callable.
+
+
+#### `ShallowCopyFilter` (type filter)
+
+Stop *DeepCopy* from recursively copying element, using standard `clone` instead:
+
+```php
+use DeepCopy\DeepCopy;
+use DeepCopy\TypeFilter\ShallowCopyFilter;
+use DeepCopy\TypeMatcher\TypeMatcher;
+use Mockery as m;
+
+$this->deepCopy = new DeepCopy();
+$this->deepCopy->addTypeFilter(
+ new ShallowCopyFilter,
+ new TypeMatcher(m\MockInterface::class)
+);
+
+$myServiceWithMocks = new MyService(m::mock(MyDependency1::class), m::mock(MyDependency2::class));
+// All mocks will be just cloned, not deep copied
+```
+
+
+## Edge cases
+
+The following structures cannot be deep-copied with PHP Reflection. As a result they are shallow cloned and filters are
+not applied. There is two ways for you to handle them:
+
+- Implement your own `__clone()` method
+- Use a filter with a type matcher
+
+
+## Contributing
+
+DeepCopy is distributed under the MIT license.
+
+
+### Tests
+
+Running the tests is simple:
+
+```php
+vendor/bin/phpunit
+```
+
+### Support
+
+Get professional support via [the Tidelift Subscription](https://tidelift.com/subscription/pkg/packagist-myclabs-deep-copy?utm_source=packagist-myclabs-deep-copy&utm_medium=referral&utm_campaign=readme).
diff --git a/vendor/myclabs/deep-copy/composer.json b/vendor/myclabs/deep-copy/composer.json
new file mode 100644
index 0000000..f115fff
--- /dev/null
+++ b/vendor/myclabs/deep-copy/composer.json
@@ -0,0 +1,43 @@
+{
+ "name": "myclabs/deep-copy",
+ "description": "Create deep copies (clones) of your objects",
+ "license": "MIT",
+ "type": "library",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpspec/prophecy": "^1.10",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3 <3.2.2"
+ },
+ "autoload": {
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ },
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ]
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "DeepCopyTest\\": "tests/DeepCopyTest/",
+ "DeepCopy\\": "fixtures/"
+ }
+ },
+ "config": {
+ "sort-packages": true
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/DeepCopy.php b/vendor/myclabs/deep-copy/src/DeepCopy/DeepCopy.php
new file mode 100644
index 0000000..f739d92
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/DeepCopy.php
@@ -0,0 +1,316 @@
+ Filter, 'matcher' => Matcher] pairs.
+ */
+ private $filters = [];
+
+ /**
+ * Type Filters to apply.
+ *
+ * @var array Array of ['filter' => Filter, 'matcher' => Matcher] pairs.
+ */
+ private $typeFilters = [];
+
+ /**
+ * @var bool
+ */
+ private $skipUncloneable = false;
+
+ /**
+ * @var bool
+ */
+ private $useCloneMethod;
+
+ /**
+ * @param bool $useCloneMethod If set to true, when an object implements the __clone() function, it will be used
+ * instead of the regular deep cloning.
+ */
+ public function __construct($useCloneMethod = false)
+ {
+ $this->useCloneMethod = $useCloneMethod;
+
+ $this->addTypeFilter(new ArrayObjectFilter($this), new TypeMatcher(ArrayObject::class));
+ $this->addTypeFilter(new DateIntervalFilter(), new TypeMatcher(DateInterval::class));
+ $this->addTypeFilter(new DatePeriodFilter(), new TypeMatcher(DatePeriod::class));
+ $this->addTypeFilter(new SplDoublyLinkedListFilter($this), new TypeMatcher(SplDoublyLinkedList::class));
+ }
+
+ /**
+ * If enabled, will not throw an exception when coming across an uncloneable property.
+ *
+ * @param $skipUncloneable
+ *
+ * @return $this
+ */
+ public function skipUncloneable($skipUncloneable = true)
+ {
+ $this->skipUncloneable = $skipUncloneable;
+
+ return $this;
+ }
+
+ /**
+ * Deep copies the given object.
+ *
+ * @param mixed $object
+ *
+ * @return mixed
+ */
+ public function copy($object)
+ {
+ $this->hashMap = [];
+
+ return $this->recursiveCopy($object);
+ }
+
+ public function addFilter(Filter $filter, Matcher $matcher)
+ {
+ $this->filters[] = [
+ 'matcher' => $matcher,
+ 'filter' => $filter,
+ ];
+ }
+
+ public function prependFilter(Filter $filter, Matcher $matcher)
+ {
+ array_unshift($this->filters, [
+ 'matcher' => $matcher,
+ 'filter' => $filter,
+ ]);
+ }
+
+ public function addTypeFilter(TypeFilter $filter, TypeMatcher $matcher)
+ {
+ $this->typeFilters[] = [
+ 'matcher' => $matcher,
+ 'filter' => $filter,
+ ];
+ }
+
+ private function recursiveCopy($var)
+ {
+ // Matches Type Filter
+ if ($filter = $this->getFirstMatchedTypeFilter($this->typeFilters, $var)) {
+ return $filter->apply($var);
+ }
+
+ // Resource
+ if (is_resource($var)) {
+ return $var;
+ }
+
+ // Array
+ if (is_array($var)) {
+ return $this->copyArray($var);
+ }
+
+ // Scalar
+ if (! is_object($var)) {
+ return $var;
+ }
+
+ // Enum
+ if (PHP_VERSION_ID >= 80100 && enum_exists(get_class($var))) {
+ return $var;
+ }
+
+ // Object
+ return $this->copyObject($var);
+ }
+
+ /**
+ * Copy an array
+ * @param array $array
+ * @return array
+ */
+ private function copyArray(array $array)
+ {
+ foreach ($array as $key => $value) {
+ $array[$key] = $this->recursiveCopy($value);
+ }
+
+ return $array;
+ }
+
+ /**
+ * Copies an object.
+ *
+ * @param object $object
+ *
+ * @throws CloneException
+ *
+ * @return object
+ */
+ private function copyObject($object)
+ {
+ $objectHash = spl_object_hash($object);
+
+ if (isset($this->hashMap[$objectHash])) {
+ return $this->hashMap[$objectHash];
+ }
+
+ $reflectedObject = new ReflectionObject($object);
+ $isCloneable = $reflectedObject->isCloneable();
+
+ if (false === $isCloneable) {
+ if ($this->skipUncloneable) {
+ $this->hashMap[$objectHash] = $object;
+
+ return $object;
+ }
+
+ throw new CloneException(
+ sprintf(
+ 'The class "%s" is not cloneable.',
+ $reflectedObject->getName()
+ )
+ );
+ }
+
+ $newObject = clone $object;
+ $this->hashMap[$objectHash] = $newObject;
+
+ if ($this->useCloneMethod && $reflectedObject->hasMethod('__clone')) {
+ return $newObject;
+ }
+
+ if ($newObject instanceof DateTimeInterface || $newObject instanceof DateTimeZone) {
+ return $newObject;
+ }
+
+ foreach (ReflectionHelper::getProperties($reflectedObject) as $property) {
+ $this->copyObjectProperty($newObject, $property);
+ }
+
+ return $newObject;
+ }
+
+ private function copyObjectProperty($object, ReflectionProperty $property)
+ {
+ // Ignore static properties
+ if ($property->isStatic()) {
+ return;
+ }
+
+ // Ignore readonly properties
+ if (method_exists($property, 'isReadOnly') && $property->isReadOnly()) {
+ return;
+ }
+
+ // Apply the filters
+ foreach ($this->filters as $item) {
+ /** @var Matcher $matcher */
+ $matcher = $item['matcher'];
+ /** @var Filter $filter */
+ $filter = $item['filter'];
+
+ if ($matcher->matches($object, $property->getName())) {
+ $filter->apply(
+ $object,
+ $property->getName(),
+ function ($object) {
+ return $this->recursiveCopy($object);
+ }
+ );
+
+ if ($filter instanceof ChainableFilter) {
+ continue;
+ }
+
+ // If a filter matches, we stop processing this property
+ return;
+ }
+ }
+
+ $property->setAccessible(true);
+
+ // Ignore uninitialized properties (for PHP >7.4)
+ if (method_exists($property, 'isInitialized') && !$property->isInitialized($object)) {
+ return;
+ }
+
+ $propertyValue = $property->getValue($object);
+
+ // Copy the property
+ $property->setValue($object, $this->recursiveCopy($propertyValue));
+ }
+
+ /**
+ * Returns first filter that matches variable, `null` if no such filter found.
+ *
+ * @param array $filterRecords Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and
+ * 'matcher' with value of type {@see TypeMatcher}
+ * @param mixed $var
+ *
+ * @return TypeFilter|null
+ */
+ private function getFirstMatchedTypeFilter(array $filterRecords, $var)
+ {
+ $matched = $this->first(
+ $filterRecords,
+ function (array $record) use ($var) {
+ /* @var TypeMatcher $matcher */
+ $matcher = $record['matcher'];
+
+ return $matcher->matches($var);
+ }
+ );
+
+ return isset($matched) ? $matched['filter'] : null;
+ }
+
+ /**
+ * Returns first element that matches predicate, `null` if no such element found.
+ *
+ * @param array $elements Array of ['filter' => Filter, 'matcher' => Matcher] pairs.
+ * @param callable $predicate Predicate arguments are: element.
+ *
+ * @return array|null Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and 'matcher'
+ * with value of type {@see TypeMatcher} or `null`.
+ */
+ private function first(array $elements, callable $predicate)
+ {
+ foreach ($elements as $element) {
+ if (call_user_func($predicate, $element)) {
+ return $element;
+ }
+ }
+
+ return null;
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php b/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php
new file mode 100644
index 0000000..c046706
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php
@@ -0,0 +1,9 @@
+filter = $filter;
+ }
+
+ public function apply($object, $property, $objectCopier)
+ {
+ $this->filter->apply($object, $property, $objectCopier);
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php
new file mode 100644
index 0000000..e6d9377
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php
@@ -0,0 +1,33 @@
+setAccessible(true);
+ $oldCollection = $reflectionProperty->getValue($object);
+
+ $newCollection = $oldCollection->map(
+ function ($item) use ($objectCopier) {
+ return $objectCopier($item);
+ }
+ );
+
+ $reflectionProperty->setValue($object, $newCollection);
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php
new file mode 100644
index 0000000..7b33fd5
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php
@@ -0,0 +1,28 @@
+setAccessible(true);
+
+ $reflectionProperty->setValue($object, new ArrayCollection());
+ }
+}
\ No newline at end of file
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php
new file mode 100644
index 0000000..8bee8f7
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php
@@ -0,0 +1,22 @@
+__load();
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php
new file mode 100644
index 0000000..85ba18c
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php
@@ -0,0 +1,18 @@
+callback = $callable;
+ }
+
+ /**
+ * Replaces the object property by the result of the callback called with the object property.
+ *
+ * {@inheritdoc}
+ */
+ public function apply($object, $property, $objectCopier)
+ {
+ $reflectionProperty = ReflectionHelper::getProperty($object, $property);
+ $reflectionProperty->setAccessible(true);
+
+ $value = call_user_func($this->callback, $reflectionProperty->getValue($object));
+
+ $reflectionProperty->setValue($object, $value);
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php
new file mode 100644
index 0000000..bea86b8
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php
@@ -0,0 +1,24 @@
+setAccessible(true);
+ $reflectionProperty->setValue($object, null);
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php
new file mode 100644
index 0000000..c5887b1
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php
@@ -0,0 +1,22 @@
+class = $class;
+ $this->property = $property;
+ }
+
+ /**
+ * Matches a specific property of a specific class.
+ *
+ * {@inheritdoc}
+ */
+ public function matches($object, $property)
+ {
+ return ($object instanceof $this->class) && $property == $this->property;
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php
new file mode 100644
index 0000000..c8ec0d2
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php
@@ -0,0 +1,32 @@
+property = $property;
+ }
+
+ /**
+ * Matches a property by its name.
+ *
+ * {@inheritdoc}
+ */
+ public function matches($object, $property)
+ {
+ return $property == $this->property;
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php
new file mode 100644
index 0000000..c7f4690
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php
@@ -0,0 +1,52 @@
+propertyType = $propertyType;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function matches($object, $property)
+ {
+ try {
+ $reflectionProperty = ReflectionHelper::getProperty($object, $property);
+ } catch (ReflectionException $exception) {
+ return false;
+ }
+
+ $reflectionProperty->setAccessible(true);
+
+ // Uninitialized properties (for PHP >7.4)
+ if (method_exists($reflectionProperty, 'isInitialized') && !$reflectionProperty->isInitialized($object)) {
+ // null instanceof $this->propertyType
+ return false;
+ }
+
+ return $reflectionProperty->getValue($object) instanceof $this->propertyType;
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php b/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php
new file mode 100644
index 0000000..742410c
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php
@@ -0,0 +1,78 @@
+getProperties() does not return private properties from ancestor classes.
+ *
+ * @author muratyaman@gmail.com
+ * @see http://php.net/manual/en/reflectionclass.getproperties.php
+ *
+ * @param ReflectionClass $ref
+ *
+ * @return ReflectionProperty[]
+ */
+ public static function getProperties(ReflectionClass $ref)
+ {
+ $props = $ref->getProperties();
+ $propsArr = array();
+
+ foreach ($props as $prop) {
+ $propertyName = $prop->getName();
+ $propsArr[$propertyName] = $prop;
+ }
+
+ if ($parentClass = $ref->getParentClass()) {
+ $parentPropsArr = self::getProperties($parentClass);
+ foreach ($propsArr as $key => $property) {
+ $parentPropsArr[$key] = $property;
+ }
+
+ return $parentPropsArr;
+ }
+
+ return $propsArr;
+ }
+
+ /**
+ * Retrieves property by name from object and all its ancestors.
+ *
+ * @param object|string $object
+ * @param string $name
+ *
+ * @throws PropertyException
+ * @throws ReflectionException
+ *
+ * @return ReflectionProperty
+ */
+ public static function getProperty($object, $name)
+ {
+ $reflection = is_object($object) ? new ReflectionObject($object) : new ReflectionClass($object);
+
+ if ($reflection->hasProperty($name)) {
+ return $reflection->getProperty($name);
+ }
+
+ if ($parentClass = $reflection->getParentClass()) {
+ return self::getProperty($parentClass->getName(), $name);
+ }
+
+ throw new PropertyException(
+ sprintf(
+ 'The class "%s" doesn\'t have a property with the given name: "%s".',
+ is_object($object) ? get_class($object) : $object,
+ $name
+ )
+ );
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php
new file mode 100644
index 0000000..becd1cf
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php
@@ -0,0 +1,33 @@
+ $propertyValue) {
+ $copy->{$propertyName} = $propertyValue;
+ }
+
+ return $copy;
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DatePeriodFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DatePeriodFilter.php
new file mode 100644
index 0000000..6bd2f7e
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DatePeriodFilter.php
@@ -0,0 +1,42 @@
+= 80200 && $element->include_end_date) {
+ $options |= DatePeriod::INCLUDE_END_DATE;
+ }
+ if (!$element->include_start_date) {
+ $options |= DatePeriod::EXCLUDE_START_DATE;
+ }
+
+ if ($element->getEndDate()) {
+ return new DatePeriod($element->getStartDate(), $element->getDateInterval(), $element->getEndDate(), $options);
+ }
+
+ if (PHP_VERSION_ID >= 70217) {
+ $recurrences = $element->getRecurrences();
+ } else {
+ $recurrences = $element->recurrences - $element->include_start_date;
+ }
+
+ return new DatePeriod($element->getStartDate(), $element->getDateInterval(), $recurrences, $options);
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php
new file mode 100644
index 0000000..164f8b8
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php
@@ -0,0 +1,30 @@
+callback = $callable;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function apply($element)
+ {
+ return call_user_func($this->callback, $element);
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php
new file mode 100644
index 0000000..a5fbd7a
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php
@@ -0,0 +1,17 @@
+copier = $copier;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function apply($arrayObject)
+ {
+ $clone = clone $arrayObject;
+ foreach ($arrayObject->getArrayCopy() as $k => $v) {
+ $clone->offsetSet($k, $this->copier->copy($v));
+ }
+
+ return $clone;
+ }
+}
+
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php
new file mode 100644
index 0000000..c5644cf
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php
@@ -0,0 +1,10 @@
+copier = $copier;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function apply($element)
+ {
+ $newElement = clone $element;
+
+ $copy = $this->createCopyClosure();
+
+ return $copy($newElement);
+ }
+
+ private function createCopyClosure()
+ {
+ $copier = $this->copier;
+
+ $copy = function (SplDoublyLinkedList $list) use ($copier) {
+ // Replace each element in the list with a deep copy of itself
+ for ($i = 1; $i <= $list->count(); $i++) {
+ $copy = $copier->recursiveCopy($list->shift());
+
+ $list->push($copy);
+ }
+
+ return $list;
+ };
+
+ return Closure::bind($copy, null, DeepCopy::class);
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php
new file mode 100644
index 0000000..5785a7d
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php
@@ -0,0 +1,13 @@
+type = $type;
+ }
+
+ /**
+ * @param mixed $element
+ *
+ * @return boolean
+ */
+ public function matches($element)
+ {
+ return is_object($element) ? is_a($element, $this->type) : gettype($element) === $this->type;
+ }
+}
diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php b/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php
new file mode 100644
index 0000000..55dcc92
--- /dev/null
+++ b/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php
@@ -0,0 +1,20 @@
+copy($value);
+ }
+}
diff --git a/vendor/nikic/php-parser/LICENSE b/vendor/nikic/php-parser/LICENSE
new file mode 100644
index 0000000..2e56718
--- /dev/null
+++ b/vendor/nikic/php-parser/LICENSE
@@ -0,0 +1,29 @@
+BSD 3-Clause License
+
+Copyright (c) 2011, Nikita Popov
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+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 HOLDER 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.
diff --git a/vendor/nikic/php-parser/README.md b/vendor/nikic/php-parser/README.md
new file mode 100644
index 0000000..edb3ed3
--- /dev/null
+++ b/vendor/nikic/php-parser/README.md
@@ -0,0 +1,233 @@
+PHP Parser
+==========
+
+[](https://coveralls.io/github/nikic/PHP-Parser?branch=master)
+
+This is a PHP parser written in PHP. Its purpose is to simplify static code analysis and
+manipulation.
+
+[**Documentation for version 5.x**][doc_master] (current; for running on PHP >= 7.4; for parsing PHP 7.0 to PHP 8.4, with limited support for parsing PHP 5.x).
+
+[Documentation for version 4.x][doc_4_x] (supported; for running on PHP >= 7.0; for parsing PHP 5.2 to PHP 8.3).
+
+Features
+--------
+
+The main features provided by this library are:
+
+ * Parsing PHP 7, and PHP 8 code into an abstract syntax tree (AST).
+ * Invalid code can be parsed into a partial AST.
+ * The AST contains accurate location information.
+ * Dumping the AST in human-readable form.
+ * Converting an AST back to PHP code.
+ * Formatting can be preserved for partially changed ASTs.
+ * Infrastructure to traverse and modify ASTs.
+ * Resolution of namespaced names.
+ * Evaluation of constant expressions.
+ * Builders to simplify AST construction for code generation.
+ * Converting an AST into JSON and back.
+
+Quick Start
+-----------
+
+Install the library using [composer](https://getcomposer.org):
+
+ php composer.phar require nikic/php-parser
+
+Parse some PHP code into an AST and dump the result in human-readable form:
+
+```php
+createForNewestSupportedVersion();
+try {
+ $ast = $parser->parse($code);
+} catch (Error $error) {
+ echo "Parse error: {$error->getMessage()}\n";
+ return;
+}
+
+$dumper = new NodeDumper;
+echo $dumper->dump($ast) . "\n";
+```
+
+This dumps an AST looking something like this:
+
+```
+array(
+ 0: Stmt_Function(
+ attrGroups: array(
+ )
+ byRef: false
+ name: Identifier(
+ name: test
+ )
+ params: array(
+ 0: Param(
+ attrGroups: array(
+ )
+ flags: 0
+ type: null
+ byRef: false
+ variadic: false
+ var: Expr_Variable(
+ name: foo
+ )
+ default: null
+ )
+ )
+ returnType: null
+ stmts: array(
+ 0: Stmt_Expression(
+ expr: Expr_FuncCall(
+ name: Name(
+ name: var_dump
+ )
+ args: array(
+ 0: Arg(
+ name: null
+ value: Expr_Variable(
+ name: foo
+ )
+ byRef: false
+ unpack: false
+ )
+ )
+ )
+ )
+ )
+ )
+)
+```
+
+Let's traverse the AST and perform some kind of modification. For example, drop all function bodies:
+
+```php
+use PhpParser\Node;
+use PhpParser\Node\Stmt\Function_;
+use PhpParser\NodeTraverser;
+use PhpParser\NodeVisitorAbstract;
+
+$traverser = new NodeTraverser();
+$traverser->addVisitor(new class extends NodeVisitorAbstract {
+ public function enterNode(Node $node) {
+ if ($node instanceof Function_) {
+ // Clean out the function body
+ $node->stmts = [];
+ }
+ }
+});
+
+$ast = $traverser->traverse($ast);
+echo $dumper->dump($ast) . "\n";
+```
+
+This gives us an AST where the `Function_::$stmts` are empty:
+
+```
+array(
+ 0: Stmt_Function(
+ attrGroups: array(
+ )
+ byRef: false
+ name: Identifier(
+ name: test
+ )
+ params: array(
+ 0: Param(
+ attrGroups: array(
+ )
+ type: null
+ byRef: false
+ variadic: false
+ var: Expr_Variable(
+ name: foo
+ )
+ default: null
+ )
+ )
+ returnType: null
+ stmts: array(
+ )
+ )
+)
+```
+
+Finally, we can convert the new AST back to PHP code:
+
+```php
+use PhpParser\PrettyPrinter;
+
+$prettyPrinter = new PrettyPrinter\Standard;
+echo $prettyPrinter->prettyPrintFile($ast);
+```
+
+This gives us our original code, minus the `var_dump()` call inside the function:
+
+```php
+createForVersion($attributes['version']);
+$dumper = new PhpParser\NodeDumper([
+ 'dumpComments' => true,
+ 'dumpPositions' => $attributes['with-positions'],
+]);
+$prettyPrinter = new PhpParser\PrettyPrinter\Standard;
+
+$traverser = new PhpParser\NodeTraverser();
+$traverser->addVisitor(new PhpParser\NodeVisitor\NameResolver);
+
+foreach ($files as $file) {
+ if ($file === '-') {
+ $code = file_get_contents('php://stdin');
+ fwrite(STDERR, "====> Stdin:\n");
+ } else if (strpos($file, ' Code $code\n");
+ } else {
+ if (!file_exists($file)) {
+ fwrite(STDERR, "File $file does not exist.\n");
+ exit(1);
+ }
+
+ $code = file_get_contents($file);
+ fwrite(STDERR, "====> File $file:\n");
+ }
+
+ if ($attributes['with-recovery']) {
+ $errorHandler = new PhpParser\ErrorHandler\Collecting;
+ $stmts = $parser->parse($code, $errorHandler);
+ foreach ($errorHandler->getErrors() as $error) {
+ $message = formatErrorMessage($error, $code, $attributes['with-column-info']);
+ fwrite(STDERR, $message . "\n");
+ }
+ if (null === $stmts) {
+ continue;
+ }
+ } else {
+ try {
+ $stmts = $parser->parse($code);
+ } catch (PhpParser\Error $error) {
+ $message = formatErrorMessage($error, $code, $attributes['with-column-info']);
+ fwrite(STDERR, $message . "\n");
+ exit(1);
+ }
+ }
+
+ foreach ($operations as $operation) {
+ if ('dump' === $operation) {
+ fwrite(STDERR, "==> Node dump:\n");
+ echo $dumper->dump($stmts, $code), "\n";
+ } elseif ('pretty-print' === $operation) {
+ fwrite(STDERR, "==> Pretty print:\n");
+ echo $prettyPrinter->prettyPrintFile($stmts), "\n";
+ } elseif ('json-dump' === $operation) {
+ fwrite(STDERR, "==> JSON dump:\n");
+ echo json_encode($stmts, JSON_PRETTY_PRINT), "\n";
+ } elseif ('var-dump' === $operation) {
+ fwrite(STDERR, "==> var_dump():\n");
+ var_dump($stmts);
+ } elseif ('resolve-names' === $operation) {
+ fwrite(STDERR, "==> Resolved names.\n");
+ $stmts = $traverser->traverse($stmts);
+ }
+ }
+}
+
+function formatErrorMessage(PhpParser\Error $e, $code, $withColumnInfo) {
+ if ($withColumnInfo && $e->hasColumnInfo()) {
+ return $e->getMessageWithColumnInfo($code);
+ } else {
+ return $e->getMessage();
+ }
+}
+
+function showHelp($error = '') {
+ if ($error) {
+ fwrite(STDERR, $error . "\n\n");
+ }
+ fwrite($error ? STDERR : STDOUT, <<<'OUTPUT'
+Usage: php-parse [operations] file1.php [file2.php ...]
+ or: php-parse [operations] " false,
+ 'with-positions' => false,
+ 'with-recovery' => false,
+ 'version' => PhpParser\PhpVersion::getNewestSupported(),
+ ];
+
+ array_shift($args);
+ $parseOptions = true;
+ foreach ($args as $arg) {
+ if (!$parseOptions) {
+ $files[] = $arg;
+ continue;
+ }
+
+ switch ($arg) {
+ case '--dump':
+ case '-d':
+ $operations[] = 'dump';
+ break;
+ case '--pretty-print':
+ case '-p':
+ $operations[] = 'pretty-print';
+ break;
+ case '--json-dump':
+ case '-j':
+ $operations[] = 'json-dump';
+ break;
+ case '--var-dump':
+ $operations[] = 'var-dump';
+ break;
+ case '--resolve-names':
+ case '-N';
+ $operations[] = 'resolve-names';
+ break;
+ case '--with-column-info':
+ case '-c';
+ $attributes['with-column-info'] = true;
+ break;
+ case '--with-positions':
+ case '-P':
+ $attributes['with-positions'] = true;
+ break;
+ case '--with-recovery':
+ case '-r':
+ $attributes['with-recovery'] = true;
+ break;
+ case '--help':
+ case '-h';
+ showHelp();
+ break;
+ case '--':
+ $parseOptions = false;
+ break;
+ default:
+ if (preg_match('/^--version=(.*)$/', $arg, $matches)) {
+ $attributes['version'] = PhpParser\PhpVersion::fromString($matches[1]);
+ } elseif ($arg[0] === '-' && \strlen($arg[0]) > 1) {
+ showHelp("Invalid operation $arg.");
+ } else {
+ $files[] = $arg;
+ }
+ }
+ }
+
+ return [$operations, $files, $attributes];
+}
diff --git a/vendor/nikic/php-parser/composer.json b/vendor/nikic/php-parser/composer.json
new file mode 100644
index 0000000..b52f3ee
--- /dev/null
+++ b/vendor/nikic/php-parser/composer.json
@@ -0,0 +1,43 @@
+{
+ "name": "nikic/php-parser",
+ "type": "library",
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "php",
+ "parser"
+ ],
+ "license": "BSD-3-Clause",
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "require": {
+ "php": ">=7.4",
+ "ext-tokenizer": "*",
+ "ext-json": "*",
+ "ext-ctype": "*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0",
+ "ircmaxell/php-yacc": "^0.0.7"
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "PhpParser\\": "test/PhpParser/"
+ }
+ },
+ "bin": [
+ "bin/php-parse"
+ ]
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder.php b/vendor/nikic/php-parser/lib/PhpParser/Builder.php
new file mode 100644
index 0000000..d6aa124
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder.php
@@ -0,0 +1,12 @@
+ */
+ protected array $attributes = [];
+ /** @var list */
+ protected array $constants = [];
+
+ /** @var list */
+ protected array $attributeGroups = [];
+ /** @var Identifier|Node\Name|Node\ComplexType|null */
+ protected ?Node $type = null;
+
+ /**
+ * Creates a class constant builder
+ *
+ * @param string|Identifier $name Name
+ * @param Node\Expr|bool|null|int|float|string|array|\UnitEnum $value Value
+ */
+ public function __construct($name, $value) {
+ $this->constants = [new Const_($name, BuilderHelpers::normalizeValue($value))];
+ }
+
+ /**
+ * Add another constant to const group
+ *
+ * @param string|Identifier $name Name
+ * @param Node\Expr|bool|null|int|float|string|array|\UnitEnum $value Value
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addConst($name, $value) {
+ $this->constants[] = new Const_($name, BuilderHelpers::normalizeValue($value));
+
+ return $this;
+ }
+
+ /**
+ * Makes the constant public.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makePublic() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC);
+
+ return $this;
+ }
+
+ /**
+ * Makes the constant protected.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeProtected() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED);
+
+ return $this;
+ }
+
+ /**
+ * Makes the constant private.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makePrivate() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE);
+
+ return $this;
+ }
+
+ /**
+ * Makes the constant final.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeFinal() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::FINAL);
+
+ return $this;
+ }
+
+ /**
+ * Sets doc comment for the constant.
+ *
+ * @param PhpParser\Comment\Doc|string $docComment Doc comment to set
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function setDocComment($docComment) {
+ $this->attributes = [
+ 'comments' => [BuilderHelpers::normalizeDocComment($docComment)]
+ ];
+
+ return $this;
+ }
+
+ /**
+ * Adds an attribute group.
+ *
+ * @param Node\Attribute|Node\AttributeGroup $attribute
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addAttribute($attribute) {
+ $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute);
+
+ return $this;
+ }
+
+ /**
+ * Sets the constant type.
+ *
+ * @param string|Node\Name|Identifier|Node\ComplexType $type
+ *
+ * @return $this
+ */
+ public function setType($type) {
+ $this->type = BuilderHelpers::normalizeType($type);
+
+ return $this;
+ }
+
+ /**
+ * Returns the built class node.
+ *
+ * @return Stmt\ClassConst The built constant node
+ */
+ public function getNode(): PhpParser\Node {
+ return new Stmt\ClassConst(
+ $this->constants,
+ $this->flags,
+ $this->attributes,
+ $this->attributeGroups,
+ $this->type
+ );
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php
new file mode 100644
index 0000000..6f39431
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php
@@ -0,0 +1,151 @@
+ */
+ protected array $implements = [];
+ protected int $flags = 0;
+ /** @var list */
+ protected array $uses = [];
+ /** @var list */
+ protected array $constants = [];
+ /** @var list */
+ protected array $properties = [];
+ /** @var list */
+ protected array $methods = [];
+ /** @var list */
+ protected array $attributeGroups = [];
+
+ /**
+ * Creates a class builder.
+ *
+ * @param string $name Name of the class
+ */
+ public function __construct(string $name) {
+ $this->name = $name;
+ }
+
+ /**
+ * Extends a class.
+ *
+ * @param Name|string $class Name of class to extend
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function extend($class) {
+ $this->extends = BuilderHelpers::normalizeName($class);
+
+ return $this;
+ }
+
+ /**
+ * Implements one or more interfaces.
+ *
+ * @param Name|string ...$interfaces Names of interfaces to implement
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function implement(...$interfaces) {
+ foreach ($interfaces as $interface) {
+ $this->implements[] = BuilderHelpers::normalizeName($interface);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Makes the class abstract.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeAbstract() {
+ $this->flags = BuilderHelpers::addClassModifier($this->flags, Modifiers::ABSTRACT);
+
+ return $this;
+ }
+
+ /**
+ * Makes the class final.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeFinal() {
+ $this->flags = BuilderHelpers::addClassModifier($this->flags, Modifiers::FINAL);
+
+ return $this;
+ }
+
+ /**
+ * Makes the class readonly.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeReadonly() {
+ $this->flags = BuilderHelpers::addClassModifier($this->flags, Modifiers::READONLY);
+
+ return $this;
+ }
+
+ /**
+ * Adds a statement.
+ *
+ * @param Stmt|PhpParser\Builder $stmt The statement to add
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addStmt($stmt) {
+ $stmt = BuilderHelpers::normalizeNode($stmt);
+
+ if ($stmt instanceof Stmt\Property) {
+ $this->properties[] = $stmt;
+ } elseif ($stmt instanceof Stmt\ClassMethod) {
+ $this->methods[] = $stmt;
+ } elseif ($stmt instanceof Stmt\TraitUse) {
+ $this->uses[] = $stmt;
+ } elseif ($stmt instanceof Stmt\ClassConst) {
+ $this->constants[] = $stmt;
+ } else {
+ throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType()));
+ }
+
+ return $this;
+ }
+
+ /**
+ * Adds an attribute group.
+ *
+ * @param Node\Attribute|Node\AttributeGroup $attribute
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addAttribute($attribute) {
+ $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute);
+
+ return $this;
+ }
+
+ /**
+ * Returns the built class node.
+ *
+ * @return Stmt\Class_ The built class node
+ */
+ public function getNode(): PhpParser\Node {
+ return new Stmt\Class_($this->name, [
+ 'flags' => $this->flags,
+ 'extends' => $this->extends,
+ 'implements' => $this->implements,
+ 'stmts' => array_merge($this->uses, $this->constants, $this->properties, $this->methods),
+ 'attrGroups' => $this->attributeGroups,
+ ], $this->attributes);
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php
new file mode 100644
index 0000000..488b721
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php
@@ -0,0 +1,50 @@
+ */
+ protected array $attributes = [];
+
+ /**
+ * Adds a statement.
+ *
+ * @param PhpParser\Node\Stmt|PhpParser\Builder $stmt The statement to add
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ abstract public function addStmt($stmt);
+
+ /**
+ * Adds multiple statements.
+ *
+ * @param (PhpParser\Node\Stmt|PhpParser\Builder)[] $stmts The statements to add
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addStmts(array $stmts) {
+ foreach ($stmts as $stmt) {
+ $this->addStmt($stmt);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Sets doc comment for the declaration.
+ *
+ * @param PhpParser\Comment\Doc|string $docComment Doc comment to set
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function setDocComment($docComment) {
+ $this->attributes['comments'] = [
+ BuilderHelpers::normalizeDocComment($docComment)
+ ];
+
+ return $this;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php
new file mode 100644
index 0000000..c766321
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php
@@ -0,0 +1,86 @@
+ */
+ protected array $attributes = [];
+
+ /** @var list */
+ protected array $attributeGroups = [];
+
+ /**
+ * Creates an enum case builder.
+ *
+ * @param string|Identifier $name Name
+ */
+ public function __construct($name) {
+ $this->name = $name;
+ }
+
+ /**
+ * Sets the value.
+ *
+ * @param Node\Expr|string|int $value
+ *
+ * @return $this
+ */
+ public function setValue($value) {
+ $this->value = BuilderHelpers::normalizeValue($value);
+
+ return $this;
+ }
+
+ /**
+ * Sets doc comment for the constant.
+ *
+ * @param PhpParser\Comment\Doc|string $docComment Doc comment to set
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function setDocComment($docComment) {
+ $this->attributes = [
+ 'comments' => [BuilderHelpers::normalizeDocComment($docComment)]
+ ];
+
+ return $this;
+ }
+
+ /**
+ * Adds an attribute group.
+ *
+ * @param Node\Attribute|Node\AttributeGroup $attribute
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addAttribute($attribute) {
+ $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute);
+
+ return $this;
+ }
+
+ /**
+ * Returns the built enum case node.
+ *
+ * @return Stmt\EnumCase The built constant node
+ */
+ public function getNode(): PhpParser\Node {
+ return new Stmt\EnumCase(
+ $this->name,
+ $this->value,
+ $this->attributeGroups,
+ $this->attributes
+ );
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php
new file mode 100644
index 0000000..c00df03
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php
@@ -0,0 +1,116 @@
+ */
+ protected array $implements = [];
+ /** @var list */
+ protected array $uses = [];
+ /** @var list */
+ protected array $enumCases = [];
+ /** @var list */
+ protected array $constants = [];
+ /** @var list */
+ protected array $methods = [];
+ /** @var list */
+ protected array $attributeGroups = [];
+
+ /**
+ * Creates an enum builder.
+ *
+ * @param string $name Name of the enum
+ */
+ public function __construct(string $name) {
+ $this->name = $name;
+ }
+
+ /**
+ * Sets the scalar type.
+ *
+ * @param string|Identifier $scalarType
+ *
+ * @return $this
+ */
+ public function setScalarType($scalarType) {
+ $this->scalarType = BuilderHelpers::normalizeType($scalarType);
+
+ return $this;
+ }
+
+ /**
+ * Implements one or more interfaces.
+ *
+ * @param Name|string ...$interfaces Names of interfaces to implement
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function implement(...$interfaces) {
+ foreach ($interfaces as $interface) {
+ $this->implements[] = BuilderHelpers::normalizeName($interface);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Adds a statement.
+ *
+ * @param Stmt|PhpParser\Builder $stmt The statement to add
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addStmt($stmt) {
+ $stmt = BuilderHelpers::normalizeNode($stmt);
+
+ if ($stmt instanceof Stmt\EnumCase) {
+ $this->enumCases[] = $stmt;
+ } elseif ($stmt instanceof Stmt\ClassMethod) {
+ $this->methods[] = $stmt;
+ } elseif ($stmt instanceof Stmt\TraitUse) {
+ $this->uses[] = $stmt;
+ } elseif ($stmt instanceof Stmt\ClassConst) {
+ $this->constants[] = $stmt;
+ } else {
+ throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType()));
+ }
+
+ return $this;
+ }
+
+ /**
+ * Adds an attribute group.
+ *
+ * @param Node\Attribute|Node\AttributeGroup $attribute
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addAttribute($attribute) {
+ $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute);
+
+ return $this;
+ }
+
+ /**
+ * Returns the built class node.
+ *
+ * @return Stmt\Enum_ The built enum node
+ */
+ public function getNode(): PhpParser\Node {
+ return new Stmt\Enum_($this->name, [
+ 'scalarType' => $this->scalarType,
+ 'implements' => $this->implements,
+ 'stmts' => array_merge($this->uses, $this->enumCases, $this->constants, $this->methods),
+ 'attrGroups' => $this->attributeGroups,
+ ], $this->attributes);
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php
new file mode 100644
index 0000000..ff79cb6
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php
@@ -0,0 +1,73 @@
+returnByRef = true;
+
+ return $this;
+ }
+
+ /**
+ * Adds a parameter.
+ *
+ * @param Node\Param|Param $param The parameter to add
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addParam($param) {
+ $param = BuilderHelpers::normalizeNode($param);
+
+ if (!$param instanceof Node\Param) {
+ throw new \LogicException(sprintf('Expected parameter node, got "%s"', $param->getType()));
+ }
+
+ $this->params[] = $param;
+
+ return $this;
+ }
+
+ /**
+ * Adds multiple parameters.
+ *
+ * @param (Node\Param|Param)[] $params The parameters to add
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addParams(array $params) {
+ foreach ($params as $param) {
+ $this->addParam($param);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Sets the return type for PHP 7.
+ *
+ * @param string|Node\Name|Node\Identifier|Node\ComplexType $type
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function setReturnType($type) {
+ $this->returnType = BuilderHelpers::normalizeType($type);
+
+ return $this;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php
new file mode 100644
index 0000000..48f5f69
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php
@@ -0,0 +1,67 @@
+ */
+ protected array $stmts = [];
+
+ /** @var list */
+ protected array $attributeGroups = [];
+
+ /**
+ * Creates a function builder.
+ *
+ * @param string $name Name of the function
+ */
+ public function __construct(string $name) {
+ $this->name = $name;
+ }
+
+ /**
+ * Adds a statement.
+ *
+ * @param Node|PhpParser\Builder $stmt The statement to add
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addStmt($stmt) {
+ $this->stmts[] = BuilderHelpers::normalizeStmt($stmt);
+
+ return $this;
+ }
+
+ /**
+ * Adds an attribute group.
+ *
+ * @param Node\Attribute|Node\AttributeGroup $attribute
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addAttribute($attribute) {
+ $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute);
+
+ return $this;
+ }
+
+ /**
+ * Returns the built function node.
+ *
+ * @return Stmt\Function_ The built function node
+ */
+ public function getNode(): Node {
+ return new Stmt\Function_($this->name, [
+ 'byRef' => $this->returnByRef,
+ 'params' => $this->params,
+ 'returnType' => $this->returnType,
+ 'stmts' => $this->stmts,
+ 'attrGroups' => $this->attributeGroups,
+ ], $this->attributes);
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php
new file mode 100644
index 0000000..13dd3f7
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php
@@ -0,0 +1,94 @@
+ */
+ protected array $extends = [];
+ /** @var list */
+ protected array $constants = [];
+ /** @var list */
+ protected array $methods = [];
+ /** @var list */
+ protected array $attributeGroups = [];
+
+ /**
+ * Creates an interface builder.
+ *
+ * @param string $name Name of the interface
+ */
+ public function __construct(string $name) {
+ $this->name = $name;
+ }
+
+ /**
+ * Extends one or more interfaces.
+ *
+ * @param Name|string ...$interfaces Names of interfaces to extend
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function extend(...$interfaces) {
+ foreach ($interfaces as $interface) {
+ $this->extends[] = BuilderHelpers::normalizeName($interface);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Adds a statement.
+ *
+ * @param Stmt|PhpParser\Builder $stmt The statement to add
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addStmt($stmt) {
+ $stmt = BuilderHelpers::normalizeNode($stmt);
+
+ if ($stmt instanceof Stmt\ClassConst) {
+ $this->constants[] = $stmt;
+ } elseif ($stmt instanceof Stmt\ClassMethod) {
+ // we erase all statements in the body of an interface method
+ $stmt->stmts = null;
+ $this->methods[] = $stmt;
+ } else {
+ throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType()));
+ }
+
+ return $this;
+ }
+
+ /**
+ * Adds an attribute group.
+ *
+ * @param Node\Attribute|Node\AttributeGroup $attribute
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addAttribute($attribute) {
+ $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute);
+
+ return $this;
+ }
+
+ /**
+ * Returns the built interface node.
+ *
+ * @return Stmt\Interface_ The built interface node
+ */
+ public function getNode(): PhpParser\Node {
+ return new Stmt\Interface_($this->name, [
+ 'extends' => $this->extends,
+ 'stmts' => array_merge($this->constants, $this->methods),
+ 'attrGroups' => $this->attributeGroups,
+ ], $this->attributes);
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php
new file mode 100644
index 0000000..8358dbe
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php
@@ -0,0 +1,147 @@
+|null */
+ protected ?array $stmts = [];
+
+ /** @var list */
+ protected array $attributeGroups = [];
+
+ /**
+ * Creates a method builder.
+ *
+ * @param string $name Name of the method
+ */
+ public function __construct(string $name) {
+ $this->name = $name;
+ }
+
+ /**
+ * Makes the method public.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makePublic() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC);
+
+ return $this;
+ }
+
+ /**
+ * Makes the method protected.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeProtected() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED);
+
+ return $this;
+ }
+
+ /**
+ * Makes the method private.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makePrivate() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE);
+
+ return $this;
+ }
+
+ /**
+ * Makes the method static.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeStatic() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::STATIC);
+
+ return $this;
+ }
+
+ /**
+ * Makes the method abstract.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeAbstract() {
+ if (!empty($this->stmts)) {
+ throw new \LogicException('Cannot make method with statements abstract');
+ }
+
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::ABSTRACT);
+ $this->stmts = null; // abstract methods don't have statements
+
+ return $this;
+ }
+
+ /**
+ * Makes the method final.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeFinal() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::FINAL);
+
+ return $this;
+ }
+
+ /**
+ * Adds a statement.
+ *
+ * @param Node|PhpParser\Builder $stmt The statement to add
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addStmt($stmt) {
+ if (null === $this->stmts) {
+ throw new \LogicException('Cannot add statements to an abstract method');
+ }
+
+ $this->stmts[] = BuilderHelpers::normalizeStmt($stmt);
+
+ return $this;
+ }
+
+ /**
+ * Adds an attribute group.
+ *
+ * @param Node\Attribute|Node\AttributeGroup $attribute
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addAttribute($attribute) {
+ $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute);
+
+ return $this;
+ }
+
+ /**
+ * Returns the built method node.
+ *
+ * @return Stmt\ClassMethod The built method node
+ */
+ public function getNode(): Node {
+ return new Stmt\ClassMethod($this->name, [
+ 'flags' => $this->flags,
+ 'byRef' => $this->returnByRef,
+ 'params' => $this->params,
+ 'returnType' => $this->returnType,
+ 'stmts' => $this->stmts,
+ 'attrGroups' => $this->attributeGroups,
+ ], $this->attributes);
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php
new file mode 100644
index 0000000..80fe6f8
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php
@@ -0,0 +1,45 @@
+name = null !== $name ? BuilderHelpers::normalizeName($name) : null;
+ }
+
+ /**
+ * Adds a statement.
+ *
+ * @param Node|PhpParser\Builder $stmt The statement to add
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addStmt($stmt) {
+ $this->stmts[] = BuilderHelpers::normalizeStmt($stmt);
+
+ return $this;
+ }
+
+ /**
+ * Returns the built node.
+ *
+ * @return Stmt\Namespace_ The built node
+ */
+ public function getNode(): Node {
+ return new Stmt\Namespace_($this->name, $this->stmts, $this->attributes);
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php
new file mode 100644
index 0000000..324a32b
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php
@@ -0,0 +1,171 @@
+ */
+ protected array $attributeGroups = [];
+
+ /**
+ * Creates a parameter builder.
+ *
+ * @param string $name Name of the parameter
+ */
+ public function __construct(string $name) {
+ $this->name = $name;
+ }
+
+ /**
+ * Sets default value for the parameter.
+ *
+ * @param mixed $value Default value to use
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function setDefault($value) {
+ $this->default = BuilderHelpers::normalizeValue($value);
+
+ return $this;
+ }
+
+ /**
+ * Sets type for the parameter.
+ *
+ * @param string|Node\Name|Node\Identifier|Node\ComplexType $type Parameter type
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function setType($type) {
+ $this->type = BuilderHelpers::normalizeType($type);
+ if ($this->type == 'void') {
+ throw new \LogicException('Parameter type cannot be void');
+ }
+
+ return $this;
+ }
+
+ /**
+ * Make the parameter accept the value by reference.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeByRef() {
+ $this->byRef = true;
+
+ return $this;
+ }
+
+ /**
+ * Make the parameter variadic
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeVariadic() {
+ $this->variadic = true;
+
+ return $this;
+ }
+
+ /**
+ * Makes the (promoted) parameter public.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makePublic() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC);
+
+ return $this;
+ }
+
+ /**
+ * Makes the (promoted) parameter protected.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeProtected() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED);
+
+ return $this;
+ }
+
+ /**
+ * Makes the (promoted) parameter private.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makePrivate() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE);
+
+ return $this;
+ }
+
+ /**
+ * Makes the (promoted) parameter readonly.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeReadonly() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::READONLY);
+
+ return $this;
+ }
+
+ /**
+ * Gives the promoted property private(set) visibility.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makePrivateSet() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE_SET);
+
+ return $this;
+ }
+
+ /**
+ * Gives the promoted property protected(set) visibility.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeProtectedSet() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED_SET);
+
+ return $this;
+ }
+
+ /**
+ * Adds an attribute group.
+ *
+ * @param Node\Attribute|Node\AttributeGroup $attribute
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addAttribute($attribute) {
+ $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute);
+
+ return $this;
+ }
+
+ /**
+ * Returns the built parameter node.
+ *
+ * @return Node\Param The built parameter node
+ */
+ public function getNode(): Node {
+ return new Node\Param(
+ new Node\Expr\Variable($this->name),
+ $this->default, $this->type, $this->byRef, $this->variadic, [], $this->flags, $this->attributeGroups
+ );
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php
new file mode 100644
index 0000000..c80fe48
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php
@@ -0,0 +1,223 @@
+ */
+ protected array $attributes = [];
+ /** @var null|Identifier|Name|ComplexType */
+ protected ?Node $type = null;
+ /** @var list */
+ protected array $attributeGroups = [];
+ /** @var list */
+ protected array $hooks = [];
+
+ /**
+ * Creates a property builder.
+ *
+ * @param string $name Name of the property
+ */
+ public function __construct(string $name) {
+ $this->name = $name;
+ }
+
+ /**
+ * Makes the property public.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makePublic() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC);
+
+ return $this;
+ }
+
+ /**
+ * Makes the property protected.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeProtected() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED);
+
+ return $this;
+ }
+
+ /**
+ * Makes the property private.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makePrivate() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE);
+
+ return $this;
+ }
+
+ /**
+ * Makes the property static.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeStatic() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::STATIC);
+
+ return $this;
+ }
+
+ /**
+ * Makes the property readonly.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeReadonly() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::READONLY);
+
+ return $this;
+ }
+
+ /**
+ * Makes the property abstract. Requires at least one property hook to be specified as well.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeAbstract() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::ABSTRACT);
+
+ return $this;
+ }
+
+ /**
+ * Makes the property final.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeFinal() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::FINAL);
+
+ return $this;
+ }
+
+ /**
+ * Gives the property private(set) visibility.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makePrivateSet() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE_SET);
+
+ return $this;
+ }
+
+ /**
+ * Gives the property protected(set) visibility.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeProtectedSet() {
+ $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED_SET);
+
+ return $this;
+ }
+
+ /**
+ * Sets default value for the property.
+ *
+ * @param mixed $value Default value to use
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function setDefault($value) {
+ $this->default = BuilderHelpers::normalizeValue($value);
+
+ return $this;
+ }
+
+ /**
+ * Sets doc comment for the property.
+ *
+ * @param PhpParser\Comment\Doc|string $docComment Doc comment to set
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function setDocComment($docComment) {
+ $this->attributes = [
+ 'comments' => [BuilderHelpers::normalizeDocComment($docComment)]
+ ];
+
+ return $this;
+ }
+
+ /**
+ * Sets the property type for PHP 7.4+.
+ *
+ * @param string|Name|Identifier|ComplexType $type
+ *
+ * @return $this
+ */
+ public function setType($type) {
+ $this->type = BuilderHelpers::normalizeType($type);
+
+ return $this;
+ }
+
+ /**
+ * Adds an attribute group.
+ *
+ * @param Node\Attribute|Node\AttributeGroup $attribute
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addAttribute($attribute) {
+ $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute);
+
+ return $this;
+ }
+
+ /**
+ * Adds a property hook.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addHook(Node\PropertyHook $hook) {
+ $this->hooks[] = $hook;
+
+ return $this;
+ }
+
+ /**
+ * Returns the built class node.
+ *
+ * @return Stmt\Property The built property node
+ */
+ public function getNode(): PhpParser\Node {
+ if ($this->flags & Modifiers::ABSTRACT && !$this->hooks) {
+ throw new PhpParser\Error('Only hooked properties may be declared abstract');
+ }
+
+ return new Stmt\Property(
+ $this->flags !== 0 ? $this->flags : Modifiers::PUBLIC,
+ [
+ new Node\PropertyItem($this->name, $this->default)
+ ],
+ $this->attributes,
+ $this->type,
+ $this->attributeGroups,
+ $this->hooks
+ );
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php
new file mode 100644
index 0000000..cf21c82
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php
@@ -0,0 +1,65 @@
+and($trait);
+ }
+ }
+
+ /**
+ * Adds used trait.
+ *
+ * @param Node\Name|string $trait Trait name
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function and($trait) {
+ $this->traits[] = BuilderHelpers::normalizeName($trait);
+ return $this;
+ }
+
+ /**
+ * Adds trait adaptation.
+ *
+ * @param Stmt\TraitUseAdaptation|Builder\TraitUseAdaptation $adaptation Trait adaptation
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function with($adaptation) {
+ $adaptation = BuilderHelpers::normalizeNode($adaptation);
+
+ if (!$adaptation instanceof Stmt\TraitUseAdaptation) {
+ throw new \LogicException('Adaptation must have type TraitUseAdaptation');
+ }
+
+ $this->adaptations[] = $adaptation;
+ return $this;
+ }
+
+ /**
+ * Returns the built node.
+ *
+ * @return Node The built node
+ */
+ public function getNode(): Node {
+ return new Stmt\TraitUse($this->traits, $this->adaptations);
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php
new file mode 100644
index 0000000..fee0958
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php
@@ -0,0 +1,145 @@
+type = self::TYPE_UNDEFINED;
+
+ $this->trait = is_null($trait) ? null : BuilderHelpers::normalizeName($trait);
+ $this->method = BuilderHelpers::normalizeIdentifier($method);
+ }
+
+ /**
+ * Sets alias of method.
+ *
+ * @param Node\Identifier|string $alias Alias for adapted method
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function as($alias) {
+ if ($this->type === self::TYPE_UNDEFINED) {
+ $this->type = self::TYPE_ALIAS;
+ }
+
+ if ($this->type !== self::TYPE_ALIAS) {
+ throw new \LogicException('Cannot set alias for not alias adaptation buider');
+ }
+
+ $this->alias = BuilderHelpers::normalizeIdentifier($alias);
+ return $this;
+ }
+
+ /**
+ * Sets adapted method public.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makePublic() {
+ $this->setModifier(Modifiers::PUBLIC);
+ return $this;
+ }
+
+ /**
+ * Sets adapted method protected.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makeProtected() {
+ $this->setModifier(Modifiers::PROTECTED);
+ return $this;
+ }
+
+ /**
+ * Sets adapted method private.
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function makePrivate() {
+ $this->setModifier(Modifiers::PRIVATE);
+ return $this;
+ }
+
+ /**
+ * Adds overwritten traits.
+ *
+ * @param Node\Name|string ...$traits Traits for overwrite
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function insteadof(...$traits) {
+ if ($this->type === self::TYPE_UNDEFINED) {
+ if (is_null($this->trait)) {
+ throw new \LogicException('Precedence adaptation must have trait');
+ }
+
+ $this->type = self::TYPE_PRECEDENCE;
+ }
+
+ if ($this->type !== self::TYPE_PRECEDENCE) {
+ throw new \LogicException('Cannot add overwritten traits for not precedence adaptation buider');
+ }
+
+ foreach ($traits as $trait) {
+ $this->insteadof[] = BuilderHelpers::normalizeName($trait);
+ }
+
+ return $this;
+ }
+
+ protected function setModifier(int $modifier): void {
+ if ($this->type === self::TYPE_UNDEFINED) {
+ $this->type = self::TYPE_ALIAS;
+ }
+
+ if ($this->type !== self::TYPE_ALIAS) {
+ throw new \LogicException('Cannot set access modifier for not alias adaptation buider');
+ }
+
+ if (is_null($this->modifier)) {
+ $this->modifier = $modifier;
+ } else {
+ throw new \LogicException('Multiple access type modifiers are not allowed');
+ }
+ }
+
+ /**
+ * Returns the built node.
+ *
+ * @return Node The built node
+ */
+ public function getNode(): Node {
+ switch ($this->type) {
+ case self::TYPE_ALIAS:
+ return new Stmt\TraitUseAdaptation\Alias($this->trait, $this->method, $this->modifier, $this->alias);
+ case self::TYPE_PRECEDENCE:
+ return new Stmt\TraitUseAdaptation\Precedence($this->trait, $this->method, $this->insteadof);
+ default:
+ throw new \LogicException('Type of adaptation is not defined');
+ }
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php
new file mode 100644
index 0000000..ffa1bd5
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php
@@ -0,0 +1,83 @@
+ */
+ protected array $uses = [];
+ /** @var list */
+ protected array $constants = [];
+ /** @var list */
+ protected array $properties = [];
+ /** @var list */
+ protected array $methods = [];
+ /** @var list */
+ protected array $attributeGroups = [];
+
+ /**
+ * Creates an interface builder.
+ *
+ * @param string $name Name of the interface
+ */
+ public function __construct(string $name) {
+ $this->name = $name;
+ }
+
+ /**
+ * Adds a statement.
+ *
+ * @param Stmt|PhpParser\Builder $stmt The statement to add
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addStmt($stmt) {
+ $stmt = BuilderHelpers::normalizeNode($stmt);
+
+ if ($stmt instanceof Stmt\Property) {
+ $this->properties[] = $stmt;
+ } elseif ($stmt instanceof Stmt\ClassMethod) {
+ $this->methods[] = $stmt;
+ } elseif ($stmt instanceof Stmt\TraitUse) {
+ $this->uses[] = $stmt;
+ } elseif ($stmt instanceof Stmt\ClassConst) {
+ $this->constants[] = $stmt;
+ } else {
+ throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType()));
+ }
+
+ return $this;
+ }
+
+ /**
+ * Adds an attribute group.
+ *
+ * @param Node\Attribute|Node\AttributeGroup $attribute
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function addAttribute($attribute) {
+ $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute);
+
+ return $this;
+ }
+
+ /**
+ * Returns the built trait node.
+ *
+ * @return Stmt\Trait_ The built interface node
+ */
+ public function getNode(): PhpParser\Node {
+ return new Stmt\Trait_(
+ $this->name, [
+ 'stmts' => array_merge($this->uses, $this->constants, $this->properties, $this->methods),
+ 'attrGroups' => $this->attributeGroups,
+ ], $this->attributes
+ );
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php
new file mode 100644
index 0000000..b82cf13
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php
@@ -0,0 +1,49 @@
+name = BuilderHelpers::normalizeName($name);
+ $this->type = $type;
+ }
+
+ /**
+ * Sets alias for used name.
+ *
+ * @param string $alias Alias to use (last component of full name by default)
+ *
+ * @return $this The builder instance (for fluid interface)
+ */
+ public function as(string $alias) {
+ $this->alias = $alias;
+ return $this;
+ }
+
+ /**
+ * Returns the built node.
+ *
+ * @return Stmt\Use_ The built node
+ */
+ public function getNode(): Node {
+ return new Stmt\Use_([
+ new Node\UseItem($this->name, $this->alias)
+ ], $this->type);
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php b/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php
new file mode 100644
index 0000000..07642f9
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php
@@ -0,0 +1,375 @@
+args($args)
+ );
+ }
+
+ /**
+ * Creates a namespace builder.
+ *
+ * @param null|string|Node\Name $name Name of the namespace
+ *
+ * @return Builder\Namespace_ The created namespace builder
+ */
+ public function namespace($name): Builder\Namespace_ {
+ return new Builder\Namespace_($name);
+ }
+
+ /**
+ * Creates a class builder.
+ *
+ * @param string $name Name of the class
+ *
+ * @return Builder\Class_ The created class builder
+ */
+ public function class(string $name): Builder\Class_ {
+ return new Builder\Class_($name);
+ }
+
+ /**
+ * Creates an interface builder.
+ *
+ * @param string $name Name of the interface
+ *
+ * @return Builder\Interface_ The created interface builder
+ */
+ public function interface(string $name): Builder\Interface_ {
+ return new Builder\Interface_($name);
+ }
+
+ /**
+ * Creates a trait builder.
+ *
+ * @param string $name Name of the trait
+ *
+ * @return Builder\Trait_ The created trait builder
+ */
+ public function trait(string $name): Builder\Trait_ {
+ return new Builder\Trait_($name);
+ }
+
+ /**
+ * Creates an enum builder.
+ *
+ * @param string $name Name of the enum
+ *
+ * @return Builder\Enum_ The created enum builder
+ */
+ public function enum(string $name): Builder\Enum_ {
+ return new Builder\Enum_($name);
+ }
+
+ /**
+ * Creates a trait use builder.
+ *
+ * @param Node\Name|string ...$traits Trait names
+ *
+ * @return Builder\TraitUse The created trait use builder
+ */
+ public function useTrait(...$traits): Builder\TraitUse {
+ return new Builder\TraitUse(...$traits);
+ }
+
+ /**
+ * Creates a trait use adaptation builder.
+ *
+ * @param Node\Name|string|null $trait Trait name
+ * @param Node\Identifier|string $method Method name
+ *
+ * @return Builder\TraitUseAdaptation The created trait use adaptation builder
+ */
+ public function traitUseAdaptation($trait, $method = null): Builder\TraitUseAdaptation {
+ if ($method === null) {
+ $method = $trait;
+ $trait = null;
+ }
+
+ return new Builder\TraitUseAdaptation($trait, $method);
+ }
+
+ /**
+ * Creates a method builder.
+ *
+ * @param string $name Name of the method
+ *
+ * @return Builder\Method The created method builder
+ */
+ public function method(string $name): Builder\Method {
+ return new Builder\Method($name);
+ }
+
+ /**
+ * Creates a parameter builder.
+ *
+ * @param string $name Name of the parameter
+ *
+ * @return Builder\Param The created parameter builder
+ */
+ public function param(string $name): Builder\Param {
+ return new Builder\Param($name);
+ }
+
+ /**
+ * Creates a property builder.
+ *
+ * @param string $name Name of the property
+ *
+ * @return Builder\Property The created property builder
+ */
+ public function property(string $name): Builder\Property {
+ return new Builder\Property($name);
+ }
+
+ /**
+ * Creates a function builder.
+ *
+ * @param string $name Name of the function
+ *
+ * @return Builder\Function_ The created function builder
+ */
+ public function function(string $name): Builder\Function_ {
+ return new Builder\Function_($name);
+ }
+
+ /**
+ * Creates a namespace/class use builder.
+ *
+ * @param Node\Name|string $name Name of the entity (namespace or class) to alias
+ *
+ * @return Builder\Use_ The created use builder
+ */
+ public function use($name): Builder\Use_ {
+ return new Builder\Use_($name, Use_::TYPE_NORMAL);
+ }
+
+ /**
+ * Creates a function use builder.
+ *
+ * @param Node\Name|string $name Name of the function to alias
+ *
+ * @return Builder\Use_ The created use function builder
+ */
+ public function useFunction($name): Builder\Use_ {
+ return new Builder\Use_($name, Use_::TYPE_FUNCTION);
+ }
+
+ /**
+ * Creates a constant use builder.
+ *
+ * @param Node\Name|string $name Name of the const to alias
+ *
+ * @return Builder\Use_ The created use const builder
+ */
+ public function useConst($name): Builder\Use_ {
+ return new Builder\Use_($name, Use_::TYPE_CONSTANT);
+ }
+
+ /**
+ * Creates a class constant builder.
+ *
+ * @param string|Identifier $name Name
+ * @param Node\Expr|bool|null|int|float|string|array $value Value
+ *
+ * @return Builder\ClassConst The created use const builder
+ */
+ public function classConst($name, $value): Builder\ClassConst {
+ return new Builder\ClassConst($name, $value);
+ }
+
+ /**
+ * Creates an enum case builder.
+ *
+ * @param string|Identifier $name Name
+ *
+ * @return Builder\EnumCase The created use const builder
+ */
+ public function enumCase($name): Builder\EnumCase {
+ return new Builder\EnumCase($name);
+ }
+
+ /**
+ * Creates node a for a literal value.
+ *
+ * @param Expr|bool|null|int|float|string|array|\UnitEnum $value $value
+ */
+ public function val($value): Expr {
+ return BuilderHelpers::normalizeValue($value);
+ }
+
+ /**
+ * Creates variable node.
+ *
+ * @param string|Expr $name Name
+ */
+ public function var($name): Expr\Variable {
+ if (!\is_string($name) && !$name instanceof Expr) {
+ throw new \LogicException('Variable name must be string or Expr');
+ }
+
+ return new Expr\Variable($name);
+ }
+
+ /**
+ * Normalizes an argument list.
+ *
+ * Creates Arg nodes for all arguments and converts literal values to expressions.
+ *
+ * @param array $args List of arguments to normalize
+ *
+ * @return list
+ */
+ public function args(array $args): array {
+ $normalizedArgs = [];
+ foreach ($args as $key => $arg) {
+ if (!($arg instanceof Arg)) {
+ $arg = new Arg(BuilderHelpers::normalizeValue($arg));
+ }
+ if (\is_string($key)) {
+ $arg->name = BuilderHelpers::normalizeIdentifier($key);
+ }
+ $normalizedArgs[] = $arg;
+ }
+ return $normalizedArgs;
+ }
+
+ /**
+ * Creates a function call node.
+ *
+ * @param string|Name|Expr $name Function name
+ * @param array $args Function arguments
+ */
+ public function funcCall($name, array $args = []): Expr\FuncCall {
+ return new Expr\FuncCall(
+ BuilderHelpers::normalizeNameOrExpr($name),
+ $this->args($args)
+ );
+ }
+
+ /**
+ * Creates a method call node.
+ *
+ * @param Expr $var Variable the method is called on
+ * @param string|Identifier|Expr $name Method name
+ * @param array $args Method arguments
+ */
+ public function methodCall(Expr $var, $name, array $args = []): Expr\MethodCall {
+ return new Expr\MethodCall(
+ $var,
+ BuilderHelpers::normalizeIdentifierOrExpr($name),
+ $this->args($args)
+ );
+ }
+
+ /**
+ * Creates a static method call node.
+ *
+ * @param string|Name|Expr $class Class name
+ * @param string|Identifier|Expr $name Method name
+ * @param array $args Method arguments
+ */
+ public function staticCall($class, $name, array $args = []): Expr\StaticCall {
+ return new Expr\StaticCall(
+ BuilderHelpers::normalizeNameOrExpr($class),
+ BuilderHelpers::normalizeIdentifierOrExpr($name),
+ $this->args($args)
+ );
+ }
+
+ /**
+ * Creates an object creation node.
+ *
+ * @param string|Name|Expr $class Class name
+ * @param array $args Constructor arguments
+ */
+ public function new($class, array $args = []): Expr\New_ {
+ return new Expr\New_(
+ BuilderHelpers::normalizeNameOrExpr($class),
+ $this->args($args)
+ );
+ }
+
+ /**
+ * Creates a constant fetch node.
+ *
+ * @param string|Name $name Constant name
+ */
+ public function constFetch($name): Expr\ConstFetch {
+ return new Expr\ConstFetch(BuilderHelpers::normalizeName($name));
+ }
+
+ /**
+ * Creates a property fetch node.
+ *
+ * @param Expr $var Variable holding object
+ * @param string|Identifier|Expr $name Property name
+ */
+ public function propertyFetch(Expr $var, $name): Expr\PropertyFetch {
+ return new Expr\PropertyFetch($var, BuilderHelpers::normalizeIdentifierOrExpr($name));
+ }
+
+ /**
+ * Creates a class constant fetch node.
+ *
+ * @param string|Name|Expr $class Class name
+ * @param string|Identifier|Expr $name Constant name
+ */
+ public function classConstFetch($class, $name): Expr\ClassConstFetch {
+ return new Expr\ClassConstFetch(
+ BuilderHelpers::normalizeNameOrExpr($class),
+ BuilderHelpers::normalizeIdentifierOrExpr($name)
+ );
+ }
+
+ /**
+ * Creates nested Concat nodes from a list of expressions.
+ *
+ * @param Expr|string ...$exprs Expressions or literal strings
+ */
+ public function concat(...$exprs): Concat {
+ $numExprs = count($exprs);
+ if ($numExprs < 2) {
+ throw new \LogicException('Expected at least two expressions');
+ }
+
+ $lastConcat = $this->normalizeStringExpr($exprs[0]);
+ for ($i = 1; $i < $numExprs; $i++) {
+ $lastConcat = new Concat($lastConcat, $this->normalizeStringExpr($exprs[$i]));
+ }
+ return $lastConcat;
+ }
+
+ /**
+ * @param string|Expr $expr
+ */
+ private function normalizeStringExpr($expr): Expr {
+ if ($expr instanceof Expr) {
+ return $expr;
+ }
+
+ if (\is_string($expr)) {
+ return new String_($expr);
+ }
+
+ throw new \LogicException('Expected string or Expr');
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php b/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php
new file mode 100644
index 0000000..f29a691
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php
@@ -0,0 +1,338 @@
+getNode();
+ }
+
+ if ($node instanceof Node) {
+ return $node;
+ }
+
+ throw new \LogicException('Expected node or builder object');
+ }
+
+ /**
+ * Normalizes a node to a statement.
+ *
+ * Expressions are wrapped in a Stmt\Expression node.
+ *
+ * @param Node|Builder $node The node to normalize
+ *
+ * @return Stmt The normalized statement node
+ */
+ public static function normalizeStmt($node): Stmt {
+ $node = self::normalizeNode($node);
+ if ($node instanceof Stmt) {
+ return $node;
+ }
+
+ if ($node instanceof Expr) {
+ return new Stmt\Expression($node);
+ }
+
+ throw new \LogicException('Expected statement or expression node');
+ }
+
+ /**
+ * Normalizes strings to Identifier.
+ *
+ * @param string|Identifier $name The identifier to normalize
+ *
+ * @return Identifier The normalized identifier
+ */
+ public static function normalizeIdentifier($name): Identifier {
+ if ($name instanceof Identifier) {
+ return $name;
+ }
+
+ if (\is_string($name)) {
+ return new Identifier($name);
+ }
+
+ throw new \LogicException('Expected string or instance of Node\Identifier');
+ }
+
+ /**
+ * Normalizes strings to Identifier, also allowing expressions.
+ *
+ * @param string|Identifier|Expr $name The identifier to normalize
+ *
+ * @return Identifier|Expr The normalized identifier or expression
+ */
+ public static function normalizeIdentifierOrExpr($name) {
+ if ($name instanceof Identifier || $name instanceof Expr) {
+ return $name;
+ }
+
+ if (\is_string($name)) {
+ return new Identifier($name);
+ }
+
+ throw new \LogicException('Expected string or instance of Node\Identifier or Node\Expr');
+ }
+
+ /**
+ * Normalizes a name: Converts string names to Name nodes.
+ *
+ * @param Name|string $name The name to normalize
+ *
+ * @return Name The normalized name
+ */
+ public static function normalizeName($name): Name {
+ if ($name instanceof Name) {
+ return $name;
+ }
+
+ if (is_string($name)) {
+ if (!$name) {
+ throw new \LogicException('Name cannot be empty');
+ }
+
+ if ($name[0] === '\\') {
+ return new Name\FullyQualified(substr($name, 1));
+ }
+
+ if (0 === strpos($name, 'namespace\\')) {
+ return new Name\Relative(substr($name, strlen('namespace\\')));
+ }
+
+ return new Name($name);
+ }
+
+ throw new \LogicException('Name must be a string or an instance of Node\Name');
+ }
+
+ /**
+ * Normalizes a name: Converts string names to Name nodes, while also allowing expressions.
+ *
+ * @param Expr|Name|string $name The name to normalize
+ *
+ * @return Name|Expr The normalized name or expression
+ */
+ public static function normalizeNameOrExpr($name) {
+ if ($name instanceof Expr) {
+ return $name;
+ }
+
+ if (!is_string($name) && !($name instanceof Name)) {
+ throw new \LogicException(
+ 'Name must be a string or an instance of Node\Name or Node\Expr'
+ );
+ }
+
+ return self::normalizeName($name);
+ }
+
+ /**
+ * Normalizes a type: Converts plain-text type names into proper AST representation.
+ *
+ * In particular, builtin types become Identifiers, custom types become Names and nullables
+ * are wrapped in NullableType nodes.
+ *
+ * @param string|Name|Identifier|ComplexType $type The type to normalize
+ *
+ * @return Name|Identifier|ComplexType The normalized type
+ */
+ public static function normalizeType($type) {
+ if (!is_string($type)) {
+ if (
+ !$type instanceof Name && !$type instanceof Identifier &&
+ !$type instanceof ComplexType
+ ) {
+ throw new \LogicException(
+ 'Type must be a string, or an instance of Name, Identifier or ComplexType'
+ );
+ }
+ return $type;
+ }
+
+ $nullable = false;
+ if (strlen($type) > 0 && $type[0] === '?') {
+ $nullable = true;
+ $type = substr($type, 1);
+ }
+
+ $builtinTypes = [
+ 'array',
+ 'callable',
+ 'bool',
+ 'int',
+ 'float',
+ 'string',
+ 'iterable',
+ 'void',
+ 'object',
+ 'null',
+ 'false',
+ 'mixed',
+ 'never',
+ 'true',
+ ];
+
+ $lowerType = strtolower($type);
+ if (in_array($lowerType, $builtinTypes)) {
+ $type = new Identifier($lowerType);
+ } else {
+ $type = self::normalizeName($type);
+ }
+
+ $notNullableTypes = [
+ 'void', 'mixed', 'never',
+ ];
+ if ($nullable && in_array((string) $type, $notNullableTypes)) {
+ throw new \LogicException(sprintf('%s type cannot be nullable', $type));
+ }
+
+ return $nullable ? new NullableType($type) : $type;
+ }
+
+ /**
+ * Normalizes a value: Converts nulls, booleans, integers,
+ * floats, strings and arrays into their respective nodes
+ *
+ * @param Node\Expr|bool|null|int|float|string|array|\UnitEnum $value The value to normalize
+ *
+ * @return Expr The normalized value
+ */
+ public static function normalizeValue($value): Expr {
+ if ($value instanceof Node\Expr) {
+ return $value;
+ }
+
+ if (is_null($value)) {
+ return new Expr\ConstFetch(
+ new Name('null')
+ );
+ }
+
+ if (is_bool($value)) {
+ return new Expr\ConstFetch(
+ new Name($value ? 'true' : 'false')
+ );
+ }
+
+ if (is_int($value)) {
+ return new Scalar\Int_($value);
+ }
+
+ if (is_float($value)) {
+ return new Scalar\Float_($value);
+ }
+
+ if (is_string($value)) {
+ return new Scalar\String_($value);
+ }
+
+ if (is_array($value)) {
+ $items = [];
+ $lastKey = -1;
+ foreach ($value as $itemKey => $itemValue) {
+ // for consecutive, numeric keys don't generate keys
+ if (null !== $lastKey && ++$lastKey === $itemKey) {
+ $items[] = new Node\ArrayItem(
+ self::normalizeValue($itemValue)
+ );
+ } else {
+ $lastKey = null;
+ $items[] = new Node\ArrayItem(
+ self::normalizeValue($itemValue),
+ self::normalizeValue($itemKey)
+ );
+ }
+ }
+
+ return new Expr\Array_($items);
+ }
+
+ if ($value instanceof \UnitEnum) {
+ return new Expr\ClassConstFetch(new FullyQualified(\get_class($value)), new Identifier($value->name));
+ }
+
+ throw new \LogicException('Invalid value');
+ }
+
+ /**
+ * Normalizes a doc comment: Converts plain strings to PhpParser\Comment\Doc.
+ *
+ * @param Comment\Doc|string $docComment The doc comment to normalize
+ *
+ * @return Comment\Doc The normalized doc comment
+ */
+ public static function normalizeDocComment($docComment): Comment\Doc {
+ if ($docComment instanceof Comment\Doc) {
+ return $docComment;
+ }
+
+ if (is_string($docComment)) {
+ return new Comment\Doc($docComment);
+ }
+
+ throw new \LogicException('Doc comment must be a string or an instance of PhpParser\Comment\Doc');
+ }
+
+ /**
+ * Normalizes a attribute: Converts attribute to the Attribute Group if needed.
+ *
+ * @param Node\Attribute|Node\AttributeGroup $attribute
+ *
+ * @return Node\AttributeGroup The Attribute Group
+ */
+ public static function normalizeAttribute($attribute): Node\AttributeGroup {
+ if ($attribute instanceof Node\AttributeGroup) {
+ return $attribute;
+ }
+
+ if (!($attribute instanceof Node\Attribute)) {
+ throw new \LogicException('Attribute must be an instance of PhpParser\Node\Attribute or PhpParser\Node\AttributeGroup');
+ }
+
+ return new Node\AttributeGroup([$attribute]);
+ }
+
+ /**
+ * Adds a modifier and returns new modifier bitmask.
+ *
+ * @param int $modifiers Existing modifiers
+ * @param int $modifier Modifier to set
+ *
+ * @return int New modifiers
+ */
+ public static function addModifier(int $modifiers, int $modifier): int {
+ Modifiers::verifyModifier($modifiers, $modifier);
+ return $modifiers | $modifier;
+ }
+
+ /**
+ * Adds a modifier and returns new modifier bitmask.
+ * @return int New modifiers
+ */
+ public static function addClassModifier(int $existingModifiers, int $modifierToSet): int {
+ Modifiers::verifyClassModifier($existingModifiers, $modifierToSet);
+ return $existingModifiers | $modifierToSet;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Comment.php b/vendor/nikic/php-parser/lib/PhpParser/Comment.php
new file mode 100644
index 0000000..01b341e
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Comment.php
@@ -0,0 +1,209 @@
+text = $text;
+ $this->startLine = $startLine;
+ $this->startFilePos = $startFilePos;
+ $this->startTokenPos = $startTokenPos;
+ $this->endLine = $endLine;
+ $this->endFilePos = $endFilePos;
+ $this->endTokenPos = $endTokenPos;
+ }
+
+ /**
+ * Gets the comment text.
+ *
+ * @return string The comment text (including comment delimiters like /*)
+ */
+ public function getText(): string {
+ return $this->text;
+ }
+
+ /**
+ * Gets the line number the comment started on.
+ *
+ * @return int Line number (or -1 if not available)
+ * @phpstan-return -1|positive-int
+ */
+ public function getStartLine(): int {
+ return $this->startLine;
+ }
+
+ /**
+ * Gets the file offset the comment started on.
+ *
+ * @return int File offset (or -1 if not available)
+ */
+ public function getStartFilePos(): int {
+ return $this->startFilePos;
+ }
+
+ /**
+ * Gets the token offset the comment started on.
+ *
+ * @return int Token offset (or -1 if not available)
+ */
+ public function getStartTokenPos(): int {
+ return $this->startTokenPos;
+ }
+
+ /**
+ * Gets the line number the comment ends on.
+ *
+ * @return int Line number (or -1 if not available)
+ * @phpstan-return -1|positive-int
+ */
+ public function getEndLine(): int {
+ return $this->endLine;
+ }
+
+ /**
+ * Gets the file offset the comment ends on.
+ *
+ * @return int File offset (or -1 if not available)
+ */
+ public function getEndFilePos(): int {
+ return $this->endFilePos;
+ }
+
+ /**
+ * Gets the token offset the comment ends on.
+ *
+ * @return int Token offset (or -1 if not available)
+ */
+ public function getEndTokenPos(): int {
+ return $this->endTokenPos;
+ }
+
+ /**
+ * Gets the comment text.
+ *
+ * @return string The comment text (including comment delimiters like /*)
+ */
+ public function __toString(): string {
+ return $this->text;
+ }
+
+ /**
+ * Gets the reformatted comment text.
+ *
+ * "Reformatted" here means that we try to clean up the whitespace at the
+ * starts of the lines. This is necessary because we receive the comments
+ * without leading whitespace on the first line, but with leading whitespace
+ * on all subsequent lines.
+ *
+ * Additionally, this normalizes CRLF newlines to LF newlines.
+ */
+ public function getReformattedText(): string {
+ $text = str_replace("\r\n", "\n", $this->text);
+ $newlinePos = strpos($text, "\n");
+ if (false === $newlinePos) {
+ // Single line comments don't need further processing
+ return $text;
+ }
+ if (preg_match('(^.*(?:\n\s+\*.*)+$)', $text)) {
+ // Multi line comment of the type
+ //
+ // /*
+ // * Some text.
+ // * Some more text.
+ // */
+ //
+ // is handled by replacing the whitespace sequences before the * by a single space
+ return preg_replace('(^\s+\*)m', ' *', $text);
+ }
+ if (preg_match('(^/\*\*?\s*\n)', $text) && preg_match('(\n(\s*)\*/$)', $text, $matches)) {
+ // Multi line comment of the type
+ //
+ // /*
+ // Some text.
+ // Some more text.
+ // */
+ //
+ // is handled by removing the whitespace sequence on the line before the closing
+ // */ on all lines. So if the last line is " */", then " " is removed at the
+ // start of all lines.
+ return preg_replace('(^' . preg_quote($matches[1]) . ')m', '', $text);
+ }
+ if (preg_match('(^/\*\*?\s*(?!\s))', $text, $matches)) {
+ // Multi line comment of the type
+ //
+ // /* Some text.
+ // Some more text.
+ // Indented text.
+ // Even more text. */
+ //
+ // is handled by removing the difference between the shortest whitespace prefix on all
+ // lines and the length of the "/* " opening sequence.
+ $prefixLen = $this->getShortestWhitespacePrefixLen(substr($text, $newlinePos + 1));
+ $removeLen = $prefixLen - strlen($matches[0]);
+ return preg_replace('(^\s{' . $removeLen . '})m', '', $text);
+ }
+
+ // No idea how to format this comment, so simply return as is
+ return $text;
+ }
+
+ /**
+ * Get length of shortest whitespace prefix (at the start of a line).
+ *
+ * If there is a line with no prefix whitespace, 0 is a valid return value.
+ *
+ * @param string $str String to check
+ * @return int Length in characters. Tabs count as single characters.
+ */
+ private function getShortestWhitespacePrefixLen(string $str): int {
+ $lines = explode("\n", $str);
+ $shortestPrefixLen = \PHP_INT_MAX;
+ foreach ($lines as $line) {
+ preg_match('(^\s*)', $line, $matches);
+ $prefixLen = strlen($matches[0]);
+ if ($prefixLen < $shortestPrefixLen) {
+ $shortestPrefixLen = $prefixLen;
+ }
+ }
+ return $shortestPrefixLen;
+ }
+
+ /**
+ * @return array{nodeType:string, text:mixed, line:mixed, filePos:mixed}
+ */
+ public function jsonSerialize(): array {
+ // Technically not a node, but we make it look like one anyway
+ $type = $this instanceof Comment\Doc ? 'Comment_Doc' : 'Comment';
+ return [
+ 'nodeType' => $type,
+ 'text' => $this->text,
+ // TODO: Rename these to include "start".
+ 'line' => $this->startLine,
+ 'filePos' => $this->startFilePos,
+ 'tokenPos' => $this->startTokenPos,
+ 'endLine' => $this->endLine,
+ 'endFilePos' => $this->endFilePos,
+ 'endTokenPos' => $this->endTokenPos,
+ ];
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php b/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php
new file mode 100644
index 0000000..bb3e914
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php
@@ -0,0 +1,6 @@
+fallbackEvaluator = $fallbackEvaluator ?? function (Expr $expr) {
+ throw new ConstExprEvaluationException(
+ "Expression of type {$expr->getType()} cannot be evaluated"
+ );
+ };
+ }
+
+ /**
+ * Silently evaluates a constant expression into a PHP value.
+ *
+ * Thrown Errors, warnings or notices will be converted into a ConstExprEvaluationException.
+ * The original source of the exception is available through getPrevious().
+ *
+ * If some part of the expression cannot be evaluated, the fallback evaluator passed to the
+ * constructor will be invoked. By default, if no fallback is provided, an exception of type
+ * ConstExprEvaluationException is thrown.
+ *
+ * See class doc comment for caveats and limitations.
+ *
+ * @param Expr $expr Constant expression to evaluate
+ * @return mixed Result of evaluation
+ *
+ * @throws ConstExprEvaluationException if the expression cannot be evaluated or an error occurred
+ */
+ public function evaluateSilently(Expr $expr) {
+ set_error_handler(function ($num, $str, $file, $line) {
+ throw new \ErrorException($str, 0, $num, $file, $line);
+ });
+
+ try {
+ return $this->evaluate($expr);
+ } catch (\Throwable $e) {
+ if (!$e instanceof ConstExprEvaluationException) {
+ $e = new ConstExprEvaluationException(
+ "An error occurred during constant expression evaluation", 0, $e);
+ }
+ throw $e;
+ } finally {
+ restore_error_handler();
+ }
+ }
+
+ /**
+ * Directly evaluates a constant expression into a PHP value.
+ *
+ * May generate Error exceptions, warnings or notices. Use evaluateSilently() to convert these
+ * into a ConstExprEvaluationException.
+ *
+ * If some part of the expression cannot be evaluated, the fallback evaluator passed to the
+ * constructor will be invoked. By default, if no fallback is provided, an exception of type
+ * ConstExprEvaluationException is thrown.
+ *
+ * See class doc comment for caveats and limitations.
+ *
+ * @param Expr $expr Constant expression to evaluate
+ * @return mixed Result of evaluation
+ *
+ * @throws ConstExprEvaluationException if the expression cannot be evaluated
+ */
+ public function evaluateDirectly(Expr $expr) {
+ return $this->evaluate($expr);
+ }
+
+ /** @return mixed */
+ private function evaluate(Expr $expr) {
+ if ($expr instanceof Scalar\Int_
+ || $expr instanceof Scalar\Float_
+ || $expr instanceof Scalar\String_
+ ) {
+ return $expr->value;
+ }
+
+ if ($expr instanceof Expr\Array_) {
+ return $this->evaluateArray($expr);
+ }
+
+ // Unary operators
+ if ($expr instanceof Expr\UnaryPlus) {
+ return +$this->evaluate($expr->expr);
+ }
+ if ($expr instanceof Expr\UnaryMinus) {
+ return -$this->evaluate($expr->expr);
+ }
+ if ($expr instanceof Expr\BooleanNot) {
+ return !$this->evaluate($expr->expr);
+ }
+ if ($expr instanceof Expr\BitwiseNot) {
+ return ~$this->evaluate($expr->expr);
+ }
+
+ if ($expr instanceof Expr\BinaryOp) {
+ return $this->evaluateBinaryOp($expr);
+ }
+
+ if ($expr instanceof Expr\Ternary) {
+ return $this->evaluateTernary($expr);
+ }
+
+ if ($expr instanceof Expr\ArrayDimFetch && null !== $expr->dim) {
+ return $this->evaluate($expr->var)[$this->evaluate($expr->dim)];
+ }
+
+ if ($expr instanceof Expr\ConstFetch) {
+ return $this->evaluateConstFetch($expr);
+ }
+
+ return ($this->fallbackEvaluator)($expr);
+ }
+
+ private function evaluateArray(Expr\Array_ $expr): array {
+ $array = [];
+ foreach ($expr->items as $item) {
+ if (null !== $item->key) {
+ $array[$this->evaluate($item->key)] = $this->evaluate($item->value);
+ } elseif ($item->unpack) {
+ $array = array_merge($array, $this->evaluate($item->value));
+ } else {
+ $array[] = $this->evaluate($item->value);
+ }
+ }
+ return $array;
+ }
+
+ /** @return mixed */
+ private function evaluateTernary(Expr\Ternary $expr) {
+ if (null === $expr->if) {
+ return $this->evaluate($expr->cond) ?: $this->evaluate($expr->else);
+ }
+
+ return $this->evaluate($expr->cond)
+ ? $this->evaluate($expr->if)
+ : $this->evaluate($expr->else);
+ }
+
+ /** @return mixed */
+ private function evaluateBinaryOp(Expr\BinaryOp $expr) {
+ if ($expr instanceof Expr\BinaryOp\Coalesce
+ && $expr->left instanceof Expr\ArrayDimFetch
+ ) {
+ // This needs to be special cased to respect BP_VAR_IS fetch semantics
+ return $this->evaluate($expr->left->var)[$this->evaluate($expr->left->dim)]
+ ?? $this->evaluate($expr->right);
+ }
+
+ // The evaluate() calls are repeated in each branch, because some of the operators are
+ // short-circuiting and evaluating the RHS in advance may be illegal in that case
+ $l = $expr->left;
+ $r = $expr->right;
+ switch ($expr->getOperatorSigil()) {
+ case '&': return $this->evaluate($l) & $this->evaluate($r);
+ case '|': return $this->evaluate($l) | $this->evaluate($r);
+ case '^': return $this->evaluate($l) ^ $this->evaluate($r);
+ case '&&': return $this->evaluate($l) && $this->evaluate($r);
+ case '||': return $this->evaluate($l) || $this->evaluate($r);
+ case '??': return $this->evaluate($l) ?? $this->evaluate($r);
+ case '.': return $this->evaluate($l) . $this->evaluate($r);
+ case '/': return $this->evaluate($l) / $this->evaluate($r);
+ case '==': return $this->evaluate($l) == $this->evaluate($r);
+ case '>': return $this->evaluate($l) > $this->evaluate($r);
+ case '>=': return $this->evaluate($l) >= $this->evaluate($r);
+ case '===': return $this->evaluate($l) === $this->evaluate($r);
+ case 'and': return $this->evaluate($l) and $this->evaluate($r);
+ case 'or': return $this->evaluate($l) or $this->evaluate($r);
+ case 'xor': return $this->evaluate($l) xor $this->evaluate($r);
+ case '-': return $this->evaluate($l) - $this->evaluate($r);
+ case '%': return $this->evaluate($l) % $this->evaluate($r);
+ case '*': return $this->evaluate($l) * $this->evaluate($r);
+ case '!=': return $this->evaluate($l) != $this->evaluate($r);
+ case '!==': return $this->evaluate($l) !== $this->evaluate($r);
+ case '+': return $this->evaluate($l) + $this->evaluate($r);
+ case '**': return $this->evaluate($l) ** $this->evaluate($r);
+ case '<<': return $this->evaluate($l) << $this->evaluate($r);
+ case '>>': return $this->evaluate($l) >> $this->evaluate($r);
+ case '<': return $this->evaluate($l) < $this->evaluate($r);
+ case '<=': return $this->evaluate($l) <= $this->evaluate($r);
+ case '<=>': return $this->evaluate($l) <=> $this->evaluate($r);
+ }
+
+ throw new \Exception('Should not happen');
+ }
+
+ /** @return mixed */
+ private function evaluateConstFetch(Expr\ConstFetch $expr) {
+ $name = $expr->name->toLowerString();
+ switch ($name) {
+ case 'null': return null;
+ case 'false': return false;
+ case 'true': return true;
+ }
+
+ return ($this->fallbackEvaluator)($expr);
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Error.php b/vendor/nikic/php-parser/lib/PhpParser/Error.php
new file mode 100644
index 0000000..f81f0c4
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Error.php
@@ -0,0 +1,173 @@
+ */
+ protected array $attributes;
+
+ /**
+ * Creates an Exception signifying a parse error.
+ *
+ * @param string $message Error message
+ * @param array $attributes Attributes of node/token where error occurred
+ */
+ public function __construct(string $message, array $attributes = []) {
+ $this->rawMessage = $message;
+ $this->attributes = $attributes;
+ $this->updateMessage();
+ }
+
+ /**
+ * Gets the error message
+ *
+ * @return string Error message
+ */
+ public function getRawMessage(): string {
+ return $this->rawMessage;
+ }
+
+ /**
+ * Gets the line the error starts in.
+ *
+ * @return int Error start line
+ * @phpstan-return -1|positive-int
+ */
+ public function getStartLine(): int {
+ return $this->attributes['startLine'] ?? -1;
+ }
+
+ /**
+ * Gets the line the error ends in.
+ *
+ * @return int Error end line
+ * @phpstan-return -1|positive-int
+ */
+ public function getEndLine(): int {
+ return $this->attributes['endLine'] ?? -1;
+ }
+
+ /**
+ * Gets the attributes of the node/token the error occurred at.
+ *
+ * @return array
+ */
+ public function getAttributes(): array {
+ return $this->attributes;
+ }
+
+ /**
+ * Sets the attributes of the node/token the error occurred at.
+ *
+ * @param array $attributes
+ */
+ public function setAttributes(array $attributes): void {
+ $this->attributes = $attributes;
+ $this->updateMessage();
+ }
+
+ /**
+ * Sets the line of the PHP file the error occurred in.
+ *
+ * @param string $message Error message
+ */
+ public function setRawMessage(string $message): void {
+ $this->rawMessage = $message;
+ $this->updateMessage();
+ }
+
+ /**
+ * Sets the line the error starts in.
+ *
+ * @param int $line Error start line
+ */
+ public function setStartLine(int $line): void {
+ $this->attributes['startLine'] = $line;
+ $this->updateMessage();
+ }
+
+ /**
+ * Returns whether the error has start and end column information.
+ *
+ * For column information enable the startFilePos and endFilePos in the lexer options.
+ */
+ public function hasColumnInfo(): bool {
+ return isset($this->attributes['startFilePos'], $this->attributes['endFilePos']);
+ }
+
+ /**
+ * Gets the start column (1-based) into the line where the error started.
+ *
+ * @param string $code Source code of the file
+ */
+ public function getStartColumn(string $code): int {
+ if (!$this->hasColumnInfo()) {
+ throw new \RuntimeException('Error does not have column information');
+ }
+
+ return $this->toColumn($code, $this->attributes['startFilePos']);
+ }
+
+ /**
+ * Gets the end column (1-based) into the line where the error ended.
+ *
+ * @param string $code Source code of the file
+ */
+ public function getEndColumn(string $code): int {
+ if (!$this->hasColumnInfo()) {
+ throw new \RuntimeException('Error does not have column information');
+ }
+
+ return $this->toColumn($code, $this->attributes['endFilePos']);
+ }
+
+ /**
+ * Formats message including line and column information.
+ *
+ * @param string $code Source code associated with the error, for calculation of the columns
+ *
+ * @return string Formatted message
+ */
+ public function getMessageWithColumnInfo(string $code): string {
+ return sprintf(
+ '%s from %d:%d to %d:%d', $this->getRawMessage(),
+ $this->getStartLine(), $this->getStartColumn($code),
+ $this->getEndLine(), $this->getEndColumn($code)
+ );
+ }
+
+ /**
+ * Converts a file offset into a column.
+ *
+ * @param string $code Source code that $pos indexes into
+ * @param int $pos 0-based position in $code
+ *
+ * @return int 1-based column (relative to start of line)
+ */
+ private function toColumn(string $code, int $pos): int {
+ if ($pos > strlen($code)) {
+ throw new \RuntimeException('Invalid position information');
+ }
+
+ $lineStartPos = strrpos($code, "\n", $pos - strlen($code));
+ if (false === $lineStartPos) {
+ $lineStartPos = -1;
+ }
+
+ return $pos - $lineStartPos;
+ }
+
+ /**
+ * Updates the exception message after a change to rawMessage or rawLine.
+ */
+ protected function updateMessage(): void {
+ $this->message = $this->rawMessage;
+
+ if (-1 === $this->getStartLine()) {
+ $this->message .= ' on unknown line';
+ } else {
+ $this->message .= ' on line ' . $this->getStartLine();
+ }
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php b/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php
new file mode 100644
index 0000000..51ad730
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php
@@ -0,0 +1,12 @@
+errors[] = $error;
+ }
+
+ /**
+ * Get collected errors.
+ *
+ * @return Error[]
+ */
+ public function getErrors(): array {
+ return $this->errors;
+ }
+
+ /**
+ * Check whether there are any errors.
+ */
+ public function hasErrors(): bool {
+ return !empty($this->errors);
+ }
+
+ /**
+ * Reset/clear collected errors.
+ */
+ public function clearErrors(): void {
+ $this->errors = [];
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php b/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php
new file mode 100644
index 0000000..dff33dd
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php
@@ -0,0 +1,17 @@
+type = $type;
+ $this->old = $old;
+ $this->new = $new;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php b/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php
new file mode 100644
index 0000000..253e175
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php
@@ -0,0 +1,178 @@
+isEqual = $isEqual;
+ }
+
+ /**
+ * Calculate diff (edit script) from $old to $new.
+ *
+ * @param T[] $old Original array
+ * @param T[] $new New array
+ *
+ * @return DiffElem[] Diff (edit script)
+ */
+ public function diff(array $old, array $new): array {
+ $old = \array_values($old);
+ $new = \array_values($new);
+ list($trace, $x, $y) = $this->calculateTrace($old, $new);
+ return $this->extractDiff($trace, $x, $y, $old, $new);
+ }
+
+ /**
+ * Calculate diff, including "replace" operations.
+ *
+ * If a sequence of remove operations is followed by the same number of add operations, these
+ * will be coalesced into replace operations.
+ *
+ * @param T[] $old Original array
+ * @param T[] $new New array
+ *
+ * @return DiffElem[] Diff (edit script), including replace operations
+ */
+ public function diffWithReplacements(array $old, array $new): array {
+ return $this->coalesceReplacements($this->diff($old, $new));
+ }
+
+ /**
+ * @param T[] $old
+ * @param T[] $new
+ * @return array{array>, int, int}
+ */
+ private function calculateTrace(array $old, array $new): array {
+ $n = \count($old);
+ $m = \count($new);
+ $max = $n + $m;
+ $v = [1 => 0];
+ $trace = [];
+ for ($d = 0; $d <= $max; $d++) {
+ $trace[] = $v;
+ for ($k = -$d; $k <= $d; $k += 2) {
+ if ($k === -$d || ($k !== $d && $v[$k - 1] < $v[$k + 1])) {
+ $x = $v[$k + 1];
+ } else {
+ $x = $v[$k - 1] + 1;
+ }
+
+ $y = $x - $k;
+ while ($x < $n && $y < $m && ($this->isEqual)($old[$x], $new[$y])) {
+ $x++;
+ $y++;
+ }
+
+ $v[$k] = $x;
+ if ($x >= $n && $y >= $m) {
+ return [$trace, $x, $y];
+ }
+ }
+ }
+ throw new \Exception('Should not happen');
+ }
+
+ /**
+ * @param array> $trace
+ * @param T[] $old
+ * @param T[] $new
+ * @return DiffElem[]
+ */
+ private function extractDiff(array $trace, int $x, int $y, array $old, array $new): array {
+ $result = [];
+ for ($d = \count($trace) - 1; $d >= 0; $d--) {
+ $v = $trace[$d];
+ $k = $x - $y;
+
+ if ($k === -$d || ($k !== $d && $v[$k - 1] < $v[$k + 1])) {
+ $prevK = $k + 1;
+ } else {
+ $prevK = $k - 1;
+ }
+
+ $prevX = $v[$prevK];
+ $prevY = $prevX - $prevK;
+
+ while ($x > $prevX && $y > $prevY) {
+ $result[] = new DiffElem(DiffElem::TYPE_KEEP, $old[$x - 1], $new[$y - 1]);
+ $x--;
+ $y--;
+ }
+
+ if ($d === 0) {
+ break;
+ }
+
+ while ($x > $prevX) {
+ $result[] = new DiffElem(DiffElem::TYPE_REMOVE, $old[$x - 1], null);
+ $x--;
+ }
+
+ while ($y > $prevY) {
+ $result[] = new DiffElem(DiffElem::TYPE_ADD, null, $new[$y - 1]);
+ $y--;
+ }
+ }
+ return array_reverse($result);
+ }
+
+ /**
+ * Coalesce equal-length sequences of remove+add into a replace operation.
+ *
+ * @param DiffElem[] $diff
+ * @return DiffElem[]
+ */
+ private function coalesceReplacements(array $diff): array {
+ $newDiff = [];
+ $c = \count($diff);
+ for ($i = 0; $i < $c; $i++) {
+ $diffType = $diff[$i]->type;
+ if ($diffType !== DiffElem::TYPE_REMOVE) {
+ $newDiff[] = $diff[$i];
+ continue;
+ }
+
+ $j = $i;
+ while ($j < $c && $diff[$j]->type === DiffElem::TYPE_REMOVE) {
+ $j++;
+ }
+
+ $k = $j;
+ while ($k < $c && $diff[$k]->type === DiffElem::TYPE_ADD) {
+ $k++;
+ }
+
+ if ($j - $i === $k - $j) {
+ $len = $j - $i;
+ for ($n = 0; $n < $len; $n++) {
+ $newDiff[] = new DiffElem(
+ DiffElem::TYPE_REPLACE, $diff[$i + $n]->old, $diff[$j + $n]->new
+ );
+ }
+ } else {
+ for (; $i < $k; $i++) {
+ $newDiff[] = $diff[$i];
+ }
+ }
+ $i = $k - 1;
+ }
+ return $newDiff;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php b/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php
new file mode 100644
index 0000000..b30a99a
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php
@@ -0,0 +1,71 @@
+ $attributes Attributes
+ */
+ public function __construct(
+ array $attrGroups, int $flags, array $args, ?Node\Name $extends, array $implements,
+ array $stmts, array $attributes
+ ) {
+ parent::__construct($attributes);
+ $this->attrGroups = $attrGroups;
+ $this->flags = $flags;
+ $this->args = $args;
+ $this->extends = $extends;
+ $this->implements = $implements;
+ $this->stmts = $stmts;
+ }
+
+ public static function fromNewNode(Expr\New_ $newNode): self {
+ $class = $newNode->class;
+ assert($class instanceof Node\Stmt\Class_);
+ // We don't assert that $class->name is null here, to allow consumers to assign unique names
+ // to anonymous classes for their own purposes. We simplify ignore the name here.
+ return new self(
+ $class->attrGroups, $class->flags, $newNode->args, $class->extends, $class->implements,
+ $class->stmts, $newNode->getAttributes()
+ );
+ }
+
+ public function getType(): string {
+ return 'Expr_PrintableNewAnonClass';
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrGroups', 'flags', 'args', 'extends', 'implements', 'stmts'];
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php b/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php
new file mode 100644
index 0000000..36022d0
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php
@@ -0,0 +1,237 @@
+= 80000) {
+ class TokenPolyfill extends \PhpToken {
+ }
+ return;
+}
+
+/**
+ * This is a polyfill for the PhpToken class introduced in PHP 8.0. We do not actually polyfill
+ * PhpToken, because composer might end up picking a different polyfill implementation, which does
+ * not meet our requirements.
+ *
+ * @internal
+ */
+class TokenPolyfill {
+ /** @var int The ID of the token. Either a T_* constant of a character code < 256. */
+ public int $id;
+ /** @var string The textual content of the token. */
+ public string $text;
+ /** @var int The 1-based starting line of the token (or -1 if unknown). */
+ public int $line;
+ /** @var int The 0-based starting position of the token (or -1 if unknown). */
+ public int $pos;
+
+ /** @var array Tokens ignored by the PHP parser. */
+ private const IGNORABLE_TOKENS = [
+ \T_WHITESPACE => true,
+ \T_COMMENT => true,
+ \T_DOC_COMMENT => true,
+ \T_OPEN_TAG => true,
+ ];
+
+ /** @var array Tokens that may be part of a T_NAME_* identifier. */
+ private static array $identifierTokens;
+
+ /**
+ * Create a Token with the given ID and text, as well optional line and position information.
+ */
+ final public function __construct(int $id, string $text, int $line = -1, int $pos = -1) {
+ $this->id = $id;
+ $this->text = $text;
+ $this->line = $line;
+ $this->pos = $pos;
+ }
+
+ /**
+ * Get the name of the token. For single-char tokens this will be the token character.
+ * Otherwise it will be a T_* style name, or null if the token ID is unknown.
+ */
+ public function getTokenName(): ?string {
+ if ($this->id < 256) {
+ return \chr($this->id);
+ }
+
+ $name = token_name($this->id);
+ return $name === 'UNKNOWN' ? null : $name;
+ }
+
+ /**
+ * Check whether the token is of the given kind. The kind may be either an integer that matches
+ * the token ID, a string that matches the token text, or an array of integers/strings. In the
+ * latter case, the function returns true if any of the kinds in the array match.
+ *
+ * @param int|string|(int|string)[] $kind
+ */
+ public function is($kind): bool {
+ if (\is_int($kind)) {
+ return $this->id === $kind;
+ }
+ if (\is_string($kind)) {
+ return $this->text === $kind;
+ }
+ if (\is_array($kind)) {
+ foreach ($kind as $entry) {
+ if (\is_int($entry)) {
+ if ($this->id === $entry) {
+ return true;
+ }
+ } elseif (\is_string($entry)) {
+ if ($this->text === $entry) {
+ return true;
+ }
+ } else {
+ throw new \TypeError(
+ 'Argument #1 ($kind) must only have elements of type string|int, ' .
+ gettype($entry) . ' given');
+ }
+ }
+ return false;
+ }
+ throw new \TypeError(
+ 'Argument #1 ($kind) must be of type string|int|array, ' .gettype($kind) . ' given');
+ }
+
+ /**
+ * Check whether this token would be ignored by the PHP parser. Returns true for T_WHITESPACE,
+ * T_COMMENT, T_DOC_COMMENT and T_OPEN_TAG, and false for everything else.
+ */
+ public function isIgnorable(): bool {
+ return isset(self::IGNORABLE_TOKENS[$this->id]);
+ }
+
+ /**
+ * Return the textual content of the token.
+ */
+ public function __toString(): string {
+ return $this->text;
+ }
+
+ /**
+ * Tokenize the given source code and return an array of tokens.
+ *
+ * This performs certain canonicalizations to match the PHP 8.0 token format:
+ * * Bad characters are represented using T_BAD_CHARACTER rather than omitted.
+ * * T_COMMENT does not include trailing newlines, instead the newline is part of a following
+ * T_WHITESPACE token.
+ * * Namespaced names are represented using T_NAME_* tokens.
+ *
+ * @return static[]
+ */
+ public static function tokenize(string $code, int $flags = 0): array {
+ self::init();
+
+ $tokens = [];
+ $line = 1;
+ $pos = 0;
+ $origTokens = \token_get_all($code, $flags);
+
+ $numTokens = \count($origTokens);
+ for ($i = 0; $i < $numTokens; $i++) {
+ $token = $origTokens[$i];
+ if (\is_string($token)) {
+ if (\strlen($token) === 2) {
+ // b" and B" are tokenized as single-char tokens, even though they aren't.
+ $tokens[] = new static(\ord('"'), $token, $line, $pos);
+ $pos += 2;
+ } else {
+ $tokens[] = new static(\ord($token), $token, $line, $pos);
+ $pos++;
+ }
+ } else {
+ $id = $token[0];
+ $text = $token[1];
+
+ // Emulate PHP 8.0 comment format, which does not include trailing whitespace anymore.
+ if ($id === \T_COMMENT && \substr($text, 0, 2) !== '/*' &&
+ \preg_match('/(\r\n|\n|\r)$/D', $text, $matches)
+ ) {
+ $trailingNewline = $matches[0];
+ $text = \substr($text, 0, -\strlen($trailingNewline));
+ $tokens[] = new static($id, $text, $line, $pos);
+ $pos += \strlen($text);
+
+ if ($i + 1 < $numTokens && $origTokens[$i + 1][0] === \T_WHITESPACE) {
+ // Move trailing newline into following T_WHITESPACE token, if it already exists.
+ $origTokens[$i + 1][1] = $trailingNewline . $origTokens[$i + 1][1];
+ $origTokens[$i + 1][2]--;
+ } else {
+ // Otherwise, we need to create a new T_WHITESPACE token.
+ $tokens[] = new static(\T_WHITESPACE, $trailingNewline, $line, $pos);
+ $line++;
+ $pos += \strlen($trailingNewline);
+ }
+ continue;
+ }
+
+ // Emulate PHP 8.0 T_NAME_* tokens, by combining sequences of T_NS_SEPARATOR and
+ // T_STRING into a single token.
+ if (($id === \T_NS_SEPARATOR || isset(self::$identifierTokens[$id]))) {
+ $newText = $text;
+ $lastWasSeparator = $id === \T_NS_SEPARATOR;
+ for ($j = $i + 1; $j < $numTokens; $j++) {
+ if ($lastWasSeparator) {
+ if (!isset(self::$identifierTokens[$origTokens[$j][0]])) {
+ break;
+ }
+ $lastWasSeparator = false;
+ } else {
+ if ($origTokens[$j][0] !== \T_NS_SEPARATOR) {
+ break;
+ }
+ $lastWasSeparator = true;
+ }
+ $newText .= $origTokens[$j][1];
+ }
+ if ($lastWasSeparator) {
+ // Trailing separator is not part of the name.
+ $j--;
+ $newText = \substr($newText, 0, -1);
+ }
+ if ($j > $i + 1) {
+ if ($id === \T_NS_SEPARATOR) {
+ $id = \T_NAME_FULLY_QUALIFIED;
+ } elseif ($id === \T_NAMESPACE) {
+ $id = \T_NAME_RELATIVE;
+ } else {
+ $id = \T_NAME_QUALIFIED;
+ }
+ $tokens[] = new static($id, $newText, $line, $pos);
+ $pos += \strlen($newText);
+ $i = $j - 1;
+ continue;
+ }
+ }
+
+ $tokens[] = new static($id, $text, $line, $pos);
+ $line += \substr_count($text, "\n");
+ $pos += \strlen($text);
+ }
+ }
+ return $tokens;
+ }
+
+ /** Initialize private static state needed by tokenize(). */
+ private static function init(): void {
+ if (isset(self::$identifierTokens)) {
+ return;
+ }
+
+ // Based on semi_reserved production.
+ self::$identifierTokens = \array_fill_keys([
+ \T_STRING,
+ \T_STATIC, \T_ABSTRACT, \T_FINAL, \T_PRIVATE, \T_PROTECTED, \T_PUBLIC, \T_READONLY,
+ \T_INCLUDE, \T_INCLUDE_ONCE, \T_EVAL, \T_REQUIRE, \T_REQUIRE_ONCE, \T_LOGICAL_OR, \T_LOGICAL_XOR, \T_LOGICAL_AND,
+ \T_INSTANCEOF, \T_NEW, \T_CLONE, \T_EXIT, \T_IF, \T_ELSEIF, \T_ELSE, \T_ENDIF, \T_ECHO, \T_DO, \T_WHILE,
+ \T_ENDWHILE, \T_FOR, \T_ENDFOR, \T_FOREACH, \T_ENDFOREACH, \T_DECLARE, \T_ENDDECLARE, \T_AS, \T_TRY, \T_CATCH,
+ \T_FINALLY, \T_THROW, \T_USE, \T_INSTEADOF, \T_GLOBAL, \T_VAR, \T_UNSET, \T_ISSET, \T_EMPTY, \T_CONTINUE, \T_GOTO,
+ \T_FUNCTION, \T_CONST, \T_RETURN, \T_PRINT, \T_YIELD, \T_LIST, \T_SWITCH, \T_ENDSWITCH, \T_CASE, \T_DEFAULT,
+ \T_BREAK, \T_ARRAY, \T_CALLABLE, \T_EXTENDS, \T_IMPLEMENTS, \T_NAMESPACE, \T_TRAIT, \T_INTERFACE, \T_CLASS,
+ \T_CLASS_C, \T_TRAIT_C, \T_FUNC_C, \T_METHOD_C, \T_LINE, \T_FILE, \T_DIR, \T_NS_C, \T_HALT_COMPILER, \T_FN,
+ \T_MATCH,
+ ], true);
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php b/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php
new file mode 100644
index 0000000..cdbe2bd
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php
@@ -0,0 +1,282 @@
+tokens = $tokens;
+ $this->indentMap = $this->calcIndentMap($tabWidth);
+ }
+
+ /**
+ * Whether the given position is immediately surrounded by parenthesis.
+ *
+ * @param int $startPos Start position
+ * @param int $endPos End position
+ */
+ public function haveParens(int $startPos, int $endPos): bool {
+ return $this->haveTokenImmediatelyBefore($startPos, '(')
+ && $this->haveTokenImmediatelyAfter($endPos, ')');
+ }
+
+ /**
+ * Whether the given position is immediately surrounded by braces.
+ *
+ * @param int $startPos Start position
+ * @param int $endPos End position
+ */
+ public function haveBraces(int $startPos, int $endPos): bool {
+ return ($this->haveTokenImmediatelyBefore($startPos, '{')
+ || $this->haveTokenImmediatelyBefore($startPos, T_CURLY_OPEN))
+ && $this->haveTokenImmediatelyAfter($endPos, '}');
+ }
+
+ /**
+ * Check whether the position is directly preceded by a certain token type.
+ *
+ * During this check whitespace and comments are skipped.
+ *
+ * @param int $pos Position before which the token should occur
+ * @param int|string $expectedTokenType Token to check for
+ *
+ * @return bool Whether the expected token was found
+ */
+ public function haveTokenImmediatelyBefore(int $pos, $expectedTokenType): bool {
+ $tokens = $this->tokens;
+ $pos--;
+ for (; $pos >= 0; $pos--) {
+ $token = $tokens[$pos];
+ if ($token->is($expectedTokenType)) {
+ return true;
+ }
+ if (!$token->isIgnorable()) {
+ break;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Check whether the position is directly followed by a certain token type.
+ *
+ * During this check whitespace and comments are skipped.
+ *
+ * @param int $pos Position after which the token should occur
+ * @param int|string $expectedTokenType Token to check for
+ *
+ * @return bool Whether the expected token was found
+ */
+ public function haveTokenImmediatelyAfter(int $pos, $expectedTokenType): bool {
+ $tokens = $this->tokens;
+ $pos++;
+ for ($c = \count($tokens); $pos < $c; $pos++) {
+ $token = $tokens[$pos];
+ if ($token->is($expectedTokenType)) {
+ return true;
+ }
+ if (!$token->isIgnorable()) {
+ break;
+ }
+ }
+ return false;
+ }
+
+ /** @param int|string|(int|string)[] $skipTokenType */
+ public function skipLeft(int $pos, $skipTokenType): int {
+ $tokens = $this->tokens;
+
+ $pos = $this->skipLeftWhitespace($pos);
+ if ($skipTokenType === \T_WHITESPACE) {
+ return $pos;
+ }
+
+ if (!$tokens[$pos]->is($skipTokenType)) {
+ // Shouldn't happen. The skip token MUST be there
+ throw new \Exception('Encountered unexpected token');
+ }
+ $pos--;
+
+ return $this->skipLeftWhitespace($pos);
+ }
+
+ /** @param int|string|(int|string)[] $skipTokenType */
+ public function skipRight(int $pos, $skipTokenType): int {
+ $tokens = $this->tokens;
+
+ $pos = $this->skipRightWhitespace($pos);
+ if ($skipTokenType === \T_WHITESPACE) {
+ return $pos;
+ }
+
+ if (!$tokens[$pos]->is($skipTokenType)) {
+ // Shouldn't happen. The skip token MUST be there
+ throw new \Exception('Encountered unexpected token');
+ }
+ $pos++;
+
+ return $this->skipRightWhitespace($pos);
+ }
+
+ /**
+ * Return first non-whitespace token position smaller or equal to passed position.
+ *
+ * @param int $pos Token position
+ * @return int Non-whitespace token position
+ */
+ public function skipLeftWhitespace(int $pos): int {
+ $tokens = $this->tokens;
+ for (; $pos >= 0; $pos--) {
+ if (!$tokens[$pos]->isIgnorable()) {
+ break;
+ }
+ }
+ return $pos;
+ }
+
+ /**
+ * Return first non-whitespace position greater or equal to passed position.
+ *
+ * @param int $pos Token position
+ * @return int Non-whitespace token position
+ */
+ public function skipRightWhitespace(int $pos): int {
+ $tokens = $this->tokens;
+ for ($count = \count($tokens); $pos < $count; $pos++) {
+ if (!$tokens[$pos]->isIgnorable()) {
+ break;
+ }
+ }
+ return $pos;
+ }
+
+ /** @param int|string|(int|string)[] $findTokenType */
+ public function findRight(int $pos, $findTokenType): int {
+ $tokens = $this->tokens;
+ for ($count = \count($tokens); $pos < $count; $pos++) {
+ if ($tokens[$pos]->is($findTokenType)) {
+ return $pos;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Whether the given position range contains a certain token type.
+ *
+ * @param int $startPos Starting position (inclusive)
+ * @param int $endPos Ending position (exclusive)
+ * @param int|string $tokenType Token type to look for
+ * @return bool Whether the token occurs in the given range
+ */
+ public function haveTokenInRange(int $startPos, int $endPos, $tokenType): bool {
+ $tokens = $this->tokens;
+ for ($pos = $startPos; $pos < $endPos; $pos++) {
+ if ($tokens[$pos]->is($tokenType)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public function haveTagInRange(int $startPos, int $endPos): bool {
+ return $this->haveTokenInRange($startPos, $endPos, \T_OPEN_TAG)
+ || $this->haveTokenInRange($startPos, $endPos, \T_CLOSE_TAG);
+ }
+
+ /**
+ * Get indentation before token position.
+ *
+ * @param int $pos Token position
+ *
+ * @return int Indentation depth (in spaces)
+ */
+ public function getIndentationBefore(int $pos): int {
+ return $this->indentMap[$pos];
+ }
+
+ /**
+ * Get the code corresponding to a token offset range, optionally adjusted for indentation.
+ *
+ * @param int $from Token start position (inclusive)
+ * @param int $to Token end position (exclusive)
+ * @param int $indent By how much the code should be indented (can be negative as well)
+ *
+ * @return string Code corresponding to token range, adjusted for indentation
+ */
+ public function getTokenCode(int $from, int $to, int $indent): string {
+ $tokens = $this->tokens;
+ $result = '';
+ for ($pos = $from; $pos < $to; $pos++) {
+ $token = $tokens[$pos];
+ $id = $token->id;
+ $text = $token->text;
+ if ($id === \T_CONSTANT_ENCAPSED_STRING || $id === \T_ENCAPSED_AND_WHITESPACE) {
+ $result .= $text;
+ } else {
+ // TODO Handle non-space indentation
+ if ($indent < 0) {
+ $result .= str_replace("\n" . str_repeat(" ", -$indent), "\n", $text);
+ } elseif ($indent > 0) {
+ $result .= str_replace("\n", "\n" . str_repeat(" ", $indent), $text);
+ } else {
+ $result .= $text;
+ }
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * Precalculate the indentation at every token position.
+ *
+ * @return int[] Token position to indentation map
+ */
+ private function calcIndentMap(int $tabWidth): array {
+ $indentMap = [];
+ $indent = 0;
+ foreach ($this->tokens as $i => $token) {
+ $indentMap[] = $indent;
+
+ if ($token->id === \T_WHITESPACE) {
+ $content = $token->text;
+ $newlinePos = \strrpos($content, "\n");
+ if (false !== $newlinePos) {
+ $indent = $this->getIndent(\substr($content, $newlinePos + 1), $tabWidth);
+ } elseif ($i === 1 && $this->tokens[0]->id === \T_OPEN_TAG &&
+ $this->tokens[0]->text[\strlen($this->tokens[0]->text) - 1] === "\n") {
+ // Special case: Newline at the end of opening tag followed by whitespace.
+ $indent = $this->getIndent($content, $tabWidth);
+ }
+ }
+ }
+
+ // Add a sentinel for one past end of the file
+ $indentMap[] = $indent;
+
+ return $indentMap;
+ }
+
+ private function getIndent(string $ws, int $tabWidth): int {
+ $spaces = \substr_count($ws, " ");
+ $tabs = \substr_count($ws, "\t");
+ assert(\strlen($ws) === $spaces + $tabs);
+ return $spaces + $tabs * $tabWidth;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php b/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php
new file mode 100644
index 0000000..7be4142
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php
@@ -0,0 +1,108 @@
+[] Node type to reflection class map */
+ private array $reflectionClassCache;
+
+ /** @return mixed */
+ public function decode(string $json) {
+ $value = json_decode($json, true);
+ if (json_last_error()) {
+ throw new \RuntimeException('JSON decoding error: ' . json_last_error_msg());
+ }
+
+ return $this->decodeRecursive($value);
+ }
+
+ /**
+ * @param mixed $value
+ * @return mixed
+ */
+ private function decodeRecursive($value) {
+ if (\is_array($value)) {
+ if (isset($value['nodeType'])) {
+ if ($value['nodeType'] === 'Comment' || $value['nodeType'] === 'Comment_Doc') {
+ return $this->decodeComment($value);
+ }
+ return $this->decodeNode($value);
+ }
+ return $this->decodeArray($value);
+ }
+ return $value;
+ }
+
+ private function decodeArray(array $array): array {
+ $decodedArray = [];
+ foreach ($array as $key => $value) {
+ $decodedArray[$key] = $this->decodeRecursive($value);
+ }
+ return $decodedArray;
+ }
+
+ private function decodeNode(array $value): Node {
+ $nodeType = $value['nodeType'];
+ if (!\is_string($nodeType)) {
+ throw new \RuntimeException('Node type must be a string');
+ }
+
+ $reflectionClass = $this->reflectionClassFromNodeType($nodeType);
+ $node = $reflectionClass->newInstanceWithoutConstructor();
+
+ if (isset($value['attributes'])) {
+ if (!\is_array($value['attributes'])) {
+ throw new \RuntimeException('Attributes must be an array');
+ }
+
+ $node->setAttributes($this->decodeArray($value['attributes']));
+ }
+
+ foreach ($value as $name => $subNode) {
+ if ($name === 'nodeType' || $name === 'attributes') {
+ continue;
+ }
+
+ $node->$name = $this->decodeRecursive($subNode);
+ }
+
+ return $node;
+ }
+
+ private function decodeComment(array $value): Comment {
+ $className = $value['nodeType'] === 'Comment' ? Comment::class : Comment\Doc::class;
+ if (!isset($value['text'])) {
+ throw new \RuntimeException('Comment must have text');
+ }
+
+ return new $className(
+ $value['text'],
+ $value['line'] ?? -1, $value['filePos'] ?? -1, $value['tokenPos'] ?? -1,
+ $value['endLine'] ?? -1, $value['endFilePos'] ?? -1, $value['endTokenPos'] ?? -1
+ );
+ }
+
+ /** @return \ReflectionClass */
+ private function reflectionClassFromNodeType(string $nodeType): \ReflectionClass {
+ if (!isset($this->reflectionClassCache[$nodeType])) {
+ $className = $this->classNameFromNodeType($nodeType);
+ $this->reflectionClassCache[$nodeType] = new \ReflectionClass($className);
+ }
+ return $this->reflectionClassCache[$nodeType];
+ }
+
+ /** @return class-string */
+ private function classNameFromNodeType(string $nodeType): string {
+ $className = 'PhpParser\\Node\\' . strtr($nodeType, '_', '\\');
+ if (class_exists($className)) {
+ return $className;
+ }
+
+ $className .= '_';
+ if (class_exists($className)) {
+ return $className;
+ }
+
+ throw new \RuntimeException("Unknown node type \"$nodeType\"");
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer.php
new file mode 100644
index 0000000..5e2ece9
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer.php
@@ -0,0 +1,116 @@
+postprocessTokens($tokens, $errorHandler);
+
+ if (false !== $scream) {
+ ini_set('xdebug.scream', $scream);
+ }
+
+ return $tokens;
+ }
+
+ private function handleInvalidCharacter(Token $token, ErrorHandler $errorHandler): void {
+ $chr = $token->text;
+ if ($chr === "\0") {
+ // PHP cuts error message after null byte, so need special case
+ $errorMsg = 'Unexpected null byte';
+ } else {
+ $errorMsg = sprintf(
+ 'Unexpected character "%s" (ASCII %d)', $chr, ord($chr)
+ );
+ }
+
+ $errorHandler->handleError(new Error($errorMsg, [
+ 'startLine' => $token->line,
+ 'endLine' => $token->line,
+ 'startFilePos' => $token->pos,
+ 'endFilePos' => $token->pos,
+ ]));
+ }
+
+ private function isUnterminatedComment(Token $token): bool {
+ return $token->is([\T_COMMENT, \T_DOC_COMMENT])
+ && substr($token->text, 0, 2) === '/*'
+ && substr($token->text, -2) !== '*/';
+ }
+
+ /**
+ * @param list $tokens
+ */
+ protected function postprocessTokens(array &$tokens, ErrorHandler $errorHandler): void {
+ // This function reports errors (bad characters and unterminated comments) in the token
+ // array, and performs certain canonicalizations:
+ // * Use PHP 8.1 T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG and
+ // T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG tokens used to disambiguate intersection types.
+ // * Add a sentinel token with ID 0.
+
+ $numTokens = \count($tokens);
+ if ($numTokens === 0) {
+ // Empty input edge case: Just add the sentinel token.
+ $tokens[] = new Token(0, "\0", 1, 0);
+ return;
+ }
+
+ for ($i = 0; $i < $numTokens; $i++) {
+ $token = $tokens[$i];
+ if ($token->id === \T_BAD_CHARACTER) {
+ $this->handleInvalidCharacter($token, $errorHandler);
+ }
+
+ if ($token->id === \ord('&')) {
+ $next = $i + 1;
+ while (isset($tokens[$next]) && $tokens[$next]->id === \T_WHITESPACE) {
+ $next++;
+ }
+ $followedByVarOrVarArg = isset($tokens[$next]) &&
+ $tokens[$next]->is([\T_VARIABLE, \T_ELLIPSIS]);
+ $token->id = $followedByVarOrVarArg
+ ? \T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG
+ : \T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG;
+ }
+ }
+
+ // Check for unterminated comment
+ $lastToken = $tokens[$numTokens - 1];
+ if ($this->isUnterminatedComment($lastToken)) {
+ $errorHandler->handleError(new Error('Unterminated comment', [
+ 'startLine' => $lastToken->line,
+ 'endLine' => $lastToken->getEndLine(),
+ 'startFilePos' => $lastToken->pos,
+ 'endFilePos' => $lastToken->getEndPos(),
+ ]));
+ }
+
+ // Add sentinel token.
+ $tokens[] = new Token(0, "\0", $lastToken->getEndLine(), $lastToken->getEndPos());
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php
new file mode 100644
index 0000000..c9b3b6d
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php
@@ -0,0 +1,226 @@
+ */
+ private array $emulators = [];
+
+ private PhpVersion $targetPhpVersion;
+
+ private PhpVersion $hostPhpVersion;
+
+ /**
+ * @param PhpVersion|null $phpVersion PHP version to emulate. Defaults to newest supported.
+ */
+ public function __construct(?PhpVersion $phpVersion = null) {
+ $this->targetPhpVersion = $phpVersion ?? PhpVersion::getNewestSupported();
+ $this->hostPhpVersion = PhpVersion::getHostVersion();
+
+ $emulators = [
+ new MatchTokenEmulator(),
+ new NullsafeTokenEmulator(),
+ new AttributeEmulator(),
+ new EnumTokenEmulator(),
+ new ReadonlyTokenEmulator(),
+ new ExplicitOctalEmulator(),
+ new ReadonlyFunctionTokenEmulator(),
+ new PropertyTokenEmulator(),
+ new AsymmetricVisibilityTokenEmulator(),
+ ];
+
+ // Collect emulators that are relevant for the PHP version we're running
+ // and the PHP version we're targeting for emulation.
+ foreach ($emulators as $emulator) {
+ $emulatorPhpVersion = $emulator->getPhpVersion();
+ if ($this->isForwardEmulationNeeded($emulatorPhpVersion)) {
+ $this->emulators[] = $emulator;
+ } elseif ($this->isReverseEmulationNeeded($emulatorPhpVersion)) {
+ $this->emulators[] = new ReverseEmulator($emulator);
+ }
+ }
+ }
+
+ public function tokenize(string $code, ?ErrorHandler $errorHandler = null): array {
+ $emulators = array_filter($this->emulators, function ($emulator) use ($code) {
+ return $emulator->isEmulationNeeded($code);
+ });
+
+ if (empty($emulators)) {
+ // Nothing to emulate, yay
+ return parent::tokenize($code, $errorHandler);
+ }
+
+ if ($errorHandler === null) {
+ $errorHandler = new ErrorHandler\Throwing();
+ }
+
+ $this->patches = [];
+ foreach ($emulators as $emulator) {
+ $code = $emulator->preprocessCode($code, $this->patches);
+ }
+
+ $collector = new ErrorHandler\Collecting();
+ $tokens = parent::tokenize($code, $collector);
+ $this->sortPatches();
+ $tokens = $this->fixupTokens($tokens);
+
+ $errors = $collector->getErrors();
+ if (!empty($errors)) {
+ $this->fixupErrors($errors);
+ foreach ($errors as $error) {
+ $errorHandler->handleError($error);
+ }
+ }
+
+ foreach ($emulators as $emulator) {
+ $tokens = $emulator->emulate($code, $tokens);
+ }
+
+ return $tokens;
+ }
+
+ private function isForwardEmulationNeeded(PhpVersion $emulatorPhpVersion): bool {
+ return $this->hostPhpVersion->older($emulatorPhpVersion)
+ && $this->targetPhpVersion->newerOrEqual($emulatorPhpVersion);
+ }
+
+ private function isReverseEmulationNeeded(PhpVersion $emulatorPhpVersion): bool {
+ return $this->hostPhpVersion->newerOrEqual($emulatorPhpVersion)
+ && $this->targetPhpVersion->older($emulatorPhpVersion);
+ }
+
+ private function sortPatches(): void {
+ // Patches may be contributed by different emulators.
+ // Make sure they are sorted by increasing patch position.
+ usort($this->patches, function ($p1, $p2) {
+ return $p1[0] <=> $p2[0];
+ });
+ }
+
+ /**
+ * @param list $tokens
+ * @return list
+ */
+ private function fixupTokens(array $tokens): array {
+ if (\count($this->patches) === 0) {
+ return $tokens;
+ }
+
+ // Load first patch
+ $patchIdx = 0;
+ list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx];
+
+ // We use a manual loop over the tokens, because we modify the array on the fly
+ $posDelta = 0;
+ $lineDelta = 0;
+ for ($i = 0, $c = \count($tokens); $i < $c; $i++) {
+ $token = $tokens[$i];
+ $pos = $token->pos;
+ $token->pos += $posDelta;
+ $token->line += $lineDelta;
+ $localPosDelta = 0;
+ $len = \strlen($token->text);
+ while ($patchPos >= $pos && $patchPos < $pos + $len) {
+ $patchTextLen = \strlen($patchText);
+ if ($patchType === 'remove') {
+ if ($patchPos === $pos && $patchTextLen === $len) {
+ // Remove token entirely
+ array_splice($tokens, $i, 1, []);
+ $i--;
+ $c--;
+ } else {
+ // Remove from token string
+ $token->text = substr_replace(
+ $token->text, '', $patchPos - $pos + $localPosDelta, $patchTextLen
+ );
+ $localPosDelta -= $patchTextLen;
+ }
+ $lineDelta -= \substr_count($patchText, "\n");
+ } elseif ($patchType === 'add') {
+ // Insert into the token string
+ $token->text = substr_replace(
+ $token->text, $patchText, $patchPos - $pos + $localPosDelta, 0
+ );
+ $localPosDelta += $patchTextLen;
+ $lineDelta += \substr_count($patchText, "\n");
+ } elseif ($patchType === 'replace') {
+ // Replace inside the token string
+ $token->text = substr_replace(
+ $token->text, $patchText, $patchPos - $pos + $localPosDelta, $patchTextLen
+ );
+ } else {
+ assert(false);
+ }
+
+ // Fetch the next patch
+ $patchIdx++;
+ if ($patchIdx >= \count($this->patches)) {
+ // No more patches. However, we still need to adjust position.
+ $patchPos = \PHP_INT_MAX;
+ break;
+ }
+
+ list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx];
+ }
+
+ $posDelta += $localPosDelta;
+ }
+ return $tokens;
+ }
+
+ /**
+ * Fixup line and position information in errors.
+ *
+ * @param Error[] $errors
+ */
+ private function fixupErrors(array $errors): void {
+ foreach ($errors as $error) {
+ $attrs = $error->getAttributes();
+
+ $posDelta = 0;
+ $lineDelta = 0;
+ foreach ($this->patches as $patch) {
+ list($patchPos, $patchType, $patchText) = $patch;
+ if ($patchPos >= $attrs['startFilePos']) {
+ // No longer relevant
+ break;
+ }
+
+ if ($patchType === 'add') {
+ $posDelta += strlen($patchText);
+ $lineDelta += substr_count($patchText, "\n");
+ } elseif ($patchType === 'remove') {
+ $posDelta -= strlen($patchText);
+ $lineDelta -= substr_count($patchText, "\n");
+ }
+ }
+
+ $attrs['startFilePos'] += $posDelta;
+ $attrs['endFilePos'] += $posDelta;
+ $attrs['startLine'] += $lineDelta;
+ $attrs['endLine'] += $lineDelta;
+ $error->setAttributes($attrs);
+ }
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php
new file mode 100644
index 0000000..084bb75
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php
@@ -0,0 +1,93 @@
+ \T_PUBLIC_SET,
+ \T_PROTECTED => \T_PROTECTED_SET,
+ \T_PRIVATE => \T_PRIVATE_SET,
+ ];
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
+ $token = $tokens[$i];
+ if (isset($map[$token->id]) && $i + 3 < $c && $tokens[$i + 1]->text === '(' &&
+ $tokens[$i + 2]->id === \T_STRING && \strtolower($tokens[$i + 2]->text) === 'set' &&
+ $tokens[$i + 3]->text === ')' &&
+ $this->isKeywordContext($tokens, $i)
+ ) {
+ array_splice($tokens, $i, 4, [
+ new Token(
+ $map[$token->id], $token->text . '(' . $tokens[$i + 2]->text . ')',
+ $token->line, $token->pos),
+ ]);
+ $c -= 3;
+ }
+ }
+
+ return $tokens;
+ }
+
+ public function reverseEmulate(string $code, array $tokens): array {
+ $reverseMap = [
+ \T_PUBLIC_SET => \T_PUBLIC,
+ \T_PROTECTED_SET => \T_PROTECTED,
+ \T_PRIVATE_SET => \T_PRIVATE,
+ ];
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
+ $token = $tokens[$i];
+ if (isset($reverseMap[$token->id]) &&
+ \preg_match('/(public|protected|private)\((set)\)/i', $token->text, $matches)
+ ) {
+ [, $modifier, $set] = $matches;
+ $modifierLen = \strlen($modifier);
+ array_splice($tokens, $i, 1, [
+ new Token($reverseMap[$token->id], $modifier, $token->line, $token->pos),
+ new Token(\ord('('), '(', $token->line, $token->pos + $modifierLen),
+ new Token(\T_STRING, $set, $token->line, $token->pos + $modifierLen + 1),
+ new Token(\ord(')'), ')', $token->line, $token->pos + $modifierLen + 4),
+ ]);
+ $i += 3;
+ $c += 3;
+ }
+ }
+
+ return $tokens;
+ }
+
+ /** @param Token[] $tokens */
+ protected function isKeywordContext(array $tokens, int $pos): bool {
+ $prevToken = $this->getPreviousNonSpaceToken($tokens, $pos);
+ if ($prevToken === null) {
+ return false;
+ }
+ return $prevToken->id !== \T_OBJECT_OPERATOR
+ && $prevToken->id !== \T_NULLSAFE_OBJECT_OPERATOR;
+ }
+
+ /** @param Token[] $tokens */
+ private function getPreviousNonSpaceToken(array $tokens, int $start): ?Token {
+ for ($i = $start - 1; $i >= 0; --$i) {
+ if ($tokens[$i]->id === T_WHITESPACE) {
+ continue;
+ }
+
+ return $tokens[$i];
+ }
+
+ return null;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php
new file mode 100644
index 0000000..2c12f33
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php
@@ -0,0 +1,49 @@
+text === '#' && isset($tokens[$i + 1]) && $tokens[$i + 1]->text === '[') {
+ array_splice($tokens, $i, 2, [
+ new Token(\T_ATTRIBUTE, '#[', $token->line, $token->pos),
+ ]);
+ $c--;
+ continue;
+ }
+ }
+
+ return $tokens;
+ }
+
+ public function reverseEmulate(string $code, array $tokens): array {
+ // TODO
+ return $tokens;
+ }
+
+ public function preprocessCode(string $code, array &$patches): string {
+ $pos = 0;
+ while (false !== $pos = strpos($code, '#[', $pos)) {
+ // Replace #[ with %[
+ $code[$pos] = '%';
+ $patches[] = [$pos, 'replace', '#'];
+ $pos += 2;
+ }
+ return $code;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php
new file mode 100644
index 0000000..5418f52
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php
@@ -0,0 +1,26 @@
+id === \T_WHITESPACE
+ && $tokens[$pos + 2]->id === \T_STRING;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php
new file mode 100644
index 0000000..9cadf42
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php
@@ -0,0 +1,45 @@
+id == \T_LNUMBER && $token->text === '0' &&
+ isset($tokens[$i + 1]) && $tokens[$i + 1]->id == \T_STRING &&
+ preg_match('/[oO][0-7]+(?:_[0-7]+)*/', $tokens[$i + 1]->text)
+ ) {
+ $tokenKind = $this->resolveIntegerOrFloatToken($tokens[$i + 1]->text);
+ array_splice($tokens, $i, 2, [
+ new Token($tokenKind, '0' . $tokens[$i + 1]->text, $token->line, $token->pos),
+ ]);
+ $c--;
+ }
+ }
+ return $tokens;
+ }
+
+ private function resolveIntegerOrFloatToken(string $str): int {
+ $str = substr($str, 1);
+ $str = str_replace('_', '', $str);
+ $num = octdec($str);
+ return is_float($num) ? \T_DNUMBER : \T_LNUMBER;
+ }
+
+ public function reverseEmulate(string $code, array $tokens): array {
+ // Explicit octals were not legal code previously, don't bother.
+ return $tokens;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php
new file mode 100644
index 0000000..066e7cd
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php
@@ -0,0 +1,60 @@
+getKeywordString()) !== false;
+ }
+
+ /** @param Token[] $tokens */
+ protected function isKeywordContext(array $tokens, int $pos): bool {
+ $prevToken = $this->getPreviousNonSpaceToken($tokens, $pos);
+ if ($prevToken === null) {
+ return false;
+ }
+ return $prevToken->id !== \T_OBJECT_OPERATOR
+ && $prevToken->id !== \T_NULLSAFE_OBJECT_OPERATOR;
+ }
+
+ public function emulate(string $code, array $tokens): array {
+ $keywordString = $this->getKeywordString();
+ foreach ($tokens as $i => $token) {
+ if ($token->id === T_STRING && strtolower($token->text) === $keywordString
+ && $this->isKeywordContext($tokens, $i)) {
+ $token->id = $this->getKeywordToken();
+ }
+ }
+
+ return $tokens;
+ }
+
+ /** @param Token[] $tokens */
+ private function getPreviousNonSpaceToken(array $tokens, int $start): ?Token {
+ for ($i = $start - 1; $i >= 0; --$i) {
+ if ($tokens[$i]->id === T_WHITESPACE) {
+ continue;
+ }
+
+ return $tokens[$i];
+ }
+
+ return null;
+ }
+
+ public function reverseEmulate(string $code, array $tokens): array {
+ $keywordToken = $this->getKeywordToken();
+ foreach ($tokens as $token) {
+ if ($token->id === $keywordToken) {
+ $token->id = \T_STRING;
+ }
+ }
+
+ return $tokens;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php
new file mode 100644
index 0000000..0fa5fbc
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php
@@ -0,0 +1,19 @@
+') !== false;
+ }
+
+ public function emulate(string $code, array $tokens): array {
+ // We need to manually iterate and manage a count because we'll change
+ // the tokens array on the way
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
+ $token = $tokens[$i];
+ if ($token->text === '?' && isset($tokens[$i + 1]) && $tokens[$i + 1]->id === \T_OBJECT_OPERATOR) {
+ array_splice($tokens, $i, 2, [
+ new Token(\T_NULLSAFE_OBJECT_OPERATOR, '?->', $token->line, $token->pos),
+ ]);
+ $c--;
+ continue;
+ }
+
+ // Handle ?-> inside encapsed string.
+ if ($token->id === \T_ENCAPSED_AND_WHITESPACE && isset($tokens[$i - 1])
+ && $tokens[$i - 1]->id === \T_VARIABLE
+ && preg_match('/^\?->([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)/', $token->text, $matches)
+ ) {
+ $replacement = [
+ new Token(\T_NULLSAFE_OBJECT_OPERATOR, '?->', $token->line, $token->pos),
+ new Token(\T_STRING, $matches[1], $token->line, $token->pos + 3),
+ ];
+ $matchLen = \strlen($matches[0]);
+ if ($matchLen !== \strlen($token->text)) {
+ $replacement[] = new Token(
+ \T_ENCAPSED_AND_WHITESPACE,
+ \substr($token->text, $matchLen),
+ $token->line, $token->pos + $matchLen
+ );
+ }
+ array_splice($tokens, $i, 1, $replacement);
+ $c += \count($replacement) - 1;
+ continue;
+ }
+ }
+
+ return $tokens;
+ }
+
+ public function reverseEmulate(string $code, array $tokens): array {
+ // ?-> was not valid code previously, don't bother.
+ return $tokens;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php
new file mode 100644
index 0000000..71b7fc2
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php
@@ -0,0 +1,19 @@
+text === '(' ||
+ ($tokens[$pos + 1]->id === \T_WHITESPACE &&
+ isset($tokens[$pos + 2]) &&
+ $tokens[$pos + 2]->text === '(')));
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php
new file mode 100644
index 0000000..851b5c4
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php
@@ -0,0 +1,37 @@
+emulator = $emulator;
+ }
+
+ public function getPhpVersion(): PhpVersion {
+ return $this->emulator->getPhpVersion();
+ }
+
+ public function isEmulationNeeded(string $code): bool {
+ return $this->emulator->isEmulationNeeded($code);
+ }
+
+ public function emulate(string $code, array $tokens): array {
+ return $this->emulator->reverseEmulate($code, $tokens);
+ }
+
+ public function reverseEmulate(string $code, array $tokens): array {
+ return $this->emulator->emulate($code, $tokens);
+ }
+
+ public function preprocessCode(string $code, array &$patches): string {
+ return $code;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php
new file mode 100644
index 0000000..fec2f19
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php
@@ -0,0 +1,30 @@
+ 'public',
+ self::PROTECTED => 'protected',
+ self::PRIVATE => 'private',
+ self::STATIC => 'static',
+ self::ABSTRACT => 'abstract',
+ self::FINAL => 'final',
+ self::READONLY => 'readonly',
+ self::PUBLIC_SET => 'public(set)',
+ self::PROTECTED_SET => 'protected(set)',
+ self::PRIVATE_SET => 'private(set)',
+ ];
+
+ public static function toString(int $modifier): string {
+ if (!isset(self::TO_STRING_MAP[$modifier])) {
+ throw new \InvalidArgumentException("Unknown modifier $modifier");
+ }
+ return self::TO_STRING_MAP[$modifier];
+ }
+
+ private static function isValidModifier(int $modifier): bool {
+ $isPow2 = ($modifier & ($modifier - 1)) == 0 && $modifier != 0;
+ return $isPow2 && $modifier <= self::PRIVATE_SET;
+ }
+
+ /**
+ * @internal
+ */
+ public static function verifyClassModifier(int $a, int $b): void {
+ assert(self::isValidModifier($b));
+ if (($a & $b) != 0) {
+ throw new Error(
+ 'Multiple ' . self::toString($b) . ' modifiers are not allowed');
+ }
+
+ if ($a & 48 && $b & 48) {
+ throw new Error('Cannot use the final modifier on an abstract class');
+ }
+ }
+
+ /**
+ * @internal
+ */
+ public static function verifyModifier(int $a, int $b): void {
+ assert(self::isValidModifier($b));
+ if (($a & Modifiers::VISIBILITY_MASK && $b & Modifiers::VISIBILITY_MASK) ||
+ ($a & Modifiers::VISIBILITY_SET_MASK && $b & Modifiers::VISIBILITY_SET_MASK)
+ ) {
+ throw new Error('Multiple access type modifiers are not allowed');
+ }
+
+ if (($a & $b) != 0) {
+ throw new Error(
+ 'Multiple ' . self::toString($b) . ' modifiers are not allowed');
+ }
+
+ if ($a & 48 && $b & 48) {
+ throw new Error('Cannot use the final modifier on an abstract class member');
+ }
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NameContext.php b/vendor/nikic/php-parser/lib/PhpParser/NameContext.php
new file mode 100644
index 0000000..2265ecc
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NameContext.php
@@ -0,0 +1,284 @@
+ [aliasName => originalName]] */
+ protected array $aliases = [];
+
+ /** @var Name[][] Same as $aliases but preserving original case */
+ protected array $origAliases = [];
+
+ /** @var ErrorHandler Error handler */
+ protected ErrorHandler $errorHandler;
+
+ /**
+ * Create a name context.
+ *
+ * @param ErrorHandler $errorHandler Error handling used to report errors
+ */
+ public function __construct(ErrorHandler $errorHandler) {
+ $this->errorHandler = $errorHandler;
+ }
+
+ /**
+ * Start a new namespace.
+ *
+ * This also resets the alias table.
+ *
+ * @param Name|null $namespace Null is the global namespace
+ */
+ public function startNamespace(?Name $namespace = null): void {
+ $this->namespace = $namespace;
+ $this->origAliases = $this->aliases = [
+ Stmt\Use_::TYPE_NORMAL => [],
+ Stmt\Use_::TYPE_FUNCTION => [],
+ Stmt\Use_::TYPE_CONSTANT => [],
+ ];
+ }
+
+ /**
+ * Add an alias / import.
+ *
+ * @param Name $name Original name
+ * @param string $aliasName Aliased name
+ * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_*
+ * @param array $errorAttrs Attributes to use to report an error
+ */
+ public function addAlias(Name $name, string $aliasName, int $type, array $errorAttrs = []): void {
+ // Constant names are case sensitive, everything else case insensitive
+ if ($type === Stmt\Use_::TYPE_CONSTANT) {
+ $aliasLookupName = $aliasName;
+ } else {
+ $aliasLookupName = strtolower($aliasName);
+ }
+
+ if (isset($this->aliases[$type][$aliasLookupName])) {
+ $typeStringMap = [
+ Stmt\Use_::TYPE_NORMAL => '',
+ Stmt\Use_::TYPE_FUNCTION => 'function ',
+ Stmt\Use_::TYPE_CONSTANT => 'const ',
+ ];
+
+ $this->errorHandler->handleError(new Error(
+ sprintf(
+ 'Cannot use %s%s as %s because the name is already in use',
+ $typeStringMap[$type], $name, $aliasName
+ ),
+ $errorAttrs
+ ));
+ return;
+ }
+
+ $this->aliases[$type][$aliasLookupName] = $name;
+ $this->origAliases[$type][$aliasName] = $name;
+ }
+
+ /**
+ * Get current namespace.
+ *
+ * @return null|Name Namespace (or null if global namespace)
+ */
+ public function getNamespace(): ?Name {
+ return $this->namespace;
+ }
+
+ /**
+ * Get resolved name.
+ *
+ * @param Name $name Name to resolve
+ * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_{FUNCTION|CONSTANT}
+ *
+ * @return null|Name Resolved name, or null if static resolution is not possible
+ */
+ public function getResolvedName(Name $name, int $type): ?Name {
+ // don't resolve special class names
+ if ($type === Stmt\Use_::TYPE_NORMAL && $name->isSpecialClassName()) {
+ if (!$name->isUnqualified()) {
+ $this->errorHandler->handleError(new Error(
+ sprintf("'\\%s' is an invalid class name", $name->toString()),
+ $name->getAttributes()
+ ));
+ }
+ return $name;
+ }
+
+ // fully qualified names are already resolved
+ if ($name->isFullyQualified()) {
+ return $name;
+ }
+
+ // Try to resolve aliases
+ if (null !== $resolvedName = $this->resolveAlias($name, $type)) {
+ return $resolvedName;
+ }
+
+ if ($type !== Stmt\Use_::TYPE_NORMAL && $name->isUnqualified()) {
+ if (null === $this->namespace) {
+ // outside of a namespace unaliased unqualified is same as fully qualified
+ return new FullyQualified($name, $name->getAttributes());
+ }
+
+ // Cannot resolve statically
+ return null;
+ }
+
+ // if no alias exists prepend current namespace
+ return FullyQualified::concat($this->namespace, $name, $name->getAttributes());
+ }
+
+ /**
+ * Get resolved class name.
+ *
+ * @param Name $name Class ame to resolve
+ *
+ * @return Name Resolved name
+ */
+ public function getResolvedClassName(Name $name): Name {
+ return $this->getResolvedName($name, Stmt\Use_::TYPE_NORMAL);
+ }
+
+ /**
+ * Get possible ways of writing a fully qualified name (e.g., by making use of aliases).
+ *
+ * @param string $name Fully-qualified name (without leading namespace separator)
+ * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_*
+ *
+ * @return Name[] Possible representations of the name
+ */
+ public function getPossibleNames(string $name, int $type): array {
+ $lcName = strtolower($name);
+
+ if ($type === Stmt\Use_::TYPE_NORMAL) {
+ // self, parent and static must always be unqualified
+ if ($lcName === "self" || $lcName === "parent" || $lcName === "static") {
+ return [new Name($name)];
+ }
+ }
+
+ // Collect possible ways to write this name, starting with the fully-qualified name
+ $possibleNames = [new FullyQualified($name)];
+
+ if (null !== $nsRelativeName = $this->getNamespaceRelativeName($name, $lcName, $type)) {
+ // Make sure there is no alias that makes the normally namespace-relative name
+ // into something else
+ if (null === $this->resolveAlias($nsRelativeName, $type)) {
+ $possibleNames[] = $nsRelativeName;
+ }
+ }
+
+ // Check for relevant namespace use statements
+ foreach ($this->origAliases[Stmt\Use_::TYPE_NORMAL] as $alias => $orig) {
+ $lcOrig = $orig->toLowerString();
+ if (0 === strpos($lcName, $lcOrig . '\\')) {
+ $possibleNames[] = new Name($alias . substr($name, strlen($lcOrig)));
+ }
+ }
+
+ // Check for relevant type-specific use statements
+ foreach ($this->origAliases[$type] as $alias => $orig) {
+ if ($type === Stmt\Use_::TYPE_CONSTANT) {
+ // Constants are complicated-sensitive
+ $normalizedOrig = $this->normalizeConstName($orig->toString());
+ if ($normalizedOrig === $this->normalizeConstName($name)) {
+ $possibleNames[] = new Name($alias);
+ }
+ } else {
+ // Everything else is case-insensitive
+ if ($orig->toLowerString() === $lcName) {
+ $possibleNames[] = new Name($alias);
+ }
+ }
+ }
+
+ return $possibleNames;
+ }
+
+ /**
+ * Get shortest representation of this fully-qualified name.
+ *
+ * @param string $name Fully-qualified name (without leading namespace separator)
+ * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_*
+ *
+ * @return Name Shortest representation
+ */
+ public function getShortName(string $name, int $type): Name {
+ $possibleNames = $this->getPossibleNames($name, $type);
+
+ // Find shortest name
+ $shortestName = null;
+ $shortestLength = \INF;
+ foreach ($possibleNames as $possibleName) {
+ $length = strlen($possibleName->toCodeString());
+ if ($length < $shortestLength) {
+ $shortestName = $possibleName;
+ $shortestLength = $length;
+ }
+ }
+
+ return $shortestName;
+ }
+
+ private function resolveAlias(Name $name, int $type): ?FullyQualified {
+ $firstPart = $name->getFirst();
+
+ if ($name->isQualified()) {
+ // resolve aliases for qualified names, always against class alias table
+ $checkName = strtolower($firstPart);
+ if (isset($this->aliases[Stmt\Use_::TYPE_NORMAL][$checkName])) {
+ $alias = $this->aliases[Stmt\Use_::TYPE_NORMAL][$checkName];
+ return FullyQualified::concat($alias, $name->slice(1), $name->getAttributes());
+ }
+ } elseif ($name->isUnqualified()) {
+ // constant aliases are case-sensitive, function aliases case-insensitive
+ $checkName = $type === Stmt\Use_::TYPE_CONSTANT ? $firstPart : strtolower($firstPart);
+ if (isset($this->aliases[$type][$checkName])) {
+ // resolve unqualified aliases
+ return new FullyQualified($this->aliases[$type][$checkName], $name->getAttributes());
+ }
+ }
+
+ // No applicable aliases
+ return null;
+ }
+
+ private function getNamespaceRelativeName(string $name, string $lcName, int $type): ?Name {
+ if (null === $this->namespace) {
+ return new Name($name);
+ }
+
+ if ($type === Stmt\Use_::TYPE_CONSTANT) {
+ // The constants true/false/null always resolve to the global symbols, even inside a
+ // namespace, so they may be used without qualification
+ if ($lcName === "true" || $lcName === "false" || $lcName === "null") {
+ return new Name($name);
+ }
+ }
+
+ $namespacePrefix = strtolower($this->namespace . '\\');
+ if (0 === strpos($lcName, $namespacePrefix)) {
+ return new Name(substr($name, strlen($namespacePrefix)));
+ }
+
+ return null;
+ }
+
+ private function normalizeConstName(string $name): string {
+ $nsSep = strrpos($name, '\\');
+ if (false === $nsSep) {
+ return $name;
+ }
+
+ // Constants have case-insensitive namespace and case-sensitive short-name
+ $ns = substr($name, 0, $nsSep);
+ $shortName = substr($name, $nsSep + 1);
+ return strtolower($ns) . '\\' . $shortName;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node.php b/vendor/nikic/php-parser/lib/PhpParser/Node.php
new file mode 100644
index 0000000..fd2a9b7
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node.php
@@ -0,0 +1,150 @@
+
+ */
+ public function getAttributes(): array;
+
+ /**
+ * Replaces all the attributes of this node.
+ *
+ * @param array $attributes
+ */
+ public function setAttributes(array $attributes): void;
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php
new file mode 100644
index 0000000..6680efa
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php
@@ -0,0 +1,44 @@
+ $attributes Additional attributes
+ * @param Identifier|null $name Parameter name (for named parameters)
+ */
+ public function __construct(
+ Expr $value, bool $byRef = false, bool $unpack = false, array $attributes = [],
+ ?Identifier $name = null
+ ) {
+ $this->attributes = $attributes;
+ $this->name = $name;
+ $this->value = $value;
+ $this->byRef = $byRef;
+ $this->unpack = $unpack;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['name', 'value', 'byRef', 'unpack'];
+ }
+
+ public function getType(): string {
+ return 'Arg';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php b/vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php
new file mode 100644
index 0000000..fa1cff5
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php
@@ -0,0 +1,43 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $value, ?Expr $key = null, bool $byRef = false, array $attributes = [], bool $unpack = false) {
+ $this->attributes = $attributes;
+ $this->key = $key;
+ $this->value = $value;
+ $this->byRef = $byRef;
+ $this->unpack = $unpack;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['key', 'value', 'byRef', 'unpack'];
+ }
+
+ public function getType(): string {
+ return 'ArrayItem';
+ }
+}
+
+// @deprecated compatibility alias
+class_alias(ArrayItem::class, Expr\ArrayItem::class);
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php
new file mode 100644
index 0000000..9d89243
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php
@@ -0,0 +1,33 @@
+ Attribute arguments */
+ public array $args;
+
+ /**
+ * @param Node\Name $name Attribute name
+ * @param list $args Attribute arguments
+ * @param array $attributes Additional node attributes
+ */
+ public function __construct(Name $name, array $args = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->name = $name;
+ $this->args = $args;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['name', 'args'];
+ }
+
+ public function getType(): string {
+ return 'Attribute';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php b/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php
new file mode 100644
index 0000000..b9eb588
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php
@@ -0,0 +1,27 @@
+ $attributes Additional node attributes
+ */
+ public function __construct(array $attrs, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->attrs = $attrs;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrs'];
+ }
+
+ public function getType(): string {
+ return 'AttributeGroup';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php b/vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php
new file mode 100644
index 0000000..e313280
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php
@@ -0,0 +1,36 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr\Variable $var, bool $byRef = false, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->var = $var;
+ $this->byRef = $byRef;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['var', 'byRef'];
+ }
+
+ public function getType(): string {
+ return 'ClosureUse';
+ }
+}
+
+// @deprecated compatibility alias
+class_alias(ClosureUse::class, Expr\ClosureUse::class);
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php b/vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php
new file mode 100644
index 0000000..05a5e5e
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php
@@ -0,0 +1,13 @@
+ $attributes Additional attributes
+ */
+ public function __construct($name, Expr $value, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
+ $this->value = $value;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['name', 'value'];
+ }
+
+ public function getType(): string {
+ return 'Const';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php b/vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php
new file mode 100644
index 0000000..55c1fe4
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php
@@ -0,0 +1,37 @@
+value pair node.
+ *
+ * @param string|Node\Identifier $key Key
+ * @param Node\Expr $value Value
+ * @param array $attributes Additional attributes
+ */
+ public function __construct($key, Node\Expr $value, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->key = \is_string($key) ? new Node\Identifier($key) : $key;
+ $this->value = $value;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['key', 'value'];
+ }
+
+ public function getType(): string {
+ return 'DeclareItem';
+ }
+}
+
+// @deprecated compatibility alias
+class_alias(DeclareItem::class, Stmt\DeclareDeclare::class);
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php
new file mode 100644
index 0000000..8b7dbb6
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php
@@ -0,0 +1,8 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $var, ?Expr $dim = null, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->var = $var;
+ $this->dim = $dim;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['var', 'dim'];
+ }
+
+ public function getType(): string {
+ return 'Expr_ArrayDimFetch';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php
new file mode 100644
index 0000000..be9d070
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php
@@ -0,0 +1,11 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $items = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->items = $items;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['items'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Array';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php
new file mode 100644
index 0000000..0e98ce9
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php
@@ -0,0 +1,84 @@
+ false : Whether the closure is static
+ * 'byRef' => false : Whether to return by reference
+ * 'params' => array() : Parameters
+ * 'returnType' => null : Return type
+ * 'attrGroups' => array() : PHP attribute groups
+ * @param array $attributes Additional attributes
+ */
+ public function __construct(array $subNodes, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->static = $subNodes['static'] ?? false;
+ $this->byRef = $subNodes['byRef'] ?? false;
+ $this->params = $subNodes['params'] ?? [];
+ $this->returnType = $subNodes['returnType'] ?? null;
+ $this->expr = $subNodes['expr'];
+ $this->attrGroups = $subNodes['attrGroups'] ?? [];
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrGroups', 'static', 'byRef', 'params', 'returnType', 'expr'];
+ }
+
+ public function returnsByRef(): bool {
+ return $this->byRef;
+ }
+
+ public function getParams(): array {
+ return $this->params;
+ }
+
+ public function getReturnType() {
+ return $this->returnType;
+ }
+
+ public function getAttrGroups(): array {
+ return $this->attrGroups;
+ }
+
+ /**
+ * @return Node\Stmt\Return_[]
+ */
+ public function getStmts(): array {
+ return [new Node\Stmt\Return_($this->expr)];
+ }
+
+ public function getType(): string {
+ return 'Expr_ArrowFunction';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php
new file mode 100644
index 0000000..dcbf84d
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php
@@ -0,0 +1,33 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $var, Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->var = $var;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['var', 'expr'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Assign';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php
new file mode 100644
index 0000000..5209a64
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $var, Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->var = $var;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['var', 'expr'];
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php
new file mode 100644
index 0000000..4f3623f
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php
@@ -0,0 +1,11 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $var, Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->var = $var;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['var', 'expr'];
+ }
+
+ public function getType(): string {
+ return 'Expr_AssignRef';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php
new file mode 100644
index 0000000..1b92bd4
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php
@@ -0,0 +1,37 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $left, Expr $right, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->left = $left;
+ $this->right = $right;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['left', 'right'];
+ }
+
+ /**
+ * Get the operator sigil for this binary operation.
+ *
+ * In the case there are multiple possible sigils for an operator, this method does not
+ * necessarily return the one used in the parsed code.
+ */
+ abstract public function getOperatorSigil(): string;
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php
new file mode 100644
index 0000000..5930c54
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php
@@ -0,0 +1,15 @@
+';
+ }
+
+ public function getType(): string {
+ return 'Expr_BinaryOp_Greater';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php
new file mode 100644
index 0000000..4d440b1
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php
@@ -0,0 +1,15 @@
+=';
+ }
+
+ public function getType(): string {
+ return 'Expr_BinaryOp_GreaterOrEqual';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php
new file mode 100644
index 0000000..e25d17c
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php
@@ -0,0 +1,15 @@
+>';
+ }
+
+ public function getType(): string {
+ return 'Expr_BinaryOp_ShiftRight';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php
new file mode 100644
index 0000000..01e9b23
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php
@@ -0,0 +1,15 @@
+';
+ }
+
+ public function getType(): string {
+ return 'Expr_BinaryOp_Spaceship';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php
new file mode 100644
index 0000000..b7175a7
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+
+ public function getType(): string {
+ return 'Expr_BitwiseNot';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php
new file mode 100644
index 0000000..c66d233
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+
+ public function getType(): string {
+ return 'Expr_BooleanNot';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php
new file mode 100644
index 0000000..2af2245
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php
@@ -0,0 +1,35 @@
+
+ */
+ abstract public function getRawArgs(): array;
+
+ /**
+ * Returns whether this call expression is actually a first class callable.
+ */
+ public function isFirstClassCallable(): bool {
+ $rawArgs = $this->getRawArgs();
+ return count($rawArgs) === 1 && current($rawArgs) instanceof VariadicPlaceholder;
+ }
+
+ /**
+ * Assert that this is not a first-class callable and return only ordinary Args.
+ *
+ * @return Arg[]
+ */
+ public function getArgs(): array {
+ assert(!$this->isFirstClassCallable());
+ return $this->getRawArgs();
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php
new file mode 100644
index 0000000..c2751de
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php
@@ -0,0 +1,25 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php
new file mode 100644
index 0000000..471cb82
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php
@@ -0,0 +1,11 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Node $class, $name, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->class = $class;
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['class', 'name'];
+ }
+
+ public function getType(): string {
+ return 'Expr_ClassConstFetch';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php
new file mode 100644
index 0000000..d85bc9a
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Clone';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php
new file mode 100644
index 0000000..0680446
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php
@@ -0,0 +1,86 @@
+ false : Whether the closure is static
+ * 'byRef' => false : Whether to return by reference
+ * 'params' => array(): Parameters
+ * 'uses' => array(): use()s
+ * 'returnType' => null : Return type
+ * 'stmts' => array(): Statements
+ * 'attrGroups' => array(): PHP attributes groups
+ * @param array $attributes Additional attributes
+ */
+ public function __construct(array $subNodes = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->static = $subNodes['static'] ?? false;
+ $this->byRef = $subNodes['byRef'] ?? false;
+ $this->params = $subNodes['params'] ?? [];
+ $this->uses = $subNodes['uses'] ?? [];
+ $this->returnType = $subNodes['returnType'] ?? null;
+ $this->stmts = $subNodes['stmts'] ?? [];
+ $this->attrGroups = $subNodes['attrGroups'] ?? [];
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrGroups', 'static', 'byRef', 'params', 'uses', 'returnType', 'stmts'];
+ }
+
+ public function returnsByRef(): bool {
+ return $this->byRef;
+ }
+
+ public function getParams(): array {
+ return $this->params;
+ }
+
+ public function getReturnType() {
+ return $this->returnType;
+ }
+
+ /** @return Node\Stmt[] */
+ public function getStmts(): array {
+ return $this->stmts;
+ }
+
+ public function getAttrGroups(): array {
+ return $this->attrGroups;
+ }
+
+ public function getType(): string {
+ return 'Expr_Closure';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php
new file mode 100644
index 0000000..b395617
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php
@@ -0,0 +1,11 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Name $name, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->name = $name;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['name'];
+ }
+
+ public function getType(): string {
+ return 'Expr_ConstFetch';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php
new file mode 100644
index 0000000..d2f3050
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Empty';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php
new file mode 100644
index 0000000..43010ac
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php
@@ -0,0 +1,30 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $attributes = []) {
+ $this->attributes = $attributes;
+ }
+
+ public function getSubNodeNames(): array {
+ return [];
+ }
+
+ public function getType(): string {
+ return 'Expr_Error';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php
new file mode 100644
index 0000000..32625a2
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+
+ public function getType(): string {
+ return 'Expr_ErrorSuppress';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php
new file mode 100644
index 0000000..5120b1b
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Eval';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php
new file mode 100644
index 0000000..cf00246
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php
@@ -0,0 +1,33 @@
+ $attributes Additional attributes
+ */
+ public function __construct(?Expr $expr = null, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Exit';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php
new file mode 100644
index 0000000..0b85840
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php
@@ -0,0 +1,38 @@
+ Arguments */
+ public array $args;
+
+ /**
+ * Constructs a function call node.
+ *
+ * @param Node\Name|Expr $name Function name
+ * @param array $args Arguments
+ * @param array $attributes Additional attributes
+ */
+ public function __construct(Node $name, array $args = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->name = $name;
+ $this->args = $args;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['name', 'args'];
+ }
+
+ public function getType(): string {
+ return 'Expr_FuncCall';
+ }
+
+ public function getRawArgs(): array {
+ return $this->args;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php
new file mode 100644
index 0000000..e1187b1
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php
@@ -0,0 +1,38 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $expr, int $type, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ $this->type = $type;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr', 'type'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Include';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php
new file mode 100644
index 0000000..a2783cb
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php
@@ -0,0 +1,35 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $expr, Node $class, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ $this->class = $class;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr', 'class'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Instanceof';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php
new file mode 100644
index 0000000..4f80fff
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $vars, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->vars = $vars;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['vars'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Isset';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php
new file mode 100644
index 0000000..496b7b3
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php
@@ -0,0 +1,34 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $items, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->items = $items;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['items'];
+ }
+
+ public function getType(): string {
+ return 'Expr_List';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php
new file mode 100644
index 0000000..cd028a2
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php
@@ -0,0 +1,32 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Node\Expr $cond, array $arms = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->cond = $cond;
+ $this->arms = $arms;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['cond', 'arms'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Match';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php
new file mode 100644
index 0000000..2703c75
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php
@@ -0,0 +1,45 @@
+ Arguments */
+ public array $args;
+
+ /**
+ * Constructs a function call node.
+ *
+ * @param Expr $var Variable holding object
+ * @param string|Identifier|Expr $name Method name
+ * @param array $args Arguments
+ * @param array $attributes Additional attributes
+ */
+ public function __construct(Expr $var, $name, array $args = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->var = $var;
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
+ $this->args = $args;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['var', 'name', 'args'];
+ }
+
+ public function getType(): string {
+ return 'Expr_MethodCall';
+ }
+
+ public function getRawArgs(): array {
+ return $this->args;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php
new file mode 100644
index 0000000..eedaaa1
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php
@@ -0,0 +1,40 @@
+ Arguments */
+ public array $args;
+
+ /**
+ * Constructs a function call node.
+ *
+ * @param Node\Name|Expr|Node\Stmt\Class_ $class Class name (or class node for anonymous classes)
+ * @param array $args Arguments
+ * @param array $attributes Additional attributes
+ */
+ public function __construct(Node $class, array $args = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->class = $class;
+ $this->args = $args;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['class', 'args'];
+ }
+
+ public function getType(): string {
+ return 'Expr_New';
+ }
+
+ public function getRawArgs(): array {
+ return $this->args;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php
new file mode 100644
index 0000000..a151f71
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php
@@ -0,0 +1,45 @@
+ Arguments */
+ public array $args;
+
+ /**
+ * Constructs a nullsafe method call node.
+ *
+ * @param Expr $var Variable holding object
+ * @param string|Identifier|Expr $name Method name
+ * @param array $args Arguments
+ * @param array $attributes Additional attributes
+ */
+ public function __construct(Expr $var, $name, array $args = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->var = $var;
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
+ $this->args = $args;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['var', 'name', 'args'];
+ }
+
+ public function getType(): string {
+ return 'Expr_NullsafeMethodCall';
+ }
+
+ public function getRawArgs(): array {
+ return $this->args;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php
new file mode 100644
index 0000000..6f73a16
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php
@@ -0,0 +1,35 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $var, $name, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->var = $var;
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['var', 'name'];
+ }
+
+ public function getType(): string {
+ return 'Expr_NullsafePropertyFetch';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php
new file mode 100644
index 0000000..3dca8fd
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $var, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->var = $var;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['var'];
+ }
+
+ public function getType(): string {
+ return 'Expr_PostDec';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php
new file mode 100644
index 0000000..bc990c3
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $var, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->var = $var;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['var'];
+ }
+
+ public function getType(): string {
+ return 'Expr_PostInc';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php
new file mode 100644
index 0000000..2f16873
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $var, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->var = $var;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['var'];
+ }
+
+ public function getType(): string {
+ return 'Expr_PreDec';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php
new file mode 100644
index 0000000..fd455f5
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $var, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->var = $var;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['var'];
+ }
+
+ public function getType(): string {
+ return 'Expr_PreInc';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php
new file mode 100644
index 0000000..6057476
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Print';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php
new file mode 100644
index 0000000..8c416a8
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php
@@ -0,0 +1,35 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $var, $name, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->var = $var;
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['var', 'name'];
+ }
+
+ public function getType(): string {
+ return 'Expr_PropertyFetch';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php
new file mode 100644
index 0000000..e400351
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php
@@ -0,0 +1,30 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $parts, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->parts = $parts;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['parts'];
+ }
+
+ public function getType(): string {
+ return 'Expr_ShellExec';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php
new file mode 100644
index 0000000..707f34b
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php
@@ -0,0 +1,45 @@
+ Arguments */
+ public array $args;
+
+ /**
+ * Constructs a static method call node.
+ *
+ * @param Node\Name|Expr $class Class name
+ * @param string|Identifier|Expr $name Method name
+ * @param array $args Arguments
+ * @param array $attributes Additional attributes
+ */
+ public function __construct(Node $class, $name, array $args = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->class = $class;
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
+ $this->args = $args;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['class', 'name', 'args'];
+ }
+
+ public function getType(): string {
+ return 'Expr_StaticCall';
+ }
+
+ public function getRawArgs(): array {
+ return $this->args;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php
new file mode 100644
index 0000000..4836a65
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php
@@ -0,0 +1,36 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Node $class, $name, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->class = $class;
+ $this->name = \is_string($name) ? new VarLikeIdentifier($name) : $name;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['class', 'name'];
+ }
+
+ public function getType(): string {
+ return 'Expr_StaticPropertyFetch';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php
new file mode 100644
index 0000000..d4837e6
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php
@@ -0,0 +1,37 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $cond, ?Expr $if, Expr $else, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->cond = $cond;
+ $this->if = $if;
+ $this->else = $else;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['cond', 'if', 'else'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Ternary';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php
new file mode 100644
index 0000000..ee49f83
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Node\Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Throw';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php
new file mode 100644
index 0000000..cd06f74
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+
+ public function getType(): string {
+ return 'Expr_UnaryMinus';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php
new file mode 100644
index 0000000..1b44f7b
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+
+ public function getType(): string {
+ return 'Expr_UnaryPlus';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php
new file mode 100644
index 0000000..bab7492
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct($name, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->name = $name;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['name'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Variable';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php
new file mode 100644
index 0000000..5cff88f
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+
+ public function getType(): string {
+ return 'Expr_YieldFrom';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php
new file mode 100644
index 0000000..bd81e69
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php
@@ -0,0 +1,33 @@
+ $attributes Additional attributes
+ */
+ public function __construct(?Expr $value = null, ?Expr $key = null, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->key = $key;
+ $this->value = $value;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['key', 'value'];
+ }
+
+ public function getType(): string {
+ return 'Expr_Yield';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php b/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php
new file mode 100644
index 0000000..58f653a
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php
@@ -0,0 +1,40 @@
+ */
+ private static array $specialClassNames = [
+ 'self' => true,
+ 'parent' => true,
+ 'static' => true,
+ ];
+
+ /**
+ * Constructs an identifier node.
+ *
+ * @param string $name Identifier as string
+ * @param array $attributes Additional attributes
+ */
+ public function __construct(string $name, array $attributes = []) {
+ if ($name === '') {
+ throw new \InvalidArgumentException('Identifier name cannot be empty');
+ }
+
+ $this->attributes = $attributes;
+ $this->name = $name;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['name'];
+ }
+
+ /**
+ * Get identifier as string.
+ *
+ * @psalm-return non-empty-string
+ * @return string Identifier as string.
+ */
+ public function toString(): string {
+ return $this->name;
+ }
+
+ /**
+ * Get lowercased identifier as string.
+ *
+ * @psalm-return non-empty-string&lowercase-string
+ * @return string Lowercased identifier as string
+ */
+ public function toLowerString(): string {
+ return strtolower($this->name);
+ }
+
+ /**
+ * Checks whether the identifier is a special class name (self, parent or static).
+ *
+ * @return bool Whether identifier is a special class name
+ */
+ public function isSpecialClassName(): bool {
+ return isset(self::$specialClassNames[strtolower($this->name)]);
+ }
+
+ /**
+ * Get identifier as string.
+ *
+ * @psalm-return non-empty-string
+ * @return string Identifier as string
+ */
+ public function __toString(): string {
+ return $this->name;
+ }
+
+ public function getType(): string {
+ return 'Identifier';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php b/vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php
new file mode 100644
index 0000000..576dac4
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php
@@ -0,0 +1,32 @@
+ $attributes Additional attributes
+ */
+ public function __construct(string $value, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->value = $value;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['value'];
+ }
+
+ public function getType(): string {
+ return 'InterpolatedStringPart';
+ }
+}
+
+// @deprecated compatibility alias
+class_alias(InterpolatedStringPart::class, Scalar\EncapsedStringPart::class);
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php b/vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php
new file mode 100644
index 0000000..3b39cf1
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php
@@ -0,0 +1,27 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $types, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->types = $types;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['types'];
+ }
+
+ public function getType(): string {
+ return 'IntersectionType';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php b/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php
new file mode 100644
index 0000000..2927f02
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php
@@ -0,0 +1,30 @@
+ */
+ public ?array $conds;
+ /** @var Node\Expr */
+ public Expr $body;
+
+ /**
+ * @param null|list $conds
+ */
+ public function __construct(?array $conds, Node\Expr $body, array $attributes = []) {
+ $this->conds = $conds;
+ $this->body = $body;
+ $this->attributes = $attributes;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['conds', 'body'];
+ }
+
+ public function getType(): string {
+ return 'MatchArm';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php
new file mode 100644
index 0000000..932080b
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php
@@ -0,0 +1,278 @@
+ */
+ private static array $specialClassNames = [
+ 'self' => true,
+ 'parent' => true,
+ 'static' => true,
+ ];
+
+ /**
+ * Constructs a name node.
+ *
+ * @param string|string[]|self $name Name as string, part array or Name instance (copy ctor)
+ * @param array $attributes Additional attributes
+ */
+ final public function __construct($name, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->name = self::prepareName($name);
+ }
+
+ public function getSubNodeNames(): array {
+ return ['name'];
+ }
+
+ /**
+ * Get parts of name (split by the namespace separator).
+ *
+ * @psalm-return non-empty-list
+ * @return string[] Parts of name
+ */
+ public function getParts(): array {
+ return \explode('\\', $this->name);
+ }
+
+ /**
+ * Gets the first part of the name, i.e. everything before the first namespace separator.
+ *
+ * @return string First part of the name
+ */
+ public function getFirst(): string {
+ if (false !== $pos = \strpos($this->name, '\\')) {
+ return \substr($this->name, 0, $pos);
+ }
+ return $this->name;
+ }
+
+ /**
+ * Gets the last part of the name, i.e. everything after the last namespace separator.
+ *
+ * @return string Last part of the name
+ */
+ public function getLast(): string {
+ if (false !== $pos = \strrpos($this->name, '\\')) {
+ return \substr($this->name, $pos + 1);
+ }
+ return $this->name;
+ }
+
+ /**
+ * Checks whether the name is unqualified. (E.g. Name)
+ *
+ * @return bool Whether the name is unqualified
+ */
+ public function isUnqualified(): bool {
+ return false === \strpos($this->name, '\\');
+ }
+
+ /**
+ * Checks whether the name is qualified. (E.g. Name\Name)
+ *
+ * @return bool Whether the name is qualified
+ */
+ public function isQualified(): bool {
+ return false !== \strpos($this->name, '\\');
+ }
+
+ /**
+ * Checks whether the name is fully qualified. (E.g. \Name)
+ *
+ * @return bool Whether the name is fully qualified
+ */
+ public function isFullyQualified(): bool {
+ return false;
+ }
+
+ /**
+ * Checks whether the name is explicitly relative to the current namespace. (E.g. namespace\Name)
+ *
+ * @return bool Whether the name is relative
+ */
+ public function isRelative(): bool {
+ return false;
+ }
+
+ /**
+ * Returns a string representation of the name itself, without taking the name type into
+ * account (e.g., not including a leading backslash for fully qualified names).
+ *
+ * @psalm-return non-empty-string
+ * @return string String representation
+ */
+ public function toString(): string {
+ return $this->name;
+ }
+
+ /**
+ * Returns a string representation of the name as it would occur in code (e.g., including
+ * leading backslash for fully qualified names.
+ *
+ * @psalm-return non-empty-string
+ * @return string String representation
+ */
+ public function toCodeString(): string {
+ return $this->toString();
+ }
+
+ /**
+ * Returns lowercased string representation of the name, without taking the name type into
+ * account (e.g., no leading backslash for fully qualified names).
+ *
+ * @psalm-return non-empty-string&lowercase-string
+ * @return string Lowercased string representation
+ */
+ public function toLowerString(): string {
+ return strtolower($this->name);
+ }
+
+ /**
+ * Checks whether the identifier is a special class name (self, parent or static).
+ *
+ * @return bool Whether identifier is a special class name
+ */
+ public function isSpecialClassName(): bool {
+ return isset(self::$specialClassNames[strtolower($this->name)]);
+ }
+
+ /**
+ * Returns a string representation of the name by imploding the namespace parts with the
+ * namespace separator.
+ *
+ * @psalm-return non-empty-string
+ * @return string String representation
+ */
+ public function __toString(): string {
+ return $this->name;
+ }
+
+ /**
+ * Gets a slice of a name (similar to array_slice).
+ *
+ * This method returns a new instance of the same type as the original and with the same
+ * attributes.
+ *
+ * If the slice is empty, null is returned. The null value will be correctly handled in
+ * concatenations using concat().
+ *
+ * Offset and length have the same meaning as in array_slice().
+ *
+ * @param int $offset Offset to start the slice at (may be negative)
+ * @param int|null $length Length of the slice (may be negative)
+ *
+ * @return static|null Sliced name
+ */
+ public function slice(int $offset, ?int $length = null) {
+ if ($offset === 1 && $length === null) {
+ // Short-circuit the common case.
+ if (false !== $pos = \strpos($this->name, '\\')) {
+ return new static(\substr($this->name, $pos + 1));
+ }
+ return null;
+ }
+
+ $parts = \explode('\\', $this->name);
+ $numParts = \count($parts);
+
+ $realOffset = $offset < 0 ? $offset + $numParts : $offset;
+ if ($realOffset < 0 || $realOffset > $numParts) {
+ throw new \OutOfBoundsException(sprintf('Offset %d is out of bounds', $offset));
+ }
+
+ if (null === $length) {
+ $realLength = $numParts - $realOffset;
+ } else {
+ $realLength = $length < 0 ? $length + $numParts - $realOffset : $length;
+ if ($realLength < 0 || $realLength > $numParts - $realOffset) {
+ throw new \OutOfBoundsException(sprintf('Length %d is out of bounds', $length));
+ }
+ }
+
+ if ($realLength === 0) {
+ // Empty slice is represented as null
+ return null;
+ }
+
+ return new static(array_slice($parts, $realOffset, $realLength), $this->attributes);
+ }
+
+ /**
+ * Concatenate two names, yielding a new Name instance.
+ *
+ * The type of the generated instance depends on which class this method is called on, for
+ * example Name\FullyQualified::concat() will yield a Name\FullyQualified instance.
+ *
+ * If one of the arguments is null, a new instance of the other name will be returned. If both
+ * arguments are null, null will be returned. As such, writing
+ * Name::concat($namespace, $shortName)
+ * where $namespace is a Name node or null will work as expected.
+ *
+ * @param string|string[]|self|null $name1 The first name
+ * @param string|string[]|self|null $name2 The second name
+ * @param array $attributes Attributes to assign to concatenated name
+ *
+ * @return static|null Concatenated name
+ */
+ public static function concat($name1, $name2, array $attributes = []) {
+ if (null === $name1 && null === $name2) {
+ return null;
+ }
+ if (null === $name1) {
+ return new static($name2, $attributes);
+ }
+ if (null === $name2) {
+ return new static($name1, $attributes);
+ } else {
+ return new static(
+ self::prepareName($name1) . '\\' . self::prepareName($name2), $attributes
+ );
+ }
+ }
+
+ /**
+ * Prepares a (string, array or Name node) name for use in name changing methods by converting
+ * it to a string.
+ *
+ * @param string|string[]|self $name Name to prepare
+ *
+ * @psalm-return non-empty-string
+ * @return string Prepared name
+ */
+ private static function prepareName($name): string {
+ if (\is_string($name)) {
+ if ('' === $name) {
+ throw new \InvalidArgumentException('Name cannot be empty');
+ }
+
+ return $name;
+ }
+ if (\is_array($name)) {
+ if (empty($name)) {
+ throw new \InvalidArgumentException('Name cannot be empty');
+ }
+
+ return implode('\\', $name);
+ }
+ if ($name instanceof self) {
+ return $name->name;
+ }
+
+ throw new \InvalidArgumentException(
+ 'Expected string, array of parts or Name instance'
+ );
+ }
+
+ public function getType(): string {
+ return 'Name';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php
new file mode 100644
index 0000000..2118378
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php
@@ -0,0 +1,49 @@
+toString();
+ }
+
+ public function getType(): string {
+ return 'Name_FullyQualified';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php
new file mode 100644
index 0000000..0226a4e
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php
@@ -0,0 +1,49 @@
+toString();
+ }
+
+ public function getType(): string {
+ return 'Name_Relative';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php b/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php
new file mode 100644
index 0000000..b99acd1
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Node $type, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->type = $type;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['type'];
+ }
+
+ public function getType(): string {
+ return 'NullableType';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php
new file mode 100644
index 0000000..57d15b7
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php
@@ -0,0 +1,119 @@
+ $attributes Additional attributes
+ * @param int $flags Optional visibility flags
+ * @param list $attrGroups PHP attribute groups
+ * @param PropertyHook[] $hooks Property hooks for promoted properties
+ */
+ public function __construct(
+ Expr $var, ?Expr $default = null, ?Node $type = null,
+ bool $byRef = false, bool $variadic = false,
+ array $attributes = [],
+ int $flags = 0,
+ array $attrGroups = [],
+ array $hooks = []
+ ) {
+ $this->attributes = $attributes;
+ $this->type = $type;
+ $this->byRef = $byRef;
+ $this->variadic = $variadic;
+ $this->var = $var;
+ $this->default = $default;
+ $this->flags = $flags;
+ $this->attrGroups = $attrGroups;
+ $this->hooks = $hooks;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrGroups', 'flags', 'type', 'byRef', 'variadic', 'var', 'default', 'hooks'];
+ }
+
+ public function getType(): string {
+ return 'Param';
+ }
+
+ /**
+ * Whether this parameter uses constructor property promotion.
+ */
+ public function isPromoted(): bool {
+ return $this->flags !== 0 || $this->hooks !== [];
+ }
+
+ public function isPublic(): bool {
+ $public = (bool) ($this->flags & Modifiers::PUBLIC);
+ if ($public) {
+ return true;
+ }
+
+ if ($this->hooks === []) {
+ return false;
+ }
+
+ return ($this->flags & Modifiers::VISIBILITY_MASK) === 0;
+ }
+
+ public function isProtected(): bool {
+ return (bool) ($this->flags & Modifiers::PROTECTED);
+ }
+
+ public function isPrivate(): bool {
+ return (bool) ($this->flags & Modifiers::PRIVATE);
+ }
+
+ public function isReadonly(): bool {
+ return (bool) ($this->flags & Modifiers::READONLY);
+ }
+
+ /**
+ * Whether the promoted property has explicit public(set) visibility.
+ */
+ public function isPublicSet(): bool {
+ return (bool) ($this->flags & Modifiers::PUBLIC_SET);
+ }
+
+ /**
+ * Whether the promoted property has explicit protected(set) visibility.
+ */
+ public function isProtectedSet(): bool {
+ return (bool) ($this->flags & Modifiers::PROTECTED_SET);
+ }
+
+ /**
+ * Whether the promoted property has explicit private(set) visibility.
+ */
+ public function isPrivateSet(): bool {
+ return (bool) ($this->flags & Modifiers::PRIVATE_SET);
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php b/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php
new file mode 100644
index 0000000..349b9ce
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php
@@ -0,0 +1,105 @@
+ 0 : Flags
+ * 'byRef' => false : Whether hook returns by reference
+ * 'params' => array(): Parameters
+ * 'attrGroups' => array(): PHP attribute groups
+ * @param array $attributes Additional attributes
+ */
+ public function __construct($name, $body, array $subNodes = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
+ $this->body = $body;
+ $this->flags = $subNodes['flags'] ?? 0;
+ $this->byRef = $subNodes['byRef'] ?? false;
+ $this->params = $subNodes['params'] ?? [];
+ $this->attrGroups = $subNodes['attrGroups'] ?? [];
+ }
+
+ public function returnsByRef(): bool {
+ return $this->byRef;
+ }
+
+ public function getParams(): array {
+ return $this->params;
+ }
+
+ public function getReturnType() {
+ return null;
+ }
+
+ /**
+ * Whether the property hook is final.
+ */
+ public function isFinal(): bool {
+ return (bool) ($this->flags & Modifiers::FINAL);
+ }
+
+ public function getStmts(): ?array {
+ if ($this->body instanceof Expr) {
+ $name = $this->name->toLowerString();
+ if ($name === 'get') {
+ return [new Return_($this->body)];
+ }
+ if ($name === 'set') {
+ if (!$this->hasAttribute('propertyName')) {
+ throw new \LogicException(
+ 'Can only use getStmts() on a "set" hook if the "propertyName" attribute is set');
+ }
+
+ $propName = $this->getAttribute('propertyName');
+ $prop = new PropertyFetch(new Variable('this'), (string) $propName);
+ return [new Expression(new Assign($prop, $this->body))];
+ }
+ throw new \LogicException('Unknown property hook "' . $name . '"');
+ }
+ return $this->body;
+ }
+
+ public function getAttrGroups(): array {
+ return $this->attrGroups;
+ }
+
+ public function getType(): string {
+ return 'PropertyHook';
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrGroups', 'flags', 'byRef', 'name', 'params', 'body'];
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php b/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php
new file mode 100644
index 0000000..101611e
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php
@@ -0,0 +1,37 @@
+ $attributes Additional attributes
+ */
+ public function __construct($name, ?Node\Expr $default = null, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->name = \is_string($name) ? new Node\VarLikeIdentifier($name) : $name;
+ $this->default = $default;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['name', 'default'];
+ }
+
+ public function getType(): string {
+ return 'PropertyItem';
+ }
+}
+
+// @deprecated compatibility alias
+class_alias(PropertyItem::class, Stmt\PropertyProperty::class);
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php
new file mode 100644
index 0000000..3df2572
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php
@@ -0,0 +1,6 @@
+ $attributes Additional attributes
+ */
+ public function __construct(float $value, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->value = $value;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['value'];
+ }
+
+ /**
+ * @param mixed[] $attributes
+ */
+ public static function fromString(string $str, array $attributes = []): Float_ {
+ $attributes['rawValue'] = $str;
+ $float = self::parse($str);
+
+ return new Float_($float, $attributes);
+ }
+
+ /**
+ * @internal
+ *
+ * Parses a DNUMBER token like PHP would.
+ *
+ * @param string $str A string number
+ *
+ * @return float The parsed number
+ */
+ public static function parse(string $str): float {
+ $str = str_replace('_', '', $str);
+
+ // Check whether this is one of the special integer notations.
+ if ('0' === $str[0]) {
+ // hex
+ if ('x' === $str[1] || 'X' === $str[1]) {
+ return hexdec($str);
+ }
+
+ // bin
+ if ('b' === $str[1] || 'B' === $str[1]) {
+ return bindec($str);
+ }
+
+ // oct, but only if the string does not contain any of '.eE'.
+ if (false === strpbrk($str, '.eE')) {
+ // substr($str, 0, strcspn($str, '89')) cuts the string at the first invalid digit
+ // (8 or 9) so that only the digits before that are used.
+ return octdec(substr($str, 0, strcspn($str, '89')));
+ }
+ }
+
+ // dec
+ return (float) $str;
+ }
+
+ public function getType(): string {
+ return 'Scalar_Float';
+ }
+}
+
+// @deprecated compatibility alias
+class_alias(Float_::class, DNumber::class);
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php
new file mode 100644
index 0000000..bcc257a
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php
@@ -0,0 +1,82 @@
+ $attributes Additional attributes
+ */
+ public function __construct(int $value, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->value = $value;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['value'];
+ }
+
+ /**
+ * Constructs an Int node from a string number literal.
+ *
+ * @param string $str String number literal (decimal, octal, hex or binary)
+ * @param array $attributes Additional attributes
+ * @param bool $allowInvalidOctal Whether to allow invalid octal numbers (PHP 5)
+ *
+ * @return Int_ The constructed LNumber, including kind attribute
+ */
+ public static function fromString(string $str, array $attributes = [], bool $allowInvalidOctal = false): Int_ {
+ $attributes['rawValue'] = $str;
+
+ $str = str_replace('_', '', $str);
+
+ if ('0' !== $str[0] || '0' === $str) {
+ $attributes['kind'] = Int_::KIND_DEC;
+ return new Int_((int) $str, $attributes);
+ }
+
+ if ('x' === $str[1] || 'X' === $str[1]) {
+ $attributes['kind'] = Int_::KIND_HEX;
+ return new Int_(hexdec($str), $attributes);
+ }
+
+ if ('b' === $str[1] || 'B' === $str[1]) {
+ $attributes['kind'] = Int_::KIND_BIN;
+ return new Int_(bindec($str), $attributes);
+ }
+
+ if (!$allowInvalidOctal && strpbrk($str, '89')) {
+ throw new Error('Invalid numeric literal', $attributes);
+ }
+
+ // Strip optional explicit octal prefix.
+ if ('o' === $str[1] || 'O' === $str[1]) {
+ $str = substr($str, 2);
+ }
+
+ // use intval instead of octdec to get proper cutting behavior with malformed numbers
+ $attributes['kind'] = Int_::KIND_OCT;
+ return new Int_(intval($str, 8), $attributes);
+ }
+
+ public function getType(): string {
+ return 'Scalar_Int';
+ }
+}
+
+// @deprecated compatibility alias
+class_alias(Int_::class, LNumber::class);
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php
new file mode 100644
index 0000000..9336dfe
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php
@@ -0,0 +1,34 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $parts, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->parts = $parts;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['parts'];
+ }
+
+ public function getType(): string {
+ return 'Scalar_InterpolatedString';
+ }
+}
+
+// @deprecated compatibility alias
+class_alias(InterpolatedString::class, Encapsed::class);
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php
new file mode 100644
index 0000000..0d12871
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php
@@ -0,0 +1,11 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $attributes = []) {
+ $this->attributes = $attributes;
+ }
+
+ public function getSubNodeNames(): array {
+ return [];
+ }
+
+ /**
+ * Get name of magic constant.
+ *
+ * @return string Name of magic constant
+ */
+ abstract public function getName(): string;
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php
new file mode 100644
index 0000000..732ed14
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php
@@ -0,0 +1,15 @@
+ Escaped character to its decoded value */
+ protected static array $replacements = [
+ '\\' => '\\',
+ '$' => '$',
+ 'n' => "\n",
+ 'r' => "\r",
+ 't' => "\t",
+ 'f' => "\f",
+ 'v' => "\v",
+ 'e' => "\x1B",
+ ];
+
+ /**
+ * Constructs a string scalar node.
+ *
+ * @param string $value Value of the string
+ * @param array $attributes Additional attributes
+ */
+ public function __construct(string $value, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->value = $value;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['value'];
+ }
+
+ /**
+ * @param array $attributes
+ * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes
+ */
+ public static function fromString(string $str, array $attributes = [], bool $parseUnicodeEscape = true): self {
+ $attributes['kind'] = ($str[0] === "'" || ($str[1] === "'" && ($str[0] === 'b' || $str[0] === 'B')))
+ ? Scalar\String_::KIND_SINGLE_QUOTED
+ : Scalar\String_::KIND_DOUBLE_QUOTED;
+
+ $attributes['rawValue'] = $str;
+
+ $string = self::parse($str, $parseUnicodeEscape);
+
+ return new self($string, $attributes);
+ }
+
+ /**
+ * @internal
+ *
+ * Parses a string token.
+ *
+ * @param string $str String token content
+ * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes
+ *
+ * @return string The parsed string
+ */
+ public static function parse(string $str, bool $parseUnicodeEscape = true): string {
+ $bLength = 0;
+ if ('b' === $str[0] || 'B' === $str[0]) {
+ $bLength = 1;
+ }
+
+ if ('\'' === $str[$bLength]) {
+ return str_replace(
+ ['\\\\', '\\\''],
+ ['\\', '\''],
+ substr($str, $bLength + 1, -1)
+ );
+ } else {
+ return self::parseEscapeSequences(
+ substr($str, $bLength + 1, -1), '"', $parseUnicodeEscape
+ );
+ }
+ }
+
+ /**
+ * @internal
+ *
+ * Parses escape sequences in strings (all string types apart from single quoted).
+ *
+ * @param string $str String without quotes
+ * @param null|string $quote Quote type
+ * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes
+ *
+ * @return string String with escape sequences parsed
+ */
+ public static function parseEscapeSequences(string $str, ?string $quote, bool $parseUnicodeEscape = true): string {
+ if (null !== $quote) {
+ $str = str_replace('\\' . $quote, $quote, $str);
+ }
+
+ $extra = '';
+ if ($parseUnicodeEscape) {
+ $extra = '|u\{([0-9a-fA-F]+)\}';
+ }
+
+ return preg_replace_callback(
+ '~\\\\([\\\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3}' . $extra . ')~',
+ function ($matches) {
+ $str = $matches[1];
+
+ if (isset(self::$replacements[$str])) {
+ return self::$replacements[$str];
+ }
+ if ('x' === $str[0] || 'X' === $str[0]) {
+ return chr(hexdec(substr($str, 1)));
+ }
+ if ('u' === $str[0]) {
+ $dec = hexdec($matches[2]);
+ // If it overflowed to float, treat as INT_MAX, it will throw an error anyway.
+ return self::codePointToUtf8(\is_int($dec) ? $dec : \PHP_INT_MAX);
+ } else {
+ return chr(octdec($str));
+ }
+ },
+ $str
+ );
+ }
+
+ /**
+ * Converts a Unicode code point to its UTF-8 encoded representation.
+ *
+ * @param int $num Code point
+ *
+ * @return string UTF-8 representation of code point
+ */
+ private static function codePointToUtf8(int $num): string {
+ if ($num <= 0x7F) {
+ return chr($num);
+ }
+ if ($num <= 0x7FF) {
+ return chr(($num >> 6) + 0xC0) . chr(($num & 0x3F) + 0x80);
+ }
+ if ($num <= 0xFFFF) {
+ return chr(($num >> 12) + 0xE0) . chr((($num >> 6) & 0x3F) + 0x80) . chr(($num & 0x3F) + 0x80);
+ }
+ if ($num <= 0x1FFFFF) {
+ return chr(($num >> 18) + 0xF0) . chr((($num >> 12) & 0x3F) + 0x80)
+ . chr((($num >> 6) & 0x3F) + 0x80) . chr(($num & 0x3F) + 0x80);
+ }
+ throw new Error('Invalid UTF-8 codepoint escape sequence: Codepoint too large');
+ }
+
+ public function getType(): string {
+ return 'Scalar_String';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php b/vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php
new file mode 100644
index 0000000..517c0ed
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php
@@ -0,0 +1,39 @@
+ $attributes Additional attributes
+ */
+ public function __construct(
+ Expr\Variable $var, ?Node\Expr $default = null, array $attributes = []
+ ) {
+ $this->attributes = $attributes;
+ $this->var = $var;
+ $this->default = $default;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['var', 'default'];
+ }
+
+ public function getType(): string {
+ return 'StaticVar';
+ }
+}
+
+// @deprecated compatibility alias
+class_alias(StaticVar::class, Stmt\StaticVar::class);
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php
new file mode 100644
index 0000000..481d31a
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php
@@ -0,0 +1,8 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $stmts, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->stmts = $stmts;
+ }
+
+ public function getType(): string {
+ return 'Stmt_Block';
+ }
+
+ public function getSubNodeNames(): array {
+ return ['stmts'];
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php
new file mode 100644
index 0000000..d2bcc5e
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(?Node\Expr $num = null, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->num = $num;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['num'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Break';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php
new file mode 100644
index 0000000..a06ca18
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php
@@ -0,0 +1,33 @@
+ $attributes Additional attributes
+ */
+ public function __construct(?Node\Expr $cond, array $stmts = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->cond = $cond;
+ $this->stmts = $stmts;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['cond', 'stmts'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Case';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php
new file mode 100644
index 0000000..e8d39c9
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php
@@ -0,0 +1,40 @@
+ $attributes Additional attributes
+ */
+ public function __construct(
+ array $types, ?Expr\Variable $var = null, array $stmts = [], array $attributes = []
+ ) {
+ $this->attributes = $attributes;
+ $this->types = $types;
+ $this->var = $var;
+ $this->stmts = $stmts;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['types', 'var', 'stmts'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Catch';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php
new file mode 100644
index 0000000..9bdce1f
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php
@@ -0,0 +1,77 @@
+ $attributes Additional attributes
+ * @param list $attrGroups PHP attribute groups
+ * @param null|Node\Identifier|Node\Name|Node\ComplexType $type Type declaration
+ */
+ public function __construct(
+ array $consts,
+ int $flags = 0,
+ array $attributes = [],
+ array $attrGroups = [],
+ ?Node $type = null
+ ) {
+ $this->attributes = $attributes;
+ $this->flags = $flags;
+ $this->consts = $consts;
+ $this->attrGroups = $attrGroups;
+ $this->type = $type;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrGroups', 'flags', 'type', 'consts'];
+ }
+
+ /**
+ * Whether constant is explicitly or implicitly public.
+ */
+ public function isPublic(): bool {
+ return ($this->flags & Modifiers::PUBLIC) !== 0
+ || ($this->flags & Modifiers::VISIBILITY_MASK) === 0;
+ }
+
+ /**
+ * Whether constant is protected.
+ */
+ public function isProtected(): bool {
+ return (bool) ($this->flags & Modifiers::PROTECTED);
+ }
+
+ /**
+ * Whether constant is private.
+ */
+ public function isPrivate(): bool {
+ return (bool) ($this->flags & Modifiers::PRIVATE);
+ }
+
+ /**
+ * Whether constant is final.
+ */
+ public function isFinal(): bool {
+ return (bool) ($this->flags & Modifiers::FINAL);
+ }
+
+ public function getType(): string {
+ return 'Stmt_ClassConst';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php
new file mode 100644
index 0000000..fb9ba4f
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php
@@ -0,0 +1,109 @@
+stmts as $stmt) {
+ if ($stmt instanceof TraitUse) {
+ $traitUses[] = $stmt;
+ }
+ }
+ return $traitUses;
+ }
+
+ /**
+ * @return ClassConst[]
+ */
+ public function getConstants(): array {
+ $constants = [];
+ foreach ($this->stmts as $stmt) {
+ if ($stmt instanceof ClassConst) {
+ $constants[] = $stmt;
+ }
+ }
+ return $constants;
+ }
+
+ /**
+ * @return Property[]
+ */
+ public function getProperties(): array {
+ $properties = [];
+ foreach ($this->stmts as $stmt) {
+ if ($stmt instanceof Property) {
+ $properties[] = $stmt;
+ }
+ }
+ return $properties;
+ }
+
+ /**
+ * Gets property with the given name defined directly in this class/interface/trait.
+ *
+ * @param string $name Name of the property
+ *
+ * @return Property|null Property node or null if the property does not exist
+ */
+ public function getProperty(string $name): ?Property {
+ foreach ($this->stmts as $stmt) {
+ if ($stmt instanceof Property) {
+ foreach ($stmt->props as $prop) {
+ if ($prop instanceof PropertyItem && $name === $prop->name->toString()) {
+ return $stmt;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Gets all methods defined directly in this class/interface/trait
+ *
+ * @return ClassMethod[]
+ */
+ public function getMethods(): array {
+ $methods = [];
+ foreach ($this->stmts as $stmt) {
+ if ($stmt instanceof ClassMethod) {
+ $methods[] = $stmt;
+ }
+ }
+ return $methods;
+ }
+
+ /**
+ * Gets method with the given name defined directly in this class/interface/trait.
+ *
+ * @param string $name Name of the method (compared case-insensitively)
+ *
+ * @return ClassMethod|null Method node or null if the method does not exist
+ */
+ public function getMethod(string $name): ?ClassMethod {
+ $lowerName = strtolower($name);
+ foreach ($this->stmts as $stmt) {
+ if ($stmt instanceof ClassMethod && $lowerName === $stmt->name->toLowerString()) {
+ return $stmt;
+ }
+ }
+ return null;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php
new file mode 100644
index 0000000..59c0519
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php
@@ -0,0 +1,154 @@
+ */
+ private static array $magicNames = [
+ '__construct' => true,
+ '__destruct' => true,
+ '__call' => true,
+ '__callstatic' => true,
+ '__get' => true,
+ '__set' => true,
+ '__isset' => true,
+ '__unset' => true,
+ '__sleep' => true,
+ '__wakeup' => true,
+ '__tostring' => true,
+ '__set_state' => true,
+ '__clone' => true,
+ '__invoke' => true,
+ '__debuginfo' => true,
+ '__serialize' => true,
+ '__unserialize' => true,
+ ];
+
+ /**
+ * Constructs a class method node.
+ *
+ * @param string|Node\Identifier $name Name
+ * @param array{
+ * flags?: int,
+ * byRef?: bool,
+ * params?: Node\Param[],
+ * returnType?: null|Node\Identifier|Node\Name|Node\ComplexType,
+ * stmts?: Node\Stmt[]|null,
+ * attrGroups?: Node\AttributeGroup[],
+ * } $subNodes Array of the following optional subnodes:
+ * 'flags => 0 : Flags
+ * 'byRef' => false : Whether to return by reference
+ * 'params' => array() : Parameters
+ * 'returnType' => null : Return type
+ * 'stmts' => array() : Statements
+ * 'attrGroups' => array() : PHP attribute groups
+ * @param array $attributes Additional attributes
+ */
+ public function __construct($name, array $subNodes = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0;
+ $this->byRef = $subNodes['byRef'] ?? false;
+ $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
+ $this->params = $subNodes['params'] ?? [];
+ $this->returnType = $subNodes['returnType'] ?? null;
+ $this->stmts = array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : [];
+ $this->attrGroups = $subNodes['attrGroups'] ?? [];
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrGroups', 'flags', 'byRef', 'name', 'params', 'returnType', 'stmts'];
+ }
+
+ public function returnsByRef(): bool {
+ return $this->byRef;
+ }
+
+ public function getParams(): array {
+ return $this->params;
+ }
+
+ public function getReturnType() {
+ return $this->returnType;
+ }
+
+ public function getStmts(): ?array {
+ return $this->stmts;
+ }
+
+ public function getAttrGroups(): array {
+ return $this->attrGroups;
+ }
+
+ /**
+ * Whether the method is explicitly or implicitly public.
+ */
+ public function isPublic(): bool {
+ return ($this->flags & Modifiers::PUBLIC) !== 0
+ || ($this->flags & Modifiers::VISIBILITY_MASK) === 0;
+ }
+
+ /**
+ * Whether the method is protected.
+ */
+ public function isProtected(): bool {
+ return (bool) ($this->flags & Modifiers::PROTECTED);
+ }
+
+ /**
+ * Whether the method is private.
+ */
+ public function isPrivate(): bool {
+ return (bool) ($this->flags & Modifiers::PRIVATE);
+ }
+
+ /**
+ * Whether the method is abstract.
+ */
+ public function isAbstract(): bool {
+ return (bool) ($this->flags & Modifiers::ABSTRACT);
+ }
+
+ /**
+ * Whether the method is final.
+ */
+ public function isFinal(): bool {
+ return (bool) ($this->flags & Modifiers::FINAL);
+ }
+
+ /**
+ * Whether the method is static.
+ */
+ public function isStatic(): bool {
+ return (bool) ($this->flags & Modifiers::STATIC);
+ }
+
+ /**
+ * Whether the method is magic.
+ */
+ public function isMagic(): bool {
+ return isset(self::$magicNames[$this->name->toLowerString()]);
+ }
+
+ public function getType(): string {
+ return 'Stmt_ClassMethod';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php
new file mode 100644
index 0000000..3f492b7
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php
@@ -0,0 +1,94 @@
+ 0 : Flags
+ * 'extends' => null : Name of extended class
+ * 'implements' => array(): Names of implemented interfaces
+ * 'stmts' => array(): Statements
+ * 'attrGroups' => array(): PHP attribute groups
+ * @param array $attributes Additional attributes
+ */
+ public function __construct($name, array $subNodes = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0;
+ $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
+ $this->extends = $subNodes['extends'] ?? null;
+ $this->implements = $subNodes['implements'] ?? [];
+ $this->stmts = $subNodes['stmts'] ?? [];
+ $this->attrGroups = $subNodes['attrGroups'] ?? [];
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrGroups', 'flags', 'name', 'extends', 'implements', 'stmts'];
+ }
+
+ /**
+ * Whether the class is explicitly abstract.
+ */
+ public function isAbstract(): bool {
+ return (bool) ($this->flags & Modifiers::ABSTRACT);
+ }
+
+ /**
+ * Whether the class is final.
+ */
+ public function isFinal(): bool {
+ return (bool) ($this->flags & Modifiers::FINAL);
+ }
+
+ public function isReadonly(): bool {
+ return (bool) ($this->flags & Modifiers::READONLY);
+ }
+
+ /**
+ * Whether the class is anonymous.
+ */
+ public function isAnonymous(): bool {
+ return null === $this->name;
+ }
+
+ public function getType(): string {
+ return 'Stmt_Class';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php
new file mode 100644
index 0000000..f1165fd
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $consts, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->consts = $consts;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['consts'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Const';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php
new file mode 100644
index 0000000..54e979d
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(?Node\Expr $num = null, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->num = $num;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['num'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Continue';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php
new file mode 100644
index 0000000..1a3c361
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php
@@ -0,0 +1,13 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $declares, ?array $stmts = null, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->declares = $declares;
+ $this->stmts = $stmts;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['declares', 'stmts'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Declare';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php
new file mode 100644
index 0000000..6124442
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php
@@ -0,0 +1,33 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->cond = $cond;
+ $this->stmts = $stmts;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['stmts', 'cond'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Do';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php
new file mode 100644
index 0000000..4d42452
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $exprs, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->exprs = $exprs;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['exprs'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Echo';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php
new file mode 100644
index 0000000..b26d59c
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php
@@ -0,0 +1,33 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->cond = $cond;
+ $this->stmts = $stmts;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['cond', 'stmts'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_ElseIf';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php
new file mode 100644
index 0000000..3d2b066
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $stmts = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->stmts = $stmts;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['stmts'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Else';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php
new file mode 100644
index 0000000..c071a0a
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php
@@ -0,0 +1,36 @@
+ $attrGroups PHP attribute groups
+ * @param array $attributes Additional attributes
+ */
+ public function __construct($name, ?Node\Expr $expr = null, array $attrGroups = [], array $attributes = []) {
+ parent::__construct($attributes);
+ $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
+ $this->expr = $expr;
+ $this->attrGroups = $attrGroups;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrGroups', 'name', 'expr'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_EnumCase';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php
new file mode 100644
index 0000000..7eea6a6
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php
@@ -0,0 +1,44 @@
+ null : Scalar type
+ * 'implements' => array() : Names of implemented interfaces
+ * 'stmts' => array() : Statements
+ * 'attrGroups' => array() : PHP attribute groups
+ * @param array $attributes Additional attributes
+ */
+ public function __construct($name, array $subNodes = [], array $attributes = []) {
+ $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
+ $this->scalarType = $subNodes['scalarType'] ?? null;
+ $this->implements = $subNodes['implements'] ?? [];
+ $this->stmts = $subNodes['stmts'] ?? [];
+ $this->attrGroups = $subNodes['attrGroups'] ?? [];
+
+ parent::__construct($attributes);
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrGroups', 'name', 'scalarType', 'implements', 'stmts'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Enum';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php
new file mode 100644
index 0000000..89751fa
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php
@@ -0,0 +1,32 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Node\Expr $expr, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Expression';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php
new file mode 100644
index 0000000..69ecf25
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $stmts = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->stmts = $stmts;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['stmts'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Finally';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php
new file mode 100644
index 0000000..6f2fbb9
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php
@@ -0,0 +1,47 @@
+ array(): Init expressions
+ * 'cond' => array(): Loop conditions
+ * 'loop' => array(): Loop expressions
+ * 'stmts' => array(): Statements
+ * @param array $attributes Additional attributes
+ */
+ public function __construct(array $subNodes = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->init = $subNodes['init'] ?? [];
+ $this->cond = $subNodes['cond'] ?? [];
+ $this->loop = $subNodes['loop'] ?? [];
+ $this->stmts = $subNodes['stmts'] ?? [];
+ }
+
+ public function getSubNodeNames(): array {
+ return ['init', 'cond', 'loop', 'stmts'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_For';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php
new file mode 100644
index 0000000..c5d9a8b
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php
@@ -0,0 +1,50 @@
+ null : Variable to assign key to
+ * 'byRef' => false : Whether to assign value by reference
+ * 'stmts' => array(): Statements
+ * @param array $attributes Additional attributes
+ */
+ public function __construct(Node\Expr $expr, Node\Expr $valueVar, array $subNodes = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ $this->keyVar = $subNodes['keyVar'] ?? null;
+ $this->byRef = $subNodes['byRef'] ?? false;
+ $this->valueVar = $valueVar;
+ $this->stmts = $subNodes['stmts'] ?? [];
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr', 'keyVar', 'byRef', 'valueVar', 'stmts'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Foreach';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php
new file mode 100644
index 0000000..2111bab
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php
@@ -0,0 +1,81 @@
+ false : Whether to return by reference
+ * 'params' => array(): Parameters
+ * 'returnType' => null : Return type
+ * 'stmts' => array(): Statements
+ * 'attrGroups' => array(): PHP attribute groups
+ * @param array $attributes Additional attributes
+ */
+ public function __construct($name, array $subNodes = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->byRef = $subNodes['byRef'] ?? false;
+ $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
+ $this->params = $subNodes['params'] ?? [];
+ $this->returnType = $subNodes['returnType'] ?? null;
+ $this->stmts = $subNodes['stmts'] ?? [];
+ $this->attrGroups = $subNodes['attrGroups'] ?? [];
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrGroups', 'byRef', 'name', 'params', 'returnType', 'stmts'];
+ }
+
+ public function returnsByRef(): bool {
+ return $this->byRef;
+ }
+
+ public function getParams(): array {
+ return $this->params;
+ }
+
+ public function getReturnType() {
+ return $this->returnType;
+ }
+
+ public function getAttrGroups(): array {
+ return $this->attrGroups;
+ }
+
+ /** @return Node\Stmt[] */
+ public function getStmts(): array {
+ return $this->stmts;
+ }
+
+ public function getType(): string {
+ return 'Stmt_Function';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php
new file mode 100644
index 0000000..d3ab12f
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $vars, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->vars = $vars;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['vars'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Global';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php
new file mode 100644
index 0000000..26a0d01
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php
@@ -0,0 +1,30 @@
+ $attributes Additional attributes
+ */
+ public function __construct($name, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['name'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Goto';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php
new file mode 100644
index 0000000..0ec8e9d
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php
@@ -0,0 +1,41 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Name $prefix, array $uses, int $type = Use_::TYPE_NORMAL, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->type = $type;
+ $this->prefix = $prefix;
+ $this->uses = $uses;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['type', 'prefix', 'uses'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_GroupUse';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php
new file mode 100644
index 0000000..665bacd
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(string $remaining, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->remaining = $remaining;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['remaining'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_HaltCompiler';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php
new file mode 100644
index 0000000..544390f
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php
@@ -0,0 +1,46 @@
+ array(): Statements
+ * 'elseifs' => array(): Elseif clauses
+ * 'else' => null : Else clause
+ * @param array $attributes Additional attributes
+ */
+ public function __construct(Node\Expr $cond, array $subNodes = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->cond = $cond;
+ $this->stmts = $subNodes['stmts'] ?? [];
+ $this->elseifs = $subNodes['elseifs'] ?? [];
+ $this->else = $subNodes['else'] ?? null;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['cond', 'stmts', 'elseifs', 'else'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_If';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php
new file mode 100644
index 0000000..0515d02
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(string $value, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->value = $value;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['value'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_InlineHTML';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php
new file mode 100644
index 0000000..9359064
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php
@@ -0,0 +1,40 @@
+ array(): Name of extended interfaces
+ * 'stmts' => array(): Statements
+ * 'attrGroups' => array(): PHP attribute groups
+ * @param array $attributes Additional attributes
+ */
+ public function __construct($name, array $subNodes = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
+ $this->extends = $subNodes['extends'] ?? [];
+ $this->stmts = $subNodes['stmts'] ?? [];
+ $this->attrGroups = $subNodes['attrGroups'] ?? [];
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrGroups', 'name', 'extends', 'stmts'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Interface';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php
new file mode 100644
index 0000000..658468d
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php
@@ -0,0 +1,30 @@
+ $attributes Additional attributes
+ */
+ public function __construct($name, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['name'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Label';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php
new file mode 100644
index 0000000..f5b59ad
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php
@@ -0,0 +1,37 @@
+ $attributes Additional attributes
+ */
+ public function __construct(?Node\Name $name = null, ?array $stmts = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->name = $name;
+ $this->stmts = $stmts;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['name', 'stmts'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Namespace';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php
new file mode 100644
index 0000000..3acfa46
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php
@@ -0,0 +1,16 @@
+ $attributes Additional attributes
+ * @param null|Identifier|Name|ComplexType $type Type declaration
+ * @param Node\AttributeGroup[] $attrGroups PHP attribute groups
+ * @param Node\PropertyHook[] $hooks Property hooks
+ */
+ public function __construct(int $flags, array $props, array $attributes = [], ?Node $type = null, array $attrGroups = [], array $hooks = []) {
+ $this->attributes = $attributes;
+ $this->flags = $flags;
+ $this->props = $props;
+ $this->type = $type;
+ $this->attrGroups = $attrGroups;
+ $this->hooks = $hooks;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrGroups', 'flags', 'type', 'props', 'hooks'];
+ }
+
+ /**
+ * Whether the property is explicitly or implicitly public.
+ */
+ public function isPublic(): bool {
+ return ($this->flags & Modifiers::PUBLIC) !== 0
+ || ($this->flags & Modifiers::VISIBILITY_MASK) === 0;
+ }
+
+ /**
+ * Whether the property is protected.
+ */
+ public function isProtected(): bool {
+ return (bool) ($this->flags & Modifiers::PROTECTED);
+ }
+
+ /**
+ * Whether the property is private.
+ */
+ public function isPrivate(): bool {
+ return (bool) ($this->flags & Modifiers::PRIVATE);
+ }
+
+ /**
+ * Whether the property is static.
+ */
+ public function isStatic(): bool {
+ return (bool) ($this->flags & Modifiers::STATIC);
+ }
+
+ /**
+ * Whether the property is readonly.
+ */
+ public function isReadonly(): bool {
+ return (bool) ($this->flags & Modifiers::READONLY);
+ }
+
+ /**
+ * Whether the property is abstract.
+ */
+ public function isAbstract(): bool {
+ return (bool) ($this->flags & Modifiers::ABSTRACT);
+ }
+
+ /**
+ * Whether the property is final.
+ */
+ public function isFinal(): bool {
+ return (bool) ($this->flags & Modifiers::FINAL);
+ }
+
+ /**
+ * Whether the property has explicit public(set) visibility.
+ */
+ public function isPublicSet(): bool {
+ return (bool) ($this->flags & Modifiers::PUBLIC_SET);
+ }
+
+ /**
+ * Whether the property has explicit protected(set) visibility.
+ */
+ public function isProtectedSet(): bool {
+ return (bool) ($this->flags & Modifiers::PROTECTED_SET);
+ }
+
+ /**
+ * Whether the property has explicit private(set) visibility.
+ */
+ public function isPrivateSet(): bool {
+ return (bool) ($this->flags & Modifiers::PRIVATE_SET);
+ }
+
+ public function getType(): string {
+ return 'Stmt_Property';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php
new file mode 100644
index 0000000..fe7c997
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php
@@ -0,0 +1,13 @@
+ $attributes Additional attributes
+ */
+ public function __construct(?Node\Expr $expr = null, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->expr = $expr;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['expr'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Return';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php
new file mode 100644
index 0000000..6775b95
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php
@@ -0,0 +1,11 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $vars, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->vars = $vars;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['vars'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Static';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php
new file mode 100644
index 0000000..21e5efa
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php
@@ -0,0 +1,33 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Node\Expr $cond, array $cases, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->cond = $cond;
+ $this->cases = $cases;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['cond', 'cases'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Switch';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php
new file mode 100644
index 0000000..7705a57
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php
@@ -0,0 +1,33 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $traits, array $adaptations = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->traits = $traits;
+ $this->adaptations = $adaptations;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['traits', 'adaptations'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_TraitUse';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php
new file mode 100644
index 0000000..987bc88
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php
@@ -0,0 +1,12 @@
+ $attributes Additional attributes
+ */
+ public function __construct(?Node\Name $trait, $method, ?int $newModifier, $newName, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->trait = $trait;
+ $this->method = \is_string($method) ? new Node\Identifier($method) : $method;
+ $this->newModifier = $newModifier;
+ $this->newName = \is_string($newName) ? new Node\Identifier($newName) : $newName;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['trait', 'method', 'newModifier', 'newName'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_TraitUseAdaptation_Alias';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php
new file mode 100644
index 0000000..7bc4083
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php
@@ -0,0 +1,33 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Node\Name $trait, $method, array $insteadof, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->trait = $trait;
+ $this->method = \is_string($method) ? new Node\Identifier($method) : $method;
+ $this->insteadof = $insteadof;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['trait', 'method', 'insteadof'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_TraitUseAdaptation_Precedence';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php
new file mode 100644
index 0000000..5f2b330
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php
@@ -0,0 +1,34 @@
+ array(): Statements
+ * 'attrGroups' => array(): PHP attribute groups
+ * @param array $attributes Additional attributes
+ */
+ public function __construct($name, array $subNodes = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
+ $this->stmts = $subNodes['stmts'] ?? [];
+ $this->attrGroups = $subNodes['attrGroups'] ?? [];
+ }
+
+ public function getSubNodeNames(): array {
+ return ['attrGroups', 'name', 'stmts'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Trait';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php
new file mode 100644
index 0000000..6414c46
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php
@@ -0,0 +1,37 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $stmts, array $catches, ?Finally_ $finally = null, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->stmts = $stmts;
+ $this->catches = $catches;
+ $this->finally = $finally;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['stmts', 'catches', 'finally'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_TryCatch';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php
new file mode 100644
index 0000000..c211beb
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php
@@ -0,0 +1,29 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $vars, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->vars = $vars;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['vars'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Unset';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php
new file mode 100644
index 0000000..b14fbd6
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php
@@ -0,0 +1,13 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $uses, int $type = self::TYPE_NORMAL, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->type = $type;
+ $this->uses = $uses;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['type', 'uses'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_Use';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php
new file mode 100644
index 0000000..2f7aed2
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php
@@ -0,0 +1,33 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->cond = $cond;
+ $this->stmts = $stmts;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['cond', 'stmts'];
+ }
+
+ public function getType(): string {
+ return 'Stmt_While';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php b/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php
new file mode 100644
index 0000000..bad88d2
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php
@@ -0,0 +1,27 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $types, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->types = $types;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['types'];
+ }
+
+ public function getType(): string {
+ return 'UnionType';
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php b/vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php
new file mode 100644
index 0000000..a7d9fc4
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php
@@ -0,0 +1,55 @@
+ $attributes Additional attributes
+ */
+ public function __construct(Node\Name $name, $alias = null, int $type = Use_::TYPE_UNKNOWN, array $attributes = []) {
+ $this->attributes = $attributes;
+ $this->type = $type;
+ $this->name = $name;
+ $this->alias = \is_string($alias) ? new Identifier($alias) : $alias;
+ }
+
+ public function getSubNodeNames(): array {
+ return ['type', 'name', 'alias'];
+ }
+
+ /**
+ * Get alias. If not explicitly given this is the last component of the used name.
+ */
+ public function getAlias(): Identifier {
+ if (null !== $this->alias) {
+ return $this->alias;
+ }
+
+ return new Identifier($this->name->getLast());
+ }
+
+ public function getType(): string {
+ return 'UseItem';
+ }
+}
+
+// @deprecated compatibility alias
+class_alias(UseItem::class, Stmt\UseUse::class);
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php b/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php
new file mode 100644
index 0000000..9baa6fe
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php
@@ -0,0 +1,16 @@
+ $attributes Additional attributes
+ */
+ public function __construct(array $attributes = []) {
+ $this->attributes = $attributes;
+ }
+
+ public function getType(): string {
+ return 'VariadicPlaceholder';
+ }
+
+ public function getSubNodeNames(): array {
+ return [];
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php
new file mode 100644
index 0000000..a6a50ae
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php
@@ -0,0 +1,181 @@
+ Attributes */
+ protected array $attributes;
+
+ /**
+ * Creates a Node.
+ *
+ * @param array $attributes Array of attributes
+ */
+ public function __construct(array $attributes = []) {
+ $this->attributes = $attributes;
+ }
+
+ /**
+ * Gets line the node started in (alias of getStartLine).
+ *
+ * @return int Start line (or -1 if not available)
+ * @phpstan-return -1|positive-int
+ */
+ public function getLine(): int {
+ return $this->attributes['startLine'] ?? -1;
+ }
+
+ /**
+ * Gets line the node started in.
+ *
+ * Requires the 'startLine' attribute to be enabled in the lexer (enabled by default).
+ *
+ * @return int Start line (or -1 if not available)
+ * @phpstan-return -1|positive-int
+ */
+ public function getStartLine(): int {
+ return $this->attributes['startLine'] ?? -1;
+ }
+
+ /**
+ * Gets the line the node ended in.
+ *
+ * Requires the 'endLine' attribute to be enabled in the lexer (enabled by default).
+ *
+ * @return int End line (or -1 if not available)
+ * @phpstan-return -1|positive-int
+ */
+ public function getEndLine(): int {
+ return $this->attributes['endLine'] ?? -1;
+ }
+
+ /**
+ * Gets the token offset of the first token that is part of this node.
+ *
+ * The offset is an index into the array returned by Lexer::getTokens().
+ *
+ * Requires the 'startTokenPos' attribute to be enabled in the lexer (DISABLED by default).
+ *
+ * @return int Token start position (or -1 if not available)
+ */
+ public function getStartTokenPos(): int {
+ return $this->attributes['startTokenPos'] ?? -1;
+ }
+
+ /**
+ * Gets the token offset of the last token that is part of this node.
+ *
+ * The offset is an index into the array returned by Lexer::getTokens().
+ *
+ * Requires the 'endTokenPos' attribute to be enabled in the lexer (DISABLED by default).
+ *
+ * @return int Token end position (or -1 if not available)
+ */
+ public function getEndTokenPos(): int {
+ return $this->attributes['endTokenPos'] ?? -1;
+ }
+
+ /**
+ * Gets the file offset of the first character that is part of this node.
+ *
+ * Requires the 'startFilePos' attribute to be enabled in the lexer (DISABLED by default).
+ *
+ * @return int File start position (or -1 if not available)
+ */
+ public function getStartFilePos(): int {
+ return $this->attributes['startFilePos'] ?? -1;
+ }
+
+ /**
+ * Gets the file offset of the last character that is part of this node.
+ *
+ * Requires the 'endFilePos' attribute to be enabled in the lexer (DISABLED by default).
+ *
+ * @return int File end position (or -1 if not available)
+ */
+ public function getEndFilePos(): int {
+ return $this->attributes['endFilePos'] ?? -1;
+ }
+
+ /**
+ * Gets all comments directly preceding this node.
+ *
+ * The comments are also available through the "comments" attribute.
+ *
+ * @return Comment[]
+ */
+ public function getComments(): array {
+ return $this->attributes['comments'] ?? [];
+ }
+
+ /**
+ * Gets the doc comment of the node.
+ *
+ * @return null|Comment\Doc Doc comment object or null
+ */
+ public function getDocComment(): ?Comment\Doc {
+ $comments = $this->getComments();
+ for ($i = count($comments) - 1; $i >= 0; $i--) {
+ $comment = $comments[$i];
+ if ($comment instanceof Comment\Doc) {
+ return $comment;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Sets the doc comment of the node.
+ *
+ * This will either replace an existing doc comment or add it to the comments array.
+ *
+ * @param Comment\Doc $docComment Doc comment to set
+ */
+ public function setDocComment(Comment\Doc $docComment): void {
+ $comments = $this->getComments();
+ for ($i = count($comments) - 1; $i >= 0; $i--) {
+ if ($comments[$i] instanceof Comment\Doc) {
+ // Replace existing doc comment.
+ $comments[$i] = $docComment;
+ $this->setAttribute('comments', $comments);
+ return;
+ }
+ }
+
+ // Append new doc comment.
+ $comments[] = $docComment;
+ $this->setAttribute('comments', $comments);
+ }
+
+ public function setAttribute(string $key, $value): void {
+ $this->attributes[$key] = $value;
+ }
+
+ public function hasAttribute(string $key): bool {
+ return array_key_exists($key, $this->attributes);
+ }
+
+ public function getAttribute(string $key, $default = null) {
+ if (array_key_exists($key, $this->attributes)) {
+ return $this->attributes[$key];
+ }
+
+ return $default;
+ }
+
+ public function getAttributes(): array {
+ return $this->attributes;
+ }
+
+ public function setAttributes(array $attributes): void {
+ $this->attributes = $attributes;
+ }
+
+ /**
+ * @return array
+ */
+ public function jsonSerialize(): array {
+ return ['nodeType' => $this->getType()] + get_object_vars($this);
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php b/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php
new file mode 100644
index 0000000..39ce86a
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php
@@ -0,0 +1,299 @@
+ true,
+ 'startLine' => true,
+ 'endLine' => true,
+ 'startFilePos' => true,
+ 'endFilePos' => true,
+ 'startTokenPos' => true,
+ 'endTokenPos' => true,
+ ];
+
+ /**
+ * Constructs a NodeDumper.
+ *
+ * Supported options:
+ * * bool dumpComments: Whether comments should be dumped.
+ * * bool dumpPositions: Whether line/offset information should be dumped. To dump offset
+ * information, the code needs to be passed to dump().
+ * * bool dumpOtherAttributes: Whether non-comment, non-position attributes should be dumped.
+ *
+ * @param array $options Options (see description)
+ */
+ public function __construct(array $options = []) {
+ $this->dumpComments = !empty($options['dumpComments']);
+ $this->dumpPositions = !empty($options['dumpPositions']);
+ $this->dumpOtherAttributes = !empty($options['dumpOtherAttributes']);
+ }
+
+ /**
+ * Dumps a node or array.
+ *
+ * @param array|Node $node Node or array to dump
+ * @param string|null $code Code corresponding to dumped AST. This only needs to be passed if
+ * the dumpPositions option is enabled and the dumping of node offsets
+ * is desired.
+ *
+ * @return string Dumped value
+ */
+ public function dump($node, ?string $code = null): string {
+ $this->code = $code;
+ $this->res = '';
+ $this->nl = "\n";
+ $this->dumpRecursive($node, false);
+ return $this->res;
+ }
+
+ /** @param mixed $node */
+ protected function dumpRecursive($node, bool $indent = true): void {
+ if ($indent) {
+ $this->nl .= " ";
+ }
+ if ($node instanceof Node) {
+ $this->res .= $node->getType();
+ if ($this->dumpPositions && null !== $p = $this->dumpPosition($node)) {
+ $this->res .= $p;
+ }
+ $this->res .= '(';
+
+ foreach ($node->getSubNodeNames() as $key) {
+ $this->res .= "$this->nl " . $key . ': ';
+
+ $value = $node->$key;
+ if (\is_int($value)) {
+ if ('flags' === $key || 'newModifier' === $key) {
+ $this->res .= $this->dumpFlags($value);
+ continue;
+ }
+ if ('type' === $key && $node instanceof Include_) {
+ $this->res .= $this->dumpIncludeType($value);
+ continue;
+ }
+ if ('type' === $key
+ && ($node instanceof Use_ || $node instanceof UseItem || $node instanceof GroupUse)) {
+ $this->res .= $this->dumpUseType($value);
+ continue;
+ }
+ }
+ $this->dumpRecursive($value);
+ }
+
+ if ($this->dumpComments && $comments = $node->getComments()) {
+ $this->res .= "$this->nl comments: ";
+ $this->dumpRecursive($comments);
+ }
+
+ if ($this->dumpOtherAttributes) {
+ foreach ($node->getAttributes() as $key => $value) {
+ if (isset(self::IGNORE_ATTRIBUTES[$key])) {
+ continue;
+ }
+
+ $this->res .= "$this->nl $key: ";
+ if (\is_int($value)) {
+ if ('kind' === $key) {
+ if ($node instanceof Int_) {
+ $this->res .= $this->dumpIntKind($value);
+ continue;
+ }
+ if ($node instanceof String_ || $node instanceof InterpolatedString) {
+ $this->res .= $this->dumpStringKind($value);
+ continue;
+ }
+ if ($node instanceof Array_) {
+ $this->res .= $this->dumpArrayKind($value);
+ continue;
+ }
+ if ($node instanceof List_) {
+ $this->res .= $this->dumpListKind($value);
+ continue;
+ }
+ }
+ }
+ $this->dumpRecursive($value);
+ }
+ }
+ $this->res .= "$this->nl)";
+ } elseif (\is_array($node)) {
+ $this->res .= 'array(';
+ foreach ($node as $key => $value) {
+ $this->res .= "$this->nl " . $key . ': ';
+ $this->dumpRecursive($value);
+ }
+ $this->res .= "$this->nl)";
+ } elseif ($node instanceof Comment) {
+ $this->res .= \str_replace("\n", $this->nl, $node->getReformattedText());
+ } elseif (\is_string($node)) {
+ $this->res .= \str_replace("\n", $this->nl, (string)$node);
+ } elseif (\is_int($node) || \is_float($node)) {
+ $this->res .= $node;
+ } elseif (null === $node) {
+ $this->res .= 'null';
+ } elseif (false === $node) {
+ $this->res .= 'false';
+ } elseif (true === $node) {
+ $this->res .= 'true';
+ } else {
+ throw new \InvalidArgumentException('Can only dump nodes and arrays.');
+ }
+ if ($indent) {
+ $this->nl = \substr($this->nl, 0, -4);
+ }
+ }
+
+ protected function dumpFlags(int $flags): string {
+ $strs = [];
+ if ($flags & Modifiers::PUBLIC) {
+ $strs[] = 'PUBLIC';
+ }
+ if ($flags & Modifiers::PROTECTED) {
+ $strs[] = 'PROTECTED';
+ }
+ if ($flags & Modifiers::PRIVATE) {
+ $strs[] = 'PRIVATE';
+ }
+ if ($flags & Modifiers::ABSTRACT) {
+ $strs[] = 'ABSTRACT';
+ }
+ if ($flags & Modifiers::STATIC) {
+ $strs[] = 'STATIC';
+ }
+ if ($flags & Modifiers::FINAL) {
+ $strs[] = 'FINAL';
+ }
+ if ($flags & Modifiers::READONLY) {
+ $strs[] = 'READONLY';
+ }
+ if ($flags & Modifiers::PUBLIC_SET) {
+ $strs[] = 'PUBLIC_SET';
+ }
+ if ($flags & Modifiers::PROTECTED_SET) {
+ $strs[] = 'PROTECTED_SET';
+ }
+ if ($flags & Modifiers::PRIVATE_SET) {
+ $strs[] = 'PRIVATE_SET';
+ }
+
+ if ($strs) {
+ return implode(' | ', $strs) . ' (' . $flags . ')';
+ } else {
+ return (string) $flags;
+ }
+ }
+
+ /** @param array $map */
+ private function dumpEnum(int $value, array $map): string {
+ if (!isset($map[$value])) {
+ return (string) $value;
+ }
+ return $map[$value] . ' (' . $value . ')';
+ }
+
+ private function dumpIncludeType(int $type): string {
+ return $this->dumpEnum($type, [
+ Include_::TYPE_INCLUDE => 'TYPE_INCLUDE',
+ Include_::TYPE_INCLUDE_ONCE => 'TYPE_INCLUDE_ONCE',
+ Include_::TYPE_REQUIRE => 'TYPE_REQUIRE',
+ Include_::TYPE_REQUIRE_ONCE => 'TYPE_REQUIRE_ONCE',
+ ]);
+ }
+
+ private function dumpUseType(int $type): string {
+ return $this->dumpEnum($type, [
+ Use_::TYPE_UNKNOWN => 'TYPE_UNKNOWN',
+ Use_::TYPE_NORMAL => 'TYPE_NORMAL',
+ Use_::TYPE_FUNCTION => 'TYPE_FUNCTION',
+ Use_::TYPE_CONSTANT => 'TYPE_CONSTANT',
+ ]);
+ }
+
+ private function dumpIntKind(int $kind): string {
+ return $this->dumpEnum($kind, [
+ Int_::KIND_BIN => 'KIND_BIN',
+ Int_::KIND_OCT => 'KIND_OCT',
+ Int_::KIND_DEC => 'KIND_DEC',
+ Int_::KIND_HEX => 'KIND_HEX',
+ ]);
+ }
+
+ private function dumpStringKind(int $kind): string {
+ return $this->dumpEnum($kind, [
+ String_::KIND_SINGLE_QUOTED => 'KIND_SINGLE_QUOTED',
+ String_::KIND_DOUBLE_QUOTED => 'KIND_DOUBLE_QUOTED',
+ String_::KIND_HEREDOC => 'KIND_HEREDOC',
+ String_::KIND_NOWDOC => 'KIND_NOWDOC',
+ ]);
+ }
+
+ private function dumpArrayKind(int $kind): string {
+ return $this->dumpEnum($kind, [
+ Array_::KIND_LONG => 'KIND_LONG',
+ Array_::KIND_SHORT => 'KIND_SHORT',
+ ]);
+ }
+
+ private function dumpListKind(int $kind): string {
+ return $this->dumpEnum($kind, [
+ List_::KIND_LIST => 'KIND_LIST',
+ List_::KIND_ARRAY => 'KIND_ARRAY',
+ ]);
+ }
+
+ /**
+ * Dump node position, if possible.
+ *
+ * @param Node $node Node for which to dump position
+ *
+ * @return string|null Dump of position, or null if position information not available
+ */
+ protected function dumpPosition(Node $node): ?string {
+ if (!$node->hasAttribute('startLine') || !$node->hasAttribute('endLine')) {
+ return null;
+ }
+
+ $start = $node->getStartLine();
+ $end = $node->getEndLine();
+ if ($node->hasAttribute('startFilePos') && $node->hasAttribute('endFilePos')
+ && null !== $this->code
+ ) {
+ $start .= ':' . $this->toColumn($this->code, $node->getStartFilePos());
+ $end .= ':' . $this->toColumn($this->code, $node->getEndFilePos());
+ }
+ return "[$start - $end]";
+ }
+
+ // Copied from Error class
+ private function toColumn(string $code, int $pos): int {
+ if ($pos > strlen($code)) {
+ throw new \RuntimeException('Invalid position information');
+ }
+
+ $lineStartPos = strrpos($code, "\n", $pos - strlen($code));
+ if (false === $lineStartPos) {
+ $lineStartPos = -1;
+ }
+
+ return $pos - $lineStartPos;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php b/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php
new file mode 100644
index 0000000..96c8452
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php
@@ -0,0 +1,90 @@
+traverse($nodes);
+
+ return $visitor->getFoundNodes();
+ }
+
+ /**
+ * Find all nodes that are instances of a certain class.
+
+ * @template TNode as Node
+ *
+ * @param Node|Node[] $nodes Single node or array of nodes to search in
+ * @param class-string $class Class name
+ *
+ * @return TNode[] Found nodes (all instances of $class)
+ */
+ public function findInstanceOf($nodes, string $class): array {
+ return $this->find($nodes, function ($node) use ($class) {
+ return $node instanceof $class;
+ });
+ }
+
+ /**
+ * Find first node satisfying a filter callback.
+ *
+ * @param Node|Node[] $nodes Single node or array of nodes to search in
+ * @param callable $filter Filter callback: function(Node $node) : bool
+ *
+ * @return null|Node Found node (or null if none found)
+ */
+ public function findFirst($nodes, callable $filter): ?Node {
+ if ($nodes === []) {
+ return null;
+ }
+
+ if (!is_array($nodes)) {
+ $nodes = [$nodes];
+ }
+
+ $visitor = new FirstFindingVisitor($filter);
+
+ $traverser = new NodeTraverser($visitor);
+ $traverser->traverse($nodes);
+
+ return $visitor->getFoundNode();
+ }
+
+ /**
+ * Find first node that is an instance of a certain class.
+ *
+ * @template TNode as Node
+ *
+ * @param Node|Node[] $nodes Single node or array of nodes to search in
+ * @param class-string $class Class name
+ *
+ * @return null|TNode Found node, which is an instance of $class (or null if none found)
+ */
+ public function findFirstInstanceOf($nodes, string $class): ?Node {
+ return $this->findFirst($nodes, function ($node) use ($class) {
+ return $node instanceof $class;
+ });
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php b/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php
new file mode 100644
index 0000000..bb3d6dd
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php
@@ -0,0 +1,287 @@
+ Visitors */
+ protected array $visitors = [];
+
+ /** @var bool Whether traversal should be stopped */
+ protected bool $stopTraversal;
+
+ /**
+ * Create a traverser with the given visitors.
+ *
+ * @param NodeVisitor ...$visitors Node visitors
+ */
+ public function __construct(NodeVisitor ...$visitors) {
+ $this->visitors = $visitors;
+ }
+
+ /**
+ * Adds a visitor.
+ *
+ * @param NodeVisitor $visitor Visitor to add
+ */
+ public function addVisitor(NodeVisitor $visitor): void {
+ $this->visitors[] = $visitor;
+ }
+
+ /**
+ * Removes an added visitor.
+ */
+ public function removeVisitor(NodeVisitor $visitor): void {
+ $index = array_search($visitor, $this->visitors);
+ if ($index !== false) {
+ array_splice($this->visitors, $index, 1, []);
+ }
+ }
+
+ /**
+ * Traverses an array of nodes using the registered visitors.
+ *
+ * @param Node[] $nodes Array of nodes
+ *
+ * @return Node[] Traversed array of nodes
+ */
+ public function traverse(array $nodes): array {
+ $this->stopTraversal = false;
+
+ foreach ($this->visitors as $visitor) {
+ if (null !== $return = $visitor->beforeTraverse($nodes)) {
+ $nodes = $return;
+ }
+ }
+
+ $nodes = $this->traverseArray($nodes);
+
+ for ($i = \count($this->visitors) - 1; $i >= 0; --$i) {
+ $visitor = $this->visitors[$i];
+ if (null !== $return = $visitor->afterTraverse($nodes)) {
+ $nodes = $return;
+ }
+ }
+
+ return $nodes;
+ }
+
+ /**
+ * Recursively traverse a node.
+ *
+ * @param Node $node Node to traverse.
+ */
+ protected function traverseNode(Node $node): void {
+ foreach ($node->getSubNodeNames() as $name) {
+ $subNode = $node->$name;
+
+ if (\is_array($subNode)) {
+ $node->$name = $this->traverseArray($subNode);
+ if ($this->stopTraversal) {
+ break;
+ }
+
+ continue;
+ }
+
+ if (!$subNode instanceof Node) {
+ continue;
+ }
+
+ $traverseChildren = true;
+ $visitorIndex = -1;
+
+ foreach ($this->visitors as $visitorIndex => $visitor) {
+ $return = $visitor->enterNode($subNode);
+ if (null !== $return) {
+ if ($return instanceof Node) {
+ $this->ensureReplacementReasonable($subNode, $return);
+ $subNode = $node->$name = $return;
+ } elseif (NodeVisitor::DONT_TRAVERSE_CHILDREN === $return) {
+ $traverseChildren = false;
+ } elseif (NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) {
+ $traverseChildren = false;
+ break;
+ } elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
+ $this->stopTraversal = true;
+ break 2;
+ } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
+ $node->$name = null;
+ continue 2;
+ } else {
+ throw new \LogicException(
+ 'enterNode() returned invalid value of type ' . gettype($return)
+ );
+ }
+ }
+ }
+
+ if ($traverseChildren) {
+ $this->traverseNode($subNode);
+ if ($this->stopTraversal) {
+ break;
+ }
+ }
+
+ for (; $visitorIndex >= 0; --$visitorIndex) {
+ $visitor = $this->visitors[$visitorIndex];
+ $return = $visitor->leaveNode($subNode);
+
+ if (null !== $return) {
+ if ($return instanceof Node) {
+ $this->ensureReplacementReasonable($subNode, $return);
+ $subNode = $node->$name = $return;
+ } elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
+ $this->stopTraversal = true;
+ break 2;
+ } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
+ $node->$name = null;
+ break;
+ } elseif (\is_array($return)) {
+ throw new \LogicException(
+ 'leaveNode() may only return an array ' .
+ 'if the parent structure is an array'
+ );
+ } else {
+ throw new \LogicException(
+ 'leaveNode() returned invalid value of type ' . gettype($return)
+ );
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Recursively traverse array (usually of nodes).
+ *
+ * @param array $nodes Array to traverse
+ *
+ * @return array Result of traversal (may be original array or changed one)
+ */
+ protected function traverseArray(array $nodes): array {
+ $doNodes = [];
+
+ foreach ($nodes as $i => $node) {
+ if (!$node instanceof Node) {
+ if (\is_array($node)) {
+ throw new \LogicException('Invalid node structure: Contains nested arrays');
+ }
+ continue;
+ }
+
+ $traverseChildren = true;
+ $visitorIndex = -1;
+
+ foreach ($this->visitors as $visitorIndex => $visitor) {
+ $return = $visitor->enterNode($node);
+ if (null !== $return) {
+ if ($return instanceof Node) {
+ $this->ensureReplacementReasonable($node, $return);
+ $nodes[$i] = $node = $return;
+ } elseif (\is_array($return)) {
+ $doNodes[] = [$i, $return];
+ continue 2;
+ } elseif (NodeVisitor::REMOVE_NODE === $return) {
+ $doNodes[] = [$i, []];
+ continue 2;
+ } elseif (NodeVisitor::DONT_TRAVERSE_CHILDREN === $return) {
+ $traverseChildren = false;
+ } elseif (NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) {
+ $traverseChildren = false;
+ break;
+ } elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
+ $this->stopTraversal = true;
+ break 2;
+ } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
+ throw new \LogicException(
+ 'REPLACE_WITH_NULL can not be used if the parent structure is an array');
+ } else {
+ throw new \LogicException(
+ 'enterNode() returned invalid value of type ' . gettype($return)
+ );
+ }
+ }
+ }
+
+ if ($traverseChildren) {
+ $this->traverseNode($node);
+ if ($this->stopTraversal) {
+ break;
+ }
+ }
+
+ for (; $visitorIndex >= 0; --$visitorIndex) {
+ $visitor = $this->visitors[$visitorIndex];
+ $return = $visitor->leaveNode($node);
+
+ if (null !== $return) {
+ if ($return instanceof Node) {
+ $this->ensureReplacementReasonable($node, $return);
+ $nodes[$i] = $node = $return;
+ } elseif (\is_array($return)) {
+ $doNodes[] = [$i, $return];
+ break;
+ } elseif (NodeVisitor::REMOVE_NODE === $return) {
+ $doNodes[] = [$i, []];
+ break;
+ } elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
+ $this->stopTraversal = true;
+ break 2;
+ } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
+ throw new \LogicException(
+ 'REPLACE_WITH_NULL can not be used if the parent structure is an array');
+ } else {
+ throw new \LogicException(
+ 'leaveNode() returned invalid value of type ' . gettype($return)
+ );
+ }
+ }
+ }
+ }
+
+ if (!empty($doNodes)) {
+ while (list($i, $replace) = array_pop($doNodes)) {
+ array_splice($nodes, $i, 1, $replace);
+ }
+ }
+
+ return $nodes;
+ }
+
+ private function ensureReplacementReasonable(Node $old, Node $new): void {
+ if ($old instanceof Node\Stmt && $new instanceof Node\Expr) {
+ throw new \LogicException(
+ "Trying to replace statement ({$old->getType()}) " .
+ "with expression ({$new->getType()}). Are you missing a " .
+ "Stmt_Expression wrapper?"
+ );
+ }
+
+ if ($old instanceof Node\Expr && $new instanceof Node\Stmt) {
+ throw new \LogicException(
+ "Trying to replace expression ({$old->getType()}) " .
+ "with statement ({$new->getType()})"
+ );
+ }
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php b/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php
new file mode 100644
index 0000000..c3992b3
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php
@@ -0,0 +1,26 @@
+ $node stays as-is
+ * * array (of Nodes)
+ * => The return value is merged into the parent array (at the position of the $node)
+ * * NodeVisitor::REMOVE_NODE
+ * => $node is removed from the parent array
+ * * NodeVisitor::REPLACE_WITH_NULL
+ * => $node is replaced with null
+ * * NodeVisitor::DONT_TRAVERSE_CHILDREN
+ * => Children of $node are not traversed. $node stays as-is
+ * * NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN
+ * => Further visitors for the current node are skipped, and its children are not
+ * traversed. $node stays as-is.
+ * * NodeVisitor::STOP_TRAVERSAL
+ * => Traversal is aborted. $node stays as-is
+ * * otherwise
+ * => $node is set to the return value
+ *
+ * @param Node $node Node
+ *
+ * @return null|int|Node|Node[] Replacement node (or special return value)
+ */
+ public function enterNode(Node $node);
+
+ /**
+ * Called when leaving a node.
+ *
+ * Return value semantics:
+ * * null
+ * => $node stays as-is
+ * * NodeVisitor::REMOVE_NODE
+ * => $node is removed from the parent array
+ * * NodeVisitor::REPLACE_WITH_NULL
+ * => $node is replaced with null
+ * * NodeVisitor::STOP_TRAVERSAL
+ * => Traversal is aborted. $node stays as-is
+ * * array (of Nodes)
+ * => The return value is merged into the parent array (at the position of the $node)
+ * * otherwise
+ * => $node is set to the return value
+ *
+ * @param Node $node Node
+ *
+ * @return null|int|Node|Node[] Replacement node (or special return value)
+ */
+ public function leaveNode(Node $node);
+
+ /**
+ * Called once after traversal.
+ *
+ * Return value semantics:
+ * * null: $nodes stays as-is
+ * * otherwise: $nodes is set to the return value
+ *
+ * @param Node[] $nodes Array of nodes
+ *
+ * @return null|Node[] Array of nodes
+ */
+ public function afterTraverse(array $nodes);
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php
new file mode 100644
index 0000000..cba9249
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php
@@ -0,0 +1,19 @@
+setAttribute('origNode', $origNode);
+ return $node;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php
new file mode 100644
index 0000000..5e2aed3
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php
@@ -0,0 +1,82 @@
+ Token positions of comments */
+ private array $commentPositions = [];
+
+ /**
+ * Create a comment annotation visitor.
+ *
+ * @param Token[] $tokens Token array
+ */
+ public function __construct(array $tokens) {
+ $this->tokens = $tokens;
+
+ // Collect positions of comments. We use this to avoid traversing parts of the AST where
+ // there are no comments.
+ foreach ($tokens as $i => $token) {
+ if ($token->id === \T_COMMENT || $token->id === \T_DOC_COMMENT) {
+ $this->commentPositions[] = $i;
+ }
+ }
+ }
+
+ public function enterNode(Node $node) {
+ $nextCommentPos = current($this->commentPositions);
+ if ($nextCommentPos === false) {
+ // No more comments.
+ return self::STOP_TRAVERSAL;
+ }
+
+ $oldPos = $this->pos;
+ $this->pos = $pos = $node->getStartTokenPos();
+ if ($nextCommentPos > $oldPos && $nextCommentPos < $pos) {
+ $comments = [];
+ while (--$pos >= $oldPos) {
+ $token = $this->tokens[$pos];
+ if ($token->id === \T_DOC_COMMENT) {
+ $comments[] = new Comment\Doc(
+ $token->text, $token->line, $token->pos, $pos,
+ $token->getEndLine(), $token->getEndPos() - 1, $pos);
+ continue;
+ }
+ if ($token->id === \T_COMMENT) {
+ $comments[] = new Comment(
+ $token->text, $token->line, $token->pos, $pos,
+ $token->getEndLine(), $token->getEndPos() - 1, $pos);
+ continue;
+ }
+ if ($token->id !== \T_WHITESPACE) {
+ break;
+ }
+ }
+ if (!empty($comments)) {
+ $node->setAttribute('comments', array_reverse($comments));
+ }
+
+ do {
+ $nextCommentPos = next($this->commentPositions);
+ } while ($nextCommentPos !== false && $nextCommentPos < $this->pos);
+ }
+
+ $endPos = $node->getEndTokenPos();
+ if ($nextCommentPos > $endPos) {
+ // Skip children if there are no comments located inside this node.
+ $this->pos = $endPos;
+ return self::DONT_TRAVERSE_CHILDREN;
+ }
+
+ return null;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php
new file mode 100644
index 0000000..1f3f4ba
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php
@@ -0,0 +1,47 @@
+filterCallback = $filterCallback;
+ }
+
+ /**
+ * Get found nodes satisfying the filter callback.
+ *
+ * Nodes are returned in pre-order.
+ *
+ * @return Node[] Found nodes
+ */
+ public function getFoundNodes(): array {
+ return $this->foundNodes;
+ }
+
+ public function beforeTraverse(array $nodes): ?array {
+ $this->foundNodes = [];
+
+ return null;
+ }
+
+ public function enterNode(Node $node) {
+ $filterCallback = $this->filterCallback;
+ if ($filterCallback($node)) {
+ $this->foundNodes[] = $node;
+ }
+
+ return null;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php
new file mode 100644
index 0000000..05deed5
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php
@@ -0,0 +1,49 @@
+filterCallback = $filterCallback;
+ }
+
+ /**
+ * Get found node satisfying the filter callback.
+ *
+ * Returns null if no node satisfies the filter callback.
+ *
+ * @return null|Node Found node (or null if not found)
+ */
+ public function getFoundNode(): ?Node {
+ return $this->foundNode;
+ }
+
+ public function beforeTraverse(array $nodes): ?array {
+ $this->foundNode = null;
+
+ return null;
+ }
+
+ public function enterNode(Node $node) {
+ $filterCallback = $this->filterCallback;
+ if ($filterCallback($node)) {
+ $this->foundNode = $node;
+ return NodeVisitor::STOP_TRAVERSAL;
+ }
+
+ return null;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php
new file mode 100644
index 0000000..99449c4
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php
@@ -0,0 +1,268 @@
+nameContext = new NameContext($errorHandler ?? new ErrorHandler\Throwing());
+ $this->preserveOriginalNames = $options['preserveOriginalNames'] ?? false;
+ $this->replaceNodes = $options['replaceNodes'] ?? true;
+ }
+
+ /**
+ * Get name resolution context.
+ */
+ public function getNameContext(): NameContext {
+ return $this->nameContext;
+ }
+
+ public function beforeTraverse(array $nodes): ?array {
+ $this->nameContext->startNamespace();
+ return null;
+ }
+
+ public function enterNode(Node $node) {
+ if ($node instanceof Stmt\Namespace_) {
+ $this->nameContext->startNamespace($node->name);
+ } elseif ($node instanceof Stmt\Use_) {
+ foreach ($node->uses as $use) {
+ $this->addAlias($use, $node->type, null);
+ }
+ } elseif ($node instanceof Stmt\GroupUse) {
+ foreach ($node->uses as $use) {
+ $this->addAlias($use, $node->type, $node->prefix);
+ }
+ } elseif ($node instanceof Stmt\Class_) {
+ if (null !== $node->extends) {
+ $node->extends = $this->resolveClassName($node->extends);
+ }
+
+ foreach ($node->implements as &$interface) {
+ $interface = $this->resolveClassName($interface);
+ }
+
+ $this->resolveAttrGroups($node);
+ if (null !== $node->name) {
+ $this->addNamespacedName($node);
+ } else {
+ $node->namespacedName = null;
+ }
+ } elseif ($node instanceof Stmt\Interface_) {
+ foreach ($node->extends as &$interface) {
+ $interface = $this->resolveClassName($interface);
+ }
+
+ $this->resolveAttrGroups($node);
+ $this->addNamespacedName($node);
+ } elseif ($node instanceof Stmt\Enum_) {
+ foreach ($node->implements as &$interface) {
+ $interface = $this->resolveClassName($interface);
+ }
+
+ $this->resolveAttrGroups($node);
+ $this->addNamespacedName($node);
+ } elseif ($node instanceof Stmt\Trait_) {
+ $this->resolveAttrGroups($node);
+ $this->addNamespacedName($node);
+ } elseif ($node instanceof Stmt\Function_) {
+ $this->resolveSignature($node);
+ $this->resolveAttrGroups($node);
+ $this->addNamespacedName($node);
+ } elseif ($node instanceof Stmt\ClassMethod
+ || $node instanceof Expr\Closure
+ || $node instanceof Expr\ArrowFunction
+ ) {
+ $this->resolveSignature($node);
+ $this->resolveAttrGroups($node);
+ } elseif ($node instanceof Stmt\Property) {
+ if (null !== $node->type) {
+ $node->type = $this->resolveType($node->type);
+ }
+ $this->resolveAttrGroups($node);
+ } elseif ($node instanceof Node\PropertyHook) {
+ foreach ($node->params as $param) {
+ $param->type = $this->resolveType($param->type);
+ $this->resolveAttrGroups($param);
+ }
+ $this->resolveAttrGroups($node);
+ } elseif ($node instanceof Stmt\Const_) {
+ foreach ($node->consts as $const) {
+ $this->addNamespacedName($const);
+ }
+ } elseif ($node instanceof Stmt\ClassConst) {
+ if (null !== $node->type) {
+ $node->type = $this->resolveType($node->type);
+ }
+ $this->resolveAttrGroups($node);
+ } elseif ($node instanceof Stmt\EnumCase) {
+ $this->resolveAttrGroups($node);
+ } elseif ($node instanceof Expr\StaticCall
+ || $node instanceof Expr\StaticPropertyFetch
+ || $node instanceof Expr\ClassConstFetch
+ || $node instanceof Expr\New_
+ || $node instanceof Expr\Instanceof_
+ ) {
+ if ($node->class instanceof Name) {
+ $node->class = $this->resolveClassName($node->class);
+ }
+ } elseif ($node instanceof Stmt\Catch_) {
+ foreach ($node->types as &$type) {
+ $type = $this->resolveClassName($type);
+ }
+ } elseif ($node instanceof Expr\FuncCall) {
+ if ($node->name instanceof Name) {
+ $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_FUNCTION);
+ }
+ } elseif ($node instanceof Expr\ConstFetch) {
+ $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_CONSTANT);
+ } elseif ($node instanceof Stmt\TraitUse) {
+ foreach ($node->traits as &$trait) {
+ $trait = $this->resolveClassName($trait);
+ }
+
+ foreach ($node->adaptations as $adaptation) {
+ if (null !== $adaptation->trait) {
+ $adaptation->trait = $this->resolveClassName($adaptation->trait);
+ }
+
+ if ($adaptation instanceof Stmt\TraitUseAdaptation\Precedence) {
+ foreach ($adaptation->insteadof as &$insteadof) {
+ $insteadof = $this->resolveClassName($insteadof);
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /** @param Stmt\Use_::TYPE_* $type */
+ private function addAlias(Node\UseItem $use, int $type, ?Name $prefix = null): void {
+ // Add prefix for group uses
+ $name = $prefix ? Name::concat($prefix, $use->name) : $use->name;
+ // Type is determined either by individual element or whole use declaration
+ $type |= $use->type;
+
+ $this->nameContext->addAlias(
+ $name, (string) $use->getAlias(), $type, $use->getAttributes()
+ );
+ }
+
+ /** @param Stmt\Function_|Stmt\ClassMethod|Expr\Closure|Expr\ArrowFunction $node */
+ private function resolveSignature($node): void {
+ foreach ($node->params as $param) {
+ $param->type = $this->resolveType($param->type);
+ $this->resolveAttrGroups($param);
+ }
+ $node->returnType = $this->resolveType($node->returnType);
+ }
+
+ /**
+ * @template T of Node\Identifier|Name|Node\ComplexType|null
+ * @param T $node
+ * @return T
+ */
+ private function resolveType(?Node $node): ?Node {
+ if ($node instanceof Name) {
+ return $this->resolveClassName($node);
+ }
+ if ($node instanceof Node\NullableType) {
+ $node->type = $this->resolveType($node->type);
+ return $node;
+ }
+ if ($node instanceof Node\UnionType || $node instanceof Node\IntersectionType) {
+ foreach ($node->types as &$type) {
+ $type = $this->resolveType($type);
+ }
+ return $node;
+ }
+ return $node;
+ }
+
+ /**
+ * Resolve name, according to name resolver options.
+ *
+ * @param Name $name Function or constant name to resolve
+ * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_*
+ *
+ * @return Name Resolved name, or original name with attribute
+ */
+ protected function resolveName(Name $name, int $type): Name {
+ if (!$this->replaceNodes) {
+ $resolvedName = $this->nameContext->getResolvedName($name, $type);
+ if (null !== $resolvedName) {
+ $name->setAttribute('resolvedName', $resolvedName);
+ } else {
+ $name->setAttribute('namespacedName', FullyQualified::concat(
+ $this->nameContext->getNamespace(), $name, $name->getAttributes()));
+ }
+ return $name;
+ }
+
+ if ($this->preserveOriginalNames) {
+ // Save the original name
+ $originalName = $name;
+ $name = clone $originalName;
+ $name->setAttribute('originalName', $originalName);
+ }
+
+ $resolvedName = $this->nameContext->getResolvedName($name, $type);
+ if (null !== $resolvedName) {
+ return $resolvedName;
+ }
+
+ // unqualified names inside a namespace cannot be resolved at compile-time
+ // add the namespaced version of the name as an attribute
+ $name->setAttribute('namespacedName', FullyQualified::concat(
+ $this->nameContext->getNamespace(), $name, $name->getAttributes()));
+ return $name;
+ }
+
+ protected function resolveClassName(Name $name): Name {
+ return $this->resolveName($name, Stmt\Use_::TYPE_NORMAL);
+ }
+
+ protected function addNamespacedName(Node $node): void {
+ $node->namespacedName = Name::concat(
+ $this->nameContext->getNamespace(), (string) $node->name);
+ }
+
+ protected function resolveAttrGroups(Node $node): void {
+ foreach ($node->attrGroups as $attrGroup) {
+ foreach ($attrGroup->attrs as $attr) {
+ $attr->name = $this->resolveClassName($attr->name);
+ }
+ }
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php
new file mode 100644
index 0000000..38fedfd
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php
@@ -0,0 +1,51 @@
+$node->getAttribute('parent'), the previous
+ * node can be accessed through $node->getAttribute('previous')
,
+ * and the next node can be accessed through $node->getAttribute('next')
.
+ */
+final class NodeConnectingVisitor extends NodeVisitorAbstract {
+ /**
+ * @var Node[]
+ */
+ private array $stack = [];
+
+ /**
+ * @var ?Node
+ */
+ private $previous;
+
+ public function beforeTraverse(array $nodes) {
+ $this->stack = [];
+ $this->previous = null;
+ }
+
+ public function enterNode(Node $node) {
+ if (!empty($this->stack)) {
+ $node->setAttribute('parent', $this->stack[count($this->stack) - 1]);
+ }
+
+ if ($this->previous !== null && $this->previous->getAttribute('parent') === $node->getAttribute('parent')) {
+ $node->setAttribute('previous', $this->previous);
+ $this->previous->setAttribute('next', $node);
+ }
+
+ $this->stack[] = $node;
+ }
+
+ public function leaveNode(Node $node) {
+ $this->previous = $node;
+
+ array_pop($this->stack);
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php
new file mode 100644
index 0000000..1e7e9e8
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php
@@ -0,0 +1,38 @@
+$node->getAttribute('parent').
+ */
+final class ParentConnectingVisitor extends NodeVisitorAbstract {
+ /**
+ * @var Node[]
+ */
+ private array $stack = [];
+
+ public function beforeTraverse(array $nodes) {
+ $this->stack = [];
+ }
+
+ public function enterNode(Node $node) {
+ if (!empty($this->stack)) {
+ $node->setAttribute('parent', $this->stack[count($this->stack) - 1]);
+ }
+
+ $this->stack[] = $node;
+ }
+
+ public function leaveNode(Node $node) {
+ array_pop($this->stack);
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php
new file mode 100644
index 0000000..6fb15cc
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php
@@ -0,0 +1,24 @@
+'",
+ "T_IS_GREATER_OR_EQUAL",
+ "T_SL",
+ "T_SR",
+ "'+'",
+ "'-'",
+ "'.'",
+ "'*'",
+ "'/'",
+ "'%'",
+ "'!'",
+ "T_INSTANCEOF",
+ "'~'",
+ "T_INC",
+ "T_DEC",
+ "T_INT_CAST",
+ "T_DOUBLE_CAST",
+ "T_STRING_CAST",
+ "T_ARRAY_CAST",
+ "T_OBJECT_CAST",
+ "T_BOOL_CAST",
+ "T_UNSET_CAST",
+ "'@'",
+ "T_POW",
+ "'['",
+ "T_NEW",
+ "T_CLONE",
+ "T_EXIT",
+ "T_IF",
+ "T_ELSEIF",
+ "T_ELSE",
+ "T_ENDIF",
+ "T_LNUMBER",
+ "T_DNUMBER",
+ "T_STRING",
+ "T_STRING_VARNAME",
+ "T_VARIABLE",
+ "T_NUM_STRING",
+ "T_INLINE_HTML",
+ "T_ENCAPSED_AND_WHITESPACE",
+ "T_CONSTANT_ENCAPSED_STRING",
+ "T_ECHO",
+ "T_DO",
+ "T_WHILE",
+ "T_ENDWHILE",
+ "T_FOR",
+ "T_ENDFOR",
+ "T_FOREACH",
+ "T_ENDFOREACH",
+ "T_DECLARE",
+ "T_ENDDECLARE",
+ "T_AS",
+ "T_SWITCH",
+ "T_MATCH",
+ "T_ENDSWITCH",
+ "T_CASE",
+ "T_DEFAULT",
+ "T_BREAK",
+ "T_CONTINUE",
+ "T_GOTO",
+ "T_FUNCTION",
+ "T_FN",
+ "T_CONST",
+ "T_RETURN",
+ "T_TRY",
+ "T_CATCH",
+ "T_FINALLY",
+ "T_USE",
+ "T_INSTEADOF",
+ "T_GLOBAL",
+ "T_STATIC",
+ "T_ABSTRACT",
+ "T_FINAL",
+ "T_PRIVATE",
+ "T_PROTECTED",
+ "T_PUBLIC",
+ "T_READONLY",
+ "T_PUBLIC_SET",
+ "T_PROTECTED_SET",
+ "T_PRIVATE_SET",
+ "T_VAR",
+ "T_UNSET",
+ "T_ISSET",
+ "T_EMPTY",
+ "T_HALT_COMPILER",
+ "T_CLASS",
+ "T_TRAIT",
+ "T_INTERFACE",
+ "T_ENUM",
+ "T_EXTENDS",
+ "T_IMPLEMENTS",
+ "T_OBJECT_OPERATOR",
+ "T_NULLSAFE_OBJECT_OPERATOR",
+ "T_LIST",
+ "T_ARRAY",
+ "T_CALLABLE",
+ "T_CLASS_C",
+ "T_TRAIT_C",
+ "T_METHOD_C",
+ "T_FUNC_C",
+ "T_PROPERTY_C",
+ "T_LINE",
+ "T_FILE",
+ "T_START_HEREDOC",
+ "T_END_HEREDOC",
+ "T_DOLLAR_OPEN_CURLY_BRACES",
+ "T_CURLY_OPEN",
+ "T_PAAMAYIM_NEKUDOTAYIM",
+ "T_NAMESPACE",
+ "T_NS_C",
+ "T_DIR",
+ "T_NS_SEPARATOR",
+ "T_ELLIPSIS",
+ "T_NAME_FULLY_QUALIFIED",
+ "T_NAME_QUALIFIED",
+ "T_NAME_RELATIVE",
+ "T_ATTRIBUTE",
+ "';'",
+ "']'",
+ "'('",
+ "')'",
+ "'{'",
+ "'}'",
+ "'`'",
+ "'\"'",
+ "'$'"
+ );
+
+ protected array $tokenToSymbol = array(
+ 0, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 56, 170, 172, 171, 55, 172, 172,
+ 165, 166, 53, 50, 8, 51, 52, 54, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 31, 163,
+ 44, 16, 46, 30, 68, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 70, 172, 164, 36, 172, 169, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 167, 35, 168, 58, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 1, 2, 3, 4,
+ 5, 6, 7, 9, 10, 11, 12, 13, 14, 15,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 32, 33, 34, 37, 38, 39, 40,
+ 41, 42, 43, 45, 47, 48, 49, 57, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 69, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
+ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+ 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
+ 153, 154, 155, 156, 157, 158, 159, 160, 161, 162
+ );
+
+ protected array $action = array(
+ 128, 129, 130, 565, 131, 132, 944, 754, 755, 756,
+ 133, 38, 838, 485, 561, 1365,-32766,-32766,-32766, 0,
+ 829, 1122, 1123, 1124, 1118, 1117, 1116, 1125, 1119, 1120,
+ 1121,-32766,-32766,-32766, -332, 748, 747,-32766, 840,-32766,
+ -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,
+ -32767, 24,-32766, 1034, -568, 757, 1122, 1123, 1124, 1118,
+ 1117, 1116, 1125, 1119, 1120, 1121, 2, 381, 382, 265,
+ 134, 384, 761, 762, 763, 764, 1111, 425, 426, 1300,
+ 329, 36, 248, 26, 291, 818, 765, 766, 767, 768,
+ 769, 770, 771, 772, 773, 774, 794, 566, 795, 796,
+ 797, 798, 786, 787, 346, 347, 789, 790, 775, 776,
+ 777, 779, 780, 781, 357, 821, 822, 823, 824, 825,
+ 567, -568, -568, 299, 782, 783, 568, 569, -194, 806,
+ 804, 805, 817, 801, 802, 35, -193, 570, 571, 800,
+ 572, 573, 574, 575,-32766, 576, 577, 471, 472, 486,
+ 238, -568, 803, 578, 579, -371, 135, -371, 128, 129,
+ 130, 565, 131, 132, 1067, 754, 755, 756, 133, 38,
+ -32766, 136, 728, 1027, 1026, 1025, 1031, 1028, 1029, 1030,
+ -32766,-32766,-32766,-32767,-32767,-32767,-32767, 101, 102, 103,
+ 104, 105, -332, 748, 747, 1043, 923,-32766,-32766,-32766,
+ 839,-32766, 145,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
+ -32766,-32766,-32766, 757,-32766,-32766,-32766, 611,-32766, 290,
+ -32766,-32766,-32766,-32766,-32766, 834, 718, 265, 134, 384,
+ 761, 762, 763, 764, -615,-32766, 426,-32766,-32766,-32766,
+ -32766, -615, 251, 818, 765, 766, 767, 768, 769, 770,
+ 771, 772, 773, 774, 794, 566, 795, 796, 797, 798,
+ 786, 787, 346, 347, 789, 790, 775, 776, 777, 779,
+ 780, 781, 357, 821, 822, 823, 824, 825, 567, 913,
+ 426, 310, 782, 783, 568, 569, -194, 806, 804, 805,
+ 817, 801, 802, 1288, -193, 570, 571, 800, 572, 573,
+ 574, 575, -273, 576, 577, 835, 82, 83, 84, -85,
+ 803, 578, 579, 237, 148, 778, 749, 750, 751, 752,
+ 753, 150, 754, 755, 756, 791, 792, 37,-32766, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, 1043, 276,-32766,-32766,-32766, 925, 1263,
+ 1262, 1264, 713, 831, 312, 393, 109, 7, 1097, 47,
+ 757,-32766,-32766,-32766, 838, -85,-32766, 1095,-32766,-32766,
+ -32766, 1268,-32766,-32766, 758, 759, 760, 761, 762, 763,
+ 764, 994,-32766, 827,-32766,-32766, 923, -615, 324, -615,
+ 818, 765, 766, 767, 768, 769, 770, 771, 772, 773,
+ 774, 794, 816, 795, 796, 797, 798, 786, 787, 788,
+ 815, 789, 790, 775, 776, 777, 779, 780, 781, 820,
+ 821, 822, 823, 824, 825, 826, 300, 301, 342, 782,
+ 783, 784, 785, 833, 806, 804, 805, 817, 801, 802,
+ 715, 1040, 793, 799, 800, 807, 808, 810, 809, 140,
+ 811, 812, 838, 327, 343,-32766, 125, 803, 814, 813,
+ 49, 50, 51, 517, 52, 53, 1043, -110, 371, 913,
+ 54, 55, -110, 56, -110, -566,-32766,-32766,-32766, 306,
+ 1043, 126, -110, -110, -110, -110, -110, -110, -110, -110,
+ -110, -110, -110, -612, 1096, 106, 107, 108, 740, 276,
+ -612, 963, 964,-32766, 290, 287, 965, 1330, 57, 58,
+ -32766, 109, 375, 995, 59, 959, 60, 245, 246, 61,
+ 62, 63, 64, 65, 66, 67, 68,-32766, 28, 267,
+ 69, 441, 518, 391, -346, 74, 1294, 1295, 519, 443,
+ 838, 327, -566, -566, 1292, 42, 20, 520, 925, 521,
+ 923, 522, 713, 523, -564, 693, 524, 525, -566, 923,
+ 444, 44, 45, 447, 378, 377, -78, 46, 526, 923,
+ -572, 445, -566, 369, 341, 1346, 103, 104, 105, -563,
+ 1254, 923, 383, 382, 446, 528, 529, 530, 865, 719,
+ 866, 694, 425, 461, 462, 463, 844, 532, 533, 720,
+ 1280, 1281, 1282, 1283, 1285, 1277, 1278, 298, 865, 151,
+ 866, 723, 153, 1284, 1279, 695, 696, 1263, 1262, 1264,
+ 299, -564, -564, 70, -153, -153, -153, 322, 323, 327,
+ 154, -4, 923, 913, 1263, 1262, 1264, -564, 155, -153,
+ 283, -153, 913, -153, 157, -153, -563, -563, 33, -571,
+ 1350, -564, 913, -58, 829, 376, -612, 1349, -612, 748,
+ 747, 837, -563, -606, 913, -606, 963, 964, -57, 748,
+ 747, 527, 123, 81, -570, 1040, -563, 327, 617, 899,
+ 959, -110, -110, -110, 32, 110, 111, 112, 113, 114,
+ 115, 116, 117, 118, 119, 120, 121, 122, 124, -565,
+ 1043, 947, 28, 268, 149, 408, 923, 1375, 829, 137,
+ 1376, 138, 925, 144, 838, 913, 713, -153, 1292, 660,
+ 21, 925, 679, 680, 283, 713, 158, 1170, 1172, 379,
+ 380, 980, 385, 386, 159, 713, 730, 376, -562, 438,
+ 1066, 141, 160, 925, 297, 327, 161, 713, 963, 964,
+ 946, 651, 652, 527, 1254, -87, 162, -306, 748, 747,
+ -84, 531, 959, -110, -110, -110, -565, -565, -78, 287,
+ 1268, 532, 533, -73, 1280, 1281, 1282, 1283, 1285, 1277,
+ 1278, -72, -565, -71, -70, 11, 1261, 1284, 1279, 913,
+ -69, 748, 747, -68, 925,-32766, -565, 72, 713, -4,
+ -16, 1261, 323, 327, -67, -562, -562, 291,-32766,-32766,
+ -32766, -66,-32766, -65,-32766, -46,-32766, -18, 142,-32766,
+ 275, -562, 1259, 284,-32766,-32766,-32766, 729,-32766, 732,
+ -32766,-32766, 922, 147, 1261, -562,-32766, 422, 28, 267,
+ -302,-32766,-32766,-32766, 279,-32766, 1042,-32766,-32766,-32766,
+ 838, 838,-32766, 288, 1292, 1040, 280,-32766,-32766,-32766,
+ 285, 286, 335,-32766,-32766, 1263, 1262, 1264, 925,-32766,
+ 422, 289, 713, 28, 268, 292, 293, 276, 940, 73,
+ 1043,-32766, 109, 689, 146, 838, -110, -110, -562, 1292,
+ 1254, -110, 829,-32766, 1377, 704, 582, 10, 661, 838,
+ -110, 1129, 706, 649, 283, 307, 960,-32766, 533,-32766,
+ 1280, 1281, 1282, 1283, 1285, 1277, 1278, 682, 1043, 305,
+ -50, 468, 1299, 1284, 1279, 1254, 666, -528, 496, 667,
+ 304, 299, 683, 72, 74, 1301, 588,-32766, 323, 327,
+ 327, -518, 290, 533, 40, 1280, 1281, 1282, 1283, 1285,
+ 1277, 1278, 8, 139, 0, -562, -562, 27, 1284, 1279,
+ -276, 407, 0,-32766, 0, 0, 0, 0, 72, 1261,
+ 311, -562, 0, 323, 327, 0,-32766,-32766,-32766, 0,
+ -32766, 373,-32766, 0,-32766, -562, 0,-32766, 0, 0,
+ 615, 0,-32766,-32766,-32766, 923,-32766, 0,-32766,-32766,
+ 942, 1289, 1261, 837,-32766, 422, 41, 299, 34,-32766,
+ -32766,-32766, 737,-32766, 738,-32766,-32766,-32766, 923, 857,
+ -32766, 904, 1004, 981, 988,-32766,-32766,-32766, 978,-32766,
+ 989,-32766,-32766, 902, 976, 1261, 1100,-32766, 422, 48,
+ 1103, 1104,-32766,-32766,-32766, 1101,-32766, 1102,-32766,-32766,
+ -32766, 1108, -600,-32766, 849, 1316, 1334, 491,-32766,-32766,
+ -32766, 1368,-32766, 654,-32766,-32766, -599, -598, 1261, 595,
+ -32766, 422, -572, -571, 1268,-32766,-32766,-32766, 913,-32766,
+ -570,-32766,-32766,-32766, -569, -512,-32766, -274, 1, 29,
+ 30,-32766,-32766,-32766, -251, -251, -251,-32766,-32766, 39,
+ 376, 913, 43,-32766, 422, 71, 302, 303, 75, 76,
+ 77, 963, 964, 78, 79,-32766, 527, -250, -250, -250,
+ -273, 80, 374, 376, 899, 959, -110, -110, -110, 143,
+ 152, 156, 243, 331, 963, 964, 127, 358, 359, 527,
+ 360, 361, 362, 363, 364, 365, 366, 899, 959, -110,
+ -110, -110,-32766, 13, 367, 838, 368, 925, 1261, 14,
+ 370, 713, -251, 439, 560,-32766,-32766,-32766, 15,-32766,
+ 16,-32766, 18,-32766, 406, 487,-32766, 488, 495, 498,
+ 925,-32766,-32766,-32766, 713, -250, 499,-32766,-32766, 500,
+ -110, -110, 501,-32766, 422, -110, 505, 506, 507, 515,
+ 593, 699, 1069, 1210, -110,-32766, 1290, 1068, 1049, 1249,
+ 1045, -278, -102,-32766, 12, 17, 22, 296, 405, 607,
+ 612, 640, 705, 1214, 1267, 1211, 1347, 0, 321, 372,
+ 714, 717, 721, 722, 724, 299, 725, 726, 74, 727,
+ 1227, 731, 716, 0, 327, 411, 1293, 734, 900, 1372,
+ 1374, 860, 859, 953, 996, 1373, 952, 950, 951, 954,
+ 1242, 933, 943, 931, 986, 987, 638, 1371, 1328, 1317,
+ 1335, 1344, 0, 0, 0, 327
+ );
+
+ protected array $actionCheck = array(
+ 2, 3, 4, 5, 6, 7, 1, 9, 10, 11,
+ 12, 13, 82, 31, 85, 85, 9, 10, 11, 0,
+ 80, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+ 125, 9, 10, 11, 8, 37, 38, 30, 1, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 101, 30, 1, 70, 57, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 8, 106, 107, 71,
+ 72, 73, 74, 75, 76, 77, 126, 116, 80, 150,
+ 70, 151, 152, 8, 30, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+ 122, 137, 138, 162, 126, 127, 128, 129, 8, 131,
+ 132, 133, 134, 135, 136, 8, 8, 139, 140, 141,
+ 142, 143, 144, 145, 9, 147, 148, 137, 138, 167,
+ 14, 167, 154, 155, 156, 106, 158, 108, 2, 3,
+ 4, 5, 6, 7, 166, 9, 10, 11, 12, 13,
+ 116, 8, 167, 119, 120, 121, 122, 123, 124, 125,
+ 9, 10, 11, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 166, 37, 38, 141, 1, 9, 10, 11,
+ 163, 30, 8, 32, 33, 34, 35, 36, 37, 38,
+ 9, 10, 11, 57, 9, 10, 11, 1, 30, 165,
+ 32, 33, 34, 35, 36, 80, 31, 71, 72, 73,
+ 74, 75, 76, 77, 1, 30, 80, 32, 33, 34,
+ 35, 8, 8, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 115, 116, 117, 118, 119, 120, 121, 122, 84,
+ 80, 8, 126, 127, 128, 129, 166, 131, 132, 133,
+ 134, 135, 136, 1, 166, 139, 140, 141, 142, 143,
+ 144, 145, 166, 147, 148, 160, 9, 10, 11, 31,
+ 154, 155, 156, 97, 158, 2, 3, 4, 5, 6,
+ 7, 14, 9, 10, 11, 12, 13, 30, 116, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 141, 57, 9, 10, 11, 163, 159,
+ 160, 161, 167, 80, 8, 106, 69, 108, 168, 70,
+ 57, 9, 10, 11, 82, 97, 30, 1, 32, 33,
+ 34, 1, 9, 10, 71, 72, 73, 74, 75, 76,
+ 77, 31, 30, 80, 32, 33, 1, 164, 8, 166,
+ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
+ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
+ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
+ 117, 118, 119, 120, 121, 122, 137, 138, 8, 126,
+ 127, 128, 129, 160, 131, 132, 133, 134, 135, 136,
+ 167, 116, 139, 140, 141, 142, 143, 144, 145, 167,
+ 147, 148, 82, 171, 8, 116, 167, 154, 155, 156,
+ 2, 3, 4, 5, 6, 7, 141, 101, 8, 84,
+ 12, 13, 106, 15, 108, 70, 9, 10, 11, 113,
+ 141, 14, 116, 117, 118, 119, 120, 121, 122, 123,
+ 124, 125, 126, 1, 163, 53, 54, 55, 167, 57,
+ 8, 117, 118, 116, 165, 30, 122, 1, 50, 51,
+ 140, 69, 8, 163, 56, 131, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 140, 70, 71,
+ 72, 73, 74, 8, 168, 165, 78, 79, 80, 8,
+ 82, 171, 137, 138, 86, 87, 88, 89, 163, 91,
+ 1, 93, 167, 95, 70, 80, 98, 99, 153, 1,
+ 8, 103, 104, 105, 106, 107, 16, 109, 110, 1,
+ 165, 8, 167, 115, 116, 1, 50, 51, 52, 70,
+ 122, 1, 106, 107, 8, 127, 128, 129, 106, 31,
+ 108, 116, 116, 132, 133, 134, 8, 139, 140, 31,
+ 142, 143, 144, 145, 146, 147, 148, 149, 106, 14,
+ 108, 31, 14, 155, 156, 140, 141, 159, 160, 161,
+ 162, 137, 138, 165, 75, 76, 77, 169, 170, 171,
+ 14, 0, 1, 84, 159, 160, 161, 153, 14, 90,
+ 165, 92, 84, 94, 14, 96, 137, 138, 14, 165,
+ 1, 167, 84, 16, 80, 106, 164, 8, 166, 37,
+ 38, 159, 153, 164, 84, 166, 117, 118, 16, 37,
+ 38, 122, 16, 167, 165, 116, 167, 171, 51, 130,
+ 131, 132, 133, 134, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 16, 70,
+ 141, 73, 70, 71, 101, 102, 1, 80, 80, 16,
+ 83, 16, 163, 16, 82, 84, 167, 168, 86, 75,
+ 76, 163, 75, 76, 165, 167, 16, 59, 60, 106,
+ 107, 163, 106, 107, 16, 167, 31, 106, 70, 108,
+ 1, 167, 16, 163, 113, 171, 16, 167, 117, 118,
+ 122, 111, 112, 122, 122, 31, 16, 35, 37, 38,
+ 31, 130, 131, 132, 133, 134, 137, 138, 31, 30,
+ 1, 139, 140, 31, 142, 143, 144, 145, 146, 147,
+ 148, 31, 153, 31, 31, 154, 80, 155, 156, 84,
+ 31, 37, 38, 31, 163, 74, 167, 165, 167, 168,
+ 31, 80, 170, 171, 31, 137, 138, 30, 87, 88,
+ 89, 31, 91, 31, 93, 31, 95, 31, 31, 98,
+ 31, 153, 116, 31, 103, 104, 105, 31, 74, 31,
+ 109, 110, 31, 31, 80, 167, 115, 116, 70, 71,
+ 35, 87, 88, 89, 35, 91, 140, 93, 127, 95,
+ 82, 82, 98, 37, 86, 116, 35, 103, 104, 105,
+ 35, 35, 35, 109, 110, 159, 160, 161, 163, 115,
+ 116, 37, 167, 70, 71, 37, 37, 57, 38, 158,
+ 141, 127, 69, 77, 70, 82, 117, 118, 70, 86,
+ 122, 122, 80, 116, 83, 80, 89, 97, 90, 82,
+ 131, 82, 92, 113, 165, 114, 131, 85, 140, 140,
+ 142, 143, 144, 145, 146, 147, 148, 94, 141, 136,
+ 31, 97, 150, 155, 156, 122, 96, 153, 97, 100,
+ 135, 162, 100, 165, 165, 150, 157, 140, 170, 171,
+ 171, 153, 165, 140, 163, 142, 143, 144, 145, 146,
+ 147, 148, 153, 31, -1, 137, 138, 153, 155, 156,
+ 166, 168, -1, 74, -1, -1, -1, -1, 165, 80,
+ 135, 153, -1, 170, 171, -1, 87, 88, 89, -1,
+ 91, 153, 93, -1, 95, 167, -1, 98, -1, -1,
+ 157, -1, 103, 104, 105, 1, 74, -1, 109, 110,
+ 158, 164, 80, 159, 115, 116, 163, 162, 167, 87,
+ 88, 89, 163, 91, 163, 93, 127, 95, 1, 163,
+ 98, 163, 163, 163, 163, 103, 104, 105, 163, 74,
+ 163, 109, 110, 163, 163, 80, 163, 115, 116, 70,
+ 163, 163, 87, 88, 89, 163, 91, 163, 93, 127,
+ 95, 163, 165, 98, 164, 164, 164, 102, 103, 104,
+ 105, 164, 74, 164, 109, 110, 165, 165, 80, 81,
+ 115, 116, 165, 165, 1, 87, 88, 89, 84, 91,
+ 165, 93, 127, 95, 165, 165, 98, 166, 165, 165,
+ 165, 103, 104, 105, 100, 101, 102, 109, 110, 165,
+ 106, 84, 165, 115, 116, 165, 137, 138, 165, 165,
+ 165, 117, 118, 165, 165, 127, 122, 100, 101, 102,
+ 166, 165, 153, 106, 130, 131, 132, 133, 134, 165,
+ 165, 165, 165, 165, 117, 118, 167, 165, 165, 122,
+ 165, 165, 165, 165, 165, 165, 165, 130, 131, 132,
+ 133, 134, 74, 166, 165, 82, 165, 163, 80, 166,
+ 165, 167, 168, 165, 165, 87, 88, 89, 166, 91,
+ 166, 93, 166, 95, 166, 166, 98, 166, 166, 166,
+ 163, 103, 104, 105, 167, 168, 166, 109, 110, 166,
+ 117, 118, 166, 115, 116, 122, 166, 166, 166, 166,
+ 166, 166, 166, 166, 131, 127, 166, 166, 166, 166,
+ 166, 166, 166, 140, 166, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, -1, 167, 167,
+ 167, 167, 167, 167, 167, 162, 167, 167, 165, 167,
+ 169, 167, 167, -1, 171, 168, 170, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, -1, -1, -1, 171
+ );
+
+ protected array $actionBase = array(
+ 0, -2, 156, 559, 641, 1004, 1027, 485, 292, 200,
+ -60, 283, 568, 590, 590, 715, 590, 195, 578, 894,
+ 395, 395, 395, 825, 313, 313, 825, 313, 731, 731,
+ 731, 731, 764, 764, 965, 965, 998, 932, 899, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 37, 360, 216, 644, 1061, 1067, 1063,
+ 1068, 1059, 1058, 1062, 1064, 1069, 1109, 1110, 812, 1111,
+ 1112, 1108, 1113, 1065, 909, 1060, 1066, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 135, 477, 373, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 642, 642, 22,
+ 22, 22, 362, 813, 778, 813, 813, 813, 813, 813,
+ 813, 813, 813, 346, 205, 678, 188, 171, 171, 7,
+ 7, 7, 7, 7, 376, 779, 54, 1083, 1083, 139,
+ 139, 139, 139, -50, 49, 749, 380, 787, -39, 569,
+ 569, 536, 536, 335, 335, 349, 349, 335, 335, 335,
+ 212, 212, 212, 212, 415, 494, 519, 512, -71, 807,
+ 584, 584, 584, 584, 807, 807, 807, 807, 795, 1086,
+ 807, 807, 807, 639, 828, 828, 979, 452, 452, 452,
+ 828, 492, -70, -70, 492, 394, -70, 516, 982, 637,
+ 988, 397, 785, 486, 509, 397, -16, 299, 502, 233,
+ 854, 633, 854, 1056, 832, 832, 794, 752, 898, 1085,
+ 1070, 839, 1106, 842, 1107, 471, 10, 747, 1055, 1055,
+ 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1114,
+ 632, 1056, 145, 1114, 1114, 1114, 632, 632, 632, 632,
+ 632, 632, 632, 632, 796, 632, 632, 650, 145, 654,
+ 657, 145, 837, 632, 798, 37, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, -18, 37, 37, 360, 5,
+ 5, 37, 341, 52, 5, 5, 5, 5, 37, 37,
+ 37, 37, 633, 830, 789, 636, 278, 843, 128, 830,
+ 830, 830, 26, 136, 120, 732, 815, 259, 822, 822,
+ 829, 933, 933, 822, 827, 822, 829, 822, 822, 933,
+ 933, 855, 933, 163, 541, 430, 514, 562, 933, 273,
+ 822, 822, 822, 822, 845, 933, 58, 573, 822, 234,
+ 194, 822, 822, 845, 805, 802, 793, 933, 933, 933,
+ 845, 470, 793, 793, 793, 859, 861, 800, 799, 390,
+ 356, 598, 127, 850, 799, 799, 822, 535, 800, 799,
+ 800, 799, 852, 799, 799, 799, 800, 799, 827, 456,
+ 799, 720, 728, 586, 75, 799, 19, 950, 953, 734,
+ 954, 944, 955, 1008, 958, 959, 1073, 930, 977, 947,
+ 966, 1009, 935, 934, 811, 666, 692, 809, 784, 929,
+ 823, 823, 823, 917, 918, 823, 823, 823, 823, 823,
+ 823, 823, 823, 666, 847, 838, 817, 983, 703, 705,
+ 1044, 782, 1090, 1081, 982, 950, 959, 739, 947, 966,
+ 935, 934, 792, 790, 772, 783, 769, 763, 760, 762,
+ 797, 1046, 974, 791, 707, 1016, 985, 1089, 1071, 986,
+ 987, 1018, 1047, 866, 1050, 1091, 824, 1092, 1093, 900,
+ 989, 1074, 823, 912, 897, 901, 988, 925, 666, 902,
+ 1051, 997, 851, 1019, 1021, 1072, 834, 821, 907, 1094,
+ 990, 991, 999, 1075, 1076, 853, 1003, 804, 1022, 841,
+ 803, 1023, 1030, 1033, 1036, 1077, 1095, 1079, 911, 1080,
+ 868, 818, 931, 840, 1096, 307, 835, 836, 849, 1005,
+ 605, 978, 1082, 1087, 1097, 1040, 1041, 1042, 1098, 1099,
+ 975, 869, 1012, 833, 1014, 964, 870, 871, 608, 848,
+ 1052, 819, 831, 844, 626, 634, 1100, 1101, 1102, 976,
+ 806, 816, 875, 877, 1053, 826, 1054, 1103, 640, 880,
+ 1104, 1045, 736, 740, 560, 662, 647, 750, 820, 1084,
+ 814, 801, 810, 1001, 740, 808, 881, 1105, 883, 887,
+ 888, 1043, 892, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 468, 468, 468, 468, 468, 468, 313,
+ 313, 313, 313, 313, 468, 468, 468, 468, 468, 468,
+ 468, 313, 468, 468, 468, 313, 0, 0, 313, 0,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 716,
+ 716, 297, 297, 297, 297, 716, 716, 716, 716, 716,
+ 716, 716, 716, 716, 716, 297, 297, 0, 297, 297,
+ 297, 297, 297, 297, 297, 297, 855, 716, 716, 716,
+ 716, 452, 452, 452, 452, -95, -95, 716, 716, 716,
+ 394, 716, 716, 452, 452, 716, 716, 716, 716, 716,
+ 716, 716, 716, 716, 716, 716, 0, 0, 0, 145,
+ -70, 716, 827, 827, 827, 827, 716, 716, 716, 716,
+ -70, -70, 716, 716, 716, 0, 0, 0, 0, 0,
+ 0, 0, 0, 145, 0, 0, 145, 0, 0, 827,
+ 638, 827, 638, 716, 394, 855, 659, 716, 0, 0,
+ 0, 0, 145, 827, 145, 632, -70, -70, 632, 632,
+ 5, 37, 659, 613, 613, 613, 613, 0, 0, 633,
+ 855, 855, 855, 855, 855, 855, 855, 855, 855, 855,
+ 855, 827, 0, 855, 0, 827, 827, 827, 0, 0,
+ 0, 0, 0, 0, 0, 0, 933, 0, 0, 0,
+ 0, 0, 0, 0, 827, 0, 933, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 827, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 823, 834, 0, 0, 834,
+ 0, 823, 823, 823, 0, 0, 0, 848, 826
+ );
+
+ protected array $actionDefault = array(
+ 3,32767, 102,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767, 100,32767, 618, 618,
+ 618, 618,32767,32767, 255, 102,32767,32767, 487, 404,
+ 404, 404,32767,32767, 560, 560, 560, 560, 560,32767,
+ 32767,32767,32767,32767,32767, 487,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767, 36, 7,
+ 8, 10, 11, 49, 17, 328, 100,32767,32767,32767,
+ 32767,32767,32767,32767,32767, 102,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767, 611,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767, 392, 491, 470,
+ 471, 473, 474, 403, 561, 617, 331, 614, 333, 402,
+ 145, 343, 334, 243, 259, 492, 260, 493, 496, 497,
+ 216, 389, 149, 150, 434, 488, 436, 486, 490, 435,
+ 409, 415, 416, 417, 418, 419, 420, 421, 422, 423,
+ 424, 425, 426, 427, 407, 408, 489,32767,32767, 467,
+ 466, 465, 432,32767,32767,32767,32767,32767,32767,32767,
+ 32767, 102,32767, 433, 437, 406, 440, 438, 439, 456,
+ 457, 454, 455, 458,32767,32767, 320,32767,32767, 459,
+ 460, 461, 462, 370, 368,32767,32767, 320, 111,32767,
+ 32767, 447, 448,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767, 504, 554, 464,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 102,32767, 100, 556, 429, 431, 524, 442, 443, 441,
+ 410,32767, 529,32767, 102,32767, 531,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767, 555,32767, 562, 562,
+ 32767, 517, 100, 195,32767, 530, 195, 195,32767,32767,
+ 32767,32767,32767,32767,32767,32767, 625, 517, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110,32767,
+ 195, 110,32767,32767,32767, 100, 195, 195, 195, 195,
+ 195, 195, 195, 195, 532, 195, 195, 190,32767, 269,
+ 271, 102, 579, 195, 534,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767, 517, 452, 138,32767, 519, 138, 562, 444,
+ 445, 446, 562, 562, 562, 316, 293,32767,32767,32767,
+ 32767, 532, 532, 100, 100, 100, 100,32767,32767,32767,
+ 32767, 111, 503, 99, 99, 99, 99, 99, 103, 101,
+ 32767,32767,32767,32767, 224,32767, 101, 99,32767, 101,
+ 101,32767,32767, 224, 226, 213, 228,32767, 583, 584,
+ 224, 101, 228, 228, 228, 248, 248, 506, 322, 101,
+ 99, 101, 101, 197, 322, 322,32767, 101, 506, 322,
+ 506, 322, 199, 322, 322, 322, 506, 322,32767, 101,
+ 322, 215, 392, 99, 99, 322,32767,32767,32767, 519,
+ 32767,32767,32767,32767,32767,32767,32767, 223,32767,32767,
+ 32767,32767,32767,32767,32767,32767, 549,32767, 567, 581,
+ 450, 451, 453, 566, 564, 475, 476, 477, 478, 479,
+ 480, 481, 483, 613,32767, 523,32767,32767,32767, 342,
+ 32767, 623,32767,32767,32767, 9, 74, 512, 42, 43,
+ 51, 57, 538, 539, 540, 541, 535, 536, 542, 537,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767, 624,32767, 562,32767,32767,
+ 32767,32767, 449, 544, 589,32767,32767, 563, 616,32767,
+ 32767,32767,32767,32767,32767,32767, 138,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767, 549,32767, 136,
+ 32767,32767,32767,32767,32767,32767,32767,32767, 545,32767,
+ 32767,32767, 562,32767,32767,32767,32767, 318, 315,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767, 562,32767,32767,32767,32767,
+ 32767, 295,32767, 312,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767, 388, 519, 298, 300, 301,32767,32767,32767,
+ 32767, 364,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767, 152, 152, 3, 3, 345, 152, 152,
+ 152, 345, 345, 152, 345, 345, 345, 152, 152, 152,
+ 152, 152, 152, 281, 185, 263, 266, 248, 248, 152,
+ 356, 152
+ );
+
+ protected array $goto = array(
+ 196, 196, 1041, 352, 700, 465, 587, 470, 470, 1072,
+ 736, 641, 643, 1205, 855, 663, 470, 856, 709, 687,
+ 690, 1014, 698, 707, 1010, 625, 662, 166, 166, 166,
+ 166, 220, 197, 193, 193, 176, 178, 215, 193, 193,
+ 193, 193, 193, 194, 194, 194, 194, 194, 188, 189,
+ 190, 191, 192, 217, 215, 218, 540, 541, 423, 542,
+ 545, 546, 547, 548, 549, 550, 551, 552, 1156, 167,
+ 168, 169, 195, 170, 171, 172, 165, 173, 174, 175,
+ 177, 214, 216, 219, 239, 242, 253, 254, 256, 257,
+ 258, 259, 260, 261, 262, 263, 269, 270, 271, 272,
+ 281, 282, 317, 318, 319, 429, 430, 431, 602, 221,
+ 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
+ 232, 233, 234, 235, 179, 236, 180, 188, 189, 190,
+ 191, 192, 217, 1156, 198, 199, 200, 201, 240, 181,
+ 182, 202, 183, 203, 199, 184, 241, 198, 164, 204,
+ 205, 185, 206, 207, 208, 186, 209, 210, 187, 211,
+ 212, 213, 278, 278, 278, 278, 858, 433, 665, 979,
+ 916, 604, 917, 428, 320, 314, 315, 338, 597, 432,
+ 339, 434, 642, 627, 627, 896, 854, 896, 896, 1291,
+ 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 614,
+ 628, 631, 632, 633, 634, 655, 656, 657, 711, 830,
+ 871, 460, 912, 907, 908, 921, 864, 909, 861, 910,
+ 911, 862, 356, 915, 868, 421, 883, 482, 867, 870,
+ 1361, 1361, 356, 356, 484, 1094, 1089, 1090, 1091, 889,
+ 603, 1107, 397, 400, 605, 609, 356, 356, 1361, 594,
+ 356, 712, 344, 1378, 353, 354, 511, 703, 442, 1105,
+ 1260, 1041, 1260, 1260, 350, 559, 1364, 1364, 356, 356,
+ 1041, 1260, 1041, 1351, 1041, 1041, 345, 344, 1041, 1041,
+ 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1000,
+ 1236, 948, 249, 249, 1260, 1237, 1240, 949, 1241, 1260,
+ 1260, 1260, 1260, 1114, 1115, 1260, 1260, 1260, 1343, 1343,
+ 1343, 1343, 564, 557, 851, 427, 1322, 616, 395, 247,
+ 247, 247, 247, 244, 250, 592, 929, 503, 664, 504,
+ 930, 355, 355, 355, 355, 510, 945, 512, 945, 479,
+ 1336, 1337, 328, 557, 564, 589, 590, 330, 600, 606,
+ 1153, 621, 622, 555, 1065, 555, 555, 658, 659, 25,
+ 676, 677, 678, 440, 555, 1310, 1310, 686, 559, 851,
+ 670, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310,
+ 1310, 1044, 1044, 1047, 1046, 685, 956, 458, 340, 1036,
+ 1052, 1053, 973, 973, 973, 973, 1050, 1051, 458, 967,
+ 974, 1307, 1307, 971, 412, 708, 848, 1307, 1307, 1307,
+ 1307, 1307, 1307, 1307, 1307, 1307, 1307, 5, 610, 6,
+ 873, 934, 1143, 451, 451, 876, 451, 451, 1333, 962,
+ 1333, 1333, 1253, 1019, 404, 553, 553, 553, 553, 1333,
+ 608, 875, 620, 668, 998, 1251, 558, 584, 1022, 869,
+ 739, 558, 885, 584, 480, 398, 464, 1078, 697, 326,
+ 309, 1250, 832, 1345, 1345, 1345, 1345, 1082, 473, 601,
+ 474, 475, 1338, 1339, 697, 1128, 881, 697, 984, 1369,
+ 1370, 598, 619, 1032, 0, 544, 544, 851, 836, 0,
+ 1329, 544, 544, 544, 544, 544, 544, 544, 544, 544,
+ 544, 543, 543, 1255, 879, 0, 0, 543, 0, 543,
+ 543, 543, 543, 543, 543, 543, 543, 451, 451, 451,
+ 451, 451, 451, 451, 451, 451, 451, 451, 252, 252,
+ 451, 836, 1080, 836, 409, 410, 1331, 1331, 1080, 674,
+ 0, 675, 0, 414, 415, 416, 0, 688, 0, 0,
+ 417, 635, 637, 639, 0, 348, 0, 0, 1256, 1257,
+ 0, 1243, 884, 872, 1077, 1081, 0, 846, 1003, 0,
+ 0, 975, 0, 735, 1243, 982, 556, 1012, 1007, 0,
+ 435, 0, 0, 0, 0, 0, 1258, 1319, 1320, 0,
+ 0, 435, 273, 325, 0, 325, 325, 0, 972, 1048,
+ 1048, 0, 0, 0, 669, 1059, 1055, 1056, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1126, 888, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1017, 1017
+ );
+
+ protected array $gotoCheck = array(
+ 42, 42, 73, 97, 73, 156, 48, 154, 154, 128,
+ 48, 48, 48, 156, 26, 48, 154, 27, 9, 48,
+ 48, 48, 48, 48, 48, 56, 56, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 23, 23, 23, 23, 15, 66, 66, 49,
+ 65, 131, 65, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 108, 108, 25, 25, 25, 25, 108,
+ 108, 108, 108, 108, 108, 108, 108, 108, 108, 81,
+ 81, 81, 81, 81, 81, 81, 81, 81, 81, 6,
+ 35, 83, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 14, 15, 15, 43, 35, 84, 15, 35,
+ 188, 188, 14, 14, 84, 15, 15, 15, 15, 45,
+ 8, 8, 59, 59, 59, 59, 14, 14, 188, 178,
+ 14, 8, 174, 14, 97, 97, 8, 8, 83, 8,
+ 73, 73, 73, 73, 185, 14, 188, 188, 14, 14,
+ 73, 73, 73, 187, 73, 73, 174, 174, 73, 73,
+ 73, 73, 73, 73, 73, 73, 73, 73, 73, 103,
+ 79, 79, 5, 5, 73, 79, 79, 79, 79, 73,
+ 73, 73, 73, 145, 145, 73, 73, 73, 9, 9,
+ 9, 9, 76, 76, 22, 13, 14, 13, 62, 5,
+ 5, 5, 5, 5, 5, 104, 73, 160, 64, 160,
+ 73, 24, 24, 24, 24, 160, 9, 14, 9, 182,
+ 182, 182, 76, 76, 76, 76, 76, 76, 76, 76,
+ 155, 76, 76, 19, 115, 19, 19, 86, 86, 76,
+ 86, 86, 86, 113, 19, 176, 176, 117, 14, 22,
+ 121, 176, 176, 176, 176, 176, 176, 176, 176, 176,
+ 176, 89, 89, 119, 119, 89, 89, 19, 29, 89,
+ 89, 89, 19, 19, 19, 19, 120, 120, 19, 19,
+ 19, 177, 177, 93, 93, 93, 18, 177, 177, 177,
+ 177, 177, 177, 177, 177, 177, 177, 46, 17, 46,
+ 37, 17, 17, 23, 23, 39, 23, 23, 131, 92,
+ 131, 131, 14, 17, 28, 107, 107, 107, 107, 131,
+ 107, 17, 80, 17, 17, 166, 9, 9, 110, 17,
+ 99, 9, 41, 9, 157, 9, 9, 130, 7, 175,
+ 175, 17, 7, 131, 131, 131, 131, 133, 9, 9,
+ 9, 9, 184, 184, 7, 148, 9, 7, 96, 9,
+ 9, 2, 2, 114, -1, 179, 179, 22, 12, -1,
+ 131, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 179, 162, 162, 20, 9, -1, -1, 162, -1, 162,
+ 162, 162, 162, 162, 162, 162, 162, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 5, 5,
+ 23, 12, 131, 12, 82, 82, 131, 131, 131, 82,
+ -1, 82, -1, 82, 82, 82, -1, 82, -1, -1,
+ 82, 85, 85, 85, -1, 82, -1, -1, 20, 20,
+ -1, 20, 16, 16, 16, 16, -1, 20, 50, -1,
+ -1, 50, -1, 50, 20, 16, 50, 50, 50, -1,
+ 118, -1, -1, -1, -1, -1, 20, 20, 20, -1,
+ -1, 118, 24, 24, -1, 24, 24, -1, 16, 118,
+ 118, -1, -1, -1, 118, 118, 118, 118, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 16, 16, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 107, 107
+ );
+
+ protected array $gotoBase = array(
+ 0, 0, -234, 0, 0, 291, 199, 451, 232, 8,
+ 0, 0, 191, -25, -76, -183, 108, -48, 96, 88,
+ 109, 0, 36, 159, 328, 182, 10, 13, 94, 91,
+ 0, 0, 0, 0, 0, -162, 0, 78, 0, 101,
+ 0, 9, -1, 202, 0, 213, -322, 0, -708, 151,
+ 556, 0, 0, 0, 0, 0, -15, 0, 0, 197,
+ 0, 0, 276, 0, 90, 156, -70, 0, 0, 0,
+ 0, 0, 0, -5, 0, 0, -34, 0, 0, -119,
+ 112, -160, 40, -67, -246, 69, -364, 0, 0, 102,
+ 0, 0, 97, 98, 0, 0, 33, -483, 0, 42,
+ 0, 0, 0, 254, 282, 0, 0, 407, -54, 0,
+ 77, 0, 0, 86, -29, 79, 0, 84, 314, 104,
+ 111, 80, 0, 0, 0, 0, 0, 0, 7, 0,
+ 82, 163, 0, 23, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 30, 0, 0, 29, 0,
+ 0, 0, 0, 0, -27, 106, -263, 12, 0, 0,
+ -171, 0, 264, 0, 0, 0, 75, 0, 0, 0,
+ 0, 0, 0, 0, -46, 137, 128, 164, 220, 248,
+ 0, 0, 38, 0, 99, 234, 0, 242, -78, 0,
+ 0
+ );
+
+ protected array $gotoDefault = array(
+ -32768, 516, 743, 4, 744, 938, 819, 828, 580, 534,
+ 710, 349, 629, 424, 1327, 914, 1142, 599, 847, 1269,
+ 1275, 459, 850, 333, 733, 926, 897, 898, 401, 388,
+ 863, 399, 653, 630, 497, 882, 455, 874, 489, 877,
+ 454, 886, 163, 420, 514, 890, 3, 893, 562, 924,
+ 977, 389, 901, 390, 681, 903, 583, 905, 906, 396,
+ 402, 403, 1147, 591, 626, 918, 255, 585, 919, 387,
+ 920, 928, 392, 394, 691, 469, 508, 502, 413, 1109,
+ 586, 613, 650, 448, 476, 624, 636, 623, 483, 436,
+ 418, 332, 961, 969, 490, 467, 983, 351, 991, 741,
+ 1155, 644, 492, 999, 645, 1006, 1009, 535, 536, 481,
+ 1021, 266, 1024, 493, 1033, 23, 671, 1038, 1039, 672,
+ 646, 1061, 647, 673, 648, 1063, 466, 581, 1071, 456,
+ 1079, 1315, 457, 1083, 264, 1086, 277, 419, 437, 1092,
+ 1093, 9, 1099, 701, 702, 19, 274, 513, 1127, 692,
+ -32768,-32768,-32768,-32768, 453, 1154, 452, 1224, 1226, 563,
+ 494, 1244, 294, 1247, 684, 509, 1252, 449, 1318, 450,
+ 537, 477, 316, 538, 1362, 308, 336, 313, 554, 295,
+ 337, 539, 478, 1324, 1332, 334, 31, 1352, 1363, 596,
+ 618
+ );
+
+ protected array $ruleToNonTerminal = array(
+ 0, 1, 3, 3, 2, 5, 5, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 7, 7, 7,
+ 7, 7, 7, 7, 7, 8, 8, 9, 10, 11,
+ 11, 11, 12, 12, 13, 13, 14, 15, 15, 16,
+ 16, 17, 17, 18, 18, 21, 21, 22, 23, 23,
+ 24, 24, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 29, 29, 30, 30, 32, 34, 34,
+ 28, 36, 36, 33, 38, 38, 35, 35, 37, 37,
+ 39, 39, 31, 40, 40, 41, 43, 44, 44, 45,
+ 45, 46, 46, 48, 47, 47, 47, 47, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 25, 25, 50, 69, 69, 72, 72, 71,
+ 70, 70, 63, 75, 75, 76, 76, 77, 77, 78,
+ 78, 79, 79, 80, 80, 80, 26, 26, 27, 27,
+ 27, 27, 27, 88, 88, 90, 90, 83, 83, 91,
+ 91, 92, 92, 92, 84, 84, 87, 87, 85, 85,
+ 93, 94, 94, 57, 57, 65, 65, 68, 68, 68,
+ 67, 95, 95, 96, 58, 58, 58, 58, 97, 97,
+ 98, 98, 99, 99, 100, 101, 101, 102, 102, 103,
+ 103, 55, 55, 51, 51, 105, 53, 53, 106, 52,
+ 52, 54, 54, 64, 64, 64, 64, 81, 81, 109,
+ 109, 111, 111, 112, 112, 112, 112, 112, 112, 112,
+ 110, 110, 110, 115, 115, 115, 115, 89, 89, 118,
+ 118, 118, 119, 119, 116, 116, 120, 120, 122, 122,
+ 123, 123, 117, 124, 124, 121, 125, 125, 125, 125,
+ 113, 113, 82, 82, 82, 20, 20, 20, 127, 126,
+ 126, 128, 128, 128, 128, 60, 129, 129, 130, 61,
+ 132, 132, 133, 133, 134, 134, 86, 135, 135, 135,
+ 135, 135, 135, 135, 140, 140, 141, 141, 142, 142,
+ 142, 142, 142, 143, 144, 144, 139, 139, 136, 136,
+ 138, 138, 146, 146, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 137, 147, 147, 149, 148, 148,
+ 150, 150, 114, 151, 151, 153, 153, 153, 152, 152,
+ 62, 104, 154, 154, 56, 56, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 161, 162, 162, 163, 155, 155, 160, 160, 164, 165,
+ 165, 166, 167, 168, 168, 168, 168, 19, 19, 73,
+ 73, 73, 73, 156, 156, 156, 156, 170, 170, 159,
+ 159, 159, 157, 157, 176, 176, 176, 176, 176, 176,
+ 176, 176, 176, 176, 177, 177, 177, 108, 179, 179,
+ 179, 179, 158, 158, 158, 158, 158, 158, 158, 158,
+ 59, 59, 173, 173, 173, 173, 173, 180, 180, 169,
+ 169, 169, 169, 181, 181, 181, 181, 181, 181, 74,
+ 74, 66, 66, 66, 66, 131, 131, 131, 131, 184,
+ 183, 172, 172, 172, 172, 172, 172, 172, 171, 171,
+ 171, 182, 182, 182, 182, 107, 178, 186, 186, 185,
+ 185, 187, 187, 187, 187, 187, 187, 187, 187, 175,
+ 175, 175, 175, 174, 189, 188, 188, 188, 188, 188,
+ 188, 188, 188, 190, 190, 190, 190
+ );
+
+ protected array $ruleToLength = array(
+ 1, 1, 2, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 0, 1, 1, 2, 1, 3, 4, 1, 2,
+ 0, 1, 1, 1, 1, 4, 3, 5, 4, 3,
+ 4, 1, 3, 1, 1, 8, 7, 2, 3, 1,
+ 2, 3, 1, 2, 3, 1, 1, 3, 1, 3,
+ 1, 2, 2, 3, 1, 3, 2, 3, 1, 3,
+ 3, 2, 0, 1, 1, 1, 1, 1, 3, 7,
+ 10, 5, 7, 9, 5, 3, 3, 3, 3, 3,
+ 3, 1, 2, 5, 7, 9, 6, 5, 6, 3,
+ 2, 1, 1, 1, 1, 0, 2, 1, 3, 8,
+ 0, 4, 2, 1, 3, 0, 1, 0, 1, 0,
+ 1, 3, 1, 1, 1, 1, 8, 9, 7, 8,
+ 7, 6, 8, 0, 2, 0, 2, 1, 2, 1,
+ 2, 1, 1, 1, 0, 2, 0, 2, 0, 2,
+ 2, 1, 3, 1, 4, 1, 4, 1, 1, 4,
+ 2, 1, 3, 3, 3, 4, 4, 5, 0, 2,
+ 4, 3, 1, 1, 7, 0, 2, 1, 3, 3,
+ 4, 1, 4, 0, 2, 5, 0, 2, 6, 0,
+ 2, 0, 3, 1, 2, 1, 1, 2, 0, 1,
+ 3, 0, 2, 1, 1, 1, 1, 1, 1, 1,
+ 7, 9, 6, 1, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 3, 3, 3, 1, 3, 3, 3,
+ 3, 3, 1, 3, 3, 1, 1, 2, 1, 1,
+ 0, 1, 0, 2, 2, 2, 4, 3, 1, 1,
+ 3, 1, 2, 2, 3, 2, 3, 1, 1, 2,
+ 3, 1, 1, 3, 2, 0, 1, 5, 5, 6,
+ 10, 3, 5, 1, 1, 3, 0, 2, 4, 5,
+ 4, 4, 4, 3, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 2, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 2, 1, 3, 1, 1, 3,
+ 0, 2, 0, 5, 8, 1, 3, 3, 0, 2,
+ 2, 2, 3, 1, 0, 1, 1, 3, 3, 3,
+ 4, 4, 1, 1, 2, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 2, 2,
+ 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 5, 4, 3, 4, 4,
+ 2, 2, 4, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 1, 3, 2, 1, 2, 4,
+ 2, 2, 8, 9, 8, 9, 9, 10, 9, 10,
+ 8, 3, 2, 2, 1, 1, 0, 4, 2, 1,
+ 3, 2, 1, 2, 2, 2, 4, 1, 1, 1,
+ 1, 1, 1, 1, 1, 3, 1, 1, 1, 0,
+ 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 3, 5, 3, 3, 4, 1,
+ 1, 3, 1, 1, 1, 1, 1, 3, 2, 3,
+ 0, 1, 1, 3, 1, 1, 1, 1, 1, 1,
+ 3, 1, 1, 1, 4, 4, 1, 4, 4, 0,
+ 1, 1, 1, 3, 3, 1, 4, 2, 2, 1,
+ 3, 1, 4, 4, 3, 3, 3, 3, 1, 3,
+ 1, 1, 3, 1, 1, 4, 1, 1, 1, 3,
+ 1, 1, 2, 1, 3, 4, 3, 2, 0, 2,
+ 2, 1, 2, 1, 1, 1, 4, 3, 3, 3,
+ 3, 6, 3, 1, 1, 2, 1
+ );
+
+ protected function initReduceCallbacks(): void {
+ $this->reduceCallbacks = [
+ 0 => null,
+ 1 => static function ($self, $stackPos) {
+ $self->semValue = $self->handleNamespaces($self->semStack[$stackPos-(1-1)]);
+ },
+ 2 => static function ($self, $stackPos) {
+ if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; } $self->semValue = $self->semStack[$stackPos-(2-1)];;
+ },
+ 3 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 4 => static function ($self, $stackPos) {
+ $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);;
+ if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)];
+ },
+ 5 => null,
+ 6 => null,
+ 7 => null,
+ 8 => null,
+ 9 => null,
+ 10 => null,
+ 11 => null,
+ 12 => null,
+ 13 => null,
+ 14 => null,
+ 15 => null,
+ 16 => null,
+ 17 => null,
+ 18 => null,
+ 19 => null,
+ 20 => null,
+ 21 => null,
+ 22 => null,
+ 23 => null,
+ 24 => null,
+ 25 => null,
+ 26 => null,
+ 27 => null,
+ 28 => null,
+ 29 => null,
+ 30 => null,
+ 31 => null,
+ 32 => null,
+ 33 => null,
+ 34 => null,
+ 35 => null,
+ 36 => null,
+ 37 => null,
+ 38 => null,
+ 39 => null,
+ 40 => null,
+ 41 => null,
+ 42 => null,
+ 43 => null,
+ 44 => null,
+ 45 => null,
+ 46 => null,
+ 47 => null,
+ 48 => null,
+ 49 => null,
+ 50 => null,
+ 51 => null,
+ 52 => null,
+ 53 => null,
+ 54 => null,
+ 55 => null,
+ 56 => null,
+ 57 => null,
+ 58 => null,
+ 59 => null,
+ 60 => null,
+ 61 => null,
+ 62 => null,
+ 63 => null,
+ 64 => null,
+ 65 => null,
+ 66 => null,
+ 67 => null,
+ 68 => null,
+ 69 => null,
+ 70 => null,
+ 71 => null,
+ 72 => null,
+ 73 => null,
+ 74 => null,
+ 75 => null,
+ 76 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(1-1)]; if ($self->semValue === "=") $self->emitError(new Error('Cannot use "=" as an identifier', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])));
+ },
+ 77 => null,
+ 78 => null,
+ 79 => null,
+ 80 => null,
+ 81 => null,
+ 82 => null,
+ 83 => null,
+ 84 => null,
+ 85 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 86 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 87 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 88 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 89 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 90 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 91 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 92 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 93 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 94 => null,
+ 95 => static function ($self, $stackPos) {
+ $self->semValue = new Name(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 96 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Variable(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 97 => static function ($self, $stackPos) {
+ /* nothing */
+ },
+ 98 => static function ($self, $stackPos) {
+ /* nothing */
+ },
+ 99 => static function ($self, $stackPos) {
+ /* nothing */
+ },
+ 100 => static function ($self, $stackPos) {
+ $self->emitError(new Error('A trailing comma is not allowed here', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])));
+ },
+ 101 => null,
+ 102 => null,
+ 103 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Attribute($self->semStack[$stackPos-(1-1)], [], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 104 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Attribute($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 105 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 106 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 107 => static function ($self, $stackPos) {
+ $self->semValue = new Node\AttributeGroup($self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 108 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 109 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 110 => static function ($self, $stackPos) {
+ $self->semValue = [];
+ },
+ 111 => null,
+ 112 => null,
+ 113 => null,
+ 114 => null,
+ 115 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\HaltCompiler($self->handleHaltCompiler(), $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 116 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Namespace_($self->semStack[$stackPos-(3-2)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
+ $self->checkNamespace($self->semValue);
+ },
+ 117 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Namespace_($self->semStack[$stackPos-(5-2)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
+ $self->checkNamespace($self->semValue);
+ },
+ 118 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Namespace_(null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
+ $self->checkNamespace($self->semValue);
+ },
+ 119 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Use_($self->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 120 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Use_($self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 121 => null,
+ 122 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Const_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 123 => static function ($self, $stackPos) {
+ $self->semValue = Stmt\Use_::TYPE_FUNCTION;
+ },
+ 124 => static function ($self, $stackPos) {
+ $self->semValue = Stmt\Use_::TYPE_CONSTANT;
+ },
+ 125 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\GroupUse($self->semStack[$stackPos-(8-3)], $self->semStack[$stackPos-(8-6)], $self->semStack[$stackPos-(8-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 126 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\GroupUse($self->semStack[$stackPos-(7-2)], $self->semStack[$stackPos-(7-5)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 127 => null,
+ 128 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 129 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 130 => null,
+ 131 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 132 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 133 => null,
+ 134 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 135 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 136 => static function ($self, $stackPos) {
+ $self->semValue = new Node\UseItem($self->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(1-1));
+ },
+ 137 => static function ($self, $stackPos) {
+ $self->semValue = new Node\UseItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(3-3));
+ },
+ 138 => static function ($self, $stackPos) {
+ $self->semValue = new Node\UseItem($self->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(1-1));
+ },
+ 139 => static function ($self, $stackPos) {
+ $self->semValue = new Node\UseItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(3-3));
+ },
+ 140 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(1-1)]; $self->semValue->type = Stmt\Use_::TYPE_NORMAL;
+ },
+ 141 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(2-2)]; $self->semValue->type = $self->semStack[$stackPos-(2-1)];
+ },
+ 142 => null,
+ 143 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 144 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 145 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Const_($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 146 => null,
+ 147 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 148 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 149 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Const_(new Node\Identifier($self->semStack[$stackPos-(3-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos-(3-1)])), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 150 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Const_(new Node\Identifier($self->semStack[$stackPos-(3-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos-(3-1)])), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 151 => static function ($self, $stackPos) {
+ if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; } $self->semValue = $self->semStack[$stackPos-(2-1)];;
+ },
+ 152 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 153 => static function ($self, $stackPos) {
+ $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);;
+ if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)];
+ },
+ 154 => null,
+ 155 => null,
+ 156 => null,
+ 157 => static function ($self, $stackPos) {
+ throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 158 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Block($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 159 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\If_($self->semStack[$stackPos-(7-3)], ['stmts' => $self->semStack[$stackPos-(7-5)], 'elseifs' => $self->semStack[$stackPos-(7-6)], 'else' => $self->semStack[$stackPos-(7-7)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 160 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\If_($self->semStack[$stackPos-(10-3)], ['stmts' => $self->semStack[$stackPos-(10-6)], 'elseifs' => $self->semStack[$stackPos-(10-7)], 'else' => $self->semStack[$stackPos-(10-8)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 161 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\While_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 162 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Do_($self->semStack[$stackPos-(7-5)], $self->semStack[$stackPos-(7-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 163 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\For_(['init' => $self->semStack[$stackPos-(9-3)], 'cond' => $self->semStack[$stackPos-(9-5)], 'loop' => $self->semStack[$stackPos-(9-7)], 'stmts' => $self->semStack[$stackPos-(9-9)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 164 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Switch_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 165 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Break_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 166 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Continue_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 167 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Return_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 168 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Global_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 169 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Static_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 170 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Echo_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 171 => static function ($self, $stackPos) {
+
+ $self->semValue = new Stmt\InlineHTML($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ $self->semValue->setAttribute('hasLeadingNewline', $self->inlineHtmlHasLeadingNewline($stackPos-(1-1)));
+
+ },
+ 172 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Expression($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 173 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Unset_($self->semStack[$stackPos-(5-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 174 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $self->semStack[$stackPos-(7-5)][1], 'stmts' => $self->semStack[$stackPos-(7-7)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 175 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(9-3)], $self->semStack[$stackPos-(9-7)][0], ['keyVar' => $self->semStack[$stackPos-(9-5)], 'byRef' => $self->semStack[$stackPos-(9-7)][1], 'stmts' => $self->semStack[$stackPos-(9-9)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 176 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(6-3)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(6-4)], $self->tokenEndStack[$stackPos-(6-4)])), ['stmts' => $self->semStack[$stackPos-(6-6)]], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 177 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Declare_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 178 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\TryCatch($self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-5)], $self->semStack[$stackPos-(6-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); $self->checkTryCatch($self->semValue);
+ },
+ 179 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Goto_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 180 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Label($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 181 => static function ($self, $stackPos) {
+ $self->semValue = null; /* means: no statement */
+ },
+ 182 => null,
+ 183 => static function ($self, $stackPos) {
+ $self->semValue = $self->maybeCreateNop($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]);
+ },
+ 184 => static function ($self, $stackPos) {
+ if ($self->semStack[$stackPos-(1-1)] instanceof Stmt\Block) { $self->semValue = $self->semStack[$stackPos-(1-1)]->stmts; } else if ($self->semStack[$stackPos-(1-1)] === null) { $self->semValue = []; } else { $self->semValue = [$self->semStack[$stackPos-(1-1)]]; };
+ },
+ 185 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 186 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 187 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 188 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 189 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Catch_($self->semStack[$stackPos-(8-3)], $self->semStack[$stackPos-(8-4)], $self->semStack[$stackPos-(8-7)], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 190 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 191 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Finally_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 192 => null,
+ 193 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 194 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 195 => static function ($self, $stackPos) {
+ $self->semValue = false;
+ },
+ 196 => static function ($self, $stackPos) {
+ $self->semValue = true;
+ },
+ 197 => static function ($self, $stackPos) {
+ $self->semValue = false;
+ },
+ 198 => static function ($self, $stackPos) {
+ $self->semValue = true;
+ },
+ 199 => static function ($self, $stackPos) {
+ $self->semValue = false;
+ },
+ 200 => static function ($self, $stackPos) {
+ $self->semValue = true;
+ },
+ 201 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 202 => static function ($self, $stackPos) {
+ $self->semValue = [];
+ },
+ 203 => null,
+ 204 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 205 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 206 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Function_($self->semStack[$stackPos-(8-3)], ['byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-5)], 'returnType' => $self->semStack[$stackPos-(8-7)], 'stmts' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 207 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Function_($self->semStack[$stackPos-(9-4)], ['byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-6)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 208 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Class_($self->semStack[$stackPos-(7-2)], ['type' => $self->semStack[$stackPos-(7-1)], 'extends' => $self->semStack[$stackPos-(7-3)], 'implements' => $self->semStack[$stackPos-(7-4)], 'stmts' => $self->semStack[$stackPos-(7-6)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]));
+ $self->checkClass($self->semValue, $stackPos-(7-2));
+ },
+ 209 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Class_($self->semStack[$stackPos-(8-3)], ['type' => $self->semStack[$stackPos-(8-2)], 'extends' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ $self->checkClass($self->semValue, $stackPos-(8-3));
+ },
+ 210 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Interface_($self->semStack[$stackPos-(7-3)], ['extends' => $self->semStack[$stackPos-(7-4)], 'stmts' => $self->semStack[$stackPos-(7-6)], 'attrGroups' => $self->semStack[$stackPos-(7-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]));
+ $self->checkInterface($self->semValue, $stackPos-(7-3));
+ },
+ 211 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Trait_($self->semStack[$stackPos-(6-3)], ['stmts' => $self->semStack[$stackPos-(6-5)], 'attrGroups' => $self->semStack[$stackPos-(6-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 212 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Enum_($self->semStack[$stackPos-(8-3)], ['scalarType' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ $self->checkEnum($self->semValue, $stackPos-(8-3));
+ },
+ 213 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 214 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(2-2)];
+ },
+ 215 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 216 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(2-2)];
+ },
+ 217 => static function ($self, $stackPos) {
+ $self->semValue = 0;
+ },
+ 218 => null,
+ 219 => null,
+ 220 => static function ($self, $stackPos) {
+ $self->checkClassModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)];
+ },
+ 221 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::ABSTRACT;
+ },
+ 222 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::FINAL;
+ },
+ 223 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::READONLY;
+ },
+ 224 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 225 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(2-2)];
+ },
+ 226 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 227 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(2-2)];
+ },
+ 228 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 229 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(2-2)];
+ },
+ 230 => null,
+ 231 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 232 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 233 => null,
+ 234 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-2)];
+ },
+ 235 => null,
+ 236 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-2)];
+ },
+ 237 => static function ($self, $stackPos) {
+ if ($self->semStack[$stackPos-(1-1)] instanceof Stmt\Block) { $self->semValue = $self->semStack[$stackPos-(1-1)]->stmts; } else if ($self->semStack[$stackPos-(1-1)] === null) { $self->semValue = []; } else { $self->semValue = [$self->semStack[$stackPos-(1-1)]]; };
+ },
+ 238 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 239 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-2)];
+ },
+ 240 => null,
+ 241 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 242 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 243 => static function ($self, $stackPos) {
+ $self->semValue = new Node\DeclareItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 244 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 245 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-3)];
+ },
+ 246 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-2)];
+ },
+ 247 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(5-3)];
+ },
+ 248 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 249 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 250 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Case_($self->semStack[$stackPos-(4-2)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 251 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Case_(null, $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 252 => null,
+ 253 => null,
+ 254 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Match_($self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 255 => static function ($self, $stackPos) {
+ $self->semValue = [];
+ },
+ 256 => null,
+ 257 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 258 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 259 => static function ($self, $stackPos) {
+ $self->semValue = new Node\MatchArm($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 260 => static function ($self, $stackPos) {
+ $self->semValue = new Node\MatchArm(null, $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 261 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(1-1)];
+ },
+ 262 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-2)];
+ },
+ 263 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 264 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 265 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\ElseIf_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 266 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 267 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 268 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\ElseIf_($self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); $self->fixupAlternativeElse($self->semValue);
+ },
+ 269 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 270 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Else_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 271 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 272 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Else_($self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->fixupAlternativeElse($self->semValue);
+ },
+ 273 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)], false);
+ },
+ 274 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(2-2)], true);
+ },
+ 275 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)], false);
+ },
+ 276 => static function ($self, $stackPos) {
+ $self->semValue = array($self->fixupArrayDestructuring($self->semStack[$stackPos-(1-1)]), false);
+ },
+ 277 => null,
+ 278 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 279 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 280 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 281 => static function ($self, $stackPos) {
+ $self->semValue = 0;
+ },
+ 282 => static function ($self, $stackPos) {
+ $self->checkModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)];
+ },
+ 283 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PUBLIC;
+ },
+ 284 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PROTECTED;
+ },
+ 285 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PRIVATE;
+ },
+ 286 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PUBLIC_SET;
+ },
+ 287 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PROTECTED_SET;
+ },
+ 288 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PRIVATE_SET;
+ },
+ 289 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::READONLY;
+ },
+ 290 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Param($self->semStack[$stackPos-(7-6)], null, $self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-4)], $self->semStack[$stackPos-(7-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(7-2)], $self->semStack[$stackPos-(7-1)], $self->semStack[$stackPos-(7-7)]);
+ $self->checkParam($self->semValue);
+ $self->addPropertyNameToHooks($self->semValue);
+ },
+ 291 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Param($self->semStack[$stackPos-(9-6)], $self->semStack[$stackPos-(9-8)], $self->semStack[$stackPos-(9-3)], $self->semStack[$stackPos-(9-4)], $self->semStack[$stackPos-(9-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(9-2)], $self->semStack[$stackPos-(9-1)], $self->semStack[$stackPos-(9-9)]);
+ $self->checkParam($self->semValue);
+ $self->addPropertyNameToHooks($self->semValue);
+ },
+ 292 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Param(new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])), null, $self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-4)], $self->semStack[$stackPos-(6-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(6-2)], $self->semStack[$stackPos-(6-1)]);
+ },
+ 293 => null,
+ 294 => static function ($self, $stackPos) {
+ $self->semValue = new Node\NullableType($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 295 => static function ($self, $stackPos) {
+ $self->semValue = new Node\UnionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 296 => null,
+ 297 => null,
+ 298 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Name('static', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 299 => static function ($self, $stackPos) {
+ $self->semValue = $self->handleBuiltinTypes($self->semStack[$stackPos-(1-1)]);
+ },
+ 300 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier('array', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 301 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier('callable', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 302 => null,
+ 303 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 304 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]);
+ },
+ 305 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 306 => null,
+ 307 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 308 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]);
+ },
+ 309 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 310 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]);
+ },
+ 311 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 312 => static function ($self, $stackPos) {
+ $self->semValue = new Node\IntersectionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 313 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]);
+ },
+ 314 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 315 => static function ($self, $stackPos) {
+ $self->semValue = new Node\IntersectionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 316 => null,
+ 317 => static function ($self, $stackPos) {
+ $self->semValue = new Node\NullableType($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 318 => static function ($self, $stackPos) {
+ $self->semValue = new Node\UnionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 319 => null,
+ 320 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 321 => null,
+ 322 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 323 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(2-2)];
+ },
+ 324 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 325 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 326 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-2)];
+ },
+ 327 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(3-2)]);
+ },
+ 328 => static function ($self, $stackPos) {
+ $self->semValue = new Node\VariadicPlaceholder($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 329 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 330 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 331 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Arg($self->semStack[$stackPos-(1-1)], false, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 332 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Arg($self->semStack[$stackPos-(2-2)], true, false, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 333 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Arg($self->semStack[$stackPos-(2-2)], false, true, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 334 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Arg($self->semStack[$stackPos-(3-3)], false, false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(3-1)]);
+ },
+ 335 => null,
+ 336 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 337 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 338 => null,
+ 339 => null,
+ 340 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 341 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 342 => static function ($self, $stackPos) {
+ $self->semValue = new Node\StaticVar($self->semStack[$stackPos-(1-1)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 343 => static function ($self, $stackPos) {
+ $self->semValue = new Node\StaticVar($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 344 => static function ($self, $stackPos) {
+ if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; } else { $self->semValue = $self->semStack[$stackPos-(2-1)]; }
+ },
+ 345 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 346 => static function ($self, $stackPos) {
+ $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);;
+ if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)];
+ },
+ 347 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Property($self->semStack[$stackPos-(5-2)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-1)]);
+ },
+ 348 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\ClassConst($self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(5-1)]);
+ $self->checkClassConst($self->semValue, $stackPos-(5-2));
+ },
+ 349 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\ClassConst($self->semStack[$stackPos-(6-5)], $self->semStack[$stackPos-(6-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(6-1)], $self->semStack[$stackPos-(6-4)]);
+ $self->checkClassConst($self->semValue, $stackPos-(6-2));
+ },
+ 350 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\ClassMethod($self->semStack[$stackPos-(10-5)], ['type' => $self->semStack[$stackPos-(10-2)], 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-7)], 'returnType' => $self->semStack[$stackPos-(10-9)], 'stmts' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos]));
+ $self->checkClassMethod($self->semValue, $stackPos-(10-2));
+ },
+ 351 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\TraitUse($self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 352 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\EnumCase($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 353 => static function ($self, $stackPos) {
+ $self->semValue = null; /* will be skipped */
+ },
+ 354 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 355 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 356 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 357 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 358 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\TraitUseAdaptation\Precedence($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 359 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(5-1)][0], $self->semStack[$stackPos-(5-1)][1], $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 360 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 361 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 362 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 363 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]);
+ },
+ 364 => null,
+ 365 => static function ($self, $stackPos) {
+ $self->semValue = array(null, $self->semStack[$stackPos-(1-1)]);
+ },
+ 366 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 367 => null,
+ 368 => null,
+ 369 => static function ($self, $stackPos) {
+ $self->semValue = 0;
+ },
+ 370 => static function ($self, $stackPos) {
+ $self->semValue = 0;
+ },
+ 371 => null,
+ 372 => null,
+ 373 => static function ($self, $stackPos) {
+ $self->checkModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)];
+ },
+ 374 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PUBLIC;
+ },
+ 375 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PROTECTED;
+ },
+ 376 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PRIVATE;
+ },
+ 377 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PUBLIC_SET;
+ },
+ 378 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PROTECTED_SET;
+ },
+ 379 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PRIVATE_SET;
+ },
+ 380 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::STATIC;
+ },
+ 381 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::ABSTRACT;
+ },
+ 382 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::FINAL;
+ },
+ 383 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::READONLY;
+ },
+ 384 => null,
+ 385 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 386 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 387 => static function ($self, $stackPos) {
+ $self->semValue = new Node\VarLikeIdentifier(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 388 => static function ($self, $stackPos) {
+ $self->semValue = new Node\PropertyItem($self->semStack[$stackPos-(1-1)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 389 => static function ($self, $stackPos) {
+ $self->semValue = new Node\PropertyItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 390 => static function ($self, $stackPos) {
+ $self->semValue = [];
+ },
+ 391 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 392 => static function ($self, $stackPos) {
+ $self->semValue = [];
+ },
+ 393 => static function ($self, $stackPos) {
+ $self->semValue = new Node\PropertyHook($self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-5)], ['flags' => $self->semStack[$stackPos-(5-2)], 'byRef' => $self->semStack[$stackPos-(5-3)], 'params' => [], 'attrGroups' => $self->semStack[$stackPos-(5-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ $self->checkPropertyHook($self->semValue, null);
+ },
+ 394 => static function ($self, $stackPos) {
+ $self->semValue = new Node\PropertyHook($self->semStack[$stackPos-(8-4)], $self->semStack[$stackPos-(8-8)], ['flags' => $self->semStack[$stackPos-(8-2)], 'byRef' => $self->semStack[$stackPos-(8-3)], 'params' => $self->semStack[$stackPos-(8-6)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ $self->checkPropertyHook($self->semValue, $stackPos-(8-5));
+ },
+ 395 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 396 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 397 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 398 => static function ($self, $stackPos) {
+ $self->semValue = 0;
+ },
+ 399 => static function ($self, $stackPos) {
+ $self->checkPropertyHookModifiers($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)];
+ },
+ 400 => null,
+ 401 => null,
+ 402 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 403 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 404 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 405 => null,
+ 406 => null,
+ 407 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Assign($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 408 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Assign($self->fixupArrayDestructuring($self->semStack[$stackPos-(3-1)]), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 409 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Assign($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 410 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignRef($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 411 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignRef($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ if (!$self->phpVersion->allowsAssignNewByReference()) {
+ $self->emitError(new Error('Cannot assign new by reference', $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])));
+ }
+
+ },
+ 412 => null,
+ 413 => null,
+ 414 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Clone_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 415 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Plus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 416 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Minus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 417 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Mul($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 418 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Div($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 419 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Concat($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 420 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Mod($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 421 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 422 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\BitwiseOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 423 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\BitwiseXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 424 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\ShiftLeft($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 425 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\ShiftRight($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 426 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Pow($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 427 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Coalesce($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 428 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\PostInc($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 429 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\PreInc($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 430 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\PostDec($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 431 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\PreDec($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 432 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\BooleanOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 433 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\BooleanAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 434 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\LogicalOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 435 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\LogicalAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 436 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\LogicalXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 437 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\BitwiseOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 438 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 439 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 440 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\BitwiseXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 441 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Concat($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 442 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Plus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 443 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Minus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 444 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Mul($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 445 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Div($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 446 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Mod($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 447 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\ShiftLeft($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 448 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\ShiftRight($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 449 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Pow($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 450 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\UnaryPlus($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 451 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\UnaryMinus($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 452 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BooleanNot($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 453 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BitwiseNot($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 454 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Identical($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 455 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\NotIdentical($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 456 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Equal($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 457 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\NotEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 458 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Spaceship($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 459 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Smaller($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 460 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\SmallerOrEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 461 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Greater($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 462 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\GreaterOrEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 463 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Instanceof_($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 464 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 465 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Ternary($self->semStack[$stackPos-(5-1)], $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 466 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Ternary($self->semStack[$stackPos-(4-1)], null, $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 467 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Coalesce($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 468 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Isset_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 469 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Empty_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 470 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 471 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 472 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Eval_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 473 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 474 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 475 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Cast\Int_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 476 => static function ($self, $stackPos) {
+ $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]);
+ $attrs['kind'] = $self->getFloatCastKind($self->semStack[$stackPos-(2-1)]);
+ $self->semValue = new Expr\Cast\Double($self->semStack[$stackPos-(2-2)], $attrs);
+ },
+ 477 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Cast\String_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 478 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Cast\Array_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 479 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Cast\Object_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 480 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Cast\Bool_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 481 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Cast\Unset_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 482 => static function ($self, $stackPos) {
+ $self->semValue = $self->createExitExpr($self->semStack[$stackPos-(2-1)], $stackPos-(2-1), $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 483 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ErrorSuppress($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 484 => null,
+ 485 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ShellExec($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 486 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Print_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 487 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Yield_(null, null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 488 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Yield_($self->semStack[$stackPos-(2-2)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 489 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Yield_($self->semStack[$stackPos-(4-4)], $self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 490 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\YieldFrom($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 491 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Throw_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 492 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-4)], 'returnType' => $self->semStack[$stackPos-(8-6)], 'expr' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 493 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'returnType' => $self->semStack[$stackPos-(9-7)], 'expr' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 494 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Closure(['static' => false, 'byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-4)], 'uses' => $self->semStack[$stackPos-(8-6)], 'returnType' => $self->semStack[$stackPos-(8-7)], 'stmts' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 495 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Closure(['static' => true, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'uses' => $self->semStack[$stackPos-(9-7)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 496 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'returnType' => $self->semStack[$stackPos-(9-7)], 'expr' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 497 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-6)], 'returnType' => $self->semStack[$stackPos-(10-8)], 'expr' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 498 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Closure(['static' => false, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'uses' => $self->semStack[$stackPos-(9-7)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 499 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Closure(['static' => true, 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-6)], 'uses' => $self->semStack[$stackPos-(10-8)], 'returnType' => $self->semStack[$stackPos-(10-9)], 'stmts' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 500 => static function ($self, $stackPos) {
+ $self->semValue = array(new Stmt\Class_(null, ['type' => $self->semStack[$stackPos-(8-2)], 'extends' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])), $self->semStack[$stackPos-(8-3)]);
+ $self->checkClass($self->semValue[0], -1);
+ },
+ 501 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\New_($self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 502 => static function ($self, $stackPos) {
+ list($class, $ctorArgs) = $self->semStack[$stackPos-(2-2)]; $self->semValue = new Expr\New_($class, $ctorArgs, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 503 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\New_($self->semStack[$stackPos-(2-2)], [], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 504 => null,
+ 505 => null,
+ 506 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 507 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-3)];
+ },
+ 508 => null,
+ 509 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 510 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 511 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ClosureUse($self->semStack[$stackPos-(2-2)], $self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 512 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 513 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 514 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 515 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 516 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\StaticCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 517 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 518 => null,
+ 519 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 520 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 521 => static function ($self, $stackPos) {
+ $self->semValue = new Name\FullyQualified(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 522 => static function ($self, $stackPos) {
+ $self->semValue = new Name\Relative(substr($self->semStack[$stackPos-(1-1)], 10), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 523 => null,
+ 524 => null,
+ 525 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 526 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2;
+ },
+ 527 => null,
+ 528 => null,
+ 529 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 530 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]); foreach ($self->semValue as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $self->phpVersion->supportsUnicodeEscapes()); } };
+ },
+ 531 => static function ($self, $stackPos) {
+ foreach ($self->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $self->phpVersion->supportsUnicodeEscapes()); } }; $self->semValue = $self->semStack[$stackPos-(1-1)];
+ },
+ 532 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 533 => null,
+ 534 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ConstFetch($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 535 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Line($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 536 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\File($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 537 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Dir($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 538 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Class_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 539 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Trait_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 540 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Method($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 541 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Function_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 542 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Namespace_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 543 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Property($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 544 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 545 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(5-1)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 546 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(3-1)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)])), $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2;
+ },
+ 547 => static function ($self, $stackPos) {
+ $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_SHORT;
+ $self->semValue = new Expr\Array_($self->semStack[$stackPos-(3-2)], $attrs);
+ },
+ 548 => static function ($self, $stackPos) {
+ $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_LONG;
+ $self->semValue = new Expr\Array_($self->semStack[$stackPos-(4-3)], $attrs);
+ $self->createdArrays->attach($self->semValue);
+ },
+ 549 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(1-1)]; $self->createdArrays->attach($self->semValue);
+ },
+ 550 => static function ($self, $stackPos) {
+ $self->semValue = Scalar\String_::fromString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]), $self->phpVersion->supportsUnicodeEscapes());
+ },
+ 551 => static function ($self, $stackPos) {
+ $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
+ foreach ($self->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', $self->phpVersion->supportsUnicodeEscapes()); } }; $self->semValue = new Scalar\InterpolatedString($self->semStack[$stackPos-(3-2)], $attrs);
+ },
+ 552 => static function ($self, $stackPos) {
+ $self->semValue = $self->parseLNumber($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]), $self->phpVersion->allowsInvalidOctals());
+ },
+ 553 => static function ($self, $stackPos) {
+ $self->semValue = Scalar\Float_::fromString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 554 => null,
+ 555 => null,
+ 556 => null,
+ 557 => static function ($self, $stackPos) {
+ $self->semValue = $self->parseDocString($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)]), true);
+ },
+ 558 => static function ($self, $stackPos) {
+ $self->semValue = $self->parseDocString($self->semStack[$stackPos-(2-1)], '', $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(2-2)], $self->tokenEndStack[$stackPos-(2-2)]), true);
+ },
+ 559 => static function ($self, $stackPos) {
+ $self->semValue = $self->parseDocString($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)]), true);
+ },
+ 560 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 561 => null,
+ 562 => null,
+ 563 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 564 => null,
+ 565 => null,
+ 566 => null,
+ 567 => null,
+ 568 => null,
+ 569 => null,
+ 570 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 571 => null,
+ 572 => null,
+ 573 => null,
+ 574 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 575 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 576 => null,
+ 577 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\MethodCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 578 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\NullsafeMethodCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 579 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 580 => null,
+ 581 => null,
+ 582 => null,
+ 583 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 584 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 585 => null,
+ 586 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Variable($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 587 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Variable($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 588 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Variable(new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])), $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2;
+ },
+ 589 => static function ($self, $stackPos) {
+ $var = $self->semStack[$stackPos-(1-1)]->name; $self->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])) : $var;
+ },
+ 590 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 591 => null,
+ 592 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 593 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 594 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 595 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 596 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 597 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 598 => null,
+ 599 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 600 => null,
+ 601 => null,
+ 602 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 603 => null,
+ 604 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2;
+ },
+ 605 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\List_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); $self->semValue->setAttribute('kind', Expr\List_::KIND_LIST);
+ $self->postprocessList($self->semValue);
+ },
+ 606 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(1-1)]; $end = count($self->semValue)-1; if ($self->semValue[$end]->value instanceof Expr\Error) array_pop($self->semValue);
+ },
+ 607 => null,
+ 608 => static function ($self, $stackPos) {
+ /* do nothing -- prevent default action of $$=$self->semStack[$1]. See $551. */
+ },
+ 609 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 610 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 611 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(1-1)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 612 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(2-2)], null, true, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 613 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(1-1)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 614 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(3-3)], $self->semStack[$stackPos-(3-1)], false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 615 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(4-4)], $self->semStack[$stackPos-(4-1)], true, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 616 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(3-3)], $self->semStack[$stackPos-(3-1)], false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 617 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(2-2)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]), true);
+ },
+ 618 => static function ($self, $stackPos) {
+ /* Create an Error node now to remember the position. We'll later either report an error,
+ or convert this into a null element, depending on whether this is a creation or destructuring context. */
+ $attrs = $self->createEmptyElemAttributes($self->tokenPos);
+ $self->semValue = new Node\ArrayItem(new Expr\Error($attrs), null, false, $attrs);
+ },
+ 619 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 620 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 621 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 622 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)]);
+ },
+ 623 => static function ($self, $stackPos) {
+ $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]); $attrs['rawValue'] = $self->semStack[$stackPos-(1-1)]; $self->semValue = new Node\InterpolatedStringPart($self->semStack[$stackPos-(1-1)], $attrs);
+ },
+ 624 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Variable($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 625 => null,
+ 626 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 627 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 628 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 629 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Variable($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 630 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Variable($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 631 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(6-2)], $self->semStack[$stackPos-(6-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 632 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 633 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\String_($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 634 => static function ($self, $stackPos) {
+ $self->semValue = $self->parseNumString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 635 => static function ($self, $stackPos) {
+ $self->semValue = $self->parseNumString('-' . $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 636 => null,
+ ];
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php b/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php
new file mode 100644
index 0000000..3addf94
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php
@@ -0,0 +1,2790 @@
+'",
+ "T_IS_GREATER_OR_EQUAL",
+ "'.'",
+ "T_SL",
+ "T_SR",
+ "'+'",
+ "'-'",
+ "'*'",
+ "'/'",
+ "'%'",
+ "'!'",
+ "T_INSTANCEOF",
+ "'~'",
+ "T_INC",
+ "T_DEC",
+ "T_INT_CAST",
+ "T_DOUBLE_CAST",
+ "T_STRING_CAST",
+ "T_ARRAY_CAST",
+ "T_OBJECT_CAST",
+ "T_BOOL_CAST",
+ "T_UNSET_CAST",
+ "'@'",
+ "T_POW",
+ "'['",
+ "T_NEW",
+ "T_CLONE",
+ "T_EXIT",
+ "T_IF",
+ "T_ELSEIF",
+ "T_ELSE",
+ "T_ENDIF",
+ "T_LNUMBER",
+ "T_DNUMBER",
+ "T_STRING",
+ "T_STRING_VARNAME",
+ "T_VARIABLE",
+ "T_NUM_STRING",
+ "T_INLINE_HTML",
+ "T_ENCAPSED_AND_WHITESPACE",
+ "T_CONSTANT_ENCAPSED_STRING",
+ "T_ECHO",
+ "T_DO",
+ "T_WHILE",
+ "T_ENDWHILE",
+ "T_FOR",
+ "T_ENDFOR",
+ "T_FOREACH",
+ "T_ENDFOREACH",
+ "T_DECLARE",
+ "T_ENDDECLARE",
+ "T_AS",
+ "T_SWITCH",
+ "T_MATCH",
+ "T_ENDSWITCH",
+ "T_CASE",
+ "T_DEFAULT",
+ "T_BREAK",
+ "T_CONTINUE",
+ "T_GOTO",
+ "T_FUNCTION",
+ "T_FN",
+ "T_CONST",
+ "T_RETURN",
+ "T_TRY",
+ "T_CATCH",
+ "T_FINALLY",
+ "T_USE",
+ "T_INSTEADOF",
+ "T_GLOBAL",
+ "T_STATIC",
+ "T_ABSTRACT",
+ "T_FINAL",
+ "T_PRIVATE",
+ "T_PROTECTED",
+ "T_PUBLIC",
+ "T_READONLY",
+ "T_PUBLIC_SET",
+ "T_PROTECTED_SET",
+ "T_PRIVATE_SET",
+ "T_VAR",
+ "T_UNSET",
+ "T_ISSET",
+ "T_EMPTY",
+ "T_HALT_COMPILER",
+ "T_CLASS",
+ "T_TRAIT",
+ "T_INTERFACE",
+ "T_ENUM",
+ "T_EXTENDS",
+ "T_IMPLEMENTS",
+ "T_OBJECT_OPERATOR",
+ "T_NULLSAFE_OBJECT_OPERATOR",
+ "T_LIST",
+ "T_ARRAY",
+ "T_CALLABLE",
+ "T_CLASS_C",
+ "T_TRAIT_C",
+ "T_METHOD_C",
+ "T_FUNC_C",
+ "T_PROPERTY_C",
+ "T_LINE",
+ "T_FILE",
+ "T_START_HEREDOC",
+ "T_END_HEREDOC",
+ "T_DOLLAR_OPEN_CURLY_BRACES",
+ "T_CURLY_OPEN",
+ "T_PAAMAYIM_NEKUDOTAYIM",
+ "T_NAMESPACE",
+ "T_NS_C",
+ "T_DIR",
+ "T_NS_SEPARATOR",
+ "T_ELLIPSIS",
+ "T_NAME_FULLY_QUALIFIED",
+ "T_NAME_QUALIFIED",
+ "T_NAME_RELATIVE",
+ "T_ATTRIBUTE",
+ "';'",
+ "']'",
+ "'('",
+ "')'",
+ "'{'",
+ "'}'",
+ "'`'",
+ "'\"'",
+ "'$'"
+ );
+
+ protected array $tokenToSymbol = array(
+ 0, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 56, 170, 172, 171, 55, 172, 172,
+ 165, 166, 53, 51, 8, 52, 48, 54, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 31, 163,
+ 44, 16, 46, 30, 68, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 70, 172, 164, 36, 172, 169, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 167, 35, 168, 58, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 1, 2, 3, 4,
+ 5, 6, 7, 9, 10, 11, 12, 13, 14, 15,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 32, 33, 34, 37, 38, 39, 40,
+ 41, 42, 43, 45, 47, 49, 50, 57, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 69, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
+ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+ 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
+ 153, 154, 155, 156, 157, 158, 159, 160, 161, 162
+ );
+
+ protected array $action = array(
+ 126, 127, 128, 570, 129, 130, 955, 765, 766, 767,
+ 131, 38, 849, -85,-32766, 1376,-32766,-32766,-32766, 0,
+ 840, 1134, 1135, 1136, 1130, 1129, 1128, 1137, 1131, 1132,
+ 1133,-32766,-32766,-32766, 851, 759, 758,-32766,-32766,-32766,
+ -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,
+ -32767, 1005,-32766, 1045, -570, 768, 1134, 1135, 1136, 1130,
+ 1129, 1128, 1137, 1131, 1132, 1133, 388, 387, 842, 263,
+ 132, 389, 772, 773, 774, 775, 430, 845, 431, -85,
+ 2, 36, 246, 47, 291, 829, 776, 777, 778, 779,
+ 780, 781, 782, 783, 784, 785, 805, 571, 806, 807,
+ 808, 809, 797, 798, 344, 345, 800, 801, 786, 787,
+ 788, 790, 791, 792, 359, 832, 833, 834, 835, 836,
+ 572, -570, -570, -332, 793, 794, 573, 574, 236, 817,
+ 815, 816, 828, 812, 813, 26, -194, 575, 576, 811,
+ 577, 578, 579, 580, 323, 581, 582, 876, 844, 877,
+ 297, 298, 814, 583, 584, 722, 133, 846, 126, 127,
+ 128, 570, 129, 130, 1078, 765, 766, 767, 131, 38,
+ -32766, 35, 735, 1038, 1037, 1036, 1042, 1039, 1040, 1041,
+ -32766,-32766,-32766, 1006, 104, 105, 106, 107, 108, -372,
+ 275, -372,-32766, 759, 758, 1054, 850,-32766,-32766,-32766,
+ 848,-32766, 109,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
+ 134, 476, 477, 768,-32766,-32766,-32766, 1054,-32766, 290,
+ -32766,-32766,-32766,-32766,-32766, 616, 143, 263, 132, 389,
+ 772, 773, 774, 775, 249,-32766, 431,-32766,-32766,-32766,
+ -32766, 290, 307, 829, 776, 777, 778, 779, 780, 781,
+ 782, 783, 784, 785, 805, 571, 806, 807, 808, 809,
+ 797, 798, 344, 345, 800, 801, 786, 787, 788, 790,
+ 791, 792, 359, 832, 833, 834, 835, 836, 572, 958,
+ -273, -332, 793, 794, 573, 574, 840, 817, 815, 816,
+ 828, 812, 813, 1301, -194, 575, 576, 811, 577, 578,
+ 579, 580, 566, 581, 582, 1108, 82, 83, 84, 748,
+ 814, 583, 584, 309, 146, 789, 760, 761, 762, 763,
+ 764, 235, 765, 766, 767, 802, 803, 37, 957, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, 157, 275,-32766,-32766,-32766,-32767,-32767,
+ -32767,-32767, 101, 102, 103,-32766, 109, 1313, 622, 318,
+ 768,-32766,-32766,-32766, 849, 1361,-32766, 1107,-32766,-32766,
+ -32766, 340, 1360, 1357, 769, 770, 771, 772, 773, 774,
+ 775, 341,-32766, 838,-32766,-32766, 1386, 374, 1281, 1387,
+ 829, 776, 777, 778, 779, 780, 781, 782, 783, 784,
+ 785, 805, 827, 806, 807, 808, 809, 797, 798, 799,
+ 826, 800, 801, 786, 787, 788, 790, 791, 792, 831,
+ 832, 833, 834, 835, 836, 837, 1077, 431, -567, 793,
+ 794, 795, 796, 148, 817, 815, 816, 828, 812, 813,
+ 380, -193, 804, 810, 811, 818, 819, 821, 820, 138,
+ 822, 823, 840, 321, 396, 285, 24, 814, 825, 824,
+ 49, 50, 51, 522, 52, 53, 398, -110, 7, 849,
+ 54, 55, -110, 56, -110,-32766,-32766,-32766, 1342, 303,
+ 125, 1123, -110, -110, -110, -110, -110, -110, -110, -110,
+ -110, -110, -110, 161, 750, -567, -567, 291, 974, 975,
+ -32766,-32766,-32766, 976, 448, 285, 1276, 1275, 1277, 57,
+ 58, -567,-32766,-32766, 59, 1109, 60, 243, 244, 61,
+ 62, 63, 64, 65, 66, 67, 68,-32766, 28, 265,
+ 69, 446, 523, 490, -346, 449, 1307, 1308, 524, 139,
+ 849, 1051, 450, 321, 1305, 42, 20, 525, 934, 526,
+ 934, 527, 74, 528, -568, 698, 529, 530, 321, 386,
+ 387, 44, 45, 452, 383, 382, 1054, 46, 531, 430,
+ 974, 975, 451, 372, 339, 976, 1281, 855, 725, 934,
+ 1267, 759, 758,-32766, 970, 533, 534, 535, 149, 934,
+ 281, 699, -78, -566, 1274, 102, 103, 537, 538, -193,
+ 1293, 1294, 1295, 1296, 1298, 1290, 1291, 295, 1054, 726,
+ 466, 467, 468, 1297, 1292, 700, 701, 1276, 1275, 1277,
+ 296, -568, -568, 70, -153, -153, -153, 316, 317, 321,
+ 1272, 924, 290, 924, 1276, 1275, 1277, -568, 1051, -153,
+ 281, -153, 1150, -153, 81, -153, 740, 151, 321, -574,
+ 152, 759, 758,-32766, 1053, 381, 876, 849, 877, 153,
+ -566, -566, 924, 1054, 1051, 155, 974, 975, -606, 491,
+ -606, 532, 924, 1276, 1275, 1277, -566, 33, 1054, 910,
+ 970, -110, -110, -110, 28, 266, -58, 281, -573, 1054,
+ -32766,-32766, -110, -110, 665, 21, 849, -110, -57, -564,
+ 1305, 684, 685, 147, 413, 123, -110, 384, 385, 124,
+ 936, 135, 936, 136, 720,-32766, 720, -153, 142, 48,
+ 32, 110, 111, 112, 113, 114, 115, 116, 117, 118,
+ 119, 120, 121, 122, 390, 391, 1267, 296, 759, 758,
+ 74, 936, 156, 934, 158, 720, 321, -4, 934, 159,
+ 934, 936, 160, 537, 538, 720, 1293, 1294, 1295, 1296,
+ 1298, 1290, 1291, 1183, 1185, 934, -564, -564, -565, 1297,
+ 1292, 759, 758, 727, -564,-32766, 656, 657, -306, 72,
+ 730, 1274, -564, -87, 317, 321, 299, 300,-32766,-32766,
+ -32766, -84,-32766, -78,-32766, 737,-32766, -73, -72,-32766,
+ -71, -70, 379, -69,-32766,-32766,-32766, -68,-32766, -67,
+ -32766,-32766, -66, -65, 1274, -46,-32766, 427, 28, 265,
+ -18,-32766,-32766,-32766, 140,-32766, 924,-32766,-32766,-32766,
+ 849, 924,-32766, 924, 1305, -565, -565,-32766,-32766,-32766,
+ 274, -564, -564,-32766,-32766, 282, 736, 739, 924,-32766,
+ 427, -565, 933, 381, 145, 443, 286, -564, 951, 73,
+ 294,-32766, -302, -572, 974, 975, 279, 280, 283, 532,
+ 1267, 28, 266, 284, 329, 275, 109, 536, 970, -110,
+ -110, -110, 287, 849, 292, 293, 840, 1305, 538, 694,
+ 1293, 1294, 1295, 1296, 1298, 1290, 1291, 709, 144, 587,
+ 711, 11, 10, 1297, 1292, 991, 849, 1141, 473, 720,
+ 936,-32766, 936, 72, 720, -4, 720, 1388, 317, 321,
+ -50, 970, 672, 1267, 687, 666, 501, 936, 971, 301,
+ 308, 720, 671, 1312, 302, 1314,-32766, 688, 953, -530,
+ -520, 538, 40, 1293, 1294, 1295, 1296, 1298, 1290, 1291,
+ 848, 41, 8, 137, 654, 27, 1297, 1292, 304, 34,
+ 593, 620, 296,-32766, 0, 0, 72, 0, 0, 1274,
+ 0, 317, 321, 0, 0, 0,-32766,-32766,-32766, -276,
+ -32766, 0,-32766, 0,-32766, 0, 0,-32766, 0, 0,
+ 0, 0,-32766,-32766,-32766, 934,-32766, 0,-32766,-32766,
+ 0, 0, 1274, 378,-32766, 427, 745, -600, 412,-32766,
+ -32766,-32766, 746,-32766, 868,-32766,-32766,-32766, 934, 915,
+ -32766, 1015, 992, 999, 989,-32766,-32766,-32766, 1000,-32766,
+ 913,-32766,-32766, 987, 1112, 1274, 1115,-32766, 427, 1116,
+ 1113, 1152,-32766,-32766,-32766, 1114,-32766, 1120,-32766,-32766,
+ -32766, 1302, 860,-32766, 1329, 1346, 1379, 496,-32766,-32766,
+ -32766, 659,-32766, -599,-32766,-32766, -598, -574, 1274, 600,
+ -32766, 427, -573, -572, -571,-32766,-32766,-32766, 924,-32766,
+ -514,-32766,-32766,-32766, 1, 29,-32766, -274, 30, 39,
+ 43,-32766,-32766,-32766, -251, -251, -251,-32766,-32766, 71,
+ 381, 924, 75,-32766, 427, 76, 77, 78, 1281, 79,
+ 80, 974, 975, 141, 150,-32766, 532, -250, -250, -250,
+ -273, 154, 241, 381, 910, 970, -110, -110, -110, 325,
+ 360, 361, 362, 363, 974, 975, 364, 365, -16, 532,
+ 366, 367, 368, 369, 370, 373, 444, 910, 970, -110,
+ -110, -110,-32766, 13, 565, 371, 1306, 936, 1274, 14,
+ 416, 720, -251, 15, 16,-32766,-32766,-32766, 18,-32766,
+ 354,-32766, 411,-32766, 492, 493,-32766, 500, 503, 504,
+ 936,-32766,-32766,-32766, 720, -250, 505,-32766,-32766, 849,
+ 506, 510, 511,-32766, 427, 512, 519, 598, 704, 1080,
+ 1223, 1303, 1079, 1060, 1262,-32766, 1056, -278, -102, 12,
+ 17, 22, 312, 410, 612, 617, 645, 710, 1227, 1280,
+ 1224, 1358, 0, 315, -110, -110, 375, 721, 724, -110,
+ 728, 729, 731, 732, 733, 734, 738, 750, -110, 723,
+ 751, 0, 742, 911, 1383, 1385, 0,-32766, 871, 870,
+ 964, 1007, 1384, 963, 961, 962, 965, 1255, 944, 954,
+ 942, 1151, 1147, 1101, 997, 998, 643, 1382, 1340, 296,
+ 1355, 0, 74, 1240, 321, 0, 0, 0, 321
+ );
+
+ protected array $actionCheck = array(
+ 2, 3, 4, 5, 6, 7, 1, 9, 10, 11,
+ 12, 13, 82, 31, 116, 85, 9, 10, 11, 0,
+ 80, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+ 125, 9, 10, 11, 1, 37, 38, 30, 140, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 31, 30, 1, 70, 57, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 106, 107, 80, 71,
+ 72, 73, 74, 75, 76, 77, 116, 80, 80, 97,
+ 8, 151, 152, 70, 30, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+ 122, 137, 138, 8, 126, 127, 128, 129, 14, 131,
+ 132, 133, 134, 135, 136, 8, 8, 139, 140, 141,
+ 142, 143, 144, 145, 70, 147, 148, 106, 160, 108,
+ 137, 138, 154, 155, 156, 167, 158, 160, 2, 3,
+ 4, 5, 6, 7, 166, 9, 10, 11, 12, 13,
+ 116, 8, 167, 119, 120, 121, 122, 123, 124, 125,
+ 9, 10, 11, 163, 51, 52, 53, 54, 55, 106,
+ 57, 108, 116, 37, 38, 141, 163, 9, 10, 11,
+ 159, 30, 69, 32, 33, 34, 35, 36, 37, 38,
+ 8, 137, 138, 57, 9, 10, 11, 141, 30, 165,
+ 32, 33, 34, 35, 36, 1, 8, 71, 72, 73,
+ 74, 75, 76, 77, 8, 30, 80, 32, 33, 34,
+ 35, 165, 8, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 115, 116, 117, 118, 119, 120, 121, 122, 73,
+ 166, 166, 126, 127, 128, 129, 80, 131, 132, 133,
+ 134, 135, 136, 1, 166, 139, 140, 141, 142, 143,
+ 144, 145, 85, 147, 148, 163, 9, 10, 11, 167,
+ 154, 155, 156, 8, 158, 2, 3, 4, 5, 6,
+ 7, 97, 9, 10, 11, 12, 13, 30, 122, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 16, 57, 9, 10, 11, 44, 45,
+ 46, 47, 48, 49, 50, 9, 69, 150, 52, 8,
+ 57, 9, 10, 11, 82, 1, 30, 1, 32, 33,
+ 34, 8, 8, 1, 71, 72, 73, 74, 75, 76,
+ 77, 8, 30, 80, 32, 33, 80, 8, 1, 83,
+ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
+ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
+ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
+ 117, 118, 119, 120, 121, 122, 1, 80, 70, 126,
+ 127, 128, 129, 14, 131, 132, 133, 134, 135, 136,
+ 8, 8, 139, 140, 141, 142, 143, 144, 145, 167,
+ 147, 148, 80, 171, 8, 30, 101, 154, 155, 156,
+ 2, 3, 4, 5, 6, 7, 106, 101, 108, 82,
+ 12, 13, 106, 15, 108, 9, 10, 11, 1, 113,
+ 14, 126, 116, 117, 118, 119, 120, 121, 122, 123,
+ 124, 125, 126, 14, 167, 137, 138, 30, 117, 118,
+ 9, 10, 11, 122, 8, 30, 159, 160, 161, 51,
+ 52, 153, 9, 10, 56, 168, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 140, 70, 71,
+ 72, 73, 74, 31, 168, 8, 78, 79, 80, 167,
+ 82, 116, 8, 171, 86, 87, 88, 89, 1, 91,
+ 1, 93, 165, 95, 70, 80, 98, 99, 171, 106,
+ 107, 103, 104, 105, 106, 107, 141, 109, 110, 116,
+ 117, 118, 8, 115, 116, 122, 1, 8, 31, 1,
+ 122, 37, 38, 116, 131, 127, 128, 129, 14, 1,
+ 165, 116, 16, 70, 80, 49, 50, 139, 140, 166,
+ 142, 143, 144, 145, 146, 147, 148, 149, 141, 31,
+ 132, 133, 134, 155, 156, 140, 141, 159, 160, 161,
+ 162, 137, 138, 165, 75, 76, 77, 169, 170, 171,
+ 116, 84, 165, 84, 159, 160, 161, 153, 116, 90,
+ 165, 92, 163, 94, 167, 96, 167, 14, 171, 165,
+ 14, 37, 38, 116, 140, 106, 106, 82, 108, 14,
+ 137, 138, 84, 141, 116, 14, 117, 118, 164, 167,
+ 166, 122, 84, 159, 160, 161, 153, 14, 141, 130,
+ 131, 132, 133, 134, 70, 71, 16, 165, 165, 141,
+ 51, 52, 117, 118, 75, 76, 82, 122, 16, 70,
+ 86, 75, 76, 101, 102, 16, 131, 106, 107, 16,
+ 163, 16, 163, 16, 167, 140, 167, 168, 16, 70,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 106, 107, 122, 162, 37, 38,
+ 165, 163, 16, 1, 16, 167, 171, 0, 1, 16,
+ 1, 163, 16, 139, 140, 167, 142, 143, 144, 145,
+ 146, 147, 148, 59, 60, 1, 137, 138, 70, 155,
+ 156, 37, 38, 31, 70, 74, 111, 112, 35, 165,
+ 31, 80, 153, 31, 170, 171, 137, 138, 87, 88,
+ 89, 31, 91, 31, 93, 31, 95, 31, 31, 98,
+ 31, 31, 153, 31, 103, 104, 105, 31, 74, 31,
+ 109, 110, 31, 31, 80, 31, 115, 116, 70, 71,
+ 31, 87, 88, 89, 31, 91, 84, 93, 127, 95,
+ 82, 84, 98, 84, 86, 137, 138, 103, 104, 105,
+ 31, 137, 138, 109, 110, 31, 31, 31, 84, 115,
+ 116, 153, 31, 106, 31, 108, 37, 153, 38, 158,
+ 113, 127, 35, 165, 117, 118, 35, 35, 35, 122,
+ 122, 70, 71, 35, 35, 57, 69, 130, 131, 132,
+ 133, 134, 37, 82, 37, 37, 80, 86, 140, 77,
+ 142, 143, 144, 145, 146, 147, 148, 80, 70, 89,
+ 92, 154, 97, 155, 156, 163, 82, 82, 97, 167,
+ 163, 85, 163, 165, 167, 168, 167, 83, 170, 171,
+ 31, 131, 100, 122, 94, 90, 97, 163, 131, 135,
+ 135, 167, 96, 150, 136, 150, 140, 100, 158, 153,
+ 153, 140, 163, 142, 143, 144, 145, 146, 147, 148,
+ 159, 163, 153, 31, 113, 153, 155, 156, 114, 167,
+ 157, 157, 162, 74, -1, -1, 165, -1, -1, 80,
+ -1, 170, 171, -1, -1, -1, 87, 88, 89, 166,
+ 91, -1, 93, -1, 95, -1, -1, 98, -1, -1,
+ -1, -1, 103, 104, 105, 1, 74, -1, 109, 110,
+ -1, -1, 80, 153, 115, 116, 163, 165, 168, 87,
+ 88, 89, 163, 91, 163, 93, 127, 95, 1, 163,
+ 98, 163, 163, 163, 163, 103, 104, 105, 163, 74,
+ 163, 109, 110, 163, 163, 80, 163, 115, 116, 163,
+ 163, 163, 87, 88, 89, 163, 91, 163, 93, 127,
+ 95, 164, 164, 98, 164, 164, 164, 102, 103, 104,
+ 105, 164, 74, 165, 109, 110, 165, 165, 80, 81,
+ 115, 116, 165, 165, 165, 87, 88, 89, 84, 91,
+ 165, 93, 127, 95, 165, 165, 98, 166, 165, 165,
+ 165, 103, 104, 105, 100, 101, 102, 109, 110, 165,
+ 106, 84, 165, 115, 116, 165, 165, 165, 1, 165,
+ 165, 117, 118, 165, 165, 127, 122, 100, 101, 102,
+ 166, 165, 165, 106, 130, 131, 132, 133, 134, 165,
+ 165, 165, 165, 165, 117, 118, 165, 165, 31, 122,
+ 165, 165, 165, 165, 165, 165, 165, 130, 131, 132,
+ 133, 134, 74, 166, 165, 165, 170, 163, 80, 166,
+ 168, 167, 168, 166, 166, 87, 88, 89, 166, 91,
+ 166, 93, 166, 95, 166, 166, 98, 166, 166, 166,
+ 163, 103, 104, 105, 167, 168, 166, 109, 110, 82,
+ 166, 166, 166, 115, 116, 166, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 127, 166, 166, 166, 166,
+ 166, 166, 166, 166, 166, 166, 166, 166, 166, 166,
+ 166, 166, -1, 167, 117, 118, 167, 167, 167, 122,
+ 167, 167, 167, 167, 167, 167, 167, 167, 131, 167,
+ 167, -1, 168, 168, 168, 168, -1, 140, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
+ 168, 168, 168, 168, 168, 168, 168, 168, 168, 162,
+ 168, -1, 165, 169, 171, -1, -1, -1, 171
+ );
+
+ protected array $actionBase = array(
+ 0, -2, 156, 559, 757, 1004, 1027, 485, 292, 357,
+ -60, -12, 588, 759, 759, 774, 759, 557, 752, 892,
+ 598, 598, 598, 827, 313, 313, 827, 313, 711, 711,
+ 711, 711, 744, 744, 965, 965, 998, 932, 899, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 33, 20, 224, 1080, 673, 1056, 1062, 1058,
+ 1063, 1054, 1053, 1057, 1059, 1064, 1109, 1110, 833, 1108,
+ 1112, 1060, 907, 1055, 1061, 888, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 356, 476, 513, 501, 501, 501, 501, 501,
+ 501, 501, 501, 501, 501, 501, 501, 501, 501, 501,
+ 501, 501, 501, 501, 501, 624, 624, 22, 22, 22,
+ 362, 811, 758, 811, 811, 811, 811, 811, 811, 811,
+ 811, 346, 205, 188, 714, 171, 171, 7, 7, 7,
+ 7, 7, 376, 1117, 54, 585, 585, 314, 314, 314,
+ 314, 365, 554, 83, 435, 397, 556, 477, 463, 532,
+ 532, 558, 558, 76, 76, 558, 558, 558, 133, 133,
+ 547, 547, 547, 547, 41, 217, 806, 382, 382, 382,
+ 382, 806, 806, 806, 806, 795, 996, 806, 806, 806,
+ 494, 533, 708, 649, 649, 560, -70, -70, 560, 800,
+ -70, 487, 975, 316, 982, -102, 807, -40, 514, -102,
+ 1000, 368, 639, 639, 659, 639, 639, 639, 801, 611,
+ 801, 1052, 836, 836, 794, 776, 894, 1082, 1065, 832,
+ 1106, 847, 1107, 1083, 489, 488, -16, 13, 74, 772,
+ 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051,
+ 1051, 1051, 1113, 554, 1052, -3, 1104, 1105, 1113, 1113,
+ 1113, 554, 554, 554, 554, 554, 554, 554, 554, 799,
+ 554, 554, 675, -3, 629, 636, -3, 849, 554, 797,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 512, 33, 33, 20, 5, 5, 33, 142, 52, 5,
+ 5, 5, 337, 5, 33, 33, 33, 611, 828, 813,
+ 638, -18, 814, 443, 828, 828, 828, 115, 114, 128,
+ 753, 837, 370, 816, 816, 835, 929, 929, 816, 834,
+ 816, 835, 816, 816, 929, 929, 810, 929, 202, 506,
+ 373, 442, 537, 929, 234, 816, 816, 816, 816, 805,
+ 929, 72, 544, 816, 226, 218, 816, 816, 805, 804,
+ 824, 808, 929, 929, 929, 805, 389, 808, 808, 808,
+ 853, 859, 851, 819, 361, 305, 579, 163, 830, 819,
+ 819, 816, 456, 851, 819, 851, 819, 790, 819, 819,
+ 819, 851, 819, 834, 383, 819, 736, 574, 127, 819,
+ 816, 19, 944, 947, 762, 950, 934, 951, 991, 952,
+ 954, 1070, 925, 967, 935, 955, 999, 933, 930, 831,
+ 699, 703, 809, 796, 919, 817, 817, 817, 912, 917,
+ 817, 817, 817, 817, 817, 817, 817, 817, 699, 897,
+ 860, 820, 976, 705, 707, 1041, 793, 1085, 1114, 975,
+ 944, 954, 770, 935, 955, 933, 930, 792, 791, 786,
+ 788, 782, 780, 777, 779, 803, 1043, 958, 789, 712,
+ 1012, 977, 1084, 1066, 978, 981, 1016, 1044, 861, 1045,
+ 1086, 838, 1087, 1090, 898, 985, 1071, 817, 911, 852,
+ 900, 982, 918, 699, 901, 1046, 997, 802, 1018, 1019,
+ 1069, 821, 844, 902, 1091, 986, 987, 988, 1073, 1074,
+ 798, 1003, 823, 1021, 839, 850, 1022, 1023, 1030, 1034,
+ 1075, 1092, 1076, 908, 1077, 866, 845, 931, 846, 1093,
+ 429, 843, 848, 858, 990, 584, 974, 1078, 1002, 1094,
+ 1035, 1036, 1039, 1095, 1096, 959, 868, 1007, 840, 1008,
+ 964, 869, 870, 643, 857, 1047, 841, 842, 855, 646,
+ 655, 1097, 1098, 1099, 966, 825, 822, 871, 875, 1048,
+ 829, 1050, 1100, 661, 877, 1101, 1042, 738, 743, 586,
+ 692, 680, 746, 818, 1079, 812, 854, 815, 989, 743,
+ 826, 880, 1102, 881, 883, 886, 1040, 887, 1014, 1103,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 468, 468, 468, 468, 468, 468,
+ 313, 313, 313, 313, 313, 468, 468, 468, 468, 468,
+ 468, 468, 313, 468, 468, 468, 313, 0, 0, 313,
+ 0, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
+ 468, 468, 468, 468, 468, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 297, 297,
+ 297, 297, 297, 297, 297, 297, 297, 297, 524, 524,
+ 297, 297, 297, 297, 524, 524, 524, 524, 524, 524,
+ 524, 524, 524, 524, 297, 297, 297, 0, 297, 297,
+ 297, 297, 297, 297, 297, 810, 524, 524, 524, 524,
+ 133, 133, 133, 133, -95, -95, -95, 524, 524, 133,
+ 524, 810, 524, 524, 524, 524, 524, 524, 524, 524,
+ 524, 0, 0, 524, 524, 524, 524, -3, -70, 524,
+ 834, 834, 834, 834, 524, 524, 524, 524, -70, -70,
+ 524, 524, 524, 0, 0, 0, 133, 133, -3, 0,
+ 0, -3, 391, 0, 834, 206, 834, 206, 524, 391,
+ 810, 374, 524, 489, 0, 0, 0, 0, 0, 0,
+ 0, -3, 834, -3, 554, -70, -70, 554, 554, 5,
+ 33, 374, 612, 612, 612, 612, 33, 0, 0, 0,
+ 0, 0, 611, 810, 810, 810, 810, 810, 810, 810,
+ 810, 810, 810, 810, 810, 834, 0, 810, 0, 810,
+ 810, 834, 834, 834, 0, 0, 0, 0, 0, 0,
+ 0, 0, 929, 0, 0, 0, 0, 0, 0, 0,
+ 834, 0, 929, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 834, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 817, 821, 0, 0, 821, 0, 817, 817, 817,
+ 0, 0, 0, 857, 829
+ );
+
+ protected array $actionDefault = array(
+ 3,32767, 102,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767, 100,32767, 618, 618,
+ 618, 618,32767,32767, 255, 102,32767,32767, 489, 406,
+ 406, 406,32767,32767, 562, 562, 562, 562, 562,32767,
+ 32767,32767,32767,32767,32767, 489,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767, 36, 7, 8, 10,
+ 11, 49, 17, 328, 100,32767,32767,32767,32767,32767,
+ 32767,32767,32767, 102,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767, 393, 611,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767, 493, 472, 473, 475,
+ 476, 405, 563, 617, 331, 614, 333, 404, 145, 343,
+ 334, 243, 259, 494, 260, 495, 498, 499, 216, 390,
+ 149, 150, 436, 490, 438, 488, 492, 437, 411, 417,
+ 418, 419, 420, 421, 422, 423, 424, 425, 426, 427,
+ 428, 429, 409, 410, 491,32767,32767, 469, 468, 467,
+ 434,32767,32767,32767,32767,32767,32767,32767,32767, 102,
+ 32767, 435, 439, 442, 408, 440, 441, 458, 459, 456,
+ 457, 460,32767,32767, 320,32767,32767, 461, 462, 463,
+ 464, 371, 195, 369,32767,32767, 443, 320, 111,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767, 449, 450,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767, 102,32767, 100,
+ 506, 556, 466, 444, 445,32767, 531,32767, 102,32767,
+ 533,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767, 558, 431, 433, 526, 612, 412, 615,32767, 519,
+ 100, 195,32767, 532, 195, 195,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767, 557,32767, 625, 519,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110,32767, 195, 110,32767, 110, 110,32767,32767,
+ 100, 195, 195, 195, 195, 195, 195, 195, 195, 534,
+ 195, 195, 190,32767, 269, 271, 102, 580, 195, 536,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767, 393,32767,32767,32767,32767, 519, 454, 138,
+ 32767, 521, 138, 564, 446, 447, 448, 564, 564, 564,
+ 316, 293,32767,32767,32767,32767, 534, 534, 100, 100,
+ 100, 100,32767,32767,32767,32767, 111, 505, 99, 99,
+ 99, 99, 99, 103, 101,32767,32767,32767,32767, 224,
+ 32767, 101, 99,32767, 101, 101,32767,32767, 224, 226,
+ 213, 228,32767, 584, 585, 224, 101, 228, 228, 228,
+ 248, 248, 508, 322, 101, 99, 101, 101, 197, 322,
+ 322,32767, 101, 508, 322, 508, 322, 199, 322, 322,
+ 322, 508, 322,32767, 101, 322, 215, 99, 99, 322,
+ 32767,32767,32767,32767, 521,32767,32767,32767,32767,32767,
+ 32767,32767, 223,32767,32767,32767,32767,32767,32767,32767,
+ 32767, 551,32767, 569, 582, 452, 453, 455, 568, 566,
+ 477, 478, 479, 480, 481, 482, 483, 485, 613,32767,
+ 525,32767,32767,32767, 342,32767, 623,32767,32767,32767,
+ 9, 74, 514, 42, 43, 51, 57, 540, 541, 542,
+ 543, 537, 538, 544, 539,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 624,32767, 564,32767,32767,32767,32767, 451, 546, 590,
+ 32767,32767, 565, 616,32767,32767,32767,32767,32767,32767,
+ 32767, 138,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767, 551,32767, 136,32767,32767,32767,32767,32767,
+ 32767,32767,32767, 547,32767,32767,32767, 564,32767,32767,
+ 32767,32767, 318, 315,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 564,32767,32767,32767,32767,32767, 295,32767, 312,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767, 389, 521, 298,
+ 300, 301,32767,32767,32767,32767, 365,32767,32767,32767,
+ 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+ 152, 152, 3, 3, 345, 152, 152, 152, 345, 345,
+ 152, 345, 345, 345, 152, 152, 152, 152, 152, 152,
+ 152, 281, 185, 263, 266, 248, 248, 152, 357, 152,
+ 391, 391, 400
+ );
+
+ protected array $goto = array(
+ 194, 194, 1052, 487, 705, 278, 278, 278, 278, 990,
+ 489, 548, 548, 907, 865, 907, 907, 548, 714, 548,
+ 548, 548, 548, 548, 548, 548, 548, 166, 166, 166,
+ 166, 218, 195, 191, 191, 176, 178, 213, 191, 191,
+ 191, 191, 191, 192, 192, 192, 192, 192, 186, 187,
+ 188, 189, 190, 215, 213, 216, 545, 546, 428, 547,
+ 550, 551, 552, 553, 554, 555, 556, 557, 1169, 167,
+ 168, 169, 193, 170, 171, 172, 164, 173, 174, 175,
+ 177, 212, 214, 217, 237, 240, 251, 252, 253, 255,
+ 256, 257, 258, 259, 260, 261, 267, 268, 269, 270,
+ 276, 288, 289, 313, 314, 434, 435, 436, 607, 219,
+ 220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
+ 230, 231, 232, 233, 234, 186, 187, 188, 189, 190,
+ 215, 1169, 196, 197, 198, 199, 238, 179, 180, 200,
+ 181, 201, 197, 182, 239, 196, 163, 202, 203, 183,
+ 204, 205, 206, 184, 207, 208, 165, 209, 210, 211,
+ 185, 869, 560, 1083, 560, 560, 592, 1100, 475, 475,
+ 744, 646, 648, 609, 560, 668, 432, 475, 621, 692,
+ 695, 1025, 703, 712, 1021, 719, 558, 558, 558, 558,
+ 470, 613, 866, 663, 664, 463, 681, 682, 683, 1218,
+ 984, 984, 984, 984, 247, 247, 463, 978, 985, 355,
+ 355, 355, 355, 867, 923, 918, 919, 932, 875, 920,
+ 872, 921, 922, 873, 350, 926, 879, 1126, 1154, 1127,
+ 878, 245, 245, 245, 245, 242, 248, 841, 1106, 1102,
+ 1103, 438, 670, 402, 405, 610, 614, 433, 336, 332,
+ 333, 335, 602, 437, 337, 439, 647, 426, 1273, 1052,
+ 1273, 1273, 342, 900, 456, 456, 348, 456, 456, 1052,
+ 1273, 882, 1052, 520, 1052, 1052, 1052, 1052, 1052, 1052,
+ 1052, 1052, 1052, 343, 342, 1052, 1052, 1052, 1052, 894,
+ 465, 1273, 881, 508, 599, 509, 1273, 1273, 1273, 1273,
+ 358, 515, 1273, 1273, 1273, 1354, 1354, 1354, 1354, 862,
+ 358, 358, 1372, 1372, 630, 667, 895, 883, 1088, 1092,
+ 940, 358, 358, 1362, 941, 358, 1011, 1372, 1389, 993,
+ 956, 447, 956, 619, 633, 636, 637, 638, 639, 660,
+ 661, 662, 716, 718, 564, 569, 562, 358, 358, 1375,
+ 1375, 400, 983, 1055, 1055, 690, 967, 597, 862, 1047,
+ 1063, 1064, 456, 456, 456, 456, 456, 456, 456, 456,
+ 456, 456, 456, 456, 1138, 899, 456, 669, 456, 456,
+ 1058, 1057, 322, 562, 569, 594, 595, 324, 605, 611,
+ 1166, 626, 627, 1028, 1028, 1061, 1062, 632, 632, 25,
+ 320, 306, 1334, 1304, 1304, 1304, 1304, 1304, 1304, 1304,
+ 1304, 1304, 1304, 702, 1349, 1350, 1014, 843, 5, 986,
+ 6, 743, 445, 422, 561, 1023, 1018, 1076, 1345, 702,
+ 1345, 1345, 702, 603, 624, 1323, 1323, 691, 250, 250,
+ 1345, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
+ 1323, 563, 589, 927, 564, 928, 563, 675, 589, 859,
+ 403, 469, 1356, 1356, 1356, 1356, 338, 887, 271, 319,
+ 625, 319, 319, 478, 606, 479, 480, 973, 351, 352,
+ 409, 892, 1320, 1320, 1380, 1381, 1341, 862, 1320, 1320,
+ 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 982, 417,
+ 713, 1268, 1264, 414, 415, 1033, 884, 440, 679, 890,
+ 680, 1149, 419, 420, 421, 1089, 693, 847, 1266, 423,
+ 440, 747, 1043, 346, 485, 1093, 1059, 1059, 330, 484,
+ 1347, 1348, 1140, 674, 1070, 1066, 1067, 1091, 896, 995,
+ 549, 549, 377, 1343, 1343, 1091, 549, 549, 549, 549,
+ 549, 549, 549, 549, 549, 549, 1269, 1270, 0, 1256,
+ 0, 847, 0, 847, 615, 857, 0, 945, 1156, 640,
+ 642, 644, 1256, 0, 0, 0, 0, 608, 1119, 1030,
+ 0, 0, 752, 752, 1271, 1331, 1332, 886, 717, 673,
+ 1009, 0, 0, 516, 708, 880, 1117, 1249, 959, 0,
+ 0, 0, 1250, 1253, 960, 0, 1254, 1263
+ );
+
+ protected array $gotoCheck = array(
+ 42, 42, 73, 84, 73, 23, 23, 23, 23, 49,
+ 84, 162, 162, 25, 25, 25, 25, 162, 9, 162,
+ 162, 162, 162, 162, 162, 162, 162, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 15, 19, 128, 19, 19, 48, 15, 154, 154,
+ 48, 48, 48, 131, 19, 48, 13, 154, 13, 48,
+ 48, 48, 48, 48, 48, 48, 107, 107, 107, 107,
+ 156, 107, 26, 86, 86, 19, 86, 86, 86, 156,
+ 19, 19, 19, 19, 5, 5, 19, 19, 19, 24,
+ 24, 24, 24, 27, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 97, 15, 15, 146, 146, 146,
+ 15, 5, 5, 5, 5, 5, 5, 6, 15, 15,
+ 15, 66, 66, 59, 59, 59, 59, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 43, 73, 73,
+ 73, 73, 174, 45, 23, 23, 185, 23, 23, 73,
+ 73, 35, 73, 76, 73, 73, 73, 73, 73, 73,
+ 73, 73, 73, 174, 174, 73, 73, 73, 73, 35,
+ 83, 73, 35, 160, 178, 160, 73, 73, 73, 73,
+ 14, 160, 73, 73, 73, 9, 9, 9, 9, 22,
+ 14, 14, 188, 188, 56, 56, 16, 16, 16, 16,
+ 73, 14, 14, 187, 73, 14, 103, 188, 14, 16,
+ 9, 83, 9, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 14, 76, 76, 14, 14, 188,
+ 188, 62, 16, 89, 89, 89, 89, 104, 22, 89,
+ 89, 89, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 16, 16, 23, 64, 23, 23,
+ 119, 119, 76, 76, 76, 76, 76, 76, 76, 76,
+ 155, 76, 76, 107, 107, 120, 120, 108, 108, 76,
+ 175, 175, 14, 108, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 7, 184, 184, 50, 7, 46, 50,
+ 46, 50, 113, 14, 50, 50, 50, 115, 131, 7,
+ 131, 131, 7, 2, 2, 176, 176, 117, 5, 5,
+ 131, 176, 176, 176, 176, 176, 176, 176, 176, 176,
+ 176, 9, 9, 65, 14, 65, 9, 121, 9, 18,
+ 9, 9, 131, 131, 131, 131, 29, 39, 24, 24,
+ 80, 24, 24, 9, 9, 9, 9, 92, 97, 97,
+ 28, 9, 177, 177, 9, 9, 131, 22, 177, 177,
+ 177, 177, 177, 177, 177, 177, 177, 177, 93, 93,
+ 93, 20, 166, 82, 82, 110, 37, 118, 82, 9,
+ 82, 153, 82, 82, 82, 130, 82, 12, 14, 82,
+ 118, 99, 114, 82, 157, 133, 118, 118, 9, 182,
+ 182, 182, 149, 118, 118, 118, 118, 131, 41, 96,
+ 179, 179, 138, 131, 131, 131, 179, 179, 179, 179,
+ 179, 179, 179, 179, 179, 179, 20, 20, -1, 20,
+ -1, 12, -1, 12, 17, 20, -1, 17, 17, 85,
+ 85, 85, 20, -1, -1, -1, -1, 8, 8, 17,
+ -1, -1, 24, 24, 20, 20, 20, 17, 8, 17,
+ 17, -1, -1, 8, 8, 17, 8, 79, 79, -1,
+ -1, -1, 79, 79, 79, -1, 79, 17
+ );
+
+ protected array $gotoBase = array(
+ 0, 0, -289, 0, 0, 203, 227, 406, 569, 8,
+ 0, 0, 223, -162, 5, -186, -143, 93, 152, -101,
+ 102, 0, 31, 2, 206, 10, 188, 209, 142, 172,
+ 0, 0, 0, 0, 0, -104, 0, 166, 0, 149,
+ 0, 90, -1, 234, 0, 237, -329, 0, -555, -9,
+ 404, 0, 0, 0, 0, 0, 274, 0, 0, 198,
+ 0, 0, 309, 0, 141, 439, 6, 0, 0, 0,
+ 0, 0, 0, -5, 0, 0, 1, 0, 0, 183,
+ 146, -28, 4, 12, -475, 82, -535, 0, 0, 74,
+ 0, 0, 151, 196, 0, 0, 89, -267, 0, 108,
+ 0, 0, 0, 291, 314, 0, 0, 158, 162, 0,
+ 131, 0, 0, 145, 100, 153, 0, 156, 243, 101,
+ 112, 167, 0, 0, 0, 0, 0, 0, 161, 0,
+ 135, 165, 0, 76, 0, 0, 0, 0, -209, 0,
+ 0, 0, 0, 0, 0, 0, -44, 0, 0, 81,
+ 0, 0, 0, 157, 134, 148, -76, 77, 0, 0,
+ -210, 0, -224, 0, 0, 0, 129, 0, 0, 0,
+ 0, 0, 0, 0, -33, 84, 200, 247, 265, 305,
+ 0, 0, 231, 0, 36, 236, 0, 292, 7, 0,
+ 0
+ );
+
+ protected array $gotoDefault = array(
+ -32768, 521, 754, 4, 755, 949, 830, 839, 585, 539,
+ 715, 347, 634, 429, 1339, 925, 1155, 604, 858, 1282,
+ 1288, 464, 861, 327, 741, 937, 908, 909, 406, 393,
+ 874, 404, 658, 635, 502, 893, 460, 885, 494, 888,
+ 459, 897, 162, 425, 518, 901, 3, 904, 567, 935,
+ 988, 394, 912, 395, 686, 914, 588, 916, 917, 401,
+ 407, 408, 1160, 596, 631, 929, 254, 590, 930, 392,
+ 931, 939, 397, 399, 696, 474, 513, 507, 418, 1121,
+ 591, 618, 655, 453, 481, 629, 641, 628, 488, 441,
+ 424, 326, 972, 980, 495, 472, 994, 349, 1002, 749,
+ 1168, 649, 497, 1010, 650, 1017, 1020, 540, 541, 486,
+ 1032, 264, 1035, 498, 1044, 23, 676, 1049, 1050, 677,
+ 651, 1072, 652, 678, 653, 1074, 471, 586, 1082, 461,
+ 1090, 1328, 462, 1094, 262, 1097, 277, 353, 376, 442,
+ 1104, 1105, 9, 1111, 706, 707, 19, 273, 517, 1139,
+ 697, 1145, 272, 1148, 458, 1167, 457, 1237, 1239, 568,
+ 499, 1257, 310, 1260, 689, 514, 1265, 454, 1330, 455,
+ 542, 482, 334, 543, 1373, 305, 356, 331, 559, 311,
+ 357, 544, 483, 1336, 1344, 328, 31, 1363, 1374, 601,
+ 623
+ );
+
+ protected array $ruleToNonTerminal = array(
+ 0, 1, 3, 3, 2, 5, 5, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 7, 7, 7,
+ 7, 7, 7, 7, 7, 8, 8, 9, 10, 11,
+ 11, 11, 12, 12, 13, 13, 14, 15, 15, 16,
+ 16, 17, 17, 18, 18, 21, 21, 22, 23, 23,
+ 24, 24, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 29, 29, 30, 30, 32, 34, 34,
+ 28, 36, 36, 33, 38, 38, 35, 35, 37, 37,
+ 39, 39, 31, 40, 40, 41, 43, 44, 44, 45,
+ 45, 46, 46, 48, 47, 47, 47, 47, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 25, 25, 50, 69, 69, 72, 72, 71,
+ 70, 70, 63, 75, 75, 76, 76, 77, 77, 78,
+ 78, 79, 79, 80, 80, 80, 26, 26, 27, 27,
+ 27, 27, 27, 88, 88, 90, 90, 83, 83, 91,
+ 91, 92, 92, 92, 84, 84, 87, 87, 85, 85,
+ 93, 94, 94, 57, 57, 65, 65, 68, 68, 68,
+ 67, 95, 95, 96, 58, 58, 58, 58, 97, 97,
+ 98, 98, 99, 99, 100, 101, 101, 102, 102, 103,
+ 103, 55, 55, 51, 51, 105, 53, 53, 106, 52,
+ 52, 54, 54, 64, 64, 64, 64, 81, 81, 109,
+ 109, 111, 111, 112, 112, 112, 112, 112, 112, 112,
+ 110, 110, 110, 115, 115, 115, 115, 89, 89, 118,
+ 118, 118, 119, 119, 116, 116, 120, 120, 122, 122,
+ 123, 123, 117, 124, 124, 121, 125, 125, 125, 125,
+ 113, 113, 82, 82, 82, 20, 20, 20, 127, 126,
+ 126, 128, 128, 128, 128, 60, 129, 129, 130, 61,
+ 132, 132, 133, 133, 134, 134, 86, 135, 135, 135,
+ 135, 135, 135, 135, 135, 141, 141, 142, 142, 143,
+ 143, 143, 143, 143, 144, 145, 145, 140, 140, 136,
+ 136, 139, 139, 147, 147, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 137, 148, 148, 150, 149,
+ 149, 138, 138, 114, 114, 151, 151, 153, 153, 153,
+ 152, 152, 62, 104, 154, 154, 56, 56, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 161, 162, 162, 163, 155, 155, 160, 160,
+ 164, 165, 165, 166, 167, 168, 168, 168, 168, 19,
+ 19, 73, 73, 73, 73, 156, 156, 156, 156, 170,
+ 170, 159, 159, 159, 157, 157, 176, 176, 176, 176,
+ 176, 176, 176, 176, 176, 176, 177, 177, 177, 108,
+ 179, 179, 179, 179, 158, 158, 158, 158, 158, 158,
+ 158, 158, 59, 59, 173, 173, 173, 173, 173, 180,
+ 180, 169, 169, 169, 169, 181, 181, 181, 181, 181,
+ 74, 74, 66, 66, 66, 66, 131, 131, 131, 131,
+ 184, 183, 172, 172, 172, 172, 172, 172, 171, 171,
+ 171, 182, 182, 182, 182, 107, 178, 186, 186, 185,
+ 185, 187, 187, 187, 187, 187, 187, 187, 187, 175,
+ 175, 175, 175, 174, 189, 188, 188, 188, 188, 188,
+ 188, 188, 188, 190, 190, 190, 190
+ );
+
+ protected array $ruleToLength = array(
+ 1, 1, 2, 0, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 1, 0, 1, 1, 2, 1, 3, 4, 1, 2,
+ 0, 1, 1, 1, 1, 4, 3, 5, 4, 3,
+ 4, 1, 3, 1, 1, 8, 7, 2, 3, 1,
+ 2, 3, 1, 2, 3, 1, 1, 3, 1, 3,
+ 1, 2, 2, 3, 1, 3, 2, 3, 1, 3,
+ 3, 2, 0, 1, 1, 1, 1, 1, 3, 7,
+ 10, 5, 7, 9, 5, 3, 3, 3, 3, 3,
+ 3, 1, 2, 5, 7, 9, 6, 5, 6, 3,
+ 2, 1, 1, 1, 1, 0, 2, 1, 3, 8,
+ 0, 4, 2, 1, 3, 0, 1, 0, 1, 0,
+ 1, 3, 1, 1, 1, 1, 8, 9, 7, 8,
+ 7, 6, 8, 0, 2, 0, 2, 1, 2, 1,
+ 2, 1, 1, 1, 0, 2, 0, 2, 0, 2,
+ 2, 1, 3, 1, 4, 1, 4, 1, 1, 4,
+ 2, 1, 3, 3, 3, 4, 4, 5, 0, 2,
+ 4, 3, 1, 1, 7, 0, 2, 1, 3, 3,
+ 4, 1, 4, 0, 2, 5, 0, 2, 6, 0,
+ 2, 0, 3, 1, 2, 1, 1, 2, 0, 1,
+ 3, 0, 2, 1, 1, 1, 1, 1, 1, 1,
+ 7, 9, 6, 1, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 3, 3, 3, 1, 3, 3, 3,
+ 3, 3, 1, 3, 3, 1, 1, 2, 1, 1,
+ 0, 1, 0, 2, 2, 2, 4, 3, 1, 1,
+ 3, 1, 2, 2, 3, 2, 3, 1, 1, 2,
+ 3, 1, 1, 3, 2, 0, 1, 5, 7, 5,
+ 6, 10, 3, 5, 1, 1, 3, 0, 2, 4,
+ 5, 4, 4, 4, 3, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 1, 3, 1, 1,
+ 3, 0, 2, 0, 3, 5, 8, 1, 3, 3,
+ 0, 2, 2, 2, 3, 1, 0, 1, 1, 3,
+ 3, 3, 4, 4, 1, 1, 2, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 2, 2, 2, 2, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 5, 4, 3,
+ 4, 4, 2, 2, 4, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 3, 2, 1,
+ 2, 4, 2, 2, 8, 9, 8, 9, 9, 10,
+ 9, 10, 8, 3, 2, 2, 1, 1, 0, 4,
+ 2, 1, 3, 2, 1, 2, 2, 2, 4, 1,
+ 1, 1, 1, 1, 1, 1, 1, 3, 1, 1,
+ 1, 0, 1, 1, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 3, 5, 3, 3,
+ 4, 1, 1, 3, 1, 1, 1, 1, 1, 3,
+ 2, 3, 0, 1, 1, 3, 1, 1, 1, 1,
+ 1, 1, 3, 1, 1, 1, 4, 1, 4, 4,
+ 0, 1, 1, 1, 3, 3, 1, 4, 2, 2,
+ 1, 3, 1, 4, 3, 3, 3, 3, 1, 3,
+ 1, 1, 3, 1, 1, 4, 1, 1, 1, 3,
+ 1, 1, 2, 1, 3, 4, 3, 2, 0, 2,
+ 2, 1, 2, 1, 1, 1, 4, 3, 3, 3,
+ 3, 6, 3, 1, 1, 2, 1
+ );
+
+ protected function initReduceCallbacks(): void {
+ $this->reduceCallbacks = [
+ 0 => null,
+ 1 => static function ($self, $stackPos) {
+ $self->semValue = $self->handleNamespaces($self->semStack[$stackPos-(1-1)]);
+ },
+ 2 => static function ($self, $stackPos) {
+ if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; } $self->semValue = $self->semStack[$stackPos-(2-1)];;
+ },
+ 3 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 4 => static function ($self, $stackPos) {
+ $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);;
+ if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)];
+ },
+ 5 => null,
+ 6 => null,
+ 7 => null,
+ 8 => null,
+ 9 => null,
+ 10 => null,
+ 11 => null,
+ 12 => null,
+ 13 => null,
+ 14 => null,
+ 15 => null,
+ 16 => null,
+ 17 => null,
+ 18 => null,
+ 19 => null,
+ 20 => null,
+ 21 => null,
+ 22 => null,
+ 23 => null,
+ 24 => null,
+ 25 => null,
+ 26 => null,
+ 27 => null,
+ 28 => null,
+ 29 => null,
+ 30 => null,
+ 31 => null,
+ 32 => null,
+ 33 => null,
+ 34 => null,
+ 35 => null,
+ 36 => null,
+ 37 => null,
+ 38 => null,
+ 39 => null,
+ 40 => null,
+ 41 => null,
+ 42 => null,
+ 43 => null,
+ 44 => null,
+ 45 => null,
+ 46 => null,
+ 47 => null,
+ 48 => null,
+ 49 => null,
+ 50 => null,
+ 51 => null,
+ 52 => null,
+ 53 => null,
+ 54 => null,
+ 55 => null,
+ 56 => null,
+ 57 => null,
+ 58 => null,
+ 59 => null,
+ 60 => null,
+ 61 => null,
+ 62 => null,
+ 63 => null,
+ 64 => null,
+ 65 => null,
+ 66 => null,
+ 67 => null,
+ 68 => null,
+ 69 => null,
+ 70 => null,
+ 71 => null,
+ 72 => null,
+ 73 => null,
+ 74 => null,
+ 75 => null,
+ 76 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(1-1)]; if ($self->semValue === "=") $self->emitError(new Error('Cannot use "=" as an identifier', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])));
+ },
+ 77 => null,
+ 78 => null,
+ 79 => null,
+ 80 => null,
+ 81 => null,
+ 82 => null,
+ 83 => null,
+ 84 => null,
+ 85 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 86 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 87 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 88 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 89 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 90 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 91 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 92 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 93 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 94 => null,
+ 95 => static function ($self, $stackPos) {
+ $self->semValue = new Name(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 96 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Variable(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 97 => static function ($self, $stackPos) {
+ /* nothing */
+ },
+ 98 => static function ($self, $stackPos) {
+ /* nothing */
+ },
+ 99 => static function ($self, $stackPos) {
+ /* nothing */
+ },
+ 100 => static function ($self, $stackPos) {
+ $self->emitError(new Error('A trailing comma is not allowed here', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])));
+ },
+ 101 => null,
+ 102 => null,
+ 103 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Attribute($self->semStack[$stackPos-(1-1)], [], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 104 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Attribute($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 105 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 106 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 107 => static function ($self, $stackPos) {
+ $self->semValue = new Node\AttributeGroup($self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 108 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 109 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 110 => static function ($self, $stackPos) {
+ $self->semValue = [];
+ },
+ 111 => null,
+ 112 => null,
+ 113 => null,
+ 114 => null,
+ 115 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\HaltCompiler($self->handleHaltCompiler(), $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 116 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Namespace_($self->semStack[$stackPos-(3-2)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
+ $self->checkNamespace($self->semValue);
+ },
+ 117 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Namespace_($self->semStack[$stackPos-(5-2)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
+ $self->checkNamespace($self->semValue);
+ },
+ 118 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Namespace_(null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
+ $self->checkNamespace($self->semValue);
+ },
+ 119 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Use_($self->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 120 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Use_($self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 121 => null,
+ 122 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Const_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 123 => static function ($self, $stackPos) {
+ $self->semValue = Stmt\Use_::TYPE_FUNCTION;
+ },
+ 124 => static function ($self, $stackPos) {
+ $self->semValue = Stmt\Use_::TYPE_CONSTANT;
+ },
+ 125 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\GroupUse($self->semStack[$stackPos-(8-3)], $self->semStack[$stackPos-(8-6)], $self->semStack[$stackPos-(8-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 126 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\GroupUse($self->semStack[$stackPos-(7-2)], $self->semStack[$stackPos-(7-5)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 127 => null,
+ 128 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 129 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 130 => null,
+ 131 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 132 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 133 => null,
+ 134 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 135 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 136 => static function ($self, $stackPos) {
+ $self->semValue = new Node\UseItem($self->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(1-1));
+ },
+ 137 => static function ($self, $stackPos) {
+ $self->semValue = new Node\UseItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(3-3));
+ },
+ 138 => static function ($self, $stackPos) {
+ $self->semValue = new Node\UseItem($self->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(1-1));
+ },
+ 139 => static function ($self, $stackPos) {
+ $self->semValue = new Node\UseItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(3-3));
+ },
+ 140 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(1-1)]; $self->semValue->type = Stmt\Use_::TYPE_NORMAL;
+ },
+ 141 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(2-2)]; $self->semValue->type = $self->semStack[$stackPos-(2-1)];
+ },
+ 142 => null,
+ 143 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 144 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 145 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Const_($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 146 => null,
+ 147 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 148 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 149 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Const_(new Node\Identifier($self->semStack[$stackPos-(3-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos-(3-1)])), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 150 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Const_(new Node\Identifier($self->semStack[$stackPos-(3-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos-(3-1)])), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 151 => static function ($self, $stackPos) {
+ if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; } $self->semValue = $self->semStack[$stackPos-(2-1)];;
+ },
+ 152 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 153 => static function ($self, $stackPos) {
+ $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);;
+ if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)];
+ },
+ 154 => null,
+ 155 => null,
+ 156 => null,
+ 157 => static function ($self, $stackPos) {
+ throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 158 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Block($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 159 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\If_($self->semStack[$stackPos-(7-3)], ['stmts' => $self->semStack[$stackPos-(7-5)], 'elseifs' => $self->semStack[$stackPos-(7-6)], 'else' => $self->semStack[$stackPos-(7-7)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 160 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\If_($self->semStack[$stackPos-(10-3)], ['stmts' => $self->semStack[$stackPos-(10-6)], 'elseifs' => $self->semStack[$stackPos-(10-7)], 'else' => $self->semStack[$stackPos-(10-8)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 161 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\While_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 162 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Do_($self->semStack[$stackPos-(7-5)], $self->semStack[$stackPos-(7-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 163 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\For_(['init' => $self->semStack[$stackPos-(9-3)], 'cond' => $self->semStack[$stackPos-(9-5)], 'loop' => $self->semStack[$stackPos-(9-7)], 'stmts' => $self->semStack[$stackPos-(9-9)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 164 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Switch_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 165 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Break_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 166 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Continue_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 167 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Return_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 168 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Global_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 169 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Static_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 170 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Echo_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 171 => static function ($self, $stackPos) {
+
+ $self->semValue = new Stmt\InlineHTML($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ $self->semValue->setAttribute('hasLeadingNewline', $self->inlineHtmlHasLeadingNewline($stackPos-(1-1)));
+
+ },
+ 172 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Expression($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 173 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Unset_($self->semStack[$stackPos-(5-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 174 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $self->semStack[$stackPos-(7-5)][1], 'stmts' => $self->semStack[$stackPos-(7-7)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 175 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(9-3)], $self->semStack[$stackPos-(9-7)][0], ['keyVar' => $self->semStack[$stackPos-(9-5)], 'byRef' => $self->semStack[$stackPos-(9-7)][1], 'stmts' => $self->semStack[$stackPos-(9-9)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 176 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(6-3)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(6-4)], $self->tokenEndStack[$stackPos-(6-4)])), ['stmts' => $self->semStack[$stackPos-(6-6)]], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 177 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Declare_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 178 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\TryCatch($self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-5)], $self->semStack[$stackPos-(6-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); $self->checkTryCatch($self->semValue);
+ },
+ 179 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Goto_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 180 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Label($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 181 => static function ($self, $stackPos) {
+ $self->semValue = null; /* means: no statement */
+ },
+ 182 => null,
+ 183 => static function ($self, $stackPos) {
+ $self->semValue = $self->maybeCreateNop($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]);
+ },
+ 184 => static function ($self, $stackPos) {
+ if ($self->semStack[$stackPos-(1-1)] instanceof Stmt\Block) { $self->semValue = $self->semStack[$stackPos-(1-1)]->stmts; } else if ($self->semStack[$stackPos-(1-1)] === null) { $self->semValue = []; } else { $self->semValue = [$self->semStack[$stackPos-(1-1)]]; };
+ },
+ 185 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 186 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 187 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 188 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 189 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Catch_($self->semStack[$stackPos-(8-3)], $self->semStack[$stackPos-(8-4)], $self->semStack[$stackPos-(8-7)], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 190 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 191 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Finally_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 192 => null,
+ 193 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 194 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 195 => static function ($self, $stackPos) {
+ $self->semValue = false;
+ },
+ 196 => static function ($self, $stackPos) {
+ $self->semValue = true;
+ },
+ 197 => static function ($self, $stackPos) {
+ $self->semValue = false;
+ },
+ 198 => static function ($self, $stackPos) {
+ $self->semValue = true;
+ },
+ 199 => static function ($self, $stackPos) {
+ $self->semValue = false;
+ },
+ 200 => static function ($self, $stackPos) {
+ $self->semValue = true;
+ },
+ 201 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 202 => static function ($self, $stackPos) {
+ $self->semValue = [];
+ },
+ 203 => null,
+ 204 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 205 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 206 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Function_($self->semStack[$stackPos-(8-3)], ['byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-5)], 'returnType' => $self->semStack[$stackPos-(8-7)], 'stmts' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 207 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Function_($self->semStack[$stackPos-(9-4)], ['byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-6)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 208 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Class_($self->semStack[$stackPos-(7-2)], ['type' => $self->semStack[$stackPos-(7-1)], 'extends' => $self->semStack[$stackPos-(7-3)], 'implements' => $self->semStack[$stackPos-(7-4)], 'stmts' => $self->semStack[$stackPos-(7-6)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]));
+ $self->checkClass($self->semValue, $stackPos-(7-2));
+ },
+ 209 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Class_($self->semStack[$stackPos-(8-3)], ['type' => $self->semStack[$stackPos-(8-2)], 'extends' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ $self->checkClass($self->semValue, $stackPos-(8-3));
+ },
+ 210 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Interface_($self->semStack[$stackPos-(7-3)], ['extends' => $self->semStack[$stackPos-(7-4)], 'stmts' => $self->semStack[$stackPos-(7-6)], 'attrGroups' => $self->semStack[$stackPos-(7-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]));
+ $self->checkInterface($self->semValue, $stackPos-(7-3));
+ },
+ 211 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Trait_($self->semStack[$stackPos-(6-3)], ['stmts' => $self->semStack[$stackPos-(6-5)], 'attrGroups' => $self->semStack[$stackPos-(6-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 212 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Enum_($self->semStack[$stackPos-(8-3)], ['scalarType' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ $self->checkEnum($self->semValue, $stackPos-(8-3));
+ },
+ 213 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 214 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(2-2)];
+ },
+ 215 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 216 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(2-2)];
+ },
+ 217 => static function ($self, $stackPos) {
+ $self->semValue = 0;
+ },
+ 218 => null,
+ 219 => null,
+ 220 => static function ($self, $stackPos) {
+ $self->checkClassModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)];
+ },
+ 221 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::ABSTRACT;
+ },
+ 222 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::FINAL;
+ },
+ 223 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::READONLY;
+ },
+ 224 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 225 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(2-2)];
+ },
+ 226 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 227 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(2-2)];
+ },
+ 228 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 229 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(2-2)];
+ },
+ 230 => null,
+ 231 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 232 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 233 => null,
+ 234 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-2)];
+ },
+ 235 => null,
+ 236 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-2)];
+ },
+ 237 => static function ($self, $stackPos) {
+ if ($self->semStack[$stackPos-(1-1)] instanceof Stmt\Block) { $self->semValue = $self->semStack[$stackPos-(1-1)]->stmts; } else if ($self->semStack[$stackPos-(1-1)] === null) { $self->semValue = []; } else { $self->semValue = [$self->semStack[$stackPos-(1-1)]]; };
+ },
+ 238 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 239 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-2)];
+ },
+ 240 => null,
+ 241 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 242 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 243 => static function ($self, $stackPos) {
+ $self->semValue = new Node\DeclareItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 244 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 245 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-3)];
+ },
+ 246 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-2)];
+ },
+ 247 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(5-3)];
+ },
+ 248 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 249 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 250 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Case_($self->semStack[$stackPos-(4-2)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 251 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Case_(null, $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 252 => null,
+ 253 => null,
+ 254 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Match_($self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 255 => static function ($self, $stackPos) {
+ $self->semValue = [];
+ },
+ 256 => null,
+ 257 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 258 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 259 => static function ($self, $stackPos) {
+ $self->semValue = new Node\MatchArm($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 260 => static function ($self, $stackPos) {
+ $self->semValue = new Node\MatchArm(null, $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 261 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(1-1)];
+ },
+ 262 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-2)];
+ },
+ 263 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 264 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 265 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\ElseIf_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 266 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 267 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 268 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\ElseIf_($self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); $self->fixupAlternativeElse($self->semValue);
+ },
+ 269 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 270 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Else_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 271 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 272 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Else_($self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->fixupAlternativeElse($self->semValue);
+ },
+ 273 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)], false);
+ },
+ 274 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(2-2)], true);
+ },
+ 275 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)], false);
+ },
+ 276 => static function ($self, $stackPos) {
+ $self->semValue = array($self->fixupArrayDestructuring($self->semStack[$stackPos-(1-1)]), false);
+ },
+ 277 => null,
+ 278 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 279 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 280 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 281 => static function ($self, $stackPos) {
+ $self->semValue = 0;
+ },
+ 282 => static function ($self, $stackPos) {
+ $self->checkModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)];
+ },
+ 283 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PUBLIC;
+ },
+ 284 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PROTECTED;
+ },
+ 285 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PRIVATE;
+ },
+ 286 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PUBLIC_SET;
+ },
+ 287 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PROTECTED_SET;
+ },
+ 288 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PRIVATE_SET;
+ },
+ 289 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::READONLY;
+ },
+ 290 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Param($self->semStack[$stackPos-(7-6)], null, $self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-4)], $self->semStack[$stackPos-(7-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(7-2)], $self->semStack[$stackPos-(7-1)], $self->semStack[$stackPos-(7-7)]);
+ $self->checkParam($self->semValue);
+ $self->addPropertyNameToHooks($self->semValue);
+ },
+ 291 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Param($self->semStack[$stackPos-(9-6)], $self->semStack[$stackPos-(9-8)], $self->semStack[$stackPos-(9-3)], $self->semStack[$stackPos-(9-4)], $self->semStack[$stackPos-(9-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(9-2)], $self->semStack[$stackPos-(9-1)], $self->semStack[$stackPos-(9-9)]);
+ $self->checkParam($self->semValue);
+ $self->addPropertyNameToHooks($self->semValue);
+ },
+ 292 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Param(new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])), null, $self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-4)], $self->semStack[$stackPos-(6-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(6-2)], $self->semStack[$stackPos-(6-1)]);
+ },
+ 293 => null,
+ 294 => static function ($self, $stackPos) {
+ $self->semValue = new Node\NullableType($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 295 => static function ($self, $stackPos) {
+ $self->semValue = new Node\UnionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 296 => null,
+ 297 => null,
+ 298 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Name('static', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 299 => static function ($self, $stackPos) {
+ $self->semValue = $self->handleBuiltinTypes($self->semStack[$stackPos-(1-1)]);
+ },
+ 300 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier('array', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 301 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Identifier('callable', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 302 => null,
+ 303 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 304 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]);
+ },
+ 305 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 306 => null,
+ 307 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 308 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]);
+ },
+ 309 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 310 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]);
+ },
+ 311 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 312 => static function ($self, $stackPos) {
+ $self->semValue = new Node\IntersectionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 313 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]);
+ },
+ 314 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 315 => static function ($self, $stackPos) {
+ $self->semValue = new Node\IntersectionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 316 => null,
+ 317 => static function ($self, $stackPos) {
+ $self->semValue = new Node\NullableType($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 318 => static function ($self, $stackPos) {
+ $self->semValue = new Node\UnionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 319 => null,
+ 320 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 321 => null,
+ 322 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 323 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(2-2)];
+ },
+ 324 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 325 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 326 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-2)];
+ },
+ 327 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(3-2)]);
+ },
+ 328 => static function ($self, $stackPos) {
+ $self->semValue = new Node\VariadicPlaceholder($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 329 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 330 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 331 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Arg($self->semStack[$stackPos-(1-1)], false, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 332 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Arg($self->semStack[$stackPos-(2-2)], true, false, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 333 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Arg($self->semStack[$stackPos-(2-2)], false, true, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 334 => static function ($self, $stackPos) {
+ $self->semValue = new Node\Arg($self->semStack[$stackPos-(3-3)], false, false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(3-1)]);
+ },
+ 335 => null,
+ 336 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 337 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 338 => null,
+ 339 => null,
+ 340 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 341 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 342 => static function ($self, $stackPos) {
+ $self->semValue = new Node\StaticVar($self->semStack[$stackPos-(1-1)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 343 => static function ($self, $stackPos) {
+ $self->semValue = new Node\StaticVar($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 344 => static function ($self, $stackPos) {
+ if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; } else { $self->semValue = $self->semStack[$stackPos-(2-1)]; }
+ },
+ 345 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 346 => static function ($self, $stackPos) {
+ $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);;
+ if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)];
+ },
+ 347 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Property($self->semStack[$stackPos-(5-2)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-1)]);
+ },
+ 348 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\Property($self->semStack[$stackPos-(7-2)], $self->semStack[$stackPos-(7-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-1)], $self->semStack[$stackPos-(7-6)]);
+ $self->checkPropertyHooksForMultiProperty($self->semValue, $stackPos-(7-5));
+ $self->checkEmptyPropertyHookList($self->semStack[$stackPos-(7-6)], $stackPos-(7-5));
+ $self->addPropertyNameToHooks($self->semValue);
+ },
+ 349 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\ClassConst($self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(5-1)]);
+ $self->checkClassConst($self->semValue, $stackPos-(5-2));
+ },
+ 350 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\ClassConst($self->semStack[$stackPos-(6-5)], $self->semStack[$stackPos-(6-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(6-1)], $self->semStack[$stackPos-(6-4)]);
+ $self->checkClassConst($self->semValue, $stackPos-(6-2));
+ },
+ 351 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\ClassMethod($self->semStack[$stackPos-(10-5)], ['type' => $self->semStack[$stackPos-(10-2)], 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-7)], 'returnType' => $self->semStack[$stackPos-(10-9)], 'stmts' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos]));
+ $self->checkClassMethod($self->semValue, $stackPos-(10-2));
+ },
+ 352 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\TraitUse($self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 353 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\EnumCase($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 354 => static function ($self, $stackPos) {
+ $self->semValue = null; /* will be skipped */
+ },
+ 355 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 356 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 357 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 358 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 359 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\TraitUseAdaptation\Precedence($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 360 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(5-1)][0], $self->semStack[$stackPos-(5-1)][1], $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 361 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 362 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 363 => static function ($self, $stackPos) {
+ $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 364 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]);
+ },
+ 365 => null,
+ 366 => static function ($self, $stackPos) {
+ $self->semValue = array(null, $self->semStack[$stackPos-(1-1)]);
+ },
+ 367 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 368 => null,
+ 369 => null,
+ 370 => static function ($self, $stackPos) {
+ $self->semValue = 0;
+ },
+ 371 => static function ($self, $stackPos) {
+ $self->semValue = 0;
+ },
+ 372 => null,
+ 373 => null,
+ 374 => static function ($self, $stackPos) {
+ $self->checkModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)];
+ },
+ 375 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PUBLIC;
+ },
+ 376 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PROTECTED;
+ },
+ 377 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PRIVATE;
+ },
+ 378 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PUBLIC_SET;
+ },
+ 379 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PROTECTED_SET;
+ },
+ 380 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::PRIVATE_SET;
+ },
+ 381 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::STATIC;
+ },
+ 382 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::ABSTRACT;
+ },
+ 383 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::FINAL;
+ },
+ 384 => static function ($self, $stackPos) {
+ $self->semValue = Modifiers::READONLY;
+ },
+ 385 => null,
+ 386 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 387 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 388 => static function ($self, $stackPos) {
+ $self->semValue = new Node\VarLikeIdentifier(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 389 => static function ($self, $stackPos) {
+ $self->semValue = new Node\PropertyItem($self->semStack[$stackPos-(1-1)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 390 => static function ($self, $stackPos) {
+ $self->semValue = new Node\PropertyItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 391 => static function ($self, $stackPos) {
+ $self->semValue = [];
+ },
+ 392 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 393 => static function ($self, $stackPos) {
+ $self->semValue = [];
+ },
+ 394 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)]; $self->checkEmptyPropertyHookList($self->semStack[$stackPos-(3-2)], $stackPos-(3-1));
+ },
+ 395 => static function ($self, $stackPos) {
+ $self->semValue = new Node\PropertyHook($self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-5)], ['flags' => $self->semStack[$stackPos-(5-2)], 'byRef' => $self->semStack[$stackPos-(5-3)], 'params' => [], 'attrGroups' => $self->semStack[$stackPos-(5-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ $self->checkPropertyHook($self->semValue, null);
+ },
+ 396 => static function ($self, $stackPos) {
+ $self->semValue = new Node\PropertyHook($self->semStack[$stackPos-(8-4)], $self->semStack[$stackPos-(8-8)], ['flags' => $self->semStack[$stackPos-(8-2)], 'byRef' => $self->semStack[$stackPos-(8-3)], 'params' => $self->semStack[$stackPos-(8-6)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ $self->checkPropertyHook($self->semValue, $stackPos-(8-5));
+ },
+ 397 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 398 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 399 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 400 => static function ($self, $stackPos) {
+ $self->semValue = 0;
+ },
+ 401 => static function ($self, $stackPos) {
+ $self->checkPropertyHookModifiers($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)];
+ },
+ 402 => null,
+ 403 => null,
+ 404 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 405 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 406 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 407 => null,
+ 408 => null,
+ 409 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Assign($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 410 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Assign($self->fixupArrayDestructuring($self->semStack[$stackPos-(3-1)]), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 411 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Assign($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 412 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignRef($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 413 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignRef($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ if (!$self->phpVersion->allowsAssignNewByReference()) {
+ $self->emitError(new Error('Cannot assign new by reference', $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])));
+ }
+
+ },
+ 414 => null,
+ 415 => null,
+ 416 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Clone_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 417 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Plus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 418 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Minus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 419 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Mul($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 420 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Div($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 421 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Concat($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 422 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Mod($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 423 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 424 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\BitwiseOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 425 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\BitwiseXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 426 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\ShiftLeft($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 427 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\ShiftRight($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 428 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Pow($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 429 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\AssignOp\Coalesce($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 430 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\PostInc($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 431 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\PreInc($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 432 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\PostDec($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 433 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\PreDec($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 434 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\BooleanOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 435 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\BooleanAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 436 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\LogicalOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 437 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\LogicalAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 438 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\LogicalXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 439 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\BitwiseOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 440 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 441 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 442 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\BitwiseXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 443 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Concat($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 444 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Plus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 445 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Minus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 446 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Mul($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 447 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Div($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 448 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Mod($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 449 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\ShiftLeft($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 450 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\ShiftRight($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 451 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Pow($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 452 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\UnaryPlus($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 453 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\UnaryMinus($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 454 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BooleanNot($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 455 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BitwiseNot($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 456 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Identical($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 457 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\NotIdentical($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 458 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Equal($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 459 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\NotEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 460 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Spaceship($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 461 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Smaller($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 462 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\SmallerOrEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 463 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Greater($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 464 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\GreaterOrEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 465 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Instanceof_($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 466 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 467 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Ternary($self->semStack[$stackPos-(5-1)], $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 468 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Ternary($self->semStack[$stackPos-(4-1)], null, $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 469 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\BinaryOp\Coalesce($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 470 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Isset_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 471 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Empty_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 472 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 473 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 474 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Eval_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 475 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 476 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 477 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Cast\Int_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 478 => static function ($self, $stackPos) {
+ $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]);
+ $attrs['kind'] = $self->getFloatCastKind($self->semStack[$stackPos-(2-1)]);
+ $self->semValue = new Expr\Cast\Double($self->semStack[$stackPos-(2-2)], $attrs);
+ },
+ 479 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Cast\String_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 480 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Cast\Array_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 481 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Cast\Object_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 482 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Cast\Bool_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 483 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Cast\Unset_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 484 => static function ($self, $stackPos) {
+ $self->semValue = $self->createExitExpr($self->semStack[$stackPos-(2-1)], $stackPos-(2-1), $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 485 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ErrorSuppress($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 486 => null,
+ 487 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ShellExec($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 488 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Print_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 489 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Yield_(null, null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 490 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Yield_($self->semStack[$stackPos-(2-2)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 491 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Yield_($self->semStack[$stackPos-(4-4)], $self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 492 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\YieldFrom($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 493 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Throw_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 494 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-4)], 'returnType' => $self->semStack[$stackPos-(8-6)], 'expr' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 495 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'returnType' => $self->semStack[$stackPos-(9-7)], 'expr' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 496 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Closure(['static' => false, 'byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-4)], 'uses' => $self->semStack[$stackPos-(8-6)], 'returnType' => $self->semStack[$stackPos-(8-7)], 'stmts' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 497 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Closure(['static' => true, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'uses' => $self->semStack[$stackPos-(9-7)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 498 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'returnType' => $self->semStack[$stackPos-(9-7)], 'expr' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 499 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-6)], 'returnType' => $self->semStack[$stackPos-(10-8)], 'expr' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 500 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Closure(['static' => false, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'uses' => $self->semStack[$stackPos-(9-7)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 501 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Closure(['static' => true, 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-6)], 'uses' => $self->semStack[$stackPos-(10-8)], 'returnType' => $self->semStack[$stackPos-(10-9)], 'stmts' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 502 => static function ($self, $stackPos) {
+ $self->semValue = array(new Stmt\Class_(null, ['type' => $self->semStack[$stackPos-(8-2)], 'extends' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])), $self->semStack[$stackPos-(8-3)]);
+ $self->checkClass($self->semValue[0], -1);
+ },
+ 503 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\New_($self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 504 => static function ($self, $stackPos) {
+ list($class, $ctorArgs) = $self->semStack[$stackPos-(2-2)]; $self->semValue = new Expr\New_($class, $ctorArgs, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 505 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\New_($self->semStack[$stackPos-(2-2)], [], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 506 => null,
+ 507 => null,
+ 508 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 509 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(4-3)];
+ },
+ 510 => null,
+ 511 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 512 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 513 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ClosureUse($self->semStack[$stackPos-(2-2)], $self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 514 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 515 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 516 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 517 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 518 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\StaticCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 519 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 520 => null,
+ 521 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 522 => static function ($self, $stackPos) {
+ $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 523 => static function ($self, $stackPos) {
+ $self->semValue = new Name\FullyQualified(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 524 => static function ($self, $stackPos) {
+ $self->semValue = new Name\Relative(substr($self->semStack[$stackPos-(1-1)], 10), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 525 => null,
+ 526 => null,
+ 527 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 528 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2;
+ },
+ 529 => null,
+ 530 => null,
+ 531 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 532 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]); foreach ($self->semValue as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $self->phpVersion->supportsUnicodeEscapes()); } };
+ },
+ 533 => static function ($self, $stackPos) {
+ foreach ($self->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $self->phpVersion->supportsUnicodeEscapes()); } }; $self->semValue = $self->semStack[$stackPos-(1-1)];
+ },
+ 534 => static function ($self, $stackPos) {
+ $self->semValue = array();
+ },
+ 535 => null,
+ 536 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ConstFetch($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 537 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Line($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 538 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\File($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 539 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Dir($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 540 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Class_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 541 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Trait_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 542 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Method($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 543 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Function_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 544 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Namespace_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 545 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\MagicConst\Property($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 546 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 547 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(5-1)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 548 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(3-1)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)])), $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2;
+ },
+ 549 => static function ($self, $stackPos) {
+ $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_SHORT;
+ $self->semValue = new Expr\Array_($self->semStack[$stackPos-(3-2)], $attrs);
+ },
+ 550 => static function ($self, $stackPos) {
+ $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_LONG;
+ $self->semValue = new Expr\Array_($self->semStack[$stackPos-(4-3)], $attrs);
+ $self->createdArrays->attach($self->semValue);
+ },
+ 551 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(1-1)]; $self->createdArrays->attach($self->semValue);
+ },
+ 552 => static function ($self, $stackPos) {
+ $self->semValue = Scalar\String_::fromString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]), $self->phpVersion->supportsUnicodeEscapes());
+ },
+ 553 => static function ($self, $stackPos) {
+ $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
+ foreach ($self->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', $self->phpVersion->supportsUnicodeEscapes()); } }; $self->semValue = new Scalar\InterpolatedString($self->semStack[$stackPos-(3-2)], $attrs);
+ },
+ 554 => static function ($self, $stackPos) {
+ $self->semValue = $self->parseLNumber($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]), $self->phpVersion->allowsInvalidOctals());
+ },
+ 555 => static function ($self, $stackPos) {
+ $self->semValue = Scalar\Float_::fromString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 556 => null,
+ 557 => null,
+ 558 => null,
+ 559 => static function ($self, $stackPos) {
+ $self->semValue = $self->parseDocString($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)]), true);
+ },
+ 560 => static function ($self, $stackPos) {
+ $self->semValue = $self->parseDocString($self->semStack[$stackPos-(2-1)], '', $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(2-2)], $self->tokenEndStack[$stackPos-(2-2)]), true);
+ },
+ 561 => static function ($self, $stackPos) {
+ $self->semValue = $self->parseDocString($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)]), true);
+ },
+ 562 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 563 => null,
+ 564 => null,
+ 565 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 566 => null,
+ 567 => null,
+ 568 => null,
+ 569 => null,
+ 570 => null,
+ 571 => null,
+ 572 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 573 => null,
+ 574 => null,
+ 575 => null,
+ 576 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 577 => null,
+ 578 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\MethodCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 579 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\NullsafeMethodCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 580 => static function ($self, $stackPos) {
+ $self->semValue = null;
+ },
+ 581 => null,
+ 582 => null,
+ 583 => null,
+ 584 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 585 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 586 => null,
+ 587 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Variable($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 588 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Variable($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 589 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Variable(new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])), $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2;
+ },
+ 590 => static function ($self, $stackPos) {
+ $var = $self->semStack[$stackPos-(1-1)]->name; $self->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])) : $var;
+ },
+ 591 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 592 => null,
+ 593 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 594 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 595 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 596 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 597 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 598 => null,
+ 599 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 600 => null,
+ 601 => null,
+ 602 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 603 => null,
+ 604 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2;
+ },
+ 605 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\List_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); $self->semValue->setAttribute('kind', Expr\List_::KIND_LIST);
+ $self->postprocessList($self->semValue);
+ },
+ 606 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(1-1)]; $end = count($self->semValue)-1; if ($self->semValue[$end]->value instanceof Expr\Error) array_pop($self->semValue);
+ },
+ 607 => null,
+ 608 => static function ($self, $stackPos) {
+ /* do nothing -- prevent default action of $$=$self->semStack[$1]. See $551. */
+ },
+ 609 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)];
+ },
+ 610 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 611 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(1-1)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 612 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(2-2)], null, true, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 613 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(1-1)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 614 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(3-3)], $self->semStack[$stackPos-(3-1)], false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 615 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(4-4)], $self->semStack[$stackPos-(4-1)], true, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 616 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(3-3)], $self->semStack[$stackPos-(3-1)], false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 617 => static function ($self, $stackPos) {
+ $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(2-2)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]), true);
+ },
+ 618 => static function ($self, $stackPos) {
+ /* Create an Error node now to remember the position. We'll later either report an error,
+ or convert this into a null element, depending on whether this is a creation or destructuring context. */
+ $attrs = $self->createEmptyElemAttributes($self->tokenPos);
+ $self->semValue = new Node\ArrayItem(new Expr\Error($attrs), null, false, $attrs);
+ },
+ 619 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 620 => static function ($self, $stackPos) {
+ $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)];
+ },
+ 621 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(1-1)]);
+ },
+ 622 => static function ($self, $stackPos) {
+ $self->semValue = array($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)]);
+ },
+ 623 => static function ($self, $stackPos) {
+ $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]); $attrs['rawValue'] = $self->semStack[$stackPos-(1-1)]; $self->semValue = new Node\InterpolatedStringPart($self->semStack[$stackPos-(1-1)], $attrs);
+ },
+ 624 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Variable($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 625 => null,
+ 626 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 627 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 628 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 629 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Variable($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 630 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\Variable($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 631 => static function ($self, $stackPos) {
+ $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(6-2)], $self->semStack[$stackPos-(6-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 632 => static function ($self, $stackPos) {
+ $self->semValue = $self->semStack[$stackPos-(3-2)];
+ },
+ 633 => static function ($self, $stackPos) {
+ $self->semValue = new Scalar\String_($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 634 => static function ($self, $stackPos) {
+ $self->semValue = $self->parseNumString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 635 => static function ($self, $stackPos) {
+ $self->semValue = $self->parseNumString('-' . $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]));
+ },
+ 636 => null,
+ ];
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php
new file mode 100644
index 0000000..667f21f
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php
@@ -0,0 +1,1286 @@
+ Map of PHP token IDs to drop */
+ protected array $dropTokens;
+ /** @var int[] Map of external symbols (static::T_*) to internal symbols */
+ protected array $tokenToSymbol;
+ /** @var string[] Map of symbols to their names */
+ protected array $symbolToName;
+ /** @var array Names of the production rules (only necessary for debugging) */
+ protected array $productions;
+
+ /** @var int[] Map of states to a displacement into the $action table. The corresponding action for this
+ * state/symbol pair is $action[$actionBase[$state] + $symbol]. If $actionBase[$state] is 0, the
+ * action is defaulted, i.e. $actionDefault[$state] should be used instead. */
+ protected array $actionBase;
+ /** @var int[] Table of actions. Indexed according to $actionBase comment. */
+ protected array $action;
+ /** @var int[] Table indexed analogously to $action. If $actionCheck[$actionBase[$state] + $symbol] != $symbol
+ * then the action is defaulted, i.e. $actionDefault[$state] should be used instead. */
+ protected array $actionCheck;
+ /** @var int[] Map of states to their default action */
+ protected array $actionDefault;
+ /** @var callable[] Semantic action callbacks */
+ protected array $reduceCallbacks;
+
+ /** @var int[] Map of non-terminals to a displacement into the $goto table. The corresponding goto state for this
+ * non-terminal/state pair is $goto[$gotoBase[$nonTerminal] + $state] (unless defaulted) */
+ protected array $gotoBase;
+ /** @var int[] Table of states to goto after reduction. Indexed according to $gotoBase comment. */
+ protected array $goto;
+ /** @var int[] Table indexed analogously to $goto. If $gotoCheck[$gotoBase[$nonTerminal] + $state] != $nonTerminal
+ * then the goto state is defaulted, i.e. $gotoDefault[$nonTerminal] should be used. */
+ protected array $gotoCheck;
+ /** @var int[] Map of non-terminals to the default state to goto after their reduction */
+ protected array $gotoDefault;
+
+ /** @var int[] Map of rules to the non-terminal on their left-hand side, i.e. the non-terminal to use for
+ * determining the state to goto after reduction. */
+ protected array $ruleToNonTerminal;
+ /** @var int[] Map of rules to the length of their right-hand side, which is the number of elements that have to
+ * be popped from the stack(s) on reduction. */
+ protected array $ruleToLength;
+
+ /*
+ * The following members are part of the parser state:
+ */
+
+ /** @var mixed Temporary value containing the result of last semantic action (reduction) */
+ protected $semValue;
+ /** @var mixed[] Semantic value stack (contains values of tokens and semantic action results) */
+ protected array $semStack;
+ /** @var int[] Token start position stack */
+ protected array $tokenStartStack;
+ /** @var int[] Token end position stack */
+ protected array $tokenEndStack;
+
+ /** @var ErrorHandler Error handler */
+ protected ErrorHandler $errorHandler;
+ /** @var int Error state, used to avoid error floods */
+ protected int $errorState;
+
+ /** @var \SplObjectStorage|null Array nodes created during parsing, for postprocessing of empty elements. */
+ protected ?\SplObjectStorage $createdArrays;
+
+ /** @var Token[] Tokens for the current parse */
+ protected array $tokens;
+ /** @var int Current position in token array */
+ protected int $tokenPos;
+
+ /**
+ * Initialize $reduceCallbacks map.
+ */
+ abstract protected function initReduceCallbacks(): void;
+
+ /**
+ * Creates a parser instance.
+ *
+ * Options:
+ * * phpVersion: ?PhpVersion,
+ *
+ * @param Lexer $lexer A lexer
+ * @param PhpVersion $phpVersion PHP version to target, defaults to latest supported. This
+ * option is best-effort: Even if specified, parsing will generally assume the latest
+ * supported version and only adjust behavior in minor ways, for example by omitting
+ * errors in older versions and interpreting type hints as a name or identifier depending
+ * on version.
+ */
+ public function __construct(Lexer $lexer, ?PhpVersion $phpVersion = null) {
+ $this->lexer = $lexer;
+ $this->phpVersion = $phpVersion ?? PhpVersion::getNewestSupported();
+
+ $this->initReduceCallbacks();
+ $this->phpTokenToSymbol = $this->createTokenMap();
+ $this->dropTokens = array_fill_keys(
+ [\T_WHITESPACE, \T_OPEN_TAG, \T_COMMENT, \T_DOC_COMMENT, \T_BAD_CHARACTER], true
+ );
+ }
+
+ /**
+ * Parses PHP code into a node tree.
+ *
+ * If a non-throwing error handler is used, the parser will continue parsing after an error
+ * occurred and attempt to build a partial AST.
+ *
+ * @param string $code The source code to parse
+ * @param ErrorHandler|null $errorHandler Error handler to use for lexer/parser errors, defaults
+ * to ErrorHandler\Throwing.
+ *
+ * @return Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and
+ * the parser was unable to recover from an error).
+ */
+ public function parse(string $code, ?ErrorHandler $errorHandler = null): ?array {
+ $this->errorHandler = $errorHandler ?: new ErrorHandler\Throwing();
+ $this->createdArrays = new \SplObjectStorage();
+
+ $this->tokens = $this->lexer->tokenize($code, $this->errorHandler);
+ $result = $this->doParse();
+
+ // Report errors for any empty elements used inside arrays. This is delayed until after the main parse,
+ // because we don't know a priori whether a given array expression will be used in a destructuring context
+ // or not.
+ foreach ($this->createdArrays as $node) {
+ foreach ($node->items as $item) {
+ if ($item->value instanceof Expr\Error) {
+ $this->errorHandler->handleError(
+ new Error('Cannot use empty array elements in arrays', $item->getAttributes()));
+ }
+ }
+ }
+
+ // Clear out some of the interior state, so we don't hold onto unnecessary
+ // memory between uses of the parser
+ $this->tokenStartStack = [];
+ $this->tokenEndStack = [];
+ $this->semStack = [];
+ $this->semValue = null;
+ $this->createdArrays = null;
+
+ if ($result !== null) {
+ $traverser = new NodeTraverser(new CommentAnnotatingVisitor($this->tokens));
+ $traverser->traverse($result);
+ }
+
+ return $result;
+ }
+
+ public function getTokens(): array {
+ return $this->tokens;
+ }
+
+ /** @return Stmt[]|null */
+ protected function doParse(): ?array {
+ // We start off with no lookahead-token
+ $symbol = self::SYMBOL_NONE;
+ $tokenValue = null;
+ $this->tokenPos = -1;
+
+ // Keep stack of start and end attributes
+ $this->tokenStartStack = [];
+ $this->tokenEndStack = [0];
+
+ // Start off in the initial state and keep a stack of previous states
+ $state = 0;
+ $stateStack = [$state];
+
+ // Semantic value stack (contains values of tokens and semantic action results)
+ $this->semStack = [];
+
+ // Current position in the stack(s)
+ $stackPos = 0;
+
+ $this->errorState = 0;
+
+ for (;;) {
+ //$this->traceNewState($state, $symbol);
+
+ if ($this->actionBase[$state] === 0) {
+ $rule = $this->actionDefault[$state];
+ } else {
+ if ($symbol === self::SYMBOL_NONE) {
+ do {
+ $token = $this->tokens[++$this->tokenPos];
+ $tokenId = $token->id;
+ } while (isset($this->dropTokens[$tokenId]));
+
+ // Map the lexer token id to the internally used symbols.
+ $tokenValue = $token->text;
+ if (!isset($this->phpTokenToSymbol[$tokenId])) {
+ throw new \RangeException(sprintf(
+ 'The lexer returned an invalid token (id=%d, value=%s)',
+ $tokenId, $tokenValue
+ ));
+ }
+ $symbol = $this->phpTokenToSymbol[$tokenId];
+
+ //$this->traceRead($symbol);
+ }
+
+ $idx = $this->actionBase[$state] + $symbol;
+ if ((($idx >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol)
+ || ($state < $this->YY2TBLSTATE
+ && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $symbol) >= 0
+ && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol))
+ && ($action = $this->action[$idx]) !== $this->defaultAction) {
+ /*
+ * >= numNonLeafStates: shift and reduce
+ * > 0: shift
+ * = 0: accept
+ * < 0: reduce
+ * = -YYUNEXPECTED: error
+ */
+ if ($action > 0) {
+ /* shift */
+ //$this->traceShift($symbol);
+
+ ++$stackPos;
+ $stateStack[$stackPos] = $state = $action;
+ $this->semStack[$stackPos] = $tokenValue;
+ $this->tokenStartStack[$stackPos] = $this->tokenPos;
+ $this->tokenEndStack[$stackPos] = $this->tokenPos;
+ $symbol = self::SYMBOL_NONE;
+
+ if ($this->errorState) {
+ --$this->errorState;
+ }
+
+ if ($action < $this->numNonLeafStates) {
+ continue;
+ }
+
+ /* $yyn >= numNonLeafStates means shift-and-reduce */
+ $rule = $action - $this->numNonLeafStates;
+ } else {
+ $rule = -$action;
+ }
+ } else {
+ $rule = $this->actionDefault[$state];
+ }
+ }
+
+ for (;;) {
+ if ($rule === 0) {
+ /* accept */
+ //$this->traceAccept();
+ return $this->semValue;
+ }
+ if ($rule !== $this->unexpectedTokenRule) {
+ /* reduce */
+ //$this->traceReduce($rule);
+
+ $ruleLength = $this->ruleToLength[$rule];
+ try {
+ $callback = $this->reduceCallbacks[$rule];
+ if ($callback !== null) {
+ $callback($this, $stackPos);
+ } elseif ($ruleLength > 0) {
+ $this->semValue = $this->semStack[$stackPos - $ruleLength + 1];
+ }
+ } catch (Error $e) {
+ if (-1 === $e->getStartLine()) {
+ $e->setStartLine($this->tokens[$this->tokenPos]->line);
+ }
+
+ $this->emitError($e);
+ // Can't recover from this type of error
+ return null;
+ }
+
+ /* Goto - shift nonterminal */
+ $lastTokenEnd = $this->tokenEndStack[$stackPos];
+ $stackPos -= $ruleLength;
+ $nonTerminal = $this->ruleToNonTerminal[$rule];
+ $idx = $this->gotoBase[$nonTerminal] + $stateStack[$stackPos];
+ if ($idx >= 0 && $idx < $this->gotoTableSize && $this->gotoCheck[$idx] === $nonTerminal) {
+ $state = $this->goto[$idx];
+ } else {
+ $state = $this->gotoDefault[$nonTerminal];
+ }
+
+ ++$stackPos;
+ $stateStack[$stackPos] = $state;
+ $this->semStack[$stackPos] = $this->semValue;
+ $this->tokenEndStack[$stackPos] = $lastTokenEnd;
+ if ($ruleLength === 0) {
+ // Empty productions use the start attributes of the lookahead token.
+ $this->tokenStartStack[$stackPos] = $this->tokenPos;
+ }
+ } else {
+ /* error */
+ switch ($this->errorState) {
+ case 0:
+ $msg = $this->getErrorMessage($symbol, $state);
+ $this->emitError(new Error($msg, $this->getAttributesForToken($this->tokenPos)));
+ // Break missing intentionally
+ // no break
+ case 1:
+ case 2:
+ $this->errorState = 3;
+
+ // Pop until error-expecting state uncovered
+ while (!(
+ (($idx = $this->actionBase[$state] + $this->errorSymbol) >= 0
+ && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol)
+ || ($state < $this->YY2TBLSTATE
+ && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $this->errorSymbol) >= 0
+ && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol)
+ ) || ($action = $this->action[$idx]) === $this->defaultAction) { // Not totally sure about this
+ if ($stackPos <= 0) {
+ // Could not recover from error
+ return null;
+ }
+ $state = $stateStack[--$stackPos];
+ //$this->tracePop($state);
+ }
+
+ //$this->traceShift($this->errorSymbol);
+ ++$stackPos;
+ $stateStack[$stackPos] = $state = $action;
+
+ // We treat the error symbol as being empty, so we reset the end attributes
+ // to the end attributes of the last non-error symbol
+ $this->tokenStartStack[$stackPos] = $this->tokenPos;
+ $this->tokenEndStack[$stackPos] = $this->tokenEndStack[$stackPos - 1];
+ break;
+
+ case 3:
+ if ($symbol === 0) {
+ // Reached EOF without recovering from error
+ return null;
+ }
+
+ //$this->traceDiscard($symbol);
+ $symbol = self::SYMBOL_NONE;
+ break 2;
+ }
+ }
+
+ if ($state < $this->numNonLeafStates) {
+ break;
+ }
+
+ /* >= numNonLeafStates means shift-and-reduce */
+ $rule = $state - $this->numNonLeafStates;
+ }
+ }
+ }
+
+ protected function emitError(Error $error): void {
+ $this->errorHandler->handleError($error);
+ }
+
+ /**
+ * Format error message including expected tokens.
+ *
+ * @param int $symbol Unexpected symbol
+ * @param int $state State at time of error
+ *
+ * @return string Formatted error message
+ */
+ protected function getErrorMessage(int $symbol, int $state): string {
+ $expectedString = '';
+ if ($expected = $this->getExpectedTokens($state)) {
+ $expectedString = ', expecting ' . implode(' or ', $expected);
+ }
+
+ return 'Syntax error, unexpected ' . $this->symbolToName[$symbol] . $expectedString;
+ }
+
+ /**
+ * Get limited number of expected tokens in given state.
+ *
+ * @param int $state State
+ *
+ * @return string[] Expected tokens. If too many, an empty array is returned.
+ */
+ protected function getExpectedTokens(int $state): array {
+ $expected = [];
+
+ $base = $this->actionBase[$state];
+ foreach ($this->symbolToName as $symbol => $name) {
+ $idx = $base + $symbol;
+ if ($idx >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol
+ || $state < $this->YY2TBLSTATE
+ && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $symbol) >= 0
+ && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol
+ ) {
+ if ($this->action[$idx] !== $this->unexpectedTokenRule
+ && $this->action[$idx] !== $this->defaultAction
+ && $symbol !== $this->errorSymbol
+ ) {
+ if (count($expected) === 4) {
+ /* Too many expected tokens */
+ return [];
+ }
+
+ $expected[] = $name;
+ }
+ }
+ }
+
+ return $expected;
+ }
+
+ /**
+ * Get attributes for a node with the given start and end token positions.
+ *
+ * @param int $tokenStartPos Token position the node starts at
+ * @param int $tokenEndPos Token position the node ends at
+ * @return array Attributes
+ */
+ protected function getAttributes(int $tokenStartPos, int $tokenEndPos): array {
+ $startToken = $this->tokens[$tokenStartPos];
+ $afterEndToken = $this->tokens[$tokenEndPos + 1];
+ return [
+ 'startLine' => $startToken->line,
+ 'startTokenPos' => $tokenStartPos,
+ 'startFilePos' => $startToken->pos,
+ 'endLine' => $afterEndToken->line,
+ 'endTokenPos' => $tokenEndPos,
+ 'endFilePos' => $afterEndToken->pos - 1,
+ ];
+ }
+
+ /**
+ * Get attributes for a single token at the given token position.
+ *
+ * @return array Attributes
+ */
+ protected function getAttributesForToken(int $tokenPos): array {
+ if ($tokenPos < \count($this->tokens) - 1) {
+ return $this->getAttributes($tokenPos, $tokenPos);
+ }
+
+ // Get attributes for the sentinel token.
+ $token = $this->tokens[$tokenPos];
+ return [
+ 'startLine' => $token->line,
+ 'startTokenPos' => $tokenPos,
+ 'startFilePos' => $token->pos,
+ 'endLine' => $token->line,
+ 'endTokenPos' => $tokenPos,
+ 'endFilePos' => $token->pos,
+ ];
+ }
+
+ /*
+ * Tracing functions used for debugging the parser.
+ */
+
+ /*
+ protected function traceNewState($state, $symbol): void {
+ echo '% State ' . $state
+ . ', Lookahead ' . ($symbol == self::SYMBOL_NONE ? '--none--' : $this->symbolToName[$symbol]) . "\n";
+ }
+
+ protected function traceRead($symbol): void {
+ echo '% Reading ' . $this->symbolToName[$symbol] . "\n";
+ }
+
+ protected function traceShift($symbol): void {
+ echo '% Shift ' . $this->symbolToName[$symbol] . "\n";
+ }
+
+ protected function traceAccept(): void {
+ echo "% Accepted.\n";
+ }
+
+ protected function traceReduce($n): void {
+ echo '% Reduce by (' . $n . ') ' . $this->productions[$n] . "\n";
+ }
+
+ protected function tracePop($state): void {
+ echo '% Recovering, uncovered state ' . $state . "\n";
+ }
+
+ protected function traceDiscard($symbol): void {
+ echo '% Discard ' . $this->symbolToName[$symbol] . "\n";
+ }
+ */
+
+ /*
+ * Helper functions invoked by semantic actions
+ */
+
+ /**
+ * Moves statements of semicolon-style namespaces into $ns->stmts and checks various error conditions.
+ *
+ * @param Node\Stmt[] $stmts
+ * @return Node\Stmt[]
+ */
+ protected function handleNamespaces(array $stmts): array {
+ $hasErrored = false;
+ $style = $this->getNamespacingStyle($stmts);
+ if (null === $style) {
+ // not namespaced, nothing to do
+ return $stmts;
+ }
+ if ('brace' === $style) {
+ // For braced namespaces we only have to check that there are no invalid statements between the namespaces
+ $afterFirstNamespace = false;
+ foreach ($stmts as $stmt) {
+ if ($stmt instanceof Node\Stmt\Namespace_) {
+ $afterFirstNamespace = true;
+ } elseif (!$stmt instanceof Node\Stmt\HaltCompiler
+ && !$stmt instanceof Node\Stmt\Nop
+ && $afterFirstNamespace && !$hasErrored) {
+ $this->emitError(new Error(
+ 'No code may exist outside of namespace {}', $stmt->getAttributes()));
+ $hasErrored = true; // Avoid one error for every statement
+ }
+ }
+ return $stmts;
+ } else {
+ // For semicolon namespaces we have to move the statements after a namespace declaration into ->stmts
+ $resultStmts = [];
+ $targetStmts = &$resultStmts;
+ $lastNs = null;
+ foreach ($stmts as $stmt) {
+ if ($stmt instanceof Node\Stmt\Namespace_) {
+ if ($lastNs !== null) {
+ $this->fixupNamespaceAttributes($lastNs);
+ }
+ if ($stmt->stmts === null) {
+ $stmt->stmts = [];
+ $targetStmts = &$stmt->stmts;
+ $resultStmts[] = $stmt;
+ } else {
+ // This handles the invalid case of mixed style namespaces
+ $resultStmts[] = $stmt;
+ $targetStmts = &$resultStmts;
+ }
+ $lastNs = $stmt;
+ } elseif ($stmt instanceof Node\Stmt\HaltCompiler) {
+ // __halt_compiler() is not moved into the namespace
+ $resultStmts[] = $stmt;
+ } else {
+ $targetStmts[] = $stmt;
+ }
+ }
+ if ($lastNs !== null) {
+ $this->fixupNamespaceAttributes($lastNs);
+ }
+ return $resultStmts;
+ }
+ }
+
+ private function fixupNamespaceAttributes(Node\Stmt\Namespace_ $stmt): void {
+ // We moved the statements into the namespace node, as such the end of the namespace node
+ // needs to be extended to the end of the statements.
+ if (empty($stmt->stmts)) {
+ return;
+ }
+
+ // We only move the builtin end attributes here. This is the best we can do with the
+ // knowledge we have.
+ $endAttributes = ['endLine', 'endFilePos', 'endTokenPos'];
+ $lastStmt = $stmt->stmts[count($stmt->stmts) - 1];
+ foreach ($endAttributes as $endAttribute) {
+ if ($lastStmt->hasAttribute($endAttribute)) {
+ $stmt->setAttribute($endAttribute, $lastStmt->getAttribute($endAttribute));
+ }
+ }
+ }
+
+ /** @return array */
+ private function getNamespaceErrorAttributes(Namespace_ $node): array {
+ $attrs = $node->getAttributes();
+ // Adjust end attributes to only cover the "namespace" keyword, not the whole namespace.
+ if (isset($attrs['startLine'])) {
+ $attrs['endLine'] = $attrs['startLine'];
+ }
+ if (isset($attrs['startTokenPos'])) {
+ $attrs['endTokenPos'] = $attrs['startTokenPos'];
+ }
+ if (isset($attrs['startFilePos'])) {
+ $attrs['endFilePos'] = $attrs['startFilePos'] + \strlen('namespace') - 1;
+ }
+ return $attrs;
+ }
+
+ /**
+ * Determine namespacing style (semicolon or brace)
+ *
+ * @param Node[] $stmts Top-level statements.
+ *
+ * @return null|string One of "semicolon", "brace" or null (no namespaces)
+ */
+ private function getNamespacingStyle(array $stmts): ?string {
+ $style = null;
+ $hasNotAllowedStmts = false;
+ foreach ($stmts as $i => $stmt) {
+ if ($stmt instanceof Node\Stmt\Namespace_) {
+ $currentStyle = null === $stmt->stmts ? 'semicolon' : 'brace';
+ if (null === $style) {
+ $style = $currentStyle;
+ if ($hasNotAllowedStmts) {
+ $this->emitError(new Error(
+ 'Namespace declaration statement has to be the very first statement in the script',
+ $this->getNamespaceErrorAttributes($stmt)
+ ));
+ }
+ } elseif ($style !== $currentStyle) {
+ $this->emitError(new Error(
+ 'Cannot mix bracketed namespace declarations with unbracketed namespace declarations',
+ $this->getNamespaceErrorAttributes($stmt)
+ ));
+ // Treat like semicolon style for namespace normalization
+ return 'semicolon';
+ }
+ continue;
+ }
+
+ /* declare(), __halt_compiler() and nops can be used before a namespace declaration */
+ if ($stmt instanceof Node\Stmt\Declare_
+ || $stmt instanceof Node\Stmt\HaltCompiler
+ || $stmt instanceof Node\Stmt\Nop) {
+ continue;
+ }
+
+ /* There may be a hashbang line at the very start of the file */
+ if ($i === 0 && $stmt instanceof Node\Stmt\InlineHTML && preg_match('/\A#!.*\r?\n\z/', $stmt->value)) {
+ continue;
+ }
+
+ /* Everything else if forbidden before namespace declarations */
+ $hasNotAllowedStmts = true;
+ }
+ return $style;
+ }
+
+ /** @return Name|Identifier */
+ protected function handleBuiltinTypes(Name $name) {
+ if (!$name->isUnqualified()) {
+ return $name;
+ }
+
+ $lowerName = $name->toLowerString();
+ if (!$this->phpVersion->supportsBuiltinType($lowerName)) {
+ return $name;
+ }
+
+ return new Node\Identifier($lowerName, $name->getAttributes());
+ }
+
+ /**
+ * Get combined start and end attributes at a stack location
+ *
+ * @param int $stackPos Stack location
+ *
+ * @return array Combined start and end attributes
+ */
+ protected function getAttributesAt(int $stackPos): array {
+ return $this->getAttributes($this->tokenStartStack[$stackPos], $this->tokenEndStack[$stackPos]);
+ }
+
+ protected function getFloatCastKind(string $cast): int {
+ $cast = strtolower($cast);
+ if (strpos($cast, 'float') !== false) {
+ return Double::KIND_FLOAT;
+ }
+
+ if (strpos($cast, 'real') !== false) {
+ return Double::KIND_REAL;
+ }
+
+ return Double::KIND_DOUBLE;
+ }
+
+ /** @param array $attributes */
+ protected function parseLNumber(string $str, array $attributes, bool $allowInvalidOctal = false): Int_ {
+ try {
+ return Int_::fromString($str, $attributes, $allowInvalidOctal);
+ } catch (Error $error) {
+ $this->emitError($error);
+ // Use dummy value
+ return new Int_(0, $attributes);
+ }
+ }
+
+ /**
+ * Parse a T_NUM_STRING token into either an integer or string node.
+ *
+ * @param string $str Number string
+ * @param array $attributes Attributes
+ *
+ * @return Int_|String_ Integer or string node.
+ */
+ protected function parseNumString(string $str, array $attributes) {
+ if (!preg_match('/^(?:0|-?[1-9][0-9]*)$/', $str)) {
+ return new String_($str, $attributes);
+ }
+
+ $num = +$str;
+ if (!is_int($num)) {
+ return new String_($str, $attributes);
+ }
+
+ return new Int_($num, $attributes);
+ }
+
+ /** @param array $attributes */
+ protected function stripIndentation(
+ string $string, int $indentLen, string $indentChar,
+ bool $newlineAtStart, bool $newlineAtEnd, array $attributes
+ ): string {
+ if ($indentLen === 0) {
+ return $string;
+ }
+
+ $start = $newlineAtStart ? '(?:(?<=\n)|\A)' : '(?<=\n)';
+ $end = $newlineAtEnd ? '(?:(?=[\r\n])|\z)' : '(?=[\r\n])';
+ $regex = '/' . $start . '([ \t]*)(' . $end . ')?/';
+ return preg_replace_callback(
+ $regex,
+ function ($matches) use ($indentLen, $indentChar, $attributes) {
+ $prefix = substr($matches[1], 0, $indentLen);
+ if (false !== strpos($prefix, $indentChar === " " ? "\t" : " ")) {
+ $this->emitError(new Error(
+ 'Invalid indentation - tabs and spaces cannot be mixed', $attributes
+ ));
+ } elseif (strlen($prefix) < $indentLen && !isset($matches[2])) {
+ $this->emitError(new Error(
+ 'Invalid body indentation level ' .
+ '(expecting an indentation level of at least ' . $indentLen . ')',
+ $attributes
+ ));
+ }
+ return substr($matches[0], strlen($prefix));
+ },
+ $string
+ );
+ }
+
+ /**
+ * @param string|(Expr|InterpolatedStringPart)[] $contents
+ * @param array $attributes
+ * @param array $endTokenAttributes
+ */
+ protected function parseDocString(
+ string $startToken, $contents, string $endToken,
+ array $attributes, array $endTokenAttributes, bool $parseUnicodeEscape
+ ): Expr {
+ $kind = strpos($startToken, "'") === false
+ ? String_::KIND_HEREDOC : String_::KIND_NOWDOC;
+
+ $regex = '/\A[bB]?<<<[ \t]*[\'"]?([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)[\'"]?(?:\r\n|\n|\r)\z/';
+ $result = preg_match($regex, $startToken, $matches);
+ assert($result === 1);
+ $label = $matches[1];
+
+ $result = preg_match('/\A[ \t]*/', $endToken, $matches);
+ assert($result === 1);
+ $indentation = $matches[0];
+
+ $attributes['kind'] = $kind;
+ $attributes['docLabel'] = $label;
+ $attributes['docIndentation'] = $indentation;
+
+ $indentHasSpaces = false !== strpos($indentation, " ");
+ $indentHasTabs = false !== strpos($indentation, "\t");
+ if ($indentHasSpaces && $indentHasTabs) {
+ $this->emitError(new Error(
+ 'Invalid indentation - tabs and spaces cannot be mixed',
+ $endTokenAttributes
+ ));
+
+ // Proceed processing as if this doc string is not indented
+ $indentation = '';
+ }
+
+ $indentLen = \strlen($indentation);
+ $indentChar = $indentHasSpaces ? " " : "\t";
+
+ if (\is_string($contents)) {
+ if ($contents === '') {
+ $attributes['rawValue'] = $contents;
+ return new String_('', $attributes);
+ }
+
+ $contents = $this->stripIndentation(
+ $contents, $indentLen, $indentChar, true, true, $attributes
+ );
+ $contents = preg_replace('~(\r\n|\n|\r)\z~', '', $contents);
+ $attributes['rawValue'] = $contents;
+
+ if ($kind === String_::KIND_HEREDOC) {
+ $contents = String_::parseEscapeSequences($contents, null, $parseUnicodeEscape);
+ }
+
+ return new String_($contents, $attributes);
+ } else {
+ assert(count($contents) > 0);
+ if (!$contents[0] instanceof Node\InterpolatedStringPart) {
+ // If there is no leading encapsed string part, pretend there is an empty one
+ $this->stripIndentation(
+ '', $indentLen, $indentChar, true, false, $contents[0]->getAttributes()
+ );
+ }
+
+ $newContents = [];
+ foreach ($contents as $i => $part) {
+ if ($part instanceof Node\InterpolatedStringPart) {
+ $isLast = $i === \count($contents) - 1;
+ $part->value = $this->stripIndentation(
+ $part->value, $indentLen, $indentChar,
+ $i === 0, $isLast, $part->getAttributes()
+ );
+ if ($isLast) {
+ $part->value = preg_replace('~(\r\n|\n|\r)\z~', '', $part->value);
+ }
+ $part->setAttribute('rawValue', $part->value);
+ $part->value = String_::parseEscapeSequences($part->value, null, $parseUnicodeEscape);
+ if ('' === $part->value) {
+ continue;
+ }
+ }
+ $newContents[] = $part;
+ }
+ return new InterpolatedString($newContents, $attributes);
+ }
+ }
+
+ protected function createCommentFromToken(Token $token, int $tokenPos): Comment {
+ assert($token->id === \T_COMMENT || $token->id == \T_DOC_COMMENT);
+ return \T_DOC_COMMENT === $token->id
+ ? new Comment\Doc($token->text, $token->line, $token->pos, $tokenPos,
+ $token->getEndLine(), $token->getEndPos() - 1, $tokenPos)
+ : new Comment($token->text, $token->line, $token->pos, $tokenPos,
+ $token->getEndLine(), $token->getEndPos() - 1, $tokenPos);
+ }
+
+ /**
+ * Get last comment before the given token position, if any
+ */
+ protected function getCommentBeforeToken(int $tokenPos): ?Comment {
+ while (--$tokenPos >= 0) {
+ $token = $this->tokens[$tokenPos];
+ if (!isset($this->dropTokens[$token->id])) {
+ break;
+ }
+
+ if ($token->id === \T_COMMENT || $token->id === \T_DOC_COMMENT) {
+ return $this->createCommentFromToken($token, $tokenPos);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Create a zero-length nop to capture preceding comments, if any.
+ */
+ protected function maybeCreateZeroLengthNop(int $tokenPos): ?Nop {
+ $comment = $this->getCommentBeforeToken($tokenPos);
+ if ($comment === null) {
+ return null;
+ }
+
+ $commentEndLine = $comment->getEndLine();
+ $commentEndFilePos = $comment->getEndFilePos();
+ $commentEndTokenPos = $comment->getEndTokenPos();
+ $attributes = [
+ 'startLine' => $commentEndLine,
+ 'endLine' => $commentEndLine,
+ 'startFilePos' => $commentEndFilePos + 1,
+ 'endFilePos' => $commentEndFilePos,
+ 'startTokenPos' => $commentEndTokenPos + 1,
+ 'endTokenPos' => $commentEndTokenPos,
+ ];
+ return new Nop($attributes);
+ }
+
+ protected function maybeCreateNop(int $tokenStartPos, int $tokenEndPos): ?Nop {
+ if ($this->getCommentBeforeToken($tokenStartPos) === null) {
+ return null;
+ }
+ return new Nop($this->getAttributes($tokenStartPos, $tokenEndPos));
+ }
+
+ protected function handleHaltCompiler(): string {
+ // Prevent the lexer from returning any further tokens.
+ $nextToken = $this->tokens[$this->tokenPos + 1];
+ $this->tokenPos = \count($this->tokens) - 2;
+
+ // Return text after __halt_compiler.
+ return $nextToken->id === \T_INLINE_HTML ? $nextToken->text : '';
+ }
+
+ protected function inlineHtmlHasLeadingNewline(int $stackPos): bool {
+ $tokenPos = $this->tokenStartStack[$stackPos];
+ $token = $this->tokens[$tokenPos];
+ assert($token->id == \T_INLINE_HTML);
+ if ($tokenPos > 0) {
+ $prevToken = $this->tokens[$tokenPos - 1];
+ assert($prevToken->id == \T_CLOSE_TAG);
+ return false !== strpos($prevToken->text, "\n")
+ || false !== strpos($prevToken->text, "\r");
+ }
+ return true;
+ }
+
+ /**
+ * @return array
+ */
+ protected function createEmptyElemAttributes(int $tokenPos): array {
+ return $this->getAttributesForToken($tokenPos);
+ }
+
+ protected function fixupArrayDestructuring(Array_ $node): Expr\List_ {
+ $this->createdArrays->detach($node);
+ return new Expr\List_(array_map(function (Node\ArrayItem $item) {
+ if ($item->value instanceof Expr\Error) {
+ // We used Error as a placeholder for empty elements, which are legal for destructuring.
+ return null;
+ }
+ if ($item->value instanceof Array_) {
+ return new Node\ArrayItem(
+ $this->fixupArrayDestructuring($item->value),
+ $item->key, $item->byRef, $item->getAttributes());
+ }
+ return $item;
+ }, $node->items), ['kind' => Expr\List_::KIND_ARRAY] + $node->getAttributes());
+ }
+
+ protected function postprocessList(Expr\List_ $node): void {
+ foreach ($node->items as $i => $item) {
+ if ($item->value instanceof Expr\Error) {
+ // We used Error as a placeholder for empty elements, which are legal for destructuring.
+ $node->items[$i] = null;
+ }
+ }
+ }
+
+ /** @param ElseIf_|Else_ $node */
+ protected function fixupAlternativeElse($node): void {
+ // Make sure a trailing nop statement carrying comments is part of the node.
+ $numStmts = \count($node->stmts);
+ if ($numStmts !== 0 && $node->stmts[$numStmts - 1] instanceof Nop) {
+ $nopAttrs = $node->stmts[$numStmts - 1]->getAttributes();
+ if (isset($nopAttrs['endLine'])) {
+ $node->setAttribute('endLine', $nopAttrs['endLine']);
+ }
+ if (isset($nopAttrs['endFilePos'])) {
+ $node->setAttribute('endFilePos', $nopAttrs['endFilePos']);
+ }
+ if (isset($nopAttrs['endTokenPos'])) {
+ $node->setAttribute('endTokenPos', $nopAttrs['endTokenPos']);
+ }
+ }
+ }
+
+ protected function checkClassModifier(int $a, int $b, int $modifierPos): void {
+ try {
+ Modifiers::verifyClassModifier($a, $b);
+ } catch (Error $error) {
+ $error->setAttributes($this->getAttributesAt($modifierPos));
+ $this->emitError($error);
+ }
+ }
+
+ protected function checkModifier(int $a, int $b, int $modifierPos): void {
+ // Jumping through some hoops here because verifyModifier() is also used elsewhere
+ try {
+ Modifiers::verifyModifier($a, $b);
+ } catch (Error $error) {
+ $error->setAttributes($this->getAttributesAt($modifierPos));
+ $this->emitError($error);
+ }
+ }
+
+ protected function checkParam(Param $node): void {
+ if ($node->variadic && null !== $node->default) {
+ $this->emitError(new Error(
+ 'Variadic parameter cannot have a default value',
+ $node->default->getAttributes()
+ ));
+ }
+ }
+
+ protected function checkTryCatch(TryCatch $node): void {
+ if (empty($node->catches) && null === $node->finally) {
+ $this->emitError(new Error(
+ 'Cannot use try without catch or finally', $node->getAttributes()
+ ));
+ }
+ }
+
+ protected function checkNamespace(Namespace_ $node): void {
+ if (null !== $node->stmts) {
+ foreach ($node->stmts as $stmt) {
+ if ($stmt instanceof Namespace_) {
+ $this->emitError(new Error(
+ 'Namespace declarations cannot be nested', $stmt->getAttributes()
+ ));
+ }
+ }
+ }
+ }
+
+ private function checkClassName(?Identifier $name, int $namePos): void {
+ if (null !== $name && $name->isSpecialClassName()) {
+ $this->emitError(new Error(
+ sprintf('Cannot use \'%s\' as class name as it is reserved', $name),
+ $this->getAttributesAt($namePos)
+ ));
+ }
+ }
+
+ /** @param Name[] $interfaces */
+ private function checkImplementedInterfaces(array $interfaces): void {
+ foreach ($interfaces as $interface) {
+ if ($interface->isSpecialClassName()) {
+ $this->emitError(new Error(
+ sprintf('Cannot use \'%s\' as interface name as it is reserved', $interface),
+ $interface->getAttributes()
+ ));
+ }
+ }
+ }
+
+ protected function checkClass(Class_ $node, int $namePos): void {
+ $this->checkClassName($node->name, $namePos);
+
+ if ($node->extends && $node->extends->isSpecialClassName()) {
+ $this->emitError(new Error(
+ sprintf('Cannot use \'%s\' as class name as it is reserved', $node->extends),
+ $node->extends->getAttributes()
+ ));
+ }
+
+ $this->checkImplementedInterfaces($node->implements);
+ }
+
+ protected function checkInterface(Interface_ $node, int $namePos): void {
+ $this->checkClassName($node->name, $namePos);
+ $this->checkImplementedInterfaces($node->extends);
+ }
+
+ protected function checkEnum(Enum_ $node, int $namePos): void {
+ $this->checkClassName($node->name, $namePos);
+ $this->checkImplementedInterfaces($node->implements);
+ }
+
+ protected function checkClassMethod(ClassMethod $node, int $modifierPos): void {
+ if ($node->flags & Modifiers::STATIC) {
+ switch ($node->name->toLowerString()) {
+ case '__construct':
+ $this->emitError(new Error(
+ sprintf('Constructor %s() cannot be static', $node->name),
+ $this->getAttributesAt($modifierPos)));
+ break;
+ case '__destruct':
+ $this->emitError(new Error(
+ sprintf('Destructor %s() cannot be static', $node->name),
+ $this->getAttributesAt($modifierPos)));
+ break;
+ case '__clone':
+ $this->emitError(new Error(
+ sprintf('Clone method %s() cannot be static', $node->name),
+ $this->getAttributesAt($modifierPos)));
+ break;
+ }
+ }
+
+ if ($node->flags & Modifiers::READONLY) {
+ $this->emitError(new Error(
+ sprintf('Method %s() cannot be readonly', $node->name),
+ $this->getAttributesAt($modifierPos)));
+ }
+ }
+
+ protected function checkClassConst(ClassConst $node, int $modifierPos): void {
+ foreach ([Modifiers::STATIC, Modifiers::ABSTRACT, Modifiers::READONLY] as $modifier) {
+ if ($node->flags & $modifier) {
+ $this->emitError(new Error(
+ "Cannot use '" . Modifiers::toString($modifier) . "' as constant modifier",
+ $this->getAttributesAt($modifierPos)));
+ }
+ }
+ }
+
+ protected function checkUseUse(UseItem $node, int $namePos): void {
+ if ($node->alias && $node->alias->isSpecialClassName()) {
+ $this->emitError(new Error(
+ sprintf(
+ 'Cannot use %s as %s because \'%2$s\' is a special class name',
+ $node->name, $node->alias
+ ),
+ $this->getAttributesAt($namePos)
+ ));
+ }
+ }
+
+ protected function checkPropertyHooksForMultiProperty(Property $property, int $hookPos): void {
+ if (count($property->props) > 1) {
+ $this->emitError(new Error(
+ 'Cannot use hooks when declaring multiple properties', $this->getAttributesAt($hookPos)));
+ }
+ }
+
+ /** @param PropertyHook[] $hooks */
+ protected function checkEmptyPropertyHookList(array $hooks, int $hookPos): void {
+ if (empty($hooks)) {
+ $this->emitError(new Error(
+ 'Property hook list cannot be empty', $this->getAttributesAt($hookPos)));
+ }
+ }
+
+ protected function checkPropertyHook(PropertyHook $hook, ?int $paramListPos): void {
+ $name = $hook->name->toLowerString();
+ if ($name !== 'get' && $name !== 'set') {
+ $this->emitError(new Error(
+ 'Unknown hook "' . $hook->name . '", expected "get" or "set"',
+ $hook->name->getAttributes()));
+ }
+ if ($name === 'get' && $paramListPos !== null) {
+ $this->emitError(new Error(
+ 'get hook must not have a parameter list', $this->getAttributesAt($paramListPos)));
+ }
+ }
+
+ protected function checkPropertyHookModifiers(int $a, int $b, int $modifierPos): void {
+ try {
+ Modifiers::verifyModifier($a, $b);
+ } catch (Error $error) {
+ $error->setAttributes($this->getAttributesAt($modifierPos));
+ $this->emitError($error);
+ }
+
+ if ($b != Modifiers::FINAL) {
+ $this->emitError(new Error(
+ 'Cannot use the ' . Modifiers::toString($b) . ' modifier on a property hook',
+ $this->getAttributesAt($modifierPos)));
+ }
+ }
+
+ /**
+ * @param Property|Param $node
+ */
+ protected function addPropertyNameToHooks(Node $node): void {
+ if ($node instanceof Property) {
+ $name = $node->props[0]->name->toString();
+ } else {
+ $name = $node->var->name;
+ }
+ foreach ($node->hooks as $hook) {
+ $hook->setAttribute('propertyName', $name);
+ }
+ }
+
+ /** @param array $args */
+ private function isSimpleExit(array $args): bool {
+ if (\count($args) === 0) {
+ return true;
+ }
+ if (\count($args) === 1) {
+ $arg = $args[0];
+ return $arg instanceof Arg && $arg->name === null &&
+ $arg->byRef === false && $arg->unpack === false;
+ }
+ return false;
+ }
+
+ /**
+ * @param array $args
+ * @param array $attrs
+ */
+ protected function createExitExpr(string $name, int $namePos, array $args, array $attrs): Expr {
+ if ($this->isSimpleExit($args)) {
+ // Create Exit node for backwards compatibility.
+ $attrs['kind'] = strtolower($name) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
+ return new Expr\Exit_(\count($args) === 1 ? $args[0]->value : null, $attrs);
+ }
+ return new Expr\FuncCall(new Name($name, $this->getAttributesAt($namePos)), $args, $attrs);
+ }
+
+ /**
+ * Creates the token map.
+ *
+ * The token map maps the PHP internal token identifiers
+ * to the identifiers used by the Parser. Additionally it
+ * maps T_OPEN_TAG_WITH_ECHO to T_ECHO and T_CLOSE_TAG to ';'.
+ *
+ * @return array The token map
+ */
+ protected function createTokenMap(): array {
+ $tokenMap = [];
+
+ // Single-char tokens use an identity mapping.
+ for ($i = 0; $i < 256; ++$i) {
+ $tokenMap[$i] = $i;
+ }
+
+ foreach ($this->symbolToName as $name) {
+ if ($name[0] === 'T') {
+ $tokenMap[\constant($name)] = constant(static::class . '::' . $name);
+ }
+ }
+
+ // T_OPEN_TAG_WITH_ECHO with dropped T_OPEN_TAG results in T_ECHO
+ $tokenMap[\T_OPEN_TAG_WITH_ECHO] = static::T_ECHO;
+ // T_CLOSE_TAG is equivalent to ';'
+ $tokenMap[\T_CLOSE_TAG] = ord(';');
+
+ // We have created a map from PHP token IDs to external symbol IDs.
+ // Now map them to the internal symbol ID.
+ $fullTokenMap = [];
+ foreach ($tokenMap as $phpToken => $extSymbol) {
+ $intSymbol = $this->tokenToSymbol[$extSymbol];
+ if ($intSymbol === $this->invalidSymbol) {
+ continue;
+ }
+ $fullTokenMap[$phpToken] = $intSymbol;
+ }
+
+ return $fullTokenMap;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php b/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php
new file mode 100644
index 0000000..3a7586e
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php
@@ -0,0 +1,42 @@
+isHostVersion()) {
+ $lexer = new Lexer();
+ } else {
+ $lexer = new Lexer\Emulative($version);
+ }
+ if ($version->id >= 80000) {
+ return new Php8($lexer, $version);
+ }
+ return new Php7($lexer, $version);
+ }
+
+ /**
+ * Create a parser targeting the newest version supported by this library. Code for older
+ * versions will be accepted if there have been no relevant backwards-compatibility breaks in
+ * PHP.
+ */
+ public function createForNewestSupportedVersion(): Parser {
+ return $this->createForVersion(PhpVersion::getNewestSupported());
+ }
+
+ /**
+ * Create a parser targeting the host PHP version, that is the PHP version we're currently
+ * running on. This parser will not use any token emulation.
+ */
+ public function createForHostVersion(): Parser {
+ return $this->createForVersion(PhpVersion::getHostVersion());
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php b/vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php
new file mode 100644
index 0000000..04ff6dd
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php
@@ -0,0 +1,164 @@
+ 50100,
+ 'callable' => 50400,
+ 'bool' => 70000,
+ 'int' => 70000,
+ 'float' => 70000,
+ 'string' => 70000,
+ 'iterable' => 70100,
+ 'void' => 70100,
+ 'object' => 70200,
+ 'null' => 80000,
+ 'false' => 80000,
+ 'mixed' => 80000,
+ 'never' => 80100,
+ 'true' => 80200,
+ ];
+
+ private function __construct(int $id) {
+ $this->id = $id;
+ }
+
+ /**
+ * Create a PhpVersion object from major and minor version components.
+ */
+ public static function fromComponents(int $major, int $minor): self {
+ return new self($major * 10000 + $minor * 100);
+ }
+
+ /**
+ * Get the newest PHP version supported by this library. Support for this version may be partial,
+ * if it is still under development.
+ */
+ public static function getNewestSupported(): self {
+ return self::fromComponents(8, 4);
+ }
+
+ /**
+ * Get the host PHP version, that is the PHP version we're currently running on.
+ */
+ public static function getHostVersion(): self {
+ return self::fromComponents(\PHP_MAJOR_VERSION, \PHP_MINOR_VERSION);
+ }
+
+ /**
+ * Parse the version from a string like "8.1".
+ */
+ public static function fromString(string $version): self {
+ if (!preg_match('/^(\d+)\.(\d+)/', $version, $matches)) {
+ throw new \LogicException("Invalid PHP version \"$version\"");
+ }
+ return self::fromComponents((int) $matches[1], (int) $matches[2]);
+ }
+
+ /**
+ * Check whether two versions are the same.
+ */
+ public function equals(PhpVersion $other): bool {
+ return $this->id === $other->id;
+ }
+
+ /**
+ * Check whether this version is greater than or equal to the argument.
+ */
+ public function newerOrEqual(PhpVersion $other): bool {
+ return $this->id >= $other->id;
+ }
+
+ /**
+ * Check whether this version is older than the argument.
+ */
+ public function older(PhpVersion $other): bool {
+ return $this->id < $other->id;
+ }
+
+ /**
+ * Check whether this is the host PHP version.
+ */
+ public function isHostVersion(): bool {
+ return $this->equals(self::getHostVersion());
+ }
+
+ /**
+ * Check whether this PHP version supports the given builtin type. Type name must be lowercase.
+ */
+ public function supportsBuiltinType(string $type): bool {
+ $minVersion = self::BUILTIN_TYPE_VERSIONS[$type] ?? null;
+ return $minVersion !== null && $this->id >= $minVersion;
+ }
+
+ /**
+ * Whether this version supports [] array literals.
+ */
+ public function supportsShortArraySyntax(): bool {
+ return $this->id >= 50400;
+ }
+
+ /**
+ * Whether this version supports [] for destructuring.
+ */
+ public function supportsShortArrayDestructuring(): bool {
+ return $this->id >= 70100;
+ }
+
+ /**
+ * Whether this version supports flexible heredoc/nowdoc.
+ */
+ public function supportsFlexibleHeredoc(): bool {
+ return $this->id >= 70300;
+ }
+
+ /**
+ * Whether this version supports trailing commas in parameter lists.
+ */
+ public function supportsTrailingCommaInParamList(): bool {
+ return $this->id >= 80000;
+ }
+
+ /**
+ * Whether this version allows "$var =& new Obj".
+ */
+ public function allowsAssignNewByReference(): bool {
+ return $this->id < 70000;
+ }
+
+ /**
+ * Whether this version allows invalid octals like "08".
+ */
+ public function allowsInvalidOctals(): bool {
+ return $this->id < 70000;
+ }
+
+ /**
+ * Whether this version allows DEL (\x7f) to occur in identifiers.
+ */
+ public function allowsDelInIdentifiers(): bool {
+ return $this->id < 70100;
+ }
+
+ /**
+ * Whether this version supports yield in expression context without parentheses.
+ */
+ public function supportsYieldWithoutParentheses(): bool {
+ return $this->id >= 70000;
+ }
+
+ /**
+ * Whether this version supports unicode escape sequences in strings.
+ */
+ public function supportsUnicodeEscapes(): bool {
+ return $this->id >= 70000;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php
new file mode 100644
index 0000000..892c686
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php
@@ -0,0 +1,51 @@
+pAttrGroups($node->attrGroups, true)
+ . $this->pModifiers($node->flags)
+ . ($node->type ? $this->p($node->type) . ' ' : '')
+ . ($node->byRef ? '&' : '')
+ . ($node->variadic ? '...' : '')
+ . $this->p($node->var)
+ . ($node->default ? ' = ' . $this->p($node->default) : '')
+ . ($node->hooks ? ' {' . $this->pStmts($node->hooks) . $this->nl . '}' : '');
+ }
+
+ protected function pArg(Node\Arg $node): string {
+ return ($node->name ? $node->name->toString() . ': ' : '')
+ . ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '')
+ . $this->p($node->value);
+ }
+
+ protected function pVariadicPlaceholder(Node\VariadicPlaceholder $node): string {
+ return '...';
+ }
+
+ protected function pConst(Node\Const_ $node): string {
+ return $node->name . ' = ' . $this->p($node->value);
+ }
+
+ protected function pNullableType(Node\NullableType $node): string {
+ return '?' . $this->p($node->type);
+ }
+
+ protected function pUnionType(Node\UnionType $node): string {
+ $types = [];
+ foreach ($node->types as $typeNode) {
+ if ($typeNode instanceof Node\IntersectionType) {
+ $types[] = '('. $this->p($typeNode) . ')';
+ continue;
+ }
+ $types[] = $this->p($typeNode);
+ }
+ return implode('|', $types);
+ }
+
+ protected function pIntersectionType(Node\IntersectionType $node): string {
+ return $this->pImplode($node->types, '&');
+ }
+
+ protected function pIdentifier(Node\Identifier $node): string {
+ return $node->name;
+ }
+
+ protected function pVarLikeIdentifier(Node\VarLikeIdentifier $node): string {
+ return '$' . $node->name;
+ }
+
+ protected function pAttribute(Node\Attribute $node): string {
+ return $this->p($node->name)
+ . ($node->args ? '(' . $this->pCommaSeparated($node->args) . ')' : '');
+ }
+
+ protected function pAttributeGroup(Node\AttributeGroup $node): string {
+ return '#[' . $this->pCommaSeparated($node->attrs) . ']';
+ }
+
+ // Names
+
+ protected function pName(Name $node): string {
+ return $node->name;
+ }
+
+ protected function pName_FullyQualified(Name\FullyQualified $node): string {
+ return '\\' . $node->name;
+ }
+
+ protected function pName_Relative(Name\Relative $node): string {
+ return 'namespace\\' . $node->name;
+ }
+
+ // Magic Constants
+
+ protected function pScalar_MagicConst_Class(MagicConst\Class_ $node): string {
+ return '__CLASS__';
+ }
+
+ protected function pScalar_MagicConst_Dir(MagicConst\Dir $node): string {
+ return '__DIR__';
+ }
+
+ protected function pScalar_MagicConst_File(MagicConst\File $node): string {
+ return '__FILE__';
+ }
+
+ protected function pScalar_MagicConst_Function(MagicConst\Function_ $node): string {
+ return '__FUNCTION__';
+ }
+
+ protected function pScalar_MagicConst_Line(MagicConst\Line $node): string {
+ return '__LINE__';
+ }
+
+ protected function pScalar_MagicConst_Method(MagicConst\Method $node): string {
+ return '__METHOD__';
+ }
+
+ protected function pScalar_MagicConst_Namespace(MagicConst\Namespace_ $node): string {
+ return '__NAMESPACE__';
+ }
+
+ protected function pScalar_MagicConst_Trait(MagicConst\Trait_ $node): string {
+ return '__TRAIT__';
+ }
+
+ protected function pScalar_MagicConst_Property(MagicConst\Property $node): string {
+ return '__PROPERTY__';
+ }
+
+ // Scalars
+
+ private function indentString(string $str): string {
+ return str_replace("\n", $this->nl, $str);
+ }
+
+ protected function pScalar_String(Scalar\String_ $node): string {
+ $kind = $node->getAttribute('kind', Scalar\String_::KIND_SINGLE_QUOTED);
+ switch ($kind) {
+ case Scalar\String_::KIND_NOWDOC:
+ $label = $node->getAttribute('docLabel');
+ if ($label && !$this->containsEndLabel($node->value, $label)) {
+ $shouldIdent = $this->phpVersion->supportsFlexibleHeredoc();
+ $nl = $shouldIdent ? $this->nl : $this->newline;
+ if ($node->value === '') {
+ return "<<<'$label'$nl$label{$this->docStringEndToken}";
+ }
+
+ // Make sure trailing \r is not combined with following \n into CRLF.
+ if ($node->value[strlen($node->value) - 1] !== "\r") {
+ $value = $shouldIdent ? $this->indentString($node->value) : $node->value;
+ return "<<<'$label'$nl$value$nl$label{$this->docStringEndToken}";
+ }
+ }
+ /* break missing intentionally */
+ // no break
+ case Scalar\String_::KIND_SINGLE_QUOTED:
+ return $this->pSingleQuotedString($node->value);
+ case Scalar\String_::KIND_HEREDOC:
+ $label = $node->getAttribute('docLabel');
+ $escaped = $this->escapeString($node->value, null);
+ if ($label && !$this->containsEndLabel($escaped, $label)) {
+ $nl = $this->phpVersion->supportsFlexibleHeredoc() ? $this->nl : $this->newline;
+ if ($escaped === '') {
+ return "<<<$label$nl$label{$this->docStringEndToken}";
+ }
+
+ return "<<<$label$nl$escaped$nl$label{$this->docStringEndToken}";
+ }
+ /* break missing intentionally */
+ // no break
+ case Scalar\String_::KIND_DOUBLE_QUOTED:
+ return '"' . $this->escapeString($node->value, '"') . '"';
+ }
+ throw new \Exception('Invalid string kind');
+ }
+
+ protected function pScalar_InterpolatedString(Scalar\InterpolatedString $node): string {
+ if ($node->getAttribute('kind') === Scalar\String_::KIND_HEREDOC) {
+ $label = $node->getAttribute('docLabel');
+ if ($label && !$this->encapsedContainsEndLabel($node->parts, $label)) {
+ $nl = $this->phpVersion->supportsFlexibleHeredoc() ? $this->nl : $this->newline;
+ if (count($node->parts) === 1
+ && $node->parts[0] instanceof Node\InterpolatedStringPart
+ && $node->parts[0]->value === ''
+ ) {
+ return "<<<$label$nl$label{$this->docStringEndToken}";
+ }
+
+ return "<<<$label$nl" . $this->pEncapsList($node->parts, null)
+ . "$nl$label{$this->docStringEndToken}";
+ }
+ }
+ return '"' . $this->pEncapsList($node->parts, '"') . '"';
+ }
+
+ protected function pScalar_Int(Scalar\Int_ $node): string {
+ if ($node->value === -\PHP_INT_MAX - 1) {
+ // PHP_INT_MIN cannot be represented as a literal,
+ // because the sign is not part of the literal
+ return '(-' . \PHP_INT_MAX . '-1)';
+ }
+
+ $kind = $node->getAttribute('kind', Scalar\Int_::KIND_DEC);
+ if (Scalar\Int_::KIND_DEC === $kind) {
+ return (string) $node->value;
+ }
+
+ if ($node->value < 0) {
+ $sign = '-';
+ $str = (string) -$node->value;
+ } else {
+ $sign = '';
+ $str = (string) $node->value;
+ }
+ switch ($kind) {
+ case Scalar\Int_::KIND_BIN:
+ return $sign . '0b' . base_convert($str, 10, 2);
+ case Scalar\Int_::KIND_OCT:
+ return $sign . '0' . base_convert($str, 10, 8);
+ case Scalar\Int_::KIND_HEX:
+ return $sign . '0x' . base_convert($str, 10, 16);
+ }
+ throw new \Exception('Invalid number kind');
+ }
+
+ protected function pScalar_Float(Scalar\Float_ $node): string {
+ if (!is_finite($node->value)) {
+ if ($node->value === \INF) {
+ return '1.0E+1000';
+ }
+ if ($node->value === -\INF) {
+ return '-1.0E+1000';
+ } else {
+ return '\NAN';
+ }
+ }
+
+ // Try to find a short full-precision representation
+ $stringValue = sprintf('%.16G', $node->value);
+ if ($node->value !== (float) $stringValue) {
+ $stringValue = sprintf('%.17G', $node->value);
+ }
+
+ // %G is locale dependent and there exists no locale-independent alternative. We don't want
+ // mess with switching locales here, so let's assume that a comma is the only non-standard
+ // decimal separator we may encounter...
+ $stringValue = str_replace(',', '.', $stringValue);
+
+ // ensure that number is really printed as float
+ return preg_match('/^-?[0-9]+$/', $stringValue) ? $stringValue . '.0' : $stringValue;
+ }
+
+ // Assignments
+
+ protected function pExpr_Assign(Expr\Assign $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Expr\Assign::class, $this->p($node->var) . ' = ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_AssignRef(Expr\AssignRef $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Expr\AssignRef::class, $this->p($node->var) . ' =& ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_AssignOp_Plus(AssignOp\Plus $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(AssignOp\Plus::class, $this->p($node->var) . ' += ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_AssignOp_Minus(AssignOp\Minus $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(AssignOp\Minus::class, $this->p($node->var) . ' -= ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_AssignOp_Mul(AssignOp\Mul $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(AssignOp\Mul::class, $this->p($node->var) . ' *= ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_AssignOp_Div(AssignOp\Div $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(AssignOp\Div::class, $this->p($node->var) . ' /= ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_AssignOp_Concat(AssignOp\Concat $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(AssignOp\Concat::class, $this->p($node->var) . ' .= ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_AssignOp_Mod(AssignOp\Mod $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(AssignOp\Mod::class, $this->p($node->var) . ' %= ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_AssignOp_BitwiseAnd(AssignOp\BitwiseAnd $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(AssignOp\BitwiseAnd::class, $this->p($node->var) . ' &= ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_AssignOp_BitwiseOr(AssignOp\BitwiseOr $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(AssignOp\BitwiseOr::class, $this->p($node->var) . ' |= ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_AssignOp_BitwiseXor(AssignOp\BitwiseXor $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(AssignOp\BitwiseXor::class, $this->p($node->var) . ' ^= ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_AssignOp_ShiftLeft(AssignOp\ShiftLeft $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(AssignOp\ShiftLeft::class, $this->p($node->var) . ' <<= ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_AssignOp_ShiftRight(AssignOp\ShiftRight $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(AssignOp\ShiftRight::class, $this->p($node->var) . ' >>= ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_AssignOp_Pow(AssignOp\Pow $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(AssignOp\Pow::class, $this->p($node->var) . ' **= ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_AssignOp_Coalesce(AssignOp\Coalesce $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(AssignOp\Coalesce::class, $this->p($node->var) . ' ??= ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ // Binary expressions
+
+ protected function pExpr_BinaryOp_Plus(BinaryOp\Plus $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\Plus::class, $node->left, ' + ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_Minus(BinaryOp\Minus $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\Minus::class, $node->left, ' - ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_Mul(BinaryOp\Mul $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\Mul::class, $node->left, ' * ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_Div(BinaryOp\Div $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\Div::class, $node->left, ' / ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_Concat(BinaryOp\Concat $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\Concat::class, $node->left, ' . ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_Mod(BinaryOp\Mod $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\Mod::class, $node->left, ' % ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_BooleanAnd(BinaryOp\BooleanAnd $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\BooleanAnd::class, $node->left, ' && ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_BooleanOr(BinaryOp\BooleanOr $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\BooleanOr::class, $node->left, ' || ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_BitwiseAnd(BinaryOp\BitwiseAnd $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\BitwiseAnd::class, $node->left, ' & ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_BitwiseOr(BinaryOp\BitwiseOr $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\BitwiseOr::class, $node->left, ' | ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_BitwiseXor(BinaryOp\BitwiseXor $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\BitwiseXor::class, $node->left, ' ^ ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_ShiftLeft(BinaryOp\ShiftLeft $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\ShiftLeft::class, $node->left, ' << ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_ShiftRight(BinaryOp\ShiftRight $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\ShiftRight::class, $node->left, ' >> ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_Pow(BinaryOp\Pow $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\Pow::class, $node->left, ' ** ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_LogicalAnd(BinaryOp\LogicalAnd $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\LogicalAnd::class, $node->left, ' and ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_LogicalOr(BinaryOp\LogicalOr $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\LogicalOr::class, $node->left, ' or ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_LogicalXor(BinaryOp\LogicalXor $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\LogicalXor::class, $node->left, ' xor ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_Equal(BinaryOp\Equal $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\Equal::class, $node->left, ' == ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_NotEqual(BinaryOp\NotEqual $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\NotEqual::class, $node->left, ' != ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_Identical(BinaryOp\Identical $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\Identical::class, $node->left, ' === ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_NotIdentical(BinaryOp\NotIdentical $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\NotIdentical::class, $node->left, ' !== ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_Spaceship(BinaryOp\Spaceship $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\Spaceship::class, $node->left, ' <=> ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_Greater(BinaryOp\Greater $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\Greater::class, $node->left, ' > ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_GreaterOrEqual(BinaryOp\GreaterOrEqual $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\GreaterOrEqual::class, $node->left, ' >= ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_Smaller(BinaryOp\Smaller $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\Smaller::class, $node->left, ' < ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_SmallerOrEqual(BinaryOp\SmallerOrEqual $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\SmallerOrEqual::class, $node->left, ' <= ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BinaryOp_Coalesce(BinaryOp\Coalesce $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pInfixOp(BinaryOp\Coalesce::class, $node->left, ' ?? ', $node->right, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_Instanceof(Expr\Instanceof_ $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPostfixOp(
+ Expr\Instanceof_::class, $node->expr,
+ ' instanceof ' . $this->pNewOperand($node->class),
+ $precedence, $lhsPrecedence);
+ }
+
+ // Unary expressions
+
+ protected function pExpr_BooleanNot(Expr\BooleanNot $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Expr\BooleanNot::class, '!', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_BitwiseNot(Expr\BitwiseNot $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Expr\BitwiseNot::class, '~', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_UnaryMinus(Expr\UnaryMinus $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Expr\UnaryMinus::class, '-', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_UnaryPlus(Expr\UnaryPlus $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Expr\UnaryPlus::class, '+', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_PreInc(Expr\PreInc $node): string {
+ return '++' . $this->p($node->var);
+ }
+
+ protected function pExpr_PreDec(Expr\PreDec $node): string {
+ return '--' . $this->p($node->var);
+ }
+
+ protected function pExpr_PostInc(Expr\PostInc $node): string {
+ return $this->p($node->var) . '++';
+ }
+
+ protected function pExpr_PostDec(Expr\PostDec $node): string {
+ return $this->p($node->var) . '--';
+ }
+
+ protected function pExpr_ErrorSuppress(Expr\ErrorSuppress $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Expr\ErrorSuppress::class, '@', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_YieldFrom(Expr\YieldFrom $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Expr\YieldFrom::class, 'yield from ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_Print(Expr\Print_ $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Expr\Print_::class, 'print ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ // Casts
+
+ protected function pExpr_Cast_Int(Cast\Int_ $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Cast\Int_::class, '(int) ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_Cast_Double(Cast\Double $node, int $precedence, int $lhsPrecedence): string {
+ $kind = $node->getAttribute('kind', Cast\Double::KIND_DOUBLE);
+ if ($kind === Cast\Double::KIND_DOUBLE) {
+ $cast = '(double)';
+ } elseif ($kind === Cast\Double::KIND_FLOAT) {
+ $cast = '(float)';
+ } else {
+ assert($kind === Cast\Double::KIND_REAL);
+ $cast = '(real)';
+ }
+ return $this->pPrefixOp(Cast\Double::class, $cast . ' ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_Cast_String(Cast\String_ $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Cast\String_::class, '(string) ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_Cast_Array(Cast\Array_ $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Cast\Array_::class, '(array) ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_Cast_Object(Cast\Object_ $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Cast\Object_::class, '(object) ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_Cast_Bool(Cast\Bool_ $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Cast\Bool_::class, '(bool) ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_Cast_Unset(Cast\Unset_ $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Cast\Unset_::class, '(unset) ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ // Function calls and similar constructs
+
+ protected function pExpr_FuncCall(Expr\FuncCall $node): string {
+ return $this->pCallLhs($node->name)
+ . '(' . $this->pMaybeMultiline($node->args) . ')';
+ }
+
+ protected function pExpr_MethodCall(Expr\MethodCall $node): string {
+ return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name)
+ . '(' . $this->pMaybeMultiline($node->args) . ')';
+ }
+
+ protected function pExpr_NullsafeMethodCall(Expr\NullsafeMethodCall $node): string {
+ return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name)
+ . '(' . $this->pMaybeMultiline($node->args) . ')';
+ }
+
+ protected function pExpr_StaticCall(Expr\StaticCall $node): string {
+ return $this->pStaticDereferenceLhs($node->class) . '::'
+ . ($node->name instanceof Expr
+ ? ($node->name instanceof Expr\Variable
+ ? $this->p($node->name)
+ : '{' . $this->p($node->name) . '}')
+ : $node->name)
+ . '(' . $this->pMaybeMultiline($node->args) . ')';
+ }
+
+ protected function pExpr_Empty(Expr\Empty_ $node): string {
+ return 'empty(' . $this->p($node->expr) . ')';
+ }
+
+ protected function pExpr_Isset(Expr\Isset_ $node): string {
+ return 'isset(' . $this->pCommaSeparated($node->vars) . ')';
+ }
+
+ protected function pExpr_Eval(Expr\Eval_ $node): string {
+ return 'eval(' . $this->p($node->expr) . ')';
+ }
+
+ protected function pExpr_Include(Expr\Include_ $node, int $precedence, int $lhsPrecedence): string {
+ static $map = [
+ Expr\Include_::TYPE_INCLUDE => 'include',
+ Expr\Include_::TYPE_INCLUDE_ONCE => 'include_once',
+ Expr\Include_::TYPE_REQUIRE => 'require',
+ Expr\Include_::TYPE_REQUIRE_ONCE => 'require_once',
+ ];
+
+ return $this->pPrefixOp(Expr\Include_::class, $map[$node->type] . ' ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_List(Expr\List_ $node): string {
+ $syntax = $node->getAttribute('kind',
+ $this->phpVersion->supportsShortArrayDestructuring() ? Expr\List_::KIND_ARRAY : Expr\List_::KIND_LIST);
+ if ($syntax === Expr\List_::KIND_ARRAY) {
+ return '[' . $this->pMaybeMultiline($node->items, true) . ']';
+ } else {
+ return 'list(' . $this->pMaybeMultiline($node->items, true) . ')';
+ }
+ }
+
+ // Other
+
+ protected function pExpr_Error(Expr\Error $node): string {
+ throw new \LogicException('Cannot pretty-print AST with Error nodes');
+ }
+
+ protected function pExpr_Variable(Expr\Variable $node): string {
+ if ($node->name instanceof Expr) {
+ return '${' . $this->p($node->name) . '}';
+ } else {
+ return '$' . $node->name;
+ }
+ }
+
+ protected function pExpr_Array(Expr\Array_ $node): string {
+ $syntax = $node->getAttribute('kind',
+ $this->shortArraySyntax ? Expr\Array_::KIND_SHORT : Expr\Array_::KIND_LONG);
+ if ($syntax === Expr\Array_::KIND_SHORT) {
+ return '[' . $this->pMaybeMultiline($node->items, true) . ']';
+ } else {
+ return 'array(' . $this->pMaybeMultiline($node->items, true) . ')';
+ }
+ }
+
+ protected function pKey(?Node $node): string {
+ if ($node === null) {
+ return '';
+ }
+
+ // => is not really an operator and does not typically participate in precedence resolution.
+ // However, there is an exception if yield expressions with keys are involved:
+ // [yield $a => $b] is interpreted as [(yield $a => $b)], so we need to ensure that
+ // [(yield $a) => $b] is printed with parentheses. We approximate this by lowering the LHS
+ // precedence to that of yield (which will also print unnecessary parentheses for rare low
+ // precedence unary operators like include).
+ $yieldPrecedence = $this->precedenceMap[Expr\Yield_::class][0];
+ return $this->p($node, self::MAX_PRECEDENCE, $yieldPrecedence) . ' => ';
+ }
+
+ protected function pArrayItem(Node\ArrayItem $node): string {
+ return $this->pKey($node->key)
+ . ($node->byRef ? '&' : '')
+ . ($node->unpack ? '...' : '')
+ . $this->p($node->value);
+ }
+
+ protected function pExpr_ArrayDimFetch(Expr\ArrayDimFetch $node): string {
+ return $this->pDereferenceLhs($node->var)
+ . '[' . (null !== $node->dim ? $this->p($node->dim) : '') . ']';
+ }
+
+ protected function pExpr_ConstFetch(Expr\ConstFetch $node): string {
+ return $this->p($node->name);
+ }
+
+ protected function pExpr_ClassConstFetch(Expr\ClassConstFetch $node): string {
+ return $this->pStaticDereferenceLhs($node->class) . '::' . $this->pObjectProperty($node->name);
+ }
+
+ protected function pExpr_PropertyFetch(Expr\PropertyFetch $node): string {
+ return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name);
+ }
+
+ protected function pExpr_NullsafePropertyFetch(Expr\NullsafePropertyFetch $node): string {
+ return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name);
+ }
+
+ protected function pExpr_StaticPropertyFetch(Expr\StaticPropertyFetch $node): string {
+ return $this->pStaticDereferenceLhs($node->class) . '::$' . $this->pObjectProperty($node->name);
+ }
+
+ protected function pExpr_ShellExec(Expr\ShellExec $node): string {
+ return '`' . $this->pEncapsList($node->parts, '`') . '`';
+ }
+
+ protected function pExpr_Closure(Expr\Closure $node): string {
+ return $this->pAttrGroups($node->attrGroups, true)
+ . $this->pStatic($node->static)
+ . 'function ' . ($node->byRef ? '&' : '')
+ . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')'
+ . (!empty($node->uses) ? ' use (' . $this->pCommaSeparated($node->uses) . ')' : '')
+ . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '')
+ . ' {' . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+
+ protected function pExpr_Match(Expr\Match_ $node): string {
+ return 'match (' . $this->p($node->cond) . ') {'
+ . $this->pCommaSeparatedMultiline($node->arms, true)
+ . $this->nl
+ . '}';
+ }
+
+ protected function pMatchArm(Node\MatchArm $node): string {
+ $result = '';
+ if ($node->conds) {
+ for ($i = 0, $c = \count($node->conds); $i + 1 < $c; $i++) {
+ $result .= $this->p($node->conds[$i]) . ', ';
+ }
+ $result .= $this->pKey($node->conds[$i]);
+ } else {
+ $result = 'default => ';
+ }
+ return $result . $this->p($node->body);
+ }
+
+ protected function pExpr_ArrowFunction(Expr\ArrowFunction $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(
+ Expr\ArrowFunction::class,
+ $this->pAttrGroups($node->attrGroups, true)
+ . $this->pStatic($node->static)
+ . 'fn' . ($node->byRef ? '&' : '')
+ . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')'
+ . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '')
+ . ' => ',
+ $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pClosureUse(Node\ClosureUse $node): string {
+ return ($node->byRef ? '&' : '') . $this->p($node->var);
+ }
+
+ protected function pExpr_New(Expr\New_ $node): string {
+ if ($node->class instanceof Stmt\Class_) {
+ $args = $node->args ? '(' . $this->pMaybeMultiline($node->args) . ')' : '';
+ return 'new ' . $this->pClassCommon($node->class, $args);
+ }
+ return 'new ' . $this->pNewOperand($node->class)
+ . '(' . $this->pMaybeMultiline($node->args) . ')';
+ }
+
+ protected function pExpr_Clone(Expr\Clone_ $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Expr\Clone_::class, 'clone ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_Ternary(Expr\Ternary $node, int $precedence, int $lhsPrecedence): string {
+ // a bit of cheating: we treat the ternary as a binary op where the ?...: part is the operator.
+ // this is okay because the part between ? and : never needs parentheses.
+ return $this->pInfixOp(Expr\Ternary::class,
+ $node->cond, ' ?' . (null !== $node->if ? ' ' . $this->p($node->if) . ' ' : '') . ': ', $node->else,
+ $precedence, $lhsPrecedence
+ );
+ }
+
+ protected function pExpr_Exit(Expr\Exit_ $node): string {
+ $kind = $node->getAttribute('kind', Expr\Exit_::KIND_DIE);
+ return ($kind === Expr\Exit_::KIND_EXIT ? 'exit' : 'die')
+ . (null !== $node->expr ? '(' . $this->p($node->expr) . ')' : '');
+ }
+
+ protected function pExpr_Throw(Expr\Throw_ $node, int $precedence, int $lhsPrecedence): string {
+ return $this->pPrefixOp(Expr\Throw_::class, 'throw ', $node->expr, $precedence, $lhsPrecedence);
+ }
+
+ protected function pExpr_Yield(Expr\Yield_ $node, int $precedence, int $lhsPrecedence): string {
+ if ($node->value === null) {
+ $opPrecedence = $this->precedenceMap[Expr\Yield_::class][0];
+ return $opPrecedence >= $lhsPrecedence ? '(yield)' : 'yield';
+ } else {
+ if (!$this->phpVersion->supportsYieldWithoutParentheses()) {
+ return '(yield ' . $this->pKey($node->key) . $this->p($node->value) . ')';
+ }
+ return $this->pPrefixOp(
+ Expr\Yield_::class, 'yield ' . $this->pKey($node->key),
+ $node->value, $precedence, $lhsPrecedence);
+ }
+ }
+
+ // Declarations
+
+ protected function pStmt_Namespace(Stmt\Namespace_ $node): string {
+ if ($this->canUseSemicolonNamespaces) {
+ return 'namespace ' . $this->p($node->name) . ';'
+ . $this->nl . $this->pStmts($node->stmts, false);
+ } else {
+ return 'namespace' . (null !== $node->name ? ' ' . $this->p($node->name) : '')
+ . ' {' . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+ }
+
+ protected function pStmt_Use(Stmt\Use_ $node): string {
+ return 'use ' . $this->pUseType($node->type)
+ . $this->pCommaSeparated($node->uses) . ';';
+ }
+
+ protected function pStmt_GroupUse(Stmt\GroupUse $node): string {
+ return 'use ' . $this->pUseType($node->type) . $this->pName($node->prefix)
+ . '\{' . $this->pCommaSeparated($node->uses) . '};';
+ }
+
+ protected function pUseItem(Node\UseItem $node): string {
+ return $this->pUseType($node->type) . $this->p($node->name)
+ . (null !== $node->alias ? ' as ' . $node->alias : '');
+ }
+
+ protected function pUseType(int $type): string {
+ return $type === Stmt\Use_::TYPE_FUNCTION ? 'function '
+ : ($type === Stmt\Use_::TYPE_CONSTANT ? 'const ' : '');
+ }
+
+ protected function pStmt_Interface(Stmt\Interface_ $node): string {
+ return $this->pAttrGroups($node->attrGroups)
+ . 'interface ' . $node->name
+ . (!empty($node->extends) ? ' extends ' . $this->pCommaSeparated($node->extends) : '')
+ . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+
+ protected function pStmt_Enum(Stmt\Enum_ $node): string {
+ return $this->pAttrGroups($node->attrGroups)
+ . 'enum ' . $node->name
+ . ($node->scalarType ? ' : ' . $this->p($node->scalarType) : '')
+ . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '')
+ . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+
+ protected function pStmt_Class(Stmt\Class_ $node): string {
+ return $this->pClassCommon($node, ' ' . $node->name);
+ }
+
+ protected function pStmt_Trait(Stmt\Trait_ $node): string {
+ return $this->pAttrGroups($node->attrGroups)
+ . 'trait ' . $node->name
+ . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+
+ protected function pStmt_EnumCase(Stmt\EnumCase $node): string {
+ return $this->pAttrGroups($node->attrGroups)
+ . 'case ' . $node->name
+ . ($node->expr ? ' = ' . $this->p($node->expr) : '')
+ . ';';
+ }
+
+ protected function pStmt_TraitUse(Stmt\TraitUse $node): string {
+ return 'use ' . $this->pCommaSeparated($node->traits)
+ . (empty($node->adaptations)
+ ? ';'
+ : ' {' . $this->pStmts($node->adaptations) . $this->nl . '}');
+ }
+
+ protected function pStmt_TraitUseAdaptation_Precedence(Stmt\TraitUseAdaptation\Precedence $node): string {
+ return $this->p($node->trait) . '::' . $node->method
+ . ' insteadof ' . $this->pCommaSeparated($node->insteadof) . ';';
+ }
+
+ protected function pStmt_TraitUseAdaptation_Alias(Stmt\TraitUseAdaptation\Alias $node): string {
+ return (null !== $node->trait ? $this->p($node->trait) . '::' : '')
+ . $node->method . ' as'
+ . (null !== $node->newModifier ? ' ' . rtrim($this->pModifiers($node->newModifier), ' ') : '')
+ . (null !== $node->newName ? ' ' . $node->newName : '')
+ . ';';
+ }
+
+ protected function pStmt_Property(Stmt\Property $node): string {
+ return $this->pAttrGroups($node->attrGroups)
+ . (0 === $node->flags ? 'var ' : $this->pModifiers($node->flags))
+ . ($node->type ? $this->p($node->type) . ' ' : '')
+ . $this->pCommaSeparated($node->props)
+ . ($node->hooks ? ' {' . $this->pStmts($node->hooks) . $this->nl . '}' : ';');
+ }
+
+ protected function pPropertyItem(Node\PropertyItem $node): string {
+ return '$' . $node->name
+ . (null !== $node->default ? ' = ' . $this->p($node->default) : '');
+ }
+
+ protected function pPropertyHook(Node\PropertyHook $node): string {
+ return $this->pAttrGroups($node->attrGroups)
+ . $this->pModifiers($node->flags)
+ . ($node->byRef ? '&' : '') . $node->name
+ . ($node->params ? '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' : '')
+ . (\is_array($node->body) ? ' {' . $this->pStmts($node->body) . $this->nl . '}'
+ : ($node->body !== null ? ' => ' . $this->p($node->body) : '') . ';');
+ }
+
+ protected function pStmt_ClassMethod(Stmt\ClassMethod $node): string {
+ return $this->pAttrGroups($node->attrGroups)
+ . $this->pModifiers($node->flags)
+ . 'function ' . ($node->byRef ? '&' : '') . $node->name
+ . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')'
+ . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '')
+ . (null !== $node->stmts
+ ? $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'
+ : ';');
+ }
+
+ protected function pStmt_ClassConst(Stmt\ClassConst $node): string {
+ return $this->pAttrGroups($node->attrGroups)
+ . $this->pModifiers($node->flags)
+ . 'const '
+ . (null !== $node->type ? $this->p($node->type) . ' ' : '')
+ . $this->pCommaSeparated($node->consts) . ';';
+ }
+
+ protected function pStmt_Function(Stmt\Function_ $node): string {
+ return $this->pAttrGroups($node->attrGroups)
+ . 'function ' . ($node->byRef ? '&' : '') . $node->name
+ . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')'
+ . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '')
+ . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+
+ protected function pStmt_Const(Stmt\Const_ $node): string {
+ return 'const ' . $this->pCommaSeparated($node->consts) . ';';
+ }
+
+ protected function pStmt_Declare(Stmt\Declare_ $node): string {
+ return 'declare (' . $this->pCommaSeparated($node->declares) . ')'
+ . (null !== $node->stmts ? ' {' . $this->pStmts($node->stmts) . $this->nl . '}' : ';');
+ }
+
+ protected function pDeclareItem(Node\DeclareItem $node): string {
+ return $node->key . '=' . $this->p($node->value);
+ }
+
+ // Control flow
+
+ protected function pStmt_If(Stmt\If_ $node): string {
+ return 'if (' . $this->p($node->cond) . ') {'
+ . $this->pStmts($node->stmts) . $this->nl . '}'
+ . ($node->elseifs ? ' ' . $this->pImplode($node->elseifs, ' ') : '')
+ . (null !== $node->else ? ' ' . $this->p($node->else) : '');
+ }
+
+ protected function pStmt_ElseIf(Stmt\ElseIf_ $node): string {
+ return 'elseif (' . $this->p($node->cond) . ') {'
+ . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+
+ protected function pStmt_Else(Stmt\Else_ $node): string {
+ if (\count($node->stmts) === 1 && $node->stmts[0] instanceof Stmt\If_) {
+ // Print as "else if" rather than "else { if }"
+ return 'else ' . $this->p($node->stmts[0]);
+ }
+ return 'else {' . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+
+ protected function pStmt_For(Stmt\For_ $node): string {
+ return 'for ('
+ . $this->pCommaSeparated($node->init) . ';' . (!empty($node->cond) ? ' ' : '')
+ . $this->pCommaSeparated($node->cond) . ';' . (!empty($node->loop) ? ' ' : '')
+ . $this->pCommaSeparated($node->loop)
+ . ') {' . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+
+ protected function pStmt_Foreach(Stmt\Foreach_ $node): string {
+ return 'foreach (' . $this->p($node->expr) . ' as '
+ . (null !== $node->keyVar ? $this->p($node->keyVar) . ' => ' : '')
+ . ($node->byRef ? '&' : '') . $this->p($node->valueVar) . ') {'
+ . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+
+ protected function pStmt_While(Stmt\While_ $node): string {
+ return 'while (' . $this->p($node->cond) . ') {'
+ . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+
+ protected function pStmt_Do(Stmt\Do_ $node): string {
+ return 'do {' . $this->pStmts($node->stmts) . $this->nl
+ . '} while (' . $this->p($node->cond) . ');';
+ }
+
+ protected function pStmt_Switch(Stmt\Switch_ $node): string {
+ return 'switch (' . $this->p($node->cond) . ') {'
+ . $this->pStmts($node->cases) . $this->nl . '}';
+ }
+
+ protected function pStmt_Case(Stmt\Case_ $node): string {
+ return (null !== $node->cond ? 'case ' . $this->p($node->cond) : 'default') . ':'
+ . $this->pStmts($node->stmts);
+ }
+
+ protected function pStmt_TryCatch(Stmt\TryCatch $node): string {
+ return 'try {' . $this->pStmts($node->stmts) . $this->nl . '}'
+ . ($node->catches ? ' ' . $this->pImplode($node->catches, ' ') : '')
+ . ($node->finally !== null ? ' ' . $this->p($node->finally) : '');
+ }
+
+ protected function pStmt_Catch(Stmt\Catch_ $node): string {
+ return 'catch (' . $this->pImplode($node->types, '|')
+ . ($node->var !== null ? ' ' . $this->p($node->var) : '')
+ . ') {' . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+
+ protected function pStmt_Finally(Stmt\Finally_ $node): string {
+ return 'finally {' . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+
+ protected function pStmt_Break(Stmt\Break_ $node): string {
+ return 'break' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';';
+ }
+
+ protected function pStmt_Continue(Stmt\Continue_ $node): string {
+ return 'continue' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';';
+ }
+
+ protected function pStmt_Return(Stmt\Return_ $node): string {
+ return 'return' . (null !== $node->expr ? ' ' . $this->p($node->expr) : '') . ';';
+ }
+
+ protected function pStmt_Label(Stmt\Label $node): string {
+ return $node->name . ':';
+ }
+
+ protected function pStmt_Goto(Stmt\Goto_ $node): string {
+ return 'goto ' . $node->name . ';';
+ }
+
+ // Other
+
+ protected function pStmt_Expression(Stmt\Expression $node): string {
+ return $this->p($node->expr) . ';';
+ }
+
+ protected function pStmt_Echo(Stmt\Echo_ $node): string {
+ return 'echo ' . $this->pCommaSeparated($node->exprs) . ';';
+ }
+
+ protected function pStmt_Static(Stmt\Static_ $node): string {
+ return 'static ' . $this->pCommaSeparated($node->vars) . ';';
+ }
+
+ protected function pStmt_Global(Stmt\Global_ $node): string {
+ return 'global ' . $this->pCommaSeparated($node->vars) . ';';
+ }
+
+ protected function pStaticVar(Node\StaticVar $node): string {
+ return $this->p($node->var)
+ . (null !== $node->default ? ' = ' . $this->p($node->default) : '');
+ }
+
+ protected function pStmt_Unset(Stmt\Unset_ $node): string {
+ return 'unset(' . $this->pCommaSeparated($node->vars) . ');';
+ }
+
+ protected function pStmt_InlineHTML(Stmt\InlineHTML $node): string {
+ $newline = $node->getAttribute('hasLeadingNewline', true) ? $this->newline : '';
+ return '?>' . $newline . $node->value . 'remaining;
+ }
+
+ protected function pStmt_Nop(Stmt\Nop $node): string {
+ return '';
+ }
+
+ protected function pStmt_Block(Stmt\Block $node): string {
+ return '{' . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+
+ // Helpers
+
+ protected function pClassCommon(Stmt\Class_ $node, string $afterClassToken): string {
+ return $this->pAttrGroups($node->attrGroups, $node->name === null)
+ . $this->pModifiers($node->flags)
+ . 'class' . $afterClassToken
+ . (null !== $node->extends ? ' extends ' . $this->p($node->extends) : '')
+ . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '')
+ . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}';
+ }
+
+ protected function pObjectProperty(Node $node): string {
+ if ($node instanceof Expr) {
+ return '{' . $this->p($node) . '}';
+ } else {
+ assert($node instanceof Node\Identifier);
+ return $node->name;
+ }
+ }
+
+ /** @param (Expr|Node\InterpolatedStringPart)[] $encapsList */
+ protected function pEncapsList(array $encapsList, ?string $quote): string {
+ $return = '';
+ foreach ($encapsList as $element) {
+ if ($element instanceof Node\InterpolatedStringPart) {
+ $return .= $this->escapeString($element->value, $quote);
+ } else {
+ $return .= '{' . $this->p($element) . '}';
+ }
+ }
+
+ return $return;
+ }
+
+ protected function pSingleQuotedString(string $string): string {
+ // It is idiomatic to only escape backslashes when necessary, i.e. when followed by ', \ or
+ // the end of the string ('Foo\Bar' instead of 'Foo\\Bar'). However, we also don't want to
+ // produce an odd number of backslashes, so '\\\\a' should not get rendered as '\\\a', even
+ // though that would be legal.
+ $regex = '/\'|\\\\(?=[\'\\\\]|$)|(?<=\\\\)\\\\/';
+ return '\'' . preg_replace($regex, '\\\\$0', $string) . '\'';
+ }
+
+ protected function escapeString(string $string, ?string $quote): string {
+ if (null === $quote) {
+ // For doc strings, don't escape newlines
+ $escaped = addcslashes($string, "\t\f\v$\\");
+ // But do escape isolated \r. Combined with the terminating newline, it might get
+ // interpreted as \r\n and dropped from the string contents.
+ $escaped = preg_replace('/\r(?!\n)/', '\\r', $escaped);
+ if ($this->phpVersion->supportsFlexibleHeredoc()) {
+ $escaped = $this->indentString($escaped);
+ }
+ } else {
+ $escaped = addcslashes($string, "\n\r\t\f\v$" . $quote . "\\");
+ }
+
+ // Escape control characters and non-UTF-8 characters.
+ // Regex based on https://stackoverflow.com/a/11709412/385378.
+ $regex = '/(
+ [\x00-\x08\x0E-\x1F] # Control characters
+ | [\xC0-\xC1] # Invalid UTF-8 Bytes
+ | [\xF5-\xFF] # Invalid UTF-8 Bytes
+ | \xE0(?=[\x80-\x9F]) # Overlong encoding of prior code point
+ | \xF0(?=[\x80-\x8F]) # Overlong encoding of prior code point
+ | [\xC2-\xDF](?![\x80-\xBF]) # Invalid UTF-8 Sequence Start
+ | [\xE0-\xEF](?![\x80-\xBF]{2}) # Invalid UTF-8 Sequence Start
+ | [\xF0-\xF4](?![\x80-\xBF]{3}) # Invalid UTF-8 Sequence Start
+ | (?<=[\x00-\x7F\xF5-\xFF])[\x80-\xBF] # Invalid UTF-8 Sequence Middle
+ | (? $part) {
+ if ($part instanceof Node\InterpolatedStringPart
+ && $this->containsEndLabel($this->escapeString($part->value, null), $label, $i === 0)
+ ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ protected function pDereferenceLhs(Node $node): string {
+ if (!$this->dereferenceLhsRequiresParens($node)) {
+ return $this->p($node);
+ } else {
+ return '(' . $this->p($node) . ')';
+ }
+ }
+
+ protected function pStaticDereferenceLhs(Node $node): string {
+ if (!$this->staticDereferenceLhsRequiresParens($node)) {
+ return $this->p($node);
+ } else {
+ return '(' . $this->p($node) . ')';
+ }
+ }
+
+ protected function pCallLhs(Node $node): string {
+ if (!$this->callLhsRequiresParens($node)) {
+ return $this->p($node);
+ } else {
+ return '(' . $this->p($node) . ')';
+ }
+ }
+
+ protected function pNewOperand(Node $node): string {
+ if (!$this->newOperandRequiresParens($node)) {
+ return $this->p($node);
+ } else {
+ return '(' . $this->p($node) . ')';
+ }
+ }
+
+ /**
+ * @param Node[] $nodes
+ */
+ protected function hasNodeWithComments(array $nodes): bool {
+ foreach ($nodes as $node) {
+ if ($node && $node->getComments()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /** @param Node[] $nodes */
+ protected function pMaybeMultiline(array $nodes, bool $trailingComma = false): string {
+ if (!$this->hasNodeWithComments($nodes)) {
+ return $this->pCommaSeparated($nodes);
+ } else {
+ return $this->pCommaSeparatedMultiline($nodes, $trailingComma) . $this->nl;
+ }
+ }
+
+ /** @param Node\AttributeGroup[] $nodes */
+ protected function pAttrGroups(array $nodes, bool $inline = false): string {
+ $result = '';
+ $sep = $inline ? ' ' : $this->nl;
+ foreach ($nodes as $node) {
+ $result .= $this->p($node) . $sep;
+ }
+
+ return $result;
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php
new file mode 100644
index 0000000..d32be24
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php
@@ -0,0 +1,1693 @@
+ */
+ protected array $precedenceMap = [
+ // [precedence, precedenceLHS, precedenceRHS]
+ // Where the latter two are the precedences to use for the LHS and RHS of a binary operator,
+ // where 1 is added to one of the sides depending on associativity. This information is not
+ // used for unary operators and set to -1.
+ Expr\Clone_::class => [-10, 0, 1],
+ BinaryOp\Pow::class => [ 0, 0, 1],
+ Expr\BitwiseNot::class => [ 10, -1, -1],
+ Expr\UnaryPlus::class => [ 10, -1, -1],
+ Expr\UnaryMinus::class => [ 10, -1, -1],
+ Cast\Int_::class => [ 10, -1, -1],
+ Cast\Double::class => [ 10, -1, -1],
+ Cast\String_::class => [ 10, -1, -1],
+ Cast\Array_::class => [ 10, -1, -1],
+ Cast\Object_::class => [ 10, -1, -1],
+ Cast\Bool_::class => [ 10, -1, -1],
+ Cast\Unset_::class => [ 10, -1, -1],
+ Expr\ErrorSuppress::class => [ 10, -1, -1],
+ Expr\Instanceof_::class => [ 20, -1, -1],
+ Expr\BooleanNot::class => [ 30, -1, -1],
+ BinaryOp\Mul::class => [ 40, 41, 40],
+ BinaryOp\Div::class => [ 40, 41, 40],
+ BinaryOp\Mod::class => [ 40, 41, 40],
+ BinaryOp\Plus::class => [ 50, 51, 50],
+ BinaryOp\Minus::class => [ 50, 51, 50],
+ BinaryOp\Concat::class => [ 50, 51, 50],
+ BinaryOp\ShiftLeft::class => [ 60, 61, 60],
+ BinaryOp\ShiftRight::class => [ 60, 61, 60],
+ BinaryOp\Smaller::class => [ 70, 70, 70],
+ BinaryOp\SmallerOrEqual::class => [ 70, 70, 70],
+ BinaryOp\Greater::class => [ 70, 70, 70],
+ BinaryOp\GreaterOrEqual::class => [ 70, 70, 70],
+ BinaryOp\Equal::class => [ 80, 80, 80],
+ BinaryOp\NotEqual::class => [ 80, 80, 80],
+ BinaryOp\Identical::class => [ 80, 80, 80],
+ BinaryOp\NotIdentical::class => [ 80, 80, 80],
+ BinaryOp\Spaceship::class => [ 80, 80, 80],
+ BinaryOp\BitwiseAnd::class => [ 90, 91, 90],
+ BinaryOp\BitwiseXor::class => [100, 101, 100],
+ BinaryOp\BitwiseOr::class => [110, 111, 110],
+ BinaryOp\BooleanAnd::class => [120, 121, 120],
+ BinaryOp\BooleanOr::class => [130, 131, 130],
+ BinaryOp\Coalesce::class => [140, 140, 141],
+ Expr\Ternary::class => [150, 150, 150],
+ Expr\Assign::class => [160, -1, -1],
+ Expr\AssignRef::class => [160, -1, -1],
+ AssignOp\Plus::class => [160, -1, -1],
+ AssignOp\Minus::class => [160, -1, -1],
+ AssignOp\Mul::class => [160, -1, -1],
+ AssignOp\Div::class => [160, -1, -1],
+ AssignOp\Concat::class => [160, -1, -1],
+ AssignOp\Mod::class => [160, -1, -1],
+ AssignOp\BitwiseAnd::class => [160, -1, -1],
+ AssignOp\BitwiseOr::class => [160, -1, -1],
+ AssignOp\BitwiseXor::class => [160, -1, -1],
+ AssignOp\ShiftLeft::class => [160, -1, -1],
+ AssignOp\ShiftRight::class => [160, -1, -1],
+ AssignOp\Pow::class => [160, -1, -1],
+ AssignOp\Coalesce::class => [160, -1, -1],
+ Expr\YieldFrom::class => [170, -1, -1],
+ Expr\Yield_::class => [175, -1, -1],
+ Expr\Print_::class => [180, -1, -1],
+ BinaryOp\LogicalAnd::class => [190, 191, 190],
+ BinaryOp\LogicalXor::class => [200, 201, 200],
+ BinaryOp\LogicalOr::class => [210, 211, 210],
+ Expr\Include_::class => [220, -1, -1],
+ Expr\ArrowFunction::class => [230, -1, -1],
+ Expr\Throw_::class => [240, -1, -1],
+ ];
+
+ /** @var int Current indentation level. */
+ protected int $indentLevel;
+ /** @var string String for single level of indentation */
+ private string $indent;
+ /** @var int Width in spaces to indent by. */
+ private int $indentWidth;
+ /** @var bool Whether to use tab indentation. */
+ private bool $useTabs;
+ /** @var int Width in spaces of one tab. */
+ private int $tabWidth = 4;
+
+ /** @var string Newline style. Does not include current indentation. */
+ protected string $newline;
+ /** @var string Newline including current indentation. */
+ protected string $nl;
+ /** @var string|null Token placed at end of doc string to ensure it is followed by a newline.
+ * Null if flexible doc strings are used. */
+ protected ?string $docStringEndToken;
+ /** @var bool Whether semicolon namespaces can be used (i.e. no global namespace is used) */
+ protected bool $canUseSemicolonNamespaces;
+ /** @var bool Whether to use short array syntax if the node specifies no preference */
+ protected bool $shortArraySyntax;
+ /** @var PhpVersion PHP version to target */
+ protected PhpVersion $phpVersion;
+
+ /** @var TokenStream|null Original tokens for use in format-preserving pretty print */
+ protected ?TokenStream $origTokens;
+ /** @var Internal\Differ Differ for node lists */
+ protected Differ $nodeListDiffer;
+ /** @var array Map determining whether a certain character is a label character */
+ protected array $labelCharMap;
+ /**
+ * @var array> Map from token classes and subnode names to FIXUP_* constants.
+ * This is used during format-preserving prints to place additional parens/braces if necessary.
+ */
+ protected array $fixupMap;
+ /**
+ * @var array Map from "{$node->getType()}->{$subNode}"
+ * to ['left' => $l, 'right' => $r], where $l and $r specify the token type that needs to be stripped
+ * when removing this node.
+ */
+ protected array $removalMap;
+ /**
+ * @var array Map from
+ * "{$node->getType()}->{$subNode}" to [$find, $beforeToken, $extraLeft, $extraRight].
+ * $find is an optional token after which the insertion occurs. $extraLeft/Right
+ * are optionally added before/after the main insertions.
+ */
+ protected array $insertionMap;
+ /**
+ * @var array Map From "{$class}->{$subNode}" to string that should be inserted
+ * between elements of this list subnode.
+ */
+ protected array $listInsertionMap;
+
+ /**
+ * @var array
+ */
+ protected array $emptyListInsertionMap;
+ /** @var array Map from "{$class}->{$subNode}" to [$printFn, $token]
+ * where $printFn is the function to print the modifiers and $token is the token before which
+ * the modifiers should be reprinted. */
+ protected array $modifierChangeMap;
+
+ /**
+ * Creates a pretty printer instance using the given options.
+ *
+ * Supported options:
+ * * PhpVersion $phpVersion: The PHP version to target (default to PHP 7.4). This option
+ * controls compatibility of the generated code with older PHP
+ * versions in cases where a simple stylistic choice exists (e.g.
+ * array() vs []). It is safe to pretty-print an AST for a newer
+ * PHP version while specifying an older target (but the result will
+ * of course not be compatible with the older version in that case).
+ * * string $newline: The newline style to use. Should be "\n" (default) or "\r\n".
+ * * string $indent: The indentation to use. Should either be all spaces or a single
+ * tab. Defaults to four spaces (" ").
+ * * bool $shortArraySyntax: Whether to use [] instead of array() as the default array
+ * syntax, if the node does not specify a format. Defaults to whether
+ * the phpVersion support short array syntax.
+ *
+ * @param array{
+ * phpVersion?: PhpVersion, newline?: string, indent?: string, shortArraySyntax?: bool
+ * } $options Dictionary of formatting options
+ */
+ public function __construct(array $options = []) {
+ $this->phpVersion = $options['phpVersion'] ?? PhpVersion::fromComponents(7, 4);
+
+ $this->newline = $options['newline'] ?? "\n";
+ if ($this->newline !== "\n" && $this->newline != "\r\n") {
+ throw new \LogicException('Option "newline" must be one of "\n" or "\r\n"');
+ }
+
+ $this->shortArraySyntax =
+ $options['shortArraySyntax'] ?? $this->phpVersion->supportsShortArraySyntax();
+ $this->docStringEndToken =
+ $this->phpVersion->supportsFlexibleHeredoc() ? null : '_DOC_STRING_END_' . mt_rand();
+
+ $this->indent = $indent = $options['indent'] ?? ' ';
+ if ($indent === "\t") {
+ $this->useTabs = true;
+ $this->indentWidth = $this->tabWidth;
+ } elseif ($indent === \str_repeat(' ', \strlen($indent))) {
+ $this->useTabs = false;
+ $this->indentWidth = \strlen($indent);
+ } else {
+ throw new \LogicException('Option "indent" must either be all spaces or a single tab');
+ }
+ }
+
+ /**
+ * Reset pretty printing state.
+ */
+ protected function resetState(): void {
+ $this->indentLevel = 0;
+ $this->nl = $this->newline;
+ $this->origTokens = null;
+ }
+
+ /**
+ * Set indentation level
+ *
+ * @param int $level Level in number of spaces
+ */
+ protected function setIndentLevel(int $level): void {
+ $this->indentLevel = $level;
+ if ($this->useTabs) {
+ $tabs = \intdiv($level, $this->tabWidth);
+ $spaces = $level % $this->tabWidth;
+ $this->nl = $this->newline . \str_repeat("\t", $tabs) . \str_repeat(' ', $spaces);
+ } else {
+ $this->nl = $this->newline . \str_repeat(' ', $level);
+ }
+ }
+
+ /**
+ * Increase indentation level.
+ */
+ protected function indent(): void {
+ $this->indentLevel += $this->indentWidth;
+ $this->nl .= $this->indent;
+ }
+
+ /**
+ * Decrease indentation level.
+ */
+ protected function outdent(): void {
+ assert($this->indentLevel >= $this->indentWidth);
+ $this->setIndentLevel($this->indentLevel - $this->indentWidth);
+ }
+
+ /**
+ * Pretty prints an array of statements.
+ *
+ * @param Node[] $stmts Array of statements
+ *
+ * @return string Pretty printed statements
+ */
+ public function prettyPrint(array $stmts): string {
+ $this->resetState();
+ $this->preprocessNodes($stmts);
+
+ return ltrim($this->handleMagicTokens($this->pStmts($stmts, false)));
+ }
+
+ /**
+ * Pretty prints an expression.
+ *
+ * @param Expr $node Expression node
+ *
+ * @return string Pretty printed node
+ */
+ public function prettyPrintExpr(Expr $node): string {
+ $this->resetState();
+ return $this->handleMagicTokens($this->p($node));
+ }
+
+ /**
+ * Pretty prints a file of statements (includes the opening newline . $this->newline;
+ }
+
+ $p = "newline . $this->newline . $this->prettyPrint($stmts);
+
+ if ($stmts[0] instanceof Stmt\InlineHTML) {
+ $p = preg_replace('/^<\?php\s+\?>\r?\n?/', '', $p);
+ }
+ if ($stmts[count($stmts) - 1] instanceof Stmt\InlineHTML) {
+ $p = preg_replace('/<\?php$/', '', rtrim($p));
+ }
+
+ return $p;
+ }
+
+ /**
+ * Preprocesses the top-level nodes to initialize pretty printer state.
+ *
+ * @param Node[] $nodes Array of nodes
+ */
+ protected function preprocessNodes(array $nodes): void {
+ /* We can use semicolon-namespaces unless there is a global namespace declaration */
+ $this->canUseSemicolonNamespaces = true;
+ foreach ($nodes as $node) {
+ if ($node instanceof Stmt\Namespace_ && null === $node->name) {
+ $this->canUseSemicolonNamespaces = false;
+ break;
+ }
+ }
+ }
+
+ /**
+ * Handles (and removes) doc-string-end tokens.
+ */
+ protected function handleMagicTokens(string $str): string {
+ if ($this->docStringEndToken !== null) {
+ // Replace doc-string-end tokens with nothing or a newline
+ $str = str_replace(
+ $this->docStringEndToken . ';' . $this->newline,
+ ';' . $this->newline,
+ $str);
+ $str = str_replace($this->docStringEndToken, $this->newline, $str);
+ }
+
+ return $str;
+ }
+
+ /**
+ * Pretty prints an array of nodes (statements) and indents them optionally.
+ *
+ * @param Node[] $nodes Array of nodes
+ * @param bool $indent Whether to indent the printed nodes
+ *
+ * @return string Pretty printed statements
+ */
+ protected function pStmts(array $nodes, bool $indent = true): string {
+ if ($indent) {
+ $this->indent();
+ }
+
+ $result = '';
+ foreach ($nodes as $node) {
+ $comments = $node->getComments();
+ if ($comments) {
+ $result .= $this->nl . $this->pComments($comments);
+ if ($node instanceof Stmt\Nop) {
+ continue;
+ }
+ }
+
+ $result .= $this->nl . $this->p($node);
+ }
+
+ if ($indent) {
+ $this->outdent();
+ }
+
+ return $result;
+ }
+
+ /**
+ * Pretty-print an infix operation while taking precedence into account.
+ *
+ * @param string $class Node class of operator
+ * @param Node $leftNode Left-hand side node
+ * @param string $operatorString String representation of the operator
+ * @param Node $rightNode Right-hand side node
+ * @param int $precedence Precedence of parent operator
+ * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator
+ *
+ * @return string Pretty printed infix operation
+ */
+ protected function pInfixOp(
+ string $class, Node $leftNode, string $operatorString, Node $rightNode,
+ int $precedence, int $lhsPrecedence
+ ): string {
+ list($opPrecedence, $newPrecedenceLHS, $newPrecedenceRHS) = $this->precedenceMap[$class];
+ $prefix = '';
+ $suffix = '';
+ if ($opPrecedence >= $precedence) {
+ $prefix = '(';
+ $suffix = ')';
+ $lhsPrecedence = self::MAX_PRECEDENCE;
+ }
+ return $prefix . $this->p($leftNode, $newPrecedenceLHS, $newPrecedenceLHS)
+ . $operatorString . $this->p($rightNode, $newPrecedenceRHS, $lhsPrecedence) . $suffix;
+ }
+
+ /**
+ * Pretty-print a prefix operation while taking precedence into account.
+ *
+ * @param string $class Node class of operator
+ * @param string $operatorString String representation of the operator
+ * @param Node $node Node
+ * @param int $precedence Precedence of parent operator
+ * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator
+ *
+ * @return string Pretty printed prefix operation
+ */
+ protected function pPrefixOp(string $class, string $operatorString, Node $node, int $precedence, int $lhsPrecedence): string {
+ $opPrecedence = $this->precedenceMap[$class][0];
+ $prefix = '';
+ $suffix = '';
+ if ($opPrecedence >= $lhsPrecedence) {
+ $prefix = '(';
+ $suffix = ')';
+ $lhsPrecedence = self::MAX_PRECEDENCE;
+ }
+ $printedArg = $this->p($node, $opPrecedence, $lhsPrecedence);
+ if (($operatorString === '+' && $printedArg[0] === '+') ||
+ ($operatorString === '-' && $printedArg[0] === '-')
+ ) {
+ // Avoid printing +(+$a) as ++$a and similar.
+ $printedArg = '(' . $printedArg . ')';
+ }
+ return $prefix . $operatorString . $printedArg . $suffix;
+ }
+
+ /**
+ * Pretty-print a postfix operation while taking precedence into account.
+ *
+ * @param string $class Node class of operator
+ * @param string $operatorString String representation of the operator
+ * @param Node $node Node
+ * @param int $precedence Precedence of parent operator
+ * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator
+ *
+ * @return string Pretty printed postfix operation
+ */
+ protected function pPostfixOp(string $class, Node $node, string $operatorString, int $precedence, int $lhsPrecedence): string {
+ $opPrecedence = $this->precedenceMap[$class][0];
+ $prefix = '';
+ $suffix = '';
+ if ($opPrecedence >= $precedence) {
+ $prefix = '(';
+ $suffix = ')';
+ $lhsPrecedence = self::MAX_PRECEDENCE;
+ }
+ if ($opPrecedence < $lhsPrecedence) {
+ $lhsPrecedence = $opPrecedence;
+ }
+ return $prefix . $this->p($node, $opPrecedence, $lhsPrecedence) . $operatorString . $suffix;
+ }
+
+ /**
+ * Pretty prints an array of nodes and implodes the printed values.
+ *
+ * @param Node[] $nodes Array of Nodes to be printed
+ * @param string $glue Character to implode with
+ *
+ * @return string Imploded pretty printed nodes> $pre
+ */
+ protected function pImplode(array $nodes, string $glue = ''): string {
+ $pNodes = [];
+ foreach ($nodes as $node) {
+ if (null === $node) {
+ $pNodes[] = '';
+ } else {
+ $pNodes[] = $this->p($node);
+ }
+ }
+
+ return implode($glue, $pNodes);
+ }
+
+ /**
+ * Pretty prints an array of nodes and implodes the printed values with commas.
+ *
+ * @param Node[] $nodes Array of Nodes to be printed
+ *
+ * @return string Comma separated pretty printed nodes
+ */
+ protected function pCommaSeparated(array $nodes): string {
+ return $this->pImplode($nodes, ', ');
+ }
+
+ /**
+ * Pretty prints a comma-separated list of nodes in multiline style, including comments.
+ *
+ * The result includes a leading newline and one level of indentation (same as pStmts).
+ *
+ * @param Node[] $nodes Array of Nodes to be printed
+ * @param bool $trailingComma Whether to use a trailing comma
+ *
+ * @return string Comma separated pretty printed nodes in multiline style
+ */
+ protected function pCommaSeparatedMultiline(array $nodes, bool $trailingComma): string {
+ $this->indent();
+
+ $result = '';
+ $lastIdx = count($nodes) - 1;
+ foreach ($nodes as $idx => $node) {
+ if ($node !== null) {
+ $comments = $node->getComments();
+ if ($comments) {
+ $result .= $this->nl . $this->pComments($comments);
+ }
+
+ $result .= $this->nl . $this->p($node);
+ } else {
+ $result .= $this->nl;
+ }
+ if ($trailingComma || $idx !== $lastIdx) {
+ $result .= ',';
+ }
+ }
+
+ $this->outdent();
+ return $result;
+ }
+
+ /**
+ * Prints reformatted text of the passed comments.
+ *
+ * @param Comment[] $comments List of comments
+ *
+ * @return string Reformatted text of comments
+ */
+ protected function pComments(array $comments): string {
+ $formattedComments = [];
+
+ foreach ($comments as $comment) {
+ $formattedComments[] = str_replace("\n", $this->nl, $comment->getReformattedText());
+ }
+
+ return implode($this->nl, $formattedComments);
+ }
+
+ /**
+ * Perform a format-preserving pretty print of an AST.
+ *
+ * The format preservation is best effort. For some changes to the AST the formatting will not
+ * be preserved (at least not locally).
+ *
+ * In order to use this method a number of prerequisites must be satisfied:
+ * * The startTokenPos and endTokenPos attributes in the lexer must be enabled.
+ * * The CloningVisitor must be run on the AST prior to modification.
+ * * The original tokens must be provided, using the getTokens() method on the lexer.
+ *
+ * @param Node[] $stmts Modified AST with links to original AST
+ * @param Node[] $origStmts Original AST with token offset information
+ * @param Token[] $origTokens Tokens of the original code
+ */
+ public function printFormatPreserving(array $stmts, array $origStmts, array $origTokens): string {
+ $this->initializeNodeListDiffer();
+ $this->initializeLabelCharMap();
+ $this->initializeFixupMap();
+ $this->initializeRemovalMap();
+ $this->initializeInsertionMap();
+ $this->initializeListInsertionMap();
+ $this->initializeEmptyListInsertionMap();
+ $this->initializeModifierChangeMap();
+
+ $this->resetState();
+ $this->origTokens = new TokenStream($origTokens, $this->tabWidth);
+
+ $this->preprocessNodes($stmts);
+
+ $pos = 0;
+ $result = $this->pArray($stmts, $origStmts, $pos, 0, 'File', 'stmts', null);
+ if (null !== $result) {
+ $result .= $this->origTokens->getTokenCode($pos, count($origTokens) - 1, 0);
+ } else {
+ // Fallback
+ // TODO Add newline . $this->pStmts($stmts, false);
+ }
+
+ return $this->handleMagicTokens($result);
+ }
+
+ protected function pFallback(Node $node, int $precedence, int $lhsPrecedence): string {
+ return $this->{'p' . $node->getType()}($node, $precedence, $lhsPrecedence);
+ }
+
+ /**
+ * Pretty prints a node.
+ *
+ * This method also handles formatting preservation for nodes.
+ *
+ * @param Node $node Node to be pretty printed
+ * @param int $precedence Precedence of parent operator
+ * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator
+ * @param bool $parentFormatPreserved Whether parent node has preserved formatting
+ *
+ * @return string Pretty printed node
+ */
+ protected function p(
+ Node $node, int $precedence = self::MAX_PRECEDENCE, int $lhsPrecedence = self::MAX_PRECEDENCE,
+ bool $parentFormatPreserved = false
+ ): string {
+ // No orig tokens means this is a normal pretty print without preservation of formatting
+ if (!$this->origTokens) {
+ return $this->{'p' . $node->getType()}($node, $precedence, $lhsPrecedence);
+ }
+
+ /** @var Node|null $origNode */
+ $origNode = $node->getAttribute('origNode');
+ if (null === $origNode) {
+ return $this->pFallback($node, $precedence, $lhsPrecedence);
+ }
+
+ $class = \get_class($node);
+ \assert($class === \get_class($origNode));
+
+ $startPos = $origNode->getStartTokenPos();
+ $endPos = $origNode->getEndTokenPos();
+ \assert($startPos >= 0 && $endPos >= 0);
+
+ $fallbackNode = $node;
+ if ($node instanceof Expr\New_ && $node->class instanceof Stmt\Class_) {
+ // Normalize node structure of anonymous classes
+ assert($origNode instanceof Expr\New_);
+ $node = PrintableNewAnonClassNode::fromNewNode($node);
+ $origNode = PrintableNewAnonClassNode::fromNewNode($origNode);
+ $class = PrintableNewAnonClassNode::class;
+ }
+
+ // InlineHTML node does not contain closing and opening PHP tags. If the parent formatting
+ // is not preserved, then we need to use the fallback code to make sure the tags are
+ // printed.
+ if ($node instanceof Stmt\InlineHTML && !$parentFormatPreserved) {
+ return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence);
+ }
+
+ $indentAdjustment = $this->indentLevel - $this->origTokens->getIndentationBefore($startPos);
+
+ $type = $node->getType();
+ $fixupInfo = $this->fixupMap[$class] ?? null;
+
+ $result = '';
+ $pos = $startPos;
+ foreach ($node->getSubNodeNames() as $subNodeName) {
+ $subNode = $node->$subNodeName;
+ $origSubNode = $origNode->$subNodeName;
+
+ if ((!$subNode instanceof Node && $subNode !== null)
+ || (!$origSubNode instanceof Node && $origSubNode !== null)
+ ) {
+ if ($subNode === $origSubNode) {
+ // Unchanged, can reuse old code
+ continue;
+ }
+
+ if (is_array($subNode) && is_array($origSubNode)) {
+ // Array subnode changed, we might be able to reconstruct it
+ $listResult = $this->pArray(
+ $subNode, $origSubNode, $pos, $indentAdjustment, $class, $subNodeName,
+ $fixupInfo[$subNodeName] ?? null
+ );
+ if (null === $listResult) {
+ return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence);
+ }
+
+ $result .= $listResult;
+ continue;
+ }
+
+ // Check if this is a modifier change
+ $key = $class . '->' . $subNodeName;
+ if (!isset($this->modifierChangeMap[$key])) {
+ return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence);
+ }
+
+ [$printFn, $findToken] = $this->modifierChangeMap[$key];
+ $result .= $this->$printFn($subNode);
+ $pos = $this->origTokens->findRight($pos, $findToken);
+ continue;
+ }
+
+ $extraLeft = '';
+ $extraRight = '';
+ if ($origSubNode !== null) {
+ $subStartPos = $origSubNode->getStartTokenPos();
+ $subEndPos = $origSubNode->getEndTokenPos();
+ \assert($subStartPos >= 0 && $subEndPos >= 0);
+ } else {
+ if ($subNode === null) {
+ // Both null, nothing to do
+ continue;
+ }
+
+ // A node has been inserted, check if we have insertion information for it
+ $key = $type . '->' . $subNodeName;
+ if (!isset($this->insertionMap[$key])) {
+ return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence);
+ }
+
+ list($findToken, $beforeToken, $extraLeft, $extraRight) = $this->insertionMap[$key];
+ if (null !== $findToken) {
+ $subStartPos = $this->origTokens->findRight($pos, $findToken)
+ + (int) !$beforeToken;
+ } else {
+ $subStartPos = $pos;
+ }
+
+ if (null === $extraLeft && null !== $extraRight) {
+ // If inserting on the right only, skipping whitespace looks better
+ $subStartPos = $this->origTokens->skipRightWhitespace($subStartPos);
+ }
+ $subEndPos = $subStartPos - 1;
+ }
+
+ if (null === $subNode) {
+ // A node has been removed, check if we have removal information for it
+ $key = $type . '->' . $subNodeName;
+ if (!isset($this->removalMap[$key])) {
+ return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence);
+ }
+
+ // Adjust positions to account for additional tokens that must be skipped
+ $removalInfo = $this->removalMap[$key];
+ if (isset($removalInfo['left'])) {
+ $subStartPos = $this->origTokens->skipLeft($subStartPos - 1, $removalInfo['left']) + 1;
+ }
+ if (isset($removalInfo['right'])) {
+ $subEndPos = $this->origTokens->skipRight($subEndPos + 1, $removalInfo['right']) - 1;
+ }
+ }
+
+ $result .= $this->origTokens->getTokenCode($pos, $subStartPos, $indentAdjustment);
+
+ if (null !== $subNode) {
+ $result .= $extraLeft;
+
+ $origIndentLevel = $this->indentLevel;
+ $this->setIndentLevel(max($this->origTokens->getIndentationBefore($subStartPos) + $indentAdjustment, 0));
+
+ // If it's the same node that was previously in this position, it certainly doesn't
+ // need fixup. It's important to check this here, because our fixup checks are more
+ // conservative than strictly necessary.
+ if (isset($fixupInfo[$subNodeName])
+ && $subNode->getAttribute('origNode') !== $origSubNode
+ ) {
+ $fixup = $fixupInfo[$subNodeName];
+ $res = $this->pFixup($fixup, $subNode, $class, $subStartPos, $subEndPos);
+ } else {
+ $res = $this->p($subNode, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, true);
+ }
+
+ $this->safeAppend($result, $res);
+ $this->setIndentLevel($origIndentLevel);
+
+ $result .= $extraRight;
+ }
+
+ $pos = $subEndPos + 1;
+ }
+
+ $result .= $this->origTokens->getTokenCode($pos, $endPos + 1, $indentAdjustment);
+ return $result;
+ }
+
+ /**
+ * Perform a format-preserving pretty print of an array.
+ *
+ * @param Node[] $nodes New nodes
+ * @param Node[] $origNodes Original nodes
+ * @param int $pos Current token position (updated by reference)
+ * @param int $indentAdjustment Adjustment for indentation
+ * @param string $parentNodeClass Class of the containing node.
+ * @param string $subNodeName Name of array subnode.
+ * @param null|int $fixup Fixup information for array item nodes
+ *
+ * @return null|string Result of pretty print or null if cannot preserve formatting
+ */
+ protected function pArray(
+ array $nodes, array $origNodes, int &$pos, int $indentAdjustment,
+ string $parentNodeClass, string $subNodeName, ?int $fixup
+ ): ?string {
+ $diff = $this->nodeListDiffer->diffWithReplacements($origNodes, $nodes);
+
+ $mapKey = $parentNodeClass . '->' . $subNodeName;
+ $insertStr = $this->listInsertionMap[$mapKey] ?? null;
+ $isStmtList = $subNodeName === 'stmts';
+
+ $beforeFirstKeepOrReplace = true;
+ $skipRemovedNode = false;
+ $delayedAdd = [];
+ $lastElemIndentLevel = $this->indentLevel;
+
+ $insertNewline = false;
+ if ($insertStr === "\n") {
+ $insertStr = '';
+ $insertNewline = true;
+ }
+
+ if ($isStmtList && \count($origNodes) === 1 && \count($nodes) !== 1) {
+ $startPos = $origNodes[0]->getStartTokenPos();
+ $endPos = $origNodes[0]->getEndTokenPos();
+ \assert($startPos >= 0 && $endPos >= 0);
+ if (!$this->origTokens->haveBraces($startPos, $endPos)) {
+ // This was a single statement without braces, but either additional statements
+ // have been added, or the single statement has been removed. This requires the
+ // addition of braces. For now fall back.
+ // TODO: Try to preserve formatting
+ return null;
+ }
+ }
+
+ $result = '';
+ foreach ($diff as $i => $diffElem) {
+ $diffType = $diffElem->type;
+ /** @var Node|string|null $arrItem */
+ $arrItem = $diffElem->new;
+ /** @var Node|string|null $origArrItem */
+ $origArrItem = $diffElem->old;
+
+ if ($diffType === DiffElem::TYPE_KEEP || $diffType === DiffElem::TYPE_REPLACE) {
+ $beforeFirstKeepOrReplace = false;
+
+ if ($origArrItem === null || $arrItem === null) {
+ // We can only handle the case where both are null
+ if ($origArrItem === $arrItem) {
+ continue;
+ }
+ return null;
+ }
+
+ if (!$arrItem instanceof Node || !$origArrItem instanceof Node) {
+ // We can only deal with nodes. This can occur for Names, which use string arrays.
+ return null;
+ }
+
+ $itemStartPos = $origArrItem->getStartTokenPos();
+ $itemEndPos = $origArrItem->getEndTokenPos();
+ \assert($itemStartPos >= 0 && $itemEndPos >= 0 && $itemStartPos >= $pos);
+
+ $origIndentLevel = $this->indentLevel;
+ $lastElemIndentLevel = max($this->origTokens->getIndentationBefore($itemStartPos) + $indentAdjustment, 0);
+ $this->setIndentLevel($lastElemIndentLevel);
+
+ $comments = $arrItem->getComments();
+ $origComments = $origArrItem->getComments();
+ $commentStartPos = $origComments ? $origComments[0]->getStartTokenPos() : $itemStartPos;
+ \assert($commentStartPos >= 0);
+
+ if ($commentStartPos < $pos) {
+ // Comments may be assigned to multiple nodes if they start at the same position.
+ // Make sure we don't try to print them multiple times.
+ $commentStartPos = $itemStartPos;
+ }
+
+ if ($skipRemovedNode) {
+ if ($isStmtList && $this->origTokens->haveTagInRange($pos, $itemStartPos)) {
+ // We'd remove an opening/closing PHP tag.
+ // TODO: Preserve formatting.
+ $this->setIndentLevel($origIndentLevel);
+ return null;
+ }
+ } else {
+ $result .= $this->origTokens->getTokenCode(
+ $pos, $commentStartPos, $indentAdjustment);
+ }
+
+ if (!empty($delayedAdd)) {
+ /** @var Node $delayedAddNode */
+ foreach ($delayedAdd as $delayedAddNode) {
+ if ($insertNewline) {
+ $delayedAddComments = $delayedAddNode->getComments();
+ if ($delayedAddComments) {
+ $result .= $this->pComments($delayedAddComments) . $this->nl;
+ }
+ }
+
+ $this->safeAppend($result, $this->p($delayedAddNode, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, true));
+
+ if ($insertNewline) {
+ $result .= $insertStr . $this->nl;
+ } else {
+ $result .= $insertStr;
+ }
+ }
+
+ $delayedAdd = [];
+ }
+
+ if ($comments !== $origComments) {
+ if ($comments) {
+ $result .= $this->pComments($comments) . $this->nl;
+ }
+ } else {
+ $result .= $this->origTokens->getTokenCode(
+ $commentStartPos, $itemStartPos, $indentAdjustment);
+ }
+
+ // If we had to remove anything, we have done so now.
+ $skipRemovedNode = false;
+ } elseif ($diffType === DiffElem::TYPE_ADD) {
+ if (null === $insertStr) {
+ // We don't have insertion information for this list type
+ return null;
+ }
+
+ if (!$arrItem instanceof Node) {
+ // We only support list insertion of nodes.
+ return null;
+ }
+
+ // We go multiline if the original code was multiline,
+ // or if it's an array item with a comment above it.
+ // Match always uses multiline formatting.
+ if ($insertStr === ', ' &&
+ ($this->isMultiline($origNodes) || $arrItem->getComments() ||
+ $parentNodeClass === Expr\Match_::class)
+ ) {
+ $insertStr = ',';
+ $insertNewline = true;
+ }
+
+ if ($beforeFirstKeepOrReplace) {
+ // Will be inserted at the next "replace" or "keep" element
+ $delayedAdd[] = $arrItem;
+ continue;
+ }
+
+ $itemStartPos = $pos;
+ $itemEndPos = $pos - 1;
+
+ $origIndentLevel = $this->indentLevel;
+ $this->setIndentLevel($lastElemIndentLevel);
+
+ if ($insertNewline) {
+ $result .= $insertStr . $this->nl;
+ $comments = $arrItem->getComments();
+ if ($comments) {
+ $result .= $this->pComments($comments) . $this->nl;
+ }
+ } else {
+ $result .= $insertStr;
+ }
+ } elseif ($diffType === DiffElem::TYPE_REMOVE) {
+ if (!$origArrItem instanceof Node) {
+ // We only support removal for nodes
+ return null;
+ }
+
+ $itemStartPos = $origArrItem->getStartTokenPos();
+ $itemEndPos = $origArrItem->getEndTokenPos();
+ \assert($itemStartPos >= 0 && $itemEndPos >= 0);
+
+ // Consider comments part of the node.
+ $origComments = $origArrItem->getComments();
+ if ($origComments) {
+ $itemStartPos = $origComments[0]->getStartTokenPos();
+ }
+
+ if ($i === 0) {
+ // If we're removing from the start, keep the tokens before the node and drop those after it,
+ // instead of the other way around.
+ $result .= $this->origTokens->getTokenCode(
+ $pos, $itemStartPos, $indentAdjustment);
+ $skipRemovedNode = true;
+ } else {
+ if ($isStmtList && $this->origTokens->haveTagInRange($pos, $itemStartPos)) {
+ // We'd remove an opening/closing PHP tag.
+ // TODO: Preserve formatting.
+ return null;
+ }
+ }
+
+ $pos = $itemEndPos + 1;
+ continue;
+ } else {
+ throw new \Exception("Shouldn't happen");
+ }
+
+ if (null !== $fixup && $arrItem->getAttribute('origNode') !== $origArrItem) {
+ $res = $this->pFixup($fixup, $arrItem, null, $itemStartPos, $itemEndPos);
+ } else {
+ $res = $this->p($arrItem, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, true);
+ }
+ $this->safeAppend($result, $res);
+
+ $this->setIndentLevel($origIndentLevel);
+ $pos = $itemEndPos + 1;
+ }
+
+ if ($skipRemovedNode) {
+ // TODO: Support removing single node.
+ return null;
+ }
+
+ if (!empty($delayedAdd)) {
+ if (!isset($this->emptyListInsertionMap[$mapKey])) {
+ return null;
+ }
+
+ list($findToken, $extraLeft, $extraRight) = $this->emptyListInsertionMap[$mapKey];
+ if (null !== $findToken) {
+ $insertPos = $this->origTokens->findRight($pos, $findToken) + 1;
+ $result .= $this->origTokens->getTokenCode($pos, $insertPos, $indentAdjustment);
+ $pos = $insertPos;
+ }
+
+ $first = true;
+ $result .= $extraLeft;
+ foreach ($delayedAdd as $delayedAddNode) {
+ if (!$first) {
+ $result .= $insertStr;
+ if ($insertNewline) {
+ $result .= $this->nl;
+ }
+ }
+ $result .= $this->p($delayedAddNode, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, true);
+ $first = false;
+ }
+ $result .= $extraRight === "\n" ? $this->nl : $extraRight;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Print node with fixups.
+ *
+ * Fixups here refer to the addition of extra parentheses, braces or other characters, that
+ * are required to preserve program semantics in a certain context (e.g. to maintain precedence
+ * or because only certain expressions are allowed in certain places).
+ *
+ * @param int $fixup Fixup type
+ * @param Node $subNode Subnode to print
+ * @param string|null $parentClass Class of parent node
+ * @param int $subStartPos Original start pos of subnode
+ * @param int $subEndPos Original end pos of subnode
+ *
+ * @return string Result of fixed-up print of subnode
+ */
+ protected function pFixup(int $fixup, Node $subNode, ?string $parentClass, int $subStartPos, int $subEndPos): string {
+ switch ($fixup) {
+ case self::FIXUP_PREC_LEFT:
+ // We use a conservative approximation where lhsPrecedence == precedence.
+ if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) {
+ $precedence = $this->precedenceMap[$parentClass][1];
+ return $this->p($subNode, $precedence, $precedence);
+ }
+ break;
+ case self::FIXUP_PREC_RIGHT:
+ if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) {
+ $precedence = $this->precedenceMap[$parentClass][2];
+ return $this->p($subNode, $precedence, $precedence);
+ }
+ break;
+ case self::FIXUP_PREC_UNARY:
+ if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) {
+ $precedence = $this->precedenceMap[$parentClass][0];
+ return $this->p($subNode, $precedence, $precedence);
+ }
+ break;
+ case self::FIXUP_CALL_LHS:
+ if ($this->callLhsRequiresParens($subNode)
+ && !$this->origTokens->haveParens($subStartPos, $subEndPos)
+ ) {
+ return '(' . $this->p($subNode) . ')';
+ }
+ break;
+ case self::FIXUP_DEREF_LHS:
+ if ($this->dereferenceLhsRequiresParens($subNode)
+ && !$this->origTokens->haveParens($subStartPos, $subEndPos)
+ ) {
+ return '(' . $this->p($subNode) . ')';
+ }
+ break;
+ case self::FIXUP_STATIC_DEREF_LHS:
+ if ($this->staticDereferenceLhsRequiresParens($subNode)
+ && !$this->origTokens->haveParens($subStartPos, $subEndPos)
+ ) {
+ return '(' . $this->p($subNode) . ')';
+ }
+ break;
+ case self::FIXUP_NEW:
+ if ($this->newOperandRequiresParens($subNode)
+ && !$this->origTokens->haveParens($subStartPos, $subEndPos)) {
+ return '(' . $this->p($subNode) . ')';
+ }
+ break;
+ case self::FIXUP_BRACED_NAME:
+ case self::FIXUP_VAR_BRACED_NAME:
+ if ($subNode instanceof Expr
+ && !$this->origTokens->haveBraces($subStartPos, $subEndPos)
+ ) {
+ return ($fixup === self::FIXUP_VAR_BRACED_NAME ? '$' : '')
+ . '{' . $this->p($subNode) . '}';
+ }
+ break;
+ case self::FIXUP_ENCAPSED:
+ if (!$subNode instanceof Node\InterpolatedStringPart
+ && !$this->origTokens->haveBraces($subStartPos, $subEndPos)
+ ) {
+ return '{' . $this->p($subNode) . '}';
+ }
+ break;
+ default:
+ throw new \Exception('Cannot happen');
+ }
+
+ // Nothing special to do
+ return $this->p($subNode);
+ }
+
+ /**
+ * Appends to a string, ensuring whitespace between label characters.
+ *
+ * Example: "echo" and "$x" result in "echo$x", but "echo" and "x" result in "echo x".
+ * Without safeAppend the result would be "echox", which does not preserve semantics.
+ */
+ protected function safeAppend(string &$str, string $append): void {
+ if ($str === "") {
+ $str = $append;
+ return;
+ }
+
+ if ($append === "") {
+ return;
+ }
+
+ if (!$this->labelCharMap[$append[0]]
+ || !$this->labelCharMap[$str[\strlen($str) - 1]]) {
+ $str .= $append;
+ } else {
+ $str .= " " . $append;
+ }
+ }
+
+ /**
+ * Determines whether the LHS of a call must be wrapped in parenthesis.
+ *
+ * @param Node $node LHS of a call
+ *
+ * @return bool Whether parentheses are required
+ */
+ protected function callLhsRequiresParens(Node $node): bool {
+ return !($node instanceof Node\Name
+ || $node instanceof Expr\Variable
+ || $node instanceof Expr\ArrayDimFetch
+ || $node instanceof Expr\FuncCall
+ || $node instanceof Expr\MethodCall
+ || $node instanceof Expr\NullsafeMethodCall
+ || $node instanceof Expr\StaticCall
+ || $node instanceof Expr\Array_);
+ }
+
+ /**
+ * Determines whether the LHS of an array/object operation must be wrapped in parentheses.
+ *
+ * @param Node $node LHS of dereferencing operation
+ *
+ * @return bool Whether parentheses are required
+ */
+ protected function dereferenceLhsRequiresParens(Node $node): bool {
+ // A constant can occur on the LHS of an array/object deref, but not a static deref.
+ return $this->staticDereferenceLhsRequiresParens($node)
+ && !$node instanceof Expr\ConstFetch;
+ }
+
+ /**
+ * Determines whether the LHS of a static operation must be wrapped in parentheses.
+ *
+ * @param Node $node LHS of dereferencing operation
+ *
+ * @return bool Whether parentheses are required
+ */
+ protected function staticDereferenceLhsRequiresParens(Node $node): bool {
+ return !($node instanceof Expr\Variable
+ || $node instanceof Node\Name
+ || $node instanceof Expr\ArrayDimFetch
+ || $node instanceof Expr\PropertyFetch
+ || $node instanceof Expr\NullsafePropertyFetch
+ || $node instanceof Expr\StaticPropertyFetch
+ || $node instanceof Expr\FuncCall
+ || $node instanceof Expr\MethodCall
+ || $node instanceof Expr\NullsafeMethodCall
+ || $node instanceof Expr\StaticCall
+ || $node instanceof Expr\Array_
+ || $node instanceof Scalar\String_
+ || $node instanceof Expr\ClassConstFetch);
+ }
+
+ /**
+ * Determines whether an expression used in "new" or "instanceof" requires parentheses.
+ *
+ * @param Node $node New or instanceof operand
+ *
+ * @return bool Whether parentheses are required
+ */
+ protected function newOperandRequiresParens(Node $node): bool {
+ if ($node instanceof Node\Name || $node instanceof Expr\Variable) {
+ return false;
+ }
+ if ($node instanceof Expr\ArrayDimFetch || $node instanceof Expr\PropertyFetch ||
+ $node instanceof Expr\NullsafePropertyFetch
+ ) {
+ return $this->newOperandRequiresParens($node->var);
+ }
+ if ($node instanceof Expr\StaticPropertyFetch) {
+ return $this->newOperandRequiresParens($node->class);
+ }
+ return true;
+ }
+
+ /**
+ * Print modifiers, including trailing whitespace.
+ *
+ * @param int $modifiers Modifier mask to print
+ *
+ * @return string Printed modifiers
+ */
+ protected function pModifiers(int $modifiers): string {
+ return ($modifiers & Modifiers::FINAL ? 'final ' : '')
+ . ($modifiers & Modifiers::ABSTRACT ? 'abstract ' : '')
+ . ($modifiers & Modifiers::PUBLIC ? 'public ' : '')
+ . ($modifiers & Modifiers::PROTECTED ? 'protected ' : '')
+ . ($modifiers & Modifiers::PRIVATE ? 'private ' : '')
+ . ($modifiers & Modifiers::PUBLIC_SET ? 'public(set) ' : '')
+ . ($modifiers & Modifiers::PROTECTED_SET ? 'protected(set) ' : '')
+ . ($modifiers & Modifiers::PRIVATE_SET ? 'private(set) ' : '')
+ . ($modifiers & Modifiers::STATIC ? 'static ' : '')
+ . ($modifiers & Modifiers::READONLY ? 'readonly ' : '');
+ }
+
+ protected function pStatic(bool $static): string {
+ return $static ? 'static ' : '';
+ }
+
+ /**
+ * Determine whether a list of nodes uses multiline formatting.
+ *
+ * @param (Node|null)[] $nodes Node list
+ *
+ * @return bool Whether multiline formatting is used
+ */
+ protected function isMultiline(array $nodes): bool {
+ if (\count($nodes) < 2) {
+ return false;
+ }
+
+ $pos = -1;
+ foreach ($nodes as $node) {
+ if (null === $node) {
+ continue;
+ }
+
+ $endPos = $node->getEndTokenPos() + 1;
+ if ($pos >= 0) {
+ $text = $this->origTokens->getTokenCode($pos, $endPos, 0);
+ if (false === strpos($text, "\n")) {
+ // We require that a newline is present between *every* item. If the formatting
+ // is inconsistent, with only some items having newlines, we don't consider it
+ // as multiline
+ return false;
+ }
+ }
+ $pos = $endPos;
+ }
+
+ return true;
+ }
+
+ /**
+ * Lazily initializes label char map.
+ *
+ * The label char map determines whether a certain character may occur in a label.
+ */
+ protected function initializeLabelCharMap(): void {
+ if (isset($this->labelCharMap)) {
+ return;
+ }
+
+ $this->labelCharMap = [];
+ for ($i = 0; $i < 256; $i++) {
+ $chr = chr($i);
+ $this->labelCharMap[$chr] = $i >= 0x80 || ctype_alnum($chr);
+ }
+
+ if ($this->phpVersion->allowsDelInIdentifiers()) {
+ $this->labelCharMap["\x7f"] = true;
+ }
+ }
+
+ /**
+ * Lazily initializes node list differ.
+ *
+ * The node list differ is used to determine differences between two array subnodes.
+ */
+ protected function initializeNodeListDiffer(): void {
+ if (isset($this->nodeListDiffer)) {
+ return;
+ }
+
+ $this->nodeListDiffer = new Internal\Differ(function ($a, $b) {
+ if ($a instanceof Node && $b instanceof Node) {
+ return $a === $b->getAttribute('origNode');
+ }
+ // Can happen for array destructuring
+ return $a === null && $b === null;
+ });
+ }
+
+ /**
+ * Lazily initializes fixup map.
+ *
+ * The fixup map is used to determine whether a certain subnode of a certain node may require
+ * some kind of "fixup" operation, e.g. the addition of parenthesis or braces.
+ */
+ protected function initializeFixupMap(): void {
+ if (isset($this->fixupMap)) {
+ return;
+ }
+
+ $this->fixupMap = [
+ Expr\Instanceof_::class => [
+ 'expr' => self::FIXUP_PREC_UNARY,
+ 'class' => self::FIXUP_NEW,
+ ],
+ Expr\Ternary::class => [
+ 'cond' => self::FIXUP_PREC_LEFT,
+ 'else' => self::FIXUP_PREC_RIGHT,
+ ],
+ Expr\Yield_::class => ['value' => self::FIXUP_PREC_UNARY],
+
+ Expr\FuncCall::class => ['name' => self::FIXUP_CALL_LHS],
+ Expr\StaticCall::class => ['class' => self::FIXUP_STATIC_DEREF_LHS],
+ Expr\ArrayDimFetch::class => ['var' => self::FIXUP_DEREF_LHS],
+ Expr\ClassConstFetch::class => [
+ 'class' => self::FIXUP_STATIC_DEREF_LHS,
+ 'name' => self::FIXUP_BRACED_NAME,
+ ],
+ Expr\New_::class => ['class' => self::FIXUP_NEW],
+ Expr\MethodCall::class => [
+ 'var' => self::FIXUP_DEREF_LHS,
+ 'name' => self::FIXUP_BRACED_NAME,
+ ],
+ Expr\NullsafeMethodCall::class => [
+ 'var' => self::FIXUP_DEREF_LHS,
+ 'name' => self::FIXUP_BRACED_NAME,
+ ],
+ Expr\StaticPropertyFetch::class => [
+ 'class' => self::FIXUP_STATIC_DEREF_LHS,
+ 'name' => self::FIXUP_VAR_BRACED_NAME,
+ ],
+ Expr\PropertyFetch::class => [
+ 'var' => self::FIXUP_DEREF_LHS,
+ 'name' => self::FIXUP_BRACED_NAME,
+ ],
+ Expr\NullsafePropertyFetch::class => [
+ 'var' => self::FIXUP_DEREF_LHS,
+ 'name' => self::FIXUP_BRACED_NAME,
+ ],
+ Scalar\InterpolatedString::class => [
+ 'parts' => self::FIXUP_ENCAPSED,
+ ],
+ ];
+
+ $binaryOps = [
+ BinaryOp\Pow::class, BinaryOp\Mul::class, BinaryOp\Div::class, BinaryOp\Mod::class,
+ BinaryOp\Plus::class, BinaryOp\Minus::class, BinaryOp\Concat::class,
+ BinaryOp\ShiftLeft::class, BinaryOp\ShiftRight::class, BinaryOp\Smaller::class,
+ BinaryOp\SmallerOrEqual::class, BinaryOp\Greater::class, BinaryOp\GreaterOrEqual::class,
+ BinaryOp\Equal::class, BinaryOp\NotEqual::class, BinaryOp\Identical::class,
+ BinaryOp\NotIdentical::class, BinaryOp\Spaceship::class, BinaryOp\BitwiseAnd::class,
+ BinaryOp\BitwiseXor::class, BinaryOp\BitwiseOr::class, BinaryOp\BooleanAnd::class,
+ BinaryOp\BooleanOr::class, BinaryOp\Coalesce::class, BinaryOp\LogicalAnd::class,
+ BinaryOp\LogicalXor::class, BinaryOp\LogicalOr::class,
+ ];
+ foreach ($binaryOps as $binaryOp) {
+ $this->fixupMap[$binaryOp] = [
+ 'left' => self::FIXUP_PREC_LEFT,
+ 'right' => self::FIXUP_PREC_RIGHT
+ ];
+ }
+
+ $prefixOps = [
+ Expr\Clone_::class, Expr\BitwiseNot::class, Expr\BooleanNot::class, Expr\UnaryPlus::class, Expr\UnaryMinus::class,
+ Cast\Int_::class, Cast\Double::class, Cast\String_::class, Cast\Array_::class,
+ Cast\Object_::class, Cast\Bool_::class, Cast\Unset_::class, Expr\ErrorSuppress::class,
+ Expr\YieldFrom::class, Expr\Print_::class, Expr\Include_::class,
+ Expr\Assign::class, Expr\AssignRef::class, AssignOp\Plus::class, AssignOp\Minus::class,
+ AssignOp\Mul::class, AssignOp\Div::class, AssignOp\Concat::class, AssignOp\Mod::class,
+ AssignOp\BitwiseAnd::class, AssignOp\BitwiseOr::class, AssignOp\BitwiseXor::class,
+ AssignOp\ShiftLeft::class, AssignOp\ShiftRight::class, AssignOp\Pow::class, AssignOp\Coalesce::class,
+ Expr\ArrowFunction::class, Expr\Throw_::class,
+ ];
+ foreach ($prefixOps as $prefixOp) {
+ $this->fixupMap[$prefixOp] = ['expr' => self::FIXUP_PREC_UNARY];
+ }
+ }
+
+ /**
+ * Lazily initializes the removal map.
+ *
+ * The removal map is used to determine which additional tokens should be removed when a
+ * certain node is replaced by null.
+ */
+ protected function initializeRemovalMap(): void {
+ if (isset($this->removalMap)) {
+ return;
+ }
+
+ $stripBoth = ['left' => \T_WHITESPACE, 'right' => \T_WHITESPACE];
+ $stripLeft = ['left' => \T_WHITESPACE];
+ $stripRight = ['right' => \T_WHITESPACE];
+ $stripDoubleArrow = ['right' => \T_DOUBLE_ARROW];
+ $stripColon = ['left' => ':'];
+ $stripEquals = ['left' => '='];
+ $this->removalMap = [
+ 'Expr_ArrayDimFetch->dim' => $stripBoth,
+ 'ArrayItem->key' => $stripDoubleArrow,
+ 'Expr_ArrowFunction->returnType' => $stripColon,
+ 'Expr_Closure->returnType' => $stripColon,
+ 'Expr_Exit->expr' => $stripBoth,
+ 'Expr_Ternary->if' => $stripBoth,
+ 'Expr_Yield->key' => $stripDoubleArrow,
+ 'Expr_Yield->value' => $stripBoth,
+ 'Param->type' => $stripRight,
+ 'Param->default' => $stripEquals,
+ 'Stmt_Break->num' => $stripBoth,
+ 'Stmt_Catch->var' => $stripLeft,
+ 'Stmt_ClassConst->type' => $stripRight,
+ 'Stmt_ClassMethod->returnType' => $stripColon,
+ 'Stmt_Class->extends' => ['left' => \T_EXTENDS],
+ 'Stmt_Enum->scalarType' => $stripColon,
+ 'Stmt_EnumCase->expr' => $stripEquals,
+ 'Expr_PrintableNewAnonClass->extends' => ['left' => \T_EXTENDS],
+ 'Stmt_Continue->num' => $stripBoth,
+ 'Stmt_Foreach->keyVar' => $stripDoubleArrow,
+ 'Stmt_Function->returnType' => $stripColon,
+ 'Stmt_If->else' => $stripLeft,
+ 'Stmt_Namespace->name' => $stripLeft,
+ 'Stmt_Property->type' => $stripRight,
+ 'PropertyItem->default' => $stripEquals,
+ 'Stmt_Return->expr' => $stripBoth,
+ 'Stmt_StaticVar->default' => $stripEquals,
+ 'Stmt_TraitUseAdaptation_Alias->newName' => $stripLeft,
+ 'Stmt_TryCatch->finally' => $stripLeft,
+ // 'Stmt_Case->cond': Replace with "default"
+ // 'Stmt_Class->name': Unclear what to do
+ // 'Stmt_Declare->stmts': Not a plain node
+ // 'Stmt_TraitUseAdaptation_Alias->newModifier': Not a plain node
+ ];
+ }
+
+ protected function initializeInsertionMap(): void {
+ if (isset($this->insertionMap)) {
+ return;
+ }
+
+ // TODO: "yield" where both key and value are inserted doesn't work
+ // [$find, $beforeToken, $extraLeft, $extraRight]
+ $this->insertionMap = [
+ 'Expr_ArrayDimFetch->dim' => ['[', false, null, null],
+ 'ArrayItem->key' => [null, false, null, ' => '],
+ 'Expr_ArrowFunction->returnType' => [')', false, ': ', null],
+ 'Expr_Closure->returnType' => [')', false, ': ', null],
+ 'Expr_Ternary->if' => ['?', false, ' ', ' '],
+ 'Expr_Yield->key' => [\T_YIELD, false, null, ' => '],
+ 'Expr_Yield->value' => [\T_YIELD, false, ' ', null],
+ 'Param->type' => [null, false, null, ' '],
+ 'Param->default' => [null, false, ' = ', null],
+ 'Stmt_Break->num' => [\T_BREAK, false, ' ', null],
+ 'Stmt_Catch->var' => [null, false, ' ', null],
+ 'Stmt_ClassMethod->returnType' => [')', false, ': ', null],
+ 'Stmt_ClassConst->type' => [\T_CONST, false, ' ', null],
+ 'Stmt_Class->extends' => [null, false, ' extends ', null],
+ 'Stmt_Enum->scalarType' => [null, false, ' : ', null],
+ 'Stmt_EnumCase->expr' => [null, false, ' = ', null],
+ 'Expr_PrintableNewAnonClass->extends' => [null, false, ' extends ', null],
+ 'Stmt_Continue->num' => [\T_CONTINUE, false, ' ', null],
+ 'Stmt_Foreach->keyVar' => [\T_AS, false, null, ' => '],
+ 'Stmt_Function->returnType' => [')', false, ': ', null],
+ 'Stmt_If->else' => [null, false, ' ', null],
+ 'Stmt_Namespace->name' => [\T_NAMESPACE, false, ' ', null],
+ 'Stmt_Property->type' => [\T_VARIABLE, true, null, ' '],
+ 'PropertyItem->default' => [null, false, ' = ', null],
+ 'Stmt_Return->expr' => [\T_RETURN, false, ' ', null],
+ 'Stmt_StaticVar->default' => [null, false, ' = ', null],
+ //'Stmt_TraitUseAdaptation_Alias->newName' => [T_AS, false, ' ', null], // TODO
+ 'Stmt_TryCatch->finally' => [null, false, ' ', null],
+
+ // 'Expr_Exit->expr': Complicated due to optional ()
+ // 'Stmt_Case->cond': Conversion from default to case
+ // 'Stmt_Class->name': Unclear
+ // 'Stmt_Declare->stmts': Not a proper node
+ // 'Stmt_TraitUseAdaptation_Alias->newModifier': Not a proper node
+ ];
+ }
+
+ protected function initializeListInsertionMap(): void {
+ if (isset($this->listInsertionMap)) {
+ return;
+ }
+
+ $this->listInsertionMap = [
+ // special
+ //'Expr_ShellExec->parts' => '', // TODO These need to be treated more carefully
+ //'Scalar_InterpolatedString->parts' => '',
+ Stmt\Catch_::class . '->types' => '|',
+ UnionType::class . '->types' => '|',
+ IntersectionType::class . '->types' => '&',
+ Stmt\If_::class . '->elseifs' => ' ',
+ Stmt\TryCatch::class . '->catches' => ' ',
+
+ // comma-separated lists
+ Expr\Array_::class . '->items' => ', ',
+ Expr\ArrowFunction::class . '->params' => ', ',
+ Expr\Closure::class . '->params' => ', ',
+ Expr\Closure::class . '->uses' => ', ',
+ Expr\FuncCall::class . '->args' => ', ',
+ Expr\Isset_::class . '->vars' => ', ',
+ Expr\List_::class . '->items' => ', ',
+ Expr\MethodCall::class . '->args' => ', ',
+ Expr\NullsafeMethodCall::class . '->args' => ', ',
+ Expr\New_::class . '->args' => ', ',
+ PrintableNewAnonClassNode::class . '->args' => ', ',
+ Expr\StaticCall::class . '->args' => ', ',
+ Stmt\ClassConst::class . '->consts' => ', ',
+ Stmt\ClassMethod::class . '->params' => ', ',
+ Stmt\Class_::class . '->implements' => ', ',
+ Stmt\Enum_::class . '->implements' => ', ',
+ PrintableNewAnonClassNode::class . '->implements' => ', ',
+ Stmt\Const_::class . '->consts' => ', ',
+ Stmt\Declare_::class . '->declares' => ', ',
+ Stmt\Echo_::class . '->exprs' => ', ',
+ Stmt\For_::class . '->init' => ', ',
+ Stmt\For_::class . '->cond' => ', ',
+ Stmt\For_::class . '->loop' => ', ',
+ Stmt\Function_::class . '->params' => ', ',
+ Stmt\Global_::class . '->vars' => ', ',
+ Stmt\GroupUse::class . '->uses' => ', ',
+ Stmt\Interface_::class . '->extends' => ', ',
+ Expr\Match_::class . '->arms' => ', ',
+ Stmt\Property::class . '->props' => ', ',
+ Stmt\StaticVar::class . '->vars' => ', ',
+ Stmt\TraitUse::class . '->traits' => ', ',
+ Stmt\TraitUseAdaptation\Precedence::class . '->insteadof' => ', ',
+ Stmt\Unset_::class . '->vars' => ', ',
+ Stmt\UseUse::class . '->uses' => ', ',
+ MatchArm::class . '->conds' => ', ',
+ AttributeGroup::class . '->attrs' => ', ',
+ PropertyHook::class . '->params' => ', ',
+
+ // statement lists
+ Expr\Closure::class . '->stmts' => "\n",
+ Stmt\Case_::class . '->stmts' => "\n",
+ Stmt\Catch_::class . '->stmts' => "\n",
+ Stmt\Class_::class . '->stmts' => "\n",
+ Stmt\Enum_::class . '->stmts' => "\n",
+ PrintableNewAnonClassNode::class . '->stmts' => "\n",
+ Stmt\Interface_::class . '->stmts' => "\n",
+ Stmt\Trait_::class . '->stmts' => "\n",
+ Stmt\ClassMethod::class . '->stmts' => "\n",
+ Stmt\Declare_::class . '->stmts' => "\n",
+ Stmt\Do_::class . '->stmts' => "\n",
+ Stmt\ElseIf_::class . '->stmts' => "\n",
+ Stmt\Else_::class . '->stmts' => "\n",
+ Stmt\Finally_::class . '->stmts' => "\n",
+ Stmt\Foreach_::class . '->stmts' => "\n",
+ Stmt\For_::class . '->stmts' => "\n",
+ Stmt\Function_::class . '->stmts' => "\n",
+ Stmt\If_::class . '->stmts' => "\n",
+ Stmt\Namespace_::class . '->stmts' => "\n",
+ Stmt\Block::class . '->stmts' => "\n",
+
+ // Attribute groups
+ Stmt\Class_::class . '->attrGroups' => "\n",
+ Stmt\Enum_::class . '->attrGroups' => "\n",
+ Stmt\EnumCase::class . '->attrGroups' => "\n",
+ Stmt\Interface_::class . '->attrGroups' => "\n",
+ Stmt\Trait_::class . '->attrGroups' => "\n",
+ Stmt\Function_::class . '->attrGroups' => "\n",
+ Stmt\ClassMethod::class . '->attrGroups' => "\n",
+ Stmt\ClassConst::class . '->attrGroups' => "\n",
+ Stmt\Property::class . '->attrGroups' => "\n",
+ PrintableNewAnonClassNode::class . '->attrGroups' => ' ',
+ Expr\Closure::class . '->attrGroups' => ' ',
+ Expr\ArrowFunction::class . '->attrGroups' => ' ',
+ Param::class . '->attrGroups' => ' ',
+ PropertyHook::class . '->attrGroups' => ' ',
+
+ Stmt\Switch_::class . '->cases' => "\n",
+ Stmt\TraitUse::class . '->adaptations' => "\n",
+ Stmt\TryCatch::class . '->stmts' => "\n",
+ Stmt\While_::class . '->stmts' => "\n",
+ PropertyHook::class . '->body' => "\n",
+ Stmt\Property::class . '->hooks' => "\n",
+ Param::class . '->hooks' => "\n",
+
+ // dummy for top-level context
+ 'File->stmts' => "\n",
+ ];
+ }
+
+ protected function initializeEmptyListInsertionMap(): void {
+ if (isset($this->emptyListInsertionMap)) {
+ return;
+ }
+
+ // TODO Insertion into empty statement lists.
+
+ // [$find, $extraLeft, $extraRight]
+ $this->emptyListInsertionMap = [
+ Expr\ArrowFunction::class . '->params' => ['(', '', ''],
+ Expr\Closure::class . '->uses' => [')', ' use (', ')'],
+ Expr\Closure::class . '->params' => ['(', '', ''],
+ Expr\FuncCall::class . '->args' => ['(', '', ''],
+ Expr\MethodCall::class . '->args' => ['(', '', ''],
+ Expr\NullsafeMethodCall::class . '->args' => ['(', '', ''],
+ Expr\New_::class . '->args' => ['(', '', ''],
+ PrintableNewAnonClassNode::class . '->args' => ['(', '', ''],
+ PrintableNewAnonClassNode::class . '->implements' => [null, ' implements ', ''],
+ Expr\StaticCall::class . '->args' => ['(', '', ''],
+ Stmt\Class_::class . '->implements' => [null, ' implements ', ''],
+ Stmt\Enum_::class . '->implements' => [null, ' implements ', ''],
+ Stmt\ClassMethod::class . '->params' => ['(', '', ''],
+ Stmt\Interface_::class . '->extends' => [null, ' extends ', ''],
+ Stmt\Function_::class . '->params' => ['(', '', ''],
+ Stmt\Interface_::class . '->attrGroups' => [null, '', "\n"],
+ Stmt\Class_::class . '->attrGroups' => [null, '', "\n"],
+ Stmt\ClassConst::class . '->attrGroups' => [null, '', "\n"],
+ Stmt\ClassMethod::class . '->attrGroups' => [null, '', "\n"],
+ Stmt\Function_::class . '->attrGroups' => [null, '', "\n"],
+ Stmt\Property::class . '->attrGroups' => [null, '', "\n"],
+ Stmt\Trait_::class . '->attrGroups' => [null, '', "\n"],
+ Expr\ArrowFunction::class . '->attrGroups' => [null, '', ' '],
+ Expr\Closure::class . '->attrGroups' => [null, '', ' '],
+ PrintableNewAnonClassNode::class . '->attrGroups' => [\T_NEW, ' ', ''],
+
+ /* These cannot be empty to start with:
+ * Expr_Isset->vars
+ * Stmt_Catch->types
+ * Stmt_Const->consts
+ * Stmt_ClassConst->consts
+ * Stmt_Declare->declares
+ * Stmt_Echo->exprs
+ * Stmt_Global->vars
+ * Stmt_GroupUse->uses
+ * Stmt_Property->props
+ * Stmt_StaticVar->vars
+ * Stmt_TraitUse->traits
+ * Stmt_TraitUseAdaptation_Precedence->insteadof
+ * Stmt_Unset->vars
+ * Stmt_Use->uses
+ * UnionType->types
+ */
+
+ /* TODO
+ * Stmt_If->elseifs
+ * Stmt_TryCatch->catches
+ * Expr_Array->items
+ * Expr_List->items
+ * Stmt_For->init
+ * Stmt_For->cond
+ * Stmt_For->loop
+ */
+ ];
+ }
+
+ protected function initializeModifierChangeMap(): void {
+ if (isset($this->modifierChangeMap)) {
+ return;
+ }
+
+ $this->modifierChangeMap = [
+ Stmt\ClassConst::class . '->flags' => ['pModifiers', \T_CONST],
+ Stmt\ClassMethod::class . '->flags' => ['pModifiers', \T_FUNCTION],
+ Stmt\Class_::class . '->flags' => ['pModifiers', \T_CLASS],
+ Stmt\Property::class . '->flags' => ['pModifiers', \T_VARIABLE],
+ PrintableNewAnonClassNode::class . '->flags' => ['pModifiers', \T_CLASS],
+ Param::class . '->flags' => ['pModifiers', \T_VARIABLE],
+ PropertyHook::class . '->flags' => ['pModifiers', \T_STRING],
+ Expr\Closure::class . '->static' => ['pStatic', \T_FUNCTION],
+ Expr\ArrowFunction::class . '->static' => ['pStatic', \T_FN],
+ //Stmt\TraitUseAdaptation\Alias::class . '->newModifier' => 0, // TODO
+ ];
+
+ // List of integer subnodes that are not modifiers:
+ // Expr_Include->type
+ // Stmt_GroupUse->type
+ // Stmt_Use->type
+ // UseItem->type
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/Token.php b/vendor/nikic/php-parser/lib/PhpParser/Token.php
new file mode 100644
index 0000000..6683310
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/Token.php
@@ -0,0 +1,18 @@
+pos + \strlen($this->text);
+ }
+
+ /** Get 1-based end line number of the token. */
+ public function getEndLine(): int {
+ return $this->line + \substr_count($this->text, "\n");
+ }
+}
diff --git a/vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php b/vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php
new file mode 100644
index 0000000..13576c4
--- /dev/null
+++ b/vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php
@@ -0,0 +1,68 @@
+registerCustomFixers([
+ new \PharIo\CSFixer\PhpdocSingleLineVarFixer()
+ ])
+ ->setRiskyAllowed(true)
+ ->setRules(
+ [
+ 'PharIo/phpdoc_single_line_var_fixer' => true,
+
+ 'align_multiline_comment' => true,
+ 'array_indentation' => true,
+ 'array_syntax' => ['syntax' => 'short'],
+ 'binary_operator_spaces' => [
+ 'operators' => [
+ '=' => 'align',
+ '=>' => 'align',
+ ],
+ ],
+ 'blank_line_after_namespace' => true,
+ 'blank_line_after_opening_tag' => false,
+ 'blank_line_before_statement' => [
+ 'statements' => [
+ 'break',
+ 'continue',
+ 'declare',
+ 'do',
+ 'for',
+ 'foreach',
+ 'if',
+ 'include',
+ 'include_once',
+ 'require',
+ 'require_once',
+ 'return',
+ 'switch',
+ 'throw',
+ 'try',
+ 'while',
+ 'yield',
+ ],
+ ],
+ 'braces' => [
+ 'allow_single_line_closure' => false,
+ 'position_after_anonymous_constructs' => 'same',
+ 'position_after_control_structures' => 'same',
+ 'position_after_functions_and_oop_constructs' => 'same'
+ ],
+ 'cast_spaces' => ['space' => 'none'],
+
+ // This fixer removes the blank line at class start, no way to disable that, so we disable the fixer :(
+ //'class_attributes_separation' => ['elements' => ['const', 'method', 'property']],
+
+ 'combine_consecutive_issets' => true,
+ 'combine_consecutive_unsets' => true,
+ 'compact_nullable_typehint' => true,
+ 'concat_space' => ['spacing' => 'one'],
+ 'date_time_immutable' => true,
+ 'declare_equal_normalize' => ['space' => 'single'],
+ 'declare_strict_types' => true,
+ 'dir_constant' => true,
+ 'elseif' => true,
+ 'encoding' => true,
+ 'full_opening_tag' => true,
+ 'fully_qualified_strict_types' => true,
+ 'function_declaration' => [
+ 'closure_function_spacing' => 'one'
+ ],
+ 'global_namespace_import' => [
+ 'import_classes' => true,
+ 'import_constants' => true,
+ 'import_functions' => true,
+ ],
+ 'header_comment' => ['header' => $header, 'separate' => 'none'],
+ 'indentation_type' => true,
+ 'is_null' => true,
+ 'line_ending' => true,
+ 'list_syntax' => ['syntax' => 'short'],
+ 'logical_operators' => true,
+ 'lowercase_cast' => true,
+ 'constant_case' => ['case' => 'lower'],
+ 'lowercase_keywords' => true,
+ 'lowercase_static_reference' => true,
+ 'magic_constant_casing' => true,
+ 'method_argument_space' => ['on_multiline' => 'ensure_fully_multiline'],
+ 'modernize_types_casting' => true,
+ 'multiline_comment_opening_closing' => true,
+ 'multiline_whitespace_before_semicolons' => true,
+ 'new_with_braces' => false,
+ 'no_alias_functions' => true,
+ 'no_alternative_syntax' => true,
+ 'no_blank_lines_after_class_opening' => false,
+ 'no_blank_lines_after_phpdoc' => true,
+ 'no_blank_lines_before_namespace' => true,
+ 'no_closing_tag' => true,
+ 'no_empty_comment' => true,
+ 'no_empty_phpdoc' => true,
+ 'no_empty_statement' => true,
+ 'no_extra_blank_lines' => true,
+ 'no_homoglyph_names' => true,
+ 'no_leading_import_slash' => true,
+ 'no_leading_namespace_whitespace' => true,
+ 'no_mixed_echo_print' => ['use' => 'print'],
+ 'no_multiline_whitespace_around_double_arrow' => true,
+ 'no_null_property_initialization' => true,
+ 'no_php4_constructor' => true,
+ 'no_short_bool_cast' => true,
+ 'echo_tag_syntax' => ['format' => 'long'],
+ 'no_singleline_whitespace_before_semicolons' => true,
+ 'no_spaces_after_function_name' => true,
+ 'no_spaces_inside_parenthesis' => true,
+ 'no_superfluous_elseif' => true,
+ 'no_superfluous_phpdoc_tags' => true,
+ 'no_trailing_comma_in_list_call' => true,
+ 'no_trailing_comma_in_singleline_array' => true,
+ 'no_trailing_whitespace' => true,
+ 'no_trailing_whitespace_in_comment' => true,
+ 'no_unneeded_control_parentheses' => false,
+ 'no_unneeded_curly_braces' => false,
+ 'no_unneeded_final_method' => true,
+ 'no_unreachable_default_argument_value' => true,
+ 'no_unset_on_property' => true,
+ 'no_unused_imports' => true,
+ 'no_useless_else' => true,
+ 'no_useless_return' => true,
+ 'no_whitespace_before_comma_in_array' => true,
+ 'no_whitespace_in_blank_line' => true,
+ 'non_printable_character' => true,
+ 'normalize_index_brace' => true,
+ 'object_operator_without_whitespace' => true,
+ 'ordered_class_elements' => [
+ 'order' => [
+ 'use_trait',
+ 'constant_public',
+ 'constant_protected',
+ 'constant_private',
+ 'property_public_static',
+ 'property_protected_static',
+ 'property_private_static',
+ 'property_public',
+ 'property_protected',
+ 'property_private',
+ 'method_public_static',
+ 'construct',
+ 'destruct',
+ 'magic',
+ 'phpunit',
+ 'method_public',
+ 'method_protected',
+ 'method_private',
+ 'method_protected_static',
+ 'method_private_static',
+ ],
+ ],
+ 'ordered_imports' => [
+ 'imports_order' => [
+ PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_CLASS,
+ PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_CONST,
+ PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_FUNCTION,
+ ]
+ ],
+ 'phpdoc_add_missing_param_annotation' => true,
+ 'phpdoc_align' => true,
+ 'phpdoc_annotation_without_dot' => true,
+ 'phpdoc_indent' => true,
+ 'phpdoc_no_access' => true,
+ 'phpdoc_no_empty_return' => true,
+ 'phpdoc_no_package' => true,
+ 'phpdoc_order' => true,
+ 'phpdoc_return_self_reference' => true,
+ 'phpdoc_scalar' => true,
+ 'phpdoc_separation' => true,
+ 'phpdoc_single_line_var_spacing' => true,
+ 'phpdoc_to_comment' => true,
+ 'phpdoc_trim' => true,
+ 'phpdoc_trim_consecutive_blank_line_separation' => true,
+ 'phpdoc_types' => ['groups' => ['simple', 'meta']],
+ 'phpdoc_types_order' => true,
+ 'phpdoc_to_return_type' => true,
+ 'phpdoc_var_without_name' => true,
+ 'pow_to_exponentiation' => true,
+ 'protected_to_private' => true,
+ 'return_assignment' => true,
+ 'return_type_declaration' => ['space_before' => 'none'],
+ 'self_accessor' => false,
+ 'semicolon_after_instruction' => true,
+ 'set_type_to_cast' => true,
+ 'short_scalar_cast' => true,
+ 'simplified_null_return' => true,
+ 'single_blank_line_at_eof' => true,
+ 'single_import_per_statement' => true,
+ 'single_line_after_imports' => true,
+ 'single_quote' => true,
+ 'standardize_not_equals' => true,
+ 'ternary_to_null_coalescing' => true,
+ 'trailing_comma_in_multiline' => false,
+ 'trim_array_spaces' => true,
+ 'unary_operator_spaces' => true,
+ 'visibility_required' => [
+ 'elements' => [
+ 'const',
+ 'method',
+ 'property',
+ ],
+ ],
+ 'void_return' => true,
+ 'whitespace_after_comma_in_array' => true,
+ 'yoda_style' => false
+ ]
+ )
+ ->setFinder(
+ PhpCsFixer\Finder::create()
+ ->files()
+ ->in(__DIR__ . '/build')
+ ->in(__DIR__ . '/src')
+ ->in(__DIR__ . '/tests')
+ ->notName('autoload.php')
+ );
diff --git a/vendor/phar-io/manifest/CHANGELOG.md b/vendor/phar-io/manifest/CHANGELOG.md
new file mode 100644
index 0000000..f363b16
--- /dev/null
+++ b/vendor/phar-io/manifest/CHANGELOG.md
@@ -0,0 +1,45 @@
+# Changelog
+
+All notable changes to phar-io/manifest are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
+
+## [2.0.4] - 03-03-2024
+
+### Changed
+
+- Make `EMail` an optional attribute for author
+- Stick with PHP 7.2 compatibilty
+- Do not use implict nullable type (thanks @sebastianbergmann), this should make things work on PHP 8.4
+
+## [2.0.3] - 20.07.2021
+
+- Fixed PHP 7.2 / PHP 7.3 incompatibility introduced in previous release
+
+## [2.0.2] - 20.07.2021
+
+- Fixed PHP 8.1 deprecation notice
+
+## [2.0.1] - 27.06.2020
+
+This release now supports the use of PHP 7.2+ and ^8.0
+
+## [2.0.0] - 10.05.2020
+
+This release now requires PHP 7.2+
+
+### Changed
+
+- Upgraded to phar-io/version 3.0
+ - Version strings `v1.2.3` will now be converted to valid semantic version strings `1.2.3`
+ - Abreviated strings like `1.0` will get expaneded to `1.0.0`
+
+### Unreleased
+
+[Unreleased]: https://github.com/phar-io/manifest/compare/2.1.0...HEAD
+[2.1.0]: https://github.com/phar-io/manifest/compare/2.0.3...2.1.0
+[2.0.3]: https://github.com/phar-io/manifest/compare/2.0.2...2.0.3
+[2.0.2]: https://github.com/phar-io/manifest/compare/2.0.1...2.0.2
+[2.0.1]: https://github.com/phar-io/manifest/compare/2.0.0...2.0.1
+[2.0.0]: https://github.com/phar-io/manifest/compare/1.0.1...2.0.0
+[1.0.3]: https://github.com/phar-io/manifest/compare/1.0.2...1.0.3
+[1.0.2]: https://github.com/phar-io/manifest/compare/1.0.1...1.0.2
+[1.0.1]: https://github.com/phar-io/manifest/compare/1.0.0...1.0.1
diff --git a/vendor/phar-io/manifest/LICENSE b/vendor/phar-io/manifest/LICENSE
new file mode 100644
index 0000000..64690cf
--- /dev/null
+++ b/vendor/phar-io/manifest/LICENSE
@@ -0,0 +1,31 @@
+Phar.io - Manifest
+
+Copyright (c) 2016-2019 Arne Blankerts , Sebastian Heuer , Sebastian Bergmann , and contributors
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of Arne Blankerts nor the names of contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+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 HOLDER 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.
+
diff --git a/vendor/phar-io/manifest/README.md b/vendor/phar-io/manifest/README.md
new file mode 100644
index 0000000..fae2c9a
--- /dev/null
+++ b/vendor/phar-io/manifest/README.md
@@ -0,0 +1,178 @@
+# Manifest
+
+Component for reading [phar.io](https://phar.io/) manifest information from a [PHP Archive (PHAR)](http://php.net/phar).
+
+## Installation
+
+You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/):
+
+ composer require phar-io/manifest
+
+If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency:
+
+ composer require --dev phar-io/manifest
+
+## Usage Examples
+
+### Read from `manifest.xml`
+```php
+use PharIo\Manifest\ManifestLoader;
+use PharIo\Manifest\ManifestSerializer;
+
+$manifest = ManifestLoader::fromFile('manifest.xml');
+
+var_dump($manifest);
+
+echo (new ManifestSerializer)->serializeToString($manifest);
+```
+
+
+ Output
+
+```shell
+object(PharIo\Manifest\Manifest)#14 (6) {
+ ["name":"PharIo\Manifest\Manifest":private]=>
+ object(PharIo\Manifest\ApplicationName)#10 (1) {
+ ["name":"PharIo\Manifest\ApplicationName":private]=>
+ string(12) "some/library"
+ }
+ ["version":"PharIo\Manifest\Manifest":private]=>
+ object(PharIo\Version\Version)#12 (5) {
+ ["originalVersionString":"PharIo\Version\Version":private]=>
+ string(5) "1.0.0"
+ ["major":"PharIo\Version\Version":private]=>
+ object(PharIo\Version\VersionNumber)#13 (1) {
+ ["value":"PharIo\Version\VersionNumber":private]=>
+ int(1)
+ }
+ ["minor":"PharIo\Version\Version":private]=>
+ object(PharIo\Version\VersionNumber)#23 (1) {
+ ["value":"PharIo\Version\VersionNumber":private]=>
+ int(0)
+ }
+ ["patch":"PharIo\Version\Version":private]=>
+ object(PharIo\Version\VersionNumber)#22 (1) {
+ ["value":"PharIo\Version\VersionNumber":private]=>
+ int(0)
+ }
+ ["preReleaseSuffix":"PharIo\Version\Version":private]=>
+ NULL
+ }
+ ["type":"PharIo\Manifest\Manifest":private]=>
+ object(PharIo\Manifest\Library)#6 (0) {
+ }
+ ["copyrightInformation":"PharIo\Manifest\Manifest":private]=>
+ object(PharIo\Manifest\CopyrightInformation)#19 (2) {
+ ["authors":"PharIo\Manifest\CopyrightInformation":private]=>
+ object(PharIo\Manifest\AuthorCollection)#9 (1) {
+ ["authors":"PharIo\Manifest\AuthorCollection":private]=>
+ array(1) {
+ [0]=>
+ object(PharIo\Manifest\Author)#15 (2) {
+ ["name":"PharIo\Manifest\Author":private]=>
+ string(13) "Reiner Zufall"
+ ["email":"PharIo\Manifest\Author":private]=>
+ object(PharIo\Manifest\Email)#16 (1) {
+ ["email":"PharIo\Manifest\Email":private]=>
+ string(16) "reiner@zufall.de"
+ }
+ }
+ }
+ }
+ ["license":"PharIo\Manifest\CopyrightInformation":private]=>
+ object(PharIo\Manifest\License)#11 (2) {
+ ["name":"PharIo\Manifest\License":private]=>
+ string(12) "BSD-3-Clause"
+ ["url":"PharIo\Manifest\License":private]=>
+ object(PharIo\Manifest\Url)#18 (1) {
+ ["url":"PharIo\Manifest\Url":private]=>
+ string(26) "https://domain.tld/LICENSE"
+ }
+ }
+ }
+ ["requirements":"PharIo\Manifest\Manifest":private]=>
+ object(PharIo\Manifest\RequirementCollection)#17 (1) {
+ ["requirements":"PharIo\Manifest\RequirementCollection":private]=>
+ array(1) {
+ [0]=>
+ object(PharIo\Manifest\PhpVersionRequirement)#20 (1) {
+ ["versionConstraint":"PharIo\Manifest\PhpVersionRequirement":private]=>
+ object(PharIo\Version\SpecificMajorAndMinorVersionConstraint)#24 (3) {
+ ["originalValue":"PharIo\Version\AbstractVersionConstraint":private]=>
+ string(3) "7.0"
+ ["major":"PharIo\Version\SpecificMajorAndMinorVersionConstraint":private]=>
+ int(7)
+ ["minor":"PharIo\Version\SpecificMajorAndMinorVersionConstraint":private]=>
+ int(0)
+ }
+ }
+ }
+ }
+ ["bundledComponents":"PharIo\Manifest\Manifest":private]=>
+ object(PharIo\Manifest\BundledComponentCollection)#8 (1) {
+ ["bundledComponents":"PharIo\Manifest\BundledComponentCollection":private]=>
+ array(0) {
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+```
+
+
+### Create via API
+```php
+$bundled = new \PharIo\Manifest\BundledComponentCollection();
+$bundled->add(
+ new \PharIo\Manifest\BundledComponent('vendor/packageA', new \PharIo\Version\Version('1.2.3-dev')
+ )
+);
+
+$manifest = new PharIo\Manifest\Manifest(
+ new \PharIo\Manifest\ApplicationName('vendor/package'),
+ new \PharIo\Version\Version('1.0.0'),
+ new \PharIo\Manifest\Library(),
+ new \PharIo\Manifest\CopyrightInformation(
+ new \PharIo\Manifest\AuthorCollection(),
+ new \PharIo\Manifest\License(
+ 'BSD-3-Clause',
+ new \PharIo\Manifest\Url('https://spdx.org/licenses/BSD-3-Clause.html')
+ )
+ ),
+ new \PharIo\Manifest\RequirementCollection(),
+ $bundled
+);
+
+echo (new ManifestSerializer)->serializeToString($manifest);
+```
+
+
+ Output
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+
+
diff --git a/vendor/phar-io/manifest/composer.json b/vendor/phar-io/manifest/composer.json
new file mode 100644
index 0000000..dc5fa45
--- /dev/null
+++ b/vendor/phar-io/manifest/composer.json
@@ -0,0 +1,43 @@
+{
+ "name": "phar-io/manifest",
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "license": "BSD-3-Clause",
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues"
+ },
+ "require": {
+ "php": "^7.2 || ^8.0",
+ "ext-dom": "*",
+ "ext-phar": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1"
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ }
+}
diff --git a/vendor/phar-io/manifest/composer.lock b/vendor/phar-io/manifest/composer.lock
new file mode 100644
index 0000000..fe18e08
--- /dev/null
+++ b/vendor/phar-io/manifest/composer.lock
@@ -0,0 +1,76 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "279b3c4fe44357abd924fdcc0cfa5664",
+ "packages": [
+ {
+ "name": "phar-io/version",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "time": "2022-02-21T01:04:05+00:00"
+ }
+ ],
+ "packages-dev": [],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": "^7.2 || ^8.0",
+ "ext-dom": "*",
+ "ext-phar": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*"
+ },
+ "platform-dev": [],
+ "plugin-api-version": "2.3.0"
+}
diff --git a/vendor/phar-io/manifest/manifest.xsd b/vendor/phar-io/manifest/manifest.xsd
new file mode 100644
index 0000000..63e3f1c
--- /dev/null
+++ b/vendor/phar-io/manifest/manifest.xsd
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vendor/phar-io/manifest/src/ManifestDocumentMapper.php b/vendor/phar-io/manifest/src/ManifestDocumentMapper.php
new file mode 100644
index 0000000..3da6403
--- /dev/null
+++ b/vendor/phar-io/manifest/src/ManifestDocumentMapper.php
@@ -0,0 +1,151 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use PharIo\Version\Exception as VersionException;
+use PharIo\Version\Version;
+use PharIo\Version\VersionConstraintParser;
+use Throwable;
+use function sprintf;
+
+class ManifestDocumentMapper {
+ public function map(ManifestDocument $document): Manifest {
+ try {
+ $contains = $document->getContainsElement();
+ $type = $this->mapType($contains);
+ $copyright = $this->mapCopyright($document->getCopyrightElement());
+ $requirements = $this->mapRequirements($document->getRequiresElement());
+ $bundledComponents = $this->mapBundledComponents($document);
+
+ return new Manifest(
+ new ApplicationName($contains->getName()),
+ new Version($contains->getVersion()),
+ $type,
+ $copyright,
+ $requirements,
+ $bundledComponents
+ );
+ } catch (Throwable $e) {
+ throw new ManifestDocumentMapperException($e->getMessage(), (int)$e->getCode(), $e);
+ }
+ }
+
+ private function mapType(ContainsElement $contains): Type {
+ switch ($contains->getType()) {
+ case 'application':
+ return Type::application();
+ case 'library':
+ return Type::library();
+ case 'extension':
+ return $this->mapExtension($contains->getExtensionElement());
+ }
+
+ throw new ManifestDocumentMapperException(
+ sprintf('Unsupported type %s', $contains->getType())
+ );
+ }
+
+ private function mapCopyright(CopyrightElement $copyright): CopyrightInformation {
+ $authors = new AuthorCollection();
+
+ foreach ($copyright->getAuthorElements() as $authorElement) {
+ $authors->add(
+ new Author(
+ $authorElement->getName(),
+ $authorElement->hasEMail() ? new Email($authorElement->getEmail()) : null
+ )
+ );
+ }
+
+ $licenseElement = $copyright->getLicenseElement();
+ $license = new License(
+ $licenseElement->getType(),
+ new Url($licenseElement->getUrl())
+ );
+
+ return new CopyrightInformation(
+ $authors,
+ $license
+ );
+ }
+
+ private function mapRequirements(RequiresElement $requires): RequirementCollection {
+ $collection = new RequirementCollection();
+ $phpElement = $requires->getPHPElement();
+ $parser = new VersionConstraintParser;
+
+ try {
+ $versionConstraint = $parser->parse($phpElement->getVersion());
+ } catch (VersionException $e) {
+ throw new ManifestDocumentMapperException(
+ sprintf('Unsupported version constraint - %s', $e->getMessage()),
+ (int)$e->getCode(),
+ $e
+ );
+ }
+
+ $collection->add(
+ new PhpVersionRequirement(
+ $versionConstraint
+ )
+ );
+
+ if (!$phpElement->hasExtElements()) {
+ return $collection;
+ }
+
+ foreach ($phpElement->getExtElements() as $extElement) {
+ $collection->add(
+ new PhpExtensionRequirement($extElement->getName())
+ );
+ }
+
+ return $collection;
+ }
+
+ private function mapBundledComponents(ManifestDocument $document): BundledComponentCollection {
+ $collection = new BundledComponentCollection();
+
+ if (!$document->hasBundlesElement()) {
+ return $collection;
+ }
+
+ foreach ($document->getBundlesElement()->getComponentElements() as $componentElement) {
+ $collection->add(
+ new BundledComponent(
+ $componentElement->getName(),
+ new Version(
+ $componentElement->getVersion()
+ )
+ )
+ );
+ }
+
+ return $collection;
+ }
+
+ private function mapExtension(ExtensionElement $extension): Extension {
+ try {
+ $versionConstraint = (new VersionConstraintParser)->parse($extension->getCompatible());
+
+ return Type::extension(
+ new ApplicationName($extension->getFor()),
+ $versionConstraint
+ );
+ } catch (VersionException $e) {
+ throw new ManifestDocumentMapperException(
+ sprintf('Unsupported version constraint - %s', $e->getMessage()),
+ (int)$e->getCode(),
+ $e
+ );
+ }
+ }
+}
diff --git a/vendor/phar-io/manifest/src/ManifestLoader.php b/vendor/phar-io/manifest/src/ManifestLoader.php
new file mode 100644
index 0000000..f467d2d
--- /dev/null
+++ b/vendor/phar-io/manifest/src/ManifestLoader.php
@@ -0,0 +1,47 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use function sprintf;
+
+class ManifestLoader {
+ public static function fromFile(string $filename): Manifest {
+ try {
+ return (new ManifestDocumentMapper())->map(
+ ManifestDocument::fromFile($filename)
+ );
+ } catch (Exception $e) {
+ throw new ManifestLoaderException(
+ sprintf('Loading %s failed.', $filename),
+ (int)$e->getCode(),
+ $e
+ );
+ }
+ }
+
+ public static function fromPhar(string $filename): Manifest {
+ return self::fromFile('phar://' . $filename . '/manifest.xml');
+ }
+
+ public static function fromString(string $manifest): Manifest {
+ try {
+ return (new ManifestDocumentMapper())->map(
+ ManifestDocument::fromString($manifest)
+ );
+ } catch (Exception $e) {
+ throw new ManifestLoaderException(
+ 'Processing string failed',
+ (int)$e->getCode(),
+ $e
+ );
+ }
+ }
+}
diff --git a/vendor/phar-io/manifest/src/ManifestSerializer.php b/vendor/phar-io/manifest/src/ManifestSerializer.php
new file mode 100644
index 0000000..48b8efd
--- /dev/null
+++ b/vendor/phar-io/manifest/src/ManifestSerializer.php
@@ -0,0 +1,172 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use PharIo\Version\AnyVersionConstraint;
+use PharIo\Version\Version;
+use PharIo\Version\VersionConstraint;
+use XMLWriter;
+use function count;
+use function file_put_contents;
+use function str_repeat;
+
+/** @psalm-suppress MissingConstructor */
+class ManifestSerializer {
+ /** @var XMLWriter */
+ private $xmlWriter;
+
+ public function serializeToFile(Manifest $manifest, string $filename): void {
+ file_put_contents(
+ $filename,
+ $this->serializeToString($manifest)
+ );
+ }
+
+ public function serializeToString(Manifest $manifest): string {
+ $this->startDocument();
+
+ $this->addContains($manifest->getName(), $manifest->getVersion(), $manifest->getType());
+ $this->addCopyright($manifest->getCopyrightInformation());
+ $this->addRequirements($manifest->getRequirements());
+ $this->addBundles($manifest->getBundledComponents());
+
+ return $this->finishDocument();
+ }
+
+ private function startDocument(): void {
+ $xmlWriter = new XMLWriter();
+ $xmlWriter->openMemory();
+ $xmlWriter->setIndent(true);
+ $xmlWriter->setIndentString(str_repeat(' ', 4));
+ $xmlWriter->startDocument('1.0', 'UTF-8');
+ $xmlWriter->startElement('phar');
+ $xmlWriter->writeAttribute('xmlns', 'https://phar.io/xml/manifest/1.0');
+
+ $this->xmlWriter = $xmlWriter;
+ }
+
+ private function finishDocument(): string {
+ $this->xmlWriter->endElement();
+ $this->xmlWriter->endDocument();
+
+ return $this->xmlWriter->outputMemory();
+ }
+
+ private function addContains(ApplicationName $name, Version $version, Type $type): void {
+ $this->xmlWriter->startElement('contains');
+ $this->xmlWriter->writeAttribute('name', $name->asString());
+ $this->xmlWriter->writeAttribute('version', $version->getVersionString());
+
+ switch (true) {
+ case $type->isApplication(): {
+ $this->xmlWriter->writeAttribute('type', 'application');
+
+ break;
+ }
+
+ case $type->isLibrary(): {
+ $this->xmlWriter->writeAttribute('type', 'library');
+
+ break;
+ }
+
+ case $type->isExtension(): {
+ $this->xmlWriter->writeAttribute('type', 'extension');
+ /* @var $type Extension */
+ $this->addExtension(
+ $type->getApplicationName(),
+ $type->getVersionConstraint()
+ );
+
+ break;
+ }
+
+ default: {
+ $this->xmlWriter->writeAttribute('type', 'custom');
+ }
+ }
+
+ $this->xmlWriter->endElement();
+ }
+
+ private function addCopyright(CopyrightInformation $copyrightInformation): void {
+ $this->xmlWriter->startElement('copyright');
+
+ foreach ($copyrightInformation->getAuthors() as $author) {
+ $this->xmlWriter->startElement('author');
+ $this->xmlWriter->writeAttribute('name', $author->getName());
+ $this->xmlWriter->writeAttribute('email', $author->getEmail()->asString());
+ $this->xmlWriter->endElement();
+ }
+
+ $license = $copyrightInformation->getLicense();
+
+ $this->xmlWriter->startElement('license');
+ $this->xmlWriter->writeAttribute('type', $license->getName());
+ $this->xmlWriter->writeAttribute('url', $license->getUrl()->asString());
+ $this->xmlWriter->endElement();
+
+ $this->xmlWriter->endElement();
+ }
+
+ private function addRequirements(RequirementCollection $requirementCollection): void {
+ $phpRequirement = new AnyVersionConstraint();
+ $extensions = [];
+
+ foreach ($requirementCollection as $requirement) {
+ if ($requirement instanceof PhpVersionRequirement) {
+ $phpRequirement = $requirement->getVersionConstraint();
+
+ continue;
+ }
+
+ if ($requirement instanceof PhpExtensionRequirement) {
+ $extensions[] = $requirement->asString();
+ }
+ }
+
+ $this->xmlWriter->startElement('requires');
+ $this->xmlWriter->startElement('php');
+ $this->xmlWriter->writeAttribute('version', $phpRequirement->asString());
+
+ foreach ($extensions as $extension) {
+ $this->xmlWriter->startElement('ext');
+ $this->xmlWriter->writeAttribute('name', $extension);
+ $this->xmlWriter->endElement();
+ }
+
+ $this->xmlWriter->endElement();
+ $this->xmlWriter->endElement();
+ }
+
+ private function addBundles(BundledComponentCollection $bundledComponentCollection): void {
+ if (count($bundledComponentCollection) === 0) {
+ return;
+ }
+ $this->xmlWriter->startElement('bundles');
+
+ foreach ($bundledComponentCollection as $bundledComponent) {
+ $this->xmlWriter->startElement('component');
+ $this->xmlWriter->writeAttribute('name', $bundledComponent->getName());
+ $this->xmlWriter->writeAttribute('version', $bundledComponent->getVersion()->getVersionString());
+ $this->xmlWriter->endElement();
+ }
+
+ $this->xmlWriter->endElement();
+ }
+
+ private function addExtension(ApplicationName $applicationName, VersionConstraint $versionConstraint): void {
+ $this->xmlWriter->startElement('extension');
+ $this->xmlWriter->writeAttribute('for', $applicationName->asString());
+ $this->xmlWriter->writeAttribute('compatible', $versionConstraint->asString());
+ $this->xmlWriter->endElement();
+ }
+}
diff --git a/vendor/phar-io/manifest/src/exceptions/ElementCollectionException.php b/vendor/phar-io/manifest/src/exceptions/ElementCollectionException.php
new file mode 100644
index 0000000..7528afc
--- /dev/null
+++ b/vendor/phar-io/manifest/src/exceptions/ElementCollectionException.php
@@ -0,0 +1,16 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use InvalidArgumentException;
+
+class ElementCollectionException extends InvalidArgumentException implements Exception {
+}
diff --git a/vendor/phar-io/manifest/src/exceptions/Exception.php b/vendor/phar-io/manifest/src/exceptions/Exception.php
new file mode 100644
index 0000000..0c135d3
--- /dev/null
+++ b/vendor/phar-io/manifest/src/exceptions/Exception.php
@@ -0,0 +1,16 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use Throwable;
+
+interface Exception extends Throwable {
+}
diff --git a/vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php b/vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php
new file mode 100644
index 0000000..ecfe514
--- /dev/null
+++ b/vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php
@@ -0,0 +1,17 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use InvalidArgumentException;
+
+class InvalidApplicationNameException extends InvalidArgumentException implements Exception {
+ public const InvalidFormat = 2;
+}
diff --git a/vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php b/vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php
new file mode 100644
index 0000000..2424055
--- /dev/null
+++ b/vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php
@@ -0,0 +1,16 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use InvalidArgumentException;
+
+class InvalidEmailException extends InvalidArgumentException implements Exception {
+}
diff --git a/vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php b/vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php
new file mode 100644
index 0000000..c8b192b
--- /dev/null
+++ b/vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php
@@ -0,0 +1,16 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use InvalidArgumentException;
+
+class InvalidUrlException extends InvalidArgumentException implements Exception {
+}
diff --git a/vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php b/vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php
new file mode 100644
index 0000000..0a158e6
--- /dev/null
+++ b/vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php
@@ -0,0 +1,16 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use RuntimeException;
+
+class ManifestDocumentException extends RuntimeException implements Exception {
+}
diff --git a/vendor/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php b/vendor/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php
new file mode 100644
index 0000000..816af12
--- /dev/null
+++ b/vendor/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php
@@ -0,0 +1,47 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use LibXMLError;
+use function sprintf;
+
+class ManifestDocumentLoadingException extends \Exception implements Exception {
+ /** @var LibXMLError[] */
+ private $libxmlErrors;
+
+ /**
+ * ManifestDocumentLoadingException constructor.
+ *
+ * @param LibXMLError[] $libxmlErrors
+ */
+ public function __construct(array $libxmlErrors) {
+ $this->libxmlErrors = $libxmlErrors;
+ $first = $this->libxmlErrors[0];
+
+ parent::__construct(
+ sprintf(
+ '%s (Line: %d / Column: %d / File: %s)',
+ $first->message,
+ $first->line,
+ $first->column,
+ $first->file
+ ),
+ $first->code
+ );
+ }
+
+ /**
+ * @return LibXMLError[]
+ */
+ public function getLibxmlErrors(): array {
+ return $this->libxmlErrors;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php b/vendor/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php
new file mode 100644
index 0000000..0d1a5f5
--- /dev/null
+++ b/vendor/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php
@@ -0,0 +1,16 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use RuntimeException;
+
+class ManifestDocumentMapperException extends RuntimeException implements Exception {
+}
diff --git a/vendor/phar-io/manifest/src/exceptions/ManifestElementException.php b/vendor/phar-io/manifest/src/exceptions/ManifestElementException.php
new file mode 100644
index 0000000..46f82e3
--- /dev/null
+++ b/vendor/phar-io/manifest/src/exceptions/ManifestElementException.php
@@ -0,0 +1,16 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use RuntimeException;
+
+class ManifestElementException extends RuntimeException implements Exception {
+}
diff --git a/vendor/phar-io/manifest/src/exceptions/ManifestLoaderException.php b/vendor/phar-io/manifest/src/exceptions/ManifestLoaderException.php
new file mode 100644
index 0000000..d00ed19
--- /dev/null
+++ b/vendor/phar-io/manifest/src/exceptions/ManifestLoaderException.php
@@ -0,0 +1,14 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class ManifestLoaderException extends \Exception implements Exception {
+}
diff --git a/vendor/phar-io/manifest/src/exceptions/NoEmailAddressException.php b/vendor/phar-io/manifest/src/exceptions/NoEmailAddressException.php
new file mode 100644
index 0000000..2791312
--- /dev/null
+++ b/vendor/phar-io/manifest/src/exceptions/NoEmailAddressException.php
@@ -0,0 +1,16 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use InvalidArgumentException;
+
+class NoEmailAddressException extends InvalidArgumentException implements Exception {
+}
diff --git a/vendor/phar-io/manifest/src/values/Application.php b/vendor/phar-io/manifest/src/values/Application.php
new file mode 100644
index 0000000..11a44d9
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/Application.php
@@ -0,0 +1,17 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class Application extends Type {
+ public function isApplication(): bool {
+ return true;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/ApplicationName.php b/vendor/phar-io/manifest/src/values/ApplicationName.php
new file mode 100644
index 0000000..1a0ad1e
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/ApplicationName.php
@@ -0,0 +1,41 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use function preg_match;
+use function sprintf;
+
+class ApplicationName {
+ /** @var string */
+ private $name;
+
+ public function __construct(string $name) {
+ $this->ensureValidFormat($name);
+ $this->name = $name;
+ }
+
+ public function asString(): string {
+ return $this->name;
+ }
+
+ public function isEqual(ApplicationName $name): bool {
+ return $this->name === $name->name;
+ }
+
+ private function ensureValidFormat(string $name): void {
+ if (!preg_match('#\w/\w#', $name)) {
+ throw new InvalidApplicationNameException(
+ sprintf('Format of name "%s" is not valid - expected: vendor/packagename', $name),
+ InvalidApplicationNameException::InvalidFormat
+ );
+ }
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/Author.php b/vendor/phar-io/manifest/src/values/Author.php
new file mode 100644
index 0000000..7b243aa
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/Author.php
@@ -0,0 +1,57 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use function sprintf;
+
+class Author {
+ /** @var string */
+ private $name;
+
+ /** @var null|Email */
+ private $email;
+
+ public function __construct(string $name, ?Email $email = null) {
+ $this->name = $name;
+ $this->email = $email;
+ }
+
+ public function asString(): string {
+ if (!$this->hasEmail()) {
+ return $this->name;
+ }
+
+ return sprintf(
+ '%s <%s>',
+ $this->name,
+ $this->email->asString()
+ );
+ }
+
+ public function getName(): string {
+ return $this->name;
+ }
+
+ /**
+ * @psalm-assert-if-true Email $this->email
+ */
+ public function hasEmail(): bool {
+ return $this->email !== null;
+ }
+
+ public function getEmail(): Email {
+ if (!$this->hasEmail()) {
+ throw new NoEmailAddressException();
+ }
+
+ return $this->email;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/AuthorCollection.php b/vendor/phar-io/manifest/src/values/AuthorCollection.php
new file mode 100644
index 0000000..549876d
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/AuthorCollection.php
@@ -0,0 +1,40 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use Countable;
+use IteratorAggregate;
+use function count;
+
+/** @template-implements IteratorAggregate */
+class AuthorCollection implements Countable, IteratorAggregate {
+ /** @var Author[] */
+ private $authors = [];
+
+ public function add(Author $author): void {
+ $this->authors[] = $author;
+ }
+
+ /**
+ * @return Author[]
+ */
+ public function getAuthors(): array {
+ return $this->authors;
+ }
+
+ public function count(): int {
+ return count($this->authors);
+ }
+
+ public function getIterator(): AuthorCollectionIterator {
+ return new AuthorCollectionIterator($this);
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php b/vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php
new file mode 100644
index 0000000..36fee9f
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php
@@ -0,0 +1,47 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use Iterator;
+use function count;
+
+/** @template-implements Iterator */
+class AuthorCollectionIterator implements Iterator {
+ /** @var Author[] */
+ private $authors;
+
+ /** @var int */
+ private $position = 0;
+
+ public function __construct(AuthorCollection $authors) {
+ $this->authors = $authors->getAuthors();
+ }
+
+ public function rewind(): void {
+ $this->position = 0;
+ }
+
+ public function valid(): bool {
+ return $this->position < count($this->authors);
+ }
+
+ public function key(): int {
+ return $this->position;
+ }
+
+ public function current(): Author {
+ return $this->authors[$this->position];
+ }
+
+ public function next(): void {
+ $this->position++;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/BundledComponent.php b/vendor/phar-io/manifest/src/values/BundledComponent.php
new file mode 100644
index 0000000..5817036
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/BundledComponent.php
@@ -0,0 +1,34 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use PharIo\Version\Version;
+
+class BundledComponent {
+ /** @var string */
+ private $name;
+
+ /** @var Version */
+ private $version;
+
+ public function __construct(string $name, Version $version) {
+ $this->name = $name;
+ $this->version = $version;
+ }
+
+ public function getName(): string {
+ return $this->name;
+ }
+
+ public function getVersion(): Version {
+ return $this->version;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/BundledComponentCollection.php b/vendor/phar-io/manifest/src/values/BundledComponentCollection.php
new file mode 100644
index 0000000..28aaa06
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/BundledComponentCollection.php
@@ -0,0 +1,40 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use Countable;
+use IteratorAggregate;
+use function count;
+
+/** @template-implements IteratorAggregate */
+class BundledComponentCollection implements Countable, IteratorAggregate {
+ /** @var BundledComponent[] */
+ private $bundledComponents = [];
+
+ public function add(BundledComponent $bundledComponent): void {
+ $this->bundledComponents[] = $bundledComponent;
+ }
+
+ /**
+ * @return BundledComponent[]
+ */
+ public function getBundledComponents(): array {
+ return $this->bundledComponents;
+ }
+
+ public function count(): int {
+ return count($this->bundledComponents);
+ }
+
+ public function getIterator(): BundledComponentCollectionIterator {
+ return new BundledComponentCollectionIterator($this);
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php b/vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php
new file mode 100644
index 0000000..5c72817
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php
@@ -0,0 +1,47 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use Iterator;
+use function count;
+
+/** @template-implements Iterator */
+class BundledComponentCollectionIterator implements Iterator {
+ /** @var BundledComponent[] */
+ private $bundledComponents;
+
+ /** @var int */
+ private $position = 0;
+
+ public function __construct(BundledComponentCollection $bundledComponents) {
+ $this->bundledComponents = $bundledComponents->getBundledComponents();
+ }
+
+ public function rewind(): void {
+ $this->position = 0;
+ }
+
+ public function valid(): bool {
+ return $this->position < count($this->bundledComponents);
+ }
+
+ public function key(): int {
+ return $this->position;
+ }
+
+ public function current(): BundledComponent {
+ return $this->bundledComponents[$this->position];
+ }
+
+ public function next(): void {
+ $this->position++;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/CopyrightInformation.php b/vendor/phar-io/manifest/src/values/CopyrightInformation.php
new file mode 100644
index 0000000..b4468ed
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/CopyrightInformation.php
@@ -0,0 +1,32 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class CopyrightInformation {
+ /** @var AuthorCollection */
+ private $authors;
+
+ /** @var License */
+ private $license;
+
+ public function __construct(AuthorCollection $authors, License $license) {
+ $this->authors = $authors;
+ $this->license = $license;
+ }
+
+ public function getAuthors(): AuthorCollection {
+ return $this->authors;
+ }
+
+ public function getLicense(): License {
+ return $this->license;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/Email.php b/vendor/phar-io/manifest/src/values/Email.php
new file mode 100644
index 0000000..dbaff84
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/Email.php
@@ -0,0 +1,35 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use const FILTER_VALIDATE_EMAIL;
+use function filter_var;
+
+class Email {
+ /** @var string */
+ private $email;
+
+ public function __construct(string $email) {
+ $this->ensureEmailIsValid($email);
+
+ $this->email = $email;
+ }
+
+ public function asString(): string {
+ return $this->email;
+ }
+
+ private function ensureEmailIsValid(string $url): void {
+ if (filter_var($url, FILTER_VALIDATE_EMAIL) === false) {
+ throw new InvalidEmailException;
+ }
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/Extension.php b/vendor/phar-io/manifest/src/values/Extension.php
new file mode 100644
index 0000000..abcd2f8
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/Extension.php
@@ -0,0 +1,47 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use PharIo\Version\Version;
+use PharIo\Version\VersionConstraint;
+
+class Extension extends Type {
+ /** @var ApplicationName */
+ private $application;
+
+ /** @var VersionConstraint */
+ private $versionConstraint;
+
+ public function __construct(ApplicationName $application, VersionConstraint $versionConstraint) {
+ $this->application = $application;
+ $this->versionConstraint = $versionConstraint;
+ }
+
+ public function getApplicationName(): ApplicationName {
+ return $this->application;
+ }
+
+ public function getVersionConstraint(): VersionConstraint {
+ return $this->versionConstraint;
+ }
+
+ public function isExtension(): bool {
+ return true;
+ }
+
+ public function isExtensionFor(ApplicationName $name): bool {
+ return $this->application->isEqual($name);
+ }
+
+ public function isCompatibleWith(ApplicationName $name, Version $version): bool {
+ return $this->isExtensionFor($name) && $this->versionConstraint->complies($version);
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/Library.php b/vendor/phar-io/manifest/src/values/Library.php
new file mode 100644
index 0000000..97c292d
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/Library.php
@@ -0,0 +1,17 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class Library extends Type {
+ public function isLibrary(): bool {
+ return true;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/License.php b/vendor/phar-io/manifest/src/values/License.php
new file mode 100644
index 0000000..c2d9429
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/License.php
@@ -0,0 +1,32 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class License {
+ /** @var string */
+ private $name;
+
+ /** @var Url */
+ private $url;
+
+ public function __construct(string $name, Url $url) {
+ $this->name = $name;
+ $this->url = $url;
+ }
+
+ public function getName(): string {
+ return $this->name;
+ }
+
+ public function getUrl(): Url {
+ return $this->url;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/Manifest.php b/vendor/phar-io/manifest/src/values/Manifest.php
new file mode 100644
index 0000000..3646682
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/Manifest.php
@@ -0,0 +1,93 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use PharIo\Version\Version;
+
+class Manifest {
+ /** @var ApplicationName */
+ private $name;
+
+ /** @var Version */
+ private $version;
+
+ /** @var Type */
+ private $type;
+
+ /** @var CopyrightInformation */
+ private $copyrightInformation;
+
+ /** @var RequirementCollection */
+ private $requirements;
+
+ /** @var BundledComponentCollection */
+ private $bundledComponents;
+
+ public function __construct(ApplicationName $name, Version $version, Type $type, CopyrightInformation $copyrightInformation, RequirementCollection $requirements, BundledComponentCollection $bundledComponents) {
+ $this->name = $name;
+ $this->version = $version;
+ $this->type = $type;
+ $this->copyrightInformation = $copyrightInformation;
+ $this->requirements = $requirements;
+ $this->bundledComponents = $bundledComponents;
+ }
+
+ public function getName(): ApplicationName {
+ return $this->name;
+ }
+
+ public function getVersion(): Version {
+ return $this->version;
+ }
+
+ public function getType(): Type {
+ return $this->type;
+ }
+
+ public function getCopyrightInformation(): CopyrightInformation {
+ return $this->copyrightInformation;
+ }
+
+ public function getRequirements(): RequirementCollection {
+ return $this->requirements;
+ }
+
+ public function getBundledComponents(): BundledComponentCollection {
+ return $this->bundledComponents;
+ }
+
+ public function isApplication(): bool {
+ return $this->type->isApplication();
+ }
+
+ public function isLibrary(): bool {
+ return $this->type->isLibrary();
+ }
+
+ public function isExtension(): bool {
+ return $this->type->isExtension();
+ }
+
+ public function isExtensionFor(ApplicationName $application, ?Version $version = null): bool {
+ if (!$this->isExtension()) {
+ return false;
+ }
+
+ /** @var Extension $type */
+ $type = $this->type;
+
+ if ($version !== null) {
+ return $type->isCompatibleWith($application, $version);
+ }
+
+ return $type->isExtensionFor($application);
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php b/vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php
new file mode 100644
index 0000000..f81bd25
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php
@@ -0,0 +1,24 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class PhpExtensionRequirement implements Requirement {
+ /** @var string */
+ private $extension;
+
+ public function __construct(string $extension) {
+ $this->extension = $extension;
+ }
+
+ public function asString(): string {
+ return $this->extension;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/PhpVersionRequirement.php b/vendor/phar-io/manifest/src/values/PhpVersionRequirement.php
new file mode 100644
index 0000000..fb30c3b
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/PhpVersionRequirement.php
@@ -0,0 +1,26 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use PharIo\Version\VersionConstraint;
+
+class PhpVersionRequirement implements Requirement {
+ /** @var VersionConstraint */
+ private $versionConstraint;
+
+ public function __construct(VersionConstraint $versionConstraint) {
+ $this->versionConstraint = $versionConstraint;
+ }
+
+ public function getVersionConstraint(): VersionConstraint {
+ return $this->versionConstraint;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/Requirement.php b/vendor/phar-io/manifest/src/values/Requirement.php
new file mode 100644
index 0000000..d4b4640
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/Requirement.php
@@ -0,0 +1,14 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+interface Requirement {
+}
diff --git a/vendor/phar-io/manifest/src/values/RequirementCollection.php b/vendor/phar-io/manifest/src/values/RequirementCollection.php
new file mode 100644
index 0000000..e4fe2a1
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/RequirementCollection.php
@@ -0,0 +1,40 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use Countable;
+use IteratorAggregate;
+use function count;
+
+/** @template-implements IteratorAggregate */
+class RequirementCollection implements Countable, IteratorAggregate {
+ /** @var Requirement[] */
+ private $requirements = [];
+
+ public function add(Requirement $requirement): void {
+ $this->requirements[] = $requirement;
+ }
+
+ /**
+ * @return Requirement[]
+ */
+ public function getRequirements(): array {
+ return $this->requirements;
+ }
+
+ public function count(): int {
+ return count($this->requirements);
+ }
+
+ public function getIterator(): RequirementCollectionIterator {
+ return new RequirementCollectionIterator($this);
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php b/vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php
new file mode 100644
index 0000000..a587468
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php
@@ -0,0 +1,47 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use Iterator;
+use function count;
+
+/** @template-implements Iterator */
+class RequirementCollectionIterator implements Iterator {
+ /** @var Requirement[] */
+ private $requirements;
+
+ /** @var int */
+ private $position = 0;
+
+ public function __construct(RequirementCollection $requirements) {
+ $this->requirements = $requirements->getRequirements();
+ }
+
+ public function rewind(): void {
+ $this->position = 0;
+ }
+
+ public function valid(): bool {
+ return $this->position < count($this->requirements);
+ }
+
+ public function key(): int {
+ return $this->position;
+ }
+
+ public function current(): Requirement {
+ return $this->requirements[$this->position];
+ }
+
+ public function next(): void {
+ $this->position++;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/Type.php b/vendor/phar-io/manifest/src/values/Type.php
new file mode 100644
index 0000000..231e7fd
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/Type.php
@@ -0,0 +1,42 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use PharIo\Version\VersionConstraint;
+
+abstract class Type {
+ public static function application(): Application {
+ return new Application;
+ }
+
+ public static function library(): Library {
+ return new Library;
+ }
+
+ public static function extension(ApplicationName $application, VersionConstraint $versionConstraint): Extension {
+ return new Extension($application, $versionConstraint);
+ }
+
+ /** @psalm-assert-if-true Application $this */
+ public function isApplication(): bool {
+ return false;
+ }
+
+ /** @psalm-assert-if-true Library $this */
+ public function isLibrary(): bool {
+ return false;
+ }
+
+ /** @psalm-assert-if-true Extension $this */
+ public function isExtension(): bool {
+ return false;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/values/Url.php b/vendor/phar-io/manifest/src/values/Url.php
new file mode 100644
index 0000000..9806155
--- /dev/null
+++ b/vendor/phar-io/manifest/src/values/Url.php
@@ -0,0 +1,38 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use const FILTER_VALIDATE_URL;
+use function filter_var;
+
+class Url {
+ /** @var string */
+ private $url;
+
+ public function __construct(string $url) {
+ $this->ensureUrlIsValid($url);
+
+ $this->url = $url;
+ }
+
+ public function asString(): string {
+ return $this->url;
+ }
+
+ /**
+ * @throws InvalidUrlException
+ */
+ private function ensureUrlIsValid(string $url): void {
+ if (filter_var($url, FILTER_VALIDATE_URL) === false) {
+ throw new InvalidUrlException;
+ }
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/AuthorElement.php b/vendor/phar-io/manifest/src/xml/AuthorElement.php
new file mode 100644
index 0000000..b33eb3c
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/AuthorElement.php
@@ -0,0 +1,25 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class AuthorElement extends ManifestElement {
+ public function getName(): string {
+ return $this->getAttributeValue('name');
+ }
+
+ public function getEmail(): string {
+ return $this->getAttributeValue('email');
+ }
+
+ public function hasEMail(): bool {
+ return $this->hasAttribute('email');
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/AuthorElementCollection.php b/vendor/phar-io/manifest/src/xml/AuthorElementCollection.php
new file mode 100644
index 0000000..0a2a2a3
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/AuthorElementCollection.php
@@ -0,0 +1,19 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class AuthorElementCollection extends ElementCollection {
+ public function current(): AuthorElement {
+ return new AuthorElement(
+ $this->getCurrentElement()
+ );
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/BundlesElement.php b/vendor/phar-io/manifest/src/xml/BundlesElement.php
new file mode 100644
index 0000000..ef721a6
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/BundlesElement.php
@@ -0,0 +1,19 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class BundlesElement extends ManifestElement {
+ public function getComponentElements(): ComponentElementCollection {
+ return new ComponentElementCollection(
+ $this->getChildrenByName('component')
+ );
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/ComponentElement.php b/vendor/phar-io/manifest/src/xml/ComponentElement.php
new file mode 100644
index 0000000..84373c4
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/ComponentElement.php
@@ -0,0 +1,21 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class ComponentElement extends ManifestElement {
+ public function getName(): string {
+ return $this->getAttributeValue('name');
+ }
+
+ public function getVersion(): string {
+ return $this->getAttributeValue('version');
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/ComponentElementCollection.php b/vendor/phar-io/manifest/src/xml/ComponentElementCollection.php
new file mode 100644
index 0000000..cd9ad5d
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/ComponentElementCollection.php
@@ -0,0 +1,19 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class ComponentElementCollection extends ElementCollection {
+ public function current(): ComponentElement {
+ return new ComponentElement(
+ $this->getCurrentElement()
+ );
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/ContainsElement.php b/vendor/phar-io/manifest/src/xml/ContainsElement.php
new file mode 100644
index 0000000..55a9c60
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/ContainsElement.php
@@ -0,0 +1,31 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class ContainsElement extends ManifestElement {
+ public function getName(): string {
+ return $this->getAttributeValue('name');
+ }
+
+ public function getVersion(): string {
+ return $this->getAttributeValue('version');
+ }
+
+ public function getType(): string {
+ return $this->getAttributeValue('type');
+ }
+
+ public function getExtensionElement(): ExtensionElement {
+ return new ExtensionElement(
+ $this->getChildByName('extension')
+ );
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/CopyrightElement.php b/vendor/phar-io/manifest/src/xml/CopyrightElement.php
new file mode 100644
index 0000000..c11415a
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/CopyrightElement.php
@@ -0,0 +1,25 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class CopyrightElement extends ManifestElement {
+ public function getAuthorElements(): AuthorElementCollection {
+ return new AuthorElementCollection(
+ $this->getChildrenByName('author')
+ );
+ }
+
+ public function getLicenseElement(): LicenseElement {
+ return new LicenseElement(
+ $this->getChildByName('license')
+ );
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/ElementCollection.php b/vendor/phar-io/manifest/src/xml/ElementCollection.php
new file mode 100644
index 0000000..9e1de56
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/ElementCollection.php
@@ -0,0 +1,68 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use DOMElement;
+use DOMNodeList;
+use Iterator;
+use ReturnTypeWillChange;
+use function count;
+use function get_class;
+use function sprintf;
+
+/** @template-implements Iterator */
+abstract class ElementCollection implements Iterator {
+ /** @var DOMElement[] */
+ private $nodes = [];
+
+ /** @var int */
+ private $position;
+
+ public function __construct(DOMNodeList $nodeList) {
+ $this->position = 0;
+ $this->importNodes($nodeList);
+ }
+
+ #[ReturnTypeWillChange]
+ abstract public function current();
+
+ public function next(): void {
+ $this->position++;
+ }
+
+ public function key(): int {
+ return $this->position;
+ }
+
+ public function valid(): bool {
+ return $this->position < count($this->nodes);
+ }
+
+ public function rewind(): void {
+ $this->position = 0;
+ }
+
+ protected function getCurrentElement(): DOMElement {
+ return $this->nodes[$this->position];
+ }
+
+ private function importNodes(DOMNodeList $nodeList): void {
+ foreach ($nodeList as $node) {
+ if (!$node instanceof DOMElement) {
+ throw new ElementCollectionException(
+ sprintf('\DOMElement expected, got \%s', get_class($node))
+ );
+ }
+
+ $this->nodes[] = $node;
+ }
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/ExtElement.php b/vendor/phar-io/manifest/src/xml/ExtElement.php
new file mode 100644
index 0000000..6a88a05
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/ExtElement.php
@@ -0,0 +1,17 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class ExtElement extends ManifestElement {
+ public function getName(): string {
+ return $this->getAttributeValue('name');
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/ExtElementCollection.php b/vendor/phar-io/manifest/src/xml/ExtElementCollection.php
new file mode 100644
index 0000000..3eec946
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/ExtElementCollection.php
@@ -0,0 +1,19 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class ExtElementCollection extends ElementCollection {
+ public function current(): ExtElement {
+ return new ExtElement(
+ $this->getCurrentElement()
+ );
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/ExtensionElement.php b/vendor/phar-io/manifest/src/xml/ExtensionElement.php
new file mode 100644
index 0000000..22016a0
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/ExtensionElement.php
@@ -0,0 +1,21 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class ExtensionElement extends ManifestElement {
+ public function getFor(): string {
+ return $this->getAttributeValue('for');
+ }
+
+ public function getCompatible(): string {
+ return $this->getAttributeValue('compatible');
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/LicenseElement.php b/vendor/phar-io/manifest/src/xml/LicenseElement.php
new file mode 100644
index 0000000..d9f4cb2
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/LicenseElement.php
@@ -0,0 +1,21 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class LicenseElement extends ManifestElement {
+ public function getType(): string {
+ return $this->getAttributeValue('type');
+ }
+
+ public function getUrl(): string {
+ return $this->getAttributeValue('url');
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/ManifestDocument.php b/vendor/phar-io/manifest/src/xml/ManifestDocument.php
new file mode 100644
index 0000000..8745868
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/ManifestDocument.php
@@ -0,0 +1,115 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use DOMDocument;
+use DOMElement;
+use Throwable;
+use function count;
+use function file_get_contents;
+use function is_file;
+use function libxml_clear_errors;
+use function libxml_get_errors;
+use function libxml_use_internal_errors;
+use function sprintf;
+
+class ManifestDocument {
+ public const XMLNS = 'https://phar.io/xml/manifest/1.0';
+
+ /** @var DOMDocument */
+ private $dom;
+
+ public static function fromFile(string $filename): ManifestDocument {
+ if (!is_file($filename)) {
+ throw new ManifestDocumentException(
+ sprintf('File "%s" not found', $filename)
+ );
+ }
+
+ return self::fromString(
+ file_get_contents($filename)
+ );
+ }
+
+ public static function fromString(string $xmlString): ManifestDocument {
+ $prev = libxml_use_internal_errors(true);
+ libxml_clear_errors();
+
+ try {
+ $dom = new DOMDocument();
+ $dom->loadXML($xmlString);
+ $errors = libxml_get_errors();
+ libxml_use_internal_errors($prev);
+ } catch (Throwable $t) {
+ throw new ManifestDocumentException($t->getMessage(), 0, $t);
+ }
+
+ if (count($errors) !== 0) {
+ throw new ManifestDocumentLoadingException($errors);
+ }
+
+ return new self($dom);
+ }
+
+ private function __construct(DOMDocument $dom) {
+ $this->ensureCorrectDocumentType($dom);
+
+ $this->dom = $dom;
+ }
+
+ public function getContainsElement(): ContainsElement {
+ return new ContainsElement(
+ $this->fetchElementByName('contains')
+ );
+ }
+
+ public function getCopyrightElement(): CopyrightElement {
+ return new CopyrightElement(
+ $this->fetchElementByName('copyright')
+ );
+ }
+
+ public function getRequiresElement(): RequiresElement {
+ return new RequiresElement(
+ $this->fetchElementByName('requires')
+ );
+ }
+
+ public function hasBundlesElement(): bool {
+ return $this->dom->getElementsByTagNameNS(self::XMLNS, 'bundles')->length === 1;
+ }
+
+ public function getBundlesElement(): BundlesElement {
+ return new BundlesElement(
+ $this->fetchElementByName('bundles')
+ );
+ }
+
+ private function ensureCorrectDocumentType(DOMDocument $dom): void {
+ $root = $dom->documentElement;
+
+ if ($root->localName !== 'phar' || $root->namespaceURI !== self::XMLNS) {
+ throw new ManifestDocumentException('Not a phar.io manifest document');
+ }
+ }
+
+ private function fetchElementByName(string $elementName): DOMElement {
+ $element = $this->dom->getElementsByTagNameNS(self::XMLNS, $elementName)->item(0);
+
+ if (!$element instanceof DOMElement) {
+ throw new ManifestDocumentException(
+ sprintf('Element %s missing', $elementName)
+ );
+ }
+
+ return $element;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/ManifestElement.php b/vendor/phar-io/manifest/src/xml/ManifestElement.php
new file mode 100644
index 0000000..461ba0c
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/ManifestElement.php
@@ -0,0 +1,72 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+use DOMElement;
+use DOMNodeList;
+use function sprintf;
+
+class ManifestElement {
+ public const XMLNS = 'https://phar.io/xml/manifest/1.0';
+
+ /** @var DOMElement */
+ private $element;
+
+ public function __construct(DOMElement $element) {
+ $this->element = $element;
+ }
+
+ protected function getAttributeValue(string $name): string {
+ if (!$this->element->hasAttribute($name)) {
+ throw new ManifestElementException(
+ sprintf(
+ 'Attribute %s not set on element %s',
+ $name,
+ $this->element->localName
+ )
+ );
+ }
+
+ return $this->element->getAttribute($name);
+ }
+
+ protected function hasAttribute(string $name): bool {
+ return $this->element->hasAttribute($name);
+ }
+
+ protected function getChildByName(string $elementName): DOMElement {
+ $element = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->item(0);
+
+ if (!$element instanceof DOMElement) {
+ throw new ManifestElementException(
+ sprintf('Element %s missing', $elementName)
+ );
+ }
+
+ return $element;
+ }
+
+ protected function getChildrenByName(string $elementName): DOMNodeList {
+ $elementList = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName);
+
+ if ($elementList->length === 0) {
+ throw new ManifestElementException(
+ sprintf('Element(s) %s missing', $elementName)
+ );
+ }
+
+ return $elementList;
+ }
+
+ protected function hasChild(string $elementName): bool {
+ return $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->length !== 0;
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/PhpElement.php b/vendor/phar-io/manifest/src/xml/PhpElement.php
new file mode 100644
index 0000000..9340c2e
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/PhpElement.php
@@ -0,0 +1,27 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class PhpElement extends ManifestElement {
+ public function getVersion(): string {
+ return $this->getAttributeValue('version');
+ }
+
+ public function hasExtElements(): bool {
+ return $this->hasChild('ext');
+ }
+
+ public function getExtElements(): ExtElementCollection {
+ return new ExtElementCollection(
+ $this->getChildrenByName('ext')
+ );
+ }
+}
diff --git a/vendor/phar-io/manifest/src/xml/RequiresElement.php b/vendor/phar-io/manifest/src/xml/RequiresElement.php
new file mode 100644
index 0000000..73ba54c
--- /dev/null
+++ b/vendor/phar-io/manifest/src/xml/RequiresElement.php
@@ -0,0 +1,19 @@
+, Sebastian Heuer , Sebastian Bergmann and contributors
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+namespace PharIo\Manifest;
+
+class RequiresElement extends ManifestElement {
+ public function getPHPElement(): PhpElement {
+ return new PhpElement(
+ $this->getChildByName('php')
+ );
+ }
+}
diff --git a/vendor/phar-io/manifest/tools/php-cs-fixer.d/PhpdocSingleLineVarFixer.php b/vendor/phar-io/manifest/tools/php-cs-fixer.d/PhpdocSingleLineVarFixer.php
new file mode 100644
index 0000000..ea5414e
--- /dev/null
+++ b/vendor/phar-io/manifest/tools/php-cs-fixer.d/PhpdocSingleLineVarFixer.php
@@ -0,0 +1,72 @@
+isTokenKindFound(T_DOC_COMMENT);
+ }
+
+ public function isRisky(): bool {
+ return false;
+ }
+
+ public function fix(\SplFileInfo $file, Tokens $tokens): void {
+ foreach($tokens as $index => $token) {
+ if (!$token->isGivenKind(T_DOC_COMMENT)) {
+ continue;
+ }
+ if (\stripos($token->getContent(), '@var') === false) {
+ continue;
+ }
+
+ if (preg_match('#^/\*\*[\s\*]+(@var[^\r\n]+)[\s\*]*\*\/$#u', $token->getContent(), $matches) !== 1) {
+ continue;
+ }
+ $newContent = '/** ' . \rtrim($matches[1]) . ' */';
+ if ($newContent === $token->getContent()) {
+ continue;
+ }
+ $tokens[$index] = new Token([T_DOC_COMMENT, $newContent]);
+ }
+ }
+
+ public function getPriority(): int {
+ return 0;
+ }
+
+ public function getName(): string {
+ return 'PharIo/phpdoc_single_line_var_fixer';
+ }
+
+ public function supports(\SplFileInfo $file): bool {
+ return true;
+ }
+
+}
diff --git a/vendor/phar-io/manifest/tools/php-cs-fixer.d/header.txt b/vendor/phar-io/manifest/tools/php-cs-fixer.d/header.txt
new file mode 100644
index 0000000..dc8c4ff
--- /dev/null
+++ b/vendor/phar-io/manifest/tools/php-cs-fixer.d/header.txt
@@ -0,0 +1,6 @@
+This file is part of PharIo\Manifest.
+
+Copyright (c) Arne Blankerts , Sebastian Heuer , Sebastian Bergmann and contributors
+
+For the full copyright and license information, please view the LICENSE
+file that was distributed with this source code.
diff --git a/vendor/phar-io/version/CHANGELOG.md b/vendor/phar-io/version/CHANGELOG.md
new file mode 100644
index 0000000..4c0edfa
--- /dev/null
+++ b/vendor/phar-io/version/CHANGELOG.md
@@ -0,0 +1,142 @@
+# Changelog
+
+All notable changes to phar-io/version are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
+
+## [3.2.1] - 2022-02-21
+
+### Fixed
+
+- Have ExactVersionConstraint honor build metadata (added in 3.2.0)
+
+
+## [3.2.0] - 2022-02-21
+
+### Added
+
+- Build metadata is now supported and considered for equality checks only
+
+
+## [3.1.1] - 2022-02-07
+
+### Fixed
+
+- [#28](https://github.com/phar-io/version/issues/28): `VersionConstraintParser` does not support logical OR represented by single pipe (|) (Thanks @llaville)
+
+
+## [3.1.0] - 2021-02-23
+
+### Changed
+
+- Internal Refactoring
+- More scalar types
+
+### Added
+
+- [#24](https://github.com/phar-io/version/issues/24): `Version::getOriginalString()` added (Thanks @addshore)
+- Version constraints using the caret operator (`^`) now honor pre-1.0 releases, e.g. `^0.3` translates to `0.3.*`)
+- Various integration tests for version constraint processing
+
+### Fixed
+
+- [#23](https://github.com/phar-io/version/pull/23): Tilde operator without patch level
+
+
+
+## [3.0.4] - 14.12.2020
+
+### Fixed
+
+- [#22](https://github.com/phar-io/version/pull/22): make dev suffix rank works for uppercase too
+
+## [3.0.3] - 30.11.2020
+
+### Added
+
+- Comparator method `Version::equals()` added
+
+
+## [3.0.2] - 27.06.2020
+
+This release now supports PHP 7.2+ and PHP ^8.0. No other changes included.
+
+
+## [3.0.1] - 09.05.2020
+
+__Potential BC Break Notice:__
+`Version::getVersionString()` no longer returns `v` prefixes in case the "input"
+string contained one. These are not part of the semver specs
+(see https://semver.org/#is-v123-a-semantic-version) and get stripped out.
+As of Version 3.1.0 `Version::getOriginalString()` can be used to still
+retrieve it as given.
+
+### Changed
+
+- Internal Refactoring
+- More scalar types
+
+### Fixed
+
+- Fixed Constraint processing Regression for ^1.2 and ~1.2
+
+
+## [3.0.0] - 05.05.2020
+
+### Changed
+
+- Require PHP 7.2+
+- All code now uses strict mode
+- Scalar types have been added as needed
+
+### Added
+
+- The technically invalid format using 'v' prefix ("v1.2.3") is now properly supported
+
+
+## [2.0.1] - 08.07.2018
+
+### Fixed
+
+- Versions without a pre-release suffix are now always considered greater
+than versions with a pre-release suffix. Example: `3.0.0 > 3.0.0-alpha.1`
+
+
+## [2.0.0] - 23.06.2018
+
+Changes to public API:
+
+- `PreReleaseSuffix::construct()`: optional parameter `$number` removed
+- `PreReleaseSuffix::isGreaterThan()`: introduced
+- `Version::hasPreReleaseSuffix()`: introduced
+
+### Added
+
+- [#11](https://github.com/phar-io/version/issues/11): Added support for pre-release version suffixes. Supported values are:
+ - `dev`
+ - `beta` (also abbreviated form `b`)
+ - `rc`
+ - `alpha` (also abbreviated form `a`)
+ - `patch` (also abbreviated form `p`)
+
+ All values can be followed by a number, e.g. `beta3`.
+
+ When comparing versions, the pre-release suffix is taken into account. Example:
+`1.5.0 > 1.5.0-beta1 > 1.5.0-alpha3 > 1.5.0-alpha2 > 1.5.0-dev11`
+
+### Changed
+
+- reorganized the source directories
+
+### Fixed
+
+- [#10](https://github.com/phar-io/version/issues/10): Version numbers containing
+a numeric suffix as seen in Debian packages are now supported.
+
+
+[3.1.0]: https://github.com/phar-io/version/compare/3.0.4...3.1.0
+[3.0.4]: https://github.com/phar-io/version/compare/3.0.3...3.0.4
+[3.0.3]: https://github.com/phar-io/version/compare/3.0.2...3.0.3
+[3.0.2]: https://github.com/phar-io/version/compare/3.0.1...3.0.2
+[3.0.1]: https://github.com/phar-io/version/compare/3.0.0...3.0.1
+[3.0.0]: https://github.com/phar-io/version/compare/2.0.1...3.0.0
+[2.0.1]: https://github.com/phar-io/version/compare/2.0.0...2.0.1
+[2.0.0]: https://github.com/phar-io/version/compare/1.0.1...2.0.0
diff --git a/vendor/phar-io/version/LICENSE b/vendor/phar-io/version/LICENSE
new file mode 100644
index 0000000..ce32758
--- /dev/null
+++ b/vendor/phar-io/version/LICENSE
@@ -0,0 +1,29 @@
+Copyright (c) 2016-2017 Arne Blankerts , Sebastian Heuer