From 7e9e3f3992c6c99b77e0612d43262e9d5405bb6f Mon Sep 17 00:00:00 2001 From: Robert Deutz Date: Sun, 22 Jul 2018 17:28:56 +0200 Subject: [PATCH 01/13] remove files --- libraries/vendor/autoload.php | 7 - libraries/vendor/bin/generate-defuse-key | 1 - libraries/vendor/composer/ClassLoader.php | 445 - libraries/vendor/composer/LICENSE | 21 - .../vendor/composer/autoload_classmap.php | 996 - libraries/vendor/composer/autoload_files.php | 29 - .../vendor/composer/autoload_namespaces.php | 9 - libraries/vendor/composer/autoload_psr4.php | 56 - libraries/vendor/composer/autoload_real.php | 70 - libraries/vendor/composer/autoload_static.php | 1302 - libraries/vendor/composer/ca-bundle/LICENSE | 19 - .../vendor/composer/ca-bundle/res/cacert.pem | 3338 -- .../composer/ca-bundle/src/CaBundle.php | 308 - libraries/vendor/composer/installed.json | 2702 -- .../vendor/defuse/php-encryption/LICENSE | 21 - .../php-encryption/bin/generate-defuse-key | 14 - .../vendor/defuse/php-encryption/src/Core.php | 448 - .../defuse/php-encryption/src/Crypto.php | 445 - .../defuse/php-encryption/src/DerivedKeys.php | 50 - .../defuse/php-encryption/src/Encoding.php | 268 - .../src/Exception/BadFormatException.php | 7 - .../src/Exception/CryptoException.php | 7 - .../EnvironmentIsBrokenException.php | 7 - .../src/Exception/IOException.php | 7 - .../WrongKeyOrModifiedCiphertextException.php | 7 - .../vendor/defuse/php-encryption/src/File.php | 762 - .../vendor/defuse/php-encryption/src/Key.php | 94 - .../php-encryption/src/KeyOrPassword.php | 149 - .../src/KeyProtectedByPassword.php | 145 - .../php-encryption/src/RuntimeTests.php | 228 - libraries/vendor/doctrine/inflector/LICENSE | 19 - .../Doctrine/Common/Inflector/Inflector.php | 499 - libraries/vendor/fig/link-util/LICENSE.md | 21 - .../src/EvolvableLinkProviderTrait.php | 40 - .../fig/link-util/src/EvolvableLinkTrait.php | 84 - .../fig/link-util/src/GenericLinkProvider.php | 29 - libraries/vendor/fig/link-util/src/Link.php | 27 - .../fig/link-util/src/LinkProviderTrait.php | 44 - .../vendor/fig/link-util/src/LinkTrait.php | 73 - .../fig/link-util/src/TemplatedHrefTrait.php | 23 - libraries/vendor/google/recaptcha/LICENSE | 29 - .../recaptcha/src/ReCaptcha/ReCaptcha.php | 98 - .../recaptcha/src/ReCaptcha/RequestMethod.php | 42 - .../src/ReCaptcha/RequestMethod/Curl.php | 74 - .../src/ReCaptcha/RequestMethod/CurlPost.php | 88 - .../src/ReCaptcha/RequestMethod/Post.php | 70 - .../src/ReCaptcha/RequestMethod/Socket.php | 104 - .../ReCaptcha/RequestMethod/SocketPost.php | 121 - .../src/ReCaptcha/RequestParameters.php | 103 - .../recaptcha/src/ReCaptcha/Response.php | 122 - .../vendor/google/recaptcha/src/autoload.php | 38 - libraries/vendor/joomla/application/LICENSE | 340 - .../application/src/AbstractApplication.php | 225 - .../src/AbstractWebApplication.php | 1072 - .../application/src/ApplicationEvents.php | 59 - .../ContainerControllerResolver.php | 60 - .../src/Controller/ControllerResolver.php | 129 - .../ControllerResolverInterface.php | 31 - .../src/Event/ApplicationErrorEvent.php | 70 - .../src/Event/ApplicationEvent.php | 55 - .../src/Exception/UnableToWriteBody.php | 30 - .../joomla/application/src/Web/WebClient.php | 653 - .../joomla/application/src/WebApplication.php | 99 - libraries/vendor/joomla/archive/LICENSE | 340 - .../vendor/joomla/archive/src/Archive.php | 233 - libraries/vendor/joomla/archive/src/Bzip2.php | 152 - .../archive/src/ExtractableInterface.php | 39 - libraries/vendor/joomla/archive/src/Gzip.php | 215 - libraries/vendor/joomla/archive/src/Tar.php | 253 - libraries/vendor/joomla/archive/src/Zip.php | 634 - .../vendor/joomla/authentication/LICENSE | 504 - ...UsernamePasswordAuthenticationStrategy.php | 120 - .../authentication/src/Authentication.php | 149 - .../src/AuthenticationStrategyInterface.php | 35 - .../src/Password/Argon2iHandler.php | 130 - .../src/Password/BCryptHandler.php | 60 - .../src/Password/HandlerInterface.php | 50 - .../src/Strategies/DatabaseStrategy.php | 127 - .../src/Strategies/LocalStrategy.php | 91 - libraries/vendor/joomla/console/LICENSE | 340 - .../joomla/console/src/AbstractCommand.php | 490 - .../vendor/joomla/console/src/Application.php | 1164 - .../console/src/Command/HelpCommand.php | 65 - .../console/src/Command/ListCommand.php | 65 - .../joomla/console/src/CommandInterface.php | 235 - .../joomla/console/src/ConsoleEvents.php | 39 - .../src/Descriptor/ApplicationDescription.php | 243 - .../console/src/Descriptor/TextDescriptor.php | 280 - .../src/Event/BeforeCommandExecuteEvent.php | 91 - .../console/src/Event/ConsoleErrorEvent.php | 109 - .../joomla/console/src/Event/ConsoleEvent.php | 79 - .../console/src/Event/TerminateEvent.php | 71 - .../console/src/Helper/DescriptorHelper.php | 49 - .../joomla/console/src/Input/JoomlaInput.php | 80 - .../console/src/Loader/ContainerLoader.php | 97 - .../console/src/Loader/LoaderInterface.php | 52 - libraries/vendor/joomla/controller/LICENSE | 340 - .../controller/src/AbstractController.php | 154 - .../controller/src/ControllerInterface.php | 30 - libraries/vendor/joomla/crypt/LICENSE | 340 - .../vendor/joomla/crypt/src/Cipher/Crypto.php | 139 - .../joomla/crypt/src/Cipher/OpenSSL.php | 145 - .../vendor/joomla/crypt/src/Cipher/Sodium.php | 143 - .../joomla/crypt/src/CipherInterface.php | 61 - libraries/vendor/joomla/crypt/src/Crypt.php | 125 - .../src/Exception/InvalidKeyTypeException.php | 30 - libraries/vendor/joomla/crypt/src/Key.php | 96 - libraries/vendor/joomla/data/LICENSE | 340 - .../vendor/joomla/data/src/DataObject.php | 330 - libraries/vendor/joomla/data/src/DataSet.php | 604 - .../joomla/data/src/DumpableInterface.php | 31 - libraries/vendor/joomla/database/LICENSE | 340 - .../joomla/database/src/DatabaseDriver.php | 1901 -- .../joomla/database/src/DatabaseEvents.php | 46 - .../joomla/database/src/DatabaseExporter.php | 235 - .../joomla/database/src/DatabaseFactory.php | 180 - .../joomla/database/src/DatabaseImporter.php | 318 - .../joomla/database/src/DatabaseInterface.php | 527 - .../joomla/database/src/DatabaseIterator.php | 235 - .../joomla/database/src/DatabaseQuery.php | 2033 -- .../database/src/Event/ConnectionEvent.php | 55 - .../Exception/ConnectionFailureException.php | 34 - .../Exception/ExecutionFailureException.php | 56 - .../PrepareStatementFailureException.php | 34 - .../Exception/UnsupportedAdapterException.php | 18 - .../vendor/joomla/database/src/FetchMode.php | 87 - .../joomla/database/src/FetchOrientation.php | 76 - .../database/src/Monitor/ChainedMonitor.php | 73 - .../database/src/Monitor/LoggingMonitor.php | 56 - .../joomla/database/src/Mysql/MysqlDriver.php | 621 - .../database/src/Mysql/MysqlExporter.php | 113 - .../database/src/Mysql/MysqlImporter.php | 432 - .../joomla/database/src/Mysql/MysqlQuery.php | 71 - .../database/src/Mysqli/MysqliDriver.php | 938 - .../database/src/Mysqli/MysqliExporter.php | 113 - .../database/src/Mysqli/MysqliImporter.php | 429 - .../database/src/Mysqli/MysqliQuery.php | 230 - .../database/src/Mysqli/MysqliStatement.php | 623 - .../joomla/database/src/ParameterType.php | 66 - .../joomla/database/src/Pdo/PdoDriver.php | 734 - .../joomla/database/src/Pdo/PdoQuery.php | 188 - .../joomla/database/src/Pdo/PdoStatement.php | 30 - .../joomla/database/src/Pgsql/PgsqlDriver.php | 962 - .../database/src/Pgsql/PgsqlExporter.php | 120 - .../database/src/Pgsql/PgsqlImporter.php | 538 - .../joomla/database/src/Pgsql/PgsqlQuery.php | 259 - .../database/src/Query/LimitableInterface.php | 47 - .../database/src/Query/MysqlQueryBuilder.php | 168 - .../src/Query/PostgresqlQueryBuilder.php | 459 - .../src/Query/PreparableInterface.php | 50 - .../database/src/Query/QueryElement.php | 146 - .../joomla/database/src/QueryInterface.php | 633 - .../database/src/QueryMonitorInterface.php | 37 - .../database/src/Service/DatabaseProvider.php | 56 - .../database/src/Sqlazure/SqlazureDriver.php | 28 - .../database/src/Sqlazure/SqlazureQuery.php | 30 - .../database/src/Sqlite/SqliteDriver.php | 513 - .../database/src/Sqlite/SqliteQuery.php | 259 - .../database/src/Sqlsrv/SqlsrvDriver.php | 950 - .../database/src/Sqlsrv/SqlsrvQuery.php | 1325 - .../database/src/Sqlsrv/SqlsrvStatement.php | 416 - .../database/src/StatementInterface.php | 115 - .../database/src/UTF8MB4SupportInterface.php | 39 - libraries/vendor/joomla/di/LICENSE | 340 - libraries/vendor/joomla/di/src/Container.php | 652 - .../joomla/di/src/ContainerAwareInterface.php | 30 - .../joomla/di/src/ContainerAwareTrait.php | 61 - .../Exception/ContainerNotFoundException.php | 20 - .../DependencyResolutionException.php | 20 - .../di/src/Exception/KeyNotFoundException.php | 20 - .../src/Exception/ProtectedKeyException.php | 20 - libraries/vendor/joomla/di/src/Resource.php | 217 - .../di/src/ServiceProviderInterface.php | 28 - libraries/vendor/joomla/event/LICENSE | 340 - .../vendor/joomla/event/src/AbstractEvent.php | 207 - .../joomla/event/src/DelegatingDispatcher.php | 156 - .../vendor/joomla/event/src/Dispatcher.php | 456 - .../event/src/DispatcherAwareInterface.php | 28 - .../joomla/event/src/DispatcherAwareTrait.php | 59 - .../joomla/event/src/DispatcherInterface.php | 103 - libraries/vendor/joomla/event/src/Event.php | 150 - .../joomla/event/src/EventImmutable.php | 102 - .../joomla/event/src/EventInterface.php | 57 - .../event/src/ListenersPriorityQueue.php | 163 - .../vendor/joomla/event/src/Priority.php | 34 - .../joomla/event/src/SubscriberInterface.php | 36 - libraries/vendor/joomla/filesystem/LICENSE | 340 - .../en-GB.lib_joomla_filesystem_patcher.ini | 13 - .../vendor/joomla/filesystem/src/Buffer.php | 196 - .../filesystem/src/Clients/FtpClient.php | 1796 -- .../src/Exception/FilesystemException.php | 18 - .../vendor/joomla/filesystem/src/File.php | 260 - .../vendor/joomla/filesystem/src/Folder.php | 563 - .../vendor/joomla/filesystem/src/Helper.php | 299 - .../vendor/joomla/filesystem/src/Patcher.php | 544 - .../vendor/joomla/filesystem/src/Path.php | 307 - .../vendor/joomla/filesystem/src/Stream.php | 1441 - .../joomla/filesystem/src/Stream/String.php | 22 - .../filesystem/src/Stream/StringWrapper.php | 287 - .../src/Support/StringController.php | 70 - libraries/vendor/joomla/filter/LICENSE | 340 - .../vendor/joomla/filter/src/InputFilter.php | 1053 - .../vendor/joomla/filter/src/OutputFilter.php | 214 - libraries/vendor/joomla/http/LICENSE | 340 - .../joomla/http/src/AbstractTransport.php | 95 - .../InvalidResponseCodeException.php | 18 - .../Exception/UnexpectedResponseException.php | 56 - libraries/vendor/joomla/http/src/Http.php | 308 - .../vendor/joomla/http/src/HttpFactory.php | 138 - libraries/vendor/joomla/http/src/Response.php | 61 - .../vendor/joomla/http/src/Transport/Curl.php | 324 - .../joomla/http/src/Transport/Socket.php | 323 - .../joomla/http/src/Transport/Stream.php | 266 - .../joomla/http/src/TransportInterface.php | 44 - libraries/vendor/joomla/image/LICENSE | 340 - .../image/src/Filter/Backgroundfill.php | 136 - .../joomla/image/src/Filter/Brightness.php | 42 - .../joomla/image/src/Filter/Contrast.php | 42 - .../joomla/image/src/Filter/Edgedetect.php | 35 - .../vendor/joomla/image/src/Filter/Emboss.php | 35 - .../joomla/image/src/Filter/Grayscale.php | 35 - .../vendor/joomla/image/src/Filter/Negate.php | 35 - .../joomla/image/src/Filter/Sketchy.php | 35 - .../vendor/joomla/image/src/Filter/Smooth.php | 42 - libraries/vendor/joomla/image/src/Image.php | 1185 - .../vendor/joomla/image/src/ImageFilter.php | 90 - libraries/vendor/joomla/input/LICENSE | 340 - libraries/vendor/joomla/input/src/Cli.php | 217 - libraries/vendor/joomla/input/src/Cookie.php | 90 - libraries/vendor/joomla/input/src/Files.php | 127 - libraries/vendor/joomla/input/src/Input.php | 406 - libraries/vendor/joomla/input/src/Json.php | 86 - libraries/vendor/joomla/ldap/LICENSE | 340 - .../vendor/joomla/ldap/src/LdapClient.php | 807 - libraries/vendor/joomla/oauth1/LICENSE | 340 - libraries/vendor/joomla/oauth1/src/Client.php | 623 - libraries/vendor/joomla/oauth2/LICENSE | 340 - libraries/vendor/joomla/oauth2/src/Client.php | 419 - libraries/vendor/joomla/registry/LICENSE | 340 - .../vendor/joomla/registry/src/Factory.php | 56 - .../vendor/joomla/registry/src/Format/Ini.php | 364 - .../joomla/registry/src/Format/Json.php | 78 - .../vendor/joomla/registry/src/Format/Php.php | 136 - .../vendor/joomla/registry/src/Format/Xml.php | 164 - .../joomla/registry/src/Format/Yaml.php | 84 - .../joomla/registry/src/FormatInterface.php | 41 - .../vendor/joomla/registry/src/Registry.php | 852 - libraries/vendor/joomla/session/LICENSE | 340 - .../vendor/joomla/session/meta/sql/mysql.sql | 6 - .../vendor/joomla/session/meta/sql/pgsql.sql | 6 - .../vendor/joomla/session/meta/sql/sqlite.sql | 6 - .../vendor/joomla/session/meta/sql/sqlsrv.sql | 9 - .../src/Exception/InvalidSessionException.php | 18 - .../session/src/Handler/ApcuHandler.php | 145 - .../session/src/Handler/DatabaseHandler.php | 316 - .../session/src/Handler/FilesystemHandler.php | 79 - .../session/src/Handler/MemcachedHandler.php | 163 - .../session/src/Handler/RedisHandler.php | 167 - .../session/src/Handler/WincacheHandler.php | 44 - .../joomla/session/src/HandlerInterface.php | 26 - .../vendor/joomla/session/src/Session.php | 840 - .../joomla/session/src/SessionEvent.php | 54 - .../joomla/session/src/SessionEvents.php | 46 - .../joomla/session/src/SessionInterface.php | 264 - .../session/src/Storage/NativeStorage.php | 492 - .../session/src/Storage/RuntimeStorage.php | 383 - .../joomla/session/src/StorageInterface.php | 193 - .../src/Validator/AddressValidator.php | 87 - .../src/Validator/ForwardedValidator.php | 76 - .../joomla/session/src/ValidatorInterface.php | 29 - libraries/vendor/joomla/string/LICENSE | 340 - .../vendor/joomla/string/src/Inflector.php | 333 - .../vendor/joomla/string/src/Normalise.php | 155 - .../vendor/joomla/string/src/StringHelper.php | 819 - .../vendor/joomla/string/src/phputf8/LICENSE | 504 - .../vendor/joomla/string/src/phputf8/README | 82 - .../string/src/phputf8/mbstring/core.php | 132 - .../joomla/string/src/phputf8/native/core.php | 430 - .../vendor/joomla/string/src/phputf8/ord.php | 90 - .../string/src/phputf8/str_ireplace.php | 77 - .../joomla/string/src/phputf8/str_pad.php | 54 - .../joomla/string/src/phputf8/str_split.php | 32 - .../joomla/string/src/phputf8/strcasecmp.php | 23 - .../joomla/string/src/phputf8/strcspn.php | 38 - .../joomla/string/src/phputf8/stristr.php | 35 - .../joomla/string/src/phputf8/strrev.php | 19 - .../joomla/string/src/phputf8/strspn.php | 38 - .../string/src/phputf8/substr_replace.php | 22 - .../vendor/joomla/string/src/phputf8/trim.php | 63 - .../joomla/string/src/phputf8/ucfirst.php | 31 - .../joomla/string/src/phputf8/ucwords.php | 40 - .../vendor/joomla/string/src/phputf8/utf8.php | 74 - .../joomla/string/src/phputf8/utils/ascii.php | 214 - .../joomla/string/src/phputf8/utils/bad.php | 406 - .../string/src/phputf8/utils/patterns.php | 64 - .../string/src/phputf8/utils/position.php | 168 - .../string/src/phputf8/utils/specials.php | 126 - .../string/src/phputf8/utils/unicode.php | 265 - .../string/src/phputf8/utils/validation.php | 181 - libraries/vendor/joomla/uri/LICENSE | 340 - .../vendor/joomla/uri/src/AbstractUri.php | 414 - libraries/vendor/joomla/uri/src/Uri.php | 202 - libraries/vendor/joomla/uri/src/UriHelper.php | 68 - .../vendor/joomla/uri/src/UriImmutable.php | 63 - .../vendor/joomla/uri/src/UriInterface.php | 145 - libraries/vendor/joomla/utilities/LICENSE | 340 - .../joomla/utilities/src/ArrayHelper.php | 751 - libraries/vendor/mso/idna-convert/LICENSE | 505 - .../mso/idna-convert/src/EncodingHelper.php | 186 - .../mso/idna-convert/src/IdnaConvert.php | 405 - .../mso/idna-convert/src/NamePrepData.php | 1921 -- .../mso/idna-convert/src/NamePrepData2003.php | 501 - .../src/NamePrepDataInterface.php | 7 - .../vendor/mso/idna-convert/src/Punycode.php | 555 - .../idna-convert/src/PunycodeInterface.php | 20 - .../idna-convert/src/UnicodeTranscoder.php | 358 - .../src/UnicodeTranscoderInterface.php | 40 - .../vendor/paragonie/random_compat/LICENSE | 22 - .../random_compat/lib/byte_safe_strings.php | 181 - .../random_compat/lib/cast_to_int.php | 75 - .../random_compat/lib/error_polyfill.php | 49 - .../paragonie/random_compat/lib/random.php | 226 - .../lib/random_bytes_com_dotnet.php | 88 - .../lib/random_bytes_dev_urandom.php | 167 - .../lib/random_bytes_libsodium.php | 88 - .../lib/random_bytes_libsodium_legacy.php | 92 - .../random_compat/lib/random_bytes_mcrypt.php | 77 - .../random_compat/lib/random_int.php | 190 - .../vendor/paragonie/sodium_compat/LICENSE | 21 - .../paragonie/sodium_compat/autoload-fast.php | 4 - .../sodium_compat/autoload-pedantic.php | 6 - .../paragonie/sodium_compat/autoload.php | 49 - .../paragonie/sodium_compat/lib/constants.php | 50 - .../sodium_compat/lib/namespaced.php | 46 - .../sodium_compat/lib/php72compat.php | 1052 - .../sodium_compat/lib/sodium_compat.php | 835 - .../sodium_compat/namespaced/Compat.php | 7 - .../sodium_compat/namespaced/Core/BLAKE2b.php | 7 - .../namespaced/Core/ChaCha20.php | 7 - .../namespaced/Core/ChaCha20/Ctx.php | 7 - .../namespaced/Core/ChaCha20/IetfCtx.php | 7 - .../namespaced/Core/Curve25519.php | 7 - .../namespaced/Core/Curve25519/Fe.php | 7 - .../namespaced/Core/Curve25519/Ge/Cached.php | 7 - .../namespaced/Core/Curve25519/Ge/P1p1.php | 7 - .../namespaced/Core/Curve25519/Ge/P2.php | 7 - .../namespaced/Core/Curve25519/Ge/P3.php | 7 - .../namespaced/Core/Curve25519/Ge/Precomp.php | 7 - .../namespaced/Core/Curve25519/H.php | 7 - .../sodium_compat/namespaced/Core/Ed25519.php | 7 - .../namespaced/Core/HChaCha20.php | 7 - .../namespaced/Core/HSalsa20.php | 7 - .../namespaced/Core/Poly1305.php | 7 - .../namespaced/Core/Poly1305/State.php | 7 - .../sodium_compat/namespaced/Core/Salsa20.php | 7 - .../sodium_compat/namespaced/Core/SipHash.php | 7 - .../sodium_compat/namespaced/Core/Util.php | 7 - .../sodium_compat/namespaced/Core/X25519.php | 7 - .../namespaced/Core/XChaCha20.php | 7 - .../namespaced/Core/Xsalsa20.php | 7 - .../sodium_compat/namespaced/Crypto.php | 7 - .../sodium_compat/namespaced/File.php | 7 - .../paragonie/sodium_compat/src/Compat.php | 2706 -- .../sodium_compat/src/Core/BLAKE2b.php | 746 - .../sodium_compat/src/Core/ChaCha20.php | 395 - .../sodium_compat/src/Core/ChaCha20/Ctx.php | 120 - .../src/Core/ChaCha20/IetfCtx.php | 38 - .../sodium_compat/src/Core/Curve25519.php | 2978 -- .../sodium_compat/src/Core/Curve25519/Fe.php | 130 - .../src/Core/Curve25519/Ge/Cached.php | 65 - .../src/Core/Curve25519/Ge/P1p1.php | 64 - .../src/Core/Curve25519/Ge/P2.php | 54 - .../src/Core/Curve25519/Ge/P3.php | 65 - .../src/Core/Curve25519/Ge/Precomp.php | 54 - .../sodium_compat/src/Core/Curve25519/H.php | 1467 - .../sodium_compat/src/Core/Ed25519.php | 479 - .../sodium_compat/src/Core/HChaCha20.php | 108 - .../sodium_compat/src/Core/HSalsa20.php | 96 - .../sodium_compat/src/Core/Poly1305.php | 63 - .../sodium_compat/src/Core/Poly1305/State.php | 419 - .../sodium_compat/src/Core/Salsa20.php | 273 - .../sodium_compat/src/Core/SipHash.php | 305 - .../paragonie/sodium_compat/src/Core/Util.php | 921 - .../sodium_compat/src/Core/X25519.php | 327 - .../sodium_compat/src/Core/XChaCha20.php | 64 - .../sodium_compat/src/Core/XSalsa20.php | 57 - .../sodium_compat/src/Core32/BLAKE2b.php | 675 - .../sodium_compat/src/Core32/ChaCha20.php | 400 - .../sodium_compat/src/Core32/ChaCha20/Ctx.php | 126 - .../src/Core32/ChaCha20/IetfCtx.php | 39 - .../sodium_compat/src/Core32/Curve25519.php | 3543 --- .../src/Core32/Curve25519/Fe.php | 221 - .../src/Core32/Curve25519/Ge/Cached.php | 65 - .../src/Core32/Curve25519/Ge/P1p1.php | 67 - .../src/Core32/Curve25519/Ge/P2.php | 54 - .../src/Core32/Curve25519/Ge/P3.php | 65 - .../src/Core32/Curve25519/Ge/Precomp.php | 56 - .../sodium_compat/src/Core32/Curve25519/H.php | 1467 - .../src/Core32/Curve25519/README.md | 3 - .../sodium_compat/src/Core32/Ed25519.php | 480 - .../sodium_compat/src/Core32/HChaCha20.php | 127 - .../sodium_compat/src/Core32/HSalsa20.php | 141 - .../sodium_compat/src/Core32/Int32.php | 650 - .../sodium_compat/src/Core32/Int64.php | 743 - .../sodium_compat/src/Core32/Poly1305.php | 63 - .../src/Core32/Poly1305/State.php | 451 - .../sodium_compat/src/Core32/Salsa20.php | 306 - .../sodium_compat/src/Core32/SipHash.php | 239 - .../sodium_compat/src/Core32/Util.php | 13 - .../sodium_compat/src/Core32/X25519.php | 348 - .../sodium_compat/src/Core32/XChaCha20.php | 64 - .../sodium_compat/src/Core32/XSalsa20.php | 57 - .../paragonie/sodium_compat/src/Crypto.php | 1245 - .../paragonie/sodium_compat/src/Crypto32.php | 1244 - .../paragonie/sodium_compat/src/File.php | 1515 - .../sodium_compat/src/SodiumException.php | 11 - libraries/vendor/phpmailer/phpmailer/LICENSE | 502 - libraries/vendor/phpmailer/phpmailer/VERSION | 1 - .../phpmailer/phpmailer/src/Exception.php | 39 - .../vendor/phpmailer/phpmailer/src/OAuth.php | 138 - .../phpmailer/phpmailer/src/PHPMailer.php | 4420 --- .../vendor/phpmailer/phpmailer/src/POP3.php | 419 - .../vendor/phpmailer/phpmailer/src/SMTP.php | 1325 - libraries/vendor/psr/container/LICENSE | 21 - .../src/ContainerExceptionInterface.php | 13 - .../psr/container/src/ContainerInterface.php | 37 - .../src/NotFoundExceptionInterface.php | 13 - libraries/vendor/psr/http-message/LICENSE | 19 - .../psr/http-message/src/MessageInterface.php | 187 - .../psr/http-message/src/RequestInterface.php | 129 - .../http-message/src/ResponseInterface.php | 68 - .../src/ServerRequestInterface.php | 261 - .../psr/http-message/src/StreamInterface.php | 158 - .../src/UploadedFileInterface.php | 123 - .../psr/http-message/src/UriInterface.php | 323 - libraries/vendor/psr/link/LICENSE.md | 21 - .../psr/link/src/EvolvableLinkInterface.php | 79 - .../src/EvolvableLinkProviderInterface.php | 35 - .../vendor/psr/link/src/LinkInterface.php | 52 - .../psr/link/src/LinkProviderInterface.php | 29 - libraries/vendor/psr/log/LICENSE | 19 - .../vendor/psr/log/Psr/Log/AbstractLogger.php | 128 - .../log/Psr/Log/InvalidArgumentException.php | 7 - libraries/vendor/psr/log/Psr/Log/LogLevel.php | 18 - .../psr/log/Psr/Log/LoggerAwareInterface.php | 18 - .../psr/log/Psr/Log/LoggerAwareTrait.php | 26 - .../psr/log/Psr/Log/LoggerInterface.php | 123 - .../vendor/psr/log/Psr/Log/LoggerTrait.php | 140 - .../vendor/psr/log/Psr/Log/NullLogger.php | 28 - .../vendor/symfony/console/Application.php | 1223 - .../symfony/console/Command/Command.php | 656 - .../symfony/console/Command/HelpCommand.php | 81 - .../symfony/console/Command/ListCommand.php | 90 - .../symfony/console/Command/LockableTrait.php | 72 - .../CommandLoader/CommandLoaderInterface.php | 37 - .../CommandLoader/ContainerCommandLoader.php | 55 - .../CommandLoader/FactoryCommandLoader.php | 62 - .../vendor/symfony/console/ConsoleEvents.php | 60 - .../AddConsoleCommandPass.php | 106 - .../Descriptor/ApplicationDescription.php | 152 - .../symfony/console/Descriptor/Descriptor.php | 107 - .../Descriptor/DescriptorInterface.php | 31 - .../console/Descriptor/JsonDescriptor.php | 168 - .../console/Descriptor/MarkdownDescriptor.php | 182 - .../console/Descriptor/TextDescriptor.php | 342 - .../console/Descriptor/XmlDescriptor.php | 251 - .../console/Event/ConsoleCommandEvent.php | 60 - .../console/Event/ConsoleErrorEvent.php | 83 - .../symfony/console/Event/ConsoleEvent.php | 67 - .../console/Event/ConsoleExceptionEvent.php | 71 - .../console/Event/ConsoleTerminateEvent.php | 58 - .../console/EventListener/ErrorListener.php | 91 - .../Exception/CommandNotFoundException.php | 43 - .../console/Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 19 - .../Exception/InvalidOptionException.php | 21 - .../console/Exception/LogicException.php | 19 - .../console/Exception/RuntimeException.php | 19 - .../console/Formatter/OutputFormatter.php | 242 - .../Formatter/OutputFormatterInterface.php | 71 - .../Formatter/OutputFormatterStyle.php | 219 - .../OutputFormatterStyleInterface.php | 62 - .../Formatter/OutputFormatterStyleStack.php | 109 - .../console/Helper/DebugFormatterHelper.php | 127 - .../console/Helper/DescriptorHelper.php | 94 - .../console/Helper/FormatterHelper.php | 106 - .../vendor/symfony/console/Helper/Helper.php | 138 - .../console/Helper/HelperInterface.php | 39 - .../symfony/console/Helper/HelperSet.php | 108 - .../console/Helper/InputAwareHelper.php | 33 - .../symfony/console/Helper/ProcessHelper.php | 141 - .../symfony/console/Helper/ProgressBar.php | 617 - .../console/Helper/ProgressIndicator.php | 271 - .../symfony/console/Helper/QuestionHelper.php | 467 - .../console/Helper/SymfonyQuestionHelper.php | 124 - .../vendor/symfony/console/Helper/Table.php | 702 - .../symfony/console/Helper/TableCell.php | 76 - .../symfony/console/Helper/TableSeparator.php | 25 - .../symfony/console/Helper/TableStyle.php | 258 - .../symfony/console/Input/ArgvInput.php | 350 - .../symfony/console/Input/ArrayInput.php | 206 - .../vendor/symfony/console/Input/Input.php | 203 - .../symfony/console/Input/InputArgument.php | 129 - .../console/Input/InputAwareInterface.php | 28 - .../symfony/console/Input/InputDefinition.php | 402 - .../symfony/console/Input/InputInterface.php | 161 - .../symfony/console/Input/InputOption.php | 208 - .../Input/StreamableInputInterface.php | 37 - .../symfony/console/Input/StringInput.php | 72 - libraries/vendor/symfony/console/LICENSE | 19 - .../symfony/console/Logger/ConsoleLogger.php | 129 - .../symfony/console/Output/BufferedOutput.php | 45 - .../symfony/console/Output/ConsoleOutput.php | 152 - .../console/Output/ConsoleOutputInterface.php | 30 - .../symfony/console/Output/NullOutput.php | 123 - .../vendor/symfony/console/Output/Output.php | 175 - .../console/Output/OutputInterface.php | 114 - .../symfony/console/Output/StreamOutput.php | 116 - .../console/Question/ChoiceQuestion.php | 189 - .../console/Question/ConfirmationQuestion.php | 59 - .../symfony/console/Question/Question.php | 246 - .../symfony/console/Style/OutputStyle.php | 155 - .../symfony/console/Style/StyleInterface.php | 154 - .../symfony/console/Style/SymfonyStyle.php | 429 - libraries/vendor/symfony/console/Terminal.php | 137 - .../console/Tester/ApplicationTester.php | 176 - .../symfony/console/Tester/CommandTester.php | 156 - .../vendor/symfony/debug/BufferingLogger.php | 37 - libraries/vendor/symfony/debug/Debug.php | 63 - .../vendor/symfony/debug/DebugClassLoader.php | 409 - .../vendor/symfony/debug/ErrorHandler.php | 772 - .../Exception/ClassNotFoundException.php | 33 - .../debug/Exception/ContextErrorException.php | 40 - .../debug/Exception/FatalErrorException.php | 82 - .../debug/Exception/FatalThrowableError.php | 45 - .../debug/Exception/FlattenException.php | 263 - .../debug/Exception/OutOfMemoryException.php | 21 - .../debug/Exception/SilencedErrorContext.php | 67 - .../Exception/UndefinedFunctionException.php | 33 - .../Exception/UndefinedMethodException.php | 33 - .../vendor/symfony/debug/ExceptionHandler.php | 426 - .../ClassNotFoundFatalErrorHandler.php | 206 - .../FatalErrorHandlerInterface.php | 32 - .../UndefinedFunctionFatalErrorHandler.php | 84 - .../UndefinedMethodFatalErrorHandler.php | 66 - libraries/vendor/symfony/debug/LICENSE | 19 - .../ldap/Adapter/AbstractConnection.php | 63 - .../symfony/ldap/Adapter/AbstractQuery.php | 51 - .../symfony/ldap/Adapter/AdapterInterface.php | 54 - .../ldap/Adapter/CollectionInterface.php | 25 - .../ldap/Adapter/ConnectionInterface.php | 33 - .../ldap/Adapter/EntryManagerInterface.php | 55 - .../symfony/ldap/Adapter/ExtLdap/Adapter.php | 87 - .../ldap/Adapter/ExtLdap/Collection.php | 134 - .../ldap/Adapter/ExtLdap/Connection.php | 154 - .../Adapter/ExtLdap/ConnectionOptions.php | 78 - .../ldap/Adapter/ExtLdap/EntryManager.php | 95 - .../symfony/ldap/Adapter/ExtLdap/Query.php | 109 - .../symfony/ldap/Adapter/QueryInterface.php | 42 - .../ldap/Adapter/RenameEntryInterface.php | 22 - libraries/vendor/symfony/ldap/Entry.php | 95 - .../ldap/Exception/ConnectionException.php | 21 - .../Exception/DriverNotFoundException.php | 21 - .../ldap/Exception/ExceptionInterface.php | 21 - .../symfony/ldap/Exception/LdapException.php | 21 - .../ldap/Exception/NotBoundException.php | 21 - libraries/vendor/symfony/ldap/LICENSE | 19 - libraries/vendor/symfony/ldap/Ldap.php | 87 - libraries/vendor/symfony/ldap/LdapClient.php | 127 - .../symfony/ldap/LdapClientInterface.php | 36 - .../vendor/symfony/ldap/LdapInterface.php | 64 - .../Debug/OptionsResolverIntrospector.php | 102 - .../Exception/AccessException.php | 22 - .../Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 21 - .../Exception/InvalidOptionsException.php | 23 - .../Exception/MissingOptionsException.php | 23 - .../Exception/NoConfigurationException.php | 26 - .../Exception/NoSuchOptionException.php | 26 - .../Exception/OptionDefinitionException.php | 21 - .../Exception/UndefinedOptionsException.php | 24 - .../vendor/symfony/options-resolver/LICENSE | 19 - .../symfony/options-resolver/Options.php | 22 - .../options-resolver/OptionsResolver.php | 1081 - .../vendor/symfony/polyfill-ctype/Ctype.php | 227 - .../vendor/symfony/polyfill-ctype/LICENSE | 19 - .../symfony/polyfill-ctype/bootstrap.php | 26 - .../vendor/symfony/polyfill-mbstring/LICENSE | 19 - .../symfony/polyfill-mbstring/Mbstring.php | 791 - .../Resources/unidata/lowerCase.php | 1101 - .../Resources/unidata/upperCase.php | 1109 - .../symfony/polyfill-mbstring/bootstrap.php | 58 - .../vendor/symfony/polyfill-php56/LICENSE | 19 - .../vendor/symfony/polyfill-php56/Php56.php | 138 - .../symfony/polyfill-php56/bootstrap.php | 38 - .../vendor/symfony/polyfill-util/Binary.php | 18 - .../polyfill-util/BinaryNoFuncOverload.php | 65 - .../polyfill-util/BinaryOnFuncOverload.php | 67 - .../vendor/symfony/polyfill-util/LICENSE | 19 - .../polyfill-util/LegacyTestListener.php | 84 - .../polyfill-util/TestListenerTrait.php | 107 - .../EventListener/AddLinkHeaderListener.php | 57 - .../symfony/web-link/HttpHeaderSerializer.php | 66 - libraries/vendor/symfony/web-link/LICENSE | 19 - .../symfony/yaml/Command/LintCommand.php | 250 - libraries/vendor/symfony/yaml/Dumper.php | 132 - libraries/vendor/symfony/yaml/Escaper.php | 101 - .../symfony/yaml/Exception/DumpException.php | 21 - .../yaml/Exception/ExceptionInterface.php | 21 - .../symfony/yaml/Exception/ParseException.php | 139 - .../yaml/Exception/RuntimeException.php | 21 - libraries/vendor/symfony/yaml/Inline.php | 901 - libraries/vendor/symfony/yaml/LICENSE | 19 - libraries/vendor/symfony/yaml/Parser.php | 1160 - .../vendor/symfony/yaml/Tag/TaggedValue.php | 48 - libraries/vendor/symfony/yaml/Unescaper.php | 142 - libraries/vendor/symfony/yaml/Yaml.php | 151 - libraries/vendor/wamania/php-stemmer/LICENSE | 21 - .../vendor/wamania/php-stemmer/src/Danish.php | 149 - .../vendor/wamania/php-stemmer/src/Dutch.php | 303 - .../wamania/php-stemmer/src/English.php | 599 - .../vendor/wamania/php-stemmer/src/French.php | 530 - .../vendor/wamania/php-stemmer/src/German.php | 213 - .../wamania/php-stemmer/src/Italian.php | 286 - .../wamania/php-stemmer/src/Norwegian.php | 127 - .../wamania/php-stemmer/src/Portuguese.php | 280 - .../wamania/php-stemmer/src/Romanian.php | 331 - .../wamania/php-stemmer/src/Russian.php | 249 - .../wamania/php-stemmer/src/Spanish.php | 345 - .../vendor/wamania/php-stemmer/src/Stem.php | 218 - .../wamania/php-stemmer/src/Stemmer.php | 19 - .../wamania/php-stemmer/src/Swedish.php | 127 - .../vendor/wamania/php-stemmer/src/Utf8.php | 708 - libraries/vendor/web.config | 8 - .../zendframework/zend-diactoros/LICENSE.md | 12 - .../zend-diactoros/src/AbstractSerializer.php | 160 - .../zend-diactoros/src/CallbackStream.php | 185 - .../Exception/DeprecatedMethodException.php | 19 - .../src/Exception/ExceptionInterface.php | 17 - .../zend-diactoros/src/HeaderSecurity.php | 177 - .../zend-diactoros/src/MessageTrait.php | 406 - .../zend-diactoros/src/PhpInputStream.php | 91 - .../zend-diactoros/src/RelativeStream.php | 180 - .../zend-diactoros/src/Request.php | 73 - .../src/Request/ArraySerializer.php | 87 - .../zend-diactoros/src/Request/Serializer.php | 154 - .../zend-diactoros/src/RequestTrait.php | 324 - .../zend-diactoros/src/Response.php | 191 - .../src/Response/ArraySerializer.php | 86 - .../src/Response/EmitterInterface.php | 32 - .../src/Response/EmptyResponse.php | 42 - .../src/Response/HtmlResponse.php | 80 - .../src/Response/InjectContentTypeTrait.php | 37 - .../src/Response/JsonResponse.php | 198 - .../src/Response/RedirectResponse.php | 52 - .../src/Response/SapiEmitter.php | 42 - .../src/Response/SapiEmitterTrait.php | 108 - .../src/Response/SapiStreamEmitter.php | 130 - .../src/Response/Serializer.php | 111 - .../src/Response/TextResponse.php | 80 - .../src/Response/XmlResponse.php | 80 - .../zend-diactoros/src/Server.php | 182 - .../zend-diactoros/src/ServerRequest.php | 283 - .../src/ServerRequestFactory.php | 541 - .../zend-diactoros/src/Stream.php | 355 - .../zend-diactoros/src/UploadedFile.php | 283 - .../zendframework/zend-diactoros/src/Uri.php | 704 - media/vendor/awesomplete/LICENSE | 22 - media/vendor/awesomplete/css/awesomplete.css | 104 - .../awesomplete/css/awesomplete.css.map | 1 - .../awesomplete/css/awesomplete.min.css | 1 - media/vendor/awesomplete/js/awesomplete.js | 546 - .../vendor/awesomplete/js/awesomplete.min.js | 1 - .../awesomplete/js/awesomplete.min.js.map | 1 - media/vendor/bootstrap/LICENSE | 22 - media/vendor/bootstrap/css/bootstrap-grid.css | 1912 -- .../bootstrap/css/bootstrap-grid.css.map | 1 - .../bootstrap/css/bootstrap-grid.min.css | 6 - .../bootstrap/css/bootstrap-grid.min.css.map | 1 - .../vendor/bootstrap/css/bootstrap-reboot.css | 330 - .../bootstrap/css/bootstrap-reboot.css.map | 1 - .../bootstrap/css/bootstrap-reboot.min.css | 7 - .../css/bootstrap-reboot.min.css.map | 1 - media/vendor/bootstrap/css/bootstrap.css | 8981 ------ media/vendor/bootstrap/css/bootstrap.css.map | 1 - media/vendor/bootstrap/css/bootstrap.min.css | 6 - .../bootstrap/css/bootstrap.min.css.map | 1 - media/vendor/bootstrap/js/bootstrap.bundle.js | 6444 ---- .../bootstrap/js/bootstrap.bundle.min.js | 1 - media/vendor/bootstrap/js/bootstrap.js | 3927 --- media/vendor/bootstrap/js/bootstrap.min.js | 1 - media/vendor/bootstrap/scss/_alert.scss | 51 - media/vendor/bootstrap/scss/_badge.scss | 47 - media/vendor/bootstrap/scss/_breadcrumb.scss | 41 - .../vendor/bootstrap/scss/_button-group.scss | 172 - media/vendor/bootstrap/scss/_buttons.scss | 144 - media/vendor/bootstrap/scss/_card.scss | 301 - media/vendor/bootstrap/scss/_carousel.scss | 236 - media/vendor/bootstrap/scss/_close.scss | 34 - media/vendor/bootstrap/scss/_code.scss | 48 - .../vendor/bootstrap/scss/_custom-forms.scss | 421 - media/vendor/bootstrap/scss/_dropdown.scss | 166 - media/vendor/bootstrap/scss/_forms.scss | 335 - media/vendor/bootstrap/scss/_functions.scss | 86 - media/vendor/bootstrap/scss/_grid.scss | 52 - media/vendor/bootstrap/scss/_images.scss | 42 - media/vendor/bootstrap/scss/_input-group.scss | 158 - media/vendor/bootstrap/scss/_jumbotron.scss | 16 - media/vendor/bootstrap/scss/_list-group.scss | 115 - media/vendor/bootstrap/scss/_media.scss | 8 - media/vendor/bootstrap/scss/_mixins.scss | 41 - media/vendor/bootstrap/scss/_modal.scss | 168 - media/vendor/bootstrap/scss/_nav.scss | 118 - media/vendor/bootstrap/scss/_navbar.scss | 299 - media/vendor/bootstrap/scss/_pagination.scss | 78 - media/vendor/bootstrap/scss/_popover.scss | 183 - media/vendor/bootstrap/scss/_print.scss | 141 - media/vendor/bootstrap/scss/_progress.scss | 34 - media/vendor/bootstrap/scss/_reboot.scss | 480 - media/vendor/bootstrap/scss/_root.scss | 19 - media/vendor/bootstrap/scss/_tables.scss | 188 - media/vendor/bootstrap/scss/_tooltip.scss | 115 - media/vendor/bootstrap/scss/_transitions.scss | 22 - media/vendor/bootstrap/scss/_type.scss | 125 - media/vendor/bootstrap/scss/_utilities.scss | 15 - media/vendor/bootstrap/scss/_variables.scss | 929 - .../vendor/bootstrap/scss/bootstrap-grid.scss | 32 - .../bootstrap/scss/bootstrap-reboot.scss | 12 - media/vendor/bootstrap/scss/bootstrap.scss | 42 - .../vendor/bootstrap/scss/mixins/_alert.scss | 13 - .../scss/mixins/_background-variant.scss | 21 - .../vendor/bootstrap/scss/mixins/_badge.scss | 12 - .../bootstrap/scss/mixins/_border-radius.scss | 35 - .../bootstrap/scss/mixins/_box-shadow.scss | 5 - .../bootstrap/scss/mixins/_breakpoints.scss | 123 - .../bootstrap/scss/mixins/_buttons.scss | 109 - .../vendor/bootstrap/scss/mixins/_caret.scss | 66 - .../bootstrap/scss/mixins/_clearfix.scss | 7 - .../vendor/bootstrap/scss/mixins/_float.scss | 11 - .../vendor/bootstrap/scss/mixins/_forms.scss | 147 - .../bootstrap/scss/mixins/_gradients.scss | 45 - .../scss/mixins/_grid-framework.scss | 67 - media/vendor/bootstrap/scss/mixins/_grid.scss | 52 - .../vendor/bootstrap/scss/mixins/_hover.scss | 37 - .../vendor/bootstrap/scss/mixins/_image.scss | 36 - .../bootstrap/scss/mixins/_list-group.scss | 21 - .../vendor/bootstrap/scss/mixins/_lists.scss | 7 - .../bootstrap/scss/mixins/_nav-divider.scss | 10 - .../bootstrap/scss/mixins/_pagination.scss | 22 - .../bootstrap/scss/mixins/_reset-text.scss | 17 - .../vendor/bootstrap/scss/mixins/_resize.scss | 6 - .../bootstrap/scss/mixins/_screen-reader.scss | 33 - media/vendor/bootstrap/scss/mixins/_size.scss | 6 - .../bootstrap/scss/mixins/_table-row.scss | 30 - .../bootstrap/scss/mixins/_text-emphasis.scss | 14 - .../bootstrap/scss/mixins/_text-hide.scss | 13 - .../bootstrap/scss/mixins/_text-truncate.scss | 8 - .../bootstrap/scss/mixins/_transition.scss | 13 - .../bootstrap/scss/mixins/_visibility.scss | 7 - .../bootstrap/scss/utilities/_align.scss | 8 - .../bootstrap/scss/utilities/_background.scss | 19 - .../bootstrap/scss/utilities/_borders.scss | 59 - .../bootstrap/scss/utilities/_clearfix.scss | 3 - .../bootstrap/scss/utilities/_display.scss | 38 - .../bootstrap/scss/utilities/_embed.scss | 52 - .../bootstrap/scss/utilities/_flex.scss | 51 - .../bootstrap/scss/utilities/_float.scss | 9 - .../bootstrap/scss/utilities/_position.scss | 37 - .../scss/utilities/_screenreaders.scss | 11 - .../bootstrap/scss/utilities/_shadows.scss | 6 - .../bootstrap/scss/utilities/_sizing.scss | 12 - .../bootstrap/scss/utilities/_spacing.scss | 51 - .../bootstrap/scss/utilities/_text.scss | 58 - .../bootstrap/scss/utilities/_visibility.scss | 11 - .../codemirror/addon/comment/comment.js | 209 - .../codemirror/addon/comment/comment.min.js | 1 - .../addon/comment/continuecomment.js | 78 - .../addon/comment/continuecomment.min.js | 1 - .../vendor/codemirror/addon/dialog/dialog.css | 32 - .../vendor/codemirror/addon/dialog/dialog.js | 157 - .../codemirror/addon/dialog/dialog.min.css | 1 - .../codemirror/addon/dialog/dialog.min.js | 1 - .../codemirror/addon/display/autorefresh.js | 47 - .../addon/display/autorefresh.min.js | 1 - .../codemirror/addon/display/fullscreen.css | 6 - .../codemirror/addon/display/fullscreen.js | 41 - .../addon/display/fullscreen.min.css | 1 - .../addon/display/fullscreen.min.js | 1 - .../vendor/codemirror/addon/display/panel.js | 123 - .../codemirror/addon/display/panel.min.js | 1 - .../codemirror/addon/display/placeholder.js | 63 - .../addon/display/placeholder.min.js | 1 - .../vendor/codemirror/addon/display/rulers.js | 51 - .../codemirror/addon/display/rulers.min.js | 1 - .../codemirror/addon/edit/closebrackets.js | 194 - .../addon/edit/closebrackets.min.js | 1 - .../vendor/codemirror/addon/edit/closetag.js | 175 - .../codemirror/addon/edit/closetag.min.js | 1 - .../codemirror/addon/edit/continuelist.js | 89 - .../codemirror/addon/edit/continuelist.min.js | 1 - .../codemirror/addon/edit/matchbrackets.js | 145 - .../addon/edit/matchbrackets.min.js | 1 - .../vendor/codemirror/addon/edit/matchtags.js | 66 - .../codemirror/addon/edit/matchtags.min.js | 1 - .../codemirror/addon/edit/trailingspace.js | 27 - .../addon/edit/trailingspace.min.js | 1 - .../codemirror/addon/fold/brace-fold.js | 105 - .../codemirror/addon/fold/brace-fold.min.js | 1 - .../codemirror/addon/fold/comment-fold.js | 59 - .../codemirror/addon/fold/comment-fold.min.js | 1 - .../vendor/codemirror/addon/fold/foldcode.js | 152 - .../codemirror/addon/fold/foldcode.min.js | 1 - .../codemirror/addon/fold/foldgutter.css | 20 - .../codemirror/addon/fold/foldgutter.js | 146 - .../codemirror/addon/fold/foldgutter.min.css | 1 - .../codemirror/addon/fold/foldgutter.min.js | 1 - .../codemirror/addon/fold/indent-fold.js | 48 - .../codemirror/addon/fold/indent-fold.min.js | 1 - .../codemirror/addon/fold/markdown-fold.js | 49 - .../addon/fold/markdown-fold.min.js | 1 - .../vendor/codemirror/addon/fold/xml-fold.js | 182 - .../codemirror/addon/fold/xml-fold.min.js | 1 - .../codemirror/addon/hint/anyword-hint.js | 41 - .../codemirror/addon/hint/anyword-hint.min.js | 1 - .../vendor/codemirror/addon/hint/css-hint.js | 60 - .../codemirror/addon/hint/css-hint.min.js | 1 - .../vendor/codemirror/addon/hint/html-hint.js | 348 - .../codemirror/addon/hint/html-hint.min.js | 1 - .../codemirror/addon/hint/javascript-hint.js | 155 - .../addon/hint/javascript-hint.min.js | 1 - .../codemirror/addon/hint/show-hint.css | 36 - .../vendor/codemirror/addon/hint/show-hint.js | 432 - .../codemirror/addon/hint/show-hint.min.css | 1 - .../codemirror/addon/hint/show-hint.min.js | 1 - .../vendor/codemirror/addon/hint/sql-hint.js | 286 - .../codemirror/addon/hint/sql-hint.min.js | 1 - .../vendor/codemirror/addon/hint/xml-hint.js | 110 - .../codemirror/addon/hint/xml-hint.min.js | 1 - .../addon/lint/coffeescript-lint.js | 47 - .../addon/lint/coffeescript-lint.min.js | 1 - .../vendor/codemirror/addon/lint/css-lint.js | 40 - .../codemirror/addon/lint/css-lint.min.js | 1 - .../vendor/codemirror/addon/lint/html-lint.js | 53 - .../codemirror/addon/lint/html-lint.min.js | 1 - .../codemirror/addon/lint/javascript-lint.js | 63 - .../addon/lint/javascript-lint.min.js | 1 - .../vendor/codemirror/addon/lint/json-lint.js | 37 - .../codemirror/addon/lint/json-lint.min.js | 1 - media/vendor/codemirror/addon/lint/lint.css | 73 - media/vendor/codemirror/addon/lint/lint.js | 252 - .../vendor/codemirror/addon/lint/lint.min.css | 1 - .../vendor/codemirror/addon/lint/lint.min.js | 1 - .../vendor/codemirror/addon/lint/yaml-lint.js | 41 - .../codemirror/addon/lint/yaml-lint.min.js | 1 - media/vendor/codemirror/addon/merge/merge.css | 113 - media/vendor/codemirror/addon/merge/merge.js | 1001 - .../codemirror/addon/merge/merge.min.css | 1 - .../codemirror/addon/merge/merge.min.js | 1 - .../vendor/codemirror/addon/mode/loadmode.js | 64 - .../codemirror/addon/mode/loadmode.min.js | 1 - .../vendor/codemirror/addon/mode/multiplex.js | 123 - .../codemirror/addon/mode/multiplex.min.js | 1 - .../codemirror/addon/mode/multiplex_test.js | 33 - .../addon/mode/multiplex_test.min.js | 1 - media/vendor/codemirror/addon/mode/overlay.js | 90 - .../codemirror/addon/mode/overlay.min.js | 1 - media/vendor/codemirror/addon/mode/simple.js | 216 - .../codemirror/addon/mode/simple.min.js | 1 - .../codemirror/addon/runmode/colorize.js | 40 - .../codemirror/addon/runmode/colorize.min.js | 1 - .../addon/runmode/runmode-standalone.js | 158 - .../addon/runmode/runmode-standalone.min.js | 1 - .../codemirror/addon/runmode/runmode.js | 72 - .../codemirror/addon/runmode/runmode.min.js | 1 - .../codemirror/addon/runmode/runmode.node.js | 197 - .../addon/runmode/runmode.node.min.js | 1 - .../addon/scroll/annotatescrollbar.js | 122 - .../addon/scroll/annotatescrollbar.min.js | 1 - .../codemirror/addon/scroll/scrollpastend.js | 48 - .../addon/scroll/scrollpastend.min.js | 1 - .../addon/scroll/simplescrollbars.css | 66 - .../addon/scroll/simplescrollbars.js | 152 - .../addon/scroll/simplescrollbars.min.css | 1 - .../addon/scroll/simplescrollbars.min.js | 1 - .../codemirror/addon/search/jump-to-line.js | 49 - .../addon/search/jump-to-line.min.js | 1 - .../addon/search/match-highlighter.js | 165 - .../addon/search/match-highlighter.min.js | 1 - .../addon/search/matchesonscrollbar.css | 8 - .../addon/search/matchesonscrollbar.js | 97 - .../addon/search/matchesonscrollbar.min.css | 1 - .../addon/search/matchesonscrollbar.min.js | 1 - .../vendor/codemirror/addon/search/search.js | 252 - .../codemirror/addon/search/search.min.js | 1 - .../codemirror/addon/search/searchcursor.js | 293 - .../addon/search/searchcursor.min.js | 1 - .../codemirror/addon/selection/active-line.js | 72 - .../addon/selection/active-line.min.js | 1 - .../addon/selection/mark-selection.js | 119 - .../addon/selection/mark-selection.min.js | 1 - .../addon/selection/selection-pointer.js | 98 - .../addon/selection/selection-pointer.min.js | 1 - media/vendor/codemirror/addon/tern/tern.css | 87 - media/vendor/codemirror/addon/tern/tern.js | 718 - .../vendor/codemirror/addon/tern/tern.min.css | 1 - .../vendor/codemirror/addon/tern/tern.min.js | 1 - media/vendor/codemirror/addon/tern/worker.js | 44 - .../codemirror/addon/tern/worker.min.js | 1 - .../vendor/codemirror/addon/wrap/hardwrap.js | 144 - .../codemirror/addon/wrap/hardwrap.min.js | 1 - media/vendor/codemirror/keymap/emacs.js | 416 - media/vendor/codemirror/keymap/emacs.min.js | 1 - media/vendor/codemirror/keymap/sublime.js | 691 - media/vendor/codemirror/keymap/sublime.min.js | 1 - media/vendor/codemirror/keymap/vim.js | 5230 ---- media/vendor/codemirror/keymap/vim.min.js | 1 - media/vendor/codemirror/lib/addons.css | 100 - media/vendor/codemirror/lib/addons.js | 7309 ----- media/vendor/codemirror/lib/addons.min.css | 1 - media/vendor/codemirror/lib/addons.min.js | 1 - media/vendor/codemirror/lib/codemirror.css | 346 - media/vendor/codemirror/lib/codemirror.js | 9672 ------ .../vendor/codemirror/lib/codemirror.min.css | 1 - media/vendor/codemirror/lib/codemirror.min.js | 1 - media/vendor/codemirror/mode/apl/apl.js | 174 - media/vendor/codemirror/mode/apl/apl.min.js | 1 - .../codemirror/mode/asciiarmor/asciiarmor.js | 74 - .../mode/asciiarmor/asciiarmor.min.js | 1 - media/vendor/codemirror/mode/asn.1/asn.1.js | 204 - .../vendor/codemirror/mode/asn.1/asn.1.min.js | 1 - .../codemirror/mode/asterisk/asterisk.js | 196 - .../codemirror/mode/asterisk/asterisk.min.js | 1 - .../codemirror/mode/brainfuck/brainfuck.js | 85 - .../mode/brainfuck/brainfuck.min.js | 1 - media/vendor/codemirror/mode/clike/clike.js | 819 - .../vendor/codemirror/mode/clike/clike.min.js | 1 - .../vendor/codemirror/mode/clojure/clojure.js | 306 - .../codemirror/mode/clojure/clojure.min.js | 1 - media/vendor/codemirror/mode/cmake/cmake.js | 97 - .../vendor/codemirror/mode/cmake/cmake.min.js | 1 - media/vendor/codemirror/mode/cobol/cobol.js | 255 - .../vendor/codemirror/mode/cobol/cobol.min.js | 1 - .../mode/coffeescript/coffeescript.js | 359 - .../mode/coffeescript/coffeescript.min.js | 1 - .../codemirror/mode/commonlisp/commonlisp.js | 124 - .../mode/commonlisp/commonlisp.min.js | 1 - .../vendor/codemirror/mode/crystal/crystal.js | 433 - .../codemirror/mode/crystal/crystal.min.js | 1 - media/vendor/codemirror/mode/css/css.js | 832 - media/vendor/codemirror/mode/css/css.min.js | 1 - media/vendor/codemirror/mode/cypher/cypher.js | 150 - .../codemirror/mode/cypher/cypher.min.js | 1 - media/vendor/codemirror/mode/d/d.js | 218 - media/vendor/codemirror/mode/d/d.min.js | 1 - media/vendor/codemirror/mode/dart/dart.js | 157 - media/vendor/codemirror/mode/dart/dart.min.js | 1 - media/vendor/codemirror/mode/diff/diff.js | 47 - media/vendor/codemirror/mode/diff/diff.min.js | 1 - media/vendor/codemirror/mode/django/django.js | 356 - .../codemirror/mode/django/django.min.js | 1 - .../codemirror/mode/dockerfile/dockerfile.js | 211 - .../mode/dockerfile/dockerfile.min.js | 1 - media/vendor/codemirror/mode/dtd/dtd.js | 142 - media/vendor/codemirror/mode/dtd/dtd.min.js | 1 - media/vendor/codemirror/mode/dylan/dylan.js | 352 - .../vendor/codemirror/mode/dylan/dylan.min.js | 1 - media/vendor/codemirror/mode/ebnf/ebnf.js | 195 - media/vendor/codemirror/mode/ebnf/ebnf.min.js | 1 - media/vendor/codemirror/mode/ecl/ecl.js | 206 - media/vendor/codemirror/mode/ecl/ecl.min.js | 1 - media/vendor/codemirror/mode/eiffel/eiffel.js | 160 - .../codemirror/mode/eiffel/eiffel.min.js | 1 - media/vendor/codemirror/mode/elm/elm.js | 205 - media/vendor/codemirror/mode/elm/elm.min.js | 1 - media/vendor/codemirror/mode/erlang/erlang.js | 619 - .../codemirror/mode/erlang/erlang.min.js | 1 - media/vendor/codemirror/mode/factor/factor.js | 85 - .../codemirror/mode/factor/factor.min.js | 1 - media/vendor/codemirror/mode/fcl/fcl.js | 173 - media/vendor/codemirror/mode/fcl/fcl.min.js | 1 - media/vendor/codemirror/mode/forth/forth.js | 180 - .../vendor/codemirror/mode/forth/forth.min.js | 1 - .../vendor/codemirror/mode/fortran/fortran.js | 188 - .../codemirror/mode/fortran/fortran.min.js | 1 - media/vendor/codemirror/mode/gas/gas.js | 345 - media/vendor/codemirror/mode/gas/gas.min.js | 1 - media/vendor/codemirror/mode/gfm/gfm.js | 129 - media/vendor/codemirror/mode/gfm/gfm.min.js | 1 - .../vendor/codemirror/mode/gherkin/gherkin.js | 178 - .../codemirror/mode/gherkin/gherkin.min.js | 1 - media/vendor/codemirror/mode/go/go.js | 187 - media/vendor/codemirror/mode/go/go.min.js | 1 - media/vendor/codemirror/mode/groovy/groovy.js | 230 - .../codemirror/mode/groovy/groovy.min.js | 1 - media/vendor/codemirror/mode/haml/haml.js | 161 - media/vendor/codemirror/mode/haml/haml.min.js | 1 - .../codemirror/mode/handlebars/handlebars.js | 62 - .../mode/handlebars/handlebars.min.js | 1 - .../mode/haskell-literate/haskell-literate.js | 43 - .../haskell-literate/haskell-literate.min.js | 1 - .../vendor/codemirror/mode/haskell/haskell.js | 268 - .../codemirror/mode/haskell/haskell.min.js | 1 - media/vendor/codemirror/mode/haxe/haxe.js | 515 - media/vendor/codemirror/mode/haxe/haxe.min.js | 1 - .../mode/htmlembedded/htmlembedded.js | 37 - .../mode/htmlembedded/htmlembedded.min.js | 1 - .../codemirror/mode/htmlmixed/htmlmixed.js | 152 - .../mode/htmlmixed/htmlmixed.min.js | 1 - media/vendor/codemirror/mode/http/http.js | 113 - media/vendor/codemirror/mode/http/http.min.js | 1 - media/vendor/codemirror/mode/idl/idl.js | 290 - media/vendor/codemirror/mode/idl/idl.min.js | 1 - .../codemirror/mode/javascript/javascript.js | 868 - .../mode/javascript/javascript.min.js | 1 - media/vendor/codemirror/mode/jinja2/jinja2.js | 142 - .../codemirror/mode/jinja2/jinja2.min.js | 1 - media/vendor/codemirror/mode/jsx/jsx.js | 148 - media/vendor/codemirror/mode/jsx/jsx.min.js | 1 - media/vendor/codemirror/mode/julia/julia.js | 418 - .../vendor/codemirror/mode/julia/julia.min.js | 1 - .../codemirror/mode/livescript/livescript.js | 280 - .../mode/livescript/livescript.min.js | 1 - media/vendor/codemirror/mode/lua/lua.js | 159 - media/vendor/codemirror/mode/lua/lua.min.js | 1 - .../codemirror/mode/markdown/markdown.js | 872 - .../codemirror/mode/markdown/markdown.min.js | 1 - .../mode/mathematica/mathematica.js | 176 - .../mode/mathematica/mathematica.min.js | 1 - media/vendor/codemirror/mode/mbox/mbox.js | 129 - media/vendor/codemirror/mode/mbox/mbox.min.js | 1 - media/vendor/codemirror/mode/meta.js | 217 - media/vendor/codemirror/mode/meta.min.js | 1 - media/vendor/codemirror/mode/mirc/mirc.js | 193 - media/vendor/codemirror/mode/mirc/mirc.min.js | 1 - media/vendor/codemirror/mode/mllike/mllike.js | 356 - .../codemirror/mode/mllike/mllike.min.js | 1 - .../codemirror/mode/modelica/modelica.js | 245 - .../codemirror/mode/modelica/modelica.min.js | 1 - media/vendor/codemirror/mode/mscgen/mscgen.js | 175 - .../codemirror/mode/mscgen/mscgen.min.js | 1 - media/vendor/codemirror/mode/mumps/mumps.js | 148 - .../vendor/codemirror/mode/mumps/mumps.min.js | 1 - media/vendor/codemirror/mode/nginx/nginx.js | 178 - .../vendor/codemirror/mode/nginx/nginx.min.js | 1 - media/vendor/codemirror/mode/nsis/nsis.js | 95 - media/vendor/codemirror/mode/nsis/nsis.min.js | 1 - .../codemirror/mode/ntriples/ntriples.js | 195 - .../codemirror/mode/ntriples/ntriples.min.js | 1 - media/vendor/codemirror/mode/octave/octave.js | 139 - .../codemirror/mode/octave/octave.min.js | 1 - media/vendor/codemirror/mode/oz/oz.js | 252 - media/vendor/codemirror/mode/oz/oz.min.js | 1 - media/vendor/codemirror/mode/pascal/pascal.js | 109 - .../codemirror/mode/pascal/pascal.min.js | 1 - media/vendor/codemirror/mode/pegjs/pegjs.js | 114 - .../vendor/codemirror/mode/pegjs/pegjs.min.js | 1 - media/vendor/codemirror/mode/perl/perl.js | 837 - media/vendor/codemirror/mode/perl/perl.min.js | 1 - media/vendor/codemirror/mode/php/php.js | 234 - media/vendor/codemirror/mode/php/php.min.js | 1 - media/vendor/codemirror/mode/pig/pig.js | 178 - media/vendor/codemirror/mode/pig/pig.min.js | 1 - .../codemirror/mode/powershell/powershell.js | 398 - .../mode/powershell/powershell.min.js | 1 - .../codemirror/mode/properties/properties.js | 78 - .../mode/properties/properties.min.js | 1 - .../codemirror/mode/protobuf/protobuf.js | 69 - .../codemirror/mode/protobuf/protobuf.min.js | 1 - media/vendor/codemirror/mode/pug/pug.js | 591 - media/vendor/codemirror/mode/pug/pug.min.js | 1 - media/vendor/codemirror/mode/puppet/puppet.js | 220 - .../codemirror/mode/puppet/puppet.min.js | 1 - media/vendor/codemirror/mode/python/python.js | 330 - .../codemirror/mode/python/python.min.js | 1 - media/vendor/codemirror/mode/q/q.js | 139 - media/vendor/codemirror/mode/q/q.min.js | 1 - media/vendor/codemirror/mode/r/r.js | 183 - media/vendor/codemirror/mode/r/r.min.js | 1 - .../codemirror/mode/rpm/changes/index.html | 66 - media/vendor/codemirror/mode/rpm/rpm.js | 109 - media/vendor/codemirror/mode/rpm/rpm.min.js | 1 - media/vendor/codemirror/mode/rst/rst.js | 557 - media/vendor/codemirror/mode/rst/rst.min.js | 1 - media/vendor/codemirror/mode/ruby/ruby.js | 296 - media/vendor/codemirror/mode/ruby/ruby.min.js | 1 - media/vendor/codemirror/mode/rust/rust.js | 72 - media/vendor/codemirror/mode/rust/rust.min.js | 1 - media/vendor/codemirror/mode/sas/sas.js | 303 - media/vendor/codemirror/mode/sas/sas.min.js | 1 - media/vendor/codemirror/mode/sass/sass.js | 454 - media/vendor/codemirror/mode/sass/sass.min.js | 1 - media/vendor/codemirror/mode/scheme/scheme.js | 249 - .../codemirror/mode/scheme/scheme.min.js | 1 - media/vendor/codemirror/mode/shell/shell.js | 151 - .../vendor/codemirror/mode/shell/shell.min.js | 1 - media/vendor/codemirror/mode/sieve/sieve.js | 193 - .../vendor/codemirror/mode/sieve/sieve.min.js | 1 - media/vendor/codemirror/mode/slim/slim.js | 575 - media/vendor/codemirror/mode/slim/slim.min.js | 1 - .../codemirror/mode/smalltalk/smalltalk.js | 168 - .../mode/smalltalk/smalltalk.min.js | 1 - media/vendor/codemirror/mode/smarty/smarty.js | 225 - .../codemirror/mode/smarty/smarty.min.js | 1 - media/vendor/codemirror/mode/solr/solr.js | 104 - media/vendor/codemirror/mode/solr/solr.min.js | 1 - media/vendor/codemirror/mode/soy/soy.js | 354 - media/vendor/codemirror/mode/soy/soy.min.js | 1 - media/vendor/codemirror/mode/sparql/sparql.js | 180 - .../codemirror/mode/sparql/sparql.min.js | 1 - .../mode/spreadsheet/spreadsheet.js | 112 - .../mode/spreadsheet/spreadsheet.min.js | 1 - media/vendor/codemirror/mode/sql/sql.js | 490 - media/vendor/codemirror/mode/sql/sql.min.js | 1 - media/vendor/codemirror/mode/stex/stex.js | 263 - media/vendor/codemirror/mode/stex/stex.min.js | 1 - media/vendor/codemirror/mode/stylus/stylus.js | 771 - .../codemirror/mode/stylus/stylus.min.js | 1 - media/vendor/codemirror/mode/swift/swift.js | 219 - .../vendor/codemirror/mode/swift/swift.min.js | 1 - media/vendor/codemirror/mode/tcl/tcl.js | 139 - media/vendor/codemirror/mode/tcl/tcl.min.js | 1 - .../vendor/codemirror/mode/textile/textile.js | 469 - .../codemirror/mode/textile/textile.min.js | 1 - .../codemirror/mode/tiddlywiki/tiddlywiki.css | 14 - .../codemirror/mode/tiddlywiki/tiddlywiki.js | 308 - .../mode/tiddlywiki/tiddlywiki.min.css | 1 - .../mode/tiddlywiki/tiddlywiki.min.js | 1 - media/vendor/codemirror/mode/tiki/tiki.css | 26 - media/vendor/codemirror/mode/tiki/tiki.js | 312 - .../vendor/codemirror/mode/tiki/tiki.min.css | 1 - media/vendor/codemirror/mode/tiki/tiki.min.js | 1 - media/vendor/codemirror/mode/toml/toml.js | 88 - media/vendor/codemirror/mode/toml/toml.min.js | 1 - .../vendor/codemirror/mode/tornado/tornado.js | 68 - .../codemirror/mode/tornado/tornado.min.js | 1 - media/vendor/codemirror/mode/troff/troff.js | 84 - .../vendor/codemirror/mode/troff/troff.min.js | 1 - .../codemirror/mode/ttcn-cfg/ttcn-cfg.js | 214 - .../codemirror/mode/ttcn-cfg/ttcn-cfg.min.js | 1 - media/vendor/codemirror/mode/ttcn/ttcn.js | 283 - media/vendor/codemirror/mode/ttcn/ttcn.min.js | 1 - media/vendor/codemirror/mode/turtle/turtle.js | 162 - .../codemirror/mode/turtle/turtle.min.js | 1 - media/vendor/codemirror/mode/twig/twig.js | 141 - media/vendor/codemirror/mode/twig/twig.min.js | 1 - media/vendor/codemirror/mode/vb/vb.js | 275 - media/vendor/codemirror/mode/vb/vb.min.js | 1 - .../codemirror/mode/vbscript/vbscript.js | 350 - .../codemirror/mode/vbscript/vbscript.min.js | 1 - .../codemirror/mode/velocity/velocity.js | 201 - .../codemirror/mode/velocity/velocity.min.js | 1 - .../vendor/codemirror/mode/verilog/verilog.js | 675 - .../codemirror/mode/verilog/verilog.min.js | 1 - media/vendor/codemirror/mode/vhdl/vhdl.js | 189 - media/vendor/codemirror/mode/vhdl/vhdl.min.js | 1 - media/vendor/codemirror/mode/vue/vue.js | 77 - media/vendor/codemirror/mode/vue/vue.min.js | 1 - media/vendor/codemirror/mode/webidl/webidl.js | 195 - .../codemirror/mode/webidl/webidl.min.js | 1 - media/vendor/codemirror/mode/xml/xml.js | 401 - media/vendor/codemirror/mode/xml/xml.min.js | 1 - media/vendor/codemirror/mode/xquery/xquery.js | 448 - .../codemirror/mode/xquery/xquery.min.js | 1 - media/vendor/codemirror/mode/yacas/yacas.js | 204 - .../vendor/codemirror/mode/yacas/yacas.min.js | 1 - .../mode/yaml-frontmatter/yaml-frontmatter.js | 68 - .../yaml-frontmatter/yaml-frontmatter.min.js | 1 - media/vendor/codemirror/mode/yaml/yaml.js | 119 - media/vendor/codemirror/mode/yaml/yaml.min.js | 1 - media/vendor/codemirror/mode/z80/z80.js | 116 - media/vendor/codemirror/mode/z80/z80.min.js | 1 - media/vendor/codemirror/theme/3024-day.css | 41 - .../vendor/codemirror/theme/3024-day.min.css | 1 - media/vendor/codemirror/theme/3024-night.css | 39 - .../codemirror/theme/3024-night.min.css | 1 - media/vendor/codemirror/theme/abcdef.css | 32 - media/vendor/codemirror/theme/abcdef.min.css | 1 - .../codemirror/theme/ambiance-mobile.css | 5 - .../codemirror/theme/ambiance-mobile.min.css | 1 - media/vendor/codemirror/theme/ambiance.css | 74 - .../vendor/codemirror/theme/ambiance.min.css | 1 - media/vendor/codemirror/theme/base16-dark.css | 38 - .../codemirror/theme/base16-dark.min.css | 1 - .../vendor/codemirror/theme/base16-light.css | 38 - .../codemirror/theme/base16-light.min.css | 1 - media/vendor/codemirror/theme/bespin.css | 34 - media/vendor/codemirror/theme/bespin.min.css | 1 - media/vendor/codemirror/theme/blackboard.css | 32 - .../codemirror/theme/blackboard.min.css | 1 - media/vendor/codemirror/theme/cobalt.css | 25 - media/vendor/codemirror/theme/cobalt.min.css | 1 - media/vendor/codemirror/theme/colorforth.css | 33 - .../codemirror/theme/colorforth.min.css | 1 - media/vendor/codemirror/theme/dracula.css | 40 - media/vendor/codemirror/theme/dracula.min.css | 1 - .../vendor/codemirror/theme/duotone-dark.css | 35 - .../codemirror/theme/duotone-dark.min.css | 1 - .../vendor/codemirror/theme/duotone-light.css | 36 - .../codemirror/theme/duotone-light.min.css | 1 - media/vendor/codemirror/theme/eclipse.css | 23 - media/vendor/codemirror/theme/eclipse.min.css | 1 - media/vendor/codemirror/theme/elegant.css | 13 - media/vendor/codemirror/theme/elegant.min.css | 1 - media/vendor/codemirror/theme/erlang-dark.css | 34 - .../codemirror/theme/erlang-dark.min.css | 1 - media/vendor/codemirror/theme/hopscotch.css | 34 - .../vendor/codemirror/theme/hopscotch.min.css | 1 - media/vendor/codemirror/theme/icecoder.css | 43 - .../vendor/codemirror/theme/icecoder.min.css | 1 - media/vendor/codemirror/theme/isotope.css | 34 - media/vendor/codemirror/theme/isotope.min.css | 1 - media/vendor/codemirror/theme/lesser-dark.css | 47 - .../codemirror/theme/lesser-dark.min.css | 1 - media/vendor/codemirror/theme/liquibyte.css | 95 - .../vendor/codemirror/theme/liquibyte.min.css | 1 - media/vendor/codemirror/theme/material.css | 53 - .../vendor/codemirror/theme/material.min.css | 1 - media/vendor/codemirror/theme/mbo.css | 37 - media/vendor/codemirror/theme/mbo.min.css | 1 - media/vendor/codemirror/theme/mdn-like.css | 46 - .../vendor/codemirror/theme/mdn-like.min.css | 1 - media/vendor/codemirror/theme/midnight.css | 43 - .../vendor/codemirror/theme/midnight.min.css | 1 - media/vendor/codemirror/theme/monokai.css | 36 - media/vendor/codemirror/theme/monokai.min.css | 1 - media/vendor/codemirror/theme/neat.css | 12 - media/vendor/codemirror/theme/neat.min.css | 1 - media/vendor/codemirror/theme/neo.css | 43 - media/vendor/codemirror/theme/neo.min.css | 1 - media/vendor/codemirror/theme/night.css | 27 - media/vendor/codemirror/theme/night.min.css | 1 - .../vendor/codemirror/theme/oceanic-next.css | 44 - .../codemirror/theme/oceanic-next.min.css | 1 - .../vendor/codemirror/theme/panda-syntax.css | 85 - .../codemirror/theme/panda-syntax.min.css | 1 - .../vendor/codemirror/theme/paraiso-dark.css | 38 - .../codemirror/theme/paraiso-dark.min.css | 1 - .../vendor/codemirror/theme/paraiso-light.css | 38 - .../codemirror/theme/paraiso-light.min.css | 1 - .../codemirror/theme/pastel-on-dark.css | 52 - .../codemirror/theme/pastel-on-dark.min.css | 1 - media/vendor/codemirror/theme/railscasts.css | 34 - .../codemirror/theme/railscasts.min.css | 1 - media/vendor/codemirror/theme/rubyblue.css | 25 - .../vendor/codemirror/theme/rubyblue.min.css | 1 - media/vendor/codemirror/theme/seti.css | 44 - media/vendor/codemirror/theme/seti.min.css | 1 - media/vendor/codemirror/theme/shadowfox.css | 52 - .../vendor/codemirror/theme/shadowfox.min.css | 1 - media/vendor/codemirror/theme/solarized.css | 168 - .../vendor/codemirror/theme/solarized.min.css | 1 - media/vendor/codemirror/theme/the-matrix.css | 30 - .../codemirror/theme/the-matrix.min.css | 1 - .../theme/tomorrow-night-bright.css | 35 - .../theme/tomorrow-night-bright.min.css | 1 - .../theme/tomorrow-night-eighties.css | 38 - .../theme/tomorrow-night-eighties.min.css | 1 - media/vendor/codemirror/theme/ttcn.css | 64 - media/vendor/codemirror/theme/ttcn.min.css | 1 - media/vendor/codemirror/theme/twilight.css | 32 - .../vendor/codemirror/theme/twilight.min.css | 1 - media/vendor/codemirror/theme/vibrant-ink.css | 34 - .../codemirror/theme/vibrant-ink.min.css | 1 - media/vendor/codemirror/theme/xq-dark.css | 53 - media/vendor/codemirror/theme/xq-dark.min.css | 1 - media/vendor/codemirror/theme/xq-light.css | 43 - .../vendor/codemirror/theme/xq-light.min.css | 1 - media/vendor/codemirror/theme/yeti.css | 44 - media/vendor/codemirror/theme/yeti.min.css | 1 - media/vendor/codemirror/theme/zenburn.css | 37 - media/vendor/codemirror/theme/zenburn.min.css | 1 - media/vendor/cropperjs/LICENSE | 21 - media/vendor/cropperjs/css/cropper.css | 306 - media/vendor/cropperjs/css/cropper.min.css | 9 - media/vendor/cropperjs/js/cropper.js | 3766 --- media/vendor/cropperjs/js/cropper.min.js | 1 - media/vendor/diff/LICENSE | 31 - media/vendor/diff/js/diff.js | 1839 -- media/vendor/diff/js/diff.min.js | 1 - media/vendor/dragula/css/dragula.css | 22 - media/vendor/dragula/css/dragula.min.css | 1 - media/vendor/dragula/js/dragula.js | 908 - media/vendor/dragula/js/dragula.min.js | 1 - media/vendor/dragula/license | 20 - media/vendor/focus-visible/LICENSE.md | 5 - .../vendor/focus-visible/js/focus-visible.js | 277 - .../focus-visible/js/focus-visible.min.js | 1 - .../focus-visible/js/focus-visible.min.js.map | 1 - .../vendor/font-awesome/css/font-awesome.css | 2337 -- .../font-awesome/css/font-awesome.css.map | 7 - .../font-awesome/css/font-awesome.min.css | 4 - .../vendor/font-awesome/fonts/FontAwesome.otf | Bin 134808 -> 0 bytes .../fonts/fontawesome-webfont.eot | Bin 165742 -> 0 bytes .../fonts/fontawesome-webfont.svg | 2671 -- .../fonts/fontawesome-webfont.ttf | Bin 165548 -> 0 bytes .../fonts/fontawesome-webfont.woff | Bin 98024 -> 0 bytes .../fonts/fontawesome-webfont.woff2 | Bin 77160 -> 0 bytes media/vendor/font-awesome/scss/_animated.scss | 34 - .../font-awesome/scss/_bordered-pulled.scss | 25 - media/vendor/font-awesome/scss/_core.scss | 12 - .../font-awesome/scss/_fixed-width.scss | 6 - media/vendor/font-awesome/scss/_icons.scss | 789 - media/vendor/font-awesome/scss/_larger.scss | 13 - media/vendor/font-awesome/scss/_list.scss | 19 - media/vendor/font-awesome/scss/_mixins.scss | 60 - media/vendor/font-awesome/scss/_path.scss | 15 - .../font-awesome/scss/_rotated-flipped.scss | 20 - .../font-awesome/scss/_screen-reader.scss | 5 - media/vendor/font-awesome/scss/_stacked.scss | 20 - .../vendor/font-awesome/scss/_variables.scss | 800 - .../font-awesome/scss/font-awesome.scss | 18 - media/vendor/joomla-custom-elements/LICENSE | 339 - .../css/joomla-alert.css | 78 - .../css/joomla-alert.min.css | 1 - .../css/joomla-panels.css | 135 - .../css/joomla-panels.min.css | 1 - .../js/joomla-alert-es5.js | 265 - .../js/joomla-alert-es5.min.js | 1 - .../joomla-custom-elements/js/joomla-alert.js | 173 - .../js/joomla-alert.min.js | 1 - .../js/joomla-panels-es5.js | 550 - .../js/joomla-panels-es5.min.js | 1 - .../js/joomla-panels.js | 1 - .../js/joomla-panels.min.js | 1 - media/vendor/jquery-migrate/LICENSE.txt | 36 - .../jquery-migrate/js/jquery-migrate.js | 752 - .../jquery-migrate/js/jquery-migrate.min.js | 1 - media/vendor/jquery-ui/js/jquery.ui.core.js | 1531 - .../vendor/jquery-ui/js/jquery.ui.core.min.js | 1 - .../vendor/jquery-ui/js/jquery.ui.sortable.js | 1098 - .../jquery-ui/js/jquery.ui.sortable.min.js | 1 - media/vendor/jquery/LICENSE.txt | 36 - media/vendor/jquery/js/jquery.js | 10364 ------ media/vendor/jquery/js/jquery.min.js | 1 - media/vendor/jquery/js/jquery.min.map | 1 - .../css/mediaelementplayer-legacy.css | 774 - .../css/mediaelementplayer-legacy.min.css | 1 - .../mediaelement/css/mediaelementplayer.css | 774 - .../css/mediaelementplayer.min.css | 1 - .../vendor/mediaelement/css/mejs-controls.png | Bin 2883 -> 0 bytes .../vendor/mediaelement/css/mejs-controls.svg | 1 - .../js/mediaelement-and-player.js | 8508 ----- .../js/mediaelement-and-player.min.js | 1 - .../js/mediaelement-flash-audio-ogg.swf | Bin 303972 -> 0 bytes .../js/mediaelement-flash-audio.swf | Bin 4556 -> 0 bytes .../js/mediaelement-flash-video-hls.swf | Bin 92955 -> 0 bytes .../js/mediaelement-flash-video-mdash.swf | Bin 401613 -> 0 bytes .../js/mediaelement-flash-video.swf | Bin 8471 -> 0 bytes media/vendor/mediaelement/js/mediaelement.js | 3974 --- .../mediaelement/js/mediaelement.min.js | 1 - media/vendor/minicolors/LICENSE.md | 7 - .../minicolors/css/jquery.minicolors.css | 319 - .../minicolors/css/jquery.minicolors.min.css | 1 - .../minicolors/css/jquery.minicolors.png | Bin 68627 -> 0 bytes .../vendor/minicolors/js/jquery-minicolors.js | 1108 - .../minicolors/js/jquery-minicolors.min.js | 1 - .../minicolors/js/jquery.minicolors.min.js | 8 - media/vendor/punycode/LICENSE-MIT.txt | 20 - media/vendor/punycode/js/punycode.js | 533 - media/vendor/punycode/js/punycode.min.js | 1 - media/vendor/tinymce/changelog.txt | 901 - media/vendor/tinymce/langs/af.js | 230 - media/vendor/tinymce/langs/af.min.js | 1 - media/vendor/tinymce/langs/ar.js | 231 - media/vendor/tinymce/langs/ar.min.js | 1 - media/vendor/tinymce/langs/be.js | 197 - media/vendor/tinymce/langs/be.min.js | 1 - media/vendor/tinymce/langs/bg.js | 179 - media/vendor/tinymce/langs/bg.min.js | 1 - media/vendor/tinymce/langs/bs.js | 231 - media/vendor/tinymce/langs/bs.min.js | 1 - media/vendor/tinymce/langs/ca.js | 219 - media/vendor/tinymce/langs/ca.min.js | 1 - media/vendor/tinymce/langs/cs.js | 196 - media/vendor/tinymce/langs/cs.min.js | 1 - media/vendor/tinymce/langs/cy.js | 230 - media/vendor/tinymce/langs/cy.min.js | 1 - media/vendor/tinymce/langs/da.js | 230 - media/vendor/tinymce/langs/da.min.js | 1 - media/vendor/tinymce/langs/de.js | 230 - media/vendor/tinymce/langs/de.min.js | 1 - media/vendor/tinymce/langs/el.js | 179 - media/vendor/tinymce/langs/el.min.js | 1 - media/vendor/tinymce/langs/es.js | 179 - media/vendor/tinymce/langs/es.min.js | 1 - media/vendor/tinymce/langs/et.js | 179 - media/vendor/tinymce/langs/et.min.js | 1 - media/vendor/tinymce/langs/eu.js | 219 - media/vendor/tinymce/langs/eu.min.js | 1 - media/vendor/tinymce/langs/fa.js | 180 - media/vendor/tinymce/langs/fa.min.js | 1 - media/vendor/tinymce/langs/fi.js | 197 - media/vendor/tinymce/langs/fi.min.js | 1 - media/vendor/tinymce/langs/fo.js | 179 - media/vendor/tinymce/langs/fo.min.js | 1 - media/vendor/tinymce/langs/fr.js | 230 - media/vendor/tinymce/langs/fr.min.js | 1 - media/vendor/tinymce/langs/ga.js | 230 - media/vendor/tinymce/langs/ga.min.js | 1 - media/vendor/tinymce/langs/gl.js | 179 - media/vendor/tinymce/langs/gl.min.js | 1 - media/vendor/tinymce/langs/he.js | 180 - media/vendor/tinymce/langs/he.min.js | 1 - media/vendor/tinymce/langs/hr.js | 230 - media/vendor/tinymce/langs/hr.min.js | 1 - media/vendor/tinymce/langs/hu.js | 230 - media/vendor/tinymce/langs/hu.min.js | 1 - media/vendor/tinymce/langs/id.js | 219 - media/vendor/tinymce/langs/id.min.js | 1 - media/vendor/tinymce/langs/it.js | 232 - media/vendor/tinymce/langs/it.min.js | 1 - media/vendor/tinymce/langs/ja.js | 230 - media/vendor/tinymce/langs/ja.min.js | 1 - media/vendor/tinymce/langs/ka.js | 230 - media/vendor/tinymce/langs/ka.min.js | 1 - media/vendor/tinymce/langs/km.js | 219 - media/vendor/tinymce/langs/km.min.js | 1 - media/vendor/tinymce/langs/ko.js | 179 - media/vendor/tinymce/langs/ko.min.js | 1 - media/vendor/tinymce/langs/lb.js | 179 - media/vendor/tinymce/langs/lb.min.js | 1 - media/vendor/tinymce/langs/lt.js | 179 - media/vendor/tinymce/langs/lt.min.js | 1 - media/vendor/tinymce/langs/lv.js | 197 - media/vendor/tinymce/langs/lv.min.js | 1 - media/vendor/tinymce/langs/mk.js | 233 - media/vendor/tinymce/langs/mk.min.js | 1 - media/vendor/tinymce/langs/ms.js | 176 - media/vendor/tinymce/langs/ms.min.js | 1 - media/vendor/tinymce/langs/nb.js | 230 - media/vendor/tinymce/langs/nb.min.js | 1 - media/vendor/tinymce/langs/nl.js | 230 - media/vendor/tinymce/langs/nl.min.js | 1 - media/vendor/tinymce/langs/pl.js | 219 - media/vendor/tinymce/langs/pl.min.js | 1 - media/vendor/tinymce/langs/pt-BR.js | 230 - media/vendor/tinymce/langs/pt-BR.min.js | 1 - media/vendor/tinymce/langs/pt-PT.js | 230 - media/vendor/tinymce/langs/pt-PT.min.js | 1 - media/vendor/tinymce/langs/readme.md | 3 - media/vendor/tinymce/langs/ro.js | 179 - media/vendor/tinymce/langs/ro.min.js | 1 - media/vendor/tinymce/langs/ru.js | 230 - media/vendor/tinymce/langs/ru.min.js | 1 - media/vendor/tinymce/langs/si-LK.js | 179 - media/vendor/tinymce/langs/si-LK.min.js | 1 - media/vendor/tinymce/langs/sk.js | 230 - media/vendor/tinymce/langs/sk.min.js | 1 - media/vendor/tinymce/langs/sl.js | 230 - media/vendor/tinymce/langs/sl.min.js | 1 - media/vendor/tinymce/langs/sr.js | 179 - media/vendor/tinymce/langs/sr.min.js | 1 - media/vendor/tinymce/langs/sv.js | 230 - media/vendor/tinymce/langs/sv.min.js | 1 - media/vendor/tinymce/langs/sw.js | 230 - media/vendor/tinymce/langs/sw.min.js | 1 - media/vendor/tinymce/langs/sy.js | 179 - media/vendor/tinymce/langs/sy.min.js | 1 - media/vendor/tinymce/langs/ta.js | 230 - media/vendor/tinymce/langs/ta.min.js | 1 - media/vendor/tinymce/langs/th.js | 230 - media/vendor/tinymce/langs/th.min.js | 1 - media/vendor/tinymce/langs/tr.js | 179 - media/vendor/tinymce/langs/tr.min.js | 1 - media/vendor/tinymce/langs/ug.js | 179 - media/vendor/tinymce/langs/ug.min.js | 1 - media/vendor/tinymce/langs/uk.js | 230 - media/vendor/tinymce/langs/uk.min.js | 1 - media/vendor/tinymce/langs/vi.js | 179 - media/vendor/tinymce/langs/vi.min.js | 1 - media/vendor/tinymce/langs/zh-CN.js | 230 - media/vendor/tinymce/langs/zh-CN.min.js | 1 - media/vendor/tinymce/langs/zh-TW.js | 179 - media/vendor/tinymce/langs/zh-TW.min.js | 1 - media/vendor/tinymce/license.txt | 504 - media/vendor/tinymce/plugins/advlist/index.js | 7 - .../tinymce/plugins/advlist/index.min.js | 1 - .../vendor/tinymce/plugins/advlist/plugin.js | 160 - .../tinymce/plugins/advlist/plugin.min.js | 1 - media/vendor/tinymce/plugins/anchor/index.js | 7 - .../tinymce/plugins/anchor/index.min.js | 1 - media/vendor/tinymce/plugins/anchor/plugin.js | 117 - .../tinymce/plugins/anchor/plugin.min.js | 1 - .../vendor/tinymce/plugins/autolink/index.js | 7 - .../tinymce/plugins/autolink/index.min.js | 1 - .../vendor/tinymce/plugins/autolink/plugin.js | 180 - .../tinymce/plugins/autolink/plugin.min.js | 1 - .../tinymce/plugins/autoresize/index.js | 7 - .../tinymce/plugins/autoresize/index.min.js | 1 - .../tinymce/plugins/autoresize/plugin.js | 169 - .../tinymce/plugins/autoresize/plugin.min.js | 1 - .../vendor/tinymce/plugins/autosave/index.js | 7 - .../tinymce/plugins/autosave/index.min.js | 1 - .../vendor/tinymce/plugins/autosave/plugin.js | 226 - .../tinymce/plugins/autosave/plugin.min.js | 1 - media/vendor/tinymce/plugins/bbcode/index.js | 7 - .../tinymce/plugins/bbcode/index.min.js | 1 - media/vendor/tinymce/plugins/bbcode/plugin.js | 101 - .../tinymce/plugins/bbcode/plugin.min.js | 1 - media/vendor/tinymce/plugins/charmap/index.js | 7 - .../tinymce/plugins/charmap/index.min.js | 1 - .../vendor/tinymce/plugins/charmap/plugin.js | 1275 - .../tinymce/plugins/charmap/plugin.min.js | 1 - media/vendor/tinymce/plugins/code/index.js | 7 - .../vendor/tinymce/plugins/code/index.min.js | 1 - media/vendor/tinymce/plugins/code/plugin.js | 94 - .../vendor/tinymce/plugins/code/plugin.min.js | 1 - .../tinymce/plugins/codesample/css/prism.css | 138 - .../plugins/codesample/css/prism.min.css | 1 - .../tinymce/plugins/codesample/index.js | 7 - .../tinymce/plugins/codesample/index.min.js | 1 - .../tinymce/plugins/codesample/plugin.js | 969 - .../tinymce/plugins/codesample/plugin.min.js | 1 - .../tinymce/plugins/colorpicker/index.js | 7 - .../tinymce/plugins/colorpicker/index.min.js | 1 - .../tinymce/plugins/colorpicker/plugin.js | 126 - .../tinymce/plugins/colorpicker/plugin.min.js | 1 - .../tinymce/plugins/contextmenu/index.js | 7 - .../tinymce/plugins/contextmenu/index.min.js | 1 - .../tinymce/plugins/contextmenu/plugin.js | 168 - .../tinymce/plugins/contextmenu/plugin.min.js | 1 - .../tinymce/plugins/directionality/index.js | 7 - .../plugins/directionality/index.min.js | 1 - .../tinymce/plugins/directionality/plugin.js | 66 - .../plugins/directionality/plugin.min.js | 1 - .../plugins/emoticons/img/smiley-cool.gif | Bin 354 -> 0 bytes .../plugins/emoticons/img/smiley-cry.gif | Bin 329 -> 0 bytes .../emoticons/img/smiley-embarassed.gif | Bin 331 -> 0 bytes .../emoticons/img/smiley-foot-in-mouth.gif | Bin 342 -> 0 bytes .../plugins/emoticons/img/smiley-frown.gif | Bin 340 -> 0 bytes .../plugins/emoticons/img/smiley-innocent.gif | Bin 336 -> 0 bytes .../plugins/emoticons/img/smiley-kiss.gif | Bin 338 -> 0 bytes .../plugins/emoticons/img/smiley-laughing.gif | Bin 343 -> 0 bytes .../emoticons/img/smiley-money-mouth.gif | Bin 321 -> 0 bytes .../plugins/emoticons/img/smiley-sealed.gif | Bin 323 -> 0 bytes .../plugins/emoticons/img/smiley-smile.gif | Bin 344 -> 0 bytes .../emoticons/img/smiley-surprised.gif | Bin 338 -> 0 bytes .../emoticons/img/smiley-tongue-out.gif | Bin 328 -> 0 bytes .../emoticons/img/smiley-undecided.gif | Bin 337 -> 0 bytes .../plugins/emoticons/img/smiley-wink.gif | Bin 350 -> 0 bytes .../plugins/emoticons/img/smiley-yell.gif | Bin 336 -> 0 bytes .../vendor/tinymce/plugins/emoticons/index.js | 7 - .../tinymce/plugins/emoticons/index.min.js | 1 - .../tinymce/plugins/emoticons/plugin.js | 87 - .../tinymce/plugins/emoticons/plugin.min.js | 1 - .../vendor/tinymce/plugins/fullpage/index.js | 7 - .../tinymce/plugins/fullpage/index.min.js | 1 - .../vendor/tinymce/plugins/fullpage/plugin.js | 519 - .../tinymce/plugins/fullpage/plugin.min.js | 1 - .../tinymce/plugins/fullscreen/index.js | 7 - .../tinymce/plugins/fullscreen/index.min.js | 1 - .../tinymce/plugins/fullscreen/plugin.js | 177 - .../tinymce/plugins/fullscreen/plugin.min.js | 1 - .../vendor/tinymce/plugins/help/img/logo.png | Bin 13208 -> 0 bytes media/vendor/tinymce/plugins/help/index.js | 7 - .../vendor/tinymce/plugins/help/index.min.js | 1 - media/vendor/tinymce/plugins/help/plugin.js | 1057 - .../vendor/tinymce/plugins/help/plugin.min.js | 1 - media/vendor/tinymce/plugins/hr/index.js | 7 - media/vendor/tinymce/plugins/hr/index.min.js | 1 - media/vendor/tinymce/plugins/hr/plugin.js | 39 - media/vendor/tinymce/plugins/hr/plugin.min.js | 1 - media/vendor/tinymce/plugins/image/index.js | 7 - .../vendor/tinymce/plugins/image/index.min.js | 1 - media/vendor/tinymce/plugins/image/plugin.js | 1008 - .../tinymce/plugins/image/plugin.min.js | 1 - .../tinymce/plugins/imagetools/index.js | 7 - .../tinymce/plugins/imagetools/index.min.js | 1 - .../tinymce/plugins/imagetools/plugin.js | 3429 -- .../tinymce/plugins/imagetools/plugin.min.js | 1 - .../vendor/tinymce/plugins/importcss/index.js | 7 - .../tinymce/plugins/importcss/index.min.js | 1 - .../tinymce/plugins/importcss/plugin.js | 264 - .../tinymce/plugins/importcss/plugin.min.js | 1 - .../tinymce/plugins/insertdatetime/index.js | 7 - .../plugins/insertdatetime/index.min.js | 1 - .../tinymce/plugins/insertdatetime/plugin.js | 173 - .../plugins/insertdatetime/plugin.min.js | 1 - .../tinymce/plugins/legacyoutput/index.js | 7 - .../tinymce/plugins/legacyoutput/index.min.js | 1 - .../tinymce/plugins/legacyoutput/plugin.js | 220 - .../plugins/legacyoutput/plugin.min.js | 1 - media/vendor/tinymce/plugins/link/index.js | 7 - .../vendor/tinymce/plugins/link/index.min.js | 1 - media/vendor/tinymce/plugins/link/plugin.js | 707 - .../vendor/tinymce/plugins/link/plugin.min.js | 1 - media/vendor/tinymce/plugins/lists/index.js | 7 - .../vendor/tinymce/plugins/lists/index.min.js | 1 - media/vendor/tinymce/plugins/lists/plugin.js | 1109 - .../tinymce/plugins/lists/plugin.min.js | 1 - media/vendor/tinymce/plugins/media/index.js | 7 - .../vendor/tinymce/plugins/media/index.min.js | 1 - media/vendor/tinymce/plugins/media/plugin.js | 1154 - .../tinymce/plugins/media/plugin.min.js | 1 - .../tinymce/plugins/nonbreaking/index.js | 7 - .../tinymce/plugins/nonbreaking/index.min.js | 1 - .../tinymce/plugins/nonbreaking/plugin.js | 84 - .../tinymce/plugins/nonbreaking/plugin.min.js | 1 - .../tinymce/plugins/noneditable/index.js | 7 - .../tinymce/plugins/noneditable/index.min.js | 1 - .../tinymce/plugins/noneditable/plugin.js | 118 - .../tinymce/plugins/noneditable/plugin.min.js | 1 - .../vendor/tinymce/plugins/pagebreak/index.js | 7 - .../tinymce/plugins/pagebreak/index.min.js | 1 - .../tinymce/plugins/pagebreak/plugin.js | 109 - .../tinymce/plugins/pagebreak/plugin.min.js | 1 - media/vendor/tinymce/plugins/paste/index.js | 7 - .../vendor/tinymce/plugins/paste/index.min.js | 1 - media/vendor/tinymce/plugins/paste/plugin.js | 1585 - .../tinymce/plugins/paste/plugin.min.js | 1 - media/vendor/tinymce/plugins/preview/index.js | 7 - .../tinymce/plugins/preview/index.min.js | 1 - .../vendor/tinymce/plugins/preview/plugin.js | 123 - .../tinymce/plugins/preview/plugin.min.js | 1 - media/vendor/tinymce/plugins/print/index.js | 7 - .../vendor/tinymce/plugins/print/index.min.js | 1 - media/vendor/tinymce/plugins/print/plugin.js | 38 - .../tinymce/plugins/print/plugin.min.js | 1 - media/vendor/tinymce/plugins/save/index.js | 7 - .../vendor/tinymce/plugins/save/index.min.js | 1 - media/vendor/tinymce/plugins/save/plugin.js | 120 - .../vendor/tinymce/plugins/save/plugin.min.js | 1 - .../tinymce/plugins/searchreplace/index.js | 7 - .../plugins/searchreplace/index.min.js | 1 - .../tinymce/plugins/searchreplace/plugin.js | 603 - .../plugins/searchreplace/plugin.min.js | 1 - .../tinymce/plugins/spellchecker/index.js | 7 - .../tinymce/plugins/spellchecker/index.min.js | 1 - .../tinymce/plugins/spellchecker/plugin.js | 757 - .../plugins/spellchecker/plugin.min.js | 1 - .../vendor/tinymce/plugins/tabfocus/index.js | 7 - .../tinymce/plugins/tabfocus/index.min.js | 1 - .../vendor/tinymce/plugins/tabfocus/plugin.js | 124 - .../tinymce/plugins/tabfocus/plugin.min.js | 1 - media/vendor/tinymce/plugins/table/index.js | 7 - .../vendor/tinymce/plugins/table/index.min.js | 1 - media/vendor/tinymce/plugins/table/plugin.js | 10435 ------- .../tinymce/plugins/table/plugin.min.js | 1 - .../vendor/tinymce/plugins/template/index.js | 7 - .../tinymce/plugins/template/index.min.js | 1 - .../vendor/tinymce/plugins/template/plugin.js | 393 - .../tinymce/plugins/template/plugin.min.js | 1 - .../vendor/tinymce/plugins/textcolor/index.js | 7 - .../tinymce/plugins/textcolor/index.min.js | 1 - .../tinymce/plugins/textcolor/plugin.js | 346 - .../tinymce/plugins/textcolor/plugin.min.js | 1 - .../tinymce/plugins/textpattern/index.js | 7 - .../tinymce/plugins/textpattern/index.min.js | 1 - .../tinymce/plugins/textpattern/plugin.js | 370 - .../tinymce/plugins/textpattern/plugin.min.js | 1 - media/vendor/tinymce/plugins/toc/index.js | 7 - media/vendor/tinymce/plugins/toc/index.min.js | 1 - media/vendor/tinymce/plugins/toc/plugin.js | 228 - .../vendor/tinymce/plugins/toc/plugin.min.js | 1 - .../plugins/visualblocks/css/visualblocks.css | 154 - .../visualblocks/css/visualblocks.min.css | 1 - .../tinymce/plugins/visualblocks/index.js | 7 - .../tinymce/plugins/visualblocks/index.min.js | 1 - .../tinymce/plugins/visualblocks/plugin.js | 135 - .../plugins/visualblocks/plugin.min.js | 1 - .../tinymce/plugins/visualchars/index.js | 7 - .../tinymce/plugins/visualchars/index.min.js | 1 - .../tinymce/plugins/visualchars/plugin.js | 716 - .../tinymce/plugins/visualchars/plugin.min.js | 1 - .../vendor/tinymce/plugins/wordcount/index.js | 7 - .../tinymce/plugins/wordcount/index.min.js | 1 - .../tinymce/plugins/wordcount/plugin.js | 318 - .../tinymce/plugins/wordcount/plugin.min.js | 1 - .../skins/lightgray/content.inline.min.css | 1 - .../tinymce/skins/lightgray/content.min.css | 1 - .../skins/lightgray/content.mobile.min.css | 1 - .../skins/lightgray/fonts/tinymce-mobile.woff | Bin 4624 -> 0 bytes .../skins/lightgray/fonts/tinymce-small.eot | Bin 9492 -> 0 bytes .../skins/lightgray/fonts/tinymce-small.svg | 63 - .../skins/lightgray/fonts/tinymce-small.ttf | Bin 9304 -> 0 bytes .../skins/lightgray/fonts/tinymce-small.woff | Bin 9380 -> 0 bytes .../tinymce/skins/lightgray/fonts/tinymce.eot | Bin 18808 -> 0 bytes .../tinymce/skins/lightgray/fonts/tinymce.svg | 131 - .../tinymce/skins/lightgray/fonts/tinymce.ttf | Bin 18644 -> 0 bytes .../skins/lightgray/fonts/tinymce.woff | Bin 18720 -> 0 bytes .../tinymce/skins/lightgray/img/anchor.gif | Bin 53 -> 0 bytes .../tinymce/skins/lightgray/img/loader.gif | Bin 2608 -> 0 bytes .../tinymce/skins/lightgray/img/object.gif | Bin 152 -> 0 bytes .../tinymce/skins/lightgray/img/trans.gif | Bin 43 -> 0 bytes .../tinymce/skins/lightgray/skin.min.css | 1 - .../skins/lightgray/skin.mobile.min.css | 2 - media/vendor/tinymce/templates/layout1.html | 15 - media/vendor/tinymce/templates/snippet1.html | 1 - media/vendor/tinymce/themes/inlite/index.js | 7 - .../vendor/tinymce/themes/inlite/index.min.js | 1 - media/vendor/tinymce/themes/inlite/theme.js | 10583 ------- .../vendor/tinymce/themes/inlite/theme.min.js | 1 - media/vendor/tinymce/themes/mobile/index.js | 7 - .../vendor/tinymce/themes/mobile/index.min.js | 1 - media/vendor/tinymce/themes/mobile/theme.js | 14416 --------- .../vendor/tinymce/themes/mobile/theme.min.js | 1 - media/vendor/tinymce/themes/modern/index.js | 7 - .../vendor/tinymce/themes/modern/index.min.js | 1 - media/vendor/tinymce/themes/modern/theme.js | 10407 ------ .../vendor/tinymce/themes/modern/theme.min.js | 1 - media/vendor/tinymce/tinymce.js | 26046 ---------------- media/vendor/tinymce/tinymce.min.js | 1 - media/vendor/webcomponentsjs/LICENSE.md | 19 - .../webcomponentsjs/js/webcomponents-ce.js | 56 - .../js/webcomponents-ce.min.js | 1 - .../js/webcomponents-sd-ce-pf.js | 234 - .../js/webcomponents-sd-ce-pf.min.js | 1 - .../webcomponentsjs/js/webcomponents-sd-ce.js | 173 - .../js/webcomponents-sd-ce.min.js | 1 - .../webcomponentsjs/js/webcomponents-sd.js | 138 - .../js/webcomponents-sd.min.js | 1 - 1711 files changed, 402272 deletions(-) delete mode 100644 libraries/vendor/autoload.php delete mode 120000 libraries/vendor/bin/generate-defuse-key delete mode 100644 libraries/vendor/composer/ClassLoader.php delete mode 100644 libraries/vendor/composer/LICENSE delete mode 100644 libraries/vendor/composer/autoload_classmap.php delete mode 100644 libraries/vendor/composer/autoload_files.php delete mode 100644 libraries/vendor/composer/autoload_namespaces.php delete mode 100644 libraries/vendor/composer/autoload_psr4.php delete mode 100644 libraries/vendor/composer/autoload_real.php delete mode 100644 libraries/vendor/composer/autoload_static.php delete mode 100644 libraries/vendor/composer/ca-bundle/LICENSE delete mode 100644 libraries/vendor/composer/ca-bundle/res/cacert.pem delete mode 100644 libraries/vendor/composer/ca-bundle/src/CaBundle.php delete mode 100644 libraries/vendor/composer/installed.json delete mode 100644 libraries/vendor/defuse/php-encryption/LICENSE delete mode 100755 libraries/vendor/defuse/php-encryption/bin/generate-defuse-key delete mode 100644 libraries/vendor/defuse/php-encryption/src/Core.php delete mode 100644 libraries/vendor/defuse/php-encryption/src/Crypto.php delete mode 100644 libraries/vendor/defuse/php-encryption/src/DerivedKeys.php delete mode 100644 libraries/vendor/defuse/php-encryption/src/Encoding.php delete mode 100644 libraries/vendor/defuse/php-encryption/src/Exception/BadFormatException.php delete mode 100644 libraries/vendor/defuse/php-encryption/src/Exception/CryptoException.php delete mode 100644 libraries/vendor/defuse/php-encryption/src/Exception/EnvironmentIsBrokenException.php delete mode 100644 libraries/vendor/defuse/php-encryption/src/Exception/IOException.php delete mode 100644 libraries/vendor/defuse/php-encryption/src/Exception/WrongKeyOrModifiedCiphertextException.php delete mode 100644 libraries/vendor/defuse/php-encryption/src/File.php delete mode 100644 libraries/vendor/defuse/php-encryption/src/Key.php delete mode 100644 libraries/vendor/defuse/php-encryption/src/KeyOrPassword.php delete mode 100644 libraries/vendor/defuse/php-encryption/src/KeyProtectedByPassword.php delete mode 100644 libraries/vendor/defuse/php-encryption/src/RuntimeTests.php delete mode 100644 libraries/vendor/doctrine/inflector/LICENSE delete mode 100644 libraries/vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php delete mode 100644 libraries/vendor/fig/link-util/LICENSE.md delete mode 100644 libraries/vendor/fig/link-util/src/EvolvableLinkProviderTrait.php delete mode 100644 libraries/vendor/fig/link-util/src/EvolvableLinkTrait.php delete mode 100644 libraries/vendor/fig/link-util/src/GenericLinkProvider.php delete mode 100644 libraries/vendor/fig/link-util/src/Link.php delete mode 100644 libraries/vendor/fig/link-util/src/LinkProviderTrait.php delete mode 100644 libraries/vendor/fig/link-util/src/LinkTrait.php delete mode 100644 libraries/vendor/fig/link-util/src/TemplatedHrefTrait.php delete mode 100644 libraries/vendor/google/recaptcha/LICENSE delete mode 100644 libraries/vendor/google/recaptcha/src/ReCaptcha/ReCaptcha.php delete mode 100644 libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod.php delete mode 100644 libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Curl.php delete mode 100644 libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/CurlPost.php delete mode 100644 libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php delete mode 100644 libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Socket.php delete mode 100644 libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/SocketPost.php delete mode 100644 libraries/vendor/google/recaptcha/src/ReCaptcha/RequestParameters.php delete mode 100644 libraries/vendor/google/recaptcha/src/ReCaptcha/Response.php delete mode 100644 libraries/vendor/google/recaptcha/src/autoload.php delete mode 100644 libraries/vendor/joomla/application/LICENSE delete mode 100644 libraries/vendor/joomla/application/src/AbstractApplication.php delete mode 100644 libraries/vendor/joomla/application/src/AbstractWebApplication.php delete mode 100644 libraries/vendor/joomla/application/src/ApplicationEvents.php delete mode 100644 libraries/vendor/joomla/application/src/Controller/ContainerControllerResolver.php delete mode 100644 libraries/vendor/joomla/application/src/Controller/ControllerResolver.php delete mode 100644 libraries/vendor/joomla/application/src/Controller/ControllerResolverInterface.php delete mode 100644 libraries/vendor/joomla/application/src/Event/ApplicationErrorEvent.php delete mode 100644 libraries/vendor/joomla/application/src/Event/ApplicationEvent.php delete mode 100644 libraries/vendor/joomla/application/src/Exception/UnableToWriteBody.php delete mode 100644 libraries/vendor/joomla/application/src/Web/WebClient.php delete mode 100644 libraries/vendor/joomla/application/src/WebApplication.php delete mode 100644 libraries/vendor/joomla/archive/LICENSE delete mode 100644 libraries/vendor/joomla/archive/src/Archive.php delete mode 100644 libraries/vendor/joomla/archive/src/Bzip2.php delete mode 100644 libraries/vendor/joomla/archive/src/ExtractableInterface.php delete mode 100644 libraries/vendor/joomla/archive/src/Gzip.php delete mode 100644 libraries/vendor/joomla/archive/src/Tar.php delete mode 100644 libraries/vendor/joomla/archive/src/Zip.php delete mode 100644 libraries/vendor/joomla/authentication/LICENSE delete mode 100644 libraries/vendor/joomla/authentication/src/AbstractUsernamePasswordAuthenticationStrategy.php delete mode 100644 libraries/vendor/joomla/authentication/src/Authentication.php delete mode 100644 libraries/vendor/joomla/authentication/src/AuthenticationStrategyInterface.php delete mode 100644 libraries/vendor/joomla/authentication/src/Password/Argon2iHandler.php delete mode 100644 libraries/vendor/joomla/authentication/src/Password/BCryptHandler.php delete mode 100644 libraries/vendor/joomla/authentication/src/Password/HandlerInterface.php delete mode 100644 libraries/vendor/joomla/authentication/src/Strategies/DatabaseStrategy.php delete mode 100644 libraries/vendor/joomla/authentication/src/Strategies/LocalStrategy.php delete mode 100644 libraries/vendor/joomla/console/LICENSE delete mode 100644 libraries/vendor/joomla/console/src/AbstractCommand.php delete mode 100644 libraries/vendor/joomla/console/src/Application.php delete mode 100644 libraries/vendor/joomla/console/src/Command/HelpCommand.php delete mode 100644 libraries/vendor/joomla/console/src/Command/ListCommand.php delete mode 100644 libraries/vendor/joomla/console/src/CommandInterface.php delete mode 100644 libraries/vendor/joomla/console/src/ConsoleEvents.php delete mode 100644 libraries/vendor/joomla/console/src/Descriptor/ApplicationDescription.php delete mode 100644 libraries/vendor/joomla/console/src/Descriptor/TextDescriptor.php delete mode 100644 libraries/vendor/joomla/console/src/Event/BeforeCommandExecuteEvent.php delete mode 100644 libraries/vendor/joomla/console/src/Event/ConsoleErrorEvent.php delete mode 100644 libraries/vendor/joomla/console/src/Event/ConsoleEvent.php delete mode 100644 libraries/vendor/joomla/console/src/Event/TerminateEvent.php delete mode 100644 libraries/vendor/joomla/console/src/Helper/DescriptorHelper.php delete mode 100644 libraries/vendor/joomla/console/src/Input/JoomlaInput.php delete mode 100644 libraries/vendor/joomla/console/src/Loader/ContainerLoader.php delete mode 100644 libraries/vendor/joomla/console/src/Loader/LoaderInterface.php delete mode 100644 libraries/vendor/joomla/controller/LICENSE delete mode 100644 libraries/vendor/joomla/controller/src/AbstractController.php delete mode 100644 libraries/vendor/joomla/controller/src/ControllerInterface.php delete mode 100644 libraries/vendor/joomla/crypt/LICENSE delete mode 100644 libraries/vendor/joomla/crypt/src/Cipher/Crypto.php delete mode 100644 libraries/vendor/joomla/crypt/src/Cipher/OpenSSL.php delete mode 100644 libraries/vendor/joomla/crypt/src/Cipher/Sodium.php delete mode 100644 libraries/vendor/joomla/crypt/src/CipherInterface.php delete mode 100644 libraries/vendor/joomla/crypt/src/Crypt.php delete mode 100644 libraries/vendor/joomla/crypt/src/Exception/InvalidKeyTypeException.php delete mode 100644 libraries/vendor/joomla/crypt/src/Key.php delete mode 100644 libraries/vendor/joomla/data/LICENSE delete mode 100644 libraries/vendor/joomla/data/src/DataObject.php delete mode 100644 libraries/vendor/joomla/data/src/DataSet.php delete mode 100644 libraries/vendor/joomla/data/src/DumpableInterface.php delete mode 100644 libraries/vendor/joomla/database/LICENSE delete mode 100644 libraries/vendor/joomla/database/src/DatabaseDriver.php delete mode 100644 libraries/vendor/joomla/database/src/DatabaseEvents.php delete mode 100644 libraries/vendor/joomla/database/src/DatabaseExporter.php delete mode 100644 libraries/vendor/joomla/database/src/DatabaseFactory.php delete mode 100644 libraries/vendor/joomla/database/src/DatabaseImporter.php delete mode 100644 libraries/vendor/joomla/database/src/DatabaseInterface.php delete mode 100644 libraries/vendor/joomla/database/src/DatabaseIterator.php delete mode 100644 libraries/vendor/joomla/database/src/DatabaseQuery.php delete mode 100644 libraries/vendor/joomla/database/src/Event/ConnectionEvent.php delete mode 100644 libraries/vendor/joomla/database/src/Exception/ConnectionFailureException.php delete mode 100644 libraries/vendor/joomla/database/src/Exception/ExecutionFailureException.php delete mode 100644 libraries/vendor/joomla/database/src/Exception/PrepareStatementFailureException.php delete mode 100644 libraries/vendor/joomla/database/src/Exception/UnsupportedAdapterException.php delete mode 100644 libraries/vendor/joomla/database/src/FetchMode.php delete mode 100644 libraries/vendor/joomla/database/src/FetchOrientation.php delete mode 100644 libraries/vendor/joomla/database/src/Monitor/ChainedMonitor.php delete mode 100644 libraries/vendor/joomla/database/src/Monitor/LoggingMonitor.php delete mode 100644 libraries/vendor/joomla/database/src/Mysql/MysqlDriver.php delete mode 100644 libraries/vendor/joomla/database/src/Mysql/MysqlExporter.php delete mode 100644 libraries/vendor/joomla/database/src/Mysql/MysqlImporter.php delete mode 100644 libraries/vendor/joomla/database/src/Mysql/MysqlQuery.php delete mode 100644 libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php delete mode 100644 libraries/vendor/joomla/database/src/Mysqli/MysqliExporter.php delete mode 100644 libraries/vendor/joomla/database/src/Mysqli/MysqliImporter.php delete mode 100644 libraries/vendor/joomla/database/src/Mysqli/MysqliQuery.php delete mode 100644 libraries/vendor/joomla/database/src/Mysqli/MysqliStatement.php delete mode 100644 libraries/vendor/joomla/database/src/ParameterType.php delete mode 100644 libraries/vendor/joomla/database/src/Pdo/PdoDriver.php delete mode 100644 libraries/vendor/joomla/database/src/Pdo/PdoQuery.php delete mode 100644 libraries/vendor/joomla/database/src/Pdo/PdoStatement.php delete mode 100644 libraries/vendor/joomla/database/src/Pgsql/PgsqlDriver.php delete mode 100644 libraries/vendor/joomla/database/src/Pgsql/PgsqlExporter.php delete mode 100644 libraries/vendor/joomla/database/src/Pgsql/PgsqlImporter.php delete mode 100644 libraries/vendor/joomla/database/src/Pgsql/PgsqlQuery.php delete mode 100644 libraries/vendor/joomla/database/src/Query/LimitableInterface.php delete mode 100644 libraries/vendor/joomla/database/src/Query/MysqlQueryBuilder.php delete mode 100644 libraries/vendor/joomla/database/src/Query/PostgresqlQueryBuilder.php delete mode 100644 libraries/vendor/joomla/database/src/Query/PreparableInterface.php delete mode 100644 libraries/vendor/joomla/database/src/Query/QueryElement.php delete mode 100644 libraries/vendor/joomla/database/src/QueryInterface.php delete mode 100644 libraries/vendor/joomla/database/src/QueryMonitorInterface.php delete mode 100644 libraries/vendor/joomla/database/src/Service/DatabaseProvider.php delete mode 100644 libraries/vendor/joomla/database/src/Sqlazure/SqlazureDriver.php delete mode 100644 libraries/vendor/joomla/database/src/Sqlazure/SqlazureQuery.php delete mode 100644 libraries/vendor/joomla/database/src/Sqlite/SqliteDriver.php delete mode 100644 libraries/vendor/joomla/database/src/Sqlite/SqliteQuery.php delete mode 100644 libraries/vendor/joomla/database/src/Sqlsrv/SqlsrvDriver.php delete mode 100644 libraries/vendor/joomla/database/src/Sqlsrv/SqlsrvQuery.php delete mode 100644 libraries/vendor/joomla/database/src/Sqlsrv/SqlsrvStatement.php delete mode 100644 libraries/vendor/joomla/database/src/StatementInterface.php delete mode 100644 libraries/vendor/joomla/database/src/UTF8MB4SupportInterface.php delete mode 100644 libraries/vendor/joomla/di/LICENSE delete mode 100644 libraries/vendor/joomla/di/src/Container.php delete mode 100644 libraries/vendor/joomla/di/src/ContainerAwareInterface.php delete mode 100644 libraries/vendor/joomla/di/src/ContainerAwareTrait.php delete mode 100644 libraries/vendor/joomla/di/src/Exception/ContainerNotFoundException.php delete mode 100644 libraries/vendor/joomla/di/src/Exception/DependencyResolutionException.php delete mode 100644 libraries/vendor/joomla/di/src/Exception/KeyNotFoundException.php delete mode 100644 libraries/vendor/joomla/di/src/Exception/ProtectedKeyException.php delete mode 100644 libraries/vendor/joomla/di/src/Resource.php delete mode 100644 libraries/vendor/joomla/di/src/ServiceProviderInterface.php delete mode 100644 libraries/vendor/joomla/event/LICENSE delete mode 100644 libraries/vendor/joomla/event/src/AbstractEvent.php delete mode 100644 libraries/vendor/joomla/event/src/DelegatingDispatcher.php delete mode 100644 libraries/vendor/joomla/event/src/Dispatcher.php delete mode 100644 libraries/vendor/joomla/event/src/DispatcherAwareInterface.php delete mode 100644 libraries/vendor/joomla/event/src/DispatcherAwareTrait.php delete mode 100644 libraries/vendor/joomla/event/src/DispatcherInterface.php delete mode 100644 libraries/vendor/joomla/event/src/Event.php delete mode 100644 libraries/vendor/joomla/event/src/EventImmutable.php delete mode 100644 libraries/vendor/joomla/event/src/EventInterface.php delete mode 100644 libraries/vendor/joomla/event/src/ListenersPriorityQueue.php delete mode 100644 libraries/vendor/joomla/event/src/Priority.php delete mode 100644 libraries/vendor/joomla/event/src/SubscriberInterface.php delete mode 100644 libraries/vendor/joomla/filesystem/LICENSE delete mode 100644 libraries/vendor/joomla/filesystem/meta/language/en-GB/en-GB.lib_joomla_filesystem_patcher.ini delete mode 100644 libraries/vendor/joomla/filesystem/src/Buffer.php delete mode 100644 libraries/vendor/joomla/filesystem/src/Clients/FtpClient.php delete mode 100644 libraries/vendor/joomla/filesystem/src/Exception/FilesystemException.php delete mode 100644 libraries/vendor/joomla/filesystem/src/File.php delete mode 100644 libraries/vendor/joomla/filesystem/src/Folder.php delete mode 100644 libraries/vendor/joomla/filesystem/src/Helper.php delete mode 100644 libraries/vendor/joomla/filesystem/src/Patcher.php delete mode 100644 libraries/vendor/joomla/filesystem/src/Path.php delete mode 100644 libraries/vendor/joomla/filesystem/src/Stream.php delete mode 100644 libraries/vendor/joomla/filesystem/src/Stream/String.php delete mode 100644 libraries/vendor/joomla/filesystem/src/Stream/StringWrapper.php delete mode 100644 libraries/vendor/joomla/filesystem/src/Support/StringController.php delete mode 100644 libraries/vendor/joomla/filter/LICENSE delete mode 100644 libraries/vendor/joomla/filter/src/InputFilter.php delete mode 100644 libraries/vendor/joomla/filter/src/OutputFilter.php delete mode 100644 libraries/vendor/joomla/http/LICENSE delete mode 100644 libraries/vendor/joomla/http/src/AbstractTransport.php delete mode 100644 libraries/vendor/joomla/http/src/Exception/InvalidResponseCodeException.php delete mode 100644 libraries/vendor/joomla/http/src/Exception/UnexpectedResponseException.php delete mode 100644 libraries/vendor/joomla/http/src/Http.php delete mode 100644 libraries/vendor/joomla/http/src/HttpFactory.php delete mode 100644 libraries/vendor/joomla/http/src/Response.php delete mode 100644 libraries/vendor/joomla/http/src/Transport/Curl.php delete mode 100644 libraries/vendor/joomla/http/src/Transport/Socket.php delete mode 100644 libraries/vendor/joomla/http/src/Transport/Stream.php delete mode 100644 libraries/vendor/joomla/http/src/TransportInterface.php delete mode 100644 libraries/vendor/joomla/image/LICENSE delete mode 100644 libraries/vendor/joomla/image/src/Filter/Backgroundfill.php delete mode 100644 libraries/vendor/joomla/image/src/Filter/Brightness.php delete mode 100644 libraries/vendor/joomla/image/src/Filter/Contrast.php delete mode 100644 libraries/vendor/joomla/image/src/Filter/Edgedetect.php delete mode 100644 libraries/vendor/joomla/image/src/Filter/Emboss.php delete mode 100644 libraries/vendor/joomla/image/src/Filter/Grayscale.php delete mode 100644 libraries/vendor/joomla/image/src/Filter/Negate.php delete mode 100644 libraries/vendor/joomla/image/src/Filter/Sketchy.php delete mode 100644 libraries/vendor/joomla/image/src/Filter/Smooth.php delete mode 100644 libraries/vendor/joomla/image/src/Image.php delete mode 100644 libraries/vendor/joomla/image/src/ImageFilter.php delete mode 100644 libraries/vendor/joomla/input/LICENSE delete mode 100644 libraries/vendor/joomla/input/src/Cli.php delete mode 100644 libraries/vendor/joomla/input/src/Cookie.php delete mode 100644 libraries/vendor/joomla/input/src/Files.php delete mode 100644 libraries/vendor/joomla/input/src/Input.php delete mode 100644 libraries/vendor/joomla/input/src/Json.php delete mode 100644 libraries/vendor/joomla/ldap/LICENSE delete mode 100644 libraries/vendor/joomla/ldap/src/LdapClient.php delete mode 100644 libraries/vendor/joomla/oauth1/LICENSE delete mode 100644 libraries/vendor/joomla/oauth1/src/Client.php delete mode 100644 libraries/vendor/joomla/oauth2/LICENSE delete mode 100644 libraries/vendor/joomla/oauth2/src/Client.php delete mode 100644 libraries/vendor/joomla/registry/LICENSE delete mode 100644 libraries/vendor/joomla/registry/src/Factory.php delete mode 100644 libraries/vendor/joomla/registry/src/Format/Ini.php delete mode 100644 libraries/vendor/joomla/registry/src/Format/Json.php delete mode 100644 libraries/vendor/joomla/registry/src/Format/Php.php delete mode 100644 libraries/vendor/joomla/registry/src/Format/Xml.php delete mode 100644 libraries/vendor/joomla/registry/src/Format/Yaml.php delete mode 100644 libraries/vendor/joomla/registry/src/FormatInterface.php delete mode 100644 libraries/vendor/joomla/registry/src/Registry.php delete mode 100644 libraries/vendor/joomla/session/LICENSE delete mode 100644 libraries/vendor/joomla/session/meta/sql/mysql.sql delete mode 100644 libraries/vendor/joomla/session/meta/sql/pgsql.sql delete mode 100644 libraries/vendor/joomla/session/meta/sql/sqlite.sql delete mode 100644 libraries/vendor/joomla/session/meta/sql/sqlsrv.sql delete mode 100644 libraries/vendor/joomla/session/src/Exception/InvalidSessionException.php delete mode 100644 libraries/vendor/joomla/session/src/Handler/ApcuHandler.php delete mode 100644 libraries/vendor/joomla/session/src/Handler/DatabaseHandler.php delete mode 100644 libraries/vendor/joomla/session/src/Handler/FilesystemHandler.php delete mode 100644 libraries/vendor/joomla/session/src/Handler/MemcachedHandler.php delete mode 100644 libraries/vendor/joomla/session/src/Handler/RedisHandler.php delete mode 100644 libraries/vendor/joomla/session/src/Handler/WincacheHandler.php delete mode 100644 libraries/vendor/joomla/session/src/HandlerInterface.php delete mode 100644 libraries/vendor/joomla/session/src/Session.php delete mode 100644 libraries/vendor/joomla/session/src/SessionEvent.php delete mode 100644 libraries/vendor/joomla/session/src/SessionEvents.php delete mode 100644 libraries/vendor/joomla/session/src/SessionInterface.php delete mode 100644 libraries/vendor/joomla/session/src/Storage/NativeStorage.php delete mode 100644 libraries/vendor/joomla/session/src/Storage/RuntimeStorage.php delete mode 100644 libraries/vendor/joomla/session/src/StorageInterface.php delete mode 100644 libraries/vendor/joomla/session/src/Validator/AddressValidator.php delete mode 100644 libraries/vendor/joomla/session/src/Validator/ForwardedValidator.php delete mode 100644 libraries/vendor/joomla/session/src/ValidatorInterface.php delete mode 100644 libraries/vendor/joomla/string/LICENSE delete mode 100644 libraries/vendor/joomla/string/src/Inflector.php delete mode 100644 libraries/vendor/joomla/string/src/Normalise.php delete mode 100644 libraries/vendor/joomla/string/src/StringHelper.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/LICENSE delete mode 100644 libraries/vendor/joomla/string/src/phputf8/README delete mode 100644 libraries/vendor/joomla/string/src/phputf8/mbstring/core.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/native/core.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/ord.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/str_ireplace.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/str_pad.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/str_split.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/strcasecmp.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/strcspn.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/stristr.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/strrev.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/strspn.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/substr_replace.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/trim.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/ucfirst.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/ucwords.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/utf8.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/utils/ascii.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/utils/bad.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/utils/patterns.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/utils/position.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/utils/specials.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/utils/unicode.php delete mode 100644 libraries/vendor/joomla/string/src/phputf8/utils/validation.php delete mode 100644 libraries/vendor/joomla/uri/LICENSE delete mode 100644 libraries/vendor/joomla/uri/src/AbstractUri.php delete mode 100644 libraries/vendor/joomla/uri/src/Uri.php delete mode 100644 libraries/vendor/joomla/uri/src/UriHelper.php delete mode 100644 libraries/vendor/joomla/uri/src/UriImmutable.php delete mode 100644 libraries/vendor/joomla/uri/src/UriInterface.php delete mode 100644 libraries/vendor/joomla/utilities/LICENSE delete mode 100644 libraries/vendor/joomla/utilities/src/ArrayHelper.php delete mode 100644 libraries/vendor/mso/idna-convert/LICENSE delete mode 100644 libraries/vendor/mso/idna-convert/src/EncodingHelper.php delete mode 100644 libraries/vendor/mso/idna-convert/src/IdnaConvert.php delete mode 100644 libraries/vendor/mso/idna-convert/src/NamePrepData.php delete mode 100644 libraries/vendor/mso/idna-convert/src/NamePrepData2003.php delete mode 100644 libraries/vendor/mso/idna-convert/src/NamePrepDataInterface.php delete mode 100644 libraries/vendor/mso/idna-convert/src/Punycode.php delete mode 100644 libraries/vendor/mso/idna-convert/src/PunycodeInterface.php delete mode 100644 libraries/vendor/mso/idna-convert/src/UnicodeTranscoder.php delete mode 100644 libraries/vendor/mso/idna-convert/src/UnicodeTranscoderInterface.php delete mode 100644 libraries/vendor/paragonie/random_compat/LICENSE delete mode 100644 libraries/vendor/paragonie/random_compat/lib/byte_safe_strings.php delete mode 100644 libraries/vendor/paragonie/random_compat/lib/cast_to_int.php delete mode 100644 libraries/vendor/paragonie/random_compat/lib/error_polyfill.php delete mode 100644 libraries/vendor/paragonie/random_compat/lib/random.php delete mode 100644 libraries/vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php delete mode 100644 libraries/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php delete mode 100644 libraries/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php delete mode 100644 libraries/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php delete mode 100644 libraries/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php delete mode 100644 libraries/vendor/paragonie/random_compat/lib/random_int.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/LICENSE delete mode 100644 libraries/vendor/paragonie/sodium_compat/autoload-fast.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/autoload-pedantic.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/autoload.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/lib/constants.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/lib/namespaced.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/lib/php72compat.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/lib/sodium_compat.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Compat.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/BLAKE2b.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/ChaCha20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/ChaCha20/Ctx.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/ChaCha20/IetfCtx.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/Fe.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/Ge/Cached.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/Ge/P1p1.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/Ge/P2.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/Ge/P3.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/Ge/Precomp.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519/H.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/Ed25519.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/HChaCha20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/HSalsa20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/Poly1305.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/Poly1305/State.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/Salsa20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/SipHash.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/Util.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/X25519.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/XChaCha20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Core/Xsalsa20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/Crypto.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/namespaced/File.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Compat.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/ChaCha20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/ChaCha20/Ctx.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/ChaCha20/IetfCtx.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Fe.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Cached.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P1p1.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P2.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P3.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Precomp.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/H.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/Ed25519.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/HChaCha20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/HSalsa20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/Poly1305.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/Salsa20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/SipHash.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/Util.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/X25519.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/XChaCha20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core/XSalsa20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/BLAKE2b.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/ChaCha20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/Ctx.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/IetfCtx.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Fe.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Cached.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P1p1.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P2.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P3.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Precomp.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/H.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/README.md delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Ed25519.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/HChaCha20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/HSalsa20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Int32.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Int64.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Poly1305.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Poly1305/State.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Salsa20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/SipHash.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/Util.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/X25519.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/XChaCha20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Core32/XSalsa20.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Crypto.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/Crypto32.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/File.php delete mode 100644 libraries/vendor/paragonie/sodium_compat/src/SodiumException.php delete mode 100644 libraries/vendor/phpmailer/phpmailer/LICENSE delete mode 100644 libraries/vendor/phpmailer/phpmailer/VERSION delete mode 100644 libraries/vendor/phpmailer/phpmailer/src/Exception.php delete mode 100644 libraries/vendor/phpmailer/phpmailer/src/OAuth.php delete mode 100644 libraries/vendor/phpmailer/phpmailer/src/PHPMailer.php delete mode 100644 libraries/vendor/phpmailer/phpmailer/src/POP3.php delete mode 100644 libraries/vendor/phpmailer/phpmailer/src/SMTP.php delete mode 100644 libraries/vendor/psr/container/LICENSE delete mode 100644 libraries/vendor/psr/container/src/ContainerExceptionInterface.php delete mode 100644 libraries/vendor/psr/container/src/ContainerInterface.php delete mode 100644 libraries/vendor/psr/container/src/NotFoundExceptionInterface.php delete mode 100644 libraries/vendor/psr/http-message/LICENSE delete mode 100644 libraries/vendor/psr/http-message/src/MessageInterface.php delete mode 100644 libraries/vendor/psr/http-message/src/RequestInterface.php delete mode 100644 libraries/vendor/psr/http-message/src/ResponseInterface.php delete mode 100644 libraries/vendor/psr/http-message/src/ServerRequestInterface.php delete mode 100644 libraries/vendor/psr/http-message/src/StreamInterface.php delete mode 100644 libraries/vendor/psr/http-message/src/UploadedFileInterface.php delete mode 100644 libraries/vendor/psr/http-message/src/UriInterface.php delete mode 100644 libraries/vendor/psr/link/LICENSE.md delete mode 100644 libraries/vendor/psr/link/src/EvolvableLinkInterface.php delete mode 100644 libraries/vendor/psr/link/src/EvolvableLinkProviderInterface.php delete mode 100644 libraries/vendor/psr/link/src/LinkInterface.php delete mode 100644 libraries/vendor/psr/link/src/LinkProviderInterface.php delete mode 100644 libraries/vendor/psr/log/LICENSE delete mode 100644 libraries/vendor/psr/log/Psr/Log/AbstractLogger.php delete mode 100644 libraries/vendor/psr/log/Psr/Log/InvalidArgumentException.php delete mode 100644 libraries/vendor/psr/log/Psr/Log/LogLevel.php delete mode 100644 libraries/vendor/psr/log/Psr/Log/LoggerAwareInterface.php delete mode 100644 libraries/vendor/psr/log/Psr/Log/LoggerAwareTrait.php delete mode 100644 libraries/vendor/psr/log/Psr/Log/LoggerInterface.php delete mode 100644 libraries/vendor/psr/log/Psr/Log/LoggerTrait.php delete mode 100644 libraries/vendor/psr/log/Psr/Log/NullLogger.php delete mode 100644 libraries/vendor/symfony/console/Application.php delete mode 100644 libraries/vendor/symfony/console/Command/Command.php delete mode 100644 libraries/vendor/symfony/console/Command/HelpCommand.php delete mode 100644 libraries/vendor/symfony/console/Command/ListCommand.php delete mode 100644 libraries/vendor/symfony/console/Command/LockableTrait.php delete mode 100644 libraries/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php delete mode 100644 libraries/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php delete mode 100644 libraries/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php delete mode 100644 libraries/vendor/symfony/console/ConsoleEvents.php delete mode 100644 libraries/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php delete mode 100644 libraries/vendor/symfony/console/Descriptor/ApplicationDescription.php delete mode 100644 libraries/vendor/symfony/console/Descriptor/Descriptor.php delete mode 100644 libraries/vendor/symfony/console/Descriptor/DescriptorInterface.php delete mode 100644 libraries/vendor/symfony/console/Descriptor/JsonDescriptor.php delete mode 100644 libraries/vendor/symfony/console/Descriptor/MarkdownDescriptor.php delete mode 100644 libraries/vendor/symfony/console/Descriptor/TextDescriptor.php delete mode 100644 libraries/vendor/symfony/console/Descriptor/XmlDescriptor.php delete mode 100644 libraries/vendor/symfony/console/Event/ConsoleCommandEvent.php delete mode 100644 libraries/vendor/symfony/console/Event/ConsoleErrorEvent.php delete mode 100644 libraries/vendor/symfony/console/Event/ConsoleEvent.php delete mode 100644 libraries/vendor/symfony/console/Event/ConsoleExceptionEvent.php delete mode 100644 libraries/vendor/symfony/console/Event/ConsoleTerminateEvent.php delete mode 100644 libraries/vendor/symfony/console/EventListener/ErrorListener.php delete mode 100644 libraries/vendor/symfony/console/Exception/CommandNotFoundException.php delete mode 100644 libraries/vendor/symfony/console/Exception/ExceptionInterface.php delete mode 100644 libraries/vendor/symfony/console/Exception/InvalidArgumentException.php delete mode 100644 libraries/vendor/symfony/console/Exception/InvalidOptionException.php delete mode 100644 libraries/vendor/symfony/console/Exception/LogicException.php delete mode 100644 libraries/vendor/symfony/console/Exception/RuntimeException.php delete mode 100644 libraries/vendor/symfony/console/Formatter/OutputFormatter.php delete mode 100644 libraries/vendor/symfony/console/Formatter/OutputFormatterInterface.php delete mode 100644 libraries/vendor/symfony/console/Formatter/OutputFormatterStyle.php delete mode 100644 libraries/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php delete mode 100644 libraries/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php delete mode 100644 libraries/vendor/symfony/console/Helper/DebugFormatterHelper.php delete mode 100644 libraries/vendor/symfony/console/Helper/DescriptorHelper.php delete mode 100644 libraries/vendor/symfony/console/Helper/FormatterHelper.php delete mode 100644 libraries/vendor/symfony/console/Helper/Helper.php delete mode 100644 libraries/vendor/symfony/console/Helper/HelperInterface.php delete mode 100644 libraries/vendor/symfony/console/Helper/HelperSet.php delete mode 100644 libraries/vendor/symfony/console/Helper/InputAwareHelper.php delete mode 100644 libraries/vendor/symfony/console/Helper/ProcessHelper.php delete mode 100644 libraries/vendor/symfony/console/Helper/ProgressBar.php delete mode 100644 libraries/vendor/symfony/console/Helper/ProgressIndicator.php delete mode 100644 libraries/vendor/symfony/console/Helper/QuestionHelper.php delete mode 100644 libraries/vendor/symfony/console/Helper/SymfonyQuestionHelper.php delete mode 100644 libraries/vendor/symfony/console/Helper/Table.php delete mode 100644 libraries/vendor/symfony/console/Helper/TableCell.php delete mode 100644 libraries/vendor/symfony/console/Helper/TableSeparator.php delete mode 100644 libraries/vendor/symfony/console/Helper/TableStyle.php delete mode 100644 libraries/vendor/symfony/console/Input/ArgvInput.php delete mode 100644 libraries/vendor/symfony/console/Input/ArrayInput.php delete mode 100644 libraries/vendor/symfony/console/Input/Input.php delete mode 100644 libraries/vendor/symfony/console/Input/InputArgument.php delete mode 100644 libraries/vendor/symfony/console/Input/InputAwareInterface.php delete mode 100644 libraries/vendor/symfony/console/Input/InputDefinition.php delete mode 100644 libraries/vendor/symfony/console/Input/InputInterface.php delete mode 100644 libraries/vendor/symfony/console/Input/InputOption.php delete mode 100644 libraries/vendor/symfony/console/Input/StreamableInputInterface.php delete mode 100644 libraries/vendor/symfony/console/Input/StringInput.php delete mode 100644 libraries/vendor/symfony/console/LICENSE delete mode 100644 libraries/vendor/symfony/console/Logger/ConsoleLogger.php delete mode 100644 libraries/vendor/symfony/console/Output/BufferedOutput.php delete mode 100644 libraries/vendor/symfony/console/Output/ConsoleOutput.php delete mode 100644 libraries/vendor/symfony/console/Output/ConsoleOutputInterface.php delete mode 100644 libraries/vendor/symfony/console/Output/NullOutput.php delete mode 100644 libraries/vendor/symfony/console/Output/Output.php delete mode 100644 libraries/vendor/symfony/console/Output/OutputInterface.php delete mode 100644 libraries/vendor/symfony/console/Output/StreamOutput.php delete mode 100644 libraries/vendor/symfony/console/Question/ChoiceQuestion.php delete mode 100644 libraries/vendor/symfony/console/Question/ConfirmationQuestion.php delete mode 100644 libraries/vendor/symfony/console/Question/Question.php delete mode 100644 libraries/vendor/symfony/console/Style/OutputStyle.php delete mode 100644 libraries/vendor/symfony/console/Style/StyleInterface.php delete mode 100644 libraries/vendor/symfony/console/Style/SymfonyStyle.php delete mode 100644 libraries/vendor/symfony/console/Terminal.php delete mode 100644 libraries/vendor/symfony/console/Tester/ApplicationTester.php delete mode 100644 libraries/vendor/symfony/console/Tester/CommandTester.php delete mode 100644 libraries/vendor/symfony/debug/BufferingLogger.php delete mode 100644 libraries/vendor/symfony/debug/Debug.php delete mode 100644 libraries/vendor/symfony/debug/DebugClassLoader.php delete mode 100644 libraries/vendor/symfony/debug/ErrorHandler.php delete mode 100644 libraries/vendor/symfony/debug/Exception/ClassNotFoundException.php delete mode 100644 libraries/vendor/symfony/debug/Exception/ContextErrorException.php delete mode 100644 libraries/vendor/symfony/debug/Exception/FatalErrorException.php delete mode 100644 libraries/vendor/symfony/debug/Exception/FatalThrowableError.php delete mode 100644 libraries/vendor/symfony/debug/Exception/FlattenException.php delete mode 100644 libraries/vendor/symfony/debug/Exception/OutOfMemoryException.php delete mode 100644 libraries/vendor/symfony/debug/Exception/SilencedErrorContext.php delete mode 100644 libraries/vendor/symfony/debug/Exception/UndefinedFunctionException.php delete mode 100644 libraries/vendor/symfony/debug/Exception/UndefinedMethodException.php delete mode 100644 libraries/vendor/symfony/debug/ExceptionHandler.php delete mode 100644 libraries/vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php delete mode 100644 libraries/vendor/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php delete mode 100644 libraries/vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php delete mode 100644 libraries/vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php delete mode 100644 libraries/vendor/symfony/debug/LICENSE delete mode 100644 libraries/vendor/symfony/ldap/Adapter/AbstractConnection.php delete mode 100644 libraries/vendor/symfony/ldap/Adapter/AbstractQuery.php delete mode 100644 libraries/vendor/symfony/ldap/Adapter/AdapterInterface.php delete mode 100644 libraries/vendor/symfony/ldap/Adapter/CollectionInterface.php delete mode 100644 libraries/vendor/symfony/ldap/Adapter/ConnectionInterface.php delete mode 100644 libraries/vendor/symfony/ldap/Adapter/EntryManagerInterface.php delete mode 100644 libraries/vendor/symfony/ldap/Adapter/ExtLdap/Adapter.php delete mode 100644 libraries/vendor/symfony/ldap/Adapter/ExtLdap/Collection.php delete mode 100644 libraries/vendor/symfony/ldap/Adapter/ExtLdap/Connection.php delete mode 100644 libraries/vendor/symfony/ldap/Adapter/ExtLdap/ConnectionOptions.php delete mode 100644 libraries/vendor/symfony/ldap/Adapter/ExtLdap/EntryManager.php delete mode 100644 libraries/vendor/symfony/ldap/Adapter/ExtLdap/Query.php delete mode 100644 libraries/vendor/symfony/ldap/Adapter/QueryInterface.php delete mode 100644 libraries/vendor/symfony/ldap/Adapter/RenameEntryInterface.php delete mode 100644 libraries/vendor/symfony/ldap/Entry.php delete mode 100644 libraries/vendor/symfony/ldap/Exception/ConnectionException.php delete mode 100644 libraries/vendor/symfony/ldap/Exception/DriverNotFoundException.php delete mode 100644 libraries/vendor/symfony/ldap/Exception/ExceptionInterface.php delete mode 100644 libraries/vendor/symfony/ldap/Exception/LdapException.php delete mode 100644 libraries/vendor/symfony/ldap/Exception/NotBoundException.php delete mode 100644 libraries/vendor/symfony/ldap/LICENSE delete mode 100644 libraries/vendor/symfony/ldap/Ldap.php delete mode 100644 libraries/vendor/symfony/ldap/LdapClient.php delete mode 100644 libraries/vendor/symfony/ldap/LdapClientInterface.php delete mode 100644 libraries/vendor/symfony/ldap/LdapInterface.php delete mode 100644 libraries/vendor/symfony/options-resolver/Debug/OptionsResolverIntrospector.php delete mode 100644 libraries/vendor/symfony/options-resolver/Exception/AccessException.php delete mode 100644 libraries/vendor/symfony/options-resolver/Exception/ExceptionInterface.php delete mode 100644 libraries/vendor/symfony/options-resolver/Exception/InvalidArgumentException.php delete mode 100644 libraries/vendor/symfony/options-resolver/Exception/InvalidOptionsException.php delete mode 100644 libraries/vendor/symfony/options-resolver/Exception/MissingOptionsException.php delete mode 100644 libraries/vendor/symfony/options-resolver/Exception/NoConfigurationException.php delete mode 100644 libraries/vendor/symfony/options-resolver/Exception/NoSuchOptionException.php delete mode 100644 libraries/vendor/symfony/options-resolver/Exception/OptionDefinitionException.php delete mode 100644 libraries/vendor/symfony/options-resolver/Exception/UndefinedOptionsException.php delete mode 100644 libraries/vendor/symfony/options-resolver/LICENSE delete mode 100644 libraries/vendor/symfony/options-resolver/Options.php delete mode 100644 libraries/vendor/symfony/options-resolver/OptionsResolver.php delete mode 100644 libraries/vendor/symfony/polyfill-ctype/Ctype.php delete mode 100644 libraries/vendor/symfony/polyfill-ctype/LICENSE delete mode 100644 libraries/vendor/symfony/polyfill-ctype/bootstrap.php delete mode 100644 libraries/vendor/symfony/polyfill-mbstring/LICENSE delete mode 100644 libraries/vendor/symfony/polyfill-mbstring/Mbstring.php delete mode 100644 libraries/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php delete mode 100644 libraries/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php delete mode 100644 libraries/vendor/symfony/polyfill-mbstring/bootstrap.php delete mode 100644 libraries/vendor/symfony/polyfill-php56/LICENSE delete mode 100644 libraries/vendor/symfony/polyfill-php56/Php56.php delete mode 100644 libraries/vendor/symfony/polyfill-php56/bootstrap.php delete mode 100644 libraries/vendor/symfony/polyfill-util/Binary.php delete mode 100644 libraries/vendor/symfony/polyfill-util/BinaryNoFuncOverload.php delete mode 100644 libraries/vendor/symfony/polyfill-util/BinaryOnFuncOverload.php delete mode 100644 libraries/vendor/symfony/polyfill-util/LICENSE delete mode 100644 libraries/vendor/symfony/polyfill-util/LegacyTestListener.php delete mode 100644 libraries/vendor/symfony/polyfill-util/TestListenerTrait.php delete mode 100644 libraries/vendor/symfony/web-link/EventListener/AddLinkHeaderListener.php delete mode 100644 libraries/vendor/symfony/web-link/HttpHeaderSerializer.php delete mode 100644 libraries/vendor/symfony/web-link/LICENSE delete mode 100644 libraries/vendor/symfony/yaml/Command/LintCommand.php delete mode 100644 libraries/vendor/symfony/yaml/Dumper.php delete mode 100644 libraries/vendor/symfony/yaml/Escaper.php delete mode 100644 libraries/vendor/symfony/yaml/Exception/DumpException.php delete mode 100644 libraries/vendor/symfony/yaml/Exception/ExceptionInterface.php delete mode 100644 libraries/vendor/symfony/yaml/Exception/ParseException.php delete mode 100644 libraries/vendor/symfony/yaml/Exception/RuntimeException.php delete mode 100644 libraries/vendor/symfony/yaml/Inline.php delete mode 100644 libraries/vendor/symfony/yaml/LICENSE delete mode 100644 libraries/vendor/symfony/yaml/Parser.php delete mode 100644 libraries/vendor/symfony/yaml/Tag/TaggedValue.php delete mode 100644 libraries/vendor/symfony/yaml/Unescaper.php delete mode 100644 libraries/vendor/symfony/yaml/Yaml.php delete mode 100644 libraries/vendor/wamania/php-stemmer/LICENSE delete mode 100644 libraries/vendor/wamania/php-stemmer/src/Danish.php delete mode 100644 libraries/vendor/wamania/php-stemmer/src/Dutch.php delete mode 100644 libraries/vendor/wamania/php-stemmer/src/English.php delete mode 100644 libraries/vendor/wamania/php-stemmer/src/French.php delete mode 100644 libraries/vendor/wamania/php-stemmer/src/German.php delete mode 100644 libraries/vendor/wamania/php-stemmer/src/Italian.php delete mode 100644 libraries/vendor/wamania/php-stemmer/src/Norwegian.php delete mode 100644 libraries/vendor/wamania/php-stemmer/src/Portuguese.php delete mode 100644 libraries/vendor/wamania/php-stemmer/src/Romanian.php delete mode 100644 libraries/vendor/wamania/php-stemmer/src/Russian.php delete mode 100644 libraries/vendor/wamania/php-stemmer/src/Spanish.php delete mode 100644 libraries/vendor/wamania/php-stemmer/src/Stem.php delete mode 100644 libraries/vendor/wamania/php-stemmer/src/Stemmer.php delete mode 100644 libraries/vendor/wamania/php-stemmer/src/Swedish.php delete mode 100644 libraries/vendor/wamania/php-stemmer/src/Utf8.php delete mode 100644 libraries/vendor/web.config delete mode 100644 libraries/vendor/zendframework/zend-diactoros/LICENSE.md delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/AbstractSerializer.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/CallbackStream.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Exception/DeprecatedMethodException.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Exception/ExceptionInterface.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/HeaderSecurity.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/MessageTrait.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/PhpInputStream.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/RelativeStream.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Request.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Request/ArraySerializer.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Request/Serializer.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/RequestTrait.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Response.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Response/ArraySerializer.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Response/EmitterInterface.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Response/EmptyResponse.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Response/HtmlResponse.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Response/InjectContentTypeTrait.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Response/JsonResponse.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Response/RedirectResponse.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Response/SapiEmitter.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Response/SapiEmitterTrait.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Response/SapiStreamEmitter.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Response/Serializer.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Response/TextResponse.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Response/XmlResponse.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Server.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/ServerRequest.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/ServerRequestFactory.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Stream.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/UploadedFile.php delete mode 100644 libraries/vendor/zendframework/zend-diactoros/src/Uri.php delete mode 100644 media/vendor/awesomplete/LICENSE delete mode 100644 media/vendor/awesomplete/css/awesomplete.css delete mode 100644 media/vendor/awesomplete/css/awesomplete.css.map delete mode 100644 media/vendor/awesomplete/css/awesomplete.min.css delete mode 100644 media/vendor/awesomplete/js/awesomplete.js delete mode 100644 media/vendor/awesomplete/js/awesomplete.min.js delete mode 100644 media/vendor/awesomplete/js/awesomplete.min.js.map delete mode 100644 media/vendor/bootstrap/LICENSE delete mode 100644 media/vendor/bootstrap/css/bootstrap-grid.css delete mode 100644 media/vendor/bootstrap/css/bootstrap-grid.css.map delete mode 100644 media/vendor/bootstrap/css/bootstrap-grid.min.css delete mode 100644 media/vendor/bootstrap/css/bootstrap-grid.min.css.map delete mode 100644 media/vendor/bootstrap/css/bootstrap-reboot.css delete mode 100644 media/vendor/bootstrap/css/bootstrap-reboot.css.map delete mode 100644 media/vendor/bootstrap/css/bootstrap-reboot.min.css delete mode 100644 media/vendor/bootstrap/css/bootstrap-reboot.min.css.map delete mode 100644 media/vendor/bootstrap/css/bootstrap.css delete mode 100644 media/vendor/bootstrap/css/bootstrap.css.map delete mode 100644 media/vendor/bootstrap/css/bootstrap.min.css delete mode 100644 media/vendor/bootstrap/css/bootstrap.min.css.map delete mode 100644 media/vendor/bootstrap/js/bootstrap.bundle.js delete mode 100644 media/vendor/bootstrap/js/bootstrap.bundle.min.js delete mode 100644 media/vendor/bootstrap/js/bootstrap.js delete mode 100644 media/vendor/bootstrap/js/bootstrap.min.js delete mode 100644 media/vendor/bootstrap/scss/_alert.scss delete mode 100644 media/vendor/bootstrap/scss/_badge.scss delete mode 100644 media/vendor/bootstrap/scss/_breadcrumb.scss delete mode 100644 media/vendor/bootstrap/scss/_button-group.scss delete mode 100644 media/vendor/bootstrap/scss/_buttons.scss delete mode 100644 media/vendor/bootstrap/scss/_card.scss delete mode 100644 media/vendor/bootstrap/scss/_carousel.scss delete mode 100644 media/vendor/bootstrap/scss/_close.scss delete mode 100644 media/vendor/bootstrap/scss/_code.scss delete mode 100644 media/vendor/bootstrap/scss/_custom-forms.scss delete mode 100644 media/vendor/bootstrap/scss/_dropdown.scss delete mode 100644 media/vendor/bootstrap/scss/_forms.scss delete mode 100644 media/vendor/bootstrap/scss/_functions.scss delete mode 100644 media/vendor/bootstrap/scss/_grid.scss delete mode 100644 media/vendor/bootstrap/scss/_images.scss delete mode 100644 media/vendor/bootstrap/scss/_input-group.scss delete mode 100644 media/vendor/bootstrap/scss/_jumbotron.scss delete mode 100644 media/vendor/bootstrap/scss/_list-group.scss delete mode 100644 media/vendor/bootstrap/scss/_media.scss delete mode 100644 media/vendor/bootstrap/scss/_mixins.scss delete mode 100644 media/vendor/bootstrap/scss/_modal.scss delete mode 100644 media/vendor/bootstrap/scss/_nav.scss delete mode 100644 media/vendor/bootstrap/scss/_navbar.scss delete mode 100644 media/vendor/bootstrap/scss/_pagination.scss delete mode 100644 media/vendor/bootstrap/scss/_popover.scss delete mode 100644 media/vendor/bootstrap/scss/_print.scss delete mode 100644 media/vendor/bootstrap/scss/_progress.scss delete mode 100644 media/vendor/bootstrap/scss/_reboot.scss delete mode 100644 media/vendor/bootstrap/scss/_root.scss delete mode 100644 media/vendor/bootstrap/scss/_tables.scss delete mode 100644 media/vendor/bootstrap/scss/_tooltip.scss delete mode 100644 media/vendor/bootstrap/scss/_transitions.scss delete mode 100644 media/vendor/bootstrap/scss/_type.scss delete mode 100644 media/vendor/bootstrap/scss/_utilities.scss delete mode 100644 media/vendor/bootstrap/scss/_variables.scss delete mode 100644 media/vendor/bootstrap/scss/bootstrap-grid.scss delete mode 100644 media/vendor/bootstrap/scss/bootstrap-reboot.scss delete mode 100644 media/vendor/bootstrap/scss/bootstrap.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_alert.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_background-variant.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_badge.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_border-radius.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_box-shadow.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_breakpoints.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_buttons.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_caret.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_clearfix.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_float.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_forms.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_gradients.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_grid-framework.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_grid.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_hover.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_image.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_list-group.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_lists.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_nav-divider.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_pagination.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_reset-text.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_resize.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_screen-reader.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_size.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_table-row.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_text-emphasis.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_text-hide.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_text-truncate.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_transition.scss delete mode 100644 media/vendor/bootstrap/scss/mixins/_visibility.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_align.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_background.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_borders.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_clearfix.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_display.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_embed.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_flex.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_float.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_position.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_screenreaders.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_shadows.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_sizing.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_spacing.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_text.scss delete mode 100644 media/vendor/bootstrap/scss/utilities/_visibility.scss delete mode 100644 media/vendor/codemirror/addon/comment/comment.js delete mode 100644 media/vendor/codemirror/addon/comment/comment.min.js delete mode 100644 media/vendor/codemirror/addon/comment/continuecomment.js delete mode 100644 media/vendor/codemirror/addon/comment/continuecomment.min.js delete mode 100644 media/vendor/codemirror/addon/dialog/dialog.css delete mode 100644 media/vendor/codemirror/addon/dialog/dialog.js delete mode 100644 media/vendor/codemirror/addon/dialog/dialog.min.css delete mode 100644 media/vendor/codemirror/addon/dialog/dialog.min.js delete mode 100644 media/vendor/codemirror/addon/display/autorefresh.js delete mode 100644 media/vendor/codemirror/addon/display/autorefresh.min.js delete mode 100644 media/vendor/codemirror/addon/display/fullscreen.css delete mode 100644 media/vendor/codemirror/addon/display/fullscreen.js delete mode 100644 media/vendor/codemirror/addon/display/fullscreen.min.css delete mode 100644 media/vendor/codemirror/addon/display/fullscreen.min.js delete mode 100644 media/vendor/codemirror/addon/display/panel.js delete mode 100644 media/vendor/codemirror/addon/display/panel.min.js delete mode 100644 media/vendor/codemirror/addon/display/placeholder.js delete mode 100644 media/vendor/codemirror/addon/display/placeholder.min.js delete mode 100644 media/vendor/codemirror/addon/display/rulers.js delete mode 100644 media/vendor/codemirror/addon/display/rulers.min.js delete mode 100644 media/vendor/codemirror/addon/edit/closebrackets.js delete mode 100644 media/vendor/codemirror/addon/edit/closebrackets.min.js delete mode 100644 media/vendor/codemirror/addon/edit/closetag.js delete mode 100644 media/vendor/codemirror/addon/edit/closetag.min.js delete mode 100644 media/vendor/codemirror/addon/edit/continuelist.js delete mode 100644 media/vendor/codemirror/addon/edit/continuelist.min.js delete mode 100644 media/vendor/codemirror/addon/edit/matchbrackets.js delete mode 100644 media/vendor/codemirror/addon/edit/matchbrackets.min.js delete mode 100644 media/vendor/codemirror/addon/edit/matchtags.js delete mode 100644 media/vendor/codemirror/addon/edit/matchtags.min.js delete mode 100644 media/vendor/codemirror/addon/edit/trailingspace.js delete mode 100644 media/vendor/codemirror/addon/edit/trailingspace.min.js delete mode 100644 media/vendor/codemirror/addon/fold/brace-fold.js delete mode 100644 media/vendor/codemirror/addon/fold/brace-fold.min.js delete mode 100644 media/vendor/codemirror/addon/fold/comment-fold.js delete mode 100644 media/vendor/codemirror/addon/fold/comment-fold.min.js delete mode 100644 media/vendor/codemirror/addon/fold/foldcode.js delete mode 100644 media/vendor/codemirror/addon/fold/foldcode.min.js delete mode 100644 media/vendor/codemirror/addon/fold/foldgutter.css delete mode 100644 media/vendor/codemirror/addon/fold/foldgutter.js delete mode 100644 media/vendor/codemirror/addon/fold/foldgutter.min.css delete mode 100644 media/vendor/codemirror/addon/fold/foldgutter.min.js delete mode 100644 media/vendor/codemirror/addon/fold/indent-fold.js delete mode 100644 media/vendor/codemirror/addon/fold/indent-fold.min.js delete mode 100644 media/vendor/codemirror/addon/fold/markdown-fold.js delete mode 100644 media/vendor/codemirror/addon/fold/markdown-fold.min.js delete mode 100644 media/vendor/codemirror/addon/fold/xml-fold.js delete mode 100644 media/vendor/codemirror/addon/fold/xml-fold.min.js delete mode 100644 media/vendor/codemirror/addon/hint/anyword-hint.js delete mode 100644 media/vendor/codemirror/addon/hint/anyword-hint.min.js delete mode 100644 media/vendor/codemirror/addon/hint/css-hint.js delete mode 100644 media/vendor/codemirror/addon/hint/css-hint.min.js delete mode 100644 media/vendor/codemirror/addon/hint/html-hint.js delete mode 100644 media/vendor/codemirror/addon/hint/html-hint.min.js delete mode 100644 media/vendor/codemirror/addon/hint/javascript-hint.js delete mode 100644 media/vendor/codemirror/addon/hint/javascript-hint.min.js delete mode 100644 media/vendor/codemirror/addon/hint/show-hint.css delete mode 100644 media/vendor/codemirror/addon/hint/show-hint.js delete mode 100644 media/vendor/codemirror/addon/hint/show-hint.min.css delete mode 100644 media/vendor/codemirror/addon/hint/show-hint.min.js delete mode 100644 media/vendor/codemirror/addon/hint/sql-hint.js delete mode 100644 media/vendor/codemirror/addon/hint/sql-hint.min.js delete mode 100644 media/vendor/codemirror/addon/hint/xml-hint.js delete mode 100644 media/vendor/codemirror/addon/hint/xml-hint.min.js delete mode 100644 media/vendor/codemirror/addon/lint/coffeescript-lint.js delete mode 100644 media/vendor/codemirror/addon/lint/coffeescript-lint.min.js delete mode 100644 media/vendor/codemirror/addon/lint/css-lint.js delete mode 100644 media/vendor/codemirror/addon/lint/css-lint.min.js delete mode 100644 media/vendor/codemirror/addon/lint/html-lint.js delete mode 100644 media/vendor/codemirror/addon/lint/html-lint.min.js delete mode 100644 media/vendor/codemirror/addon/lint/javascript-lint.js delete mode 100644 media/vendor/codemirror/addon/lint/javascript-lint.min.js delete mode 100644 media/vendor/codemirror/addon/lint/json-lint.js delete mode 100644 media/vendor/codemirror/addon/lint/json-lint.min.js delete mode 100644 media/vendor/codemirror/addon/lint/lint.css delete mode 100644 media/vendor/codemirror/addon/lint/lint.js delete mode 100644 media/vendor/codemirror/addon/lint/lint.min.css delete mode 100644 media/vendor/codemirror/addon/lint/lint.min.js delete mode 100644 media/vendor/codemirror/addon/lint/yaml-lint.js delete mode 100644 media/vendor/codemirror/addon/lint/yaml-lint.min.js delete mode 100644 media/vendor/codemirror/addon/merge/merge.css delete mode 100644 media/vendor/codemirror/addon/merge/merge.js delete mode 100644 media/vendor/codemirror/addon/merge/merge.min.css delete mode 100644 media/vendor/codemirror/addon/merge/merge.min.js delete mode 100644 media/vendor/codemirror/addon/mode/loadmode.js delete mode 100644 media/vendor/codemirror/addon/mode/loadmode.min.js delete mode 100644 media/vendor/codemirror/addon/mode/multiplex.js delete mode 100644 media/vendor/codemirror/addon/mode/multiplex.min.js delete mode 100644 media/vendor/codemirror/addon/mode/multiplex_test.js delete mode 100644 media/vendor/codemirror/addon/mode/multiplex_test.min.js delete mode 100644 media/vendor/codemirror/addon/mode/overlay.js delete mode 100644 media/vendor/codemirror/addon/mode/overlay.min.js delete mode 100644 media/vendor/codemirror/addon/mode/simple.js delete mode 100644 media/vendor/codemirror/addon/mode/simple.min.js delete mode 100644 media/vendor/codemirror/addon/runmode/colorize.js delete mode 100644 media/vendor/codemirror/addon/runmode/colorize.min.js delete mode 100644 media/vendor/codemirror/addon/runmode/runmode-standalone.js delete mode 100644 media/vendor/codemirror/addon/runmode/runmode-standalone.min.js delete mode 100644 media/vendor/codemirror/addon/runmode/runmode.js delete mode 100644 media/vendor/codemirror/addon/runmode/runmode.min.js delete mode 100644 media/vendor/codemirror/addon/runmode/runmode.node.js delete mode 100644 media/vendor/codemirror/addon/runmode/runmode.node.min.js delete mode 100644 media/vendor/codemirror/addon/scroll/annotatescrollbar.js delete mode 100644 media/vendor/codemirror/addon/scroll/annotatescrollbar.min.js delete mode 100644 media/vendor/codemirror/addon/scroll/scrollpastend.js delete mode 100644 media/vendor/codemirror/addon/scroll/scrollpastend.min.js delete mode 100644 media/vendor/codemirror/addon/scroll/simplescrollbars.css delete mode 100644 media/vendor/codemirror/addon/scroll/simplescrollbars.js delete mode 100644 media/vendor/codemirror/addon/scroll/simplescrollbars.min.css delete mode 100644 media/vendor/codemirror/addon/scroll/simplescrollbars.min.js delete mode 100644 media/vendor/codemirror/addon/search/jump-to-line.js delete mode 100644 media/vendor/codemirror/addon/search/jump-to-line.min.js delete mode 100644 media/vendor/codemirror/addon/search/match-highlighter.js delete mode 100644 media/vendor/codemirror/addon/search/match-highlighter.min.js delete mode 100644 media/vendor/codemirror/addon/search/matchesonscrollbar.css delete mode 100644 media/vendor/codemirror/addon/search/matchesonscrollbar.js delete mode 100644 media/vendor/codemirror/addon/search/matchesonscrollbar.min.css delete mode 100644 media/vendor/codemirror/addon/search/matchesonscrollbar.min.js delete mode 100644 media/vendor/codemirror/addon/search/search.js delete mode 100644 media/vendor/codemirror/addon/search/search.min.js delete mode 100644 media/vendor/codemirror/addon/search/searchcursor.js delete mode 100644 media/vendor/codemirror/addon/search/searchcursor.min.js delete mode 100644 media/vendor/codemirror/addon/selection/active-line.js delete mode 100644 media/vendor/codemirror/addon/selection/active-line.min.js delete mode 100644 media/vendor/codemirror/addon/selection/mark-selection.js delete mode 100644 media/vendor/codemirror/addon/selection/mark-selection.min.js delete mode 100644 media/vendor/codemirror/addon/selection/selection-pointer.js delete mode 100644 media/vendor/codemirror/addon/selection/selection-pointer.min.js delete mode 100644 media/vendor/codemirror/addon/tern/tern.css delete mode 100644 media/vendor/codemirror/addon/tern/tern.js delete mode 100644 media/vendor/codemirror/addon/tern/tern.min.css delete mode 100644 media/vendor/codemirror/addon/tern/tern.min.js delete mode 100644 media/vendor/codemirror/addon/tern/worker.js delete mode 100644 media/vendor/codemirror/addon/tern/worker.min.js delete mode 100644 media/vendor/codemirror/addon/wrap/hardwrap.js delete mode 100644 media/vendor/codemirror/addon/wrap/hardwrap.min.js delete mode 100644 media/vendor/codemirror/keymap/emacs.js delete mode 100644 media/vendor/codemirror/keymap/emacs.min.js delete mode 100644 media/vendor/codemirror/keymap/sublime.js delete mode 100644 media/vendor/codemirror/keymap/sublime.min.js delete mode 100644 media/vendor/codemirror/keymap/vim.js delete mode 100644 media/vendor/codemirror/keymap/vim.min.js delete mode 100644 media/vendor/codemirror/lib/addons.css delete mode 100644 media/vendor/codemirror/lib/addons.js delete mode 100644 media/vendor/codemirror/lib/addons.min.css delete mode 100644 media/vendor/codemirror/lib/addons.min.js delete mode 100644 media/vendor/codemirror/lib/codemirror.css delete mode 100644 media/vendor/codemirror/lib/codemirror.js delete mode 100644 media/vendor/codemirror/lib/codemirror.min.css delete mode 100644 media/vendor/codemirror/lib/codemirror.min.js delete mode 100644 media/vendor/codemirror/mode/apl/apl.js delete mode 100644 media/vendor/codemirror/mode/apl/apl.min.js delete mode 100644 media/vendor/codemirror/mode/asciiarmor/asciiarmor.js delete mode 100644 media/vendor/codemirror/mode/asciiarmor/asciiarmor.min.js delete mode 100644 media/vendor/codemirror/mode/asn.1/asn.1.js delete mode 100644 media/vendor/codemirror/mode/asn.1/asn.1.min.js delete mode 100644 media/vendor/codemirror/mode/asterisk/asterisk.js delete mode 100644 media/vendor/codemirror/mode/asterisk/asterisk.min.js delete mode 100644 media/vendor/codemirror/mode/brainfuck/brainfuck.js delete mode 100644 media/vendor/codemirror/mode/brainfuck/brainfuck.min.js delete mode 100644 media/vendor/codemirror/mode/clike/clike.js delete mode 100644 media/vendor/codemirror/mode/clike/clike.min.js delete mode 100644 media/vendor/codemirror/mode/clojure/clojure.js delete mode 100644 media/vendor/codemirror/mode/clojure/clojure.min.js delete mode 100644 media/vendor/codemirror/mode/cmake/cmake.js delete mode 100644 media/vendor/codemirror/mode/cmake/cmake.min.js delete mode 100644 media/vendor/codemirror/mode/cobol/cobol.js delete mode 100644 media/vendor/codemirror/mode/cobol/cobol.min.js delete mode 100644 media/vendor/codemirror/mode/coffeescript/coffeescript.js delete mode 100644 media/vendor/codemirror/mode/coffeescript/coffeescript.min.js delete mode 100644 media/vendor/codemirror/mode/commonlisp/commonlisp.js delete mode 100644 media/vendor/codemirror/mode/commonlisp/commonlisp.min.js delete mode 100644 media/vendor/codemirror/mode/crystal/crystal.js delete mode 100644 media/vendor/codemirror/mode/crystal/crystal.min.js delete mode 100644 media/vendor/codemirror/mode/css/css.js delete mode 100644 media/vendor/codemirror/mode/css/css.min.js delete mode 100644 media/vendor/codemirror/mode/cypher/cypher.js delete mode 100644 media/vendor/codemirror/mode/cypher/cypher.min.js delete mode 100644 media/vendor/codemirror/mode/d/d.js delete mode 100644 media/vendor/codemirror/mode/d/d.min.js delete mode 100644 media/vendor/codemirror/mode/dart/dart.js delete mode 100644 media/vendor/codemirror/mode/dart/dart.min.js delete mode 100644 media/vendor/codemirror/mode/diff/diff.js delete mode 100644 media/vendor/codemirror/mode/diff/diff.min.js delete mode 100644 media/vendor/codemirror/mode/django/django.js delete mode 100644 media/vendor/codemirror/mode/django/django.min.js delete mode 100644 media/vendor/codemirror/mode/dockerfile/dockerfile.js delete mode 100644 media/vendor/codemirror/mode/dockerfile/dockerfile.min.js delete mode 100644 media/vendor/codemirror/mode/dtd/dtd.js delete mode 100644 media/vendor/codemirror/mode/dtd/dtd.min.js delete mode 100644 media/vendor/codemirror/mode/dylan/dylan.js delete mode 100644 media/vendor/codemirror/mode/dylan/dylan.min.js delete mode 100644 media/vendor/codemirror/mode/ebnf/ebnf.js delete mode 100644 media/vendor/codemirror/mode/ebnf/ebnf.min.js delete mode 100644 media/vendor/codemirror/mode/ecl/ecl.js delete mode 100644 media/vendor/codemirror/mode/ecl/ecl.min.js delete mode 100644 media/vendor/codemirror/mode/eiffel/eiffel.js delete mode 100644 media/vendor/codemirror/mode/eiffel/eiffel.min.js delete mode 100644 media/vendor/codemirror/mode/elm/elm.js delete mode 100644 media/vendor/codemirror/mode/elm/elm.min.js delete mode 100644 media/vendor/codemirror/mode/erlang/erlang.js delete mode 100644 media/vendor/codemirror/mode/erlang/erlang.min.js delete mode 100644 media/vendor/codemirror/mode/factor/factor.js delete mode 100644 media/vendor/codemirror/mode/factor/factor.min.js delete mode 100644 media/vendor/codemirror/mode/fcl/fcl.js delete mode 100644 media/vendor/codemirror/mode/fcl/fcl.min.js delete mode 100644 media/vendor/codemirror/mode/forth/forth.js delete mode 100644 media/vendor/codemirror/mode/forth/forth.min.js delete mode 100644 media/vendor/codemirror/mode/fortran/fortran.js delete mode 100644 media/vendor/codemirror/mode/fortran/fortran.min.js delete mode 100644 media/vendor/codemirror/mode/gas/gas.js delete mode 100644 media/vendor/codemirror/mode/gas/gas.min.js delete mode 100644 media/vendor/codemirror/mode/gfm/gfm.js delete mode 100644 media/vendor/codemirror/mode/gfm/gfm.min.js delete mode 100644 media/vendor/codemirror/mode/gherkin/gherkin.js delete mode 100644 media/vendor/codemirror/mode/gherkin/gherkin.min.js delete mode 100644 media/vendor/codemirror/mode/go/go.js delete mode 100644 media/vendor/codemirror/mode/go/go.min.js delete mode 100644 media/vendor/codemirror/mode/groovy/groovy.js delete mode 100644 media/vendor/codemirror/mode/groovy/groovy.min.js delete mode 100644 media/vendor/codemirror/mode/haml/haml.js delete mode 100644 media/vendor/codemirror/mode/haml/haml.min.js delete mode 100644 media/vendor/codemirror/mode/handlebars/handlebars.js delete mode 100644 media/vendor/codemirror/mode/handlebars/handlebars.min.js delete mode 100644 media/vendor/codemirror/mode/haskell-literate/haskell-literate.js delete mode 100644 media/vendor/codemirror/mode/haskell-literate/haskell-literate.min.js delete mode 100644 media/vendor/codemirror/mode/haskell/haskell.js delete mode 100644 media/vendor/codemirror/mode/haskell/haskell.min.js delete mode 100644 media/vendor/codemirror/mode/haxe/haxe.js delete mode 100644 media/vendor/codemirror/mode/haxe/haxe.min.js delete mode 100644 media/vendor/codemirror/mode/htmlembedded/htmlembedded.js delete mode 100644 media/vendor/codemirror/mode/htmlembedded/htmlembedded.min.js delete mode 100644 media/vendor/codemirror/mode/htmlmixed/htmlmixed.js delete mode 100644 media/vendor/codemirror/mode/htmlmixed/htmlmixed.min.js delete mode 100644 media/vendor/codemirror/mode/http/http.js delete mode 100644 media/vendor/codemirror/mode/http/http.min.js delete mode 100644 media/vendor/codemirror/mode/idl/idl.js delete mode 100644 media/vendor/codemirror/mode/idl/idl.min.js delete mode 100644 media/vendor/codemirror/mode/javascript/javascript.js delete mode 100644 media/vendor/codemirror/mode/javascript/javascript.min.js delete mode 100644 media/vendor/codemirror/mode/jinja2/jinja2.js delete mode 100644 media/vendor/codemirror/mode/jinja2/jinja2.min.js delete mode 100644 media/vendor/codemirror/mode/jsx/jsx.js delete mode 100644 media/vendor/codemirror/mode/jsx/jsx.min.js delete mode 100644 media/vendor/codemirror/mode/julia/julia.js delete mode 100644 media/vendor/codemirror/mode/julia/julia.min.js delete mode 100644 media/vendor/codemirror/mode/livescript/livescript.js delete mode 100644 media/vendor/codemirror/mode/livescript/livescript.min.js delete mode 100644 media/vendor/codemirror/mode/lua/lua.js delete mode 100644 media/vendor/codemirror/mode/lua/lua.min.js delete mode 100644 media/vendor/codemirror/mode/markdown/markdown.js delete mode 100644 media/vendor/codemirror/mode/markdown/markdown.min.js delete mode 100644 media/vendor/codemirror/mode/mathematica/mathematica.js delete mode 100644 media/vendor/codemirror/mode/mathematica/mathematica.min.js delete mode 100644 media/vendor/codemirror/mode/mbox/mbox.js delete mode 100644 media/vendor/codemirror/mode/mbox/mbox.min.js delete mode 100644 media/vendor/codemirror/mode/meta.js delete mode 100644 media/vendor/codemirror/mode/meta.min.js delete mode 100644 media/vendor/codemirror/mode/mirc/mirc.js delete mode 100644 media/vendor/codemirror/mode/mirc/mirc.min.js delete mode 100644 media/vendor/codemirror/mode/mllike/mllike.js delete mode 100644 media/vendor/codemirror/mode/mllike/mllike.min.js delete mode 100644 media/vendor/codemirror/mode/modelica/modelica.js delete mode 100644 media/vendor/codemirror/mode/modelica/modelica.min.js delete mode 100644 media/vendor/codemirror/mode/mscgen/mscgen.js delete mode 100644 media/vendor/codemirror/mode/mscgen/mscgen.min.js delete mode 100644 media/vendor/codemirror/mode/mumps/mumps.js delete mode 100644 media/vendor/codemirror/mode/mumps/mumps.min.js delete mode 100644 media/vendor/codemirror/mode/nginx/nginx.js delete mode 100644 media/vendor/codemirror/mode/nginx/nginx.min.js delete mode 100644 media/vendor/codemirror/mode/nsis/nsis.js delete mode 100644 media/vendor/codemirror/mode/nsis/nsis.min.js delete mode 100644 media/vendor/codemirror/mode/ntriples/ntriples.js delete mode 100644 media/vendor/codemirror/mode/ntriples/ntriples.min.js delete mode 100644 media/vendor/codemirror/mode/octave/octave.js delete mode 100644 media/vendor/codemirror/mode/octave/octave.min.js delete mode 100644 media/vendor/codemirror/mode/oz/oz.js delete mode 100644 media/vendor/codemirror/mode/oz/oz.min.js delete mode 100644 media/vendor/codemirror/mode/pascal/pascal.js delete mode 100644 media/vendor/codemirror/mode/pascal/pascal.min.js delete mode 100644 media/vendor/codemirror/mode/pegjs/pegjs.js delete mode 100644 media/vendor/codemirror/mode/pegjs/pegjs.min.js delete mode 100644 media/vendor/codemirror/mode/perl/perl.js delete mode 100644 media/vendor/codemirror/mode/perl/perl.min.js delete mode 100644 media/vendor/codemirror/mode/php/php.js delete mode 100644 media/vendor/codemirror/mode/php/php.min.js delete mode 100644 media/vendor/codemirror/mode/pig/pig.js delete mode 100644 media/vendor/codemirror/mode/pig/pig.min.js delete mode 100644 media/vendor/codemirror/mode/powershell/powershell.js delete mode 100644 media/vendor/codemirror/mode/powershell/powershell.min.js delete mode 100644 media/vendor/codemirror/mode/properties/properties.js delete mode 100644 media/vendor/codemirror/mode/properties/properties.min.js delete mode 100644 media/vendor/codemirror/mode/protobuf/protobuf.js delete mode 100644 media/vendor/codemirror/mode/protobuf/protobuf.min.js delete mode 100644 media/vendor/codemirror/mode/pug/pug.js delete mode 100644 media/vendor/codemirror/mode/pug/pug.min.js delete mode 100644 media/vendor/codemirror/mode/puppet/puppet.js delete mode 100644 media/vendor/codemirror/mode/puppet/puppet.min.js delete mode 100644 media/vendor/codemirror/mode/python/python.js delete mode 100644 media/vendor/codemirror/mode/python/python.min.js delete mode 100644 media/vendor/codemirror/mode/q/q.js delete mode 100644 media/vendor/codemirror/mode/q/q.min.js delete mode 100644 media/vendor/codemirror/mode/r/r.js delete mode 100644 media/vendor/codemirror/mode/r/r.min.js delete mode 100644 media/vendor/codemirror/mode/rpm/changes/index.html delete mode 100644 media/vendor/codemirror/mode/rpm/rpm.js delete mode 100644 media/vendor/codemirror/mode/rpm/rpm.min.js delete mode 100644 media/vendor/codemirror/mode/rst/rst.js delete mode 100644 media/vendor/codemirror/mode/rst/rst.min.js delete mode 100644 media/vendor/codemirror/mode/ruby/ruby.js delete mode 100644 media/vendor/codemirror/mode/ruby/ruby.min.js delete mode 100644 media/vendor/codemirror/mode/rust/rust.js delete mode 100644 media/vendor/codemirror/mode/rust/rust.min.js delete mode 100755 media/vendor/codemirror/mode/sas/sas.js delete mode 100644 media/vendor/codemirror/mode/sas/sas.min.js delete mode 100644 media/vendor/codemirror/mode/sass/sass.js delete mode 100644 media/vendor/codemirror/mode/sass/sass.min.js delete mode 100644 media/vendor/codemirror/mode/scheme/scheme.js delete mode 100644 media/vendor/codemirror/mode/scheme/scheme.min.js delete mode 100644 media/vendor/codemirror/mode/shell/shell.js delete mode 100644 media/vendor/codemirror/mode/shell/shell.min.js delete mode 100644 media/vendor/codemirror/mode/sieve/sieve.js delete mode 100644 media/vendor/codemirror/mode/sieve/sieve.min.js delete mode 100644 media/vendor/codemirror/mode/slim/slim.js delete mode 100644 media/vendor/codemirror/mode/slim/slim.min.js delete mode 100644 media/vendor/codemirror/mode/smalltalk/smalltalk.js delete mode 100644 media/vendor/codemirror/mode/smalltalk/smalltalk.min.js delete mode 100644 media/vendor/codemirror/mode/smarty/smarty.js delete mode 100644 media/vendor/codemirror/mode/smarty/smarty.min.js delete mode 100644 media/vendor/codemirror/mode/solr/solr.js delete mode 100644 media/vendor/codemirror/mode/solr/solr.min.js delete mode 100644 media/vendor/codemirror/mode/soy/soy.js delete mode 100644 media/vendor/codemirror/mode/soy/soy.min.js delete mode 100644 media/vendor/codemirror/mode/sparql/sparql.js delete mode 100644 media/vendor/codemirror/mode/sparql/sparql.min.js delete mode 100644 media/vendor/codemirror/mode/spreadsheet/spreadsheet.js delete mode 100644 media/vendor/codemirror/mode/spreadsheet/spreadsheet.min.js delete mode 100644 media/vendor/codemirror/mode/sql/sql.js delete mode 100644 media/vendor/codemirror/mode/sql/sql.min.js delete mode 100644 media/vendor/codemirror/mode/stex/stex.js delete mode 100644 media/vendor/codemirror/mode/stex/stex.min.js delete mode 100644 media/vendor/codemirror/mode/stylus/stylus.js delete mode 100644 media/vendor/codemirror/mode/stylus/stylus.min.js delete mode 100644 media/vendor/codemirror/mode/swift/swift.js delete mode 100644 media/vendor/codemirror/mode/swift/swift.min.js delete mode 100644 media/vendor/codemirror/mode/tcl/tcl.js delete mode 100644 media/vendor/codemirror/mode/tcl/tcl.min.js delete mode 100644 media/vendor/codemirror/mode/textile/textile.js delete mode 100644 media/vendor/codemirror/mode/textile/textile.min.js delete mode 100644 media/vendor/codemirror/mode/tiddlywiki/tiddlywiki.css delete mode 100644 media/vendor/codemirror/mode/tiddlywiki/tiddlywiki.js delete mode 100644 media/vendor/codemirror/mode/tiddlywiki/tiddlywiki.min.css delete mode 100644 media/vendor/codemirror/mode/tiddlywiki/tiddlywiki.min.js delete mode 100644 media/vendor/codemirror/mode/tiki/tiki.css delete mode 100644 media/vendor/codemirror/mode/tiki/tiki.js delete mode 100644 media/vendor/codemirror/mode/tiki/tiki.min.css delete mode 100644 media/vendor/codemirror/mode/tiki/tiki.min.js delete mode 100644 media/vendor/codemirror/mode/toml/toml.js delete mode 100644 media/vendor/codemirror/mode/toml/toml.min.js delete mode 100644 media/vendor/codemirror/mode/tornado/tornado.js delete mode 100644 media/vendor/codemirror/mode/tornado/tornado.min.js delete mode 100644 media/vendor/codemirror/mode/troff/troff.js delete mode 100644 media/vendor/codemirror/mode/troff/troff.min.js delete mode 100644 media/vendor/codemirror/mode/ttcn-cfg/ttcn-cfg.js delete mode 100644 media/vendor/codemirror/mode/ttcn-cfg/ttcn-cfg.min.js delete mode 100644 media/vendor/codemirror/mode/ttcn/ttcn.js delete mode 100644 media/vendor/codemirror/mode/ttcn/ttcn.min.js delete mode 100644 media/vendor/codemirror/mode/turtle/turtle.js delete mode 100644 media/vendor/codemirror/mode/turtle/turtle.min.js delete mode 100644 media/vendor/codemirror/mode/twig/twig.js delete mode 100644 media/vendor/codemirror/mode/twig/twig.min.js delete mode 100644 media/vendor/codemirror/mode/vb/vb.js delete mode 100644 media/vendor/codemirror/mode/vb/vb.min.js delete mode 100644 media/vendor/codemirror/mode/vbscript/vbscript.js delete mode 100644 media/vendor/codemirror/mode/vbscript/vbscript.min.js delete mode 100644 media/vendor/codemirror/mode/velocity/velocity.js delete mode 100644 media/vendor/codemirror/mode/velocity/velocity.min.js delete mode 100644 media/vendor/codemirror/mode/verilog/verilog.js delete mode 100644 media/vendor/codemirror/mode/verilog/verilog.min.js delete mode 100644 media/vendor/codemirror/mode/vhdl/vhdl.js delete mode 100644 media/vendor/codemirror/mode/vhdl/vhdl.min.js delete mode 100644 media/vendor/codemirror/mode/vue/vue.js delete mode 100644 media/vendor/codemirror/mode/vue/vue.min.js delete mode 100644 media/vendor/codemirror/mode/webidl/webidl.js delete mode 100644 media/vendor/codemirror/mode/webidl/webidl.min.js delete mode 100644 media/vendor/codemirror/mode/xml/xml.js delete mode 100644 media/vendor/codemirror/mode/xml/xml.min.js delete mode 100644 media/vendor/codemirror/mode/xquery/xquery.js delete mode 100644 media/vendor/codemirror/mode/xquery/xquery.min.js delete mode 100644 media/vendor/codemirror/mode/yacas/yacas.js delete mode 100644 media/vendor/codemirror/mode/yacas/yacas.min.js delete mode 100644 media/vendor/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js delete mode 100644 media/vendor/codemirror/mode/yaml-frontmatter/yaml-frontmatter.min.js delete mode 100644 media/vendor/codemirror/mode/yaml/yaml.js delete mode 100644 media/vendor/codemirror/mode/yaml/yaml.min.js delete mode 100644 media/vendor/codemirror/mode/z80/z80.js delete mode 100644 media/vendor/codemirror/mode/z80/z80.min.js delete mode 100644 media/vendor/codemirror/theme/3024-day.css delete mode 100644 media/vendor/codemirror/theme/3024-day.min.css delete mode 100644 media/vendor/codemirror/theme/3024-night.css delete mode 100644 media/vendor/codemirror/theme/3024-night.min.css delete mode 100644 media/vendor/codemirror/theme/abcdef.css delete mode 100644 media/vendor/codemirror/theme/abcdef.min.css delete mode 100644 media/vendor/codemirror/theme/ambiance-mobile.css delete mode 100644 media/vendor/codemirror/theme/ambiance-mobile.min.css delete mode 100644 media/vendor/codemirror/theme/ambiance.css delete mode 100644 media/vendor/codemirror/theme/ambiance.min.css delete mode 100644 media/vendor/codemirror/theme/base16-dark.css delete mode 100644 media/vendor/codemirror/theme/base16-dark.min.css delete mode 100644 media/vendor/codemirror/theme/base16-light.css delete mode 100644 media/vendor/codemirror/theme/base16-light.min.css delete mode 100644 media/vendor/codemirror/theme/bespin.css delete mode 100644 media/vendor/codemirror/theme/bespin.min.css delete mode 100644 media/vendor/codemirror/theme/blackboard.css delete mode 100644 media/vendor/codemirror/theme/blackboard.min.css delete mode 100644 media/vendor/codemirror/theme/cobalt.css delete mode 100644 media/vendor/codemirror/theme/cobalt.min.css delete mode 100644 media/vendor/codemirror/theme/colorforth.css delete mode 100644 media/vendor/codemirror/theme/colorforth.min.css delete mode 100644 media/vendor/codemirror/theme/dracula.css delete mode 100644 media/vendor/codemirror/theme/dracula.min.css delete mode 100644 media/vendor/codemirror/theme/duotone-dark.css delete mode 100644 media/vendor/codemirror/theme/duotone-dark.min.css delete mode 100644 media/vendor/codemirror/theme/duotone-light.css delete mode 100644 media/vendor/codemirror/theme/duotone-light.min.css delete mode 100644 media/vendor/codemirror/theme/eclipse.css delete mode 100644 media/vendor/codemirror/theme/eclipse.min.css delete mode 100644 media/vendor/codemirror/theme/elegant.css delete mode 100644 media/vendor/codemirror/theme/elegant.min.css delete mode 100644 media/vendor/codemirror/theme/erlang-dark.css delete mode 100644 media/vendor/codemirror/theme/erlang-dark.min.css delete mode 100644 media/vendor/codemirror/theme/hopscotch.css delete mode 100644 media/vendor/codemirror/theme/hopscotch.min.css delete mode 100644 media/vendor/codemirror/theme/icecoder.css delete mode 100644 media/vendor/codemirror/theme/icecoder.min.css delete mode 100644 media/vendor/codemirror/theme/isotope.css delete mode 100644 media/vendor/codemirror/theme/isotope.min.css delete mode 100644 media/vendor/codemirror/theme/lesser-dark.css delete mode 100644 media/vendor/codemirror/theme/lesser-dark.min.css delete mode 100644 media/vendor/codemirror/theme/liquibyte.css delete mode 100644 media/vendor/codemirror/theme/liquibyte.min.css delete mode 100644 media/vendor/codemirror/theme/material.css delete mode 100644 media/vendor/codemirror/theme/material.min.css delete mode 100644 media/vendor/codemirror/theme/mbo.css delete mode 100644 media/vendor/codemirror/theme/mbo.min.css delete mode 100644 media/vendor/codemirror/theme/mdn-like.css delete mode 100644 media/vendor/codemirror/theme/mdn-like.min.css delete mode 100644 media/vendor/codemirror/theme/midnight.css delete mode 100644 media/vendor/codemirror/theme/midnight.min.css delete mode 100644 media/vendor/codemirror/theme/monokai.css delete mode 100644 media/vendor/codemirror/theme/monokai.min.css delete mode 100644 media/vendor/codemirror/theme/neat.css delete mode 100644 media/vendor/codemirror/theme/neat.min.css delete mode 100644 media/vendor/codemirror/theme/neo.css delete mode 100644 media/vendor/codemirror/theme/neo.min.css delete mode 100644 media/vendor/codemirror/theme/night.css delete mode 100644 media/vendor/codemirror/theme/night.min.css delete mode 100644 media/vendor/codemirror/theme/oceanic-next.css delete mode 100644 media/vendor/codemirror/theme/oceanic-next.min.css delete mode 100644 media/vendor/codemirror/theme/panda-syntax.css delete mode 100644 media/vendor/codemirror/theme/panda-syntax.min.css delete mode 100644 media/vendor/codemirror/theme/paraiso-dark.css delete mode 100644 media/vendor/codemirror/theme/paraiso-dark.min.css delete mode 100644 media/vendor/codemirror/theme/paraiso-light.css delete mode 100644 media/vendor/codemirror/theme/paraiso-light.min.css delete mode 100644 media/vendor/codemirror/theme/pastel-on-dark.css delete mode 100644 media/vendor/codemirror/theme/pastel-on-dark.min.css delete mode 100644 media/vendor/codemirror/theme/railscasts.css delete mode 100644 media/vendor/codemirror/theme/railscasts.min.css delete mode 100644 media/vendor/codemirror/theme/rubyblue.css delete mode 100644 media/vendor/codemirror/theme/rubyblue.min.css delete mode 100644 media/vendor/codemirror/theme/seti.css delete mode 100644 media/vendor/codemirror/theme/seti.min.css delete mode 100644 media/vendor/codemirror/theme/shadowfox.css delete mode 100644 media/vendor/codemirror/theme/shadowfox.min.css delete mode 100644 media/vendor/codemirror/theme/solarized.css delete mode 100644 media/vendor/codemirror/theme/solarized.min.css delete mode 100644 media/vendor/codemirror/theme/the-matrix.css delete mode 100644 media/vendor/codemirror/theme/the-matrix.min.css delete mode 100644 media/vendor/codemirror/theme/tomorrow-night-bright.css delete mode 100644 media/vendor/codemirror/theme/tomorrow-night-bright.min.css delete mode 100644 media/vendor/codemirror/theme/tomorrow-night-eighties.css delete mode 100644 media/vendor/codemirror/theme/tomorrow-night-eighties.min.css delete mode 100644 media/vendor/codemirror/theme/ttcn.css delete mode 100644 media/vendor/codemirror/theme/ttcn.min.css delete mode 100644 media/vendor/codemirror/theme/twilight.css delete mode 100644 media/vendor/codemirror/theme/twilight.min.css delete mode 100644 media/vendor/codemirror/theme/vibrant-ink.css delete mode 100644 media/vendor/codemirror/theme/vibrant-ink.min.css delete mode 100644 media/vendor/codemirror/theme/xq-dark.css delete mode 100644 media/vendor/codemirror/theme/xq-dark.min.css delete mode 100644 media/vendor/codemirror/theme/xq-light.css delete mode 100644 media/vendor/codemirror/theme/xq-light.min.css delete mode 100644 media/vendor/codemirror/theme/yeti.css delete mode 100644 media/vendor/codemirror/theme/yeti.min.css delete mode 100644 media/vendor/codemirror/theme/zenburn.css delete mode 100644 media/vendor/codemirror/theme/zenburn.min.css delete mode 100644 media/vendor/cropperjs/LICENSE delete mode 100644 media/vendor/cropperjs/css/cropper.css delete mode 100644 media/vendor/cropperjs/css/cropper.min.css delete mode 100644 media/vendor/cropperjs/js/cropper.js delete mode 100644 media/vendor/cropperjs/js/cropper.min.js delete mode 100644 media/vendor/diff/LICENSE delete mode 100644 media/vendor/diff/js/diff.js delete mode 100644 media/vendor/diff/js/diff.min.js delete mode 100644 media/vendor/dragula/css/dragula.css delete mode 100644 media/vendor/dragula/css/dragula.min.css delete mode 100644 media/vendor/dragula/js/dragula.js delete mode 100644 media/vendor/dragula/js/dragula.min.js delete mode 100644 media/vendor/dragula/license delete mode 100644 media/vendor/focus-visible/LICENSE.md delete mode 100644 media/vendor/focus-visible/js/focus-visible.js delete mode 100644 media/vendor/focus-visible/js/focus-visible.min.js delete mode 100644 media/vendor/focus-visible/js/focus-visible.min.js.map delete mode 100644 media/vendor/font-awesome/css/font-awesome.css delete mode 100644 media/vendor/font-awesome/css/font-awesome.css.map delete mode 100644 media/vendor/font-awesome/css/font-awesome.min.css delete mode 100644 media/vendor/font-awesome/fonts/FontAwesome.otf delete mode 100644 media/vendor/font-awesome/fonts/fontawesome-webfont.eot delete mode 100644 media/vendor/font-awesome/fonts/fontawesome-webfont.svg delete mode 100644 media/vendor/font-awesome/fonts/fontawesome-webfont.ttf delete mode 100644 media/vendor/font-awesome/fonts/fontawesome-webfont.woff delete mode 100644 media/vendor/font-awesome/fonts/fontawesome-webfont.woff2 delete mode 100644 media/vendor/font-awesome/scss/_animated.scss delete mode 100644 media/vendor/font-awesome/scss/_bordered-pulled.scss delete mode 100644 media/vendor/font-awesome/scss/_core.scss delete mode 100644 media/vendor/font-awesome/scss/_fixed-width.scss delete mode 100644 media/vendor/font-awesome/scss/_icons.scss delete mode 100644 media/vendor/font-awesome/scss/_larger.scss delete mode 100644 media/vendor/font-awesome/scss/_list.scss delete mode 100644 media/vendor/font-awesome/scss/_mixins.scss delete mode 100644 media/vendor/font-awesome/scss/_path.scss delete mode 100644 media/vendor/font-awesome/scss/_rotated-flipped.scss delete mode 100644 media/vendor/font-awesome/scss/_screen-reader.scss delete mode 100644 media/vendor/font-awesome/scss/_stacked.scss delete mode 100644 media/vendor/font-awesome/scss/_variables.scss delete mode 100644 media/vendor/font-awesome/scss/font-awesome.scss delete mode 100644 media/vendor/joomla-custom-elements/LICENSE delete mode 100644 media/vendor/joomla-custom-elements/css/joomla-alert.css delete mode 100644 media/vendor/joomla-custom-elements/css/joomla-alert.min.css delete mode 100644 media/vendor/joomla-custom-elements/css/joomla-panels.css delete mode 100644 media/vendor/joomla-custom-elements/css/joomla-panels.min.css delete mode 100644 media/vendor/joomla-custom-elements/js/joomla-alert-es5.js delete mode 100644 media/vendor/joomla-custom-elements/js/joomla-alert-es5.min.js delete mode 100644 media/vendor/joomla-custom-elements/js/joomla-alert.js delete mode 100644 media/vendor/joomla-custom-elements/js/joomla-alert.min.js delete mode 100644 media/vendor/joomla-custom-elements/js/joomla-panels-es5.js delete mode 100644 media/vendor/joomla-custom-elements/js/joomla-panels-es5.min.js delete mode 100644 media/vendor/joomla-custom-elements/js/joomla-panels.js delete mode 100644 media/vendor/joomla-custom-elements/js/joomla-panels.min.js delete mode 100644 media/vendor/jquery-migrate/LICENSE.txt delete mode 100644 media/vendor/jquery-migrate/js/jquery-migrate.js delete mode 100644 media/vendor/jquery-migrate/js/jquery-migrate.min.js delete mode 100644 media/vendor/jquery-ui/js/jquery.ui.core.js delete mode 100644 media/vendor/jquery-ui/js/jquery.ui.core.min.js delete mode 100644 media/vendor/jquery-ui/js/jquery.ui.sortable.js delete mode 100644 media/vendor/jquery-ui/js/jquery.ui.sortable.min.js delete mode 100644 media/vendor/jquery/LICENSE.txt delete mode 100644 media/vendor/jquery/js/jquery.js delete mode 100644 media/vendor/jquery/js/jquery.min.js delete mode 100644 media/vendor/jquery/js/jquery.min.map delete mode 100644 media/vendor/mediaelement/css/mediaelementplayer-legacy.css delete mode 100644 media/vendor/mediaelement/css/mediaelementplayer-legacy.min.css delete mode 100644 media/vendor/mediaelement/css/mediaelementplayer.css delete mode 100644 media/vendor/mediaelement/css/mediaelementplayer.min.css delete mode 100644 media/vendor/mediaelement/css/mejs-controls.png delete mode 100644 media/vendor/mediaelement/css/mejs-controls.svg delete mode 100644 media/vendor/mediaelement/js/mediaelement-and-player.js delete mode 100644 media/vendor/mediaelement/js/mediaelement-and-player.min.js delete mode 100644 media/vendor/mediaelement/js/mediaelement-flash-audio-ogg.swf delete mode 100644 media/vendor/mediaelement/js/mediaelement-flash-audio.swf delete mode 100644 media/vendor/mediaelement/js/mediaelement-flash-video-hls.swf delete mode 100644 media/vendor/mediaelement/js/mediaelement-flash-video-mdash.swf delete mode 100644 media/vendor/mediaelement/js/mediaelement-flash-video.swf delete mode 100644 media/vendor/mediaelement/js/mediaelement.js delete mode 100644 media/vendor/mediaelement/js/mediaelement.min.js delete mode 100644 media/vendor/minicolors/LICENSE.md delete mode 100644 media/vendor/minicolors/css/jquery.minicolors.css delete mode 100644 media/vendor/minicolors/css/jquery.minicolors.min.css delete mode 100644 media/vendor/minicolors/css/jquery.minicolors.png delete mode 100644 media/vendor/minicolors/js/jquery-minicolors.js delete mode 100644 media/vendor/minicolors/js/jquery-minicolors.min.js delete mode 100644 media/vendor/minicolors/js/jquery.minicolors.min.js delete mode 100644 media/vendor/punycode/LICENSE-MIT.txt delete mode 100644 media/vendor/punycode/js/punycode.js delete mode 100644 media/vendor/punycode/js/punycode.min.js delete mode 100644 media/vendor/tinymce/changelog.txt delete mode 100644 media/vendor/tinymce/langs/af.js delete mode 100644 media/vendor/tinymce/langs/af.min.js delete mode 100644 media/vendor/tinymce/langs/ar.js delete mode 100644 media/vendor/tinymce/langs/ar.min.js delete mode 100644 media/vendor/tinymce/langs/be.js delete mode 100644 media/vendor/tinymce/langs/be.min.js delete mode 100644 media/vendor/tinymce/langs/bg.js delete mode 100644 media/vendor/tinymce/langs/bg.min.js delete mode 100644 media/vendor/tinymce/langs/bs.js delete mode 100644 media/vendor/tinymce/langs/bs.min.js delete mode 100644 media/vendor/tinymce/langs/ca.js delete mode 100644 media/vendor/tinymce/langs/ca.min.js delete mode 100644 media/vendor/tinymce/langs/cs.js delete mode 100644 media/vendor/tinymce/langs/cs.min.js delete mode 100644 media/vendor/tinymce/langs/cy.js delete mode 100644 media/vendor/tinymce/langs/cy.min.js delete mode 100644 media/vendor/tinymce/langs/da.js delete mode 100644 media/vendor/tinymce/langs/da.min.js delete mode 100644 media/vendor/tinymce/langs/de.js delete mode 100644 media/vendor/tinymce/langs/de.min.js delete mode 100644 media/vendor/tinymce/langs/el.js delete mode 100644 media/vendor/tinymce/langs/el.min.js delete mode 100644 media/vendor/tinymce/langs/es.js delete mode 100644 media/vendor/tinymce/langs/es.min.js delete mode 100644 media/vendor/tinymce/langs/et.js delete mode 100644 media/vendor/tinymce/langs/et.min.js delete mode 100644 media/vendor/tinymce/langs/eu.js delete mode 100644 media/vendor/tinymce/langs/eu.min.js delete mode 100644 media/vendor/tinymce/langs/fa.js delete mode 100644 media/vendor/tinymce/langs/fa.min.js delete mode 100644 media/vendor/tinymce/langs/fi.js delete mode 100644 media/vendor/tinymce/langs/fi.min.js delete mode 100644 media/vendor/tinymce/langs/fo.js delete mode 100644 media/vendor/tinymce/langs/fo.min.js delete mode 100644 media/vendor/tinymce/langs/fr.js delete mode 100644 media/vendor/tinymce/langs/fr.min.js delete mode 100644 media/vendor/tinymce/langs/ga.js delete mode 100644 media/vendor/tinymce/langs/ga.min.js delete mode 100644 media/vendor/tinymce/langs/gl.js delete mode 100644 media/vendor/tinymce/langs/gl.min.js delete mode 100644 media/vendor/tinymce/langs/he.js delete mode 100644 media/vendor/tinymce/langs/he.min.js delete mode 100644 media/vendor/tinymce/langs/hr.js delete mode 100644 media/vendor/tinymce/langs/hr.min.js delete mode 100644 media/vendor/tinymce/langs/hu.js delete mode 100644 media/vendor/tinymce/langs/hu.min.js delete mode 100644 media/vendor/tinymce/langs/id.js delete mode 100644 media/vendor/tinymce/langs/id.min.js delete mode 100644 media/vendor/tinymce/langs/it.js delete mode 100644 media/vendor/tinymce/langs/it.min.js delete mode 100644 media/vendor/tinymce/langs/ja.js delete mode 100644 media/vendor/tinymce/langs/ja.min.js delete mode 100644 media/vendor/tinymce/langs/ka.js delete mode 100644 media/vendor/tinymce/langs/ka.min.js delete mode 100644 media/vendor/tinymce/langs/km.js delete mode 100644 media/vendor/tinymce/langs/km.min.js delete mode 100644 media/vendor/tinymce/langs/ko.js delete mode 100644 media/vendor/tinymce/langs/ko.min.js delete mode 100644 media/vendor/tinymce/langs/lb.js delete mode 100644 media/vendor/tinymce/langs/lb.min.js delete mode 100644 media/vendor/tinymce/langs/lt.js delete mode 100644 media/vendor/tinymce/langs/lt.min.js delete mode 100644 media/vendor/tinymce/langs/lv.js delete mode 100644 media/vendor/tinymce/langs/lv.min.js delete mode 100644 media/vendor/tinymce/langs/mk.js delete mode 100644 media/vendor/tinymce/langs/mk.min.js delete mode 100644 media/vendor/tinymce/langs/ms.js delete mode 100644 media/vendor/tinymce/langs/ms.min.js delete mode 100644 media/vendor/tinymce/langs/nb.js delete mode 100644 media/vendor/tinymce/langs/nb.min.js delete mode 100644 media/vendor/tinymce/langs/nl.js delete mode 100644 media/vendor/tinymce/langs/nl.min.js delete mode 100644 media/vendor/tinymce/langs/pl.js delete mode 100644 media/vendor/tinymce/langs/pl.min.js delete mode 100644 media/vendor/tinymce/langs/pt-BR.js delete mode 100644 media/vendor/tinymce/langs/pt-BR.min.js delete mode 100644 media/vendor/tinymce/langs/pt-PT.js delete mode 100644 media/vendor/tinymce/langs/pt-PT.min.js delete mode 100644 media/vendor/tinymce/langs/readme.md delete mode 100644 media/vendor/tinymce/langs/ro.js delete mode 100644 media/vendor/tinymce/langs/ro.min.js delete mode 100644 media/vendor/tinymce/langs/ru.js delete mode 100644 media/vendor/tinymce/langs/ru.min.js delete mode 100644 media/vendor/tinymce/langs/si-LK.js delete mode 100644 media/vendor/tinymce/langs/si-LK.min.js delete mode 100644 media/vendor/tinymce/langs/sk.js delete mode 100644 media/vendor/tinymce/langs/sk.min.js delete mode 100644 media/vendor/tinymce/langs/sl.js delete mode 100644 media/vendor/tinymce/langs/sl.min.js delete mode 100644 media/vendor/tinymce/langs/sr.js delete mode 100644 media/vendor/tinymce/langs/sr.min.js delete mode 100644 media/vendor/tinymce/langs/sv.js delete mode 100644 media/vendor/tinymce/langs/sv.min.js delete mode 100644 media/vendor/tinymce/langs/sw.js delete mode 100644 media/vendor/tinymce/langs/sw.min.js delete mode 100644 media/vendor/tinymce/langs/sy.js delete mode 100644 media/vendor/tinymce/langs/sy.min.js delete mode 100644 media/vendor/tinymce/langs/ta.js delete mode 100644 media/vendor/tinymce/langs/ta.min.js delete mode 100644 media/vendor/tinymce/langs/th.js delete mode 100644 media/vendor/tinymce/langs/th.min.js delete mode 100644 media/vendor/tinymce/langs/tr.js delete mode 100644 media/vendor/tinymce/langs/tr.min.js delete mode 100644 media/vendor/tinymce/langs/ug.js delete mode 100644 media/vendor/tinymce/langs/ug.min.js delete mode 100644 media/vendor/tinymce/langs/uk.js delete mode 100644 media/vendor/tinymce/langs/uk.min.js delete mode 100644 media/vendor/tinymce/langs/vi.js delete mode 100644 media/vendor/tinymce/langs/vi.min.js delete mode 100644 media/vendor/tinymce/langs/zh-CN.js delete mode 100644 media/vendor/tinymce/langs/zh-CN.min.js delete mode 100644 media/vendor/tinymce/langs/zh-TW.js delete mode 100644 media/vendor/tinymce/langs/zh-TW.min.js delete mode 100644 media/vendor/tinymce/license.txt delete mode 100644 media/vendor/tinymce/plugins/advlist/index.js delete mode 100644 media/vendor/tinymce/plugins/advlist/index.min.js delete mode 100644 media/vendor/tinymce/plugins/advlist/plugin.js delete mode 100644 media/vendor/tinymce/plugins/advlist/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/anchor/index.js delete mode 100644 media/vendor/tinymce/plugins/anchor/index.min.js delete mode 100644 media/vendor/tinymce/plugins/anchor/plugin.js delete mode 100644 media/vendor/tinymce/plugins/anchor/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/autolink/index.js delete mode 100644 media/vendor/tinymce/plugins/autolink/index.min.js delete mode 100644 media/vendor/tinymce/plugins/autolink/plugin.js delete mode 100644 media/vendor/tinymce/plugins/autolink/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/autoresize/index.js delete mode 100644 media/vendor/tinymce/plugins/autoresize/index.min.js delete mode 100644 media/vendor/tinymce/plugins/autoresize/plugin.js delete mode 100644 media/vendor/tinymce/plugins/autoresize/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/autosave/index.js delete mode 100644 media/vendor/tinymce/plugins/autosave/index.min.js delete mode 100644 media/vendor/tinymce/plugins/autosave/plugin.js delete mode 100644 media/vendor/tinymce/plugins/autosave/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/bbcode/index.js delete mode 100644 media/vendor/tinymce/plugins/bbcode/index.min.js delete mode 100644 media/vendor/tinymce/plugins/bbcode/plugin.js delete mode 100644 media/vendor/tinymce/plugins/bbcode/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/charmap/index.js delete mode 100644 media/vendor/tinymce/plugins/charmap/index.min.js delete mode 100644 media/vendor/tinymce/plugins/charmap/plugin.js delete mode 100644 media/vendor/tinymce/plugins/charmap/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/code/index.js delete mode 100644 media/vendor/tinymce/plugins/code/index.min.js delete mode 100644 media/vendor/tinymce/plugins/code/plugin.js delete mode 100644 media/vendor/tinymce/plugins/code/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/codesample/css/prism.css delete mode 100644 media/vendor/tinymce/plugins/codesample/css/prism.min.css delete mode 100644 media/vendor/tinymce/plugins/codesample/index.js delete mode 100644 media/vendor/tinymce/plugins/codesample/index.min.js delete mode 100644 media/vendor/tinymce/plugins/codesample/plugin.js delete mode 100644 media/vendor/tinymce/plugins/codesample/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/colorpicker/index.js delete mode 100644 media/vendor/tinymce/plugins/colorpicker/index.min.js delete mode 100644 media/vendor/tinymce/plugins/colorpicker/plugin.js delete mode 100644 media/vendor/tinymce/plugins/colorpicker/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/contextmenu/index.js delete mode 100644 media/vendor/tinymce/plugins/contextmenu/index.min.js delete mode 100644 media/vendor/tinymce/plugins/contextmenu/plugin.js delete mode 100644 media/vendor/tinymce/plugins/contextmenu/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/directionality/index.js delete mode 100644 media/vendor/tinymce/plugins/directionality/index.min.js delete mode 100644 media/vendor/tinymce/plugins/directionality/plugin.js delete mode 100644 media/vendor/tinymce/plugins/directionality/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-cool.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-cry.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-embarassed.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-frown.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-innocent.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-kiss.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-laughing.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-money-mouth.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-sealed.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-smile.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-surprised.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-tongue-out.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-undecided.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-wink.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/img/smiley-yell.gif delete mode 100644 media/vendor/tinymce/plugins/emoticons/index.js delete mode 100644 media/vendor/tinymce/plugins/emoticons/index.min.js delete mode 100644 media/vendor/tinymce/plugins/emoticons/plugin.js delete mode 100644 media/vendor/tinymce/plugins/emoticons/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/fullpage/index.js delete mode 100644 media/vendor/tinymce/plugins/fullpage/index.min.js delete mode 100644 media/vendor/tinymce/plugins/fullpage/plugin.js delete mode 100644 media/vendor/tinymce/plugins/fullpage/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/fullscreen/index.js delete mode 100644 media/vendor/tinymce/plugins/fullscreen/index.min.js delete mode 100644 media/vendor/tinymce/plugins/fullscreen/plugin.js delete mode 100644 media/vendor/tinymce/plugins/fullscreen/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/help/img/logo.png delete mode 100644 media/vendor/tinymce/plugins/help/index.js delete mode 100644 media/vendor/tinymce/plugins/help/index.min.js delete mode 100644 media/vendor/tinymce/plugins/help/plugin.js delete mode 100644 media/vendor/tinymce/plugins/help/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/hr/index.js delete mode 100644 media/vendor/tinymce/plugins/hr/index.min.js delete mode 100644 media/vendor/tinymce/plugins/hr/plugin.js delete mode 100644 media/vendor/tinymce/plugins/hr/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/image/index.js delete mode 100644 media/vendor/tinymce/plugins/image/index.min.js delete mode 100644 media/vendor/tinymce/plugins/image/plugin.js delete mode 100644 media/vendor/tinymce/plugins/image/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/imagetools/index.js delete mode 100644 media/vendor/tinymce/plugins/imagetools/index.min.js delete mode 100644 media/vendor/tinymce/plugins/imagetools/plugin.js delete mode 100644 media/vendor/tinymce/plugins/imagetools/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/importcss/index.js delete mode 100644 media/vendor/tinymce/plugins/importcss/index.min.js delete mode 100644 media/vendor/tinymce/plugins/importcss/plugin.js delete mode 100644 media/vendor/tinymce/plugins/importcss/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/insertdatetime/index.js delete mode 100644 media/vendor/tinymce/plugins/insertdatetime/index.min.js delete mode 100644 media/vendor/tinymce/plugins/insertdatetime/plugin.js delete mode 100644 media/vendor/tinymce/plugins/insertdatetime/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/legacyoutput/index.js delete mode 100644 media/vendor/tinymce/plugins/legacyoutput/index.min.js delete mode 100644 media/vendor/tinymce/plugins/legacyoutput/plugin.js delete mode 100644 media/vendor/tinymce/plugins/legacyoutput/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/link/index.js delete mode 100644 media/vendor/tinymce/plugins/link/index.min.js delete mode 100644 media/vendor/tinymce/plugins/link/plugin.js delete mode 100644 media/vendor/tinymce/plugins/link/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/lists/index.js delete mode 100644 media/vendor/tinymce/plugins/lists/index.min.js delete mode 100644 media/vendor/tinymce/plugins/lists/plugin.js delete mode 100644 media/vendor/tinymce/plugins/lists/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/media/index.js delete mode 100644 media/vendor/tinymce/plugins/media/index.min.js delete mode 100644 media/vendor/tinymce/plugins/media/plugin.js delete mode 100644 media/vendor/tinymce/plugins/media/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/nonbreaking/index.js delete mode 100644 media/vendor/tinymce/plugins/nonbreaking/index.min.js delete mode 100644 media/vendor/tinymce/plugins/nonbreaking/plugin.js delete mode 100644 media/vendor/tinymce/plugins/nonbreaking/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/noneditable/index.js delete mode 100644 media/vendor/tinymce/plugins/noneditable/index.min.js delete mode 100644 media/vendor/tinymce/plugins/noneditable/plugin.js delete mode 100644 media/vendor/tinymce/plugins/noneditable/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/pagebreak/index.js delete mode 100644 media/vendor/tinymce/plugins/pagebreak/index.min.js delete mode 100644 media/vendor/tinymce/plugins/pagebreak/plugin.js delete mode 100644 media/vendor/tinymce/plugins/pagebreak/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/paste/index.js delete mode 100644 media/vendor/tinymce/plugins/paste/index.min.js delete mode 100644 media/vendor/tinymce/plugins/paste/plugin.js delete mode 100644 media/vendor/tinymce/plugins/paste/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/preview/index.js delete mode 100644 media/vendor/tinymce/plugins/preview/index.min.js delete mode 100644 media/vendor/tinymce/plugins/preview/plugin.js delete mode 100644 media/vendor/tinymce/plugins/preview/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/print/index.js delete mode 100644 media/vendor/tinymce/plugins/print/index.min.js delete mode 100644 media/vendor/tinymce/plugins/print/plugin.js delete mode 100644 media/vendor/tinymce/plugins/print/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/save/index.js delete mode 100644 media/vendor/tinymce/plugins/save/index.min.js delete mode 100644 media/vendor/tinymce/plugins/save/plugin.js delete mode 100644 media/vendor/tinymce/plugins/save/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/searchreplace/index.js delete mode 100644 media/vendor/tinymce/plugins/searchreplace/index.min.js delete mode 100644 media/vendor/tinymce/plugins/searchreplace/plugin.js delete mode 100644 media/vendor/tinymce/plugins/searchreplace/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/spellchecker/index.js delete mode 100644 media/vendor/tinymce/plugins/spellchecker/index.min.js delete mode 100644 media/vendor/tinymce/plugins/spellchecker/plugin.js delete mode 100644 media/vendor/tinymce/plugins/spellchecker/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/tabfocus/index.js delete mode 100644 media/vendor/tinymce/plugins/tabfocus/index.min.js delete mode 100644 media/vendor/tinymce/plugins/tabfocus/plugin.js delete mode 100644 media/vendor/tinymce/plugins/tabfocus/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/table/index.js delete mode 100644 media/vendor/tinymce/plugins/table/index.min.js delete mode 100644 media/vendor/tinymce/plugins/table/plugin.js delete mode 100644 media/vendor/tinymce/plugins/table/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/template/index.js delete mode 100644 media/vendor/tinymce/plugins/template/index.min.js delete mode 100644 media/vendor/tinymce/plugins/template/plugin.js delete mode 100644 media/vendor/tinymce/plugins/template/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/textcolor/index.js delete mode 100644 media/vendor/tinymce/plugins/textcolor/index.min.js delete mode 100644 media/vendor/tinymce/plugins/textcolor/plugin.js delete mode 100644 media/vendor/tinymce/plugins/textcolor/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/textpattern/index.js delete mode 100644 media/vendor/tinymce/plugins/textpattern/index.min.js delete mode 100644 media/vendor/tinymce/plugins/textpattern/plugin.js delete mode 100644 media/vendor/tinymce/plugins/textpattern/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/toc/index.js delete mode 100644 media/vendor/tinymce/plugins/toc/index.min.js delete mode 100644 media/vendor/tinymce/plugins/toc/plugin.js delete mode 100644 media/vendor/tinymce/plugins/toc/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/visualblocks/css/visualblocks.css delete mode 100644 media/vendor/tinymce/plugins/visualblocks/css/visualblocks.min.css delete mode 100644 media/vendor/tinymce/plugins/visualblocks/index.js delete mode 100644 media/vendor/tinymce/plugins/visualblocks/index.min.js delete mode 100644 media/vendor/tinymce/plugins/visualblocks/plugin.js delete mode 100644 media/vendor/tinymce/plugins/visualblocks/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/visualchars/index.js delete mode 100644 media/vendor/tinymce/plugins/visualchars/index.min.js delete mode 100644 media/vendor/tinymce/plugins/visualchars/plugin.js delete mode 100644 media/vendor/tinymce/plugins/visualchars/plugin.min.js delete mode 100644 media/vendor/tinymce/plugins/wordcount/index.js delete mode 100644 media/vendor/tinymce/plugins/wordcount/index.min.js delete mode 100644 media/vendor/tinymce/plugins/wordcount/plugin.js delete mode 100644 media/vendor/tinymce/plugins/wordcount/plugin.min.js delete mode 100644 media/vendor/tinymce/skins/lightgray/content.inline.min.css delete mode 100644 media/vendor/tinymce/skins/lightgray/content.min.css delete mode 100644 media/vendor/tinymce/skins/lightgray/content.mobile.min.css delete mode 100644 media/vendor/tinymce/skins/lightgray/fonts/tinymce-mobile.woff delete mode 100644 media/vendor/tinymce/skins/lightgray/fonts/tinymce-small.eot delete mode 100644 media/vendor/tinymce/skins/lightgray/fonts/tinymce-small.svg delete mode 100644 media/vendor/tinymce/skins/lightgray/fonts/tinymce-small.ttf delete mode 100644 media/vendor/tinymce/skins/lightgray/fonts/tinymce-small.woff delete mode 100644 media/vendor/tinymce/skins/lightgray/fonts/tinymce.eot delete mode 100644 media/vendor/tinymce/skins/lightgray/fonts/tinymce.svg delete mode 100644 media/vendor/tinymce/skins/lightgray/fonts/tinymce.ttf delete mode 100644 media/vendor/tinymce/skins/lightgray/fonts/tinymce.woff delete mode 100644 media/vendor/tinymce/skins/lightgray/img/anchor.gif delete mode 100644 media/vendor/tinymce/skins/lightgray/img/loader.gif delete mode 100644 media/vendor/tinymce/skins/lightgray/img/object.gif delete mode 100644 media/vendor/tinymce/skins/lightgray/img/trans.gif delete mode 100644 media/vendor/tinymce/skins/lightgray/skin.min.css delete mode 100644 media/vendor/tinymce/skins/lightgray/skin.mobile.min.css delete mode 100644 media/vendor/tinymce/templates/layout1.html delete mode 100644 media/vendor/tinymce/templates/snippet1.html delete mode 100644 media/vendor/tinymce/themes/inlite/index.js delete mode 100644 media/vendor/tinymce/themes/inlite/index.min.js delete mode 100644 media/vendor/tinymce/themes/inlite/theme.js delete mode 100644 media/vendor/tinymce/themes/inlite/theme.min.js delete mode 100644 media/vendor/tinymce/themes/mobile/index.js delete mode 100644 media/vendor/tinymce/themes/mobile/index.min.js delete mode 100644 media/vendor/tinymce/themes/mobile/theme.js delete mode 100644 media/vendor/tinymce/themes/mobile/theme.min.js delete mode 100644 media/vendor/tinymce/themes/modern/index.js delete mode 100644 media/vendor/tinymce/themes/modern/index.min.js delete mode 100644 media/vendor/tinymce/themes/modern/theme.js delete mode 100644 media/vendor/tinymce/themes/modern/theme.min.js delete mode 100644 media/vendor/tinymce/tinymce.js delete mode 100644 media/vendor/tinymce/tinymce.min.js delete mode 100644 media/vendor/webcomponentsjs/LICENSE.md delete mode 100644 media/vendor/webcomponentsjs/js/webcomponents-ce.js delete mode 100644 media/vendor/webcomponentsjs/js/webcomponents-ce.min.js delete mode 100644 media/vendor/webcomponentsjs/js/webcomponents-sd-ce-pf.js delete mode 100644 media/vendor/webcomponentsjs/js/webcomponents-sd-ce-pf.min.js delete mode 100644 media/vendor/webcomponentsjs/js/webcomponents-sd-ce.js delete mode 100644 media/vendor/webcomponentsjs/js/webcomponents-sd-ce.min.js delete mode 100644 media/vendor/webcomponentsjs/js/webcomponents-sd.js delete mode 100644 media/vendor/webcomponentsjs/js/webcomponents-sd.min.js diff --git a/libraries/vendor/autoload.php b/libraries/vendor/autoload.php deleted file mode 100644 index c9064c9db714c..0000000000000 --- a/libraries/vendor/autoload.php +++ /dev/null @@ -1,7 +0,0 @@ - - * 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 http://www.php-fig.org/psr/psr-0/ - * @see http://www.php-fig.org/psr/psr-4/ - */ -class ClassLoader -{ - // PSR-4 - private $prefixLengthsPsr4 = array(); - private $prefixDirsPsr4 = array(); - private $fallbackDirsPsr4 = array(); - - // PSR-0 - private $prefixesPsr0 = array(); - private $fallbackDirsPsr0 = array(); - - private $useIncludePath = false; - private $classMap = array(); - private $classMapAuthoritative = false; - private $missingClasses = array(); - private $apcuPrefix; - - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', $this->prefixesPsr0); - } - - return array(); - } - - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param array $classMap Class to filename map - */ - 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 array|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - */ - public function add($prefix, $paths, $prepend = false) - { - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - (array) $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - (array) $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - (array) $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 array|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - (array) $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - (array) $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] = (array) $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - (array) $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 array|string $paths The PSR-0 base directories - */ - 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 array|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - */ - 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 - */ - 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 - */ - 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 - */ - public function setApcuPrefix($apcuPrefix) - { - $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $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 - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - } - - /** - * Unregisters this instance as an autoloader. - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return bool|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - includeFile($file); - - return true; - } - } - - /** - * 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; - } - - 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; - } -} - -/** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - */ -function includeFile($file) -{ - include $file; -} diff --git a/libraries/vendor/composer/LICENSE b/libraries/vendor/composer/LICENSE deleted file mode 100644 index f27399a042d95..0000000000000 --- a/libraries/vendor/composer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - -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/libraries/vendor/composer/autoload_classmap.php b/libraries/vendor/composer/autoload_classmap.php deleted file mode 100644 index 2c82b49304077..0000000000000 --- a/libraries/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,996 +0,0 @@ - $vendorDir . '/composer/ca-bundle/src/CaBundle.php', - 'Defuse\\Crypto\\Core' => $vendorDir . '/defuse/php-encryption/src/Core.php', - 'Defuse\\Crypto\\Crypto' => $vendorDir . '/defuse/php-encryption/src/Crypto.php', - 'Defuse\\Crypto\\DerivedKeys' => $vendorDir . '/defuse/php-encryption/src/DerivedKeys.php', - 'Defuse\\Crypto\\Encoding' => $vendorDir . '/defuse/php-encryption/src/Encoding.php', - 'Defuse\\Crypto\\Exception\\BadFormatException' => $vendorDir . '/defuse/php-encryption/src/Exception/BadFormatException.php', - 'Defuse\\Crypto\\Exception\\CryptoException' => $vendorDir . '/defuse/php-encryption/src/Exception/CryptoException.php', - 'Defuse\\Crypto\\Exception\\EnvironmentIsBrokenException' => $vendorDir . '/defuse/php-encryption/src/Exception/EnvironmentIsBrokenException.php', - 'Defuse\\Crypto\\Exception\\IOException' => $vendorDir . '/defuse/php-encryption/src/Exception/IOException.php', - 'Defuse\\Crypto\\Exception\\WrongKeyOrModifiedCiphertextException' => $vendorDir . '/defuse/php-encryption/src/Exception/WrongKeyOrModifiedCiphertextException.php', - 'Defuse\\Crypto\\File' => $vendorDir . '/defuse/php-encryption/src/File.php', - 'Defuse\\Crypto\\Key' => $vendorDir . '/defuse/php-encryption/src/Key.php', - 'Defuse\\Crypto\\KeyOrPassword' => $vendorDir . '/defuse/php-encryption/src/KeyOrPassword.php', - 'Defuse\\Crypto\\KeyProtectedByPassword' => $vendorDir . '/defuse/php-encryption/src/KeyProtectedByPassword.php', - 'Defuse\\Crypto\\RuntimeTests' => $vendorDir . '/defuse/php-encryption/src/RuntimeTests.php', - 'Doctrine\\Common\\Inflector\\Inflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php', - 'Fig\\Link\\EvolvableLinkProviderTrait' => $vendorDir . '/fig/link-util/src/EvolvableLinkProviderTrait.php', - 'Fig\\Link\\EvolvableLinkTrait' => $vendorDir . '/fig/link-util/src/EvolvableLinkTrait.php', - 'Fig\\Link\\GenericLinkProvider' => $vendorDir . '/fig/link-util/src/GenericLinkProvider.php', - 'Fig\\Link\\Link' => $vendorDir . '/fig/link-util/src/Link.php', - 'Fig\\Link\\LinkProviderTrait' => $vendorDir . '/fig/link-util/src/LinkProviderTrait.php', - 'Fig\\Link\\LinkTrait' => $vendorDir . '/fig/link-util/src/LinkTrait.php', - 'Fig\\Link\\TemplatedHrefTrait' => $vendorDir . '/fig/link-util/src/TemplatedHrefTrait.php', - 'Joomla\\Application\\AbstractApplication' => $vendorDir . '/joomla/application/src/AbstractApplication.php', - 'Joomla\\Application\\AbstractWebApplication' => $vendorDir . '/joomla/application/src/AbstractWebApplication.php', - 'Joomla\\Application\\ApplicationEvents' => $vendorDir . '/joomla/application/src/ApplicationEvents.php', - 'Joomla\\Application\\Controller\\ContainerControllerResolver' => $vendorDir . '/joomla/application/src/Controller/ContainerControllerResolver.php', - 'Joomla\\Application\\Controller\\ControllerResolver' => $vendorDir . '/joomla/application/src/Controller/ControllerResolver.php', - 'Joomla\\Application\\Controller\\ControllerResolverInterface' => $vendorDir . '/joomla/application/src/Controller/ControllerResolverInterface.php', - 'Joomla\\Application\\Event\\ApplicationErrorEvent' => $vendorDir . '/joomla/application/src/Event/ApplicationErrorEvent.php', - 'Joomla\\Application\\Event\\ApplicationEvent' => $vendorDir . '/joomla/application/src/Event/ApplicationEvent.php', - 'Joomla\\Application\\Exception\\UnableToWriteBody' => $vendorDir . '/joomla/application/src/Exception/UnableToWriteBody.php', - 'Joomla\\Application\\WebApplication' => $vendorDir . '/joomla/application/src/WebApplication.php', - 'Joomla\\Application\\Web\\WebClient' => $vendorDir . '/joomla/application/src/Web/WebClient.php', - 'Joomla\\Archive\\Archive' => $vendorDir . '/joomla/archive/src/Archive.php', - 'Joomla\\Archive\\Bzip2' => $vendorDir . '/joomla/archive/src/Bzip2.php', - 'Joomla\\Archive\\ExtractableInterface' => $vendorDir . '/joomla/archive/src/ExtractableInterface.php', - 'Joomla\\Archive\\Gzip' => $vendorDir . '/joomla/archive/src/Gzip.php', - 'Joomla\\Archive\\Tar' => $vendorDir . '/joomla/archive/src/Tar.php', - 'Joomla\\Archive\\Zip' => $vendorDir . '/joomla/archive/src/Zip.php', - 'Joomla\\Authentication\\AbstractUsernamePasswordAuthenticationStrategy' => $vendorDir . '/joomla/authentication/src/AbstractUsernamePasswordAuthenticationStrategy.php', - 'Joomla\\Authentication\\Authentication' => $vendorDir . '/joomla/authentication/src/Authentication.php', - 'Joomla\\Authentication\\AuthenticationStrategyInterface' => $vendorDir . '/joomla/authentication/src/AuthenticationStrategyInterface.php', - 'Joomla\\Authentication\\Password\\Argon2iHandler' => $vendorDir . '/joomla/authentication/src/Password/Argon2iHandler.php', - 'Joomla\\Authentication\\Password\\BCryptHandler' => $vendorDir . '/joomla/authentication/src/Password/BCryptHandler.php', - 'Joomla\\Authentication\\Password\\HandlerInterface' => $vendorDir . '/joomla/authentication/src/Password/HandlerInterface.php', - 'Joomla\\Authentication\\Strategies\\DatabaseStrategy' => $vendorDir . '/joomla/authentication/src/Strategies/DatabaseStrategy.php', - 'Joomla\\Authentication\\Strategies\\LocalStrategy' => $vendorDir . '/joomla/authentication/src/Strategies/LocalStrategy.php', - 'Joomla\\CMS\\Access\\Access' => $baseDir . '/libraries/src/Access/Access.php', - 'Joomla\\CMS\\Access\\Exception\\NotAllowed' => $baseDir . '/libraries/src/Access/Exception/NotAllowed.php', - 'Joomla\\CMS\\Access\\Rule' => $baseDir . '/libraries/src/Access/Rule.php', - 'Joomla\\CMS\\Access\\Rules' => $baseDir . '/libraries/src/Access/Rules.php', - 'Joomla\\CMS\\Application\\AdministratorApplication' => $baseDir . '/libraries/src/Application/AdministratorApplication.php', - 'Joomla\\CMS\\Application\\ApplicationHelper' => $baseDir . '/libraries/src/Application/ApplicationHelper.php', - 'Joomla\\CMS\\Application\\BaseApplication' => $baseDir . '/libraries/src/Application/BaseApplication.php', - 'Joomla\\CMS\\Application\\CLI\\CliInput' => $baseDir . '/libraries/src/Application/CLI/CliInput.php', - 'Joomla\\CMS\\Application\\CLI\\CliOutput' => $baseDir . '/libraries/src/Application/CLI/CliOutput.php', - 'Joomla\\CMS\\Application\\CLI\\ColorStyle' => $baseDir . '/libraries/src/Application/CLI/ColorStyle.php', - 'Joomla\\CMS\\Application\\CLI\\Output\\Processor\\ColorProcessor' => $baseDir . '/libraries/src/Application/CLI/Output/Processor/ColorProcessor.php', - 'Joomla\\CMS\\Application\\CLI\\Output\\Processor\\ProcessorInterface' => $baseDir . '/libraries/src/Application/CLI/Output/Processor/ProcessorInterface.php', - 'Joomla\\CMS\\Application\\CLI\\Output\\Stdout' => $baseDir . '/libraries/src/Application/CLI/Output/Stdout.php', - 'Joomla\\CMS\\Application\\CLI\\Output\\Xml' => $baseDir . '/libraries/src/Application/CLI/Output/Xml.php', - 'Joomla\\CMS\\Application\\CMSApplication' => $baseDir . '/libraries/src/Application/CMSApplication.php', - 'Joomla\\CMS\\Application\\CMSApplicationInterface' => $baseDir . '/libraries/src/Application/CMSApplicationInterface.php', - 'Joomla\\CMS\\Application\\CliApplication' => $baseDir . '/libraries/src/Application/CliApplication.php', - 'Joomla\\CMS\\Application\\ConsoleApplication' => $baseDir . '/libraries/src/Application/ConsoleApplication.php', - 'Joomla\\CMS\\Application\\DaemonApplication' => $baseDir . '/libraries/src/Application/DaemonApplication.php', - 'Joomla\\CMS\\Application\\EventAware' => $baseDir . '/libraries/src/Application/EventAware.php', - 'Joomla\\CMS\\Application\\ExtensionNamespaceMapper' => $baseDir . '/libraries/src/Application/ExtensionNamespaceMapper.php', - 'Joomla\\CMS\\Application\\IdentityAware' => $baseDir . '/libraries/src/Application/IdentityAware.php', - 'Joomla\\CMS\\Application\\SiteApplication' => $baseDir . '/libraries/src/Application/SiteApplication.php', - 'Joomla\\CMS\\Application\\WebApplication' => $baseDir . '/libraries/src/Application/WebApplication.php', - 'Joomla\\CMS\\Association\\AssociationExtensionHelper' => $baseDir . '/libraries/src/Association/AssociationExtensionHelper.php', - 'Joomla\\CMS\\Association\\AssociationExtensionInterface' => $baseDir . '/libraries/src/Association/AssociationExtensionInterface.php', - 'Joomla\\CMS\\Association\\AssociationServiceInterface' => $baseDir . '/libraries/src/Association/AssociationServiceInterface.php', - 'Joomla\\CMS\\Association\\AssociationServiceTrait' => $baseDir . '/libraries/src/Association/AssociationServiceTrait.php', - 'Joomla\\CMS\\Authentication\\Authentication' => $baseDir . '/libraries/src/Authentication/Authentication.php', - 'Joomla\\CMS\\Authentication\\AuthenticationResponse' => $baseDir . '/libraries/src/Authentication/AuthenticationResponse.php', - 'Joomla\\CMS\\Authentication\\Password\\Argon2iHandler' => $baseDir . '/libraries/src/Authentication/Password/Argon2iHandler.php', - 'Joomla\\CMS\\Authentication\\Password\\BCryptHandler' => $baseDir . '/libraries/src/Authentication/Password/BCryptHandler.php', - 'Joomla\\CMS\\Authentication\\Password\\ChainedHandler' => $baseDir . '/libraries/src/Authentication/Password/ChainedHandler.php', - 'Joomla\\CMS\\Authentication\\Password\\CheckIfRehashNeededHandlerInterface' => $baseDir . '/libraries/src/Authentication/Password/CheckIfRehashNeededHandlerInterface.php', - 'Joomla\\CMS\\Authentication\\Password\\MD5Handler' => $baseDir . '/libraries/src/Authentication/Password/MD5Handler.php', - 'Joomla\\CMS\\Authentication\\Password\\PHPassHandler' => $baseDir . '/libraries/src/Authentication/Password/PHPassHandler.php', - 'Joomla\\CMS\\Authentication\\Password\\SHA256Handler' => $baseDir . '/libraries/src/Authentication/Password/SHA256Handler.php', - 'Joomla\\CMS\\Button\\ActionButton' => $baseDir . '/libraries/src/Button/ActionButton.php', - 'Joomla\\CMS\\Button\\PublishedButton' => $baseDir . '/libraries/src/Button/PublishedButton.php', - 'Joomla\\CMS\\Cache\\Cache' => $baseDir . '/libraries/src/Cache/Cache.php', - 'Joomla\\CMS\\Cache\\CacheController' => $baseDir . '/libraries/src/Cache/CacheController.php', - 'Joomla\\CMS\\Cache\\CacheStorage' => $baseDir . '/libraries/src/Cache/CacheStorage.php', - 'Joomla\\CMS\\Cache\\Controller\\CallbackController' => $baseDir . '/libraries/src/Cache/Controller/CallbackController.php', - 'Joomla\\CMS\\Cache\\Controller\\OutputController' => $baseDir . '/libraries/src/Cache/Controller/OutputController.php', - 'Joomla\\CMS\\Cache\\Controller\\PageController' => $baseDir . '/libraries/src/Cache/Controller/PageController.php', - 'Joomla\\CMS\\Cache\\Controller\\ViewController' => $baseDir . '/libraries/src/Cache/Controller/ViewController.php', - 'Joomla\\CMS\\Cache\\Exception\\CacheConnectingException' => $baseDir . '/libraries/src/Cache/Exception/CacheConnectingException.php', - 'Joomla\\CMS\\Cache\\Exception\\CacheExceptionInterface' => $baseDir . '/libraries/src/Cache/Exception/CacheExceptionInterface.php', - 'Joomla\\CMS\\Cache\\Exception\\UnsupportedCacheException' => $baseDir . '/libraries/src/Cache/Exception/UnsupportedCacheException.php', - 'Joomla\\CMS\\Cache\\Storage\\ApcuStorage' => $baseDir . '/libraries/src/Cache/Storage/ApcuStorage.php', - 'Joomla\\CMS\\Cache\\Storage\\CacheStorageHelper' => $baseDir . '/libraries/src/Cache/Storage/CacheStorageHelper.php', - 'Joomla\\CMS\\Cache\\Storage\\FileStorage' => $baseDir . '/libraries/src/Cache/Storage/FileStorage.php', - 'Joomla\\CMS\\Cache\\Storage\\MemcachedStorage' => $baseDir . '/libraries/src/Cache/Storage/MemcachedStorage.php', - 'Joomla\\CMS\\Cache\\Storage\\RedisStorage' => $baseDir . '/libraries/src/Cache/Storage/RedisStorage.php', - 'Joomla\\CMS\\Cache\\Storage\\WincacheStorage' => $baseDir . '/libraries/src/Cache/Storage/WincacheStorage.php', - 'Joomla\\CMS\\Captcha\\Captcha' => $baseDir . '/libraries/src/Captcha/Captcha.php', - 'Joomla\\CMS\\Captcha\\Google\\HttpBridgePostRequestMethod' => $baseDir . '/libraries/src/Captcha/Google/HttpBridgePostRequestMethod.php', - 'Joomla\\CMS\\Categories\\Categories' => $baseDir . '/libraries/src/Categories/Categories.php', - 'Joomla\\CMS\\Categories\\CategoriesServiceInterface' => $baseDir . '/libraries/src/Categories/CategoriesServiceInterface.php', - 'Joomla\\CMS\\Categories\\CategoriesServiceTrait' => $baseDir . '/libraries/src/Categories/CategoriesServiceTrait.php', - 'Joomla\\CMS\\Categories\\CategoryNode' => $baseDir . '/libraries/src/Categories/CategoryNode.php', - 'Joomla\\CMS\\Categories\\SectionNotFoundException' => $baseDir . '/libraries/src/Categories/SectionNotFoundException.php', - 'Joomla\\CMS\\Client\\ClientHelper' => $baseDir . '/libraries/src/Client/ClientHelper.php', - 'Joomla\\CMS\\Client\\ClientWrapper' => $baseDir . '/libraries/src/Client/ClientWrapper.php', - 'Joomla\\CMS\\Client\\FtpClient' => $baseDir . '/libraries/src/Client/FtpClient.php', - 'Joomla\\CMS\\Component\\ComponentHelper' => $baseDir . '/libraries/src/Component/ComponentHelper.php', - 'Joomla\\CMS\\Component\\ComponentRecord' => $baseDir . '/libraries/src/Component/ComponentRecord.php', - 'Joomla\\CMS\\Component\\Exception\\MissingComponentException' => $baseDir . '/libraries/src/Component/Exception/MissingComponentException.php', - 'Joomla\\CMS\\Component\\Router\\RouterBase' => $baseDir . '/libraries/src/Component/Router/RouterBase.php', - 'Joomla\\CMS\\Component\\Router\\RouterInterface' => $baseDir . '/libraries/src/Component/Router/RouterInterface.php', - 'Joomla\\CMS\\Component\\Router\\RouterLegacy' => $baseDir . '/libraries/src/Component/Router/RouterLegacy.php', - 'Joomla\\CMS\\Component\\Router\\RouterView' => $baseDir . '/libraries/src/Component/Router/RouterView.php', - 'Joomla\\CMS\\Component\\Router\\RouterViewConfiguration' => $baseDir . '/libraries/src/Component/Router/RouterViewConfiguration.php', - 'Joomla\\CMS\\Component\\Router\\Rules\\MenuRules' => $baseDir . '/libraries/src/Component/Router/Rules/MenuRules.php', - 'Joomla\\CMS\\Component\\Router\\Rules\\NomenuRules' => $baseDir . '/libraries/src/Component/Router/Rules/NomenuRules.php', - 'Joomla\\CMS\\Component\\Router\\Rules\\RulesInterface' => $baseDir . '/libraries/src/Component/Router/Rules/RulesInterface.php', - 'Joomla\\CMS\\Component\\Router\\Rules\\StandardRules' => $baseDir . '/libraries/src/Component/Router/Rules/StandardRules.php', - 'Joomla\\CMS\\Console\\CheckUpdatesCommand' => $baseDir . '/libraries/src/Console/CheckUpdatesCommand.php', - 'Joomla\\CMS\\Console\\CleanCacheCommand' => $baseDir . '/libraries/src/Console/CleanCacheCommand.php', - 'Joomla\\CMS\\Console\\RemoveOldFilesCommand' => $baseDir . '/libraries/src/Console/RemoveOldFilesCommand.php', - 'Joomla\\CMS\\Console\\SessionGcCommand' => $baseDir . '/libraries/src/Console/SessionGcCommand.php', - 'Joomla\\CMS\\Crypt\\Cipher\\CryptoCipher' => $baseDir . '/libraries/src/Crypt/Cipher/CryptoCipher.php', - 'Joomla\\CMS\\Crypt\\Cipher\\SodiumCipher' => $baseDir . '/libraries/src/Crypt/Cipher/SodiumCipher.php', - 'Joomla\\CMS\\Crypt\\Crypt' => $baseDir . '/libraries/src/Crypt/Crypt.php', - 'Joomla\\CMS\\Date\\Date' => $baseDir . '/libraries/src/Date/Date.php', - 'Joomla\\CMS\\Dispatcher\\Dispatcher' => $baseDir . '/libraries/src/Dispatcher/Dispatcher.php', - 'Joomla\\CMS\\Dispatcher\\DispatcherFactory' => $baseDir . '/libraries/src/Dispatcher/DispatcherFactory.php', - 'Joomla\\CMS\\Dispatcher\\DispatcherFactoryInterface' => $baseDir . '/libraries/src/Dispatcher/DispatcherFactoryInterface.php', - 'Joomla\\CMS\\Dispatcher\\DispatcherInterface' => $baseDir . '/libraries/src/Dispatcher/DispatcherInterface.php', - 'Joomla\\CMS\\Dispatcher\\LegacyDispatcher' => $baseDir . '/libraries/src/Dispatcher/LegacyDispatcher.php', - 'Joomla\\CMS\\Document\\Document' => $baseDir . '/libraries/src/Document/Document.php', - 'Joomla\\CMS\\Document\\DocumentRenderer' => $baseDir . '/libraries/src/Document/DocumentRenderer.php', - 'Joomla\\CMS\\Document\\ErrorDocument' => $baseDir . '/libraries/src/Document/ErrorDocument.php', - 'Joomla\\CMS\\Document\\Factory' => $baseDir . '/libraries/src/Document/Factory.php', - 'Joomla\\CMS\\Document\\FactoryInterface' => $baseDir . '/libraries/src/Document/FactoryInterface.php', - 'Joomla\\CMS\\Document\\FeedDocument' => $baseDir . '/libraries/src/Document/FeedDocument.php', - 'Joomla\\CMS\\Document\\Feed\\FeedEnclosure' => $baseDir . '/libraries/src/Document/Feed/FeedEnclosure.php', - 'Joomla\\CMS\\Document\\Feed\\FeedImage' => $baseDir . '/libraries/src/Document/Feed/FeedImage.php', - 'Joomla\\CMS\\Document\\Feed\\FeedItem' => $baseDir . '/libraries/src/Document/Feed/FeedItem.php', - 'Joomla\\CMS\\Document\\HtmlDocument' => $baseDir . '/libraries/src/Document/HtmlDocument.php', - 'Joomla\\CMS\\Document\\ImageDocument' => $baseDir . '/libraries/src/Document/ImageDocument.php', - 'Joomla\\CMS\\Document\\JsonDocument' => $baseDir . '/libraries/src/Document/JsonDocument.php', - 'Joomla\\CMS\\Document\\OpensearchDocument' => $baseDir . '/libraries/src/Document/OpensearchDocument.php', - 'Joomla\\CMS\\Document\\Opensearch\\OpensearchImage' => $baseDir . '/libraries/src/Document/Opensearch/OpensearchImage.php', - 'Joomla\\CMS\\Document\\Opensearch\\OpensearchUrl' => $baseDir . '/libraries/src/Document/Opensearch/OpensearchUrl.php', - 'Joomla\\CMS\\Document\\PreloadManager' => $baseDir . '/libraries/src/Document/PreloadManager.php', - 'Joomla\\CMS\\Document\\PreloadManagerInterface' => $baseDir . '/libraries/src/Document/PreloadManagerInterface.php', - 'Joomla\\CMS\\Document\\RawDocument' => $baseDir . '/libraries/src/Document/RawDocument.php', - 'Joomla\\CMS\\Document\\RendererInterface' => $baseDir . '/libraries/src/Document/RendererInterface.php', - 'Joomla\\CMS\\Document\\Renderer\\Feed\\AtomRenderer' => $baseDir . '/libraries/src/Document/Renderer/Feed/AtomRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Feed\\RssRenderer' => $baseDir . '/libraries/src/Document/Renderer/Feed/RssRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\ComponentRenderer' => $baseDir . '/libraries/src/Document/Renderer/Html/ComponentRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\HeadRenderer' => $baseDir . '/libraries/src/Document/Renderer/Html/HeadRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\MessageRenderer' => $baseDir . '/libraries/src/Document/Renderer/Html/MessageRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\MetasRenderer' => $baseDir . '/libraries/src/Document/Renderer/Html/MetasRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\ModuleRenderer' => $baseDir . '/libraries/src/Document/Renderer/Html/ModuleRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\ModulesRenderer' => $baseDir . '/libraries/src/Document/Renderer/Html/ModulesRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\ScriptsRenderer' => $baseDir . '/libraries/src/Document/Renderer/Html/ScriptsRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\StylesRenderer' => $baseDir . '/libraries/src/Document/Renderer/Html/StylesRenderer.php', - 'Joomla\\CMS\\Document\\XmlDocument' => $baseDir . '/libraries/src/Document/XmlDocument.php', - 'Joomla\\CMS\\Editor\\Editor' => $baseDir . '/libraries/src/Editor/Editor.php', - 'Joomla\\CMS\\Encrypt\\AES\\AbstractAES' => $baseDir . '/libraries/src/Encrypt/AES/AbstractAES.php', - 'Joomla\\CMS\\Encrypt\\AES\\AesInterface' => $baseDir . '/libraries/src/Encrypt/AES/AesInterface.php', - 'Joomla\\CMS\\Encrypt\\AES\\Mcrypt' => $baseDir . '/libraries/src/Encrypt/AES/Mcrypt.php', - 'Joomla\\CMS\\Encrypt\\AES\\Openssl' => $baseDir . '/libraries/src/Encrypt/AES/OpenSSL.php', - 'Joomla\\CMS\\Encrypt\\Aes' => $baseDir . '/libraries/src/Encrypt/Aes.php', - 'Joomla\\CMS\\Encrypt\\Base32' => $baseDir . '/libraries/src/Encrypt/Base32.php', - 'Joomla\\CMS\\Encrypt\\RandValInterface' => $baseDir . '/libraries/src/Encrypt/RandValInterface.php', - 'Joomla\\CMS\\Encrypt\\Randval' => $baseDir . '/libraries/src/Encrypt/Randval.php', - 'Joomla\\CMS\\Encrypt\\Totp' => $baseDir . '/libraries/src/Encrypt/Totp.php', - 'Joomla\\CMS\\Environment\\Browser' => $baseDir . '/libraries/src/Environment/Browser.php', - 'Joomla\\CMS\\Error\\AbstractRenderer' => $baseDir . '/libraries/src/Error/AbstractRenderer.php', - 'Joomla\\CMS\\Error\\RendererInterface' => $baseDir . '/libraries/src/Error/RendererInterface.php', - 'Joomla\\CMS\\Error\\Renderer\\CliRenderer' => $baseDir . '/libraries/src/Error/Renderer/CliRenderer.php', - 'Joomla\\CMS\\Error\\Renderer\\FeedRenderer' => $baseDir . '/libraries/src/Error/Renderer/FeedRenderer.php', - 'Joomla\\CMS\\Error\\Renderer\\HtmlRenderer' => $baseDir . '/libraries/src/Error/Renderer/HtmlRenderer.php', - 'Joomla\\CMS\\Error\\Renderer\\JsonRenderer' => $baseDir . '/libraries/src/Error/Renderer/JsonRenderer.php', - 'Joomla\\CMS\\Error\\Renderer\\XmlRenderer' => $baseDir . '/libraries/src/Error/Renderer/XmlRenderer.php', - 'Joomla\\CMS\\Event\\AbstractEvent' => $baseDir . '/libraries/src/Event/AbstractEvent.php', - 'Joomla\\CMS\\Event\\AbstractImmutableEvent' => $baseDir . '/libraries/src/Event/AbstractImmutableEvent.php', - 'Joomla\\CMS\\Event\\AfterExtensionBootEvent' => $baseDir . '/libraries/src/Event/AfterExtensionBootEvent.php', - 'Joomla\\CMS\\Event\\BeforeExecuteEvent' => $baseDir . '/libraries/src/Event/BeforeExecuteEvent.php', - 'Joomla\\CMS\\Event\\BeforeExtensionBootEvent' => $baseDir . '/libraries/src/Event/BeforeExtensionBootEvent.php', - 'Joomla\\CMS\\Event\\ErrorEvent' => $baseDir . '/libraries/src/Event/ErrorEvent.php', - 'Joomla\\CMS\\Event\\GenericEvent' => $baseDir . '/libraries/src/Event/GenericEvent.php', - 'Joomla\\CMS\\Event\\Table\\AbstractEvent' => $baseDir . '/libraries/src/Event/Table/AbstractEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterBindEvent' => $baseDir . '/libraries/src/Event/Table/AfterBindEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterCheckinEvent' => $baseDir . '/libraries/src/Event/Table/AfterCheckinEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterCheckoutEvent' => $baseDir . '/libraries/src/Event/Table/AfterCheckoutEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterDeleteEvent' => $baseDir . '/libraries/src/Event/Table/AfterDeleteEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterHitEvent' => $baseDir . '/libraries/src/Event/Table/AfterHitEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterLoadEvent' => $baseDir . '/libraries/src/Event/Table/AfterLoadEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterMoveEvent' => $baseDir . '/libraries/src/Event/Table/AfterMoveEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterPublishEvent' => $baseDir . '/libraries/src/Event/Table/AfterPublishEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterReorderEvent' => $baseDir . '/libraries/src/Event/Table/AfterReorderEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterResetEvent' => $baseDir . '/libraries/src/Event/Table/AfterResetEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterStoreEvent' => $baseDir . '/libraries/src/Event/Table/AfterStoreEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeBindEvent' => $baseDir . '/libraries/src/Event/Table/BeforeBindEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeCheckinEvent' => $baseDir . '/libraries/src/Event/Table/BeforeCheckinEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeCheckoutEvent' => $baseDir . '/libraries/src/Event/Table/BeforeCheckoutEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeDeleteEvent' => $baseDir . '/libraries/src/Event/Table/BeforeDeleteEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeHitEvent' => $baseDir . '/libraries/src/Event/Table/BeforeHitEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeLoadEvent' => $baseDir . '/libraries/src/Event/Table/BeforeLoadEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeMoveEvent' => $baseDir . '/libraries/src/Event/Table/BeforeMoveEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforePublishEvent' => $baseDir . '/libraries/src/Event/Table/BeforePublishEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeReorderEvent' => $baseDir . '/libraries/src/Event/Table/BeforeReorderEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeResetEvent' => $baseDir . '/libraries/src/Event/Table/BeforeResetEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeStoreEvent' => $baseDir . '/libraries/src/Event/Table/BeforeStoreEvent.php', - 'Joomla\\CMS\\Event\\Table\\CheckEvent' => $baseDir . '/libraries/src/Event/Table/CheckEvent.php', - 'Joomla\\CMS\\Event\\Table\\ObjectCreateEvent' => $baseDir . '/libraries/src/Event/Table/ObjectCreateEvent.php', - 'Joomla\\CMS\\Event\\Table\\SetNewTagsEvent' => $baseDir . '/libraries/src/Event/Table/SetNewTagsEvent.php', - 'Joomla\\CMS\\Exception\\ExceptionHandler' => $baseDir . '/libraries/src/Exception/ExceptionHandler.php', - 'Joomla\\CMS\\Extension\\BootableExtensionInterface' => $baseDir . '/libraries/src/Extension/BootableExtensionInterface.php', - 'Joomla\\CMS\\Extension\\Component' => $baseDir . '/libraries/src/Extension/Component.php', - 'Joomla\\CMS\\Extension\\ComponentInterface' => $baseDir . '/libraries/src/Extension/ComponentInterface.php', - 'Joomla\\CMS\\Extension\\ExtensionHelper' => $baseDir . '/libraries/src/Extension/ExtensionHelper.php', - 'Joomla\\CMS\\Extension\\ExtensionManagerInterface' => $baseDir . '/libraries/src/Extension/ExtensionManagerInterface.php', - 'Joomla\\CMS\\Extension\\ExtensionManagerTrait' => $baseDir . '/libraries/src/Extension/ExtensionManagerTrait.php', - 'Joomla\\CMS\\Extension\\LegacyComponent' => $baseDir . '/libraries/src/Extension/LegacyComponent.php', - 'Joomla\\CMS\\Extension\\MVCComponent' => $baseDir . '/libraries/src/Extension/MVCComponent.php', - 'Joomla\\CMS\\Extension\\Service\\Provider\\DispatcherFactory' => $baseDir . '/libraries/src/Extension/Service/Provider/DispatcherFactory.php', - 'Joomla\\CMS\\Extension\\Service\\Provider\\MVCFactoryFactory' => $baseDir . '/libraries/src/Extension/Service/Provider/MVCFactoryFactory.php', - 'Joomla\\CMS\\Factory' => $baseDir . '/libraries/src/Factory.php', - 'Joomla\\CMS\\Feed\\Feed' => $baseDir . '/libraries/src/Feed/Feed.php', - 'Joomla\\CMS\\Feed\\FeedEntry' => $baseDir . '/libraries/src/Feed/FeedEntry.php', - 'Joomla\\CMS\\Feed\\FeedFactory' => $baseDir . '/libraries/src/Feed/FeedFactory.php', - 'Joomla\\CMS\\Feed\\FeedLink' => $baseDir . '/libraries/src/Feed/FeedLink.php', - 'Joomla\\CMS\\Feed\\FeedParser' => $baseDir . '/libraries/src/Feed/FeedParser.php', - 'Joomla\\CMS\\Feed\\FeedPerson' => $baseDir . '/libraries/src/Feed/FeedPerson.php', - 'Joomla\\CMS\\Feed\\Parser\\AtomParser' => $baseDir . '/libraries/src/Feed/Parser/AtomParser.php', - 'Joomla\\CMS\\Feed\\Parser\\NamespaceParserInterface' => $baseDir . '/libraries/src/Feed/Parser/NamespaceParserInterface.php', - 'Joomla\\CMS\\Feed\\Parser\\RssParser' => $baseDir . '/libraries/src/Feed/Parser/RssParser.php', - 'Joomla\\CMS\\Feed\\Parser\\Rss\\ItunesRssParser' => $baseDir . '/libraries/src/Feed/Parser/Rss/ItunesRssParser.php', - 'Joomla\\CMS\\Feed\\Parser\\Rss\\MediaRssParser' => $baseDir . '/libraries/src/Feed/Parser/Rss/MediaRssParser.php', - 'Joomla\\CMS\\Fields\\FieldsServiceInterface' => $baseDir . '/libraries/src/Fields/FieldsServiceInterface.php', - 'Joomla\\CMS\\Filesystem\\File' => $baseDir . '/libraries/src/Filesystem/File.php', - 'Joomla\\CMS\\Filesystem\\FilesystemHelper' => $baseDir . '/libraries/src/Filesystem/FilesystemHelper.php', - 'Joomla\\CMS\\Filesystem\\Folder' => $baseDir . '/libraries/src/Filesystem/Folder.php', - 'Joomla\\CMS\\Filesystem\\Patcher' => $baseDir . '/libraries/src/Filesystem/Patcher.php', - 'Joomla\\CMS\\Filesystem\\Path' => $baseDir . '/libraries/src/Filesystem/Path.php', - 'Joomla\\CMS\\Filesystem\\Stream' => $baseDir . '/libraries/src/Filesystem/Stream.php', - 'Joomla\\CMS\\Filesystem\\Streams\\StreamString' => $baseDir . '/libraries/src/Filesystem/Streams/StreamString.php', - 'Joomla\\CMS\\Filesystem\\Support\\StringController' => $baseDir . '/libraries/src/Filesystem/Support/Stringcontroller.php', - 'Joomla\\CMS\\Filesystem\\Wrapper\\FileWrapper' => $baseDir . '/libraries/src/Filesystem/Wrapper/FileWrapper.php', - 'Joomla\\CMS\\Filesystem\\Wrapper\\FolderWrapper' => $baseDir . '/libraries/src/Filesystem/Wrapper/FolderWrapper.php', - 'Joomla\\CMS\\Filesystem\\Wrapper\\PathWrapper' => $baseDir . '/libraries/src/Filesystem/Wrapper/PathWrapper.php', - 'Joomla\\CMS\\Filter\\Image\\Sketchy' => $baseDir . '/libraries/src/Image/Filter/Sketchy.php', - 'Joomla\\CMS\\Filter\\InputFilter' => $baseDir . '/libraries/src/Filter/InputFilter.php', - 'Joomla\\CMS\\Filter\\OutputFilter' => $baseDir . '/libraries/src/Filter/OutputFilter.php', - 'Joomla\\CMS\\Filter\\Wrapper\\OutputFilterWrapper' => $baseDir . '/libraries/src/Filter/Wrapper/OutputFilterWrapper.php', - 'Joomla\\CMS\\Form\\Field\\AccesslevelField' => $baseDir . '/libraries/src/Form/Field/AccesslevelField.php', - 'Joomla\\CMS\\Form\\Field\\AliastagField' => $baseDir . '/libraries/src/Form/Field/AliastagField.php', - 'Joomla\\CMS\\Form\\Field\\AuthorField' => $baseDir . '/libraries/src/Form/Field/AuthorField.php', - 'Joomla\\CMS\\Form\\Field\\CachehandlerField' => $baseDir . '/libraries/src/Form/Field/CachehandlerField.php', - 'Joomla\\CMS\\Form\\Field\\CalendarField' => $baseDir . '/libraries/src/Form/Field/CalendarField.php', - 'Joomla\\CMS\\Form\\Field\\CaptchaField' => $baseDir . '/libraries/src/Form/Field/CaptchaField.php', - 'Joomla\\CMS\\Form\\Field\\CategoryField' => $baseDir . '/libraries/src/Form/Field/CategoryField.php', - 'Joomla\\CMS\\Form\\Field\\CheckboxField' => $baseDir . '/libraries/src/Form/Field/CheckboxField.php', - 'Joomla\\CMS\\Form\\Field\\CheckboxesField' => $baseDir . '/libraries/src/Form/Field/CheckboxesField.php', - 'Joomla\\CMS\\Form\\Field\\ChromestyleField' => $baseDir . '/libraries/src/Form/Field/ChromestyleField.php', - 'Joomla\\CMS\\Form\\Field\\ColorField' => $baseDir . '/libraries/src/Form/Field/ColorField.php', - 'Joomla\\CMS\\Form\\Field\\ComboField' => $baseDir . '/libraries/src/Form/Field/ComboField.php', - 'Joomla\\CMS\\Form\\Field\\ComponentlayoutField' => $baseDir . '/libraries/src/Form/Field/ComponentlayoutField.php', - 'Joomla\\CMS\\Form\\Field\\ComponentsField' => $baseDir . '/libraries/src/Form/Field/ComponentsField.php', - 'Joomla\\CMS\\Form\\Field\\ContenthistoryField' => $baseDir . '/libraries/src/Form/Field/ContenthistoryField.php', - 'Joomla\\CMS\\Form\\Field\\ContentlanguageField' => $baseDir . '/libraries/src/Form/Field/ContentlanguageField.php', - 'Joomla\\CMS\\Form\\Field\\ContenttypeField' => $baseDir . '/libraries/src/Form/Field/ContenttypeField.php', - 'Joomla\\CMS\\Form\\Field\\DatabaseconnectionField' => $baseDir . '/libraries/src/Form/Field/DatabaseconnectionField.php', - 'Joomla\\CMS\\Form\\Field\\EditorField' => $baseDir . '/libraries/src/Form/Field/EditorField.php', - 'Joomla\\CMS\\Form\\Field\\EmailField' => $baseDir . '/libraries/src/Form/Field/EmailField.php', - 'Joomla\\CMS\\Form\\Field\\FileField' => $baseDir . '/libraries/src/Form/Field/FileField.php', - 'Joomla\\CMS\\Form\\Field\\FilelistField' => $baseDir . '/libraries/src/Form/Field/FilelistField.php', - 'Joomla\\CMS\\Form\\Field\\FolderlistField' => $baseDir . '/libraries/src/Form/Field/FolderlistField.php', - 'Joomla\\CMS\\Form\\Field\\FrontendlanguageField' => $baseDir . '/libraries/src/Form/Field/FrontendlanguageField.php', - 'Joomla\\CMS\\Form\\Field\\GroupedlistField' => $baseDir . '/libraries/src/Form/Field/GroupedlistField.php', - 'Joomla\\CMS\\Form\\Field\\HeadertagField' => $baseDir . '/libraries/src/Form/Field/HeadertagField.php', - 'Joomla\\CMS\\Form\\Field\\HelpsiteField' => $baseDir . '/libraries/src/Form/Field/HelpsiteField.php', - 'Joomla\\CMS\\Form\\Field\\HiddenField' => $baseDir . '/libraries/src/Form/Field/HiddenField.php', - 'Joomla\\CMS\\Form\\Field\\ImagelistField' => $baseDir . '/libraries/src/Form/Field/ImagelistField.php', - 'Joomla\\CMS\\Form\\Field\\IntegerField' => $baseDir . '/libraries/src/Form/Field/IntegerField.php', - 'Joomla\\CMS\\Form\\Field\\LanguageField' => $baseDir . '/libraries/src/Form/Field/LanguageField.php', - 'Joomla\\CMS\\Form\\Field\\LastvisitdaterangeField' => $baseDir . '/libraries/src/Form/Field/LastvisitdaterangeField.php', - 'Joomla\\CMS\\Form\\Field\\LimitboxField' => $baseDir . '/libraries/src/Form/Field/LimitboxField.php', - 'Joomla\\CMS\\Form\\Field\\ListField' => $baseDir . '/libraries/src/Form/Field/ListField.php', - 'Joomla\\CMS\\Form\\Field\\MediaField' => $baseDir . '/libraries/src/Form/Field/MediaField.php', - 'Joomla\\CMS\\Form\\Field\\MenuField' => $baseDir . '/libraries/src/Form/Field/MenuField.php', - 'Joomla\\CMS\\Form\\Field\\MenuitemField' => $baseDir . '/libraries/src/Form/Field/MenuitemField.php', - 'Joomla\\CMS\\Form\\Field\\MeterField' => $baseDir . '/libraries/src/Form/Field/MeterField.php', - 'Joomla\\CMS\\Form\\Field\\ModulelayoutField' => $baseDir . '/libraries/src/Form/Field/ModulelayoutField.php', - 'Joomla\\CMS\\Form\\Field\\ModuleorderField' => $baseDir . '/libraries/src/Form/Field/ModuleorderField.php', - 'Joomla\\CMS\\Form\\Field\\ModulepositionField' => $baseDir . '/libraries/src/Form/Field/ModulepositionField.php', - 'Joomla\\CMS\\Form\\Field\\ModuletagField' => $baseDir . '/libraries/src/Form/Field/ModuletagField.php', - 'Joomla\\CMS\\Form\\Field\\NoteField' => $baseDir . '/libraries/src/Form/Field/NoteField.php', - 'Joomla\\CMS\\Form\\Field\\NumberField' => $baseDir . '/libraries/src/Form/Field/NumberField.php', - 'Joomla\\CMS\\Form\\Field\\OrderingField' => $baseDir . '/libraries/src/Form/Field/OrderingField.php', - 'Joomla\\CMS\\Form\\Field\\PasswordField' => $baseDir . '/libraries/src/Form/Field/PasswordField.php', - 'Joomla\\CMS\\Form\\Field\\PluginsField' => $baseDir . '/libraries/src/Form/Field/PluginsField.php', - 'Joomla\\CMS\\Form\\Field\\PluginstatusField' => $baseDir . '/libraries/src/Form/Field/PluginstatusField.php', - 'Joomla\\CMS\\Form\\Field\\PredefinedlistField' => $baseDir . '/libraries/src/Form/Field/PredefinedlistField.php', - 'Joomla\\CMS\\Form\\Field\\RadioField' => $baseDir . '/libraries/src/Form/Field/RadioField.php', - 'Joomla\\CMS\\Form\\Field\\RadiobasicField' => $baseDir . '/libraries/src/Form/Field/RadiobasicField.php', - 'Joomla\\CMS\\Form\\Field\\RangeField' => $baseDir . '/libraries/src/Form/Field/RangeField.php', - 'Joomla\\CMS\\Form\\Field\\RedirectStatusField' => $baseDir . '/libraries/src/Form/Field/RedirectStatusField.php', - 'Joomla\\CMS\\Form\\Field\\RegistrationdaterangeField' => $baseDir . '/libraries/src/Form/Field/RegistrationdaterangeField.php', - 'Joomla\\CMS\\Form\\Field\\RulesField' => $baseDir . '/libraries/src/Form/Field/RulesField.php', - 'Joomla\\CMS\\Form\\Field\\SQLField' => $baseDir . '/libraries/src/Form/Field/SqlField.php', - 'Joomla\\CMS\\Form\\Field\\SessionhandlerField' => $baseDir . '/libraries/src/Form/Field/SessionhandlerField.php', - 'Joomla\\CMS\\Form\\Field\\SpacerField' => $baseDir . '/libraries/src/Form/Field/SpacerField.php', - 'Joomla\\CMS\\Form\\Field\\StatusField' => $baseDir . '/libraries/src/Form/Field/StatusField.php', - 'Joomla\\CMS\\Form\\Field\\SubformField' => $baseDir . '/libraries/src/Form/Field/SubformField.php', - 'Joomla\\CMS\\Form\\Field\\TagField' => $baseDir . '/libraries/src/Form/Field/TagField.php', - 'Joomla\\CMS\\Form\\Field\\TelephoneField' => $baseDir . '/libraries/src/Form/Field/TelephoneField.php', - 'Joomla\\CMS\\Form\\Field\\TemplatestyleField' => $baseDir . '/libraries/src/Form/Field/TemplatestyleField.php', - 'Joomla\\CMS\\Form\\Field\\TextField' => $baseDir . '/libraries/src/Form/Field/TextField.php', - 'Joomla\\CMS\\Form\\Field\\TextareaField' => $baseDir . '/libraries/src/Form/Field/TextareaField.php', - 'Joomla\\CMS\\Form\\Field\\TimezoneField' => $baseDir . '/libraries/src/Form/Field/TimezoneField.php', - 'Joomla\\CMS\\Form\\Field\\UrlField' => $baseDir . '/libraries/src/Form/Field/UrlField.php', - 'Joomla\\CMS\\Form\\Field\\UserField' => $baseDir . '/libraries/src/Form/Field/UserField.php', - 'Joomla\\CMS\\Form\\Field\\UseractiveField' => $baseDir . '/libraries/src/Form/Field/UseractiveField.php', - 'Joomla\\CMS\\Form\\Field\\UsergroupField' => $baseDir . '/libraries/src/Form/Field/UsergroupField.php', - 'Joomla\\CMS\\Form\\Field\\UsergrouplistField' => $baseDir . '/libraries/src/Form/Field/UsergrouplistField.php', - 'Joomla\\CMS\\Form\\Field\\UserstateField' => $baseDir . '/libraries/src/Form/Field/UserstateField.php', - 'Joomla\\CMS\\Form\\Form' => $baseDir . '/libraries/src/Form/Form.php', - 'Joomla\\CMS\\Form\\FormFactory' => $baseDir . '/libraries/src/Form/FormFactory.php', - 'Joomla\\CMS\\Form\\FormFactoryAwareInterface' => $baseDir . '/libraries/src/Form/FormFactoryAwareInterface.php', - 'Joomla\\CMS\\Form\\FormFactoryAwareTrait' => $baseDir . '/libraries/src/Form/FormFactoryAwareTrait.php', - 'Joomla\\CMS\\Form\\FormFactoryInterface' => $baseDir . '/libraries/src/Form/FormFactoryInterface.php', - 'Joomla\\CMS\\Form\\FormField' => $baseDir . '/libraries/src/Form/FormField.php', - 'Joomla\\CMS\\Form\\FormHelper' => $baseDir . '/libraries/src/Form/FormHelper.php', - 'Joomla\\CMS\\Form\\FormRule' => $baseDir . '/libraries/src/Form/FormRule.php', - 'Joomla\\CMS\\Form\\FormWrapper' => $baseDir . '/libraries/src/Form/FormWrapper.php', - 'Joomla\\CMS\\Form\\Rule\\BooleanRule' => $baseDir . '/libraries/src/Form/Rule/BooleanRule.php', - 'Joomla\\CMS\\Form\\Rule\\CalendarRule' => $baseDir . '/libraries/src/Form/Rule/CalendarRule.php', - 'Joomla\\CMS\\Form\\Rule\\CaptchaRule' => $baseDir . '/libraries/src/Form/Rule/CaptchaRule.php', - 'Joomla\\CMS\\Form\\Rule\\ColorRule' => $baseDir . '/libraries/src/Form/Rule/ColorRule.php', - 'Joomla\\CMS\\Form\\Rule\\EmailRule' => $baseDir . '/libraries/src/Form/Rule/EmailRule.php', - 'Joomla\\CMS\\Form\\Rule\\EqualsRule' => $baseDir . '/libraries/src/Form/Rule/EqualsRule.php', - 'Joomla\\CMS\\Form\\Rule\\NotequalsRule' => $baseDir . '/libraries/src/Form/Rule/NotequalsRule.php', - 'Joomla\\CMS\\Form\\Rule\\NumberRule' => $baseDir . '/libraries/src/Form/Rule/NumberRule.php', - 'Joomla\\CMS\\Form\\Rule\\OptionsRule' => $baseDir . '/libraries/src/Form/Rule/OptionsRule.php', - 'Joomla\\CMS\\Form\\Rule\\PasswordRule' => $baseDir . '/libraries/src/Form/Rule/PasswordRule.php', - 'Joomla\\CMS\\Form\\Rule\\RulesRule' => $baseDir . '/libraries/src/Form/Rule/RulesRule.php', - 'Joomla\\CMS\\Form\\Rule\\TelRule' => $baseDir . '/libraries/src/Form/Rule/TelRule.php', - 'Joomla\\CMS\\Form\\Rule\\UrlRule' => $baseDir . '/libraries/src/Form/Rule/UrlRule.php', - 'Joomla\\CMS\\Form\\Rule\\UsernameRule' => $baseDir . '/libraries/src/Form/Rule/UsernameRule.php', - 'Joomla\\CMS\\HTML\\HTMLHelper' => $baseDir . '/libraries/src/HTML/HTMLHelper.php', - 'Joomla\\CMS\\HTML\\HTMLRegistryAwareTrait' => $baseDir . '/libraries/src/HTML/HTMLRegistryAwareTrait.php', - 'Joomla\\CMS\\HTML\\Registry' => $baseDir . '/libraries/src/HTML/Registry.php', - 'Joomla\\CMS\\Help\\Help' => $baseDir . '/libraries/src/Help/Help.php', - 'Joomla\\CMS\\Helper\\AuthenticationHelper' => $baseDir . '/libraries/src/Helper/AuthenticationHelper.php', - 'Joomla\\CMS\\Helper\\CMSHelper' => $baseDir . '/libraries/src/Helper/CMSHelper.php', - 'Joomla\\CMS\\Helper\\ContentHelper' => $baseDir . '/libraries/src/Helper/ContentHelper.php', - 'Joomla\\CMS\\Helper\\ContentHistoryHelper' => $baseDir . '/libraries/src/Helper/ContentHistoryHelper.php', - 'Joomla\\CMS\\Helper\\LibraryHelper' => $baseDir . '/libraries/src/Helper/LibraryHelper.php', - 'Joomla\\CMS\\Helper\\MediaHelper' => $baseDir . '/libraries/src/Helper/MediaHelper.php', - 'Joomla\\CMS\\Helper\\ModuleHelper' => $baseDir . '/libraries/src/Helper/ModuleHelper.php', - 'Joomla\\CMS\\Helper\\RouteHelper' => $baseDir . '/libraries/src/Helper/RouteHelper.php', - 'Joomla\\CMS\\Helper\\SearchHelper' => $baseDir . '/libraries/src/Helper/SearchHelper.php', - 'Joomla\\CMS\\Helper\\TagsHelper' => $baseDir . '/libraries/src/Helper/TagsHelper.php', - 'Joomla\\CMS\\Helper\\UserGroupsHelper' => $baseDir . '/libraries/src/Helper/UserGroupsHelper.php', - 'Joomla\\CMS\\Http\\Http' => $baseDir . '/libraries/src/Http/Http.php', - 'Joomla\\CMS\\Http\\HttpFactory' => $baseDir . '/libraries/src/Http/HttpFactory.php', - 'Joomla\\CMS\\Http\\Response' => $baseDir . '/libraries/src/Http/Response.php', - 'Joomla\\CMS\\Http\\TransportInterface' => $baseDir . '/libraries/src/Http/TransportInterface.php', - 'Joomla\\CMS\\Http\\Transport\\CurlTransport' => $baseDir . '/libraries/src/Http/Transport/CurlTransport.php', - 'Joomla\\CMS\\Http\\Transport\\SocketTransport' => $baseDir . '/libraries/src/Http/Transport/SocketTransport.php', - 'Joomla\\CMS\\Http\\Transport\\StreamTransport' => $baseDir . '/libraries/src/Http/Transport/StreamTransport.php', - 'Joomla\\CMS\\Image\\Filter\\Backgroundfill' => $baseDir . '/libraries/src/Image/Filter/Backgroundfill.php', - 'Joomla\\CMS\\Image\\Filter\\Brightness' => $baseDir . '/libraries/src/Image/Filter/Brightness.php', - 'Joomla\\CMS\\Image\\Filter\\Contrast' => $baseDir . '/libraries/src/Image/Filter/Contrast.php', - 'Joomla\\CMS\\Image\\Filter\\Edgedetect' => $baseDir . '/libraries/src/Image/Filter/Edgedetect.php', - 'Joomla\\CMS\\Image\\Filter\\Emboss' => $baseDir . '/libraries/src/Image/Filter/Emboss.php', - 'Joomla\\CMS\\Image\\Filter\\Grayscale' => $baseDir . '/libraries/src/Image/Filter/Grayscale.php', - 'Joomla\\CMS\\Image\\Filter\\Negate' => $baseDir . '/libraries/src/Image/Filter/Negate.php', - 'Joomla\\CMS\\Image\\Filter\\Smooth' => $baseDir . '/libraries/src/Image/Filter/Smooth.php', - 'Joomla\\CMS\\Image\\Image' => $baseDir . '/libraries/src/Image/Image.php', - 'Joomla\\CMS\\Image\\ImageFilter' => $baseDir . '/libraries/src/Image/ImageFilter.php', - 'Joomla\\CMS\\Input\\Cli' => $baseDir . '/libraries/src/Input/Cli.php', - 'Joomla\\CMS\\Input\\Cookie' => $baseDir . '/libraries/src/Input/Cookie.php', - 'Joomla\\CMS\\Input\\Files' => $baseDir . '/libraries/src/Input/Files.php', - 'Joomla\\CMS\\Input\\Input' => $baseDir . '/libraries/src/Input/Input.php', - 'Joomla\\CMS\\Input\\Json' => $baseDir . '/libraries/src/Input/Json.php', - 'Joomla\\CMS\\Installer\\Adapter\\ComponentAdapter' => $baseDir . '/libraries/src/Installer/Adapter/ComponentAdapter.php', - 'Joomla\\CMS\\Installer\\Adapter\\FileAdapter' => $baseDir . '/libraries/src/Installer/Adapter/FileAdapter.php', - 'Joomla\\CMS\\Installer\\Adapter\\LanguageAdapter' => $baseDir . '/libraries/src/Installer/Adapter/LanguageAdapter.php', - 'Joomla\\CMS\\Installer\\Adapter\\LibraryAdapter' => $baseDir . '/libraries/src/Installer/Adapter/LibraryAdapter.php', - 'Joomla\\CMS\\Installer\\Adapter\\ModuleAdapter' => $baseDir . '/libraries/src/Installer/Adapter/ModuleAdapter.php', - 'Joomla\\CMS\\Installer\\Adapter\\PackageAdapter' => $baseDir . '/libraries/src/Installer/Adapter/PackageAdapter.php', - 'Joomla\\CMS\\Installer\\Adapter\\PluginAdapter' => $baseDir . '/libraries/src/Installer/Adapter/PluginAdapter.php', - 'Joomla\\CMS\\Installer\\Adapter\\TemplateAdapter' => $baseDir . '/libraries/src/Installer/Adapter/TemplateAdapter.php', - 'Joomla\\CMS\\Installer\\Installer' => $baseDir . '/libraries/src/Installer/Installer.php', - 'Joomla\\CMS\\Installer\\InstallerAdapter' => $baseDir . '/libraries/src/Installer/InstallerAdapter.php', - 'Joomla\\CMS\\Installer\\InstallerExtension' => $baseDir . '/libraries/src/Installer/InstallerExtension.php', - 'Joomla\\CMS\\Installer\\InstallerHelper' => $baseDir . '/libraries/src/Installer/InstallerHelper.php', - 'Joomla\\CMS\\Installer\\InstallerScript' => $baseDir . '/libraries/src/Installer/InstallerScript.php', - 'Joomla\\CMS\\Installer\\Manifest' => $baseDir . '/libraries/src/Installer/Manifest.php', - 'Joomla\\CMS\\Installer\\Manifest\\LibraryManifest' => $baseDir . '/libraries/src/Installer/Manifest/LibraryManifest.php', - 'Joomla\\CMS\\Installer\\Manifest\\PackageManifest' => $baseDir . '/libraries/src/Installer/Manifest/PackageManifest.php', - 'Joomla\\CMS\\Language\\Associations' => $baseDir . '/libraries/src/Language/Associations.php', - 'Joomla\\CMS\\Language\\Language' => $baseDir . '/libraries/src/Language/Language.php', - 'Joomla\\CMS\\Language\\LanguageHelper' => $baseDir . '/libraries/src/Language/LanguageHelper.php', - 'Joomla\\CMS\\Language\\LanguageStemmer' => $baseDir . '/libraries/src/Language/LanguageStemmer.php', - 'Joomla\\CMS\\Language\\Multilanguage' => $baseDir . '/libraries/src/Language/Multilanguage.php', - 'Joomla\\CMS\\Language\\Stemmer\\Porteren' => $baseDir . '/libraries/src/Language/Stemmer/Porteren.php', - 'Joomla\\CMS\\Language\\Text' => $baseDir . '/libraries/src/Language/Text.php', - 'Joomla\\CMS\\Language\\Transliterate' => $baseDir . '/libraries/src/Language/Transliterate.php', - 'Joomla\\CMS\\Language\\Wrapper\\JTextWrapper' => $baseDir . '/libraries/src/Language/Wrapper/JTextWrapper.php', - 'Joomla\\CMS\\Language\\Wrapper\\LanguageHelperWrapper' => $baseDir . '/libraries/src/Language/Wrapper/LanguageHelperWrapper.php', - 'Joomla\\CMS\\Language\\Wrapper\\TransliterateWrapper' => $baseDir . '/libraries/src/Language/Wrapper/TransliterateWrapper.php', - 'Joomla\\CMS\\Layout\\BaseLayout' => $baseDir . '/libraries/src/Layout/BaseLayout.php', - 'Joomla\\CMS\\Layout\\FileLayout' => $baseDir . '/libraries/src/Layout/FileLayout.php', - 'Joomla\\CMS\\Layout\\LayoutHelper' => $baseDir . '/libraries/src/Layout/LayoutHelper.php', - 'Joomla\\CMS\\Layout\\LayoutInterface' => $baseDir . '/libraries/src/Layout/LayoutInterface.php', - 'Joomla\\CMS\\Log\\DelegatingPsrLogger' => $baseDir . '/libraries/src/Log/DelegatingPsrLogger.php', - 'Joomla\\CMS\\Log\\Log' => $baseDir . '/libraries/src/Log/Log.php', - 'Joomla\\CMS\\Log\\LogEntry' => $baseDir . '/libraries/src/Log/LogEntry.php', - 'Joomla\\CMS\\Log\\Logger' => $baseDir . '/libraries/src/Log/Logger.php', - 'Joomla\\CMS\\Log\\LoggerRegistry' => $baseDir . '/libraries/src/Log/LoggerRegistry.php', - 'Joomla\\CMS\\Log\\Logger\\CallbackLogger' => $baseDir . '/libraries/src/Log/Logger/CallbackLogger.php', - 'Joomla\\CMS\\Log\\Logger\\DatabaseLogger' => $baseDir . '/libraries/src/Log/Logger/DatabaseLogger.php', - 'Joomla\\CMS\\Log\\Logger\\EchoLogger' => $baseDir . '/libraries/src/Log/Logger/EchoLogger.php', - 'Joomla\\CMS\\Log\\Logger\\FormattedtextLogger' => $baseDir . '/libraries/src/Log/Logger/FormattedtextLogger.php', - 'Joomla\\CMS\\Log\\Logger\\MessagequeueLogger' => $baseDir . '/libraries/src/Log/Logger/MessagequeueLogger.php', - 'Joomla\\CMS\\Log\\Logger\\SyslogLogger' => $baseDir . '/libraries/src/Log/Logger/SyslogLogger.php', - 'Joomla\\CMS\\Log\\Logger\\W3cLogger' => $baseDir . '/libraries/src/Log/Logger/W3cLogger.php', - 'Joomla\\CMS\\MVC\\Controller\\AdminController' => $baseDir . '/libraries/src/MVC/Controller/AdminController.php', - 'Joomla\\CMS\\MVC\\Controller\\BaseController' => $baseDir . '/libraries/src/MVC/Controller/BaseController.php', - 'Joomla\\CMS\\MVC\\Controller\\ControllerInterface' => $baseDir . '/libraries/src/MVC/Controller/ControllerInterface.php', - 'Joomla\\CMS\\MVC\\Controller\\FormController' => $baseDir . '/libraries/src/MVC/Controller/FormController.php', - 'Joomla\\CMS\\MVC\\Factory\\LegacyFactory' => $baseDir . '/libraries/src/MVC/Factory/LegacyFactory.php', - 'Joomla\\CMS\\MVC\\Factory\\MVCFactory' => $baseDir . '/libraries/src/MVC/Factory/MVCFactory.php', - 'Joomla\\CMS\\MVC\\Factory\\MVCFactoryFactory' => $baseDir . '/libraries/src/MVC/Factory/MVCFactoryFactory.php', - 'Joomla\\CMS\\MVC\\Factory\\MVCFactoryFactoryInterface' => $baseDir . '/libraries/src/MVC/Factory/MVCFactoryFactoryInterface.php', - 'Joomla\\CMS\\MVC\\Factory\\MVCFactoryInterface' => $baseDir . '/libraries/src/MVC/Factory/MVCFactoryInterface.php', - 'Joomla\\CMS\\MVC\\Factory\\MVCFactoryServiceInterface' => $baseDir . '/libraries/src/MVC/Factory/MVCFactoryServiceInterface.php', - 'Joomla\\CMS\\MVC\\Factory\\MVCFactoryServiceTrait' => $baseDir . '/libraries/src/MVC/Factory/MVCFactoryServiceTrait.php', - 'Joomla\\CMS\\MVC\\Model\\AdminModel' => $baseDir . '/libraries/src/MVC/Model/AdminModel.php', - 'Joomla\\CMS\\MVC\\Model\\BaseDatabaseModel' => $baseDir . '/libraries/src/MVC/Model/BaseDatabaseModel.php', - 'Joomla\\CMS\\MVC\\Model\\FormModel' => $baseDir . '/libraries/src/MVC/Model/FormModel.php', - 'Joomla\\CMS\\MVC\\Model\\ItemModel' => $baseDir . '/libraries/src/MVC/Model/ItemModel.php', - 'Joomla\\CMS\\MVC\\Model\\ListModel' => $baseDir . '/libraries/src/MVC/Model/ListModel.php', - 'Joomla\\CMS\\MVC\\View\\AbstractView' => $baseDir . '/libraries/src/MVC/View/AbstractView.php', - 'Joomla\\CMS\\MVC\\View\\CategoriesView' => $baseDir . '/libraries/src/MVC/View/CategoriesView.php', - 'Joomla\\CMS\\MVC\\View\\CategoryFeedView' => $baseDir . '/libraries/src/MVC/View/CategoryFeedView.php', - 'Joomla\\CMS\\MVC\\View\\CategoryView' => $baseDir . '/libraries/src/MVC/View/CategoryView.php', - 'Joomla\\CMS\\MVC\\View\\FormView' => $baseDir . '/libraries/src/MVC/View/FormView.php', - 'Joomla\\CMS\\MVC\\View\\HtmlView' => $baseDir . '/libraries/src/MVC/View/HtmlView.php', - 'Joomla\\CMS\\MVC\\View\\ListView' => $baseDir . '/libraries/src/MVC/View/ListView.php', - 'Joomla\\CMS\\Mail\\Mail' => $baseDir . '/libraries/src/Mail/Mail.php', - 'Joomla\\CMS\\Mail\\MailHelper' => $baseDir . '/libraries/src/Mail/MailHelper.php', - 'Joomla\\CMS\\Menu\\AbstractMenu' => $baseDir . '/libraries/src/Menu/AbstractMenu.php', - 'Joomla\\CMS\\Menu\\AdministratorMenu' => $baseDir . '/libraries/src/Menu/AdministratorMenu.php', - 'Joomla\\CMS\\Menu\\MenuFactory' => $baseDir . '/libraries/src/Menu/MenuFactory.php', - 'Joomla\\CMS\\Menu\\MenuFactoryInterface' => $baseDir . '/libraries/src/Menu/MenuFactoryInterface.php', - 'Joomla\\CMS\\Menu\\MenuHelper' => $baseDir . '/libraries/src/Menu/MenuHelper.php', - 'Joomla\\CMS\\Menu\\MenuItem' => $baseDir . '/libraries/src/Menu/MenuItem.php', - 'Joomla\\CMS\\Menu\\Node' => $baseDir . '/libraries/src/Menu/Node.php', - 'Joomla\\CMS\\Menu\\Node\\Component' => $baseDir . '/libraries/src/Menu/Node/Component.php', - 'Joomla\\CMS\\Menu\\Node\\Container' => $baseDir . '/libraries/src/Menu/Node/Container.php', - 'Joomla\\CMS\\Menu\\Node\\Heading' => $baseDir . '/libraries/src/Menu/Node/Heading.php', - 'Joomla\\CMS\\Menu\\Node\\Separator' => $baseDir . '/libraries/src/Menu/Node/Separator.php', - 'Joomla\\CMS\\Menu\\Node\\Url' => $baseDir . '/libraries/src/Menu/Node/Url.php', - 'Joomla\\CMS\\Menu\\SiteMenu' => $baseDir . '/libraries/src/Menu/SiteMenu.php', - 'Joomla\\CMS\\Menu\\Tree' => $baseDir . '/libraries/src/Menu/Tree.php', - 'Joomla\\CMS\\Microdata\\Microdata' => $baseDir . '/libraries/src/Microdata/Microdata.php', - 'Joomla\\CMS\\Object\\CMSObject' => $baseDir . '/libraries/src/Object/CMSObject.php', - 'Joomla\\CMS\\Pagination\\Pagination' => $baseDir . '/libraries/src/Pagination/Pagination.php', - 'Joomla\\CMS\\Pagination\\PaginationObject' => $baseDir . '/libraries/src/Pagination/PaginationObject.php', - 'Joomla\\CMS\\Pathway\\Pathway' => $baseDir . '/libraries/src/Pathway/Pathway.php', - 'Joomla\\CMS\\Pathway\\SitePathway' => $baseDir . '/libraries/src/Pathway/SitePathway.php', - 'Joomla\\CMS\\Plugin\\CMSPlugin' => $baseDir . '/libraries/src/Plugin/CMSPlugin.php', - 'Joomla\\CMS\\Plugin\\PluginHelper' => $baseDir . '/libraries/src/Plugin/PluginHelper.php', - 'Joomla\\CMS\\Profiler\\Profiler' => $baseDir . '/libraries/src/Profiler/Profiler.php', - 'Joomla\\CMS\\Response\\JsonResponse' => $baseDir . '/libraries/src/Response/JsonResponse.php', - 'Joomla\\CMS\\Router\\AdministratorRouter' => $baseDir . '/libraries/src/Router/AdministratorRouter.php', - 'Joomla\\CMS\\Router\\Exception\\RouteNotFoundException' => $baseDir . '/libraries/src/Router/Exception/RouteNotFoundException.php', - 'Joomla\\CMS\\Router\\Route' => $baseDir . '/libraries/src/Router/Route.php', - 'Joomla\\CMS\\Router\\Router' => $baseDir . '/libraries/src/Router/Router.php', - 'Joomla\\CMS\\Router\\SiteRouter' => $baseDir . '/libraries/src/Router/SiteRouter.php', - 'Joomla\\CMS\\Schema\\ChangeItem' => $baseDir . '/libraries/src/Schema/ChangeItem.php', - 'Joomla\\CMS\\Schema\\ChangeItem\\MysqlChangeItem' => $baseDir . '/libraries/src/Schema/ChangeItem/MysqlChangeItem.php', - 'Joomla\\CMS\\Schema\\ChangeItem\\PostgresqlChangeItem' => $baseDir . '/libraries/src/Schema/ChangeItem/PostgresqlChangeItem.php', - 'Joomla\\CMS\\Schema\\ChangeItem\\SqlsrvChangeItem' => $baseDir . '/libraries/src/Schema/ChangeItem/SqlsrvChangeItem.php', - 'Joomla\\CMS\\Schema\\ChangeSet' => $baseDir . '/libraries/src/Schema/ChangeSet.php', - 'Joomla\\CMS\\Service\\Provider\\Application' => $baseDir . '/libraries/src/Service/Provider/Application.php', - 'Joomla\\CMS\\Service\\Provider\\Authentication' => $baseDir . '/libraries/src/Service/Provider/Authentication.php', - 'Joomla\\CMS\\Service\\Provider\\Config' => $baseDir . '/libraries/src/Service/Provider/Config.php', - 'Joomla\\CMS\\Service\\Provider\\Console' => $baseDir . '/libraries/src/Service/Provider/Console.php', - 'Joomla\\CMS\\Service\\Provider\\Database' => $baseDir . '/libraries/src/Service/Provider/Database.php', - 'Joomla\\CMS\\Service\\Provider\\Dispatcher' => $baseDir . '/libraries/src/Service/Provider/Dispatcher.php', - 'Joomla\\CMS\\Service\\Provider\\Document' => $baseDir . '/libraries/src/Service/Provider/Document.php', - 'Joomla\\CMS\\Service\\Provider\\Form' => $baseDir . '/libraries/src/Service/Provider/Form.php', - 'Joomla\\CMS\\Service\\Provider\\HTMLRegistry' => $baseDir . '/libraries/src/Service/Provider/HTMLRegistry.php', - 'Joomla\\CMS\\Service\\Provider\\Logger' => $baseDir . '/libraries/src/Service/Provider/Logger.php', - 'Joomla\\CMS\\Service\\Provider\\Menu' => $baseDir . '/libraries/src/Service/Provider/Menu.php', - 'Joomla\\CMS\\Service\\Provider\\Pathway' => $baseDir . '/libraries/src/Service/Provider/Pathway.php', - 'Joomla\\CMS\\Service\\Provider\\Session' => $baseDir . '/libraries/src/Service/Provider/Session.php', - 'Joomla\\CMS\\Service\\Provider\\Toolbar' => $baseDir . '/libraries/src/Service/Provider/Toolbar.php', - 'Joomla\\CMS\\Session\\Exception\\UnsupportedStorageException' => $baseDir . '/libraries/src/Session/Exception/UnsupportedStorageException.php', - 'Joomla\\CMS\\Session\\Session' => $baseDir . '/libraries/src/Session/Session.php', - 'Joomla\\CMS\\Session\\Storage\\JoomlaStorage' => $baseDir . '/libraries/src/Session/Storage/JoomlaStorage.php', - 'Joomla\\CMS\\String\\PunycodeHelper' => $baseDir . '/libraries/src/String/PunycodeHelper.php', - 'Joomla\\CMS\\Table\\Asset' => $baseDir . '/libraries/src/Table/Asset.php', - 'Joomla\\CMS\\Table\\Category' => $baseDir . '/libraries/src/Table/Category.php', - 'Joomla\\CMS\\Table\\Content' => $baseDir . '/libraries/src/Table/Content.php', - 'Joomla\\CMS\\Table\\ContentHistory' => $baseDir . '/libraries/src/Table/ContentHistory.php', - 'Joomla\\CMS\\Table\\ContentType' => $baseDir . '/libraries/src/Table/ContentType.php', - 'Joomla\\CMS\\Table\\CoreContent' => $baseDir . '/libraries/src/Table/CoreContent.php', - 'Joomla\\CMS\\Table\\Extension' => $baseDir . '/libraries/src/Table/Extension.php', - 'Joomla\\CMS\\Table\\Language' => $baseDir . '/libraries/src/Table/Language.php', - 'Joomla\\CMS\\Table\\Menu' => $baseDir . '/libraries/src/Table/Menu.php', - 'Joomla\\CMS\\Table\\MenuType' => $baseDir . '/libraries/src/Table/MenuType.php', - 'Joomla\\CMS\\Table\\Module' => $baseDir . '/libraries/src/Table/Module.php', - 'Joomla\\CMS\\Table\\Nested' => $baseDir . '/libraries/src/Table/Nested.php', - 'Joomla\\CMS\\Table\\Table' => $baseDir . '/libraries/src/Table/Table.php', - 'Joomla\\CMS\\Table\\TableInterface' => $baseDir . '/libraries/src/Table/TableInterface.php', - 'Joomla\\CMS\\Table\\Ucm' => $baseDir . '/libraries/src/Table/Ucm.php', - 'Joomla\\CMS\\Table\\Update' => $baseDir . '/libraries/src/Table/Update.php', - 'Joomla\\CMS\\Table\\UpdateSite' => $baseDir . '/libraries/src/Table/UpdateSite.php', - 'Joomla\\CMS\\Table\\User' => $baseDir . '/libraries/src/Table/User.php', - 'Joomla\\CMS\\Table\\Usergroup' => $baseDir . '/libraries/src/Table/Usergroup.php', - 'Joomla\\CMS\\Table\\ViewLevel' => $baseDir . '/libraries/src/Table/ViewLevel.php', - 'Joomla\\CMS\\Toolbar\\Button\\AbstractGroupButton' => $baseDir . '/libraries/src/Toolbar/Button/AbstractGroupButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\BasicButton' => $baseDir . '/libraries/src/Toolbar/Button/BasicButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\ConfirmButton' => $baseDir . '/libraries/src/Toolbar/Button/ConfirmButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\CustomButton' => $baseDir . '/libraries/src/Toolbar/Button/CustomButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\DropdownButton' => $baseDir . '/libraries/src/Toolbar/Button/DropdownButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\HelpButton' => $baseDir . '/libraries/src/Toolbar/Button/HelpButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\LinkButton' => $baseDir . '/libraries/src/Toolbar/Button/LinkButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\PopupButton' => $baseDir . '/libraries/src/Toolbar/Button/PopupButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\SeparatorButton' => $baseDir . '/libraries/src/Toolbar/Button/SeparatorButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\SliderButton' => $baseDir . '/libraries/src/Toolbar/Button/SliderButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\StandardButton' => $baseDir . '/libraries/src/Toolbar/Button/StandardButton.php', - 'Joomla\\CMS\\Toolbar\\ContainerAwareToolbarFactory' => $baseDir . '/libraries/src/Toolbar/ContainerAwareToolbarFactory.php', - 'Joomla\\CMS\\Toolbar\\CoreButtonsTrait' => $baseDir . '/libraries/src/Toolbar/CoreButtonsTrait.php', - 'Joomla\\CMS\\Toolbar\\Toolbar' => $baseDir . '/libraries/src/Toolbar/Toolbar.php', - 'Joomla\\CMS\\Toolbar\\ToolbarButton' => $baseDir . '/libraries/src/Toolbar/ToolbarButton.php', - 'Joomla\\CMS\\Toolbar\\ToolbarFactoryInterface' => $baseDir . '/libraries/src/Toolbar/ToolbarFactoryInterface.php', - 'Joomla\\CMS\\Toolbar\\ToolbarHelper' => $baseDir . '/libraries/src/Toolbar/ToolbarHelper.php', - 'Joomla\\CMS\\UCM\\UCM' => $baseDir . '/libraries/src/UCM/UCM.php', - 'Joomla\\CMS\\UCM\\UCMBase' => $baseDir . '/libraries/src/UCM/UCMBase.php', - 'Joomla\\CMS\\UCM\\UCMContent' => $baseDir . '/libraries/src/UCM/UCMContent.php', - 'Joomla\\CMS\\UCM\\UCMType' => $baseDir . '/libraries/src/UCM/UCMType.php', - 'Joomla\\CMS\\Updater\\Adapter\\CollectionAdapter' => $baseDir . '/libraries/src/Updater/Adapter/CollectionAdapter.php', - 'Joomla\\CMS\\Updater\\Adapter\\ExtensionAdapter' => $baseDir . '/libraries/src/Updater/Adapter/ExtensionAdapter.php', - 'Joomla\\CMS\\Updater\\DownloadSource' => $baseDir . '/libraries/src/Updater/DownloadSource.php', - 'Joomla\\CMS\\Updater\\Update' => $baseDir . '/libraries/src/Updater/Update.php', - 'Joomla\\CMS\\Updater\\UpdateAdapter' => $baseDir . '/libraries/src/Updater/UpdateAdapter.php', - 'Joomla\\CMS\\Updater\\Updater' => $baseDir . '/libraries/src/Updater/Updater.php', - 'Joomla\\CMS\\Uri\\Uri' => $baseDir . '/libraries/src/Uri/Uri.php', - 'Joomla\\CMS\\User\\User' => $baseDir . '/libraries/src/User/User.php', - 'Joomla\\CMS\\User\\UserHelper' => $baseDir . '/libraries/src/User/UserHelper.php', - 'Joomla\\CMS\\User\\UserWrapper' => $baseDir . '/libraries/src/User/UserWrapper.php', - 'Joomla\\CMS\\Utility\\BufferStreamHandler' => $baseDir . '/libraries/src/Utility/BufferStreamHandler.php', - 'Joomla\\CMS\\Utility\\Utility' => $baseDir . '/libraries/src/Utility/Utility.php', - 'Joomla\\CMS\\Version' => $baseDir . '/libraries/src/Version.php', - 'Joomla\\Console\\AbstractCommand' => $vendorDir . '/joomla/console/src/AbstractCommand.php', - 'Joomla\\Console\\Application' => $vendorDir . '/joomla/console/src/Application.php', - 'Joomla\\Console\\CommandInterface' => $vendorDir . '/joomla/console/src/CommandInterface.php', - 'Joomla\\Console\\Command\\HelpCommand' => $vendorDir . '/joomla/console/src/Command/HelpCommand.php', - 'Joomla\\Console\\Command\\ListCommand' => $vendorDir . '/joomla/console/src/Command/ListCommand.php', - 'Joomla\\Console\\ConsoleEvents' => $vendorDir . '/joomla/console/src/ConsoleEvents.php', - 'Joomla\\Console\\Descriptor\\ApplicationDescription' => $vendorDir . '/joomla/console/src/Descriptor/ApplicationDescription.php', - 'Joomla\\Console\\Descriptor\\TextDescriptor' => $vendorDir . '/joomla/console/src/Descriptor/TextDescriptor.php', - 'Joomla\\Console\\Event\\BeforeCommandExecuteEvent' => $vendorDir . '/joomla/console/src/Event/BeforeCommandExecuteEvent.php', - 'Joomla\\Console\\Event\\ConsoleErrorEvent' => $vendorDir . '/joomla/console/src/Event/ConsoleErrorEvent.php', - 'Joomla\\Console\\Event\\ConsoleEvent' => $vendorDir . '/joomla/console/src/Event/ConsoleEvent.php', - 'Joomla\\Console\\Event\\TerminateEvent' => $vendorDir . '/joomla/console/src/Event/TerminateEvent.php', - 'Joomla\\Console\\Helper\\DescriptorHelper' => $vendorDir . '/joomla/console/src/Helper/DescriptorHelper.php', - 'Joomla\\Console\\Input\\JoomlaInput' => $vendorDir . '/joomla/console/src/Input/JoomlaInput.php', - 'Joomla\\Console\\Loader\\ContainerLoader' => $vendorDir . '/joomla/console/src/Loader/ContainerLoader.php', - 'Joomla\\Console\\Loader\\LoaderInterface' => $vendorDir . '/joomla/console/src/Loader/LoaderInterface.php', - 'Joomla\\Controller\\AbstractController' => $vendorDir . '/joomla/controller/src/AbstractController.php', - 'Joomla\\Controller\\ControllerInterface' => $vendorDir . '/joomla/controller/src/ControllerInterface.php', - 'Joomla\\Crypt\\CipherInterface' => $vendorDir . '/joomla/crypt/src/CipherInterface.php', - 'Joomla\\Crypt\\Cipher\\Crypto' => $vendorDir . '/joomla/crypt/src/Cipher/Crypto.php', - 'Joomla\\Crypt\\Cipher\\OpenSSL' => $vendorDir . '/joomla/crypt/src/Cipher/OpenSSL.php', - 'Joomla\\Crypt\\Cipher\\Sodium' => $vendorDir . '/joomla/crypt/src/Cipher/Sodium.php', - 'Joomla\\Crypt\\Crypt' => $vendorDir . '/joomla/crypt/src/Crypt.php', - 'Joomla\\Crypt\\Exception\\InvalidKeyTypeException' => $vendorDir . '/joomla/crypt/src/Exception/InvalidKeyTypeException.php', - 'Joomla\\Crypt\\Key' => $vendorDir . '/joomla/crypt/src/Key.php', - 'Joomla\\DI\\Container' => $vendorDir . '/joomla/di/src/Container.php', - 'Joomla\\DI\\ContainerAwareInterface' => $vendorDir . '/joomla/di/src/ContainerAwareInterface.php', - 'Joomla\\DI\\ContainerAwareTrait' => $vendorDir . '/joomla/di/src/ContainerAwareTrait.php', - 'Joomla\\DI\\Exception\\ContainerNotFoundException' => $vendorDir . '/joomla/di/src/Exception/ContainerNotFoundException.php', - 'Joomla\\DI\\Exception\\DependencyResolutionException' => $vendorDir . '/joomla/di/src/Exception/DependencyResolutionException.php', - 'Joomla\\DI\\Exception\\KeyNotFoundException' => $vendorDir . '/joomla/di/src/Exception/KeyNotFoundException.php', - 'Joomla\\DI\\Exception\\ProtectedKeyException' => $vendorDir . '/joomla/di/src/Exception/ProtectedKeyException.php', - 'Joomla\\DI\\Resource' => $vendorDir . '/joomla/di/src/Resource.php', - 'Joomla\\DI\\ServiceProviderInterface' => $vendorDir . '/joomla/di/src/ServiceProviderInterface.php', - 'Joomla\\Data\\DataObject' => $vendorDir . '/joomla/data/src/DataObject.php', - 'Joomla\\Data\\DataSet' => $vendorDir . '/joomla/data/src/DataSet.php', - 'Joomla\\Data\\DumpableInterface' => $vendorDir . '/joomla/data/src/DumpableInterface.php', - 'Joomla\\Database\\DatabaseDriver' => $vendorDir . '/joomla/database/src/DatabaseDriver.php', - 'Joomla\\Database\\DatabaseEvents' => $vendorDir . '/joomla/database/src/DatabaseEvents.php', - 'Joomla\\Database\\DatabaseExporter' => $vendorDir . '/joomla/database/src/DatabaseExporter.php', - 'Joomla\\Database\\DatabaseFactory' => $vendorDir . '/joomla/database/src/DatabaseFactory.php', - 'Joomla\\Database\\DatabaseImporter' => $vendorDir . '/joomla/database/src/DatabaseImporter.php', - 'Joomla\\Database\\DatabaseInterface' => $vendorDir . '/joomla/database/src/DatabaseInterface.php', - 'Joomla\\Database\\DatabaseIterator' => $vendorDir . '/joomla/database/src/DatabaseIterator.php', - 'Joomla\\Database\\DatabaseQuery' => $vendorDir . '/joomla/database/src/DatabaseQuery.php', - 'Joomla\\Database\\Event\\ConnectionEvent' => $vendorDir . '/joomla/database/src/Event/ConnectionEvent.php', - 'Joomla\\Database\\Exception\\ConnectionFailureException' => $vendorDir . '/joomla/database/src/Exception/ConnectionFailureException.php', - 'Joomla\\Database\\Exception\\ExecutionFailureException' => $vendorDir . '/joomla/database/src/Exception/ExecutionFailureException.php', - 'Joomla\\Database\\Exception\\PrepareStatementFailureException' => $vendorDir . '/joomla/database/src/Exception/PrepareStatementFailureException.php', - 'Joomla\\Database\\Exception\\UnsupportedAdapterException' => $vendorDir . '/joomla/database/src/Exception/UnsupportedAdapterException.php', - 'Joomla\\Database\\FetchMode' => $vendorDir . '/joomla/database/src/FetchMode.php', - 'Joomla\\Database\\FetchOrientation' => $vendorDir . '/joomla/database/src/FetchOrientation.php', - 'Joomla\\Database\\Monitor\\ChainedMonitor' => $vendorDir . '/joomla/database/src/Monitor/ChainedMonitor.php', - 'Joomla\\Database\\Monitor\\LoggingMonitor' => $vendorDir . '/joomla/database/src/Monitor/LoggingMonitor.php', - 'Joomla\\Database\\Mysql\\MysqlDriver' => $vendorDir . '/joomla/database/src/Mysql/MysqlDriver.php', - 'Joomla\\Database\\Mysql\\MysqlExporter' => $vendorDir . '/joomla/database/src/Mysql/MysqlExporter.php', - 'Joomla\\Database\\Mysql\\MysqlImporter' => $vendorDir . '/joomla/database/src/Mysql/MysqlImporter.php', - 'Joomla\\Database\\Mysql\\MysqlQuery' => $vendorDir . '/joomla/database/src/Mysql/MysqlQuery.php', - 'Joomla\\Database\\Mysqli\\MysqliDriver' => $vendorDir . '/joomla/database/src/Mysqli/MysqliDriver.php', - 'Joomla\\Database\\Mysqli\\MysqliExporter' => $vendorDir . '/joomla/database/src/Mysqli/MysqliExporter.php', - 'Joomla\\Database\\Mysqli\\MysqliImporter' => $vendorDir . '/joomla/database/src/Mysqli/MysqliImporter.php', - 'Joomla\\Database\\Mysqli\\MysqliQuery' => $vendorDir . '/joomla/database/src/Mysqli/MysqliQuery.php', - 'Joomla\\Database\\Mysqli\\MysqliStatement' => $vendorDir . '/joomla/database/src/Mysqli/MysqliStatement.php', - 'Joomla\\Database\\ParameterType' => $vendorDir . '/joomla/database/src/ParameterType.php', - 'Joomla\\Database\\Pdo\\PdoDriver' => $vendorDir . '/joomla/database/src/Pdo/PdoDriver.php', - 'Joomla\\Database\\Pdo\\PdoQuery' => $vendorDir . '/joomla/database/src/Pdo/PdoQuery.php', - 'Joomla\\Database\\Pdo\\PdoStatement' => $vendorDir . '/joomla/database/src/Pdo/PdoStatement.php', - 'Joomla\\Database\\Pgsql\\PgsqlDriver' => $vendorDir . '/joomla/database/src/Pgsql/PgsqlDriver.php', - 'Joomla\\Database\\Pgsql\\PgsqlExporter' => $vendorDir . '/joomla/database/src/Pgsql/PgsqlExporter.php', - 'Joomla\\Database\\Pgsql\\PgsqlImporter' => $vendorDir . '/joomla/database/src/Pgsql/PgsqlImporter.php', - 'Joomla\\Database\\Pgsql\\PgsqlQuery' => $vendorDir . '/joomla/database/src/Pgsql/PgsqlQuery.php', - 'Joomla\\Database\\QueryInterface' => $vendorDir . '/joomla/database/src/QueryInterface.php', - 'Joomla\\Database\\QueryMonitorInterface' => $vendorDir . '/joomla/database/src/QueryMonitorInterface.php', - 'Joomla\\Database\\Query\\LimitableInterface' => $vendorDir . '/joomla/database/src/Query/LimitableInterface.php', - 'Joomla\\Database\\Query\\MysqlQueryBuilder' => $vendorDir . '/joomla/database/src/Query/MysqlQueryBuilder.php', - 'Joomla\\Database\\Query\\PostgresqlQueryBuilder' => $vendorDir . '/joomla/database/src/Query/PostgresqlQueryBuilder.php', - 'Joomla\\Database\\Query\\PreparableInterface' => $vendorDir . '/joomla/database/src/Query/PreparableInterface.php', - 'Joomla\\Database\\Query\\QueryElement' => $vendorDir . '/joomla/database/src/Query/QueryElement.php', - 'Joomla\\Database\\Service\\DatabaseProvider' => $vendorDir . '/joomla/database/src/Service/DatabaseProvider.php', - 'Joomla\\Database\\Sqlazure\\SqlazureDriver' => $vendorDir . '/joomla/database/src/Sqlazure/SqlazureDriver.php', - 'Joomla\\Database\\Sqlazure\\SqlazureQuery' => $vendorDir . '/joomla/database/src/Sqlazure/SqlazureQuery.php', - 'Joomla\\Database\\Sqlite\\SqliteDriver' => $vendorDir . '/joomla/database/src/Sqlite/SqliteDriver.php', - 'Joomla\\Database\\Sqlite\\SqliteQuery' => $vendorDir . '/joomla/database/src/Sqlite/SqliteQuery.php', - 'Joomla\\Database\\Sqlsrv\\SqlsrvDriver' => $vendorDir . '/joomla/database/src/Sqlsrv/SqlsrvDriver.php', - 'Joomla\\Database\\Sqlsrv\\SqlsrvQuery' => $vendorDir . '/joomla/database/src/Sqlsrv/SqlsrvQuery.php', - 'Joomla\\Database\\Sqlsrv\\SqlsrvStatement' => $vendorDir . '/joomla/database/src/Sqlsrv/SqlsrvStatement.php', - 'Joomla\\Database\\StatementInterface' => $vendorDir . '/joomla/database/src/StatementInterface.php', - 'Joomla\\Database\\UTF8MB4SupportInterface' => $vendorDir . '/joomla/database/src/UTF8MB4SupportInterface.php', - 'Joomla\\Event\\AbstractEvent' => $vendorDir . '/joomla/event/src/AbstractEvent.php', - 'Joomla\\Event\\DelegatingDispatcher' => $vendorDir . '/joomla/event/src/DelegatingDispatcher.php', - 'Joomla\\Event\\Dispatcher' => $vendorDir . '/joomla/event/src/Dispatcher.php', - 'Joomla\\Event\\DispatcherAwareInterface' => $vendorDir . '/joomla/event/src/DispatcherAwareInterface.php', - 'Joomla\\Event\\DispatcherAwareTrait' => $vendorDir . '/joomla/event/src/DispatcherAwareTrait.php', - 'Joomla\\Event\\DispatcherInterface' => $vendorDir . '/joomla/event/src/DispatcherInterface.php', - 'Joomla\\Event\\Event' => $vendorDir . '/joomla/event/src/Event.php', - 'Joomla\\Event\\EventImmutable' => $vendorDir . '/joomla/event/src/EventImmutable.php', - 'Joomla\\Event\\EventInterface' => $vendorDir . '/joomla/event/src/EventInterface.php', - 'Joomla\\Event\\ListenersPriorityQueue' => $vendorDir . '/joomla/event/src/ListenersPriorityQueue.php', - 'Joomla\\Event\\Priority' => $vendorDir . '/joomla/event/src/Priority.php', - 'Joomla\\Event\\SubscriberInterface' => $vendorDir . '/joomla/event/src/SubscriberInterface.php', - 'Joomla\\Filesystem\\Buffer' => $vendorDir . '/joomla/filesystem/src/Buffer.php', - 'Joomla\\Filesystem\\Clients\\FtpClient' => $vendorDir . '/joomla/filesystem/src/Clients/FtpClient.php', - 'Joomla\\Filesystem\\Exception\\FilesystemException' => $vendorDir . '/joomla/filesystem/src/Exception/FilesystemException.php', - 'Joomla\\Filesystem\\File' => $vendorDir . '/joomla/filesystem/src/File.php', - 'Joomla\\Filesystem\\Folder' => $vendorDir . '/joomla/filesystem/src/Folder.php', - 'Joomla\\Filesystem\\Helper' => $vendorDir . '/joomla/filesystem/src/Helper.php', - 'Joomla\\Filesystem\\Patcher' => $vendorDir . '/joomla/filesystem/src/Patcher.php', - 'Joomla\\Filesystem\\Path' => $vendorDir . '/joomla/filesystem/src/Path.php', - 'Joomla\\Filesystem\\Stream' => $vendorDir . '/joomla/filesystem/src/Stream.php', - 'Joomla\\Filesystem\\Stream\\String' => $vendorDir . '/joomla/filesystem/src/Stream/String.php', - 'Joomla\\Filesystem\\Stream\\StringWrapper' => $vendorDir . '/joomla/filesystem/src/Stream/StringWrapper.php', - 'Joomla\\Filesystem\\Support\\StringController' => $vendorDir . '/joomla/filesystem/src/Support/StringController.php', - 'Joomla\\Filter\\InputFilter' => $vendorDir . '/joomla/filter/src/InputFilter.php', - 'Joomla\\Filter\\OutputFilter' => $vendorDir . '/joomla/filter/src/OutputFilter.php', - 'Joomla\\Http\\AbstractTransport' => $vendorDir . '/joomla/http/src/AbstractTransport.php', - 'Joomla\\Http\\Exception\\InvalidResponseCodeException' => $vendorDir . '/joomla/http/src/Exception/InvalidResponseCodeException.php', - 'Joomla\\Http\\Exception\\UnexpectedResponseException' => $vendorDir . '/joomla/http/src/Exception/UnexpectedResponseException.php', - 'Joomla\\Http\\Http' => $vendorDir . '/joomla/http/src/Http.php', - 'Joomla\\Http\\HttpFactory' => $vendorDir . '/joomla/http/src/HttpFactory.php', - 'Joomla\\Http\\Response' => $vendorDir . '/joomla/http/src/Response.php', - 'Joomla\\Http\\TransportInterface' => $vendorDir . '/joomla/http/src/TransportInterface.php', - 'Joomla\\Http\\Transport\\Curl' => $vendorDir . '/joomla/http/src/Transport/Curl.php', - 'Joomla\\Http\\Transport\\Socket' => $vendorDir . '/joomla/http/src/Transport/Socket.php', - 'Joomla\\Http\\Transport\\Stream' => $vendorDir . '/joomla/http/src/Transport/Stream.php', - 'Joomla\\Image\\Filter\\Backgroundfill' => $vendorDir . '/joomla/image/src/Filter/Backgroundfill.php', - 'Joomla\\Image\\Filter\\Brightness' => $vendorDir . '/joomla/image/src/Filter/Brightness.php', - 'Joomla\\Image\\Filter\\Contrast' => $vendorDir . '/joomla/image/src/Filter/Contrast.php', - 'Joomla\\Image\\Filter\\Edgedetect' => $vendorDir . '/joomla/image/src/Filter/Edgedetect.php', - 'Joomla\\Image\\Filter\\Emboss' => $vendorDir . '/joomla/image/src/Filter/Emboss.php', - 'Joomla\\Image\\Filter\\Grayscale' => $vendorDir . '/joomla/image/src/Filter/Grayscale.php', - 'Joomla\\Image\\Filter\\Negate' => $vendorDir . '/joomla/image/src/Filter/Negate.php', - 'Joomla\\Image\\Filter\\Sketchy' => $vendorDir . '/joomla/image/src/Filter/Sketchy.php', - 'Joomla\\Image\\Filter\\Smooth' => $vendorDir . '/joomla/image/src/Filter/Smooth.php', - 'Joomla\\Image\\Image' => $vendorDir . '/joomla/image/src/Image.php', - 'Joomla\\Image\\ImageFilter' => $vendorDir . '/joomla/image/src/ImageFilter.php', - 'Joomla\\Input\\Cli' => $vendorDir . '/joomla/input/src/Cli.php', - 'Joomla\\Input\\Cookie' => $vendorDir . '/joomla/input/src/Cookie.php', - 'Joomla\\Input\\Files' => $vendorDir . '/joomla/input/src/Files.php', - 'Joomla\\Input\\Input' => $vendorDir . '/joomla/input/src/Input.php', - 'Joomla\\Input\\Json' => $vendorDir . '/joomla/input/src/Json.php', - 'Joomla\\Ldap\\LdapClient' => $vendorDir . '/joomla/ldap/src/LdapClient.php', - 'Joomla\\OAuth1\\Client' => $vendorDir . '/joomla/oauth1/src/Client.php', - 'Joomla\\OAuth2\\Client' => $vendorDir . '/joomla/oauth2/src/Client.php', - 'Joomla\\Registry\\Factory' => $vendorDir . '/joomla/registry/src/Factory.php', - 'Joomla\\Registry\\FormatInterface' => $vendorDir . '/joomla/registry/src/FormatInterface.php', - 'Joomla\\Registry\\Format\\Ini' => $vendorDir . '/joomla/registry/src/Format/Ini.php', - 'Joomla\\Registry\\Format\\Json' => $vendorDir . '/joomla/registry/src/Format/Json.php', - 'Joomla\\Registry\\Format\\Php' => $vendorDir . '/joomla/registry/src/Format/Php.php', - 'Joomla\\Registry\\Format\\Xml' => $vendorDir . '/joomla/registry/src/Format/Xml.php', - 'Joomla\\Registry\\Format\\Yaml' => $vendorDir . '/joomla/registry/src/Format/Yaml.php', - 'Joomla\\Registry\\Registry' => $vendorDir . '/joomla/registry/src/Registry.php', - 'Joomla\\Session\\Exception\\InvalidSessionException' => $vendorDir . '/joomla/session/src/Exception/InvalidSessionException.php', - 'Joomla\\Session\\HandlerInterface' => $vendorDir . '/joomla/session/src/HandlerInterface.php', - 'Joomla\\Session\\Handler\\ApcuHandler' => $vendorDir . '/joomla/session/src/Handler/ApcuHandler.php', - 'Joomla\\Session\\Handler\\DatabaseHandler' => $vendorDir . '/joomla/session/src/Handler/DatabaseHandler.php', - 'Joomla\\Session\\Handler\\FilesystemHandler' => $vendorDir . '/joomla/session/src/Handler/FilesystemHandler.php', - 'Joomla\\Session\\Handler\\MemcachedHandler' => $vendorDir . '/joomla/session/src/Handler/MemcachedHandler.php', - 'Joomla\\Session\\Handler\\RedisHandler' => $vendorDir . '/joomla/session/src/Handler/RedisHandler.php', - 'Joomla\\Session\\Handler\\WincacheHandler' => $vendorDir . '/joomla/session/src/Handler/WincacheHandler.php', - 'Joomla\\Session\\Session' => $vendorDir . '/joomla/session/src/Session.php', - 'Joomla\\Session\\SessionEvent' => $vendorDir . '/joomla/session/src/SessionEvent.php', - 'Joomla\\Session\\SessionEvents' => $vendorDir . '/joomla/session/src/SessionEvents.php', - 'Joomla\\Session\\SessionInterface' => $vendorDir . '/joomla/session/src/SessionInterface.php', - 'Joomla\\Session\\StorageInterface' => $vendorDir . '/joomla/session/src/StorageInterface.php', - 'Joomla\\Session\\Storage\\NativeStorage' => $vendorDir . '/joomla/session/src/Storage/NativeStorage.php', - 'Joomla\\Session\\Storage\\RuntimeStorage' => $vendorDir . '/joomla/session/src/Storage/RuntimeStorage.php', - 'Joomla\\Session\\ValidatorInterface' => $vendorDir . '/joomla/session/src/ValidatorInterface.php', - 'Joomla\\Session\\Validator\\AddressValidator' => $vendorDir . '/joomla/session/src/Validator/AddressValidator.php', - 'Joomla\\Session\\Validator\\ForwardedValidator' => $vendorDir . '/joomla/session/src/Validator/ForwardedValidator.php', - 'Joomla\\String\\Inflector' => $vendorDir . '/joomla/string/src/Inflector.php', - 'Joomla\\String\\Normalise' => $vendorDir . '/joomla/string/src/Normalise.php', - 'Joomla\\String\\StringHelper' => $vendorDir . '/joomla/string/src/StringHelper.php', - 'Joomla\\Uri\\AbstractUri' => $vendorDir . '/joomla/uri/src/AbstractUri.php', - 'Joomla\\Uri\\Uri' => $vendorDir . '/joomla/uri/src/Uri.php', - 'Joomla\\Uri\\UriHelper' => $vendorDir . '/joomla/uri/src/UriHelper.php', - 'Joomla\\Uri\\UriImmutable' => $vendorDir . '/joomla/uri/src/UriImmutable.php', - 'Joomla\\Uri\\UriInterface' => $vendorDir . '/joomla/uri/src/UriInterface.php', - 'Joomla\\Utilities\\ArrayHelper' => $vendorDir . '/joomla/utilities/src/ArrayHelper.php', - 'Mso\\IdnaConvert\\EncodingHelper' => $vendorDir . '/mso/idna-convert/src/EncodingHelper.php', - 'Mso\\IdnaConvert\\IdnaConvert' => $vendorDir . '/mso/idna-convert/src/IdnaConvert.php', - 'Mso\\IdnaConvert\\NamePrepData' => $vendorDir . '/mso/idna-convert/src/NamePrepData.php', - 'Mso\\IdnaConvert\\NamePrepData2003' => $vendorDir . '/mso/idna-convert/src/NamePrepData2003.php', - 'Mso\\IdnaConvert\\NamePrepDataInterface' => $vendorDir . '/mso/idna-convert/src/NamePrepDataInterface.php', - 'Mso\\IdnaConvert\\Punycode' => $vendorDir . '/mso/idna-convert/src/Punycode.php', - 'Mso\\IdnaConvert\\PunycodeInterface' => $vendorDir . '/mso/idna-convert/src/PunycodeInterface.php', - 'Mso\\IdnaConvert\\UnicodeTranscoder' => $vendorDir . '/mso/idna-convert/src/UnicodeTranscoder.php', - 'Mso\\IdnaConvert\\UnicodeTranscoderInterface' => $vendorDir . '/mso/idna-convert/src/UnicodeTranscoderInterface.php', - 'PHPMailer\\PHPMailer\\Exception' => $vendorDir . '/phpmailer/phpmailer/src/Exception.php', - 'PHPMailer\\PHPMailer\\OAuth' => $vendorDir . '/phpmailer/phpmailer/src/OAuth.php', - 'PHPMailer\\PHPMailer\\PHPMailer' => $vendorDir . '/phpmailer/phpmailer/src/PHPMailer.php', - 'PHPMailer\\PHPMailer\\POP3' => $vendorDir . '/phpmailer/phpmailer/src/POP3.php', - 'PHPMailer\\PHPMailer\\SMTP' => $vendorDir . '/phpmailer/phpmailer/src/SMTP.php', - 'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php', - 'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php', - 'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php', - 'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php', - 'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php', - 'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php', - 'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php', - 'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php', - 'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php', - 'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php', - 'Psr\\Link\\EvolvableLinkInterface' => $vendorDir . '/psr/link/src/EvolvableLinkInterface.php', - 'Psr\\Link\\EvolvableLinkProviderInterface' => $vendorDir . '/psr/link/src/EvolvableLinkProviderInterface.php', - 'Psr\\Link\\LinkInterface' => $vendorDir . '/psr/link/src/LinkInterface.php', - 'Psr\\Link\\LinkProviderInterface' => $vendorDir . '/psr/link/src/LinkProviderInterface.php', - 'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php', - 'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php', - 'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php', - 'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareInterface.php', - 'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareTrait.php', - 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php', - 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php', - 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php', - 'ReCaptcha\\ReCaptcha' => $vendorDir . '/google/recaptcha/src/ReCaptcha/ReCaptcha.php', - 'ReCaptcha\\RequestMethod' => $vendorDir . '/google/recaptcha/src/ReCaptcha/RequestMethod.php', - 'ReCaptcha\\RequestMethod\\Curl' => $vendorDir . '/google/recaptcha/src/ReCaptcha/RequestMethod/Curl.php', - 'ReCaptcha\\RequestMethod\\CurlPost' => $vendorDir . '/google/recaptcha/src/ReCaptcha/RequestMethod/CurlPost.php', - 'ReCaptcha\\RequestMethod\\Post' => $vendorDir . '/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php', - 'ReCaptcha\\RequestMethod\\Socket' => $vendorDir . '/google/recaptcha/src/ReCaptcha/RequestMethod/Socket.php', - 'ReCaptcha\\RequestMethod\\SocketPost' => $vendorDir . '/google/recaptcha/src/ReCaptcha/RequestMethod/SocketPost.php', - 'ReCaptcha\\RequestParameters' => $vendorDir . '/google/recaptcha/src/ReCaptcha/RequestParameters.php', - 'ReCaptcha\\Response' => $vendorDir . '/google/recaptcha/src/ReCaptcha/Response.php', - 'Symfony\\Component\\Console\\Application' => $vendorDir . '/symfony/console/Application.php', - 'Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => $vendorDir . '/symfony/console/CommandLoader/CommandLoaderInterface.php', - 'Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/ContainerCommandLoader.php', - 'Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/FactoryCommandLoader.php', - 'Symfony\\Component\\Console\\Command\\Command' => $vendorDir . '/symfony/console/Command/Command.php', - 'Symfony\\Component\\Console\\Command\\HelpCommand' => $vendorDir . '/symfony/console/Command/HelpCommand.php', - 'Symfony\\Component\\Console\\Command\\ListCommand' => $vendorDir . '/symfony/console/Command/ListCommand.php', - 'Symfony\\Component\\Console\\Command\\LockableTrait' => $vendorDir . '/symfony/console/Command/LockableTrait.php', - 'Symfony\\Component\\Console\\ConsoleEvents' => $vendorDir . '/symfony/console/ConsoleEvents.php', - 'Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => $vendorDir . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php', - 'Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => $vendorDir . '/symfony/console/Descriptor/ApplicationDescription.php', - 'Symfony\\Component\\Console\\Descriptor\\Descriptor' => $vendorDir . '/symfony/console/Descriptor/Descriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => $vendorDir . '/symfony/console/Descriptor/DescriptorInterface.php', - 'Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => $vendorDir . '/symfony/console/Descriptor/JsonDescriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => $vendorDir . '/symfony/console/Descriptor/MarkdownDescriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => $vendorDir . '/symfony/console/Descriptor/TextDescriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => $vendorDir . '/symfony/console/Descriptor/XmlDescriptor.php', - 'Symfony\\Component\\Console\\EventListener\\ErrorListener' => $vendorDir . '/symfony/console/EventListener/ErrorListener.php', - 'Symfony\\Component\\Console\\Event\\ConsoleCommandEvent' => $vendorDir . '/symfony/console/Event/ConsoleCommandEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleErrorEvent' => $vendorDir . '/symfony/console/Event/ConsoleErrorEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleEvent' => $vendorDir . '/symfony/console/Event/ConsoleEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleExceptionEvent' => $vendorDir . '/symfony/console/Event/ConsoleExceptionEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleTerminateEvent' => $vendorDir . '/symfony/console/Event/ConsoleTerminateEvent.php', - 'Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => $vendorDir . '/symfony/console/Exception/CommandNotFoundException.php', - 'Symfony\\Component\\Console\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/console/Exception/ExceptionInterface.php', - 'Symfony\\Component\\Console\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/console/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\Console\\Exception\\InvalidOptionException' => $vendorDir . '/symfony/console/Exception/InvalidOptionException.php', - 'Symfony\\Component\\Console\\Exception\\LogicException' => $vendorDir . '/symfony/console/Exception/LogicException.php', - 'Symfony\\Component\\Console\\Exception\\RuntimeException' => $vendorDir . '/symfony/console/Exception/RuntimeException.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatter' => $vendorDir . '/symfony/console/Formatter/OutputFormatter.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterInterface.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyle.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleInterface.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleStack' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleStack.php', - 'Symfony\\Component\\Console\\Helper\\DebugFormatterHelper' => $vendorDir . '/symfony/console/Helper/DebugFormatterHelper.php', - 'Symfony\\Component\\Console\\Helper\\DescriptorHelper' => $vendorDir . '/symfony/console/Helper/DescriptorHelper.php', - 'Symfony\\Component\\Console\\Helper\\FormatterHelper' => $vendorDir . '/symfony/console/Helper/FormatterHelper.php', - 'Symfony\\Component\\Console\\Helper\\Helper' => $vendorDir . '/symfony/console/Helper/Helper.php', - 'Symfony\\Component\\Console\\Helper\\HelperInterface' => $vendorDir . '/symfony/console/Helper/HelperInterface.php', - 'Symfony\\Component\\Console\\Helper\\HelperSet' => $vendorDir . '/symfony/console/Helper/HelperSet.php', - 'Symfony\\Component\\Console\\Helper\\InputAwareHelper' => $vendorDir . '/symfony/console/Helper/InputAwareHelper.php', - 'Symfony\\Component\\Console\\Helper\\ProcessHelper' => $vendorDir . '/symfony/console/Helper/ProcessHelper.php', - 'Symfony\\Component\\Console\\Helper\\ProgressBar' => $vendorDir . '/symfony/console/Helper/ProgressBar.php', - 'Symfony\\Component\\Console\\Helper\\ProgressIndicator' => $vendorDir . '/symfony/console/Helper/ProgressIndicator.php', - 'Symfony\\Component\\Console\\Helper\\QuestionHelper' => $vendorDir . '/symfony/console/Helper/QuestionHelper.php', - 'Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => $vendorDir . '/symfony/console/Helper/SymfonyQuestionHelper.php', - 'Symfony\\Component\\Console\\Helper\\Table' => $vendorDir . '/symfony/console/Helper/Table.php', - 'Symfony\\Component\\Console\\Helper\\TableCell' => $vendorDir . '/symfony/console/Helper/TableCell.php', - 'Symfony\\Component\\Console\\Helper\\TableSeparator' => $vendorDir . '/symfony/console/Helper/TableSeparator.php', - 'Symfony\\Component\\Console\\Helper\\TableStyle' => $vendorDir . '/symfony/console/Helper/TableStyle.php', - 'Symfony\\Component\\Console\\Input\\ArgvInput' => $vendorDir . '/symfony/console/Input/ArgvInput.php', - 'Symfony\\Component\\Console\\Input\\ArrayInput' => $vendorDir . '/symfony/console/Input/ArrayInput.php', - 'Symfony\\Component\\Console\\Input\\Input' => $vendorDir . '/symfony/console/Input/Input.php', - 'Symfony\\Component\\Console\\Input\\InputArgument' => $vendorDir . '/symfony/console/Input/InputArgument.php', - 'Symfony\\Component\\Console\\Input\\InputAwareInterface' => $vendorDir . '/symfony/console/Input/InputAwareInterface.php', - 'Symfony\\Component\\Console\\Input\\InputDefinition' => $vendorDir . '/symfony/console/Input/InputDefinition.php', - 'Symfony\\Component\\Console\\Input\\InputInterface' => $vendorDir . '/symfony/console/Input/InputInterface.php', - 'Symfony\\Component\\Console\\Input\\InputOption' => $vendorDir . '/symfony/console/Input/InputOption.php', - 'Symfony\\Component\\Console\\Input\\StreamableInputInterface' => $vendorDir . '/symfony/console/Input/StreamableInputInterface.php', - 'Symfony\\Component\\Console\\Input\\StringInput' => $vendorDir . '/symfony/console/Input/StringInput.php', - 'Symfony\\Component\\Console\\Logger\\ConsoleLogger' => $vendorDir . '/symfony/console/Logger/ConsoleLogger.php', - 'Symfony\\Component\\Console\\Output\\BufferedOutput' => $vendorDir . '/symfony/console/Output/BufferedOutput.php', - 'Symfony\\Component\\Console\\Output\\ConsoleOutput' => $vendorDir . '/symfony/console/Output/ConsoleOutput.php', - 'Symfony\\Component\\Console\\Output\\ConsoleOutputInterface' => $vendorDir . '/symfony/console/Output/ConsoleOutputInterface.php', - 'Symfony\\Component\\Console\\Output\\NullOutput' => $vendorDir . '/symfony/console/Output/NullOutput.php', - 'Symfony\\Component\\Console\\Output\\Output' => $vendorDir . '/symfony/console/Output/Output.php', - 'Symfony\\Component\\Console\\Output\\OutputInterface' => $vendorDir . '/symfony/console/Output/OutputInterface.php', - 'Symfony\\Component\\Console\\Output\\StreamOutput' => $vendorDir . '/symfony/console/Output/StreamOutput.php', - 'Symfony\\Component\\Console\\Question\\ChoiceQuestion' => $vendorDir . '/symfony/console/Question/ChoiceQuestion.php', - 'Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => $vendorDir . '/symfony/console/Question/ConfirmationQuestion.php', - 'Symfony\\Component\\Console\\Question\\Question' => $vendorDir . '/symfony/console/Question/Question.php', - 'Symfony\\Component\\Console\\Style\\OutputStyle' => $vendorDir . '/symfony/console/Style/OutputStyle.php', - 'Symfony\\Component\\Console\\Style\\StyleInterface' => $vendorDir . '/symfony/console/Style/StyleInterface.php', - 'Symfony\\Component\\Console\\Style\\SymfonyStyle' => $vendorDir . '/symfony/console/Style/SymfonyStyle.php', - 'Symfony\\Component\\Console\\Terminal' => $vendorDir . '/symfony/console/Terminal.php', - 'Symfony\\Component\\Console\\Tester\\ApplicationTester' => $vendorDir . '/symfony/console/Tester/ApplicationTester.php', - 'Symfony\\Component\\Console\\Tester\\CommandTester' => $vendorDir . '/symfony/console/Tester/CommandTester.php', - 'Symfony\\Component\\Debug\\BufferingLogger' => $vendorDir . '/symfony/debug/BufferingLogger.php', - 'Symfony\\Component\\Debug\\Debug' => $vendorDir . '/symfony/debug/Debug.php', - 'Symfony\\Component\\Debug\\DebugClassLoader' => $vendorDir . '/symfony/debug/DebugClassLoader.php', - 'Symfony\\Component\\Debug\\ErrorHandler' => $vendorDir . '/symfony/debug/ErrorHandler.php', - 'Symfony\\Component\\Debug\\ExceptionHandler' => $vendorDir . '/symfony/debug/ExceptionHandler.php', - 'Symfony\\Component\\Debug\\Exception\\ClassNotFoundException' => $vendorDir . '/symfony/debug/Exception/ClassNotFoundException.php', - 'Symfony\\Component\\Debug\\Exception\\ContextErrorException' => $vendorDir . '/symfony/debug/Exception/ContextErrorException.php', - 'Symfony\\Component\\Debug\\Exception\\FatalErrorException' => $vendorDir . '/symfony/debug/Exception/FatalErrorException.php', - 'Symfony\\Component\\Debug\\Exception\\FatalThrowableError' => $vendorDir . '/symfony/debug/Exception/FatalThrowableError.php', - 'Symfony\\Component\\Debug\\Exception\\FlattenException' => $vendorDir . '/symfony/debug/Exception/FlattenException.php', - 'Symfony\\Component\\Debug\\Exception\\OutOfMemoryException' => $vendorDir . '/symfony/debug/Exception/OutOfMemoryException.php', - 'Symfony\\Component\\Debug\\Exception\\SilencedErrorContext' => $vendorDir . '/symfony/debug/Exception/SilencedErrorContext.php', - 'Symfony\\Component\\Debug\\Exception\\UndefinedFunctionException' => $vendorDir . '/symfony/debug/Exception/UndefinedFunctionException.php', - 'Symfony\\Component\\Debug\\Exception\\UndefinedMethodException' => $vendorDir . '/symfony/debug/Exception/UndefinedMethodException.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\ClassNotFoundFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\FatalErrorHandlerInterface' => $vendorDir . '/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedFunctionFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedMethodFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php', - 'Symfony\\Component\\Ldap\\Adapter\\AbstractConnection' => $vendorDir . '/symfony/ldap/Adapter/AbstractConnection.php', - 'Symfony\\Component\\Ldap\\Adapter\\AbstractQuery' => $vendorDir . '/symfony/ldap/Adapter/AbstractQuery.php', - 'Symfony\\Component\\Ldap\\Adapter\\AdapterInterface' => $vendorDir . '/symfony/ldap/Adapter/AdapterInterface.php', - 'Symfony\\Component\\Ldap\\Adapter\\CollectionInterface' => $vendorDir . '/symfony/ldap/Adapter/CollectionInterface.php', - 'Symfony\\Component\\Ldap\\Adapter\\ConnectionInterface' => $vendorDir . '/symfony/ldap/Adapter/ConnectionInterface.php', - 'Symfony\\Component\\Ldap\\Adapter\\EntryManagerInterface' => $vendorDir . '/symfony/ldap/Adapter/EntryManagerInterface.php', - 'Symfony\\Component\\Ldap\\Adapter\\ExtLdap\\Adapter' => $vendorDir . '/symfony/ldap/Adapter/ExtLdap/Adapter.php', - 'Symfony\\Component\\Ldap\\Adapter\\ExtLdap\\Collection' => $vendorDir . '/symfony/ldap/Adapter/ExtLdap/Collection.php', - 'Symfony\\Component\\Ldap\\Adapter\\ExtLdap\\Connection' => $vendorDir . '/symfony/ldap/Adapter/ExtLdap/Connection.php', - 'Symfony\\Component\\Ldap\\Adapter\\ExtLdap\\ConnectionOptions' => $vendorDir . '/symfony/ldap/Adapter/ExtLdap/ConnectionOptions.php', - 'Symfony\\Component\\Ldap\\Adapter\\ExtLdap\\EntryManager' => $vendorDir . '/symfony/ldap/Adapter/ExtLdap/EntryManager.php', - 'Symfony\\Component\\Ldap\\Adapter\\ExtLdap\\Query' => $vendorDir . '/symfony/ldap/Adapter/ExtLdap/Query.php', - 'Symfony\\Component\\Ldap\\Adapter\\QueryInterface' => $vendorDir . '/symfony/ldap/Adapter/QueryInterface.php', - 'Symfony\\Component\\Ldap\\Adapter\\RenameEntryInterface' => $vendorDir . '/symfony/ldap/Adapter/RenameEntryInterface.php', - 'Symfony\\Component\\Ldap\\Entry' => $vendorDir . '/symfony/ldap/Entry.php', - 'Symfony\\Component\\Ldap\\Exception\\ConnectionException' => $vendorDir . '/symfony/ldap/Exception/ConnectionException.php', - 'Symfony\\Component\\Ldap\\Exception\\DriverNotFoundException' => $vendorDir . '/symfony/ldap/Exception/DriverNotFoundException.php', - 'Symfony\\Component\\Ldap\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/ldap/Exception/ExceptionInterface.php', - 'Symfony\\Component\\Ldap\\Exception\\LdapException' => $vendorDir . '/symfony/ldap/Exception/LdapException.php', - 'Symfony\\Component\\Ldap\\Exception\\NotBoundException' => $vendorDir . '/symfony/ldap/Exception/NotBoundException.php', - 'Symfony\\Component\\Ldap\\Ldap' => $vendorDir . '/symfony/ldap/Ldap.php', - 'Symfony\\Component\\Ldap\\LdapClient' => $vendorDir . '/symfony/ldap/LdapClient.php', - 'Symfony\\Component\\Ldap\\LdapClientInterface' => $vendorDir . '/symfony/ldap/LdapClientInterface.php', - 'Symfony\\Component\\Ldap\\LdapInterface' => $vendorDir . '/symfony/ldap/LdapInterface.php', - 'Symfony\\Component\\OptionsResolver\\Debug\\OptionsResolverIntrospector' => $vendorDir . '/symfony/options-resolver/Debug/OptionsResolverIntrospector.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\AccessException' => $vendorDir . '/symfony/options-resolver/Exception/AccessException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/options-resolver/Exception/ExceptionInterface.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/options-resolver/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/InvalidOptionsException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\MissingOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/MissingOptionsException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\NoConfigurationException' => $vendorDir . '/symfony/options-resolver/Exception/NoConfigurationException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException' => $vendorDir . '/symfony/options-resolver/Exception/NoSuchOptionException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException' => $vendorDir . '/symfony/options-resolver/Exception/OptionDefinitionException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/UndefinedOptionsException.php', - 'Symfony\\Component\\OptionsResolver\\Options' => $vendorDir . '/symfony/options-resolver/Options.php', - 'Symfony\\Component\\OptionsResolver\\OptionsResolver' => $vendorDir . '/symfony/options-resolver/OptionsResolver.php', - 'Symfony\\Component\\WebLink\\EventListener\\AddLinkHeaderListener' => $vendorDir . '/symfony/web-link/EventListener/AddLinkHeaderListener.php', - 'Symfony\\Component\\WebLink\\HttpHeaderSerializer' => $vendorDir . '/symfony/web-link/HttpHeaderSerializer.php', - 'Symfony\\Component\\Yaml\\Command\\LintCommand' => $vendorDir . '/symfony/yaml/Command/LintCommand.php', - 'Symfony\\Component\\Yaml\\Dumper' => $vendorDir . '/symfony/yaml/Dumper.php', - 'Symfony\\Component\\Yaml\\Escaper' => $vendorDir . '/symfony/yaml/Escaper.php', - 'Symfony\\Component\\Yaml\\Exception\\DumpException' => $vendorDir . '/symfony/yaml/Exception/DumpException.php', - 'Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/yaml/Exception/ExceptionInterface.php', - 'Symfony\\Component\\Yaml\\Exception\\ParseException' => $vendorDir . '/symfony/yaml/Exception/ParseException.php', - 'Symfony\\Component\\Yaml\\Exception\\RuntimeException' => $vendorDir . '/symfony/yaml/Exception/RuntimeException.php', - 'Symfony\\Component\\Yaml\\Inline' => $vendorDir . '/symfony/yaml/Inline.php', - 'Symfony\\Component\\Yaml\\Parser' => $vendorDir . '/symfony/yaml/Parser.php', - 'Symfony\\Component\\Yaml\\Tag\\TaggedValue' => $vendorDir . '/symfony/yaml/Tag/TaggedValue.php', - 'Symfony\\Component\\Yaml\\Unescaper' => $vendorDir . '/symfony/yaml/Unescaper.php', - 'Symfony\\Component\\Yaml\\Yaml' => $vendorDir . '/symfony/yaml/Yaml.php', - 'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php', - 'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php', - 'Symfony\\Polyfill\\Php56\\Php56' => $vendorDir . '/symfony/polyfill-php56/Php56.php', - 'Symfony\\Polyfill\\Util\\Binary' => $vendorDir . '/symfony/polyfill-util/Binary.php', - 'Symfony\\Polyfill\\Util\\BinaryNoFuncOverload' => $vendorDir . '/symfony/polyfill-util/BinaryNoFuncOverload.php', - 'Symfony\\Polyfill\\Util\\BinaryOnFuncOverload' => $vendorDir . '/symfony/polyfill-util/BinaryOnFuncOverload.php', - 'Symfony\\Polyfill\\Util\\LegacyTestListener' => $vendorDir . '/symfony/polyfill-util/LegacyTestListener.php', - 'Symfony\\Polyfill\\Util\\TestListenerTrait' => $vendorDir . '/symfony/polyfill-util/TestListenerTrait.php', - 'Wamania\\Snowball\\Danish' => $vendorDir . '/wamania/php-stemmer/src/Danish.php', - 'Wamania\\Snowball\\Dutch' => $vendorDir . '/wamania/php-stemmer/src/Dutch.php', - 'Wamania\\Snowball\\English' => $vendorDir . '/wamania/php-stemmer/src/English.php', - 'Wamania\\Snowball\\French' => $vendorDir . '/wamania/php-stemmer/src/French.php', - 'Wamania\\Snowball\\German' => $vendorDir . '/wamania/php-stemmer/src/German.php', - 'Wamania\\Snowball\\Italian' => $vendorDir . '/wamania/php-stemmer/src/Italian.php', - 'Wamania\\Snowball\\Norwegian' => $vendorDir . '/wamania/php-stemmer/src/Norwegian.php', - 'Wamania\\Snowball\\Portuguese' => $vendorDir . '/wamania/php-stemmer/src/Portuguese.php', - 'Wamania\\Snowball\\Romanian' => $vendorDir . '/wamania/php-stemmer/src/Romanian.php', - 'Wamania\\Snowball\\Russian' => $vendorDir . '/wamania/php-stemmer/src/Russian.php', - 'Wamania\\Snowball\\Spanish' => $vendorDir . '/wamania/php-stemmer/src/Spanish.php', - 'Wamania\\Snowball\\Stem' => $vendorDir . '/wamania/php-stemmer/src/Stem.php', - 'Wamania\\Snowball\\Stemmer' => $vendorDir . '/wamania/php-stemmer/src/Stemmer.php', - 'Wamania\\Snowball\\Swedish' => $vendorDir . '/wamania/php-stemmer/src/Swedish.php', - 'Wamania\\Snowball\\Utf8' => $vendorDir . '/wamania/php-stemmer/src/Utf8.php', - 'Zend\\Diactoros\\AbstractSerializer' => $vendorDir . '/zendframework/zend-diactoros/src/AbstractSerializer.php', - 'Zend\\Diactoros\\CallbackStream' => $vendorDir . '/zendframework/zend-diactoros/src/CallbackStream.php', - 'Zend\\Diactoros\\Exception\\DeprecatedMethodException' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/DeprecatedMethodException.php', - 'Zend\\Diactoros\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-diactoros/src/Exception/ExceptionInterface.php', - 'Zend\\Diactoros\\HeaderSecurity' => $vendorDir . '/zendframework/zend-diactoros/src/HeaderSecurity.php', - 'Zend\\Diactoros\\MessageTrait' => $vendorDir . '/zendframework/zend-diactoros/src/MessageTrait.php', - 'Zend\\Diactoros\\PhpInputStream' => $vendorDir . '/zendframework/zend-diactoros/src/PhpInputStream.php', - 'Zend\\Diactoros\\RelativeStream' => $vendorDir . '/zendframework/zend-diactoros/src/RelativeStream.php', - 'Zend\\Diactoros\\Request' => $vendorDir . '/zendframework/zend-diactoros/src/Request.php', - 'Zend\\Diactoros\\RequestTrait' => $vendorDir . '/zendframework/zend-diactoros/src/RequestTrait.php', - 'Zend\\Diactoros\\Request\\ArraySerializer' => $vendorDir . '/zendframework/zend-diactoros/src/Request/ArraySerializer.php', - 'Zend\\Diactoros\\Request\\Serializer' => $vendorDir . '/zendframework/zend-diactoros/src/Request/Serializer.php', - 'Zend\\Diactoros\\Response' => $vendorDir . '/zendframework/zend-diactoros/src/Response.php', - 'Zend\\Diactoros\\Response\\ArraySerializer' => $vendorDir . '/zendframework/zend-diactoros/src/Response/ArraySerializer.php', - 'Zend\\Diactoros\\Response\\EmitterInterface' => $vendorDir . '/zendframework/zend-diactoros/src/Response/EmitterInterface.php', - 'Zend\\Diactoros\\Response\\EmptyResponse' => $vendorDir . '/zendframework/zend-diactoros/src/Response/EmptyResponse.php', - 'Zend\\Diactoros\\Response\\HtmlResponse' => $vendorDir . '/zendframework/zend-diactoros/src/Response/HtmlResponse.php', - 'Zend\\Diactoros\\Response\\InjectContentTypeTrait' => $vendorDir . '/zendframework/zend-diactoros/src/Response/InjectContentTypeTrait.php', - 'Zend\\Diactoros\\Response\\JsonResponse' => $vendorDir . '/zendframework/zend-diactoros/src/Response/JsonResponse.php', - 'Zend\\Diactoros\\Response\\RedirectResponse' => $vendorDir . '/zendframework/zend-diactoros/src/Response/RedirectResponse.php', - 'Zend\\Diactoros\\Response\\SapiEmitter' => $vendorDir . '/zendframework/zend-diactoros/src/Response/SapiEmitter.php', - 'Zend\\Diactoros\\Response\\SapiEmitterTrait' => $vendorDir . '/zendframework/zend-diactoros/src/Response/SapiEmitterTrait.php', - 'Zend\\Diactoros\\Response\\SapiStreamEmitter' => $vendorDir . '/zendframework/zend-diactoros/src/Response/SapiStreamEmitter.php', - 'Zend\\Diactoros\\Response\\Serializer' => $vendorDir . '/zendframework/zend-diactoros/src/Response/Serializer.php', - 'Zend\\Diactoros\\Response\\TextResponse' => $vendorDir . '/zendframework/zend-diactoros/src/Response/TextResponse.php', - 'Zend\\Diactoros\\Response\\XmlResponse' => $vendorDir . '/zendframework/zend-diactoros/src/Response/XmlResponse.php', - 'Zend\\Diactoros\\Server' => $vendorDir . '/zendframework/zend-diactoros/src/Server.php', - 'Zend\\Diactoros\\ServerRequest' => $vendorDir . '/zendframework/zend-diactoros/src/ServerRequest.php', - 'Zend\\Diactoros\\ServerRequestFactory' => $vendorDir . '/zendframework/zend-diactoros/src/ServerRequestFactory.php', - 'Zend\\Diactoros\\Stream' => $vendorDir . '/zendframework/zend-diactoros/src/Stream.php', - 'Zend\\Diactoros\\UploadedFile' => $vendorDir . '/zendframework/zend-diactoros/src/UploadedFile.php', - 'Zend\\Diactoros\\Uri' => $vendorDir . '/zendframework/zend-diactoros/src/Uri.php', -); diff --git a/libraries/vendor/composer/autoload_files.php b/libraries/vendor/composer/autoload_files.php deleted file mode 100644 index c30fa7dd3099f..0000000000000 --- a/libraries/vendor/composer/autoload_files.php +++ /dev/null @@ -1,29 +0,0 @@ - $vendorDir . '/joomla/string/src/phputf8/utf8.php', - 'e6851e0ae7328fe5412fcec73928f3d9' => $vendorDir . '/joomla/string/src/phputf8/ord.php', - 'd9ad1b7c85c100a18c404a13824b846e' => $vendorDir . '/joomla/string/src/phputf8/str_ireplace.php', - '62bad9b6730d2f83493d2337bf61519d' => $vendorDir . '/joomla/string/src/phputf8/str_pad.php', - 'c4d521b8d54308532dce032713d4eec0' => $vendorDir . '/joomla/string/src/phputf8/str_split.php', - 'fa973e71cace925de2afdc692b861b1d' => $vendorDir . '/joomla/string/src/phputf8/strcasecmp.php', - '0c98c2f1295d9f4d093cc77d5834bb04' => $vendorDir . '/joomla/string/src/phputf8/strcspn.php', - 'a52639d843b4094945115c178a91ca86' => $vendorDir . '/joomla/string/src/phputf8/stristr.php', - '73ee7d0297e683c4c2e7798ef040fb2f' => $vendorDir . '/joomla/string/src/phputf8/strrev.php', - 'd55633c05ddb996e0005f35debaa7b5b' => $vendorDir . '/joomla/string/src/phputf8/strspn.php', - '944e69d23b93558fc0714353cf0c8beb' => $vendorDir . '/joomla/string/src/phputf8/trim.php', - '31264bab20f14a8fc7a9d4265d91ee98' => $vendorDir . '/joomla/string/src/phputf8/ucfirst.php', - '05d739a990f75f0c44ebe1f032b33148' => $vendorDir . '/joomla/string/src/phputf8/ucwords.php', - '4292e2fa66516089e6006723267587b4' => $vendorDir . '/joomla/string/src/phputf8/utils/ascii.php', - '87465e33b7551b401bf051928f220e9a' => $vendorDir . '/joomla/string/src/phputf8/utils/validation.php', - '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', - '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', - '5255c38a0faeba867671b61dfda6d864' => $vendorDir . '/paragonie/random_compat/lib/random.php', - '3109cb1a231dcd04bee1f9f620d46975' => $vendorDir . '/paragonie/sodium_compat/autoload.php', - 'bd9634f2d41831496de0d3dfe4c94881' => $vendorDir . '/symfony/polyfill-php56/bootstrap.php', -); diff --git a/libraries/vendor/composer/autoload_namespaces.php b/libraries/vendor/composer/autoload_namespaces.php deleted file mode 100644 index 4a9c20beed071..0000000000000 --- a/libraries/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,9 +0,0 @@ - array($vendorDir . '/zendframework/zend-diactoros/src'), - 'Wamania\\Snowball\\' => array($vendorDir . '/wamania/php-stemmer/src'), - 'Symfony\\Polyfill\\Util\\' => array($vendorDir . '/symfony/polyfill-util'), - 'Symfony\\Polyfill\\Php56\\' => array($vendorDir . '/symfony/polyfill-php56'), - 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), - 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), - 'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'), - 'Symfony\\Component\\WebLink\\' => array($vendorDir . '/symfony/web-link'), - 'Symfony\\Component\\OptionsResolver\\' => array($vendorDir . '/symfony/options-resolver'), - 'Symfony\\Component\\Ldap\\' => array($vendorDir . '/symfony/ldap'), - 'Symfony\\Component\\Debug\\' => array($vendorDir . '/symfony/debug'), - 'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'), - 'ReCaptcha\\' => array($vendorDir . '/google/recaptcha/src/ReCaptcha'), - 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), - 'Psr\\Link\\' => array($vendorDir . '/psr/link/src'), - 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'), - 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), - 'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'), - 'Mso\\IdnaConvert\\' => array($vendorDir . '/mso/idna-convert/src'), - 'Joomla\\Utilities\\' => array($vendorDir . '/joomla/utilities/src'), - 'Joomla\\Uri\\' => array($vendorDir . '/joomla/uri/src'), - 'Joomla\\String\\' => array($vendorDir . '/joomla/string/src'), - 'Joomla\\Session\\' => array($vendorDir . '/joomla/session/src'), - 'Joomla\\Registry\\' => array($vendorDir . '/joomla/registry/src'), - 'Joomla\\OAuth2\\' => array($vendorDir . '/joomla/oauth2/src'), - 'Joomla\\OAuth1\\' => array($vendorDir . '/joomla/oauth1/src'), - 'Joomla\\Ldap\\' => array($vendorDir . '/joomla/ldap/src'), - 'Joomla\\Input\\' => array($vendorDir . '/joomla/input/src'), - 'Joomla\\Image\\' => array($vendorDir . '/joomla/image/src'), - 'Joomla\\Http\\' => array($vendorDir . '/joomla/http/src'), - 'Joomla\\Filter\\' => array($vendorDir . '/joomla/filter/src'), - 'Joomla\\Filesystem\\' => array($vendorDir . '/joomla/filesystem/src'), - 'Joomla\\Event\\' => array($vendorDir . '/joomla/event/src'), - 'Joomla\\Database\\' => array($vendorDir . '/joomla/database/src'), - 'Joomla\\Data\\' => array($vendorDir . '/joomla/data/src'), - 'Joomla\\DI\\' => array($vendorDir . '/joomla/di/src'), - 'Joomla\\Crypt\\' => array($vendorDir . '/joomla/crypt/src'), - 'Joomla\\Controller\\' => array($vendorDir . '/joomla/controller/src'), - 'Joomla\\Console\\' => array($vendorDir . '/joomla/console/src'), - 'Joomla\\CMS\\' => array($baseDir . '/libraries/src'), - 'Joomla\\Authentication\\' => array($vendorDir . '/joomla/authentication/src'), - 'Joomla\\Archive\\' => array($vendorDir . '/joomla/archive/src'), - 'Joomla\\Application\\' => array($vendorDir . '/joomla/application/src'), - 'Fig\\Link\\' => array($vendorDir . '/fig/link-util/src'), - 'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector'), - 'Defuse\\Crypto\\' => array($vendorDir . '/defuse/php-encryption/src'), - 'Composer\\CaBundle\\' => array($vendorDir . '/composer/ca-bundle/src'), -); diff --git a/libraries/vendor/composer/autoload_real.php b/libraries/vendor/composer/autoload_real.php deleted file mode 100644 index 884559bfa2e43..0000000000000 --- a/libraries/vendor/composer/autoload_real.php +++ /dev/null @@ -1,70 +0,0 @@ -= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); - if ($useStaticLoader) { - require_once __DIR__ . '/autoload_static.php'; - - call_user_func(\Composer\Autoload\ComposerStaticInita4c4383b02fcf9dfb95cc0397c641cf1::getInitializer($loader)); - } else { - $map = require __DIR__ . '/autoload_namespaces.php'; - foreach ($map as $namespace => $path) { - $loader->set($namespace, $path); - } - - $map = require __DIR__ . '/autoload_psr4.php'; - foreach ($map as $namespace => $path) { - $loader->setPsr4($namespace, $path); - } - - $classMap = require __DIR__ . '/autoload_classmap.php'; - if ($classMap) { - $loader->addClassMap($classMap); - } - } - - $loader->register(true); - - if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInita4c4383b02fcf9dfb95cc0397c641cf1::$files; - } else { - $includeFiles = require __DIR__ . '/autoload_files.php'; - } - foreach ($includeFiles as $fileIdentifier => $file) { - composerRequirea4c4383b02fcf9dfb95cc0397c641cf1($fileIdentifier, $file); - } - - return $loader; - } -} - -function composerRequirea4c4383b02fcf9dfb95cc0397c641cf1($fileIdentifier, $file) -{ - if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - require $file; - - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; - } -} diff --git a/libraries/vendor/composer/autoload_static.php b/libraries/vendor/composer/autoload_static.php deleted file mode 100644 index 50352e006e675..0000000000000 --- a/libraries/vendor/composer/autoload_static.php +++ /dev/null @@ -1,1302 +0,0 @@ - __DIR__ . '/..' . '/joomla/string/src/phputf8/utf8.php', - 'e6851e0ae7328fe5412fcec73928f3d9' => __DIR__ . '/..' . '/joomla/string/src/phputf8/ord.php', - 'd9ad1b7c85c100a18c404a13824b846e' => __DIR__ . '/..' . '/joomla/string/src/phputf8/str_ireplace.php', - '62bad9b6730d2f83493d2337bf61519d' => __DIR__ . '/..' . '/joomla/string/src/phputf8/str_pad.php', - 'c4d521b8d54308532dce032713d4eec0' => __DIR__ . '/..' . '/joomla/string/src/phputf8/str_split.php', - 'fa973e71cace925de2afdc692b861b1d' => __DIR__ . '/..' . '/joomla/string/src/phputf8/strcasecmp.php', - '0c98c2f1295d9f4d093cc77d5834bb04' => __DIR__ . '/..' . '/joomla/string/src/phputf8/strcspn.php', - 'a52639d843b4094945115c178a91ca86' => __DIR__ . '/..' . '/joomla/string/src/phputf8/stristr.php', - '73ee7d0297e683c4c2e7798ef040fb2f' => __DIR__ . '/..' . '/joomla/string/src/phputf8/strrev.php', - 'd55633c05ddb996e0005f35debaa7b5b' => __DIR__ . '/..' . '/joomla/string/src/phputf8/strspn.php', - '944e69d23b93558fc0714353cf0c8beb' => __DIR__ . '/..' . '/joomla/string/src/phputf8/trim.php', - '31264bab20f14a8fc7a9d4265d91ee98' => __DIR__ . '/..' . '/joomla/string/src/phputf8/ucfirst.php', - '05d739a990f75f0c44ebe1f032b33148' => __DIR__ . '/..' . '/joomla/string/src/phputf8/ucwords.php', - '4292e2fa66516089e6006723267587b4' => __DIR__ . '/..' . '/joomla/string/src/phputf8/utils/ascii.php', - '87465e33b7551b401bf051928f220e9a' => __DIR__ . '/..' . '/joomla/string/src/phputf8/utils/validation.php', - '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', - '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', - '5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php', - '3109cb1a231dcd04bee1f9f620d46975' => __DIR__ . '/..' . '/paragonie/sodium_compat/autoload.php', - 'bd9634f2d41831496de0d3dfe4c94881' => __DIR__ . '/..' . '/symfony/polyfill-php56/bootstrap.php', - ); - - public static $prefixLengthsPsr4 = array ( - 'Z' => - array ( - 'Zend\\Diactoros\\' => 15, - ), - 'W' => - array ( - 'Wamania\\Snowball\\' => 17, - ), - 'S' => - array ( - 'Symfony\\Polyfill\\Util\\' => 22, - 'Symfony\\Polyfill\\Php56\\' => 23, - 'Symfony\\Polyfill\\Mbstring\\' => 26, - 'Symfony\\Polyfill\\Ctype\\' => 23, - 'Symfony\\Component\\Yaml\\' => 23, - 'Symfony\\Component\\WebLink\\' => 26, - 'Symfony\\Component\\OptionsResolver\\' => 34, - 'Symfony\\Component\\Ldap\\' => 23, - 'Symfony\\Component\\Debug\\' => 24, - 'Symfony\\Component\\Console\\' => 26, - ), - 'R' => - array ( - 'ReCaptcha\\' => 10, - ), - 'P' => - array ( - 'Psr\\Log\\' => 8, - 'Psr\\Link\\' => 9, - 'Psr\\Http\\Message\\' => 17, - 'Psr\\Container\\' => 14, - 'PHPMailer\\PHPMailer\\' => 20, - ), - 'M' => - array ( - 'Mso\\IdnaConvert\\' => 16, - ), - 'J' => - array ( - 'Joomla\\Utilities\\' => 17, - 'Joomla\\Uri\\' => 11, - 'Joomla\\String\\' => 14, - 'Joomla\\Session\\' => 15, - 'Joomla\\Registry\\' => 16, - 'Joomla\\OAuth2\\' => 14, - 'Joomla\\OAuth1\\' => 14, - 'Joomla\\Ldap\\' => 12, - 'Joomla\\Input\\' => 13, - 'Joomla\\Image\\' => 13, - 'Joomla\\Http\\' => 12, - 'Joomla\\Filter\\' => 14, - 'Joomla\\Filesystem\\' => 18, - 'Joomla\\Event\\' => 13, - 'Joomla\\Database\\' => 16, - 'Joomla\\Data\\' => 12, - 'Joomla\\DI\\' => 10, - 'Joomla\\Crypt\\' => 13, - 'Joomla\\Controller\\' => 18, - 'Joomla\\Console\\' => 15, - 'Joomla\\CMS\\' => 11, - 'Joomla\\Authentication\\' => 22, - 'Joomla\\Archive\\' => 15, - 'Joomla\\Application\\' => 19, - ), - 'F' => - array ( - 'Fig\\Link\\' => 9, - ), - 'D' => - array ( - 'Doctrine\\Common\\Inflector\\' => 26, - 'Defuse\\Crypto\\' => 14, - ), - 'C' => - array ( - 'Composer\\CaBundle\\' => 18, - ), - ); - - public static $prefixDirsPsr4 = array ( - 'Zend\\Diactoros\\' => - array ( - 0 => __DIR__ . '/..' . '/zendframework/zend-diactoros/src', - ), - 'Wamania\\Snowball\\' => - array ( - 0 => __DIR__ . '/..' . '/wamania/php-stemmer/src', - ), - 'Symfony\\Polyfill\\Util\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-util', - ), - 'Symfony\\Polyfill\\Php56\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-php56', - ), - 'Symfony\\Polyfill\\Mbstring\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', - ), - 'Symfony\\Polyfill\\Ctype\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', - ), - 'Symfony\\Component\\Yaml\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/yaml', - ), - 'Symfony\\Component\\WebLink\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/web-link', - ), - 'Symfony\\Component\\OptionsResolver\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/options-resolver', - ), - 'Symfony\\Component\\Ldap\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/ldap', - ), - 'Symfony\\Component\\Debug\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/debug', - ), - 'Symfony\\Component\\Console\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/console', - ), - 'ReCaptcha\\' => - array ( - 0 => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha', - ), - 'Psr\\Log\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/log/Psr/Log', - ), - 'Psr\\Link\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/link/src', - ), - 'Psr\\Http\\Message\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/http-message/src', - ), - 'Psr\\Container\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/container/src', - ), - 'PHPMailer\\PHPMailer\\' => - array ( - 0 => __DIR__ . '/..' . '/phpmailer/phpmailer/src', - ), - 'Mso\\IdnaConvert\\' => - array ( - 0 => __DIR__ . '/..' . '/mso/idna-convert/src', - ), - 'Joomla\\Utilities\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/utilities/src', - ), - 'Joomla\\Uri\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/uri/src', - ), - 'Joomla\\String\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/string/src', - ), - 'Joomla\\Session\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/session/src', - ), - 'Joomla\\Registry\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/registry/src', - ), - 'Joomla\\OAuth2\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/oauth2/src', - ), - 'Joomla\\OAuth1\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/oauth1/src', - ), - 'Joomla\\Ldap\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/ldap/src', - ), - 'Joomla\\Input\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/input/src', - ), - 'Joomla\\Image\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/image/src', - ), - 'Joomla\\Http\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/http/src', - ), - 'Joomla\\Filter\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/filter/src', - ), - 'Joomla\\Filesystem\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/filesystem/src', - ), - 'Joomla\\Event\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/event/src', - ), - 'Joomla\\Database\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/database/src', - ), - 'Joomla\\Data\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/data/src', - ), - 'Joomla\\DI\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/di/src', - ), - 'Joomla\\Crypt\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/crypt/src', - ), - 'Joomla\\Controller\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/controller/src', - ), - 'Joomla\\Console\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/console/src', - ), - 'Joomla\\CMS\\' => - array ( - 0 => __DIR__ . '/../../..' . '/libraries/src', - ), - 'Joomla\\Authentication\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/authentication/src', - ), - 'Joomla\\Archive\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/archive/src', - ), - 'Joomla\\Application\\' => - array ( - 0 => __DIR__ . '/..' . '/joomla/application/src', - ), - 'Fig\\Link\\' => - array ( - 0 => __DIR__ . '/..' . '/fig/link-util/src', - ), - 'Doctrine\\Common\\Inflector\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Common/Inflector', - ), - 'Defuse\\Crypto\\' => - array ( - 0 => __DIR__ . '/..' . '/defuse/php-encryption/src', - ), - 'Composer\\CaBundle\\' => - array ( - 0 => __DIR__ . '/..' . '/composer/ca-bundle/src', - ), - ); - - public static $classMap = array ( - 'Composer\\CaBundle\\CaBundle' => __DIR__ . '/..' . '/composer/ca-bundle/src/CaBundle.php', - 'Defuse\\Crypto\\Core' => __DIR__ . '/..' . '/defuse/php-encryption/src/Core.php', - 'Defuse\\Crypto\\Crypto' => __DIR__ . '/..' . '/defuse/php-encryption/src/Crypto.php', - 'Defuse\\Crypto\\DerivedKeys' => __DIR__ . '/..' . '/defuse/php-encryption/src/DerivedKeys.php', - 'Defuse\\Crypto\\Encoding' => __DIR__ . '/..' . '/defuse/php-encryption/src/Encoding.php', - 'Defuse\\Crypto\\Exception\\BadFormatException' => __DIR__ . '/..' . '/defuse/php-encryption/src/Exception/BadFormatException.php', - 'Defuse\\Crypto\\Exception\\CryptoException' => __DIR__ . '/..' . '/defuse/php-encryption/src/Exception/CryptoException.php', - 'Defuse\\Crypto\\Exception\\EnvironmentIsBrokenException' => __DIR__ . '/..' . '/defuse/php-encryption/src/Exception/EnvironmentIsBrokenException.php', - 'Defuse\\Crypto\\Exception\\IOException' => __DIR__ . '/..' . '/defuse/php-encryption/src/Exception/IOException.php', - 'Defuse\\Crypto\\Exception\\WrongKeyOrModifiedCiphertextException' => __DIR__ . '/..' . '/defuse/php-encryption/src/Exception/WrongKeyOrModifiedCiphertextException.php', - 'Defuse\\Crypto\\File' => __DIR__ . '/..' . '/defuse/php-encryption/src/File.php', - 'Defuse\\Crypto\\Key' => __DIR__ . '/..' . '/defuse/php-encryption/src/Key.php', - 'Defuse\\Crypto\\KeyOrPassword' => __DIR__ . '/..' . '/defuse/php-encryption/src/KeyOrPassword.php', - 'Defuse\\Crypto\\KeyProtectedByPassword' => __DIR__ . '/..' . '/defuse/php-encryption/src/KeyProtectedByPassword.php', - 'Defuse\\Crypto\\RuntimeTests' => __DIR__ . '/..' . '/defuse/php-encryption/src/RuntimeTests.php', - 'Doctrine\\Common\\Inflector\\Inflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php', - 'Fig\\Link\\EvolvableLinkProviderTrait' => __DIR__ . '/..' . '/fig/link-util/src/EvolvableLinkProviderTrait.php', - 'Fig\\Link\\EvolvableLinkTrait' => __DIR__ . '/..' . '/fig/link-util/src/EvolvableLinkTrait.php', - 'Fig\\Link\\GenericLinkProvider' => __DIR__ . '/..' . '/fig/link-util/src/GenericLinkProvider.php', - 'Fig\\Link\\Link' => __DIR__ . '/..' . '/fig/link-util/src/Link.php', - 'Fig\\Link\\LinkProviderTrait' => __DIR__ . '/..' . '/fig/link-util/src/LinkProviderTrait.php', - 'Fig\\Link\\LinkTrait' => __DIR__ . '/..' . '/fig/link-util/src/LinkTrait.php', - 'Fig\\Link\\TemplatedHrefTrait' => __DIR__ . '/..' . '/fig/link-util/src/TemplatedHrefTrait.php', - 'Joomla\\Application\\AbstractApplication' => __DIR__ . '/..' . '/joomla/application/src/AbstractApplication.php', - 'Joomla\\Application\\AbstractWebApplication' => __DIR__ . '/..' . '/joomla/application/src/AbstractWebApplication.php', - 'Joomla\\Application\\ApplicationEvents' => __DIR__ . '/..' . '/joomla/application/src/ApplicationEvents.php', - 'Joomla\\Application\\Controller\\ContainerControllerResolver' => __DIR__ . '/..' . '/joomla/application/src/Controller/ContainerControllerResolver.php', - 'Joomla\\Application\\Controller\\ControllerResolver' => __DIR__ . '/..' . '/joomla/application/src/Controller/ControllerResolver.php', - 'Joomla\\Application\\Controller\\ControllerResolverInterface' => __DIR__ . '/..' . '/joomla/application/src/Controller/ControllerResolverInterface.php', - 'Joomla\\Application\\Event\\ApplicationErrorEvent' => __DIR__ . '/..' . '/joomla/application/src/Event/ApplicationErrorEvent.php', - 'Joomla\\Application\\Event\\ApplicationEvent' => __DIR__ . '/..' . '/joomla/application/src/Event/ApplicationEvent.php', - 'Joomla\\Application\\Exception\\UnableToWriteBody' => __DIR__ . '/..' . '/joomla/application/src/Exception/UnableToWriteBody.php', - 'Joomla\\Application\\WebApplication' => __DIR__ . '/..' . '/joomla/application/src/WebApplication.php', - 'Joomla\\Application\\Web\\WebClient' => __DIR__ . '/..' . '/joomla/application/src/Web/WebClient.php', - 'Joomla\\Archive\\Archive' => __DIR__ . '/..' . '/joomla/archive/src/Archive.php', - 'Joomla\\Archive\\Bzip2' => __DIR__ . '/..' . '/joomla/archive/src/Bzip2.php', - 'Joomla\\Archive\\ExtractableInterface' => __DIR__ . '/..' . '/joomla/archive/src/ExtractableInterface.php', - 'Joomla\\Archive\\Gzip' => __DIR__ . '/..' . '/joomla/archive/src/Gzip.php', - 'Joomla\\Archive\\Tar' => __DIR__ . '/..' . '/joomla/archive/src/Tar.php', - 'Joomla\\Archive\\Zip' => __DIR__ . '/..' . '/joomla/archive/src/Zip.php', - 'Joomla\\Authentication\\AbstractUsernamePasswordAuthenticationStrategy' => __DIR__ . '/..' . '/joomla/authentication/src/AbstractUsernamePasswordAuthenticationStrategy.php', - 'Joomla\\Authentication\\Authentication' => __DIR__ . '/..' . '/joomla/authentication/src/Authentication.php', - 'Joomla\\Authentication\\AuthenticationStrategyInterface' => __DIR__ . '/..' . '/joomla/authentication/src/AuthenticationStrategyInterface.php', - 'Joomla\\Authentication\\Password\\Argon2iHandler' => __DIR__ . '/..' . '/joomla/authentication/src/Password/Argon2iHandler.php', - 'Joomla\\Authentication\\Password\\BCryptHandler' => __DIR__ . '/..' . '/joomla/authentication/src/Password/BCryptHandler.php', - 'Joomla\\Authentication\\Password\\HandlerInterface' => __DIR__ . '/..' . '/joomla/authentication/src/Password/HandlerInterface.php', - 'Joomla\\Authentication\\Strategies\\DatabaseStrategy' => __DIR__ . '/..' . '/joomla/authentication/src/Strategies/DatabaseStrategy.php', - 'Joomla\\Authentication\\Strategies\\LocalStrategy' => __DIR__ . '/..' . '/joomla/authentication/src/Strategies/LocalStrategy.php', - 'Joomla\\CMS\\Access\\Access' => __DIR__ . '/../../..' . '/libraries/src/Access/Access.php', - 'Joomla\\CMS\\Access\\Exception\\NotAllowed' => __DIR__ . '/../../..' . '/libraries/src/Access/Exception/NotAllowed.php', - 'Joomla\\CMS\\Access\\Rule' => __DIR__ . '/../../..' . '/libraries/src/Access/Rule.php', - 'Joomla\\CMS\\Access\\Rules' => __DIR__ . '/../../..' . '/libraries/src/Access/Rules.php', - 'Joomla\\CMS\\Application\\AdministratorApplication' => __DIR__ . '/../../..' . '/libraries/src/Application/AdministratorApplication.php', - 'Joomla\\CMS\\Application\\ApplicationHelper' => __DIR__ . '/../../..' . '/libraries/src/Application/ApplicationHelper.php', - 'Joomla\\CMS\\Application\\BaseApplication' => __DIR__ . '/../../..' . '/libraries/src/Application/BaseApplication.php', - 'Joomla\\CMS\\Application\\CLI\\CliInput' => __DIR__ . '/../../..' . '/libraries/src/Application/CLI/CliInput.php', - 'Joomla\\CMS\\Application\\CLI\\CliOutput' => __DIR__ . '/../../..' . '/libraries/src/Application/CLI/CliOutput.php', - 'Joomla\\CMS\\Application\\CLI\\ColorStyle' => __DIR__ . '/../../..' . '/libraries/src/Application/CLI/ColorStyle.php', - 'Joomla\\CMS\\Application\\CLI\\Output\\Processor\\ColorProcessor' => __DIR__ . '/../../..' . '/libraries/src/Application/CLI/Output/Processor/ColorProcessor.php', - 'Joomla\\CMS\\Application\\CLI\\Output\\Processor\\ProcessorInterface' => __DIR__ . '/../../..' . '/libraries/src/Application/CLI/Output/Processor/ProcessorInterface.php', - 'Joomla\\CMS\\Application\\CLI\\Output\\Stdout' => __DIR__ . '/../../..' . '/libraries/src/Application/CLI/Output/Stdout.php', - 'Joomla\\CMS\\Application\\CLI\\Output\\Xml' => __DIR__ . '/../../..' . '/libraries/src/Application/CLI/Output/Xml.php', - 'Joomla\\CMS\\Application\\CMSApplication' => __DIR__ . '/../../..' . '/libraries/src/Application/CMSApplication.php', - 'Joomla\\CMS\\Application\\CMSApplicationInterface' => __DIR__ . '/../../..' . '/libraries/src/Application/CMSApplicationInterface.php', - 'Joomla\\CMS\\Application\\CliApplication' => __DIR__ . '/../../..' . '/libraries/src/Application/CliApplication.php', - 'Joomla\\CMS\\Application\\ConsoleApplication' => __DIR__ . '/../../..' . '/libraries/src/Application/ConsoleApplication.php', - 'Joomla\\CMS\\Application\\DaemonApplication' => __DIR__ . '/../../..' . '/libraries/src/Application/DaemonApplication.php', - 'Joomla\\CMS\\Application\\EventAware' => __DIR__ . '/../../..' . '/libraries/src/Application/EventAware.php', - 'Joomla\\CMS\\Application\\ExtensionNamespaceMapper' => __DIR__ . '/../../..' . '/libraries/src/Application/ExtensionNamespaceMapper.php', - 'Joomla\\CMS\\Application\\IdentityAware' => __DIR__ . '/../../..' . '/libraries/src/Application/IdentityAware.php', - 'Joomla\\CMS\\Application\\SiteApplication' => __DIR__ . '/../../..' . '/libraries/src/Application/SiteApplication.php', - 'Joomla\\CMS\\Application\\WebApplication' => __DIR__ . '/../../..' . '/libraries/src/Application/WebApplication.php', - 'Joomla\\CMS\\Association\\AssociationExtensionHelper' => __DIR__ . '/../../..' . '/libraries/src/Association/AssociationExtensionHelper.php', - 'Joomla\\CMS\\Association\\AssociationExtensionInterface' => __DIR__ . '/../../..' . '/libraries/src/Association/AssociationExtensionInterface.php', - 'Joomla\\CMS\\Association\\AssociationServiceInterface' => __DIR__ . '/../../..' . '/libraries/src/Association/AssociationServiceInterface.php', - 'Joomla\\CMS\\Association\\AssociationServiceTrait' => __DIR__ . '/../../..' . '/libraries/src/Association/AssociationServiceTrait.php', - 'Joomla\\CMS\\Authentication\\Authentication' => __DIR__ . '/../../..' . '/libraries/src/Authentication/Authentication.php', - 'Joomla\\CMS\\Authentication\\AuthenticationResponse' => __DIR__ . '/../../..' . '/libraries/src/Authentication/AuthenticationResponse.php', - 'Joomla\\CMS\\Authentication\\Password\\Argon2iHandler' => __DIR__ . '/../../..' . '/libraries/src/Authentication/Password/Argon2iHandler.php', - 'Joomla\\CMS\\Authentication\\Password\\BCryptHandler' => __DIR__ . '/../../..' . '/libraries/src/Authentication/Password/BCryptHandler.php', - 'Joomla\\CMS\\Authentication\\Password\\ChainedHandler' => __DIR__ . '/../../..' . '/libraries/src/Authentication/Password/ChainedHandler.php', - 'Joomla\\CMS\\Authentication\\Password\\CheckIfRehashNeededHandlerInterface' => __DIR__ . '/../../..' . '/libraries/src/Authentication/Password/CheckIfRehashNeededHandlerInterface.php', - 'Joomla\\CMS\\Authentication\\Password\\MD5Handler' => __DIR__ . '/../../..' . '/libraries/src/Authentication/Password/MD5Handler.php', - 'Joomla\\CMS\\Authentication\\Password\\PHPassHandler' => __DIR__ . '/../../..' . '/libraries/src/Authentication/Password/PHPassHandler.php', - 'Joomla\\CMS\\Authentication\\Password\\SHA256Handler' => __DIR__ . '/../../..' . '/libraries/src/Authentication/Password/SHA256Handler.php', - 'Joomla\\CMS\\Button\\ActionButton' => __DIR__ . '/../../..' . '/libraries/src/Button/ActionButton.php', - 'Joomla\\CMS\\Button\\PublishedButton' => __DIR__ . '/../../..' . '/libraries/src/Button/PublishedButton.php', - 'Joomla\\CMS\\Cache\\Cache' => __DIR__ . '/../../..' . '/libraries/src/Cache/Cache.php', - 'Joomla\\CMS\\Cache\\CacheController' => __DIR__ . '/../../..' . '/libraries/src/Cache/CacheController.php', - 'Joomla\\CMS\\Cache\\CacheStorage' => __DIR__ . '/../../..' . '/libraries/src/Cache/CacheStorage.php', - 'Joomla\\CMS\\Cache\\Controller\\CallbackController' => __DIR__ . '/../../..' . '/libraries/src/Cache/Controller/CallbackController.php', - 'Joomla\\CMS\\Cache\\Controller\\OutputController' => __DIR__ . '/../../..' . '/libraries/src/Cache/Controller/OutputController.php', - 'Joomla\\CMS\\Cache\\Controller\\PageController' => __DIR__ . '/../../..' . '/libraries/src/Cache/Controller/PageController.php', - 'Joomla\\CMS\\Cache\\Controller\\ViewController' => __DIR__ . '/../../..' . '/libraries/src/Cache/Controller/ViewController.php', - 'Joomla\\CMS\\Cache\\Exception\\CacheConnectingException' => __DIR__ . '/../../..' . '/libraries/src/Cache/Exception/CacheConnectingException.php', - 'Joomla\\CMS\\Cache\\Exception\\CacheExceptionInterface' => __DIR__ . '/../../..' . '/libraries/src/Cache/Exception/CacheExceptionInterface.php', - 'Joomla\\CMS\\Cache\\Exception\\UnsupportedCacheException' => __DIR__ . '/../../..' . '/libraries/src/Cache/Exception/UnsupportedCacheException.php', - 'Joomla\\CMS\\Cache\\Storage\\ApcuStorage' => __DIR__ . '/../../..' . '/libraries/src/Cache/Storage/ApcuStorage.php', - 'Joomla\\CMS\\Cache\\Storage\\CacheStorageHelper' => __DIR__ . '/../../..' . '/libraries/src/Cache/Storage/CacheStorageHelper.php', - 'Joomla\\CMS\\Cache\\Storage\\FileStorage' => __DIR__ . '/../../..' . '/libraries/src/Cache/Storage/FileStorage.php', - 'Joomla\\CMS\\Cache\\Storage\\MemcachedStorage' => __DIR__ . '/../../..' . '/libraries/src/Cache/Storage/MemcachedStorage.php', - 'Joomla\\CMS\\Cache\\Storage\\RedisStorage' => __DIR__ . '/../../..' . '/libraries/src/Cache/Storage/RedisStorage.php', - 'Joomla\\CMS\\Cache\\Storage\\WincacheStorage' => __DIR__ . '/../../..' . '/libraries/src/Cache/Storage/WincacheStorage.php', - 'Joomla\\CMS\\Captcha\\Captcha' => __DIR__ . '/../../..' . '/libraries/src/Captcha/Captcha.php', - 'Joomla\\CMS\\Captcha\\Google\\HttpBridgePostRequestMethod' => __DIR__ . '/../../..' . '/libraries/src/Captcha/Google/HttpBridgePostRequestMethod.php', - 'Joomla\\CMS\\Categories\\Categories' => __DIR__ . '/../../..' . '/libraries/src/Categories/Categories.php', - 'Joomla\\CMS\\Categories\\CategoriesServiceInterface' => __DIR__ . '/../../..' . '/libraries/src/Categories/CategoriesServiceInterface.php', - 'Joomla\\CMS\\Categories\\CategoriesServiceTrait' => __DIR__ . '/../../..' . '/libraries/src/Categories/CategoriesServiceTrait.php', - 'Joomla\\CMS\\Categories\\CategoryNode' => __DIR__ . '/../../..' . '/libraries/src/Categories/CategoryNode.php', - 'Joomla\\CMS\\Categories\\SectionNotFoundException' => __DIR__ . '/../../..' . '/libraries/src/Categories/SectionNotFoundException.php', - 'Joomla\\CMS\\Client\\ClientHelper' => __DIR__ . '/../../..' . '/libraries/src/Client/ClientHelper.php', - 'Joomla\\CMS\\Client\\ClientWrapper' => __DIR__ . '/../../..' . '/libraries/src/Client/ClientWrapper.php', - 'Joomla\\CMS\\Client\\FtpClient' => __DIR__ . '/../../..' . '/libraries/src/Client/FtpClient.php', - 'Joomla\\CMS\\Component\\ComponentHelper' => __DIR__ . '/../../..' . '/libraries/src/Component/ComponentHelper.php', - 'Joomla\\CMS\\Component\\ComponentRecord' => __DIR__ . '/../../..' . '/libraries/src/Component/ComponentRecord.php', - 'Joomla\\CMS\\Component\\Exception\\MissingComponentException' => __DIR__ . '/../../..' . '/libraries/src/Component/Exception/MissingComponentException.php', - 'Joomla\\CMS\\Component\\Router\\RouterBase' => __DIR__ . '/../../..' . '/libraries/src/Component/Router/RouterBase.php', - 'Joomla\\CMS\\Component\\Router\\RouterInterface' => __DIR__ . '/../../..' . '/libraries/src/Component/Router/RouterInterface.php', - 'Joomla\\CMS\\Component\\Router\\RouterLegacy' => __DIR__ . '/../../..' . '/libraries/src/Component/Router/RouterLegacy.php', - 'Joomla\\CMS\\Component\\Router\\RouterView' => __DIR__ . '/../../..' . '/libraries/src/Component/Router/RouterView.php', - 'Joomla\\CMS\\Component\\Router\\RouterViewConfiguration' => __DIR__ . '/../../..' . '/libraries/src/Component/Router/RouterViewConfiguration.php', - 'Joomla\\CMS\\Component\\Router\\Rules\\MenuRules' => __DIR__ . '/../../..' . '/libraries/src/Component/Router/Rules/MenuRules.php', - 'Joomla\\CMS\\Component\\Router\\Rules\\NomenuRules' => __DIR__ . '/../../..' . '/libraries/src/Component/Router/Rules/NomenuRules.php', - 'Joomla\\CMS\\Component\\Router\\Rules\\RulesInterface' => __DIR__ . '/../../..' . '/libraries/src/Component/Router/Rules/RulesInterface.php', - 'Joomla\\CMS\\Component\\Router\\Rules\\StandardRules' => __DIR__ . '/../../..' . '/libraries/src/Component/Router/Rules/StandardRules.php', - 'Joomla\\CMS\\Console\\CheckUpdatesCommand' => __DIR__ . '/../../..' . '/libraries/src/Console/CheckUpdatesCommand.php', - 'Joomla\\CMS\\Console\\CleanCacheCommand' => __DIR__ . '/../../..' . '/libraries/src/Console/CleanCacheCommand.php', - 'Joomla\\CMS\\Console\\RemoveOldFilesCommand' => __DIR__ . '/../../..' . '/libraries/src/Console/RemoveOldFilesCommand.php', - 'Joomla\\CMS\\Console\\SessionGcCommand' => __DIR__ . '/../../..' . '/libraries/src/Console/SessionGcCommand.php', - 'Joomla\\CMS\\Crypt\\Cipher\\CryptoCipher' => __DIR__ . '/../../..' . '/libraries/src/Crypt/Cipher/CryptoCipher.php', - 'Joomla\\CMS\\Crypt\\Cipher\\SodiumCipher' => __DIR__ . '/../../..' . '/libraries/src/Crypt/Cipher/SodiumCipher.php', - 'Joomla\\CMS\\Crypt\\Crypt' => __DIR__ . '/../../..' . '/libraries/src/Crypt/Crypt.php', - 'Joomla\\CMS\\Date\\Date' => __DIR__ . '/../../..' . '/libraries/src/Date/Date.php', - 'Joomla\\CMS\\Dispatcher\\Dispatcher' => __DIR__ . '/../../..' . '/libraries/src/Dispatcher/Dispatcher.php', - 'Joomla\\CMS\\Dispatcher\\DispatcherFactory' => __DIR__ . '/../../..' . '/libraries/src/Dispatcher/DispatcherFactory.php', - 'Joomla\\CMS\\Dispatcher\\DispatcherFactoryInterface' => __DIR__ . '/../../..' . '/libraries/src/Dispatcher/DispatcherFactoryInterface.php', - 'Joomla\\CMS\\Dispatcher\\DispatcherInterface' => __DIR__ . '/../../..' . '/libraries/src/Dispatcher/DispatcherInterface.php', - 'Joomla\\CMS\\Dispatcher\\LegacyDispatcher' => __DIR__ . '/../../..' . '/libraries/src/Dispatcher/LegacyDispatcher.php', - 'Joomla\\CMS\\Document\\Document' => __DIR__ . '/../../..' . '/libraries/src/Document/Document.php', - 'Joomla\\CMS\\Document\\DocumentRenderer' => __DIR__ . '/../../..' . '/libraries/src/Document/DocumentRenderer.php', - 'Joomla\\CMS\\Document\\ErrorDocument' => __DIR__ . '/../../..' . '/libraries/src/Document/ErrorDocument.php', - 'Joomla\\CMS\\Document\\Factory' => __DIR__ . '/../../..' . '/libraries/src/Document/Factory.php', - 'Joomla\\CMS\\Document\\FactoryInterface' => __DIR__ . '/../../..' . '/libraries/src/Document/FactoryInterface.php', - 'Joomla\\CMS\\Document\\FeedDocument' => __DIR__ . '/../../..' . '/libraries/src/Document/FeedDocument.php', - 'Joomla\\CMS\\Document\\Feed\\FeedEnclosure' => __DIR__ . '/../../..' . '/libraries/src/Document/Feed/FeedEnclosure.php', - 'Joomla\\CMS\\Document\\Feed\\FeedImage' => __DIR__ . '/../../..' . '/libraries/src/Document/Feed/FeedImage.php', - 'Joomla\\CMS\\Document\\Feed\\FeedItem' => __DIR__ . '/../../..' . '/libraries/src/Document/Feed/FeedItem.php', - 'Joomla\\CMS\\Document\\HtmlDocument' => __DIR__ . '/../../..' . '/libraries/src/Document/HtmlDocument.php', - 'Joomla\\CMS\\Document\\ImageDocument' => __DIR__ . '/../../..' . '/libraries/src/Document/ImageDocument.php', - 'Joomla\\CMS\\Document\\JsonDocument' => __DIR__ . '/../../..' . '/libraries/src/Document/JsonDocument.php', - 'Joomla\\CMS\\Document\\OpensearchDocument' => __DIR__ . '/../../..' . '/libraries/src/Document/OpensearchDocument.php', - 'Joomla\\CMS\\Document\\Opensearch\\OpensearchImage' => __DIR__ . '/../../..' . '/libraries/src/Document/Opensearch/OpensearchImage.php', - 'Joomla\\CMS\\Document\\Opensearch\\OpensearchUrl' => __DIR__ . '/../../..' . '/libraries/src/Document/Opensearch/OpensearchUrl.php', - 'Joomla\\CMS\\Document\\PreloadManager' => __DIR__ . '/../../..' . '/libraries/src/Document/PreloadManager.php', - 'Joomla\\CMS\\Document\\PreloadManagerInterface' => __DIR__ . '/../../..' . '/libraries/src/Document/PreloadManagerInterface.php', - 'Joomla\\CMS\\Document\\RawDocument' => __DIR__ . '/../../..' . '/libraries/src/Document/RawDocument.php', - 'Joomla\\CMS\\Document\\RendererInterface' => __DIR__ . '/../../..' . '/libraries/src/Document/RendererInterface.php', - 'Joomla\\CMS\\Document\\Renderer\\Feed\\AtomRenderer' => __DIR__ . '/../../..' . '/libraries/src/Document/Renderer/Feed/AtomRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Feed\\RssRenderer' => __DIR__ . '/../../..' . '/libraries/src/Document/Renderer/Feed/RssRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\ComponentRenderer' => __DIR__ . '/../../..' . '/libraries/src/Document/Renderer/Html/ComponentRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\HeadRenderer' => __DIR__ . '/../../..' . '/libraries/src/Document/Renderer/Html/HeadRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\MessageRenderer' => __DIR__ . '/../../..' . '/libraries/src/Document/Renderer/Html/MessageRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\MetasRenderer' => __DIR__ . '/../../..' . '/libraries/src/Document/Renderer/Html/MetasRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\ModuleRenderer' => __DIR__ . '/../../..' . '/libraries/src/Document/Renderer/Html/ModuleRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\ModulesRenderer' => __DIR__ . '/../../..' . '/libraries/src/Document/Renderer/Html/ModulesRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\ScriptsRenderer' => __DIR__ . '/../../..' . '/libraries/src/Document/Renderer/Html/ScriptsRenderer.php', - 'Joomla\\CMS\\Document\\Renderer\\Html\\StylesRenderer' => __DIR__ . '/../../..' . '/libraries/src/Document/Renderer/Html/StylesRenderer.php', - 'Joomla\\CMS\\Document\\XmlDocument' => __DIR__ . '/../../..' . '/libraries/src/Document/XmlDocument.php', - 'Joomla\\CMS\\Editor\\Editor' => __DIR__ . '/../../..' . '/libraries/src/Editor/Editor.php', - 'Joomla\\CMS\\Encrypt\\AES\\AbstractAES' => __DIR__ . '/../../..' . '/libraries/src/Encrypt/AES/AbstractAES.php', - 'Joomla\\CMS\\Encrypt\\AES\\AesInterface' => __DIR__ . '/../../..' . '/libraries/src/Encrypt/AES/AesInterface.php', - 'Joomla\\CMS\\Encrypt\\AES\\Mcrypt' => __DIR__ . '/../../..' . '/libraries/src/Encrypt/AES/Mcrypt.php', - 'Joomla\\CMS\\Encrypt\\AES\\Openssl' => __DIR__ . '/../../..' . '/libraries/src/Encrypt/AES/OpenSSL.php', - 'Joomla\\CMS\\Encrypt\\Aes' => __DIR__ . '/../../..' . '/libraries/src/Encrypt/Aes.php', - 'Joomla\\CMS\\Encrypt\\Base32' => __DIR__ . '/../../..' . '/libraries/src/Encrypt/Base32.php', - 'Joomla\\CMS\\Encrypt\\RandValInterface' => __DIR__ . '/../../..' . '/libraries/src/Encrypt/RandValInterface.php', - 'Joomla\\CMS\\Encrypt\\Randval' => __DIR__ . '/../../..' . '/libraries/src/Encrypt/Randval.php', - 'Joomla\\CMS\\Encrypt\\Totp' => __DIR__ . '/../../..' . '/libraries/src/Encrypt/Totp.php', - 'Joomla\\CMS\\Environment\\Browser' => __DIR__ . '/../../..' . '/libraries/src/Environment/Browser.php', - 'Joomla\\CMS\\Error\\AbstractRenderer' => __DIR__ . '/../../..' . '/libraries/src/Error/AbstractRenderer.php', - 'Joomla\\CMS\\Error\\RendererInterface' => __DIR__ . '/../../..' . '/libraries/src/Error/RendererInterface.php', - 'Joomla\\CMS\\Error\\Renderer\\CliRenderer' => __DIR__ . '/../../..' . '/libraries/src/Error/Renderer/CliRenderer.php', - 'Joomla\\CMS\\Error\\Renderer\\FeedRenderer' => __DIR__ . '/../../..' . '/libraries/src/Error/Renderer/FeedRenderer.php', - 'Joomla\\CMS\\Error\\Renderer\\HtmlRenderer' => __DIR__ . '/../../..' . '/libraries/src/Error/Renderer/HtmlRenderer.php', - 'Joomla\\CMS\\Error\\Renderer\\JsonRenderer' => __DIR__ . '/../../..' . '/libraries/src/Error/Renderer/JsonRenderer.php', - 'Joomla\\CMS\\Error\\Renderer\\XmlRenderer' => __DIR__ . '/../../..' . '/libraries/src/Error/Renderer/XmlRenderer.php', - 'Joomla\\CMS\\Event\\AbstractEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/AbstractEvent.php', - 'Joomla\\CMS\\Event\\AbstractImmutableEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/AbstractImmutableEvent.php', - 'Joomla\\CMS\\Event\\AfterExtensionBootEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/AfterExtensionBootEvent.php', - 'Joomla\\CMS\\Event\\BeforeExecuteEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/BeforeExecuteEvent.php', - 'Joomla\\CMS\\Event\\BeforeExtensionBootEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/BeforeExtensionBootEvent.php', - 'Joomla\\CMS\\Event\\ErrorEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/ErrorEvent.php', - 'Joomla\\CMS\\Event\\GenericEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/GenericEvent.php', - 'Joomla\\CMS\\Event\\Table\\AbstractEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/AbstractEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterBindEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/AfterBindEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterCheckinEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/AfterCheckinEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterCheckoutEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/AfterCheckoutEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterDeleteEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/AfterDeleteEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterHitEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/AfterHitEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterLoadEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/AfterLoadEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterMoveEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/AfterMoveEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterPublishEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/AfterPublishEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterReorderEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/AfterReorderEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterResetEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/AfterResetEvent.php', - 'Joomla\\CMS\\Event\\Table\\AfterStoreEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/AfterStoreEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeBindEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/BeforeBindEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeCheckinEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/BeforeCheckinEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeCheckoutEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/BeforeCheckoutEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeDeleteEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/BeforeDeleteEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeHitEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/BeforeHitEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeLoadEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/BeforeLoadEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeMoveEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/BeforeMoveEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforePublishEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/BeforePublishEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeReorderEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/BeforeReorderEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeResetEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/BeforeResetEvent.php', - 'Joomla\\CMS\\Event\\Table\\BeforeStoreEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/BeforeStoreEvent.php', - 'Joomla\\CMS\\Event\\Table\\CheckEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/CheckEvent.php', - 'Joomla\\CMS\\Event\\Table\\ObjectCreateEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/ObjectCreateEvent.php', - 'Joomla\\CMS\\Event\\Table\\SetNewTagsEvent' => __DIR__ . '/../../..' . '/libraries/src/Event/Table/SetNewTagsEvent.php', - 'Joomla\\CMS\\Exception\\ExceptionHandler' => __DIR__ . '/../../..' . '/libraries/src/Exception/ExceptionHandler.php', - 'Joomla\\CMS\\Extension\\BootableExtensionInterface' => __DIR__ . '/../../..' . '/libraries/src/Extension/BootableExtensionInterface.php', - 'Joomla\\CMS\\Extension\\Component' => __DIR__ . '/../../..' . '/libraries/src/Extension/Component.php', - 'Joomla\\CMS\\Extension\\ComponentInterface' => __DIR__ . '/../../..' . '/libraries/src/Extension/ComponentInterface.php', - 'Joomla\\CMS\\Extension\\ExtensionHelper' => __DIR__ . '/../../..' . '/libraries/src/Extension/ExtensionHelper.php', - 'Joomla\\CMS\\Extension\\ExtensionManagerInterface' => __DIR__ . '/../../..' . '/libraries/src/Extension/ExtensionManagerInterface.php', - 'Joomla\\CMS\\Extension\\ExtensionManagerTrait' => __DIR__ . '/../../..' . '/libraries/src/Extension/ExtensionManagerTrait.php', - 'Joomla\\CMS\\Extension\\LegacyComponent' => __DIR__ . '/../../..' . '/libraries/src/Extension/LegacyComponent.php', - 'Joomla\\CMS\\Extension\\MVCComponent' => __DIR__ . '/../../..' . '/libraries/src/Extension/MVCComponent.php', - 'Joomla\\CMS\\Extension\\Service\\Provider\\DispatcherFactory' => __DIR__ . '/../../..' . '/libraries/src/Extension/Service/Provider/DispatcherFactory.php', - 'Joomla\\CMS\\Extension\\Service\\Provider\\MVCFactoryFactory' => __DIR__ . '/../../..' . '/libraries/src/Extension/Service/Provider/MVCFactoryFactory.php', - 'Joomla\\CMS\\Factory' => __DIR__ . '/../../..' . '/libraries/src/Factory.php', - 'Joomla\\CMS\\Feed\\Feed' => __DIR__ . '/../../..' . '/libraries/src/Feed/Feed.php', - 'Joomla\\CMS\\Feed\\FeedEntry' => __DIR__ . '/../../..' . '/libraries/src/Feed/FeedEntry.php', - 'Joomla\\CMS\\Feed\\FeedFactory' => __DIR__ . '/../../..' . '/libraries/src/Feed/FeedFactory.php', - 'Joomla\\CMS\\Feed\\FeedLink' => __DIR__ . '/../../..' . '/libraries/src/Feed/FeedLink.php', - 'Joomla\\CMS\\Feed\\FeedParser' => __DIR__ . '/../../..' . '/libraries/src/Feed/FeedParser.php', - 'Joomla\\CMS\\Feed\\FeedPerson' => __DIR__ . '/../../..' . '/libraries/src/Feed/FeedPerson.php', - 'Joomla\\CMS\\Feed\\Parser\\AtomParser' => __DIR__ . '/../../..' . '/libraries/src/Feed/Parser/AtomParser.php', - 'Joomla\\CMS\\Feed\\Parser\\NamespaceParserInterface' => __DIR__ . '/../../..' . '/libraries/src/Feed/Parser/NamespaceParserInterface.php', - 'Joomla\\CMS\\Feed\\Parser\\RssParser' => __DIR__ . '/../../..' . '/libraries/src/Feed/Parser/RssParser.php', - 'Joomla\\CMS\\Feed\\Parser\\Rss\\ItunesRssParser' => __DIR__ . '/../../..' . '/libraries/src/Feed/Parser/Rss/ItunesRssParser.php', - 'Joomla\\CMS\\Feed\\Parser\\Rss\\MediaRssParser' => __DIR__ . '/../../..' . '/libraries/src/Feed/Parser/Rss/MediaRssParser.php', - 'Joomla\\CMS\\Fields\\FieldsServiceInterface' => __DIR__ . '/../../..' . '/libraries/src/Fields/FieldsServiceInterface.php', - 'Joomla\\CMS\\Filesystem\\File' => __DIR__ . '/../../..' . '/libraries/src/Filesystem/File.php', - 'Joomla\\CMS\\Filesystem\\FilesystemHelper' => __DIR__ . '/../../..' . '/libraries/src/Filesystem/FilesystemHelper.php', - 'Joomla\\CMS\\Filesystem\\Folder' => __DIR__ . '/../../..' . '/libraries/src/Filesystem/Folder.php', - 'Joomla\\CMS\\Filesystem\\Patcher' => __DIR__ . '/../../..' . '/libraries/src/Filesystem/Patcher.php', - 'Joomla\\CMS\\Filesystem\\Path' => __DIR__ . '/../../..' . '/libraries/src/Filesystem/Path.php', - 'Joomla\\CMS\\Filesystem\\Stream' => __DIR__ . '/../../..' . '/libraries/src/Filesystem/Stream.php', - 'Joomla\\CMS\\Filesystem\\Streams\\StreamString' => __DIR__ . '/../../..' . '/libraries/src/Filesystem/Streams/StreamString.php', - 'Joomla\\CMS\\Filesystem\\Support\\StringController' => __DIR__ . '/../../..' . '/libraries/src/Filesystem/Support/Stringcontroller.php', - 'Joomla\\CMS\\Filesystem\\Wrapper\\FileWrapper' => __DIR__ . '/../../..' . '/libraries/src/Filesystem/Wrapper/FileWrapper.php', - 'Joomla\\CMS\\Filesystem\\Wrapper\\FolderWrapper' => __DIR__ . '/../../..' . '/libraries/src/Filesystem/Wrapper/FolderWrapper.php', - 'Joomla\\CMS\\Filesystem\\Wrapper\\PathWrapper' => __DIR__ . '/../../..' . '/libraries/src/Filesystem/Wrapper/PathWrapper.php', - 'Joomla\\CMS\\Filter\\Image\\Sketchy' => __DIR__ . '/../../..' . '/libraries/src/Image/Filter/Sketchy.php', - 'Joomla\\CMS\\Filter\\InputFilter' => __DIR__ . '/../../..' . '/libraries/src/Filter/InputFilter.php', - 'Joomla\\CMS\\Filter\\OutputFilter' => __DIR__ . '/../../..' . '/libraries/src/Filter/OutputFilter.php', - 'Joomla\\CMS\\Filter\\Wrapper\\OutputFilterWrapper' => __DIR__ . '/../../..' . '/libraries/src/Filter/Wrapper/OutputFilterWrapper.php', - 'Joomla\\CMS\\Form\\Field\\AccesslevelField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/AccesslevelField.php', - 'Joomla\\CMS\\Form\\Field\\AliastagField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/AliastagField.php', - 'Joomla\\CMS\\Form\\Field\\AuthorField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/AuthorField.php', - 'Joomla\\CMS\\Form\\Field\\CachehandlerField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/CachehandlerField.php', - 'Joomla\\CMS\\Form\\Field\\CalendarField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/CalendarField.php', - 'Joomla\\CMS\\Form\\Field\\CaptchaField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/CaptchaField.php', - 'Joomla\\CMS\\Form\\Field\\CategoryField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/CategoryField.php', - 'Joomla\\CMS\\Form\\Field\\CheckboxField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/CheckboxField.php', - 'Joomla\\CMS\\Form\\Field\\CheckboxesField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/CheckboxesField.php', - 'Joomla\\CMS\\Form\\Field\\ChromestyleField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/ChromestyleField.php', - 'Joomla\\CMS\\Form\\Field\\ColorField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/ColorField.php', - 'Joomla\\CMS\\Form\\Field\\ComboField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/ComboField.php', - 'Joomla\\CMS\\Form\\Field\\ComponentlayoutField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/ComponentlayoutField.php', - 'Joomla\\CMS\\Form\\Field\\ComponentsField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/ComponentsField.php', - 'Joomla\\CMS\\Form\\Field\\ContenthistoryField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/ContenthistoryField.php', - 'Joomla\\CMS\\Form\\Field\\ContentlanguageField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/ContentlanguageField.php', - 'Joomla\\CMS\\Form\\Field\\ContenttypeField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/ContenttypeField.php', - 'Joomla\\CMS\\Form\\Field\\DatabaseconnectionField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/DatabaseconnectionField.php', - 'Joomla\\CMS\\Form\\Field\\EditorField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/EditorField.php', - 'Joomla\\CMS\\Form\\Field\\EmailField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/EmailField.php', - 'Joomla\\CMS\\Form\\Field\\FileField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/FileField.php', - 'Joomla\\CMS\\Form\\Field\\FilelistField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/FilelistField.php', - 'Joomla\\CMS\\Form\\Field\\FolderlistField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/FolderlistField.php', - 'Joomla\\CMS\\Form\\Field\\FrontendlanguageField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/FrontendlanguageField.php', - 'Joomla\\CMS\\Form\\Field\\GroupedlistField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/GroupedlistField.php', - 'Joomla\\CMS\\Form\\Field\\HeadertagField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/HeadertagField.php', - 'Joomla\\CMS\\Form\\Field\\HelpsiteField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/HelpsiteField.php', - 'Joomla\\CMS\\Form\\Field\\HiddenField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/HiddenField.php', - 'Joomla\\CMS\\Form\\Field\\ImagelistField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/ImagelistField.php', - 'Joomla\\CMS\\Form\\Field\\IntegerField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/IntegerField.php', - 'Joomla\\CMS\\Form\\Field\\LanguageField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/LanguageField.php', - 'Joomla\\CMS\\Form\\Field\\LastvisitdaterangeField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/LastvisitdaterangeField.php', - 'Joomla\\CMS\\Form\\Field\\LimitboxField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/LimitboxField.php', - 'Joomla\\CMS\\Form\\Field\\ListField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/ListField.php', - 'Joomla\\CMS\\Form\\Field\\MediaField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/MediaField.php', - 'Joomla\\CMS\\Form\\Field\\MenuField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/MenuField.php', - 'Joomla\\CMS\\Form\\Field\\MenuitemField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/MenuitemField.php', - 'Joomla\\CMS\\Form\\Field\\MeterField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/MeterField.php', - 'Joomla\\CMS\\Form\\Field\\ModulelayoutField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/ModulelayoutField.php', - 'Joomla\\CMS\\Form\\Field\\ModuleorderField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/ModuleorderField.php', - 'Joomla\\CMS\\Form\\Field\\ModulepositionField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/ModulepositionField.php', - 'Joomla\\CMS\\Form\\Field\\ModuletagField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/ModuletagField.php', - 'Joomla\\CMS\\Form\\Field\\NoteField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/NoteField.php', - 'Joomla\\CMS\\Form\\Field\\NumberField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/NumberField.php', - 'Joomla\\CMS\\Form\\Field\\OrderingField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/OrderingField.php', - 'Joomla\\CMS\\Form\\Field\\PasswordField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/PasswordField.php', - 'Joomla\\CMS\\Form\\Field\\PluginsField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/PluginsField.php', - 'Joomla\\CMS\\Form\\Field\\PluginstatusField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/PluginstatusField.php', - 'Joomla\\CMS\\Form\\Field\\PredefinedlistField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/PredefinedlistField.php', - 'Joomla\\CMS\\Form\\Field\\RadioField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/RadioField.php', - 'Joomla\\CMS\\Form\\Field\\RadiobasicField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/RadiobasicField.php', - 'Joomla\\CMS\\Form\\Field\\RangeField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/RangeField.php', - 'Joomla\\CMS\\Form\\Field\\RedirectStatusField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/RedirectStatusField.php', - 'Joomla\\CMS\\Form\\Field\\RegistrationdaterangeField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/RegistrationdaterangeField.php', - 'Joomla\\CMS\\Form\\Field\\RulesField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/RulesField.php', - 'Joomla\\CMS\\Form\\Field\\SQLField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/SqlField.php', - 'Joomla\\CMS\\Form\\Field\\SessionhandlerField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/SessionhandlerField.php', - 'Joomla\\CMS\\Form\\Field\\SpacerField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/SpacerField.php', - 'Joomla\\CMS\\Form\\Field\\StatusField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/StatusField.php', - 'Joomla\\CMS\\Form\\Field\\SubformField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/SubformField.php', - 'Joomla\\CMS\\Form\\Field\\TagField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/TagField.php', - 'Joomla\\CMS\\Form\\Field\\TelephoneField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/TelephoneField.php', - 'Joomla\\CMS\\Form\\Field\\TemplatestyleField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/TemplatestyleField.php', - 'Joomla\\CMS\\Form\\Field\\TextField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/TextField.php', - 'Joomla\\CMS\\Form\\Field\\TextareaField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/TextareaField.php', - 'Joomla\\CMS\\Form\\Field\\TimezoneField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/TimezoneField.php', - 'Joomla\\CMS\\Form\\Field\\UrlField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/UrlField.php', - 'Joomla\\CMS\\Form\\Field\\UserField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/UserField.php', - 'Joomla\\CMS\\Form\\Field\\UseractiveField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/UseractiveField.php', - 'Joomla\\CMS\\Form\\Field\\UsergroupField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/UsergroupField.php', - 'Joomla\\CMS\\Form\\Field\\UsergrouplistField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/UsergrouplistField.php', - 'Joomla\\CMS\\Form\\Field\\UserstateField' => __DIR__ . '/../../..' . '/libraries/src/Form/Field/UserstateField.php', - 'Joomla\\CMS\\Form\\Form' => __DIR__ . '/../../..' . '/libraries/src/Form/Form.php', - 'Joomla\\CMS\\Form\\FormFactory' => __DIR__ . '/../../..' . '/libraries/src/Form/FormFactory.php', - 'Joomla\\CMS\\Form\\FormFactoryAwareInterface' => __DIR__ . '/../../..' . '/libraries/src/Form/FormFactoryAwareInterface.php', - 'Joomla\\CMS\\Form\\FormFactoryAwareTrait' => __DIR__ . '/../../..' . '/libraries/src/Form/FormFactoryAwareTrait.php', - 'Joomla\\CMS\\Form\\FormFactoryInterface' => __DIR__ . '/../../..' . '/libraries/src/Form/FormFactoryInterface.php', - 'Joomla\\CMS\\Form\\FormField' => __DIR__ . '/../../..' . '/libraries/src/Form/FormField.php', - 'Joomla\\CMS\\Form\\FormHelper' => __DIR__ . '/../../..' . '/libraries/src/Form/FormHelper.php', - 'Joomla\\CMS\\Form\\FormRule' => __DIR__ . '/../../..' . '/libraries/src/Form/FormRule.php', - 'Joomla\\CMS\\Form\\FormWrapper' => __DIR__ . '/../../..' . '/libraries/src/Form/FormWrapper.php', - 'Joomla\\CMS\\Form\\Rule\\BooleanRule' => __DIR__ . '/../../..' . '/libraries/src/Form/Rule/BooleanRule.php', - 'Joomla\\CMS\\Form\\Rule\\CalendarRule' => __DIR__ . '/../../..' . '/libraries/src/Form/Rule/CalendarRule.php', - 'Joomla\\CMS\\Form\\Rule\\CaptchaRule' => __DIR__ . '/../../..' . '/libraries/src/Form/Rule/CaptchaRule.php', - 'Joomla\\CMS\\Form\\Rule\\ColorRule' => __DIR__ . '/../../..' . '/libraries/src/Form/Rule/ColorRule.php', - 'Joomla\\CMS\\Form\\Rule\\EmailRule' => __DIR__ . '/../../..' . '/libraries/src/Form/Rule/EmailRule.php', - 'Joomla\\CMS\\Form\\Rule\\EqualsRule' => __DIR__ . '/../../..' . '/libraries/src/Form/Rule/EqualsRule.php', - 'Joomla\\CMS\\Form\\Rule\\NotequalsRule' => __DIR__ . '/../../..' . '/libraries/src/Form/Rule/NotequalsRule.php', - 'Joomla\\CMS\\Form\\Rule\\NumberRule' => __DIR__ . '/../../..' . '/libraries/src/Form/Rule/NumberRule.php', - 'Joomla\\CMS\\Form\\Rule\\OptionsRule' => __DIR__ . '/../../..' . '/libraries/src/Form/Rule/OptionsRule.php', - 'Joomla\\CMS\\Form\\Rule\\PasswordRule' => __DIR__ . '/../../..' . '/libraries/src/Form/Rule/PasswordRule.php', - 'Joomla\\CMS\\Form\\Rule\\RulesRule' => __DIR__ . '/../../..' . '/libraries/src/Form/Rule/RulesRule.php', - 'Joomla\\CMS\\Form\\Rule\\TelRule' => __DIR__ . '/../../..' . '/libraries/src/Form/Rule/TelRule.php', - 'Joomla\\CMS\\Form\\Rule\\UrlRule' => __DIR__ . '/../../..' . '/libraries/src/Form/Rule/UrlRule.php', - 'Joomla\\CMS\\Form\\Rule\\UsernameRule' => __DIR__ . '/../../..' . '/libraries/src/Form/Rule/UsernameRule.php', - 'Joomla\\CMS\\HTML\\HTMLHelper' => __DIR__ . '/../../..' . '/libraries/src/HTML/HTMLHelper.php', - 'Joomla\\CMS\\HTML\\HTMLRegistryAwareTrait' => __DIR__ . '/../../..' . '/libraries/src/HTML/HTMLRegistryAwareTrait.php', - 'Joomla\\CMS\\HTML\\Registry' => __DIR__ . '/../../..' . '/libraries/src/HTML/Registry.php', - 'Joomla\\CMS\\Help\\Help' => __DIR__ . '/../../..' . '/libraries/src/Help/Help.php', - 'Joomla\\CMS\\Helper\\AuthenticationHelper' => __DIR__ . '/../../..' . '/libraries/src/Helper/AuthenticationHelper.php', - 'Joomla\\CMS\\Helper\\CMSHelper' => __DIR__ . '/../../..' . '/libraries/src/Helper/CMSHelper.php', - 'Joomla\\CMS\\Helper\\ContentHelper' => __DIR__ . '/../../..' . '/libraries/src/Helper/ContentHelper.php', - 'Joomla\\CMS\\Helper\\ContentHistoryHelper' => __DIR__ . '/../../..' . '/libraries/src/Helper/ContentHistoryHelper.php', - 'Joomla\\CMS\\Helper\\LibraryHelper' => __DIR__ . '/../../..' . '/libraries/src/Helper/LibraryHelper.php', - 'Joomla\\CMS\\Helper\\MediaHelper' => __DIR__ . '/../../..' . '/libraries/src/Helper/MediaHelper.php', - 'Joomla\\CMS\\Helper\\ModuleHelper' => __DIR__ . '/../../..' . '/libraries/src/Helper/ModuleHelper.php', - 'Joomla\\CMS\\Helper\\RouteHelper' => __DIR__ . '/../../..' . '/libraries/src/Helper/RouteHelper.php', - 'Joomla\\CMS\\Helper\\SearchHelper' => __DIR__ . '/../../..' . '/libraries/src/Helper/SearchHelper.php', - 'Joomla\\CMS\\Helper\\TagsHelper' => __DIR__ . '/../../..' . '/libraries/src/Helper/TagsHelper.php', - 'Joomla\\CMS\\Helper\\UserGroupsHelper' => __DIR__ . '/../../..' . '/libraries/src/Helper/UserGroupsHelper.php', - 'Joomla\\CMS\\Http\\Http' => __DIR__ . '/../../..' . '/libraries/src/Http/Http.php', - 'Joomla\\CMS\\Http\\HttpFactory' => __DIR__ . '/../../..' . '/libraries/src/Http/HttpFactory.php', - 'Joomla\\CMS\\Http\\Response' => __DIR__ . '/../../..' . '/libraries/src/Http/Response.php', - 'Joomla\\CMS\\Http\\TransportInterface' => __DIR__ . '/../../..' . '/libraries/src/Http/TransportInterface.php', - 'Joomla\\CMS\\Http\\Transport\\CurlTransport' => __DIR__ . '/../../..' . '/libraries/src/Http/Transport/CurlTransport.php', - 'Joomla\\CMS\\Http\\Transport\\SocketTransport' => __DIR__ . '/../../..' . '/libraries/src/Http/Transport/SocketTransport.php', - 'Joomla\\CMS\\Http\\Transport\\StreamTransport' => __DIR__ . '/../../..' . '/libraries/src/Http/Transport/StreamTransport.php', - 'Joomla\\CMS\\Image\\Filter\\Backgroundfill' => __DIR__ . '/../../..' . '/libraries/src/Image/Filter/Backgroundfill.php', - 'Joomla\\CMS\\Image\\Filter\\Brightness' => __DIR__ . '/../../..' . '/libraries/src/Image/Filter/Brightness.php', - 'Joomla\\CMS\\Image\\Filter\\Contrast' => __DIR__ . '/../../..' . '/libraries/src/Image/Filter/Contrast.php', - 'Joomla\\CMS\\Image\\Filter\\Edgedetect' => __DIR__ . '/../../..' . '/libraries/src/Image/Filter/Edgedetect.php', - 'Joomla\\CMS\\Image\\Filter\\Emboss' => __DIR__ . '/../../..' . '/libraries/src/Image/Filter/Emboss.php', - 'Joomla\\CMS\\Image\\Filter\\Grayscale' => __DIR__ . '/../../..' . '/libraries/src/Image/Filter/Grayscale.php', - 'Joomla\\CMS\\Image\\Filter\\Negate' => __DIR__ . '/../../..' . '/libraries/src/Image/Filter/Negate.php', - 'Joomla\\CMS\\Image\\Filter\\Smooth' => __DIR__ . '/../../..' . '/libraries/src/Image/Filter/Smooth.php', - 'Joomla\\CMS\\Image\\Image' => __DIR__ . '/../../..' . '/libraries/src/Image/Image.php', - 'Joomla\\CMS\\Image\\ImageFilter' => __DIR__ . '/../../..' . '/libraries/src/Image/ImageFilter.php', - 'Joomla\\CMS\\Input\\Cli' => __DIR__ . '/../../..' . '/libraries/src/Input/Cli.php', - 'Joomla\\CMS\\Input\\Cookie' => __DIR__ . '/../../..' . '/libraries/src/Input/Cookie.php', - 'Joomla\\CMS\\Input\\Files' => __DIR__ . '/../../..' . '/libraries/src/Input/Files.php', - 'Joomla\\CMS\\Input\\Input' => __DIR__ . '/../../..' . '/libraries/src/Input/Input.php', - 'Joomla\\CMS\\Input\\Json' => __DIR__ . '/../../..' . '/libraries/src/Input/Json.php', - 'Joomla\\CMS\\Installer\\Adapter\\ComponentAdapter' => __DIR__ . '/../../..' . '/libraries/src/Installer/Adapter/ComponentAdapter.php', - 'Joomla\\CMS\\Installer\\Adapter\\FileAdapter' => __DIR__ . '/../../..' . '/libraries/src/Installer/Adapter/FileAdapter.php', - 'Joomla\\CMS\\Installer\\Adapter\\LanguageAdapter' => __DIR__ . '/../../..' . '/libraries/src/Installer/Adapter/LanguageAdapter.php', - 'Joomla\\CMS\\Installer\\Adapter\\LibraryAdapter' => __DIR__ . '/../../..' . '/libraries/src/Installer/Adapter/LibraryAdapter.php', - 'Joomla\\CMS\\Installer\\Adapter\\ModuleAdapter' => __DIR__ . '/../../..' . '/libraries/src/Installer/Adapter/ModuleAdapter.php', - 'Joomla\\CMS\\Installer\\Adapter\\PackageAdapter' => __DIR__ . '/../../..' . '/libraries/src/Installer/Adapter/PackageAdapter.php', - 'Joomla\\CMS\\Installer\\Adapter\\PluginAdapter' => __DIR__ . '/../../..' . '/libraries/src/Installer/Adapter/PluginAdapter.php', - 'Joomla\\CMS\\Installer\\Adapter\\TemplateAdapter' => __DIR__ . '/../../..' . '/libraries/src/Installer/Adapter/TemplateAdapter.php', - 'Joomla\\CMS\\Installer\\Installer' => __DIR__ . '/../../..' . '/libraries/src/Installer/Installer.php', - 'Joomla\\CMS\\Installer\\InstallerAdapter' => __DIR__ . '/../../..' . '/libraries/src/Installer/InstallerAdapter.php', - 'Joomla\\CMS\\Installer\\InstallerExtension' => __DIR__ . '/../../..' . '/libraries/src/Installer/InstallerExtension.php', - 'Joomla\\CMS\\Installer\\InstallerHelper' => __DIR__ . '/../../..' . '/libraries/src/Installer/InstallerHelper.php', - 'Joomla\\CMS\\Installer\\InstallerScript' => __DIR__ . '/../../..' . '/libraries/src/Installer/InstallerScript.php', - 'Joomla\\CMS\\Installer\\Manifest' => __DIR__ . '/../../..' . '/libraries/src/Installer/Manifest.php', - 'Joomla\\CMS\\Installer\\Manifest\\LibraryManifest' => __DIR__ . '/../../..' . '/libraries/src/Installer/Manifest/LibraryManifest.php', - 'Joomla\\CMS\\Installer\\Manifest\\PackageManifest' => __DIR__ . '/../../..' . '/libraries/src/Installer/Manifest/PackageManifest.php', - 'Joomla\\CMS\\Language\\Associations' => __DIR__ . '/../../..' . '/libraries/src/Language/Associations.php', - 'Joomla\\CMS\\Language\\Language' => __DIR__ . '/../../..' . '/libraries/src/Language/Language.php', - 'Joomla\\CMS\\Language\\LanguageHelper' => __DIR__ . '/../../..' . '/libraries/src/Language/LanguageHelper.php', - 'Joomla\\CMS\\Language\\LanguageStemmer' => __DIR__ . '/../../..' . '/libraries/src/Language/LanguageStemmer.php', - 'Joomla\\CMS\\Language\\Multilanguage' => __DIR__ . '/../../..' . '/libraries/src/Language/Multilanguage.php', - 'Joomla\\CMS\\Language\\Stemmer\\Porteren' => __DIR__ . '/../../..' . '/libraries/src/Language/Stemmer/Porteren.php', - 'Joomla\\CMS\\Language\\Text' => __DIR__ . '/../../..' . '/libraries/src/Language/Text.php', - 'Joomla\\CMS\\Language\\Transliterate' => __DIR__ . '/../../..' . '/libraries/src/Language/Transliterate.php', - 'Joomla\\CMS\\Language\\Wrapper\\JTextWrapper' => __DIR__ . '/../../..' . '/libraries/src/Language/Wrapper/JTextWrapper.php', - 'Joomla\\CMS\\Language\\Wrapper\\LanguageHelperWrapper' => __DIR__ . '/../../..' . '/libraries/src/Language/Wrapper/LanguageHelperWrapper.php', - 'Joomla\\CMS\\Language\\Wrapper\\TransliterateWrapper' => __DIR__ . '/../../..' . '/libraries/src/Language/Wrapper/TransliterateWrapper.php', - 'Joomla\\CMS\\Layout\\BaseLayout' => __DIR__ . '/../../..' . '/libraries/src/Layout/BaseLayout.php', - 'Joomla\\CMS\\Layout\\FileLayout' => __DIR__ . '/../../..' . '/libraries/src/Layout/FileLayout.php', - 'Joomla\\CMS\\Layout\\LayoutHelper' => __DIR__ . '/../../..' . '/libraries/src/Layout/LayoutHelper.php', - 'Joomla\\CMS\\Layout\\LayoutInterface' => __DIR__ . '/../../..' . '/libraries/src/Layout/LayoutInterface.php', - 'Joomla\\CMS\\Log\\DelegatingPsrLogger' => __DIR__ . '/../../..' . '/libraries/src/Log/DelegatingPsrLogger.php', - 'Joomla\\CMS\\Log\\Log' => __DIR__ . '/../../..' . '/libraries/src/Log/Log.php', - 'Joomla\\CMS\\Log\\LogEntry' => __DIR__ . '/../../..' . '/libraries/src/Log/LogEntry.php', - 'Joomla\\CMS\\Log\\Logger' => __DIR__ . '/../../..' . '/libraries/src/Log/Logger.php', - 'Joomla\\CMS\\Log\\LoggerRegistry' => __DIR__ . '/../../..' . '/libraries/src/Log/LoggerRegistry.php', - 'Joomla\\CMS\\Log\\Logger\\CallbackLogger' => __DIR__ . '/../../..' . '/libraries/src/Log/Logger/CallbackLogger.php', - 'Joomla\\CMS\\Log\\Logger\\DatabaseLogger' => __DIR__ . '/../../..' . '/libraries/src/Log/Logger/DatabaseLogger.php', - 'Joomla\\CMS\\Log\\Logger\\EchoLogger' => __DIR__ . '/../../..' . '/libraries/src/Log/Logger/EchoLogger.php', - 'Joomla\\CMS\\Log\\Logger\\FormattedtextLogger' => __DIR__ . '/../../..' . '/libraries/src/Log/Logger/FormattedtextLogger.php', - 'Joomla\\CMS\\Log\\Logger\\MessagequeueLogger' => __DIR__ . '/../../..' . '/libraries/src/Log/Logger/MessagequeueLogger.php', - 'Joomla\\CMS\\Log\\Logger\\SyslogLogger' => __DIR__ . '/../../..' . '/libraries/src/Log/Logger/SyslogLogger.php', - 'Joomla\\CMS\\Log\\Logger\\W3cLogger' => __DIR__ . '/../../..' . '/libraries/src/Log/Logger/W3cLogger.php', - 'Joomla\\CMS\\MVC\\Controller\\AdminController' => __DIR__ . '/../../..' . '/libraries/src/MVC/Controller/AdminController.php', - 'Joomla\\CMS\\MVC\\Controller\\BaseController' => __DIR__ . '/../../..' . '/libraries/src/MVC/Controller/BaseController.php', - 'Joomla\\CMS\\MVC\\Controller\\ControllerInterface' => __DIR__ . '/../../..' . '/libraries/src/MVC/Controller/ControllerInterface.php', - 'Joomla\\CMS\\MVC\\Controller\\FormController' => __DIR__ . '/../../..' . '/libraries/src/MVC/Controller/FormController.php', - 'Joomla\\CMS\\MVC\\Factory\\LegacyFactory' => __DIR__ . '/../../..' . '/libraries/src/MVC/Factory/LegacyFactory.php', - 'Joomla\\CMS\\MVC\\Factory\\MVCFactory' => __DIR__ . '/../../..' . '/libraries/src/MVC/Factory/MVCFactory.php', - 'Joomla\\CMS\\MVC\\Factory\\MVCFactoryFactory' => __DIR__ . '/../../..' . '/libraries/src/MVC/Factory/MVCFactoryFactory.php', - 'Joomla\\CMS\\MVC\\Factory\\MVCFactoryFactoryInterface' => __DIR__ . '/../../..' . '/libraries/src/MVC/Factory/MVCFactoryFactoryInterface.php', - 'Joomla\\CMS\\MVC\\Factory\\MVCFactoryInterface' => __DIR__ . '/../../..' . '/libraries/src/MVC/Factory/MVCFactoryInterface.php', - 'Joomla\\CMS\\MVC\\Factory\\MVCFactoryServiceInterface' => __DIR__ . '/../../..' . '/libraries/src/MVC/Factory/MVCFactoryServiceInterface.php', - 'Joomla\\CMS\\MVC\\Factory\\MVCFactoryServiceTrait' => __DIR__ . '/../../..' . '/libraries/src/MVC/Factory/MVCFactoryServiceTrait.php', - 'Joomla\\CMS\\MVC\\Model\\AdminModel' => __DIR__ . '/../../..' . '/libraries/src/MVC/Model/AdminModel.php', - 'Joomla\\CMS\\MVC\\Model\\BaseDatabaseModel' => __DIR__ . '/../../..' . '/libraries/src/MVC/Model/BaseDatabaseModel.php', - 'Joomla\\CMS\\MVC\\Model\\FormModel' => __DIR__ . '/../../..' . '/libraries/src/MVC/Model/FormModel.php', - 'Joomla\\CMS\\MVC\\Model\\ItemModel' => __DIR__ . '/../../..' . '/libraries/src/MVC/Model/ItemModel.php', - 'Joomla\\CMS\\MVC\\Model\\ListModel' => __DIR__ . '/../../..' . '/libraries/src/MVC/Model/ListModel.php', - 'Joomla\\CMS\\MVC\\View\\AbstractView' => __DIR__ . '/../../..' . '/libraries/src/MVC/View/AbstractView.php', - 'Joomla\\CMS\\MVC\\View\\CategoriesView' => __DIR__ . '/../../..' . '/libraries/src/MVC/View/CategoriesView.php', - 'Joomla\\CMS\\MVC\\View\\CategoryFeedView' => __DIR__ . '/../../..' . '/libraries/src/MVC/View/CategoryFeedView.php', - 'Joomla\\CMS\\MVC\\View\\CategoryView' => __DIR__ . '/../../..' . '/libraries/src/MVC/View/CategoryView.php', - 'Joomla\\CMS\\MVC\\View\\FormView' => __DIR__ . '/../../..' . '/libraries/src/MVC/View/FormView.php', - 'Joomla\\CMS\\MVC\\View\\HtmlView' => __DIR__ . '/../../..' . '/libraries/src/MVC/View/HtmlView.php', - 'Joomla\\CMS\\MVC\\View\\ListView' => __DIR__ . '/../../..' . '/libraries/src/MVC/View/ListView.php', - 'Joomla\\CMS\\Mail\\Mail' => __DIR__ . '/../../..' . '/libraries/src/Mail/Mail.php', - 'Joomla\\CMS\\Mail\\MailHelper' => __DIR__ . '/../../..' . '/libraries/src/Mail/MailHelper.php', - 'Joomla\\CMS\\Menu\\AbstractMenu' => __DIR__ . '/../../..' . '/libraries/src/Menu/AbstractMenu.php', - 'Joomla\\CMS\\Menu\\AdministratorMenu' => __DIR__ . '/../../..' . '/libraries/src/Menu/AdministratorMenu.php', - 'Joomla\\CMS\\Menu\\MenuFactory' => __DIR__ . '/../../..' . '/libraries/src/Menu/MenuFactory.php', - 'Joomla\\CMS\\Menu\\MenuFactoryInterface' => __DIR__ . '/../../..' . '/libraries/src/Menu/MenuFactoryInterface.php', - 'Joomla\\CMS\\Menu\\MenuHelper' => __DIR__ . '/../../..' . '/libraries/src/Menu/MenuHelper.php', - 'Joomla\\CMS\\Menu\\MenuItem' => __DIR__ . '/../../..' . '/libraries/src/Menu/MenuItem.php', - 'Joomla\\CMS\\Menu\\Node' => __DIR__ . '/../../..' . '/libraries/src/Menu/Node.php', - 'Joomla\\CMS\\Menu\\Node\\Component' => __DIR__ . '/../../..' . '/libraries/src/Menu/Node/Component.php', - 'Joomla\\CMS\\Menu\\Node\\Container' => __DIR__ . '/../../..' . '/libraries/src/Menu/Node/Container.php', - 'Joomla\\CMS\\Menu\\Node\\Heading' => __DIR__ . '/../../..' . '/libraries/src/Menu/Node/Heading.php', - 'Joomla\\CMS\\Menu\\Node\\Separator' => __DIR__ . '/../../..' . '/libraries/src/Menu/Node/Separator.php', - 'Joomla\\CMS\\Menu\\Node\\Url' => __DIR__ . '/../../..' . '/libraries/src/Menu/Node/Url.php', - 'Joomla\\CMS\\Menu\\SiteMenu' => __DIR__ . '/../../..' . '/libraries/src/Menu/SiteMenu.php', - 'Joomla\\CMS\\Menu\\Tree' => __DIR__ . '/../../..' . '/libraries/src/Menu/Tree.php', - 'Joomla\\CMS\\Microdata\\Microdata' => __DIR__ . '/../../..' . '/libraries/src/Microdata/Microdata.php', - 'Joomla\\CMS\\Object\\CMSObject' => __DIR__ . '/../../..' . '/libraries/src/Object/CMSObject.php', - 'Joomla\\CMS\\Pagination\\Pagination' => __DIR__ . '/../../..' . '/libraries/src/Pagination/Pagination.php', - 'Joomla\\CMS\\Pagination\\PaginationObject' => __DIR__ . '/../../..' . '/libraries/src/Pagination/PaginationObject.php', - 'Joomla\\CMS\\Pathway\\Pathway' => __DIR__ . '/../../..' . '/libraries/src/Pathway/Pathway.php', - 'Joomla\\CMS\\Pathway\\SitePathway' => __DIR__ . '/../../..' . '/libraries/src/Pathway/SitePathway.php', - 'Joomla\\CMS\\Plugin\\CMSPlugin' => __DIR__ . '/../../..' . '/libraries/src/Plugin/CMSPlugin.php', - 'Joomla\\CMS\\Plugin\\PluginHelper' => __DIR__ . '/../../..' . '/libraries/src/Plugin/PluginHelper.php', - 'Joomla\\CMS\\Profiler\\Profiler' => __DIR__ . '/../../..' . '/libraries/src/Profiler/Profiler.php', - 'Joomla\\CMS\\Response\\JsonResponse' => __DIR__ . '/../../..' . '/libraries/src/Response/JsonResponse.php', - 'Joomla\\CMS\\Router\\AdministratorRouter' => __DIR__ . '/../../..' . '/libraries/src/Router/AdministratorRouter.php', - 'Joomla\\CMS\\Router\\Exception\\RouteNotFoundException' => __DIR__ . '/../../..' . '/libraries/src/Router/Exception/RouteNotFoundException.php', - 'Joomla\\CMS\\Router\\Route' => __DIR__ . '/../../..' . '/libraries/src/Router/Route.php', - 'Joomla\\CMS\\Router\\Router' => __DIR__ . '/../../..' . '/libraries/src/Router/Router.php', - 'Joomla\\CMS\\Router\\SiteRouter' => __DIR__ . '/../../..' . '/libraries/src/Router/SiteRouter.php', - 'Joomla\\CMS\\Schema\\ChangeItem' => __DIR__ . '/../../..' . '/libraries/src/Schema/ChangeItem.php', - 'Joomla\\CMS\\Schema\\ChangeItem\\MysqlChangeItem' => __DIR__ . '/../../..' . '/libraries/src/Schema/ChangeItem/MysqlChangeItem.php', - 'Joomla\\CMS\\Schema\\ChangeItem\\PostgresqlChangeItem' => __DIR__ . '/../../..' . '/libraries/src/Schema/ChangeItem/PostgresqlChangeItem.php', - 'Joomla\\CMS\\Schema\\ChangeItem\\SqlsrvChangeItem' => __DIR__ . '/../../..' . '/libraries/src/Schema/ChangeItem/SqlsrvChangeItem.php', - 'Joomla\\CMS\\Schema\\ChangeSet' => __DIR__ . '/../../..' . '/libraries/src/Schema/ChangeSet.php', - 'Joomla\\CMS\\Service\\Provider\\Application' => __DIR__ . '/../../..' . '/libraries/src/Service/Provider/Application.php', - 'Joomla\\CMS\\Service\\Provider\\Authentication' => __DIR__ . '/../../..' . '/libraries/src/Service/Provider/Authentication.php', - 'Joomla\\CMS\\Service\\Provider\\Config' => __DIR__ . '/../../..' . '/libraries/src/Service/Provider/Config.php', - 'Joomla\\CMS\\Service\\Provider\\Console' => __DIR__ . '/../../..' . '/libraries/src/Service/Provider/Console.php', - 'Joomla\\CMS\\Service\\Provider\\Database' => __DIR__ . '/../../..' . '/libraries/src/Service/Provider/Database.php', - 'Joomla\\CMS\\Service\\Provider\\Dispatcher' => __DIR__ . '/../../..' . '/libraries/src/Service/Provider/Dispatcher.php', - 'Joomla\\CMS\\Service\\Provider\\Document' => __DIR__ . '/../../..' . '/libraries/src/Service/Provider/Document.php', - 'Joomla\\CMS\\Service\\Provider\\Form' => __DIR__ . '/../../..' . '/libraries/src/Service/Provider/Form.php', - 'Joomla\\CMS\\Service\\Provider\\HTMLRegistry' => __DIR__ . '/../../..' . '/libraries/src/Service/Provider/HTMLRegistry.php', - 'Joomla\\CMS\\Service\\Provider\\Logger' => __DIR__ . '/../../..' . '/libraries/src/Service/Provider/Logger.php', - 'Joomla\\CMS\\Service\\Provider\\Menu' => __DIR__ . '/../../..' . '/libraries/src/Service/Provider/Menu.php', - 'Joomla\\CMS\\Service\\Provider\\Pathway' => __DIR__ . '/../../..' . '/libraries/src/Service/Provider/Pathway.php', - 'Joomla\\CMS\\Service\\Provider\\Session' => __DIR__ . '/../../..' . '/libraries/src/Service/Provider/Session.php', - 'Joomla\\CMS\\Service\\Provider\\Toolbar' => __DIR__ . '/../../..' . '/libraries/src/Service/Provider/Toolbar.php', - 'Joomla\\CMS\\Session\\Exception\\UnsupportedStorageException' => __DIR__ . '/../../..' . '/libraries/src/Session/Exception/UnsupportedStorageException.php', - 'Joomla\\CMS\\Session\\Session' => __DIR__ . '/../../..' . '/libraries/src/Session/Session.php', - 'Joomla\\CMS\\Session\\Storage\\JoomlaStorage' => __DIR__ . '/../../..' . '/libraries/src/Session/Storage/JoomlaStorage.php', - 'Joomla\\CMS\\String\\PunycodeHelper' => __DIR__ . '/../../..' . '/libraries/src/String/PunycodeHelper.php', - 'Joomla\\CMS\\Table\\Asset' => __DIR__ . '/../../..' . '/libraries/src/Table/Asset.php', - 'Joomla\\CMS\\Table\\Category' => __DIR__ . '/../../..' . '/libraries/src/Table/Category.php', - 'Joomla\\CMS\\Table\\Content' => __DIR__ . '/../../..' . '/libraries/src/Table/Content.php', - 'Joomla\\CMS\\Table\\ContentHistory' => __DIR__ . '/../../..' . '/libraries/src/Table/ContentHistory.php', - 'Joomla\\CMS\\Table\\ContentType' => __DIR__ . '/../../..' . '/libraries/src/Table/ContentType.php', - 'Joomla\\CMS\\Table\\CoreContent' => __DIR__ . '/../../..' . '/libraries/src/Table/CoreContent.php', - 'Joomla\\CMS\\Table\\Extension' => __DIR__ . '/../../..' . '/libraries/src/Table/Extension.php', - 'Joomla\\CMS\\Table\\Language' => __DIR__ . '/../../..' . '/libraries/src/Table/Language.php', - 'Joomla\\CMS\\Table\\Menu' => __DIR__ . '/../../..' . '/libraries/src/Table/Menu.php', - 'Joomla\\CMS\\Table\\MenuType' => __DIR__ . '/../../..' . '/libraries/src/Table/MenuType.php', - 'Joomla\\CMS\\Table\\Module' => __DIR__ . '/../../..' . '/libraries/src/Table/Module.php', - 'Joomla\\CMS\\Table\\Nested' => __DIR__ . '/../../..' . '/libraries/src/Table/Nested.php', - 'Joomla\\CMS\\Table\\Table' => __DIR__ . '/../../..' . '/libraries/src/Table/Table.php', - 'Joomla\\CMS\\Table\\TableInterface' => __DIR__ . '/../../..' . '/libraries/src/Table/TableInterface.php', - 'Joomla\\CMS\\Table\\Ucm' => __DIR__ . '/../../..' . '/libraries/src/Table/Ucm.php', - 'Joomla\\CMS\\Table\\Update' => __DIR__ . '/../../..' . '/libraries/src/Table/Update.php', - 'Joomla\\CMS\\Table\\UpdateSite' => __DIR__ . '/../../..' . '/libraries/src/Table/UpdateSite.php', - 'Joomla\\CMS\\Table\\User' => __DIR__ . '/../../..' . '/libraries/src/Table/User.php', - 'Joomla\\CMS\\Table\\Usergroup' => __DIR__ . '/../../..' . '/libraries/src/Table/Usergroup.php', - 'Joomla\\CMS\\Table\\ViewLevel' => __DIR__ . '/../../..' . '/libraries/src/Table/ViewLevel.php', - 'Joomla\\CMS\\Toolbar\\Button\\AbstractGroupButton' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/Button/AbstractGroupButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\BasicButton' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/Button/BasicButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\ConfirmButton' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/Button/ConfirmButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\CustomButton' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/Button/CustomButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\DropdownButton' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/Button/DropdownButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\HelpButton' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/Button/HelpButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\LinkButton' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/Button/LinkButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\PopupButton' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/Button/PopupButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\SeparatorButton' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/Button/SeparatorButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\SliderButton' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/Button/SliderButton.php', - 'Joomla\\CMS\\Toolbar\\Button\\StandardButton' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/Button/StandardButton.php', - 'Joomla\\CMS\\Toolbar\\ContainerAwareToolbarFactory' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/ContainerAwareToolbarFactory.php', - 'Joomla\\CMS\\Toolbar\\CoreButtonsTrait' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/CoreButtonsTrait.php', - 'Joomla\\CMS\\Toolbar\\Toolbar' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/Toolbar.php', - 'Joomla\\CMS\\Toolbar\\ToolbarButton' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/ToolbarButton.php', - 'Joomla\\CMS\\Toolbar\\ToolbarFactoryInterface' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/ToolbarFactoryInterface.php', - 'Joomla\\CMS\\Toolbar\\ToolbarHelper' => __DIR__ . '/../../..' . '/libraries/src/Toolbar/ToolbarHelper.php', - 'Joomla\\CMS\\UCM\\UCM' => __DIR__ . '/../../..' . '/libraries/src/UCM/UCM.php', - 'Joomla\\CMS\\UCM\\UCMBase' => __DIR__ . '/../../..' . '/libraries/src/UCM/UCMBase.php', - 'Joomla\\CMS\\UCM\\UCMContent' => __DIR__ . '/../../..' . '/libraries/src/UCM/UCMContent.php', - 'Joomla\\CMS\\UCM\\UCMType' => __DIR__ . '/../../..' . '/libraries/src/UCM/UCMType.php', - 'Joomla\\CMS\\Updater\\Adapter\\CollectionAdapter' => __DIR__ . '/../../..' . '/libraries/src/Updater/Adapter/CollectionAdapter.php', - 'Joomla\\CMS\\Updater\\Adapter\\ExtensionAdapter' => __DIR__ . '/../../..' . '/libraries/src/Updater/Adapter/ExtensionAdapter.php', - 'Joomla\\CMS\\Updater\\DownloadSource' => __DIR__ . '/../../..' . '/libraries/src/Updater/DownloadSource.php', - 'Joomla\\CMS\\Updater\\Update' => __DIR__ . '/../../..' . '/libraries/src/Updater/Update.php', - 'Joomla\\CMS\\Updater\\UpdateAdapter' => __DIR__ . '/../../..' . '/libraries/src/Updater/UpdateAdapter.php', - 'Joomla\\CMS\\Updater\\Updater' => __DIR__ . '/../../..' . '/libraries/src/Updater/Updater.php', - 'Joomla\\CMS\\Uri\\Uri' => __DIR__ . '/../../..' . '/libraries/src/Uri/Uri.php', - 'Joomla\\CMS\\User\\User' => __DIR__ . '/../../..' . '/libraries/src/User/User.php', - 'Joomla\\CMS\\User\\UserHelper' => __DIR__ . '/../../..' . '/libraries/src/User/UserHelper.php', - 'Joomla\\CMS\\User\\UserWrapper' => __DIR__ . '/../../..' . '/libraries/src/User/UserWrapper.php', - 'Joomla\\CMS\\Utility\\BufferStreamHandler' => __DIR__ . '/../../..' . '/libraries/src/Utility/BufferStreamHandler.php', - 'Joomla\\CMS\\Utility\\Utility' => __DIR__ . '/../../..' . '/libraries/src/Utility/Utility.php', - 'Joomla\\CMS\\Version' => __DIR__ . '/../../..' . '/libraries/src/Version.php', - 'Joomla\\Console\\AbstractCommand' => __DIR__ . '/..' . '/joomla/console/src/AbstractCommand.php', - 'Joomla\\Console\\Application' => __DIR__ . '/..' . '/joomla/console/src/Application.php', - 'Joomla\\Console\\CommandInterface' => __DIR__ . '/..' . '/joomla/console/src/CommandInterface.php', - 'Joomla\\Console\\Command\\HelpCommand' => __DIR__ . '/..' . '/joomla/console/src/Command/HelpCommand.php', - 'Joomla\\Console\\Command\\ListCommand' => __DIR__ . '/..' . '/joomla/console/src/Command/ListCommand.php', - 'Joomla\\Console\\ConsoleEvents' => __DIR__ . '/..' . '/joomla/console/src/ConsoleEvents.php', - 'Joomla\\Console\\Descriptor\\ApplicationDescription' => __DIR__ . '/..' . '/joomla/console/src/Descriptor/ApplicationDescription.php', - 'Joomla\\Console\\Descriptor\\TextDescriptor' => __DIR__ . '/..' . '/joomla/console/src/Descriptor/TextDescriptor.php', - 'Joomla\\Console\\Event\\BeforeCommandExecuteEvent' => __DIR__ . '/..' . '/joomla/console/src/Event/BeforeCommandExecuteEvent.php', - 'Joomla\\Console\\Event\\ConsoleErrorEvent' => __DIR__ . '/..' . '/joomla/console/src/Event/ConsoleErrorEvent.php', - 'Joomla\\Console\\Event\\ConsoleEvent' => __DIR__ . '/..' . '/joomla/console/src/Event/ConsoleEvent.php', - 'Joomla\\Console\\Event\\TerminateEvent' => __DIR__ . '/..' . '/joomla/console/src/Event/TerminateEvent.php', - 'Joomla\\Console\\Helper\\DescriptorHelper' => __DIR__ . '/..' . '/joomla/console/src/Helper/DescriptorHelper.php', - 'Joomla\\Console\\Input\\JoomlaInput' => __DIR__ . '/..' . '/joomla/console/src/Input/JoomlaInput.php', - 'Joomla\\Console\\Loader\\ContainerLoader' => __DIR__ . '/..' . '/joomla/console/src/Loader/ContainerLoader.php', - 'Joomla\\Console\\Loader\\LoaderInterface' => __DIR__ . '/..' . '/joomla/console/src/Loader/LoaderInterface.php', - 'Joomla\\Controller\\AbstractController' => __DIR__ . '/..' . '/joomla/controller/src/AbstractController.php', - 'Joomla\\Controller\\ControllerInterface' => __DIR__ . '/..' . '/joomla/controller/src/ControllerInterface.php', - 'Joomla\\Crypt\\CipherInterface' => __DIR__ . '/..' . '/joomla/crypt/src/CipherInterface.php', - 'Joomla\\Crypt\\Cipher\\Crypto' => __DIR__ . '/..' . '/joomla/crypt/src/Cipher/Crypto.php', - 'Joomla\\Crypt\\Cipher\\OpenSSL' => __DIR__ . '/..' . '/joomla/crypt/src/Cipher/OpenSSL.php', - 'Joomla\\Crypt\\Cipher\\Sodium' => __DIR__ . '/..' . '/joomla/crypt/src/Cipher/Sodium.php', - 'Joomla\\Crypt\\Crypt' => __DIR__ . '/..' . '/joomla/crypt/src/Crypt.php', - 'Joomla\\Crypt\\Exception\\InvalidKeyTypeException' => __DIR__ . '/..' . '/joomla/crypt/src/Exception/InvalidKeyTypeException.php', - 'Joomla\\Crypt\\Key' => __DIR__ . '/..' . '/joomla/crypt/src/Key.php', - 'Joomla\\DI\\Container' => __DIR__ . '/..' . '/joomla/di/src/Container.php', - 'Joomla\\DI\\ContainerAwareInterface' => __DIR__ . '/..' . '/joomla/di/src/ContainerAwareInterface.php', - 'Joomla\\DI\\ContainerAwareTrait' => __DIR__ . '/..' . '/joomla/di/src/ContainerAwareTrait.php', - 'Joomla\\DI\\Exception\\ContainerNotFoundException' => __DIR__ . '/..' . '/joomla/di/src/Exception/ContainerNotFoundException.php', - 'Joomla\\DI\\Exception\\DependencyResolutionException' => __DIR__ . '/..' . '/joomla/di/src/Exception/DependencyResolutionException.php', - 'Joomla\\DI\\Exception\\KeyNotFoundException' => __DIR__ . '/..' . '/joomla/di/src/Exception/KeyNotFoundException.php', - 'Joomla\\DI\\Exception\\ProtectedKeyException' => __DIR__ . '/..' . '/joomla/di/src/Exception/ProtectedKeyException.php', - 'Joomla\\DI\\Resource' => __DIR__ . '/..' . '/joomla/di/src/Resource.php', - 'Joomla\\DI\\ServiceProviderInterface' => __DIR__ . '/..' . '/joomla/di/src/ServiceProviderInterface.php', - 'Joomla\\Data\\DataObject' => __DIR__ . '/..' . '/joomla/data/src/DataObject.php', - 'Joomla\\Data\\DataSet' => __DIR__ . '/..' . '/joomla/data/src/DataSet.php', - 'Joomla\\Data\\DumpableInterface' => __DIR__ . '/..' . '/joomla/data/src/DumpableInterface.php', - 'Joomla\\Database\\DatabaseDriver' => __DIR__ . '/..' . '/joomla/database/src/DatabaseDriver.php', - 'Joomla\\Database\\DatabaseEvents' => __DIR__ . '/..' . '/joomla/database/src/DatabaseEvents.php', - 'Joomla\\Database\\DatabaseExporter' => __DIR__ . '/..' . '/joomla/database/src/DatabaseExporter.php', - 'Joomla\\Database\\DatabaseFactory' => __DIR__ . '/..' . '/joomla/database/src/DatabaseFactory.php', - 'Joomla\\Database\\DatabaseImporter' => __DIR__ . '/..' . '/joomla/database/src/DatabaseImporter.php', - 'Joomla\\Database\\DatabaseInterface' => __DIR__ . '/..' . '/joomla/database/src/DatabaseInterface.php', - 'Joomla\\Database\\DatabaseIterator' => __DIR__ . '/..' . '/joomla/database/src/DatabaseIterator.php', - 'Joomla\\Database\\DatabaseQuery' => __DIR__ . '/..' . '/joomla/database/src/DatabaseQuery.php', - 'Joomla\\Database\\Event\\ConnectionEvent' => __DIR__ . '/..' . '/joomla/database/src/Event/ConnectionEvent.php', - 'Joomla\\Database\\Exception\\ConnectionFailureException' => __DIR__ . '/..' . '/joomla/database/src/Exception/ConnectionFailureException.php', - 'Joomla\\Database\\Exception\\ExecutionFailureException' => __DIR__ . '/..' . '/joomla/database/src/Exception/ExecutionFailureException.php', - 'Joomla\\Database\\Exception\\PrepareStatementFailureException' => __DIR__ . '/..' . '/joomla/database/src/Exception/PrepareStatementFailureException.php', - 'Joomla\\Database\\Exception\\UnsupportedAdapterException' => __DIR__ . '/..' . '/joomla/database/src/Exception/UnsupportedAdapterException.php', - 'Joomla\\Database\\FetchMode' => __DIR__ . '/..' . '/joomla/database/src/FetchMode.php', - 'Joomla\\Database\\FetchOrientation' => __DIR__ . '/..' . '/joomla/database/src/FetchOrientation.php', - 'Joomla\\Database\\Monitor\\ChainedMonitor' => __DIR__ . '/..' . '/joomla/database/src/Monitor/ChainedMonitor.php', - 'Joomla\\Database\\Monitor\\LoggingMonitor' => __DIR__ . '/..' . '/joomla/database/src/Monitor/LoggingMonitor.php', - 'Joomla\\Database\\Mysql\\MysqlDriver' => __DIR__ . '/..' . '/joomla/database/src/Mysql/MysqlDriver.php', - 'Joomla\\Database\\Mysql\\MysqlExporter' => __DIR__ . '/..' . '/joomla/database/src/Mysql/MysqlExporter.php', - 'Joomla\\Database\\Mysql\\MysqlImporter' => __DIR__ . '/..' . '/joomla/database/src/Mysql/MysqlImporter.php', - 'Joomla\\Database\\Mysql\\MysqlQuery' => __DIR__ . '/..' . '/joomla/database/src/Mysql/MysqlQuery.php', - 'Joomla\\Database\\Mysqli\\MysqliDriver' => __DIR__ . '/..' . '/joomla/database/src/Mysqli/MysqliDriver.php', - 'Joomla\\Database\\Mysqli\\MysqliExporter' => __DIR__ . '/..' . '/joomla/database/src/Mysqli/MysqliExporter.php', - 'Joomla\\Database\\Mysqli\\MysqliImporter' => __DIR__ . '/..' . '/joomla/database/src/Mysqli/MysqliImporter.php', - 'Joomla\\Database\\Mysqli\\MysqliQuery' => __DIR__ . '/..' . '/joomla/database/src/Mysqli/MysqliQuery.php', - 'Joomla\\Database\\Mysqli\\MysqliStatement' => __DIR__ . '/..' . '/joomla/database/src/Mysqli/MysqliStatement.php', - 'Joomla\\Database\\ParameterType' => __DIR__ . '/..' . '/joomla/database/src/ParameterType.php', - 'Joomla\\Database\\Pdo\\PdoDriver' => __DIR__ . '/..' . '/joomla/database/src/Pdo/PdoDriver.php', - 'Joomla\\Database\\Pdo\\PdoQuery' => __DIR__ . '/..' . '/joomla/database/src/Pdo/PdoQuery.php', - 'Joomla\\Database\\Pdo\\PdoStatement' => __DIR__ . '/..' . '/joomla/database/src/Pdo/PdoStatement.php', - 'Joomla\\Database\\Pgsql\\PgsqlDriver' => __DIR__ . '/..' . '/joomla/database/src/Pgsql/PgsqlDriver.php', - 'Joomla\\Database\\Pgsql\\PgsqlExporter' => __DIR__ . '/..' . '/joomla/database/src/Pgsql/PgsqlExporter.php', - 'Joomla\\Database\\Pgsql\\PgsqlImporter' => __DIR__ . '/..' . '/joomla/database/src/Pgsql/PgsqlImporter.php', - 'Joomla\\Database\\Pgsql\\PgsqlQuery' => __DIR__ . '/..' . '/joomla/database/src/Pgsql/PgsqlQuery.php', - 'Joomla\\Database\\QueryInterface' => __DIR__ . '/..' . '/joomla/database/src/QueryInterface.php', - 'Joomla\\Database\\QueryMonitorInterface' => __DIR__ . '/..' . '/joomla/database/src/QueryMonitorInterface.php', - 'Joomla\\Database\\Query\\LimitableInterface' => __DIR__ . '/..' . '/joomla/database/src/Query/LimitableInterface.php', - 'Joomla\\Database\\Query\\MysqlQueryBuilder' => __DIR__ . '/..' . '/joomla/database/src/Query/MysqlQueryBuilder.php', - 'Joomla\\Database\\Query\\PostgresqlQueryBuilder' => __DIR__ . '/..' . '/joomla/database/src/Query/PostgresqlQueryBuilder.php', - 'Joomla\\Database\\Query\\PreparableInterface' => __DIR__ . '/..' . '/joomla/database/src/Query/PreparableInterface.php', - 'Joomla\\Database\\Query\\QueryElement' => __DIR__ . '/..' . '/joomla/database/src/Query/QueryElement.php', - 'Joomla\\Database\\Service\\DatabaseProvider' => __DIR__ . '/..' . '/joomla/database/src/Service/DatabaseProvider.php', - 'Joomla\\Database\\Sqlazure\\SqlazureDriver' => __DIR__ . '/..' . '/joomla/database/src/Sqlazure/SqlazureDriver.php', - 'Joomla\\Database\\Sqlazure\\SqlazureQuery' => __DIR__ . '/..' . '/joomla/database/src/Sqlazure/SqlazureQuery.php', - 'Joomla\\Database\\Sqlite\\SqliteDriver' => __DIR__ . '/..' . '/joomla/database/src/Sqlite/SqliteDriver.php', - 'Joomla\\Database\\Sqlite\\SqliteQuery' => __DIR__ . '/..' . '/joomla/database/src/Sqlite/SqliteQuery.php', - 'Joomla\\Database\\Sqlsrv\\SqlsrvDriver' => __DIR__ . '/..' . '/joomla/database/src/Sqlsrv/SqlsrvDriver.php', - 'Joomla\\Database\\Sqlsrv\\SqlsrvQuery' => __DIR__ . '/..' . '/joomla/database/src/Sqlsrv/SqlsrvQuery.php', - 'Joomla\\Database\\Sqlsrv\\SqlsrvStatement' => __DIR__ . '/..' . '/joomla/database/src/Sqlsrv/SqlsrvStatement.php', - 'Joomla\\Database\\StatementInterface' => __DIR__ . '/..' . '/joomla/database/src/StatementInterface.php', - 'Joomla\\Database\\UTF8MB4SupportInterface' => __DIR__ . '/..' . '/joomla/database/src/UTF8MB4SupportInterface.php', - 'Joomla\\Event\\AbstractEvent' => __DIR__ . '/..' . '/joomla/event/src/AbstractEvent.php', - 'Joomla\\Event\\DelegatingDispatcher' => __DIR__ . '/..' . '/joomla/event/src/DelegatingDispatcher.php', - 'Joomla\\Event\\Dispatcher' => __DIR__ . '/..' . '/joomla/event/src/Dispatcher.php', - 'Joomla\\Event\\DispatcherAwareInterface' => __DIR__ . '/..' . '/joomla/event/src/DispatcherAwareInterface.php', - 'Joomla\\Event\\DispatcherAwareTrait' => __DIR__ . '/..' . '/joomla/event/src/DispatcherAwareTrait.php', - 'Joomla\\Event\\DispatcherInterface' => __DIR__ . '/..' . '/joomla/event/src/DispatcherInterface.php', - 'Joomla\\Event\\Event' => __DIR__ . '/..' . '/joomla/event/src/Event.php', - 'Joomla\\Event\\EventImmutable' => __DIR__ . '/..' . '/joomla/event/src/EventImmutable.php', - 'Joomla\\Event\\EventInterface' => __DIR__ . '/..' . '/joomla/event/src/EventInterface.php', - 'Joomla\\Event\\ListenersPriorityQueue' => __DIR__ . '/..' . '/joomla/event/src/ListenersPriorityQueue.php', - 'Joomla\\Event\\Priority' => __DIR__ . '/..' . '/joomla/event/src/Priority.php', - 'Joomla\\Event\\SubscriberInterface' => __DIR__ . '/..' . '/joomla/event/src/SubscriberInterface.php', - 'Joomla\\Filesystem\\Buffer' => __DIR__ . '/..' . '/joomla/filesystem/src/Buffer.php', - 'Joomla\\Filesystem\\Clients\\FtpClient' => __DIR__ . '/..' . '/joomla/filesystem/src/Clients/FtpClient.php', - 'Joomla\\Filesystem\\Exception\\FilesystemException' => __DIR__ . '/..' . '/joomla/filesystem/src/Exception/FilesystemException.php', - 'Joomla\\Filesystem\\File' => __DIR__ . '/..' . '/joomla/filesystem/src/File.php', - 'Joomla\\Filesystem\\Folder' => __DIR__ . '/..' . '/joomla/filesystem/src/Folder.php', - 'Joomla\\Filesystem\\Helper' => __DIR__ . '/..' . '/joomla/filesystem/src/Helper.php', - 'Joomla\\Filesystem\\Patcher' => __DIR__ . '/..' . '/joomla/filesystem/src/Patcher.php', - 'Joomla\\Filesystem\\Path' => __DIR__ . '/..' . '/joomla/filesystem/src/Path.php', - 'Joomla\\Filesystem\\Stream' => __DIR__ . '/..' . '/joomla/filesystem/src/Stream.php', - 'Joomla\\Filesystem\\Stream\\String' => __DIR__ . '/..' . '/joomla/filesystem/src/Stream/String.php', - 'Joomla\\Filesystem\\Stream\\StringWrapper' => __DIR__ . '/..' . '/joomla/filesystem/src/Stream/StringWrapper.php', - 'Joomla\\Filesystem\\Support\\StringController' => __DIR__ . '/..' . '/joomla/filesystem/src/Support/StringController.php', - 'Joomla\\Filter\\InputFilter' => __DIR__ . '/..' . '/joomla/filter/src/InputFilter.php', - 'Joomla\\Filter\\OutputFilter' => __DIR__ . '/..' . '/joomla/filter/src/OutputFilter.php', - 'Joomla\\Http\\AbstractTransport' => __DIR__ . '/..' . '/joomla/http/src/AbstractTransport.php', - 'Joomla\\Http\\Exception\\InvalidResponseCodeException' => __DIR__ . '/..' . '/joomla/http/src/Exception/InvalidResponseCodeException.php', - 'Joomla\\Http\\Exception\\UnexpectedResponseException' => __DIR__ . '/..' . '/joomla/http/src/Exception/UnexpectedResponseException.php', - 'Joomla\\Http\\Http' => __DIR__ . '/..' . '/joomla/http/src/Http.php', - 'Joomla\\Http\\HttpFactory' => __DIR__ . '/..' . '/joomla/http/src/HttpFactory.php', - 'Joomla\\Http\\Response' => __DIR__ . '/..' . '/joomla/http/src/Response.php', - 'Joomla\\Http\\TransportInterface' => __DIR__ . '/..' . '/joomla/http/src/TransportInterface.php', - 'Joomla\\Http\\Transport\\Curl' => __DIR__ . '/..' . '/joomla/http/src/Transport/Curl.php', - 'Joomla\\Http\\Transport\\Socket' => __DIR__ . '/..' . '/joomla/http/src/Transport/Socket.php', - 'Joomla\\Http\\Transport\\Stream' => __DIR__ . '/..' . '/joomla/http/src/Transport/Stream.php', - 'Joomla\\Image\\Filter\\Backgroundfill' => __DIR__ . '/..' . '/joomla/image/src/Filter/Backgroundfill.php', - 'Joomla\\Image\\Filter\\Brightness' => __DIR__ . '/..' . '/joomla/image/src/Filter/Brightness.php', - 'Joomla\\Image\\Filter\\Contrast' => __DIR__ . '/..' . '/joomla/image/src/Filter/Contrast.php', - 'Joomla\\Image\\Filter\\Edgedetect' => __DIR__ . '/..' . '/joomla/image/src/Filter/Edgedetect.php', - 'Joomla\\Image\\Filter\\Emboss' => __DIR__ . '/..' . '/joomla/image/src/Filter/Emboss.php', - 'Joomla\\Image\\Filter\\Grayscale' => __DIR__ . '/..' . '/joomla/image/src/Filter/Grayscale.php', - 'Joomla\\Image\\Filter\\Negate' => __DIR__ . '/..' . '/joomla/image/src/Filter/Negate.php', - 'Joomla\\Image\\Filter\\Sketchy' => __DIR__ . '/..' . '/joomla/image/src/Filter/Sketchy.php', - 'Joomla\\Image\\Filter\\Smooth' => __DIR__ . '/..' . '/joomla/image/src/Filter/Smooth.php', - 'Joomla\\Image\\Image' => __DIR__ . '/..' . '/joomla/image/src/Image.php', - 'Joomla\\Image\\ImageFilter' => __DIR__ . '/..' . '/joomla/image/src/ImageFilter.php', - 'Joomla\\Input\\Cli' => __DIR__ . '/..' . '/joomla/input/src/Cli.php', - 'Joomla\\Input\\Cookie' => __DIR__ . '/..' . '/joomla/input/src/Cookie.php', - 'Joomla\\Input\\Files' => __DIR__ . '/..' . '/joomla/input/src/Files.php', - 'Joomla\\Input\\Input' => __DIR__ . '/..' . '/joomla/input/src/Input.php', - 'Joomla\\Input\\Json' => __DIR__ . '/..' . '/joomla/input/src/Json.php', - 'Joomla\\Ldap\\LdapClient' => __DIR__ . '/..' . '/joomla/ldap/src/LdapClient.php', - 'Joomla\\OAuth1\\Client' => __DIR__ . '/..' . '/joomla/oauth1/src/Client.php', - 'Joomla\\OAuth2\\Client' => __DIR__ . '/..' . '/joomla/oauth2/src/Client.php', - 'Joomla\\Registry\\Factory' => __DIR__ . '/..' . '/joomla/registry/src/Factory.php', - 'Joomla\\Registry\\FormatInterface' => __DIR__ . '/..' . '/joomla/registry/src/FormatInterface.php', - 'Joomla\\Registry\\Format\\Ini' => __DIR__ . '/..' . '/joomla/registry/src/Format/Ini.php', - 'Joomla\\Registry\\Format\\Json' => __DIR__ . '/..' . '/joomla/registry/src/Format/Json.php', - 'Joomla\\Registry\\Format\\Php' => __DIR__ . '/..' . '/joomla/registry/src/Format/Php.php', - 'Joomla\\Registry\\Format\\Xml' => __DIR__ . '/..' . '/joomla/registry/src/Format/Xml.php', - 'Joomla\\Registry\\Format\\Yaml' => __DIR__ . '/..' . '/joomla/registry/src/Format/Yaml.php', - 'Joomla\\Registry\\Registry' => __DIR__ . '/..' . '/joomla/registry/src/Registry.php', - 'Joomla\\Session\\Exception\\InvalidSessionException' => __DIR__ . '/..' . '/joomla/session/src/Exception/InvalidSessionException.php', - 'Joomla\\Session\\HandlerInterface' => __DIR__ . '/..' . '/joomla/session/src/HandlerInterface.php', - 'Joomla\\Session\\Handler\\ApcuHandler' => __DIR__ . '/..' . '/joomla/session/src/Handler/ApcuHandler.php', - 'Joomla\\Session\\Handler\\DatabaseHandler' => __DIR__ . '/..' . '/joomla/session/src/Handler/DatabaseHandler.php', - 'Joomla\\Session\\Handler\\FilesystemHandler' => __DIR__ . '/..' . '/joomla/session/src/Handler/FilesystemHandler.php', - 'Joomla\\Session\\Handler\\MemcachedHandler' => __DIR__ . '/..' . '/joomla/session/src/Handler/MemcachedHandler.php', - 'Joomla\\Session\\Handler\\RedisHandler' => __DIR__ . '/..' . '/joomla/session/src/Handler/RedisHandler.php', - 'Joomla\\Session\\Handler\\WincacheHandler' => __DIR__ . '/..' . '/joomla/session/src/Handler/WincacheHandler.php', - 'Joomla\\Session\\Session' => __DIR__ . '/..' . '/joomla/session/src/Session.php', - 'Joomla\\Session\\SessionEvent' => __DIR__ . '/..' . '/joomla/session/src/SessionEvent.php', - 'Joomla\\Session\\SessionEvents' => __DIR__ . '/..' . '/joomla/session/src/SessionEvents.php', - 'Joomla\\Session\\SessionInterface' => __DIR__ . '/..' . '/joomla/session/src/SessionInterface.php', - 'Joomla\\Session\\StorageInterface' => __DIR__ . '/..' . '/joomla/session/src/StorageInterface.php', - 'Joomla\\Session\\Storage\\NativeStorage' => __DIR__ . '/..' . '/joomla/session/src/Storage/NativeStorage.php', - 'Joomla\\Session\\Storage\\RuntimeStorage' => __DIR__ . '/..' . '/joomla/session/src/Storage/RuntimeStorage.php', - 'Joomla\\Session\\ValidatorInterface' => __DIR__ . '/..' . '/joomla/session/src/ValidatorInterface.php', - 'Joomla\\Session\\Validator\\AddressValidator' => __DIR__ . '/..' . '/joomla/session/src/Validator/AddressValidator.php', - 'Joomla\\Session\\Validator\\ForwardedValidator' => __DIR__ . '/..' . '/joomla/session/src/Validator/ForwardedValidator.php', - 'Joomla\\String\\Inflector' => __DIR__ . '/..' . '/joomla/string/src/Inflector.php', - 'Joomla\\String\\Normalise' => __DIR__ . '/..' . '/joomla/string/src/Normalise.php', - 'Joomla\\String\\StringHelper' => __DIR__ . '/..' . '/joomla/string/src/StringHelper.php', - 'Joomla\\Uri\\AbstractUri' => __DIR__ . '/..' . '/joomla/uri/src/AbstractUri.php', - 'Joomla\\Uri\\Uri' => __DIR__ . '/..' . '/joomla/uri/src/Uri.php', - 'Joomla\\Uri\\UriHelper' => __DIR__ . '/..' . '/joomla/uri/src/UriHelper.php', - 'Joomla\\Uri\\UriImmutable' => __DIR__ . '/..' . '/joomla/uri/src/UriImmutable.php', - 'Joomla\\Uri\\UriInterface' => __DIR__ . '/..' . '/joomla/uri/src/UriInterface.php', - 'Joomla\\Utilities\\ArrayHelper' => __DIR__ . '/..' . '/joomla/utilities/src/ArrayHelper.php', - 'Mso\\IdnaConvert\\EncodingHelper' => __DIR__ . '/..' . '/mso/idna-convert/src/EncodingHelper.php', - 'Mso\\IdnaConvert\\IdnaConvert' => __DIR__ . '/..' . '/mso/idna-convert/src/IdnaConvert.php', - 'Mso\\IdnaConvert\\NamePrepData' => __DIR__ . '/..' . '/mso/idna-convert/src/NamePrepData.php', - 'Mso\\IdnaConvert\\NamePrepData2003' => __DIR__ . '/..' . '/mso/idna-convert/src/NamePrepData2003.php', - 'Mso\\IdnaConvert\\NamePrepDataInterface' => __DIR__ . '/..' . '/mso/idna-convert/src/NamePrepDataInterface.php', - 'Mso\\IdnaConvert\\Punycode' => __DIR__ . '/..' . '/mso/idna-convert/src/Punycode.php', - 'Mso\\IdnaConvert\\PunycodeInterface' => __DIR__ . '/..' . '/mso/idna-convert/src/PunycodeInterface.php', - 'Mso\\IdnaConvert\\UnicodeTranscoder' => __DIR__ . '/..' . '/mso/idna-convert/src/UnicodeTranscoder.php', - 'Mso\\IdnaConvert\\UnicodeTranscoderInterface' => __DIR__ . '/..' . '/mso/idna-convert/src/UnicodeTranscoderInterface.php', - 'PHPMailer\\PHPMailer\\Exception' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/Exception.php', - 'PHPMailer\\PHPMailer\\OAuth' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/OAuth.php', - 'PHPMailer\\PHPMailer\\PHPMailer' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/PHPMailer.php', - 'PHPMailer\\PHPMailer\\POP3' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/POP3.php', - 'PHPMailer\\PHPMailer\\SMTP' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/SMTP.php', - 'Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php', - 'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php', - 'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php', - 'Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php', - 'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php', - 'Psr\\Http\\Message\\ResponseInterface' => __DIR__ . '/..' . '/psr/http-message/src/ResponseInterface.php', - 'Psr\\Http\\Message\\ServerRequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/ServerRequestInterface.php', - 'Psr\\Http\\Message\\StreamInterface' => __DIR__ . '/..' . '/psr/http-message/src/StreamInterface.php', - 'Psr\\Http\\Message\\UploadedFileInterface' => __DIR__ . '/..' . '/psr/http-message/src/UploadedFileInterface.php', - 'Psr\\Http\\Message\\UriInterface' => __DIR__ . '/..' . '/psr/http-message/src/UriInterface.php', - 'Psr\\Link\\EvolvableLinkInterface' => __DIR__ . '/..' . '/psr/link/src/EvolvableLinkInterface.php', - 'Psr\\Link\\EvolvableLinkProviderInterface' => __DIR__ . '/..' . '/psr/link/src/EvolvableLinkProviderInterface.php', - 'Psr\\Link\\LinkInterface' => __DIR__ . '/..' . '/psr/link/src/LinkInterface.php', - 'Psr\\Link\\LinkProviderInterface' => __DIR__ . '/..' . '/psr/link/src/LinkProviderInterface.php', - 'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/AbstractLogger.php', - 'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/Psr/Log/InvalidArgumentException.php', - 'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/Psr/Log/LogLevel.php', - 'Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareInterface.php', - 'Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareTrait.php', - 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php', - 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php', - 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php', - 'ReCaptcha\\ReCaptcha' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/ReCaptcha.php', - 'ReCaptcha\\RequestMethod' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/RequestMethod.php', - 'ReCaptcha\\RequestMethod\\Curl' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/RequestMethod/Curl.php', - 'ReCaptcha\\RequestMethod\\CurlPost' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/RequestMethod/CurlPost.php', - 'ReCaptcha\\RequestMethod\\Post' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php', - 'ReCaptcha\\RequestMethod\\Socket' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/RequestMethod/Socket.php', - 'ReCaptcha\\RequestMethod\\SocketPost' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/RequestMethod/SocketPost.php', - 'ReCaptcha\\RequestParameters' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/RequestParameters.php', - 'ReCaptcha\\Response' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/Response.php', - 'Symfony\\Component\\Console\\Application' => __DIR__ . '/..' . '/symfony/console/Application.php', - 'Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => __DIR__ . '/..' . '/symfony/console/CommandLoader/CommandLoaderInterface.php', - 'Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/ContainerCommandLoader.php', - 'Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/FactoryCommandLoader.php', - 'Symfony\\Component\\Console\\Command\\Command' => __DIR__ . '/..' . '/symfony/console/Command/Command.php', - 'Symfony\\Component\\Console\\Command\\HelpCommand' => __DIR__ . '/..' . '/symfony/console/Command/HelpCommand.php', - 'Symfony\\Component\\Console\\Command\\ListCommand' => __DIR__ . '/..' . '/symfony/console/Command/ListCommand.php', - 'Symfony\\Component\\Console\\Command\\LockableTrait' => __DIR__ . '/..' . '/symfony/console/Command/LockableTrait.php', - 'Symfony\\Component\\Console\\ConsoleEvents' => __DIR__ . '/..' . '/symfony/console/ConsoleEvents.php', - 'Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => __DIR__ . '/..' . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php', - 'Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => __DIR__ . '/..' . '/symfony/console/Descriptor/ApplicationDescription.php', - 'Symfony\\Component\\Console\\Descriptor\\Descriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/Descriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => __DIR__ . '/..' . '/symfony/console/Descriptor/DescriptorInterface.php', - 'Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/JsonDescriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/MarkdownDescriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/TextDescriptor.php', - 'Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/XmlDescriptor.php', - 'Symfony\\Component\\Console\\EventListener\\ErrorListener' => __DIR__ . '/..' . '/symfony/console/EventListener/ErrorListener.php', - 'Symfony\\Component\\Console\\Event\\ConsoleCommandEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleCommandEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleErrorEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleErrorEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleExceptionEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleExceptionEvent.php', - 'Symfony\\Component\\Console\\Event\\ConsoleTerminateEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleTerminateEvent.php', - 'Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => __DIR__ . '/..' . '/symfony/console/Exception/CommandNotFoundException.php', - 'Symfony\\Component\\Console\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/console/Exception/ExceptionInterface.php', - 'Symfony\\Component\\Console\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/console/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\Console\\Exception\\InvalidOptionException' => __DIR__ . '/..' . '/symfony/console/Exception/InvalidOptionException.php', - 'Symfony\\Component\\Console\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/console/Exception/LogicException.php', - 'Symfony\\Component\\Console\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/console/Exception/RuntimeException.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatter' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatter.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterInterface.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyle.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyleInterface.php', - 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleStack' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyleStack.php', - 'Symfony\\Component\\Console\\Helper\\DebugFormatterHelper' => __DIR__ . '/..' . '/symfony/console/Helper/DebugFormatterHelper.php', - 'Symfony\\Component\\Console\\Helper\\DescriptorHelper' => __DIR__ . '/..' . '/symfony/console/Helper/DescriptorHelper.php', - 'Symfony\\Component\\Console\\Helper\\FormatterHelper' => __DIR__ . '/..' . '/symfony/console/Helper/FormatterHelper.php', - 'Symfony\\Component\\Console\\Helper\\Helper' => __DIR__ . '/..' . '/symfony/console/Helper/Helper.php', - 'Symfony\\Component\\Console\\Helper\\HelperInterface' => __DIR__ . '/..' . '/symfony/console/Helper/HelperInterface.php', - 'Symfony\\Component\\Console\\Helper\\HelperSet' => __DIR__ . '/..' . '/symfony/console/Helper/HelperSet.php', - 'Symfony\\Component\\Console\\Helper\\InputAwareHelper' => __DIR__ . '/..' . '/symfony/console/Helper/InputAwareHelper.php', - 'Symfony\\Component\\Console\\Helper\\ProcessHelper' => __DIR__ . '/..' . '/symfony/console/Helper/ProcessHelper.php', - 'Symfony\\Component\\Console\\Helper\\ProgressBar' => __DIR__ . '/..' . '/symfony/console/Helper/ProgressBar.php', - 'Symfony\\Component\\Console\\Helper\\ProgressIndicator' => __DIR__ . '/..' . '/symfony/console/Helper/ProgressIndicator.php', - 'Symfony\\Component\\Console\\Helper\\QuestionHelper' => __DIR__ . '/..' . '/symfony/console/Helper/QuestionHelper.php', - 'Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => __DIR__ . '/..' . '/symfony/console/Helper/SymfonyQuestionHelper.php', - 'Symfony\\Component\\Console\\Helper\\Table' => __DIR__ . '/..' . '/symfony/console/Helper/Table.php', - 'Symfony\\Component\\Console\\Helper\\TableCell' => __DIR__ . '/..' . '/symfony/console/Helper/TableCell.php', - 'Symfony\\Component\\Console\\Helper\\TableSeparator' => __DIR__ . '/..' . '/symfony/console/Helper/TableSeparator.php', - 'Symfony\\Component\\Console\\Helper\\TableStyle' => __DIR__ . '/..' . '/symfony/console/Helper/TableStyle.php', - 'Symfony\\Component\\Console\\Input\\ArgvInput' => __DIR__ . '/..' . '/symfony/console/Input/ArgvInput.php', - 'Symfony\\Component\\Console\\Input\\ArrayInput' => __DIR__ . '/..' . '/symfony/console/Input/ArrayInput.php', - 'Symfony\\Component\\Console\\Input\\Input' => __DIR__ . '/..' . '/symfony/console/Input/Input.php', - 'Symfony\\Component\\Console\\Input\\InputArgument' => __DIR__ . '/..' . '/symfony/console/Input/InputArgument.php', - 'Symfony\\Component\\Console\\Input\\InputAwareInterface' => __DIR__ . '/..' . '/symfony/console/Input/InputAwareInterface.php', - 'Symfony\\Component\\Console\\Input\\InputDefinition' => __DIR__ . '/..' . '/symfony/console/Input/InputDefinition.php', - 'Symfony\\Component\\Console\\Input\\InputInterface' => __DIR__ . '/..' . '/symfony/console/Input/InputInterface.php', - 'Symfony\\Component\\Console\\Input\\InputOption' => __DIR__ . '/..' . '/symfony/console/Input/InputOption.php', - 'Symfony\\Component\\Console\\Input\\StreamableInputInterface' => __DIR__ . '/..' . '/symfony/console/Input/StreamableInputInterface.php', - 'Symfony\\Component\\Console\\Input\\StringInput' => __DIR__ . '/..' . '/symfony/console/Input/StringInput.php', - 'Symfony\\Component\\Console\\Logger\\ConsoleLogger' => __DIR__ . '/..' . '/symfony/console/Logger/ConsoleLogger.php', - 'Symfony\\Component\\Console\\Output\\BufferedOutput' => __DIR__ . '/..' . '/symfony/console/Output/BufferedOutput.php', - 'Symfony\\Component\\Console\\Output\\ConsoleOutput' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleOutput.php', - 'Symfony\\Component\\Console\\Output\\ConsoleOutputInterface' => __DIR__ . '/..' . '/symfony/console/Output/ConsoleOutputInterface.php', - 'Symfony\\Component\\Console\\Output\\NullOutput' => __DIR__ . '/..' . '/symfony/console/Output/NullOutput.php', - 'Symfony\\Component\\Console\\Output\\Output' => __DIR__ . '/..' . '/symfony/console/Output/Output.php', - 'Symfony\\Component\\Console\\Output\\OutputInterface' => __DIR__ . '/..' . '/symfony/console/Output/OutputInterface.php', - 'Symfony\\Component\\Console\\Output\\StreamOutput' => __DIR__ . '/..' . '/symfony/console/Output/StreamOutput.php', - 'Symfony\\Component\\Console\\Question\\ChoiceQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ChoiceQuestion.php', - 'Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ConfirmationQuestion.php', - 'Symfony\\Component\\Console\\Question\\Question' => __DIR__ . '/..' . '/symfony/console/Question/Question.php', - 'Symfony\\Component\\Console\\Style\\OutputStyle' => __DIR__ . '/..' . '/symfony/console/Style/OutputStyle.php', - 'Symfony\\Component\\Console\\Style\\StyleInterface' => __DIR__ . '/..' . '/symfony/console/Style/StyleInterface.php', - 'Symfony\\Component\\Console\\Style\\SymfonyStyle' => __DIR__ . '/..' . '/symfony/console/Style/SymfonyStyle.php', - 'Symfony\\Component\\Console\\Terminal' => __DIR__ . '/..' . '/symfony/console/Terminal.php', - 'Symfony\\Component\\Console\\Tester\\ApplicationTester' => __DIR__ . '/..' . '/symfony/console/Tester/ApplicationTester.php', - 'Symfony\\Component\\Console\\Tester\\CommandTester' => __DIR__ . '/..' . '/symfony/console/Tester/CommandTester.php', - 'Symfony\\Component\\Debug\\BufferingLogger' => __DIR__ . '/..' . '/symfony/debug/BufferingLogger.php', - 'Symfony\\Component\\Debug\\Debug' => __DIR__ . '/..' . '/symfony/debug/Debug.php', - 'Symfony\\Component\\Debug\\DebugClassLoader' => __DIR__ . '/..' . '/symfony/debug/DebugClassLoader.php', - 'Symfony\\Component\\Debug\\ErrorHandler' => __DIR__ . '/..' . '/symfony/debug/ErrorHandler.php', - 'Symfony\\Component\\Debug\\ExceptionHandler' => __DIR__ . '/..' . '/symfony/debug/ExceptionHandler.php', - 'Symfony\\Component\\Debug\\Exception\\ClassNotFoundException' => __DIR__ . '/..' . '/symfony/debug/Exception/ClassNotFoundException.php', - 'Symfony\\Component\\Debug\\Exception\\ContextErrorException' => __DIR__ . '/..' . '/symfony/debug/Exception/ContextErrorException.php', - 'Symfony\\Component\\Debug\\Exception\\FatalErrorException' => __DIR__ . '/..' . '/symfony/debug/Exception/FatalErrorException.php', - 'Symfony\\Component\\Debug\\Exception\\FatalThrowableError' => __DIR__ . '/..' . '/symfony/debug/Exception/FatalThrowableError.php', - 'Symfony\\Component\\Debug\\Exception\\FlattenException' => __DIR__ . '/..' . '/symfony/debug/Exception/FlattenException.php', - 'Symfony\\Component\\Debug\\Exception\\OutOfMemoryException' => __DIR__ . '/..' . '/symfony/debug/Exception/OutOfMemoryException.php', - 'Symfony\\Component\\Debug\\Exception\\SilencedErrorContext' => __DIR__ . '/..' . '/symfony/debug/Exception/SilencedErrorContext.php', - 'Symfony\\Component\\Debug\\Exception\\UndefinedFunctionException' => __DIR__ . '/..' . '/symfony/debug/Exception/UndefinedFunctionException.php', - 'Symfony\\Component\\Debug\\Exception\\UndefinedMethodException' => __DIR__ . '/..' . '/symfony/debug/Exception/UndefinedMethodException.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\ClassNotFoundFatalErrorHandler' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\FatalErrorHandlerInterface' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedFunctionFatalErrorHandler' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedMethodFatalErrorHandler' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php', - 'Symfony\\Component\\Ldap\\Adapter\\AbstractConnection' => __DIR__ . '/..' . '/symfony/ldap/Adapter/AbstractConnection.php', - 'Symfony\\Component\\Ldap\\Adapter\\AbstractQuery' => __DIR__ . '/..' . '/symfony/ldap/Adapter/AbstractQuery.php', - 'Symfony\\Component\\Ldap\\Adapter\\AdapterInterface' => __DIR__ . '/..' . '/symfony/ldap/Adapter/AdapterInterface.php', - 'Symfony\\Component\\Ldap\\Adapter\\CollectionInterface' => __DIR__ . '/..' . '/symfony/ldap/Adapter/CollectionInterface.php', - 'Symfony\\Component\\Ldap\\Adapter\\ConnectionInterface' => __DIR__ . '/..' . '/symfony/ldap/Adapter/ConnectionInterface.php', - 'Symfony\\Component\\Ldap\\Adapter\\EntryManagerInterface' => __DIR__ . '/..' . '/symfony/ldap/Adapter/EntryManagerInterface.php', - 'Symfony\\Component\\Ldap\\Adapter\\ExtLdap\\Adapter' => __DIR__ . '/..' . '/symfony/ldap/Adapter/ExtLdap/Adapter.php', - 'Symfony\\Component\\Ldap\\Adapter\\ExtLdap\\Collection' => __DIR__ . '/..' . '/symfony/ldap/Adapter/ExtLdap/Collection.php', - 'Symfony\\Component\\Ldap\\Adapter\\ExtLdap\\Connection' => __DIR__ . '/..' . '/symfony/ldap/Adapter/ExtLdap/Connection.php', - 'Symfony\\Component\\Ldap\\Adapter\\ExtLdap\\ConnectionOptions' => __DIR__ . '/..' . '/symfony/ldap/Adapter/ExtLdap/ConnectionOptions.php', - 'Symfony\\Component\\Ldap\\Adapter\\ExtLdap\\EntryManager' => __DIR__ . '/..' . '/symfony/ldap/Adapter/ExtLdap/EntryManager.php', - 'Symfony\\Component\\Ldap\\Adapter\\ExtLdap\\Query' => __DIR__ . '/..' . '/symfony/ldap/Adapter/ExtLdap/Query.php', - 'Symfony\\Component\\Ldap\\Adapter\\QueryInterface' => __DIR__ . '/..' . '/symfony/ldap/Adapter/QueryInterface.php', - 'Symfony\\Component\\Ldap\\Adapter\\RenameEntryInterface' => __DIR__ . '/..' . '/symfony/ldap/Adapter/RenameEntryInterface.php', - 'Symfony\\Component\\Ldap\\Entry' => __DIR__ . '/..' . '/symfony/ldap/Entry.php', - 'Symfony\\Component\\Ldap\\Exception\\ConnectionException' => __DIR__ . '/..' . '/symfony/ldap/Exception/ConnectionException.php', - 'Symfony\\Component\\Ldap\\Exception\\DriverNotFoundException' => __DIR__ . '/..' . '/symfony/ldap/Exception/DriverNotFoundException.php', - 'Symfony\\Component\\Ldap\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/ldap/Exception/ExceptionInterface.php', - 'Symfony\\Component\\Ldap\\Exception\\LdapException' => __DIR__ . '/..' . '/symfony/ldap/Exception/LdapException.php', - 'Symfony\\Component\\Ldap\\Exception\\NotBoundException' => __DIR__ . '/..' . '/symfony/ldap/Exception/NotBoundException.php', - 'Symfony\\Component\\Ldap\\Ldap' => __DIR__ . '/..' . '/symfony/ldap/Ldap.php', - 'Symfony\\Component\\Ldap\\LdapClient' => __DIR__ . '/..' . '/symfony/ldap/LdapClient.php', - 'Symfony\\Component\\Ldap\\LdapClientInterface' => __DIR__ . '/..' . '/symfony/ldap/LdapClientInterface.php', - 'Symfony\\Component\\Ldap\\LdapInterface' => __DIR__ . '/..' . '/symfony/ldap/LdapInterface.php', - 'Symfony\\Component\\OptionsResolver\\Debug\\OptionsResolverIntrospector' => __DIR__ . '/..' . '/symfony/options-resolver/Debug/OptionsResolverIntrospector.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\AccessException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/AccessException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/ExceptionInterface.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/InvalidArgumentException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\InvalidOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/InvalidOptionsException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\MissingOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/MissingOptionsException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\NoConfigurationException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/NoConfigurationException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/NoSuchOptionException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/OptionDefinitionException.php', - 'Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/UndefinedOptionsException.php', - 'Symfony\\Component\\OptionsResolver\\Options' => __DIR__ . '/..' . '/symfony/options-resolver/Options.php', - 'Symfony\\Component\\OptionsResolver\\OptionsResolver' => __DIR__ . '/..' . '/symfony/options-resolver/OptionsResolver.php', - 'Symfony\\Component\\WebLink\\EventListener\\AddLinkHeaderListener' => __DIR__ . '/..' . '/symfony/web-link/EventListener/AddLinkHeaderListener.php', - 'Symfony\\Component\\WebLink\\HttpHeaderSerializer' => __DIR__ . '/..' . '/symfony/web-link/HttpHeaderSerializer.php', - 'Symfony\\Component\\Yaml\\Command\\LintCommand' => __DIR__ . '/..' . '/symfony/yaml/Command/LintCommand.php', - 'Symfony\\Component\\Yaml\\Dumper' => __DIR__ . '/..' . '/symfony/yaml/Dumper.php', - 'Symfony\\Component\\Yaml\\Escaper' => __DIR__ . '/..' . '/symfony/yaml/Escaper.php', - 'Symfony\\Component\\Yaml\\Exception\\DumpException' => __DIR__ . '/..' . '/symfony/yaml/Exception/DumpException.php', - 'Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/yaml/Exception/ExceptionInterface.php', - 'Symfony\\Component\\Yaml\\Exception\\ParseException' => __DIR__ . '/..' . '/symfony/yaml/Exception/ParseException.php', - 'Symfony\\Component\\Yaml\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/yaml/Exception/RuntimeException.php', - 'Symfony\\Component\\Yaml\\Inline' => __DIR__ . '/..' . '/symfony/yaml/Inline.php', - 'Symfony\\Component\\Yaml\\Parser' => __DIR__ . '/..' . '/symfony/yaml/Parser.php', - 'Symfony\\Component\\Yaml\\Tag\\TaggedValue' => __DIR__ . '/..' . '/symfony/yaml/Tag/TaggedValue.php', - 'Symfony\\Component\\Yaml\\Unescaper' => __DIR__ . '/..' . '/symfony/yaml/Unescaper.php', - 'Symfony\\Component\\Yaml\\Yaml' => __DIR__ . '/..' . '/symfony/yaml/Yaml.php', - 'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php', - 'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php', - 'Symfony\\Polyfill\\Php56\\Php56' => __DIR__ . '/..' . '/symfony/polyfill-php56/Php56.php', - 'Symfony\\Polyfill\\Util\\Binary' => __DIR__ . '/..' . '/symfony/polyfill-util/Binary.php', - 'Symfony\\Polyfill\\Util\\BinaryNoFuncOverload' => __DIR__ . '/..' . '/symfony/polyfill-util/BinaryNoFuncOverload.php', - 'Symfony\\Polyfill\\Util\\BinaryOnFuncOverload' => __DIR__ . '/..' . '/symfony/polyfill-util/BinaryOnFuncOverload.php', - 'Symfony\\Polyfill\\Util\\LegacyTestListener' => __DIR__ . '/..' . '/symfony/polyfill-util/LegacyTestListener.php', - 'Symfony\\Polyfill\\Util\\TestListenerTrait' => __DIR__ . '/..' . '/symfony/polyfill-util/TestListenerTrait.php', - 'Wamania\\Snowball\\Danish' => __DIR__ . '/..' . '/wamania/php-stemmer/src/Danish.php', - 'Wamania\\Snowball\\Dutch' => __DIR__ . '/..' . '/wamania/php-stemmer/src/Dutch.php', - 'Wamania\\Snowball\\English' => __DIR__ . '/..' . '/wamania/php-stemmer/src/English.php', - 'Wamania\\Snowball\\French' => __DIR__ . '/..' . '/wamania/php-stemmer/src/French.php', - 'Wamania\\Snowball\\German' => __DIR__ . '/..' . '/wamania/php-stemmer/src/German.php', - 'Wamania\\Snowball\\Italian' => __DIR__ . '/..' . '/wamania/php-stemmer/src/Italian.php', - 'Wamania\\Snowball\\Norwegian' => __DIR__ . '/..' . '/wamania/php-stemmer/src/Norwegian.php', - 'Wamania\\Snowball\\Portuguese' => __DIR__ . '/..' . '/wamania/php-stemmer/src/Portuguese.php', - 'Wamania\\Snowball\\Romanian' => __DIR__ . '/..' . '/wamania/php-stemmer/src/Romanian.php', - 'Wamania\\Snowball\\Russian' => __DIR__ . '/..' . '/wamania/php-stemmer/src/Russian.php', - 'Wamania\\Snowball\\Spanish' => __DIR__ . '/..' . '/wamania/php-stemmer/src/Spanish.php', - 'Wamania\\Snowball\\Stem' => __DIR__ . '/..' . '/wamania/php-stemmer/src/Stem.php', - 'Wamania\\Snowball\\Stemmer' => __DIR__ . '/..' . '/wamania/php-stemmer/src/Stemmer.php', - 'Wamania\\Snowball\\Swedish' => __DIR__ . '/..' . '/wamania/php-stemmer/src/Swedish.php', - 'Wamania\\Snowball\\Utf8' => __DIR__ . '/..' . '/wamania/php-stemmer/src/Utf8.php', - 'Zend\\Diactoros\\AbstractSerializer' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/AbstractSerializer.php', - 'Zend\\Diactoros\\CallbackStream' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/CallbackStream.php', - 'Zend\\Diactoros\\Exception\\DeprecatedMethodException' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/DeprecatedMethodException.php', - 'Zend\\Diactoros\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Exception/ExceptionInterface.php', - 'Zend\\Diactoros\\HeaderSecurity' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/HeaderSecurity.php', - 'Zend\\Diactoros\\MessageTrait' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/MessageTrait.php', - 'Zend\\Diactoros\\PhpInputStream' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/PhpInputStream.php', - 'Zend\\Diactoros\\RelativeStream' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/RelativeStream.php', - 'Zend\\Diactoros\\Request' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Request.php', - 'Zend\\Diactoros\\RequestTrait' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/RequestTrait.php', - 'Zend\\Diactoros\\Request\\ArraySerializer' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Request/ArraySerializer.php', - 'Zend\\Diactoros\\Request\\Serializer' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Request/Serializer.php', - 'Zend\\Diactoros\\Response' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response.php', - 'Zend\\Diactoros\\Response\\ArraySerializer' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/ArraySerializer.php', - 'Zend\\Diactoros\\Response\\EmitterInterface' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/EmitterInterface.php', - 'Zend\\Diactoros\\Response\\EmptyResponse' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/EmptyResponse.php', - 'Zend\\Diactoros\\Response\\HtmlResponse' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/HtmlResponse.php', - 'Zend\\Diactoros\\Response\\InjectContentTypeTrait' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/InjectContentTypeTrait.php', - 'Zend\\Diactoros\\Response\\JsonResponse' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/JsonResponse.php', - 'Zend\\Diactoros\\Response\\RedirectResponse' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/RedirectResponse.php', - 'Zend\\Diactoros\\Response\\SapiEmitter' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/SapiEmitter.php', - 'Zend\\Diactoros\\Response\\SapiEmitterTrait' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/SapiEmitterTrait.php', - 'Zend\\Diactoros\\Response\\SapiStreamEmitter' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/SapiStreamEmitter.php', - 'Zend\\Diactoros\\Response\\Serializer' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/Serializer.php', - 'Zend\\Diactoros\\Response\\TextResponse' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/TextResponse.php', - 'Zend\\Diactoros\\Response\\XmlResponse' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Response/XmlResponse.php', - 'Zend\\Diactoros\\Server' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Server.php', - 'Zend\\Diactoros\\ServerRequest' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/ServerRequest.php', - 'Zend\\Diactoros\\ServerRequestFactory' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/ServerRequestFactory.php', - 'Zend\\Diactoros\\Stream' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Stream.php', - 'Zend\\Diactoros\\UploadedFile' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/UploadedFile.php', - 'Zend\\Diactoros\\Uri' => __DIR__ . '/..' . '/zendframework/zend-diactoros/src/Uri.php', - ); - - public static function getInitializer(ClassLoader $loader) - { - return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInita4c4383b02fcf9dfb95cc0397c641cf1::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInita4c4383b02fcf9dfb95cc0397c641cf1::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInita4c4383b02fcf9dfb95cc0397c641cf1::$classMap; - - }, null, ClassLoader::class); - } -} diff --git a/libraries/vendor/composer/ca-bundle/LICENSE b/libraries/vendor/composer/ca-bundle/LICENSE deleted file mode 100644 index c5b5220e892cf..0000000000000 --- a/libraries/vendor/composer/ca-bundle/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2016 Composer - -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/libraries/vendor/composer/ca-bundle/res/cacert.pem b/libraries/vendor/composer/ca-bundle/res/cacert.pem deleted file mode 100644 index 45654c0b9c490..0000000000000 --- a/libraries/vendor/composer/ca-bundle/res/cacert.pem +++ /dev/null @@ -1,3338 +0,0 @@ -## -## Bundle of CA Root Certificates -## -## Certificate data from Mozilla as of: Wed Mar 7 04:12:06 2018 GMT -## -## This is a bundle of X.509 certificates of public Certificate Authorities -## (CA). These were automatically extracted from Mozilla's root certificates -## file (certdata.txt). This file can be found in the mozilla source tree: -## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt -## -## It contains the certificates in PEM format and therefore -## can be directly used with curl / libcurl / php_curl, or with -## an Apache+mod_ssl webserver for SSL client authentication. -## Just configure this file as the SSLCACertificateFile. -## -## Conversion done with mk-ca-bundle.pl version 1.27. -## SHA256: 704f02707ec6b4c4a7597a8c6039b020def11e64f3ef0605a9c3543d48038a57 -## - - -GlobalSign Root CA -================== ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx -GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds -b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV -BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD -VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa -DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc -THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb -Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP -c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX -gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF -AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj -Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG -j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH -hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC -X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -GlobalSign Root CA - R2 -======================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 -ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp -s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN -S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL -TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C -ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i -YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN -BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp -9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu -01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 -9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 -EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc -cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw -EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj -055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f -j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 -xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa -t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -Entrust.net Premium 2048 Secure Server CA -========================================= ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u -ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp -bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV -BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx -NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 -d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl -MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u -ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL -Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr -hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW -nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi -VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ -KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy -T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf -zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT -J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e -nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= ------END CERTIFICATE----- - -Baltimore CyberTrust Root -========================= ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE -ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li -ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC -SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs -dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME -uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB -UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C -G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 -XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr -l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI -VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB -BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh -cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 -hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa -Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H -RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -AddTrust External Root -====================== ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD -VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw -NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU -cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg -Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 -+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw -Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo -aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy -2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 -7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL -VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk -VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl -j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 -e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u -G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -Entrust Root Certification Authority -==================================== ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV -BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw -b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG -A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 -MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu -MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu -Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v -dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz -A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww -Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 -j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN -rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 -MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH -hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM -Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa -v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS -W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 -tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -GeoTrust Global CA -================== ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw -MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j -LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo -BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet -8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc -T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU -vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk -DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q -zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 -d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 -mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p -XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm -Mw== ------END CERTIFICATE----- - -GeoTrust Universal CA -===================== ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 -MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu -Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t -JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e -RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs -7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d -8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V -qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga -Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB -Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu -KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 -ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 -XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB -hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 -qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL -oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK -xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF -KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 -DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK -xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU -p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI -P/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -GeoTrust Universal CA 2 -======================= ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 -MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg -SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 -DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 -j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q -JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a -QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 -WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP -20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn -ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC -SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG -8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 -+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E -BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ -4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ -mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq -A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg -Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP -pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d -FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp -gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm -X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -Visa eCommerce Root -=================== ------BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG -EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug -QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 -WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm -VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL -F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b -RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 -TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI -/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs -GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG -MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc -CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW -YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz -zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu -YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== ------END CERTIFICATE----- - -Comodo AAA Services root -======================== ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw -MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl -c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV -BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG -C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs -i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW -Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH -Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK -Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f -BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl -cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz -LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm -7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z -8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C -12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -QuoVadis Root CA -================ ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE -ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz -MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp -cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD -EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk -J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL -F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL -YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen -AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w -PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y -ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 -MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj -YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs -ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW -Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu -BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw -FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 -tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo -fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul -LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x -gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi -5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi -5nrQNiOKSnQ2+Q== ------END CERTIFICATE----- - -QuoVadis Root CA 2 -================== ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT -EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx -ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 -XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk -lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB -lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy -lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt -66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn -wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh -D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy -BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie -J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud -DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU -a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv -Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 -UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm -VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK -+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW -IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 -WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X -f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II -4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 -VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -QuoVadis Root CA 3 -================== ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT -EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx -OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg -DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij -KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K -DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv -BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp -p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 -nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX -MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM -Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz -uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT -BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj -YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB -BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD -VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 -ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE -AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV -qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s -hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z -POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 -Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp -8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC -bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu -g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p -vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr -qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -Security Communication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw -8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM -DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX -5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd -DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 -JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g -0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a -mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ -s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ -6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi -FL39vmwLAw== ------END CERTIFICATE----- - -Sonera Class 2 Root CA -====================== ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG -U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw -NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh -IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 -/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT -dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG -f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P -tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH -nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT -XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt -0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI -cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph -Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx -EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH -llpwrN9M ------END CERTIFICATE----- - -XRamp Global CA Root -==================== ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE -BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj -dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx -HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg -U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu -IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx -foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE -zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs -AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry -xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap -oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC -AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc -/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n -nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz -8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -Go Daddy Class 2 CA -=================== ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY -VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG -A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g -RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD -ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv -2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 -qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j -YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY -vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O -BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o -atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu -MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG -A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim -PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt -I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI -Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b -vZ8= ------END CERTIFICATE----- - -Starfield Class 2 CA -==================== ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc -U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo -MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG -A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG -SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY -bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ -JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm -epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN -F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF -MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f -hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo -bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs -afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM -PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD -KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 -QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -Taiwan GRCA -=========== ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG -EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X -DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv -dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN -w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 -BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O -1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO -htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov -J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 -Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t -B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB -O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 -lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV -HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 -09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ -TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj -Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 -Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU -D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz -DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk -Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk -7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ -CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy -+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS ------END CERTIFICATE----- - -DigiCert Assured ID Root CA -=========================== ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw -IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx -MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL -ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO -9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy -UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW -/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy -oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf -GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF -66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq -hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc -EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn -SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i -8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -DigiCert Global Root CA -======================= ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw -HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw -MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 -dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn -TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 -BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H -4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y -7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB -o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm -8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF -BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr -EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt -tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 -UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -DigiCert High Assurance EV Root CA -================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw -KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw -MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ -MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu -Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t -Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS -OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 -MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ -NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe -h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB -Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY -JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ -V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp -myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK -mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K ------END CERTIFICATE----- - -Certplus Class 2 Primary CA -=========================== ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE -BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN -OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy -dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR -5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ -Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO -YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e -e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME -CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ -YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t -L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD -P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R -TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ -7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW -//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- - -DST Root CA X3 -============== ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK -ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X -DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 -cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT -rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 -UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy -xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d -utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ -MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug -dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE -GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw -RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS -fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - -SwissSign Gold CA - G2 -====================== ------BEGIN CERTIFICATE----- -MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw -EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN -MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp -c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq -t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C -jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg -vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF -ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR -AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend -jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO -peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR -7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi -GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 -OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov -L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm -5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr -44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf -Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m -Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp -mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk -vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf -KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br -NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj -viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ ------END CERTIFICATE----- - -SwissSign Silver CA - G2 -======================== ------BEGIN CERTIFICATE----- -MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT -BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X -DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 -aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG -9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 -N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm -+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH -6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu -MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h -qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 -FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs -ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc -celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X -CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB -tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 -cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P -4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F -kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L -3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx -/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa -DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP -e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu -WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ -DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub -DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority -======================================== ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx -CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ -cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN -b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 -nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge -RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt -tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI -hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K -Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN -NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa -Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG -1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -thawte Primary Root CA -====================== ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE -BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 -aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 -MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg -SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv -KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT -FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs -oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ -1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc -q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K -aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p -afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF -AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE -uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 -jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH -z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G5 -============================================================ ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE -BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO -ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk -IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln -biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh -dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz -j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD -Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ -Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r -fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv -Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG -SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ -X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE -KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC -Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE -ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -SecureTrust CA -============== ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy -dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe -BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX -OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t -DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH -GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b -01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH -ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj -aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ -KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu -SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf -mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ -nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -Secure Global CA -================ ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH -bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg -MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg -Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx -YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ -bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g -8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV -HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi -0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn -oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA -MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ -OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn -CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 -3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -COMODO Certification Authority -============================== ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE -BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG -A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb -MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD -T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH -+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww -xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV -4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA -1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI -rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k -b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC -AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP -OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc -IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN -+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== ------END CERTIFICATE----- - -Network Solutions Certificate Authority -======================================= ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG -EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr -IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx -MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx -jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT -aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT -crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc -/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB -AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv -bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA -A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q -4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ -GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD -ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -COMODO ECC Certification Authority -================================== ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC -R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE -ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix -GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X -4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni -wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG -FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA -U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -OISTE WISeKey Global Root GA CA -=============================== ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE -BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG -A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH -bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD -VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw -IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 -IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 -Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg -Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD -d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ -/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R -LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ -KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm -MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 -+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY -okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= ------END CERTIFICATE----- - -Certigna -======== ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw -EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 -MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI -Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q -XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH -GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p -ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg -DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf -Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ -tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ -BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J -SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA -hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ -ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu -PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY -1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -Deutsche Telekom Root CA 2 -========================== ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT -RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG -A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 -MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G -A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS -b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 -bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI -KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY -AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK -Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV -jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV -HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr -E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy -zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 -rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G -dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== ------END CERTIFICATE----- - -Cybertrust Global Root -====================== ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li -ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 -MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD -ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW -0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL -AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin -89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT -8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 -MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G -A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO -lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi -5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 -hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T -X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -ePKI Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG -EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg -Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx -MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq -MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs -IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi -lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv -qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX -12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O -WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ -ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao -lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ -vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi -Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi -MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 -1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq -KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV -xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP -NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r -GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE -xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx -gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy -sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD -BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -certSIGN ROOT CA -================ ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD -VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa -Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE -CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I -JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH -rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 -ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD -0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 -AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B -Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB -AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 -SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 -x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt -vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz -TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority - G3 -============================================= ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 -IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz -NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo -YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT -LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j -K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE -c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C -IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu -dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr -2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 -cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE -Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s -t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -thawte Primary Root CA - G2 -=========================== ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC -VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu -IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg -Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV -MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG -b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt -IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS -LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 -8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU -mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN -G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K -rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -thawte Primary Root CA - G3 -=========================== ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE -BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 -aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w -ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD -VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG -A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At -P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC -+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY -7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW -vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ -KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK -A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC -8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm -er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority - G2 -============================================= ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu -Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 -OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl -b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG -BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc -KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ -EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m -ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 -npaqBA+K ------END CERTIFICATE----- - -VeriSign Universal Root Certification Authority -=============================================== ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE -BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO -ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk -IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u -IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj -1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP -MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 -9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I -AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR -tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G -CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O -a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 -Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx -Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx -P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P -wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 -mJO37M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G4 -============================================================ ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC -VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 -b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz -ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU -cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo -b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 -Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz -rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw -HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u -Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD -A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx -AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - -NetLock Arany (Class Gold) Főtanúsítvány -======================================== ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G -A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 -dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB -cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx -MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO -ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 -c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu -0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw -/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk -H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw -fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 -neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW -qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta -YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna -NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu -dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -Staat der Nederlanden Root CA - G2 -================================== ------BEGIN CERTIFICATE----- -MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE -CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC -TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l -ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ -5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn -vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj -CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil -e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR -OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI -CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 -48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi -trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 -qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB -AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC -ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA -A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz -+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj -f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN -kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk -CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF -URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb -CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h -oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV -IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm -66+KAQ== ------END CERTIFICATE----- - -Hongkong Post Root CA 1 -======================= ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT -DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx -NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n -IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 -ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr -auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh -qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY -V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV -HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i -h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio -l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei -IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps -T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT -c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== ------END CERTIFICATE----- - -SecureSign RootCA11 -=================== ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi -SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS -b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw -KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 -cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL -TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO -wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq -g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP -O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA -bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX -t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh -OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r -bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ -Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 -y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 -lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -Microsec e-Szigno Root CA 2009 -============================== ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER -MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv -c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE -BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt -U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA -fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG -0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA -pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm -1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC -AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf -QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE -FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o -lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX -I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 -yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi -LXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -GlobalSign Root CA - R3 -======================= ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt -iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ -0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 -rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl -OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 -xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 -lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 -EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E -bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 -YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r -kpeDMdmztcpHWD9f ------END CERTIFICATE----- - -Autoridad de Certificacion Firmaprofesional CIF A62634068 -========================================================= ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA -BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 -MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw -QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB -NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD -Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P -B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY -7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH -ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI -plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX -MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX -LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK -bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU -vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud -EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH -DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA -bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx -ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx -51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk -R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP -T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f -Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl -osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR -crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR -saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD -KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi -6Et8Vcad+qMUu2WFbm5PEn4KPJ2V ------END CERTIFICATE----- - -Izenpe.com -========== ------BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG -EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz -MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu -QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ -03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK -ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU -+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC -PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT -OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK -F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK -0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ -0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB -leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID -AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ -SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG -NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx -MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O -BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l -Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga -kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q -hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs -g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 -aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 -nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC -ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo -Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z -WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== ------END CERTIFICATE----- - -Chambers of Commerce Root - 2008 -================================ ------BEGIN CERTIFICATE----- -MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD -MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv -bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu -QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy -Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl -ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF -EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl -cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA -XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj -h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ -ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk -NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g -D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 -lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ -0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj -ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 -EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI -G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ -BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh -bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh -bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC -CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH -AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 -wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH -3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU -RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 -M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 -YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF -9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK -zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG -nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg -OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ ------END CERTIFICATE----- - -Global Chambersign Root - 2008 -============================== ------BEGIN CERTIFICATE----- -MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD -MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv -bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu -QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx -NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg -Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ -QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD -aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf -VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf -XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 -ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB -/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA -TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M -H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe -Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF -HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh -wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB -AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT -BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE -BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm -aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm -aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp -1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 -dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG -/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 -ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s -dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg -9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH -foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du -qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr -P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq -c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z -09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B ------END CERTIFICATE----- - -Go Daddy Root Certificate Authority - G2 -======================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu -MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G -A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq -9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD -+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd -fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl -NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 -BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac -vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r -5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV -N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 ------END CERTIFICATE----- - -Starfield Root Certificate Authority - G2 -========================================= ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s -b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 -eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw -DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg -VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB -dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv -W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs -bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk -N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf -ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU -JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol -TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx -4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw -F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ -c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -Starfield Services Root Certificate Authority - G2 -================================================== ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s -b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl -IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT -dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg -Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 -h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa -hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP -LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB -rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG -SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP -E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy -xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza -YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 ------END CERTIFICATE----- - -AffirmTrust Commercial -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw -MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly -bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb -DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV -C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 -BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww -MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV -HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG -hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi -qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv -0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh -sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -AffirmTrust Networking -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw -MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly -bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE -Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI -dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 -/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb -h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV -HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu -UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 -12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 -WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 -/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -AffirmTrust Premium -=================== ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy -OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy -dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn -BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV -5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs -+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd -GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R -p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI -S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 -6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 -/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo -+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv -MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC -6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S -L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK -+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV -BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg -IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 -g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb -zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== ------END CERTIFICATE----- - -AffirmTrust Premium ECC -======================= ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV -BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx -MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U -cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ -N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW -BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK -BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X -57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM -eQ== ------END CERTIFICATE----- - -Certum Trusted Network CA -========================= ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK -ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy -MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU -ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC -l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J -J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 -fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 -cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB -Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw -DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj -jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 -mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj -Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -TWCA Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ -VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG -EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB -IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx -QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC -oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP -4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r -y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG -9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC -mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW -QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY -T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny -Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -Security Communication RootCA2 -============================== ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc -U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh -dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC -SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy -aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ -+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R -3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV -spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K -EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 -QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB -CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj -u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk -3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q -tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 -mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -EC-ACC -====== ------BEGIN CERTIFICATE----- -MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE -BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w -ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD -VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE -CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT -BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 -MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt -SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl -Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh -cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK -w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT -ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 -HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a -E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw -0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD -VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 -Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l -dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ -lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa -Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe -l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 -E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D -5EI= ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions RootCA 2011 -======================================================= ------BEGIN CERTIFICATE----- -MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT -O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y -aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z -IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT -AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z -IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo -IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI -1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa -71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u -8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH -3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ -MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 -MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu -b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt -XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 -TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD -/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N -7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 ------END CERTIFICATE----- - -Actalis Authentication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM -BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE -AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky -MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz -IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ -wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa -by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 -zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f -YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 -oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l -EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 -hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 -EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 -jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY -iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI -WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 -JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx -K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ -Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC -4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo -2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz -lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem -OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 -vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -Trustis FPS Root CA -=================== ------BEGIN CERTIFICATE----- -MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG -EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 -IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV -BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ -RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk -H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa -cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt -o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA -AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd -BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c -GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC -yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P -8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV -l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl -iB6XzCGcKQENZetX2fNXlrtIzYE= ------END CERTIFICATE----- - -Buypass Class 2 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X -DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 -eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 -g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn -9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b -/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU -CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff -awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI -zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn -Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX -Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs -M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF -AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI -osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S -aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd -DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD -LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 -oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC -wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS -CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN -rJgWVqA= ------END CERTIFICATE----- - -Buypass Class 3 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X -DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 -eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH -sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR -5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh -7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ -ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH -2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV -/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ -RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA -Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq -j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF -AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G -uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG -Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 -ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 -KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz -6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug -UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe -eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi -Cp/HuZc= ------END CERTIFICATE----- - -T-TeleSec GlobalRoot Class 3 -============================ ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM -IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU -cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx -MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz -dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD -ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK -9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU -NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF -iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W -0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr -AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb -fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT -ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h -P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== ------END CERTIFICATE----- - -EE Certification Centre Root CA -=============================== ------BEGIN CERTIFICATE----- -MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG -EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy -dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw -MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB -UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy -ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM -TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 -rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw -93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN -P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ -MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF -BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj -xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM -lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u -uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU -3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM -dcGWxZ0= ------END CERTIFICATE----- - -D-TRUST Root Class 3 CA 2 2009 -============================== ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe -Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE -LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD -ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA -BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv -KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z -p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC -AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ -4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y -eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw -MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G -PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw -OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm -2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV -dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph -X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -D-TRUST Root Class 3 CA 2 EV 2009 -================================= ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw -OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw -OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS -egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh -zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T -7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 -sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 -11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv -cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v -ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El -MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp -b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh -c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ -PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX -ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA -NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv -w9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -CA Disig Root R2 -================ ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw -EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp -ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx -EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp -c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC -w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia -xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 -A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S -GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV -g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa -5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE -koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A -Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i -Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u -Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV -sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je -dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 -1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx -mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 -utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 -sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg -UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV -7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -ACCVRAIZ1 -========= ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB -SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 -MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH -UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM -jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 -RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD -aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ -0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG -WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 -8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR -5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J -9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK -Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw -Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu -Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM -Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA -QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh -AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA -YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj -AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA -IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk -aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 -dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 -MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI -hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E -R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN -YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 -nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ -TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 -sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg -Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd -3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p -EfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -TWCA Global Root CA -=================== ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT -CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD -QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK -EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg -Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C -nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV -r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR -Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV -tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W -KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 -sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p -yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn -kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI -zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC -AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g -cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M -8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg -/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg -lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP -A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m -i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 -EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 -zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= ------END CERTIFICATE----- - -TeliaSonera Root CA v1 -====================== ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE -CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 -MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW -VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ -6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA -3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k -B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn -Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH -oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 -F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ -oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 -gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc -TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB -AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW -DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm -zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW -pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV -G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc -c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT -JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 -qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 -Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems -WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -E-Tugra Certification Authority -=============================== ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w -DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls -ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN -ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw -NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx -QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl -cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD -DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd -hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K -CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g -ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ -BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 -E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz -rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq -jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn -rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 -dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB -/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG -MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK -kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO -XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 -VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo -a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc -dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV -KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT -Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 -8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G -C7TbO6Orb1wdtn7os4I07QZcJA== ------END CERTIFICATE----- - -T-TeleSec GlobalRoot Class 2 -============================ ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM -IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU -cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx -MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz -dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD -ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ -SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F -vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 -2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV -WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy -YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 -r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf -vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR -3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== ------END CERTIFICATE----- - -Atos TrustedRoot 2011 -===================== ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU -cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 -MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG -A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV -hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr -54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ -DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 -HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR -z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R -l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ -bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h -k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh -TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 -61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G -3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -QuoVadis Root CA 1 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE -PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm -PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 -Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN -ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l -g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV -7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX -9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f -iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg -t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI -hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 -GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct -Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP -+V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh -3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa -wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 -O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 -FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV -hMJKzRwuJIczYOXD ------END CERTIFICATE----- - -QuoVadis Root CA 2 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh -ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY -NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t -oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o -MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l -V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo -L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ -sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD -6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh -lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI -hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K -pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 -x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz -dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X -U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw -mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD -zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN -JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr -O3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -QuoVadis Root CA 3 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 -IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL -Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe -6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 -I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U -VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 -5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi -Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM -dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt -rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI -hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS -t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ -TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du -DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib -Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD -hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX -0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW -dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 -PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -DigiCert Assured ID Root G2 -=========================== ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw -IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw -MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL -ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH -35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq -bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw -VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP -YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn -lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO -w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv -0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz -d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW -hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M -jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -DigiCert Assured ID Root G3 -=========================== ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD -VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 -MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ -BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb -RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs -KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF -UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy -YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy -1vUhZscv6pZjamVFkpUBtA== ------END CERTIFICATE----- - -DigiCert Global Root G2 -======================= ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw -HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx -MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 -dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ -kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO -3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV -BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM -UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB -o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu -5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr -F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U -WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH -QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ -iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -DigiCert Global Root G3 -======================= ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD -VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw -MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k -aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C -AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O -YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp -Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y -3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 -VOKa5Vt8sycX ------END CERTIFICATE----- - -DigiCert Trusted Root G4 -======================== ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw -HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 -MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp -pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o -k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa -vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY -QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 -MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm -mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 -f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH -dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 -oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY -ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr -yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy -7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah -ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN -5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb -/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa -5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK -G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP -82Z+ ------END CERTIFICATE----- - -COMODO RSA Certification Authority -================================== ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE -BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG -A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC -R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE -ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn -dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ -FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+ -5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG -x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX -2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL -OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3 -sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C -GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5 -WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E -FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w -DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt -rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+ -nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg -tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW -sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp -pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA -zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq -ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52 -7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I -LaZRfyHBNVOFBkpdn627G190 ------END CERTIFICATE----- - -USERTrust RSA Certification Authority -===================================== ------BEGIN CERTIFICATE----- -MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE -BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK -ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE -BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK -ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz -0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j -Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn -RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O -+T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq -/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE -Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM -lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8 -yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+ -eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd -BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW -FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ -7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ -Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM -8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi -FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi -yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c -J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw -sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx -Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -USERTrust ECC Certification Authority -===================================== ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC -VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC -VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 -0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez -nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV -HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB -HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu -9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -GlobalSign ECC Root CA - R4 -=========================== ------BEGIN CERTIFICATE----- -MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl -OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P -AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV -MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF -JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= ------END CERTIFICATE----- - -GlobalSign ECC Root CA - R5 -=========================== ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 -SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS -h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd -BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx -uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 -yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -Staat der Nederlanden Root CA - G3 -================================== ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE -CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC -TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l -ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y -olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t -x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy -EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K -Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur -mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5 -1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp -07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo -FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE -41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB -AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu -yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD -U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq -KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1 -v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA -8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b -8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r -mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq -1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI -JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV -tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk= ------END CERTIFICATE----- - -Staat der Nederlanden EV Root CA -================================ ------BEGIN CERTIFICATE----- -MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE -CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g -RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M -MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl -cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk -SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW -O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r -0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 -Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV -XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr -08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV -0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd -74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx -fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa -ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI -eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu -c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq -5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN -b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN -f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi -5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 -WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK -DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy -eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== ------END CERTIFICATE----- - -IdenTrust Commercial Root CA 1 -============================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG -EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS -b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES -MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB -IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld -hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ -mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi -1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C -XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl -3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy -NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV -WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg -xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix -uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC -AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI -hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg -ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt -ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV -YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX -feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro -kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe -2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz -Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R -cGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -IdenTrust Public Sector Root CA 1 -================================= ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG -EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv -ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV -UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS -b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy -P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 -Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI -rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf -qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS -mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn -ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh -LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v -iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL -4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B -Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw -DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A -mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt -GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt -m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx -NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 -Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI -ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC -ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ -3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -Entrust Root Certification Authority - G2 -========================================= ------BEGIN CERTIFICATE----- -MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV -BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy -bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug -b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw -HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT -DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx -OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP -/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz -HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU -s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y -TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx -AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 -0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z -iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ -Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi -nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ -vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO -e4pIb4tF9g== ------END CERTIFICATE----- - -Entrust Root Certification Authority - EC1 -========================================== ------BEGIN CERTIFICATE----- -MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx -FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn -YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw -FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs -LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg -dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt -IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy -AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef -9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h -vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 -kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G ------END CERTIFICATE----- - -CFCA EV ROOT -============ ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE -CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB -IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw -MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD -DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV -BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD -7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN -uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW -ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 -xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f -py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K -gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol -hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ -tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf -BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB -/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q -ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua -4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG -E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX -BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn -aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy -PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX -kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C -ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- - -TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5 -==================================================== ------BEGIN CERTIFICATE----- -MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN -BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp -bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg -RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw -ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w -SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE -n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp -ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537 -jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m -ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP -9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV -4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH -HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI -hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo -BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq -URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl -lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8 -B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU= ------END CERTIFICATE----- - -Certinomis - Root CA -==================== ------BEGIN CERTIFICATE----- -MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK -Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg -LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx -EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD -ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos -P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo -d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap -z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00 -8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x -RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE -6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t -FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV -PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH -i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj -YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I -6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF -AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV -WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw -Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX -lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ -y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9 -Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng -DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi -I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM -cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr -hkIGuUE= ------END CERTIFICATE----- - -OISTE WISeKey Global Root GB CA -=============================== ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG -EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl -ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw -MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD -VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds -b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX -scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP -rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk -9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o -Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg -GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI -hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD -dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 -VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui -HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic -Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= ------END CERTIFICATE----- - -SZAFIR ROOT CA2 -=============== ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG -A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV -BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ -BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD -VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q -qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK -DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE -2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ -ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi -ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P -AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC -AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 -O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 -oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul -4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 -+/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== ------END CERTIFICATE----- - -Certum Trusted Network CA 2 -=========================== ------BEGIN CERTIFICATE----- -MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE -BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 -bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y -ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ -TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB -IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 -7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o -CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b -Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p -uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 -GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ -9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB -Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye -hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM -BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI -hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW -Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA -L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo -clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM -pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb -w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo -J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm -ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX -is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 -zAYspsbiDrW5viSP ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions RootCA 2015 -======================================================= ------BEGIN CERTIFICATE----- -MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT -BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 -aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl -YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx -MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg -QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV -BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw -MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv -bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh -iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ -6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd -FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr -i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F -GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 -fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu -iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc -Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI -hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ -D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM -d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y -d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn -82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb -davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F -Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt -J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa -JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q -p/UsQu0yrbYhnr68 ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions ECC RootCA 2015 -=========================================================== ------BEGIN CERTIFICATE----- -MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 -aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u -cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj -aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw -MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj -IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD -VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 -Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP -dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK -Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O -BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA -GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn -dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR ------END CERTIFICATE----- - -Certplus Root CA G1 -=================== ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUAMD4xCzAJBgNV -BAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTAe -Fw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhD -ZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHN -r49aiZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt6kuJPKNx -Qv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP0FG7Yn2ksYyy/yARujVj -BYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTv -LRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDEEW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2 -z4QTd28n6v+WZxcIbekN1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc -4nBvCGrch2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCTmehd -4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV4EJQeIQEQWGw9CEj -jy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPOWftwenMGE9nTdDckQQoRb5fc5+R+ -ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0G -A1UdDgQWBBSowcCbkahDFXxdBie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHY -lwuBsTANBgkqhkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh -66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7/SMNkPX0XtPG -YX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BSS7CTKtQ+FjPlnsZlFT5kOwQ/ -2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F -6ALEUz65noe8zDUa3qHpimOHZR4RKttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilX -CNQ314cnrUlZp5GrRHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWe -tUNy6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEVV/xuZDDC -VRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5g4VCXA9DO2pJNdWY9BW/ -+mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl++O/QmueD6i9a5jc2NvLi6Td11n0bt3+ -qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo= ------END CERTIFICATE----- - -Certplus Root CA G2 -=================== ------BEGIN CERTIFICATE----- -MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT -AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x -NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0 -cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA -BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN -Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD -AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud -IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV -HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl -vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw== ------END CERTIFICATE----- - -OpenTrust Root CA G1 -==================== ------BEGIN CERTIFICATE----- -MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUAMEAxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx -MB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM -CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7fa -Yp6bwiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX/uMftk87 -ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR077F9jAHiOH3BX2pfJLKO -YheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGPuY4zbGneWK2gDqdkVBFpRGZPTBKnjix9 -xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLxp2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO -9z0M+Yo0FMT7MzUj8czxKselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq -3ywgsNw2TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+WG+Oi -n6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPwvFEVVJSmdz7QdFG9 -URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYYEQRVzXR7z2FwefR7LFxckvzluFqr -TJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUl0YhVyE12jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/Px -N3DlCPaTKbYwDQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E -PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kfgLMtMrpkZ2Cv -uVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbSFXJfLkur1J1juONI5f6ELlgK -n0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLh -X4SPgPL0DTatdrOjteFkdjpY3H1PXlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80 -nR14SohWZ25g/4/Ii+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcm -GS3tTAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L9109S5zvE/ -bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/KyPu1svf0OnWZzsD2097+o -4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJAwSQiumPv+i2tCqjI40cHLI5kqiPAlxA -OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx ------END CERTIFICATE----- - -OpenTrust Root CA G2 -==================== ------BEGIN CERTIFICATE----- -MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUAMEAxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcy -MB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM -CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+ -Ntmh/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78eCbY2albz -4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/61UWY0jUJ9gNDlP7ZvyCV -eYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fEFY8ElggGQgT4hNYdvJGmQr5J1WqIP7wt -UdGejeBSzFfdNTVY27SPJIjki9/ca1TSgSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz -3GIZ38i1MH/1PCZ1Eb3XG7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj -3CzMpSZyYhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaHvGOz -9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4t/bQWVyJ98LVtZR0 -0dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/gh7PU3+06yzbXfZqfUAkBXKJOAGT -y3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUajn6QiL35okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59 -M4PLuG53hq8wDQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz -Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0nXGEL8pZ0keI -mUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qTRmTFAHneIWv2V6CG1wZy7HBG -S4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpTwm+bREx50B1ws9efAvSyB7DH5fitIw6mVskp -EndI2S9G/Tvw/HRwkqWOOAgfZDC2t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ -6e18CL13zSdkzJTaTkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97kr -gCf2o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU3jg9CcCo -SmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eAiN1nE28daCSLT7d0geX0 -YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14fWKGVyasvc0rQLW6aWQ9VGHgtPFGml4vm -u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK ------END CERTIFICATE----- - -OpenTrust Root CA G3 -==================== ------BEGIN CERTIFICATE----- -MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X -DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w -ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B -ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB -/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf -BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM -BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta -3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB ------END CERTIFICATE----- - -ISRG Root X1 -============ ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE -BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD -EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG -EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT -DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r -Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1 -3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K -b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN -Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ -4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf -1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu -hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH -usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r -OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G -A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY -9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV -0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt -hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw -TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx -e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA -JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD -YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n -JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ -m+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -AC RAIZ FNMT-RCM -================ ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT -AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw -MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD -TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC -ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf -qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr -btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL -j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou -08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw -WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT -tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ -47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC -ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa -i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o -dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s -D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ -j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT -Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW -+YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 -Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d -8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm -5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG -rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - -Amazon Root CA 1 -================ ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD -VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1 -MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv -bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH -FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ -gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t -dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce -VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3 -DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM -CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy -8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa -2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2 -xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- - -Amazon Root CA 2 -================ ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD -VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1 -MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv -bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC -ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4 -kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp -N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9 -AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd -fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx -kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS -btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0 -Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN -c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+ -3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw -DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA -A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY -+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE -YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW -xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ -gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW -aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV -Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3 -KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi -JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw= ------END CERTIFICATE----- - -Amazon Root CA 3 -================ ------BEGIN CERTIFICATE----- -MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG -EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy -NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ -MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB -f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr -Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 -rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc -eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== ------END CERTIFICATE----- - -Amazon Root CA 4 -================ ------BEGIN CERTIFICATE----- -MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG -EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy -NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ -MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN -/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri -83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA -MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 -AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== ------END CERTIFICATE----- - -LuxTrust Global Root 2 -====================== ------BEGIN CERTIFICATE----- -MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQELBQAwRjELMAkG -A1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNVBAMMFkx1eFRydXN0IEdsb2Jh -bCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUwMzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEW -MBQGA1UECgwNTHV4VHJ1c3QgUy5BLjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCC -AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wm -Kb3FibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTemhfY7RBi2 -xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBC -wGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm -1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkm -FRseTJIpgp7VkoGSQXAZ96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niF -wpN6cj5mj5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4gDEa/ -a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+8kPREd8vZS9kzl8U -ubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2jX5t/Lax5Gw5CMZdjpPuKadUiDTSQ -MC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmHhFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB -/zBCBgNVHSAEOzA5MDcGByuBKwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5 -Lmx1eHRydXN0Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT -+Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQELBQADggIBAGoZ -FO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9BzZAcg4atmpZ1gDlaCDdLnIN -H2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTOjFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW -7MM3LGVYvlcAGvI1+ut7MV3CwRI9loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIu -ZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWA -VWe+2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/JEAdemrR -TxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt -/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQfLSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc -7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31I -iyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr ------END CERTIFICATE----- - -TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 -============================================= ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT -D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr -IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g -TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp -ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD -VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt -c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth -bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11 -IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8 -6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc -wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0 -3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9 -WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU -ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ -KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh -AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc -lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R -e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j -q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= ------END CERTIFICATE----- - -GDCA TrustAUTH R5 ROOT -====================== ------BEGIN CERTIFICATE----- -MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw -BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD -DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow -YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ -IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs -AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p -OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr -pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ -9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ -xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM -R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ -D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4 -oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx -9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg -p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9 -H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35 -6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd -+PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ -HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD -F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ -8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv -/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT -aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== ------END CERTIFICATE----- - -TrustCor RootCert CA-1 -====================== ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP -MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig -U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx -MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu -YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe -VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy -dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq -jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4 -pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0 -JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h -gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw -/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j -BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5 -mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf -ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C -qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P -3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk= ------END CERTIFICATE----- - -TrustCor RootCert CA-2 -====================== ------BEGIN CERTIFICATE----- -MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w -DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT -eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0 -eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy -MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h -bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U -cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0 -IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb -ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk -RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1 -oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb -XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1 -/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q -jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP -eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg -rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh -8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU -2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h -Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp -kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv -2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3 -S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw -PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv -DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU -RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE -xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX -RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ ------END CERTIFICATE----- - -TrustCor ECA-1 -============== ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP -MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig -U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw -N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5 -MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y -IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR -MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23 -xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc -p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+ -fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj -YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL -f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF -AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u -/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F -hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs -J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC -jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g== ------END CERTIFICATE----- - -SSL.com Root Certification Authority RSA -======================================== ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxDjAM -BgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24x -MTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYw -MjEyMTczOTM5WhcNNDEwMjEyMTczOTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx -EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NM -LmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2RxFdHaxh3a3by/ZPkPQ/C -Fp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aXqhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8 -P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcCC52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/ge -oeOy3ZExqysdBP+lSgQ36YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkp -k8zruFvh/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrFYD3Z -fBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93EJNyAKoFBbZQ+yODJ -gUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVcUS4cK38acijnALXRdMbX5J+tB5O2 -UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi8 -1xtZPCvM8hnIk2snYxnP/Okm+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4s -bE6x/c+cCbqiM+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGVcpNxJK1ok1iOMq8bs3AD/CUr -dIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBcHadm47GUBwwyOabqG7B52B2ccETjit3E+ZUf -ijhDPwGFpUenPUayvOUiaPd7nNgsPgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAsl -u1OJD7OAUN5F7kR/q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjq -erQ0cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jra6x+3uxj -MxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90IH37hVZkLId6Tngr75qNJ -vTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/YK9f1JmzJBjSWFupwWRoyeXkLtoh/D1JI -Pb9s2KJELtFOt3JY04kTlf5Eq/jXixtunLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406y -wKBjYZC6VWg3dGq2ktufoYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NI -WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k= ------END CERTIFICATE----- - -SSL.com Root Certification Authority ECC -======================================== ------BEGIN CERTIFICATE----- -MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV -BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv -BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy -MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO -BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv -bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA -BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+ -8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR -hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT -jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW -e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z -5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl ------END CERTIFICATE----- - -SSL.com EV Root Certification Authority RSA R2 -============================================== ------BEGIN CERTIFICATE----- -MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w -DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u -MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy -MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI -DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD -VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh -hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w -cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO -Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+ -B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh -CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim -9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto -RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm -JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48 -+qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV -HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp -qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1 -++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx -Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G -guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz -OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7 -CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq -lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR -rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1 -hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX -9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== ------END CERTIFICATE----- - -SSL.com EV Root Certification Authority ECC -=========================================== ------BEGIN CERTIFICATE----- -MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV -BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy -BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw -MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx -EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM -LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy -3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O -BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe -5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ -N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm -m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== ------END CERTIFICATE----- diff --git a/libraries/vendor/composer/ca-bundle/src/CaBundle.php b/libraries/vendor/composer/ca-bundle/src/CaBundle.php deleted file mode 100644 index 10bb87c8c41d5..0000000000000 --- a/libraries/vendor/composer/ca-bundle/src/CaBundle.php +++ /dev/null @@ -1,308 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\CaBundle; - -use Psr\Log\LoggerInterface; -use Symfony\Component\Process\PhpProcess; - -/** - * @author Chris Smith - * @author Jordi Boggiano - */ -class CaBundle -{ - private static $caPath; - private static $caFileValidity = array(); - private static $useOpensslParse; - - /** - * Returns the system CA bundle path, or a path to the bundled one - * - * This method was adapted from Sslurp. - * https://github.com/EvanDotPro/Sslurp - * - * (c) Evan Coury - * - * For the full copyright and license information, please see below: - * - * Copyright (c) 2013, Evan Coury - * 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. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @param LoggerInterface $logger optional logger for information about which CA files were loaded - * @return string path to a CA bundle file or directory - */ - public static function getSystemCaRootBundlePath(LoggerInterface $logger = null) - { - if (self::$caPath !== null) { - return self::$caPath; - } - - // If SSL_CERT_FILE env variable points to a valid certificate/bundle, use that. - // This mimics how OpenSSL uses the SSL_CERT_FILE env variable. - $envCertFile = getenv('SSL_CERT_FILE'); - if ($envCertFile && is_readable($envCertFile) && static::validateCaFile($envCertFile, $logger)) { - return self::$caPath = $envCertFile; - } - - // If SSL_CERT_DIR env variable points to a valid certificate/bundle, use that. - // This mimics how OpenSSL uses the SSL_CERT_FILE env variable. - $envCertDir = getenv('SSL_CERT_DIR'); - if ($envCertDir && is_dir($envCertDir) && is_readable($envCertDir)) { - return self::$caPath = $envCertDir; - } - - $configured = ini_get('openssl.cafile'); - if ($configured && strlen($configured) > 0 && is_readable($configured) && static::validateCaFile($configured, $logger)) { - return self::$caPath = $configured; - } - - $configured = ini_get('openssl.capath'); - if ($configured && is_dir($configured) && is_readable($configured)) { - return self::$caPath = $configured; - } - - $caBundlePaths = array( - '/etc/pki/tls/certs/ca-bundle.crt', // Fedora, RHEL, CentOS (ca-certificates package) - '/etc/ssl/certs/ca-certificates.crt', // Debian, Ubuntu, Gentoo, Arch Linux (ca-certificates package) - '/etc/ssl/ca-bundle.pem', // SUSE, openSUSE (ca-certificates package) - '/usr/local/share/certs/ca-root-nss.crt', // FreeBSD (ca_root_nss_package) - '/usr/ssl/certs/ca-bundle.crt', // Cygwin - '/opt/local/share/curl/curl-ca-bundle.crt', // OS X macports, curl-ca-bundle package - '/usr/local/share/curl/curl-ca-bundle.crt', // Default cURL CA bunde path (without --with-ca-bundle option) - '/usr/share/ssl/certs/ca-bundle.crt', // Really old RedHat? - '/etc/ssl/cert.pem', // OpenBSD - '/usr/local/etc/ssl/cert.pem', // FreeBSD 10.x - '/usr/local/etc/openssl/cert.pem', // OS X homebrew, openssl package - ); - - foreach ($caBundlePaths as $caBundle) { - if (@is_readable($caBundle) && static::validateCaFile($caBundle, $logger)) { - return self::$caPath = $caBundle; - } - } - - foreach ($caBundlePaths as $caBundle) { - $caBundle = dirname($caBundle); - if (@is_dir($caBundle) && glob($caBundle.'/*')) { - return self::$caPath = $caBundle; - } - } - - return self::$caPath = static::getBundledCaBundlePath(); // Bundled CA file, last resort - } - - /** - * Returns the path to the bundled CA file - * - * In case you don't want to trust the user or the system, you can use this directly - * - * @return string path to a CA bundle file - */ - public static function getBundledCaBundlePath() - { - $caBundleFile = __DIR__.'/../res/cacert.pem'; - - // cURL does not understand 'phar://' paths - // see https://github.com/composer/ca-bundle/issues/10 - if (0 === strpos($caBundleFile, 'phar://')) { - file_put_contents( - $tempCaBundleFile = tempnam(sys_get_temp_dir(), 'openssl-ca-bundle-'), - file_get_contents($caBundleFile) - ); - - register_shutdown_function(function() use ($tempCaBundleFile) { - @unlink($tempCaBundleFile); - }); - - $caBundleFile = $tempCaBundleFile; - } - - return $caBundleFile; - } - - /** - * Validates a CA file using opensl_x509_parse only if it is safe to use - * - * @param string $filename - * @param LoggerInterface $logger optional logger for information about which CA files were loaded - * - * @return bool - */ - public static function validateCaFile($filename, LoggerInterface $logger = null) - { - static $warned = false; - - if (isset(self::$caFileValidity[$filename])) { - return self::$caFileValidity[$filename]; - } - - $contents = file_get_contents($filename); - - // assume the CA is valid if php is vulnerable to - // https://www.sektioneins.de/advisories/advisory-012013-php-openssl_x509_parse-memory-corruption-vulnerability.html - if (!static::isOpensslParseSafe()) { - if (!$warned && $logger) { - $logger->warning(sprintf( - 'Your version of PHP, %s, is affected by CVE-2013-6420 and cannot safely perform certificate validation, we strongly suggest you upgrade.', - PHP_VERSION - )); - $warned = true; - } - - $isValid = !empty($contents); - } else { - $isValid = (bool) openssl_x509_parse($contents); - } - - if ($logger) { - $logger->debug('Checked CA file '.realpath($filename).': '.($isValid ? 'valid' : 'invalid')); - } - - return self::$caFileValidity[$filename] = $isValid; - } - - /** - * Test if it is safe to use the PHP function openssl_x509_parse(). - * - * This checks if OpenSSL extensions is vulnerable to remote code execution - * via the exploit documented as CVE-2013-6420. - * - * @return bool - */ - public static function isOpensslParseSafe() - { - if (null !== self::$useOpensslParse) { - return self::$useOpensslParse; - } - - if (PHP_VERSION_ID >= 50600) { - return self::$useOpensslParse = true; - } - - // Vulnerable: - // PHP 5.3.0 - PHP 5.3.27 - // PHP 5.4.0 - PHP 5.4.22 - // PHP 5.5.0 - PHP 5.5.6 - if ( - (PHP_VERSION_ID < 50400 && PHP_VERSION_ID >= 50328) - || (PHP_VERSION_ID < 50500 && PHP_VERSION_ID >= 50423) - || (PHP_VERSION_ID < 50600 && PHP_VERSION_ID >= 50507) - ) { - // This version of PHP has the fix for CVE-2013-6420 applied. - return self::$useOpensslParse = true; - } - - if (defined('PHP_WINDOWS_VERSION_BUILD')) { - // Windows is probably insecure in this case. - return self::$useOpensslParse = false; - } - - $compareDistroVersionPrefix = function ($prefix, $fixedVersion) { - $regex = '{^'.preg_quote($prefix).'([0-9]+)$}'; - - if (preg_match($regex, PHP_VERSION, $m)) { - return ((int) $m[1]) >= $fixedVersion; - } - - return false; - }; - - // Hard coded list of PHP distributions with the fix backported. - if ( - $compareDistroVersionPrefix('5.3.3-7+squeeze', 18) // Debian 6 (Squeeze) - || $compareDistroVersionPrefix('5.4.4-14+deb7u', 7) // Debian 7 (Wheezy) - || $compareDistroVersionPrefix('5.3.10-1ubuntu3.', 9) // Ubuntu 12.04 (Precise) - ) { - return self::$useOpensslParse = true; - } - - // Symfony Process component is missing so we assume it is unsafe at this point - if (!class_exists('Symfony\Component\Process\PhpProcess')) { - return self::$useOpensslParse = false; - } - - // This is where things get crazy, because distros backport security - // fixes the chances are on NIX systems the fix has been applied but - // it's not possible to verify that from the PHP version. - // - // To verify exec a new PHP process and run the issue testcase with - // known safe input that replicates the bug. - - // Based on testcase in https://github.com/php/php-src/commit/c1224573c773b6845e83505f717fbf820fc18415 - // changes in https://github.com/php/php-src/commit/76a7fd893b7d6101300cc656058704a73254d593 - $cert = 'LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVwRENDQTR5Z0F3SUJBZ0lKQUp6dThyNnU2ZUJjTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUhETVFzd0NRWUQKVlFRR0V3SkVSVEVjTUJvR0ExVUVDQXdUVG05eVpISm9aV2x1TFZkbGMzUm1ZV3hsYmpFUU1BNEdBMVVFQnd3SApTOE9Ed3Jac2JqRVVNQklHQTFVRUNnd0xVMlZyZEdsdmJrVnBibk14SHpBZEJnTlZCQXNNRmsxaGJHbGphVzkxCmN5QkRaWEowSUZObFkzUnBiMjR4SVRBZkJnTlZCQU1NR0cxaGJHbGphVzkxY3k1elpXdDBhVzl1WldsdWN5NWsKWlRFcU1DZ0dDU3FHU0liM0RRRUpBUlliYzNSbFptRnVMbVZ6YzJWeVFITmxhM1JwYjI1bGFXNXpMbVJsTUhVWQpaREU1TnpBd01UQXhNREF3TURBd1dnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKQUFBQUFBQVhEVEUwTVRFeU9ERXhNemt6TlZvd2djTXhDekFKQmdOVkJBWVRBa1JGTVJ3d0dnWURWUVFJREJOTwpiM0prY21obGFXNHRWMlZ6ZEdaaGJHVnVNUkF3RGdZRFZRUUhEQWRMdzRQQ3RteHVNUlF3RWdZRFZRUUtEQXRUClpXdDBhVzl1UldsdWN6RWZNQjBHQTFVRUN3d1dUV0ZzYVdOcGIzVnpJRU5sY25RZ1UyVmpkR2x2YmpFaE1COEcKQTFVRUF3d1liV0ZzYVdOcGIzVnpMbk5sYTNScGIyNWxhVzV6TG1SbE1Tb3dLQVlKS29aSWh2Y05BUWtCRmh0egpkR1ZtWVc0dVpYTnpaWEpBYzJWcmRHbHZibVZwYm5NdVpHVXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCCkR3QXdnZ0VLQW9JQkFRRERBZjNobDdKWTBYY0ZuaXlFSnBTU0RxbjBPcUJyNlFQNjV1c0pQUnQvOFBhRG9xQnUKd0VZVC9OYSs2ZnNnUGpDMHVLOURaZ1dnMnRIV1dvYW5TYmxBTW96NVBINlorUzRTSFJaN2UyZERJalBqZGhqaAowbUxnMlVNTzV5cDBWNzk3R2dzOWxOdDZKUmZIODFNTjJvYlhXczROdHp0TE11RDZlZ3FwcjhkRGJyMzRhT3M4CnBrZHVpNVVhd1Raa3N5NXBMUEhxNWNNaEZHbTA2djY1Q0xvMFYyUGQ5K0tBb2tQclBjTjVLTEtlYno3bUxwazYKU01lRVhPS1A0aWRFcXh5UTdPN2ZCdUhNZWRzUWh1K3ByWTNzaTNCVXlLZlF0UDVDWm5YMmJwMHdLSHhYMTJEWAoxbmZGSXQ5RGJHdkhUY3lPdU4rblpMUEJtM3ZXeG50eUlJdlZBZ01CQUFHalFqQkFNQWtHQTFVZEV3UUNNQUF3CkVRWUpZSVpJQVliNFFnRUJCQVFEQWdlQU1Bc0dBMVVkRHdRRUF3SUZvREFUQmdOVkhTVUVEREFLQmdnckJnRUYKQlFjREFqQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUFHMGZaWVlDVGJkajFYWWMrMVNub2FQUit2SThDOENhRAo4KzBVWWhkbnlVNGdnYTBCQWNEclk5ZTk0ZUVBdTZacXljRjZGakxxWFhkQWJvcHBXb2NyNlQ2R0QxeDMzQ2tsClZBcnpHL0t4UW9oR0QySmVxa2hJTWxEb214SE83a2EzOStPYThpMnZXTFZ5alU4QVp2V01BcnVIYTRFRU55RzcKbFcyQWFnYUZLRkNyOVRuWFRmcmR4R1ZFYnY3S1ZRNmJkaGc1cDVTanBXSDErTXEwM3VSM1pYUEJZZHlWODMxOQpvMGxWajFLRkkyRENML2xpV2lzSlJvb2YrMWNSMzVDdGQwd1lCY3BCNlRac2xNY09QbDc2ZHdLd0pnZUpvMlFnClpzZm1jMnZDMS9xT2xOdU5xLzBUenprVkd2OEVUVDNDZ2FVK1VYZTRYT1Z2a2NjZWJKbjJkZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K'; - $script = <<<'EOT' - -error_reporting(-1); -$info = openssl_x509_parse(base64_decode('%s')); -var_dump(PHP_VERSION, $info['issuer']['emailAddress'], $info['validFrom_time_t']); - -EOT; - $script = '<'."?php\n".sprintf($script, $cert); - - try { - $process = new PhpProcess($script); - $process->mustRun(); - } catch (\Exception $e) { - // In the case of any exceptions just accept it is not possible to - // determine the safety of openssl_x509_parse and bail out. - return self::$useOpensslParse = false; - } - - $output = preg_split('{\r?\n}', trim($process->getOutput())); - $errorOutput = trim($process->getErrorOutput()); - - if ( - count($output) === 3 - && $output[0] === sprintf('string(%d) "%s"', strlen(PHP_VERSION), PHP_VERSION) - && $output[1] === 'string(27) "stefan.esser@sektioneins.de"' - && $output[2] === 'int(-1)' - && preg_match('{openssl_x509_parse\(\): illegal (?:ASN1 data type for|length in) timestamp in - on line \d+}', $errorOutput) - ) { - // This PHP has the fix backported probably by a distro security team. - return self::$useOpensslParse = true; - } - - return self::$useOpensslParse = false; - } - - /** - * Resets the static caches - */ - public static function reset() - { - self::$caFileValidity = array(); - self::$caPath = null; - self::$useOpensslParse = null; - } -} diff --git a/libraries/vendor/composer/installed.json b/libraries/vendor/composer/installed.json deleted file mode 100644 index bfc5d2cec3909..0000000000000 --- a/libraries/vendor/composer/installed.json +++ /dev/null @@ -1,2702 +0,0 @@ -[ - { - "name": "composer/ca-bundle", - "version": "1.1.1", - "version_normalized": "1.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169", - "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", - "psr/log": "^1.0", - "symfony/process": "^2.5 || ^3.0 || ^4.0" - }, - "time": "2018-03-29T19:57:20+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ] - }, - { - "name": "defuse/php-encryption", - "version": "v2.2.0", - "version_normalized": "2.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/defuse/php-encryption.git", - "reference": "0d4d27c368ca6798bc162469e43248c363c73495" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/defuse/php-encryption/zipball/0d4d27c368ca6798bc162469e43248c363c73495", - "reference": "0d4d27c368ca6798bc162469e43248c363c73495", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "paragonie/random_compat": "~2.0", - "php": ">=5.4.0" - }, - "require-dev": { - "nikic/php-parser": "^2.0|^3.0|^4.0", - "phpunit/phpunit": "^4|^5" - }, - "time": "2018-04-23T19:33:40+00:00", - "bin": [ - "bin/generate-defuse-key" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Defuse\\Crypto\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Hornby", - "email": "taylor@defuse.ca", - "homepage": "https://defuse.ca/" - }, - { - "name": "Scott Arciszewski", - "email": "info@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "Secure PHP Encryption Library", - "keywords": [ - "aes", - "authenticated encryption", - "cipher", - "crypto", - "cryptography", - "encrypt", - "encryption", - "openssl", - "security", - "symmetric key cryptography" - ] - }, - { - "name": "doctrine/inflector", - "version": "v1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462", - "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.2" - }, - "time": "2017-07-22T12:18:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "inflection", - "pluralize", - "singularize", - "string" - ] - }, - { - "name": "fig/link-util", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/link-util.git", - "reference": "1a07821801a148be4add11ab0603e4af55a72fac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac", - "reference": "1a07821801a148be4add11ab0603e4af55a72fac", - "shasum": "" - }, - "require": { - "php": ">=5.5.0", - "psr/link": "~1.0@dev" - }, - "require-dev": { - "phpunit/phpunit": "^5.1", - "squizlabs/php_codesniffer": "^2.3.1" - }, - "time": "2016-10-17T18:31:11+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Fig\\Link\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common utility implementations for HTTP links", - "keywords": [ - "http", - "http-link", - "link", - "psr", - "psr-13", - "rest" - ] - }, - { - "name": "google/recaptcha", - "version": "1.1.3", - "version_normalized": "1.1.3.0", - "source": { - "type": "git", - "url": "https://github.com/google/recaptcha.git", - "reference": "5a56d15ca10a7b75158178752b2ad8f755eb4f78" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/google/recaptcha/zipball/5a56d15ca10a7b75158178752b2ad8f755eb4f78", - "reference": "5a56d15ca10a7b75158178752b2ad8f755eb4f78", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.8" - }, - "time": "2017-03-09T18:44:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "ReCaptcha\\": "src/ReCaptcha" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Client library for reCAPTCHA, a free service that protect websites from spam and abuse.", - "homepage": "http://www.google.com/recaptcha/", - "keywords": [ - "Abuse", - "captcha", - "recaptcha", - "spam" - ] - }, - { - "name": "joomla/application", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/application.git", - "reference": "ca4c5a10a0efe7c2d9d413a05572ee26b1f7b6f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/application/zipball/ca4c5a10a0efe7c2d9d413a05572ee26b1f7b6f4", - "reference": "ca4c5a10a0efe7c2d9d413a05572ee26b1f7b6f4", - "shasum": "" - }, - "require": { - "joomla/event": "~2.0", - "joomla/input": "~1.2|~2.0", - "joomla/registry": "^1.4.5|~2.0", - "php": "~7.0", - "psr/http-message": "~1.0", - "psr/log": "~1.0", - "zendframework/zend-diactoros": "~1.3" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "joomla/controller": "~1.0|~2.0", - "joomla/di": "~1.5|~2.0", - "joomla/router": "~2.0", - "joomla/session": "~2.0", - "joomla/test": "~1.1", - "joomla/uri": "~1.1", - "phpunit/phpunit": "~6.3" - }, - "suggest": { - "joomla/controller": "To support resolving ControllerInterface objects in ControllerResolverInterface, install joomla/controller", - "joomla/router": "To use WebApplication or ControllerResolverInterface implementations, install joomla/router", - "joomla/session": "To use AbstractWebApplication with session support, install joomla/session", - "joomla/uri": "To use AbstractWebApplication, install joomla/uri", - "psr/container": "To use the ContainerControllerResolver, install any PSR-11 compatible container" - }, - "time": "2018-05-28T15:33:35+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Application\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Application Package", - "homepage": "https://github.com/joomla-framework/application", - "keywords": [ - "application", - "framework", - "joomla" - ] - }, - { - "name": "joomla/archive", - "version": "1.1.5", - "version_normalized": "1.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/archive.git", - "reference": "2b5d645804c6af7c363716ba1956929f8b9665d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/archive/zipball/2b5d645804c6af7c363716ba1956929f8b9665d3", - "reference": "2b5d645804c6af7c363716ba1956929f8b9665d3", - "shasum": "" - }, - "require": { - "joomla/filesystem": "~1.3|~2.0", - "php": "^5.3.10|~7.0" - }, - "require-dev": { - "joomla/test": "~1.0", - "phpunit/phpunit": "^4.8.35|^5.4.3|~6.0", - "squizlabs/php_codesniffer": "1.*" - }, - "suggest": { - "ext-bz2": "To extract bzip2 compressed packages", - "ext-zip": "To extract zip compressed packages", - "ext-zlib": "To extract gzip or zip compressed packages" - }, - "time": "2017-06-12T11:32:11+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Archive\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0+" - ], - "description": "Joomla Archive Package", - "homepage": "https://github.com/joomla-framework/archive", - "keywords": [ - "archive", - "framework", - "joomla" - ] - }, - { - "name": "joomla/authentication", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/authentication.git", - "reference": "62014f2516f77cf6e2c6b3d772bb5dae53d6fc3d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/authentication/zipball/62014f2516f77cf6e2c6b3d772bb5dae53d6fc3d", - "reference": "62014f2516f77cf6e2c6b3d772bb5dae53d6fc3d", - "shasum": "" - }, - "require": { - "php": "~7.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "joomla/database": "~2.0", - "joomla/input": "~1.0|~2.0", - "joomla/test": "~1.0", - "phpunit/dbunit": "~1.3|~2.0", - "phpunit/phpunit": "^5.4.3" - }, - "suggest": { - "joomla/database": "Required if you want to use Joomla\\Authentication\\Strategies\\DatabaseStrategy", - "joomla/input": "Required if you want to use classes in the Joomla\\Authentication\\Strategies namespace" - }, - "time": "2018-05-13T23:00:40+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Authentication\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Authentication Package", - "homepage": "https://github.com/joomla-framework/authentication", - "keywords": [ - "Authentication", - "framework", - "joomla" - ] - }, - { - "name": "joomla/console", - "version": "dev-master", - "version_normalized": "9999999-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/console.git", - "reference": "2843800b0df2c4519c18d6eb9d56f9c7b1daa6ad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/console/zipball/2843800b0df2c4519c18d6eb9d56f9c7b1daa6ad", - "reference": "2843800b0df2c4519c18d6eb9d56f9c7b1daa6ad", - "shasum": "" - }, - "require": { - "joomla/application": "~2.0", - "joomla/event": "~2.0", - "joomla/string": "~2.0", - "php": "~7.0", - "symfony/console": "~3.4|~4.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "phpunit/phpunit": "~6.3", - "psr/container": "~1.0" - }, - "suggest": { - "psr/container": "To use the ContainerLoader" - }, - "time": "2018-05-21T17:08:36+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Console\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Console Package", - "homepage": "https://github.com/joomla-framework/console", - "keywords": [ - "console", - "framework", - "joomla" - ] - }, - { - "name": "joomla/controller", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/controller.git", - "reference": "fad0742b56ed085fee7699f01ae90d54ac9e83a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/controller/zipball/fad0742b56ed085fee7699f01ae90d54ac9e83a2", - "reference": "fad0742b56ed085fee7699f01ae90d54ac9e83a2", - "shasum": "" - }, - "require": { - "php": "~7.0" - }, - "require-dev": { - "joomla/application": "~1.0|~2.0", - "joomla/coding-standards": "~2.0@alpha", - "joomla/input": "~1.0|~2.0", - "phpunit/phpunit": "~6.3" - }, - "suggest": { - "joomla/application": "The joomla/application package is required to use Joomla\\Controller\\AbstractController", - "joomla/input": "The joomla/input package is required to use Joomla\\Controller\\AbstractController" - }, - "time": "2018-02-10T00:30:21+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Controller\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Controller Package", - "homepage": "https://github.com/joomla-framework/controller", - "keywords": [ - "controller", - "framework", - "joomla" - ] - }, - { - "name": "joomla/crypt", - "version": "dev-master", - "version_normalized": "9999999-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/crypt.git", - "reference": "68532f41fd62c96987e7b264f59b31355efb0f7e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/crypt/zipball/68532f41fd62c96987e7b264f59b31355efb0f7e", - "reference": "68532f41fd62c96987e7b264f59b31355efb0f7e", - "shasum": "" - }, - "require": { - "php": "~7.0" - }, - "require-dev": { - "defuse/php-encryption": "~2.0", - "joomla/coding-standards": "~2.0@alpha", - "paragonie/sodium_compat": "~1.0", - "phpunit/phpunit": "~6.3", - "symfony/phpunit-bridge": "~3.3", - "symfony/polyfill-util": "~1.0" - }, - "suggest": { - "defuse/php-encryption": "To use Crypto cipher", - "paragonie/sodium_compat": "To use Sodium cipher" - }, - "time": "2018-03-13T01:30:39+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Crypt\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Crypt Package", - "homepage": "https://github.com/joomla-framework/crypt", - "keywords": [ - "crypt", - "framework", - "joomla" - ] - }, - { - "name": "joomla/data", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/data.git", - "reference": "b5bec55e6d85b2d7df1fec6817d0ed9f509e49aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/data/zipball/b5bec55e6d85b2d7df1fec6817d0ed9f509e49aa", - "reference": "b5bec55e6d85b2d7df1fec6817d0ed9f509e49aa", - "shasum": "" - }, - "require": { - "joomla/registry": "^1.4.5|~2.0", - "php": "~7.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "joomla/test": "~1.0", - "phpunit/phpunit": "~6.3" - }, - "time": "2018-02-10T00:54:38+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Data\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Data Package", - "homepage": "https://github.com/joomla-framework/data", - "keywords": [ - "data", - "framework", - "joomla" - ] - }, - { - "name": "joomla/database", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/database.git", - "reference": "c839698cafa48e209946e7e6df1f45da633f3d3a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/database/zipball/c839698cafa48e209946e7e6df1f45da633f3d3a", - "reference": "c839698cafa48e209946e7e6df1f45da633f3d3a", - "shasum": "" - }, - "require": { - "joomla/event": "~2.0@dev", - "php": "~7.0", - "psr/log": "~1.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "joomla/di": "~1.0|~2.0", - "joomla/registry": "^1.4.5|~2.0", - "joomla/test": "~1.2", - "phpunit/dbunit": "~3.0", - "phpunit/phpunit": "~6.3" - }, - "suggest": { - "ext-mysqli": "To connect to a MySQL database via MySQLi", - "ext-pdo": "To connect to a MySQL, Oracle, PostgreSQL, or SQLite database via PDO", - "ext-pgsql": "To connect to a PostgreSQL database", - "ext-sqlsrv": "To connect to a SQL Server database", - "joomla/di": "To use the Database ServiceProviderInterface objects, install joomla/di.", - "joomla/registry": "To use the Database ServiceProviderInterface objects, install joomla/registry." - }, - "time": "2018-06-23T18:53:33+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Database\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Database Package", - "homepage": "https://github.com/joomla-framework/database", - "keywords": [ - "database", - "framework", - "joomla" - ] - }, - { - "name": "joomla/di", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/di.git", - "reference": "f20cbb40dadac88004f96cd10a73617a9596b2e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/di/zipball/f20cbb40dadac88004f96cd10a73617a9596b2e2", - "reference": "f20cbb40dadac88004f96cd10a73617a9596b2e2", - "shasum": "" - }, - "require": { - "php": "~7.0", - "psr/container": "~1.0" - }, - "provide": { - "psr/container-implementation": "~1.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "phpunit/phpunit": "~6.3" - }, - "time": "2018-02-25T16:34:27+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\DI\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla DI Package", - "homepage": "https://github.com/joomla-framework/di", - "keywords": [ - "container", - "dependency injection", - "di", - "framework", - "ioc", - "joomla" - ] - }, - { - "name": "joomla/event", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/event.git", - "reference": "9092ee2dc3fd010c7759c4467a93397c1dac8026" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/event/zipball/9092ee2dc3fd010c7759c4467a93397c1dac8026", - "reference": "9092ee2dc3fd010c7759c4467a93397c1dac8026", - "shasum": "" - }, - "require": { - "php": "~7.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "phpunit/phpunit": "~6.3" - }, - "time": "2018-04-10T05:22:19+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Event\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Event Package", - "homepage": "https://github.com/joomla-framework/event", - "keywords": [ - "event", - "framework", - "joomla" - ] - }, - { - "name": "joomla/filesystem", - "version": "1.3.1", - "version_normalized": "1.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/filesystem.git", - "reference": "6e2840a82a3958cf8f23ae869e2292d812cfa5d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/filesystem/zipball/6e2840a82a3958cf8f23ae869e2292d812cfa5d3", - "reference": "6e2840a82a3958cf8f23ae869e2292d812cfa5d3", - "shasum": "" - }, - "require": { - "php": "^5.3.10|~7.0" - }, - "require-dev": { - "paragonie/random_compat": "~1.0|~2.0", - "phpunit/phpunit": "~4.8|~5.0", - "squizlabs/php_codesniffer": "1.*" - }, - "suggest": { - "paragonie/random_compat": "Required to use Joomla\\Filesystem\\Path::isOwner()" - }, - "time": "2016-12-10T17:45:15+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Filesystem\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0+" - ], - "description": "Joomla Filesystem Package", - "homepage": "https://github.com/joomla/joomla-framework-filesystem", - "keywords": [ - "filesystem", - "framework", - "joomla" - ] - }, - { - "name": "joomla/filter", - "version": "1.3.5", - "version_normalized": "1.3.5.0", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/filter.git", - "reference": "ee1d870b5c188056745e1dd3cece21522e2158b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/filter/zipball/ee1d870b5c188056745e1dd3cece21522e2158b8", - "reference": "ee1d870b5c188056745e1dd3cece21522e2158b8", - "shasum": "" - }, - "require": { - "joomla/string": "~1.3|~2.0", - "php": "^5.3.10|~7.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "joomla/language": "~1.3", - "phpunit/phpunit": "^4.8.35|^5.4.3|~6.0" - }, - "suggest": { - "joomla/language": "Required only if you want to use `OutputFilter::stringURLSafe`." - }, - "time": "2018-05-26T15:48:53+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Filter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Filter Package", - "homepage": "https://github.com/joomla-framework/filter", - "keywords": [ - "filter", - "framework", - "joomla" - ] - }, - { - "name": "joomla/http", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/http.git", - "reference": "a9ac5f74c1825518d8cb6096f7513b512172da72" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/http/zipball/a9ac5f74c1825518d8cb6096f7513b512172da72", - "reference": "a9ac5f74c1825518d8cb6096f7513b512172da72", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "~1.0", - "joomla/uri": "~1.0|~2.0", - "php": "~7.0", - "psr/http-message": "~1.0", - "zendframework/zend-diactoros": "~1.1" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "joomla/test": "~1.0", - "phpunit/phpunit": "~6.3" - }, - "suggest": { - "ext-curl": "To use cURL for HTTP connections" - }, - "time": "2018-03-13T01:52:54+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Http\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla HTTP Package", - "homepage": "https://github.com/joomla-framework/http", - "keywords": [ - "framework", - "http", - "joomla" - ] - }, - { - "name": "joomla/image", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/image.git", - "reference": "0222c4a6dba784ea05715d8c060911cb57091953" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/image/zipball/0222c4a6dba784ea05715d8c060911cb57091953", - "reference": "0222c4a6dba784ea05715d8c060911cb57091953", - "shasum": "" - }, - "require": { - "ext-gd": "*", - "php": "~7.0", - "psr/log": "~1.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "joomla/test": "~1.0", - "phpunit/phpunit": "~6.3" - }, - "time": "2018-05-25T02:30:04+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Image\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Image Package", - "homepage": "https://github.com/joomla-framework/image", - "keywords": [ - "framework", - "image", - "joomla" - ] - }, - { - "name": "joomla/input", - "version": "1.2.3", - "version_normalized": "1.2.3.0", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/input.git", - "reference": "ff97c08aa5fa0f48ccc3e7444827f7f9a6b904c8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/input/zipball/ff97c08aa5fa0f48ccc3e7444827f7f9a6b904c8", - "reference": "ff97c08aa5fa0f48ccc3e7444827f7f9a6b904c8", - "shasum": "" - }, - "require": { - "joomla/filter": "~1.0", - "php": "^5.3.10|~7.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "joomla/test": "~1.0", - "phpunit/phpunit": "^4.8.35|^5.4.3|~6.0" - }, - "time": "2018-05-26T17:08:08+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Input\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Input Package", - "homepage": "https://github.com/joomla-framework/input", - "keywords": [ - "framework", - "input", - "joomla" - ] - }, - { - "name": "joomla/ldap", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/ldap.git", - "reference": "f19a37a05c21fd197688aedcb67489ca7346695c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/ldap/zipball/f19a37a05c21fd197688aedcb67489ca7346695c", - "reference": "f19a37a05c21fd197688aedcb67489ca7346695c", - "shasum": "" - }, - "require": { - "ext-ldap": "*", - "php": "~7.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "joomla/registry": "^1.4.5|~2.0", - "phpunit/phpunit": "~6.3" - }, - "time": "2018-05-25T02:31:33+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Ldap\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla LDAP Package", - "homepage": "https://github.com/joomla-framework/ldap", - "keywords": [ - "framework", - "joomla", - "ldap" - ] - }, - { - "name": "joomla/oauth1", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/oauth1.git", - "reference": "bd0c1c9b4b85d6de84c495e17ac6449ae3573e03" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/oauth1/zipball/bd0c1c9b4b85d6de84c495e17ac6449ae3573e03", - "reference": "bd0c1c9b4b85d6de84c495e17ac6449ae3573e03", - "shasum": "" - }, - "require": { - "joomla/application": "~2.0", - "joomla/http": "^1.2.2|~2.0", - "joomla/input": "~1.2|~2.0", - "joomla/registry": "^1.4.5|~2.0", - "joomla/session": "~2.0", - "php": "~7.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "joomla/event": "~2.0", - "joomla/test": "~1.0", - "phpunit/phpunit": "~6.3" - }, - "time": "2018-03-15T00:28:53+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\OAuth1\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla OAuth1 Package", - "homepage": "https://github.com/joomla-framework/oauth1", - "keywords": [ - "framework", - "joomla", - "oauth1" - ] - }, - { - "name": "joomla/oauth2", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/oauth2.git", - "reference": "9c18ae147aaff24156611be0a1e78e408b144a37" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/oauth2/zipball/9c18ae147aaff24156611be0a1e78e408b144a37", - "reference": "9c18ae147aaff24156611be0a1e78e408b144a37", - "shasum": "" - }, - "require": { - "joomla/application": "~1.8|~2.0", - "joomla/http": "^1.2.2|~2.0", - "joomla/input": "~1.2|~2.0", - "joomla/session": "~1.0|~2.0", - "joomla/uri": "~1.0|~2.0", - "php": "~7.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "phpunit/phpunit": "~6.3" - }, - "time": "2018-03-23T02:07:00+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\OAuth2\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla OAuth2 Package", - "homepage": "https://github.com/joomla-framework/oauth2", - "keywords": [ - "framework", - "joomla", - "oauth2" - ] - }, - { - "name": "joomla/registry", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/registry.git", - "reference": "d6f0d054668f5daece36787e8158c317f90a2a2d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/registry/zipball/d6f0d054668f5daece36787e8158c317f90a2a2d", - "reference": "d6f0d054668f5daece36787e8158c317f90a2a2d", - "shasum": "" - }, - "require": { - "joomla/utilities": "^1.4.1|~2.0", - "php": "~7.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "phpunit/phpunit": "~6.3", - "symfony/yaml": "~2.7|~3.0|~4.0" - }, - "suggest": { - "symfony/yaml": "Install symfony/yaml if you require YAML support." - }, - "time": "2018-06-15T12:02:26+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Registry\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Registry Package", - "homepage": "https://github.com/joomla-framework/registry", - "keywords": [ - "framework", - "joomla", - "registry" - ] - }, - { - "name": "joomla/session", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/session.git", - "reference": "8dd621956f33461ea8d6ca590f0fcc83bb20ed9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/session/zipball/8dd621956f33461ea8d6ca590f0fcc83bb20ed9e", - "reference": "8dd621956f33461ea8d6ca590f0fcc83bb20ed9e", - "shasum": "" - }, - "require": { - "php": "~7.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "joomla/database": "~2.0@dev", - "joomla/event": "~2.0@dev", - "joomla/input": "~2.0@dev", - "joomla/test": "~1.0", - "phpunit/dbunit": "~3.0", - "phpunit/phpunit": "~6.3" - }, - "suggest": { - "ext-apcu": "To use APCu cache as a session handler", - "ext-memcached": "To use a Memcached server as a session handler", - "ext-redis": "To use a Redis server as a session handler", - "ext-wincache": "To use WinCache as a session handler", - "joomla/database": "Install joomla/database if you want to use Database session storage.", - "joomla/event": "The joomla/event package is required to use Joomla\\Session\\Session.", - "joomla/input": "The joomla/input package is required to use Address and Forwarded session validators." - }, - "time": "2018-06-18T03:30:21+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Session\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Session Package", - "homepage": "https://github.com/joomla-framework/session", - "keywords": [ - "framework", - "joomla", - "session" - ] - }, - { - "name": "joomla/string", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/string.git", - "reference": "03610c2577bf2f71013c2a8ad587842d6f66507f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/string/zipball/03610c2577bf2f71013c2a8ad587842d6f66507f", - "reference": "03610c2577bf2f71013c2a8ad587842d6f66507f", - "shasum": "" - }, - "require": { - "php": "~7.0" - }, - "require-dev": { - "doctrine/inflector": "~1.2", - "joomla/coding-standards": "~2.0@alpha", - "joomla/test": "~1.0", - "phpunit/phpunit": "~6.3" - }, - "suggest": { - "doctrine/inflector": "To use the string inflector", - "ext-mbstring": "For improved processing" - }, - "time": "2018-02-25T21:52:07+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\String\\": "src/" - }, - "files": [ - "src/phputf8/utf8.php", - "src/phputf8/ord.php", - "src/phputf8/str_ireplace.php", - "src/phputf8/str_pad.php", - "src/phputf8/str_split.php", - "src/phputf8/strcasecmp.php", - "src/phputf8/strcspn.php", - "src/phputf8/stristr.php", - "src/phputf8/strrev.php", - "src/phputf8/strspn.php", - "src/phputf8/trim.php", - "src/phputf8/ucfirst.php", - "src/phputf8/ucwords.php", - "src/phputf8/utils/ascii.php", - "src/phputf8/utils/validation.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla String Package", - "homepage": "https://github.com/joomla-framework/string", - "keywords": [ - "framework", - "joomla", - "string" - ] - }, - { - "name": "joomla/uri", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/uri.git", - "reference": "9459faee3cfbe4062d95fb9eb3d2c3d661d853f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/uri/zipball/9459faee3cfbe4062d95fb9eb3d2c3d661d853f5", - "reference": "9459faee3cfbe4062d95fb9eb3d2c3d661d853f5", - "shasum": "" - }, - "require": { - "php": "~7.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "joomla/test": "~1.0", - "phpunit/phpunit": "~6.3" - }, - "time": "2018-02-25T22:52:21+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Uri\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Uri Package", - "homepage": "https://github.com/joomla-framework/uri", - "keywords": [ - "framework", - "joomla", - "uri" - ] - }, - { - "name": "joomla/utilities", - "version": "dev-2.0-dev", - "version_normalized": "dev-2.0-dev", - "source": { - "type": "git", - "url": "https://github.com/joomla-framework/utilities.git", - "reference": "da30b6c890811ddab6eeca29d6148caa866242f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/utilities/zipball/da30b6c890811ddab6eeca29d6148caa866242f6", - "reference": "da30b6c890811ddab6eeca29d6148caa866242f6", - "shasum": "" - }, - "require": { - "joomla/string": "~1.3|~2.0", - "php": "~7.0" - }, - "require-dev": { - "joomla/coding-standards": "~2.0@alpha", - "phpunit/phpunit": "~6.3" - }, - "time": "2018-03-15T00:43:07+00:00", - "type": "joomla-package", - "extra": { - "branch-alias": { - "dev-2.0-dev": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Joomla\\Utilities\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Joomla Utilities Package", - "homepage": "https://github.com/joomla-framework/utilities", - "keywords": [ - "framework", - "joomla", - "utilities" - ] - }, - { - "name": "mso/idna-convert", - "version": "v1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://github.com/phlylabs/idna-convert.git", - "reference": "a6dfb6f87611e3a89d2eec4924a0f51db755c573" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phlylabs/idna-convert/zipball/a6dfb6f87611e3a89d2eec4924a0f51db755c573", - "reference": "a6dfb6f87611e3a89d2eec4924a0f51db755c573", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "php": ">=5.6.0" - }, - "time": "2016-06-19T18:08:43+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Mso\\IdnaConvert\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1+" - ], - "authors": [ - { - "name": "Matthias Sommerfeld", - "email": "mso@phlylabs.de", - "role": "Developer" - } - ], - "description": "A library for encoding and decoding internationalized domain names", - "homepage": "http://idnaconv.net/", - "keywords": [ - "idn", - "idna", - "php" - ] - }, - { - "name": "paragonie/random_compat", - "version": "v2.0.15", - "version_normalized": "2.0.15.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "10bcb46e8f3d365170f6de9d05245aa066b81f09" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/10bcb46e8f3d365170f6de9d05245aa066b81f09", - "reference": "10bcb46e8f3d365170f6de9d05245aa066b81f09", - "shasum": "" - }, - "require": { - "php": ">=5.2.0" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "time": "2018-06-08T15:26:40+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "lib/random.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ] - }, - { - "name": "paragonie/sodium_compat", - "version": "v1.6.3", - "version_normalized": "1.6.3.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/sodium_compat.git", - "reference": "7d0549c3947eaea620f4e523f42ab236cf7fd304" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/7d0549c3947eaea620f4e523f42ab236cf7fd304", - "reference": "7d0549c3947eaea620f4e523f42ab236cf7fd304", - "shasum": "" - }, - "require": { - "paragonie/random_compat": ">=1", - "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7" - }, - "require-dev": { - "phpunit/phpunit": "^3|^4|^5" - }, - "suggest": { - "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", - "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." - }, - "time": "2018-06-06T17:30:29+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "autoload.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com" - }, - { - "name": "Frank Denis", - "email": "jedisct1@pureftpd.org" - } - ], - "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists", - "keywords": [ - "Authentication", - "BLAKE2b", - "ChaCha20", - "ChaCha20-Poly1305", - "Chapoly", - "Curve25519", - "Ed25519", - "EdDSA", - "Edwards-curve Digital Signature Algorithm", - "Elliptic Curve Diffie-Hellman", - "Poly1305", - "Pure-PHP cryptography", - "RFC 7748", - "RFC 8032", - "Salpoly", - "Salsa20", - "X25519", - "XChaCha20-Poly1305", - "XSalsa20-Poly1305", - "Xchacha20", - "Xsalsa20", - "aead", - "cryptography", - "ecdh", - "elliptic curve", - "elliptic curve cryptography", - "encryption", - "libsodium", - "php", - "public-key cryptography", - "secret-key cryptography", - "side-channel resistant" - ] - }, - { - "name": "phpmailer/phpmailer", - "version": "v6.0.5", - "version_normalized": "6.0.5.0", - "source": { - "type": "git", - "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "cb3ea134d4d3729e7857737d5f320cce9caf4d32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/cb3ea134d4d3729e7857737d5f320cce9caf4d32", - "reference": "cb3ea134d4d3729e7857737d5f320cce9caf4d32", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-filter": "*", - "php": ">=5.5.0" - }, - "require-dev": { - "doctrine/annotations": "1.2.*", - "friendsofphp/php-cs-fixer": "^2.2", - "phpdocumentor/phpdocumentor": "2.*", - "phpunit/phpunit": "^4.8 || ^5.7", - "zendframework/zend-eventmanager": "3.0.*", - "zendframework/zend-i18n": "2.7.3", - "zendframework/zend-serializer": "2.7.*" - }, - "suggest": { - "ext-mbstring": "Needed to send email in multibyte encoding charset", - "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", - "league/oauth2-google": "Needed for Google XOAUTH2 authentication", - "psr/log": "For optional PSR-3 debug logging", - "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", - "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" - }, - "time": "2018-03-27T13:49:45+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "PHPMailer\\PHPMailer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1" - ], - "authors": [ - { - "name": "Jim Jagielski", - "email": "jimjag@gmail.com" - }, - { - "name": "Marcus Bointon", - "email": "phpmailer@synchromedia.co.uk" - }, - { - "name": "Andy Prevost", - "email": "codeworxtech@users.sourceforge.net" - }, - { - "name": "Brent R. Matzelle" - } - ], - "description": "PHPMailer is a full-featured email creation and transfer class for PHP" - }, - { - "name": "psr/container", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2017-02-14T16:28:37+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ] - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2016-08-06T14:39:51+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ] - }, - { - "name": "psr/link", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/link.git", - "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562", - "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2016-10-28T16:06:13+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Link\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for HTTP links", - "keywords": [ - "http", - "http-link", - "link", - "psr", - "psr-13", - "rest" - ] - }, - { - "name": "psr/log", - "version": "1.0.2", - "version_normalized": "1.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2016-10-10T12:19:37+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ] - }, - { - "name": "symfony/console", - "version": "v3.4.11", - "version_normalized": "3.4.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/36f83f642443c46f3cf751d4d2ee5d047d757a27", - "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" - }, - "suggest": { - "psr/log-implementation": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "time": "2018-05-16T08:49:21+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/debug", - "version": "v3.4.11", - "version_normalized": "3.4.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/b28fd73fefbac341f673f5efd707d539d6a19f68", - "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" - }, - "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" - }, - "time": "2018-05-16T14:03:39+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/ldap", - "version": "v3.4.11", - "version_normalized": "3.4.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/ldap.git", - "reference": "be38e9977e072a66b5c1f6c86f6ac1f7c8752736" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/ldap/zipball/be38e9977e072a66b5c1f6c86f6ac1f7c8752736", - "reference": "be38e9977e072a66b5c1f6c86f6ac1f7c8752736", - "shasum": "" - }, - "require": { - "ext-ldap": "*", - "php": "^5.5.9|>=7.0.8", - "symfony/options-resolver": "~2.8|~3.0|~4.0", - "symfony/polyfill-php56": "~1.0" - }, - "time": "2018-01-03T07:37:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Ldap\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Charles Sarrazin", - "email": "charles@sarraz.in" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "An abstraction in front of PHP's LDAP functions, compatible with PHP 5.3.9 onwards.", - "homepage": "https://symfony.com", - "keywords": [ - "active directory", - "ldap" - ] - }, - { - "name": "symfony/options-resolver", - "version": "v3.4.11", - "version_normalized": "3.4.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/f3109a6aedd20e35c3a33190e932c2b063b7b50e", - "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "time": "2018-01-11T07:56:07+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony OptionsResolver Component", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ] - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.8.0", - "version_normalized": "1.8.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae", - "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2018-04-30T19:57:29+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ] - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.8.0", - "version_normalized": "1.8.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "3296adf6a6454a050679cde90f95350ad604b171" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", - "reference": "3296adf6a6454a050679cde90f95350ad604b171", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "time": "2018-04-26T10:06:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ] - }, - { - "name": "symfony/polyfill-php56", - "version": "v1.8.0", - "version_normalized": "1.8.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "af98553c84912459db3f636329567809d639a8f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/af98553c84912459db3f636329567809d639a8f6", - "reference": "af98553c84912459db3f636329567809d639a8f6", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-util": "~1.0" - }, - "time": "2018-04-26T10:06:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php56\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ] - }, - { - "name": "symfony/polyfill-util", - "version": "v1.8.0", - "version_normalized": "1.8.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "1a5ad95d9436cbff3296034fe9f8d586dce3fb3a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/1a5ad95d9436cbff3296034fe9f8d586dce3fb3a", - "reference": "1a5ad95d9436cbff3296034fe9f8d586dce3fb3a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2018-04-26T10:06:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Util\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony utilities for portability of PHP codes", - "homepage": "https://symfony.com", - "keywords": [ - "compat", - "compatibility", - "polyfill", - "shim" - ] - }, - { - "name": "symfony/web-link", - "version": "v3.4.11", - "version_normalized": "3.4.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/web-link.git", - "reference": "c7da19175bea0eff7d9ffee7ec7e30c93dadb61f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/web-link/zipball/c7da19175bea0eff7d9ffee7ec7e30c93dadb61f", - "reference": "c7da19175bea0eff7d9ffee7ec7e30c93dadb61f", - "shasum": "" - }, - "require": { - "fig/link-util": "^1.0", - "php": "^5.5.9|>=7.0.8", - "psr/link": "^1.0" - }, - "require-dev": { - "symfony/event-dispatcher": "^2.8|^3.0|~4.0", - "symfony/http-foundation": "^2.8|^3.0|~4.0", - "symfony/http-kernel": "^2.8|^3.0|~4.0" - }, - "suggest": { - "symfony/http-kernel": "" - }, - "time": "2018-01-03T07:37:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\WebLink\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kévin Dunglas", - "email": "dunglas@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony WebLink Component", - "homepage": "https://symfony.com", - "keywords": [ - "dns-prefetch", - "http", - "http2", - "link", - "performance", - "prefetch", - "preload", - "prerender", - "psr13", - "push" - ] - }, - { - "name": "symfony/yaml", - "version": "v3.4.11", - "version_normalized": "3.4.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/c5010cc1692ce1fa328b1fb666961eb3d4a85bb0", - "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" - }, - "require-dev": { - "symfony/console": "~3.4|~4.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "time": "2018-05-03T23:18:14+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com" - }, - { - "name": "wamania/php-stemmer", - "version": "1.2", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/wamania/php-stemmer.git", - "reference": "6cc76829bddd46f7ae7678e0bf87a0c872c8cf58" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wamania/php-stemmer/zipball/6cc76829bddd46f7ae7678e0bf87a0c872c8cf58", - "reference": "6cc76829bddd46f7ae7678e0bf87a0c872c8cf58", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8" - }, - "time": "2017-01-27T17:16:44+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Wamania\\Snowball\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Wamania", - "homepage": "http://wamania.com" - } - ], - "description": "Native PHP5 Stemmer", - "keywords": [ - "php", - "porter", - "stemmer" - ] - }, - { - "name": "zendframework/zend-diactoros", - "version": "1.7.2", - "version_normalized": "1.7.2.0", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-diactoros.git", - "reference": "741e7a571836f038de731105f4742ca8a164e43a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/741e7a571836f038de731105f4742ca8a164e43a", - "reference": "741e7a571836f038de731105f4742ca8a164e43a", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0", - "psr/http-message": "^1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-dom": "*", - "ext-libxml": "*", - "phpunit/phpunit": "^5.7.16 || ^6.0.8", - "zendframework/zend-coding-standard": "~1.0" - }, - "time": "2018-05-29T16:53:08+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7.x-dev", - "dev-develop": "1.8.x-dev", - "dev-release-2.0": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Zend\\Diactoros\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "description": "PSR HTTP Message implementations", - "homepage": "https://github.com/zendframework/zend-diactoros", - "keywords": [ - "http", - "psr", - "psr-7" - ] - } -] diff --git a/libraries/vendor/defuse/php-encryption/LICENSE b/libraries/vendor/defuse/php-encryption/LICENSE deleted file mode 100644 index f3e7c8e606f66..0000000000000 --- a/libraries/vendor/defuse/php-encryption/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Taylor Hornby and Paragon Initiative -Enterprises . - -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/libraries/vendor/defuse/php-encryption/bin/generate-defuse-key b/libraries/vendor/defuse/php-encryption/bin/generate-defuse-key deleted file mode 100755 index 24e31b5e00eb3..0000000000000 --- a/libraries/vendor/defuse/php-encryption/bin/generate-defuse-key +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env php -saveToAsciiSafeString(), "\n"; diff --git a/libraries/vendor/defuse/php-encryption/src/Core.php b/libraries/vendor/defuse/php-encryption/src/Core.php deleted file mode 100644 index 3506cda767d25..0000000000000 --- a/libraries/vendor/defuse/php-encryption/src/Core.php +++ /dev/null @@ -1,448 +0,0 @@ - 0, - 'Trying to increment a nonce by a nonpositive amount' - ); - - Core::ensureTrue( - $inc <= PHP_INT_MAX - 255, - 'Integer overflow may occur' - ); - - /* - * We start at the rightmost byte (big-endian) - * So, too, does OpenSSL: http://stackoverflow.com/a/3146214/2224584 - */ - for ($i = Core::BLOCK_BYTE_SIZE - 1; $i >= 0; --$i) { - $sum = \ord($ctr[$i]) + $inc; - - /* Detect integer overflow and fail. */ - Core::ensureTrue(\is_int($sum), 'Integer overflow in CTR mode nonce increment'); - - $ctr[$i] = \pack('C', $sum & 0xFF); - $inc = $sum >> 8; - } - return $ctr; - } - - /** - * Returns a random byte string of the specified length. - * - * @param int $octets - * - * @throws Ex\EnvironmentIsBrokenException - * - * @return string - */ - public static function secureRandom($octets) - { - self::ensureFunctionExists('random_bytes'); - try { - return \random_bytes($octets); - } catch (\Exception $ex) { - throw new Ex\EnvironmentIsBrokenException( - 'Your system does not have a secure random number generator.' - ); - } - } - - /** - * Computes the HKDF key derivation function specified in - * http://tools.ietf.org/html/rfc5869. - * - * @param string $hash Hash Function - * @param string $ikm Initial Keying Material - * @param int $length How many bytes? - * @param string $info What sort of key are we deriving? - * @param string $salt - * - * @throws Ex\EnvironmentIsBrokenException - * @psalm-suppress UndefinedFunction - We're checking if the function exists first. - * - * @return string - */ - public static function HKDF($hash, $ikm, $length, $info = '', $salt = null) - { - static $nativeHKDF = null; - if ($nativeHKDF === null) { - $nativeHKDF = \is_callable('\\hash_hkdf'); - } - if ($nativeHKDF) { - if (\is_null($salt)) { - $salt = ''; - } - return \hash_hkdf($hash, $ikm, $length, $info, $salt); - } - - $digest_length = Core::ourStrlen(\hash_hmac($hash, '', '', true)); - - // Sanity-check the desired output length. - Core::ensureTrue( - !empty($length) && \is_int($length) && $length >= 0 && $length <= 255 * $digest_length, - 'Bad output length requested of HDKF.' - ); - - // "if [salt] not provided, is set to a string of HashLen zeroes." - if (\is_null($salt)) { - $salt = \str_repeat("\x00", $digest_length); - } - - // HKDF-Extract: - // PRK = HMAC-Hash(salt, IKM) - // The salt is the HMAC key. - $prk = \hash_hmac($hash, $ikm, $salt, true); - - // HKDF-Expand: - - // This check is useless, but it serves as a reminder to the spec. - Core::ensureTrue(Core::ourStrlen($prk) >= $digest_length); - - // T(0) = '' - $t = ''; - $last_block = ''; - for ($block_index = 1; Core::ourStrlen($t) < $length; ++$block_index) { - // T(i) = HMAC-Hash(PRK, T(i-1) | info | 0x??) - $last_block = \hash_hmac( - $hash, - $last_block . $info . \chr($block_index), - $prk, - true - ); - // T = T(1) | T(2) | T(3) | ... | T(N) - $t .= $last_block; - } - - // ORM = first L octets of T - /** @var string $orm */ - $orm = Core::ourSubstr($t, 0, $length); - Core::ensureTrue(\is_string($orm)); - return $orm; - } - - /** - * Checks if two equal-length strings are the same without leaking - * information through side channels. - * - * @param string $expected - * @param string $given - * - * @throws Ex\EnvironmentIsBrokenException - * - * @return bool - */ - public static function hashEquals($expected, $given) - { - static $native = null; - if ($native === null) { - $native = \function_exists('hash_equals'); - } - if ($native) { - return \hash_equals($expected, $given); - } - - // We can't just compare the strings with '==', since it would make - // timing attacks possible. We could use the XOR-OR constant-time - // comparison algorithm, but that may not be a reliable defense in an - // interpreted language. So we use the approach of HMACing both strings - // with a random key and comparing the HMACs. - - // We're not attempting to make variable-length string comparison - // secure, as that's very difficult. Make sure the strings are the same - // length. - Core::ensureTrue(Core::ourStrlen($expected) === Core::ourStrlen($given)); - - $blind = Core::secureRandom(32); - $message_compare = \hash_hmac(Core::HASH_FUNCTION_NAME, $given, $blind); - $correct_compare = \hash_hmac(Core::HASH_FUNCTION_NAME, $expected, $blind); - return $correct_compare === $message_compare; - } - /** - * Throws an exception if the constant doesn't exist. - * - * @param string $name - * @return void - * - * @throws Ex\EnvironmentIsBrokenException - */ - public static function ensureConstantExists($name) - { - Core::ensureTrue(\defined($name)); - } - - /** - * Throws an exception if the function doesn't exist. - * - * @param string $name - * @return void - * - * @throws Ex\EnvironmentIsBrokenException - */ - public static function ensureFunctionExists($name) - { - Core::ensureTrue(\function_exists($name)); - } - - /** - * Throws an exception if the condition is false. - * - * @param bool $condition - * @param string $message - * @return void - * - * @throws Ex\EnvironmentIsBrokenException - */ - public static function ensureTrue($condition, $message = '') - { - if (!$condition) { - throw new Ex\EnvironmentIsBrokenException($message); - } - } - - /* - * We need these strlen() and substr() functions because when - * 'mbstring.func_overload' is set in php.ini, the standard strlen() and - * substr() are replaced by mb_strlen() and mb_substr(). - */ - - /** - * Computes the length of a string in bytes. - * - * @param string $str - * - * @throws Ex\EnvironmentIsBrokenException - * - * @return int - */ - public static function ourStrlen($str) - { - static $exists = null; - if ($exists === null) { - $exists = \extension_loaded('mbstring') && \ini_get('mbstring.func_overload') !== false && (int)\ini_get('mbstring.func_overload') & MB_OVERLOAD_STRING; - } - if ($exists) { - $length = \mb_strlen($str, '8bit'); - Core::ensureTrue($length !== false); - return $length; - } else { - return \strlen($str); - } - } - - /** - * Behaves roughly like the function substr() in PHP 7 does. - * - * @param string $str - * @param int $start - * @param int $length - * - * @throws Ex\EnvironmentIsBrokenException - * - * @return string|bool - */ - public static function ourSubstr($str, $start, $length = null) - { - static $exists = null; - if ($exists === null) { - $exists = \extension_loaded('mbstring') && \ini_get('mbstring.func_overload') !== false && (int)\ini_get('mbstring.func_overload') & MB_OVERLOAD_STRING; - } - - // This is required to make mb_substr behavior identical to substr. - // Without this, mb_substr() would return false, contra to what the - // PHP documentation says (it doesn't say it can return false.) - $input_len = Core::ourStrlen($str); - if ($start === $input_len && !$length) { - return ''; - } - - if ($start > $input_len) { - return false; - } - - // mb_substr($str, 0, NULL, '8bit') returns an empty string on PHP 5.3, - // so we have to find the length ourselves. Also, substr() doesn't - // accept null for the length. - if (! isset($length)) { - if ($start >= 0) { - $length = $input_len - $start; - } else { - $length = -$start; - } - } - - if ($length < 0) { - throw new \InvalidArgumentException( - "Negative lengths are not supported with ourSubstr." - ); - } - - if ($exists) { - $substr = \mb_substr($str, $start, $length, '8bit'); - // At this point there are two cases where mb_substr can - // legitimately return an empty string. Either $length is 0, or - // $start is equal to the length of the string (both mb_substr and - // substr return an empty string when this happens). It should never - // ever return a string that's longer than $length. - if (Core::ourStrlen($substr) > $length || (Core::ourStrlen($substr) === 0 && $length !== 0 && $start !== $input_len)) { - throw new Ex\EnvironmentIsBrokenException( - 'Your version of PHP has bug #66797. Its implementation of - mb_substr() is incorrect. See the details here: - https://bugs.php.net/bug.php?id=66797' - ); - } - return $substr; - } - - return \substr($str, $start, $length); - } - - /** - * Computes the PBKDF2 password-based key derivation function. - * - * The PBKDF2 function is defined in RFC 2898. Test vectors can be found in - * RFC 6070. This implementation of PBKDF2 was originally created by Taylor - * Hornby, with improvements from http://www.variations-of-shadow.com/. - * - * @param string $algorithm The hash algorithm to use. Recommended: SHA256 - * @param string $password The password. - * @param string $salt A salt that is unique to the password. - * @param int $count Iteration count. Higher is better, but slower. Recommended: At least 1000. - * @param int $key_length The length of the derived key in bytes. - * @param bool $raw_output If true, the key is returned in raw binary format. Hex encoded otherwise. - * - * @throws Ex\EnvironmentIsBrokenException - * - * @return string A $key_length-byte key derived from the password and salt. - */ - public static function pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output = false) - { - // Type checks: - if (! \is_string($algorithm)) { - throw new \InvalidArgumentException( - 'pbkdf2(): algorithm must be a string' - ); - } - if (! \is_string($password)) { - throw new \InvalidArgumentException( - 'pbkdf2(): password must be a string' - ); - } - if (! \is_string($salt)) { - throw new \InvalidArgumentException( - 'pbkdf2(): salt must be a string' - ); - } - // Coerce strings to integers with no information loss or overflow - $count += 0; - $key_length += 0; - - $algorithm = \strtolower($algorithm); - Core::ensureTrue( - \in_array($algorithm, \hash_algos(), true), - 'Invalid or unsupported hash algorithm.' - ); - - // Whitelist, or we could end up with people using CRC32. - $ok_algorithms = [ - 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', - 'ripemd160', 'ripemd256', 'ripemd320', 'whirlpool', - ]; - Core::ensureTrue( - \in_array($algorithm, $ok_algorithms, true), - 'Algorithm is not a secure cryptographic hash function.' - ); - - Core::ensureTrue($count > 0 && $key_length > 0, 'Invalid PBKDF2 parameters.'); - - if (\function_exists('hash_pbkdf2')) { - // The output length is in NIBBLES (4-bits) if $raw_output is false! - if (! $raw_output) { - $key_length = $key_length * 2; - } - return \hash_pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output); - } - - $hash_length = Core::ourStrlen(\hash($algorithm, '', true)); - $block_count = \ceil($key_length / $hash_length); - - $output = ''; - for ($i = 1; $i <= $block_count; $i++) { - // $i encoded as 4 bytes, big endian. - $last = $salt . \pack('N', $i); - // first iteration - $last = $xorsum = \hash_hmac($algorithm, $last, $password, true); - // perform the other $count - 1 iterations - for ($j = 1; $j < $count; $j++) { - $xorsum ^= ($last = \hash_hmac($algorithm, $last, $password, true)); - } - $output .= $xorsum; - } - - if ($raw_output) { - return (string) Core::ourSubstr($output, 0, $key_length); - } else { - return Encoding::binToHex((string) Core::ourSubstr($output, 0, $key_length)); - } - } -} diff --git a/libraries/vendor/defuse/php-encryption/src/Crypto.php b/libraries/vendor/defuse/php-encryption/src/Crypto.php deleted file mode 100644 index 86eb204501f9e..0000000000000 --- a/libraries/vendor/defuse/php-encryption/src/Crypto.php +++ /dev/null @@ -1,445 +0,0 @@ -deriveKeys($salt); - $ekey = $keys->getEncryptionKey(); - $akey = $keys->getAuthenticationKey(); - $iv = Core::secureRandom(Core::BLOCK_BYTE_SIZE); - - $ciphertext = Core::CURRENT_VERSION . $salt . $iv . self::plainEncrypt($plaintext, $ekey, $iv); - $auth = \hash_hmac(Core::HASH_FUNCTION_NAME, $ciphertext, $akey, true); - $ciphertext = $ciphertext . $auth; - - if ($raw_binary) { - return $ciphertext; - } - return Encoding::binToHex($ciphertext); - } - - /** - * Decrypts a ciphertext to a string with either a key or a password. - * - * @param string $ciphertext - * @param KeyOrPassword $secret - * @param bool $raw_binary - * - * @throws Ex\EnvironmentIsBrokenException - * @throws Ex\WrongKeyOrModifiedCiphertextException - * - * @return string - */ - private static function decryptInternal($ciphertext, KeyOrPassword $secret, $raw_binary) - { - RuntimeTests::runtimeTest(); - - if (! $raw_binary) { - try { - $ciphertext = Encoding::hexToBin($ciphertext); - } catch (Ex\BadFormatException $ex) { - throw new Ex\WrongKeyOrModifiedCiphertextException( - 'Ciphertext has invalid hex encoding.' - ); - } - } - - if (Core::ourStrlen($ciphertext) < Core::MINIMUM_CIPHERTEXT_SIZE) { - throw new Ex\WrongKeyOrModifiedCiphertextException( - 'Ciphertext is too short.' - ); - } - - // Get and check the version header. - /** @var string $header */ - $header = Core::ourSubstr($ciphertext, 0, Core::HEADER_VERSION_SIZE); - if ($header !== Core::CURRENT_VERSION) { - throw new Ex\WrongKeyOrModifiedCiphertextException( - 'Bad version header.' - ); - } - - // Get the salt. - /** @var string $salt */ - $salt = Core::ourSubstr( - $ciphertext, - Core::HEADER_VERSION_SIZE, - Core::SALT_BYTE_SIZE - ); - Core::ensureTrue(\is_string($salt)); - - // Get the IV. - /** @var string $iv */ - $iv = Core::ourSubstr( - $ciphertext, - Core::HEADER_VERSION_SIZE + Core::SALT_BYTE_SIZE, - Core::BLOCK_BYTE_SIZE - ); - Core::ensureTrue(\is_string($iv)); - - // Get the HMAC. - /** @var string $hmac */ - $hmac = Core::ourSubstr( - $ciphertext, - Core::ourStrlen($ciphertext) - Core::MAC_BYTE_SIZE, - Core::MAC_BYTE_SIZE - ); - Core::ensureTrue(\is_string($hmac)); - - // Get the actual encrypted ciphertext. - /** @var string $encrypted */ - $encrypted = Core::ourSubstr( - $ciphertext, - Core::HEADER_VERSION_SIZE + Core::SALT_BYTE_SIZE + - Core::BLOCK_BYTE_SIZE, - Core::ourStrlen($ciphertext) - Core::MAC_BYTE_SIZE - Core::SALT_BYTE_SIZE - - Core::BLOCK_BYTE_SIZE - Core::HEADER_VERSION_SIZE - ); - Core::ensureTrue(\is_string($encrypted)); - - // Derive the separate encryption and authentication keys from the key - // or password, whichever it is. - $keys = $secret->deriveKeys($salt); - - if (self::verifyHMAC($hmac, $header . $salt . $iv . $encrypted, $keys->getAuthenticationKey())) { - $plaintext = self::plainDecrypt($encrypted, $keys->getEncryptionKey(), $iv, Core::CIPHER_METHOD); - return $plaintext; - } else { - throw new Ex\WrongKeyOrModifiedCiphertextException( - 'Integrity check failed.' - ); - } - } - - /** - * Raw unauthenticated encryption (insecure on its own). - * - * @param string $plaintext - * @param string $key - * @param string $iv - * - * @throws Ex\EnvironmentIsBrokenException - * - * @return string - */ - protected static function plainEncrypt($plaintext, $key, $iv) - { - Core::ensureConstantExists('OPENSSL_RAW_DATA'); - Core::ensureFunctionExists('openssl_encrypt'); - /** @var string $ciphertext */ - $ciphertext = \openssl_encrypt( - $plaintext, - Core::CIPHER_METHOD, - $key, - OPENSSL_RAW_DATA, - $iv - ); - - Core::ensureTrue(\is_string($ciphertext), 'openssl_encrypt() failed'); - - return $ciphertext; - } - - /** - * Raw unauthenticated decryption (insecure on its own). - * - * @param string $ciphertext - * @param string $key - * @param string $iv - * @param string $cipherMethod - * - * @throws Ex\EnvironmentIsBrokenException - * - * @return string - */ - protected static function plainDecrypt($ciphertext, $key, $iv, $cipherMethod) - { - Core::ensureConstantExists('OPENSSL_RAW_DATA'); - Core::ensureFunctionExists('openssl_decrypt'); - - /** @var string $plaintext */ - $plaintext = \openssl_decrypt( - $ciphertext, - $cipherMethod, - $key, - OPENSSL_RAW_DATA, - $iv - ); - Core::ensureTrue(\is_string($plaintext), 'openssl_decrypt() failed.'); - - return $plaintext; - } - - /** - * Verifies an HMAC without leaking information through side-channels. - * - * @param string $expected_hmac - * @param string $message - * @param string $key - * - * @throws Ex\EnvironmentIsBrokenException - * - * @return bool - */ - protected static function verifyHMAC($expected_hmac, $message, $key) - { - $message_hmac = \hash_hmac(Core::HASH_FUNCTION_NAME, $message, $key, true); - return Core::hashEquals($message_hmac, $expected_hmac); - } -} diff --git a/libraries/vendor/defuse/php-encryption/src/DerivedKeys.php b/libraries/vendor/defuse/php-encryption/src/DerivedKeys.php deleted file mode 100644 index 86a48e5ea9050..0000000000000 --- a/libraries/vendor/defuse/php-encryption/src/DerivedKeys.php +++ /dev/null @@ -1,50 +0,0 @@ -akey; - } - - /** - * Returns the encryption key. - * @return string - */ - public function getEncryptionKey() - { - return $this->ekey; - } - - /** - * Constructor for DerivedKeys. - * - * @param string $akey - * @param string $ekey - */ - public function __construct($akey, $ekey) - { - $this->akey = $akey; - $this->ekey = $ekey; - } -} diff --git a/libraries/vendor/defuse/php-encryption/src/Encoding.php b/libraries/vendor/defuse/php-encryption/src/Encoding.php deleted file mode 100644 index 8f933cf751336..0000000000000 --- a/libraries/vendor/defuse/php-encryption/src/Encoding.php +++ /dev/null @@ -1,268 +0,0 @@ -> 4; - $hex .= \pack( - 'CC', - 87 + $b + ((($b - 10) >> 8) & ~38), - 87 + $c + ((($c - 10) >> 8) & ~38) - ); - } - return $hex; - } - - /** - * Converts a hexadecimal string into a byte string without leaking - * information through side channels. - * - * @param string $hex_string - * - * @throws Ex\BadFormatException - * @throws Ex\EnvironmentIsBrokenException - * - * @return string - */ - public static function hexToBin($hex_string) - { - $hex_pos = 0; - $bin = ''; - $hex_len = Core::ourStrlen($hex_string); - $state = 0; - $c_acc = 0; - - while ($hex_pos < $hex_len) { - $c = \ord($hex_string[$hex_pos]); - $c_num = $c ^ 48; - $c_num0 = ($c_num - 10) >> 8; - $c_alpha = ($c & ~32) - 55; - $c_alpha0 = (($c_alpha - 10) ^ ($c_alpha - 16)) >> 8; - if (($c_num0 | $c_alpha0) === 0) { - throw new Ex\BadFormatException( - 'Encoding::hexToBin() input is not a hex string.' - ); - } - $c_val = ($c_num0 & $c_num) | ($c_alpha & $c_alpha0); - if ($state === 0) { - $c_acc = $c_val * 16; - } else { - $bin .= \pack('C', $c_acc | $c_val); - } - $state ^= 1; - ++$hex_pos; - } - return $bin; - } - - /** - * Remove trialing whitespace without table look-ups or branches. - * - * Calling this function may leak the length of the string as well as the - * number of trailing whitespace characters through side-channels. - * - * @param string $string - * @return string - */ - public static function trimTrailingWhitespace($string = '') - { - $length = Core::ourStrlen($string); - if ($length < 1) { - return ''; - } - do { - $prevLength = $length; - $last = $length - 1; - $chr = \ord($string[$last]); - - /* Null Byte (0x00), a.k.a. \0 */ - // if ($chr === 0x00) $length -= 1; - $sub = (($chr - 1) >> 8 ) & 1; - $length -= $sub; - $last -= $sub; - - /* Horizontal Tab (0x09) a.k.a. \t */ - $chr = \ord($string[$last]); - // if ($chr === 0x09) $length -= 1; - $sub = (((0x08 - $chr) & ($chr - 0x0a)) >> 8) & 1; - $length -= $sub; - $last -= $sub; - - /* New Line (0x0a), a.k.a. \n */ - $chr = \ord($string[$last]); - // if ($chr === 0x0a) $length -= 1; - $sub = (((0x09 - $chr) & ($chr - 0x0b)) >> 8) & 1; - $length -= $sub; - $last -= $sub; - - /* Carriage Return (0x0D), a.k.a. \r */ - $chr = \ord($string[$last]); - // if ($chr === 0x0d) $length -= 1; - $sub = (((0x0c - $chr) & ($chr - 0x0e)) >> 8) & 1; - $length -= $sub; - $last -= $sub; - - /* Space */ - $chr = \ord($string[$last]); - // if ($chr === 0x20) $length -= 1; - $sub = (((0x1f - $chr) & ($chr - 0x21)) >> 8) & 1; - $length -= $sub; - } while ($prevLength !== $length && $length > 0); - return (string) Core::ourSubstr($string, 0, $length); - } - - /* - * SECURITY NOTE ON APPLYING CHECKSUMS TO SECRETS: - * - * The checksum introduces a potential security weakness. For example, - * suppose we apply a checksum to a key, and that an adversary has an - * exploit against the process containing the key, such that they can - * overwrite an arbitrary byte of memory and then cause the checksum to - * be verified and learn the result. - * - * In this scenario, the adversary can extract the key one byte at - * a time by overwriting it with their guess of its value and then - * asking if the checksum matches. If it does, their guess was right. - * This kind of attack may be more easy to implement and more reliable - * than a remote code execution attack. - * - * This attack also applies to authenticated encryption as a whole, in - * the situation where the adversary can overwrite a byte of the key - * and then cause a valid ciphertext to be decrypted, and then - * determine whether the MAC check passed or failed. - * - * By using the full SHA256 hash instead of truncating it, I'm ensuring - * that both ways of going about the attack are equivalently difficult. - * A shorter checksum of say 32 bits might be more useful to the - * adversary as an oracle in case their writes are coarser grained. - * - * Because the scenario assumes a serious vulnerability, we don't try - * to prevent attacks of this style. - */ - - /** - * INTERNAL USE ONLY: Applies a version header, applies a checksum, and - * then encodes a byte string into a range of printable ASCII characters. - * - * @param string $header - * @param string $bytes - * - * @throws Ex\EnvironmentIsBrokenException - * - * @return string - */ - public static function saveBytesToChecksummedAsciiSafeString($header, $bytes) - { - // Headers must be a constant length to prevent one type's header from - // being a prefix of another type's header, leading to ambiguity. - Core::ensureTrue( - Core::ourStrlen($header) === self::SERIALIZE_HEADER_BYTES, - 'Header must be ' . self::SERIALIZE_HEADER_BYTES . ' bytes.' - ); - - return Encoding::binToHex( - $header . - $bytes . - \hash( - self::CHECKSUM_HASH_ALGO, - $header . $bytes, - true - ) - ); - } - - /** - * INTERNAL USE ONLY: Decodes, verifies the header and checksum, and returns - * the encoded byte string. - * - * @param string $expected_header - * @param string $string - * - * @throws Ex\EnvironmentIsBrokenException - * @throws Ex\BadFormatException - * - * @return string - */ - public static function loadBytesFromChecksummedAsciiSafeString($expected_header, $string) - { - // Headers must be a constant length to prevent one type's header from - // being a prefix of another type's header, leading to ambiguity. - Core::ensureTrue( - Core::ourStrlen($expected_header) === self::SERIALIZE_HEADER_BYTES, - 'Header must be 4 bytes.' - ); - - /* If you get an exception here when attempting to load from a file, first pass your - key to Encoding::trimTrailingWhitespace() to remove newline characters, etc. */ - $bytes = Encoding::hexToBin($string); - - /* Make sure we have enough bytes to get the version header and checksum. */ - if (Core::ourStrlen($bytes) < self::SERIALIZE_HEADER_BYTES + self::CHECKSUM_BYTE_SIZE) { - throw new Ex\BadFormatException( - 'Encoded data is shorter than expected.' - ); - } - - /* Grab the version header. */ - $actual_header = (string) Core::ourSubstr($bytes, 0, self::SERIALIZE_HEADER_BYTES); - - if ($actual_header !== $expected_header) { - throw new Ex\BadFormatException( - 'Invalid header.' - ); - } - - /* Grab the bytes that are part of the checksum. */ - $checked_bytes = (string) Core::ourSubstr( - $bytes, - 0, - Core::ourStrlen($bytes) - self::CHECKSUM_BYTE_SIZE - ); - - /* Grab the included checksum. */ - $checksum_a = (string) Core::ourSubstr( - $bytes, - Core::ourStrlen($bytes) - self::CHECKSUM_BYTE_SIZE, - self::CHECKSUM_BYTE_SIZE - ); - - /* Re-compute the checksum. */ - $checksum_b = \hash(self::CHECKSUM_HASH_ALGO, $checked_bytes, true); - - /* Check if the checksum matches. */ - if (! Core::hashEquals($checksum_a, $checksum_b)) { - throw new Ex\BadFormatException( - "Data is corrupted, the checksum doesn't match" - ); - } - - return (string) Core::ourSubstr( - $bytes, - self::SERIALIZE_HEADER_BYTES, - Core::ourStrlen($bytes) - self::SERIALIZE_HEADER_BYTES - self::CHECKSUM_BYTE_SIZE - ); - } -} diff --git a/libraries/vendor/defuse/php-encryption/src/Exception/BadFormatException.php b/libraries/vendor/defuse/php-encryption/src/Exception/BadFormatException.php deleted file mode 100644 index 804d9c17e8e6e..0000000000000 --- a/libraries/vendor/defuse/php-encryption/src/Exception/BadFormatException.php +++ /dev/null @@ -1,7 +0,0 @@ -deriveKeys($file_salt); - $ekey = $keys->getEncryptionKey(); - $akey = $keys->getAuthenticationKey(); - - $ivsize = Core::BLOCK_BYTE_SIZE; - $iv = Core::secureRandom($ivsize); - - /* Initialize a streaming HMAC state. */ - /** @var resource $hmac */ - $hmac = \hash_init(Core::HASH_FUNCTION_NAME, HASH_HMAC, $akey); - Core::ensureTrue( - \is_resource($hmac) || \is_object($hmac), - 'Cannot initialize a hash context' - ); - - /* Write the header, salt, and IV. */ - self::writeBytes( - $outputHandle, - Core::CURRENT_VERSION . $file_salt . $iv, - Core::HEADER_VERSION_SIZE + Core::SALT_BYTE_SIZE + $ivsize - ); - - /* Add the header, salt, and IV to the HMAC. */ - \hash_update($hmac, Core::CURRENT_VERSION); - \hash_update($hmac, $file_salt); - \hash_update($hmac, $iv); - - /* $thisIv will be incremented after each call to the encryption. */ - $thisIv = $iv; - - /* How many blocks do we encrypt at a time? We increment by this value. */ - $inc = (int) (Core::BUFFER_BYTE_SIZE / Core::BLOCK_BYTE_SIZE); - - /* Loop until we reach the end of the input file. */ - $at_file_end = false; - while (! (\feof($inputHandle) || $at_file_end)) { - /* Find out if we can read a full buffer, or only a partial one. */ - /** @var int */ - $pos = \ftell($inputHandle); - if (!\is_int($pos)) { - throw new Ex\IOException( - 'Could not get current position in input file during encryption' - ); - } - if ($pos + Core::BUFFER_BYTE_SIZE >= $inputSize) { - /* We're at the end of the file, so we need to break out of the loop. */ - $at_file_end = true; - $read = self::readBytes( - $inputHandle, - $inputSize - $pos - ); - } else { - $read = self::readBytes( - $inputHandle, - Core::BUFFER_BYTE_SIZE - ); - } - - /* Encrypt this buffer. */ - /** @var string */ - $encrypted = \openssl_encrypt( - $read, - Core::CIPHER_METHOD, - $ekey, - OPENSSL_RAW_DATA, - $thisIv - ); - - Core::ensureTrue(\is_string($encrypted), 'OpenSSL encryption error'); - - /* Write this buffer's ciphertext. */ - self::writeBytes($outputHandle, $encrypted, Core::ourStrlen($encrypted)); - /* Add this buffer's ciphertext to the HMAC. */ - \hash_update($hmac, $encrypted); - - /* Increment the counter by the number of blocks in a buffer. */ - $thisIv = Core::incrementCounter($thisIv, $inc); - /* WARNING: Usually, unless the file is a multiple of the buffer - * size, $thisIv will contain an incorrect value here on the last - * iteration of this loop. */ - } - - /* Get the HMAC and append it to the ciphertext. */ - $final_mac = \hash_final($hmac, true); - self::writeBytes($outputHandle, $final_mac, Core::MAC_BYTE_SIZE); - } - - /** - * Decrypts a file-backed resource with either a key or a password. - * - * @param resource $inputHandle - * @param resource $outputHandle - * @param KeyOrPassword $secret - * @return void - * - * @throws Ex\EnvironmentIsBrokenException - * @throws Ex\IOException - * @throws Ex\WrongKeyOrModifiedCiphertextException - */ - public static function decryptResourceInternal($inputHandle, $outputHandle, KeyOrPassword $secret) - { - if (! \is_resource($inputHandle)) { - throw new Ex\IOException( - 'Input handle must be a resource!' - ); - } - if (! \is_resource($outputHandle)) { - throw new Ex\IOException( - 'Output handle must be a resource!' - ); - } - - /* Make sure the file is big enough for all the reads we need to do. */ - $stat = \fstat($inputHandle); - if ($stat['size'] < Core::MINIMUM_CIPHERTEXT_SIZE) { - throw new Ex\WrongKeyOrModifiedCiphertextException( - 'Input file is too small to have been created by this library.' - ); - } - - /* Check the version header. */ - $header = self::readBytes($inputHandle, Core::HEADER_VERSION_SIZE); - if ($header !== Core::CURRENT_VERSION) { - throw new Ex\WrongKeyOrModifiedCiphertextException( - 'Bad version header.' - ); - } - - /* Get the salt. */ - $file_salt = self::readBytes($inputHandle, Core::SALT_BYTE_SIZE); - - /* Get the IV. */ - $ivsize = Core::BLOCK_BYTE_SIZE; - $iv = self::readBytes($inputHandle, $ivsize); - - /* Derive the authentication and encryption keys. */ - $keys = $secret->deriveKeys($file_salt); - $ekey = $keys->getEncryptionKey(); - $akey = $keys->getAuthenticationKey(); - - /* We'll store the MAC of each buffer-sized chunk as we verify the - * actual MAC, so that we can check them again when decrypting. */ - $macs = []; - - /* $thisIv will be incremented after each call to the decryption. */ - $thisIv = $iv; - - /* How many blocks do we encrypt at a time? We increment by this value. */ - $inc = (int) (Core::BUFFER_BYTE_SIZE / Core::BLOCK_BYTE_SIZE); - - /* Get the HMAC. */ - if (\fseek($inputHandle, (-1 * Core::MAC_BYTE_SIZE), SEEK_END) === false) { - throw new Ex\IOException( - 'Cannot seek to beginning of MAC within input file' - ); - } - - /* Get the position of the last byte in the actual ciphertext. */ - /** @var int $cipher_end */ - $cipher_end = \ftell($inputHandle); - if (!\is_int($cipher_end)) { - throw new Ex\IOException( - 'Cannot read input file' - ); - } - /* We have the position of the first byte of the HMAC. Go back by one. */ - --$cipher_end; - - /* Read the HMAC. */ - /** @var string $stored_mac */ - $stored_mac = self::readBytes($inputHandle, Core::MAC_BYTE_SIZE); - - /* Initialize a streaming HMAC state. */ - /** @var resource $hmac */ - $hmac = \hash_init(Core::HASH_FUNCTION_NAME, HASH_HMAC, $akey); - Core::ensureTrue(\is_resource($hmac) || \is_object($hmac), 'Cannot initialize a hash context'); - - /* Reset file pointer to the beginning of the file after the header */ - if (\fseek($inputHandle, Core::HEADER_VERSION_SIZE, SEEK_SET) === false) { - throw new Ex\IOException( - 'Cannot read seek within input file' - ); - } - - /* Seek to the start of the actual ciphertext. */ - if (\fseek($inputHandle, Core::SALT_BYTE_SIZE + $ivsize, SEEK_CUR) === false) { - throw new Ex\IOException( - 'Cannot seek input file to beginning of ciphertext' - ); - } - - /* PASS #1: Calculating the HMAC. */ - - \hash_update($hmac, $header); - \hash_update($hmac, $file_salt); - \hash_update($hmac, $iv); - /** @var resource $hmac2 */ - $hmac2 = \hash_copy($hmac); - - $break = false; - while (! $break) { - /** @var int $pos */ - $pos = \ftell($inputHandle); - if (!\is_int($pos)) { - throw new Ex\IOException( - 'Could not get current position in input file during decryption' - ); - } - - /* Read the next buffer-sized chunk (or less). */ - if ($pos + Core::BUFFER_BYTE_SIZE >= $cipher_end) { - $break = true; - $read = self::readBytes( - $inputHandle, - $cipher_end - $pos + 1 - ); - } else { - $read = self::readBytes( - $inputHandle, - Core::BUFFER_BYTE_SIZE - ); - } - - /* Update the HMAC. */ - \hash_update($hmac, $read); - - /* Remember this buffer-sized chunk's HMAC. */ - /** @var resource $chunk_mac */ - $chunk_mac = \hash_copy($hmac); - Core::ensureTrue(\is_resource($chunk_mac) || \is_object($chunk_mac), 'Cannot duplicate a hash context'); - $macs []= \hash_final($chunk_mac); - } - - /* Get the final HMAC, which should match the stored one. */ - /** @var string $final_mac */ - $final_mac = \hash_final($hmac, true); - - /* Verify the HMAC. */ - if (! Core::hashEquals($final_mac, $stored_mac)) { - throw new Ex\WrongKeyOrModifiedCiphertextException( - 'Integrity check failed.' - ); - } - - /* PASS #2: Decrypt and write output. */ - - /* Rewind to the start of the actual ciphertext. */ - if (\fseek($inputHandle, Core::SALT_BYTE_SIZE + $ivsize + Core::HEADER_VERSION_SIZE, SEEK_SET) === false) { - throw new Ex\IOException( - 'Could not move the input file pointer during decryption' - ); - } - - $at_file_end = false; - while (! $at_file_end) { - /** @var int $pos */ - $pos = \ftell($inputHandle); - if (!\is_int($pos)) { - throw new Ex\IOException( - 'Could not get current position in input file during decryption' - ); - } - - /* Read the next buffer-sized chunk (or less). */ - if ($pos + Core::BUFFER_BYTE_SIZE >= $cipher_end) { - $at_file_end = true; - $read = self::readBytes( - $inputHandle, - $cipher_end - $pos + 1 - ); - } else { - $read = self::readBytes( - $inputHandle, - Core::BUFFER_BYTE_SIZE - ); - } - - /* Recalculate the MAC (so far) and compare it with the one we - * remembered from pass #1 to ensure attackers didn't change the - * ciphertext after MAC verification. */ - \hash_update($hmac2, $read); - /** @var resource $calc_mac */ - $calc_mac = \hash_copy($hmac2); - Core::ensureTrue(\is_resource($calc_mac) || \is_object($calc_mac), 'Cannot duplicate a hash context'); - $calc = \hash_final($calc_mac); - - if (empty($macs)) { - throw new Ex\WrongKeyOrModifiedCiphertextException( - 'File was modified after MAC verification' - ); - } elseif (! Core::hashEquals(\array_shift($macs), $calc)) { - throw new Ex\WrongKeyOrModifiedCiphertextException( - 'File was modified after MAC verification' - ); - } - - /* Decrypt this buffer-sized chunk. */ - /** @var string $decrypted */ - $decrypted = \openssl_decrypt( - $read, - Core::CIPHER_METHOD, - $ekey, - OPENSSL_RAW_DATA, - $thisIv - ); - Core::ensureTrue(\is_string($decrypted), 'OpenSSL decryption error'); - - /* Write the plaintext to the output file. */ - self::writeBytes( - $outputHandle, - $decrypted, - Core::ourStrlen($decrypted) - ); - - /* Increment the IV by the amount of blocks in a buffer. */ - /** @var string $thisIv */ - $thisIv = Core::incrementCounter($thisIv, $inc); - /* WARNING: Usually, unless the file is a multiple of the buffer - * size, $thisIv will contain an incorrect value here on the last - * iteration of this loop. */ - } - } - - /** - * Read from a stream; prevent partial reads. - * - * @param resource $stream - * @param int $num_bytes - * @return string - * - * @throws Ex\IOException - * @throws Ex\EnvironmentIsBrokenException - * - * @return string - */ - public static function readBytes($stream, $num_bytes) - { - Core::ensureTrue($num_bytes >= 0, 'Tried to read less than 0 bytes'); - - if ($num_bytes === 0) { - return ''; - } - - $buf = ''; - $remaining = $num_bytes; - while ($remaining > 0 && ! \feof($stream)) { - /** @var string $read */ - $read = \fread($stream, $remaining); - if (!\is_string($read)) { - throw new Ex\IOException( - 'Could not read from the file' - ); - } - $buf .= $read; - $remaining -= Core::ourStrlen($read); - } - if (Core::ourStrlen($buf) !== $num_bytes) { - throw new Ex\IOException( - 'Tried to read past the end of the file' - ); - } - return $buf; - } - - /** - * Write to a stream; prevents partial writes. - * - * @param resource $stream - * @param string $buf - * @param int $num_bytes - * @return int - * - * @throws Ex\IOException - * - * @return string - */ - public static function writeBytes($stream, $buf, $num_bytes = null) - { - $bufSize = Core::ourStrlen($buf); - if ($num_bytes === null) { - $num_bytes = $bufSize; - } - if ($num_bytes > $bufSize) { - throw new Ex\IOException( - 'Trying to write more bytes than the buffer contains.' - ); - } - if ($num_bytes < 0) { - throw new Ex\IOException( - 'Tried to write less than 0 bytes' - ); - } - $remaining = $num_bytes; - while ($remaining > 0) { - /** @var int $written */ - $written = \fwrite($stream, $buf, $remaining); - if (!\is_int($written)) { - throw new Ex\IOException( - 'Could not write to the file' - ); - } - $buf = (string) Core::ourSubstr($buf, $written, null); - $remaining -= $written; - } - return $num_bytes; - } - - /** - * Returns the last PHP error's or warning's message string. - * - * @return string - */ - private static function getLastErrorMessage() - { - $error = error_get_last(); - if ($error === null) { - return '[no PHP error]'; - } else { - return $error['message']; - } - } -} diff --git a/libraries/vendor/defuse/php-encryption/src/Key.php b/libraries/vendor/defuse/php-encryption/src/Key.php deleted file mode 100644 index 27b919f6aed76..0000000000000 --- a/libraries/vendor/defuse/php-encryption/src/Key.php +++ /dev/null @@ -1,94 +0,0 @@ -key_bytes - ); - } - - /** - * Gets the raw bytes of the key. - * - * @return string - */ - public function getRawBytes() - { - return $this->key_bytes; - } - - /** - * Constructs a new Key object from a string of raw bytes. - * - * @param string $bytes - * - * @throws Ex\EnvironmentIsBrokenException - */ - private function __construct($bytes) - { - Core::ensureTrue( - Core::ourStrlen($bytes) === self::KEY_BYTE_SIZE, - 'Bad key length.' - ); - $this->key_bytes = $bytes; - } - -} diff --git a/libraries/vendor/defuse/php-encryption/src/KeyOrPassword.php b/libraries/vendor/defuse/php-encryption/src/KeyOrPassword.php deleted file mode 100644 index 890b2c2f773b3..0000000000000 --- a/libraries/vendor/defuse/php-encryption/src/KeyOrPassword.php +++ /dev/null @@ -1,149 +0,0 @@ -secret_type === self::SECRET_TYPE_KEY) { - Core::ensureTrue($this->secret instanceof Key); - /** - * @psalm-suppress PossiblyInvalidMethodCall - */ - $akey = Core::HKDF( - Core::HASH_FUNCTION_NAME, - $this->secret->getRawBytes(), - Core::KEY_BYTE_SIZE, - Core::AUTHENTICATION_INFO_STRING, - $salt - ); - /** - * @psalm-suppress PossiblyInvalidMethodCall - */ - $ekey = Core::HKDF( - Core::HASH_FUNCTION_NAME, - $this->secret->getRawBytes(), - Core::KEY_BYTE_SIZE, - Core::ENCRYPTION_INFO_STRING, - $salt - ); - return new DerivedKeys($akey, $ekey); - } elseif ($this->secret_type === self::SECRET_TYPE_PASSWORD) { - Core::ensureTrue(\is_string($this->secret)); - /* Our PBKDF2 polyfill is vulnerable to a DoS attack documented in - * GitHub issue #230. The fix is to pre-hash the password to ensure - * it is short. We do the prehashing here instead of in pbkdf2() so - * that pbkdf2() still computes the function as defined by the - * standard. */ - - /** - * @psalm-suppress PossiblyInvalidArgument - */ - $prehash = \hash(Core::HASH_FUNCTION_NAME, $this->secret, true); - - $prekey = Core::pbkdf2( - Core::HASH_FUNCTION_NAME, - $prehash, - $salt, - self::PBKDF2_ITERATIONS, - Core::KEY_BYTE_SIZE, - true - ); - $akey = Core::HKDF( - Core::HASH_FUNCTION_NAME, - $prekey, - Core::KEY_BYTE_SIZE, - Core::AUTHENTICATION_INFO_STRING, - $salt - ); - /* Note the cryptographic re-use of $salt here. */ - $ekey = Core::HKDF( - Core::HASH_FUNCTION_NAME, - $prekey, - Core::KEY_BYTE_SIZE, - Core::ENCRYPTION_INFO_STRING, - $salt - ); - return new DerivedKeys($akey, $ekey); - } else { - throw new Ex\EnvironmentIsBrokenException('Bad secret type.'); - } - } - - /** - * Constructor for KeyOrPassword. - * - * @param int $secret_type - * @param mixed $secret (either a Key or a password string) - */ - private function __construct($secret_type, $secret) - { - // The constructor is private, so these should never throw. - if ($secret_type === self::SECRET_TYPE_KEY) { - Core::ensureTrue($secret instanceof Key); - } elseif ($secret_type === self::SECRET_TYPE_PASSWORD) { - Core::ensureTrue(\is_string($secret)); - } else { - throw new Ex\EnvironmentIsBrokenException('Bad secret type.'); - } - $this->secret_type = $secret_type; - $this->secret = $secret; - } -} diff --git a/libraries/vendor/defuse/php-encryption/src/KeyProtectedByPassword.php b/libraries/vendor/defuse/php-encryption/src/KeyProtectedByPassword.php deleted file mode 100644 index 347bdd9153b2b..0000000000000 --- a/libraries/vendor/defuse/php-encryption/src/KeyProtectedByPassword.php +++ /dev/null @@ -1,145 +0,0 @@ -saveToAsciiSafeString(), - \hash(Core::HASH_FUNCTION_NAME, $password, true), - true - ); - - return new KeyProtectedByPassword($encrypted_key); - } - - /** - * Loads a KeyProtectedByPassword from its encoded form. - * - * @param string $saved_key_string - * - * @throws Ex\BadFormatException - * - * @return KeyProtectedByPassword - */ - public static function loadFromAsciiSafeString($saved_key_string) - { - $encrypted_key = Encoding::loadBytesFromChecksummedAsciiSafeString( - self::PASSWORD_KEY_CURRENT_VERSION, - $saved_key_string - ); - return new KeyProtectedByPassword($encrypted_key); - } - - /** - * Encodes the KeyProtectedByPassword into a string of printable ASCII - * characters. - * - * @throws Ex\EnvironmentIsBrokenException - * - * @return string - */ - public function saveToAsciiSafeString() - { - return Encoding::saveBytesToChecksummedAsciiSafeString( - self::PASSWORD_KEY_CURRENT_VERSION, - $this->encrypted_key - ); - } - - /** - * Decrypts the protected key, returning an unprotected Key object that can - * be used for encryption and decryption. - * - * @throws Ex\EnvironmentIsBrokenException - * @throws Ex\WrongKeyOrModifiedCiphertextException - * - * @param string $password - * @return Key - */ - public function unlockKey($password) - { - try { - $inner_key_encoded = Crypto::decryptWithPassword( - $this->encrypted_key, - \hash(Core::HASH_FUNCTION_NAME, $password, true), - true - ); - return Key::loadFromAsciiSafeString($inner_key_encoded); - } catch (Ex\BadFormatException $ex) { - /* This should never happen unless an attacker replaced the - * encrypted key ciphertext with some other ciphertext that was - * encrypted with the same password. We transform the exception type - * here in order to make the API simpler, avoiding the need to - * document that this method might throw an Ex\BadFormatException. */ - throw new Ex\WrongKeyOrModifiedCiphertextException( - "The decrypted key was found to be in an invalid format. " . - "This very likely indicates it was modified by an attacker." - ); - } - } - - /** - * Changes the password. - * - * @param string $current_password - * @param string $new_password - * - * @throws Ex\EnvironmentIsBrokenException - * @throws Ex\WrongKeyOrModifiedCiphertextException - * - * @return KeyProtectedByPassword - */ - public function changePassword($current_password, $new_password) - { - $inner_key = $this->unlockKey($current_password); - /* The password is hashed as a form of poor-man's domain separation - * between this use of encryptWithPassword() and other uses of - * encryptWithPassword() that the user may also be using as part of the - * same protocol. */ - $encrypted_key = Crypto::encryptWithPassword( - $inner_key->saveToAsciiSafeString(), - \hash(Core::HASH_FUNCTION_NAME, $new_password, true), - true - ); - - $this->encrypted_key = $encrypted_key; - - return $this; - } - - /** - * Constructor for KeyProtectedByPassword. - * - * @param string $encrypted_key - */ - private function __construct($encrypted_key) - { - $this->encrypted_key = $encrypted_key; - } -} diff --git a/libraries/vendor/defuse/php-encryption/src/RuntimeTests.php b/libraries/vendor/defuse/php-encryption/src/RuntimeTests.php deleted file mode 100644 index 65ce55d9dc5f7..0000000000000 --- a/libraries/vendor/defuse/php-encryption/src/RuntimeTests.php +++ /dev/null @@ -1,228 +0,0 @@ -getRawBytes()) === Core::KEY_BYTE_SIZE); - - Core::ensureTrue(Core::ENCRYPTION_INFO_STRING !== Core::AUTHENTICATION_INFO_STRING); - } catch (Ex\EnvironmentIsBrokenException $ex) { - // Do this, otherwise it will stay in the "tests are running" state. - $test_state = 3; - throw $ex; - } - - // Change this to '0' make the tests always re-run (for benchmarking). - $test_state = 1; - } - - /** - * High-level tests of Crypto operations. - * - * @throws Ex\EnvironmentIsBrokenException - * @return void - */ - private static function testEncryptDecrypt() - { - $key = Key::createNewRandomKey(); - $data = "EnCrYpT EvErYThInG\x00\x00"; - - // Make sure encrypting then decrypting doesn't change the message. - $ciphertext = Crypto::encrypt($data, $key, true); - try { - $decrypted = Crypto::decrypt($ciphertext, $key, true); - } catch (Ex\WrongKeyOrModifiedCiphertextException $ex) { - // It's important to catch this and change it into a - // Ex\EnvironmentIsBrokenException, otherwise a test failure could trick - // the user into thinking it's just an invalid ciphertext! - throw new Ex\EnvironmentIsBrokenException(); - } - Core::ensureTrue($decrypted === $data); - - // Modifying the ciphertext: Appending a string. - try { - Crypto::decrypt($ciphertext . 'a', $key, true); - throw new Ex\EnvironmentIsBrokenException(); - } catch (Ex\WrongKeyOrModifiedCiphertextException $e) { /* expected */ - } - - // Modifying the ciphertext: Changing an HMAC byte. - $indices_to_change = [ - 0, // The header. - Core::HEADER_VERSION_SIZE + 1, // the salt - Core::HEADER_VERSION_SIZE + Core::SALT_BYTE_SIZE + 1, // the IV - Core::HEADER_VERSION_SIZE + Core::SALT_BYTE_SIZE + Core::BLOCK_BYTE_SIZE + 1, // the ciphertext - ]; - - foreach ($indices_to_change as $index) { - try { - $ciphertext[$index] = \chr((\ord($ciphertext[$index]) + 1) % 256); - Crypto::decrypt($ciphertext, $key, true); - throw new Ex\EnvironmentIsBrokenException(); - } catch (Ex\WrongKeyOrModifiedCiphertextException $e) { /* expected */ - } - } - - // Decrypting with the wrong key. - $key = Key::createNewRandomKey(); - $data = 'abcdef'; - $ciphertext = Crypto::encrypt($data, $key, true); - $wrong_key = Key::createNewRandomKey(); - try { - Crypto::decrypt($ciphertext, $wrong_key, true); - throw new Ex\EnvironmentIsBrokenException(); - } catch (Ex\WrongKeyOrModifiedCiphertextException $e) { /* expected */ - } - - // Ciphertext too small. - $key = Key::createNewRandomKey(); - $ciphertext = \str_repeat('A', Core::MINIMUM_CIPHERTEXT_SIZE - 1); - try { - Crypto::decrypt($ciphertext, $key, true); - throw new Ex\EnvironmentIsBrokenException(); - } catch (Ex\WrongKeyOrModifiedCiphertextException $e) { /* expected */ - } - } - - /** - * Test HKDF against test vectors. - * - * @throws Ex\EnvironmentIsBrokenException - * @return void - */ - private static function HKDFTestVector() - { - // HKDF test vectors from RFC 5869 - - // Test Case 1 - $ikm = \str_repeat("\x0b", 22); - $salt = Encoding::hexToBin('000102030405060708090a0b0c'); - $info = Encoding::hexToBin('f0f1f2f3f4f5f6f7f8f9'); - $length = 42; - $okm = Encoding::hexToBin( - '3cb25f25faacd57a90434f64d0362f2a' . - '2d2d0a90cf1a5a4c5db02d56ecc4c5bf' . - '34007208d5b887185865' - ); - $computed_okm = Core::HKDF('sha256', $ikm, $length, $info, $salt); - Core::ensureTrue($computed_okm === $okm); - - // Test Case 7 - $ikm = \str_repeat("\x0c", 22); - $length = 42; - $okm = Encoding::hexToBin( - '2c91117204d745f3500d636a62f64f0a' . - 'b3bae548aa53d423b0d1f27ebba6f5e5' . - '673a081d70cce7acfc48' - ); - $computed_okm = Core::HKDF('sha1', $ikm, $length, '', null); - Core::ensureTrue($computed_okm === $okm); - } - - /** - * Test HMAC against test vectors. - * - * @throws Ex\EnvironmentIsBrokenException - * @return void - */ - private static function HMACTestVector() - { - // HMAC test vector From RFC 4231 (Test Case 1) - $key = \str_repeat("\x0b", 20); - $data = 'Hi There'; - $correct = 'b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7'; - Core::ensureTrue( - \hash_hmac(Core::HASH_FUNCTION_NAME, $data, $key) === $correct - ); - } - - /** - * Test AES against test vectors. - * - * @throws Ex\EnvironmentIsBrokenException - * @return void - */ - private static function AESTestVector() - { - // AES CTR mode test vector from NIST SP 800-38A - $key = Encoding::hexToBin( - '603deb1015ca71be2b73aef0857d7781' . - '1f352c073b6108d72d9810a30914dff4' - ); - $iv = Encoding::hexToBin('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'); - $plaintext = Encoding::hexToBin( - '6bc1bee22e409f96e93d7e117393172a' . - 'ae2d8a571e03ac9c9eb76fac45af8e51' . - '30c81c46a35ce411e5fbc1191a0a52ef' . - 'f69f2445df4f9b17ad2b417be66c3710' - ); - $ciphertext = Encoding::hexToBin( - '601ec313775789a5b7a7f504bbf3d228' . - 'f443e3ca4d62b59aca84e990cacaf5c5' . - '2b0930daa23de94ce87017ba2d84988d' . - 'dfc9c58db67aada613c2dd08457941a6' - ); - - $computed_ciphertext = Crypto::plainEncrypt($plaintext, $key, $iv); - Core::ensureTrue($computed_ciphertext === $ciphertext); - - $computed_plaintext = Crypto::plainDecrypt($ciphertext, $key, $iv, Core::CIPHER_METHOD); - Core::ensureTrue($computed_plaintext === $plaintext); - } -} diff --git a/libraries/vendor/doctrine/inflector/LICENSE b/libraries/vendor/doctrine/inflector/LICENSE deleted file mode 100644 index 8c38cc1bc22db..0000000000000 --- a/libraries/vendor/doctrine/inflector/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2006-2015 Doctrine Project - -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/libraries/vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php b/libraries/vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php deleted file mode 100644 index 3a951af8d4a43..0000000000000 --- a/libraries/vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php +++ /dev/null @@ -1,499 +0,0 @@ -. - */ - -namespace Doctrine\Common\Inflector; - -/** - * Doctrine inflector has static methods for inflecting text. - * - * The methods in these classes are from several different sources collected - * across several different php projects and several different authors. The - * original author names and emails are not known. - * - * Pluralize & Singularize implementation are borrowed from CakePHP with some modifications. - * - * @link www.doctrine-project.org - * @since 1.0 - * @author Konsta Vesterinen - * @author Jonathan H. Wage - */ -class Inflector -{ - /** - * Plural inflector rules. - * - * @var array - */ - private static $plural = array( - 'rules' => array( - '/(s)tatus$/i' => '\1\2tatuses', - '/(quiz)$/i' => '\1zes', - '/^(ox)$/i' => '\1\2en', - '/([m|l])ouse$/i' => '\1ice', - '/(matr|vert|ind)(ix|ex)$/i' => '\1ices', - '/(x|ch|ss|sh)$/i' => '\1es', - '/([^aeiouy]|qu)y$/i' => '\1ies', - '/(hive|gulf)$/i' => '\1s', - '/(?:([^f])fe|([lr])f)$/i' => '\1\2ves', - '/sis$/i' => 'ses', - '/([ti])um$/i' => '\1a', - '/(p)erson$/i' => '\1eople', - '/(m)an$/i' => '\1en', - '/(c)hild$/i' => '\1hildren', - '/(f)oot$/i' => '\1eet', - '/(buffal|her|potat|tomat|volcan)o$/i' => '\1\2oes', - '/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|vir)us$/i' => '\1i', - '/us$/i' => 'uses', - '/(alias)$/i' => '\1es', - '/(analys|ax|cris|test|thes)is$/i' => '\1es', - '/s$/' => 's', - '/^$/' => '', - '/$/' => 's', - ), - 'uninflected' => array( - '.*[nrlm]ese', - '.*deer', - '.*fish', - '.*measles', - '.*ois', - '.*pox', - '.*sheep', - 'people', - 'cookie', - 'police', - ), - 'irregular' => array( - 'atlas' => 'atlases', - 'axe' => 'axes', - 'beef' => 'beefs', - 'brother' => 'brothers', - 'cafe' => 'cafes', - 'chateau' => 'chateaux', - 'niveau' => 'niveaux', - 'child' => 'children', - 'cookie' => 'cookies', - 'corpus' => 'corpuses', - 'cow' => 'cows', - 'criterion' => 'criteria', - 'curriculum' => 'curricula', - 'demo' => 'demos', - 'domino' => 'dominoes', - 'echo' => 'echoes', - 'foot' => 'feet', - 'fungus' => 'fungi', - 'ganglion' => 'ganglions', - 'genie' => 'genies', - 'genus' => 'genera', - 'graffito' => 'graffiti', - 'hippopotamus' => 'hippopotami', - 'hoof' => 'hoofs', - 'human' => 'humans', - 'iris' => 'irises', - 'larva' => 'larvae', - 'leaf' => 'leaves', - 'loaf' => 'loaves', - 'man' => 'men', - 'medium' => 'media', - 'memorandum' => 'memoranda', - 'money' => 'monies', - 'mongoose' => 'mongooses', - 'motto' => 'mottoes', - 'move' => 'moves', - 'mythos' => 'mythoi', - 'niche' => 'niches', - 'nucleus' => 'nuclei', - 'numen' => 'numina', - 'occiput' => 'occiputs', - 'octopus' => 'octopuses', - 'opus' => 'opuses', - 'ox' => 'oxen', - 'passerby' => 'passersby', - 'penis' => 'penises', - 'person' => 'people', - 'plateau' => 'plateaux', - 'runner-up' => 'runners-up', - 'sex' => 'sexes', - 'soliloquy' => 'soliloquies', - 'son-in-law' => 'sons-in-law', - 'syllabus' => 'syllabi', - 'testis' => 'testes', - 'thief' => 'thieves', - 'tooth' => 'teeth', - 'tornado' => 'tornadoes', - 'trilby' => 'trilbys', - 'turf' => 'turfs', - 'volcano' => 'volcanoes', - ) - ); - - /** - * Singular inflector rules. - * - * @var array - */ - private static $singular = array( - 'rules' => array( - '/(s)tatuses$/i' => '\1\2tatus', - '/^(.*)(menu)s$/i' => '\1\2', - '/(quiz)zes$/i' => '\\1', - '/(matr)ices$/i' => '\1ix', - '/(vert|ind)ices$/i' => '\1ex', - '/^(ox)en/i' => '\1', - '/(alias)(es)*$/i' => '\1', - '/(buffal|her|potat|tomat|volcan)oes$/i' => '\1o', - '/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|viri?)i$/i' => '\1us', - '/([ftw]ax)es/i' => '\1', - '/(analys|ax|cris|test|thes)es$/i' => '\1is', - '/(shoe|slave)s$/i' => '\1', - '/(o)es$/i' => '\1', - '/ouses$/' => 'ouse', - '/([^a])uses$/' => '\1us', - '/([m|l])ice$/i' => '\1ouse', - '/(x|ch|ss|sh)es$/i' => '\1', - '/(m)ovies$/i' => '\1\2ovie', - '/(s)eries$/i' => '\1\2eries', - '/([^aeiouy]|qu)ies$/i' => '\1y', - '/([lr])ves$/i' => '\1f', - '/(tive)s$/i' => '\1', - '/(hive)s$/i' => '\1', - '/(drive)s$/i' => '\1', - '/(dive)s$/i' => '\1', - '/([^fo])ves$/i' => '\1fe', - '/(^analy)ses$/i' => '\1sis', - '/(analy|diagno|^ba|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => '\1\2sis', - '/([ti])a$/i' => '\1um', - '/(p)eople$/i' => '\1\2erson', - '/(m)en$/i' => '\1an', - '/(c)hildren$/i' => '\1\2hild', - '/(f)eet$/i' => '\1oot', - '/(n)ews$/i' => '\1\2ews', - '/eaus$/' => 'eau', - '/^(.*us)$/' => '\\1', - '/s$/i' => '', - ), - 'uninflected' => array( - '.*[nrlm]ese', - '.*deer', - '.*fish', - '.*measles', - '.*ois', - '.*pox', - '.*sheep', - '.*ss', - 'police', - 'pants', - 'clothes', - ), - 'irregular' => array( - 'caches' => 'cache', - 'criteria' => 'criterion', - 'curves' => 'curve', - 'emphases' => 'emphasis', - 'foes' => 'foe', - 'hoaxes' => 'hoax', - 'media' => 'medium', - 'neuroses' => 'neurosis', - 'waves' => 'wave', - 'oases' => 'oasis', - ) - ); - - /** - * Words that should not be inflected. - * - * @var array - */ - private static $uninflected = array( - 'Amoyese', 'bison', 'Borghese', 'bream', 'breeches', 'britches', 'buffalo', 'cantus', - 'carp', 'chassis', 'clippers', 'cod', 'coitus', 'Congoese', 'contretemps', 'corps', - 'debris', 'diabetes', 'djinn', 'eland', 'elk', 'equipment', 'Faroese', 'flounder', - 'Foochowese', 'Furniture', 'gallows', 'Genevese', 'Genoese', 'Gilbertese', 'graffiti', - 'headquarters', 'herpes', 'hijinks', 'Hottentotese', 'information', 'innings', - 'jackanapes', 'Kiplingese', 'Kongoese', 'Lucchese', 'Luggage', 'mackerel', 'Maltese', '.*?media', - 'mews', 'moose', 'mumps', 'Nankingese', 'news', 'nexus', 'Niasese', - 'Pekingese', 'Piedmontese', 'pincers', 'Pistoiese', 'pliers', 'Portuguese', - 'proceedings', 'rabies', 'rice', 'rhinoceros', 'salmon', 'Sarawakese', 'scissors', - 'sea[- ]bass', 'series', 'Shavese', 'shears', 'siemens', 'species', 'staff', 'swine', - 'testes', 'trousers', 'trout', 'tuna', 'Vermontese', 'Wenchowese', 'whiting', - 'wildebeest', 'Yengeese' - ); - - /** - * Method cache array. - * - * @var array - */ - private static $cache = array(); - - /** - * The initial state of Inflector so reset() works. - * - * @var array - */ - private static $initialState = array(); - - /** - * Converts a word into the format for a Doctrine table name. Converts 'ModelName' to 'model_name'. - * - * @param string $word The word to tableize. - * - * @return string The tableized word. - */ - public static function tableize($word) - { - return strtolower(preg_replace('~(?<=\\w)([A-Z])~', '_$1', $word)); - } - - /** - * Converts a word into the format for a Doctrine class name. Converts 'table_name' to 'TableName'. - * - * @param string $word The word to classify. - * - * @return string The classified word. - */ - public static function classify($word) - { - return str_replace(' ', '', ucwords(strtr($word, '_-', ' '))); - } - - /** - * Camelizes a word. This uses the classify() method and turns the first character to lowercase. - * - * @param string $word The word to camelize. - * - * @return string The camelized word. - */ - public static function camelize($word) - { - return lcfirst(self::classify($word)); - } - - /** - * Uppercases words with configurable delimeters between words. - * - * Takes a string and capitalizes all of the words, like PHP's built-in - * ucwords function. This extends that behavior, however, by allowing the - * word delimeters to be configured, rather than only separating on - * whitespace. - * - * Here is an example: - * - * - * - * - * @param string $string The string to operate on. - * @param string $delimiters A list of word separators. - * - * @return string The string with all delimeter-separated words capitalized. - */ - public static function ucwords($string, $delimiters = " \n\t\r\0\x0B-") - { - return preg_replace_callback( - '/[^' . preg_quote($delimiters, '/') . ']+/', - function($matches) { - return ucfirst($matches[0]); - }, - $string - ); - } - - /** - * Clears Inflectors inflected value caches, and resets the inflection - * rules to the initial values. - * - * @return void - */ - public static function reset() - { - if (empty(self::$initialState)) { - self::$initialState = get_class_vars('Inflector'); - - return; - } - - foreach (self::$initialState as $key => $val) { - if ($key != 'initialState') { - self::${$key} = $val; - } - } - } - - /** - * Adds custom inflection $rules, of either 'plural' or 'singular' $type. - * - * ### Usage: - * - * {{{ - * Inflector::rules('plural', array('/^(inflect)or$/i' => '\1ables')); - * Inflector::rules('plural', array( - * 'rules' => array('/^(inflect)ors$/i' => '\1ables'), - * 'uninflected' => array('dontinflectme'), - * 'irregular' => array('red' => 'redlings') - * )); - * }}} - * - * @param string $type The type of inflection, either 'plural' or 'singular' - * @param array $rules An array of rules to be added. - * @param boolean $reset If true, will unset default inflections for all - * new rules that are being defined in $rules. - * - * @return void - */ - public static function rules($type, $rules, $reset = false) - { - foreach ($rules as $rule => $pattern) { - if ( ! is_array($pattern)) { - continue; - } - - if ($reset) { - self::${$type}[$rule] = $pattern; - } else { - self::${$type}[$rule] = ($rule === 'uninflected') - ? array_merge($pattern, self::${$type}[$rule]) - : $pattern + self::${$type}[$rule]; - } - - unset($rules[$rule], self::${$type}['cache' . ucfirst($rule)]); - - if (isset(self::${$type}['merged'][$rule])) { - unset(self::${$type}['merged'][$rule]); - } - - if ($type === 'plural') { - self::$cache['pluralize'] = self::$cache['tableize'] = array(); - } elseif ($type === 'singular') { - self::$cache['singularize'] = array(); - } - } - - self::${$type}['rules'] = $rules + self::${$type}['rules']; - } - - /** - * Returns a word in plural form. - * - * @param string $word The word in singular form. - * - * @return string The word in plural form. - */ - public static function pluralize($word) - { - if (isset(self::$cache['pluralize'][$word])) { - return self::$cache['pluralize'][$word]; - } - - if (!isset(self::$plural['merged']['irregular'])) { - self::$plural['merged']['irregular'] = self::$plural['irregular']; - } - - if (!isset(self::$plural['merged']['uninflected'])) { - self::$plural['merged']['uninflected'] = array_merge(self::$plural['uninflected'], self::$uninflected); - } - - if (!isset(self::$plural['cacheUninflected']) || !isset(self::$plural['cacheIrregular'])) { - self::$plural['cacheUninflected'] = '(?:' . implode('|', self::$plural['merged']['uninflected']) . ')'; - self::$plural['cacheIrregular'] = '(?:' . implode('|', array_keys(self::$plural['merged']['irregular'])) . ')'; - } - - if (preg_match('/(.*)\\b(' . self::$plural['cacheIrregular'] . ')$/i', $word, $regs)) { - self::$cache['pluralize'][$word] = $regs[1] . substr($word, 0, 1) . substr(self::$plural['merged']['irregular'][strtolower($regs[2])], 1); - - return self::$cache['pluralize'][$word]; - } - - if (preg_match('/^(' . self::$plural['cacheUninflected'] . ')$/i', $word, $regs)) { - self::$cache['pluralize'][$word] = $word; - - return $word; - } - - foreach (self::$plural['rules'] as $rule => $replacement) { - if (preg_match($rule, $word)) { - self::$cache['pluralize'][$word] = preg_replace($rule, $replacement, $word); - - return self::$cache['pluralize'][$word]; - } - } - } - - /** - * Returns a word in singular form. - * - * @param string $word The word in plural form. - * - * @return string The word in singular form. - */ - public static function singularize($word) - { - if (isset(self::$cache['singularize'][$word])) { - return self::$cache['singularize'][$word]; - } - - if (!isset(self::$singular['merged']['uninflected'])) { - self::$singular['merged']['uninflected'] = array_merge( - self::$singular['uninflected'], - self::$uninflected - ); - } - - if (!isset(self::$singular['merged']['irregular'])) { - self::$singular['merged']['irregular'] = array_merge( - self::$singular['irregular'], - array_flip(self::$plural['irregular']) - ); - } - - if (!isset(self::$singular['cacheUninflected']) || !isset(self::$singular['cacheIrregular'])) { - self::$singular['cacheUninflected'] = '(?:' . join('|', self::$singular['merged']['uninflected']) . ')'; - self::$singular['cacheIrregular'] = '(?:' . join('|', array_keys(self::$singular['merged']['irregular'])) . ')'; - } - - if (preg_match('/(.*)\\b(' . self::$singular['cacheIrregular'] . ')$/i', $word, $regs)) { - self::$cache['singularize'][$word] = $regs[1] . substr($word, 0, 1) . substr(self::$singular['merged']['irregular'][strtolower($regs[2])], 1); - - return self::$cache['singularize'][$word]; - } - - if (preg_match('/^(' . self::$singular['cacheUninflected'] . ')$/i', $word, $regs)) { - self::$cache['singularize'][$word] = $word; - - return $word; - } - - foreach (self::$singular['rules'] as $rule => $replacement) { - if (preg_match($rule, $word)) { - self::$cache['singularize'][$word] = preg_replace($rule, $replacement, $word); - - return self::$cache['singularize'][$word]; - } - } - - self::$cache['singularize'][$word] = $word; - - return $word; - } -} diff --git a/libraries/vendor/fig/link-util/LICENSE.md b/libraries/vendor/fig/link-util/LICENSE.md deleted file mode 100644 index b446685b0171d..0000000000000 --- a/libraries/vendor/fig/link-util/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -# The MIT License (MIT) - -Copyright (c) 2016 :author_name <:author_email> - -> 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/libraries/vendor/fig/link-util/src/EvolvableLinkProviderTrait.php b/libraries/vendor/fig/link-util/src/EvolvableLinkProviderTrait.php deleted file mode 100644 index 824d639507a9f..0000000000000 --- a/libraries/vendor/fig/link-util/src/EvolvableLinkProviderTrait.php +++ /dev/null @@ -1,40 +0,0 @@ -links)) { - $that->links[$splosh] = $link; - } - return $that; - } - - /** - * {@inheritdoc} - */ - public function withoutLink(LinkInterface $link) - { - $that = clone($this); - $splosh = spl_object_hash($link); - unset($that->links[$splosh]); - return $that; - } -} diff --git a/libraries/vendor/fig/link-util/src/EvolvableLinkTrait.php b/libraries/vendor/fig/link-util/src/EvolvableLinkTrait.php deleted file mode 100644 index 7bf84f8b98823..0000000000000 --- a/libraries/vendor/fig/link-util/src/EvolvableLinkTrait.php +++ /dev/null @@ -1,84 +0,0 @@ -href = $href; - - $that->templated = ($this->hrefIsTemplated($href)); - - return $that; - } - - /** - * {@inheritdoc} - * - * @return EvolvableLinkInterface - */ - public function withRel($rel) - { - /** @var EvolvableLinkInterface $that */ - $that = clone($this); - $that->rel[$rel] = true; - return $that; - } - - /** - * {@inheritdoc} - * - * @return EvolvableLinkInterface - */ - public function withoutRel($rel) - { - /** @var EvolvableLinkInterface $that */ - $that = clone($this); - unset($that->rel[$rel]); - return $that; - } - - /** - * {@inheritdoc} - * - * @return EvolvableLinkInterface - */ - public function withAttribute($attribute, $value) - { - /** @var EvolvableLinkInterface $that */ - $that = clone($this); - $that->attributes[$attribute] = $value; - return $that; - } - - /** - * {@inheritdoc} - * - * @return EvolvableLinkInterface - */ - public function withoutAttribute($attribute) - { - /** @var EvolvableLinkInterface $that */ - $that = clone($this); - unset($that->attributes[$attribute]); - return $that; - } -} diff --git a/libraries/vendor/fig/link-util/src/GenericLinkProvider.php b/libraries/vendor/fig/link-util/src/GenericLinkProvider.php deleted file mode 100644 index 3ac5e7b77b94b..0000000000000 --- a/libraries/vendor/fig/link-util/src/GenericLinkProvider.php +++ /dev/null @@ -1,29 +0,0 @@ -links = array_combine($hashes, $links); - } -} diff --git a/libraries/vendor/fig/link-util/src/Link.php b/libraries/vendor/fig/link-util/src/Link.php deleted file mode 100644 index 343381736acb0..0000000000000 --- a/libraries/vendor/fig/link-util/src/Link.php +++ /dev/null @@ -1,27 +0,0 @@ -rel[$rel] = true; - } - $this->href = $href; - } -} diff --git a/libraries/vendor/fig/link-util/src/LinkProviderTrait.php b/libraries/vendor/fig/link-util/src/LinkProviderTrait.php deleted file mode 100644 index 50314a5939e38..0000000000000 --- a/libraries/vendor/fig/link-util/src/LinkProviderTrait.php +++ /dev/null @@ -1,44 +0,0 @@ -links; - } - - /** - * {@inheritdoc} - */ - public function getLinksByRel($rel) - { - $filter = function (LinkInterface $link) use ($rel) { - return in_array($rel, $link->getRels()); - }; - return array_filter($this->links, $filter); - } -} diff --git a/libraries/vendor/fig/link-util/src/LinkTrait.php b/libraries/vendor/fig/link-util/src/LinkTrait.php deleted file mode 100644 index 8db334fa03dc4..0000000000000 --- a/libraries/vendor/fig/link-util/src/LinkTrait.php +++ /dev/null @@ -1,73 +0,0 @@ -href; - } - - /** - * {@inheritdoc} - */ - public function isTemplated() - { - return $this->hrefIsTemplated($this->href); - } - - /** - * {@inheritdoc} - */ - public function getRels() - { - return array_keys($this->rel); - } - - /** - * {@inheritdoc} - */ - public function getAttributes() - { - return $this->attributes; - } -} diff --git a/libraries/vendor/fig/link-util/src/TemplatedHrefTrait.php b/libraries/vendor/fig/link-util/src/TemplatedHrefTrait.php deleted file mode 100644 index 51ce3a81b0c88..0000000000000 --- a/libraries/vendor/fig/link-util/src/TemplatedHrefTrait.php +++ /dev/null @@ -1,23 +0,0 @@ -secret = $secret; - - if (!is_null($requestMethod)) { - $this->requestMethod = $requestMethod; - } else { - $this->requestMethod = new RequestMethod\Post(); - } - } - - /** - * Calls the reCAPTCHA siteverify API to verify whether the user passes - * CAPTCHA test. - * - * @param string $response The value of 'g-recaptcha-response' in the submitted form. - * @param string $remoteIp The end user's IP address. - * @return Response Response from the service. - */ - public function verify($response, $remoteIp = null) - { - // Discard empty solution submissions - if (empty($response)) { - $recaptchaResponse = new Response(false, array('missing-input-response')); - return $recaptchaResponse; - } - - $params = new RequestParameters($this->secret, $response, $remoteIp, self::VERSION); - $rawResponse = $this->requestMethod->submit($params); - return Response::fromJson($rawResponse); - } -} diff --git a/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod.php b/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod.php deleted file mode 100644 index fc4dde59c0fce..0000000000000 --- a/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod.php +++ /dev/null @@ -1,42 +0,0 @@ -curl = $curl; - } else { - $this->curl = new Curl(); - } - } - - /** - * Submit the cURL request with the specified parameters. - * - * @param RequestParameters $params Request parameters - * @return string Body of the reCAPTCHA response - */ - public function submit(RequestParameters $params) - { - $handle = $this->curl->init(self::SITE_VERIFY_URL); - - $options = array( - CURLOPT_POST => true, - CURLOPT_POSTFIELDS => $params->toQueryString(), - CURLOPT_HTTPHEADER => array( - 'Content-Type: application/x-www-form-urlencoded' - ), - CURLINFO_HEADER_OUT => false, - CURLOPT_HEADER => false, - CURLOPT_RETURNTRANSFER => true, - CURLOPT_SSL_VERIFYPEER => true - ); - $this->curl->setoptArray($handle, $options); - - $response = $this->curl->exec($handle); - $this->curl->close($handle); - - return $response; - } -} diff --git a/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php b/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php deleted file mode 100644 index 01ab33b2dd714..0000000000000 --- a/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php +++ /dev/null @@ -1,70 +0,0 @@ - array( - 'header' => "Content-type: application/x-www-form-urlencoded\r\n", - 'method' => 'POST', - 'content' => $params->toQueryString(), - // Force the peer to validate (not needed in 5.6.0+, but still works) - 'verify_peer' => true, - // Force the peer validation to use www.google.com - $peer_key => 'www.google.com', - ), - ); - $context = stream_context_create($options); - return file_get_contents(self::SITE_VERIFY_URL, false, $context); - } -} diff --git a/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Socket.php b/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Socket.php deleted file mode 100644 index f51f1239a9d7f..0000000000000 --- a/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Socket.php +++ /dev/null @@ -1,104 +0,0 @@ -handle = fsockopen($hostname, $port, $errno, $errstr, (is_null($timeout) ? ini_get("default_socket_timeout") : $timeout)); - - if ($this->handle != false && $errno === 0 && $errstr === '') { - return $this->handle; - } - return false; - } - - /** - * fwrite - * - * @see http://php.net/fwrite - * @param string $string - * @param int $length - * @return int | bool - */ - public function fwrite($string, $length = null) - { - return fwrite($this->handle, $string, (is_null($length) ? strlen($string) : $length)); - } - - /** - * fgets - * - * @see http://php.net/fgets - * @param int $length - * @return string - */ - public function fgets($length = null) - { - return fgets($this->handle, $length); - } - - /** - * feof - * - * @see http://php.net/feof - * @return bool - */ - public function feof() - { - return feof($this->handle); - } - - /** - * fclose - * - * @see http://php.net/fclose - * @return bool - */ - public function fclose() - { - return fclose($this->handle); - } -} diff --git a/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/SocketPost.php b/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/SocketPost.php deleted file mode 100644 index 45bee0e7459f2..0000000000000 --- a/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/SocketPost.php +++ /dev/null @@ -1,121 +0,0 @@ -socket = $socket; - } else { - $this->socket = new Socket(); - } - } - - /** - * Submit the POST request with the specified parameters. - * - * @param RequestParameters $params Request parameters - * @return string Body of the reCAPTCHA response - */ - public function submit(RequestParameters $params) - { - $errno = 0; - $errstr = ''; - - if (false === $this->socket->fsockopen('ssl://' . self::RECAPTCHA_HOST, 443, $errno, $errstr, 30)) { - return self::BAD_REQUEST; - } - - $content = $params->toQueryString(); - - $request = "POST " . self::SITE_VERIFY_PATH . " HTTP/1.1\r\n"; - $request .= "Host: " . self::RECAPTCHA_HOST . "\r\n"; - $request .= "Content-Type: application/x-www-form-urlencoded\r\n"; - $request .= "Content-length: " . strlen($content) . "\r\n"; - $request .= "Connection: close\r\n\r\n"; - $request .= $content . "\r\n\r\n"; - - $this->socket->fwrite($request); - $response = ''; - - while (!$this->socket->feof()) { - $response .= $this->socket->fgets(4096); - } - - $this->socket->fclose(); - - if (0 !== strpos($response, 'HTTP/1.1 200 OK')) { - return self::BAD_RESPONSE; - } - - $parts = preg_split("#\n\s*\n#Uis", $response); - - return $parts[1]; - } -} diff --git a/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestParameters.php b/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestParameters.php deleted file mode 100644 index cb66f26cf4b6c..0000000000000 --- a/libraries/vendor/google/recaptcha/src/ReCaptcha/RequestParameters.php +++ /dev/null @@ -1,103 +0,0 @@ -secret = $secret; - $this->response = $response; - $this->remoteIp = $remoteIp; - $this->version = $version; - } - - /** - * Array representation. - * - * @return array Array formatted parameters. - */ - public function toArray() - { - $params = array('secret' => $this->secret, 'response' => $this->response); - - if (!is_null($this->remoteIp)) { - $params['remoteip'] = $this->remoteIp; - } - - if (!is_null($this->version)) { - $params['version'] = $this->version; - } - - return $params; - } - - /** - * Query string representation for HTTP request. - * - * @return string Query string formatted parameters. - */ - public function toQueryString() - { - return http_build_query($this->toArray(), '', '&'); - } -} diff --git a/libraries/vendor/google/recaptcha/src/ReCaptcha/Response.php b/libraries/vendor/google/recaptcha/src/ReCaptcha/Response.php deleted file mode 100644 index 4d4d036d41b9e..0000000000000 --- a/libraries/vendor/google/recaptcha/src/ReCaptcha/Response.php +++ /dev/null @@ -1,122 +0,0 @@ -success = $success; - $this->errorCodes = $errorCodes; - $this->hostname = $hostname; - } - - /** - * Is success? - * - * @return boolean - */ - public function isSuccess() - { - return $this->success; - } - - /** - * Get error codes. - * - * @return array - */ - public function getErrorCodes() - { - return $this->errorCodes; - } - - /** - * Get hostname. - * - * @return string - */ - public function getHostname() - { - return $this->hostname; - } -} diff --git a/libraries/vendor/google/recaptcha/src/autoload.php b/libraries/vendor/google/recaptcha/src/autoload.php deleted file mode 100644 index 5a7ee94c32e87..0000000000000 --- a/libraries/vendor/google/recaptcha/src/autoload.php +++ /dev/null @@ -1,38 +0,0 @@ - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/application/src/AbstractApplication.php b/libraries/vendor/joomla/application/src/AbstractApplication.php deleted file mode 100644 index 29f1ca0fd1957..0000000000000 --- a/libraries/vendor/joomla/application/src/AbstractApplication.php +++ /dev/null @@ -1,225 +0,0 @@ -input = $input ?: new Input; - $this->config = $config ?: new Registry; - - // Set the execution datetime and timestamp; - $this->set('execution.datetime', gmdate('Y-m-d H:i:s')); - $this->set('execution.timestamp', time()); - $this->set('execution.microtimestamp', microtime(true)); - - $this->initialise(); - } - - /** - * Method to close the application. - * - * @param integer $code The exit code (optional; default is 0). - * - * @return void - * - * @codeCoverageIgnore - * @since 1.0 - */ - public function close($code = 0) - { - exit($code); - } - - /** - * Dispatches an application event if the dispatcher has been set. - * - * @param string $eventName The event to dispatch. - * @param Event|null $event The event object. - * - * @return EventInterface|void The dispatched event or null if no dispatcher is set - * - * @since __DEPLOY_VERSION__ - */ - protected function dispatchEvent(string $eventName, EventInterface $event = null) - { - try - { - $dispatcher = $this->getDispatcher(); - } - catch (\UnexpectedValueException $exception) - { - return; - } - - return $dispatcher->dispatch($eventName, $event ?: new Event\ApplicationEvent($eventName, $this)); - } - - /** - * Method to run the application routines. - * - * Most likely you will want to instantiate a controller and execute it, or perform some sort of task directly. - * - * @return void - * - * @since 1.0 - */ - abstract protected function doExecute(); - - /** - * Execute the application. - * - * @return void - * - * @since 1.0 - */ - public function execute() - { - try - { - $this->dispatchEvent(ApplicationEvents::BEFORE_EXECUTE); - - // Perform application routines. - $this->doExecute(); - - $this->dispatchEvent(ApplicationEvents::AFTER_EXECUTE); - } - catch (\Throwable $throwable) - { - $this->dispatchEvent(ApplicationEvents::ERROR, new Event\ApplicationErrorEvent($thrown, $this)); - } - } - - /** - * Returns a property of the object or the default value if the property is not set. - * - * @param string $key The name of the property. - * @param mixed $default The default value (optional) if none is set. - * - * @return mixed The value of the configuration. - * - * @since 1.0 - */ - public function get($key, $default = null) - { - return $this->config->get($key, $default); - } - - /** - * Get the logger. - * - * @return LoggerInterface - * - * @since 1.0 - */ - public function getLogger() - { - // If a logger hasn't been set, use NullLogger - if (!($this->logger instanceof LoggerInterface)) - { - $this->setLogger(new NullLogger); - } - - return $this->logger; - } - - /** - * Custom initialisation method. - * - * Called at the end of the AbstractApplication::__construct method. - * This is for developers to inject initialisation code for their application classes. - * - * @return void - * - * @codeCoverageIgnore - * @since 1.0 - */ - protected function initialise() - { - } - - /** - * Modifies a property of the object, creating it if it does not already exist. - * - * @param string $key The name of the property. - * @param mixed $value The value of the property to set (optional). - * - * @return mixed Previous value of the property - * - * @since 1.0 - */ - public function set($key, $value = null) - { - $previous = $this->config->get($key); - $this->config->set($key, $value); - - return $previous; - } - - /** - * Sets the configuration for the application. - * - * @param Registry $config A registry object holding the configuration. - * - * @return $this - * - * @since 1.0 - */ - public function setConfiguration(Registry $config) - { - $this->config = $config; - - return $this; - } -} diff --git a/libraries/vendor/joomla/application/src/AbstractWebApplication.php b/libraries/vendor/joomla/application/src/AbstractWebApplication.php deleted file mode 100644 index 1a3e455bef2e0..0000000000000 --- a/libraries/vendor/joomla/application/src/AbstractWebApplication.php +++ /dev/null @@ -1,1072 +0,0 @@ - 'HTTP/{version} 100 Continue', - 101 => 'HTTP/{version} 101 Switching Protocols', - 102 => 'HTTP/{version} 102 Processing', - 200 => 'HTTP/{version} 200 OK', - 201 => 'HTTP/{version} 201 Created', - 202 => 'HTTP/{version} 202 Accepted', - 203 => 'HTTP/{version} 203 Non-Authoritative Information', - 204 => 'HTTP/{version} 204 No Content', - 205 => 'HTTP/{version} 205 Reset Content', - 206 => 'HTTP/{version} 206 Partial Content', - 207 => 'HTTP/{version} 207 Multi-Status', - 208 => 'HTTP/{version} 208 Already Reported', - 226 => 'HTTP/{version} 226 IM Used', - 300 => 'HTTP/{version} 300 Multiple Choices', - 301 => 'HTTP/{version} 301 Moved Permanently', - 302 => 'HTTP/{version} 302 Found', - 303 => 'HTTP/{version} 303 See other', - 304 => 'HTTP/{version} 304 Not Modified', - 305 => 'HTTP/{version} 305 Use Proxy', - 306 => 'HTTP/{version} 306 (Unused)', - 307 => 'HTTP/{version} 307 Temporary Redirect', - 308 => 'HTTP/{version} 308 Permanent Redirect', - 400 => 'HTTP/{version} 400 Bad Request', - 401 => 'HTTP/{version} 401 Unauthorized', - 402 => 'HTTP/{version} 402 Payment Required', - 403 => 'HTTP/{version} 403 Forbidden', - 404 => 'HTTP/{version} 404 Not Found', - 405 => 'HTTP/{version} 405 Method Not Allowed', - 406 => 'HTTP/{version} 406 Not Acceptable', - 407 => 'HTTP/{version} 407 Proxy Authentication Required', - 408 => 'HTTP/{version} 408 Request Timeout', - 409 => 'HTTP/{version} 409 Conflict', - 410 => 'HTTP/{version} 410 Gone', - 411 => 'HTTP/{version} 411 Length Required', - 412 => 'HTTP/{version} 412 Precondition Failed', - 413 => 'HTTP/{version} 413 Payload Too Large', - 414 => 'HTTP/{version} 414 URI Too Long', - 415 => 'HTTP/{version} 415 Unsupported Media Type', - 416 => 'HTTP/{version} 416 Range Not Satisfiable', - 417 => 'HTTP/{version} 417 Expectation Failed', - 418 => 'HTTP/{version} 418 I\'m a teapot', - 421 => 'HTTP/{version} 421 Misdirected Request', - 422 => 'HTTP/{version} 422 Unprocessable Entity', - 423 => 'HTTP/{version} 423 Locked', - 424 => 'HTTP/{version} 424 Failed Dependency', - 426 => 'HTTP/{version} 426 Upgrade Required', - 428 => 'HTTP/{version} 428 Precondition Required', - 429 => 'HTTP/{version} 429 Too Many Requests', - 431 => 'HTTP/{version} 431 Request Header Fields Too Large', - 451 => 'HTTP/{version} 451 Unavailable For Legal Reasons', - 500 => 'HTTP/{version} 500 Internal Server Error', - 501 => 'HTTP/{version} 501 Not Implemented', - 502 => 'HTTP/{version} 502 Bad Gateway', - 503 => 'HTTP/{version} 503 Service Unavailable', - 504 => 'HTTP/{version} 504 Gateway Timeout', - 505 => 'HTTP/{version} 505 HTTP Version Not Supported', - 506 => 'HTTP/{version} 506 Variant Also Negotiates', - 507 => 'HTTP/{version} 507 Insufficient Storage', - 508 => 'HTTP/{version} 508 Loop Detected', - 510 => 'HTTP/{version} 510 Not Extended', - 511 => 'HTTP/{version} 511 Network Authentication Required', - ]; - - /** - * Class constructor. - * - * @param Input $input An optional argument to provide dependency injection for the application's - * input object. If the argument is an Input object that object will become - * the application's input object, otherwise a default input object is - * created. - * @param Registry $config An optional argument to provide dependency injection for the application's - * config object. If the argument is a Registry object that object will - * become the application's config object, otherwise a default config object - * is created. - * @param Web\WebClient $client An optional argument to provide dependency injection for the application's - * client object. If the argument is a Web\WebClient object that object will - * become the application's client object, otherwise a default client object - * is created. - * @param ResponseInterface $response An optional argument to provide dependency injection for the application's - * response object. If the argument is a ResponseInterface object that object - * will become the application's response object, otherwise a default response - * object is created. - * - * @since 1.0 - */ - public function __construct(Input $input = null, Registry $config = null, Web\WebClient $client = null, ResponseInterface $response = null) - { - $this->client = $client ?: new Web\WebClient; - - // Setup the response object. - if (!$response) - { - $response = new Response; - } - - $this->setResponse($response); - - // Call the constructor as late as possible (it runs `initialise`). - parent::__construct($input, $config); - - // Set the system URIs. - $this->loadSystemUris(); - } - - /** - * Execute the application. - * - * @return void - * - * @since 1.0 - */ - public function execute() - { - try - { - $this->dispatchEvent(ApplicationEvents::BEFORE_EXECUTE); - - // Perform application routines. - $this->doExecute(); - - $this->dispatchEvent(ApplicationEvents::AFTER_EXECUTE); - - // If gzip compression is enabled in configuration and the server is compliant, compress the output. - if ($this->get('gzip') && !ini_get('zlib.output_compression') && (ini_get('output_handler') != 'ob_gzhandler')) - { - $this->compress(); - } - } - catch (\Throwable $throwable) - { - $this->dispatchEvent(ApplicationEvents::ERROR, new Event\ApplicationErrorEvent($throwable, $this)); - } - - $this->dispatchEvent(ApplicationEvents::BEFORE_RESPOND); - - // Send the application response. - $this->respond(); - - $this->dispatchEvent(ApplicationEvents::AFTER_RESPOND); - } - - /** - * Checks the accept encoding of the browser and compresses the data before sending it to the client if possible. - * - * @return void - * - * @since 1.0 - */ - protected function compress() - { - // Supported compression encodings. - $supported = [ - 'x-gzip' => 'gz', - 'gzip' => 'gz', - 'deflate' => 'deflate', - ]; - - // Get the supported encoding. - $encodings = array_intersect($this->client->encodings, array_keys($supported)); - - // If no supported encoding is detected do nothing and return. - if (empty($encodings)) - { - return; - } - - // Verify that headers have not yet been sent, and that our connection is still alive. - if ($this->checkHeadersSent() || !$this->checkConnectionAlive()) - { - return; - } - - // Iterate through the encodings and attempt to compress the data using any found supported encodings. - foreach ($encodings as $encoding) - { - if (($supported[$encoding] == 'gz') || ($supported[$encoding] == 'deflate')) - { - // Verify that the server supports gzip compression before we attempt to gzip encode the data. - // @codeCoverageIgnoreStart - if (!extension_loaded('zlib') || ini_get('zlib.output_compression')) - { - continue; - } - - // @codeCoverageIgnoreEnd - - // Attempt to gzip encode the data with an optimal level 4. - $data = $this->getBody(); - $gzdata = gzencode($data, 4, ($supported[$encoding] == 'gz') ? FORCE_GZIP : FORCE_DEFLATE); - - // If there was a problem encoding the data just try the next encoding scheme. - // @codeCoverageIgnoreStart - if ($gzdata === false) - { - continue; - } - - // @codeCoverageIgnoreEnd - - // Set the encoding headers. - $this->setHeader('Content-Encoding', $encoding); - $this->setHeader('Vary', 'Accept-Encoding'); - $this->setHeader('X-Content-Encoded-By', 'Joomla'); - - // Replace the output with the encoded data. - $this->setBody($gzdata); - - // Compression complete, let's break out of the loop. - break; - } - } - } - - /** - * Method to send the application response to the client. All headers will be sent prior to the main application output data. - * - * @return void - * - * @since 1.0 - */ - protected function respond() - { - // Send the content-type header. - if (!$this->getResponse()->hasHeader('Content-Type')) - { - $this->setHeader('Content-Type', $this->mimeType . '; charset=' . $this->charSet); - } - - // If the response is set to uncachable, we need to set some appropriate headers so browsers don't cache the response. - if (!$this->allowCache()) - { - // Expires in the past. - $this->setHeader('Expires', 'Wed, 17 Aug 2005 00:00:00 GMT', true); - - // Always modified. - $this->setHeader('Last-Modified', gmdate('D, d M Y H:i:s') . ' GMT', true); - $this->setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', false); - - // HTTP 1.0 - $this->setHeader('Pragma', 'no-cache'); - } - else - { - // Expires. - if (!$this->getResponse()->hasHeader('Expires')) - { - $this->setHeader('Expires', gmdate('D, d M Y H:i:s', time() + 900) . ' GMT'); - } - - // Last modified. - if (!$this->getResponse()->hasHeader('Last-Modified') && $this->modifiedDate instanceof \DateTime) - { - $this->modifiedDate->setTimezone(new \DateTimeZone('UTC')); - $this->setHeader('Last-Modified', $this->modifiedDate->format('D, d M Y H:i:s') . ' GMT'); - } - } - - // Make sure there is a status header already otherwise generate it from the response - if (!$this->getResponse()->hasHeader('Status')) - { - $this->setHeader('Status', $this->getResponse()->getStatusCode()); - } - - $this->sendHeaders(); - - echo $this->getBody(); - } - - /** - * Redirect to another URL. - * - * If the headers have not been sent the redirect will be accomplished using a "301 Moved Permanently" or "303 See Other" code in the header - * pointing to the new location. If the headers have already been sent this will be accomplished using a JavaScript statement. - * - * @param string $url The URL to redirect to. Can only be http/https URL - * @param integer $status The HTTP status code to be provided. 303 is assumed by default. - * - * @return void - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - public function redirect($url, $status = 303) - { - // Check for relative internal links. - if (preg_match('#^index\.php#', $url)) - { - $url = $this->get('uri.base.full') . $url; - } - - // Perform a basic sanity check to make sure we don't have any CRLF garbage. - $url = preg_split("/[\r\n]/", $url); - $url = $url[0]; - - /* - * Here we need to check and see if the URL is relative or absolute. Essentially, do we need to - * prepend the URL with our base URL for a proper redirect. The rudimentary way we are looking - * at this is to simply check whether or not the URL string has a valid scheme or not. - */ - if (!preg_match('#^[a-z]+\://#i', $url)) - { - // Get a Uri instance for the requested URI. - $uri = new Uri($this->get('uri.request')); - - // Get a base URL to prepend from the requested URI. - $prefix = $uri->toString(['scheme', 'user', 'pass', 'host', 'port']); - - // We just need the prefix since we have a path relative to the root. - if ($url[0] == '/') - { - $url = $prefix . $url; - } - else - // It's relative to where we are now, so lets add that. - { - $parts = explode('/', $uri->toString(['path'])); - array_pop($parts); - $path = implode('/', $parts) . '/'; - $url = $prefix . $path . $url; - } - } - - // If the headers have already been sent we need to send the redirect statement via JavaScript. - if ($this->checkHeadersSent()) - { - echo "\n"; - } - // We have to use a JavaScript redirect here because MSIE doesn't play nice with UTF-8 URLs. - elseif (($this->client->engine == Web\WebClient::TRIDENT) && !static::isAscii($url)) - { - $html = ''; - $html .= ''; - $html .= ''; - $html .= ''; - - echo $html; - } - else - { - // Check if we have a boolean for the status variable for compatability with v1 of the framework - // @deprecated 3.0 - if (is_bool($status)) - { - @trigger_error( - sprintf( - 'Passing a boolean value for the $status argument in %1$s() is deprecated, an integer should be passed instead.', - __METHOD__ - ), - E_USER_DEPRECATED - ); - - $status = $status ? 301 : 303; - } - - if (!is_int($status) && !$this->isRedirectState($status)) - { - throw new \InvalidArgumentException('You have not supplied a valid HTTP status code'); - } - - // All other cases use the more efficient HTTP header for redirection. - $this->setHeader('Status', $status, true); - $this->setHeader('Location', $url, true); - } - - // Set appropriate headers - $this->respond(); - - // Close the application after the redirect. - $this->close(); - } - - /** - * Set/get cachable state for the response. - * - * If $allow is set, sets the cachable state of the response. Always returns the current state. - * - * @param boolean $allow True to allow browser caching. - * - * @return boolean - * - * @since 1.0 - */ - public function allowCache($allow = null) - { - if ($allow !== null) - { - $this->cacheable = (bool) $allow; - } - - return $this->cacheable; - } - - /** - * Method to set a response header. - * - * If the replace flag is set then all headers with the given name will be replaced by the new one. - * The headers are stored in an internal array to be sent when the site is sent to the browser. - * - * @param string $name The name of the header to set. - * @param string $value The value of the header to set. - * @param boolean $replace True to replace any headers with the same name. - * - * @return $this - * - * @since 1.0 - */ - public function setHeader($name, $value, $replace = false) - { - // Sanitize the input values. - $name = (string) $name; - $value = (string) $value; - $response = $this->getResponse(); - - // If the replace flag is set, unset all known headers with the given name. - if ($replace && $response->hasHeader($name)) - { - $response = $response->withoutHeader($name); - } - - // Add the header to the internal array. - $this->setResponse($response->withAddedHeader($name, $value)); - - return $this; - } - - /** - * Method to get the array of response headers to be sent when the response is sent to the client. - * - * @return array - * - * @since 1.0 - */ - public function getHeaders() - { - $return = []; - - foreach ($this->getResponse()->getHeaders() as $name => $values) - { - foreach ($values as $value) - { - $return[] = ['name' => $name, 'value' => $value]; - } - } - - return $return; - } - - /** - * Method to clear any set response headers. - * - * @return $this - * - * @since 1.0 - */ - public function clearHeaders() - { - $response = $this->getResponse(); - - foreach ($response->getHeaders() as $name => $values) - { - $response = $response->withoutHeader($name); - } - - $this->setResponse($response); - - return $this; - } - - /** - * Send the response headers. - * - * @return $this - * - * @since 1.0 - */ - public function sendHeaders() - { - if (!$this->checkHeadersSent()) - { - foreach ($this->getHeaders() as $header) - { - if ('status' == strtolower($header['name'])) - { - // 'status' headers indicate an HTTP status, and need to be handled slightly differently - $status = $this->getHttpStatusValue($header['value']); - - $this->header($status, true, (int) $header['value']); - } - else - { - $this->header($header['name'] . ': ' . $header['value']); - } - } - } - - return $this; - } - - /** - * Set body content. If body content already defined, this will replace it. - * - * @param string $content The content to set as the response body. - * - * @return $this - * - * @since 1.0 - */ - public function setBody($content) - { - $stream = new Stream('php://memory', 'rw'); - $stream->write((string) $content); - $this->setResponse($this->getResponse()->withBody($stream)); - - return $this; - } - - /** - * Prepend content to the body content - * - * @param string $content The content to prepend to the response body. - * - * @return $this - * - * @since 1.0 - */ - public function prependBody($content) - { - $currentBody = $this->getResponse()->getBody(); - - if (!$currentBody->isReadable()) - { - throw new UnableToWriteBody; - } - - $stream = new Stream('php://memory', 'rw'); - $stream->write((string) $content . (string) $currentBody); - $this->setResponse($this->getResponse()->withBody($stream)); - - return $this; - } - - /** - * Append content to the body content - * - * @param string $content The content to append to the response body. - * - * @return $this - * - * @since 1.0 - */ - public function appendBody($content) - { - $currentStream = $this->getResponse()->getBody(); - - if ($currentStream->isWritable()) - { - $currentStream->write((string) $content); - $this->setResponse($this->getResponse()->withBody($currentStream)); - } - elseif ($currentStream->isReadable()) - { - $stream = new Stream('php://memory', 'rw'); - $stream->write((string) $currentStream . (string) $content); - $this->setResponse($this->getResponse()->withBody($stream)); - } - else - { - throw new UnableToWriteBody; - } - - return $this; - } - - /** - * Return the body content - * - * @return mixed The response body as a string. - * - * @since 1.0 - */ - public function getBody() - { - return (string) $this->getResponse()->getBody(); - } - - /** - * Get the PSR-7 Response Object. - * - * @return ResponseInterface - * - * @since __DEPLOY_VERSION__ - */ - public function getResponse(): ResponseInterface - { - return $this->response; - } - - /** - * Method to get the application session object. - * - * @return SessionInterface The session object - * - * @since 1.0 - */ - public function getSession() - { - if ($this->session === null) - { - throw new \RuntimeException('A \Joomla\Session\SessionInterface object has not been set.'); - } - - return $this->session; - } - - /** - * Check if a given value can be successfully mapped to a valid http status value - * - * @param string|int $value The given status as int or string - * - * @return string - * - * @since 1.8.0 - */ - protected function getHttpStatusValue($value) - { - $code = (int) $value; - - if (array_key_exists($code, $this->responseMap)) - { - $value = $this->responseMap[$code]; - } - else - { - $value = 'HTTP/{version} ' . $code; - } - - return str_replace('{version}', $this->httpVersion, $value); - } - - /** - * Check if the value is a valid HTTP status code - * - * @param integer $code The potential status code - * - * @return boolean - * - * @since 1.8.1 - */ - public function isValidHttpStatus($code) - { - return array_key_exists($code, $this->responseMap); - } - - /** - * Method to check the current client connection status to ensure that it is alive. We are - * wrapping this to isolate the connection_status() function from our code base for testing reasons. - * - * @return boolean True if the connection is valid and normal. - * - * @codeCoverageIgnore - * @see connection_status() - * @since 1.0 - */ - protected function checkConnectionAlive() - { - return (connection_status() === CONNECTION_NORMAL); - } - - /** - * Method to check to see if headers have already been sent. - * - * @return boolean True if the headers have already been sent. - * - * @codeCoverageIgnore - * @see headers_sent() - * @since 1.0 - */ - protected function checkHeadersSent() - { - return headers_sent(); - } - - /** - * Method to detect the requested URI from server environment variables. - * - * @return string The requested URI - * - * @since 1.0 - */ - protected function detectRequestUri() - { - // First we need to detect the URI scheme. - $scheme = $this->isSslConnection() ? 'https://' : 'http://'; - - /* - * There are some differences in the way that Apache and IIS populate server environment variables. To - * properly detect the requested URI we need to adjust our algorithm based on whether or not we are getting - * information from Apache or IIS. - */ - - $phpSelf = $this->input->server->getString('PHP_SELF', ''); - $requestUri = $this->input->server->getString('REQUEST_URI', ''); - - // If PHP_SELF and REQUEST_URI are both populated then we will assume "Apache Mode". - if (!empty($phpSelf) && !empty($requestUri)) - { - // The URI is built from the HTTP_HOST and REQUEST_URI environment variables in an Apache environment. - $uri = $scheme . $this->input->server->getString('HTTP_HOST') . $requestUri; - } - else - // If not in "Apache Mode" we will assume that we are in an IIS environment and proceed. - { - // IIS uses the SCRIPT_NAME variable instead of a REQUEST_URI variable... thanks, MS - $uri = $scheme . $this->input->server->getString('HTTP_HOST') . $this->input->server->getString('SCRIPT_NAME'); - $queryHost = $this->input->server->getString('QUERY_STRING', ''); - - // If the QUERY_STRING variable exists append it to the URI string. - if (!empty($queryHost)) - { - $uri .= '?' . $queryHost; - } - } - - return trim($uri); - } - - /** - * Method to send a header to the client. - * - * @param string $string The header string. - * @param boolean $replace The optional replace parameter indicates whether the header should replace a previous similar header, or add - * a second header of the same type. - * @param integer $code Forces the HTTP response code to the specified value. Note that this parameter only has an effect if the string - * is not empty. - * - * @return void - * - * @codeCoverageIgnore - * @see header() - * @since 1.0 - */ - protected function header($string, $replace = true, $code = null) - { - header(str_replace(chr(0), '', $string), $replace, $code); - } - - /** - * Set the PSR-7 Response Object. - * - * @param ResponseInterface $response The response object - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setResponse(ResponseInterface $response) - { - $this->response = $response; - } - - /** - * Checks if a state is a redirect state - * - * @param integer $state The HTTP status code. - * - * @return boolean - * - * @since 1.8.0 - */ - protected function isRedirectState($state) - { - $state = (int) $state; - - return ($state > 299 && $state < 400 && array_key_exists($state, $this->responseMap)); - } - - /** - * Determine if we are using a secure (SSL) connection. - * - * @return boolean True if using SSL, false if not. - * - * @since 1.0 - */ - public function isSslConnection() - { - $serverSSLVar = $this->input->server->getString('HTTPS', ''); - - if (!empty($serverSSLVar) && strtolower($serverSSLVar) !== 'off') - { - return true; - } - - $serverForwarderProtoVar = $this->input->server->getString('HTTP_X_FORWARDED_PROTO', ''); - - return !empty($serverForwarderProtoVar) && strtolower($serverForwarderProtoVar) === 'https'; - } - - /** - * Sets the session for the application to use, if required. - * - * @param SessionInterface $session A session object. - * - * @return $this - * - * @since 1.0 - */ - public function setSession(SessionInterface $session) - { - $this->session = $session; - - return $this; - } - - /** - * Method to load the system URI strings for the application. - * - * @param string $requestUri An optional request URI to use instead of detecting one from the server environment variables. - * - * @return void - * - * @since 1.0 - */ - protected function loadSystemUris($requestUri = null) - { - // Set the request URI. - if (!empty($requestUri)) - { - $this->set('uri.request', $requestUri); - } - else - { - $this->set('uri.request', $this->detectRequestUri()); - } - - // Check to see if an explicit base URI has been set. - $siteUri = trim($this->get('site_uri')); - - if ($siteUri != '') - { - $uri = new Uri($siteUri); - $path = $uri->toString(['path']); - } - else - // No explicit base URI was set so we need to detect it. - { - // Start with the requested URI. - $uri = new Uri($this->get('uri.request')); - - $requestUri = $this->input->server->getString('REQUEST_URI', ''); - - // If we are working from a CGI SAPI with the 'cgi.fix_pathinfo' directive disabled we use PHP_SELF. - if (strpos(PHP_SAPI, 'cgi') !== false && !ini_get('cgi.fix_pathinfo') && !empty($requestUri)) - { - // We aren't expecting PATH_INFO within PHP_SELF so this should work. - $path = dirname($this->input->server->getString('PHP_SELF', '')); - } - else - // Pretty much everything else should be handled with SCRIPT_NAME. - { - $path = dirname($this->input->server->getString('SCRIPT_NAME', '')); - } - } - - // Get the host from the URI. - $host = $uri->toString(['scheme', 'user', 'pass', 'host', 'port']); - - // Check if the path includes "index.php". - if (strpos($path, 'index.php') !== false) - { - // Remove the index.php portion of the path. - $path = substr_replace($path, '', strpos($path, 'index.php'), 9); - } - - $path = rtrim($path, '/\\'); - - // Set the base URI both as just a path and as the full URI. - $this->set('uri.base.full', $host . $path . '/'); - $this->set('uri.base.host', $host); - $this->set('uri.base.path', $path . '/'); - - // Set the extended (non-base) part of the request URI as the route. - if (stripos($this->get('uri.request'), $this->get('uri.base.full')) === 0) - { - $this->set('uri.route', substr_replace($this->get('uri.request'), '', 0, strlen($this->get('uri.base.full')))); - } - - // Get an explicitly set media URI is present. - $mediaURI = trim($this->get('media_uri')); - - if ($mediaURI) - { - if (strpos($mediaURI, '://') !== false) - { - $this->set('uri.media.full', $mediaURI); - $this->set('uri.media.path', $mediaURI); - } - else - { - // Normalise slashes. - $mediaURI = trim($mediaURI, '/\\'); - $mediaURI = !empty($mediaURI) ? '/' . $mediaURI . '/' : '/'; - $this->set('uri.media.full', $this->get('uri.base.host') . $mediaURI); - $this->set('uri.media.path', $mediaURI); - } - } - else - // No explicit media URI was set, build it dynamically from the base uri. - { - $this->set('uri.media.full', $this->get('uri.base.full') . 'media/'); - $this->set('uri.media.path', $this->get('uri.base.path') . 'media/'); - } - } - - /** - * Checks for a form token in the request. - * - * @param string $method The request method in which to look for the token key. - * - * @return boolean - * - * @since 1.0 - */ - public function checkToken($method = 'post') - { - $token = $this->getFormToken(); - - // Support a token sent via the X-CSRF-Token header, then fall back to a token in the request - $requestToken = $this->input->server->get( - 'HTTP_X_CSRF_TOKEN', - $this->input->$method->get($token, '', 'alnum'), - 'alnum' - ); - - if (!$requestToken) - { - return false; - } - - return $this->getSession()->hasToken($token); - } - - /** - * Method to determine a hash for anti-spoofing variable names - * - * @param boolean $forceNew If true, force a new token to be created - * - * @return string Hashed var name - * - * @since 1.0 - */ - public function getFormToken($forceNew = false) - { - return $this->getSession()->getToken($forceNew); - } - - /** - * Tests whether a string contains only 7bit ASCII bytes. - * - * You might use this to conditionally check whether a string - * needs handling as UTF-8 or not, potentially offering performance - * benefits by using the native PHP equivalent if it's just ASCII e.g.; - * - * @param string $str The string to test. - * - * @return boolean True if the string is all ASCII - * - * @since 1.4.0 - */ - public static function isAscii($str) - { - // Search for any bytes which are outside the ASCII range... - return (preg_match('/(?:[^\x00-\x7F])/', $str) !== 1); - } -} diff --git a/libraries/vendor/joomla/application/src/ApplicationEvents.php b/libraries/vendor/joomla/application/src/ApplicationEvents.php deleted file mode 100644 index 24fc9709c9f8b..0000000000000 --- a/libraries/vendor/joomla/application/src/ApplicationEvents.php +++ /dev/null @@ -1,59 +0,0 @@ -container = $container; - } - - /** - * Instantiate a controller class - * - * @param string $class The class to instantiate - * - * @return object Controller class instance - * - * @since __DEPLOY_VERSION__ - */ - protected function instantiateController(string $class) - { - if ($this->container->has($class)) - { - return $this->container->get($class); - } - - return parent::instantiateController($class); - } -} diff --git a/libraries/vendor/joomla/application/src/Controller/ControllerResolver.php b/libraries/vendor/joomla/application/src/Controller/ControllerResolver.php deleted file mode 100644 index d6d8e414c92c6..0000000000000 --- a/libraries/vendor/joomla/application/src/Controller/ControllerResolver.php +++ /dev/null @@ -1,129 +0,0 @@ -getController(); - - // Try to resolve a callable defined as an array - if (is_array($controller)) - { - if (isset($controller[0]) && is_string($controller[0]) && isset($controller[1])) - { - if (!class_exists($controller[0])) - { - throw new \InvalidArgumentException(sprintf('Cannot resolve controller for URI `%s`', $route->getUri())); - } - - try - { - $controller[0] = $this->instantiateController($controller[0]); - } - catch (\ArgumentCountError $error) - { - // On PHP 7.1, we can catch missing argument errors to provide a more useful error message - throw new \InvalidArgumentException( - sprintf( - 'Controller `%s` has required constructor arguments, cannot instantiate the class', $controller[0] - ), - 0, - $error - ); - } - } - - if (!is_callable($controller)) - { - throw new \InvalidArgumentException(sprintf('Cannot resolve controller for URI `%s`', $route->getUri())); - } - - return $controller; - } - - // Try to resolve an invokable object - if (is_object($controller)) - { - if (!is_callable($controller)) - { - throw new \InvalidArgumentException(sprintf('Cannot resolve controller for URI `%s`', $route->getUri())); - } - - return $controller; - } - - // Try to resolve a known function - if (function_exists($controller)) - { - return $controller; - } - - // Try to resolve a class name if it implements our ControllerInterface - if (is_string($controller) && interface_exists(ControllerInterface::class)) - { - if (!class_exists($controller)) - { - throw new \InvalidArgumentException(sprintf('Cannot resolve controller for URI `%s`', $route->getUri())); - } - - try - { - return [$this->instantiateController($controller), 'execute']; - } - catch (\ArgumentCountError $error) - { - // On PHP 7.1, we can catch missing argument errors to provide a more useful error message - throw new \InvalidArgumentException( - sprintf( - 'Controller `%s` has required constructor arguments, cannot instantiate the class', $controller - ), - 0, - $error - ); - } - } - - // Unsupported resolution - throw new \InvalidArgumentException(sprintf('Cannot resolve controller for URI `%s`', $route->getUri())); - } - - /** - * Instantiate a controller class - * - * @param string $class The class to instantiate - * - * @return object Controller class instance - * - * @since __DEPLOY_VERSION__ - */ - protected function instantiateController(string $class) - { - return new $class; - } -} diff --git a/libraries/vendor/joomla/application/src/Controller/ControllerResolverInterface.php b/libraries/vendor/joomla/application/src/Controller/ControllerResolverInterface.php deleted file mode 100644 index e5ed19f5dca12..0000000000000 --- a/libraries/vendor/joomla/application/src/Controller/ControllerResolverInterface.php +++ /dev/null @@ -1,31 +0,0 @@ -error = $error; - } - - /** - * Get the error object. - * - * @return \Throwable - * - * @since __DEPLOY_VERSION__ - */ - public function getError(): \Throwable - { - return $this->error; - } - - /** - * Set the error object. - * - * @param \Throwable $error The error object to set to the event. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setError(\Throwable $error) - { - $this->error = $error; - } -} diff --git a/libraries/vendor/joomla/application/src/Event/ApplicationEvent.php b/libraries/vendor/joomla/application/src/Event/ApplicationEvent.php deleted file mode 100644 index 8b9e2a54d8fb1..0000000000000 --- a/libraries/vendor/joomla/application/src/Event/ApplicationEvent.php +++ /dev/null @@ -1,55 +0,0 @@ -application = $application; - } - - /** - * Get the active application. - * - * @return AbstractApplication - * - * @since __DEPLOY_VERSION__ - */ - public function getApplication(): AbstractApplication - { - return $this->application; - } -} diff --git a/libraries/vendor/joomla/application/src/Exception/UnableToWriteBody.php b/libraries/vendor/joomla/application/src/Exception/UnableToWriteBody.php deleted file mode 100644 index 2f98a32306806..0000000000000 --- a/libraries/vendor/joomla/application/src/Exception/UnableToWriteBody.php +++ /dev/null @@ -1,30 +0,0 @@ -userAgent = $_SERVER['HTTP_USER_AGENT']; - } - else - { - $this->userAgent = $userAgent; - } - - // If no explicit acceptable encoding string was given attempt to use the implicit one from server environment. - if (empty($acceptEncoding) && isset($_SERVER['HTTP_ACCEPT_ENCODING'])) - { - $this->acceptEncoding = $_SERVER['HTTP_ACCEPT_ENCODING']; - } - else - { - $this->acceptEncoding = $acceptEncoding; - } - - // If no explicit acceptable languages string was given attempt to use the implicit one from server environment. - if (empty($acceptLanguage) && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) - { - $this->acceptLanguage = $_SERVER['HTTP_ACCEPT_LANGUAGE']; - } - else - { - $this->acceptLanguage = $acceptLanguage; - } - } - - /** - * Magic method to get an object property's value by name. - * - * @param string $name Name of the property for which to return a value. - * - * @return mixed The requested value if it exists. - * - * @since 1.0 - */ - public function __get($name) - { - switch ($name) - { - case 'mobile': - case 'platform': - if (empty($this->detection['platform'])) - { - $this->detectPlatform($this->userAgent); - } - break; - - case 'engine': - if (empty($this->detection['engine'])) - { - $this->detectEngine($this->userAgent); - } - break; - - case 'browser': - case 'browserVersion': - if (empty($this->detection['browser'])) - { - $this->detectBrowser($this->userAgent); - } - break; - - case 'languages': - if (empty($this->detection['acceptLanguage'])) - { - $this->detectLanguage($this->acceptLanguage); - } - break; - - case 'encodings': - if (empty($this->detection['acceptEncoding'])) - { - $this->detectEncoding($this->acceptEncoding); - } - break; - - case 'robot': - if (empty($this->detection['robot'])) - { - $this->detectRobot($this->userAgent); - } - break; - - case 'headers': - if (empty($this->detection['headers'])) - { - $this->detectHeaders(); - } - break; - } - - // Return the property if it exists. - if (property_exists($this, $name)) - { - return $this->$name; - } - - $trace = debug_backtrace(); - trigger_error( - 'Undefined property via __get(): ' . $name . ' in ' . $trace[0]['file'] . ' on line ' . $trace[0]['line'], - E_USER_NOTICE - ); - } - - /** - * Detects the client browser and version in a user agent string. - * - * @param string $userAgent The user-agent string to parse. - * - * @return void - * - * @since 1.0 - */ - protected function detectBrowser($userAgent) - { - // Attempt to detect the browser type. Obviously we are only worried about major browsers. - if ((stripos($userAgent, 'MSIE') !== false) && (stripos($userAgent, 'Opera') === false)) - { - $this->browser = self::IE; - $patternBrowser = 'MSIE'; - } - elseif (stripos($userAgent, 'Trident') !== false) - { - $this->browser = self::IE; - $patternBrowser = ' rv'; - } - elseif (stripos($userAgent, 'Edge') !== false) - { - $this->browser = self::EDGE; - $patternBrowser = 'Edge'; - } - elseif ((stripos($userAgent, 'Firefox') !== false) && (stripos($userAgent, 'like Firefox') === false)) - { - $this->browser = self::FIREFOX; - $patternBrowser = 'Firefox'; - } - elseif (stripos($userAgent, 'OPR') !== false) - { - $this->browser = self::OPERA; - $patternBrowser = 'OPR'; - } - elseif (stripos($userAgent, 'Chrome') !== false) - { - $this->browser = self::CHROME; - $patternBrowser = 'Chrome'; - } - elseif (stripos($userAgent, 'Safari') !== false) - { - $this->browser = self::SAFARI; - $patternBrowser = 'Safari'; - } - elseif (stripos($userAgent, 'Opera') !== false) - { - $this->browser = self::OPERA; - $patternBrowser = 'Opera'; - } - - // If we detected a known browser let's attempt to determine the version. - if ($this->browser) - { - // Build the REGEX pattern to match the browser version string within the user agent string. - $pattern = '#(?Version|' . $patternBrowser . ')[/ :]+(?[0-9.|a-zA-Z.]*)#'; - - // Attempt to find version strings in the user agent string. - $matches = []; - - if (preg_match_all($pattern, $userAgent, $matches)) - { - // Do we have both a Version and browser match? - if (count($matches['browser']) == 2) - { - // See whether Version or browser came first, and use the number accordingly. - if (strripos($userAgent, 'Version') < strripos($userAgent, $patternBrowser)) - { - $this->browserVersion = $matches['version'][0]; - } - else - { - $this->browserVersion = $matches['version'][1]; - } - } - elseif (count($matches['browser']) > 2) - { - $key = array_search('Version', $matches['browser']); - - if ($key) - { - $this->browserVersion = $matches['version'][$key]; - } - } - else - // We only have a Version or a browser so use what we have. - { - $this->browserVersion = $matches['version'][0]; - } - } - } - - // Mark this detection routine as run. - $this->detection['browser'] = true; - } - - /** - * Method to detect the accepted response encoding by the client. - * - * @param string $acceptEncoding The client accept encoding string to parse. - * - * @return void - * - * @since 1.0 - */ - protected function detectEncoding($acceptEncoding) - { - // Parse the accepted encodings. - $this->encodings = array_map('trim', (array) explode(',', $acceptEncoding)); - - // Mark this detection routine as run. - $this->detection['acceptEncoding'] = true; - } - - /** - * Detects the client rendering engine in a user agent string. - * - * @param string $userAgent The user-agent string to parse. - * - * @return void - * - * @since 1.0 - */ - protected function detectEngine($userAgent) - { - if (stripos($userAgent, 'MSIE') !== false || stripos($userAgent, 'Trident') !== false) - { - // Attempt to detect the client engine -- starting with the most popular ... for now. - $this->engine = self::TRIDENT; - } - elseif (stripos($userAgent, 'Edge') !== false || stripos($userAgent, 'EdgeHTML') !== false) - { - $this->engine = self::EDGE; - } - elseif (stripos($userAgent, 'Chrome') !== false) - { - $result = explode('/', stristr($userAgent, 'Chrome')); - $version = explode(' ', $result[1]); - - if ($version[0] >= 28) - { - $this->engine = self::BLINK; - } - else - { - $this->engine = self::WEBKIT; - } - } - elseif (stripos($userAgent, 'AppleWebKit') !== false || stripos($userAgent, 'blackberry') !== false) - { - if (stripos($userAgent, 'AppleWebKit') !== false) - { - $result = explode('/', stristr($userAgent, 'AppleWebKit')); - $version = explode(' ', $result[1]); - - if ($version[0] === 537.36) - { - // AppleWebKit/537.36 is Blink engine specific, exception is Blink emulated IEMobile, Trident or Edge - $this->engine = self::BLINK; - } - } - - // Evidently blackberry uses WebKit and doesn't necessarily report it. Bad RIM. - $this->engine = self::WEBKIT; - } - elseif (stripos($userAgent, 'Gecko') !== false && stripos($userAgent, 'like Gecko') === false) - { - // We have to check for like Gecko because some other browsers spoof Gecko. - $this->engine = self::GECKO; - } - elseif (stripos($userAgent, 'Opera') !== false || stripos($userAgent, 'Presto') !== false) - { - $version = false; - - if (preg_match('/Opera[\/| ]?([0-9.]+)/u', $userAgent, $match)) - { - $version = floatval($match[1]); - } - - if (preg_match('/Version\/([0-9.]+)/u', $userAgent, $match)) - { - if (floatval($match[1]) >= 10) - { - $version = floatval($match[1]); - } - } - - if ($version !== false && $version >= 15) - { - $this->engine = self::BLINK; - } - else - { - $this->engine = self::PRESTO; - } - } - elseif (stripos($userAgent, 'KHTML') !== false) - { - // *sigh* - $this->engine = self::KHTML; - } - elseif (stripos($userAgent, 'Amaya') !== false) - { - // Lesser known engine but it finishes off the major list from Wikipedia :-) - $this->engine = self::AMAYA; - } - - // Mark this detection routine as run. - $this->detection['engine'] = true; - } - - /** - * Method to detect the accepted languages by the client. - * - * @param mixed $acceptLanguage The client accept language string to parse. - * - * @return void - * - * @since 1.0 - */ - protected function detectLanguage($acceptLanguage) - { - // Parse the accepted encodings. - $this->languages = array_map('trim', (array) explode(',', $acceptLanguage)); - - // Mark this detection routine as run. - $this->detection['acceptLanguage'] = true; - } - - /** - * Detects the client platform in a user agent string. - * - * @param string $userAgent The user-agent string to parse. - * - * @return void - * - * @since 1.0 - */ - protected function detectPlatform($userAgent) - { - // Attempt to detect the client platform. - if (stripos($userAgent, 'Windows') !== false) - { - $this->platform = self::WINDOWS; - - // Let's look at the specific mobile options in the Windows space. - if (stripos($userAgent, 'Windows Phone') !== false) - { - $this->mobile = true; - $this->platform = self::WINDOWS_PHONE; - } - elseif (stripos($userAgent, 'Windows CE') !== false) - { - $this->mobile = true; - $this->platform = self::WINDOWS_CE; - } - } - elseif (stripos($userAgent, 'iPhone') !== false) - { - // Interestingly 'iPhone' is present in all iOS devices so far including iPad and iPods. - $this->mobile = true; - $this->platform = self::IPHONE; - - // Let's look at the specific mobile options in the iOS space. - if (stripos($userAgent, 'iPad') !== false) - { - $this->platform = self::IPAD; - } - elseif (stripos($userAgent, 'iPod') !== false) - { - $this->platform = self::IPOD; - } - } - elseif (stripos($userAgent, 'iPad') !== false) - { - // In case where iPhone is not mentioed in iPad user agent string - $this->mobile = true; - $this->platform = self::IPAD; - } - elseif (stripos($userAgent, 'iPod') !== false) - { - // In case where iPhone is not mentioed in iPod user agent string - $this->mobile = true; - $this->platform = self::IPOD; - } - elseif (preg_match('/macintosh|mac os x/i', $userAgent)) - { - // This has to come after the iPhone check because mac strings are also present in iOS devices. - $this->platform = self::MAC; - } - elseif (stripos($userAgent, 'Blackberry') !== false) - { - $this->mobile = true; - $this->platform = self::BLACKBERRY; - } - elseif (stripos($userAgent, 'Android') !== false) - { - $this->mobile = true; - $this->platform = self::ANDROID; - - /* - * Attempt to distinguish between Android phones and tablets - * There is no totally foolproof method but certain rules almost always hold - * Android 3.x is only used for tablets - * Some devices and browsers encourage users to change their UA string to include Tablet. - * Google encourages manufacturers to exclude the string Mobile from tablet device UA strings. - * In some modes Kindle Android devices include the string Mobile but they include the string Silk. - */ - if (stripos($userAgent, 'Android 3') !== false || stripos($userAgent, 'Tablet') !== false - || stripos($userAgent, 'Mobile') === false || stripos($userAgent, 'Silk') !== false) - { - $this->platform = self::ANDROIDTABLET; - } - } - elseif (stripos($userAgent, 'Linux') !== false) - { - $this->platform = self::LINUX; - } - - // Mark this detection routine as run. - $this->detection['platform'] = true; - } - - /** - * Determines if the browser is a robot or not. - * - * @param string $userAgent The user-agent string to parse. - * - * @return void - * - * @since 1.0 - */ - protected function detectRobot($userAgent) - { - $this->robot = preg_match('/http|bot|robot|spider|crawler|curl|^$/i', $userAgent); - - $this->detection['robot'] = true; - } - - /** - * Fills internal array of headers - * - * @return void - * - * @since 1.3.0 - */ - protected function detectHeaders() - { - if (function_exists('getallheaders')) - // If php is working under Apache, there is a special function - { - $this->headers = getallheaders(); - } - else - // Else we fill headers from $_SERVER variable - { - $this->headers = array(); - - foreach ($_SERVER as $name => $value) - { - if (substr($name, 0, 5) == 'HTTP_') - { - $this->headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; - } - } - } - - // Mark this detection routine as run. - $this->detection['headers'] = true; - } -} diff --git a/libraries/vendor/joomla/application/src/WebApplication.php b/libraries/vendor/joomla/application/src/WebApplication.php deleted file mode 100644 index 1ad3a3df59487..0000000000000 --- a/libraries/vendor/joomla/application/src/WebApplication.php +++ /dev/null @@ -1,99 +0,0 @@ -controllerResolver = $controllerResolver; - $this->router = $router; - - // Call the constructor as late as possible (it runs `initialise`). - parent::__construct($input, $config, $client, $response); - } - - /** - * Method to run the application routines. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - protected function doExecute() - { - $route = $this->router->parseRoute($this->get('uri.route'), $this->input->getMethod()); - - // Add variables to the input if not already set - foreach ($route->getRouteVariables() as $key => $value) - { - $this->input->def($key, $value); - } - - call_user_func($this->controllerResolver->resolve($route)); - } -} diff --git a/libraries/vendor/joomla/archive/LICENSE b/libraries/vendor/joomla/archive/LICENSE deleted file mode 100644 index df50810b85774..0000000000000 --- a/libraries/vendor/joomla/archive/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/archive/src/Archive.php b/libraries/vendor/joomla/archive/src/Archive.php deleted file mode 100644 index c5ef5fdd0444e..0000000000000 --- a/libraries/vendor/joomla/archive/src/Archive.php +++ /dev/null @@ -1,233 +0,0 @@ -options = $options; - } - - /** - * Extract an archive file to a directory. - * - * @param string $archivename The name of the archive file - * @param string $extractdir Directory to unpack into - * - * @return boolean True for success - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - public function extract($archivename, $extractdir) - { - $ext = pathinfo($archivename, PATHINFO_EXTENSION); - $path = pathinfo($archivename, PATHINFO_DIRNAME); - $filename = pathinfo($archivename, PATHINFO_FILENAME); - - switch ($ext) - { - case 'zip': - $result = $this->getAdapter('zip')->extract($archivename, $extractdir); - break; - - case 'tar': - $result = $this->getAdapter('tar')->extract($archivename, $extractdir); - break; - - case 'tgz': - case 'gz': - case 'gzip': - // This may just be an individual file (e.g. sql script) - $tmpfname = $this->options['tmp_path'] . '/' . uniqid('gzip'); - - try - { - $this->getAdapter('gzip')->extract($archivename, $tmpfname); - } - catch (\RuntimeException $exception) - { - @unlink($tmpfname); - - return false; - } - - if ($ext === 'tgz' || stripos($filename, '.tar') !== false) - { - $result = $this->getAdapter('tar')->extract($tmpfname, $extractdir); - } - else - { - Folder::create($path); - $result = File::copy($tmpfname, $extractdir . '/' . $filename, null, 0); - } - - @unlink($tmpfname); - - break; - - case 'tbz2': - case 'bz2': - case 'bzip2': - // This may just be an individual file (e.g. sql script) - $tmpfname = $this->options['tmp_path'] . '/' . uniqid('bzip2'); - - try - { - $this->getAdapter('bzip2')->extract($archivename, $tmpfname); - } - catch (\RuntimeException $exception) - { - @unlink($tmpfname); - - return false; - } - - if ($ext === 'tbz2' || stripos($filename, '.tar') !== false) - { - $result = $this->getAdapter('tar')->extract($tmpfname, $extractdir); - } - else - { - Folder::create($path); - $result = File::copy($tmpfname, $extractdir . '/' . $filename, null, 0); - } - - @unlink($tmpfname); - - break; - - default: - throw new \InvalidArgumentException(sprintf('Unknown archive type: %s', $ext)); - } - - return $result; - } - - /** - * Method to override the provided adapter with your own implementation. - * - * @param string $type Name of the adapter to set. - * @param string $class FQCN of your class which implements ExtractableInterface. - * @param boolean $override True to force override the adapter type. - * - * @return Archive This object for chaining. - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - public function setAdapter($type, $class, $override = true) - { - if ($override || !isset($this->adapters[$type])) - { - $error = !is_object($class) && !class_exists($class) - ? 'Archive adapter "%s" (class "%s") not found.' - : ''; - - $error = $error == '' && !($class instanceof ExtractableInterface) - ? 'The provided adapter "%s" (class "%s") must implement Joomla\\Archive\\ExtractableInterface' - : $error; - - $error = $error == '' && !$class::isSupported() - ? 'Archive adapter "%s" (class "%s") not supported.' - : $error; - - if ($error != '') - { - throw new \InvalidArgumentException( - sprintf($error, $type, $class) - ); - } - - $this->adapters[$type] = new $class($this->options); - } - - return $this; - } - - /** - * Get a file compression adapter. - * - * @param string $type The type of adapter (bzip2|gzip|tar|zip). - * - * @return ExtractableInterface Adapter for the requested type - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - public function getAdapter($type) - { - $type = strtolower($type); - - if (!isset($this->adapters[$type])) - { - // Try to load the adapter object - /* @var ExtractableInterface $class */ - $class = 'Joomla\\Archive\\' . ucfirst($type); - - if (!class_exists($class) || !$class::isSupported()) - { - throw new \InvalidArgumentException( - sprintf( - 'Archive adapter "%s" (class "%s") not found or supported.', - $type, - $class - ) - ); - } - - $this->adapters[$type] = new $class($this->options); - } - - return $this->adapters[$type]; - } -} diff --git a/libraries/vendor/joomla/archive/src/Bzip2.php b/libraries/vendor/joomla/archive/src/Bzip2.php deleted file mode 100644 index a9195d02188b6..0000000000000 --- a/libraries/vendor/joomla/archive/src/Bzip2.php +++ /dev/null @@ -1,152 +0,0 @@ -options = $options; - } - - /** - * Extract a Bzip2 compressed file to a given path - * - * @param string $archive Path to Bzip2 archive to extract - * @param string $destination Path to extract archive to - * - * @return boolean True if successful - * - * @since 1.0 - * @throws \RuntimeException - */ - public function extract($archive, $destination) - { - $this->data = null; - - if (!isset($this->options['use_streams']) || $this->options['use_streams'] == false) - { - // Old style: read the whole file and then parse it - $this->data = file_get_contents($archive); - - if (!$this->data) - { - throw new \RuntimeException('Unable to read archive'); - } - - $buffer = bzdecompress($this->data); - unset($this->data); - - if (empty($buffer)) - { - throw new \RuntimeException('Unable to decompress data'); - } - - if (!File::write($destination, $buffer)) - { - throw new \RuntimeException('Unable to write archive'); - } - } - else - { - // New style! streams! - $input = Stream::getStream(); - - // Use bzip - $input->set('processingmethod', 'bz'); - - if (!$input->open($archive)) - { - throw new \RuntimeException('Unable to read archive (bz2)'); - } - - $output = Stream::getStream(); - - if (!$output->open($destination, 'w')) - { - $input->close(); - - throw new \RuntimeException('Unable to write archive (bz2)'); - } - - do - { - $this->data = $input->read($input->get('chunksize', 8196)); - - if ($this->data) - { - if (!$output->write($this->data)) - { - $input->close(); - - throw new \RuntimeException('Unable to write archive (bz2)'); - } - } - } - - while ($this->data); - - $output->close(); - $input->close(); - } - - return true; - } - - /** - * Tests whether this adapter can unpack files on this computer. - * - * @return boolean True if supported - * - * @since 1.0 - */ - public static function isSupported() - { - return extension_loaded('bz2'); - } -} diff --git a/libraries/vendor/joomla/archive/src/ExtractableInterface.php b/libraries/vendor/joomla/archive/src/ExtractableInterface.php deleted file mode 100644 index d8967efd4f681..0000000000000 --- a/libraries/vendor/joomla/archive/src/ExtractableInterface.php +++ /dev/null @@ -1,39 +0,0 @@ - - * - * @contributor Michael Slusarz - * @contributor Michael Cochrane - * - * @since 1.0 - */ -class Gzip implements ExtractableInterface -{ - /** - * Gzip file flags. - * - * @var array - * @since 1.0 - */ - private $flags = array('FTEXT' => 0x01, 'FHCRC' => 0x02, 'FEXTRA' => 0x04, 'FNAME' => 0x08, 'FCOMMENT' => 0x10); - - /** - * Gzip file data buffer - * - * @var string - * @since 1.0 - */ - private $data = null; - - /** - * Holds the options array. - * - * @var array|\ArrayAccess - * @since 1.0 - */ - protected $options = array(); - - /** - * Create a new Archive object. - * - * @param array|\ArrayAccess $options An array of options - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - public function __construct($options = array()) - { - if (!is_array($options) && !($options instanceof \ArrayAccess)) - { - throw new \InvalidArgumentException( - 'The options param must be an array or implement the ArrayAccess interface.' - ); - } - - $this->options = $options; - } - - /** - * Extract a Gzip compressed file to a given path - * - * @param string $archive Path to ZIP archive to extract - * @param string $destination Path to extract archive to - * - * @return boolean True if successful - * - * @since 1.0 - * @throws \RuntimeException - */ - public function extract($archive, $destination) - { - $this->data = null; - - if (!isset($this->options['use_streams']) || $this->options['use_streams'] == false) - { - $this->data = file_get_contents($archive); - - if (!$this->data) - { - throw new \RuntimeException('Unable to read archive'); - } - - $position = $this->getFilePosition(); - $buffer = gzinflate(substr($this->data, $position, strlen($this->data) - $position)); - - if (empty($buffer)) - { - throw new \RuntimeException('Unable to decompress data'); - } - - if (!File::write($destination, $buffer)) - { - throw new \RuntimeException('Unable to write archive'); - } - } - else - { - // New style! streams! - $input = Stream::getStream(); - - // Use gz - $input->set('processingmethod', 'gz'); - - if (!$input->open($archive)) - { - throw new \RuntimeException('Unable to read archive (gz)'); - } - - $output = Stream::getStream(); - - if (!$output->open($destination, 'w')) - { - $input->close(); - - throw new \RuntimeException('Unable to write archive (gz)'); - } - - do - { - $this->data = $input->read($input->get('chunksize', 8196)); - - if ($this->data) - { - if (!$output->write($this->data)) - { - $input->close(); - - throw new \RuntimeException('Unable to write file (gz)'); - } - } - } - - while ($this->data); - - $output->close(); - $input->close(); - } - - return true; - } - - /** - * Tests whether this adapter can unpack files on this computer. - * - * @return boolean True if supported - * - * @since 1.0 - */ - public static function isSupported() - { - return extension_loaded('zlib'); - } - - /** - * Get file data offset for archive - * - * @return integer Data position marker for archive - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getFilePosition() - { - // Gzipped file... unpack it first - $position = 0; - $info = @ unpack('CCM/CFLG/VTime/CXFL/COS', substr($this->data, $position + 2)); - - if (!$info) - { - throw new \RuntimeException('Unable to decompress data.'); - } - - $position += 10; - - if ($info['FLG'] & $this->flags['FEXTRA']) - { - $XLEN = unpack('vLength', substr($this->data, $position + 0, 2)); - $XLEN = $XLEN['Length']; - $position += $XLEN + 2; - } - - if ($info['FLG'] & $this->flags['FNAME']) - { - $filenamePos = strpos($this->data, "\x0", $position); - $position = $filenamePos + 1; - } - - if ($info['FLG'] & $this->flags['FCOMMENT']) - { - $commentPos = strpos($this->data, "\x0", $position); - $position = $commentPos + 1; - } - - if ($info['FLG'] & $this->flags['FHCRC']) - { - $hcrc = unpack('vCRC', substr($this->data, $position + 0, 2)); - $hcrc = $hcrc['CRC']; - $position += 2; - } - - return $position; - } -} diff --git a/libraries/vendor/joomla/archive/src/Tar.php b/libraries/vendor/joomla/archive/src/Tar.php deleted file mode 100644 index 5530493865f20..0000000000000 --- a/libraries/vendor/joomla/archive/src/Tar.php +++ /dev/null @@ -1,253 +0,0 @@ - - * - * @contributor Michael Slusarz - * @contributor Michael Cochrane - * - * @since 1.0 - */ -class Tar implements ExtractableInterface -{ - /** - * Tar file types. - * - * @var array - * @since 1.0 - */ - private $types = array( - 0x0 => 'Unix file', - 0x30 => 'File', - 0x31 => 'Link', - 0x32 => 'Symbolic link', - 0x33 => 'Character special file', - 0x34 => 'Block special file', - 0x35 => 'Directory', - 0x36 => 'FIFO special file', - 0x37 => 'Contiguous file' - ); - - /** - * Tar file data buffer - * - * @var string - * @since 1.0 - */ - private $data = null; - - /** - * Tar file metadata array - * - * @var array - * @since 1.0 - */ - private $metadata = null; - - /** - * Holds the options array. - * - * @var array|\ArrayAccess - * @since 1.0 - */ - protected $options = array(); - - /** - * Create a new Archive object. - * - * @param array|\ArrayAccess $options An array of options or an object that implements \ArrayAccess - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - public function __construct($options = array()) - { - if (!is_array($options) && !($options instanceof \ArrayAccess)) - { - throw new \InvalidArgumentException( - 'The options param must be an array or implement the ArrayAccess interface.' - ); - } - - $this->options = $options; - } - - /** - * Extract a ZIP compressed file to a given path - * - * @param string $archive Path to ZIP archive to extract - * @param string $destination Path to extract archive into - * - * @return boolean True if successful - * - * @since 1.0 - * @throws \RuntimeException - */ - public function extract($archive, $destination) - { - $this->data = null; - $this->metadata = null; - - $this->data = file_get_contents($archive); - - if (!$this->data) - { - throw new \RuntimeException('Unable to read archive'); - } - - $this->getTarInfo($this->data); - - for ($i = 0, $n = count($this->metadata); $i < $n; $i++) - { - $type = strtolower($this->metadata[$i]['type']); - - if ($type == 'file' || $type == 'unix file') - { - $buffer = $this->metadata[$i]['data']; - $path = Path::clean($destination . '/' . $this->metadata[$i]['name']); - - // Make sure the destination folder exists - if (!Folder::create(dirname($path))) - { - throw new \RuntimeException('Unable to create destination'); - } - - if (!File::write($path, $buffer)) - { - throw new \RuntimeException('Unable to write entry'); - } - } - } - - return true; - } - - /** - * Tests whether this adapter can unpack files on this computer. - * - * @return boolean True if supported - * - * @since 1.0 - */ - public static function isSupported() - { - return true; - } - - /** - * Get the list of files/data from a Tar archive buffer. - * - * @param string &$data The Tar archive buffer. - * - * @return array Archive metadata array - *
-	 * KEY: Position in the array
-	 * VALUES: 'attr'  --  File attributes
-	 * 'data'  --  Raw file contents
-	 * 'date'  --  File modification time
-	 * 'name'  --  Filename
-	 * 'size'  --  Original file size
-	 * 'type'  --  File type
-	 * 
- * - * @since 1.0 - * @throws \RuntimeException - */ - protected function getTarInfo(&$data) - { - $position = 0; - $return_array = array(); - - while ($position < strlen($data)) - { - if (version_compare(PHP_VERSION, '5.5', '>=')) - { - $info = @unpack( - "Z100filename/Z8mode/Z8uid/Z8gid/Z12size/Z12mtime/Z8checksum/Ctypeflag/Z100link/Z6magic/Z2version/Z32uname/Z32gname/Z8devmajor/Z8devminor", - substr($data, $position) - ); - } - else - { - $info = @unpack( - "a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/Ctypeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", - substr($data, $position) - ); - } - - /* - * This variable has been set in the previous loop, meaning that the filename was present in the previous block - * to allow more than 100 characters - see below - */ - if (isset($longlinkfilename)) - { - $info['filename'] = $longlinkfilename; - unset($longlinkfilename); - } - - if (!$info) - { - throw new \RuntimeException('Unable to decompress data'); - } - - $position += 512; - $contents = substr($data, $position, octdec($info['size'])); - $position += ceil(octdec($info['size']) / 512) * 512; - - if ($info['filename']) - { - $file = array( - 'attr' => null, - 'data' => null, - 'date' => octdec($info['mtime']), - 'name' => trim($info['filename']), - 'size' => octdec($info['size']), - 'type' => isset($this->types[$info['typeflag']]) ? $this->types[$info['typeflag']] : null); - - if (($info['typeflag'] == 0) || ($info['typeflag'] == 0x30) || ($info['typeflag'] == 0x35)) - { - // File or folder. - $file['data'] = $contents; - - $mode = hexdec(substr($info['mode'], 4, 3)); - $file['attr'] = (($info['typeflag'] == 0x35) ? 'd' : '-') . (($mode & 0x400) ? 'r' : '-') . (($mode & 0x200) ? 'w' : '-') . - (($mode & 0x100) ? 'x' : '-') . (($mode & 0x040) ? 'r' : '-') . (($mode & 0x020) ? 'w' : '-') . (($mode & 0x010) ? 'x' : '-') . - (($mode & 0x004) ? 'r' : '-') . (($mode & 0x002) ? 'w' : '-') . (($mode & 0x001) ? 'x' : '-'); - } - elseif (chr($info['typeflag']) == 'L' && $info['filename'] == '././@LongLink') - { - // GNU tar ././@LongLink support - the filename is actually in the contents, set a variable here so we can test in the next loop - $longlinkfilename = $contents; - - // And the file contents are in the next block so we'll need to skip this - continue; - } - else - { - // Some other type. - } - - $return_array[] = $file; - } - } - - $this->metadata = $return_array; - - return true; - } -} diff --git a/libraries/vendor/joomla/archive/src/Zip.php b/libraries/vendor/joomla/archive/src/Zip.php deleted file mode 100644 index 341e0b14b11a7..0000000000000 --- a/libraries/vendor/joomla/archive/src/Zip.php +++ /dev/null @@ -1,634 +0,0 @@ - - * http://www.zend.com/codex.php?id=535&single=1 - * - * Deins125 - * http://www.zend.com/codex.php?id=470&single=1 - * - * The ZIP compression date code is partially based on code from - * Peter Listiak - * - * This class is inspired from and draws heavily in code and concept from the Compress package of - * The Horde Project - * - * @contributor Chuck Hagenbuch - * @contributor Michael Slusarz - * @contributor Michael Cochrane - * - * @since 1.0 - */ -class Zip implements ExtractableInterface -{ - /** - * ZIP compression methods. - * - * @var array - * @since 1.0 - */ - private $methods = array( - 0x0 => 'None', - 0x1 => 'Shrunk', - 0x2 => 'Super Fast', - 0x3 => 'Fast', - 0x4 => 'Normal', - 0x5 => 'Maximum', - 0x6 => 'Imploded', - 0x8 => 'Deflated' - ); - - /** - * Beginning of central directory record. - * - * @var string - * @since 1.0 - */ - private $ctrlDirHeader = "\x50\x4b\x01\x02"; - - /** - * End of central directory record. - * - * @var string - * @since 1.0 - */ - private $ctrlDirEnd = "\x50\x4b\x05\x06\x00\x00\x00\x00"; - - /** - * Beginning of file contents. - * - * @var string - * @since 1.0 - */ - private $fileHeader = "\x50\x4b\x03\x04"; - - /** - * ZIP file data buffer - * - * @var string - * @since 1.0 - */ - private $data = null; - - /** - * ZIP file metadata array - * - * @var array - * @since 1.0 - */ - private $metadata = null; - - /** - * Holds the options array. - * - * @var array|\ArrayAccess - * @since 1.0 - */ - protected $options = array(); - - /** - * Create a new Archive object. - * - * @param array|\ArrayAccess $options An array of options or an object that implements \ArrayAccess - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - public function __construct($options = array()) - { - if (!is_array($options) && !($options instanceof \ArrayAccess)) - { - throw new \InvalidArgumentException( - 'The options param must be an array or implement the ArrayAccess interface.' - ); - } - - $this->options = $options; - } - - /** - * Create a ZIP compressed file from an array of file data. - * - * @param string $archive Path to save archive. - * @param array $files Array of files to add to archive. - * - * @return boolean True if successful. - * - * @since 1.0 - * @todo Finish Implementation - */ - public function create($archive, $files) - { - $contents = array(); - $ctrldir = array(); - - foreach ($files as $file) - { - $this->addToZipFile($file, $contents, $ctrldir); - } - - return $this->createZipFile($contents, $ctrldir, $archive); - } - - /** - * Extract a ZIP compressed file to a given path - * - * @param string $archive Path to ZIP archive to extract - * @param string $destination Path to extract archive into - * - * @return boolean True if successful - * - * @since 1.0 - * @throws \RuntimeException - */ - public function extract($archive, $destination) - { - if (!is_file($archive)) - { - throw new \RuntimeException('Archive does not exist'); - } - - if ($this->hasNativeSupport()) - { - return $this->extractNative($archive, $destination); - } - - return $this->extractCustom($archive, $destination); - } - - /** - * Tests whether this adapter can unpack files on this computer. - * - * @return boolean True if supported - * - * @since 1.0 - */ - public static function isSupported() - { - return self::hasNativeSupport() || extension_loaded('zlib'); - } - - /** - * Method to determine if the server has native zip support for faster handling - * - * @return boolean True if php has native ZIP support - * - * @since 1.0 - */ - public static function hasNativeSupport() - { - return extension_loaded('zip'); - } - - /** - * Checks to see if the data is a valid ZIP file. - * - * @param string &$data ZIP archive data buffer. - * - * @return boolean True if valid, false if invalid. - * - * @since 1.0 - */ - public function checkZipData(&$data) - { - return strpos($data, $this->fileHeader) !== false; - } - - /** - * Extract a ZIP compressed file to a given path using a php based algorithm that only requires zlib support - * - * @param string $archive Path to ZIP archive to extract. - * @param string $destination Path to extract archive into. - * - * @return boolean True if successful - * - * @since 1.0 - * @throws \RuntimeException - */ - protected function extractCustom($archive, $destination) - { - $this->data = null; - $this->metadata = null; - - $this->data = file_get_contents($archive); - - if (!$this->data) - { - throw new \RuntimeException('Unable to read archive (zip)'); - } - - if (!$this->readZipInfo($this->data)) - { - throw new \RuntimeException('Get ZIP Information failed'); - } - - for ($i = 0, $n = count($this->metadata); $i < $n; $i++) - { - $lastPathCharacter = substr($this->metadata[$i]['name'], -1, 1); - - if ($lastPathCharacter !== '/' && $lastPathCharacter !== '\\') - { - $buffer = $this->getFileData($i); - $path = Path::clean($destination . '/' . $this->metadata[$i]['name']); - - // Make sure the destination folder exists - if (!Folder::create(dirname($path))) - { - throw new \RuntimeException('Unable to create destination'); - } - - if (!File::write($path, $buffer)) - { - throw new \RuntimeException('Unable to write entry'); - } - } - } - - return true; - } - - /** - * Extract a ZIP compressed file to a given path using native php api calls for speed - * - * @param string $archive Path to ZIP archive to extract - * @param string $destination Path to extract archive into - * - * @return boolean True on success - * - * @since 1.0 - * @throws \RuntimeException - */ - protected function extractNative($archive, $destination) - { - $zip = zip_open($archive); - - if (!is_resource($zip)) - { - throw new \RuntimeException('Unable to open archive'); - } - - // Make sure the destination folder exists - if (!Folder::create($destination)) - { - throw new \RuntimeException('Unable to create destination'); - } - - // Read files in the archive - while ($file = @zip_read($zip)) - { - if (!zip_entry_open($zip, $file, "r")) - { - throw new \RuntimeException('Unable to read entry'); - } - - if (substr(zip_entry_name($file), strlen(zip_entry_name($file)) - 1) != "/") - { - $buffer = zip_entry_read($file, zip_entry_filesize($file)); - - if (File::write($destination . '/' . zip_entry_name($file), $buffer) === false) - { - throw new \RuntimeException('Unable to write entry'); - } - - zip_entry_close($file); - } - } - - @zip_close($zip); - - return true; - } - - /** - * Get the list of files/data from a ZIP archive buffer. - * - *
-	 * KEY: Position in zipfile
-	 * VALUES: 'attr'  --  File attributes
-	 * 'crc'   --  CRC checksum
-	 * 'csize' --  Compressed file size
-	 * 'date'  --  File modification time
-	 * 'name'  --  Filename
-	 * 'method'--  Compression method
-	 * 'size'  --  Original file size
-	 * 'type'  --  File type
-	 * 
- * - * @param string &$data The ZIP archive buffer. - * - * @return boolean True on success - * - * @since 1.0 - * @throws \RuntimeException - */ - private function readZipInfo(&$data) - { - $entries = array(); - - // Find the last central directory header entry - $fhLast = strpos($data, $this->ctrlDirEnd); - - do - { - $last = $fhLast; - } - - while (($fhLast = strpos($data, $this->ctrlDirEnd, $fhLast + 1)) !== false); - - // Find the central directory offset - $offset = 0; - - if ($last) - { - $endOfCentralDirectory = unpack( - 'vNumberOfDisk/vNoOfDiskWithStartOfCentralDirectory/vNoOfCentralDirectoryEntriesOnDisk/' . - 'vTotalCentralDirectoryEntries/VSizeOfCentralDirectory/VCentralDirectoryOffset/vCommentLength', - substr($data, $last + 4) - ); - $offset = $endOfCentralDirectory['CentralDirectoryOffset']; - } - - // Get details from central directory structure. - $fhStart = strpos($data, $this->ctrlDirHeader, $offset); - $dataLength = strlen($data); - - do - { - if ($dataLength < $fhStart + 31) - { - throw new \RuntimeException('Invalid Zip Data'); - } - - $info = unpack('vMethod/VTime/VCRC32/VCompressed/VUncompressed/vLength', substr($data, $fhStart + 10, 20)); - $name = substr($data, $fhStart + 46, $info['Length']); - - $entries[$name] = array( - 'attr' => null, - 'crc' => sprintf("%08s", dechex($info['CRC32'])), - 'csize' => $info['Compressed'], - 'date' => null, - '_dataStart' => null, - 'name' => $name, - 'method' => $this->methods[$info['Method']], - '_method' => $info['Method'], - 'size' => $info['Uncompressed'], - 'type' => null - ); - - $entries[$name]['date'] = mktime( - (($info['Time'] >> 11) & 0x1f), - (($info['Time'] >> 5) & 0x3f), - (($info['Time'] << 1) & 0x3e), - (($info['Time'] >> 21) & 0x07), - (($info['Time'] >> 16) & 0x1f), - ((($info['Time'] >> 25) & 0x7f) + 1980) - ); - - if ($dataLength < $fhStart + 43) - { - throw new \RuntimeException('Invalid ZIP data'); - } - - $info = unpack('vInternal/VExternal/VOffset', substr($data, $fhStart + 36, 10)); - - $entries[$name]['type'] = ($info['Internal'] & 0x01) ? 'text' : 'binary'; - $entries[$name]['attr'] = (($info['External'] & 0x10) ? 'D' : '-') . (($info['External'] & 0x20) ? 'A' : '-') - . (($info['External'] & 0x03) ? 'S' : '-') . (($info['External'] & 0x02) ? 'H' : '-') . (($info['External'] & 0x01) ? 'R' : '-'); - $entries[$name]['offset'] = $info['Offset']; - - // Get details from local file header since we have the offset - $lfhStart = strpos($data, $this->fileHeader, $entries[$name]['offset']); - - if ($dataLength < $lfhStart + 34) - { - throw new \RuntimeException('Invalid Zip Data'); - } - - $info = unpack('vMethod/VTime/VCRC32/VCompressed/VUncompressed/vLength/vExtraLength', substr($data, $lfhStart + 8, 25)); - $name = substr($data, $lfhStart + 30, $info['Length']); - $entries[$name]['_dataStart'] = $lfhStart + 30 + $info['Length'] + $info['ExtraLength']; - - // Bump the max execution time because not using the built in php zip libs makes this process slow. - @set_time_limit(ini_get('max_execution_time')); - } - - while ((($fhStart = strpos($data, $this->ctrlDirHeader, $fhStart + 46)) !== false)); - - $this->metadata = array_values($entries); - - return true; - } - - /** - * Returns the file data for a file by offsest in the ZIP archive - * - * @param integer $key The position of the file in the archive. - * - * @return string Uncompressed file data buffer. - * - * @since 1.0 - */ - private function getFileData($key) - { - if ($this->metadata[$key]['_method'] == 0x8) - { - return gzinflate(substr($this->data, $this->metadata[$key]['_dataStart'], $this->metadata[$key]['csize'])); - } - elseif ($this->metadata[$key]['_method'] == 0x0) - { - /* Files that aren't compressed. */ - return substr($this->data, $this->metadata[$key]['_dataStart'], $this->metadata[$key]['csize']); - } - elseif ($this->metadata[$key]['_method'] == 0x12) - { - // If bz2 extension is loaded use it - if (extension_loaded('bz2')) - { - return bzdecompress(substr($this->data, $this->metadata[$key]['_dataStart'], $this->metadata[$key]['csize'])); - } - } - - return ''; - } - - /** - * Converts a UNIX timestamp to a 4-byte DOS date and time format - * (date in high 2-bytes, time in low 2-bytes allowing magnitude - * comparison). - * - * @param integer $unixtime The current UNIX timestamp. - * - * @return integer The current date in a 4-byte DOS format. - * - * @since 1.0 - */ - protected function unix2DosTime($unixtime = null) - { - $timearray = (is_null($unixtime)) ? getdate() : getdate($unixtime); - - if ($timearray['year'] < 1980) - { - $timearray['year'] = 1980; - $timearray['mon'] = 1; - $timearray['mday'] = 1; - $timearray['hours'] = 0; - $timearray['minutes'] = 0; - $timearray['seconds'] = 0; - } - - return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | - ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); - } - - /** - * Adds a "file" to the ZIP archive. - * - * @param array &$file File data array to add - * @param array &$contents An array of existing zipped files. - * @param array &$ctrldir An array of central directory information. - * - * @return void - * - * @since 1.0 - * @todo Review and finish implementation - */ - private function addToZipFile(array &$file, array &$contents, array &$ctrldir) - { - $data = &$file['data']; - $name = str_replace('\\', '/', $file['name']); - - /* See if time/date information has been provided. */ - $ftime = null; - - if (isset($file['time'])) - { - $ftime = $file['time']; - } - - // Get the hex time. - $dtime = dechex($this->unix2DosTime($ftime)); - $hexdtime = chr(hexdec($dtime[6] . $dtime[7])) . chr(hexdec($dtime[4] . $dtime[5])) . chr(hexdec($dtime[2] . $dtime[3])) - . chr(hexdec($dtime[0] . $dtime[1])); - - /* Begin creating the ZIP data. */ - $fr = $this->fileHeader; - /* Version needed to extract. */ - $fr .= "\x14\x00"; - /* General purpose bit flag. */ - $fr .= "\x00\x00"; - /* Compression method. */ - $fr .= "\x08\x00"; - /* Last modification time/date. */ - $fr .= $hexdtime; - - /* "Local file header" segment. */ - $unc_len = strlen($data); - $crc = crc32($data); - $zdata = gzcompress($data); - $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); - $c_len = strlen($zdata); - - /* CRC 32 information. */ - $fr .= pack('V', $crc); - /* Compressed filesize. */ - $fr .= pack('V', $c_len); - /* Uncompressed filesize. */ - $fr .= pack('V', $unc_len); - /* Length of filename. */ - $fr .= pack('v', strlen($name)); - /* Extra field length. */ - $fr .= pack('v', 0); - /* File name. */ - $fr .= $name; - - /* "File data" segment. */ - $fr .= $zdata; - - /* Add this entry to array. */ - $old_offset = strlen(implode('', $contents)); - $contents[] = &$fr; - - /* Add to central directory record. */ - $cdrec = $this->ctrlDirHeader; - /* Version made by. */ - $cdrec .= "\x00\x00"; - /* Version needed to extract */ - $cdrec .= "\x14\x00"; - /* General purpose bit flag */ - $cdrec .= "\x00\x00"; - /* Compression method */ - $cdrec .= "\x08\x00"; - /* Last mod time/date. */ - $cdrec .= $hexdtime; - /* CRC 32 information. */ - $cdrec .= pack('V', $crc); - /* Compressed filesize. */ - $cdrec .= pack('V', $c_len); - /* Uncompressed filesize. */ - $cdrec .= pack('V', $unc_len); - /* Length of filename. */ - $cdrec .= pack('v', strlen($name)); - /* Extra field length. */ - $cdrec .= pack('v', 0); - /* File comment length. */ - $cdrec .= pack('v', 0); - /* Disk number start. */ - $cdrec .= pack('v', 0); - /* Internal file attributes. */ - $cdrec .= pack('v', 0); - /* External file attributes -'archive' bit set. */ - $cdrec .= pack('V', 32); - /* Relative offset of local header. */ - $cdrec .= pack('V', $old_offset); - /* File name. */ - $cdrec .= $name; - /* Optional extra field, file comment goes here. */ - - /* Save to central directory array. */ - $ctrldir[] = &$cdrec; - } - - /** - * Creates the ZIP file. - * - * Official ZIP file format: http://www.pkware.com/appnote.txt - * - * @param array &$contents An array of existing zipped files. - * @param array &$ctrlDir An array of central directory information. - * @param string $path The path to store the archive. - * - * @return boolean True if successful - * - * @since 1.0 - * @todo Review and finish implementation - */ - private function createZipFile(array &$contents, array &$ctrlDir, $path) - { - $data = implode('', $contents); - $dir = implode('', $ctrlDir); - - $buffer = $data . $dir . $this->ctrlDirEnd . /* Total # of entries "on this disk". */ - pack('v', count($ctrlDir)) . /* Total # of entries overall. */ - pack('v', count($ctrlDir)) . /* Size of central directory. */ - pack('V', strlen($dir)) . /* Offset to start of central dir. */ - pack('V', strlen($data)) . /* ZIP file comment length. */ - "\x00\x00"; - - return File::write($path, $buffer); - } -} diff --git a/libraries/vendor/joomla/authentication/LICENSE b/libraries/vendor/joomla/authentication/LICENSE deleted file mode 100644 index 1837b0acbe169..0000000000000 --- a/libraries/vendor/joomla/authentication/LICENSE +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/libraries/vendor/joomla/authentication/src/AbstractUsernamePasswordAuthenticationStrategy.php b/libraries/vendor/joomla/authentication/src/AbstractUsernamePasswordAuthenticationStrategy.php deleted file mode 100644 index 810fcd7a631c2..0000000000000 --- a/libraries/vendor/joomla/authentication/src/AbstractUsernamePasswordAuthenticationStrategy.php +++ /dev/null @@ -1,120 +0,0 @@ -passwordHandler = $passwordHandler ?: new BCryptHandler; - } - - /** - * Attempt to authenticate the username and password pair. - * - * @param string $username The username to authenticate. - * @param string $password The password to attempt authentication with. - * - * @return string|boolean A string containing a username if authentication is successful, false otherwise. - * - * @since 1.1.0 - */ - protected function doAuthenticate($username, $password) - { - $hashedPassword = $this->getHashedPassword($username); - - if ($hashedPassword === false) - { - $this->status = Authentication::NO_SUCH_USER; - - return false; - } - - if (!$this->verifyPassword($username, $password, $hashedPassword)) - { - $this->status = Authentication::INVALID_CREDENTIALS; - - return false; - } - - $this->status = Authentication::SUCCESS; - - return $username; - } - - /** - * Retrieve the hashed password for the specified user. - * - * @param string $username Username to lookup. - * - * @return string|boolean Hashed password on success or boolean false on failure. - * - * @since 1.1.0 - */ - abstract protected function getHashedPassword($username); - - /** - * Get the status of the last authentication attempt. - * - * @return integer Authentication class constant result. - * - * @since 1.1.0 - */ - public function getResult() - { - return $this->status; - } - - /** - * Attempt to verify the username and password pair. - * - * @param string $username The username to authenticate. - * @param string $password The password to attempt authentication with. - * @param string $hashedPassword The hashed password to attempt authentication against. - * - * @return boolean - * - * @since 1.1.0 - */ - protected function verifyPassword($username, $password, $hashedPassword) - { - return $this->passwordHandler->validatePassword($password, $hashedPassword); - } -} diff --git a/libraries/vendor/joomla/authentication/src/Authentication.php b/libraries/vendor/joomla/authentication/src/Authentication.php deleted file mode 100644 index 06cdef5653fff..0000000000000 --- a/libraries/vendor/joomla/authentication/src/Authentication.php +++ /dev/null @@ -1,149 +0,0 @@ -strategies[$strategyName] = $strategy; - } - - /** - * Perform authentication - * - * @param AuthenticationStrategyInterface[] $strategies Array of strategies to try - empty to try all strategies. - * - * @return string|boolean A string containing a username if authentication is successful, false otherwise. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function authenticate(array $strategies = []) - { - if (empty($strategies)) - { - $strategyObjects = $this->strategies; - } - else - { - $strategyObjects = []; - - foreach ($strategies as $strategy) - { - if (!isset($this->strategies[$strategy])) - { - throw new \RuntimeException('Authentication Strategy Not Found'); - } - - $strategyObjects[$strategy] = $this->strategies[$strategy]; - } - } - - if (empty($strategyObjects)) - { - throw new \RuntimeException('No strategies have been set'); - } - - /** @var AuthenticationStrategyInterface $strategyObject */ - foreach ($strategyObjects as $strategy => $strategyObject) - { - $username = $strategyObject->authenticate(); - - $this->results[$strategy] = $strategyObject->getResult(); - - if (is_string($username)) - { - return $username; - } - } - - return false; - } - - /** - * Get authentication results. - * - * Use this if you want to get more detailed information about the results of an authentication attempts. - * - * @return integer[] An array containing authentication results. - * - * @since 1.0 - */ - public function getResults() - { - return $this->results; - } -} diff --git a/libraries/vendor/joomla/authentication/src/AuthenticationStrategyInterface.php b/libraries/vendor/joomla/authentication/src/AuthenticationStrategyInterface.php deleted file mode 100644 index c03f9c8056b23..0000000000000 --- a/libraries/vendor/joomla/authentication/src/AuthenticationStrategyInterface.php +++ /dev/null @@ -1,35 +0,0 @@ -=') && defined('PASSWORD_ARGON2I')) - { - return password_hash($plaintext, PASSWORD_ARGON2I, $options); - } - - // Use the sodium extension (PHP 7.2 native or PECL 2.x) if able - if (function_exists('sodium_crypto_pwhash_str_verify')) - { - $hash = sodium_crypto_pwhash_str( - $plaintext, - SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, - SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE - ); - sodium_memzero($plaintext); - - return $hash; - } - - // Use the libsodium extension (PECL 1.x) if able - if (extension_loaded('libsodium')) - { - $hash = \Sodium\crypto_pwhash_str( - $plaintext, - \Sodium\CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, - \Sodium\CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE - ); - \Sodium\memzero($plaintext); - - return $hash; - } - - throw new \LogicException('Argon2i algorithm is not supported.'); - } - - /** - * Check that the password handler is supported in this environment - * - * @return boolean - * - * @since 1.2.0 - */ - public static function isSupported() - { - // Check for native PHP engine support in the password extension - if (version_compare(PHP_VERSION, '7.2', '>=') && defined('PASSWORD_ARGON2I')) - { - return true; - } - - // Check if the sodium_compat polyfill is installed and look for compatibility through that - if (class_exists('\\ParagonIE_Sodium_Compat') && method_exists('\\ParagonIE_Sodium_Compat', 'crypto_pwhash_is_available')) - { - return \ParagonIE_Sodium_Compat::crypto_pwhash_is_available(); - } - - // Check for support from the (lib)sodium extension - return function_exists('sodium_crypto_pwhash_str') || extension_loaded('libsodium'); - } - - /** - * Validate a password - * - * @param string $plaintext The plain text password to validate - * @param string $hashed The password hash to validate against - * - * @return boolean - * - * @since 1.2.0 - * @throws \LogicException - */ - public function validatePassword($plaintext, $hashed) - { - // Use the password extension if able - if (version_compare(PHP_VERSION, '7.2', '>=') && defined('PASSWORD_ARGON2I')) - { - return password_verify($plaintext, $hashed); - } - - // Use the sodium extension (PHP 7.2 native or PECL 2.x) if able - if (function_exists('sodium_crypto_pwhash_str_verify')) - { - $valid = sodium_crypto_pwhash_str_verify($hashed, $plaintext); - sodium_memzero($plaintext); - - return $valid; - } - - // Use the libsodium extension (PECL 1.x) if able - if (extension_loaded('libsodium')) - { - $valid = \Sodium\crypto_pwhash_str_verify($hashed, $plaintext); - \Sodium\memzero($plaintext); - - return $valid; - } - - throw new \LogicException('Argon2i algorithm is not supported.'); - } -} diff --git a/libraries/vendor/joomla/authentication/src/Password/BCryptHandler.php b/libraries/vendor/joomla/authentication/src/Password/BCryptHandler.php deleted file mode 100644 index 89ca34ac6ceec..0000000000000 --- a/libraries/vendor/joomla/authentication/src/Password/BCryptHandler.php +++ /dev/null @@ -1,60 +0,0 @@ -input = $input; - $this->db = $database; - - $options['database_table'] = $options['database_table'] ?? '#__users'; - $options['username_column'] = $options['username_column'] ?? 'username'; - $options['password_column'] = $options['password_column'] ?? 'password'; - - $this->dbOptions = $options; - } - - /** - * Attempt to authenticate the username and password pair. - * - * @return string|boolean A string containing a username if authentication is successful, false otherwise. - * - * @since 1.1.0 - */ - public function authenticate() - { - $username = $this->input->get('username', false, 'username'); - $password = $this->input->get('password', false, 'raw'); - - if (!$username || !$password) - { - $this->status = Authentication::NO_CREDENTIALS; - - return false; - } - - return $this->doAuthenticate($username, $password); - } - - /** - * Retrieve the hashed password for the specified user. - * - * @param string $username Username to lookup. - * - * @return string|boolean Hashed password on success or boolean false on failure. - * - * @since 1.1.0 - */ - protected function getHashedPassword($username) - { - try - { - $password = $this->db->setQuery( - $this->db->getQuery(true) - ->select($this->db->quoteName($this->dbOptions['password_column'])) - ->from($this->db->quoteName($this->dbOptions['database_table'])) - ->where($this->db->quoteName($this->dbOptions['username_column']) . ' = ?') - ->bind(1, $username) - )->loadResult(); - } - catch (\RuntimeException $exception) - { - return false; - } - - if (!$password) - { - return false; - } - - return $password; - } -} diff --git a/libraries/vendor/joomla/authentication/src/Strategies/LocalStrategy.php b/libraries/vendor/joomla/authentication/src/Strategies/LocalStrategy.php deleted file mode 100644 index e12c2cd0b9842..0000000000000 --- a/libraries/vendor/joomla/authentication/src/Strategies/LocalStrategy.php +++ /dev/null @@ -1,91 +0,0 @@ -credentialStore = $credentialStore; - $this->input = $input; - } - - /** - * Attempt to authenticate the username and password pair. - * - * @return string|boolean A string containing a username if authentication is successful, false otherwise. - * - * @since 1.0 - */ - public function authenticate() - { - $username = $this->input->get('username', false, 'username'); - $password = $this->input->get('password', false, 'raw'); - - if (!$username || !$password) - { - $this->status = Authentication::NO_CREDENTIALS; - - return false; - } - - return $this->doAuthenticate($username, $password); - } - - /** - * Retrieve the hashed password for the specified user. - * - * @param string $username Username to lookup. - * - * @return string|boolean Hashed password on success or boolean false on failure. - * - * @since 1.1.0 - */ - protected function getHashedPassword($username) - { - return $this->credentialStore[$username] ?? false; - } -} diff --git a/libraries/vendor/joomla/console/LICENSE b/libraries/vendor/joomla/console/LICENSE deleted file mode 100644 index df50810b85774..0000000000000 --- a/libraries/vendor/joomla/console/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/console/src/AbstractCommand.php b/libraries/vendor/joomla/console/src/AbstractCommand.php deleted file mode 100644 index d5fd9f5478572..0000000000000 --- a/libraries/vendor/joomla/console/src/AbstractCommand.php +++ /dev/null @@ -1,490 +0,0 @@ - '', 'long' => '']; - - /** - * Constructor. - * - * @since __DEPLOY_VERSION__ - */ - public function __construct() - { - $this->definition = new InputDefinition; - - $this->initialise(); - } - - /** - * Adds an argument to the input definition. - * - * @param string $name The argument name - * @param integer $mode The argument mode: InputArgument::REQUIRED or InputArgument::OPTIONAL - * @param string $description A description text - * @param mixed $default The default value (for InputArgument::OPTIONAL mode only) - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function addArgument($name, $mode = null, $description = '', $default = null) - { - $this->definition->addArgument(new InputArgument($name, $mode, $description, $default)); - - return $this; - } - - /** - * Adds an option to the input definition. - * - * @param string $name The option name - * @param string|array $shortcut The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts - * @param integer $mode The option mode: One of the VALUE_* constants - * @param string $description A description text - * @param mixed $default The default value (must be null for InputOption::VALUE_NONE) - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function addOption($name, $shortcut = null, $mode = null, $description = '', $default = null) - { - $this->definition->addOption(new InputOption($name, $shortcut, $mode, $description, $default)); - - return $this; - } - - /** - * Create a new SymfonyStyle instance. - * - * @return SymfonyStyle - * - * @since __DEPLOY_VERSION__ - */ - public function createSymfonyStyle(): SymfonyStyle - { - return new SymfonyStyle($this->getApplication()->getConsoleInput(), $this->getApplication()->getConsoleOutput()); - } - - /** - * Get the command's aliases. - * - * @return string[] - * - * @since __DEPLOY_VERSION__ - */ - public function getAliases(): array - { - return $this->aliases; - } - - /** - * Get the application object. - * - * @return Application The application object. - * - * @since __DEPLOY_VERSION__ - * @throws \UnexpectedValueException if the application has not been set. - */ - public function getApplication(): Application - { - if ($this->app) - { - return $this->app; - } - - throw new \UnexpectedValueException('Application not set in ' . get_class($this)); - } - - /** - * Get the command's input definition. - * - * @return InputDefinition - * - * @since __DEPLOY_VERSION__ - */ - public function getDefinition(): InputDefinition - { - return $this->definition; - } - - /** - * Get the command's description. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function getDescription(): string - { - return $this->description; - } - - /** - * Get the command's help. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function getHelp(): string - { - return $this->help; - } - - /** - * Get the command's input helper set. - * - * @return HelperSet - * - * @since __DEPLOY_VERSION__ - */ - public function getHelperSet(): HelperSet - { - return $this->helperSet; - } - - /** - * Get the command's name. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function getName(): string - { - return $this->name; - } - - /** - * Returns the processed help for the command. - * - * This method is used to replace placeholders in commands with the real values. - * By default, this supports `%command.name%` and `%command.full_name`. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function getProcessedHelp(): string - { - $name = $this->getName(); - - $placeholders = [ - '%command.name%', - '%command.full_name%', - ]; - - $replacements = [ - $name, - $this->getApplication()->input->server->getRaw('PHP_SELF', '') . ' ' . $name, - ]; - - return str_replace($placeholders, $replacements, $this->getHelp() ?: $this->getDescription()); - } - - /** - * Get the command's synopsis. - * - * @param boolean $short Flag indicating whether the short or long version of the synopsis should be returned - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function getSynopsis(bool $short = false): string - { - $key = $short ? 'short' : 'long'; - - if ($this->synopsis[$key] === '') - { - $this->synopsis[$key] = trim(sprintf('%s %s', $this->getName(), $this->getDefinition()->getSynopsis($short))); - } - - return $this->synopsis[$key]; - } - - /** - * Initialise the command. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - protected function initialise() - { - } - - /** - * Check if the command is enabled in this environment. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function isEnabled(): bool - { - return true; - } - - /** - * Check if the command is hidden from the command listing. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function isHidden(): bool - { - return $this->hidden; - } - - /** - * Merges the definition from the application to this command. - * - * @param InputDefinition $definition The InputDefinition from the application to be merged. - * @param boolean $mergeArgs Flag indicating whether the application's definition arguments should be merged - * - * @return void - * - * @since __DEPLOY_VERSION__ - * @internal This method should not be relied on as part of the public API - */ - final public function mergeApplicationDefinition(InputDefinition $definition, bool $mergeArgs = true) - { - if ($this->applicationDefinitionMerged) - { - return; - } - - $this->definition->addOptions($definition->getOptions()); - - if ($mergeArgs) - { - $currentArguments = $this->definition->getArguments(); - $this->definition->setArguments($definition->getArguments()); - $this->definition->addArguments($currentArguments); - } - - $this->applicationDefinitionMerged = true; - } - - /** - * Set the command's aliases. - * - * @param string[] $aliases The command aliases - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setAliases(array $aliases) - { - $this->aliases = $aliases; - } - - /** - * Set the application object. - * - * @param Application $app The application object. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setApplication(Application $app) - { - $this->app = $app; - } - - /** - * Sets the input definition for the command. - * - * @param array|InputDefinition $definition Either an InputDefinition object or an array of objects to write to the definition. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setDefinition($definition) - { - if ($definition instanceof InputDefinition) - { - $this->definition = $definition; - } - else - { - $this->definition->setDefinition($definition); - } - - $this->applicationDefinitionMerged = false; - } - - /** - * Sets the description for the command. - * - * @param string $description The description for the command - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setDescription(string $description) - { - $this->description = $description; - } - - /** - * Sets the help for the command. - * - * @param string $help The help for the command - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setHelp(string $help) - { - $this->help = $help; - } - - /** - * Set the command's input helper set. - * - * @param HelperSet $helperSet The helper set. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setHelperSet(HelperSet $helperSet) - { - $this->helperSet = $helperSet; - } - - /** - * Set whether this command is hidden from the command listing. - * - * @param boolean $hidden Flag if this command is hidden. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setHidden(bool $hidden) - { - $this->hidden = $hidden; - } - - /** - * Set the command's name. - * - * @param string $name The command name - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setName(string $name) - { - $this->name = $name; - } -} diff --git a/libraries/vendor/joomla/console/src/Application.php b/libraries/vendor/joomla/console/src/Application.php deleted file mode 100644 index 3f937e3530a42..0000000000000 --- a/libraries/vendor/joomla/console/src/Application.php +++ /dev/null @@ -1,1164 +0,0 @@ -close(); - } - - // Call the constructor as late as possible (it runs `initialise`). - parent::__construct($input ?: new Cli, $config); - } - - /** - * Add a command to the application. - * - * @param CommandInterface $command The command to add - * - * @return CommandInterface - * - * @since __DEPLOY_VERSION__ - * @throws LogicException - */ - public function addCommand(CommandInterface $command): CommandInterface - { - if (!$command->isEnabled()) - { - return $command; - } - - $command->setApplication($this); - $command->setHelperSet($this->helperSet); - - if (!$command->getName()) - { - throw new LogicException(sprintf('The command class %s does not have a name.', get_class($command))); - } - - $this->commands[$command->getName()] = $command; - - foreach ($command->getAliases() as $alias) - { - $this->commands[$alias] = $command; - } - - return $command; - } - - /** - * Configures the console input and output instances for the process. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - protected function configureIO() - { - $input = $this->getConsoleInput(); - $output = $this->getConsoleOutput(); - - if ($input->hasParameterOption(['--ansi'], true)) - { - $output->setDecorated(true); - } - elseif ($input->hasParameterOption(['--no-ansi'], true)) - { - $output->setDecorated(false); - } - - if ($input->hasParameterOption(['--no-interaction', '-n'], true)) - { - $input->setInteractive(false); - } - - if ($input->hasParameterOption(['--quiet', '-q'], true)) - { - $output->setVerbosity(OutputInterface::VERBOSITY_QUIET); - $input->setInteractive(false); - } - else - { - if ($input->hasParameterOption('-vvv', true) - || $input->hasParameterOption('--verbose=3', true) - || $input->getParameterOption('--verbose', false, true) === 3 - ) - { - $output->setVerbosity(OutputInterface::VERBOSITY_DEBUG); - } - elseif ($input->hasParameterOption('-vv', true) - || $input->hasParameterOption('--verbose=2', true) - || $input->getParameterOption('--verbose', false, true) === 2 - ) - { - $output->setVerbosity(OutputInterface::VERBOSITY_VERY_VERBOSE); - } - elseif ($input->hasParameterOption('-v', true) - || $input->hasParameterOption('--verbose=1', true) - || $input->hasParameterOption('--verbose', true) - || $input->getParameterOption('--verbose', false, true) - ) - { - $output->setVerbosity(OutputInterface::VERBOSITY_VERBOSE); - } - } - } - - /** - * Method to run the application routines. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - protected function doExecute() - { - $helpCommand = false; - - $commandName = $this->getCommandName(); - - if (!$commandName) - { - $this->getConsoleOutput()->write('Command name not given.'); - - $this->exitCode = 1; - - return; - } - - if ($this->getConsoleInput()->hasParameterOption(['--help', '-h'], true)) - { - $helpCommand = $commandName; - $commandName = 'help'; - } - - $command = $this->activeCommand = $this->getCommand($commandName); - - // Create the command synopsis before merging the application input definition - $command->getSynopsis(true); - $command->getSynopsis(false); - - $command->mergeApplicationDefinition($this->definition); - - $this->getConsoleInput()->bind($command->getDefinition()); - - // If the user is looking for help, set the command name for use - if ($helpCommand !== false) - { - $this->getConsoleInput()->setArgument('command_name', $helpCommand); - $this->input->set('command_name', $helpCommand); - } - - // Make sure the command argument is defined to both inputs, validation may fail otherwise - if ($this->getConsoleInput()->hasArgument('command') && $this->getConsoleInput()->getArgument('command') === null) - { - $this->getConsoleInput()->setArgument('command', $command->getName()); - $this->input->set('command', $command->getName()); - } - - $this->getConsoleInput()->validate(); - - // Push the console input into any helpers which are input aware - foreach ($command->getHelperSet() as $helper) - { - if ($helper instanceof InputAwareInterface) - { - $helper->setInput($this->getConsoleInput()); - } - } - - try - { - $dispatcher = $this->getDispatcher(); - } - catch (\UnexpectedValueException $exception) - { - $this->runCommand($command); - - return; - } - - /** @var Event\BeforeCommandExecuteEvent $event */ - $event = $this->dispatchEvent(ConsoleEvents::BEFORE_COMMAND_EXECUTE, new Event\BeforeCommandExecuteEvent($this, $command)); - - if ($event->isCommandEnabled()) - { - $this->runCommand($command); - } - else - { - $this->exitCode = Event\BeforeCommandExecuteEvent::RETURN_CODE_DISABLED; - } - } - - /** - * Execute the application. - * - * @return void - * - * @since __DEPLOY_VERSION__ - * @throws \Throwable - */ - public function execute() - { - putenv('LINES=' . $this->terminal->getHeight()); - putenv('COLUMNS=' . $this->terminal->getWidth()); - - $this->configureIO(); - - try - { - $dispatcher = $this->getDispatcher(); - } - catch (\UnexpectedValueException $noDispatcherException) - { - $dispatcher = null; - } - - if ($dispatcher) - { - $this->dispatchEvent(ApplicationEvents::BEFORE_EXECUTE); - } - - try - { - $thrown = null; - $this->doExecute(); - } - catch (\Throwable $thrown) - { - if (!$thrown instanceof \Exception) - { - if (class_exists(FatalThrowableError::class)) - { - $thrown = new FatalThrowableError($thrown); - } - else - { - $thrown = new \ErrorException($thrown->getMessage(), $thrown->getCode(), E_ERROR, $thrown->getFile(), $thrown->getLine()); - } - } - - if (!$this->shouldCatchThrowables()) - { - throw $thrown; - } - - if ($dispatcher) - { - /** @var Event\ConsoleErrorEvent $event */ - $event = $this->dispatchEvent(ApplicationEvents::ERROR, new Event\ConsoleErrorEvent($thrown, $this, $this->activeCommand)); - - $thrown = $event->getError(); - - if ($event->getExitCode() === 0) - { - $thrown = null; - } - } - - if ($thrown !== null) - { - $this->renderException($thrown); - - $exitCode = $thrown->getCode(); - - if (is_numeric($exitCode)) - { - $exitCode = (int) $exitCode; - - if ($exitCode === 0) - { - $exitCode = 1; - } - } - else - { - $exitCode = 1; - } - - $this->exitCode = $exitCode; - } - } - finally - { - if ($dispatcher) - { - /** @var Event\TerminateEvent $event */ - $event = $this->dispatchEvent(ConsoleEvents::TERMINATE, new Event\TerminateEvent($this->exitCode, $this, $this->activeCommand)); - - $this->exitCode = $event->getExitCode(); - } - - if ($this->autoExit) - { - $exitCode = $this->exitCode > 255 ? 255 : $this->exitCode; - - $this->close($exitCode); - } - } - } - - /** - * Finds a registered namespace by a name. - * - * @param string $namespace A namespace to search for - * - * @return string - * - * @since __DEPLOY_VERSION__ - * @throws CommandNotFoundException When namespace is incorrect or ambiguous - */ - public function findNamespace($namespace) - { - $allNamespaces = $this->getNamespaces(); - $expr = preg_replace_callback( - '{([^:]+|)}', - function ($matches) - { - return preg_quote($matches[1]) . '[^:]*'; - }, - $namespace - ); - $namespaces = preg_grep('{^' . $expr . '}', $allNamespaces); - - if (empty($namespaces)) - { - $message = sprintf('There are no commands defined in the "%s" namespace.', $namespace); - - throw new CommandNotFoundException($message); - } - - $exact = in_array($namespace, $namespaces, true); - - if (count($namespaces) > 1 && !$exact) - { - throw new CommandNotFoundException(sprintf('The namespace "%s" is ambiguous.', $namespace)); - } - - return $exact ? $namespace : reset($namespaces); - } - - /** - * Gets all commands, including those available through a command loader, optionally filtered on a command namespace. - * - * @param string $namespace An optional command namespace to filter by. - * - * @return CommandInterface[] - * - * @since __DEPLOY_VERSION__ - */ - public function getAllCommands(string $namespace = ''): array - { - if ($namespace === '') - { - $commands = $this->commands; - - if (!$this->commandLoader) - { - return $commands; - } - - foreach ($this->commandLoader->getNames() as $name) - { - if (!isset($commands[$name])) - { - $commands[$name] = $this->getCommand($name); - } - } - - return $commands; - } - - $commands = []; - - foreach ($this->commands as $name => $command) - { - if ($namespace === $this->extractNamespace($name, substr_count($namespace, ':') + 1)) - { - $commands[$name] = $command; - } - } - - if ($this->commandLoader) - { - foreach ($this->commandLoader->getNames() as $name) - { - if (!isset($commands[$name]) && $namespace === $this->extractNamespace($name, substr_count($namespace, ':') + 1)) - { - $commands[$name] = $this->get($name); - } - } - } - - return $commands; - } - - /** - * Gets the base helper set. - * - * @return HelperSet - * - * @since __DEPLOY_VERSION__ - */ - protected function getBaseHelperSet() - { - return new HelperSet( - [ - new FormatterHelper, - new DebugFormatterHelper, - new ProcessHelper, - new QuestionHelper, - ] - ); - } - - /** - * Gets the base input definition. - * - * @return InputDefinition - * - * @since __DEPLOY_VERSION__ - */ - protected function getBaseInputDefinition(): InputDefinition - { - return new InputDefinition( - [ - new InputArgument('command', InputArgument::REQUIRED, 'The command to execute'), - new InputOption('--help', '-h', InputOption::VALUE_NONE, 'Display the help information'), - new InputOption('--quiet', '-q', InputOption::VALUE_NONE, 'Flag indicating that all output should be silenced'), - new InputOption( - '--verbose', - '-v|vv|vvv', - InputOption::VALUE_NONE, - 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug' - ), - new InputOption('--ansi', '', InputOption::VALUE_NONE, 'Force ANSI output'), - new InputOption('--no-ansi', '', InputOption::VALUE_NONE, 'Disable ANSI output'), - new InputOption('--no-interaction', '-n', InputOption::VALUE_NONE, 'Flag to disable interacting with the user'), - ] - ); - } - - /** - * Get a command by name. - * - * @param string $name The name of the command to retrieve. - * - * @return CommandInterface - * - * @since __DEPLOY_VERSION__ - * @throws CommandNotFoundException - */ - public function getCommand(string $name): CommandInterface - { - if (isset($this->commands[$name])) - { - return $this->commands[$name]; - } - - if ($this->commandLoader && $this->commandLoader->has($name)) - { - $command = $this->commandLoader->get($name); - - $this->addCommand($command); - - return $command; - } - - throw new CommandNotFoundException("There is not a command with the name '$name'."); - } - - /** - * Get the name of the command to run. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - protected function getCommandName(): string - { - $args = $this->input->args; - - return !empty($args[0]) ? $args[0] : $this->defaultCommand; - } - - /** - * Get the registered commands. - * - * This method only retrieves commands which have been explicitly registered. To get all commands including those from a - * command loader, use the `getAllCommands()` method. - * - * @return CommandInterface[] - * - * @since __DEPLOY_VERSION__ - */ - public function getCommands(): array - { - return $this->commands; - } - - /** - * Get the console input handler. - * - * @return InputInterface - * - * @since __DEPLOY_VERSION__ - */ - public function getConsoleInput(): InputInterface - { - return $this->consoleInput; - } - - /** - * Get the console output handler. - * - * @return OutputInterface - * - * @since __DEPLOY_VERSION__ - */ - public function getConsoleOutput(): OutputInterface - { - return $this->consoleOutput; - } - - /** - * Get the commands which should be registered by default to the application. - * - * @return CommandInterface[] - * - * @since __DEPLOY_VERSION__ - */ - protected function getDefaultCommands(): array - { - return [ - new Command\ListCommand, - new Command\HelpCommand, - ]; - } - - /** - * Get the application definition. - * - * @return InputDefinition - * - * @since __DEPLOY_VERSION__ - */ - public function getDefinition(): InputDefinition - { - return $this->definition; - } - - /** - * Get the command's exit code. - * - * @return integer - * - * @since __DEPLOY_VERSION__ - */ - public function getExitCode(): int - { - return $this->exitCode; - } - - /** - * Get the application helper set. - * - * @return HelperSet - * - * @since __DEPLOY_VERSION__ - */ - public function getHelperSet(): HelperSet - { - return $this->helperSet; - } - - /** - * Get the long version string for the application. - * - * Typically, this is the application name and version and is used in the application help output. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function getLongVersion(): string - { - if ($this->getName() !== '') - { - if ($this->getVersion() !== '') - { - return sprintf('%s %s', $this->getName(), $this->getVersion()); - } - - return $this->getName(); - } - - return 'Joomla Console Application'; - } - - /** - * Get the name of the application. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function getName(): string - { - return $this->name; - } - - /** - * Returns an array of all unique namespaces used by currently registered commands. - * - * Note that this does not include the global namespace which always exists. - * - * @return string[] - * - * @since __DEPLOY_VERSION__ - */ - public function getNamespaces(): array - { - $namespaces = []; - - foreach ($this->getAllCommands() as $command) - { - $namespaces = array_merge($namespaces, $this->extractAllNamespaces($command->getName())); - - foreach ($command->getAliases() as $alias) - { - $namespaces = array_merge($namespaces, $this->extractAllNamespaces($alias)); - } - } - - return array_values(array_unique(array_filter($namespaces))); - } - - /** - * Get the version of the application. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function getVersion(): string - { - return $this->version; - } - - /** - * Check if the application has a command with the given name. - * - * @param string $name The name of the command to check for existence. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function hasCommand(string $name): bool - { - return isset($this->commands[$name]) || ($this->commandLoader && $this->commandLoader->has($name)); - } - - /** - * Custom initialisation method. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - protected function initialise() - { - // Set the current directory. - $this->set('cwd', getcwd()); - - $this->consoleInput = new JoomlaInput($this->input); - $this->consoleOutput = new ConsoleOutput; - $this->terminal = new Terminal; - - $this->definition = $this->getBaseInputDefinition(); - $this->helperSet = $this->getBaseHelperSet(); - - // Register default commands - foreach ($this->getDefaultCommands() as $command) - { - $this->addCommand($command); - } - } - - /** - * Set whether the application should auto exit. - * - * @param boolean $autoExit The auto exit state. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setAutoExit(bool $autoExit) - { - $this->autoExit = $autoExit; - } - - /** - * Set whether the application should catch Throwables. - * - * @param boolean $catchThrowables The catch Throwables state. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setCatchThrowables(bool $catchThrowables) - { - $this->catchThrowables = $catchThrowables; - } - - /** - * Set the command loader. - * - * @param Loader\LoaderInterface $loader The new command loader. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function setCommandLoader(Loader\LoaderInterface $loader) - { - $this->commandLoader = $loader; - - return $this; - } - - /** - * Set the console input handler. - * - * @param InputInterface $input The new console input handler. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function setConsoleInput(InputInterface $input) - { - $this->consoleInput = $input; - - return $this; - } - - /** - * Set the console output handler. - * - * @param OutputInterface $output The new console output handler. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function setConsoleOutput(OutputInterface $output) - { - $this->consoleOutput = $output; - - return $this; - } - - /** - * Set the name of the application. - * - * @param string $name The new application name. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function setName(string $name) - { - $this->name = $name; - - return $this; - } - - /** - * Set the version of the application. - * - * @param string $version The new application version. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function setVersion(string $version) - { - $this->version = $version; - - return $this; - } - - /** - * Get the application's auto exit state. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function shouldAutoExit(): bool - { - return $this->autoExit; - } - - /** - * Get the application's catch Throwables state. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function shouldCatchThrowables(): bool - { - return $this->catchThrowables; - } - - /** - * Returns all namespaces of the command name. - * - * @param string $name The name of the command - * - * @return string[] The command's namespaces - * - * @since __DEPLOY_VERSION__ - */ - private function extractAllNamespaces(string $name): array - { - // -1 as third argument is needed to skip the command short name when exploding - $parts = explode(':', $name, -1); - $namespaces = []; - - foreach ($parts as $part) - { - if (count($namespaces)) - { - $namespaces[] = end($namespaces) . ':' . $part; - } - else - { - $namespaces[] = $part; - } - } - - return $namespaces; - } - - /** - * Returns the namespace part of the command name. - * - * @param string $name The command name to process - * @param integer $limit The maximum number of parts of the namespace - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - private function extractNamespace(string $name, $limit = null) - { - $parts = explode(':', $name); - array_pop($parts); - - return implode(':', $limit === null ? $parts : array_slice($parts, 0, $limit)); - } - - /** - * Renders a caught exception. - * - * @param \Exception $exception The Exception instance to render - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - private function renderException(\Exception $exception) - { - $output = $this->getConsoleOutput(); - - if ($output instanceof ConsoleOutputInterface) - { - $output = $output->getErrorOutput(); - } - - $output->writeln('', OutputInterface::VERBOSITY_QUIET); - - do - { - $title = sprintf( - ' [%s%s] ', - get_class($exception), - $output->isVerbose() && $exception->getCode() !== 0 ? ' (' . $exception->getCode() . ')' : '' - ); - - $len = StringHelper::strlen($title); - - $width = $this->terminal->getWidth() ? $this->terminal->getWidth() - 1 : PHP_INT_MAX; - $lines = []; - - foreach (preg_split('/\r?\n/', $exception->getMessage()) as $line) - { - foreach (StringHelper::str_split($line, $width - 4) as $line) - { - // Format lines to get the right string length - $lineLength = StringHelper::strlen($line) + 4; - $lines[] = [$line, $lineLength]; - - $len = max($lineLength, $len); - } - } - - $messages = []; - $messages[] = $emptyLine = sprintf('%s', str_repeat(' ', $len)); - $messages[] = sprintf( - '%s%s', - $title, - str_repeat(' ', max(0, $len - StringHelper::strlen($title))) - ); - - foreach ($lines as $line) - { - $messages[] = sprintf( - ' %s %s', - OutputFormatter::escape($line[0]), - str_repeat(' ', $len - $line[1]) - ); - } - - $messages[] = $emptyLine; - $messages[] = ''; - - $output->writeln($messages, OutputInterface::VERBOSITY_QUIET); - - if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) - { - $output->writeln('Exception trace:', OutputInterface::VERBOSITY_QUIET); - - $trace = $exception->getTrace(); - - array_unshift( - $trace, - [ - 'function' => '', - 'file' => $exception->getFile() ?: 'Unavailable', - 'line' => $exception->getLine() ?: 'Unavailable', - 'args' => [], - ] - ); - - for ($i = 0, $count = count($trace); $i < $count; ++$i) - { - $class = $trace[$i]['class'] ?? ''; - $type = $trace[$i]['type'] ?? ''; - $function = $trace[$i]['function']; - $file = $trace[$i]['file'] ?? 'Unavailable'; - $line = $trace[$i]['line'] ?? 'Unavailable'; - - $output->writeln( - sprintf(' %s%s%s() at %s:%s', $class, $type, $function, $file, $line), - OutputInterface::VERBOSITY_QUIET - ); - } - - $output->writeln('', OutputInterface::VERBOSITY_QUIET); - } - } - while ($exception = $exception->getPrevious()); - - if ($this->activeCommand instanceof CommandInterface) - { - $output->writeln( - sprintf( - '%s', - sprintf($this->activeCommand->getSynopsis()) - ), - OutputInterface::VERBOSITY_QUIET - ); - $output->writeln('', OutputInterface::VERBOSITY_QUIET); - } - } - - /** - * Run the command. - * - * @param CommandInterface $command The command to run. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - private function runCommand(CommandInterface $command) - { - $this->exitCode = $command->execute(); - } -} diff --git a/libraries/vendor/joomla/console/src/Command/HelpCommand.php b/libraries/vendor/joomla/console/src/Command/HelpCommand.php deleted file mode 100644 index e2847922f5683..0000000000000 --- a/libraries/vendor/joomla/console/src/Command/HelpCommand.php +++ /dev/null @@ -1,65 +0,0 @@ -getApplication()->input->get('command_name'); - $command = $commandName === $this->getName() ? $this : $this->getApplication()->getCommand($commandName); - - $descriptor = new DescriptorHelper; - - $this->getHelperSet()->set($descriptor); - - $descriptor->describe($this->getApplication()->getConsoleOutput(), $command); - - return 0; - } - - /** - * Initialise the command. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - protected function initialise() - { - $this->setName('help'); - $this->setDescription('Show the help for a command'); - $this->setHelp(<<<'EOF' -The %command.name% command displays a command's help information: - -php %command.full_name% list - -To display the list of available commands, please use the list command. -EOF - ); - - $this->addArgument('command_name', InputArgument::OPTIONAL, 'The command name', 'help'); - } -} diff --git a/libraries/vendor/joomla/console/src/Command/ListCommand.php b/libraries/vendor/joomla/console/src/Command/ListCommand.php deleted file mode 100644 index 575fab054453a..0000000000000 --- a/libraries/vendor/joomla/console/src/Command/ListCommand.php +++ /dev/null @@ -1,65 +0,0 @@ -getHelperSet()->set($descriptor); - - $descriptor->describe( - $this->getApplication()->getConsoleOutput(), - $this->getApplication(), - [ - 'namespace' => $this->getApplication()->input->getString('namespace', ''), - ] - ); - - return 0; - } - - /** - * Initialise the command. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - protected function initialise() - { - $this->setName('list'); - $this->setDescription("List the application's available commands"); - $this->addArgument('namespace', InputArgument::OPTIONAL, 'The namespace name'); - $this->setHelp(<<<'EOF' -The %command.name% command lists all of the application's commands: - - php %command.full_name% -EOF - ); - } -} diff --git a/libraries/vendor/joomla/console/src/CommandInterface.php b/libraries/vendor/joomla/console/src/CommandInterface.php deleted file mode 100644 index bbc2f866a0be9..0000000000000 --- a/libraries/vendor/joomla/console/src/CommandInterface.php +++ /dev/null @@ -1,235 +0,0 @@ -application = $application; - $this->namespace = $namespace; - $this->showHidden = $showHidden; - } - - /** - * Get the application's command namespaces. - * - * @return string[] - * - * @since __DEPLOY_VERSION__ - */ - public function getNamespaces(): array - { - if (null === $this->namespaces) - { - $this->inspectApplication(); - } - - return $this->namespaces; - } - - /** - * Get the application's commands. - * - * @return CommandInterface[] - * - * @since __DEPLOY_VERSION__ - */ - public function getCommands(): array - { - if (null === $this->commands) - { - $this->inspectApplication(); - } - - return $this->commands; - } - - /** - * Get a command by name. - * - * @param string $name The name of the command to retrieve. - * - * @return CommandInterface - * - * @since __DEPLOY_VERSION__ - * @throws CommandNotFoundException - */ - public function getCommand(string $name): CommandInterface - { - if (!isset($this->commands[$name]) && !isset($this->aliases[$name])) - { - throw new CommandNotFoundException(sprintf('Command %s does not exist.', $name)); - } - - return $this->commands[$name] ?? $this->aliases[$name]; - } - - /** - * Returns the namespace part of the command name. - * - * @param string $name The command name to process - * @param integer $limit The maximum number of parts of the namespace - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - private function extractNamespace(string $name, $limit = null) - { - $parts = explode(':', $name); - array_pop($parts); - - return implode(':', $limit === null ? $parts : array_slice($parts, 0, $limit)); - } - - /** - * Inspects the application. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - private function inspectApplication() - { - $this->commands = []; - $this->namespaces = []; - - $all = $this->application->getAllCommands($this->namespace ? $this->application->findNamespace($this->namespace) : ''); - - foreach ($this->sortCommands($all) as $namespace => $commands) - { - $names = []; - - /** @var CommandInterface $command */ - foreach ($commands as $name => $command) - { - if (!$command->getName() || (!$this->showHidden && $command->isHidden())) - { - continue; - } - - if ($command->getName() === $name) - { - $this->commands[$name] = $command; - } - else - { - $this->aliases[$name] = $command; - } - - $names[] = $name; - } - - $this->namespaces[$namespace] = ['id' => $namespace, 'commands' => $names]; - } - } - - /** - * Sort a set of commands. - * - * @param CommandInterface[] $commands The commands to sort. - * - * @return CommandInterface[] - * - * @since __DEPLOY_VERSION__ - */ - private function sortCommands(array $commands): array - { - $namespacedCommands = []; - $globalCommands = []; - - foreach ($commands as $name => $command) - { - $key = $this->extractNamespace($name, 1); - - if (!$key) - { - $globalCommands[self::GLOBAL_NAMESPACE][$name] = $command; - } - else - { - $namespacedCommands[$key][$name] = $command; - } - } - - ksort($namespacedCommands); - $namespacedCommands = array_merge($globalCommands, $namespacedCommands); - - foreach ($namespacedCommands as &$commandsSet) - { - ksort($commandsSet); - } - - // Unset reference to keep scope clear - unset($commandsSet); - - return $namespacedCommands; - } -} diff --git a/libraries/vendor/joomla/console/src/Descriptor/TextDescriptor.php b/libraries/vendor/joomla/console/src/Descriptor/TextDescriptor.php deleted file mode 100644 index b4a996185f429..0000000000000 --- a/libraries/vendor/joomla/console/src/Descriptor/TextDescriptor.php +++ /dev/null @@ -1,280 +0,0 @@ -output = $output; - - switch (true) - { - case $object instanceof Application: - $this->describeJoomlaApplication($object, $options); - - break; - - case $object instanceof CommandInterface: - $this->describeConsoleCommand($object, $options); - - break; - - default: - parent::describe($output, $object, $options); - } - } - - /** - * Formats command aliases to show them in the command description. - * - * @param CommandInterface $command The command to process - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - private function getCommandAliasesText(CommandInterface $command): string - { - $text = ''; - $aliases = $command->getAliases(); - - if ($aliases) - { - $text = '[' . implode('|', $aliases) . '] '; - } - - return $text; - } - - /** - * Describes a command. - * - * @param CommandInterface $command The command being described. - * @param array $options Descriptor options. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - private function describeConsoleCommand(CommandInterface $command, array $options) - { - $command->getSynopsis(true); - $command->getSynopsis(false); - $command->mergeApplicationDefinition($command->getApplication()->getDefinition(), false); - - $this->writeText('Usage:', $options); - - foreach (array_merge([$command->getSynopsis(true)], $command->getAliases()) as $usage) - { - $this->writeText("\n"); - $this->writeText(' ' . $usage, $options); - } - - $this->writeText("\n"); - - $definition = $command->getDefinition(); - - if ($definition->getOptions() || $definition->getArguments()) - { - $this->writeText("\n"); - $this->describeInputDefinition($definition, $options); - $this->writeText("\n"); - } - - if ($help = $command->getProcessedHelp()) - { - $this->writeText("\n"); - $this->writeText('Help:', $options); - $this->writeText("\n"); - $this->writeText(' ' . str_replace("\n", "\n ", $help), $options); - $this->writeText("\n"); - } - } - - /** - * Describes an application. - * - * @param Application $app The application being described. - * @param array $options Descriptor options. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - private function describeJoomlaApplication(Application $app, array $options) - { - $describedNamespace = $options['namespace'] ?? ''; - $description = new ApplicationDescription($app, $describedNamespace); - - $version = $app->getLongVersion(); - - if ($version !== '') - { - $this->writeText("$version\n\n", $options); - } - - $this->writeText("Usage:\n"); - $this->writeText(" command [options] [arguments]\n\n"); - - $this->describeInputDefinition(new InputDefinition($app->getDefinition()->getOptions()), $options); - - $this->writeText("\n"); - $this->writeText("\n"); - - $commands = $description->getCommands(); - $namespaces = $description->getNamespaces(); - - if ($describedNamespace && $namespaces) - { - // Ensure all aliased commands are included when describing a specific namespace - $describedNamespaceInfo = reset($namespaces); - - foreach ($describedNamespaceInfo['commands'] as $name) - { - $commands[$name] = $description->getCommand($name); - } - } - - $width = $this->getColumnWidth( - call_user_func_array( - 'array_merge', - array_map( - function ($namespace) use ($commands) - { - return array_intersect($namespace['commands'], array_keys($commands)); - }, - $namespaces - ) - ) - ); - - if ($describedNamespace) - { - $this->writeText(sprintf('Available commands for the "%s" namespace:', $describedNamespace), $options); - } - else - { - $this->writeText('Available commands:', $options); - } - - foreach ($namespaces as $namespace) - { - $namespace['commands'] = array_filter( - $namespace['commands'], - function ($name) use ($commands) - { - return isset($commands[$name]); - } - ); - - if (!$namespace['commands']) - { - continue; - } - - if (!$describedNamespace && ApplicationDescription::GLOBAL_NAMESPACE !== $namespace['id']) - { - $this->writeText("\n"); - $this->writeText(' ' . $namespace['id'] . '', $options); - } - - foreach ($namespace['commands'] as $name) - { - $this->writeText("\n"); - $spacingWidth = $width - StringHelper::strlen($name); - $command = $commands[$name]; - $commandAliases = $name === $command->getName() ? $this->getCommandAliasesText($command) : ''; - - $this->writeText( - sprintf( - ' %s%s%s', $name, str_repeat(' ', $spacingWidth), $commandAliases . $command->getDescription() - ), - $options - ); - } - } - - $this->writeText("\n"); - } - - /** - * Calculate the column width for a group of commands. - * - * @param CommandInterface[]|string[] $commands The commands to use for processing a width. - * - * @return integer - * - * @since __DEPLOY_VERSION__ - */ - private function getColumnWidth(array $commands): int - { - $widths = []; - - foreach ($commands as $command) - { - if ($command instanceof CommandInterface) - { - $widths[] = StringHelper::strlen($command->getName()); - - foreach ($command->getAliases() as $alias) - { - $widths[] = StringHelper::strlen($alias); - } - } - else - { - $widths[] = StringHelper::strlen($command); - } - } - - return $widths ? max($widths) + 2 : 0; - } - - /** - * Writes text to the output. - * - * @param string|array $content The message as an array of lines or a single string. - * @param array $options The options to use for formatting the output. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - private function writeText($content, array $options = []) - { - $this->write( - isset($options['raw_text']) && $options['raw_text'] ? strip_tags($content) : $content, - isset($options['raw_output']) ? !$options['raw_output'] : true - ); - } -} diff --git a/libraries/vendor/joomla/console/src/Event/BeforeCommandExecuteEvent.php b/libraries/vendor/joomla/console/src/Event/BeforeCommandExecuteEvent.php deleted file mode 100644 index 72db94059b381..0000000000000 --- a/libraries/vendor/joomla/console/src/Event/BeforeCommandExecuteEvent.php +++ /dev/null @@ -1,91 +0,0 @@ -commandEnabled = $command->isEnabled(); - } - } - - /** - * Disable the command. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function disableCommand() - { - $this->commandEnabled = false; - } - - /** - * Enable the command. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function enableCommand() - { - $this->commandEnabled = false; - } - - /** - * Check if the command is enabled. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function isCommandEnabled(): bool - { - return $this->commandEnabled; - } -} diff --git a/libraries/vendor/joomla/console/src/Event/ConsoleErrorEvent.php b/libraries/vendor/joomla/console/src/Event/ConsoleErrorEvent.php deleted file mode 100644 index b2848f12f7cdd..0000000000000 --- a/libraries/vendor/joomla/console/src/Event/ConsoleErrorEvent.php +++ /dev/null @@ -1,109 +0,0 @@ -error = $error; - } - - /** - * Get the error object. - * - * @return \Throwable - * - * @since __DEPLOY_VERSION__ - */ - public function getError(): \Throwable - { - return $this->error; - } - - /** - * Gets the exit code. - * - * @return integer - * - * @since __DEPLOY_VERSION__ - */ - public function getExitCode(): int - { - return $this->exitCode ?: (is_int($this->error->getCode()) && $this->error->getCode() !== 0 ? $this->error->getCode() : 1); - } - - /** - * Set the error object. - * - * @param \Throwable $error The error object to set to the event. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setError(\Throwable $error) - { - $this->error = $error; - } - - /** - * Sets the exit code. - * - * @param integer $exitCode The command exit code. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setExitCode(int $exitCode) - { - $this->exitCode = $exitCode; - - $r = new \ReflectionProperty($this->error, 'code'); - $r->setAccessible(true); - $r->setValue($this->error, $this->exitCode); - } -} diff --git a/libraries/vendor/joomla/console/src/Event/ConsoleEvent.php b/libraries/vendor/joomla/console/src/Event/ConsoleEvent.php deleted file mode 100644 index 42361a69bbb20..0000000000000 --- a/libraries/vendor/joomla/console/src/Event/ConsoleEvent.php +++ /dev/null @@ -1,79 +0,0 @@ -application = $application; - $this->command = $command; - } - - /** - * Get the active application. - * - * @return Application - * - * @since __DEPLOY_VERSION__ - */ - public function getApplication(): Application - { - return $this->application; - } - - /** - * Get the command being executed. - * - * @return CommandInterface|null - * - * @since __DEPLOY_VERSION__ - */ - public function getCommand() - { - return $this->command; - } -} diff --git a/libraries/vendor/joomla/console/src/Event/TerminateEvent.php b/libraries/vendor/joomla/console/src/Event/TerminateEvent.php deleted file mode 100644 index 6d3f260f55f86..0000000000000 --- a/libraries/vendor/joomla/console/src/Event/TerminateEvent.php +++ /dev/null @@ -1,71 +0,0 @@ -exitCode = $exitCode; - } - - /** - * Gets the exit code. - * - * @return integer - * - * @since __DEPLOY_VERSION__ - */ - public function getExitCode(): int - { - return $this->exitCode; - } - - /** - * Sets the exit code. - * - * @param integer $exitCode The command exit code. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function setExitCode(int $exitCode) - { - $this->exitCode = $exitCode; - } -} diff --git a/libraries/vendor/joomla/console/src/Helper/DescriptorHelper.php b/libraries/vendor/joomla/console/src/Helper/DescriptorHelper.php deleted file mode 100644 index 263b601eae9e1..0000000000000 --- a/libraries/vendor/joomla/console/src/Helper/DescriptorHelper.php +++ /dev/null @@ -1,49 +0,0 @@ -describe($output, $object, $options); - } - - /** - * Returns the canonical name of this helper. - * - * @return string The canonical name - * - * @since ___DEPLOY_VERSION__ - */ - public function getName() - { - return 'descriptor'; - } -} diff --git a/libraries/vendor/joomla/console/src/Input/JoomlaInput.php b/libraries/vendor/joomla/console/src/Input/JoomlaInput.php deleted file mode 100644 index ed0b5ce0768d9..0000000000000 --- a/libraries/vendor/joomla/console/src/Input/JoomlaInput.php +++ /dev/null @@ -1,80 +0,0 @@ -input = $input; - } - - /** - * Binds the current Input instance with the given arguments and options. - * - * @param InputDefinition $definition A InputDefinition instance - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function bind(InputDefinition $definition) - { - parent::bind($definition); - - // Bind arguments to the input - foreach ($this->getArguments() as $key => $value) - { - $this->input->def($key, $value); - } - - // Bind options to the input - foreach ($this->getOptions() as $key => $value) - { - $this->input->def($key, $value); - - // If this option has shortcuts, register those too - if ($shortcut = $definition->getOption($key)->getShortcut()) - { - foreach (explode('|', $shortcut) as $shortcutKey) - { - $this->input->def($shortcutKey, $value); - } - } - } - } -} diff --git a/libraries/vendor/joomla/console/src/Loader/ContainerLoader.php b/libraries/vendor/joomla/console/src/Loader/ContainerLoader.php deleted file mode 100644 index 22dcbf8b6f565..0000000000000 --- a/libraries/vendor/joomla/console/src/Loader/ContainerLoader.php +++ /dev/null @@ -1,97 +0,0 @@ -container = $container; - $this->commandMap = $commandMap; - } - - /** - * Loads a command. - * - * @param string $name The command to load. - * - * @return CommandInterface - * - * @since __DEPLOY_VERSION__ - * @throws CommandNotFoundException - */ - public function get(string $name): CommandInterface - { - if (!$this->has($name)) - { - throw new CommandNotFoundException(sprintf('Command "%s" does not exist.', $name)); - } - - return $this->container->get($this->commandMap[$name]); - } - - /** - * Get the names of the registered commands. - * - * @return string[] - * - * @since __DEPLOY_VERSION__ - */ - public function getNames(): array - { - return array_keys($this->commandMap); - } - - /** - * Checks if a command exists. - * - * @param string $name The command to check. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function has($name): bool - { - return isset($this->commandMap[$name]) && $this->container->has($this->commandMap[$name]); - } -} diff --git a/libraries/vendor/joomla/console/src/Loader/LoaderInterface.php b/libraries/vendor/joomla/console/src/Loader/LoaderInterface.php deleted file mode 100644 index 59f98fc427bb3..0000000000000 --- a/libraries/vendor/joomla/console/src/Loader/LoaderInterface.php +++ /dev/null @@ -1,52 +0,0 @@ - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/controller/src/AbstractController.php b/libraries/vendor/joomla/controller/src/AbstractController.php deleted file mode 100644 index 35ca77e7355ac..0000000000000 --- a/libraries/vendor/joomla/controller/src/AbstractController.php +++ /dev/null @@ -1,154 +0,0 @@ -input = $input; - $this->app = $app; - } - - /** - * Get the application object. - * - * @return AbstractApplication The application object. - * - * @since 1.0 - * @throws \UnexpectedValueException if the application has not been set. - */ - public function getApplication() - { - if ($this->app) - { - return $this->app; - } - - throw new \UnexpectedValueException('Application not set in ' . __CLASS__); - } - - /** - * Get the input object. - * - * @return Input The input object. - * - * @since 1.0 - * @throws \UnexpectedValueException - */ - public function getInput() - { - if ($this->input) - { - return $this->input; - } - - throw new \UnexpectedValueException('Input not set in ' . __CLASS__); - } - - /** - * Serialize the controller. - * - * @return string The serialized controller. - * - * @since 1.0 - */ - public function serialize() - { - return serialize($this->getInput()); - } - - /** - * Set the application object. - * - * @param AbstractApplication $app The application object. - * - * @return AbstractController Returns itself to support chaining. - * - * @since 1.0 - */ - public function setApplication(AbstractApplication $app) - { - $this->app = $app; - - return $this; - } - - /** - * Set the input object. - * - * @param Input $input The input object. - * - * @return AbstractController Returns itself to support chaining. - * - * @since 1.0 - */ - public function setInput(Input $input) - { - $this->input = $input; - - return $this; - } - - /** - * Unserialize the controller. - * - * @param string $input The serialized controller. - * - * @return AbstractController Returns itself to support chaining. - * - * @since 1.0 - * @throws \UnexpectedValueException if input is not the right class. - */ - public function unserialize($input) - { - $input = unserialize($input); - - if (!($input instanceof Input)) - { - throw new \UnexpectedValueException(sprintf('%s would not accept a `%s`.', __METHOD__, gettype($this->input))); - } - - $this->setInput($input); - - return $this; - } -} diff --git a/libraries/vendor/joomla/controller/src/ControllerInterface.php b/libraries/vendor/joomla/controller/src/ControllerInterface.php deleted file mode 100644 index 3e322a5770e46..0000000000000 --- a/libraries/vendor/joomla/controller/src/ControllerInterface.php +++ /dev/null @@ -1,30 +0,0 @@ - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/crypt/src/Cipher/Crypto.php b/libraries/vendor/joomla/crypt/src/Cipher/Crypto.php deleted file mode 100644 index a1044f60bb734..0000000000000 --- a/libraries/vendor/joomla/crypt/src/Cipher/Crypto.php +++ /dev/null @@ -1,139 +0,0 @@ -getType() !== 'crypto') - { - throw new InvalidKeyTypeException('crypto', $key->getType()); - } - - // Decrypt the data. - try - { - return DefuseCrypto::decrypt($data, DefuseKey::loadFromAsciiSafeString($key->getPrivate())); - } - catch (WrongKeyOrModifiedCiphertextException $ex) - { - throw new \RuntimeException('DANGER! DANGER! The ciphertext has been tampered with!', $ex->getCode(), $ex); - } - catch (EnvironmentIsBrokenException $ex) - { - throw new \RuntimeException('Cannot safely perform decryption', $ex->getCode(), $ex); - } - } - - /** - * Method to encrypt a data string. - * - * @param string $data The data string to encrypt. - * @param Key $key The key object to use for encryption. - * - * @return string The encrypted data string. - * - * @since __DEPLOY_VERSION__ - * @throws \InvalidArgumentException - * @throws \RuntimeException - */ - public function encrypt($data, Key $key) - { - // Validate key. - if ($key->getType() !== 'crypto') - { - throw new InvalidKeyTypeException('crypto', $key->getType()); - } - - // Encrypt the data. - try - { - return DefuseCrypto::encrypt($data, DefuseKey::loadFromAsciiSafeString($key->getPrivate())); - } - catch (EnvironmentIsBrokenException $ex) - { - throw new \RuntimeException('Cannot safely perform encryption', $ex->getCode(), $ex); - } - } - - /** - * Method to generate a new encryption key object. - * - * @param array $options Key generation options. - * - * @return Key - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function generateKey(array $options = array()) - { - // Generate the encryption key. - try - { - $public = DefuseKey::createNewRandomKey(); - } - catch (EnvironmentIsBrokenException $ex) - { - throw new \RuntimeException('Cannot safely create a key', $ex->getCode(), $ex); - } - - // Create the new encryption key object. - return new Key('crypto', $public->saveToAsciiSafeString(), $public->getRawBytes()); - } - - /** - * Check if the cipher is supported in this environment. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public static function isSupported(): bool - { - try - { - RuntimeTests::runtimeTest(); - - return true; - } - catch (EnvironmentIsBrokenException $e) - { - return false; - } - } -} diff --git a/libraries/vendor/joomla/crypt/src/Cipher/OpenSSL.php b/libraries/vendor/joomla/crypt/src/Cipher/OpenSSL.php deleted file mode 100644 index f7385a6483b00..0000000000000 --- a/libraries/vendor/joomla/crypt/src/Cipher/OpenSSL.php +++ /dev/null @@ -1,145 +0,0 @@ -iv = $iv; - $this->method = $method; - } - - /** - * Method to decrypt a data string. - * - * @param string $data The encrypted string to decrypt. - * @param Key $key The key object to use for decryption. - * - * @return string The decrypted data string. - * - * @since __DEPLOY_VERSION__ - * @throws \InvalidArgumentException - * @throws \RuntimeException - */ - public function decrypt($data, Key $key) - { - // Validate key. - if ($key->getType() !== 'openssl') - { - throw new InvalidKeyTypeException('openssl', $key->getType()); - } - - $cleartext = openssl_decrypt($data, $this->method, $key->getPrivate(), true, $this->iv); - - if ($cleartext === false) - { - throw new \RuntimeException('Failed to decrypt data'); - } - - return $cleartext; - } - - /** - * Method to encrypt a data string. - * - * @param string $data The data string to encrypt. - * @param Key $key The key object to use for encryption. - * - * @return string The encrypted data string. - * - * @since __DEPLOY_VERSION__ - * @throws \InvalidArgumentException - * @throws \RuntimeException - */ - public function encrypt($data, Key $key) - { - // Validate key. - if ($key->getType() !== 'openssl') - { - throw new InvalidKeyTypeException('openssl', $key->getType()); - } - - $encrypted = openssl_encrypt($data, $this->method, $key->getPrivate(), true, $this->iv); - - if ($encrypted === false) - { - throw new \RuntimeException('Unable to encrypt data'); - } - - return $encrypted; - } - - /** - * Method to generate a new encryption key object. - * - * @param array $options Key generation options. - * - * @return Key - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function generateKey(array $options = []) - { - $passphrase = $options['passphrase'] ?? false; - - if ($passphrase === false) - { - throw new \RuntimeException('Missing passphrase file'); - } - - return new Key('openssl', $passphrase, 'unused'); - } - - /** - * Check if the cipher is supported in this environment. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public static function isSupported(): bool - { - return extension_loaded('openssl'); - } -} diff --git a/libraries/vendor/joomla/crypt/src/Cipher/Sodium.php b/libraries/vendor/joomla/crypt/src/Cipher/Sodium.php deleted file mode 100644 index a488cdb6661be..0000000000000 --- a/libraries/vendor/joomla/crypt/src/Cipher/Sodium.php +++ /dev/null @@ -1,143 +0,0 @@ -getType() !== 'sodium') - { - throw new InvalidKeyTypeException('sodium', $key->getType()); - } - - if (!$this->nonce) - { - throw new \RuntimeException('Missing nonce to decrypt data'); - } - - $decrypted = Compat::crypto_box_open( - $data, - $this->nonce, - Compat::crypto_box_keypair_from_secretkey_and_publickey($key->getPrivate(), $key->getPublic()) - ); - - if ($decrypted === false) - { - throw new \RuntimeException('Malformed message or invalid MAC'); - } - - return $decrypted; - } - - /** - * Method to encrypt a data string. - * - * @param string $data The data string to encrypt. - * @param Key $key The key object to use for encryption. - * - * @return string The encrypted data string. - * - * @since 1.4.0 - * @throws \RuntimeException - */ - public function encrypt($data, Key $key) - { - // Validate key. - if ($key->getType() !== 'sodium') - { - throw new InvalidKeyTypeException('sodium', $key->getType()); - } - - if (!$this->nonce) - { - throw new \RuntimeException('Missing nonce to decrypt data'); - } - - return Compat::crypto_box( - $data, - $this->nonce, - Compat::crypto_box_keypair_from_secretkey_and_publickey($key->getPrivate(), $key->getPublic()) - ); - } - - /** - * Method to generate a new encryption key object. - * - * @param array $options Key generation options. - * - * @return Key - * - * @since 1.4.0 - * @throws RuntimeException - */ - public function generateKey(array $options = array()) - { - // Generate the encryption key. - $pair = Compat::crypto_box_keypair(); - - return new Key('sodium', Compat::crypto_box_secretkey($pair), Compat::crypto_box_publickey($pair)); - } - - /** - * Check if the cipher is supported in this environment. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public static function isSupported(): bool - { - return class_exists(Compat::class); - } - - /** - * Set the nonce to use for encrypting/decrypting messages - * - * @param string $nonce The message nonce - * - * @return void - * - * @since 1.4.0 - */ - public function setNonce($nonce) - { - $this->nonce = $nonce; - } -} diff --git a/libraries/vendor/joomla/crypt/src/CipherInterface.php b/libraries/vendor/joomla/crypt/src/CipherInterface.php deleted file mode 100644 index dbdd868fa0691..0000000000000 --- a/libraries/vendor/joomla/crypt/src/CipherInterface.php +++ /dev/null @@ -1,61 +0,0 @@ -cipher = $cipher ?: new Crypto; - - // Set the encryption key[/pair)]. - $this->key = $key ?: $this->generateKey(); - } - - /** - * Method to decrypt a data string. - * - * @param string $data The encrypted string to decrypt. - * - * @return string The decrypted data string. - * - * @since 1.0 - */ - public function decrypt($data) - { - return $this->cipher->decrypt($data, $this->key); - } - - /** - * Method to encrypt a data string. - * - * @param string $data The data string to encrypt. - * - * @return string The encrypted data string. - * - * @since 1.0 - */ - public function encrypt($data) - { - return $this->cipher->encrypt($data, $this->key); - } - - /** - * Method to generate a new encryption key[/pair] object. - * - * @param array $options Key generation options. - * - * @return Key - * - * @since 1.0 - */ - public function generateKey(array $options = array()) - { - return $this->cipher->generateKey($options); - } - - /** - * Method to set the encryption key[/pair] object. - * - * @param Key $key The key object to set. - * - * @return Crypt Instance of $this to allow chaining. - * - * @since 1.0 - */ - public function setKey(Key $key) - { - $this->key = $key; - - return $this; - } - - /** - * Generate random bytes. - * - * @param integer $length Length of the random data to generate - * - * @return string Random binary data - * - * @since 1.0 - */ - public static function genRandomBytes($length = 16) - { - return random_bytes($length); - } -} diff --git a/libraries/vendor/joomla/crypt/src/Exception/InvalidKeyTypeException.php b/libraries/vendor/joomla/crypt/src/Exception/InvalidKeyTypeException.php deleted file mode 100644 index 5e7102df7820e..0000000000000 --- a/libraries/vendor/joomla/crypt/src/Exception/InvalidKeyTypeException.php +++ /dev/null @@ -1,30 +0,0 @@ -type = $type; - - // Set the public/private key strings. - $this->private = $private; - $this->public = $public; - } - - /** - * Retrieve the private key - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function getPrivate(): string - { - return $this->private; - } - - /** - * Retrieve the public key - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function getPublic(): string - { - return $this->public; - } - - /** - * Retrieve the key type - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function getType(): string - { - return $this->type; - } -} diff --git a/libraries/vendor/joomla/data/LICENSE b/libraries/vendor/joomla/data/LICENSE deleted file mode 100644 index df50810b85774..0000000000000 --- a/libraries/vendor/joomla/data/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/data/src/DataObject.php b/libraries/vendor/joomla/data/src/DataObject.php deleted file mode 100644 index a5d075f3c3daf..0000000000000 --- a/libraries/vendor/joomla/data/src/DataObject.php +++ /dev/null @@ -1,330 +0,0 @@ -bind($properties); - } - } - - /** - * The magic get method is used to get a data property. - * - * This method is a public proxy for the protected getProperty method. - * - * Note: Magic __get does not allow recursive calls. This can be tricky because the error generated by recursing into - * __get is "Undefined property: {CLASS}::{PROPERTY}" which is misleading. This is relevant for this class because - * requesting a non-visible property can trigger a call to a sub-function. If that references the property directly in - * the object, it will cause a recursion into __get. - * - * @param string $property The name of the data property. - * - * @return mixed The value of the data property, or null if the data property does not exist. - * - * @see DataObject::getProperty() - * @since 1.0 - */ - public function __get($property) - { - return $this->getProperty($property); - } - - /** - * The magic isset method is used to check the state of an object property. - * - * @param string $property The name of the data property. - * - * @return boolean True if set, otherwise false is returned. - * - * @since 1.0 - */ - public function __isset($property) - { - return isset($this->properties[$property]); - } - - /** - * The magic set method is used to set a data property. - * - * This is a public proxy for the protected setProperty method. - * - * @param string $property The name of the data property. - * @param mixed $value The value to give the data property. - * - * @return void - * - * @see DataObject::setProperty() - * @since 1.0 - */ - public function __set($property, $value) - { - $this->setProperty($property, $value); - } - - /** - * The magic unset method is used to unset a data property. - * - * @param string $property The name of the data property. - * - * @return void - * - * @since 1.0 - */ - public function __unset($property) - { - unset($this->properties[$property]); - } - - /** - * Binds an array or object to this object. - * - * @param mixed $properties An associative array of properties or an object. - * @param boolean $updateNulls True to bind null values, false to ignore null values. - * - * @return DataObject Returns itself to allow chaining. - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - public function bind($properties, $updateNulls = true) - { - // Check the properties data type. - if (!is_array($properties) && !is_object($properties)) - { - throw new \InvalidArgumentException(sprintf('%s(%s)', __METHOD__, gettype($properties))); - } - - // Check if the object is traversable. - if ($properties instanceof \Traversable) - { - // Convert iterator to array. - $properties = iterator_to_array($properties); - } - elseif (is_object($properties)) - // Check if the object needs to be converted to an array. - { - // Convert properties to an array. - $properties = (array) $properties; - } - - // Bind the properties. - foreach ($properties as $property => $value) - { - // Check if the value is null and should be bound. - if ($value === null && !$updateNulls) - { - continue; - } - - // Set the property. - $this->setProperty($property, $value); - } - - return $this; - } - - /** - * Dumps the data properties into a stdClass object, recursively if appropriate. - * - * @param integer $depth The maximum depth of recursion (default = 3). - * For example, a depth of 0 will return a stdClass with all the properties in native - * form. A depth of 1 will recurse into the first level of properties only. - * @param \SplObjectStorage $dumped An array of already serialized objects that is used to avoid infinite loops. - * - * @return \stdClass The data properties as a simple PHP stdClass object. - * - * @since 1.0 - */ - public function dump($depth = 3, \SplObjectStorage $dumped = null) - { - // Check if we should initialise the recursion tracker. - if ($dumped === null) - { - $dumped = new \SplObjectStorage; - } - - // Add this object to the dumped stack. - $dumped->attach($this); - - // Setup a container. - $dump = new \stdClass; - - // Dump all object properties. - foreach (array_keys($this->properties) as $property) - { - // Get the property. - $dump->$property = $this->dumpProperty($property, $depth, $dumped); - } - - return $dump; - } - - /** - * Gets this object represented as an ArrayIterator. - * - * This allows the data properties to be access via a foreach statement. - * - * @return \ArrayIterator This object represented as an ArrayIterator. - * - * @see IteratorAggregate::getIterator() - * @since 1.0 - */ - public function getIterator() - { - return new \ArrayIterator($this->dump(0)); - } - - /** - * Gets the data properties in a form that can be serialised to JSON format. - * - * @return string An object that can be serialised by json_encode(). - * - * @since 1.0 - */ - public function jsonSerialize() - { - return $this->dump(); - } - - /** - * Dumps a data property. - * - * If recursion is set, this method will dump any object implementing Data\Dumpable (like Data\Object and Data\Set); it will - * convert a Date object to a string; and it will convert a Registry to an object. - * - * @param string $property The name of the data property. - * @param integer $depth The current depth of recursion (a value of 0 will ignore recursion). - * @param \SplObjectStorage $dumped An array of already serialized objects that is used to avoid infinite loops. - * - * @return mixed The value of the dumped property. - * - * @since 1.0 - */ - protected function dumpProperty($property, $depth, \SplObjectStorage $dumped) - { - $value = $this->getProperty($property); - - if ($depth > 0) - { - // Check if the object is also a dumpable object. - if ($value instanceof DumpableInterface) - { - // Do not dump the property if it has already been dumped. - if (!$dumped->contains($value)) - { - $value = $value->dump($depth - 1, $dumped); - } - } - - // Check if the object is a date. - if ($value instanceof \DateTimeInterface) - { - $value = $value->format('Y-m-d H:i:s'); - } - elseif ($value instanceof Registry) - // Check if the object is a registry. - { - $value = $value->toObject(); - } - } - - return $value; - } - - /** - * Gets a data property. - * - * @param string $property The name of the data property. - * - * @return mixed The value of the data property. - * - * @see DataObject::__get() - * @since 1.0 - */ - protected function getProperty($property) - { - // Get the raw value. - $value = array_key_exists($property, $this->properties) ? $this->properties[$property] : null; - - return $value; - } - - /** - * Sets a data property. - * - * If the name of the property starts with a null byte, this method will return null. - * - * @param string $property The name of the data property. - * @param mixed $value The value to give the data property. - * - * @return mixed The value of the data property. - * - * @see DataObject::__set() - * @since 1.0 - */ - protected function setProperty($property, $value) - { - /* - * Check if the property starts with a null byte. If so, discard it because a later attempt to try to access it - * can cause a fatal error. See http://us3.php.net/manual/en/language.types.array.php#language.types.array.casting - */ - if (strpos($property, "\0") === 0) - { - return null; - } - - // Set the value. - $this->properties[$property] = $value; - - return $value; - } - - /** - * Count the number of data properties. - * - * @return integer The number of data properties. - * - * @since 1.0 - */ - public function count() - { - return count($this->properties); - } -} diff --git a/libraries/vendor/joomla/data/src/DataSet.php b/libraries/vendor/joomla/data/src/DataSet.php deleted file mode 100644 index 03e67f597499b..0000000000000 --- a/libraries/vendor/joomla/data/src/DataSet.php +++ /dev/null @@ -1,604 +0,0 @@ -initialise($objects); - } - - /** - * The magic call method is used to call object methods using the iterator. - * - * Example: $array = $objectList->foo('bar'); - * - * The object list will iterate over its objects and see if each object has a callable 'foo' method. - * If so, it will pass the argument list and assemble any return values. If an object does not have - * a callable method no return value is recorded. - * The keys of the objects and the result array are maintained. - * - * @param string $method The name of the method called. - * @param array $arguments The arguments of the method called. - * - * @return array An array of values returned by the methods called on the objects in the data set. - * - * @since 1.0 - */ - public function __call($method, $arguments = []) - { - $return = array(); - - // Iterate through the objects. - foreach ($this->objects as $key => $object) - { - // Create the object callback. - $callback = [$object, $method]; - - // Check if the callback is callable. - if (is_callable($callback)) - { - // Call the method for the object. - $return[$key] = call_user_func_array($callback, $arguments); - } - } - - return $return; - } - - /** - * The magic get method is used to get a list of properties from the objects in the data set. - * - * Example: $array = $dataSet->foo; - * - * This will return a column of the values of the 'foo' property in all the objects - * (or values determined by custom property setters in the individual Data\Object's). - * The result array will contain an entry for each object in the list (compared to __call which may not). - * The keys of the objects and the result array are maintained. - * - * @param string $property The name of the data property. - * - * @return array An associative array of the values. - * - * @since 1.0 - */ - public function __get($property) - { - $return = []; - - // Iterate through the objects. - foreach ($this->objects as $key => $object) - { - // Get the property. - $return[$key] = $object->$property; - } - - return $return; - } - - /** - * The magic isset method is used to check the state of an object property using the iterator. - * - * Example: $array = isset($objectList->foo); - * - * @param string $property The name of the property. - * - * @return boolean True if the property is set in any of the objects in the data set. - * - * @since 1.0 - */ - public function __isset($property) - { - $return = []; - - // Iterate through the objects. - foreach ($this->objects as $object) - { - // Check the property. - $return[] = isset($object->$property); - } - - return in_array(true, $return, true) ? true : false; - } - - /** - * The magic set method is used to set an object property using the iterator. - * - * Example: $objectList->foo = 'bar'; - * - * This will set the 'foo' property to 'bar' in all of the objects - * (or a value determined by custom property setters in the Data\Object). - * - * @param string $property The name of the property. - * @param mixed $value The value to give the data property. - * - * @return void - * - * @since 1.0 - */ - public function __set($property, $value) - { - // Iterate through the objects. - foreach ($this->objects as $object) - { - // Set the property. - $object->$property = $value; - } - } - - /** - * The magic unset method is used to unset an object property using the iterator. - * - * Example: unset($objectList->foo); - * - * This will unset all of the 'foo' properties in the list of Data\Object's. - * - * @param string $property The name of the property. - * - * @return void - * - * @since 1.0 - */ - public function __unset($property) - { - // Iterate through the objects. - foreach ($this->objects as $object) - { - unset($object->$property); - } - } - - /** - * Gets an array of keys, existing in objects - * - * @param string $type Selection type 'all' or 'common' - * - * @return array Array of keys - * - * @since 1.2.0 - * @throws \InvalidArgumentException - */ - public function getObjectsKeys($type = 'all') - { - $keys = null; - - if ($type == 'all') - { - $function = 'array_merge'; - } - elseif ($type == 'common') - { - $function = 'array_intersect_key'; - } - else - { - throw new \InvalidArgumentException("Unknown selection type: $type"); - } - - foreach ($this->objects as $object) - { - $objectVars = json_decode(json_encode($object), true); - - $keys = (is_null($keys)) ? $objectVars : $function($keys, $objectVars); - } - - return array_keys($keys); - } - - /** - * Gets all objects as an array - * - * @param boolean $associative Option to set return mode: associative or numeric array. - * @param string $k Unlimited optional property names to extract from objects. - * - * @return array Returns an array according to defined options. - * - * @since 1.2.0 - */ - public function toArray($associative = true, $k = null) - { - $keys = func_get_args(); - $associative = array_shift($keys); - - if (empty($keys)) - { - $keys = $this->getObjectsKeys(); - } - - $return = []; - - $i = 0; - - foreach ($this->objects as $key => $object) - { - $arrayItem = []; - - $key = ($associative) ? $key : $i++; - - $j = 0; - - foreach ($keys as $property) - { - $propertyKey = ($associative) ? $property : $j++; - $arrayItem[$propertyKey] = (isset($object->$property)) ? $object->$property : null; - } - - $return[$key] = $arrayItem; - } - - return $return; - } - - /** - * Gets the number of data objects in the set. - * - * @return integer The number of objects. - * - * @since 1.0 - */ - public function count() - { - return count($this->objects); - } - - /** - * Clears the objects in the data set. - * - * @return DataSet Returns itself to allow chaining. - * - * @since 1.0 - */ - public function clear() - { - $this->objects = []; - $this->rewind(); - - return $this; - } - - /** - * Get the current data object in the set. - * - * @return DataObject The current object, or false if the array is empty or the pointer is beyond the end of the elements. - * - * @since 1.0 - */ - public function current() - { - return is_scalar($this->current) ? $this->objects[$this->current] : false; - } - - /** - * Dumps the data object in the set, recursively if appropriate. - * - * @param integer $depth The maximum depth of recursion (default = 3). - * For example, a depth of 0 will return a stdClass with all the properties in native - * form. A depth of 1 will recurse into the first level of properties only. - * @param \SplObjectStorage $dumped An array of already serialized objects that is used to avoid infinite loops. - * - * @return array An associative array of the data objects in the set, dumped as a simple PHP stdClass object. - * - * @see DataObject::dump() - * @since 1.0 - */ - public function dump($depth = 3, \SplObjectStorage $dumped = null) - { - // Check if we should initialise the recursion tracker. - if ($dumped === null) - { - $dumped = new \SplObjectStorage; - } - - // Add this object to the dumped stack. - $dumped->attach($this); - - $objects = []; - - // Make sure that we have not reached our maximum depth. - if ($depth > 0) - { - // Handle JSON serialization recursively. - foreach ($this->objects as $key => $object) - { - $objects[$key] = $object->dump($depth, $dumped); - } - } - - return $objects; - } - - /** - * Gets the data set in a form that can be serialised to JSON format. - * - * Note that this method will not return an associative array, otherwise it would be encoded into an object. - * JSON decoders do not consistently maintain the order of associative keys, whereas they do maintain the order of arrays. - * - * @return array An array that can be serialised by json_encode(). - * - * @since 1.0 - */ - public function jsonSerialize() - { - $return = []; - - // Iterate through the objects. - foreach ($this->objects as $object) - { - // Call the method for the object. - $return[] = $object; - } - - return $return; - } - - /** - * Gets the key of the current object in the iterator. - * - * @return scalar The object key on success; null on failure. - * - * @since 1.0 - */ - public function key() - { - return $this->current; - } - - /** - * Gets the array of keys for all the objects in the iterator (emulates array_keys). - * - * @return array The array of keys - * - * @since 1.0 - */ - public function keys() - { - return array_keys($this->objects); - } - - /** - * Applies a function to every object in the set (emulates array_walk). - * - * @param callable $funcname Callback function. - * - * @return boolean - * - * @since 1.2.0 - * @throws \InvalidArgumentException - */ - public function walk(callable $funcname) - { - foreach ($this->objects as $key => $object) - { - $funcname($object, $key); - } - - return true; - } - - /** - * Advances the iterator to the next object in the iterator. - * - * @return void - * - * @since 1.0 - */ - public function next() - { - // Get the object offsets. - $keys = $this->keys(); - - // Check if _current has been set to false but offsetUnset. - if ($this->current === false && isset($keys[0])) - { - // This is a special case where offsetUnset was used in a foreach loop and the first element was unset. - $this->current = $keys[0]; - } - else - { - // Get the current key. - $position = array_search($this->current, $keys); - - // Check if there is an object after the current object. - if ($position !== false && isset($keys[$position + 1])) - { - // Get the next id. - $this->current = $keys[$position + 1]; - } - else - { - // That was the last object or the internal properties have become corrupted. - $this->current = null; - } - } - } - - /** - * Checks whether an offset exists in the iterator. - * - * @param mixed $offset The object offset. - * - * @return boolean True if the object exists, false otherwise. - * - * @since 1.0 - */ - public function offsetExists($offset) - { - return isset($this->objects[$offset]); - } - - /** - * Gets an offset in the iterator. - * - * @param mixed $offset The object offset. - * - * @return DataObject The object if it exists, null otherwise. - * - * @since 1.0 - */ - public function offsetGet($offset) - { - return isset($this->objects[$offset]) ? $this->objects[$offset] : null; - } - - /** - * Sets an offset in the iterator. - * - * @param mixed $offset The object offset. - * @param DataObject $object The object object. - * - * @return void - * - * @since 1.0 - * @throws \InvalidArgumentException if an object is not an instance of Data\Object. - */ - public function offsetSet($offset, $object) - { - if (!($object instanceof DataObject)) - { - throw new \InvalidArgumentException(sprintf('%s("%s", *%s*)', __METHOD__, $offset, gettype($object))); - } - - // Set the offset. - $this->objects[$offset] = $object; - } - - /** - * Unsets an offset in the iterator. - * - * @param mixed $offset The object offset. - * - * @return void - * - * @since 1.0 - */ - public function offsetUnset($offset) - { - if (!$this->offsetExists($offset)) - { - // Do nothing if the offset does not exist. - return; - } - - // Check for special handling of unsetting the current position. - if ($offset == $this->current) - { - // Get the current position. - $keys = $this->keys(); - $position = array_search($this->current, $keys); - - // Check if there is an object before the current object. - if ($position > 0) - { - // Move the current position back one. - $this->current = $keys[$position - 1]; - } - else - { - // We are at the start of the keys AND let's assume we are in a foreach loop and `next` is going to be called. - $this->current = false; - } - } - - unset($this->objects[$offset]); - } - - /** - * Rewinds the iterator to the first object. - * - * @return void - * - * @since 1.0 - */ - public function rewind() - { - // Set the current position to the first object. - if (empty($this->objects)) - { - $this->current = false; - } - else - { - $keys = $this->keys(); - $this->current = array_shift($keys); - } - } - - /** - * Validates the iterator. - * - * @return boolean True if valid, false otherwise. - * - * @since 1.0 - */ - public function valid() - { - // Check the current position. - if (!is_scalar($this->current) || !isset($this->objects[$this->current])) - { - return false; - } - - return true; - } - - /** - * Initialises the list with an array of objects. - * - * @param array $input An array of objects. - * - * @return void - * - * @since 1.0 - * @throws \InvalidArgumentException if an object is not an instance of Data\DataObject. - */ - private function initialise(array $input = []) - { - foreach ($input as $key => $object) - { - if (!is_null($object)) - { - $this->offsetSet($key, $object); - } - } - - $this->rewind(); - } -} diff --git a/libraries/vendor/joomla/data/src/DumpableInterface.php b/libraries/vendor/joomla/data/src/DumpableInterface.php deleted file mode 100644 index c9d3624b08d3e..0000000000000 --- a/libraries/vendor/joomla/data/src/DumpableInterface.php +++ /dev/null @@ -1,31 +0,0 @@ - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/database/src/DatabaseDriver.php b/libraries/vendor/joomla/database/src/DatabaseDriver.php deleted file mode 100644 index a490c401931c7..0000000000000 --- a/libraries/vendor/joomla/database/src/DatabaseDriver.php +++ /dev/null @@ -1,1901 +0,0 @@ -isDir()) - { - continue; - } - - $baseName = $file->getBasename(); - - // Derive the class name from the type. - /** @var $class DatabaseDriver */ - $class = __NAMESPACE__ . '\\' . ucfirst(strtolower($baseName)) . '\\' . ucfirst(strtolower($baseName)) . 'Driver'; - - // If the class doesn't exist, or if it's not supported on this system, move on to the next type. - if (!class_exists($class) || !$class::isSupported()) - { - continue; - } - - // Everything looks good, add it to the list. - self::$connectors[] = $baseName; - } - } - - return self::$connectors; - } - - /** - * Method to return a DatabaseDriver instance based on the given options. - * - * There are three global options and then the rest are specific to the database driver. - * - * - The 'driver' option defines which DatabaseDriver class is used for the connection -- the default is 'mysqli'. - * - The 'database' option determines which database is to be used for the connection. - * - The 'select' option determines whether the connector should automatically select the chosen database. - * - * Instances are unique to the given options and new objects are only created when a unique options array is - * passed into the method. This ensures that we don't end up with unnecessary database connection resources. - * - * @param array $options Parameters to be passed to the database driver. - * - * @return DatabaseDriver - * - * @since 1.0 - * @throws \RuntimeException - * @deprecated 3.0 Use DatabaseFactory::getDriver() instead - */ - public static function getInstance(array $options = []) - { - @trigger_error( - sprintf( - '%1$s() is deprecated and will be removed in 3.0, use %2$s::getDriver() instead.', - __METHOD__, - DatabaseFactory::class - ), - E_USER_DEPRECATED - ); - - // Sanitize the database connector options. - $options['driver'] = isset($options['driver']) ? preg_replace('/[^A-Z0-9_\.-]/i', '', $options['driver']) : 'mysqli'; - $options['database'] = isset($options['database']) ? $options['database'] : null; - $options['select'] = isset($options['select']) ? $options['select'] : true; - $options['factory'] = isset($options['factory']) ? $options['factory'] : new DatabaseFactory; - $options['monitor'] = isset($options['monitor']) ? $options['monitor'] : null; - - // Get the options signature for the database connector. - $signature = md5(serialize($options)); - - // If we already have a database connector instance for these options then just use that. - if (empty(self::$instances[$signature])) - { - // Set the new connector to the global instances based on signature. - self::$instances[$signature] = $options['factory']->getDriver($options['driver'], $options); - } - - return self::$instances[$signature]; - } - - /** - * Splits a string of multiple queries into an array of individual queries. - * - * @param string $sql Input SQL string with which to split into individual queries. - * - * @return array - * - * @since 1.0 - */ - public static function splitSql($sql) - { - $start = 0; - $open = false; - $comment = false; - $endString = ''; - $end = strlen($sql); - $queries = []; - $query = ''; - - for ($i = 0; $i < $end; $i++) - { - $current = substr($sql, $i, 1); - $current2 = substr($sql, $i, 2); - $current3 = substr($sql, $i, 3); - $lenEndString = strlen($endString); - $testEnd = substr($sql, $i, $lenEndString); - - if ($current === '"' || $current === "'" || $current2 === '--' - || ($current2 === '/*' && $current3 !== '/*!' && $current3 !== '/*+') - || ($current === '#' && $current3 !== '#__') - || ($comment && $testEnd === $endString)) - { - // Check if quoted with previous backslash - $n = 2; - - while (substr($sql, $i - $n + 1, 1) === '\\' && $n < $i) - { - $n++; - } - - // Not quoted - if ($n % 2 === 0) - { - if ($open) - { - if ($testEnd === $endString) - { - if ($comment) - { - $comment = false; - - if ($lenEndString > 1) - { - $i += ($lenEndString - 1); - $current = substr($sql, $i, 1); - } - - $start = $i + 1; - } - - $open = false; - $endString = ''; - } - } - else - { - $open = true; - - if ($current2 === '--') - { - $endString = "\n"; - $comment = true; - } - elseif ($current2 === '/*') - { - $endString = '*/'; - $comment = true; - } - elseif ($current === '#') - { - $endString = "\n"; - $comment = true; - } - else - { - $endString = $current; - } - - if ($comment && $start < $i) - { - $query .= substr($sql, $start, $i - $start); - } - } - } - } - - if ($comment) - { - $start = $i + 1; - } - - if (($current === ';' && !$open) || $i === $end - 1) - { - if ($start <= $i) - { - $query .= substr($sql, $start, $i - $start + 1); - } - - $query = trim($query); - - if ($query) - { - if (($i === $end - 1) && ($current !== ';')) - { - $query .= ';'; - } - - $queries[] = $query; - } - - $query = ''; - $start = $i + 1; - } - - $endComment = false; - } - - return $queries; - } - - /** - * Magic method to access properties of the database driver. - * - * @param string $name The name of the property. - * - * @return mixed A value if the property name is valid, null otherwise. - * - * @since 1.4.0 - * @deprecated 3.0 This is a B/C proxy since $this->name was previously public - */ - public function __get($name) - { - switch ($name) - { - case 'name': - @trigger_error( - 'Accessing the name property of the database driver is deprecated, use the getName() method instead.', - E_USER_DEPRECATED - ); - - return $this->getName(); - - default: - $trace = debug_backtrace(); - trigger_error( - sprintf( - 'Undefined property via __get(): %1$s in %2$s on line %3$s', - $name, - $trace[0]['file'], - $trace[0]['line'] - ), - E_USER_NOTICE - ); - } - } - - /** - * Constructor. - * - * @param array $options List of options used to configure the connection - * - * @since 1.0 - */ - public function __construct(array $options) - { - // Initialise object variables. - $this->database = isset($options['database']) ? $options['database'] : ''; - $this->tablePrefix = isset($options['prefix']) ? $options['prefix'] : ''; - $this->count = 0; - $this->errorNum = 0; - - // Set class options. - $this->options = $options; - - // Register the DatabaseFactory - $this->factory = isset($options['factory']) ? $options['factory'] : new DatabaseFactory; - - // Register the query monitor if available - $this->monitor = isset($options['monitor']) ? $options['monitor'] : null; - } - - /** - * Destructor. - * - * @since __DEPLOY_VERSION__ - */ - public function __destruct() - { - $this->disconnect(); - } - - /** - * Alter database's character set. - * - * @param string $dbName The database name that will be altered - * - * @return boolean|resource - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function alterDbCharacterSet($dbName) - { - if (is_null($dbName)) - { - throw new \RuntimeException('Database name must not be null.'); - } - - $this->setQuery($this->getAlterDbCharacterSet($dbName)); - - return $this->execute(); - } - - /** - * Create a new database using information from $options object. - * - * @param \stdClass $options Object used to pass user and database name to database driver. This object must have "db_name" and "db_user" set. - * @param boolean $utf True if the database supports the UTF-8 character set. - * - * @return boolean|resource - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function createDatabase($options, $utf = true) - { - if (is_null($options)) - { - throw new \RuntimeException('$options object must not be null.'); - } - elseif (empty($options->db_name)) - { - throw new \RuntimeException('$options object must have db_name set.'); - } - elseif (empty($options->db_user)) - { - throw new \RuntimeException('$options object must have db_user set.'); - } - - $this->setQuery($this->getCreateDatabaseQuery($options, $utf)); - - return $this->execute(); - } - - /** - * Disconnects the database. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function disconnect() - { - $this->freeResult(); - $this->connection = null; - - $this->dispatchEvent(new ConnectionEvent(DatabaseEvents::POST_DISCONNECT, $this)); - } - - /** - * Dispatch an event. - * - * @param EventInterface $event The event to dispatch - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - protected function dispatchEvent(EventInterface $event) - { - try - { - $this->getDispatcher()->dispatch($event->getName(), $event); - } - catch (\UnexpectedValueException $exception) - { - // Don't error if a dispatcher hasn't been set - } - } - - /** - * Execute the SQL statement. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function execute() - { - $this->connect(); - - // Take a local copy so that we don't modify the original query and cause issues later - $sql = $this->replacePrefix((string) $this->sql); - - // Increment the query counter. - $this->count++; - - // If there is a monitor registered, let it know we are starting this query - if ($this->monitor) - { - $this->monitor->startQuery($sql); - } - - // Execute the query. - $this->executed = false; - - // Bind the variables - $bounded =& $this->sql->getBounded(); - - foreach ($bounded as $key => $obj) - { - $this->statement->bindParam($key, $obj->value, $obj->dataType); - } - - try - { - $this->executed = $this->statement->execute(); - - // If there is a monitor registered, let it know we have finished this query - if ($this->monitor) - { - $this->monitor->stopQuery(); - } - - return true; - } - catch (ExecutionFailureException $exception) - { - // If there is a monitor registered, let it know we have finished this query - if ($this->monitor) - { - $this->monitor->stopQuery(); - } - - // Check if the server was disconnected. - if (!$this->connected()) - { - try - { - // Attempt to reconnect. - $this->connection = null; - $this->connect(); - } - catch (ConnectionFailureException $e) - { - // If connect fails, ignore that exception and throw the normal exception. - throw $exception; - } - - // Since we were able to reconnect, run the query again. - return $this->execute(); - } - - // Throw the normal query exception. - throw $exception; - } - } - - /** - * Method to fetch a row from the result set cursor as an array. - * - * @return mixed Either the next row from the result set or false if there are no more rows. - * - * @since 1.0 - */ - protected function fetchArray() - { - if ($this->statement) - { - return $this->statement->fetch(FetchMode::NUMERIC); - } - } - - /** - * Method to fetch a row from the result set cursor as an associative array. - * - * @return mixed Either the next row from the result set or false if there are no more rows. - * - * @since 1.0 - */ - protected function fetchAssoc() - { - if ($this->statement) - { - return $this->statement->fetch(FetchMode::ASSOCIATIVE); - } - } - - /** - * Method to fetch a row from the result set cursor as an object. - * - * @param string $class The class name to use for the returned row object. - * - * @return mixed Either the next row from the result set or false if there are no more rows. - * - * @since 1.0 - */ - protected function fetchObject($class = '\\stdClass') - { - if ($this->statement) - { - return $this->statement->fetchObject($class); - } - } - - /** - * Method to free up the memory used for the result set. - * - * @return void - * - * @since 1.0 - */ - protected function freeResult() - { - $this->executed = false; - - if ($this->statement) - { - $this->statement->closeCursor(); - $this->statement = null; - } - } - - /** - * Get the number of affected rows for the previous executed SQL statement. - * - * @return integer The number of affected rows in the previous operation - * - * @since __DEPLOY_VERSION__ - */ - public function getAffectedRows() - { - $this->connect(); - - if ($this->statement) - { - return $this->statement->rowCount(); - } - - return 0; - } - - /** - * Method that provides access to the underlying database connection. - * - * @return resource The underlying database connection resource. - * - * @since 1.0 - */ - public function getConnection() - { - return $this->connection; - } - - /** - * Get the total number of SQL statements executed by the database driver. - * - * @return integer - * - * @since 1.0 - */ - public function getCount() - { - return $this->count; - } - - /** - * Return the query string to alter the database character set. - * - * @param string $dbName The database name - * - * @return string The query that alter the database query string - * - * @since __DEPLOY_VERSION__ - */ - protected function getAlterDbCharacterSet($dbName) - { - return 'ALTER DATABASE ' . $this->quoteName($dbName) . ' CHARACTER SET ' . $this->quote('UTF8'); - } - - /** - * Return the query string to create new Database. - * - * @param stdClass $options Object used to pass user and database name to database driver. This object must have "db_name" and "db_user" set. - * @param boolean $utf True if the database supports the UTF-8 character set. - * - * @return string The query that creates database - * - * @since __DEPLOY_VERSION__ - */ - protected function getCreateDatabaseQuery($options, $utf) - { - return 'CREATE DATABASE ' . $this->quoteName($options->db_name); - } - - /** - * Gets the name of the database used by this conneciton. - * - * @return string - * - * @since 1.0 - */ - protected function getDatabase() - { - return $this->database; - } - - /** - * Returns a PHP date() function compliant date format for the database driver. - * - * @return string - * - * @since 1.0 - */ - public function getDateFormat() - { - return 'Y-m-d H:i:s'; - } - - /** - * Get the minimum supported database version. - * - * @return string - * - * @since 1.0 - */ - public function getMinimum() - { - return static::$dbMinimum; - } - - /** - * Get the name of the database driver. - * - * If $this->name is not set it will try guessing the driver name from the class name. - * - * @return string - * - * @since 1.4.0 - */ - public function getName() - { - if (empty($this->name)) - { - $reflect = new \ReflectionClass($this); - - $this->name = strtolower(str_replace('Driver', '', $reflect->getShortName())); - } - - return $this->name; - } - - /** - * Get the number of returned rows for the previous executed SQL statement. - * - * @return integer The number of returned rows. - * - * @since __DEPLOY_VERSION__ - */ - public function getNumRows() - { - $this->connect(); - - if ($this->statement) - { - return $this->statement->rowCount(); - } - - return 0; - } - - /** - * Get the server family type. - * - * If $this->serverType is not set it will attempt guessing the server family type from the driver name. If this is not possible the driver - * name will be returned instead. - * - * @return string - * - * @since 1.4.0 - */ - public function getServerType() - { - if (empty($this->serverType)) - { - $name = $this->getName(); - - if (stristr($name, 'mysql') !== false) - { - $this->serverType = 'mysql'; - } - elseif (stristr($name, 'postgre') !== false) - { - $this->serverType = 'postgresql'; - } - elseif (stristr($name, 'pgsql') !== false) - { - $this->serverType = 'postgresql'; - } - elseif (stristr($name, 'oracle') !== false) - { - $this->serverType = 'oracle'; - } - elseif (stristr($name, 'sqlite') !== false) - { - $this->serverType = 'sqlite'; - } - elseif (stristr($name, 'sqlsrv') !== false) - { - $this->serverType = 'mssql'; - } - elseif (stristr($name, 'sqlazure') !== false) - { - $this->serverType = 'mssql'; - } - elseif (stristr($name, 'mssql') !== false) - { - $this->serverType = 'mssql'; - } - else - { - $this->serverType = $name; - } - } - - return $this->serverType; - } - - /** - * Get the null or zero representation of a timestamp for the database driver. - * - * @return string - * - * @since 1.0 - */ - public function getNullDate() - { - return $this->nullDate; - } - - /** - * Get the common table prefix for the database driver. - * - * @return string The common database table prefix. - * - * @since 1.0 - */ - public function getPrefix() - { - return $this->tablePrefix; - } - - /** - * Gets an exporter class object. - * - * @return DatabaseExporter An exporter object. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getExporter() - { - return $this->factory->getExporter($this->name, $this); - } - - /** - * Gets an importer class object. - * - * @return DatabaseImporter - * - * @since 1.0 - */ - public function getImporter() - { - return $this->factory->getImporter($this->name, $this); - } - - /** - * Get the current query object or a new DatabaseQuery object. - * - * @param boolean $new False to return the current query object, True to return a new DatabaseQuery object. - * - * @return DatabaseQuery - * - * @since 1.0 - */ - public function getQuery($new = false) - { - if ($new) - { - return $this->factory->getQuery($this->name, $this); - } - - return $this->sql; - } - - /** - * Get a new iterator on the current query. - * - * @param string $column An option column to use as the iterator key. - * @param string $class The class of object that is returned. - * - * @return DatabaseIterator - * - * @since 1.0 - */ - public function getIterator($column = null, $class = '\\stdClass') - { - if (!$this->executed) - { - $this->execute(); - } - - return $this->factory->getIterator($this->name, $this->statement, $column, $class); - } - - /** - * Shows the table CREATE statement that creates the given tables. - * - * @param mixed $tables A table name or a list of table names. - * - * @return array A list of the create SQL for the tables. - * - * @since 1.0 - * @throws \RuntimeException - */ - abstract public function getTableCreate($tables); - - /** - * Determine whether or not the database engine supports UTF-8 character encoding. - * - * @return boolean True if the database engine supports UTF-8 character encoding. - * - * @since 1.0 - */ - public function hasUtfSupport() - { - return $this->utf; - } - - /** - * Inserts a row into a table based on an object's properties. - * - * @param string $table The name of the database table to insert into. - * @param object $object A reference to an object whose public properties match the table fields. - * @param string $key The name of the primary key. If provided the object property is updated. - * - * @return boolean - * - * @since 1.0 - * @throws \RuntimeException - */ - public function insertObject($table, &$object, $key = null) - { - $fields = []; - $values = []; - $tableColumns = $this->getTableColumns($table); - - // Iterate over the object variables to build the query fields and values. - foreach (get_object_vars($object) as $k => $v) - { - // Skip columns that don't exist in the table. - if (!array_key_exists($k, $tableColumns)) - { - continue; - } - - // Only process non-null scalars. - if (is_array($v) || is_object($v) || $v === null) - { - continue; - } - - // Ignore any internal fields. - if ($k[0] === '_') - { - continue; - } - - // Prepare and sanitize the fields and values for the database query. - $fields[] = $this->quoteName($k); - $values[] = $this->quote($v); - } - - // Create the base insert statement. - $query = $this->getQuery(true) - ->insert($this->quoteName($table)) - ->columns($fields) - ->values(implode(',', $values)); - - // Set the query and execute the insert. - $this->setQuery($query)->execute(); - - // Update the primary key if it exists. - $id = $this->insertid(); - - if ($key && $id && is_string($key)) - { - $object->$key = $id; - } - - return true; - } - - /** - * Method to check whether the installed database version is supported by the database driver - * - * @return boolean True if the database version is supported - * - * @since 1.0 - */ - public function isMinimumVersion() - { - return version_compare($this->getVersion(), static::$dbMinimum) >= 0; - } - - /** - * Method to get the first row of the result set from the database query as an associative array of ['field_name' => 'row_value']. - * - * @return mixed The return value or null if the query failed. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function loadAssoc() - { - $this->connect(); - - $ret = null; - - // Execute the query and get the result set cursor. - $this->execute(); - - // Get the first row from the result set as an associative array. - $array = $this->fetchAssoc(); - - if ($array) - { - $ret = $array; - } - - // Free up system resources and return. - $this->freeResult(); - - return $ret; - } - - /** - * Method to get an array of the result set rows from the database query where each row is an associative array - * of ['field_name' => 'row_value']. The array of rows can optionally be keyed by a field name, but defaults to - * a sequential numeric array. - * - * NOTE: Chosing to key the result array by a non-unique field name can result in unwanted - * behavior and should be avoided. - * - * @param string $key The name of a field on which to key the result array. - * @param string $column An optional column name. Instead of the whole row, only this column value will be in - * the result array. - * - * @return mixed The return value or null if the query failed. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function loadAssocList($key = null, $column = null) - { - $this->connect(); - - $array = []; - - // Execute the query and get the result set cursor. - $this->execute(); - - // Get all of the rows from the result set. - while ($row = $this->fetchAssoc()) - { - $value = $column ? (isset($row[$column]) ? $row[$column] : $row) : $row; - - if ($key) - { - $array[$row[$key]] = $value; - } - else - { - $array[] = $value; - } - } - - // Free up system resources and return. - $this->freeResult(); - - return $array; - } - - /** - * Method to get an array of values from the $offset field in each row of the result set from the database query. - * - * @param integer $offset The row offset to use to build the result array. - * - * @return mixed The return value or null if the query failed. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function loadColumn($offset = 0) - { - $this->connect(); - - $array = []; - - // Execute the query and get the result set cursor. - $this->execute(); - - // Get all of the rows from the result set as arrays. - while ($row = $this->fetchArray()) - { - $array[] = $row[$offset]; - } - - // Free up system resources and return. - $this->freeResult(); - - return $array; - } - - /** - * Method to get the first row of the result set from the database query as an object. - * - * @param string $class The class name to use for the returned row object. - * - * @return mixed The return value or null if the query failed. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function loadObject($class = 'stdClass') - { - $this->connect(); - - $ret = null; - - // Execute the query and get the result set cursor. - $this->execute(); - - // Get the first row from the result set as an object of type $class. - $object = $this->fetchObject($class); - - if ($object) - { - $ret = $object; - } - - // Free up system resources and return. - $this->freeResult(); - - return $ret; - } - - /** - * Method to get an array of the result set rows from the database query where each row is an object. The array - * of objects can optionally be keyed by a field name, but defaults to a sequential numeric array. - * - * NOTE: Choosing to key the result array by a non-unique field name can result in unwanted behavior and should be avoided. - * - * @param string $key The name of a field on which to key the result array. - * @param string $class The class name to use for the returned row objects. - * - * @return mixed The return value or null if the query failed. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function loadObjectList($key = '', $class = 'stdClass') - { - $this->connect(); - - $array = []; - - // Execute the query and get the result set cursor. - $this->execute(); - - // Get all of the rows from the result set as objects of type $class. - while ($row = $this->fetchObject($class)) - { - if ($key) - { - $array[$row->$key] = $row; - } - else - { - $array[] = $row; - } - } - - // Free up system resources and return. - $this->freeResult(); - - return $array; - } - - /** - * Method to get the first field of the first row of the result set from the database query. - * - * @return mixed The return value or null if the query failed. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function loadResult() - { - $this->connect(); - - $ret = null; - - // Execute the query and get the result set cursor. - $this->execute(); - - // Get the first row from the result set as an array. - $row = $this->fetchArray(); - - if ($row) - { - $ret = $row[0]; - } - - // Free up system resources and return. - $this->freeResult(); - - return $ret; - } - - /** - * Method to get the first row of the result set from the database query as an array. - * - * Columns are indexed numerically so the first column in the result set would be accessible via $row[0], etc. - * - * @return mixed The return value or null if the query failed. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function loadRow() - { - $this->connect(); - - $ret = null; - - // Execute the query and get the result set cursor. - $this->execute(); - - // Get the first row from the result set as an array. - $row = $this->fetchArray(); - - if ($row) - { - $ret = $row; - } - - // Free up system resources and return. - $this->freeResult(); - - return $ret; - } - - /** - * Method to get an array of the result set rows from the database query where each row is an array. The array - * of objects can optionally be keyed by a field offset, but defaults to a sequential numeric array. - * - * NOTE: Choosing to key the result array by a non-unique field can result in unwanted behavior and should be avoided. - * - * @param string $key The name of a field on which to key the result array. - * - * @return array An array of results. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function loadRowList($key = null) - { - $this->connect(); - - $array = []; - - // Execute the query and get the result set cursor. - $this->execute(); - - // Get all of the rows from the result set as arrays. - while ($row = $this->fetchArray()) - { - if ($key !== null) - { - $array[$row[$key]] = $row; - } - else - { - $array[] = $row; - } - } - - // Free up system resources and return. - $this->freeResult(); - - return $array; - } - - /** - * Prepares a SQL statement for execution - * - * @param string $query The SQL query to be prepared. - * - * @return StatementInterface - * - * @since __DEPLOY_VERSION__ - * @throws PrepareStatementFailureException - */ - abstract protected function prepareStatement(string $query): StatementInterface; - - /** - * Alias for quote method - * - * @param array|string $text A string or an array of strings to quote. - * @param boolean $escape True (default) to escape the string, false to leave it unchanged. - * - * @return string The quoted input string. - * - * @since 1.0 - */ - public function q($text, $escape = true) - { - return $this->quote($text, $escape); - } - - /** - * Quotes and optionally escapes a string to database requirements for use in database queries. - * - * @param array|string $text A string or an array of strings to quote. - * @param boolean $escape True (default) to escape the string, false to leave it unchanged. - * - * @return string The quoted input string. - * - * @since 1.0 - */ - public function quote($text, $escape = true) - { - if (is_array($text)) - { - foreach ($text as $k => $v) - { - $text[$k] = $this->quote($v, $escape); - } - - return $text; - } - - return '\'' . ($escape ? $this->escape($text) : $text) . '\''; - } - - /** - * Alias for quoteName method - * - * @param array|string $name The identifier name to wrap in quotes, or an array of identifier names to wrap in quotes. - * Each type supports dot-notation name. - * @param array|string $as The AS query part associated to $name. It can be string or array, in latter case it has to be - * same length of $name; if is null there will not be any AS part for string or array element. - * - * @return array|string The quote wrapped name, same type of $name. - * - * @since 1.0 - */ - public function qn($name, $as = null) - { - return $this->quoteName($name, $as); - } - - /** - * Wrap an SQL statement identifier name such as column, table or database names in quotes to prevent injection - * risks and reserved word conflicts. - * - * @param array|string $name The identifier name to wrap in quotes, or an array of identifier names to wrap in quotes. - * Each type supports dot-notation name. - * @param array|string $as The AS query part associated to $name. It can be string or array, in latter case it has to be - * same length of $name; if is null there will not be any AS part for string or array element. - * - * @return array|string The quote wrapped name, same type of $name. - * - * @since 1.0 - */ - public function quoteName($name, $as = null) - { - if (is_string($name)) - { - $quotedName = $this->quoteNameStr(explode('.', $name)); - - $quotedAs = ''; - - if (!is_null($as)) - { - $as = (array) $as; - $quotedAs .= ' AS ' . $this->quoteNameStr($as); - } - - return $quotedName . $quotedAs; - } - - $fin = []; - - if (is_null($as)) - { - foreach ($name as $str) - { - $fin[] = $this->quoteName($str); - } - } - elseif (is_array($name) && (count($name) === count($as))) - { - $count = count($name); - - for ($i = 0; $i < $count; $i++) - { - $fin[] = $this->quoteName($name[$i], $as[$i]); - } - } - - return $fin; - } - - /** - * Quote strings coming from quoteName call. - * - * @param array $strArr Array of strings coming from quoteName dot-explosion. - * - * @return string Dot-imploded string of quoted parts. - * - * @since 1.0 - */ - protected function quoteNameStr($strArr) - { - $parts = []; - $q = $this->nameQuote; - - foreach ($strArr as $part) - { - if (is_null($part)) - { - continue; - } - - if (strlen($q) === 1) - { - $parts[] = $q . $part . $q; - } - else - { - $parts[] = $q{0} . $part . $q{1}; - } - } - - return implode('.', $parts); - } - - /** - * This function replaces a string identifier $prefix with the string held is the tablePrefix class variable. - * - * @param string $sql The SQL statement to prepare. - * @param string $prefix The common table prefix. - * - * @return string The processed SQL statement. - * - * @since 1.0 - */ - public function replacePrefix($sql, $prefix = '#__') - { - $escaped = false; - $startPos = 0; - $quoteChar = ''; - $literal = ''; - - $sql = trim($sql); - $n = strlen($sql); - - while ($startPos < $n) - { - $ip = strpos($sql, $prefix, $startPos); - - if ($ip === false) - { - break; - } - - $j = strpos($sql, "'", $startPos); - $k = strpos($sql, '"', $startPos); - - if (($k !== false) && (($k < $j) || ($j === false))) - { - $quoteChar = '"'; - $j = $k; - } - else - { - $quoteChar = "'"; - } - - if ($j === false) - { - $j = $n; - } - - $literal .= str_replace($prefix, $this->tablePrefix, substr($sql, $startPos, $j - $startPos)); - $startPos = $j; - - $j = $startPos + 1; - - if ($j >= $n) - { - break; - } - - // Quote comes first, find end of quote - while (true) - { - $k = strpos($sql, $quoteChar, $j); - $escaped = false; - - if ($k === false) - { - break; - } - - $l = $k - 1; - - while ($l >= 0 && $sql{$l} === '\\') - { - $l--; - $escaped = !$escaped; - } - - if ($escaped) - { - $j = $k + 1; - continue; - } - - break; - } - - if ($k === false) - { - // Error in the query - no end quote; ignore it - break; - } - - $literal .= substr($sql, $startPos, $k - $startPos + 1); - $startPos = $k + 1; - } - - if ($startPos < $n) - { - $literal .= substr($sql, $startPos, $n - $startPos); - } - - return $literal; - } - - /** - * Set a query monitor. - * - * @param QueryMonitorInterface $monitor The query monitor. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function setMonitor(QueryMonitorInterface $monitor) - { - $this->monitor = $monitor; - - return $this; - } - - /** - * Sets the SQL statement string for later execution. - * - * @param string|QueryInterface $query The SQL statement to set either as a Query object or a string. - * @param integer $offset The affected row offset to set. {@deprecated 3.0 Use LimitableInterface::setLimit() instead} - * @param integer $limit The maximum affected rows to set. {@deprecated 3.0 Use LimitableInterface::setLimit() instead} - * - * @return $this - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - public function setQuery($query, $offset = 0, $limit = 0) - { - $this->connect(); - - $this->freeResult(); - - if (is_string($query)) - { - // Allows taking advantage of bound variables in a direct query: - $query = $this->getQuery(true)->setQuery($query); - } - elseif (!($query instanceof QueryInterface)) - { - throw new \InvalidArgumentException( - sprintf( - 'A query must be a string or a %s instance, a %s was given.', - QueryInterface::class, - gettype($query) === 'object' ? (get_class($query) . ' instance') : gettype($query) - ) - ); - } - - if ($offset > 0 || $limit > 0) - { - @trigger_error( - sprintf( - 'The "$offset" and "$limit" arguments of %1$s() are deprecated and will be removed in 3.0, use %2$s::setLimit() instead.', - __METHOD__, - get_class($query) - ), - E_USER_DEPRECATED - ); - } - - if ($query instanceof LimitableInterface) - { - // Check for values set on the query object and use those if there is a zero value passed here - if ($limit === 0 && $query->limit > 0) - { - $limit = $query->limit; - } - - if ($offset === 0 && $query->offset > 0) - { - $offset = $query->offset; - } - - $query->setLimit($limit, $offset); - } - - $sql = $this->replacePrefix((string) $query); - - $this->statement = $this->prepareStatement($sql); - - $this->sql = $query; - $this->limit = (int) max(0, $limit); - $this->offset = (int) max(0, $offset); - - return $this; - } - - /** - * Set the connection to use UTF-8 character encoding. - * - * @return boolean True on success. - * - * @since 1.0 - */ - abstract public function setUtf(); - - /** - * Method to truncate a table. - * - * @param string $table The table to truncate - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function truncateTable($table) - { - $this->setQuery('TRUNCATE TABLE ' . $this->quoteName($table)) - ->execute(); - } - - /** - * Updates a row in a table based on an object's properties. - * - * @param string $table The name of the database table to update. - * @param object $object A reference to an object whose public properties match the table fields. - * @param array $key The name of the primary key. - * @param boolean $nulls True to update null fields or false to ignore them. - * - * @return boolean True on success. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function updateObject($table, &$object, $key, $nulls = false) - { - $fields = []; - $where = []; - $tableColumns = $this->getTableColumns($table); - - if (is_string($key)) - { - $key = [$key]; - } - - if (is_object($key)) - { - $key = (array) $key; - } - - // Create the base update statement. - $statement = 'UPDATE ' . $this->quoteName($table) . ' SET %s WHERE %s'; - - // Iterate over the object variables to build the query fields/value pairs. - foreach (get_object_vars($object) as $k => $v) - { - // Skip columns that don't exist in the table. - if (!array_key_exists($k, $tableColumns)) - { - continue; - } - - // Only process scalars that are not internal fields. - if (is_array($v) || is_object($v) || $k[0] === '_') - { - continue; - } - - // Set the primary key to the WHERE clause instead of a field to update. - if (in_array($k, $key, true)) - { - $where[] = $this->quoteName($k) . ($v === null ? ' IS NULL' : ' = ' . $this->quote($v)); - continue; - } - - // Prepare and sanitize the fields and values for the database query. - if ($v === null) - { - // If the value is null and we want to update nulls then set it. - if ($nulls) - { - $val = 'NULL'; - } - else - // If the value is null and we do not want to update nulls then ignore this field. - { - continue; - } - } - else - // The field is not null so we prep it for update. - { - $val = $this->quote($v); - } - - // Add the field to be updated. - $fields[] = $this->quoteName($k) . '=' . $val; - } - - // We don't have any fields to update. - if (empty($fields)) - { - return true; - } - - // Set the query and execute the update. - $this->setQuery(sprintf($statement, implode(',', $fields), implode(' AND ', $where)))->execute(); - - return true; - } -} diff --git a/libraries/vendor/joomla/database/src/DatabaseEvents.php b/libraries/vendor/joomla/database/src/DatabaseEvents.php deleted file mode 100644 index cf30117c19e52..0000000000000 --- a/libraries/vendor/joomla/database/src/DatabaseEvents.php +++ /dev/null @@ -1,46 +0,0 @@ - [], 'keys' => []]; - - /** - * The database connector to use for exporting structure and/or data. - * - * @var DatabaseDriver - * @since 1.0 - */ - protected $db; - - /** - * An array input sources (table names). - * - * @var array - * @since 1.0 - */ - protected $from = []; - - /** - * An array of options for the exporter. - * - * @var \stdClass - * @since 1.0 - */ - protected $options; - - /** - * Constructor. - * - * Sets up the default options for the exporter. - * - * @since 1.0 - */ - public function __construct() - { - $this->options = new \stdClass; - - // Set up the class defaults: - - // Export with only structure - $this->withStructure(); - - // Export as xml. - $this->asXml(); - - // Default destination is a string using $output = (string) $exporter; - } - - /** - * Magic function to exports the data to a string. - * - * @return string - * - * @since 1.0 - */ - public function __toString() - { - $buffer = ''; - - try - { - // Check everything is ok to run first. - $this->check(); - - // Get the format. - switch ($this->asFormat) - { - case 'xml': - default: - $buffer = $this->buildXml(); - break; - } - } - catch (\Exception $e) - { - // Do nothing - } - - return $buffer; - } - - /** - * Set the output option for the exporter to XML format. - * - * @return $this - * - * @since 1.0 - */ - public function asXml() - { - $this->asFormat = 'xml'; - - return $this; - } - - /** - * Builds the XML data for the tables to export. - * - * @return string An XML string - * - * @since 1.0 - * @throws \Exception if an error occurs. - */ - abstract protected function buildXml(); - - /** - * Builds the XML structure to export. - * - * @return array An array of XML lines (strings). - * - * @since 1.0 - * @throws \Exception if an error occurs. - */ - abstract protected function buildXmlStructure(); - - /** - * Checks if all data and options are in order prior to exporting. - * - * @return $this - * - * @since 1.0 - * @throws \Exception if an error is encountered. - */ - abstract public function check(); - - /** - * Specifies a list of table names to export. - * - * @param mixed $from The name of a single table, or an array of the table names to export. - * - * @return $this - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - public function from($from) - { - if (is_string($from)) - { - $this->from = [$from]; - } - elseif (is_array($from)) - { - $this->from = $from; - } - else - { - throw new \InvalidArgumentException('The exporter requires either a single table name or array of table names'); - } - - return $this; - } - - /** - * Get the generic name of the table, converting the database prefix to the wildcard string. - * - * @param string $table The name of the table. - * - * @return string The name of the table with the database prefix replaced with #__. - * - * @since 1.0 - */ - protected function getGenericTableName($table) - { - $prefix = $this->db->getPrefix(); - - // Replace the magic prefix if found. - $table = preg_replace("|^$prefix|", '#__', $table); - - return $table; - } - - /** - * Sets the database connector to use for exporting structure and/or data from MySQL. - * - * @param DatabaseDriver $db The database connector. - * - * @return $this - * - * @since 1.0 - */ - public function setDbo(DatabaseDriver $db) - { - $this->db = $db; - - return $this; - } - - /** - * Sets an internal option to export the structure of the input table(s). - * - * @param boolean $setting True to export the structure, false to not. - * - * @return $this - * - * @since 1.0 - */ - public function withStructure($setting = true) - { - $this->options->withStructure = (boolean) $setting; - - return $this; - } -} diff --git a/libraries/vendor/joomla/database/src/DatabaseFactory.php b/libraries/vendor/joomla/database/src/DatabaseFactory.php deleted file mode 100644 index 73460a2000ee5..0000000000000 --- a/libraries/vendor/joomla/database/src/DatabaseFactory.php +++ /dev/null @@ -1,180 +0,0 @@ -getMessage()), $e->getCode(), $e); - } - } - - /** - * Gets an exporter class object. - * - * @param string $name Name of the driver you want an exporter for. - * @param DatabaseDriver $db Optional DatabaseDriver instance to inject into the exporter. - * - * @return DatabaseExporter - * - * @since 1.0 - * @throws Exception\UnsupportedAdapterException - */ - public function getExporter($name, DatabaseDriver $db = null) - { - // Derive the class name from the driver. - $class = __NAMESPACE__ . '\\' . ucfirst(strtolower($name)) . '\\' . ucfirst(strtolower($name)) . 'Exporter'; - - // Make sure we have an exporter class for this driver. - if (!class_exists($class)) - { - // If it doesn't exist we are at an impasse so throw an exception. - throw new Exception\UnsupportedAdapterException('Database Exporter not found.'); - } - - /** @var $o DatabaseExporter */ - $o = new $class; - - if ($db instanceof DatabaseDriver) - { - $o->setDbo($db); - } - - return $o; - } - - /** - * Gets an importer class object. - * - * @param string $name Name of the driver you want an importer for. - * @param DatabaseDriver $db Optional DatabaseDriver instance to inject into the importer. - * - * @return DatabaseImporter - * - * @since 1.0 - * @throws Exception\UnsupportedAdapterException - */ - public function getImporter($name, DatabaseDriver $db = null) - { - // Derive the class name from the driver. - $class = __NAMESPACE__ . '\\' . ucfirst(strtolower($name)) . '\\' . ucfirst(strtolower($name)) . 'Importer'; - - // Make sure we have an importer class for this driver. - if (!class_exists($class)) - { - // If it doesn't exist we are at an impasse so throw an exception. - throw new Exception\UnsupportedAdapterException('Database importer not found.'); - } - - /** @var $o DatabaseImporter */ - $o = new $class; - - if ($db instanceof DatabaseDriver) - { - $o->setDbo($db); - } - - return $o; - } - - /** - * Get a new iterator on the current query. - * - * @param string $name Name of the driver you want an iterator for. - * @param StatementInterface $statement Statement holding the result set to be iterated. - * @param string $column An optional column to use as the iterator key. - * @param string $class The class of object that is returned. - * - * @return DatabaseIterator - * - * @since __DEPLOY_VERSION__ - */ - public function getIterator(string $name, StatementInterface $statement, $column = null, string $class = '\\stdClass'): DatabaseIterator - { - // Derive the class name from the driver. - $iteratorClass = __NAMESPACE__ . '\\' . ucfirst($name) . '\\' . ucfirst($name) . 'Iterator'; - - // Make sure we have an iterator class for this driver. - if (!class_exists($iteratorClass)) - { - // We can work with the base iterator class so use that - $iteratorClass = DatabaseIterator::class; - } - - // Return a new iterator - return new $iteratorClass($statement, $column, $class); - } - - /** - * Get the current query object or a new Query object. - * - * @param string $name Name of the driver you want an query object for. - * @param DatabaseInterface $db Optional Driver instance - * - * @return DatabaseQuery - * - * @since 1.0 - * @throws Exception\UnsupportedAdapterException - */ - public function getQuery($name, DatabaseInterface $db = null) - { - // Derive the class name from the driver. - $class = __NAMESPACE__ . '\\' . ucfirst(strtolower($name)) . '\\' . ucfirst(strtolower($name)) . 'Query'; - - // Make sure we have a query class for this driver. - if (!class_exists($class)) - { - // If it doesn't exist we are at an impasse so throw an exception. - throw new Exception\UnsupportedAdapterException('Database Query class not found'); - } - - return new $class($db); - } -} diff --git a/libraries/vendor/joomla/database/src/DatabaseImporter.php b/libraries/vendor/joomla/database/src/DatabaseImporter.php deleted file mode 100644 index 666fc460473dd..0000000000000 --- a/libraries/vendor/joomla/database/src/DatabaseImporter.php +++ /dev/null @@ -1,318 +0,0 @@ - [], 'keys' => []]; - - /** - * The database connector to use for exporting structure and/or data. - * - * @var DatabaseDriver - * @since 1.0 - */ - protected $db; - - /** - * The input source. - * - * @var mixed - * @since 1.0 - */ - protected $from = []; - - /** - * The type of input format. - * - * @var string - * @since 1.0 - */ - protected $asFormat = 'xml'; - - /** - * An array of options for the exporter. - * - * @var \stdClass - * @since 1.0 - */ - protected $options; - - /** - * Constructor. - * - * Sets up the default options for the importer. - * - * @since 1.0 - */ - public function __construct() - { - $this->options = new \stdClass; - - // Set up the class defaults: - - // Import with only structure - $this->withStructure(); - - // Export as XML. - $this->asXml(); - - // Default destination is a string using $output = (string) $importer; - } - - /** - * Set the output option for the importer to XML format. - * - * @return $this - * - * @since 1.0 - */ - public function asXml() - { - $this->asFormat = 'xml'; - - return $this; - } - - /** - * Checks if all data and options are in order prior to importer. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - abstract public function check(); - - /** - * Specifies the data source to import. - * - * @param mixed $from The data source to import. - * - * @return $this - * - * @since 1.0 - */ - public function from($from) - { - $this->from = $from; - - return $this; - } - - /** - * Get the SQL syntax to add a column. - * - * @param string $table The table name. - * @param \SimpleXMLElement $field The XML field definition. - * - * @return string - * - * @since 1.0 - */ - protected function getAddColumnSql($table, \SimpleXMLElement $field) - { - return 'ALTER TABLE ' . $this->db->quoteName($table) . ' ADD COLUMN ' . $this->getColumnSQL($field); - } - - /** - * Get the syntax to alter a column. - * - * @param string $table The name of the database table to alter. - * @param \SimpleXMLElement $field The XML definition for the field. - * - * @return string - * - * @since 1.0 - */ - protected function getChangeColumnSql($table, \SimpleXMLElement $field) - { - return 'ALTER TABLE ' . $this->db->quoteName($table) . ' CHANGE COLUMN ' . $this->db->quoteName((string) $field['Field']) . ' ' - . $this->getColumnSQL($field); - } - - /** - * Get the SQL syntax to drop a column. - * - * @param string $table The table name. - * @param string $name The name of the field to drop. - * - * @return string - * - * @since 1.0 - */ - protected function getDropColumnSql($table, $name) - { - return 'ALTER TABLE ' . $this->db->quoteName($table) . ' DROP COLUMN ' . $this->db->quoteName($name); - } - - /** - * Get the details list of keys for a table. - * - * @param array $keys An array of objects that comprise the keys for the table. - * - * @return array The lookup array. array({key name} => array(object, ...)) - * - * @since 1.0 - */ - protected function getKeyLookup($keys) - { - // First pass, create a lookup of the keys. - $lookup = []; - - foreach ($keys as $key) - { - if ($key instanceof \SimpleXMLElement) - { - $kName = (string) $key['Key_name']; - } - else - { - $kName = $key->Key_name; - } - - if (empty($lookup[$kName])) - { - $lookup[$kName] = []; - } - - $lookup[$kName][] = $key; - } - - return $lookup; - } - - /** - * Get the real name of the table, converting the prefix wildcard string if present. - * - * @param string $table The name of the table. - * - * @return string The real name of the table. - * - * @since 1.0 - */ - protected function getRealTableName($table) - { - $prefix = $this->db->getPrefix(); - - // Replace the magic prefix if found. - $table = preg_replace('|^#__|', $prefix, $table); - - return $table; - } - - /** - * Merges the incoming structure definition with the existing structure. - * - * @return void - * - * @note Currently only supports XML format. - * @since 1.0 - * @throws \RuntimeException on error. - */ - public function mergeStructure() - { - $tables = $this->db->getTableList(); - - if ($this->from instanceof \SimpleXMLElement) - { - $xml = $this->from; - } - else - { - $xml = new \SimpleXMLElement($this->from); - } - - // Get all the table definitions. - $xmlTables = $xml->xpath('database/table_structure'); - - foreach ($xmlTables as $table) - { - // Convert the magic prefix into the real table name. - $tableName = $this->getRealTableName((string) $table['name']); - - if (in_array($tableName, $tables, true)) - { - // The table already exists. Now check if there is any difference. - if ($queries = $this->getAlterTableql($xml->database->table_structure)) - { - // Run the queries to upgrade the data structure. - foreach ($queries as $query) - { - $this->db->setQuery((string) $query); - $this->db->execute(); - } - } - } - else - { - // This is a new table. - $sql = $this->xmlToCreate($table); - - $this->db->setQuery((string) $sql); - $this->db->execute(); - } - } - } - - /** - * Sets the database connector to use for exporting structure and/or data. - * - * @param DatabaseDriver $db The database connector. - * - * @return $this - * - * @since 1.0 - */ - public function setDbo(DatabaseDriver $db) - { - $this->db = $db; - - return $this; - } - - /** - * Sets an internal option to merge the structure based on the input data. - * - * @param boolean $setting True to import the structure, false to not. - * - * @return $this - * - * @since 1.0 - */ - public function withStructure($setting = true) - { - $this->options->withStructure = (boolean) $setting; - - return $this; - } - - /** - * Get the SQL syntax to add a table. - * - * @param \SimpleXMLElement $table The table information. - * - * @return string - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - abstract protected function xmlToCreate(\SimpleXMLElement $table); -} diff --git a/libraries/vendor/joomla/database/src/DatabaseInterface.php b/libraries/vendor/joomla/database/src/DatabaseInterface.php deleted file mode 100644 index 56f9b963fc769..0000000000000 --- a/libraries/vendor/joomla/database/src/DatabaseInterface.php +++ /dev/null @@ -1,527 +0,0 @@ - 'row_value']. - * - * @return mixed The return value or null if the query failed. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function loadAssoc(); - - /** - * Method to get an array of the result set rows from the database query where each row is an associative array - * of ['field_name' => 'row_value']. The array of rows can optionally be keyed by a field name, but defaults to - * a sequential numeric array. - * - * NOTE: Chosing to key the result array by a non-unique field name can result in unwanted - * behavior and should be avoided. - * - * @param string $key The name of a field on which to key the result array. - * @param string $column An optional column name. Instead of the whole row, only this column value will be in the result array. - * - * @return mixed The return value or null if the query failed. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function loadAssocList($key = null, $column = null); - - /** - * Method to get an array of values from the $offset field in each row of the result set from the database query. - * - * @param integer $offset The row offset to use to build the result array. - * - * @return mixed The return value or null if the query failed. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function loadColumn($offset = 0); - - /** - * Method to get the first row of the result set from the database query as an object. - * - * @param string $class The class name to use for the returned row object. - * - * @return mixed The return value or null if the query failed. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function loadObject($class = 'stdClass'); - - /** - * Method to get an array of the result set rows from the database query where each row is an object. The array - * of objects can optionally be keyed by a field name, but defaults to a sequential numeric array. - * - * NOTE: Choosing to key the result array by a non-unique field name can result in unwanted behavior and should be avoided. - * - * @param string $key The name of a field on which to key the result array. - * @param string $class The class name to use for the returned row objects. - * - * @return mixed The return value or null if the query failed. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function loadObjectList($key = '', $class = 'stdClass'); - - /** - * Method to get the first field of the first row of the result set from the database query. - * - * @return mixed The return value or null if the query failed. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function loadResult(); - - /** - * Method to get the first row of the result set from the database query as an array. - * - * Columns are indexed numerically so the first column in the result set would be accessible via $row[0], etc. - * - * @return mixed The return value or null if the query failed. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function loadRow(); - - /** - * Method to get an array of the result set rows from the database query where each row is an array. The array - * of objects can optionally be keyed by a field offset, but defaults to a sequential numeric array. - * - * NOTE: Choosing to key the result array by a non-unique field can result in unwanted behavior and should be avoided. - * - * @param string $key The name of a field on which to key the result array. - * - * @return mixed The return value or null if the query failed. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function loadRowList($key = null); - - /** - * Locks a table in the database. - * - * @param string $tableName The name of the table to unlock. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function lockTable($tableName); - - /** - * Quotes and optionally escapes a string to database requirements for use in database queries. - * - * @param array|string $text A string or an array of strings to quote. - * @param boolean $escape True (default) to escape the string, false to leave it unchanged. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function quote($text, $escape = true); - - /** - * Wrap an SQL statement identifier name such as column, table or database names in quotes to prevent injection - * risks and reserved word conflicts. - * - * @param array|string $name The identifier name to wrap in quotes, or an array of identifier names to wrap in quotes. - * Each type supports dot-notation name. - * @param array|string $as The AS query part associated to $name. It can be string or array, in latter case it has to be - * same length of $name; if is null there will not be any AS part for string or array element. - * - * @return array|string The quote wrapped name, same type of $name. - * - * @since __DEPLOY_VERSION__ - */ - public function quoteName($name, $as = null); - - /** - * Renames a table in the database. - * - * @param string $oldTable The name of the table to be renamed - * @param string $newTable The new name for the table. - * @param string $backup Table prefix - * @param string $prefix For the table - used to rename constraints in non-mysql databases - * - * @return $this - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function renameTable($oldTable, $newTable, $backup = null, $prefix = null); - - /** - * Select a database for use. - * - * @param string $database The name of the database to select for use. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function select($database); - - /** - * Sets the SQL statement string for later execution. - * - * @param mixed $query The SQL statement to set either as a Query object or a string. - * @param integer $offset The affected row offset to set. {@deprecated 3.0 Use LimitableInterface::setLimit() instead} - * @param integer $limit The maximum affected rows to set. {@deprecated 3.0 Use LimitableInterface::setLimit() instead} - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function setQuery($query, $offset = 0, $limit = 0); - - /** - * Method to commit a transaction. - * - * @param boolean $toSavepoint If true, commit to the last savepoint. - * - * @return void - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function transactionCommit($toSavepoint = false); - - /** - * Method to roll back a transaction. - * - * @param boolean $toSavepoint If true, rollback to the last savepoint. - * - * @return void - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function transactionRollback($toSavepoint = false); - - /** - * Method to initialize a transaction. - * - * @param boolean $asSavepoint If true and a transaction is already active, a savepoint will be created. - * - * @return void - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function transactionStart($asSavepoint = false); - - /** - * Unlocks tables in the database. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function unlockTables(); - - /** - * Updates a row in a table based on an object's properties. - * - * @param string $table The name of the database table to update. - * @param object $object A reference to an object whose public properties match the table fields. - * @param array $key The name of the primary key. - * @param boolean $nulls True to update null fields or false to ignore them. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function updateObject($table, &$object, $key, $nulls = false); -} diff --git a/libraries/vendor/joomla/database/src/DatabaseIterator.php b/libraries/vendor/joomla/database/src/DatabaseIterator.php deleted file mode 100644 index b35564840bf6d..0000000000000 --- a/libraries/vendor/joomla/database/src/DatabaseIterator.php +++ /dev/null @@ -1,235 +0,0 @@ -statement = $statement; - $this->class = $class; - $this->column = $column; - $this->fetched = 0; - $this->next(); - } - - /** - * Database iterator destructor. - * - * @since 1.0 - */ - public function __destruct() - { - if ($this->statement) - { - $this->freeResult(); - } - } - - /** - * Get the number of rows in the result set for the executed SQL given by the cursor. - * - * @return integer The number of rows in the result set. - * - * @see Countable::count() - * @since 1.0 - */ - public function count() - { - if ($this->statement) - { - return $this->statement->rowCount(); - } - - return 0; - } - - /** - * The current element in the iterator. - * - * @return object - * - * @see Iterator::current() - * @since 1.0 - */ - public function current() - { - return $this->current; - } - - /** - * The key of the current element in the iterator. - * - * @return scalar - * - * @see Iterator::key() - * @since 1.0 - */ - public function key() - { - return $this->key; - } - - /** - * Moves forward to the next result from the SQL query. - * - * @return void - * - * @see Iterator::next() - * @since 1.0 - */ - public function next() - { - // Set the default key as being the number of fetched object - $this->key = $this->fetched; - - // Try to get an object - $this->current = $this->fetchObject(); - - // If an object has been found - if ($this->current) - { - // Set the key as being the indexed column (if it exists) - if (isset($this->current->{$this->column})) - { - $this->key = $this->current->{$this->column}; - } - - // Update the number of fetched object - $this->fetched++; - } - } - - /** - * Rewinds the iterator. - * - * This iterator cannot be rewound. - * - * @return void - * - * @see Iterator::rewind() - * @since 1.0 - */ - public function rewind() - { - } - - /** - * Checks if the current position of the iterator is valid. - * - * @return boolean - * - * @see Iterator::valid() - * @since 1.0 - */ - public function valid() - { - return (boolean) $this->current; - } - - /** - * Method to fetch a row from the result set cursor as an object. - * - * @return mixed Either the next row from the result set or false if there are no more rows. - * - * @since 1.0 - */ - protected function fetchObject() - { - if ($this->statement) - { - return $this->statement->fetchObject($this->class); - } - - return false; - } - - /** - * Method to free up the memory used for the result set. - * - * @return void - * - * @since 1.0 - */ - protected function freeResult() - { - if ($this->statement) - { - $this->statement->closeCursor(); - } - } -} diff --git a/libraries/vendor/joomla/database/src/DatabaseQuery.php b/libraries/vendor/joomla/database/src/DatabaseQuery.php deleted file mode 100644 index 4c376dbc9662d..0000000000000 --- a/libraries/vendor/joomla/database/src/DatabaseQuery.php +++ /dev/null @@ -1,2033 +0,0 @@ -db = $db; - } - - /** - * Magic function to convert the query to a string. - * - * @return string The completed query. - * - * @since 1.0 - */ - public function __toString() - { - $query = ''; - - if ($this->sql) - { - if ($this instanceof Query\LimitableInterface) - { - return $this->processLimit($this->sql, $this->limit, $this->offset); - } - - return $this->sql; - } - - switch ($this->type) - { - case 'element': - $query .= (string) $this->element; - break; - - case 'select': - $query .= (string) $this->select; - $query .= (string) $this->from; - - if ($this->join) - { - // Special case for joins - foreach ($this->join as $join) - { - $query .= (string) $join; - } - } - - if ($this->where) - { - $query .= (string) $this->where; - } - - if ($this->selectRowNumber === null) - { - if ($this->group) - { - $query .= (string) $this->group; - } - - if ($this->having) - { - $query .= (string) $this->having; - } - - if ($this->merge) - { - // Special case for merge - foreach ($this->merge as $element) - { - $query .= (string) $element; - } - } - } - - if ($this->order) - { - $query .= (string) $this->order; - } - - break; - - case 'querySet': - $query = $this->querySet; - - if ($query->order || ($query instanceof Query\LimitableInterface && ($query->limit || $query->offset))) - { - // If ORDER BY or LIMIT statement exist then parentheses is required for the first query - $query = "($query)"; - } - - if ($this->merge) - { - // Special case for merge - foreach ($this->merge as $element) - { - $query .= (string) $element; - } - } - - if ($this->order) - { - $query .= (string) $this->order; - } - - break; - - case 'delete': - $query .= (string) $this->delete; - $query .= (string) $this->from; - - if ($this->join) - { - // Special case for joins - foreach ($this->join as $join) - { - $query .= (string) $join; - } - } - - if ($this->where) - { - $query .= (string) $this->where; - } - - break; - - case 'update': - $query .= (string) $this->update; - - if ($this->join) - { - // Special case for joins - foreach ($this->join as $join) - { - $query .= (string) $join; - } - } - - $query .= (string) $this->set; - - if ($this->where) - { - $query .= (string) $this->where; - } - - break; - - case 'insert': - $query .= (string) $this->insert; - - // Set method - if ($this->set) - { - $query .= (string) $this->set; - } - elseif ($this->values) - // Columns-Values method - { - if ($this->columns) - { - $query .= (string) $this->columns; - } - - $elements = $this->values->getElements(); - - if (!($elements[0] instanceof $this)) - { - $query .= ' VALUES '; - } - - $query .= (string) $this->values; - } - - break; - - case 'call': - $query .= (string) $this->call; - break; - - case 'exec': - $query .= (string) $this->exec; - break; - } - - if ($this instanceof Query\LimitableInterface) - { - $query = $this->processLimit($query, $this->limit, $this->offset); - } - - return $query; - } - - /** - * Magic function to get protected variable value - * - * @param string $name The name of the variable. - * - * @return mixed - * - * @since 1.0 - */ - public function __get($name) - { - if (property_exists($this, $name)) - { - return $this->$name; - } - - $trace = debug_backtrace(); - trigger_error( - 'Undefined property via __get(): ' . $name . ' in ' . $trace[0]['file'] . ' on line ' . $trace[0]['line'], - E_USER_NOTICE - ); - } - - /** - * Add a single column, or array of columns to the CALL clause of the query. - * - * Note that you must not mix insert, update, delete and select method calls when building a query. - * The call method can, however, be called multiple times in the same query. - * - * Usage: - * $query->call('a.*')->call('b.id'); - * $query->call(array('a.*', 'b.id')); - * - * @param mixed $columns A string or an array of field names. - * - * @return $this - * - * @since 1.0 - */ - public function call($columns) - { - $this->type = 'call'; - - if (is_null($this->call)) - { - $this->call = new Query\QueryElement('CALL', $columns); - } - else - { - $this->call->append($columns); - } - - return $this; - } - - /** - * Casts a value to a char. - * - * Ensure that the value is properly quoted before passing to the method. - * - * Usage: - * $query->select($query->castAsChar('a')); - * - * @param string $value The value to cast as a char. - * - * @return string Returns the cast value. - * - * @since 1.0 - */ - public function castAsChar($value) - { - return $value; - } - - /** - * Gets the number of characters in a string. - * - * Note, use 'length' to find the number of bytes in a string. - * - * Usage: - * $query->select($query->charLength('a')); - * - * @param string $field A value. - * @param string $operator Comparison operator between charLength integer value and $condition - * @param string $condition Integer value to compare charLength with. - * - * @return string The required char length call. - * - * @since 1.0 - */ - public function charLength($field, $operator = null, $condition = null) - { - return 'CHAR_LENGTH(' . $field . ')' . (isset($operator) && isset($condition) ? ' ' . $operator . ' ' . $condition : ''); - } - - /** - * Clear data from the query or a specific clause of the query. - * - * @param string $clause Optionally, the name of the clause to clear, or nothing to clear the whole query. - * - * @return $this - * - * @since 1.0 - */ - public function clear($clause = null) - { - $this->sql = null; - - switch ($clause) - { - case 'select': - $this->select = null; - $this->type = null; - $this->selectRowNumber = null; - break; - - case 'delete': - $this->delete = null; - $this->type = null; - break; - - case 'update': - $this->update = null; - $this->type = null; - break; - - case 'insert': - $this->insert = null; - $this->type = null; - $this->autoIncrementField = null; - break; - - case 'querySet': - $this->querySet = null; - $this->type = null; - break; - - case 'from': - $this->from = null; - break; - - case 'join': - $this->join = null; - break; - - case 'set': - $this->set = null; - break; - - case 'where': - $this->where = null; - break; - - case 'group': - $this->group = null; - break; - - case 'having': - $this->having = null; - break; - - case 'merge': - $this->merge = null; - break; - - case 'order': - $this->order = null; - break; - - case 'columns': - $this->columns = null; - break; - - case 'values': - $this->values = null; - break; - - case 'exec': - $this->exec = null; - $this->type = null; - break; - - case 'call': - $this->call = null; - $this->type = null; - break; - - case 'limit': - $this->offset = 0; - $this->limit = 0; - break; - - case 'offset': - $this->offset = 0; - break; - - default: - $this->type = null; - $this->select = null; - $this->selectRowNumber = null; - $this->delete = null; - $this->update = null; - $this->insert = null; - $this->querySet = null; - $this->from = null; - $this->join = null; - $this->set = null; - $this->where = null; - $this->group = null; - $this->having = null; - $this->merge = null; - $this->order = null; - $this->columns = null; - $this->values = null; - $this->autoIncrementField = null; - $this->exec = null; - $this->call = null; - $this->offset = 0; - $this->limit = 0; - break; - } - - return $this; - } - - /** - * Adds a column, or array of column names that would be used for an INSERT INTO statement. - * - * @param array|string $columns A column name, or array of column names. - * - * @return $this - * - * @since 1.0 - */ - public function columns($columns) - { - if (is_null($this->columns)) - { - $this->columns = new Query\QueryElement('()', $columns); - } - else - { - $this->columns->append($columns); - } - - return $this; - } - - /** - * Concatenates an array of column names or values. - * - * Usage: - * $query->select($query->concatenate(array('a', 'b'))); - * - * @param array $values An array of values to concatenate. - * @param string $separator As separator to place between each value. - * - * @return string The concatenated values. - * - * @since 1.0 - */ - public function concatenate($values, $separator = null) - { - if ($separator) - { - return 'CONCATENATE(' . implode(' || ' . $this->quote($separator) . ' || ', $values) . ')'; - } - - return 'CONCATENATE(' . implode(' || ', $values) . ')'; - } - - /** - * Gets the current date and time. - * - * Usage: - * $query->where('published_up < '.$query->currentTimestamp()); - * - * @return string - * - * @since 1.0 - */ - public function currentTimestamp() - { - return 'CURRENT_TIMESTAMP()'; - } - - /** - * Add to the current date and time. - * - * Usage: - * $query->select($query->dateAdd()); - * - * Prefixing the interval with a - (negative sign) will cause subtraction to be used. - * Note: Not all drivers support all units. - * - * @param mixed $date The date to add to. May be date or datetime - * @param string $interval The string representation of the appropriate number of units - * @param string $datePart The part of the date to perform the addition on - * - * @return string The string with the appropriate sql for addition of dates - * - * @link https://dev.mysql.com/doc/en/date-and-time-functions.html - * @since 1.5.0 - */ - public function dateAdd($date, $interval, $datePart) - { - return trim("DATE_ADD('" . $date . "', INTERVAL " . $interval . ' ' . $datePart . ')'); - } - - /** - * Returns a PHP date() function compliant date format for the database driver. - * - * This method is provided for use where the query object is passed to a function for modification. - * If you have direct access to the database object, it is recommended you use the getDateFormat method directly. - * - * @return string The format string. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function dateFormat() - { - if (!($this->db instanceof DatabaseInterface)) - { - throw new \RuntimeException(sprintf('A %s instance is not set to the query object.', DatabaseInterface::class)); - } - - return $this->db->getDateFormat(); - } - - /** - * Creates a formatted dump of the query for debugging purposes. - * - * Usage: - * echo $query->dump(); - * - * @return string - * - * @since 1.0 - */ - public function dump() - { - return '
' . str_replace('#__', $this->db->getPrefix(), $this) . '
'; - } - - /** - * Add a table name to the DELETE clause of the query. - * - * Note that you must not mix insert, update, delete and select method calls when building a query. - * - * Usage: - * $query->delete('#__a')->where('id = 1'); - * - * @param string $table The name of the table to delete from. - * - * @return $this - * - * @since 1.0 - */ - public function delete($table = null) - { - $this->type = 'delete'; - $this->delete = new Query\QueryElement('DELETE', null); - - if (!empty($table)) - { - $this->from($table); - } - - return $this; - } - - /** - * Alias for escape method - * - * @param string $text The string to be escaped. - * @param boolean $extra Optional parameter to provide extra escaping. - * - * @return string The escaped string. - * - * @since 1.0 - * @throws \RuntimeException if the internal db property is not a valid object. - */ - public function e($text, $extra = false) - { - return $this->escape($text, $extra); - } - - /** - * Method to escape a string for usage in an SQL statement. - * - * This method is provided for use where the query object is passed to a function for modification. - * If you have direct access to the database object, it is recommended you use the escape method directly. - * - * Note that 'e' is an alias for this method as it is in DatabaseDriver. - * - * @param string $text The string to be escaped. - * @param boolean $extra Optional parameter to provide extra escaping. - * - * @return string The escaped string. - * - * @since 1.0 - * @throws \RuntimeException if the internal db property is not a valid object. - */ - public function escape($text, $extra = false) - { - if (!($this->db instanceof DatabaseInterface)) - { - throw new \RuntimeException(sprintf('A %s instance is not set to the query object.', DatabaseInterface::class)); - } - - return $this->db->escape($text, $extra); - } - - /** - * Add a single column, or array of columns to the EXEC clause of the query. - * - * Note that you must not mix insert, update, delete and select method calls when building a query. - * The exec method can, however, be called multiple times in the same query. - * - * Usage: - * $query->exec('a.*')->exec('b.id'); - * $query->exec(array('a.*', 'b.id')); - * - * @param array|string $columns A string or an array of field names. - * - * @return $this - * - * @since 1.0 - */ - public function exec($columns) - { - $this->type = 'exec'; - - if (is_null($this->exec)) - { - $this->exec = new Query\QueryElement('EXEC', $columns); - } - else - { - $this->exec->append($columns); - } - - return $this; - } - - /** - * Find a value in a varchar used like a set. - * - * Ensure that the value is an integer before passing to the method. - * - * Usage: - * $query->findInSet((int) $parent->id, 'a.assigned_cat_ids') - * - * @param string $value The value to search for. - * @param string $set The set of values. - * - * @return string A representation of the MySQL find_in_set() function for the driver. - * - * @since 1.5.0 - */ - public function findInSet($value, $set) - { - return ''; - } - - /** - * Add a table to the FROM clause of the query. - * - * Note that while an array of tables can be provided, it is recommended you use explicit joins. - * - * Usage: - * $query->select('*')->from('#__a'); - * - * @param array|string $tables A string or array of table names. This can be a DatabaseQuery object (or a child of it) when used - * as a subquery in FROM clause along with a value for $subQueryAlias. - * @param string $subQueryAlias Alias used when $tables is a DatabaseQuery. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function from($tables, $subQueryAlias = null) - { - if (is_null($this->from)) - { - if ($tables instanceof $this) - { - if (is_null($subQueryAlias)) - { - throw new \RuntimeException('JLIB_DATABASE_ERROR_NULL_SUBQUERY_ALIAS'); - } - - $tables = '( ' . (string) $tables . ' ) AS ' . $this->quoteName($subQueryAlias); - } - - $this->from = new Query\QueryElement('FROM', $tables); - } - else - { - $this->from->append($tables); - } - - return $this; - } - - /** - * Used to get a string to extract year from date column. - * - * Usage: - * $query->select($query->year($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing year to be extracted. - * - * @return string Returns string to extract year from a date. - * - * @since 1.0 - */ - public function year($date) - { - return 'YEAR(' . $date . ')'; - } - - /** - * Used to get a string to extract month from date column. - * - * Usage: - * $query->select($query->month($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing month to be extracted. - * - * @return string Returns string to extract month from a date. - * - * @since 1.0 - */ - public function month($date) - { - return 'MONTH(' . $date . ')'; - } - - /** - * Used to get a string to extract day from date column. - * - * Usage: - * $query->select($query->day($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing day to be extracted. - * - * @return string Returns string to extract day from a date. - * - * @since 1.0 - */ - public function day($date) - { - return 'DAY(' . $date . ')'; - } - - /** - * Used to get a string to extract hour from date column. - * - * Usage: - * $query->select($query->hour($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing hour to be extracted. - * - * @return string Returns string to extract hour from a date. - * - * @since 1.0 - */ - public function hour($date) - { - return 'HOUR(' . $date . ')'; - } - - /** - * Used to get a string to extract minute from date column. - * - * Usage: - * $query->select($query->minute($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing minute to be extracted. - * - * @return string Returns string to extract minute from a date. - * - * @since 1.0 - */ - public function minute($date) - { - return 'MINUTE(' . $date . ')'; - } - - /** - * Used to get a string to extract seconds from date column. - * - * Usage: - * $query->select($query->second($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing second to be extracted. - * - * @return string Returns string to extract second from a date. - * - * @since 1.0 - */ - public function second($date) - { - return 'SECOND(' . $date . ')'; - } - - /** - * Add a grouping column to the GROUP clause of the query. - * - * Usage: - * $query->group('id'); - * - * @param array|string $columns A string or array of ordering columns. - * - * @return $this - * - * @since 1.0 - */ - public function group($columns) - { - if (is_null($this->group)) - { - $this->group = new Query\QueryElement('GROUP BY', $columns); - } - else - { - $this->group->append($columns); - } - - return $this; - } - - /** - * A conditions to the HAVING clause of the query. - * - * Usage: - * $query->group('id')->having('COUNT(id) > 5'); - * - * @param array|string $conditions A string or array of columns. - * @param string $glue The glue by which to join the conditions. Defaults to AND. - * - * @return $this - * - * @since 1.0 - */ - public function having($conditions, $glue = 'AND') - { - if (is_null($this->having)) - { - $glue = strtoupper($glue); - $this->having = new Query\QueryElement('HAVING', $conditions, " $glue "); - } - else - { - $this->having->append($conditions); - } - - return $this; - } - - /** - * Add an INNER JOIN clause to the query. - * - * Usage: - * $query->innerJoin('b ON b.id = a.id')->innerJoin('c ON c.id = b.id'); - * - * @param string $condition The join condition. - * - * @return $this - * - * @since 1.0 - */ - public function innerJoin($condition) - { - return $this->join('INNER', $condition); - } - - /** - * Add a table name to the INSERT clause of the query. - * - * Note that you must not mix insert, update, delete and select method calls when building a query. - * - * Usage: - * $query->insert('#__a')->set('id = 1'); - * $query->insert('#__a')->columns('id, title')->values('1,2')->values('3,4'); - * $query->insert('#__a')->columns('id, title')->values(array('1,2', '3,4')); - * - * @param string $table The name of the table to insert data into. - * @param boolean $incrementField The name of the field to auto increment. - * - * @return $this - * - * @since 1.0 - */ - public function insert($table, $incrementField = false) - { - $this->type = 'insert'; - $this->insert = new Query\QueryElement('INSERT INTO', $table); - $this->autoIncrementField = $incrementField; - - return $this; - } - - /** - * Add a JOIN clause to the query. - * - * Usage: - * $query->join('INNER', 'b ON b.id = a.id); - * - * @param string $type The type of join. This string is prepended to the JOIN keyword. - * @param array|string $conditions A string or array of conditions. - * - * @return $this - * - * @since 1.0 - */ - public function join($type, $conditions) - { - if (is_null($this->join)) - { - $this->join = []; - } - - $this->join[] = new Query\QueryElement(strtoupper($type) . ' JOIN', $conditions); - - return $this; - } - - /** - * Add a LEFT JOIN clause to the query. - * - * Usage: - * $query->leftJoin('b ON b.id = a.id')->leftJoin('c ON c.id = b.id'); - * - * @param string $condition The join condition. - * - * @return $this - * - * @since 1.0 - */ - public function leftJoin($condition) - { - return $this->join('LEFT', $condition); - } - - /** - * Get the length of a string in bytes. - * - * Note, use 'charLength' to find the number of characters in a string. - * - * Usage: - * query->where($query->length('a').' > 3'); - * - * @param string $value The string to measure. - * - * @return integer - * - * @since 1.0 - */ - public function length($value) - { - return 'LENGTH(' . $value . ')'; - } - - /** - * Get the null or zero representation of a timestamp for the database driver. - * - * This method is provided for use where the query object is passed to a function for modification. - * If you have direct access to the database object, it is recommended you use the nullDate method directly. - * - * Usage: - * $query->where('modified_date <> '.$query->nullDate()); - * - * @param boolean $quoted Optionally wraps the null date in database quotes (true by default). - * - * @return string Null or zero representation of a timestamp. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function nullDate($quoted = true) - { - if (!($this->db instanceof DatabaseInterface)) - { - throw new \RuntimeException(sprintf('A %s instance is not set to the query object.', DatabaseInterface::class)); - } - - $result = $this->db->getNullDate(); - - if ($quoted) - { - return $this->db->quote($result); - } - - return $result; - } - - /** - * Generate a SQL statement to check if column represents a zero or null datetime. - * - * Usage: - * $query->where($query->isNullDatetime('modified_date')); - * - * @param string $column A column name. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function isNullDatetime($column) - { - if (!$this->db instanceof DatabaseInterface) - { - throw new \RuntimeException(sprintf('A %s instance is not set to the query object.', DatabaseInterface::class)); - } - - if ($this->nullDatetimeList) - { - return "($column IN (" - . implode(', ', $this->db->quote($this->nullDatetimeList)) - . ") OR $column IS NULL)"; - } - - return "$column IS NULL"; - } - - /** - * Add a ordering column to the ORDER clause of the query. - * - * Usage: - * $query->order('foo')->order('bar'); - * $query->order(array('foo','bar')); - * - * @param array|string $columns A string or array of ordering columns. - * - * @return $this - * - * @since 1.0 - */ - public function order($columns) - { - if (is_null($this->order)) - { - $this->order = new Query\QueryElement('ORDER BY', $columns); - } - else - { - $this->order->append($columns); - } - - return $this; - } - - /** - * Add an OUTER JOIN clause to the query. - * - * Usage: - * $query->outerJoin('b ON b.id = a.id')->outerJoin('c ON c.id = b.id'); - * - * @param string $condition The join condition. - * - * @return $this - * - * @since 1.0 - */ - public function outerJoin($condition) - { - return $this->join('OUTER', $condition); - } - - /** - * Alias for quote method - * - * @param array|string $text A string or an array of strings to quote. - * @param boolean $escape True (default) to escape the string, false to leave it unchanged. - * - * @return string The quoted input string. - * - * @since 1.0 - * @throws \RuntimeException if the internal db property is not a valid object. - */ - public function q($text, $escape = true) - { - return $this->quote($text, $escape); - } - - /** - * Method to quote and optionally escape a string to database requirements for insertion into the database. - * - * This method is provided for use where the query object is passed to a function for modification. - * If you have direct access to the database object, it is recommended you use the quote method directly. - * - * Note that 'q' is an alias for this method as it is in DatabaseDriver. - * - * Usage: - * $query->quote('fulltext'); - * $query->q('fulltext'); - * $query->q(array('option', 'fulltext')); - * - * @param array|string $text A string or an array of strings to quote. - * @param boolean $escape True (default) to escape the string, false to leave it unchanged. - * - * @return string The quoted input string. - * - * @since 1.0 - * @throws \RuntimeException if the internal db property is not a valid object. - */ - public function quote($text, $escape = true) - { - if (!($this->db instanceof DatabaseInterface)) - { - throw new \RuntimeException(sprintf('A %s instance is not set to the query object.', DatabaseInterface::class)); - } - - return $this->db->quote($text, $escape); - } - - /** - * Alias for quoteName method - * - * @param array|string $name The identifier name to wrap in quotes, or an array of identifier names to wrap in quotes. - * Each type supports dot-notation name. - * @param array|string $as The AS query part associated to $name. It can be string or array, in latter case it has to be - * same length of $name; if is null there will not be any AS part for string or array element. - * - * @return array|string The quote wrapped name, same type of $name. - * - * @since 1.0 - * @throws \RuntimeException if the internal db property is not a valid object. - */ - public function qn($name, $as = null) - { - return $this->quoteName($name, $as); - } - - /** - * Wrap an SQL statement identifier name such as column, table or database names in quotes to prevent injection - * risks and reserved word conflicts. - * - * This method is provided for use where the query object is passed to a function for modification. - * If you have direct access to the database object, it is recommended you use the quoteName method directly. - * - * Note that 'qn' is an alias for this method as it is in DatabaseDriver. - * - * Usage: - * $query->quoteName('#__a'); - * $query->qn('#__a'); - * - * @param array|string $name The identifier name to wrap in quotes, or an array of identifier names to wrap in quotes. - * Each type supports dot-notation name. - * @param array|string $as The AS query part associated to $name. It can be string or array, in latter case it has to be - * same length of $name; if is null there will not be any AS part for string or array element. - * - * @return array|string The quote wrapped name, same type of $name. - * - * @since 1.0 - * @throws \RuntimeException if the internal db property is not a valid object. - */ - public function quoteName($name, $as = null) - { - if (!($this->db instanceof DatabaseInterface)) - { - throw new \RuntimeException(sprintf('A %s instance is not set to the query object.', DatabaseInterface::class)); - } - - return $this->db->quoteName($name, $as); - } - - /** - * Get the function to return a random floating-point value - * - * Usage: - * $query->rand(); - * - * @return string - * - * @since 1.5.0 - */ - public function rand() - { - return ''; - } - - /** - * Get the regular expression operator - * - * Usage: - * $query->where('field ' . $query->regexp($search)); - * - * @param string $value The regex pattern. - * - * @return string - * - * @since 1.5.0 - */ - public function regexp($value) - { - return ' ' . $value; - } - - /** - * Add a RIGHT JOIN clause to the query. - * - * Usage: - * $query->rightJoin('b ON b.id = a.id')->rightJoin('c ON c.id = b.id'); - * - * @param string $condition The join condition. - * - * @return $this - * - * @since 1.0 - */ - public function rightJoin($condition) - { - return $this->join('RIGHT', $condition); - } - - /** - * Add a single column, or array of columns to the SELECT clause of the query. - * - * Note that you must not mix insert, update, delete and select method calls when building a query. - * The select method can, however, be called multiple times in the same query. - * - * Usage: - * $query->select('a.*')->select('b.id'); - * $query->select(array('a.*', 'b.id')); - * - * @param array|string $columns A string or an array of field names. - * - * @return $this - * - * @since 1.0 - */ - public function select($columns) - { - $this->type = 'select'; - - if (is_null($this->select)) - { - $this->select = new Query\QueryElement('SELECT', $columns); - } - else - { - $this->select->append($columns); - } - - return $this; - } - - /** - * Add a single condition string, or an array of strings to the SET clause of the query. - * - * Usage: - * $query->set('a = 1')->set('b = 2'); - * $query->set(array('a = 1', 'b = 2'); - * - * @param array|string $conditions A string or array of string conditions. - * @param string $glue The glue by which to join the condition strings. Defaults to ,. - * Note that the glue is set on first use and cannot be changed. - * - * @return $this - * - * @since 1.0 - */ - public function set($conditions, $glue = ',') - { - if (is_null($this->set)) - { - $glue = strtoupper($glue); - $this->set = new Query\QueryElement('SET', $conditions, PHP_EOL . "\t$glue "); - } - else - { - $this->set->append($conditions); - } - - return $this; - } - - /** - * Allows a direct query to be provided to the database driver's setQuery() method, but still allow queries - * to have bounded variables. - * - * Usage: - * $query->setQuery('select * from #__users'); - * - * @param DatabaseQuery|string $sql A SQL query string or DatabaseQuery object - * - * @return $this - * - * @since 1.0 - */ - public function setQuery($sql) - { - $this->sql = $sql; - - return $this; - } - - /** - * Add a table name to the UPDATE clause of the query. - * - * Note that you must not mix insert, update, delete and select method calls when building a query. - * - * Usage: - * $query->update('#__foo')->set(...); - * - * @param string $table A table to update. - * - * @return $this - * - * @since 1.0 - */ - public function update($table) - { - $this->type = 'update'; - $this->update = new Query\QueryElement('UPDATE', $table); - - return $this; - } - - /** - * Adds a tuple, or array of tuples that would be used as values for an INSERT INTO statement. - * - * Usage: - * $query->values('1,2,3')->values('4,5,6'); - * $query->values(array('1,2,3', '4,5,6')); - * - * @param array|string $values A single tuple, or array of tuples. - * - * @return $this - * - * @since 1.0 - */ - public function values($values) - { - if (is_null($this->values)) - { - $this->values = new Query\QueryElement('()', $values, '),('); - } - else - { - $this->values->append($values); - } - - return $this; - } - - /** - * Add a single condition, or an array of conditions to the WHERE clause of the query. - * - * Usage: - * $query->where('a = 1')->where('b = 2'); - * $query->where(array('a = 1', 'b = 2')); - * - * @param array|string $conditions A string or array of where conditions. - * @param string $glue The glue by which to join the conditions. Defaults to AND. - * Note that the glue is set on first use and cannot be changed. - * - * @return $this - * - * @since 1.0 - */ - public function where($conditions, $glue = 'AND') - { - if (is_null($this->where)) - { - $glue = strtoupper($glue); - $this->where = new Query\QueryElement('WHERE', $conditions, " $glue "); - } - else - { - $this->where->append($conditions); - } - - return $this; - } - - /** - * Add a WHERE IN statement to the query - * - * Usage - * $query->whereIn('id', [1, 2, 3]); - * - * @param string $keyName key name for the where clause - * @param array $keyValues array of values to be matched - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function whereIn($keyName, $keyValues) - { - return $this->where( - $keyName . ' IN (' . implode(', ', $keyValues) . ')' - ); - } - - /** - * Extend the WHERE clause with a single condition or an array of conditions, with a potentially - * different logical operator from the one in the current WHERE clause. - * - * Usage: - * $query->where(array('a = 1', 'b = 2'))->extendWhere('XOR', array('c = 3', 'd = 4')); - * will produce: WHERE ((a = 1 AND b = 2) XOR (c = 3 AND d = 4) - * - * @param string $outerGlue The glue by which to join the conditions to the current WHERE conditions. - * @param mixed $conditions A string or array of WHERE conditions. - * @param string $innerGlue The glue by which to join the conditions. Defaults to AND. - * - * @return $this - * - * @since 1.3.0 - */ - public function extendWhere($outerGlue, $conditions, $innerGlue = 'AND') - { - // Replace the current WHERE with a new one which has the old one as an unnamed child. - $this->where = new Query\QueryElement('WHERE', $this->where->setName('()'), " $outerGlue "); - - // Append the new conditions as a new unnamed child. - $this->where->append(new Query\QueryElement('()', $conditions, " $innerGlue ")); - - return $this; - } - - /** - * Extend the WHERE clause with an OR and a single condition or an array of conditions. - * - * Usage: - * $query->where(array('a = 1', 'b = 2'))->orWhere(array('c = 3', 'd = 4')); - * will produce: WHERE ((a = 1 AND b = 2) OR (c = 3 AND d = 4) - * - * @param mixed $conditions A string or array of WHERE conditions. - * @param string $glue The glue by which to join the conditions. Defaults to AND. - * - * @return $this - * - * @since 1.3.0 - */ - public function orWhere($conditions, $glue = 'AND') - { - return $this->extendWhere('OR', $conditions, $glue); - } - - /** - * Extend the WHERE clause with an AND and a single condition or an array of conditions. - * - * Usage: - * $query->where(array('a = 1', 'b = 2'))->andWhere(array('c = 3', 'd = 4')); - * will produce: WHERE ((a = 1 AND b = 2) AND (c = 3 OR d = 4) - * - * @param mixed $conditions A string or array of WHERE conditions. - * @param string $glue The glue by which to join the conditions. Defaults to OR. - * - * @return $this - * - * @since 1.3.0 - */ - public function andWhere($conditions, $glue = 'OR') - { - return $this->extendWhere('AND', $conditions, $glue); - } - - /** - * Method to provide deep copy support to nested objects and arrays when cloning. - * - * @return void - * - * @since 1.0 - */ - public function __clone() - { - foreach ($this as $k => $v) - { - if ($k === 'db') - { - continue; - } - - if (is_object($v) || is_array($v)) - { - $this->{$k} = unserialize(serialize($v)); - } - } - } - - /** - * Combine a select statement to the current query by one of the set operators. - * Operators: UNION, UNION ALL, EXCEPT or INTERSECT. - * - * @param string $name The name of the set operator with parentheses. - * @param DatabaseQuery|string $query The DatabaseQuery object or string. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - protected function merge($name, $query) - { - $this->type = $this->type ?: 'select'; - - $this->merge[] = new Query\QueryElement($name, $query); - - return $this; - } - - /** - * Add a query to UNION with the current query. - * - * Usage: - * $query->union('SELECT name FROM #__foo') - * $query->union('SELECT name FROM #__foo', true) - * - * @param DatabaseQuery|string $query The DatabaseQuery object or string to union. - * @param boolean $distinct True to only return distinct rows from the union. - * - * @return $this - * - * @since 1.0 - */ - public function union($query, $distinct = true) - { - // Set up the name with parentheses, the DISTINCT flag is redundant - return $this->merge($distinct ? 'UNION ()' : 'UNION ALL ()', $query); - } - - /** - * Add a query to UNION ALL with the current query. - * - * Usage: - * $query->unionAll('SELECT name FROM #__foo') - * - * @param DatabaseQuery|string $query The DatabaseQuery object or string to union. - * - * @return $this - * - * @see union - * @since 1.5.0 - */ - public function unionAll($query) - { - return $this->union($query, false); - } - - /** - * Set a single query to the query set. - * On this type of DatabaseQuery you can use union(), unioAll(), order() and setLimit() - * - * Usage: - * $query->querySet($query2->select('name')->from('#__foo')->order('id DESC')->setLimit(1)) - * ->unionAll($query3->select('name')->from('#__foo')->order('id')->setLimit(1)) - * ->order('name') - * ->setLimit(1) - * - * @param DatabaseQuery $query The DatabaseQuery object or string. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function querySet($query) - { - $this->type = 'querySet'; - - $this->querySet = $query; - - return $this; - } - - /** - * Create a DatabaseQuery object of type querySet from current query. - * - * Usage: - * $query->select('name')->from('#__foo')->order('id DESC')->setLimit(1) - * ->toQuerySet() - * ->unionAll($query2->select('name')->from('#__foo')->order('id')->setLimit(1)) - * ->order('name') - * ->setLimit(1) - * - * @return DatabaseQuery A new object of the DatabaseQuery. - * - * @since __DEPLOY_VERSION__ - */ - public function toQuerySet() - { - return (new static($this->db))->querySet($this); - } - - /** - * Find and replace sprintf-like tokens in a format string. - * Each token takes one of the following forms: - * %% - A literal percent character. - * %[t] - Where [t] is a type specifier. - * %[n]$[x] - Where [n] is an argument specifier and [t] is a type specifier. - * - * Types: - * a - Numeric: Replacement text is coerced to a numeric type but not quoted or escaped. - * e - Escape: Replacement text is passed to $this->escape(). - * E - Escape (extra): Replacement text is passed to $this->escape() with true as the second argument. - * n - Name Quote: Replacement text is passed to $this->quoteName(). - * q - Quote: Replacement text is passed to $this->quote(). - * Q - Quote (no escape): Replacement text is passed to $this->quote() with false as the second argument. - * r - Raw: Replacement text is used as-is. (Be careful) - * - * Date Types: - * - Replacement text automatically quoted (use uppercase for Name Quote). - * - Replacement text should be a string in date format or name of a date column. - * y/Y - Year - * m/M - Month - * d/D - Day - * h/H - Hour - * i/I - Minute - * s/S - Second - * - * Invariable Types: - * - Takes no argument. - * - Argument index not incremented. - * t - Replacement text is the result of $this->currentTimestamp(). - * z - Replacement text is the result of $this->nullDate(false). - * Z - Replacement text is the result of $this->nullDate(true). - * - * Usage: - * $query->format('SELECT %1$n FROM %2$n WHERE %3$n = %4$a', 'foo', '#__foo', 'bar', 1); - * Returns: SELECT `foo` FROM `#__foo` WHERE `bar` = 1 - * - * Notes: - * The argument specifier is optional but recommended for clarity. - * The argument index used for unspecified tokens is incremented only when used. - * - * @param string $format The formatting string. - * - * @return string Returns a string produced according to the formatting string. - * - * @since 1.0 - */ - public function format($format) - { - $query = $this; - $args = array_slice(func_get_args(), 1); - array_unshift($args, null); - - $i = 1; - $func = function ($match) use ($query, $args, &$i) - { - if (isset($match[6]) && $match[6] === '%') - { - return '%'; - } - - // No argument required, do not increment the argument index. - switch ($match[5]) - { - case 't': - return $query->currentTimestamp(); - break; - - case 'z': - return $query->nullDate(false); - break; - - case 'Z': - return $query->nullDate(true); - break; - } - - // Increment the argument index only if argument specifier not provided. - $index = is_numeric($match[4]) ? (int) $match[4] : $i++; - - if (!$index || !isset($args[$index])) - { - // TODO - What to do? sprintf() throws a Warning in these cases. - $replacement = ''; - } - else - { - $replacement = $args[$index]; - } - - switch ($match[5]) - { - case 'a': - return 0 + $replacement; - break; - - case 'e': - return $query->escape($replacement); - break; - - case 'E': - return $query->escape($replacement, true); - break; - - case 'n': - return $query->quoteName($replacement); - break; - - case 'q': - return $query->quote($replacement); - break; - - case 'Q': - return $query->quote($replacement, false); - break; - - case 'r': - return $replacement; - break; - - // Dates - case 'y': - return $query->year($query->quote($replacement)); - break; - - case 'Y': - return $query->year($query->quoteName($replacement)); - break; - - case 'm': - return $query->month($query->quote($replacement)); - break; - - case 'M': - return $query->month($query->quoteName($replacement)); - break; - - case 'd': - return $query->day($query->quote($replacement)); - break; - - case 'D': - return $query->day($query->quoteName($replacement)); - break; - - case 'h': - return $query->hour($query->quote($replacement)); - break; - - case 'H': - return $query->hour($query->quoteName($replacement)); - break; - - case 'i': - return $query->minute($query->quote($replacement)); - break; - - case 'I': - return $query->minute($query->quoteName($replacement)); - break; - - case 's': - return $query->second($query->quote($replacement)); - break; - - case 'S': - return $query->second($query->quoteName($replacement)); - break; - } - - return ''; - }; - - /** - * Regexp to find an replace all tokens. - * Matched fields: - * 0: Full token - * 1: Everything following '%' - * 2: Everything following '%' unless '%' - * 3: Argument specifier and '$' - * 4: Argument specifier - * 5: Type specifier - * 6: '%' if full token is '%%' - */ - return preg_replace_callback('#%(((([\d]+)\$)?([aeEnqQryYmMdDhHiIsStzZ]))|(%))#', $func, $format); - } - - /** - * Validate arguments which are passed to selectRowNumber method and set up common variables. - * - * @param string $orderBy An expression of ordering for window function. - * @param string $orderColumnAlias An alias for new ordering column. - * - * @return void - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - protected function validateRowNumber($orderBy, $orderColumnAlias) - { - if ($this->selectRowNumber) - { - throw new \RuntimeException("Method 'selectRowNumber' can be called only once per instance."); - } - - $this->type = 'select'; - - $this->selectRowNumber = [ - 'orderBy' => $orderBy, - 'orderColumnAlias' => $orderColumnAlias, - ]; - } - - /** - * Return the number of the current row. - * - * Usage: - * $query->select('id'); - * $query->selectRowNumber('ordering,publish_up DESC', 'new_ordering'); - * $query->from('#__content'); - * - * @param string $orderBy An expression of ordering for window function. - * @param string $orderColumnAlias An alias for new ordering column. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function selectRowNumber($orderBy, $orderColumnAlias) - { - $this->validateRowNumber($orderBy, $orderColumnAlias); - - return $this->select("ROW_NUMBER() OVER (ORDER BY $orderBy) AS $orderColumnAlias"); - } -} diff --git a/libraries/vendor/joomla/database/src/Event/ConnectionEvent.php b/libraries/vendor/joomla/database/src/Event/ConnectionEvent.php deleted file mode 100644 index b85134139b822..0000000000000 --- a/libraries/vendor/joomla/database/src/Event/ConnectionEvent.php +++ /dev/null @@ -1,55 +0,0 @@ -driver = $driver; - } - - /** - * Retrieve the DatabaseInterface object attached to this event. - * - * @return DatabaseInterface - * - * @since __DEPLOY_VERSION__ - */ - public function getDriver(): DatabaseInterface - { - return $this->driver; - } -} diff --git a/libraries/vendor/joomla/database/src/Exception/ConnectionFailureException.php b/libraries/vendor/joomla/database/src/Exception/ConnectionFailureException.php deleted file mode 100644 index b1f3f9ce76a79..0000000000000 --- a/libraries/vendor/joomla/database/src/Exception/ConnectionFailureException.php +++ /dev/null @@ -1,34 +0,0 @@ -code = $code; - } -} diff --git a/libraries/vendor/joomla/database/src/Exception/ExecutionFailureException.php b/libraries/vendor/joomla/database/src/Exception/ExecutionFailureException.php deleted file mode 100644 index 27156e7e429e6..0000000000000 --- a/libraries/vendor/joomla/database/src/Exception/ExecutionFailureException.php +++ /dev/null @@ -1,56 +0,0 @@ -code = $code; - $this->query = $query; - } - - /** - * Get the SQL statement that was executed - * - * @return string - * - * @since 1.5.0 - */ - public function getQuery() - { - return $this->query; - } -} diff --git a/libraries/vendor/joomla/database/src/Exception/PrepareStatementFailureException.php b/libraries/vendor/joomla/database/src/Exception/PrepareStatementFailureException.php deleted file mode 100644 index d842c2b4bfc1c..0000000000000 --- a/libraries/vendor/joomla/database/src/Exception/PrepareStatementFailureException.php +++ /dev/null @@ -1,34 +0,0 @@ -code = $code; - } -} diff --git a/libraries/vendor/joomla/database/src/Exception/UnsupportedAdapterException.php b/libraries/vendor/joomla/database/src/Exception/UnsupportedAdapterException.php deleted file mode 100644 index 9f94742fb7ba9..0000000000000 --- a/libraries/vendor/joomla/database/src/Exception/UnsupportedAdapterException.php +++ /dev/null @@ -1,18 +0,0 @@ -monitors[] = $monitor; - } - - /** - * Act on a query being started. - * - * @param string $sql The SQL to be executed. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function startQuery(string $sql) - { - foreach ($this->monitors as $monitor) - { - $monitor->startQuery($sql); - } - } - - /** - * Act on a query being stopped. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function stopQuery() - { - foreach ($this->monitors as $monitor) - { - $monitor->stopQuery(); - } - } -} diff --git a/libraries/vendor/joomla/database/src/Monitor/LoggingMonitor.php b/libraries/vendor/joomla/database/src/Monitor/LoggingMonitor.php deleted file mode 100644 index 69057b968f1c3..0000000000000 --- a/libraries/vendor/joomla/database/src/Monitor/LoggingMonitor.php +++ /dev/null @@ -1,56 +0,0 @@ -logger) - { - // Add the query to the object queue. - $this->logger->info( - 'Query Executed: {sql}', - ['sql' => $sql, 'trace' => debug_backtrace()] - ); - } - } - - /** - * Act on a query being stopped. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function stopQuery() - { - // Nothing to do - } -} diff --git a/libraries/vendor/joomla/database/src/Mysql/MysqlDriver.php b/libraries/vendor/joomla/database/src/Mysql/MysqlDriver.php deleted file mode 100644 index 87c3921fae5e6..0000000000000 --- a/libraries/vendor/joomla/database/src/Mysql/MysqlDriver.php +++ /dev/null @@ -1,621 +0,0 @@ -charset = $options['charset']; - - /* - * Pre-populate the UTF-8 Multibyte compatibility flag. Unfortunately PDO won't report the server version unless we're connected to it, - * and we cannot connect to it unless we know if it supports utf8mb4, which requires us knowing the server version. Because of this - * chicken and egg issue, we _assume_ it's supported and we'll just catch any problems at connection time. - */ - $this->utf8mb4 = $options['charset'] === 'utf8mb4'; - - // Finalize initialisation. - parent::__construct($options); - } - - /** - * Connects to the database if needed. - * - * @return void Returns void if the database connected successfully. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function connect() - { - if ($this->getConnection()) - { - return; - } - - try - { - // Try to connect to MySQL - parent::connect(); - } - catch (ConnectionFailureException $e) - { - // If the connection failed, but not because of the wrong character set, then bubble up the exception. - if (!$this->utf8mb4) - { - throw $e; - } - - /* - * Otherwise, try connecting again without using utf8mb4 and see if maybe that was the problem. If the connection succeeds, then we - * will have learned that the client end of the connection does not support utf8mb4. - */ - $this->utf8mb4 = false; - $this->options['charset'] = 'utf8'; - - parent::connect(); - } - - if ($this->utf8mb4) - { - // At this point we know the client supports utf8mb4. Now we must check if the server supports utf8mb4 as well. - $serverVersion = $this->getVersion(); - $this->utf8mb4 = version_compare($serverVersion, '5.5.3', '>='); - - if (!$this->utf8mb4) - { - // Reconnect with the utf8 character set. - parent::disconnect(); - $this->options['charset'] = 'utf8'; - parent::connect(); - } - } - - // If needed, set the sql modes. - if ($this->options['sqlModes'] !== []) - { - $this->connection->query('SET @@SESSION.sql_mode = \'' . implode(',', $this->options['sqlModes']) . '\';'); - } - - $this->setOption(\PDO::ATTR_EMULATE_PREPARES, true); - } - - /** - * Automatically downgrade a CREATE TABLE or ALTER TABLE query from utf8mb4 (UTF-8 Multibyte) to plain utf8. - * - * Used when the server doesn't support UTF-8 Multibyte. - * - * @param string $query The query to convert - * - * @return string The converted query - * - * @since 1.4.0 - */ - public function convertUtf8mb4QueryToUtf8($query) - { - if ($this->hasUTF8mb4Support()) - { - return $query; - } - - // If it's not an ALTER TABLE or CREATE TABLE command there's nothing to convert - $beginningOfQuery = substr($query, 0, 12); - $beginningOfQuery = strtoupper($beginningOfQuery); - - if (!in_array($beginningOfQuery, array('ALTER TABLE ', 'CREATE TABLE'), true)) - { - return $query; - } - - // Replace utf8mb4 with utf8 - return str_replace('utf8mb4', 'utf8', $query); - } - - /** - * Test to see if the MySQL connector is available. - * - * @return boolean True on success, false otherwise. - * - * @since 1.0 - */ - public static function isSupported() - { - return class_exists('\\PDO') && in_array('mysql', \PDO::getAvailableDrivers(), true); - } - - /** - * Drops a table from the database. - * - * @param string $tableName The name of the database table to drop. - * @param boolean $ifExists Optionally specify that the table must exist before it is dropped. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function dropTable($tableName, $ifExists = true) - { - $this->connect(); - - $this->setQuery('DROP TABLE ' . ($ifExists ? 'IF EXISTS ' : '') . $this->quoteName($tableName)) - ->execute(); - - return $this; - } - - /** - * Select a database for use. - * - * @param string $database The name of the database to select for use. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function select($database) - { - $this->connect(); - - $this->setQuery('USE ' . $this->quoteName($database)) - ->execute(); - - return $this; - } - - /** - * Return the query string to alter the database character set. - * - * @param string $dbName The database name - * - * @return string The query that alter the database query string - * - * @since __DEPLOY_VERSION__ - */ - public function getAlterDbCharacterSet($dbName) - { - $charset = $this->utf8mb4 ? 'utf8mb4' : 'utf8'; - - return 'ALTER DATABASE ' . $this->quoteName($dbName) . ' CHARACTER SET `' . $charset . '`'; - } - - /** - * Method to get the database collation in use by sampling a text field of a table in the database. - * - * @return mixed The collation in use by the database (string) or boolean false if not supported. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getCollation() - { - $this->connect(); - - return $this->setQuery('SELECT @@collation_database;')->loadResult(); - } - - /** - * Method to get the database connection collation in use by sampling a text field of a table in the database. - * - * @return mixed The collation in use by the database connection (string) or boolean false if not supported. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function getConnectionCollation() - { - $this->connect(); - - return $this->setQuery('SELECT @@collation_connection;')->loadResult(); - } - - /** - * Return the query string to create new Database. - * - * @param stdClass $options Object used to pass user and database name to database driver. This object must have "db_name" and "db_user" set. - * @param boolean $utf True if the database supports the UTF-8 character set. - * - * @return string The query that creates database - * - * @since __DEPLOY_VERSION__ - */ - protected function getCreateDatabaseQuery($options, $utf) - { - if ($utf) - { - $charset = $this->utf8mb4 ? 'utf8mb4' : 'utf8'; - $collation = $charset . '_unicode_ci'; - - return 'CREATE DATABASE ' . $this->quoteName($options->db_name) . ' CHARACTER SET `' . $charset . '` COLLATE `' . $collation . '`'; - } - - return 'CREATE DATABASE ' . $this->quoteName($options->db_name); - } - - /** - * Shows the table CREATE statement that creates the given tables. - * - * @param array|string $tables A table name or a list of table names. - * - * @return array A list of the create SQL for the tables. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableCreate($tables) - { - $this->connect(); - - // Initialise variables. - $result = []; - - // Sanitize input to an array and iterate over the list. - $tables = (array) $tables; - - foreach ($tables as $table) - { - $row = $this->setQuery('SHOW CREATE TABLE ' . $this->quoteName($table))->loadRow(); - - // Populate the result array based on the create statements. - $result[$table] = $row[1]; - } - - return $result; - } - - /** - * Retrieves field information about a given table. - * - * @param string $table The name of the database table. - * @param boolean $typeOnly True to only return field types. - * - * @return array An array of fields for the database table. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableColumns($table, $typeOnly = true) - { - $this->connect(); - - $result = []; - - // Set the query to get the table fields statement. - $fields = $this->setQuery('SHOW FULL COLUMNS FROM ' . $this->quoteName($table))->loadObjectList(); - - // If we only want the type as the value add just that to the list. - if ($typeOnly) - { - foreach ($fields as $field) - { - $result[$field->Field] = preg_replace('/[(0-9)]/', '', $field->Type); - } - } - // If we want the whole field data object add that to the list. - else - { - foreach ($fields as $field) - { - $result[$field->Field] = $field; - } - } - - return $result; - } - - /** - * Get the details list of keys for a table. - * - * @param string $table The name of the table. - * - * @return array An array of the column specification for the table. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableKeys($table) - { - $this->connect(); - - // Get the details columns information. - return $this->setQuery('SHOW KEYS FROM ' . $this->quoteName($table))->loadObjectList(); - } - - /** - * Method to get an array of all tables in the database. - * - * @return array An array of all the tables in the database. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableList() - { - $this->connect(); - - // Set the query to get the tables statement. - return $this->setQuery('SHOW TABLES')->loadColumn(); - } - - /** - * Determine whether the database engine support the UTF-8 Multibyte (utf8mb4) character encoding. - * - * @return boolean True if the database engine supports UTF-8 Multibyte. - * - * @since __DEPLOY_VERSION__ - */ - public function hasUTF8mb4Support() - { - return $this->utf8mb4; - } - - /** - * Locks a table in the database. - * - * @param string $table The name of the table to unlock. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function lockTable($table) - { - $this->setQuery('LOCK TABLES ' . $this->quoteName($table) . ' WRITE') - ->execute(); - - return $this; - } - - /** - * Renames a table in the database. - * - * @param string $oldTable The name of the table to be renamed - * @param string $newTable The new name for the table. - * @param string $backup Not used by MySQL. - * @param string $prefix Not used by MySQL. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function renameTable($oldTable, $newTable, $backup = null, $prefix = null) - { - $this->setQuery('RENAME TABLE ' . $this->quoteName($oldTable) . ' TO ' . $this->quoteName($newTable)) - ->execute(); - - return $this; - } - - /** - * Method to escape a string for usage in an SQL statement. - * - * Oracle escaping reference: - * http://www.orafaq.com/wiki/SQL_FAQ#How_does_one_escape_special_characters_when_writing_SQL_queries.3F - * - * SQLite escaping notes: - * http://www.sqlite.org/faq.html#q14 - * - * Method body is as implemented by the Zend Framework - * - * Note: Using query objects with bound variables is preferable to the below. - * - * @param string $text The string to be escaped. - * @param boolean $extra Unused optional parameter to provide extra escaping. - * - * @return string The escaped string. - * - * @since 1.0 - */ - public function escape($text, $extra = false) - { - if (is_int($text)) - { - return $text; - } - - if (is_float($text)) - { - // Force the dot as a decimal point. - return str_replace(',', '.', $text); - } - - $this->connect(); - - $result = substr($this->connection->quote($text), 1, -1); - - if ($extra) - { - $result = addcslashes($result, '%_'); - } - - return $result; - } - - /** - * Unlocks tables in the database. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function unlockTables() - { - $this->setQuery('UNLOCK TABLES') - ->execute(); - - return $this; - } - - /** - * Method to commit a transaction. - * - * @param boolean $toSavepoint If true, commit to the last savepoint. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionCommit($toSavepoint = false) - { - $this->connect(); - - if (!$toSavepoint || $this->transactionDepth <= 1) - { - parent::transactionCommit($toSavepoint); - } - else - { - $this->transactionDepth--; - } - } - - /** - * Method to roll back a transaction. - * - * @param boolean $toSavepoint If true, rollback to the last savepoint. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionRollback($toSavepoint = false) - { - $this->connect(); - - if (!$toSavepoint || $this->transactionDepth <= 1) - { - parent::transactionRollback($toSavepoint); - } - else - { - $savepoint = 'SP_' . ($this->transactionDepth - 1); - $this->setQuery('ROLLBACK TO SAVEPOINT ' . $this->quoteName($savepoint)); - - if ($this->execute()) - { - $this->transactionDepth--; - } - } - } - - /** - * Method to initialize a transaction. - * - * @param boolean $asSavepoint If true and a transaction is already active, a savepoint will be created. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionStart($asSavepoint = false) - { - $this->connect(); - - if (!$asSavepoint || !$this->transactionDepth) - { - parent::transactionStart($asSavepoint); - } - else - { - $savepoint = 'SP_' . $this->transactionDepth; - $this->setQuery('SAVEPOINT ' . $this->quoteName($savepoint)); - - if ($this->execute()) - { - $this->transactionDepth++; - } - } - } -} diff --git a/libraries/vendor/joomla/database/src/Mysql/MysqlExporter.php b/libraries/vendor/joomla/database/src/Mysql/MysqlExporter.php deleted file mode 100644 index c9d0479ec91be..0000000000000 --- a/libraries/vendor/joomla/database/src/Mysql/MysqlExporter.php +++ /dev/null @@ -1,113 +0,0 @@ -'; - $buffer[] = ''; - $buffer[] = ' '; - - $buffer = array_merge($buffer, $this->buildXmlStructure()); - - $buffer[] = ' '; - $buffer[] = ''; - - return implode("\n", $buffer); - } - - /** - * Builds the XML structure to export. - * - * @return array An array of XML lines (strings). - * - * @since 1.0 - * @throws \Exception if an error occurs. - */ - protected function buildXmlStructure() - { - $buffer = []; - - foreach ($this->from as $table) - { - // Replace the magic prefix if found. - $table = $this->getGenericTableName($table); - - // Get the details columns information. - $fields = $this->db->getTableColumns($table, false); - $keys = $this->db->getTableKeys($table); - - $buffer[] = ' '; - - foreach ($fields as $field) - { - $buffer[] = ' Default) ? ' Default="' . $field->Default . '"' : '') . ' Extra="' . $field->Extra . '"' . - ' />'; - } - - foreach ($keys as $key) - { - $buffer[] = ' '; - } - - $buffer[] = ' '; - } - - return $buffer; - } - - /** - * Checks if all data and options are in order prior to exporting. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function check() - { - // Check if the db connector has been set. - if (!($this->db instanceof MysqlDriver)) - { - throw new \RuntimeException('Database connection wrong type.'); - } - - // Check if the tables have been specified. - if (empty($this->from)) - { - throw new \RuntimeException('ERROR: No Tables Specified'); - } - - return $this; - } -} diff --git a/libraries/vendor/joomla/database/src/Mysql/MysqlImporter.php b/libraries/vendor/joomla/database/src/Mysql/MysqlImporter.php deleted file mode 100644 index 19a3bfedb0cce..0000000000000 --- a/libraries/vendor/joomla/database/src/Mysql/MysqlImporter.php +++ /dev/null @@ -1,432 +0,0 @@ -db instanceof MysqlDriver)) - { - throw new \RuntimeException('Database connection wrong type.'); - } - - // Check if the tables have been specified. - if (empty($this->from)) - { - throw new \RuntimeException('ERROR: No Tables Specified'); - } - - return $this; - } - - /** - * Get the SQL syntax to add a key. - * - * @param string $table The table name. - * @param array $keys An array of the fields pertaining to this key. - * - * @return string - * - * @since 1.0 - */ - protected function getAddKeySql($table, $keys) - { - return 'ALTER TABLE ' . $this->db->quoteName($table) . ' ADD ' . $this->getKeySql($keys); - } - - /** - * Get alters for table if there is a difference. - * - * @param \SimpleXMLElement $structure The XML structure pf the table. - * - * @return array - * - * @since 1.0 - */ - protected function getAlterTableSql(\SimpleXMLElement $structure) - { - // Initialise variables. - $table = $this->getRealTableName($structure['name']); - $oldFields = $this->db->getTableColumns($table); - $oldKeys = $this->db->getTableKeys($table); - $alters = []; - - // Get the fields and keys from the XML that we are aiming for. - $newFields = $structure->xpath('field'); - $newKeys = $structure->xpath('key'); - - // Loop through each field in the new structure. - foreach ($newFields as $field) - { - $fName = (string) $field['Field']; - - if (isset($oldFields[$fName])) - { - // The field exists, check it's the same. - $column = $oldFields[$fName]; - - // Test whether there is a change. - $change = ((string) $field['Type'] !== $column->Type) || ((string) $field['Null'] !== $column->Null) - || ((string) $field['Default'] !== $column->Default) || ((string) $field['Extra'] !== $column->Extra); - - if ($change) - { - $alters[] = $this->getChangeColumnSql($table, $field); - } - - // Unset this field so that what we have left are fields that need to be removed. - unset($oldFields[$fName]); - } - else - { - // The field is new. - $alters[] = $this->getAddColumnSql($table, $field); - } - } - - // Any columns left are orphans - foreach ($oldFields as $name => $column) - { - // Delete the column. - $alters[] = $this->getDropColumnSql($table, $name); - } - - // Get the lookups for the old and new keys. - $oldLookup = $this->getKeyLookup($oldKeys); - $newLookup = $this->getKeyLookup($newKeys); - - // Loop through each key in the new structure. - foreach ($newLookup as $name => $keys) - { - // Check if there are keys on this field in the existing table. - if (isset($oldLookup[$name])) - { - $same = true; - $newCount = count($newLookup[$name]); - $oldCount = count($oldLookup[$name]); - - // There is a key on this field in the old and new tables. Are they the same? - if ($newCount === $oldCount) - { - // Need to loop through each key and do a fine grained check. - for ($i = 0; $i < $newCount; $i++) - { - $same = (((string) $newLookup[$name][$i]['Non_unique'] === $oldLookup[$name][$i]->Non_unique) - && ((string) $newLookup[$name][$i]['Column_name'] === $oldLookup[$name][$i]->Column_name) - && ((string) $newLookup[$name][$i]['Seq_in_index'] === $oldLookup[$name][$i]->Seq_in_index) - && ((string) $newLookup[$name][$i]['Collation'] === $oldLookup[$name][$i]->Collation) - && ((string) $newLookup[$name][$i]['Index_type'] === $oldLookup[$name][$i]->Index_type)); - - /* - Debug. - echo '
';
-						echo '
Non_unique: '. - ((string) $newLookup[$name][$i]['Non_unique'] == $oldLookup[$name][$i]->Non_unique ? 'Pass' : 'Fail').' '. - (string) $newLookup[$name][$i]['Non_unique'].' vs '.$oldLookup[$name][$i]->Non_unique; - echo '
Column_name: '. - ((string) $newLookup[$name][$i]['Column_name'] == $oldLookup[$name][$i]->Column_name ? 'Pass' : 'Fail').' '. - (string) $newLookup[$name][$i]['Column_name'].' vs '.$oldLookup[$name][$i]->Column_name; - echo '
Seq_in_index: '. - ((string) $newLookup[$name][$i]['Seq_in_index'] == $oldLookup[$name][$i]->Seq_in_index ? 'Pass' : 'Fail').' '. - (string) $newLookup[$name][$i]['Seq_in_index'].' vs '.$oldLookup[$name][$i]->Seq_in_index; - echo '
Collation: '. - ((string) $newLookup[$name][$i]['Collation'] == $oldLookup[$name][$i]->Collation ? 'Pass' : 'Fail').' '. - (string) $newLookup[$name][$i]['Collation'].' vs '.$oldLookup[$name][$i]->Collation; - echo '
Index_type: '. - ((string) $newLookup[$name][$i]['Index_type'] == $oldLookup[$name][$i]->Index_type ? 'Pass' : 'Fail').' '. - (string) $newLookup[$name][$i]['Index_type'].' vs '.$oldLookup[$name][$i]->Index_type; - echo '
Same = '.($same ? 'true' : 'false'); - echo '
'; - */ - - if (!$same) - { - // Break out of the loop. No need to check further. - break; - } - } - } - else - { - // Count is different, just drop and add. - $same = false; - } - - if (!$same) - { - $alters[] = $this->getDropKeySql($table, $name); - $alters[] = $this->getAddKeySql($table, $keys); - } - - // Unset this field so that what we have left are fields that need to be removed. - unset($oldLookup[$name]); - } - else - { - // This is a new key. - $alters[] = $this->getAddKeySql($table, $keys); - } - } - - // Any keys left are orphans. - foreach ($oldLookup as $name => $keys) - { - if (strtoupper($name) === 'PRIMARY') - { - $alters[] = $this->getDropPrimaryKeySql($table); - } - else - { - $alters[] = $this->getDropKeySql($table, $name); - } - } - - return $alters; - } - - /** - * Get the syntax to alter a column. - * - * @param string $table The name of the database table to alter. - * @param \SimpleXMLElement $field The XML definition for the field. - * - * @return string - * - * @since 1.0 - */ - protected function getChangeColumnSql($table, \SimpleXMLElement $field) - { - return 'ALTER TABLE ' . $this->db->quoteName($table) . ' CHANGE COLUMN ' . $this->db->quoteName((string) $field['Field']) . ' ' - . $this->getColumnSql($field); - } - - /** - * Get the SQL syntax for a single column that would be included in a table create or alter statement. - * - * @param \SimpleXMLElement $field The XML field definition. - * - * @return string - * - * @since 1.0 - */ - protected function getColumnSql(\SimpleXMLElement $field) - { - // Initialise variables. - // TODO Incorporate into parent class and use $this. - $blobs = ['text', 'smalltext', 'mediumtext', 'largetext']; - - $fName = (string) $field['Field']; - $fType = (string) $field['Type']; - $fNull = (string) $field['Null']; - $fDefault = isset($field['Default']) ? (string) $field['Default'] : null; - $fExtra = (string) $field['Extra']; - - $sql = $this->db->quoteName($fName) . ' ' . $fType; - - if ($fNull === 'NO') - { - if ($fDefault === null || in_array($fType, $blobs, true)) - { - $sql .= ' NOT NULL'; - } - else - { - // TODO Don't quote numeric values. - $sql .= ' NOT NULL DEFAULT ' . $this->db->quote($fDefault); - } - } - else - { - if ($fDefault === null) - { - $sql .= ' DEFAULT NULL'; - } - else - { - // TODO Don't quote numeric values. - $sql .= ' DEFAULT ' . $this->db->quote($fDefault); - } - } - - if ($fExtra) - { - $sql .= ' ' . strtoupper($fExtra); - } - - return $sql; - } - - /** - * Get the SQL syntax to drop a key. - * - * @param string $table The table name. - * @param string $name The name of the key to drop. - * - * @return string - * - * @since 1.0 - */ - protected function getDropKeySql($table, $name) - { - return 'ALTER TABLE ' . $this->db->quoteName($table) . ' DROP KEY ' . $this->db->quoteName($name); - } - - /** - * Get the SQL syntax to drop a key. - * - * @param string $table The table name. - * - * @return string - * - * @since 1.0 - */ - protected function getDropPrimaryKeySql($table) - { - return 'ALTER TABLE ' . $this->db->quoteName($table) . ' DROP PRIMARY KEY'; - } - - /** - * Get the details list of keys for a table. - * - * @param array $keys An array of objects that comprise the keys for the table. - * - * @return array The lookup array. array({key name} => array(object, ...)) - * - * @since 1.0 - * @throws \Exception - */ - protected function getKeyLookup($keys) - { - // First pass, create a lookup of the keys. - $lookup = []; - - foreach ($keys as $key) - { - if ($key instanceof \SimpleXMLElement) - { - $kName = (string) $key['Key_name']; - } - else - { - $kName = $key->Key_name; - } - - if (empty($lookup[$kName])) - { - $lookup[$kName] = []; - } - - $lookup[$kName][] = $key; - } - - return $lookup; - } - - /** - * Get the SQL syntax for a key. - * - * @param array $columns An array of SimpleXMLElement objects comprising the key. - * - * @return string - * - * @since 1.0 - */ - protected function getKeySql($columns) - { - // TODO Error checking on array and element types. - - $kNonUnique = (string) $columns[0]['Non_unique']; - $kName = (string) $columns[0]['Key_name']; - $kColumn = (string) $columns[0]['Column_name']; - - $prefix = ''; - - if ($kName === 'PRIMARY') - { - $prefix = 'PRIMARY '; - } - elseif ($kNonUnique == 0) - { - $prefix = 'UNIQUE '; - } - - $nColumns = count($columns); - $kColumns = []; - - if ($nColumns === 1) - { - $kColumns[] = $this->db->quoteName($kColumn); - } - else - { - foreach ($columns as $column) - { - $kColumns[] = (string) $column['Column_name']; - } - } - - return $prefix . 'KEY ' . ($kName !== 'PRIMARY' ? $this->db->quoteName($kName) : '') . ' (' . implode(',', $kColumns) . ')'; - } - - /** - * Get the SQL syntax to add a table. - * - * @param \SimpleXMLElement $table The table information. - * - * @return string - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - protected function xmlToCreate(\SimpleXMLElement $table) - { - $existingTables = $this->db->getTableList(); - $tableName = (string) $table['name']; - - if (in_array($tableName, $existingTables)) - { - throw new \RuntimeException('The table you are trying to create already exists'); - } - - $createTableStatement = 'CREATE TABLE ' . $this->db->quoteName($tableName) . ' ('; - - foreach ($table->xpath('field') as $field) - { - $createTableStatement .= $this->getColumnSQL($field) . ', '; - } - - foreach ($table->xpath('key') as $key) - { - $createTableStatement .= $this->getKeySQL([$key]) . ', '; - } - - $createTableStatement = rtrim($createTableStatement, ', '); - - $createTableStatement .= ')'; - - return $createTableStatement; - } -} diff --git a/libraries/vendor/joomla/database/src/Mysql/MysqlQuery.php b/libraries/vendor/joomla/database/src/Mysql/MysqlQuery.php deleted file mode 100644 index 8158bc9171f07..0000000000000 --- a/libraries/vendor/joomla/database/src/Mysql/MysqlQuery.php +++ /dev/null @@ -1,71 +0,0 @@ -type) - { - case 'select': - if ($this->selectRowNumber) - { - $orderBy = $this->selectRowNumber['orderBy']; - $tmpOffset = $this->offset; - $tmpLimit = $this->limit; - $this->offset = 0; - $this->limit = 0; - $tmpOrder = $this->order; - $this->order = null; - $query = parent::__toString(); - $this->order = $tmpOrder; - $this->offset = $tmpOffset; - $this->limit = $tmpLimit; - - // Add support for second order by, offset and limit - $query = PHP_EOL . 'SELECT * FROM (' . $query . PHP_EOL . "ORDER BY $orderBy" . PHP_EOL . ') w'; - - if ($this->order) - { - $query .= (string) $this->order; - } - - return $this->processLimit($query, $this->limit, $this->offset); - } - } - - return parent::__toString(); - } -} diff --git a/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php b/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php deleted file mode 100644 index 9b3868a7f63ef..0000000000000 --- a/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php +++ /dev/null @@ -1,938 +0,0 @@ -connection) - { - return; - } - - // Make sure the MySQLi extension for PHP is installed and enabled. - if (!static::isSupported()) - { - throw new \RuntimeException('The MySQLi extension is not available'); - } - - /* - * Unlike mysql_connect(), mysqli_connect() takes the port and socket as separate arguments. Therefore, we - * have to extract them from the host string. - */ - $port = isset($this->options['port']) ? $this->options['port'] : 3306; - - if (preg_match( - '/^(?P((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(:(?P.+))?$/', - $this->options['host'], - $matches - )) - { - // It's an IPv4 address with or without port - $this->options['host'] = $matches['host']; - - if (!empty($matches['port'])) - { - $port = $matches['port']; - } - } - elseif (preg_match('/^(?P\[.*\])(:(?P.+))?$/', $this->options['host'], $matches)) - { - // We assume square-bracketed IPv6 address with or without port, e.g. [fe80:102::2%eth1]:3306 - $this->options['host'] = $matches['host']; - - if (!empty($matches['port'])) - { - $port = $matches['port']; - } - } - elseif (preg_match('/^(?P(\w+:\/{2,3})?[a-z0-9\.\-]+)(:(?P[^:]+))?$/i', $this->options['host'], $matches)) - { - // Named host (e.g example.com or localhost) with or without port - $this->options['host'] = $matches['host']; - - if (!empty($matches['port'])) - { - $port = $matches['port']; - } - } - elseif (preg_match('/^:(?P[^:]+)$/', $this->options['host'], $matches)) - { - // Empty host, just port, e.g. ':3306' - $this->options['host'] = 'localhost'; - $port = $matches['port']; - } - - // ... else we assume normal (naked) IPv6 address, so host and port stay as they are or default - - // Get the port number or socket name - if (is_numeric($port)) - { - $this->options['port'] = (int) $port; - } - else - { - $this->options['socket'] = $port; - } - - // Make sure the MySQLi extension for PHP is installed and enabled. - if (!static::isSupported()) - { - throw new UnsupportedAdapterException('The MySQLi extension is not available'); - } - - $this->connection = mysqli_init(); - - // Attempt to connect to the server, use error suppression to silence warnings and allow us to throw an Exception separately. - $connected = @$this->connection->real_connect( - $this->options['host'], $this->options['user'], $this->options['password'], null, $this->options['port'], $this->options['socket'] - ); - - if (!$connected) - { - throw new ConnectionFailureException( - 'Could not connect to MySQL: ' . $this->connection->connect_error, - $this->connection->connect_errno - ); - } - - // If needed, set the sql modes. - if ($this->options['sqlModes'] !== []) - { - $this->connection->query('SET @@SESSION.sql_mode = \'' . implode(',', $this->options['sqlModes']) . '\';'); - } - - // And read the real sql mode to mitigate changes in mysql > 5.7.+ - $this->options['sqlModes'] = explode(',', $this->setQuery('SELECT @@SESSION.sql_mode;')->loadResult()); - - // If auto-select is enabled select the given database. - if ($this->options['select'] && !empty($this->options['database'])) - { - $this->select($this->options['database']); - } - - $this->utf8mb4 = $this->serverClaimsUtf8mb4Support(); - - // Set charactersets (needed for MySQL 4.1.2+). - $this->utf = $this->setUtf(); - - $this->dispatchEvent(new ConnectionEvent(DatabaseEvents::POST_CONNECT, $this)); - } - - /** - * Automatically downgrade a CREATE TABLE or ALTER TABLE query from utf8mb4 (UTF-8 Multibyte) to plain utf8. - * - * Used when the server doesn't support UTF-8 Multibyte. - * - * @param string $query The query to convert - * - * @return string The converted query - * - * @since 1.4.0 - */ - public function convertUtf8mb4QueryToUtf8($query) - { - if ($this->utf8mb4) - { - return $query; - } - - // If it's not an ALTER TABLE or CREATE TABLE command there's nothing to convert - $beginningOfQuery = substr($query, 0, 12); - $beginningOfQuery = strtoupper($beginningOfQuery); - - if (!in_array($beginningOfQuery, array('ALTER TABLE ', 'CREATE TABLE'), true)) - { - return $query; - } - - // Replace utf8mb4 with utf8 - return str_replace('utf8mb4', 'utf8', $query); - } - - /** - * Disconnects the database. - * - * @return void - * - * @since 1.0 - */ - public function disconnect() - { - // Close the connection. - if (is_callable($this->connection, 'close')) - { - $this->connection->close(); - } - - parent::disconnect(); - } - - /** - * Method to escape a string for usage in an SQL statement. - * - * @param string $text The string to be escaped. - * @param boolean $extra Optional parameter to provide extra escaping. - * - * @return string The escaped string. - * - * @since 1.0 - */ - public function escape($text, $extra = false) - { - if (is_int($text)) - { - return $text; - } - - if (is_float($text)) - { - // Force the dot as a decimal point. - return str_replace(',', '.', $text); - } - - $this->connect(); - - $result = $this->connection->real_escape_string($text); - - if ($extra) - { - $result = addcslashes($result, '%_'); - } - - return $result; - } - - /** - * Test to see if the MySQLi connector is available. - * - * @return boolean True on success, false otherwise. - * - * @since 1.0 - */ - public static function isSupported() - { - return extension_loaded('mysqli'); - } - - /** - * Determines if the connection to the server is active. - * - * @return boolean True if connected to the database engine. - * - * @since 1.0 - */ - public function connected() - { - if (is_object($this->connection)) - { - return $this->connection->ping(); - } - - return false; - } - - /** - * Drops a table from the database. - * - * @param string $tableName The name of the database table to drop. - * @param boolean $ifExists Optionally specify that the table must exist before it is dropped. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function dropTable($tableName, $ifExists = true) - { - $this->connect(); - - $this->setQuery('DROP TABLE ' . ($ifExists ? 'IF EXISTS ' : '') . $this->quoteName($tableName)) - ->execute(); - - return $this; - } - - /** - * Return the query string to alter the database character set. - * - * @param string $dbName The database name - * - * @return string The query that alter the database query string - * - * @since __DEPLOY_VERSION__ - */ - public function getAlterDbCharacterSet($dbName) - { - $charset = $this->utf8mb4 ? 'utf8mb4' : 'utf8'; - - return 'ALTER DATABASE ' . $this->quoteName($dbName) . ' CHARACTER SET `' . $charset . '`'; - } - - /** - * Method to get the database collation in use by sampling a text field of a table in the database. - * - * @return mixed The collation in use by the database (string) or boolean false if not supported. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getCollation() - { - $this->connect(); - - return $this->setQuery('SELECT @@collation_database;')->loadResult(); - } - - /** - * Method to get the database connection collation in use by sampling a text field of a table in the database. - * - * @return mixed The collation in use by the database connection (string) or boolean false if not supported. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function getConnectionCollation() - { - $this->connect(); - - return $this->setQuery('SELECT @@collation_connection;')->loadResult(); - } - - /** - * Return the query string to create new Database. - * - * @param stdClass $options Object used to pass user and database name to database driver. This object must have "db_name" and "db_user" set. - * @param boolean $utf True if the database supports the UTF-8 character set. - * - * @return string The query that creates database - * - * @since __DEPLOY_VERSION__ - */ - protected function getCreateDatabaseQuery($options, $utf) - { - if ($utf) - { - $charset = $this->utf8mb4 ? 'utf8mb4' : 'utf8'; - $collation = $charset . '_unicode_ci'; - - return 'CREATE DATABASE ' . $this->quoteName($options->db_name) . ' CHARACTER SET `' . $charset . '` COLLATE `' . $collation . '`'; - } - - return 'CREATE DATABASE ' . $this->quoteName($options->db_name); - } - - /** - * Shows the table CREATE statement that creates the given tables. - * - * @param mixed $tables A table name or a list of table names. - * - * @return array A list of the create SQL for the tables. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableCreate($tables) - { - $this->connect(); - - $result = []; - - // Sanitize input to an array and iterate over the list. - $tables = (array) $tables; - - foreach ($tables as $table) - { - // Set the query to get the table CREATE statement. - $row = $this->setQuery('SHOW CREATE TABLE ' . $this->quoteName($this->escape($table)))->loadRow(); - - // Populate the result array based on the create statements. - $result[$table] = $row[1]; - } - - return $result; - } - - /** - * Retrieves field information about a given table. - * - * @param string $table The name of the database table. - * @param boolean $typeOnly True to only return field types. - * - * @return array An array of fields for the database table. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableColumns($table, $typeOnly = true) - { - $this->connect(); - - $result = []; - - // Set the query to get the table fields statement. - $fields = $this->setQuery('SHOW FULL COLUMNS FROM ' . $this->quoteName($this->escape($table)))->loadObjectList(); - - // If we only want the type as the value add just that to the list. - if ($typeOnly) - { - foreach ($fields as $field) - { - $result[$field->Field] = preg_replace('/[(0-9)]/', '', $field->Type); - } - } - else - // If we want the whole field data object add that to the list. - { - foreach ($fields as $field) - { - $result[$field->Field] = $field; - } - } - - return $result; - } - - /** - * Get the details list of keys for a table. - * - * @param string $table The name of the table. - * - * @return array An array of the column specification for the table. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableKeys($table) - { - $this->connect(); - - // Get the details columns information. - return $this->setQuery('SHOW KEYS FROM ' . $this->quoteName($table))->loadObjectList(); - } - - /** - * Method to get an array of all tables in the database. - * - * @return array An array of all the tables in the database. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableList() - { - $this->connect(); - - // Set the query to get the tables statement. - return $this->setQuery('SHOW TABLES')->loadColumn(); - } - - /** - * Get the version of the database connector. - * - * @return string The database connector version. - * - * @since 1.0 - */ - public function getVersion() - { - $this->connect(); - - return $this->connection->server_info; - } - - /** - * Determine whether the database engine support the UTF-8 Multibyte (utf8mb4) character encoding. - * - * @return boolean True if the database engine supports UTF-8 Multibyte. - * - * @since __DEPLOY_VERSION__ - */ - public function hasUTF8mb4Support() - { - return $this->utf8mb4; - } - - /** - * Method to get the auto-incremented value from the last INSERT statement. - * - * @return mixed The value of the auto-increment field from the last inserted row. - * If the value is greater than maximal int value, it will return a string. - * - * @since 1.0 - */ - public function insertid() - { - $this->connect(); - - return $this->connection->insert_id; - } - - /** - * Locks a table in the database. - * - * @param string $table The name of the table to unlock. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function lockTable($table) - { - $this->executeUnpreparedQuery($this->replacePrefix('LOCK TABLES ' . $this->quoteName($table) . ' WRITE')); - - return $this; - } - - /** - * Renames a table in the database. - * - * @param string $oldTable The name of the table to be renamed - * @param string $newTable The new name for the table. - * @param string $backup Not used by MySQL. - * @param string $prefix Not used by MySQL. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function renameTable($oldTable, $newTable, $backup = null, $prefix = null) - { - $this->setQuery('RENAME TABLE ' . $oldTable . ' TO ' . $newTable)->execute(); - - return $this; - } - - /** - * Select a database for use. - * - * @param string $database The name of the database to select for use. - * - * @return boolean True if the database was successfully selected. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function select($database) - { - $this->connect(); - - if (!$database) - { - return false; - } - - if (!$this->connection->select_db($database)) - { - throw new ConnectionFailureException('Could not connect to database.'); - } - - return true; - } - - /** - * Set the connection to use UTF-8 character encoding. - * - * @return boolean True on success. - * - * @since 1.0 - */ - public function setUtf() - { - // If UTF is not supported return false immediately - if (!$this->utf) - { - return false; - } - - // Make sure we're connected to the server - $this->connect(); - - // Which charset should I use, plain utf8 or multibyte utf8mb4? - $charset = $this->utf8mb4 && $this->options['utf8mb4'] ? 'utf8mb4' : 'utf8'; - - $result = @$this->connection->set_charset($charset); - - /* - * If I could not set the utf8mb4 charset then the server doesn't support utf8mb4 despite claiming otherwise. This happens on old MySQL - * server versions (less than 5.5.3) using the mysqlnd PHP driver. Since mysqlnd masks the server version and reports only its own we - * can not be sure if the server actually does support UTF-8 Multibyte (i.e. it's MySQL 5.5.3 or later). Since the utf8mb4 charset is - * undefined in this case we catch the error and determine that utf8mb4 is not supported! - */ - if (!$result && $this->utf8mb4 && $this->options['utf8mb4']) - { - $this->utf8mb4 = false; - $result = @$this->connection->set_charset('utf8'); - } - - return $result; - } - - /** - * Method to commit a transaction. - * - * @param boolean $toSavepoint If true, commit to the last savepoint. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionCommit($toSavepoint = false) - { - if (!$toSavepoint || $this->transactionDepth <= 1) - { - $this->connect(); - - if ($this->connection->commit()) - { - $this->transactionDepth = 0; - } - - return; - } - - $this->transactionDepth--; - } - - /** - * Method to roll back a transaction. - * - * @param boolean $toSavepoint If true, rollback to the last savepoint. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionRollback($toSavepoint = false) - { - if (!$toSavepoint || $this->transactionDepth <= 1) - { - $this->connect(); - - if ($this->connection->rollback()) - { - $this->transactionDepth = 0; - } - - return; - } - - $savepoint = 'SP_' . ($this->transactionDepth - 1); - - if ($this->executeUnpreparedQuery('ROLLBACK TO SAVEPOINT ' . $this->quoteName($savepoint))) - { - $this->transactionDepth--; - } - } - - /** - * Method to initialize a transaction. - * - * @param boolean $asSavepoint If true and a transaction is already active, a savepoint will be created. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionStart($asSavepoint = false) - { - $this->connect(); - - if (!$asSavepoint || !$this->transactionDepth) - { - if (version_compare($this->getVersion(), '5.6', 'ge')) - { - if ($this->connection->begin_transaction()) - { - $this->transactionDepth = 1; - } - } - else - { - if ($this->executeUnpreparedQuery('START TRANSACTION')) - { - $this->transactionDepth = 1; - } - } - - return; - } - - $savepoint = 'SP_' . $this->transactionDepth; - - if ($this->connection->savepoint($savepoint)) - { - $this->transactionDepth++; - } - } - - /** - * Internal method to execute queries which cannot be run as prepared statements. - * - * @param string $sql SQL statement to execute. - * - * @return boolean - * - * @since 1.5.0 - */ - protected function executeUnpreparedQuery($sql) - { - $this->connect(); - - $cursor = $this->connection->query($sql); - - // If an error occurred handle it. - if (!$cursor) - { - $errorNum = (int) $this->connection->errno; - $errorMsg = (string) $this->connection->error; - - // Check if the server was disconnected. - if (!$this->connected()) - { - try - { - // Attempt to reconnect. - $this->connection = null; - $this->connect(); - } - catch (ConnectionFailureException $e) - { - // If connect fails, ignore that exception and throw the normal exception. - throw new ExecutionFailureException($sql, $errorMsg, $errorNum); - } - - // Since we were able to reconnect, run the query again. - return $this->executeUnpreparedQuery($sql); - } - - // The server was not disconnected. - throw new ExecutionFailureException($sql, $errorMsg, $errorNum); - } - - $this->freeResult($cursor); - - return true; - } - - /** - * Method to free up the memory used for the result set. - * - * @param mixed $cursor The optional result set cursor from which to fetch the row. - * - * @return void - * - * @since 1.0 - */ - protected function freeResult($cursor = null) - { - $this->executed = false; - - if ($this->statement) - { - $this->statement->closeCursor(); - $this->statement = null; - } - } - - /** - * Prepares a SQL statement for execution - * - * @param string $query The SQL query to be prepared. - * - * @return StatementInterface - * - * @since __DEPLOY_VERSION__ - * @throws PrepareStatementFailureException - */ - protected function prepareStatement(string $query): StatementInterface - { - return new MysqliStatement($this->connection, $query); - } - - /** - * Unlocks tables in the database. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function unlockTables() - { - $this->executeUnpreparedQuery('UNLOCK TABLES'); - - return $this; - } - - /** - * Does the database server claim to have support for UTF-8 Multibyte (utf8mb4) collation? - * - * libmysql supports utf8mb4 since 5.5.3 (same version as the MySQL server). mysqlnd supports utf8mb4 since 5.0.9. - * - * @return boolean - * - * @since 1.4.0 - */ - private function serverClaimsUtf8mb4Support() - { - $client_version = mysqli_get_client_info(); - $server_version = $this->getVersion(); - - if (version_compare($server_version, '5.5.3', '<')) - { - return false; - } - - if (strpos($client_version, 'mysqlnd') !== false) - { - $client_version = preg_replace('/^\D+([\d.]+).*/', '$1', $client_version); - - return version_compare($client_version, '5.0.9', '>='); - } - - return version_compare($client_version, '5.5.3', '>='); - } - - /** - * Get the null or zero representation of a timestamp for the database driver. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function getNullDate() - { - // Check the session sql mode; - if (in_array('NO_ZERO_DATE', $this->options['sqlModes']) !== false) - { - $this->nullDate = '1000-01-01 00:00:00'; - } - - return $this->nullDate; - } -} diff --git a/libraries/vendor/joomla/database/src/Mysqli/MysqliExporter.php b/libraries/vendor/joomla/database/src/Mysqli/MysqliExporter.php deleted file mode 100644 index 30bf49242d586..0000000000000 --- a/libraries/vendor/joomla/database/src/Mysqli/MysqliExporter.php +++ /dev/null @@ -1,113 +0,0 @@ -'; - $buffer[] = ''; - $buffer[] = ' '; - - $buffer = array_merge($buffer, $this->buildXmlStructure()); - - $buffer[] = ' '; - $buffer[] = ''; - - return implode("\n", $buffer); - } - - /** - * Builds the XML structure to export. - * - * @return array An array of XML lines (strings). - * - * @since 1.0 - * @throws \Exception if an error occurs. - */ - protected function buildXmlStructure() - { - $buffer = []; - - foreach ($this->from as $table) - { - // Replace the magic prefix if found. - $table = $this->getGenericTableName($table); - - // Get the details columns information. - $fields = $this->db->getTableColumns($table, false); - $keys = $this->db->getTableKeys($table); - - $buffer[] = ' '; - - foreach ($fields as $field) - { - $buffer[] = ' Default) ? ' Default="' . $field->Default . '"' : '') . ' Extra="' . $field->Extra . '"' . - ' />'; - } - - foreach ($keys as $key) - { - $buffer[] = ' '; - } - - $buffer[] = ' '; - } - - return $buffer; - } - - /** - * Checks if all data and options are in order prior to exporting. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function check() - { - // Check if the db connector has been set. - if (!($this->db instanceof MysqliDriver)) - { - throw new \RuntimeException('Database connection wrong type.'); - } - - // Check if the tables have been specified. - if (empty($this->from)) - { - throw new \RuntimeException('ERROR: No Tables Specified'); - } - - return $this; - } -} diff --git a/libraries/vendor/joomla/database/src/Mysqli/MysqliImporter.php b/libraries/vendor/joomla/database/src/Mysqli/MysqliImporter.php deleted file mode 100644 index 5f4dc83552a32..0000000000000 --- a/libraries/vendor/joomla/database/src/Mysqli/MysqliImporter.php +++ /dev/null @@ -1,429 +0,0 @@ -db instanceof MysqliDriver)) - { - throw new \RuntimeException('Database connection wrong type.'); - } - - // Check if the tables have been specified. - if (empty($this->from)) - { - throw new \RuntimeException('ERROR: No Tables Specified'); - } - - return $this; - } - - /** - * Get the SQL syntax to add a table. - * - * @param \SimpleXMLElement $table The table information. - * - * @return string - * - * @since 1.4.0 - * @throws \RuntimeException - */ - protected function xmlToCreate(\SimpleXMLElement $table) - { - $existingTables = $this->db->getTableList(); - $tableName = (string) $table['name']; - - if (in_array($tableName, $existingTables, true)) - { - throw new \RuntimeException('The table you are trying to create already exists'); - } - - $createTableStatement = 'CREATE TABLE ' . $this->db->quoteName($tableName) . ' ('; - - foreach ($table->xpath('field') as $field) - { - $createTableStatement .= $this->getColumnSQL($field) . ', '; - } - - foreach ($table->xpath('key') as $key) - { - $createTableStatement .= $this->getKeySQL([$key]) . ', '; - } - - $createTableStatement = rtrim($createTableStatement, ', '); - - $createTableStatement .= ')'; - - return $createTableStatement; - } - - /** - * Get the SQL syntax to add a key. - * - * @param string $table The table name. - * @param array $keys An array of the fields pertaining to this key. - * - * @return string - * - * @since 1.0 - */ - protected function getAddKeySql($table, $keys) - { - return 'ALTER TABLE ' . $this->db->quoteName($table) . ' ADD ' . $this->getKeySql($keys); - } - - /** - * Get alters for table if there is a difference. - * - * @param \SimpleXMLElement $structure The XML structure pf the table. - * - * @return array - * - * @since 1.0 - */ - protected function getAlterTableSql(\SimpleXMLElement $structure) - { - $table = $this->getRealTableName($structure['name']); - $oldFields = $this->db->getTableColumns($table, false); - $oldKeys = $this->db->getTableKeys($table); - $alters = []; - - // Get the fields and keys from the XML that we are aiming for. - $newFields = $structure->xpath('field'); - $newKeys = $structure->xpath('key'); - - // Loop through each field in the new structure. - foreach ($newFields as $field) - { - $fName = (string) $field['Field']; - - if (isset($oldFields[$fName])) - { - // The field exists, check it's the same. - $column = $oldFields[$fName]; - - // Test whether there is a change. - $change = ((string) $field['Type'] !== $column->Type) || ((string) $field['Null'] !== $column->Null) - || ((string) $field['Default'] !== $column->Default) || ((string) $field['Extra'] !== $column->Extra); - - if ($change) - { - $alters[] = $this->getChangeColumnSql($table, $field); - } - - // Unset this field so that what we have left are fields that need to be removed. - unset($oldFields[$fName]); - } - else - { - // The field is new. - $alters[] = $this->getAddColumnSql($table, $field); - } - } - - // Any columns left are orphans - foreach ($oldFields as $name => $column) - { - // Delete the column. - $alters[] = $this->getDropColumnSql($table, $name); - } - - // Get the lookups for the old and new keys. - $oldLookup = $this->getKeyLookup($oldKeys); - $newLookup = $this->getKeyLookup($newKeys); - - // Loop through each key in the new structure. - foreach ($newLookup as $name => $keys) - { - // Check if there are keys on this field in the existing table. - if (isset($oldLookup[$name])) - { - $same = true; - $newCount = count($newLookup[$name]); - $oldCount = count($oldLookup[$name]); - - // There is a key on this field in the old and new tables. Are they the same? - if ($newCount === $oldCount) - { - // Need to loop through each key and do a fine grained check. - for ($i = 0; $i < $newCount; $i++) - { - $same = (((string) $newLookup[$name][$i]['Non_unique'] === $oldLookup[$name][$i]->Non_unique) - && ((string) $newLookup[$name][$i]['Column_name'] === $oldLookup[$name][$i]->Column_name) - && ((string) $newLookup[$name][$i]['Seq_in_index'] === $oldLookup[$name][$i]->Seq_in_index) - && ((string) $newLookup[$name][$i]['Collation'] === $oldLookup[$name][$i]->Collation) - && ((string) $newLookup[$name][$i]['Index_type'] === $oldLookup[$name][$i]->Index_type)); - - /* - Debug. - echo '
';
-						echo '
Non_unique: '. - ((string) $newLookup[$name][$i]['Non_unique'] == $oldLookup[$name][$i]->Non_unique ? 'Pass' : 'Fail').' '. - (string) $newLookup[$name][$i]['Non_unique'].' vs '.$oldLookup[$name][$i]->Non_unique; - echo '
Column_name: '. - ((string) $newLookup[$name][$i]['Column_name'] == $oldLookup[$name][$i]->Column_name ? 'Pass' : 'Fail').' '. - (string) $newLookup[$name][$i]['Column_name'].' vs '.$oldLookup[$name][$i]->Column_name; - echo '
Seq_in_index: '. - ((string) $newLookup[$name][$i]['Seq_in_index'] == $oldLookup[$name][$i]->Seq_in_index ? 'Pass' : 'Fail').' '. - (string) $newLookup[$name][$i]['Seq_in_index'].' vs '.$oldLookup[$name][$i]->Seq_in_index; - echo '
Collation: '. - ((string) $newLookup[$name][$i]['Collation'] == $oldLookup[$name][$i]->Collation ? 'Pass' : 'Fail').' '. - (string) $newLookup[$name][$i]['Collation'].' vs '.$oldLookup[$name][$i]->Collation; - echo '
Index_type: '. - ((string) $newLookup[$name][$i]['Index_type'] == $oldLookup[$name][$i]->Index_type ? 'Pass' : 'Fail').' '. - (string) $newLookup[$name][$i]['Index_type'].' vs '.$oldLookup[$name][$i]->Index_type; - echo '
Same = '.($same ? 'true' : 'false'); - echo '
'; - */ - - if (!$same) - { - // Break out of the loop. No need to check further. - break; - } - } - } - else - { - // Count is different, just drop and add. - $same = false; - } - - if (!$same) - { - $alters[] = $this->getDropKeySql($table, $name); - $alters[] = $this->getAddKeySql($table, $keys); - } - - // Unset this field so that what we have left are fields that need to be removed. - unset($oldLookup[$name]); - } - else - { - // This is a new key. - $alters[] = $this->getAddKeySql($table, $keys); - } - } - - // Any keys left are orphans. - foreach ($oldLookup as $name => $keys) - { - if (strtoupper($name) === 'PRIMARY') - { - $alters[] = $this->getDropPrimaryKeySql($table); - } - else - { - $alters[] = $this->getDropKeySql($table, $name); - } - } - - return $alters; - } - - /** - * Get the syntax to alter a column. - * - * @param string $table The name of the database table to alter. - * @param \SimpleXMLElement $field The XML definition for the field. - * - * @return string - * - * @since 1.0 - */ - protected function getChangeColumnSql($table, \SimpleXMLElement $field) - { - return 'ALTER TABLE ' . $this->db->quoteName($table) . ' CHANGE COLUMN ' . $this->db->quoteName((string) $field['Field']) . ' ' - . $this->getColumnSql($field); - } - - /** - * Get the SQL syntax for a single column that would be included in a table create or alter statement. - * - * @param \SimpleXMLElement $field The XML field definition. - * - * @return string - * - * @since 1.0 - */ - protected function getColumnSql(\SimpleXMLElement $field) - { - // TODO Incorporate into parent class and use $this. - $blobs = ['text', 'smalltext', 'mediumtext', 'largetext']; - - $fName = (string) $field['Field']; - $fType = (string) $field['Type']; - $fNull = (string) $field['Null']; - $fDefault = isset($field['Default']) ? (string) $field['Default'] : null; - $fExtra = (string) $field['Extra']; - - $sql = $this->db->quoteName($fName) . ' ' . $fType; - - if ($fNull === 'NO') - { - if ($fDefault === null || in_array($fType, $blobs, true)) - { - $sql .= ' NOT NULL'; - } - else - { - // TODO Don't quote numeric values. - $sql .= ' NOT NULL DEFAULT ' . $this->db->quote($fDefault); - } - } - else - { - if ($fDefault === null) - { - $sql .= ' DEFAULT NULL'; - } - else - { - // TODO Don't quote numeric values. - $sql .= ' DEFAULT ' . $this->db->quote($fDefault); - } - } - - if ($fExtra) - { - $sql .= ' ' . strtoupper($fExtra); - } - - return $sql; - } - - /** - * Get the SQL syntax to drop a key. - * - * @param string $table The table name. - * @param string $name The name of the key to drop. - * - * @return string - * - * @since 1.0 - */ - protected function getDropKeySql($table, $name) - { - return 'ALTER TABLE ' . $this->db->quoteName($table) . ' DROP KEY ' . $this->db->quoteName($name); - } - - /** - * Get the SQL syntax to drop a key. - * - * @param string $table The table name. - * - * @return string - * - * @since 1.0 - */ - protected function getDropPrimaryKeySql($table) - { - return 'ALTER TABLE ' . $this->db->quoteName($table) . ' DROP PRIMARY KEY'; - } - - /** - * Get the details list of keys for a table. - * - * @param array $keys An array of objects that comprise the keys for the table. - * - * @return array The lookup array. array({key name} => array(object, ...)) - * - * @since 1.0 - */ - protected function getKeyLookup($keys) - { - // First pass, create a lookup of the keys. - $lookup = []; - - foreach ($keys as $key) - { - if ($key instanceof \SimpleXMLElement) - { - $kName = (string) $key['Key_name']; - } - else - { - $kName = $key->Key_name; - } - - if (empty($lookup[$kName])) - { - $lookup[$kName] = []; - } - - $lookup[$kName][] = $key; - } - - return $lookup; - } - - /** - * Get the SQL syntax for a key. - * - * @param array $columns An array of SimpleXMLElement objects comprising the key. - * - * @return string - * - * @since 1.0 - */ - protected function getKeySql($columns) - { - // TODO Error checking on array and element types. - - $kNonUnique = (string) $columns[0]['Non_unique']; - $kName = (string) $columns[0]['Key_name']; - $kColumn = (string) $columns[0]['Column_name']; - - $prefix = ''; - - if ($kName === 'PRIMARY') - { - $prefix = 'PRIMARY '; - } - elseif ($kNonUnique == 0) - { - $prefix = 'UNIQUE '; - } - - $nColumns = count($columns); - $kColumns = []; - - if ($nColumns === 1) - { - $kColumns[] = $this->db->quoteName($kColumn); - } - else - { - foreach ($columns as $column) - { - $kColumns[] = (string) $column['Column_name']; - } - } - - return $prefix . 'KEY ' . ($kName !== 'PRIMARY' ? $this->db->quoteName($kName) : '') . ' (' . implode(',', $kColumns) . ')'; - } -} diff --git a/libraries/vendor/joomla/database/src/Mysqli/MysqliQuery.php b/libraries/vendor/joomla/database/src/Mysqli/MysqliQuery.php deleted file mode 100644 index 0fd9169c75255..0000000000000 --- a/libraries/vendor/joomla/database/src/Mysqli/MysqliQuery.php +++ /dev/null @@ -1,230 +0,0 @@ - 'i', - ParameterType::INTEGER => 'i', - ParameterType::LARGE_OBJECT => 's', - ParameterType::NULL => 's', - ParameterType::STRING => 's', - ]; - - /** - * The list of zero or null representation of a datetime. - * - * @var array - * @since __DEPLOY_VERSION__ - */ - protected $nullDatetimeList = ['0000-00-00 00:00:00', '1000-01-01 00:00:00']; - - /** - * Magic function to convert the query to a string. - * - * @return string The completed query. - * - * @since __DEPLOY_VERSION__ - */ - public function __toString() - { - switch ($this->type) - { - case 'select': - if ($this->selectRowNumber) - { - $orderBy = $this->selectRowNumber['orderBy']; - $tmpOffset = $this->offset; - $tmpLimit = $this->limit; - $this->offset = 0; - $this->limit = 0; - $tmpOrder = $this->order; - $this->order = null; - $query = parent::__toString(); - $this->order = $tmpOrder; - $this->offset = $tmpOffset; - $this->limit = $tmpLimit; - - // Add support for second order by, offset and limit - $query = PHP_EOL . 'SELECT * FROM (' . $query . PHP_EOL . "ORDER BY $orderBy" . PHP_EOL . ') w'; - - if ($this->order) - { - $query .= (string) $this->order; - } - - return $this->processLimit($query, $this->limit, $this->offset); - } - } - - return parent::__toString(); - } - - /** - * Method to add a variable to an internal array that will be bound to a prepared SQL statement before query execution. Also - * removes a variable that has been bounded from the internal bounded array when the passed in value is null. - * - * @param string|integer $key The key that will be used in your SQL query to reference the value. Usually of - * the form ':key', but can also be an integer. - * @param mixed $value The value that will be bound. The value is passed by reference to support output - * parameters such as those possible with stored procedures. - * @param string $dataType The corresponding bind type. - * @param integer $length The length of the variable. Usually required for OUTPUT parameters. (Unused) - * @param array $driverOptions Optional driver options to be used. (Unused) - * - * @return MysqliQuery - * - * @since 1.5.0 - */ - public function bind($key = null, &$value = null, $dataType = ParameterType::STRING, $length = 0, $driverOptions = array()) - { - // Case 1: Empty Key (reset $bounded array) - if (empty($key)) - { - $this->bounded = array(); - - return $this; - } - - // Case 2: Key Provided, null value (unset key from $bounded array) - if (is_null($value)) - { - if (isset($this->bounded[$key])) - { - unset($this->bounded[$key]); - } - - return $this; - } - - // Validate parameter type - if (!isset($this->parameterMapping[$dataType])) - { - throw new \InvalidArgumentException(sprintf('Unsupported parameter type `%s`', $dataType)); - } - - $obj = new \stdClass; - $obj->value = &$value; - $obj->dataType = $this->parameterMapping[$dataType]; - - // Case 3: Simply add the Key/Value into the bounded array - $this->bounded[$key] = $obj; - - return $this; - } - - /** - * Retrieves the bound parameters array when key is null and returns it by reference. If a key is provided then that item is - * returned. - * - * @param mixed $key The bounded variable key to retrieve. - * - * @return mixed - * - * @since 1.5.0 - */ - public function &getBounded($key = null) - { - if (empty($key)) - { - return $this->bounded; - } - - if (isset($this->bounded[$key])) - { - return $this->bounded[$key]; - } - } - - /** - * Clear data from the query or a specific clause of the query. - * - * @param string $clause Optionally, the name of the clause to clear, or nothing to clear the whole query. - * - * @return MysqliQuery Returns this object to allow chaining. - * - * @since 1.5.0 - */ - public function clear($clause = null) - { - switch ($clause) - { - case null: - $this->bounded = array(); - break; - } - - return parent::clear($clause); - } - - /** - * Sets the offset and limit for the result set, if the database driver supports it. - * - * Usage: - * $query->setLimit(100, 0); (retrieve 100 rows, starting at first record) - * $query->setLimit(50, 50); (retrieve 50 rows, starting at 50th record) - * - * @param integer $limit The limit for the result set - * @param integer $offset The offset for the result set - * - * @return $this - * - * @since 1.0 - */ - public function setLimit($limit = 0, $offset = 0) - { - $this->limit = (int) $limit; - $this->offset = (int) $offset; - - return $this; - } -} diff --git a/libraries/vendor/joomla/database/src/Mysqli/MysqliStatement.php b/libraries/vendor/joomla/database/src/Mysqli/MysqliStatement.php deleted file mode 100644 index 4d6591279d82b..0000000000000 --- a/libraries/vendor/joomla/database/src/Mysqli/MysqliStatement.php +++ /dev/null @@ -1,623 +0,0 @@ -connection = $connection; - $this->query = $query; - - $query = $this->prepareParameterKeyMapping($query); - - $this->statement = $connection->prepare($query); - - if (!$this->statement) - { - throw new PrepareStatementFailureException($this->connection->error, $this->connection->errno); - } - } - - /** - * Replace named parameters with numbered parameters - * - * @param string $sql The SQL statement to prepare. - * - * @return string The processed SQL statement. - * - * @since __DEPLOY_VERSION__ - */ - public function prepareParameterKeyMapping($sql) - { - $escaped = false; - $startPos = 0; - $quoteChar = ''; - $literal = ''; - $mapping = []; - $replace = []; - $matches = []; - $pattern = '/([:][a-zA-Z0-9_]+)/'; - - if (!preg_match($pattern, $sql, $matches)) - { - return $sql; - } - - $sql = trim($sql); - $n = strlen($sql); - - while ($startPos < $n) - { - if (!preg_match($pattern, $sql, $matches, 0, $startPos)) - { - break; - } - - $j = strpos($sql, "'", $startPos); - $k = strpos($sql, '"', $startPos); - - if (($k !== false) && (($k < $j) || ($j === false))) - { - $quoteChar = '"'; - $j = $k; - } - else - { - $quoteChar = "'"; - } - - if ($j === false) - { - $j = $n; - } - - // Search for named prepared parameters and replace it with ? and save its position - $replace = []; - $substring = substr($sql, $startPos, $j - $startPos); - - if (preg_match_all($pattern, $substring, $matches, PREG_PATTERN_ORDER)) - { - foreach ($matches[0] as $match) - { - $mapping[$match] = count($mapping); - $replace[] = $match; - } - - $literal .= str_replace($replace, '?', $substring); - } - else - { - $literal .= $substring; - } - - $startPos = $j; - $j++; - - if ($j >= $n) - { - break; - } - - // Quote comes first, find end of quote - while (true) - { - $k = strpos($sql, $quoteChar, $j); - $escaped = false; - - if ($k === false) - { - break; - } - - $l = $k - 1; - - while ($l >= 0 && $sql{$l} === '\\') - { - $l--; - $escaped = !$escaped; - } - - if ($escaped) - { - $j = $k + 1; - continue; - } - - break; - } - - if ($k === false) - { - // Error in the query - no end quote; ignore it - break; - } - - $literal .= substr($sql, $startPos, $k - $startPos + 1); - $startPos = $k + 1; - } - - if ($startPos < $n) - { - $literal .= substr($sql, $startPos, $n - $startPos); - } - - $this->parameterKeyMapping = $mapping; - - return $literal; - } - - /** - * Binds a parameter to the specified variable name. - * - * @param string|integer $parameter Parameter identifier. For a prepared statement using named placeholders, this will be a parameter - * name of the form `:name`. For a prepared statement using question mark placeholders, this will be - * the 1-indexed position of the parameter. - * @param mixed $variable Name of the PHP variable to bind to the SQL statement parameter. - * @param integer $dataType Constant corresponding to a SQL datatype, this should be the processed type from the QueryInterface. - * @param integer $length The length of the variable. Usually required for OUTPUT parameters. - * @param array $driverOptions Optional driver options to be used. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function bindParam($parameter, &$variable, $dataType = ParameterType::STRING, $length = null, $driverOptions = null) - { - $this->bindedValues[$parameter] =& $variable; - $this->typesKeyMapping[$parameter] = $dataType; - - return true; - } - - /** - * Binds a array of values to bound parameters. - * - * @param array $values The values to bind to the statement - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - private function bindValues(array $values) - { - $params = []; - $types = str_repeat('s', count($values)); - - if (!empty($this->parameterKeyMapping)) - { - foreach ($values as $key => &$value) - { - $params[$this->parameterKeyMapping[$key]] =& $value; - } - - ksort($params); - } - else - { - foreach ($values as $key => &$value) - { - $params[] =& $value; - } - } - - array_unshift($params, $types); - - return call_user_func_array([$this->statement, 'bind_param'], $params); - } - - /** - * Closes the cursor, enabling the statement to be executed again. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function closeCursor() - { - $this->statement->free_result(); - $this->result = false; - - return true; - } - - /** - * Fetches the SQLSTATE associated with the last operation on the statement handle. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function errorCode() - { - return $this->statement->errno; - } - - /** - * Fetches extended error information associated with the last operation on the statement handle. - * - * @return array - * - * @since __DEPLOY_VERSION__ - */ - public function errorInfo() - { - return $this->statement->error; - } - - /** - * Executes a prepared statement - * - * @param array $parameters An array of values with as many elements as there are bound parameters in the SQL statement being executed. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function execute($parameters = null) - { - if ($this->bindedValues !== null) - { - $params = []; - $types = []; - - if (!empty($this->parameterKeyMapping)) - { - foreach ($this->bindedValues as $key => &$value) - { - $params[$this->parameterKeyMapping[$key]] =& $value; - $types[$this->parameterKeyMapping[$key]] = $this->typesKeyMapping[$key]; - } - } - else - { - foreach ($this->bindedValues as $key => &$value) - { - $params[] =& $value; - $types[$key] = $this->typesKeyMapping[$key]; - } - } - - ksort($params); - ksort($types); - - array_unshift($params, implode('', $types)); - - if (!call_user_func_array([$this->statement, 'bind_param'], $params)) - { - throw new PrepareStatementFailureException($this->statement->error, $this->statement->errno); - } - } - elseif ($parameters !== null) - { - if (!$this->bindValues($parameters)) - { - throw new PrepareStatementFailureException($this->statement->error, $this->statement->errno); - } - } - - if (!$this->statement->execute()) - { - throw new ExecutionFailureException($this->query, $this->statement->error, $this->statement->errno); - } - - if ($this->columnNames === null) - { - $meta = $this->statement->result_metadata(); - - if ($meta !== false) - { - $columnNames = []; - - foreach ($meta->fetch_fields() as $col) - { - $columnNames[] = $col->name; - } - - $meta->free(); - - $this->columnNames = $columnNames; - } - else - { - $this->columnNames = false; - } - } - - if ($this->columnNames !== false) - { - $this->statement->store_result(); - - $this->rowBindedValues = array_fill(0, count($this->columnNames), null); - $refs = []; - - foreach ($this->rowBindedValues as $key => &$value) - { - $refs[$key] =& $value; - } - - if (!call_user_func_array([$this->statement, 'bind_result'], $refs)) - { - throw new \RuntimeException($this->statement->error, $this->statement->errno); - } - } - - $this->result = true; - - return true; - } - - /** - * Fetches the next row from a result set - * - * @param integer $fetchStyle Controls how the next row will be returned to the caller. This value must be one of the - * FetchMode constants, defaulting to value of FetchMode::MIXED. - * @param integer $cursorOrientation For a StatementInterface object representing a scrollable cursor, this value determines which row will - * be returned to the caller. This value must be one of the FetchOrientation constants, defaulting to - * FetchOrientation::NEXT. - * @param integer $cursorOffset For a StatementInterface object representing a scrollable cursor for which the cursorOrientation - * parameter is set to FetchOrientation::ABS, this value specifies the absolute number of the row in the - * result set that shall be fetched. For a StatementInterface object representing a scrollable cursor for - * which the cursorOrientation parameter is set to FetchOrientation::REL, this value specifies the row to - * fetch relative to the cursor position before StatementInterface::fetch() was called. - * - * @return mixed The return value of this function on success depends on the fetch type. In all cases, boolean false is returned on failure. - * - * @since __DEPLOY_VERSION__ - */ - public function fetch($fetchStyle = null, $cursorOrientation = FetchOrientation::NEXT, $cursorOffset = 0) - { - if (!$this->result) - { - return false; - } - - $fetchStyle = $fetchStyle ?: $this->defaultFetchStyle; - - if ($fetchStyle === FetchMode::COLUMN) - { - return $this->fetchColumn(); - } - - $values = $this->fetchData(); - - if ($values === null) - { - return false; - } - - if ($values === false) - { - throw new \RuntimeException($this->statement->error, $this->statement->errno); - } - - switch ($fetchStyle) - { - case FetchMode::NUMERIC: - return $values; - - case FetchMode::ASSOCIATIVE: - return array_combine($this->columnNames, $values); - - case FetchMode::MIXED: - $ret = array_combine($this->columnNames, $values); - $ret += $values; - - return $ret; - - case FetchMode::STANDARD_OBJECT: - $assoc = array_combine($this->columnNames, $values); - $class = $this->defaultObjectClass; - $ret = new $class; - - foreach ($assoc as $column => $value) - { - $ret->$column = $value; - } - - return $ret; - - default: - throw new \InvalidArgumentException("Unknown fetch type '{$fetchStyle}'"); - } - } - - /** - * Returns a single column from the next row of a result set - * - * @param integer $columnIndex 0-indexed number of the column you wish to retrieve from the row. - * If no value is supplied, the first column is retrieved. - * - * @return mixed Returns a single column from the next row of a result set or boolean false if there are no more rows. - * - * @since __DEPLOY_VERSION__ - */ - public function fetchColumn($columnIndex = 0) - { - $row = $this->fetch(FetchMode::NUMERIC); - - if ($row === false) - { - return false; - } - - return $row[$columnIndex] ?? null; - } - - /** - * Fetch the data from the statement. - * - * @return array|boolean - * - * @since __DEPLOY_VERSION__ - */ - private function fetchData() - { - $return = $this->statement->fetch(); - - if ($return === true) - { - $values = []; - - foreach ($this->rowBindedValues as $v) - { - $values[] = $v; - } - - return $values; - } - - return $return; - } - - /** - * Fetches the next row and returns it as an object. - * - * @param string $className Name of the created class. - * @param array $constructorArgs Elements of this array are passed to the constructor. - * - * @return mixed An instance of the required class with property names that correspond to the column names or boolean false on failure. - * - * @since __DEPLOY_VERSION__ - */ - public function fetchObject($className = null, $constructorArgs = null) - { - $this->defaultObjectClass = $className; - - return $this->fetch(FetchMode::STANDARD_OBJECT); - } - - /** - * Returns the number of rows affected by the last SQL statement. - * - * @return integer - * - * @since __DEPLOY_VERSION__ - */ - public function rowCount() - { - if ($this->columnNames === false) - { - return $this->statement->affected_rows; - } - - return $this->statement->num_rows; - } -} diff --git a/libraries/vendor/joomla/database/src/ParameterType.php b/libraries/vendor/joomla/database/src/ParameterType.php deleted file mode 100644 index aa3a7e2de0926..0000000000000 --- a/libraries/vendor/joomla/database/src/ParameterType.php +++ /dev/null @@ -1,66 +0,0 @@ -disconnect(); - } - - /** - * Connects to the database if needed. - * - * @return void Returns void if the database connected successfully. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function connect() - { - if ($this->connection) - { - return; - } - - // Make sure the PDO extension for PHP is installed and enabled. - if (!static::isSupported()) - { - throw new UnsupportedAdapterException('PDO Extension is not available.', 1); - } - - // Find the correct PDO DSN Format to use: - switch ($this->options['driver']) - { - case 'cubrid': - $this->options['port'] = isset($this->options['port']) ? $this->options['port'] : 33000; - - $format = 'cubrid:host=#HOST#;port=#PORT#;dbname=#DBNAME#'; - - $replace = ['#HOST#', '#PORT#', '#DBNAME#']; - $with = [$this->options['host'], $this->options['port'], $this->options['database']]; - - break; - - case 'dblib': - $this->options['port'] = isset($this->options['port']) ? $this->options['port'] : 1433; - - $format = 'dblib:host=#HOST#;port=#PORT#;dbname=#DBNAME#'; - - $replace = ['#HOST#', '#PORT#', '#DBNAME#']; - $with = [$this->options['host'], $this->options['port'], $this->options['database']]; - - break; - - case 'firebird': - $this->options['port'] = isset($this->options['port']) ? $this->options['port'] : 3050; - - $format = 'firebird:dbname=#DBNAME#'; - - $replace = ['#DBNAME#']; - $with = [$this->options['database']]; - - break; - - case 'ibm': - $this->options['port'] = isset($this->options['port']) ? $this->options['port'] : 56789; - - if (!empty($this->options['dsn'])) - { - $format = 'ibm:DSN=#DSN#'; - - $replace = ['#DSN#']; - $with = [$this->options['dsn']]; - } - else - { - $format = 'ibm:hostname=#HOST#;port=#PORT#;database=#DBNAME#'; - - $replace = ['#HOST#', '#PORT#', '#DBNAME#']; - $with = [$this->options['host'], $this->options['port'], $this->options['database']]; - } - - break; - - case 'informix': - $this->options['port'] = isset($this->options['port']) ? $this->options['port'] : 1526; - $this->options['protocol'] = isset($this->options['protocol']) ? $this->options['protocol'] : 'onsoctcp'; - - if (!empty($this->options['dsn'])) - { - $format = 'informix:DSN=#DSN#'; - - $replace = ['#DSN#']; - $with = [$this->options['dsn']]; - } - else - { - $format = 'informix:host=#HOST#;service=#PORT#;database=#DBNAME#;server=#SERVER#;protocol=#PROTOCOL#'; - - $replace = ['#HOST#', '#PORT#', '#DBNAME#', '#SERVER#', '#PROTOCOL#']; - $with = [ - $this->options['host'], - $this->options['port'], - $this->options['database'], - $this->options['server'], - $this->options['protocol'] - ]; - } - - break; - - case 'mssql': - $this->options['port'] = isset($this->options['port']) ? $this->options['port'] : 1433; - - $format = 'mssql:host=#HOST#;port=#PORT#;dbname=#DBNAME#'; - - $replace = ['#HOST#', '#PORT#', '#DBNAME#']; - $with = [$this->options['host'], $this->options['port'], $this->options['database']]; - - break; - - case 'mysql': - $this->options['port'] = isset($this->options['port']) ? $this->options['port'] : 3306; - - $format = 'mysql:host=#HOST#;port=#PORT#;dbname=#DBNAME#;charset=#CHARSET#'; - - $replace = ['#HOST#', '#PORT#', '#DBNAME#', '#CHARSET#']; - $with = [$this->options['host'], $this->options['port'], $this->options['database'], $this->options['charset']]; - - break; - - case 'oci': - $this->options['port'] = isset($this->options['port']) ? $this->options['port'] : 1521; - $this->options['charset'] = isset($this->options['charset']) ? $this->options['charset'] : 'AL32UTF8'; - - if (!empty($this->options['dsn'])) - { - $format = 'oci:dbname=#DSN#'; - - $replace = ['#DSN#']; - $with = [$this->options['dsn']]; - } - else - { - $format = 'oci:dbname=//#HOST#:#PORT#/#DBNAME#'; - - $replace = ['#HOST#', '#PORT#', '#DBNAME#']; - $with = [$this->options['host'], $this->options['port'], $this->options['database']]; - } - - $format .= ';charset=' . $this->options['charset']; - - break; - - case 'odbc': - $format = 'odbc:DSN=#DSN#;UID:#USER#;PWD=#PASSWORD#'; - - $replace = ['#DSN#', '#USER#', '#PASSWORD#']; - $with = [$this->options['dsn'], $this->options['user'], $this->options['password']]; - - break; - - case 'pgsql': - $this->options['port'] = isset($this->options['port']) ? $this->options['port'] : 5432; - - $format = 'pgsql:host=#HOST#;port=#PORT#;dbname=#DBNAME#'; - - $replace = ['#HOST#', '#PORT#', '#DBNAME#']; - $with = [$this->options['host'], $this->options['port'], $this->options['database']]; - - break; - - case 'sqlite': - if (isset($this->options['version']) && $this->options['version'] == 2) - { - $format = 'sqlite2:#DBNAME#'; - } - else - { - $format = 'sqlite:#DBNAME#'; - } - - $replace = ['#DBNAME#']; - $with = [$this->options['database']]; - - break; - - case 'sybase': - $this->options['port'] = isset($this->options['port']) ? $this->options['port'] : 1433; - - $format = 'mssql:host=#HOST#;port=#PORT#;dbname=#DBNAME#'; - - $replace = ['#HOST#', '#PORT#', '#DBNAME#']; - $with = [$this->options['host'], $this->options['port'], $this->options['database']]; - - break; - - default: - throw new UnsupportedAdapterException('The ' . $this->options['driver'] . ' driver is not supported.'); - } - - // Create the connection string: - $connectionString = str_replace($replace, $with, $format); - - try - { - $this->connection = new \PDO( - $connectionString, - $this->options['user'], - $this->options['password'], - $this->options['driverOptions'] - ); - } - catch (\PDOException $e) - { - throw new ConnectionFailureException('Could not connect to PDO: ' . $e->getMessage(), $e->getCode(), $e); - } - - $this->setOption(\PDO::ATTR_STATEMENT_CLASS, [PdoStatement::class, []]); - $this->setOption(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); - - $this->dispatchEvent(new ConnectionEvent(DatabaseEvents::POST_CONNECT, $this)); - } - - /** - * Method to escape a string for usage in an SQL statement. - * - * Oracle escaping reference: - * http://www.orafaq.com/wiki/SQL_FAQ#How_does_one_escape_special_characters_when_writing_SQL_queries.3F - * - * SQLite escaping notes: - * http://www.sqlite.org/faq.html#q14 - * - * Method body is as implemented by the Zend Framework - * - * Note: Using query objects with bound variables is preferable to the below. - * - * @param string $text The string to be escaped. - * @param boolean $extra Unused optional parameter to provide extra escaping. - * - * @return string The escaped string. - * - * @since 1.0 - */ - public function escape($text, $extra = false) - { - if (is_int($text)) - { - return $text; - } - - if (is_float($text)) - { - // Force the dot as a decimal point. - return str_replace(',', '.', $text); - } - - $text = str_replace("'", "''", $text); - - return addcslashes($text, "\000\n\r\\\032"); - } - - /** - * Execute the SQL statement. - * - * @return boolean - * - * @since 1.0 - * @throws \Exception - * @throws \RuntimeException - */ - public function execute() - { - $this->connect(); - - // Take a local copy so that we don't modify the original query and cause issues later - $sql = $this->replacePrefix((string) $this->sql); - - // Increment the query counter. - $this->count++; - - // If there is a monitor registered, let it know we are starting this query - if ($this->monitor) - { - $this->monitor->startQuery($sql); - } - - // Execute the query. - $this->executed = false; - - // Bind the variables - $bounded =& $this->sql->getBounded(); - - foreach ($bounded as $key => $obj) - { - $this->statement->bindParam($key, $obj->value, $obj->dataType, $obj->length, $obj->driverOptions); - } - - try - { - $this->executed = $this->statement->execute(); - - // If there is a monitor registered, let it know we have finished this query - if ($this->monitor) - { - $this->monitor->stopQuery(); - } - - return true; - } - catch (\PDOException $exception) - { - // If there is a monitor registered, let it know we have finished this query - if ($this->monitor) - { - $this->monitor->stopQuery(); - } - - // Get the error number and message before we execute any more queries. - $errorNum = (int) $this->statement->errorCode(); - $errorMsg = (string) implode(', ', $this->statement->errorInfo()); - - // Check if the server was disconnected. - if (!$this->connected()) - { - try - { - // Attempt to reconnect. - $this->connection = null; - $this->connect(); - } - catch (ConnectionFailureException $e) - { - // If connect fails, ignore that exception and throw the normal exception. - throw new ExecutionFailureException($sql, $errorMsg, $errorNum); - } - - // Since we were able to reconnect, run the query again. - return $this->execute(); - } - - // Throw the normal query exception. - throw new ExecutionFailureException($sql, $errorMsg, $errorNum); - } - } - - /** - * Retrieve a PDO database connection attribute - * http://www.php.net/manual/en/pdo.getattribute.php - * - * Usage: $db->getOption(PDO::ATTR_CASE); - * - * @param mixed $key One of the PDO::ATTR_* Constants - * - * @return mixed - * - * @since 1.0 - */ - public function getOption($key) - { - $this->connect(); - - return $this->connection->getAttribute($key); - } - - /** - * Get the version of the database connector. - * - * @return string The database connector version. - * - * @since 1.5.0 - */ - public function getVersion() - { - $this->connect(); - - return $this->getOption(\PDO::ATTR_SERVER_VERSION); - } - - /** - * Get a query to run and verify the database is operational. - * - * @return string The query to check the health of the DB. - * - * @since 1.0 - */ - public function getConnectedQuery() - { - return 'SELECT 1'; - } - - /** - * Sets an attribute on the PDO database handle. - * http://www.php.net/manual/en/pdo.setattribute.php - * - * Usage: $db->setOption(PDO::ATTR_CASE, PDO::CASE_UPPER); - * - * @param integer $key One of the PDO::ATTR_* Constants - * @param mixed $value One of the associated PDO Constants - * related to the particular attribute - * key. - * - * @return boolean - * - * @since 1.0 - */ - public function setOption($key, $value) - { - $this->connect(); - - return $this->connection->setAttribute($key, $value); - } - - /** - * Test to see if the PDO extension is available. - * Override as needed to check for specific PDO Drivers. - * - * @return boolean True on success, false otherwise. - * - * @since 1.0 - */ - public static function isSupported() - { - return defined('\\PDO::ATTR_DRIVER_NAME'); - } - - /** - * Determines if the connection to the server is active. - * - * @return boolean True if connected to the database engine. - * - * @since 1.0 - */ - public function connected() - { - // Flag to prevent recursion into this function. - static $checkingConnected = false; - - if ($checkingConnected) - { - // Reset this flag and throw an exception. - $checkingConnected = true; - die('Recursion trying to check if connected.'); - } - - // Backup the query state. - $sql = $this->sql; - $limit = $this->limit; - $offset = $this->offset; - $statement = $this->statement; - - try - { - // Set the checking connection flag. - $checkingConnected = true; - - // Run a simple query to check the connection. - $this->setQuery($this->getConnectedQuery()); - $status = (bool) $this->loadResult(); - } - catch (\Exception $e) - // If we catch an exception here, we must not be connected. - { - $status = false; - } - - // Restore the query state. - $this->sql = $sql; - $this->limit = $limit; - $this->offset = $offset; - $this->statement = $statement; - $checkingConnected = false; - - return $status; - } - - /** - * Method to get the auto-incremented value from the last INSERT statement. - * - * @return string The value of the auto-increment field from the last inserted row. - * - * @since 1.0 - */ - public function insertid() - { - $this->connect(); - - // Error suppress this to prevent PDO warning us that the driver doesn't support this operation. - return @$this->connection->lastInsertId(); - } - - /** - * Select a database for use. - * - * @param string $database The name of the database to select for use. - * - * @return boolean True if the database was successfully selected. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function select($database) - { - $this->connect(); - - return true; - } - - /** - * Set the connection to use UTF-8 character encoding. - * - * @return boolean True on success. - * - * @since 1.0 - */ - public function setUtf() - { - return false; - } - - /** - * Method to commit a transaction. - * - * @param boolean $toSavepoint If true, commit to the last savepoint. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionCommit($toSavepoint = false) - { - $this->connect(); - - if (!$toSavepoint || $this->transactionDepth === 1) - { - $this->connection->commit(); - } - - $this->transactionDepth--; - } - - /** - * Method to roll back a transaction. - * - * @param boolean $toSavepoint If true, rollback to the last savepoint. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionRollback($toSavepoint = false) - { - $this->connect(); - - if (!$toSavepoint || $this->transactionDepth === 1) - { - $this->connection->rollBack(); - } - - $this->transactionDepth--; - } - - /** - * Method to initialize a transaction. - * - * @param boolean $asSavepoint If true and a transaction is already active, a savepoint will be created. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionStart($asSavepoint = false) - { - $this->connect(); - - if (!$asSavepoint || !$this->transactionDepth) - { - $this->connection->beginTransaction(); - } - - $this->transactionDepth++; - } - - /** - * Prepares a SQL statement for execution - * - * @param string $query The SQL query to be prepared. - * - * @return StatementInterface - * - * @since __DEPLOY_VERSION__ - * @throws PrepareStatementFailureException - */ - protected function prepareStatement(string $query): StatementInterface - { - try - { - return $this->connection->prepare($query, $this->options['driverOptions']); - } - catch (\PDOException $exception) - { - throw new PrepareStatementFailureException($exception->getMessage(), $exception->getCode(), $exception); - } - } - - /** - * PDO does not support serialize - * - * @return array - * - * @since 1.0 - */ - public function __sleep() - { - $serializedProperties = []; - - $reflect = new \ReflectionClass($this); - - // Get properties of the current class - $properties = $reflect->getProperties(); - - foreach ($properties as $property) - { - // Do not serialize properties that are PDO - if ($property->isStatic() === false && !($this->{$property->name} instanceof \PDO)) - { - $serializedProperties[] = $property->name; - } - } - - return $serializedProperties; - } - - /** - * Wake up after serialization - * - * @return void - * - * @since 1.0 - */ - public function __wakeup() - { - // Get connection back - $this->__construct($this->options); - } -} diff --git a/libraries/vendor/joomla/database/src/Pdo/PdoQuery.php b/libraries/vendor/joomla/database/src/Pdo/PdoQuery.php deleted file mode 100644 index f411e8b4df4e4..0000000000000 --- a/libraries/vendor/joomla/database/src/Pdo/PdoQuery.php +++ /dev/null @@ -1,188 +0,0 @@ - \PDO::PARAM_BOOL, - ParameterType::INTEGER => \PDO::PARAM_INT, - ParameterType::LARGE_OBJECT => \PDO::PARAM_LOB, - ParameterType::NULL => \PDO::PARAM_NULL, - ParameterType::STRING => \PDO::PARAM_STR, - ]; - - /** - * The list of zero or null representation of a datetime. - * - * @var array - * @since __DEPLOY_VERSION__ - */ - protected $nullDatetimeList = ['0000-00-00 00:00:00']; - - /** - * Method to add a variable to an internal array that will be bound to a prepared SQL statement before query execution. Also - * removes a variable that has been bounded from the internal bounded array when the passed in value is null. - * - * @param string|integer $key The key that will be used in your SQL query to reference the value. Usually of - * the form ':key', but can also be an integer. - * @param mixed $value The value that will be bound. The value is passed by reference to support output - * parameters such as those possible with stored procedures. - * @param integer $dataType Constant corresponding to a SQL datatype. - * @param integer $length The length of the variable. Usually required for OUTPUT parameters. - * @param array $driverOptions Optional driver options to be used. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function bind($key = null, &$value = null, $dataType = ParameterType::STRING, $length = 0, $driverOptions = []) - { - // Case 1: Empty Key (reset $bounded array) - if (empty($key)) - { - $this->bounded = []; - - return $this; - } - - // Case 2: Key Provided, null value (unset key from $bounded array) - if (is_null($value)) - { - if (isset($this->bounded[$key])) - { - unset($this->bounded[$key]); - } - - return $this; - } - - // Validate parameter type - if (!isset($this->parameterMapping[$dataType])) - { - throw new \InvalidArgumentException(sprintf('Unsupported parameter type `%s`', $dataType)); - } - - $obj = new \stdClass; - - $obj->value = &$value; - $obj->dataType = $this->parameterMapping[$dataType]; - $obj->length = $length; - $obj->driverOptions = $driverOptions; - - // Case 3: Simply add the Key/Value into the bounded array - $this->bounded[$key] = $obj; - - return $this; - } - - /** - * Clear data from the query or a specific clause of the query. - * - * @param string $clause Optionally, the name of the clause to clear, or nothing to clear the whole query. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function clear($clause = null) - { - switch ($clause) - { - case null: - $this->bounded = array(); - break; - } - - return parent::clear($clause); - } - - /** - * Retrieves the bound parameters array when key is null and returns it by reference. If a key is provided then that item is returned. - * - * @param mixed $key The bounded variable key to retrieve. - * - * @return mixed - * - * @since __DEPLOY_VERSION__ - */ - public function &getBounded($key = null) - { - if (empty($key)) - { - return $this->bounded; - } - - if (isset($this->bounded[$key])) - { - return $this->bounded[$key]; - } - } - - /** - * Sets the offset and limit for the result set, if the database driver supports it. - * - * Usage: - * $query->setLimit(100, 0); (retrieve 100 rows, starting at first record) - * $query->setLimit(50, 50); (retrieve 50 rows, starting at 50th record) - * - * @param integer $limit The limit for the result set - * @param integer $offset The offset for the result set - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function setLimit($limit = 0, $offset = 0) - { - $this->limit = (int) $limit; - $this->offset = (int) $offset; - - return $this; - } -} diff --git a/libraries/vendor/joomla/database/src/Pdo/PdoStatement.php b/libraries/vendor/joomla/database/src/Pdo/PdoStatement.php deleted file mode 100644 index 686bbc4f28393..0000000000000 --- a/libraries/vendor/joomla/database/src/Pdo/PdoStatement.php +++ /dev/null @@ -1,30 +0,0 @@ -getConnection()) - { - return; - } - - parent::connect(); - - $this->setQuery('SET standard_conforming_strings = off')->execute(); - } - - /** - * Drops a table from the database. - * - * @param string $tableName The name of the database table to drop. - * @param boolean $ifExists Optionally specify that the table must exist before it is dropped. - * - * @return boolean - * - * @since 1.5.0 - * @throws \RuntimeException - */ - public function dropTable($tableName, $ifExists = true) - { - $this->setQuery('DROP TABLE ' . ($ifExists ? 'IF EXISTS ' : '') . $this->quoteName($tableName))->execute(); - - return true; - } - - /** - * Method to get the database collation in use by sampling a text field of a table in the database. - * - * @return mixed The collation in use by the database or boolean false if not supported. - * - * @since 1.5.0 - * @throws \RuntimeException - */ - public function getCollation() - { - $this->setQuery('SHOW LC_COLLATE'); - $array = $this->loadAssocList(); - - return $array[0]['lc_collate']; - } - - /** - * Method to get the database connection collation in use by sampling a text field of a table in the database. - * - * @return mixed The collation in use by the database connection (string) or boolean false if not supported. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function getConnectionCollation() - { - $this->setQuery('SHOW LC_COLLATE'); - $array = $this->loadAssocList(); - - return $array[0]['lc_collate']; - } - - /** - * Shows the table CREATE statement that creates the given tables. - * - * This is unsuported by PostgreSQL. - * - * @param mixed $tables A table name or a list of table names. - * - * @return string An empty string because this function is not supported by PostgreSQL. - * - * @since 1.5.0 - * @throws \RuntimeException - */ - public function getTableCreate($tables) - { - return ''; - } - - /** - * Retrieves field information about a given table. - * - * @param string $table The name of the database table. - * @param boolean $typeOnly True to only return field types. - * - * @return array An array of fields for the database table. - * - * @since 1.5.0 - * @throws \RuntimeException - */ - public function getTableColumns($table, $typeOnly = true) - { - $this->connect(); - - $result = []; - - $tableSub = $this->replacePrefix($table); - - $this->setQuery(' - SELECT a.attname AS "column_name", - pg_catalog.format_type(a.atttypid, a.atttypmod) as "type", - CASE WHEN a.attnotnull IS TRUE - THEN \'NO\' - ELSE \'YES\' - END AS "null", - CASE WHEN pg_catalog.pg_get_expr(adef.adbin, adef.adrelid, true) IS NOT NULL - THEN pg_catalog.pg_get_expr(adef.adbin, adef.adrelid, true) - END as "Default", - CASE WHEN pg_catalog.col_description(a.attrelid, a.attnum) IS NULL - THEN \'\' - ELSE pg_catalog.col_description(a.attrelid, a.attnum) - END AS "comments" - FROM pg_catalog.pg_attribute a - LEFT JOIN pg_catalog.pg_attrdef adef ON a.attrelid=adef.adrelid AND a.attnum=adef.adnum - LEFT JOIN pg_catalog.pg_type t ON a.atttypid=t.oid - WHERE a.attrelid = - (SELECT oid FROM pg_catalog.pg_class WHERE relname=' . $this->quote($tableSub) . ' - AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE - nspname = \'public\') - ) - AND a.attnum > 0 AND NOT a.attisdropped - ORDER BY a.attnum' - ); - - $fields = $this->loadObjectList(); - - if ($typeOnly) - { - foreach ($fields as $field) - { - $result[$field->column_name] = preg_replace('/[(0-9)]/', '', $field->type); - } - } - else - { - foreach ($fields as $field) - { - if (stristr(strtolower($field->type), 'character varying')) - { - $field->Default = ''; - } - - if (stristr(strtolower($field->type), 'text')) - { - $field->Default = ''; - } - - // Do some dirty translation to MySQL output. - // @todo: Come up with and implement a standard across databases. - $result[$field->column_name] = (object) [ - 'column_name' => $field->column_name, - 'type' => $field->type, - 'null' => $field->null, - 'Default' => $field->Default, - 'comments' => '', - 'Field' => $field->column_name, - 'Type' => $field->type, - 'Null' => $field->null, - // @todo: Improve query above to return primary key info as well - // 'Key' => ($field->PK == '1' ? 'PRI' : '') - ]; - } - } - - // Change Postgresql's NULL::* type with PHP's null one - foreach ($fields as $field) - { - if (preg_match('/^NULL::*/', $field->Default)) - { - $field->Default = null; - } - } - - return $result; - } - - /** - * Get the details list of keys for a table. - * - * @param string $table The name of the table. - * - * @return array An array of the column specification for the table. - * - * @since 1.5.0 - * @throws \RuntimeException - */ - public function getTableKeys($table) - { - $this->connect(); - - // To check if table exists and prevent SQL injection - $tableList = $this->getTableList(); - - if (in_array($table, $tableList, true)) - { - // Get the details columns information. - $this->setQuery(' - SELECT indexname AS "idxName", indisprimary AS "isPrimary", indisunique AS "isUnique", - CASE WHEN indisprimary = true THEN - ( SELECT \'ALTER TABLE \' || tablename || \' ADD \' || pg_catalog.pg_get_constraintdef(const.oid, true) - FROM pg_constraint AS const WHERE const.conname= pgClassFirst.relname ) - ELSE pg_catalog.pg_get_indexdef(indexrelid, 0, true) - END AS "Query" - FROM pg_indexes - LEFT JOIN pg_class AS pgClassFirst ON indexname=pgClassFirst.relname - LEFT JOIN pg_index AS pgIndex ON pgClassFirst.oid=pgIndex.indexrelid - WHERE tablename=' . $this->quote($table) . ' ORDER BY indkey' - ); - - return $this->loadObjectList(); - } - - return []; - } - - /** - * Method to get an array of all tables in the database. - * - * @return array An array of all the tables in the database. - * - * @since 1.5.0 - * @throws \RuntimeException - */ - public function getTableList() - { - $query = $this->getQuery(true) - ->select('table_name') - ->from('information_schema.tables') - ->where('table_type = ' . $this->quote('BASE TABLE')) - ->where('table_schema NOT IN (' . $this->quote('pg_catalog') . ', ' . $this->quote('information_schema') . ')') - ->order('table_name ASC'); - - $this->setQuery($query); - - return $this->loadColumn(); - } - - /** - * Get the details list of sequences for a table. - * - * @param string $table The name of the table. - * - * @return array An array of sequences specification for the table. - * - * @since 1.5.0 - * @throws \RuntimeException - */ - public function getTableSequences($table) - { - // To check if table exists and prevent SQL injection - $tableList = $this->getTableList(); - - if (in_array($table, $tableList, true)) - { - $name = [ - 's.relname', 'n.nspname', 't.relname', 'a.attname', 'info.data_type', - 'info.minimum_value', 'info.maximum_value', 'info.increment', 'info.cycle_option', 'info.start_value' - ]; - - $as = [ - 'sequence', 'schema', 'table', 'column', 'data_type', 'minimum_value', 'maximum_value', 'increment', 'cycle_option', 'start_value' - ]; - - // Get the details columns information. - $query = $this->getQuery(true) - ->select($this->quoteName($name, $as)) - ->from('pg_class AS s') - ->leftJoin("pg_depend d ON d.objid = s.oid AND d.classid = 'pg_class'::regclass AND d.refclassid = 'pg_class'::regclass") - ->leftJoin('pg_class t ON t.oid = d.refobjid') - ->leftJoin('pg_namespace n ON n.oid = t.relnamespace') - ->leftJoin('pg_attribute a ON a.attrelid = t.oid AND a.attnum = d.refobjsubid') - ->leftJoin('information_schema.sequences AS info ON info.sequence_name = s.relname') - ->where('s.relkind = ' . $this->quote('S') . ' AND d.deptype = ' . $this->quote('a') . ' AND t.relname = ' . $this->quote($table)); - $this->setQuery($query); - - return $this->loadObjectList(); - } - - return []; - } - - /** - * Locks a table in the database. - * - * @param string $tableName The name of the table to unlock. - * - * @return $this - * - * @since 1.5.0 - * @throws \RuntimeException - */ - public function lockTable($tableName) - { - $this->transactionStart(); - $this->setQuery('LOCK TABLE ' . $this->quoteName($tableName) . ' IN ACCESS EXCLUSIVE MODE')->execute(); - - return $this; - } - - /** - * Renames a table in the database. - * - * @param string $oldTable The name of the table to be renamed - * @param string $newTable The new name for the table. - * @param string $backup Not used by PostgreSQL. - * @param string $prefix Not used by PostgreSQL. - * - * @return $this - * - * @since 1.5.0 - * @throws \RuntimeException - */ - public function renameTable($oldTable, $newTable, $backup = null, $prefix = null) - { - $this->connect(); - - // To check if table exists and prevent SQL injection - $tableList = $this->getTableList(); - - // Origin Table does not exist - if (!in_array($oldTable, $tableList, true)) - { - // Origin Table not found - throw new \RuntimeException('Table not found in Postgresql database.'); - } - - // Rename indexes - $subQuery = $this->getQuery(true) - ->select('indexrelid') - ->from('pg_index, pg_class') - ->where('pg_class.relname = ' . $this->quote($oldTable)) - ->where('pg_class.oid = pg_index.indrelid'); - - $this->setQuery( - $this->getQuery(true) - ->select('relname') - ->from('pg_class') - ->where('oid IN (' . (string) $subQuery . ')') - ); - - $oldIndexes = $this->loadColumn(); - - foreach ($oldIndexes as $oldIndex) - { - $changedIdxName = str_replace($oldTable, $newTable, $oldIndex); - $this->setQuery('ALTER INDEX ' . $this->escape($oldIndex) . ' RENAME TO ' . $this->escape($changedIdxName))->execute(); - } - - // Rename sequences - $subQuery = $this->getQuery(true) - ->select('oid') - ->from('pg_namespace') - ->where('nspname NOT LIKE ' . $this->quote('pg_%')) - ->where('nspname != ' . $this->quote('information_schema')); - - $this->setQuery( - $this->getQuery(true) - ->select('relname') - ->from('pg_class') - ->where('relkind = ' . $this->quote('S')) - ->where('relnamespace IN (' . (string) $subQuery . ')') - ->where('relname LIKE ' . $this->quote("%$oldTable%")) - ); - - $oldSequences = $this->loadColumn(); - - foreach ($oldSequences as $oldSequence) - { - $changedSequenceName = str_replace($oldTable, $newTable, $oldSequence); - $this->setQuery('ALTER SEQUENCE ' . $this->escape($oldSequence) . ' RENAME TO ' . $this->escape($changedSequenceName))->execute(); - } - - // Rename table - $this->setQuery('ALTER TABLE ' . $this->escape($oldTable) . ' RENAME TO ' . $this->escape($newTable))->execute(); - - return $this; - } - - /** - * This function return a field value as a prepared string to be used in a SQL statement. - * - * @param array $columns Array of table's column returned by ::getTableColumns. - * @param string $field_name The table field's name. - * @param string $field_value The variable value to quote and return. - * - * @return string The quoted string. - * - * @since 1.5.0 - */ - public function sqlValue($columns, $field_name, $field_value) - { - switch ($columns[$field_name]) - { - case 'boolean': - $val = 'NULL'; - - if ($field_value === 't' || $field_value === true || $field_value === 1 || $field_value === '1') - { - $val = 'TRUE'; - } - elseif ($field_value === 'f' || $field_value === false || $field_value === 0 || $field_value === '0') - { - $val = 'FALSE'; - } - - break; - - case 'bigint': - case 'bigserial': - case 'integer': - case 'money': - case 'numeric': - case 'real': - case 'smallint': - case 'serial': - case 'numeric,': - $val = $field_value === '' ? 'NULL' : $field_value; - break; - - case 'date': - case 'timestamp without time zone': - if (empty($field_value)) - { - $field_value = $this->getNullDate(); - } - - $val = $this->quote($field_value); - - break; - - default: - $val = $this->quote($field_value); - break; - } - - return $val; - } - - /** - * Method to commit a transaction. - * - * @param boolean $toSavepoint If true, commit to the last savepoint. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionCommit($toSavepoint = false) - { - $this->connect(); - - if (!$toSavepoint || $this->transactionDepth <= 1) - { - parent::transactionCommit($toSavepoint); - } - else - { - $this->transactionDepth--; - } - } - - /** - * Method to roll back a transaction. - * - * @param boolean $toSavepoint If true, rollback to the last savepoint. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionRollback($toSavepoint = false) - { - $this->connect(); - - if (!$toSavepoint || $this->transactionDepth <= 1) - { - parent::transactionRollback($toSavepoint); - } - else - { - $savepoint = 'SP_' . ($this->transactionDepth - 1); - $this->setQuery('ROLLBACK TO SAVEPOINT ' . $this->quoteName($savepoint)); - - if ($this->execute()) - { - $this->transactionDepth--; - $this->setQuery('RELEASE SAVEPOINT ' . $this->quoteName($savepoint))->execute(); - } - } - } - - /** - * Method to initialize a transaction. - * - * @param boolean $asSavepoint If true and a transaction is already active, a savepoint will be created. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionStart($asSavepoint = false) - { - $this->connect(); - - if (!$asSavepoint || !$this->transactionDepth) - { - parent::transactionStart($asSavepoint); - } - else - { - $savepoint = 'SP_' . $this->transactionDepth; - $this->setQuery('SAVEPOINT ' . $this->quoteName($savepoint)); - - if ($this->execute()) - { - $this->transactionDepth++; - } - } - } - - /** - * Inserts a row into a table based on an object's properties. - * - * @param string $table The name of the database table to insert into. - * @param object $object A reference to an object whose public properties match the table fields. - * @param string $key The name of the primary key. If provided the object property is updated. - * - * @return boolean True on success. - * - * @since 1.5.0 - * @throws \RuntimeException - */ - public function insertObject($table, &$object, $key = null) - { - $columns = $this->getTableColumns($table); - - $fields = []; - $values = []; - - // Iterate over the object variables to build the query fields and values. - foreach (get_object_vars($object) as $k => $v) - { - // Skip columns that don't exist in the table. - if (!array_key_exists($k, $columns)) - { - continue; - } - - // Only process non-null scalars. - if (is_array($v) || is_object($v) || $v === null) - { - continue; - } - - // Ignore any internal fields or primary keys with value 0. - if (($k[0] === '_') || ($k == $key && (($v === 0) || ($v === '0')))) - { - continue; - } - - // Prepare and sanitize the fields and values for the database query. - $fields[] = $this->quoteName($k); - $values[] = $this->sqlValue($columns, $k, $v); - } - - // Create the base insert statement. - $query = $this->getQuery(true); - - $query->insert($this->quoteName($table)) - ->columns($fields) - ->values(implode(',', $values)); - - if ($key) - { - $query->returning($key); - - // Set the query and execute the insert. - $object->$key = $this->setQuery($query)->loadResult(); - } - else - { - // Set the query and execute the insert. - $this->setQuery($query)->execute(); - } - - return true; - } - - /** - * Test to see if the PostgreSQL connector is available. - * - * @return boolean True on success, false otherwise. - * - * @since 1.5.0 - */ - public static function isSupported() - { - return class_exists('\\PDO') && in_array('pgsql', \PDO::getAvailableDrivers(), true); - } - - /** - * Returns an array containing database's table list. - * - * @return array The database's table list. - * - * @since 1.5.0 - */ - public function showTables() - { - $query = $this->getQuery(true) - ->select('table_name') - ->from('information_schema.tables') - ->where('table_type=' . $this->quote('BASE TABLE')) - ->where('table_schema NOT IN (' . $this->quote('pg_catalog') . ', ' . $this->quote('information_schema') . ' )'); - - $this->setQuery($query); - - return $this->loadColumn(); - } - - /** - * Get the substring position inside a string - * - * @param string $substring The string being sought - * @param string $string The string/column being searched - * - * @return integer The position of $substring in $string - * - * @since 1.5.0 - */ - public function getStringPositionSql($substring, $string) - { - $this->setQuery("SELECT POSITION($substring IN $string)"); - $position = $this->loadRow(); - - return $position['position']; - } - - /** - * Generate a random value - * - * @return float The random generated number - * - * @since 1.5.0 - */ - public function getRandom() - { - $this->setQuery('SELECT RANDOM()'); - $random = $this->loadAssoc(); - - return $random['random']; - } - - /** - * Get the query string to alter the database character set. - * - * @param string $dbName The database name - * - * @return string The query that alter the database query string - * - * @since 1.5.0 - */ - public function getAlterDbCharacterSet($dbName) - { - return 'ALTER DATABASE ' . $this->quoteName($dbName) . ' SET CLIENT_ENCODING TO ' . $this->quote('UTF8'); - } - - /** - * Get the query string to create new Database in correct PostgreSQL syntax. - * - * @param object $options object coming from "initialise" function to pass user and database name to database driver. - * @param boolean $utf True if the database supports the UTF-8 character set, not used in PostgreSQL "CREATE DATABASE" query. - * - * @return string The query that creates database, owned by $options['user'] - * - * @since 1.5.0 - */ - public function getCreateDbQuery($options, $utf) - { - $query = 'CREATE DATABASE ' . $this->quoteName($options->db_name) . ' OWNER ' . $this->quoteName($options->db_user); - - if ($utf) - { - $query .= ' ENCODING ' . $this->quote('UTF-8'); - } - - return $query; - } - - /** - * This function replaces a string identifier $prefix with the string held is the tablePrefix class variable. - * - * @param string $sql The SQL statement to prepare. - * @param string $prefix The common table prefix. - * - * @return string The processed SQL statement. - * - * @since 1.5.0 - */ - public function replacePrefix($sql, $prefix = '#__') - { - $sql = trim($sql); - - if (strpos($sql, '\'')) - { - // Sequence name quoted with ' ' but need to be replaced - if (strpos($sql, 'currval')) - { - $sql = explode('currval', $sql); - - for ($nIndex = 1, $nIndexMax = count($sql); $nIndex < $nIndexMax; $nIndex += 2) - { - $sql[$nIndex] = str_replace($prefix, $this->tablePrefix, $sql[$nIndex]); - } - - $sql = implode('currval', $sql); - } - - // Sequence name quoted with ' ' but need to be replaced - if (strpos($sql, 'nextval')) - { - $sql = explode('nextval', $sql); - - for ($nIndex = 1, $nIndexMax = count($sql); $nIndex < $nIndexMax; $nIndex += 2) - { - $sql[$nIndex] = str_replace($prefix, $this->tablePrefix, $sql[$nIndex]); - } - - $sql = implode('nextval', $sql); - } - - // Sequence name quoted with ' ' but need to be replaced - if (strpos($sql, 'setval')) - { - $sql = explode('setval', $sql); - - for ($nIndex = 1, $nIndexMax = count($sql); $nIndex < $nIndexMax; $nIndex += 2) - { - $sql[$nIndex] = str_replace($prefix, $this->tablePrefix, $sql[$nIndex]); - } - - $sql = implode('setval', $sql); - } - - $explodedQuery = explode('\'', $sql); - - for ($nIndex = 0, $nIndexMax = count($explodedQuery); $nIndex < $nIndexMax; $nIndex += 2) - { - if (strpos($explodedQuery[$nIndex], $prefix)) - { - $explodedQuery[$nIndex] = str_replace($prefix, $this->tablePrefix, $explodedQuery[$nIndex]); - } - } - - $replacedQuery = implode('\'', $explodedQuery); - } - else - { - $replacedQuery = str_replace($prefix, $this->tablePrefix, $sql); - } - - return $replacedQuery; - } - - /** - * Unlocks tables in the database, this command does not exist in PostgreSQL, it is automatically done on commit or rollback. - * - * @return $this - * - * @since 1.5.0 - * @throws \RuntimeException - */ - public function unlockTables() - { - $this->transactionCommit(); - - return $this; - } - - /** - * Updates a row in a table based on an object's properties. - * - * @param string $table The name of the database table to update. - * @param object $object A reference to an object whose public properties match the table fields. - * @param array $key The name of the primary key. - * @param boolean $nulls True to update null fields or false to ignore them. - * - * @return boolean - * - * @since 1.5.0 - * @throws \RuntimeException - */ - public function updateObject($table, &$object, $key, $nulls = false) - { - $columns = $this->getTableColumns($table); - $fields = []; - $where = []; - - if (is_string($key)) - { - $key = [$key]; - } - - if (is_object($key)) - { - $key = (array) $key; - } - - // Create the base update statement. - $statement = 'UPDATE ' . $this->quoteName($table) . ' SET %s WHERE %s'; - - // Iterate over the object variables to build the query fields/value pairs. - foreach (get_object_vars($object) as $k => $v) - { - // Skip columns that don't exist in the table. - if (! array_key_exists($k, $columns)) - { - continue; - } - - // Only process scalars that are not internal fields. - if (is_array($v) || is_object($v) || $k[0] === '_') - { - continue; - } - - // Set the primary key to the WHERE clause instead of a field to update. - if (in_array($k, $key, true)) - { - $key_val = $this->sqlValue($columns, $k, $v); - $where[] = $this->quoteName($k) . '=' . $key_val; - continue; - } - - // Prepare and sanitize the fields and values for the database query. - if ($v === null) - { - // If the value is null and we do not want to update nulls then ignore this field. - if (!$nulls) - { - continue; - } - - // If the value is null and we want to update nulls then set it. - $val = 'NULL'; - } - else - // The field is not null so we prep it for update. - { - $val = $this->sqlValue($columns, $k, $v); - } - - // Add the field to be updated. - $fields[] = $this->quoteName($k) . '=' . $val; - } - - // We don't have any fields to update. - if (empty($fields)) - { - return true; - } - - // Set the query and execute the update. - $this->setQuery(sprintf($statement, implode(',', $fields), implode(' AND ', $where))); - - return $this->execute(); - } -} diff --git a/libraries/vendor/joomla/database/src/Pgsql/PgsqlExporter.php b/libraries/vendor/joomla/database/src/Pgsql/PgsqlExporter.php deleted file mode 100644 index 8078b9a2362bd..0000000000000 --- a/libraries/vendor/joomla/database/src/Pgsql/PgsqlExporter.php +++ /dev/null @@ -1,120 +0,0 @@ -'; - $buffer[] = ''; - $buffer[] = ' '; - - $buffer = array_merge($buffer, $this->buildXmlStructure()); - - $buffer[] = ' '; - $buffer[] = ''; - - return implode("\n", $buffer); - } - - /** - * Builds the XML structure to export. - * - * @return array An array of XML lines (strings). - * - * @since 1.0 - * @throws \Exception if an error occurs. - */ - protected function buildXmlStructure() - { - $buffer = []; - - foreach ($this->from as $table) - { - // Replace the magic prefix if found. - $table = $this->getGenericTableName($table); - - // Get the details columns information. - $fields = $this->db->getTableColumns($table, false); - $keys = $this->db->getTableKeys($table); - $sequences = $this->db->getTableSequences($table); - - $buffer[] = ' '; - - foreach ($sequences as $sequence) - { - $buffer[] = ' '; - } - - foreach ($fields as $field) - { - $buffer[] = ' default) ? ' Default="' . $field->default . '"' : '') . ' Comments="' . $field->comments . '" />'; - } - - foreach ($keys as $key) - { - $buffer[] = ' '; - } - - $buffer[] = ' '; - } - - return $buffer; - } - - /** - * Checks if all data and options are in order prior to exporting. - * - * @return $this - * - * @since 1.5.0 - * @throws \Exception if an error is encountered. - */ - public function check() - { - // Check if the db connector has been set. - if (!($this->db instanceof PgsqlDriver)) - { - throw new \Exception('Database connection wrong type.'); - } - - // Check if the tables have been specified. - if (empty($this->from)) - { - throw new \Exception('ERROR: No Tables Specified'); - } - - return $this; - } -} diff --git a/libraries/vendor/joomla/database/src/Pgsql/PgsqlImporter.php b/libraries/vendor/joomla/database/src/Pgsql/PgsqlImporter.php deleted file mode 100644 index 19eb8c40e3fe6..0000000000000 --- a/libraries/vendor/joomla/database/src/Pgsql/PgsqlImporter.php +++ /dev/null @@ -1,538 +0,0 @@ -db instanceof PgsqlDriver)) - { - throw new \Exception('Database connection wrong type.'); - } - - // Check if the tables have been specified. - if (empty($this->from)) - { - throw new \Exception('ERROR: No Tables Specified'); - } - - return $this; - } - - /** - * Get the SQL syntax to add an index. - * - * @param \SimpleXMLElement $field The XML index definition. - * - * @return string - * - * @since 1.0 - */ - protected function getAddIndexSql(\SimpleXMLElement $field) - { - return (string) $field['Query']; - } - - /** - * Get alters for table if there is a difference. - * - * @param \SimpleXMLElement $structure The XML structure of the table. - * - * @return array - * - * @since 1.0 - */ - protected function getAlterTableSql(\SimpleXMLElement $structure) - { - $table = $this->getRealTableName($structure['name']); - $oldFields = $this->db->getTableColumns($table); - $oldKeys = $this->db->getTableKeys($table); - $oldSequence = $this->db->getTableSequences($table); - $alters = []; - - // Get the fields and keys from the XML that we are aiming for. - $newFields = $structure->xpath('field'); - $newKeys = $structure->xpath('key'); - $newSequence = $structure->xpath('sequence'); - - /* - * Sequence section - */ - - $oldSeq = $this->getSeqLookup($oldSequence); - $newSequenceLook = $this->getSeqLookup($newSequence); - - foreach ($newSequenceLook as $kSeqName => $vSeq) - { - if (isset($oldSeq[$kSeqName])) - { - // The field exists, check it's the same. - $column = $oldSeq[$kSeqName][0]; - - // Test whether there is a change. - $change = ((string) $vSeq[0]['Type'] !== $column->Type) - || ((string) $vSeq[0]['Start_Value'] !== $column->Start_Value) - || ((string) $vSeq[0]['Min_Value'] !== $column->Min_Value) - || ((string) $vSeq[0]['Max_Value'] !== $column->Max_Value) - || ((string) $vSeq[0]['Increment'] !== $column->Increment) - || ((string) $vSeq[0]['Cycle_option'] !== $column->Cycle_option) - || ((string) $vSeq[0]['Table'] !== $column->Table) - || ((string) $vSeq[0]['Column'] !== $column->Column) - || ((string) $vSeq[0]['Schema'] !== $column->Schema) - || ((string) $vSeq[0]['Name'] !== $column->Name); - - if ($change) - { - $alters[] = $this->getChangeSequenceSql($kSeqName, $vSeq); - } - - // Unset this field so that what we have left are fields that need to be removed. - unset($oldSeq[$kSeqName]); - } - else - { - // The sequence is new - $alters[] = $this->getAddSequenceSql($newSequenceLook[$kSeqName][0]); - } - } - - // Any sequences left are orphans - foreach ($oldSeq as $name => $column) - { - // Delete the sequence. - $alters[] = $this->getDropSequenceSql($name); - } - - /* - * Field section - */ - - // Loop through each field in the new structure. - foreach ($newFields as $field) - { - $fName = (string) $field['Field']; - - if (isset($oldFields[$fName])) - { - // The field exists, check it's the same. - $column = $oldFields[$fName]; - - // Test whether there is a change. - $change = ((string) $field['Type'] !== $column->Type) || ((string) $field['Null'] !== $column->Null) - || ((string) $field['Default'] !== $column->Default); - - if ($change) - { - $alters[] = $this->getChangeColumnSql($table, $field); - } - - // Unset this field so that what we have left are fields that need to be removed. - unset($oldFields[$fName]); - } - else - { - // The field is new. - $alters[] = $this->getAddColumnSql($table, $field); - } - } - - // Any columns left are orphans - foreach ($oldFields as $name => $column) - { - // Delete the column. - $alters[] = $this->getDropColumnSql($table, $name); - } - - /* - * Index section - */ - - // Get the lookups for the old and new keys - $oldLookup = $this->getKeyLookup($oldKeys); - $newLookup = $this->getKeyLookup($newKeys); - - // Loop through each key in the new structure. - foreach ($newLookup as $name => $keys) - { - // Check if there are keys on this field in the existing table. - if (isset($oldLookup[$name])) - { - $same = true; - $newCount = count($newLookup[$name]); - $oldCount = count($oldLookup[$name]); - - // There is a key on this field in the old and new tables. Are they the same? - if ($newCount === $oldCount) - { - for ($i = 0; $i < $newCount; $i++) - { - // Check only query field -> different query means different index - $same = ((string) $newLookup[$name][$i]['Query'] === $oldLookup[$name][$i]->Query); - - if (!$same) - { - // Break out of the loop. No need to check further. - break; - } - } - } - else - { - // Count is different, just drop and add. - $same = false; - } - - if (!$same) - { - $alters[] = $this->getDropIndexSql($name); - $alters[] = (string) $newLookup[$name][0]['Query']; - } - - // Unset this field so that what we have left are fields that need to be removed. - unset($oldLookup[$name]); - } - else - { - // This is a new key. - $alters[] = (string) $newLookup[$name][0]['Query']; - } - } - - // Any keys left are orphans. - foreach ($oldLookup as $name => $keys) - { - if ($oldLookup[$name][0]->is_primary === 'TRUE') - { - $alters[] = $this->getDropPrimaryKeySql($table, $oldLookup[$name][0]->Index); - } - else - { - $alters[] = $this->getDropIndexSql($name); - } - } - - return $alters; - } - - /** - * Get the SQL syntax to drop a sequence. - * - * @param string $name The name of the sequence to drop. - * - * @return string - * - * @since 1.0 - */ - protected function getDropSequenceSql($name) - { - return 'DROP SEQUENCE ' . $this->db->quoteName($name); - } - - /** - * Get the syntax to add a sequence. - * - * @param \SimpleXMLElement $field The XML definition for the sequence. - * - * @return string - * - * @since 1.0 - */ - protected function getAddSequenceSql(\SimpleXMLElement $field) - { - $sql = 'CREATE SEQUENCE ' . (string) $field['Name'] - . ' INCREMENT BY ' . (string) $field['Increment'] . ' MINVALUE ' . $field['Min_Value'] - . ' MAXVALUE ' . (string) $field['Max_Value'] . ' START ' . (string) $field['Start_Value'] - . (((string) $field['Cycle_option'] === 'NO') ? ' NO' : '') . ' CYCLE' - . ' OWNED BY ' . $this->db->quoteName((string) $field['Schema'] . '.' . (string) $field['Table'] . '.' . (string) $field['Column']); - - return $sql; - } - - /** - * Get the syntax to alter a sequence. - * - * @param \SimpleXMLElement $field The XML definition for the sequence. - * - * @return string - * - * @since 1.0 - */ - protected function getChangeSequenceSql(\SimpleXMLElement $field) - { - $sql = 'ALTER SEQUENCE ' . (string) $field['Name'] - . ' INCREMENT BY ' . (string) $field['Increment'] . ' MINVALUE ' . (string) $field['Min_Value'] - . ' MAXVALUE ' . (string) $field['Max_Value'] . ' START ' . (string) $field['Start_Value'] - . ' OWNED BY ' . $this->db->quoteName((string) $field['Schema'] . '.' . (string) $field['Table'] . '.' . (string) $field['Column']); - - return $sql; - } - - /** - * Get the syntax to alter a column. - * - * @param string $table The name of the database table to alter. - * @param \SimpleXMLElement $field The XML definition for the field. - * - * @return string - * - * @since 1.0 - */ - protected function getChangeColumnSql($table, \SimpleXMLElement $field) - { - return 'ALTER TABLE ' . $this->db->quoteName($table) . ' ALTER COLUMN ' . $this->db->quoteName((string) $field['Field']) . ' ' - . $this->getAlterColumnSql($table, $field); - } - - /** - * Get the SQL syntax for a single column that would be included in a table create statement. - * - * @param string $table The name of the database table to alter. - * @param \SimpleXMLElement $field The XML field definition. - * - * @return string - * - * @since 1.0 - */ - protected function getAlterColumnSql($table, \SimpleXMLElement $field) - { - // TODO Incorporate into parent class and use $this. - $blobs = ['text', 'smalltext', 'mediumtext', 'largetext']; - - $fName = (string) $field['Field']; - $fType = (string) $field['Type']; - $fNull = (string) $field['Null']; - - $fDefault = (isset($field['Default']) && $field['Default'] != 'NULL') ? - preg_match('/^[0-9]$/', $field['Default']) ? $field['Default'] : $this->db->quote((string) $field['Default']) - : null; - - $sql = ' TYPE ' . $fType; - - if ($fNull === 'NO') - { - if ($fDefault === null || in_array($fType, $blobs, true)) - { - $sql .= ",\nALTER COLUMN " . $this->db->quoteName($fName) . ' SET NOT NULL' - . ",\nALTER COLUMN " . $this->db->quoteName($fName) . ' DROP DEFAULT'; - } - else - { - $sql .= ",\nALTER COLUMN " . $this->db->quoteName($fName) . ' SET NOT NULL' - . ",\nALTER COLUMN " . $this->db->quoteName($fName) . ' SET DEFAULT ' . $fDefault; - } - } - else - { - if ($fDefault !== null) - { - $sql .= ",\nALTER COLUMN " . $this->db->quoteName($fName) . ' DROP NOT NULL' - . ",\nALTER COLUMN " . $this->db->quoteName($fName) . ' SET DEFAULT ' . $fDefault; - } - } - - // Sequence was created in other function, here is associated a default value but not yet owner - if (strpos($fDefault, 'nextval') !== false) - { - $sequence = $table . '_' . $fName . '_seq'; - $owner = $table . '.' . $fName; - - $sql .= ";\nALTER SEQUENCE " . $this->db->quoteName($sequence) . ' OWNED BY ' . $this->db->quoteName($owner); - } - - return $sql; - } - - /** - * Get the SQL syntax for a single column that would be included in a table create statement. - * - * @param \SimpleXMLElement $field The XML field definition. - * - * @return string - * - * @since 1.0 - */ - protected function getColumnSql(\SimpleXMLElement $field) - { - // TODO Incorporate into parent class and use $this. - $blobs = ['text', 'smalltext', 'mediumtext', 'largetext']; - - $fName = (string) $field['Field']; - $fType = (string) $field['Type']; - $fNull = (string) $field['Null']; - - $fDefault = (isset($field['Default']) && $field['Default'] != 'NULL') ? - preg_match('/^[0-9]$/', $field['Default']) ? $field['Default'] : $this->db->quote((string) $field['Default']) - : null; - - // Note, nextval() as default value means that type field is serial. - if (strpos($fDefault, 'nextval') !== false) - { - $sql = $this->db->quoteName($fName) . ' SERIAL'; - } - else - { - $sql = $this->db->quoteName($fName) . ' ' . $fType; - - if ($fNull === 'NO') - { - if ($fDefault === null || in_array($fType, $blobs, true)) - { - $sql .= ' NOT NULL'; - } - else - { - $sql .= ' NOT NULL DEFAULT ' . $fDefault; - } - } - else - { - if ($fDefault !== null) - { - $sql .= ' DEFAULT ' . $fDefault; - } - } - } - - return $sql; - } - - /** - * Get the SQL syntax to drop an index. - * - * @param string $name The name of the key to drop. - * - * @return string - * - * @since 1.0 - */ - protected function getDropIndexSql($name) - { - return 'DROP INDEX ' . $this->db->quoteName($name); - } - - /** - * Get the SQL syntax to drop a key. - * - * @param string $table The table name. - * @param string $name The constraint name. - * - * @return string - * - * @since 1.0 - */ - protected function getDropPrimaryKeySql($table, $name) - { - return 'ALTER TABLE ONLY ' . $this->db->quoteName($table) . ' DROP CONSTRAINT ' . $this->db->quoteName($name); - } - - /** - * Get the details list of keys for a table. - * - * @param array $keys An array of objects that comprise the keys for the table. - * - * @return array The lookup array. array({key name} => array(object, ...)) - * - * @since 1.2.0 - */ - protected function getKeyLookup($keys) - { - // First pass, create a lookup of the keys. - $lookup = []; - - foreach ($keys as $key) - { - if ($key instanceof \SimpleXMLElement) - { - $kName = (string) $key['Index']; - } - else - { - $kName = $key->Index; - } - - if (empty($lookup[$kName])) - { - $lookup[$kName] = []; - } - - $lookup[$kName][] = $key; - } - - return $lookup; - } - - /** - * Get the details list of sequences for a table. - * - * @param array $sequences An array of objects that comprise the sequences for the table. - * - * @return array The lookup array. array({key name} => array(object, ...)) - * - * @since 1.0 - */ - protected function getSeqLookup($sequences) - { - // First pass, create a lookup of the keys. - $lookup = []; - - foreach ($sequences as $seq) - { - if ($seq instanceof \SimpleXMLElement) - { - $sName = (string) $seq['Name']; - } - else - { - $sName = $seq->Name; - } - - if (empty($lookup[$sName])) - { - $lookup[$sName] = []; - } - - $lookup[$sName][] = $seq; - } - - return $lookup; - } - - /** - * Get the SQL syntax to add a table. - * - * @param \SimpleXMLElement $table The table information. - * - * @return string - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - protected function xmlToCreate(\SimpleXMLElement $table) - { - // TODO - Implement this - return ''; - } -} diff --git a/libraries/vendor/joomla/database/src/Pgsql/PgsqlQuery.php b/libraries/vendor/joomla/database/src/Pgsql/PgsqlQuery.php deleted file mode 100644 index cdd41da4a5a09..0000000000000 --- a/libraries/vendor/joomla/database/src/Pgsql/PgsqlQuery.php +++ /dev/null @@ -1,259 +0,0 @@ -type) - { - case 'select': - $query .= (string) $this->select; - $query .= (string) $this->from; - - if ($this->join) - { - // Special case for joins - foreach ($this->join as $join) - { - $query .= (string) $join; - } - } - - if ($this->where) - { - $query .= (string) $this->where; - } - - if ($this->selectRowNumber) - { - if ($this->order) - { - $query .= (string) $this->order; - } - - break; - } - - if ($this->group) - { - $query .= (string) $this->group; - } - - if ($this->having) - { - $query .= (string) $this->having; - } - - if ($this->merge) - { - // Special case for merge - foreach ($this->merge as $element) - { - $query .= (string) $element; - } - } - - if ($this->order) - { - $query .= (string) $this->order; - } - - if ($this->forUpdate) - { - $query .= (string) $this->forUpdate; - } - else - { - if ($this->forShare) - { - $query .= (string) $this->forShare; - } - } - - if ($this->noWait) - { - $query .= (string) $this->noWait; - } - - break; - - case 'update': - $query .= (string) $this->update; - $query .= (string) $this->set; - - if ($this->join) - { - $tmpFrom = $this->from; - $tmpWhere = $this->where ? clone $this->where : null; - $this->from = null; - - // Workaround for special case of JOIN with UPDATE - foreach ($this->join as $join) - { - $joinElem = $join->getElements(); - - $joinArray = preg_split('/\sON\s/i', $joinElem[0], 2); - - $this->from($joinArray[0]); - - if (isset($joinArray[1])) - { - $this->where($joinArray[1]); - } - } - - $query .= (string) $this->from; - - if ($this->where) - { - $query .= (string) $this->where; - } - - $this->from = $tmpFrom; - $this->where = $tmpWhere; - } - elseif ($this->where) - { - $query .= (string) $this->where; - } - - break; - - case 'insert': - $query .= (string) $this->insert; - - if ($this->values) - { - if ($this->columns) - { - $query .= (string) $this->columns; - } - - $elements = $this->values->getElements(); - - if (!($elements[0] instanceof $this)) - { - $query .= ' VALUES '; - } - - $query .= (string) $this->values; - - if ($this->returning) - { - $query .= (string) $this->returning; - } - } - - break; - - default: - $query = parent::__toString(); - break; - } - - return $this->processLimit($query, $this->limit, $this->offset); - } - - /** - * Clear data from the query or a specific clause of the query. - * - * @param string $clause Optionally, the name of the clause to clear, or nothing to clear the whole query. - * - * @return $this - * - * @since 1.0 - */ - public function clear($clause = null) - { - switch ($clause) - { - case 'limit': - $this->limit = null; - break; - - case 'offset': - $this->offset = null; - break; - - case 'forUpdate': - $this->forUpdate = null; - break; - - case 'forShare': - $this->forShare = null; - break; - - case 'noWait': - $this->noWait = null; - break; - - case 'returning': - $this->returning = null; - break; - - case 'select': - case 'update': - case 'delete': - case 'insert': - case 'querySet': - case 'from': - case 'join': - case 'set': - case 'where': - case 'group': - case 'having': - case 'merge': - case 'order': - case 'columns': - case 'values': - parent::clear($clause); - break; - - default: - $this->forUpdate = null; - $this->forShare = null; - $this->noWait = null; - $this->returning = null; - - parent::clear($clause); - break; - } - - return $this; - } -} diff --git a/libraries/vendor/joomla/database/src/Query/LimitableInterface.php b/libraries/vendor/joomla/database/src/Query/LimitableInterface.php deleted file mode 100644 index befdbd1483c0a..0000000000000 --- a/libraries/vendor/joomla/database/src/Query/LimitableInterface.php +++ /dev/null @@ -1,47 +0,0 @@ -setLimit(100, 0); (retrieve 100 rows, starting at first record) - * $query->setLimit(50, 50); (retrieve 50 rows, starting at 50th record) - * - * @param integer $limit The limit for the result set - * @param integer $offset The offset for the result set - * - * @return $this - * - * @since 1.0 - */ - public function setLimit($limit = 0, $offset = 0); -} diff --git a/libraries/vendor/joomla/database/src/Query/MysqlQueryBuilder.php b/libraries/vendor/joomla/database/src/Query/MysqlQueryBuilder.php deleted file mode 100644 index 5d79f09d70858..0000000000000 --- a/libraries/vendor/joomla/database/src/Query/MysqlQueryBuilder.php +++ /dev/null @@ -1,168 +0,0 @@ - 0 && $offset > 0) - { - $query .= ' LIMIT ' . $offset . ', ' . $limit; - } - elseif ($limit > 0) - { - $query .= ' LIMIT ' . $limit; - } - - return $query; - } - - /** - * Concatenates an array of column names or values. - * - * @param array $values An array of values to concatenate. - * @param string $separator As separator to place between each value. - * - * @return string The concatenated values. - * - * @since __DEPLOY_VERSION__ - */ - public function concatenate($values, $separator = null) - { - if ($separator) - { - $concat_string = 'CONCAT_WS(' . $this->quote($separator); - - foreach ($values as $value) - { - $concat_string .= ', ' . $value; - } - - return $concat_string . ')'; - } - - return 'CONCAT(' . implode(',', $values) . ')'; - } - - /** - * Method to quote and optionally escape a string to database requirements for insertion into the database. - * - * This method is provided for use where the query object is passed to a function for modification. - * If you have direct access to the database object, it is recommended you use the quote method directly. - * - * Note that 'q' is an alias for this method as it is in DatabaseDriver. - * - * Usage: - * $query->quote('fulltext'); - * $query->q('fulltext'); - * $query->q(array('option', 'fulltext')); - * - * @param array|string $text A string or an array of strings to quote. - * @param boolean $escape True (default) to escape the string, false to leave it unchanged. - * - * @return string The quoted input string. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException if the internal db property is not a valid object. - */ - abstract public function quote($text, $escape = true); - - /** - * Get the regular expression operator - * - * Usage: - * $query->where('field ' . $query->regexp($search)); - * - * @param string $value The regex pattern. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function regexp($value) - { - return ' REGEXP ' . $value; - } - - /** - * Get the function to return a random floating-point value - * - * Usage: - * $query->rand(); - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function rand() - { - return ' RAND() '; - } - - /** - * Find a value in a varchar used like a set. - * - * Ensure that the value is an integer before passing to the method. - * - * Usage: - * $query->findInSet((int) $parent->id, 'a.assigned_cat_ids') - * - * @param string $value The value to search for. - * @param string $set The set of values. - * - * @return string A representation of the MySQL find_in_set() function for the driver. - * - * @since __DEPLOY_VERSION__ - */ - public function findInSet($value, $set) - { - return ' find_in_set(' . $value . ', ' . $set . ')'; - } - - /** - * Return the number of the current row. - * - * Usage: - * $query->select('id'); - * $query->selectRowNumber('ordering,publish_up DESC', 'new_ordering'); - * $query->from('#__content'); - * - * @param string $orderBy An expression of ordering for window function. - * @param string $orderColumnAlias An alias for new ordering column. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function selectRowNumber($orderBy, $orderColumnAlias) - { - $this->validateRowNumber($orderBy, $orderColumnAlias); - - return $this->select("(SELECT @rownum := @rownum + 1 FROM (SELECT @rownum := 0) AS r) AS $orderColumnAlias"); - } -} diff --git a/libraries/vendor/joomla/database/src/Query/PostgresqlQueryBuilder.php b/libraries/vendor/joomla/database/src/Query/PostgresqlQueryBuilder.php deleted file mode 100644 index 489826b659563..0000000000000 --- a/libraries/vendor/joomla/database/src/Query/PostgresqlQueryBuilder.php +++ /dev/null @@ -1,459 +0,0 @@ -select($query->castAsChar('a')); - * - * @param string $value The value to cast as a char. - * - * @return string Returns the cast value. - * - * @since __DEPLOY_VERSION__ - */ - public function castAsChar($value) - { - return $value . '::text'; - } - - /** - * Concatenates an array of column names or values. - * - * Usage: - * $query->select($query->concatenate(array('a', 'b'))); - * - * @param array $values An array of values to concatenate. - * @param string $separator As separator to place between each value. - * - * @return string The concatenated values. - * - * @since __DEPLOY_VERSION__ - */ - public function concatenate($values, $separator = null) - { - if ($separator) - { - return implode(' || ' . $this->quote($separator) . ' || ', $values); - } - - return implode(' || ', $values); - } - - /** - * Gets the current date and time. - * - * @return string Return string used in query to obtain - * - * @since __DEPLOY_VERSION__ - */ - public function currentTimestamp() - { - return 'NOW()'; - } - - /** - * Sets the FOR UPDATE lock on select's output row - * - * @param string $table_name The table to lock - * @param string $glue The glue by which to join the conditions. Defaults to ',' . - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function forUpdate($table_name, $glue = ',') - { - $this->type = 'forUpdate'; - - if (is_null($this->forUpdate)) - { - $glue = strtoupper($glue); - $this->forUpdate = new QueryElement('FOR UPDATE', 'OF ' . $table_name, "$glue "); - } - else - { - $this->forUpdate->append($table_name); - } - - return $this; - } - - /** - * Sets the FOR SHARE lock on select's output row - * - * @param string $table_name The table to lock - * @param string $glue The glue by which to join the conditions. Defaults to ',' . - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function forShare($table_name, $glue = ',') - { - $this->type = 'forShare'; - - if (is_null($this->forShare)) - { - $glue = strtoupper($glue); - $this->forShare = new QueryElement('FOR SHARE', 'OF ' . $table_name, "$glue "); - } - else - { - $this->forShare->append($table_name); - } - - return $this; - } - - /** - * Used to get a string to extract year from date column. - * - * Usage: - * $query->select($query->year($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing year to be extracted. - * - * @return string Returns string to extract year from a date. - * - * @since __DEPLOY_VERSION__ - */ - public function year($date) - { - return 'EXTRACT (YEAR FROM ' . $date . ')'; - } - - /** - * Used to get a string to extract month from date column. - * - * Usage: - * $query->select($query->month($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing month to be extracted. - * - * @return string Returns string to extract month from a date. - * - * @since __DEPLOY_VERSION__ - */ - public function month($date) - { - return 'EXTRACT (MONTH FROM ' . $date . ')'; - } - - /** - * Used to get a string to extract day from date column. - * - * Usage: - * $query->select($query->day($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing day to be extracted. - * - * @return string Returns string to extract day from a date. - * - * @since __DEPLOY_VERSION__ - */ - public function day($date) - { - return 'EXTRACT (DAY FROM ' . $date . ')'; - } - - /** - * Used to get a string to extract hour from date column. - * - * Usage: - * $query->select($query->hour($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing hour to be extracted. - * - * @return string Returns string to extract hour from a date. - * - * @since __DEPLOY_VERSION__ - */ - public function hour($date) - { - return 'EXTRACT (HOUR FROM ' . $date . ')'; - } - - /** - * Used to get a string to extract minute from date column. - * - * Usage: - * $query->select($query->minute($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing minute to be extracted. - * - * @return string Returns string to extract minute from a date. - * - * @since __DEPLOY_VERSION__ - */ - public function minute($date) - { - return 'EXTRACT (MINUTE FROM ' . $date . ')'; - } - - /** - * Used to get a string to extract seconds from date column. - * - * Usage: - * $query->select($query->second($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing second to be extracted. - * - * @return string Returns string to extract second from a date. - * - * @since __DEPLOY_VERSION__ - */ - public function second($date) - { - return 'EXTRACT (SECOND FROM ' . $date . ')'; - } - - /** - * Sets the NOWAIT lock on select's output row - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function noWait() - { - $this->type = 'noWait'; - - if (is_null($this->noWait)) - { - $this->noWait = new QueryElement('NOWAIT', null); - } - - return $this; - } - - /** - * Set the LIMIT clause to the query - * - * @param integer $limit Number of rows to return - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function limit($limit = 0) - { - if (is_null($this->limit)) - { - $this->limit = new QueryElement('LIMIT', (int) $limit); - } - - return $this; - } - - /** - * Set the OFFSET clause to the query - * - * @param integer $offset An integer for skipping rows - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function offset($offset = 0) - { - if (is_null($this->offset)) - { - $this->offset = new QueryElement('OFFSET', (int) $offset); - } - - return $this; - } - - /** - * Add the RETURNING element to INSERT INTO statement. - * - * @param mixed $pkCol The name of the primary key column. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function returning($pkCol) - { - if (is_null($this->returning)) - { - $this->returning = new QueryElement('RETURNING', $pkCol); - } - - return $this; - } - - /** - * Method to modify a query already in string format with the needed additions to make the query limited to a particular number of - * results, or start at a particular offset. - * - * @param string $query The query in string format - * @param integer $limit The limit for the result set - * @param integer $offset The offset for the result set - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function processLimit($query, $limit, $offset = 0) - { - if ($limit > 0) - { - $query .= ' LIMIT ' . $limit; - } - - if ($offset > 0) - { - $query .= ' OFFSET ' . $offset; - } - - return $query; - } - - /** - * Add to the current date and time. - * - * Usage: - * $query->select($query->dateAdd()); - * - * Prefixing the interval with a - (negative sign) will cause subtraction to be used. - * - * @param datetime $date The date to add to - * @param string $interval The string representation of the appropriate number of units - * @param string $datePart The part of the date to perform the addition on - * - * @return string The string with the appropriate sql for addition of dates - * - * @since __DEPLOY_VERSION__ - * @link http://www.postgresql.org/docs/9.0/static/functions-datetime.html. - */ - public function dateAdd($date, $interval, $datePart) - { - if (substr($interval, 0, 1) !== '-') - { - return "timestamp '" . $date . "' + interval '" . $interval . ' ' . $datePart . "'"; - } - else - { - return "timestamp '" . $date . "' - interval '" . ltrim($interval, '-') . ' ' . $datePart . "'"; - } - } - - /** - * Get the regular expression operator - * - * Usage: - * $query->where('field ' . $query->regexp($search)); - * - * @param string $value The regex pattern. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function regexp($value) - { - return ' ~* ' . $value; - } - - /** - * Get the function to return a random floating-point value - * - * Usage: - * $query->rand(); - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function rand() - { - return ' RANDOM() '; - } - - /** - * Find a value in a varchar used like a set. - * - * Ensure that the value is an integer before passing to the method. - * - * Usage: - * $query->findInSet((int) $parent->id, 'a.assigned_cat_ids') - * - * @param string $value The value to search for. - * @param string $set The set of values. - * - * @return string A representation of the MySQL find_in_set() function for the driver. - * - * @since __DEPLOY_VERSION__ - */ - public function findInSet($value, $set) - { - return " $value = ANY (string_to_array($set, ',')::integer[]) "; - } -} diff --git a/libraries/vendor/joomla/database/src/Query/PreparableInterface.php b/libraries/vendor/joomla/database/src/Query/PreparableInterface.php deleted file mode 100644 index ea4fd9a8dddbd..0000000000000 --- a/libraries/vendor/joomla/database/src/Query/PreparableInterface.php +++ /dev/null @@ -1,50 +0,0 @@ -name = $name; - $this->glue = $glue; - - $this->append($elements); - } - - /** - * Magic function to convert the query element to a string. - * - * @return string - * - * @since 1.0 - */ - public function __toString() - { - if (substr($this->name, -2) === '()') - { - return PHP_EOL . substr($this->name, 0, -2) . '(' . implode($this->glue, $this->elements) . ')'; - } - - return PHP_EOL . $this->name . ' ' . implode($this->glue, $this->elements); - } - - /** - * Appends element parts to the internal list. - * - * @param mixed $elements String or array. - * - * @return void - * - * @since 1.0 - */ - public function append($elements) - { - if (is_array($elements)) - { - $this->elements = array_merge($this->elements, $elements); - } - else - { - $this->elements = array_merge($this->elements, [$elements]); - } - } - - /** - * Gets the elements of this element. - * - * @return array - * - * @since 1.0 - */ - public function getElements() - { - return $this->elements; - } - - /** - * Sets the name of this element. - * - * @param string $name Name of the element. - * - * @return $this - * - * @since 1.3.0 - */ - public function setName($name) - { - $this->name = $name; - - return $this; - } - - /** - * Method to provide deep copy support to nested objects and arrays when cloning. - * - * @return void - * - * @since 1.0 - */ - public function __clone() - { - foreach ($this as $k => $v) - { - if (is_object($v) || is_array($v)) - { - $this->{$k} = unserialize(serialize($v)); - } - } - } -} diff --git a/libraries/vendor/joomla/database/src/QueryInterface.php b/libraries/vendor/joomla/database/src/QueryInterface.php deleted file mode 100644 index 01630a85a3bbf..0000000000000 --- a/libraries/vendor/joomla/database/src/QueryInterface.php +++ /dev/null @@ -1,633 +0,0 @@ -call('a.*')->call('b.id'); - * $query->call(array('a.*', 'b.id')); - * - * @param array|string $columns A string or an array of field names. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function call($columns); - - /** - * Casts a value to a char. - * - * Ensure that the value is properly quoted before passing to the method. - * - * Usage: - * $query->select($query->castAsChar('a')); - * - * @param string $value The value to cast as a char. - * - * @return string SQL statement to cast the value as a char type. - * - * @since __DEPLOY_VERSION__ - */ - public function castAsChar($value); - - /** - * Gets the number of characters in a string. - * - * Note, use 'length' to find the number of bytes in a string. - * - * Usage: - * $query->select($query->charLength('a')); - * - * @param string $field A value. - * @param string $operator Comparison operator between charLength integer value and $condition - * @param string $condition Integer value to compare charLength with. - * - * @return string SQL statement to get the length of a character. - * - * @since __DEPLOY_VERSION__ - */ - public function charLength($field, $operator = null, $condition = null); - - /** - * Clear data from the query or a specific clause of the query. - * - * @param string $clause Optionally, the name of the clause to clear, or nothing to clear the whole query. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function clear($clause = null); - - /** - * Adds a column, or array of column names that would be used for an INSERT INTO statement. - * - * @param array|string $columns A column name, or array of column names. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function columns($columns); - - /** - * Concatenates an array of column names or values. - * - * Usage: - * $query->select($query->concatenate(array('a', 'b'))); - * - * @param array $values An array of values to concatenate. - * @param string $separator As separator to place between each value. - * - * @return string SQL statement representing the concatenated values. - * - * @since __DEPLOY_VERSION__ - */ - public function concatenate($values, $separator = null); - - /** - * Gets the current date and time. - * - * Usage: - * $query->where('published_up < '.$query->currentTimestamp()); - * - * @return string SQL statement to get the current timestamp. - * - * @since __DEPLOY_VERSION__ - */ - public function currentTimestamp(); - - /** - * Add a table name to the DELETE clause of the query. - * - * Note that you must not mix insert, update, delete and select method calls when building a query. - * - * Usage: - * $query->delete('#__a')->where('id = 1'); - * - * @param string $table The name of the table to delete from. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function delete($table = null); - - /** - * Add a single column, or array of columns to the EXEC clause of the query. - * - * Note that you must not mix insert, update, delete and select method calls when building a query. - * The exec method can, however, be called multiple times in the same query. - * - * Usage: - * $query->exec('a.*')->exec('b.id'); - * $query->exec(array('a.*', 'b.id')); - * - * @param array|string $columns A string or an array of field names. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function exec($columns); - - /** - * Find a value in a varchar used like a set. - * - * Ensure that the value is an integer before passing to the method. - * - * Usage: - * $query->findInSet((int) $parent->id, 'a.assigned_cat_ids') - * - * @param string $value The value to search for. - * @param string $set The set of values. - * - * @return string A representation of the MySQL find_in_set() function for the driver. - * - * @since __DEPLOY_VERSION__ - */ - public function findInSet($value, $set); - - /** - * Add a table to the FROM clause of the query. - * - * Note that while an array of tables can be provided, it is recommended you use explicit joins. - * - * Usage: - * $query->select('*')->from('#__a'); - * - * @param array|string $tables A string or array of table names. This can be a QueryInterface object (or a child of it) when used - * as a subquery in FROM clause along with a value for $subQueryAlias. - * @param string $subQueryAlias Alias used when $tables is a QueryInterface. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function from($tables, $subQueryAlias = null); - - /** - * Used to get a string to extract year from date column. - * - * Usage: - * $query->select($query->year($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing year to be extracted. - * - * @return string SQL statement to get the year from a date value. - * - * @since __DEPLOY_VERSION__ - */ - public function year($date); - - /** - * Used to get a string to extract month from date column. - * - * Usage: - * $query->select($query->month($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing month to be extracted. - * - * @return string SQL statement to get the month from a date value. - * - * @since __DEPLOY_VERSION__ - */ - public function month($date); - - /** - * Used to get a string to extract day from date column. - * - * Usage: - * $query->select($query->day($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing day to be extracted. - * - * @return string SQL statement to get the day from a date value. - * - * @since __DEPLOY_VERSION__ - */ - public function day($date); - - /** - * Used to get a string to extract hour from date column. - * - * Usage: - * $query->select($query->hour($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing hour to be extracted. - * - * @return string SQL statement to get the hour from a date/time value. - * - * @since __DEPLOY_VERSION__ - */ - public function hour($date); - - /** - * Used to get a string to extract minute from date column. - * - * Usage: - * $query->select($query->minute($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing minute to be extracted. - * - * @return string SQL statement to get the minute from a date/time value. - * - * @since __DEPLOY_VERSION__ - */ - public function minute($date); - - /** - * Used to get a string to extract seconds from date column. - * - * Usage: - * $query->select($query->second($query->quoteName('dateColumn'))); - * - * @param string $date Date column containing second to be extracted. - * - * @return string SQL statement to get the second from a date/time value. - * - * @since __DEPLOY_VERSION__ - */ - public function second($date); - - /** - * Add a grouping column to the GROUP clause of the query. - * - * Usage: - * $query->group('id'); - * - * @param array|string $columns A string or array of ordering columns. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function group($columns); - - /** - * A conditions to the HAVING clause of the query. - * - * Usage: - * $query->group('id')->having('COUNT(id) > 5'); - * - * @param array|string $conditions A string or array of columns. - * @param string $glue The glue by which to join the conditions. Defaults to AND. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function having($conditions, $glue = 'AND'); - - /** - * Add a table name to the INSERT clause of the query. - * - * Note that you must not mix insert, update, delete and select method calls when building a query. - * - * Usage: - * $query->insert('#__a')->set('id = 1'); - * $query->insert('#__a')->columns('id, title')->values('1,2')->values('3,4'); - * $query->insert('#__a')->columns('id, title')->values(array('1,2', '3,4')); - * - * @param string $table The name of the table to insert data into. - * @param boolean $incrementField The name of the field to auto increment. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function insert($table, $incrementField = false); - - /** - * Add a JOIN clause to the query. - * - * Usage: - * $query->join('INNER', 'b ON b.id = a.id); - * - * @param string $type The type of join. This string is prepended to the JOIN keyword. - * @param array|string $conditions A string or array of conditions. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function join($type, $conditions); - - /** - * Get the length of a string in bytes. - * - * Note, use 'charLength' to find the number of characters in a string. - * - * Usage: - * query->where($query->length('a').' > 3'); - * - * @param string $value The string to measure. - * - * @return integer - * - * @since __DEPLOY_VERSION__ - */ - public function length($value); - - /** - * Get the null or zero representation of a timestamp for the database driver. - * - * This method is provided for use where the query object is passed to a function for modification. - * If you have direct access to the database object, it is recommended you use the nullDate method directly. - * - * Usage: - * $query->where('modified_date <> '.$query->nullDate()); - * - * @param boolean $quoted Optionally wraps the null date in database quotes (true by default). - * - * @return string Null or zero representation of a timestamp. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function nullDate($quoted = true); - - /** - * Generate a SQL statement to check if column represents a zero or null datetime. - * - * Usage: - * $query->where($query->isNullDatetime('modified_date')); - * - * @param string $column A column name. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function isNullDatetime($column); - - /** - * Add an ordering column to the ORDER clause of the query. - * - * Usage: - * $query->order('foo')->order('bar'); - * $query->order(array('foo','bar')); - * - * @param array|string $columns A string or array of ordering columns. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function order($columns); - - /** - * Get the function to return a random floating-point value - * - * Usage: - * $query->rand(); - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function rand(); - - /** - * Get the regular expression operator - * - * Usage: - * $query->where('field ' . $query->regexp($search)); - * - * @param string $value The regex pattern. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function regexp($value); - - /** - * Add a single column, or array of columns to the SELECT clause of the query. - * - * Note that you must not mix insert, update, delete and select method calls when building a query. - * The select method can, however, be called multiple times in the same query. - * - * Usage: - * $query->select('a.*')->select('b.id'); - * $query->select(array('a.*', 'b.id')); - * - * @param array|string $columns A string or an array of field names. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function select($columns); - - /** - * Return the number of the current row. - * - * Usage: - * $query->select('id'); - * $query->selectRowNumber('ordering,publish_up DESC', 'new_ordering'); - * $query->from('#__content'); - * - * @param string $orderBy An expression of ordering for window function. - * @param string $orderColumnAlias An alias for new ordering column. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function selectRowNumber($orderBy, $orderColumnAlias); - - /** - * Add a single condition string, or an array of strings to the SET clause of the query. - * - * Usage: - * $query->set('a = 1')->set('b = 2'); - * $query->set(array('a = 1', 'b = 2'); - * - * @param array|string $conditions A string or array of string conditions. - * @param string $glue The glue by which to join the condition strings. Defaults to `,`. - * Note that the glue is set on first use and cannot be changed. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function set($conditions, $glue = ','); - - /** - * Add a table name to the UPDATE clause of the query. - * - * Note that you must not mix insert, update, delete and select method calls when building a query. - * - * Usage: - * $query->update('#__foo')->set(...); - * - * @param string $table A table to update. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function update($table); - - /** - * Adds a tuple, or array of tuples that would be used as values for an INSERT INTO statement. - * - * Usage: - * $query->values('1,2,3')->values('4,5,6'); - * $query->values(array('1,2,3', '4,5,6')); - * - * @param array|string $values A single tuple, or array of tuples. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function values($values); - - /** - * Add a single condition, or an array of conditions to the WHERE clause of the query. - * - * Usage: - * $query->where('a = 1')->where('b = 2'); - * $query->where(array('a = 1', 'b = 2')); - * - * @param array|string $conditions A string or array of where conditions. - * @param string $glue The glue by which to join the conditions. Defaults to AND. - * Note that the glue is set on first use and cannot be changed. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function where($conditions, $glue = 'AND'); - - /** - * Add a WHERE IN statement to the query - * - * Usage: - * $query->whereIn('id', [1, 2, 3]); - * - * @param string $keyName A string representing the key name for the where clause - * @param array $keyValues The array of values to be matched - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function whereIn($keyName, $keyValues); - - /** - * Extend the WHERE clause with a single condition or an array of conditions, with a potentially different logical operator from the one in the - * current WHERE clause. - * - * Usage: - * $query->where(array('a = 1', 'b = 2'))->extendWhere('XOR', array('c = 3', 'd = 4')); - * will produce: WHERE ((a = 1 AND b = 2) XOR (c = 3 AND d = 4) - * - * @param string $outerGlue The glue by which to join the conditions to the current WHERE conditions. - * @param mixed $conditions A string or array of WHERE conditions. - * @param string $innerGlue The glue by which to join the conditions. Defaults to AND. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function extendWhere($outerGlue, $conditions, $innerGlue = 'AND'); - - /** - * Add a query to UNION with the current query. - * - * Usage: - * $query->union('SELECT name FROM #__foo') - * $query->union('SELECT name FROM #__foo', true) - * - * @param DatabaseQuery|string $query The DatabaseQuery object or string to union. - * @param boolean $distinct True to only return distinct rows from the union. - * - * @return $this - * - * @since 1.0 - */ - public function union($query, $distinct = true); - - /** - * Add a query to UNION ALL with the current query. - * - * Usage: - * $query->unionAll('SELECT name FROM #__foo') - * - * @param DatabaseQuery|string $query The DatabaseQuery object or string to union. - * - * @return $this - * - * @see union - * @since 1.5.0 - */ - public function unionAll($query); - - /** - * Set a single query to the query set. - * On this type of DatabaseQuery you can use union(), unioAll(), order() and setLimit() - * - * Usage: - * $query->querySet($query2->select('name')->from('#__foo')->order('id DESC')->setLimit(1)) - * ->unionAll($query3->select('name')->from('#__foo')->order('id')->setLimit(1)) - * ->order('name') - * ->setLimit(1) - * - * @param DatabaseQuery|string $query The DatabaseQuery object or string. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function querySet($query); - - /** - * Create a DatabaseQuery object of type querySet from current query. - * - * Usage: - * $query->select('name')->from('#__foo')->order('id DESC')->setLimit(1) - * ->toQuerySet() - * ->unionAll($query2->select('name')->from('#__foo')->order('id')->setLimit(1)) - * ->order('name') - * ->setLimit(1) - * - * @return DatabaseQuery A new object of the DatabaseQuery. - * - * @since __DEPLOY_VERSION__ - */ - public function toQuerySet(); -} diff --git a/libraries/vendor/joomla/database/src/QueryMonitorInterface.php b/libraries/vendor/joomla/database/src/QueryMonitorInterface.php deleted file mode 100644 index fe398ed174d4d..0000000000000 --- a/libraries/vendor/joomla/database/src/QueryMonitorInterface.php +++ /dev/null @@ -1,37 +0,0 @@ -alias(DatabaseInterface::class, DatabaseDriver::class) - ->share( - DatabaseDriver::class, - function (Container $container) - { - /** @var \Joomla\Registry\Registry $config */ - $config = $container->get('config'); - $options = (array) $config->get('database'); - - return $container->get(DatabaseFactory::class)->getDriver($options['driver'], $options); - } - ); - - $container->share( - DatabaseFactory::class, - function (Container $container) - { - return new DatabaseFactory; - } - ); - } -} diff --git a/libraries/vendor/joomla/database/src/Sqlazure/SqlazureDriver.php b/libraries/vendor/joomla/database/src/Sqlazure/SqlazureDriver.php deleted file mode 100644 index a1885a77a748f..0000000000000 --- a/libraries/vendor/joomla/database/src/Sqlazure/SqlazureDriver.php +++ /dev/null @@ -1,28 +0,0 @@ -disconnect(); - } - - /** - * Connects to the database if needed. - * - * @return void Returns void if the database connected successfully. - * - * @since __DEPLOY_VERSION__ - * @throws RuntimeException - */ - public function connect() - { - if ($this->connection) - { - return; - } - - parent::connect(); - - $this->connection->sqliteCreateFunction( - 'ROW_NUMBER', - function ($init = null) - { - static $rownum, $partition; - - if ($init !== null) - { - $rownum = $init; - $partition = null; - - return $rownum; - } - - $args = func_get_args(); - array_shift($args); - - $partitionBy = $args ? implode(',', $args) : null; - - if ($partitionBy === null || $partitionBy === $partition) - { - $rownum++; - } - else - { - $rownum = 1; - $partition = $partitionBy; - } - - return $rownum; - } - ); - } - - /** - * Drops a table from the database. - * - * @param string $tableName The name of the database table to drop. - * @param boolean $ifExists Optionally specify that the table must exist before it is dropped. - * - * @return $this - * - * @since 1.0 - */ - public function dropTable($tableName, $ifExists = true) - { - $this->connect(); - - $this->setQuery('DROP TABLE ' . ($ifExists ? 'IF EXISTS ' : '') . $this->quoteName($tableName)) - ->execute(); - - return $this; - } - - /** - * Method to escape a string for usage in an SQLite statement. - * - * Note: Using query objects with bound variables is preferable to the below. - * - * @param string $text The string to be escaped. - * @param boolean $extra Unused optional parameter to provide extra escaping. - * - * @return string The escaped string. - * - * @since 1.0 - */ - public function escape($text, $extra = false) - { - if (is_int($text)) - { - return $text; - } - - if (is_float($text)) - { - // Force the dot as a decimal point. - return str_replace(',', '.', $text); - } - - return \SQLite3::escapeString($text); - } - - /** - * Method to get the database collation in use by sampling a text field of a table in the database. - * - * @return mixed The collation in use by the database or boolean false if not supported. - * - * @since 1.0 - */ - public function getCollation() - { - return $this->charset; - } - - /** - * Method to get the database connection collation in use by sampling a text field of a table in the database. - * - * @return mixed The collation in use by the database connection (string) or boolean false if not supported. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function getConnectionCollation() - { - return $this->charset; - } - - /** - * Shows the table CREATE statement that creates the given tables. - * - * Note: Doesn't appear to have support in SQLite - * - * @param mixed $tables A table name or a list of table names. - * - * @return array A list of the create SQL for the tables. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableCreate($tables) - { - $this->connect(); - - // Sanitize input to an array and iterate over the list. - $tables = (array) $tables; - - return $tables; - } - - /** - * Retrieves field information about a given table. - * - * @param string $table The name of the database table. - * @param boolean $typeOnly True to only return field types. - * - * @return array An array of fields for the database table. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableColumns($table, $typeOnly = true) - { - $this->connect(); - - $columns = []; - - $fieldCasing = $this->getOption(\PDO::ATTR_CASE); - - $this->setOption(\PDO::ATTR_CASE, \PDO::CASE_UPPER); - - $table = strtoupper($table); - - $fields = $this->setQuery('pragma table_info(' . $table . ')')->loadObjectList(); - - if ($typeOnly) - { - foreach ($fields as $field) - { - $columns[$field->NAME] = $field->TYPE; - } - } - else - { - foreach ($fields as $field) - { - // Do some dirty translation to MySQL output. - // TODO: Come up with and implement a standard across databases. - $columns[$field->NAME] = (object) [ - 'Field' => $field->NAME, - 'Type' => $field->TYPE, - 'Null' => $field->NOTNULL == '1' ? 'NO' : 'YES', - 'Default' => $field->DFLT_VALUE, - 'Key' => $field->PK != '0' ? 'PRI' : '', - ]; - } - } - - $this->setOption(\PDO::ATTR_CASE, $fieldCasing); - - return $columns; - } - - /** - * Get the details list of keys for a table. - * - * @param string $table The name of the table. - * - * @return array An array of the column specification for the table. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableKeys($table) - { - $this->connect(); - - $keys = []; - - $fieldCasing = $this->getOption(\PDO::ATTR_CASE); - - $this->setOption(\PDO::ATTR_CASE, \PDO::CASE_UPPER); - - $table = strtoupper($table); - - $rows = $this->setQuery('pragma table_info( ' . $table . ')')->loadObjectList(); - - foreach ($rows as $column) - { - if ($column->PK == 1) - { - $keys[$column->NAME] = $column; - } - } - - $this->setOption(\PDO::ATTR_CASE, $fieldCasing); - - return $keys; - } - - /** - * Method to get an array of all tables in the database (schema). - * - * @return array An array of all the tables in the database. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableList() - { - $this->connect(); - - $type = 'table'; - - /** @var SqliteQuery $query */ - $query = $this->getQuery(true); - $query->select('name'); - $query->from('sqlite_master'); - $query->where('type = :type'); - $query->bind(':type', $type); - $query->order('name'); - - return $this->setQuery($query)->loadColumn(); - } - - /** - * Get the version of the database connector. - * - * @return string The database connector version. - * - * @since 1.0 - */ - public function getVersion() - { - $this->connect(); - - return $this->setQuery("SELECT sqlite_version()")->loadResult(); - } - - /** - * Select a database for use. - * - * @param string $database The name of the database to select for use. - * - * @return boolean True if the database was successfully selected. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function select($database) - { - $this->connect(); - - return true; - } - - /** - * Set the connection to use UTF-8 character encoding. - * - * Returns false automatically for the Oracle driver since - * you can only set the character set when the connection - * is created. - * - * @return boolean True on success. - * - * @since 1.0 - */ - public function setUtf() - { - $this->connect(); - - return false; - } - - /** - * Locks a table in the database. - * - * @param string $table The name of the table to unlock. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function lockTable($table) - { - return $this; - } - - /** - * Renames a table in the database. - * - * @param string $oldTable The name of the table to be renamed - * @param string $newTable The new name for the table. - * @param string $backup Not used by Sqlite. - * @param string $prefix Not used by Sqlite. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function renameTable($oldTable, $newTable, $backup = null, $prefix = null) - { - $this->setQuery('ALTER TABLE ' . $oldTable . ' RENAME TO ' . $newTable)->execute(); - - return $this; - } - - /** - * Method to truncate a table. - * - * @param string $table The table to truncate - * - * @return void - * - * @since 1.2.1 - * @throws \RuntimeException - */ - public function truncateTable($table) - { - $this->setQuery('DELETE FROM ' . $this->quoteName($table)) - ->execute(); - } - - /** - * Unlocks tables in the database. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function unlockTables() - { - return $this; - } - - /** - * Test to see if the PDO ODBC connector is available. - * - * @return boolean True on success, false otherwise. - * - * @since 1.0 - */ - public static function isSupported() - { - return class_exists('\\PDO') && class_exists('\\SQLite3') && in_array('sqlite', \PDO::getAvailableDrivers(), true); - } - - /** - * Method to commit a transaction. - * - * @param boolean $toSavepoint If true, commit to the last savepoint. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionCommit($toSavepoint = false) - { - $this->connect(); - - if (!$toSavepoint || $this->transactionDepth <= 1) - { - parent::transactionCommit($toSavepoint); - } - else - { - $this->transactionDepth--; - } - } - - /** - * Method to roll back a transaction. - * - * @param boolean $toSavepoint If true, rollback to the last savepoint. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionRollback($toSavepoint = false) - { - $this->connect(); - - if (!$toSavepoint || $this->transactionDepth <= 1) - { - parent::transactionRollback($toSavepoint); - } - else - { - $savepoint = 'SP_' . ($this->transactionDepth - 1); - $this->setQuery('ROLLBACK TO ' . $this->quoteName($savepoint))->execute(); - - $this->transactionDepth--; - } - } - - /** - * Method to initialize a transaction. - * - * @param boolean $asSavepoint If true and a transaction is already active, a savepoint will be created. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionStart($asSavepoint = false) - { - $this->connect(); - - if (!$asSavepoint || !$this->transactionDepth) - { - parent::transactionStart($asSavepoint); - } - else - { - $savepoint = 'SP_' . $this->transactionDepth; - $this->setQuery('SAVEPOINT ' . $this->quoteName($savepoint))->execute(); - - $this->transactionDepth++; - } - } -} diff --git a/libraries/vendor/joomla/database/src/Sqlite/SqliteQuery.php b/libraries/vendor/joomla/database/src/Sqlite/SqliteQuery.php deleted file mode 100644 index 940d030835207..0000000000000 --- a/libraries/vendor/joomla/database/src/Sqlite/SqliteQuery.php +++ /dev/null @@ -1,259 +0,0 @@ -type) - { - case 'select': - if ($this->selectRowNumber) - { - $orderBy = $this->selectRowNumber['orderBy']; - $orderColumnAlias = $this->selectRowNumber['orderColumnAlias']; - - $column = "ROW_NUMBER() AS $orderColumnAlias"; - - if ($this->select === null) - { - $query = PHP_EOL . "SELECT 1" - . (string) $this->from - . (string) $this->where; - } - else - { - $tmpOffset = $this->offset; - $tmpLimit = $this->limit; - $this->offset = 0; - $this->limit = 0; - $tmpOrder = $this->order; - $this->order = null; - $query = parent::__toString(); - $column = "w.*, $column"; - $this->order = $tmpOrder; - $this->offset = $tmpOffset; - $this->limit = $tmpLimit; - } - - // Special sqlite query to count ROW_NUMBER - $query = PHP_EOL . "SELECT $column" - . PHP_EOL . "FROM ($query" . PHP_EOL . "ORDER BY $orderBy" - . PHP_EOL . ") AS w,(SELECT ROW_NUMBER(0)) AS r" - // Forbid to flatten subqueries. - . ((string) $this->order ?: PHP_EOL . 'ORDER BY NULL'); - - return $this->processLimit($query, $this->limit, $this->offset); - } - - break; - - case 'querySet': - $query = $this->querySet; - - if ($query->order || $query->limit || $query->offset) - { - // If ORDER BY or LIMIT statement exist then parentheses is required for the first query - $query = PHP_EOL . "SELECT * FROM ($query)"; - } - - if ($this->merge) - { - // Special case for merge - foreach ($this->merge as $element) - { - $query .= (string) $element; - } - } - - if ($this->order) - { - $query .= (string) $this->order; - } - - return $query; - - case 'update': - if ($this->join) - { - $table = $this->update->getElements(); - $table = $table[0]; - - $tableName = explode(' ', $table); - $tableName = $tableName[0]; - - if ($this->columns === null) - { - $fields = $this->db->getTableColumns($tableName); - - foreach ($fields as $key => $value) - { - $fields[$key] = $key; - } - - $this->columns = new QueryElement('()', $fields); - } - - $fields = $this->columns->getElements(); - $elements = $this->set->getElements(); - - foreach ($elements as $nameValue) - { - $setArray = explode(' = ', $nameValue, 2); - - if ($setArray[0][0] === '`') - { - // Unquote column name - $setArray[0] = substr($setArray[0], 1, -1); - } - - $fields[$setArray[0]] = $setArray[1]; - } - - $select = new static($this->db); - $select->select(array_values($fields)) - ->from($table); - - $select->join = $this->join; - $select->where = $this->where; - - return 'INSERT OR REPLACE INTO ' . $tableName - . ' (' . implode(',', array_keys($fields)) . ')' - . (string) $select; - } - } - - return parent::__toString(); - } - - /** - * Gets the number of characters in a string. - * - * Note, use 'length' to find the number of bytes in a string. - * - * Usage: - * $query->select($query->charLength('a')); - * - * @param string $field A value. - * @param string $operator Comparison operator between charLength integer value and $condition - * @param string $condition Integer value to compare charLength with. - * - * @return string The required char length call. - * - * @since 1.1.0 - */ - public function charLength($field, $operator = null, $condition = null) - { - return 'length(' . $field . ')' . (isset($operator) && isset($condition) ? ' ' . $operator . ' ' . $condition : ''); - } - - /** - * Concatenates an array of column names or values. - * - * Usage: - * $query->select($query->concatenate(array('a', 'b'))); - * - * @param array $values An array of values to concatenate. - * @param string $separator As separator to place between each value. - * - * @return string The concatenated values. - * - * @since 1.1.0 - */ - public function concatenate($values, $separator = null) - { - if ($separator) - { - return implode(' || ' . $this->quote($separator) . ' || ', $values); - } - - return implode(' || ', $values); - } - - /** - * Method to modify a query already in string format with the needed additions to make the query limited to a particular number of - * results, or start at a particular offset. - * - * @param string $query The query in string format - * @param integer $limit The limit for the result set - * @param integer $offset The offset for the result set - * - * @return string - * - * @since 1.0 - */ - public function processLimit($query, $limit, $offset = 0) - { - if ($limit > 0 || $offset > 0) - { - $query .= ' LIMIT ' . $offset . ', ' . $limit; - } - - return $query; - } - - /** - * Return the number of the current row. - * - * Usage: - * $query->select('id'); - * $query->selectRowNumber('ordering,publish_up DESC', 'new_ordering'); - * $query->from('#__content'); - * - * @param string $orderBy An expression of ordering for window function. - * @param string $orderColumnAlias An alias for new ordering column. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function selectRowNumber($orderBy, $orderColumnAlias) - { - $this->validateRowNumber($orderBy, $orderColumnAlias); - - return $this; - } - - /** - * Add a query to UNION with the current query. - * - * Usage: - * $query->union('SELECT name FROM #__foo') - * $query->union('SELECT name FROM #__foo', true) - * - * @param DatabaseQuery|string $query The DatabaseQuery object or string to union. - * @param boolean $distinct True to only return distinct rows from the union. - * - * @return $this - * - * @since 1.0 - */ - public function union($query, $distinct = true) - { - // Set up the name with parentheses, the DISTINCT flag is redundant - return $this->merge($distinct ? 'UNION SELECT * FROM ()' : 'UNION ALL SELECT * FROM ()', $query); - } -} diff --git a/libraries/vendor/joomla/database/src/Sqlsrv/SqlsrvDriver.php b/libraries/vendor/joomla/database/src/Sqlsrv/SqlsrvDriver.php deleted file mode 100644 index ed0a567103309..0000000000000 --- a/libraries/vendor/joomla/database/src/Sqlsrv/SqlsrvDriver.php +++ /dev/null @@ -1,950 +0,0 @@ -disconnect(); - } - - /** - * Connects to the database if needed. - * - * @return void Returns void if the database connected successfully. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function connect() - { - if ($this->connection) - { - return; - } - - // Make sure the SQLSRV extension for PHP is installed and enabled. - if (!static::isSupported()) - { - throw new UnsupportedAdapterException('PHP extension sqlsrv_connect is not available.'); - } - - // Build the connection configuration array. - $config = [ - 'Database' => $this->options['database'], - 'uid' => $this->options['user'], - 'pwd' => $this->options['password'], - 'CharacterSet' => 'UTF-8', - 'ReturnDatesAsStrings' => true - ]; - - // Attempt to connect to the server. - if (!($this->connection = @ sqlsrv_connect($this->options['host'], $config))) - { - throw new ConnectionFailureException('Could not connect to SQL Server'); - } - - // Make sure that DB warnings are not returned as errors. - sqlsrv_configure('WarningsReturnAsErrors', 0); - - // If auto-select is enabled select the given database. - if ($this->options['select'] && !empty($this->options['database'])) - { - $this->select($this->options['database']); - } - - $this->dispatchEvent(new ConnectionEvent(DatabaseEvents::POST_CONNECT, $this)); - } - - /** - * Disconnects the database. - * - * @return void - * - * @since 1.0 - */ - public function disconnect() - { - // Close the connection. - if (is_resource($this->connection)) - { - sqlsrv_close($this->connection); - } - - parent::disconnect(); - } - - /** - * Get table constraints - * - * @param string $tableName The name of the database table. - * - * @return array Any constraints available for the table. - * - * @since 1.0 - */ - protected function getTableConstraints($tableName) - { - $this->connect(); - - return $this->setQuery('SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = ' . $this->quote($tableName)) - ->loadColumn(); - } - - /** - * Rename constraints. - * - * @param array $constraints Array(strings) of table constraints - * @param string $prefix A string - * @param string $backup A string - * - * @return void - * - * @since 1.0 - */ - protected function renameConstraints($constraints = array(), $prefix = null, $backup = null) - { - $this->connect(); - - foreach ($constraints as $constraint) - { - $this->setQuery('sp_rename ' . $constraint . ',' . str_replace($prefix, $backup, $constraint)) - ->execute(); - } - } - - /** - * Method to escape a string for usage in an SQL statement. - * - * The escaping for MSSQL isn't handled in the driver though that would be nice. Because of this we need to handle the escaping ourselves. - * - * @param string $text The string to be escaped. - * @param boolean $extra Optional parameter to provide extra escaping. - * - * @return string The escaped string. - * - * @since 1.0 - */ - public function escape($text, $extra = false) - { - if (is_int($text)) - { - return $text; - } - - if (is_float($text)) - { - // Force the dot as a decimal point. - return str_replace(',', '.', $text); - } - - $result = str_replace("'", "''", $text); - - // SQL Server does not accept NULL byte in query string - $result = str_replace("\0", "' + CHAR(0) + N'", $result); - - // Fix for SQL Sever escape sequence, see https://support.microsoft.com/en-us/kb/164291 - $result = str_replace( - array("\\\n", "\\\r", "\\\\\r\r\n"), - array("\\\\\n\n", "\\\\\r\r", "\\\\\r\n\r\n"), - $result - ); - - if ($extra) - { - // Escape special chars - $result = str_replace( - array('[', '_', '%'), - array('[[]', '[_]', '[%]'), - $result - ); - } - - return $result; - } - - /** - * Quotes and optionally escapes a string to database requirements for use in database queries. - * - * @param mixed $text A string or an array of strings to quote. - * @param boolean $escape True (default) to escape the string, false to leave it unchanged. - * - * @return string The quoted input string. - * - * @since __DEPLOY_VERSION__ - */ - public function quote($text, $escape = true) - { - if (is_array($text)) - { - return parent::quote($text, $escape); - } - - // To support unicode on MSSQL we have to add prefix N - return 'N\'' . ($escape ? $this->escape($text) : $text) . '\''; - } - - /** - * Determines if the connection to the server is active. - * - * @return boolean True if connected to the database engine. - * - * @since 1.0 - */ - public function connected() - { - // TODO: Run a blank query here - return true; - } - - /** - * Drops a table from the database. - * - * @param string $tableName The name of the database table to drop. - * @param boolean $ifExists Optionally specify that the table must exist before it is dropped. - * - * @return $this - * - * @since 1.0 - */ - public function dropTable($tableName, $ifExists = true) - { - $this->connect(); - - if ($ifExists) - { - $this->setQuery( - 'IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ' - . $this->quote($tableName) . ') DROP TABLE ' . $tableName - ); - } - else - { - $this->setQuery('DROP TABLE ' . $tableName); - } - - $this->execute(); - - return $this; - } - - /** - * Method to get the database collation in use by sampling a text field of a table in the database. - * - * @return mixed The collation in use by the database or boolean false if not supported. - * - * @since 1.0 - */ - public function getCollation() - { - // TODO: Not fake this - return 'MSSQL UTF-8 (UCS2)'; - } - - /** - * Method to get the database connection collation in use by sampling a text field of a table in the database. - * - * @return mixed The collation in use by the database connection (string) or boolean false if not supported. - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function getConnectionCollation() - { - // TODO: Not fake this - return 'MSSQL UTF-8 (UCS2)'; - } - - /** - * Retrieves field information about the given tables. - * - * @param mixed $table A table name - * @param boolean $typeOnly True to only return field types. - * - * @return array An array of fields. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableColumns($table, $typeOnly = true) - { - $result = []; - - $table_temp = $this->replacePrefix((string) $table); - - // Set the query to get the table fields statement. - $this->setQuery( - 'SELECT column_name as Field, data_type as Type, is_nullable as \'Null\', column_default as \'Default\'' . - ' FROM information_schema.columns WHERE table_name = ' . $this->quote($table_temp) - ); - $fields = $this->loadObjectList(); - - // If we only want the type as the value add just that to the list. - if ($typeOnly) - { - foreach ($fields as $field) - { - $result[$field->Field] = preg_replace('/[(0-9)]/', '', $field->Type); - } - } - else - // If we want the whole field data object add that to the list. - { - foreach ($fields as $field) - { - $field->Default = preg_replace("/(^(\(\(|\('|\(N'|\()|(('\)|(?Default); - $result[$field->Field] = $field; - } - } - - return $result; - } - - /** - * Shows the table CREATE statement that creates the given tables. - * - * This is unsupported by MSSQL. - * - * @param mixed $tables A table name or a list of table names. - * - * @return array A list of the create SQL for the tables. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableCreate($tables) - { - $this->connect(); - - return ''; - } - - /** - * Get the details list of keys for a table. - * - * @param string $table The name of the table. - * - * @return array An array of the column specification for the table. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableKeys($table) - { - $this->connect(); - - // TODO To implement. - return []; - } - - /** - * Method to get an array of all tables in the database. - * - * @return array An array of all the tables in the database. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function getTableList() - { - $this->connect(); - - // Set the query to get the tables statement. - return $this->setQuery('SELECT name FROM ' . $this->getDatabase() . '.sys.Tables WHERE type = \'U\';')->loadColumn(); - } - - /** - * Get the version of the database connector. - * - * @return string The database connector version. - * - * @since 1.0 - */ - public function getVersion() - { - $this->connect(); - - $version = sqlsrv_server_info($this->connection); - - return $version['SQLServerVersion']; - } - - /** - * Inserts a row into a table based on an object's properties. - * - * @param string $table The name of the database table to insert into. - * @param object $object A reference to an object whose public properties match the table fields. - * @param string $key The name of the primary key. If provided the object property is updated. - * - * @return boolean True on success. - * - * @since 1.0 - * @throws \RuntimeException - */ - public function insertObject($table, &$object, $key = null) - { - $fields = []; - $values = []; - $tableColumns = $this->getTableColumns($table); - $statement = 'INSERT INTO ' . $this->quoteName($table) . ' (%s) VALUES (%s)'; - - foreach (get_object_vars($object) as $k => $v) - { - // Skip columns that don't exist in the table. - if (!array_key_exists($k, $tableColumns)) - { - continue; - } - - // Only process non-null scalars. - if (is_array($v) || is_object($v) || $v === null) - { - continue; - } - - if (!$this->checkFieldExists($table, $k)) - { - continue; - } - - if ($k[0] === '_') - { - // Internal field - continue; - } - - if ($k === $key && $key == 0) - { - continue; - } - - $fields[] = $this->quoteName($k); - $values[] = $this->quote($v); - } - - // Set the query and execute the insert. - $this->setQuery(sprintf($statement, implode(',', $fields), implode(',', $values)))->execute(); - - $id = $this->insertid(); - - if ($key && $id) - { - $object->$key = $id; - } - - return true; - } - - /** - * Method to get the auto-incremented value from the last INSERT statement. - * - * @return integer The value of the auto-increment field from the last inserted row. - * - * @since 1.0 - */ - public function insertid() - { - $this->connect(); - - // TODO: SELECT IDENTITY - $this->setQuery('SELECT @@IDENTITY'); - - return (int) $this->loadResult(); - } - - /** - * Execute the SQL statement. - * - * @return boolean - * - * @since 1.0 - * @throws \RuntimeException - */ - public function execute() - { - $this->connect(); - - // Take a local copy so that we don't modify the original query and cause issues later - $sql = $this->replacePrefix((string) $this->sql); - - // Increment the query counter. - $this->count++; - - // If there is a monitor registered, let it know we are starting this query - if ($this->monitor) - { - $this->monitor->startQuery($sql); - } - - // Execute the query. - $this->executed = false; - - // Bind the variables - $bounded =& $this->sql->getBounded(); - - foreach ($bounded as $key => $obj) - { - $this->statement->bindParam($key, $obj->value, $obj->dataType); - } - - try - { - $this->executed = $this->statement->execute(); - - // If there is a monitor registered, let it know we have finished this query - if ($this->monitor) - { - $this->monitor->stopQuery(); - } - - return true; - } - catch (ExecutionFailureException $exception) - { - // If there is a monitor registered, let it know we have finished this query - if ($this->monitor) - { - $this->monitor->stopQuery(); - } - - // Check if the server was disconnected. - if (!$this->connected()) - { - try - { - // Attempt to reconnect. - $this->connection = null; - $this->connect(); - } - catch (ConnectionFailureException $e) - { - // If connect fails, ignore that exception and throw the normal exception. - throw $exception; - } - - // Since we were able to reconnect, run the query again. - return $this->execute(); - } - - // Throw the normal query exception. - throw $exception; - } - } - - /** - * This function replaces a string identifier $prefix with the string held is the tablePrefix class variable. - * - * @param string $sql The SQL statement to prepare. - * @param string $prefix The common table prefix. - * - * @return string The processed SQL statement. - * - * @since 1.0 - */ - public function replacePrefix($sql, $prefix = '#__') - { - $escaped = false; - $startPos = 0; - $quoteChar = ''; - $literal = ''; - - $sql = trim($sql); - $n = strlen($sql); - - while ($startPos < $n) - { - $ip = strpos($sql, $prefix, $startPos); - - if ($ip === false) - { - break; - } - - $j = strpos($sql, "N'", $startPos); - $k = strpos($sql, '"', $startPos); - - if (($k !== false) && (($k < $j) || ($j === false))) - { - $quoteChar = '"'; - $j = $k; - } - else - { - $quoteChar = "'"; - } - - if ($j === false) - { - $j = $n; - } - - $literal .= str_replace($prefix, $this->tablePrefix, substr($sql, $startPos, $j - $startPos)); - $startPos = $j; - - $j = $startPos + 1; - - if ($j >= $n) - { - break; - } - - // Quote comes first, find end of quote - while (true) - { - $k = strpos($sql, $quoteChar, $j); - $escaped = false; - - if ($k === false) - { - break; - } - - $l = $k - 1; - - while ($l >= 0 && $sql{$l} === '\\') - { - $l--; - $escaped = !$escaped; - } - - if ($escaped) - { - $j = $k + 1; - continue; - } - - break; - } - - if ($k === false) - { - // Error in the query - no end quote; ignore it - break; - } - - $literal .= substr($sql, $startPos, $k - $startPos + 1); - $startPos = $k + 1; - } - - if ($startPos < $n) - { - $literal .= substr($sql, $startPos, $n - $startPos); - } - - return $literal; - } - - /** - * Select a database for use. - * - * @param string $database The name of the database to select for use. - * - * @return boolean True if the database was successfully selected. - * - * @since 1.0 - * @throws ConnectionFailureException - */ - public function select($database) - { - $this->connect(); - - if (!$database) - { - return false; - } - - if (!sqlsrv_query($this->connection, 'USE ' . $database, null, ['scrollable' => SQLSRV_CURSOR_STATIC])) - { - throw new ConnectionFailureException('Could not connect to database'); - } - - return true; - } - - /** - * Set the connection to use UTF-8 character encoding. - * - * @return boolean True on success. - * - * @since 1.0 - */ - public function setUtf() - { - return true; - } - - /** - * Method to commit a transaction. - * - * @param boolean $toSavepoint If true, commit to the last savepoint. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionCommit($toSavepoint = false) - { - $this->connect(); - - if (!$toSavepoint || $this->transactionDepth <= 1) - { - $this->setQuery('COMMIT TRANSACTION')->execute(); - - $this->transactionDepth = 0; - - return; - } - - $this->transactionDepth--; - } - - /** - * Method to roll back a transaction. - * - * @param boolean $toSavepoint If true, rollback to the last savepoint. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionRollback($toSavepoint = false) - { - $this->connect(); - - if (!$toSavepoint || $this->transactionDepth <= 1) - { - $this->setQuery('ROLLBACK TRANSACTION')->execute(); - - $this->transactionDepth = 0; - - return; - } - - $savepoint = 'SP_' . ($this->transactionDepth - 1); - $this->setQuery('ROLLBACK TRANSACTION ' . $this->quoteName($savepoint))->execute(); - - $this->transactionDepth--; - } - - /** - * Method to initialize a transaction. - * - * @param boolean $asSavepoint If true and a transaction is already active, a savepoint will be created. - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - public function transactionStart($asSavepoint = false) - { - $this->connect(); - - if (!$asSavepoint || !$this->transactionDepth) - { - $this->setQuery('BEGIN TRANSACTION')->execute(); - - $this->transactionDepth = 1; - - return; - } - - $savepoint = 'SP_' . $this->transactionDepth; - $this->setQuery('BEGIN TRANSACTION ' . $this->quoteName($savepoint))->execute(); - - $this->transactionDepth++; - } - - /** - * Method to check and see if a field exists in a table. - * - * @param string $table The table in which to verify the field. - * @param string $field The field to verify. - * - * @return boolean True if the field exists in the table. - * - * @since 1.0 - */ - protected function checkFieldExists($table, $field) - { - $this->connect(); - - $table = $this->replacePrefix((string) $table); - $sql = 'SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS' . " WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" . - ' ORDER BY ORDINAL_POSITION'; - $this->setQuery($sql); - - return (bool) $this->loadResult(); - } - - /** - * Prepares a SQL statement for execution - * - * @param string $query The SQL query to be prepared. - * - * @return StatementInterface - * - * @since __DEPLOY_VERSION__ - * @throws PrepareStatementFailureException - */ - protected function prepareStatement(string $query): StatementInterface - { - return new SqlsrvStatement($this->connection, $query); - } - - /** - * Renames a table in the database. - * - * @param string $oldTable The name of the table to be renamed - * @param string $newTable The new name for the table. - * @param string $backup Table prefix - * @param string $prefix For the table - used to rename constraints in non-mysql databases - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function renameTable($oldTable, $newTable, $backup = null, $prefix = null) - { - $constraints = []; - - if (!is_null($prefix) && !is_null($backup)) - { - $constraints = $this->getTableConstraints($oldTable); - } - - if (!empty($constraints)) - { - $this->renameConstraints($constraints, $prefix, $backup); - } - - $this->setQuery("sp_rename '" . $oldTable . "', '" . $newTable . "'"); - - return $this->execute(); - } - - /** - * Locks a table in the database. - * - * @param string $tableName The name of the table to lock. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function lockTable($tableName) - { - return $this; - } - - /** - * Unlocks tables in the database. - * - * @return $this - * - * @since 1.0 - * @throws \RuntimeException - */ - public function unlockTables() - { - return $this; - } -} diff --git a/libraries/vendor/joomla/database/src/Sqlsrv/SqlsrvQuery.php b/libraries/vendor/joomla/database/src/Sqlsrv/SqlsrvQuery.php deleted file mode 100644 index d3f212a8ed951..0000000000000 --- a/libraries/vendor/joomla/database/src/Sqlsrv/SqlsrvQuery.php +++ /dev/null @@ -1,1325 +0,0 @@ -sql) - { - return $this->sql; - } - - $query = ''; - - switch ($this->type) - { - case 'select': - // Add required aliases for offset or fixGroupColumns method - $columns = $this->fixSelectAliases(); - - $query = (string) $this->select; - - if ($this->group) - { - $this->fixGroupColumns($columns); - } - - $query .= (string) $this->from; - - if ($this->join) - { - // Special case for joins - foreach ($this->join as $join) - { - $query .= (string) $join; - } - } - - if ($this->where) - { - $query .= (string) $this->where; - } - - if ($this->selectRowNumber === null) - { - if ($this->group) - { - $query .= (string) $this->group; - } - - if ($this->having) - { - $query .= (string) $this->having; - } - - if ($this->merge) - { - // Special case for merge - foreach ($this->merge as $idx => $element) - { - $query .= (string) $element . ' AS merge_' . (int) ($idx + 1); - } - } - } - - if ($this->order) - { - $query .= (string) $this->order; - } - else - { - $query .= PHP_EOL . '/*ORDER BY (SELECT 0)*/'; - } - - $query = $this->processLimit($query, $this->limit, $this->offset); - - break; - - case 'querySet': - $query = $this->querySet; - - if ($query->order || $query->limit || $query->offset) - { - // If ORDER BY or LIMIT statement exist then parentheses is required for the first query - $query = PHP_EOL . "SELECT * FROM ($query) AS merge_0"; - } - - if ($this->merge) - { - // Special case for merge - foreach ($this->merge as $idx => $element) - { - $query .= (string) $element . ' AS merge_' . (int) ($idx + 1); - } - } - - if ($this->order) - { - $query .= (string) $this->order; - } - - $query = $this->processLimit($query, $this->limit, $this->offset); - - break; - - case 'insert': - $query .= (string) $this->insert; - - // Set method - if ($this->set) - { - $query .= (string) $this->set; - } - // Columns-Values method - elseif ($this->values) - { - if ($this->columns) - { - $query .= (string) $this->columns; - } - - $elements = $this->insert->getElements(); - $tableName = array_shift($elements); - - $query .= 'VALUES '; - $query .= (string) $this->values; - - if ($this->autoIncrementField) - { - $query = 'SET IDENTITY_INSERT ' . $tableName . ' ON;' . $query . 'SET IDENTITY_INSERT ' . $tableName . ' OFF;'; - } - - if ($this->where) - { - $query .= (string) $this->where; - } - } - - break; - - case 'delete': - $query .= (string) $this->delete; - $query .= (string) $this->from; - - if ($this->join) - { - // Special case for joins - foreach ($this->join as $join) - { - $query .= (string) $join; - } - } - - if ($this->where) - { - $query .= (string) $this->where; - } - - if ($this->order) - { - $query .= (string) $this->order; - } - - break; - - case 'update': - if ($this->join) - { - $tmpUpdate = $this->update; - $tmpFrom = $this->from; - $this->update = null; - $this->from = null; - - $updateElem = $tmpUpdate->getElements(); - $updateArray = explode(' ', $updateElem[0]); - - // Use table alias if exists - $this->update(end($updateArray)); - $this->from($updateElem[0]); - - $query .= (string) $this->update; - $query .= (string) $this->set; - $query .= (string) $this->from; - - $this->update = $tmpUpdate; - $this->from = $tmpFrom; - - // Special case for joins - foreach ($this->join as $join) - { - $query .= (string) $join; - } - } - else - { - $query .= (string) $this->update; - $query .= (string) $this->set; - } - - if ($this->where) - { - $query .= (string) $this->where; - } - - if ($this->order) - { - $query .= (string) $this->order; - } - - break; - - default: - $query = parent::__toString(); - - break; - } - - return $query; - } - - /** - * Method to add a variable to an internal array that will be bound to a prepared SQL statement before query execution. Also - * removes a variable that has been bounded from the internal bounded array when the passed in value is null. - * - * @param string|integer $key The key that will be used in your SQL query to reference the value. Usually of - * the form ':key', but can also be an integer. - * @param mixed $value The value that will be bound. The value is passed by reference to support output - * parameters such as those possible with stored procedures. - * @param string $dataType The corresponding bind type. (Unused) - * @param integer $length The length of the variable. Usually required for OUTPUT parameters. (Unused) - * @param array $driverOptions Optional driver options to be used. (Unused) - * - * @return SqlsrvQuery - * - * @since 1.5.0 - */ - public function bind($key = null, &$value = null, $dataType = ParameterType::STRING, $length = 0, $driverOptions = array()) - { - // Case 1: Empty Key (reset $bounded array) - if (empty($key)) - { - $this->bounded = array(); - - return $this; - } - - // Case 2: Key Provided, null value (unset key from $bounded array) - if (is_null($value)) - { - if (isset($this->bounded[$key])) - { - unset($this->bounded[$key]); - } - - return $this; - } - - $obj = new \stdClass; - $obj->value = &$value; - $obj->dataType = $dataType; - - // Case 3: Simply add the Key/Value into the bounded array - $this->bounded[$key] = $obj; - - return $this; - } - - /** - * Retrieves the bound parameters array when key is null and returns it by reference. If a key is provided then that item is - * returned. - * - * @param mixed $key The bounded variable key to retrieve. - * - * @return mixed - * - * @since 1.5.0 - */ - public function &getBounded($key = null) - { - if (empty($key)) - { - return $this->bounded; - } - - if (isset($this->bounded[$key])) - { - return $this->bounded[$key]; - } - } - - /** - * Clear data from the query or a specific clause of the query. - * - * @param string $clause Optionally, the name of the clause to clear, or nothing to clear the whole query. - * - * @return SqlsrvQuery Returns this object to allow chaining. - * - * @since 1.5.0 - */ - public function clear($clause = null) - { - switch ($clause) - { - case null: - $this->bounded = array(); - break; - } - - return parent::clear($clause); - } - - /** - * Casts a value to a char. - * - * Ensure that the value is properly quoted before passing to the method. - * - * @param string $value The value to cast as a char. - * - * @return string Returns the cast value. - * - * @since 1.0 - */ - public function castAsChar($value) - { - return 'CAST(' . $value . ' as NVARCHAR(10))'; - } - - /** - * Gets the function to determine the length of a character string. - * - * @param string $field A value. - * @param string $operator Comparison operator between charLength integer value and $condition - * @param string $condition Integer value to compare charLength with. - * - * @return string The required char length call. - * - * @since 1.0 - */ - public function charLength($field, $operator = null, $condition = null) - { - return 'DATALENGTH(' . $field . ')' . (isset($operator) && isset($condition) ? ' ' . $operator . ' ' . $condition : ''); - } - - /** - * Concatenates an array of column names or values. - * - * @param array $values An array of values to concatenate. - * @param string $separator As separator to place between each value. - * - * @return string The concatenated values. - * - * @since 1.0 - */ - public function concatenate($values, $separator = null) - { - if ($separator) - { - return '(' . implode('+' . $this->quote($separator) . '+', $values) . ')'; - } - - return '(' . implode('+', $values) . ')'; - } - - /** - * Gets the current date and time. - * - * @return string - * - * @since 1.0 - */ - public function currentTimestamp() - { - return 'GETDATE()'; - } - - /** - * Get the length of a string in bytes. - * - * @param string $value The string to measure. - * - * @return integer - * - * @since 1.0 - */ - public function length($value) - { - return 'LEN(' . $value . ')'; - } - - /** - * Add a grouping column to the GROUP clause of the query. - * - * Usage: - * $query->group('id'); - * - * @param mixed $columns A string or array of ordering columns. - * - * @return SqlsrvQuery Returns this object to allow chaining. - * - * @since 1.5.0 - */ - public function group($columns) - { - if (!($this->db instanceof DatabaseInterface)) - { - throw new \RuntimeException('JLIB_DATABASE_ERROR_INVALID_DB_OBJECT'); - } - - // Transform $columns into an array for filtering purposes - is_string($columns) && $columns = explode(',', str_replace(' ', '', $columns)); - - // Get the _formatted_ FROM string and remove everything except `table AS alias` - $fromStr = str_replace(array('[', ']'), '', str_replace('#__', $this->db->getPrefix(), str_replace('FROM ', '', (string) $this->from))); - - // Start setting up an array of alias => table - list($table, $alias) = preg_split("/\sAS\s/i", $fromStr); - - $tmpCols = $this->db->getTableColumns(trim($table)); - $cols = array(); - - foreach ($tmpCols as $name => $type) - { - $cols[] = $alias . '.' . $name; - } - - // Now we need to get all tables from any joins - // Go through all joins and add them to the tables array - foreach ($this->join as $join) - { - $joinTbl = str_replace( - '#__', - $this->db->getPrefix(), - str_replace( - ']', - '', - preg_replace("/.*(#.+\sAS\s[^\s]*).*/i", '$1', (string) $join) - ) - ); - - list($table, $alias) = preg_split("/\sAS\s/i", $joinTbl); - - $tmpCols = $this->db->getTableColumns(trim($table)); - - foreach ($tmpCols as $name => $tmpColType) - { - $cols[] = $alias . '.' . $name; - } - } - - $selectStr = str_replace('SELECT ', '', (string) $this->select); - - // Remove any functions (e.g. COUNT(), SUM(), CONCAT()) - $selectCols = preg_replace("/([^,]*\([^\)]*\)[^,]*,?)/", '', $selectStr); - - // Remove any "as alias" statements - $selectCols = preg_replace("/(\sas\s[^,]*)/i", '', $selectCols); - - // Remove any extra commas - $selectCols = preg_replace('/,{2,}/', ',', $selectCols); - - // Remove any trailing commas and all whitespaces - $selectCols = trim(str_replace(' ', '', preg_replace('/,?$/', '', $selectCols))); - - // Get an array to compare against - $selectCols = explode(',', $selectCols); - - // Find all alias.* and fill with proper table column names - foreach ($selectCols as $key => $aliasColName) - { - if (preg_match("/.+\*/", $aliasColName, $match)) - { - // Grab the table alias minus the .* - $aliasStar = preg_replace("/(.+)\.\*/", '$1', $aliasColName); - - // Unset the array key - unset($selectCols[$key]); - - // Get the table name - $tableColumns = preg_grep("/{$aliasStar}\.+/", $cols); - $columns = array_merge($columns, $tableColumns); - } - } - - // Finally, get a unique string of all column names that need to be included in the group statement - $columns = array_unique(array_merge($columns, $selectCols)); - $columns = implode(',', $columns); - - // Recreate it every time, to ensure we have checked _all_ select statements - $this->group = new QueryElement('GROUP BY', $columns); - - return $this; - } - - /** - * Get the function to return a random floating-point value - * - * Usage: - * $query->rand(); - * - * @return string - * - * @since 1.5.0 - */ - public function rand() - { - return ' NEWID() '; - } - - /** - * Find a value in a varchar used like a set. - * - * Ensure that the value is an integer before passing to the method. - * - * Usage: - * $query->findInSet((int) $parent->id, 'a.assigned_cat_ids') - * - * @param string $value The value to search for. - * @param string $set The set of values. - * - * @return string A representation of the MySQL find_in_set() function for the driver. - * - * @since 1.5.0 - */ - public function findInSet($value, $set) - { - return "CHARINDEX(',$value,', ',' + $set + ',') > 0"; - } - - /** - * Add required aliases to columns for select statement in subquery. - * - * @return array[] Array of columns with added missing aliases. - * - * @since __DEPLOY_VERSION__ - */ - protected function fixSelectAliases() - { - $operators = [ - '+' => '', - '-' => '', - '*' => '', - '/' => '', - '%' => '', - '&' => '', - '|' => '', - '~' => '', - '^' => '', - ]; - - // Split into array and remove comments - $columns = $this->splitSqlExpression(implode(',', $this->select->getElements())); - - foreach ($columns as $i => $column) - { - $size = count($column); - - if ($size == 0) - { - continue; - } - - if ($size > 2 && strcasecmp($column[$size - 2], 'AS') === 0) - { - // Alias exists, replace it to uppercase - $columns[$i][$size - 2] = 'AS'; - continue; - } - - if ($i == 0 && stripos(' DISTINCT ALL ', " $column[0] ") !== false) - { - // This words are reserved, they are not column names - array_shift($column); - $size--; - } - - $lastWord = strtoupper($column[$size - 1]); - $length = strlen($lastWord); - $lastChar = $lastWord[$length - 1]; - - if ($lastChar == '*') - { - // Skip on wildcard - continue; - } - - if ($lastChar == ')' - || ($size == 1 && $lastChar == "'") - || $lastWord[0] == '@' - || $lastWord == 'NULL' - || $lastWord == 'END' - || is_numeric($lastWord)) - { - /* - * Ends with: - * - SQL function - * - single static value like 'only '+'string' - * - @@var - * - NULL - * - CASE ... END - * - Numeric - */ - $columns[$i][] = 'AS'; - $columns[$i][] = $this->quoteName('columnAlias' . $i); - continue; - } - - if ($size == 1) - { - continue; - } - - $lastChar2 = substr($column[$size - 2], -1); - - // Check if column ends with '- a.x' or '- a. x' - if (isset($operators[$lastChar2]) || ($size > 2 && $lastChar2 === '.' && isset($operators[substr($column[$size - 3], -1)]))) - { - // Ignore plus signs if column start with them - if ($size != 2 || ltrim($column[0], '+') !== '' || $column[1][0] === "'") - { - // If operator exists before last word then alias is required for subquery - $columns[$i][] = 'AS'; - $columns[$i][] = $this->quoteName('columnAlias' . $i); - continue; - } - } - elseif ($column[$size - 1][0] !== '.' && $lastChar2 !== '.') - { - // If columns is like name name2 then second word is alias. - // Add missing AS before the alias, exception for 'a. x' and 'a .x' - array_splice($columns[$i], -1, 0, 'AS'); - } - } - - $selectColumns = []; - - foreach ($columns as $i => $column) - { - $selectColumns[$i] = implode(' ', $column); - } - - $this->select = new QueryElement('SELECT', $selectColumns); - - return $columns; - } - - /** - * Add missing columns names to GROUP BY clause. - * - * @param array[] $selectColumns Array of columns from splitSqlExpression method. - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - protected function fixGroupColumns($selectColumns) - { - // Cache tables columns - static $cacheCols = []; - - // Known columns of all included tables - $knownColumnsByAlias = []; - - $iquotes = ['"' => '', '[' => '', "'" => '']; - $nquotes = ['"', '[', ']']; - - // Aggregate functions - $aFuncs = [ - 'AVG(', - 'CHECKSUM_AGG(', - 'COUNT(', - 'COUNT_BIG(', - 'GROUPING(', - 'GROUPING_ID(', - 'MIN(', - 'MAX(', - 'SUM(', - 'STDEV(', - 'STDEVP(', - 'VAR(', - 'VARP(', - ]; - - // Aggregated columns - $filteredColumns = []; - - // Aliases found in SELECT statement - $knownAliases = []; - $wildcardTables = []; - - foreach ($selectColumns as $i => $column) - { - $size = count($column); - - if ($size === 0) - { - continue; - } - - if ($size > 2 && $column[$size - 2] === 'AS') - { - // Save and remove AS alias - $alias = $column[$size - 1]; - - if (isset($iquotes[$alias[0]])) - { - $alias = substr($alias, 1, -1); - } - - // Remove alias - $selectColumns[$i] = $column = array_slice($column, 0, -2); - - if ($size === 3 || ($size === 4 && strpos('+-*/%&|~^', $column[0][0]) !== false)) - { - $lastWord = $column[$size - 3]; - - if ($lastWord[0] === "'" || $lastWord === 'NULL' || is_numeric($lastWord)) - { - unset($selectColumns[$i]); - - continue; - } - } - - // Remember pair alias => column expression - $knownAliases[$alias] = implode(' ', $column); - } - - $aggregated = false; - - foreach ($column as $j => $block) - { - if (substr($block, -2) === '.*') - { - // Found column ends with .* - if (isset($iquotes[$block[0]])) - { - // Quoted table - $wildcardTables[] = substr($block, 1, -3); - } - else - { - $wildcardTables[] = substr($block, 0, -2); - } - } - elseif (str_ireplace($aFuncs, '', $block) != $block) - { - $aggregated = true; - } - - if ($block[0] === "'") - { - // Shrink static strings which could contain column name - $column[$j] = "''"; - } - } - - if (!$aggregated) - { - // Without aggregated columns and aliases - $filteredColumns[] = implode(' ', $selectColumns[$i]); - } - - // Without aliases and static strings - $selectColumns[$i] = implode(' ', $column); - } - - // If select statement use table.* expression - if ($wildcardTables) - { - // Split FROM statement into list of tables - $tables = $this->splitSqlExpression(implode(',', $this->from->getElements())); - - foreach ($tables as $i => $table) - { - $table = implode(' ', $table); - - // Exclude subquery from the FROM clause - if (strpos($table, '(') === false) - { - // Unquote - $table = str_replace($nquotes, '', $table); - $table = str_replace('#__', $this->db->getPrefix(), $table); - $table = explode(' ', $table); - $alias = end($table); - $table = $table[0]; - - // Chek if exists a wildcard with current alias table? - if (in_array($alias, $wildcardTables, true)) - { - if (!isset($cacheCols[$table])) - { - $cacheCols[$table] = $this->db->getTableColumns($table); - } - - if ($this->join || $table != $alias) - { - foreach ($cacheCols[$table] as $name => $type) - { - $knownColumnsByAlias[$alias][] = $alias . '.' . $name; - } - } - else - { - foreach ($cacheCols[$table] as $name => $type) - { - $knownColumnsByAlias[$alias][] = $name; - } - } - } - } - } - - // Now we need to get all tables from any joins - // Go through all joins and add them to the tables array - if ($this->join) - { - foreach ($this->join as $join) - { - // Unquote and replace prefix - $joinTbl = str_replace($nquotes, '', (string) $join); - $joinTbl = str_replace("#__", $this->db->getPrefix(), $joinTbl); - - // Exclude subquery - if (preg_match('/JOIN\s+(\w+)(?:\s+AS)?(?:\s+(\w+))?/i', $joinTbl, $matches)) - { - $table = $matches[1]; - $alias = isset($matches[2]) ? $matches[2] : $table; - - // Chek if exists a wildcard with current alias table? - if (in_array($alias, $wildcardTables, true)) - { - if (!isset($cacheCols[$table])) - { - $cacheCols[$table] = $this->db->getTableColumns($table); - } - - foreach ($cacheCols[$table] as $name => $type) - { - $knownColumnsByAlias[$alias][] = $alias . '.' . $name; - } - } - } - } - } - } - - $selectExpression = implode(',', $selectColumns); - - // Split into the right columns - $groupColumns = $this->splitSqlExpression(implode(',', $this->group->getElements())); - - // Remove column aliases from GROUP statement - SQLSRV does not support it - foreach ($groupColumns as $i => $column) - { - $groupColumns[$i] = implode(' ', $column); - $column = str_replace($nquotes, '', $groupColumns[$i]); - - if (isset($knownAliases[$column])) - { - // Be sure that this is not a valid column name - if (!preg_match('/\b' . preg_quote($column, '/') . '\b/', $selectExpression)) - { - // Replace column alias by column expression - $groupColumns[$i] = $knownAliases[$column]; - } - } - } - - // Find all alias.* and fill with proper table column names - foreach ($filteredColumns as $i => $column) - { - if (substr($column, -2) === '.*') - { - unset($filteredColumns[$i]); - - // Extract alias.* columns into GROUP BY statement - $groupColumns = array_merge($groupColumns, $knownColumnsByAlias[substr($column, 0, -2)]); - } - } - - $groupColumns = array_merge($groupColumns, $filteredColumns); - - if ($this->order) - { - // Remove direction suffixes - $dir = [" DESC\v", " ASC\v"]; - - $orderColumns = $this->splitSqlExpression(implode(',', $this->order->getElements())); - - foreach ($orderColumns as $i => $column) - { - $column = implode(' ', $column); - $orderColumns[$i] = $column = trim(str_ireplace($dir, '', "$column\v"), "\v"); - - if (isset($knownAliases[str_replace($nquotes, '', $column)])) - { - unset($orderColumns[$i]); - } - - if (str_ireplace($aFuncs, '', $column) != $column) - { - // Do not add aggregate expression - unset($orderColumns[$i]); - } - } - - $groupColumns = array_merge($groupColumns, $orderColumns); - } - - // Get a unique string of all column names that need to be included in the group statement - $this->group = new QueryElement('GROUP BY', array_unique($groupColumns)); - - return $this; - } - - /** - * Split a string of sql expression into an array of individual columns. - * Single line or line end comments and multi line comments are stripped off. - * Always return at least one column. - * - * @param string $string Input string of sql expression like select expression. - * - * @return array[] The columns from the input string separated into an array. - * - * @since __DEPLOY_VERSION__ - */ - protected function splitSqlExpression($string) - { - // Append whitespace as equivalent to the last comma - $string .= ' '; - - $colIdx = 0; - $start = 0; - $open = false; - $openC = 0; - $comment = false; - $endString = ''; - $length = strlen($string); - $columns = []; - $column = []; - $current = ''; - $previous = null; - $operators = [ - '+' => '', - '-' => '', - '*' => '', - '/' => '', - '%' => '', - '&' => '', - '|' => '', - '~' => '', - '^' => '', - ]; - - $addBlock = function ($block) use (&$column, &$colIdx) - { - if (isset($column[$colIdx])) - { - $column[$colIdx] .= $block; - } - else - { - $column[$colIdx] = $block; - } - }; - - for ($i = 0; $i < $length; $i++) - { - $current = substr($string, $i, 1); - $current2 = substr($string, $i, 2); - $current3 = substr($string, $i, 3); - $lenEndString = strlen($endString); - $testEnd = substr($string, $i, $lenEndString); - - if ($current == '[' || $current == '"' || $current == "'" || $current2 == '--' - || ($current2 == '/*') - || ($current == '#' && $current3 != '#__') - || ($lenEndString && $testEnd == $endString)) - { - if ($open) - { - if ($testEnd === $endString) - { - if ($comment) - { - if ($lenEndString > 1) - { - $i += ($lenEndString - 1); - } - - // Move cursor after close tag of comment - $start = $i + 1; - $comment = false; - } - elseif ($current == "'" || $current == ']' || $current == '"') - { - // Check for escaped quote like '', ]] or "" - $n = 1; - - while ($i + $n < $length && $string[$i + $n] == $current) - { - $n++; - } - - // Jump to the last quote - $i += $n - 1; - - if ($n % 2 === 0) - { - // There is only escaped quote - continue; - } - elseif ($n > 2) - { - // The last right close quote is not escaped - $current = $string[$i]; - } - } - - $open = false; - $endString = ''; - } - } - else - { - $open = true; - - if ($current == '#' || $current2 == '--') - { - $endString = "\n"; - $comment = true; - } - elseif ($current2 == '/*') - { - $endString = '*/'; - $comment = true; - } - elseif ($current == '[') - { - $endString = ']'; - } - else - { - $endString = $current; - } - - if ($comment && $start < $i) - { - // Add string exists before comment - $addBlock(substr($string, $start, $i - $start)); - $previous = $string[$i - 1]; - $start = $i; - } - } - } - elseif (!$open) - { - if ($current == '(') - { - $openC++; - $previous = $current; - } - elseif ($current == ')') - { - $openC--; - $previous = $current; - } - elseif ($current == '.') - { - if ($i === $start && $colIdx > 0 && !isset($column[$colIdx])) - { - // Remove whitepace placed before dot - $colIdx--; - } - - $previous = $current; - } - elseif ($openC === 0) - { - if (ctype_space($current)) - { - // Normalize whitepace - $string[$i] = ' '; - - if ($start < $i) - { - // Add text placed before whitespace - $addBlock(substr($string, $start, $i - $start)); - $colIdx++; - $previous = $string[$i - 1]; - } - elseif (isset($column[$colIdx])) - { - if ($colIdx > 1 || !isset($operators[$previous])) - { - // There was whitespace after comment - $colIdx++; - } - } - - // Move cursor forward - $start = $i + 1; - } - elseif (isset($operators[$current]) && ($current !== '*' || $previous !== '.')) - { - if ($start < $i) - { - // Add text before operator - $addBlock(substr($string, $start, $i - $start)); - $colIdx++; - } - elseif (!isset($column[$colIdx]) && isset($operators[$previous])) - { - // Do not create whitespace between operators - $colIdx--; - } - - // Add operator - $addBlock($current); - $previous = $current; - $colIdx++; - - // Move cursor forward - $start = $i + 1; - } - else - { - $previous = $current; - } - } - } - - if (($current == ',' && !$open && $openC == 0) || $i == $length - 1) - { - if ($start < $i && !$comment) - { - // Save remaining text - $addBlock(substr($string, $start, $i - $start)); - } - - $columns[] = $column; - - // Reset values - $column = []; - $colIdx = 0; - $previous = null; - - // Column saved, move cursor forward after comma - $start = $i + 1; - } - } - - return $columns; - } - - /** - * Method to modify a query already in string format with the needed additions to make the query limited to a particular number of - * results, or start at a particular offset. - * - * @param string $query The query in string format - * @param integer $limit The limit for the result set - * @param integer $offset The offset for the result set - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function processLimit($query, $limit, $offset = 0) - { - if ($offset > 0) - { - // Find a position of the last comment - $commentPos = strrpos($query, '/*ORDER BY (SELECT 0)*/'); - - // If the last comment belongs to this query, not previous subquery - if ($commentPos !== false && $commentPos + 2 === strripos($query, 'ORDER BY', $commentPos + 2)) - { - // We can not use OFFSET without ORDER BY - $query = substr_replace($query, 'ORDER BY (SELECT 0)', $commentPos, 23); - } - - $query .= PHP_EOL . 'OFFSET ' . (int) $offset . ' ROWS'; - - if ($limit > 0) - { - $query .= PHP_EOL . 'FETCH NEXT ' . (int) $limit . ' ROWS ONLY'; - } - } - elseif ($limit > 0) - { - $position = stripos($query, 'SELECT'); - $distinct = stripos($query, 'SELECT DISTINCT'); - - if ($position === $distinct) - { - $query = substr_replace($query, 'SELECT DISTINCT TOP ' . (int) $limit, $position, 15); - } - else - { - $query = substr_replace($query, 'SELECT TOP ' . (int) $limit, $position, 6); - } - } - - return $query; - } - - /** - * Sets the offset and limit for the result set, if the database driver supports it. - * - * Usage: - * $query->setLimit(100, 0); (retrieve 100 rows, starting at first record) - * $query->setLimit(50, 50); (retrieve 50 rows, starting at 50th record) - * - * @param integer $limit The limit for the result set - * @param integer $offset The offset for the result set - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function setLimit($limit = 0, $offset = 0) - { - $this->limit = (int) $limit; - $this->offset = (int) $offset; - - return $this; - } - - /** - * Add a query to UNION with the current query. - * - * Usage: - * $query->union('SELECT name FROM #__foo') - * $query->union('SELECT name FROM #__foo', true) - * - * @param DatabaseQuery|string $query The DatabaseQuery object or string to union. - * @param boolean $distinct True to only return distinct rows from the union. - * - * @return $this - * - * @since 1.0 - */ - public function union($query, $distinct = true) - { - // Set up the name with parentheses, the DISTINCT flag is redundant - return $this->merge($distinct ? 'UNION SELECT * FROM ()' : 'UNION ALL SELECT * FROM ()', $query); - } -} diff --git a/libraries/vendor/joomla/database/src/Sqlsrv/SqlsrvStatement.php b/libraries/vendor/joomla/database/src/Sqlsrv/SqlsrvStatement.php deleted file mode 100644 index 389becdfd433c..0000000000000 --- a/libraries/vendor/joomla/database/src/Sqlsrv/SqlsrvStatement.php +++ /dev/null @@ -1,416 +0,0 @@ - SQLSRV_FETCH_BOTH, - FetchMode::ASSOCIATIVE => SQLSRV_FETCH_ASSOC, - FetchMode::NUMERIC => SQLSRV_FETCH_NUMERIC, - ]; - - /** - * The query string being prepared. - * - * @var string - * @since __DEPLOY_VERSION__ - */ - protected $query; - - /** - * Internal tracking flag to set whether there is a result set available for processing - * - * @var boolean - * @since __DEPLOY_VERSION__ - */ - private $result = false; - - /** - * The prepared statement. - * - * @var resource - * @since __DEPLOY_VERSION__ - */ - protected $statement; - - /** - * Bound parameter types. - * - * @var string - * @since __DEPLOY_VERSION__ - */ - protected $types; - - /** - * References to the variables bound as statement parameters. - * - * @var array - * @since __DEPLOY_VERSION__ - */ - private $variables = []; - - /** - * Constructor. - * - * @param resource $connection The database connection resource - * @param string $query The query this statement will process - * - * @since __DEPLOY_VERSION__ - * @throws PrepareStatementFailureException - */ - public function __construct($connection, string $query) - { - $this->connection = $connection; - $this->query = $query; - } - - /** - * Binds a parameter to the specified variable name. - * - * @param string|integer $parameter Parameter identifier. For a prepared statement using named placeholders, this will be a parameter - * name of the form `:name`. For a prepared statement using question mark placeholders, this will be - * the 1-indexed position of the parameter. - * @param mixed $variable Name of the PHP variable to bind to the SQL statement parameter. - * @param integer $dataType Constant corresponding to a SQL datatype, this should be the processed type from the QueryInterface. - * @param integer $length The length of the variable. Usually required for OUTPUT parameters. - * @param array $driverOptions Optional driver options to be used. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function bindParam($parameter, &$variable, $dataType = ParameterType::STRING, $length = null, $driverOptions = null) - { - if (!is_numeric($parameter)) - { - throw new \InvalidArgumentException( - 'SQL Server does not support named parameters for queries, use question mark (?) placeholders instead.' - ); - } - - $this->variables[$parameter] =& $variable; - $this->types[$parameter] = $dataType; - - $this->statement = null; - - return true; - } - - /** - * Binds a value to the specified variable. - * - * @param string|integer $parameter Parameter identifier. For a prepared statement using named placeholders, this will be a parameter - * name of the form `:name`. For a prepared statement using question mark placeholders, this will be - * the 1-indexed position of the parameter. - * @param mixed $variable Name of the PHP variable to bind to the SQL statement parameter. - * @param integer $dataType Constant corresponding to a SQL datatype, this should be the processed type from the QueryInterface. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - private function bindValue($parameter, $variable, $dataType = ParameterType::STRING) - { - if (!is_numeric($parameter)) - { - throw new \InvalidArgumentException( - 'SQL Server does not support named parameters for queries, use question mark (?) placeholders instead.' - ); - } - - $this->variables[$parameter] = $variable; - $this->types[$parameter] = $dataType; - } - - /** - * Closes the cursor, enabling the statement to be executed again. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function closeCursor() - { - if (!$this->result || !is_resource($this->statement)) - { - return true; - } - - // Emulate freeing the result fetching and discarding rows, similarly to what PDO does in this case - while (sqlsrv_fetch($this->statement)); - - $this->result = false; - - return true; - } - - /** - * Fetches the SQLSTATE associated with the last operation on the statement handle. - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - public function errorCode() - { - $errors = sqlsrv_errors(SQLSRV_ERR_ERRORS); - - if ($errors) - { - return $errors[0]['code']; - } - - return false; - } - - /** - * Fetches extended error information associated with the last operation on the statement handle. - * - * @return array - * - * @since __DEPLOY_VERSION__ - */ - public function errorInfo() - { - return sqlsrv_errors(SQLSRV_ERR_ERRORS); - } - - /** - * Executes a prepared statement - * - * @param array $parameters An array of values with as many elements as there are bound parameters in the SQL statement being executed. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function execute($parameters = null) - { - if ($parameters) - { - $hasZeroIndex = array_key_exists(0, $parameters); - - foreach ($parameters as $key => $val) - { - $key = ($hasZeroIndex && is_numeric($key)) ? $key + 1 : $key; - $this->bindValue($key, $val); - } - } - - if (!$this->statement) - { - $this->statement = $this->prepare(); - } - - if (!sqlsrv_execute($this->statement)) - { - $errors = $this->errorInfo(); - - throw new ExecutionFailureException($this->query, $errors[0]['message'], $errors[0]['code']); - } - - $this->result = true; - - return true; - } - - /** - * Fetches the next row from a result set - * - * @param integer $fetchStyle Controls how the next row will be returned to the caller. This value must be one of the - * FetchMode constants, defaulting to value of FetchMode::MIXED. - * @param integer $cursorOrientation For a StatementInterface object representing a scrollable cursor, this value determines which row will - * be returned to the caller. This value must be one of the FetchOrientation constants, defaulting to - * FetchOrientation::NEXT. - * @param integer $cursorOffset For a StatementInterface object representing a scrollable cursor for which the cursorOrientation - * parameter is set to FetchOrientation::ABS, this value specifies the absolute number of the row in the - * result set that shall be fetched. For a StatementInterface object representing a scrollable cursor for - * which the cursorOrientation parameter is set to FetchOrientation::REL, this value specifies the row to - * fetch relative to the cursor position before StatementInterface::fetch() was called. - * - * @return mixed The return value of this function on success depends on the fetch type. In all cases, boolean false is returned on failure. - * - * @since __DEPLOY_VERSION__ - */ - public function fetch($fetchStyle = null, $cursorOrientation = FetchOrientation::NEXT, $cursorOffset = 0) - { - if (!$this->result) - { - return false; - } - - $fetchStyle = $fetchStyle ?: $this->defaultFetchStyle; - - if ($fetchStyle === FetchMode::COLUMN) - { - return $this->fetchColumn(); - } - - if (isset($this->fetchMap[$fetchStyle])) - { - return sqlsrv_fetch_array($this->statement, $this->fetchMap[$fetchStyle]) ?: false; - } - - if (in_array($fetchStyle, [FetchMode::STANDARD_OBJECT, FetchMode::CUSTOM_OBJECT], true)) - { - return sqlsrv_fetch_object($this->statement, $this->defaultObjectClass) ?: false; - } - - throw new \InvalidArgumentException("Unknown fetch type '{$fetchStyle}'"); - } - - /** - * Returns a single column from the next row of a result set - * - * @param integer $columnIndex 0-indexed number of the column you wish to retrieve from the row. - * If no value is supplied, the first column is retrieved. - * - * @return mixed Returns a single column from the next row of a result set or boolean false if there are no more rows. - * - * @since __DEPLOY_VERSION__ - */ - public function fetchColumn($columnIndex = 0) - { - $row = $this->fetch(FetchMode::NUMERIC); - - if ($row === false) - { - return false; - } - - return $row[$columnIndex] ?? null; - } - - /** - * Fetches the next row and returns it as an object. - * - * @param string $className Name of the created class. - * @param array $constructorArgs Elements of this array are passed to the constructor. - * - * @return mixed An instance of the required class with property names that correspond to the column names or boolean false on failure. - * - * @since __DEPLOY_VERSION__ - */ - public function fetchObject($className = null, $constructorArgs = null) - { - $this->defaultObjectClass = $className; - - return $this->fetch(FetchMode::STANDARD_OBJECT); - } - - /** - * Prepares the SQL Server statement resource for execution - * - * @return resource - * - * @since __DEPLOY_VERSION__ - */ - private function prepare() - { - $params = []; - - foreach ($this->variables as $column => &$variable) - { - if ($this->types[$column] === ParameterType::LARGE_OBJECT) - { - $params[$column - 1] = [ - &$variable, - SQLSRV_PARAM_IN, - SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY), - SQLSRV_SQLTYPE_VARBINARY('max'), - ]; - } - else - { - $params[$column - 1] =& $variable; - } - } - - $options = []; - - // SQLSRV Function sqlsrv_num_rows requires a static or keyset cursor. - if (strncmp(strtoupper(ltrim($this->query)), 'SELECT', strlen('SELECT')) === 0) - { - $options = ['Scrollable' => SQLSRV_CURSOR_KEYSET]; - } - - $statement = sqlsrv_prepare($this->connection, $this->query, $params, $options); - - if (!$statement) - { - $errors = $this->errorInfo(); - - throw new PrepareStatementFailureException($errors[0]['message'], $errors[0]['code']); - } - - return $statement; - } - - /** - * Returns the number of rows affected by the last SQL statement. - * - * @return integer - * - * @since __DEPLOY_VERSION__ - */ - public function rowCount() - { - if (strncmp(strtoupper(ltrim($this->query)), 'SELECT', strlen('SELECT')) === 0) - { - return sqlsrv_num_rows($this->statement); - } - - return sqlsrv_rows_affected($this->statement); - } -} diff --git a/libraries/vendor/joomla/database/src/StatementInterface.php b/libraries/vendor/joomla/database/src/StatementInterface.php deleted file mode 100644 index 3723932fe7e4a..0000000000000 --- a/libraries/vendor/joomla/database/src/StatementInterface.php +++ /dev/null @@ -1,115 +0,0 @@ - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/di/src/Container.php b/libraries/vendor/joomla/di/src/Container.php deleted file mode 100644 index 005e8de20d4cd..0000000000000 --- a/libraries/vendor/joomla/di/src/Container.php +++ /dev/null @@ -1,652 +0,0 @@ - 'key' - * - * @var array - * @since 1.0 - */ - protected $aliases = []; - - /** - * Holds the resources. - * - * @var \Joomla\DI\Resource[] - * @since __DEPLOY_VERSION__ - */ - protected $resources = []; - - /** - * Parent for hierarchical containers. - * - * In fact, this can be any PSR-11 compatible container, which gets decorated by this - * - * @var Container|ContainerInterface - * @since 1.0 - */ - protected $parent; - - /** - * Holds the service tag mapping. - * - * @var array - * @since 1.5.0 - */ - protected $tags = array(); - - /** - * Constructor for the DI Container - * - * @param ContainerInterface $parent Parent for hierarchical containers. - * - * @since 1.0 - */ - public function __construct(ContainerInterface $parent = null) - { - $this->parent = $parent; - } - - /** - * Retrieve a resource - * - * @param string $resourceName Name of the resource to get. - * - * @return mixed The requested resource - * - * @since 1.0 - * @throws KeyNotFoundException - */ - public function get($resourceName) - { - $key = $this->resolveAlias($resourceName); - - if (!isset($this->resources[$key])) - { - if ($this->parent instanceof ContainerInterface && $this->parent->has($key)) - { - return $this->parent->get($key); - } - - throw new KeyNotFoundException(sprintf("Resource '%s' has not been registered with the container.", $resourceName)); - } - - return $this->resources[$key]->getInstance(); - } - - /** - * Check if specified resource exists. - * - * @param string $resourceName Name of the resource to check. - * - * @return boolean true if key is defined, false otherwise - * - * @since 1.5.0 - */ - public function has($resourceName) - { - $key = $this->resolveAlias($resourceName); - - if (!isset($this->resources[$key])) - { - if ($this->parent instanceof ContainerInterface) - { - return $this->parent->has($key); - } - - return false; - } - - return true; - } - - /** - * Method to check if specified dataStore key exists. - * - * @param string $key Name of the dataStore key to check. - * - * @return boolean True for success - * - * @since 1.0 - * @deprecated 3.0 Use ContainerInterface::has() instead - */ - public function exists($key) - { - @trigger_error( - sprintf( - '%1$s() is deprecated and will be removed in 3.0, use %2$s::has() instead.', - __METHOD__, - ContainerInterface::class - ), - E_USER_DEPRECATED - ); - - return $this->has($key); - } - - /** - * Create an alias for a given key for easy access. - * - * @param string $alias The alias name - * @param string $key The key to alias - * - * @return $this - * - * @since 1.0 - */ - public function alias($alias, $key) - { - $this->aliases[$alias] = $key; - - return $this; - } - - /** - * Resolve a resource name. - * - * If the resource name is an alias, the corresponding key is returned. - * If the resource name is not an alias, the resource name is returned unchanged. - * - * @param string $resourceName The key to search for. - * - * @return string - * - * @since 1.0 - */ - protected function resolveAlias($resourceName) - { - if (isset($this->aliases[$resourceName])) - { - return $this->aliases[$resourceName]; - } - - return $resourceName; - } - - /** - * Check whether a resource is shared - * - * @param string $resourceName Name of the resource to check. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function isShared(string $resourceName): bool - { - return $this->hasFlag($resourceName, 'isShared', true); - } - - /** - * Check whether a resource is protected - * - * @param string $resourceName Name of the resource to check. - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function isProtected(string $resourceName): bool - { - return $this->hasFlag($resourceName, 'isProtected', true); - } - - /** - * Check whether a flag (i.e., one of 'shared' or 'protected') is set - * - * @param string $resourceName Name of the resource to check. - * @param string $method Method to delegate to - * @param boolean $default Default return value - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - * @throws KeyNotFoundException - */ - private function hasFlag(string $resourceName, string $method, bool $default = true): bool - { - $key = $this->resolveAlias($resourceName); - - if (isset($this->resources[$key])) - { - return call_user_func([$this->resources[$key], $method]); - } - - if ($this->parent instanceof Container) - { - return call_user_func([$this->parent, $method], $key); - } - - if ($this->parent instanceof ContainerInterface && $this->parent->has($key)) - { - // We don't know, if parent supports the 'shared' or 'protected' concept, so we assume the default - return $default; - } - - throw new KeyNotFoundException(sprintf("Resource '%s' has not been registered with the container.", $resourceName)); - } - - /** - * Assign a tag to services. - * - * @param string $tag The tag name - * @param array $keys The service keys to tag - * - * @return Container This object for chaining. - * - * @since 1.5.0 - */ - public function tag($tag, array $keys) - { - foreach ($keys as $key) - { - $resolvedKey = $this->resolveAlias($key); - - if (!isset($this->tags[$tag])) - { - $this->tags[$tag] = array(); - } - - $this->tags[$tag][] = $resolvedKey; - } - - // Prune duplicates - $this->tags[$tag] = array_unique($this->tags[$tag]); - - return $this; - } - - /** - * Fetch all services registered to the given tag. - * - * @param string $tag The tag name - * - * @return array The resolved services for the given tag - * - * @since 1.5.0 - */ - public function getTagged($tag) - { - $services = array(); - - if (isset($this->tags[$tag])) - { - foreach ($this->tags[$tag] as $service) - { - $services[] = $this->get($service); - } - } - - return $services; - } - - /** - * Build an object of the requested class - * - * Creates an instance of the class specified by $resourceName with all dependencies injected. - * If the dependencies cannot be completely resolved, a DependencyResolutionException is thrown. - * - * @param string $resourceName The class name to build. - * @param boolean $shared True to create a shared resource. - * - * @return object|false Instance of class specified by $resourceName with all dependencies injected. - * Returns an object if the class exists and false otherwise - * - * @since 1.0 - * @throws DependencyResolutionException if the object could not be built (due to missing information) - */ - public function buildObject($resourceName, $shared = false) - { - static $buildStack = []; - - $key = $this->resolveAlias($resourceName); - - if (in_array($key, $buildStack, true)) - { - $buildStack = []; - - throw new DependencyResolutionException("Can't resolve circular dependency"); - } - - $buildStack[] = $key; - - if ($this->has($key)) - { - $resource = $this->get($key); - array_pop($buildStack); - - return $resource; - } - - try - { - $reflection = new \ReflectionClass($key); - } - catch (\ReflectionException $e) - { - array_pop($buildStack); - - return false; - } - - if (!$reflection->isInstantiable()) - { - $buildStack = []; - - throw new DependencyResolutionException("$key can not be instantiated."); - } - - $constructor = $reflection->getConstructor(); - - // If there are no parameters, just return a new object. - if ($constructor === null) - { - // There is no constructor, just return a new object. - $callback = function () use ($key) - { - return new $key; - }; - } - else - { - $newInstanceArgs = $this->getMethodArgs($constructor); - - $callback = function () use ($reflection, $newInstanceArgs) - { - return $reflection->newInstanceArgs($newInstanceArgs); - }; - } - - $this->set($key, $callback, $shared); - - $resource = $this->get($key); - array_pop($buildStack); - - return $resource; - } - - /** - * Convenience method for building a shared object. - * - * @param string $resourceName The class name to build. - * - * @return object|false Instance of class specified by $resourceName with all dependencies injected. - * Returns an object if the class exists and false otherwise - * - * @since 1.0 - */ - public function buildSharedObject($resourceName) - { - return $this->buildObject($resourceName, true); - } - - /** - * Create a child Container with a new property scope that has the ability to access the parent scope when resolving. - * - * @return Container A new container with the current as a parent - * - * @since 1.0 - */ - public function createChild() - { - return new static($this); - } - - /** - * Extend a defined service Closure by wrapping the existing one with a new callable function. - * - * This works very similar to a decorator pattern. Note that this only works on service Closures - * that have been defined in the current Provider, not parent providers. - * - * @param string $resourceName The unique identifier for the Closure or property. - * @param callable $callable A callable to wrap the original service Closure. - * - * @return void - * - * @since 1.0 - * @throws KeyNotFoundException - */ - public function extend($resourceName, callable $callable) - { - $key = $this->resolveAlias($resourceName); - $resource = $this->getResource($key, true); - - $closure = function ($c) use ($callable, $resource) - { - return $callable($resource->getInstance(), $c); - }; - - $this->set($key, $closure, $resource->isShared()); - } - - /** - * Build an array of constructor parameters. - * - * @param \ReflectionMethod $method Method for which to build the argument array. - * - * @return array Array of arguments to pass to the method. - * - * @since 1.0 - * @throws DependencyResolutionException - */ - private function getMethodArgs(\ReflectionMethod $method) - { - $methodArgs = []; - - foreach ($method->getParameters() as $param) - { - $dependency = $param->getClass(); - $dependencyVarName = $param->getName(); - - // If we have a dependency, that means it has been type-hinted. - if ($dependency !== null) - { - $dependencyClassName = $dependency->getName(); - - // If the dependency class name is registered with this container or a parent, use it. - if ($this->getResource($dependencyClassName) !== null) - { - $depObject = $this->get($dependencyClassName); - } - else - { - $depObject = $this->buildObject($dependencyClassName); - } - - if ($depObject instanceof $dependencyClassName) - { - $methodArgs[] = $depObject; - continue; - } - } - - // Finally, if there is a default parameter, use it. - if ($param->isOptional()) - { - $methodArgs[] = $param->getDefaultValue(); - continue; - } - - // Couldn't resolve dependency, and no default was provided. - throw new DependencyResolutionException(sprintf('Could not resolve dependency: %s', $dependencyVarName)); - } - - return $methodArgs; - } - - /** - * Set a resource. If the value is null unsets the resource. - * - * @param string $key Name of resources key to set. - * @param mixed $value Callable function to run or string to retrive when requesting the specified $key. - * @param boolean $shared True to create and store a shared instance. - * @param boolean $protected True to protect this item from being overwritten. Useful for services. - * - * @return $this - * - * @since 1.0 - * @throws ProtectedKeyException Thrown if the provided key is already set and is protected. - */ - public function set($key, $value, $shared = false, $protected = false) - { - $key = $this->resolveAlias($key); - - $hasKey = $this->has($key); - - if ($hasKey && $this->isProtected($key)) - { - throw new ProtectedKeyException(sprintf("Key %s is protected and can't be overwritten.", $key)); - } - - if ($value === null && $hasKey) - { - unset($this->resources[$key]); - - return $this; - } - - $mode = $shared ? Resource::SHARE : Resource::NO_SHARE; - $mode |= $protected ? Resource::PROTECT : Resource::NO_PROTECT; - - $this->resources[$key] = new Resource($this, $value, $mode); - - return $this; - } - - /** - * Convenience method for creating protected keys. - * - * @param string $key Name of dataStore key to set. - * @param mixed $value Callable function to run or string to retrive when requesting the specified $key. - * @param boolean $shared True to create and store a shared instance. - * - * @return $this - * - * @since 1.0 - */ - public function protect($key, $value, $shared = false) - { - return $this->set($key, $value, $shared, true); - } - - /** - * Convenience method for creating shared keys. - * - * @param string $key Name of dataStore key to set. - * @param mixed $value Callable function to run or string to retrive when requesting the specified $key. - * @param boolean $protected True to protect this item from being overwritten. Useful for services. - * - * @return $this - * - * @since 1.0 - */ - public function share($key, $value, $protected = false) - { - return $this->set($key, $value, true, $protected); - } - - /** - * Get the raw data assigned to a key. - * - * @param string $key The key for which to get the stored item. - * @param boolean $bail Throw an exception, if the key is not found - * - * @return \Joomla\DI\Resource - * - * @since __DEPLOY_VERSION__ - * @throws KeyNotFoundException - */ - public function getResource(string $key, bool $bail = false) - { - if (isset($this->resources[$key])) - { - return $this->resources[$key]; - } - - if ($this->parent instanceof Container) - { - return $this->parent->getResource($key); - } - - if ($this->parent instanceof ContainerInterface && $this->parent->has($key)) - { - return new Resource($this, $this->parent->get($key), Resource::SHARE | Resource::PROTECT); - } - - if ($bail) - { - throw new KeyNotFoundException(sprintf('Key %s has not been registered with the container.', $key)); - } - - return null; - } - - /** - * Method to force the container to return a new instance - * of the results of the callback for requested $key. - * - * @param string $key Name of the resources key to get. - * - * @return mixed Results of running the $callback for the specified $key. - * - * @since 1.0 - */ - public function getNewInstance($key) - { - $key = $this->resolveAlias($key); - - $this->getResource($key, true)->reset(); - - return $this->get($key); - } - - /** - * Register a service provider to the container. - * - * @param ServiceProviderInterface $provider The service provider to register. - * - * @return Container This object for chaining. - * - * @since 1.0 - */ - public function registerServiceProvider(ServiceProviderInterface $provider) - { - $provider->register($this); - - return $this; - } - - /** - * Retrieve the keys for services assigned to this container. - * - * @return array - * - * @since 1.5.0 - */ - public function getKeys() - { - return array_unique(array_merge(array_keys($this->aliases), array_keys($this->resources))); - } -} diff --git a/libraries/vendor/joomla/di/src/ContainerAwareInterface.php b/libraries/vendor/joomla/di/src/ContainerAwareInterface.php deleted file mode 100644 index 1817b45bdc604..0000000000000 --- a/libraries/vendor/joomla/di/src/ContainerAwareInterface.php +++ /dev/null @@ -1,30 +0,0 @@ -container) - { - return $this->container; - } - - throw new ContainerNotFoundException('Container not set in ' . get_class($this)); - } - - /** - * Set the DI container. - * - * @param Container $container The DI container. - * - * @return $this - * - * @since 1.2 - */ - public function setContainer(Container $container) - { - $this->container = $container; - - return $this; - } -} diff --git a/libraries/vendor/joomla/di/src/Exception/ContainerNotFoundException.php b/libraries/vendor/joomla/di/src/Exception/ContainerNotFoundException.php deleted file mode 100644 index f3cfddbebc944..0000000000000 --- a/libraries/vendor/joomla/di/src/Exception/ContainerNotFoundException.php +++ /dev/null @@ -1,20 +0,0 @@ -container = $container; - $this->shared = ($mode & self::SHARE) === self::SHARE; - $this->protected = ($mode & self::PROTECT) === self::PROTECT; - - if (is_callable($value)) - { - $this->factory = $value; - } - else - { - if ($this->shared) - { - $this->instance = $value; - } - - if (is_object($value)) - { - $this->factory = function () use ($value) - { - return clone $value; - }; - } - else - { - $this->factory = function () use ($value) - { - return $value; - }; - } - } - } - - /** - * Check whether the resource is shared - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function isShared(): bool - { - return $this->shared; - } - - /** - * Check whether the resource is protected - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function isProtected(): bool - { - return $this->protected; - } - - /** - * Get an instance of the resource - * - * If a factory was provided, the resource is created and - if it is a shared resource - cached internally. - * If the resource was provided directly, that resource is returned. - * - * @return mixed - * - * @since __DEPLOY_VERSION__ - */ - public function getInstance() - { - $callable = $this->factory; - - if ($this->isShared()) - { - if ($this->instance === null) - { - $this->instance = $callable($this->container); - } - - return $this->instance; - } - - return $callable($this->container); - } - - /** - * Get the factory - * - * @return callable - * - * @since __DEPLOY_VERSION__ - */ - public function getFactory() - { - return $this->factory; - } - - /** - * Reset the resource - * - * The instance cache is cleared, so that the next call to get() returns a new instance. - * This has an effect on shared, non-protected resources only. - * - * @return boolean True if the resource was reset, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function reset(): bool - { - if ($this->isShared() && !$this->isProtected()) - { - $this->instance = null; - - return true; - } - - return false; - } -} diff --git a/libraries/vendor/joomla/di/src/ServiceProviderInterface.php b/libraries/vendor/joomla/di/src/ServiceProviderInterface.php deleted file mode 100644 index fc4a2ab879626..0000000000000 --- a/libraries/vendor/joomla/di/src/ServiceProviderInterface.php +++ /dev/null @@ -1,28 +0,0 @@ - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/event/src/AbstractEvent.php b/libraries/vendor/joomla/event/src/AbstractEvent.php deleted file mode 100644 index 78fbcc89b537b..0000000000000 --- a/libraries/vendor/joomla/event/src/AbstractEvent.php +++ /dev/null @@ -1,207 +0,0 @@ -name = $name; - $this->arguments = $arguments; - } - - /** - * Get the event name. - * - * @return string The event name. - * - * @since 1.0 - */ - public function getName() - { - return $this->name; - } - - /** - * Get an event argument value. - * - * @param string $name The argument name. - * @param mixed $default The default value if not found. - * - * @return mixed The argument value or the default value. - * - * @since 1.0 - */ - public function getArgument($name, $default = null) - { - if (isset($this->arguments[$name])) - { - return $this->arguments[$name]; - } - - return $default; - } - - /** - * Tell if the given event argument exists. - * - * @param string $name The argument name. - * - * @return boolean True if it exists, false otherwise. - * - * @since 1.0 - */ - public function hasArgument($name) - { - return isset($this->arguments[$name]); - } - - /** - * Get all event arguments. - * - * @return array An associative array of argument names as keys and their values as values. - * - * @since 1.0 - */ - public function getArguments() - { - return $this->arguments; - } - - /** - * Tell if the event propagation is stopped. - * - * @return boolean True if stopped, false otherwise. - * - * @since 1.0 - */ - public function isStopped() - { - return true === $this->stopped; - } - - /** - * Stops the propagation of the event to further event listeners. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function stopPropagation() - { - $this->stopped = true; - } - - /** - * Count the number of arguments. - * - * @return integer The number of arguments. - * - * @since 1.0 - */ - public function count() - { - return count($this->arguments); - } - - /** - * Serialize the event. - * - * @return string The serialized event. - * - * @since 1.0 - */ - public function serialize() - { - return serialize([$this->name, $this->arguments, $this->stopped]); - } - - /** - * Unserialize the event. - * - * @param string $serialized The serialized event. - * - * @return void - * - * @since 1.0 - */ - public function unserialize($serialized) - { - list($this->name, $this->arguments, $this->stopped) = unserialize($serialized); - } - - /** - * Tell if the given event argument exists. - * - * @param string $name The argument name. - * - * @return boolean True if it exists, false otherwise. - * - * @since 1.0 - */ - public function offsetExists($name) - { - return $this->hasArgument($name); - } - - /** - * Get an event argument value. - * - * @param string $name The argument name. - * - * @return mixed The argument value or null if not existing. - * - * @since 1.0 - */ - public function offsetGet($name) - { - return $this->getArgument($name); - } -} diff --git a/libraries/vendor/joomla/event/src/DelegatingDispatcher.php b/libraries/vendor/joomla/event/src/DelegatingDispatcher.php deleted file mode 100644 index f3fa5af4406fd..0000000000000 --- a/libraries/vendor/joomla/event/src/DelegatingDispatcher.php +++ /dev/null @@ -1,156 +0,0 @@ -dispatcher = $dispatcher; - } - - /** - * Attaches a listener to an event - * - * @param string $eventName The event to listen to. - * @param callable $callback A callable function - * @param integer $priority The priority at which the $callback executed - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function addListener(string $eventName, callable $callback, int $priority = 0): bool - { - return $this->dispatcher->addListener($eventName, $callback, $priority); - } - - /** - * Adds an event subscriber. - * - * @param SubscriberInterface $subscriber The subscriber. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function addSubscriber(SubscriberInterface $subscriber) - { - $this->dispatcher->addSubscriber($subscriber); - } - - /** - * Dispatches an event to all registered listeners. - * - * @param string $name The name of the event to dispatch. - * @param EventInterface $event The event to pass to the event handlers/listeners. - * - * @return EventInterface The event after being passed through all listeners. - * - * @since __DEPLOY_VERSION__ - */ - public function dispatch(string $name, EventInterface $event = null): EventInterface - { - return $this->dispatcher->dispatch($name, $event); - } - - /** - * Get the listeners registered to the given event. - * - * @param string $event The event to fetch listeners for - * - * @return callable[] An array of registered listeners sorted according to their priorities. - * - * @since __DEPLOY_VERSION__ - */ - public function getListeners($event) - { - return $this->dispatcher->getListeners($event); - } - - /** - * Tell if the given listener has been added. - * - * If an event is specified, it will tell if the listener is registered for that event. - * - * @param callable $callback The callable to check is listening to the event. - * @param string $eventName The event to check a listener is subscribed to. - * - * @return boolean True if the listener is registered, false otherwise. - * - * @since __DEPLOY_VERSION__ - */ - public function hasListener(callable $callback, $eventName = null) - { - return $this->dispatcher->hasListener($callback, $eventName); - } - - /** - * Removes an event listener from the specified event. - * - * @param string $eventName The event to remove a listener from. - * @param callable $listener The listener to remove. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function removeListener(string $eventName, callable $listener) - { - $this->dispatcher->removeListener($eventName, $listener); - } - - /** - * Removes an event subscriber. - * - * @param SubscriberInterface $subscriber The subscriber. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function removeSubscriber(SubscriberInterface $subscriber) - { - $this->dispatcher->removeSubscriber($subscriber); - } - - /** - * Trigger an event. - * - * @param EventInterface|string $event The event object or name. - * - * @return EventInterface The event after being passed through all listeners. - * - * @since 1.0 - */ - public function triggerEvent($event) - { - return $this->dispatcher->triggerEvent($event); - } -} diff --git a/libraries/vendor/joomla/event/src/Dispatcher.php b/libraries/vendor/joomla/event/src/Dispatcher.php deleted file mode 100644 index d54ac5d6eed6b..0000000000000 --- a/libraries/vendor/joomla/event/src/Dispatcher.php +++ /dev/null @@ -1,456 +0,0 @@ -events[$event->getName()] = $event; - - return $this; - } - - /** - * Add an event to this dispatcher, only if it is not existing. - * - * @param EventInterface $event The event. - * - * @return $this - * - * @since 1.0 - */ - public function addEvent(EventInterface $event) - { - if (!isset($this->events[$event->getName()])) - { - $this->events[$event->getName()] = $event; - } - - return $this; - } - - /** - * Tell if the given event has been added to this dispatcher. - * - * @param EventInterface|string $event The event object or name. - * - * @return boolean True if the listener has the given event, false otherwise. - * - * @since 1.0 - */ - public function hasEvent($event) - { - if ($event instanceof EventInterface) - { - $event = $event->getName(); - } - - return isset($this->events[$event]); - } - - /** - * Get the event object identified by the given name. - * - * @param string $name The event name. - * @param mixed $default The default value if the event was not registered. - * - * @return EventInterface|mixed The event of the default value. - * - * @since 1.0 - */ - public function getEvent($name, $default = null) - { - if (isset($this->events[$name])) - { - return $this->events[$name]; - } - - return $default; - } - - /** - * Remove an event from this dispatcher. The registered listeners will remain. - * - * @param EventInterface|string $event The event object or name. - * - * @return $this - * - * @since 1.0 - */ - public function removeEvent($event) - { - if ($event instanceof EventInterface) - { - $event = $event->getName(); - } - - if (isset($this->events[$event])) - { - unset($this->events[$event]); - } - - return $this; - } - - /** - * Get the registered events. - * - * @return EventInterface[] The registered event. - * - * @since 1.0 - */ - public function getEvents() - { - return $this->events; - } - - /** - * Clear all events. - * - * @return EventInterface[] The old events. - * - * @since 1.0 - */ - public function clearEvents() - { - $events = $this->events; - $this->events = []; - - return $events; - } - - /** - * Count the number of registered event. - * - * @return integer The numer of registered events. - * - * @since 1.0 - */ - public function countEvents() - { - return count($this->events); - } - - /** - * Attaches a listener to an event - * - * @param string $eventName The event to listen to. - * @param callable $callback A callable function - * @param integer $priority The priority at which the $callback executed - * - * @return boolean - * - * @since 1.0 - */ - public function addListener(string $eventName, callable $callback, int $priority = 0): bool - { - if (!isset($this->listeners[$eventName])) - { - $this->listeners[$eventName] = new ListenersPriorityQueue; - } - - $this->listeners[$eventName]->add($callback, $priority); - - return true; - } - - /** - * Get the priority of the given listener for the given event. - * - * @param string $eventName The event to listen to. - * @param callable $callback A callable function - * - * @return mixed The listener priority or null if the listener doesn't exist. - * - * @since 1.0 - */ - public function getListenerPriority($eventName, callable $callback) - { - if (isset($this->listeners[$eventName])) - { - return $this->listeners[$eventName]->getPriority($callback); - } - - return null; - } - - /** - * Get the listeners registered to the given event. - * - * @param string $event The event to fetch listeners for - * - * @return callable[] An array of registered listeners sorted according to their priorities. - * - * @since 1.0 - */ - public function getListeners($event) - { - if (isset($this->listeners[$event])) - { - return $this->listeners[$event]->getAll(); - } - - return []; - } - - /** - * Tell if the given listener has been added. - * - * If an event is specified, it will tell if the listener is registered for that event. - * - * @param callable $callback The callable to check is listening to the event. - * @param string $eventName The event to check a listener is subscribed to. - * - * @return boolean True if the listener is registered, false otherwise. - * - * @since 1.0 - */ - public function hasListener(callable $callback, $eventName = null) - { - if ($eventName) - { - if (isset($this->listeners[$eventName])) - { - return $this->listeners[$eventName]->has($callback); - } - } - else - { - foreach ($this->listeners as $queue) - { - if ($queue->has($callback)) - { - return true; - } - } - } - - return false; - } - - /** - * Removes an event listener from the specified event. - * - * @param string $eventName The event to remove a listener from. - * @param callable $listener The listener to remove. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function removeListener(string $eventName, callable $listener) - { - if (isset($this->listeners[$eventName])) - { - $this->listeners[$eventName]->remove($listener); - } - } - - /** - * Clear the listeners in this dispatcher. - * - * If an event is specified, the listeners will be cleared only for that event. - * - * @param string $event The event name. - * - * @return $this - * - * @since 1.0 - */ - public function clearListeners($event = null) - { - if ($event) - { - if (isset($this->listeners[$event])) - { - unset($this->listeners[$event]); - } - } - else - { - $this->listeners = []; - } - - return $this; - } - - /** - * Count the number of registered listeners for the given event. - * - * @param string $event The event name. - * - * @return integer The number of registered listeners for the given event. - * - * @since 1.0 - */ - public function countListeners($event) - { - return isset($this->listeners[$event]) ? count($this->listeners[$event]) : 0; - } - - /** - * Adds an event subscriber. - * - * @param SubscriberInterface $subscriber The subscriber. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function addSubscriber(SubscriberInterface $subscriber) - { - foreach ($subscriber->getSubscribedEvents() as $eventName => $params) - { - if (is_array($params)) - { - $this->addListener($eventName, [$subscriber, $params[0]], $params[1] ?? Priority::NORMAL); - } - else - { - $this->addListener($eventName, [$subscriber, $params]); - } - } - } - - /** - * Removes an event subscriber. - * - * @param SubscriberInterface $subscriber The subscriber. - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function removeSubscriber(SubscriberInterface $subscriber) - { - foreach ($subscriber->getSubscribedEvents() as $eventName => $params) - { - if (is_array($params)) - { - $this->removeListener($eventName, [$subscriber, $params[0]]); - } - else - { - $this->removeListener($eventName, [$subscriber, $params]); - } - } - } - - /** - * Dispatches an event to all registered listeners. - * - * @param string $name The name of the event to dispatch. - * @param EventInterface $event The event to pass to the event handlers/listeners. - * - * @return EventInterface - * - * @since __DEPLOY_VERSION__ - */ - public function dispatch(string $name, EventInterface $event = null): EventInterface - { - if (!($event instanceof EventInterface)) - { - $event = $this->getDefaultEvent($name); - } - - if (isset($this->listeners[$event->getName()])) - { - foreach ($this->listeners[$event->getName()] as $listener) - { - if ($event->isStopped()) - { - return $event; - } - - call_user_func($listener, $event); - } - } - - return $event; - } - - /** - * Trigger an event. - * - * @param EventInterface|string $event The event object or name. - * - * @return EventInterface The event after being passed through all listeners. - * - * @since 1.0 - * @deprecated 3.0 Use dispatch() instead. - */ - public function triggerEvent($event) - { - @trigger_error( - sprintf( - '%1$s() is deprecated and will be removed in 3.0, use %2$s::dispatch() instead.', - __METHOD__, - DispatcherInterface::class - ), - E_USER_DEPRECATED - ); - - if (!($event instanceof EventInterface)) - { - $event = $this->getDefaultEvent($event); - } - - return $this->dispatch($event->getName(), $event); - } - - /** - * Get an event object for the specified event name - * - * @param string $name The event name to get an EventInterface object for - * - * @return EventInterface - * - * @since __DEPLOY_VERSION__ - */ - private function getDefaultEvent(string $name): EventInterface - { - if (isset($this->events[$name])) - { - return $this->events[$name]; - } - - return new Event($name); - } -} diff --git a/libraries/vendor/joomla/event/src/DispatcherAwareInterface.php b/libraries/vendor/joomla/event/src/DispatcherAwareInterface.php deleted file mode 100644 index b5fecc1c27ce7..0000000000000 --- a/libraries/vendor/joomla/event/src/DispatcherAwareInterface.php +++ /dev/null @@ -1,28 +0,0 @@ -dispatcher) - { - return $this->dispatcher; - } - - throw new \UnexpectedValueException('Dispatcher not set in ' . __CLASS__); - } - - /** - * Set the dispatcher to use. - * - * @param DispatcherInterface $dispatcher The dispatcher to use. - * - * @return $this - * - * @since 1.2.0 - */ - public function setDispatcher(DispatcherInterface $dispatcher) - { - $this->dispatcher = $dispatcher; - - return $this; - } -} diff --git a/libraries/vendor/joomla/event/src/DispatcherInterface.php b/libraries/vendor/joomla/event/src/DispatcherInterface.php deleted file mode 100644 index 025f18432367f..0000000000000 --- a/libraries/vendor/joomla/event/src/DispatcherInterface.php +++ /dev/null @@ -1,103 +0,0 @@ -arguments[$name])) - { - $this->arguments[$name] = $value; - } - - return $this; - } - - /** - * Add argument to event. - * - * @param string $name Argument name. - * @param mixed $value Value. - * - * @return $this - * - * @since 1.0 - */ - public function setArgument($name, $value) - { - $this->arguments[$name] = $value; - - return $this; - } - - /** - * Remove an event argument. - * - * @param string $name The argument name. - * - * @return mixed The old argument value or null if it is not existing. - * - * @since 1.0 - */ - public function removeArgument($name) - { - $return = null; - - if (isset($this->arguments[$name])) - { - $return = $this->arguments[$name]; - unset($this->arguments[$name]); - } - - return $return; - } - - /** - * Clear all event arguments. - * - * @return array The old arguments. - * - * @since 1.0 - */ - public function clearArguments() - { - $arguments = $this->arguments; - $this->arguments = []; - - return $arguments; - } - - /** - * Stop the event propagation. - * - * @return void - * - * @since 1.0 - * @deprecated 3.0 Use stopPropogation instead - */ - public function stop() - { - @trigger_error( - sprintf( - '%1$s() is deprecated and will be removed in 3.0, use %2$s::stopPropagation() instead.', - __METHOD__, - EventInterface::class - ), - E_USER_DEPRECATED - ); - - $this->stopPropagation(); - } - - /** - * Set the value of an event argument. - * - * @param string $name The argument name. - * @param mixed $value The argument value. - * - * @return void - * - * @since 1.0 - * @throws InvalidArgumentException If the argument name is null. - */ - public function offsetSet($name, $value) - { - if (is_null($name)) - { - throw new InvalidArgumentException('The argument name cannot be null.'); - } - - $this->setArgument($name, $value); - } - - /** - * Remove an event argument. - * - * @param string $name The argument name. - * - * @return void - * - * @since 1.0 - */ - public function offsetUnset($name) - { - $this->removeArgument($name); - } -} diff --git a/libraries/vendor/joomla/event/src/EventImmutable.php b/libraries/vendor/joomla/event/src/EventImmutable.php deleted file mode 100644 index 6c799254886f7..0000000000000 --- a/libraries/vendor/joomla/event/src/EventImmutable.php +++ /dev/null @@ -1,102 +0,0 @@ -constructed) - { - throw new BadMethodCallException( - sprintf('Cannot reconstruct the EventImmutable %s.', $this->name) - ); - } - - $this->constructed = true; - - parent::__construct($name, $arguments); - } - - /** - * Set the value of an event argument. - * - * @param string $name The argument name. - * @param mixed $value The argument value. - * - * @return void - * - * @since 1.0 - * @throws BadMethodCallException - */ - public function offsetSet($name, $value) - { - throw new BadMethodCallException( - sprintf( - 'Cannot set the argument %s of the immutable event %s.', - $name, - $this->name - ) - ); - } - - /** - * Remove an event argument. - * - * @param string $name The argument name. - * - * @return void - * - * @throws BadMethodCallException - * - * @since 1.0 - */ - public function offsetUnset($name) - { - throw new BadMethodCallException( - sprintf( - 'Cannot remove the argument %s of the immutable event %s.', - $name, - $this->name - ) - ); - } -} diff --git a/libraries/vendor/joomla/event/src/EventInterface.php b/libraries/vendor/joomla/event/src/EventInterface.php deleted file mode 100644 index ce12f03960dfd..0000000000000 --- a/libraries/vendor/joomla/event/src/EventInterface.php +++ /dev/null @@ -1,57 +0,0 @@ -listeners[$priority][] = $callback; - - return $this; - } - - /** - * Remove a listener from the queue. - * - * @param callable $callback A callable function acting as an event listener. - * - * @return $this - * - * @since 1.0 - */ - public function remove(callable $callback) - { - foreach ($this->listeners as $priority => $listeners) - { - if (($key = array_search($callback, $listeners, true)) !== false) - { - unset($this->listeners[$priority][$key]); - } - } - - return $this; - } - - /** - * Tell if the listener exists in the queue. - * - * @param callable $callback A callable function acting as an event listener. - * - * @return boolean True if it exists, false otherwise. - * - * @since 1.0 - */ - public function has(callable $callback) - { - foreach ($this->listeners as $priority => $listeners) - { - if (($key = array_search($callback, $listeners, true)) !== false) - { - return true; - } - } - - return false; - } - - /** - * Get the priority of the given listener. - * - * @param callable $callback A callable function acting as an event listener. - * @param mixed $default The default value to return if the listener doesn't exist. - * - * @return mixed The listener priority if it exists or the specified default value - * - * @since 1.0 - */ - public function getPriority(callable $callback, $default = null) - { - foreach ($this->listeners as $priority => $listeners) - { - if (($key = array_search($callback, $listeners, true)) !== false) - { - return $priority; - } - } - - return $default; - } - - /** - * Get all listeners contained in this queue, sorted according to their priority. - * - * @return callable[] An array of listeners. - * - * @since 1.0 - */ - public function getAll() - { - if (empty($this->listeners)) - { - return []; - } - - $sorted = []; - - krsort($this->listeners); - - $sorted = call_user_func_array('array_merge', $this->listeners); - - return $sorted; - } - - /** - * Get the priority queue. - * - * @return \ArrayIterator - * - * @since 1.0 - */ - public function getIterator() - { - return new \ArrayIterator($this->getAll()); - } - - /** - * Count the number of listeners in the queue. - * - * @return integer The number of listeners in the queue. - * - * @since 1.0 - */ - public function count() - { - $count = 0; - - foreach ($this->listeners as $priority) - { - $count += count($priority); - } - - return $count; - } -} diff --git a/libraries/vendor/joomla/event/src/Priority.php b/libraries/vendor/joomla/event/src/Priority.php deleted file mode 100644 index ef3f51cc05788..0000000000000 --- a/libraries/vendor/joomla/event/src/Priority.php +++ /dev/null @@ -1,34 +0,0 @@ - 'methodName') - * * array('eventName' => array('methodName', $priority)) - * - * @return array - * - * @since __DEPLOY_VERSION__ - */ - public static function getSubscribedEvents(): array; -} diff --git a/libraries/vendor/joomla/filesystem/LICENSE b/libraries/vendor/joomla/filesystem/LICENSE deleted file mode 100644 index df50810b85774..0000000000000 --- a/libraries/vendor/joomla/filesystem/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/filesystem/meta/language/en-GB/en-GB.lib_joomla_filesystem_patcher.ini b/libraries/vendor/joomla/filesystem/meta/language/en-GB/en-GB.lib_joomla_filesystem_patcher.ini deleted file mode 100644 index fb59d5d950e72..0000000000000 --- a/libraries/vendor/joomla/filesystem/meta/language/en-GB/en-GB.lib_joomla_filesystem_patcher.ini +++ /dev/null @@ -1,13 +0,0 @@ -; Joomla! Project -; Copyright (C) 2005 - 2016 Open Source Matters. All rights reserved. -; License GNU General Public License version 2 or later; see LICENSE.txt, see LICENSE.php -; Note : All ini files need to be saved as UTF-8 - No BOM - -JLIB_FILESYSTEM_PATCHER_FAILED_VERIFY="Failed source verification of file %s at line %d" -JLIB_FILESYSTEM_PATCHER_INVALID_DIFF="Invalid unified diff block" -JLIB_FILESYSTEM_PATCHER_INVALID_INPUT="Invalid input" -JLIB_FILESYSTEM_PATCHER_UNEXISING_SOURCE="Unexisting source file" -JLIB_FILESYSTEM_PATCHER_UNEXPECTED_ADD_LINE="Unexpected add line at line %d'" -JLIB_FILESYSTEM_PATCHER_UNEXPECTED_EOF="Unexpected end of file" -JLIB_FILESYSTEM_PATCHER_UNEXPECTED_REMOVE_LINE="Unexpected remove line at line %d" - diff --git a/libraries/vendor/joomla/filesystem/src/Buffer.php b/libraries/vendor/joomla/filesystem/src/Buffer.php deleted file mode 100644 index 9f9633a268835..0000000000000 --- a/libraries/vendor/joomla/filesystem/src/Buffer.php +++ /dev/null @@ -1,196 +0,0 @@ -name = $url['host']; - $this->buffers[$this->name] = null; - $this->position = 0; - - return true; - } - - /** - * Read stream - * - * @param integer $count How many bytes of data from the current position should be returned. - * - * @return mixed The data from the stream up to the specified number of bytes (all data if - * the total number of bytes in the stream is less than $count. Null if - * the stream is empty. - * - * @see streamWrapper::stream_read - * @since 1.0 - */ - public function stream_read($count) - { - $ret = substr($this->buffers[$this->name], $this->position, $count); - $this->position += strlen($ret); - - return $ret; - } - - /** - * Write stream - * - * @param string $data The data to write to the stream. - * - * @return integer - * - * @see streamWrapper::stream_write - * @since 1.0 - */ - public function stream_write($data) - { - $left = substr($this->buffers[$this->name], 0, $this->position); - $right = substr($this->buffers[$this->name], $this->position + strlen($data)); - $this->buffers[$this->name] = $left . $data . $right; - $this->position += strlen($data); - - return strlen($data); - } - - /** - * Function to get the current position of the stream - * - * @return integer - * - * @see streamWrapper::stream_tell - * @since 1.0 - */ - public function stream_tell() - { - return $this->position; - } - - /** - * Function to test for end of file pointer - * - * @return boolean True if the pointer is at the end of the stream - * - * @see streamWrapper::stream_eof - * @since 1.0 - */ - public function stream_eof() - { - return $this->position >= strlen($this->buffers[$this->name]); - } - - /** - * The read write position updates in response to $offset and $whence - * - * @param integer $offset The offset in bytes - * @param integer $whence Position the offset is added to - * Options are SEEK_SET, SEEK_CUR, and SEEK_END - * - * @return boolean True if updated - * - * @see streamWrapper::stream_seek - * @since 1.0 - */ - public function stream_seek($offset, $whence) - { - switch ($whence) - { - case SEEK_SET: - if ($offset < strlen($this->buffers[$this->name]) && $offset >= 0) - { - $this->position = $offset; - - return true; - } - else - { - return false; - } - break; - - case SEEK_CUR: - if ($offset >= 0) - { - $this->position += $offset; - - return true; - } - else - { - return false; - } - break; - - case SEEK_END: - if (strlen($this->buffers[$this->name]) + $offset >= 0) - { - $this->position = strlen($this->buffers[$this->name]) + $offset; - - return true; - } - else - { - return false; - } - break; - - default: - return false; - } - } -} - -// Register the stream -stream_wrapper_register('buffer', 'Joomla\\Filesystem\\Buffer'); diff --git a/libraries/vendor/joomla/filesystem/src/Clients/FtpClient.php b/libraries/vendor/joomla/filesystem/src/Clients/FtpClient.php deleted file mode 100644 index db4dd58f6eaa0..0000000000000 --- a/libraries/vendor/joomla/filesystem/src/Clients/FtpClient.php +++ /dev/null @@ -1,1796 +0,0 @@ - "\n", 'WIN' => "\r\n"); - - /** - * @var FtpClient[] FtpClient instances container. - * @since 1.0 - */ - protected static $instances = array(); - - /** - * FtpClient object constructor - * - * @param array $options Associative array of options to set - * - * @since 1.0 - */ - public function __construct(array $options = array()) - { - // If default transfer type is not set, set it to autoascii detect - if (!isset($options['type'])) - { - $options['type'] = FTP_BINARY; - } - - $this->setOptions($options); - - if (FTP_NATIVE) - { - // Autoloading fails for Buffer as the class is used as a stream handler - class_exists('Joomla\\Filesystem\\Buffer'); - } - } - - /** - * FtpClient object destructor - * - * Closes an existing connection, if we have one - * - * @since 1.0 - */ - public function __destruct() - { - if (is_resource($this->conn)) - { - $this->quit(); - } - } - - /** - * Returns the global FTP connector object, only creating it - * if it doesn't already exist. - * - * You may optionally specify a username and password in the parameters. If you do so, - * you may not login() again with different credentials using the same object. - * If you do not use this option, you must quit() the current connection when you - * are done, to free it for use by others. - * - * @param string $host Host to connect to - * @param string $port Port to connect to - * @param array $options Array with any of these options: type=>[FTP_AUTOASCII|FTP_ASCII|FTP_BINARY], timeout=>(int) - * @param string $user Username to use for a connection - * @param string $pass Password to use for a connection - * - * @return FtpClient The FTP Client object. - * - * @since 1.0 - */ - public static function getInstance($host = '127.0.0.1', $port = '21', array $options = array(), $user = null, $pass = null) - { - $signature = $user . ':' . $pass . '@' . $host . ":" . $port; - - // Create a new instance, or set the options of an existing one - if (!isset(self::$instances[$signature]) || !is_object(self::$instances[$signature])) - { - self::$instances[$signature] = new static($options); - } - else - { - self::$instances[$signature]->setOptions($options); - } - - // Connect to the server, and login, if requested - if (!self::$instances[$signature]->isConnected()) - { - $return = self::$instances[$signature]->connect($host, $port); - - if ($return && $user !== null && $pass !== null) - { - self::$instances[$signature]->login($user, $pass); - } - } - - return self::$instances[$signature]; - } - - /** - * Set client options - * - * @param array $options Associative array of options to set - * - * @return boolean True if successful - * - * @since 1.0 - */ - public function setOptions(array $options) - { - if (isset($options['type'])) - { - $this->type = $options['type']; - } - - if (isset($options['timeout'])) - { - $this->timeout = $options['timeout']; - } - - return true; - } - - /** - * Method to connect to a FTP server - * - * @param string $host Host to connect to [Default: 127.0.0.1] - * @param integer $port Port to connect on [Default: port 21] - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - public function connect($host = '127.0.0.1', $port = 21) - { - $errno = null; - $err = null; - - // If already connected, return - if (is_resource($this->conn)) - { - return true; - } - - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - $this->conn = @ftp_connect($host, $port, $this->timeout); - - if ($this->conn === false) - { - throw new FilesystemException(sprintf('%1$s: Could not connect to host " %2$s " on port " %3$s "', __METHOD__, $host, $port)); - } - - // Set the timeout for this connection - ftp_set_option($this->conn, FTP_TIMEOUT_SEC, $this->timeout); - - return true; - } - - // Connect to the FTP server. - $this->conn = @ fsockopen($host, $port, $errno, $err, $this->timeout); - - if (!$this->conn) - { - throw new FilesystemException( - sprintf( - '%1$s: Could not connect to host " %2$s " on port " %3$s ". Socket error number: %4$s and error message: %5$s', - __METHOD__, - $host, - $port, - $errno, - $err - ) - ); - } - - // Set the timeout for this connection - socket_set_timeout($this->conn, $this->timeout, 0); - - // Check for welcome response code - if (!$this->_verifyResponse(220)) - { - throw new FilesystemException(sprintf('%1$s: Bad response. Server response: %2$s [Expected: 220]', __METHOD__, $this->response)); - } - - return true; - } - - /** - * Method to determine if the object is connected to an FTP server - * - * @return boolean True if connected - * - * @since 1.0 - */ - public function isConnected() - { - return is_resource($this->conn); - } - - /** - * Method to login to a server once connected - * - * @param string $user Username to login to the server - * @param string $pass Password to login to the server - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - public function login($user = 'anonymous', $pass = 'jftp@joomla.org') - { - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - if (@ftp_login($this->conn, $user, $pass) === false) - { - throw new FilesystemException(__METHOD__ . ': Unable to login'); - } - - return true; - } - - // Send the username - if (!$this->_putCmd('USER ' . $user, array(331, 503))) - { - throw new FilesystemException( - sprintf('%1$s: Bad Username. Server response: %2$s [Expected: 331]. Username sent: %3$s', __METHOD__, $this->response, $user) - ); - } - - // If we are already logged in, continue :) - if ($this->responseCode == 503) - { - return true; - } - - // Send the password - if (!$this->_putCmd('PASS ' . $pass, 230)) - { - throw new FilesystemException(sprintf('%1$s: Bad Password. Server response: %2$s [Expected: 230].', __METHOD__, $this->response)); - } - - return true; - } - - /** - * Method to quit and close the connection - * - * @return boolean True if successful - * - * @since 1.0 - */ - public function quit() - { - // If native FTP support is enabled lets use it... - if (FTP_NATIVE) - { - @ftp_close($this->conn); - - return true; - } - - // Logout and close connection - @fwrite($this->conn, "QUIT\r\n"); - @fclose($this->conn); - - return true; - } - - /** - * Method to retrieve the current working directory on the FTP server - * - * @return string Current working directory - * - * @since 1.0 - * @throws FilesystemException - */ - public function pwd() - { - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - if (($ret = @ftp_pwd($this->conn)) === false) - { - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - - return $ret; - } - - $match = array(null); - - // Send print working directory command and verify success - if (!$this->_putCmd('PWD', 257)) - { - throw new FilesystemException(sprintf('%1$s: Bad response. Server response: %2$s [Expected: 257]', __METHOD__, $this->response)); - } - - // Match just the path - preg_match('/"[^"\r\n]*"/', $this->response, $match); - - // Return the cleaned path - return preg_replace("/\"/", "", $match[0]); - } - - /** - * Method to system string from the FTP server - * - * @return string System identifier string - * - * @since 1.0 - * @throws FilesystemException - */ - public function syst() - { - // If native FTP support is enabled lets use it... - if (FTP_NATIVE) - { - if (($ret = @ftp_systype($this->conn)) === false) - { - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - } - else - { - // Send print working directory command and verify success - if (!$this->_putCmd('SYST', 215)) - { - throw new FilesystemException(sprintf('%1$s: Bad response. Server response: %2$s [Expected: 215]', __METHOD__, $this->response)); - } - - $ret = $this->response; - } - - // Match the system string to an OS - if (strpos(strtoupper($ret), 'MAC') !== false) - { - $ret = 'MAC'; - } - elseif (strpos(strtoupper($ret), 'WIN') !== false) - { - $ret = 'WIN'; - } - else - { - $ret = 'UNIX'; - } - - // Return the os type - return $ret; - } - - /** - * Method to change the current working directory on the FTP server - * - * @param string $path Path to change into on the server - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - public function chdir($path) - { - // If native FTP support is enabled lets use it... - if (FTP_NATIVE) - { - if (@ftp_chdir($this->conn, $path) === false) - { - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - - return true; - } - - // Send change directory command and verify success - if (!$this->_putCmd('CWD ' . $path, 250)) - { - throw new FilesystemException( - sprintf('%1$s: Bad response. Server response: %2$s [Expected: 250]. Sent path: %3$s', __METHOD__, $this->response, $path) - ); - } - - return true; - } - - /** - * Method to reinitialise the server, ie. need to login again - * - * NOTE: This command not available on all servers - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - public function reinit() - { - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - if (@ftp_site($this->conn, 'REIN') === false) - { - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - - return true; - } - - // Send reinitialise command to the server - if (!$this->_putCmd('REIN', 220)) - { - throw new FilesystemException(sprintf('%1$s: Bad response. Server response: %2$s [Expected: 220]', __METHOD__, $this->response)); - } - - return true; - } - - /** - * Method to rename a file/folder on the FTP server - * - * @param string $from Path to change file/folder from - * @param string $to Path to change file/folder to - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - public function rename($from, $to) - { - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - if (@ftp_rename($this->conn, $from, $to) === false) - { - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - - return true; - } - - // Send rename from command to the server - if (!$this->_putCmd('RNFR ' . $from, 350)) - { - throw new FilesystemException( - sprintf('%1$s: Bad response. Server response: %2$s [Expected: 350]. From path sent: %3$s', __METHOD__, $this->response, $from) - ); - } - - // Send rename to command to the server - if (!$this->_putCmd('RNTO ' . $to, 250)) - { - throw new FilesystemException( - sprintf('%1$s: Bad response. Server response: %2$s [Expected: 250]. To path sent: %3$s', __METHOD__, $this->response, $to) - ); - } - - return true; - } - - /** - * Method to change mode for a path on the FTP server - * - * @param string $path Path to change mode on - * @param mixed $mode Octal value to change mode to, e.g. '0777', 0777 or 511 (string or integer) - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - public function chmod($path, $mode) - { - // If no filename is given, we assume the current directory is the target - if ($path == '') - { - $path = '.'; - } - - // Convert the mode to a string - if (is_int($mode)) - { - $mode = decoct($mode); - } - - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - if (@ftp_site($this->conn, 'CHMOD ' . $mode . ' ' . $path) === false) - { - if (!defined('PHP_WINDOWS_VERSION_MAJOR')) - { - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - - return false; - } - - return true; - } - - // Send change mode command and verify success [must convert mode from octal] - if (!$this->_putCmd('SITE CHMOD ' . $mode . ' ' . $path, array(200, 250))) - { - if (!defined('PHP_WINDOWS_VERSION_MAJOR')) - { - throw new FilesystemException( - sprintf( - '%1$s: Bad response. Server response: %2$s [Expected: 250]. Path sent: %3$s. Mode sent: %4$s', - __METHOD__, - $this->response, - $path, - $mode - ) - ); - } - - return false; - } - - return true; - } - - /** - * Method to delete a path [file/folder] on the FTP server - * - * @param string $path Path to delete - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - public function delete($path) - { - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - if (@ftp_delete($this->conn, $path) === false) - { - if (@ftp_rmdir($this->conn, $path) === false) - { - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - } - - return true; - } - - // Send delete file command and if that doesn't work, try to remove a directory - if (!$this->_putCmd('DELE ' . $path, 250)) - { - if (!$this->_putCmd('RMD ' . $path, 250)) - { - throw new FilesystemException( - sprintf('%1$s: Bad response. Server response: %2$s [Expected: 250]. Path sent: %3$s', __METHOD__, $this->response, $path) - ); - } - } - - return true; - } - - /** - * Method to create a directory on the FTP server - * - * @param string $path Directory to create - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - public function mkdir($path) - { - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - if (@ftp_mkdir($this->conn, $path) === false) - { - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - - return true; - } - - // Send change directory command and verify success - if (!$this->_putCmd('MKD ' . $path, 257)) - { - throw new FilesystemException( - sprintf('%1$s: Bad response. Server response: %2$s [Expected: 257]. Path sent: %3$s', __METHOD__, $this->response, $path) - ); - } - - return true; - } - - /** - * Method to restart data transfer at a given byte - * - * @param integer $point Byte to restart transfer at - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - public function restart($point) - { - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - if (@ftp_site($this->conn, 'REST ' . $point) === false) - { - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - - return true; - } - - // Send restart command and verify success - if (!$this->_putCmd('REST ' . $point, 350)) - { - throw new FilesystemException( - sprintf( - '%1$s: Bad response. Server response: %2$s [Expected: 350]. Restart point sent: %3$s', __METHOD__, $this->response, $point - ) - ); - } - - return true; - } - - /** - * Method to create an empty file on the FTP server - * - * @param string $path Path local file to store on the FTP server - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - public function create($path) - { - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - // Turn passive mode on - if (@ftp_pasv($this->conn, true) === false) - { - throw new FilesystemException(__METHOD__ . ': Unable to use passive mode.'); - } - - $buffer = fopen('buffer://tmp', 'r'); - - if (@ftp_fput($this->conn, $path, $buffer, FTP_ASCII) === false) - { - fclose($buffer); - - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - - fclose($buffer); - - return true; - } - - // Start passive mode - if (!$this->_passive()) - { - throw new FilesystemException(__METHOD__ . ': Unable to use passive mode.'); - } - - if (!$this->_putCmd('STOR ' . $path, array(150, 125))) - { - @ fclose($this->dataconn); - throw new FilesystemException( - sprintf('%1$s: Bad response. Server response: %2$s [Expected: 150 or 125]. Path sent: %3$s', __METHOD__, $this->response, $path) - ); - } - - // To create a zero byte upload close the data port connection - fclose($this->dataconn); - - if (!$this->_verifyResponse(226)) - { - throw new FilesystemException( - sprintf('%1$s: Transfer failed. Server response: %2$s [Expected: 226]. Path sent: %3$s', __METHOD__, $this->response, $path) - ); - } - - return true; - } - - /** - * Method to read a file from the FTP server's contents into a buffer - * - * @param string $remote Path to remote file to read on the FTP server - * @param string &$buffer Buffer variable to read file contents into - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - public function read($remote, &$buffer) - { - // Determine file type - $mode = $this->_findMode($remote); - - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - // Turn passive mode on - if (@ftp_pasv($this->conn, true) === false) - { - throw new FilesystemException(__METHOD__ . ': Unable to use passive mode.'); - } - - $tmp = fopen('buffer://tmp', 'br+'); - - if (@ftp_fget($this->conn, $tmp, $remote, $mode) === false) - { - fclose($tmp); - - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - - // Read tmp buffer contents - rewind($tmp); - $buffer = ''; - - while (!feof($tmp)) - { - $buffer .= fread($tmp, 8192); - } - - fclose($tmp); - - return true; - } - - $this->_mode($mode); - - // Start passive mode - if (!$this->_passive()) - { - throw new FilesystemException(__METHOD__ . ': Unable to use passive mode.'); - } - - if (!$this->_putCmd('RETR ' . $remote, array(150, 125))) - { - @ fclose($this->dataconn); - - throw new FilesystemException( - sprintf('%1$s: Bad response. Server response: %2$s [Expected: 150 or 125]. Path sent: %3$s', __METHOD__, $this->response, $remote) - ); - } - - // Read data from data port connection and add to the buffer - $buffer = ''; - - while (!feof($this->dataconn)) - { - $buffer .= fread($this->dataconn, 4096); - } - - // Close the data port connection - fclose($this->dataconn); - - // Let's try to cleanup some line endings if it is ascii - if ($mode == FTP_ASCII) - { - $os = 'UNIX'; - - if (defined('PHP_WINDOWS_VERSION_MAJOR')) - { - $os = 'WIN'; - } - - $buffer = preg_replace("/" . CRLF . "/", $this->lineEndings[$os], $buffer); - } - - if (!$this->_verifyResponse(226)) - { - throw new FilesystemException( - sprintf( - '%1$s: Transfer failed. Server response: %2$s [Expected: 226]. Restart point sent: %3$s', - __METHOD__, $this->response, $remote - ) - ); - } - - return true; - } - - /** - * Method to get a file from the FTP server and save it to a local file - * - * @param string $local Local path to save remote file to - * @param string $remote Path to remote file to get on the FTP server - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - public function get($local, $remote) - { - // Determine file type - $mode = $this->_findMode($remote); - - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - // Turn passive mode on - if (@ftp_pasv($this->conn, true) === false) - { - throw new FilesystemException(__METHOD__ . ': Unable to use passive mode.'); - } - - if (@ftp_get($this->conn, $local, $remote, $mode) === false) - { - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - - return true; - } - - $this->_mode($mode); - - // Check to see if the local file can be opened for writing - $fp = fopen($local, "wb"); - - if (!$fp) - { - throw new FilesystemException(sprintf('%1$s: Unable to open local file for writing. Local path: %2$s', __METHOD__, $local)); - } - - // Start passive mode - if (!$this->_passive()) - { - throw new FilesystemException(__METHOD__ . ': Unable to use passive mode.'); - } - - if (!$this->_putCmd('RETR ' . $remote, array(150, 125))) - { - @ fclose($this->dataconn); - - throw new FilesystemException( - sprintf('%1$s: Bad response. Server response: %2$s [Expected: 150 or 125]. Path sent: %3$s', __METHOD__, $this->response, $remote) - ); - } - - // Read data from data port connection and add to the buffer - while (!feof($this->dataconn)) - { - $buffer = fread($this->dataconn, 4096); - fwrite($fp, $buffer, 4096); - } - - // Close the data port connection and file pointer - fclose($this->dataconn); - fclose($fp); - - if (!$this->_verifyResponse(226)) - { - throw new FilesystemException( - sprintf('%1$s: Transfer failed. Server response: %2$s [Expected: 226]. Path sent: %3$s', __METHOD__, $this->response, $remote) - ); - } - - return true; - } - - /** - * Method to store a file to the FTP server - * - * @param string $local Path to local file to store on the FTP server - * @param string $remote FTP path to file to create - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - public function store($local, $remote = null) - { - // If remote file is not given, use the filename of the local file in the current - // working directory. - if ($remote == null) - { - $remote = basename($local); - } - - // Determine file type - $mode = $this->_findMode($remote); - - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - // Turn passive mode on - if (@ftp_pasv($this->conn, true) === false) - { - throw new FilesystemException(__METHOD__ . ': Unable to use passive mode.'); - } - - if (@ftp_put($this->conn, $remote, $local, $mode) === false) - { - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - - return true; - } - - $this->_mode($mode); - - // Check to see if the local file exists and if so open it for reading - if (@ file_exists($local)) - { - $fp = fopen($local, "rb"); - - if (!$fp) - { - throw new FilesystemException(sprintf('%1$s: Unable to open local file for reading. Local path: %2$s', __METHOD__, $local)); - } - } - else - { - throw new FilesystemException(sprintf('%1$s: Unable to find local file. Local path: %2$s', __METHOD__, $local)); - } - - // Start passive mode - if (!$this->_passive()) - { - @ fclose($fp); - - throw new FilesystemException(__METHOD__ . ': Unable to use passive mode.'); - } - - // Send store command to the FTP server - if (!$this->_putCmd('STOR ' . $remote, array(150, 125))) - { - @ fclose($fp); - @ fclose($this->dataconn); - - throw new FilesystemException( - sprintf('%1$s: Bad response. Server response: %2$s [Expected: 150 or 125]. Path sent: %3$s', __METHOD__, $this->response, $remote) - ); - } - - // Do actual file transfer, read local file and write to data port connection - while (!feof($fp)) - { - $line = fread($fp, 4096); - - do - { - if (($result = @ fwrite($this->dataconn, $line)) === false) - { - throw new FilesystemException(__METHOD__ . ': Unable to write to data port socket'); - } - - $line = substr($line, $result); - } - - while ($line != ""); - } - - fclose($fp); - fclose($this->dataconn); - - if (!$this->_verifyResponse(226)) - { - throw new FilesystemException( - sprintf('%1$s: Transfer failed. Server response: %2$s [Expected: 226]. Path sent: %3$s', __METHOD__, $this->response, $remote) - ); - } - - return true; - } - - /** - * Method to write a string to the FTP server - * - * @param string $remote FTP path to file to write to - * @param string $buffer Contents to write to the FTP server - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - public function write($remote, $buffer) - { - // Determine file type - $mode = $this->_findMode($remote); - - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - // Turn passive mode on - if (@ftp_pasv($this->conn, true) === false) - { - throw new FilesystemException(__METHOD__ . ': Unable to use passive mode.'); - } - - $tmp = fopen('buffer://tmp', 'br+'); - fwrite($tmp, $buffer); - rewind($tmp); - - if (@ftp_fput($this->conn, $remote, $tmp, $mode) === false) - { - fclose($tmp); - - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - - fclose($tmp); - - return true; - } - - // First we need to set the transfer mode - $this->_mode($mode); - - // Start passive mode - if (!$this->_passive()) - { - throw new FilesystemException(__METHOD__ . ': Unable to use passive mode.'); - } - - // Send store command to the FTP server - if (!$this->_putCmd('STOR ' . $remote, array(150, 125))) - { - @ fclose($this->dataconn); - - throw new FilesystemException( - sprintf('%1$s: Bad response. Server response: %2$s [Expected: 150 or 125]. Path sent: %3$s', __METHOD__, $this->response, $remote) - ); - } - - // Write buffer to the data connection port - do - { - if (($result = @ fwrite($this->dataconn, $buffer)) === false) - { - throw new FilesystemException(__METHOD__ . ': Unable to write to data port socket.'); - } - - $buffer = substr($buffer, $result); - } - - while ($buffer != ""); - - // Close the data connection port [Data transfer complete] - fclose($this->dataconn); - - // Verify that the server recieved the transfer - if (!$this->_verifyResponse(226)) - { - throw new FilesystemException( - sprintf('%1$s: Transfer failed. Server response: %2$s [Expected: 226]. Path sent: %3$s', __METHOD__, $this->response, $remote) - ); - } - - return true; - } - - /** - * Method to list the filenames of the contents of a directory on the FTP server - * - * Note: Some servers also return folder names. However, to be sure to list folders on all - * servers, you should use listDetails() instead if you also need to deal with folders - * - * @param string $path Path local file to store on the FTP server - * - * @return string Directory listing - * - * @since 1.0 - * @throws FilesystemException - */ - public function listNames($path = null) - { - $data = null; - - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - // Turn passive mode on - if (@ftp_pasv($this->conn, true) === false) - { - throw new FilesystemException(__METHOD__ . ': Unable to use passive mode.'); - } - - if (($list = @ftp_nlist($this->conn, $path)) === false) - { - // Workaround for empty directories on some servers - if ($this->listDetails($path, 'files') === array()) - { - return array(); - } - - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - - $list = preg_replace('#^' . preg_quote($path, '#') . '[/\\\\]?#', '', $list); - - if ($keys = array_merge(array_keys($list, '.'), array_keys($list, '..'))) - { - foreach ($keys as $key) - { - unset($list[$key]); - } - } - - return $list; - } - - // If a path exists, prepend a space - if ($path != null) - { - $path = ' ' . $path; - } - - // Start passive mode - if (!$this->_passive()) - { - throw new FilesystemException(__METHOD__ . ': Unable to use passive mode.'); - } - - if (!$this->_putCmd('NLST' . $path, array(150, 125))) - { - @ fclose($this->dataconn); - - // Workaround for empty directories on some servers - if ($this->listDetails($path, 'files') === array()) - { - return array(); - } - - throw new FilesystemException( - sprintf('%1$s: Bad response. Server response: %2$s [Expected: 150 or 125]. Path sent: %3$s', __METHOD__, $this->response, $path) - ); - } - - // Read in the file listing. - while (!feof($this->dataconn)) - { - $data .= fread($this->dataconn, 4096); - } - - fclose($this->dataconn); - - // Everything go okay? - if (!$this->_verifyResponse(226)) - { - throw new FilesystemException( - sprintf('%1$s: Transfer failed. Server response: %2$s [Expected: 226]. Path sent: %3$s', __METHOD__, $this->response, $path) - ); - } - - $data = preg_split("/[" . CRLF . "]+/", $data, -1, PREG_SPLIT_NO_EMPTY); - $data = preg_replace('#^' . preg_quote(substr($path, 1), '#') . '[/\\\\]?#', '', $data); - - if ($keys = array_merge(array_keys($data, '.'), array_keys($data, '..'))) - { - foreach ($keys as $key) - { - unset($data[$key]); - } - } - - return $data; - } - - /** - * Method to list the contents of a directory on the FTP server - * - * @param string $path Path to the local file to be stored on the FTP server - * @param string $type Return type [raw|all|folders|files] - * - * @return mixed If $type is raw: string Directory listing, otherwise array of string with file-names - * - * @since 1.0 - * @throws FilesystemException - */ - public function listDetails($path = null, $type = 'all') - { - $dir_list = array(); - $data = null; - $regs = null; - - // TODO: Deal with recurse -- nightmare - // For now we will just set it to false - $recurse = false; - - // If native FTP support is enabled let's use it... - if (FTP_NATIVE) - { - // Turn passive mode on - if (@ftp_pasv($this->conn, true) === false) - { - throw new FilesystemException(__METHOD__ . ': Unable to use passive mode.'); - } - - if (($contents = @ftp_rawlist($this->conn, $path)) === false) - { - throw new FilesystemException(__METHOD__ . 'Bad response.'); - } - } - else - { - // Non Native mode - - // Start passive mode - if (!$this->_passive()) - { - throw new FilesystemException(__METHOD__ . ': Unable to use passive mode.'); - } - - // If a path exists, prepend a space - if ($path != null) - { - $path = ' ' . $path; - } - - // Request the file listing - if (!$this->_putCmd(($recurse == true) ? 'LIST -R' : 'LIST' . $path, array(150, 125))) - { - @ fclose($this->dataconn); - - throw new FilesystemException( - sprintf( - '%1$s: Bad response. Server response: %2$s [Expected: 150 or 125]. Path sent: %3$s', - __METHOD__, $this->response, $path - ) - ); - } - - // Read in the file listing. - while (!feof($this->dataconn)) - { - $data .= fread($this->dataconn, 4096); - } - - fclose($this->dataconn); - - // Everything go okay? - if (!$this->_verifyResponse(226)) - { - throw new FilesystemException( - sprintf('%1$s: Transfer failed. Server response: %2$s [Expected: 226]. Path sent: %3$s', __METHOD__, $this->response, $path) - ); - } - - $contents = explode(CRLF, $data); - } - - // If only raw output is requested we are done - if ($type == 'raw') - { - return $data; - } - - // If we received the listing of an empty directory, we are done as well - if (empty($contents[0])) - { - return $dir_list; - } - - // If the server returned the number of results in the first response, let's dump it - if (strtolower(substr($contents[0], 0, 6)) == 'total ') - { - array_shift($contents); - - if (!isset($contents[0]) || empty($contents[0])) - { - return $dir_list; - } - } - - // Regular expressions for the directory listing parsing. - $regexps = array( - 'UNIX' => '#([-dl][rwxstST-]+).* ([0-9]*) ([a-zA-Z0-9]+).* ([a-zA-Z0-9]+).* ([0-9]*)' - . ' ([a-zA-Z]+[0-9: ]*[0-9])[ ]+(([0-9]{1,2}:[0-9]{2})|[0-9]{4}) (.+)#', - 'MAC' => '#([-dl][rwxstST-]+).* ?([0-9 ]*)?([a-zA-Z0-9]+).* ([a-zA-Z0-9]+).* ([0-9]*)' - . ' ([a-zA-Z]+[0-9: ]*[0-9])[ ]+(([0-9]{2}:[0-9]{2})|[0-9]{4}) (.+)#', - 'WIN' => '#([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|) +(.+)#' - ); - - // Find out the format of the directory listing by matching one of the regexps - $osType = null; - - foreach ($regexps as $k => $v) - { - if (@preg_match($v, $contents[0])) - { - $osType = $k; - $regexp = $v; - break; - } - } - - if (!$osType) - { - throw new FilesystemException(__METHOD__ . ': Unrecognised directory listing format.'); - } - - /* - * Here is where it is going to get dirty.... - */ - if ($osType == 'UNIX' || $osType == 'MAC') - { - foreach ($contents as $file) - { - $tmp_array = null; - - if (@preg_match($regexp, $file, $regs)) - { - $fType = (int) strpos("-dl", $regs[1]{0}); - - // $tmp_array['line'] = $regs[0]; - $tmp_array['type'] = $fType; - $tmp_array['rights'] = $regs[1]; - - // $tmp_array['number'] = $regs[2]; - $tmp_array['user'] = $regs[3]; - $tmp_array['group'] = $regs[4]; - $tmp_array['size'] = $regs[5]; - $tmp_array['date'] = @date("m-d", strtotime($regs[6])); - $tmp_array['time'] = $regs[7]; - $tmp_array['name'] = $regs[9]; - } - - // If we just want files, do not add a folder - if ($type == 'files' && $tmp_array['type'] == 1) - { - continue; - } - - // If we just want folders, do not add a file - if ($type == 'folders' && $tmp_array['type'] == 0) - { - continue; - } - - if (is_array($tmp_array) && $tmp_array['name'] != '.' && $tmp_array['name'] != '..') - { - $dir_list[] = $tmp_array; - } - } - } - else - { - foreach ($contents as $file) - { - $tmp_array = null; - - if (@preg_match($regexp, $file, $regs)) - { - $fType = (int) ($regs[7] == ''); - $timestamp = strtotime("$regs[3]-$regs[1]-$regs[2] $regs[4]:$regs[5]$regs[6]"); - - // $tmp_array['line'] = $regs[0]; - $tmp_array['type'] = $fType; - $tmp_array['rights'] = ''; - - // $tmp_array['number'] = 0; - $tmp_array['user'] = ''; - $tmp_array['group'] = ''; - $tmp_array['size'] = (int) $regs[7]; - $tmp_array['date'] = date('m-d', $timestamp); - $tmp_array['time'] = date('H:i', $timestamp); - $tmp_array['name'] = $regs[8]; - } - - // If we just want files, do not add a folder - if ($type == 'files' && $tmp_array['type'] == 1) - { - continue; - } - - // If we just want folders, do not add a file - if ($type == 'folders' && $tmp_array['type'] == 0) - { - continue; - } - - if (is_array($tmp_array) && $tmp_array['name'] != '.' && $tmp_array['name'] != '..') - { - $dir_list[] = $tmp_array; - } - } - } - - return $dir_list; - } - - /** - * Send command to the FTP server and validate an expected response code - * - * @param string $cmd Command to send to the FTP server - * @param mixed $expectedResponse Integer response code or array of integer response codes - * - * @return boolean True if command executed successfully - * - * @since 1.0 - * @throws FilesystemException - */ - protected function _putCmd($cmd, $expectedResponse) - { - // Make sure we have a connection to the server - if (!is_resource($this->conn)) - { - throw new FilesystemException(__METHOD__ . ': Not connected to the control port.'); - } - - // Send the command to the server - if (!fwrite($this->conn, $cmd . "\r\n")) - { - throw new FilesystemException(sprintf('%1$s: Unable to send command: %2$s', __METHOD__, $cmd)); - } - - return $this->_verifyResponse($expectedResponse); - } - - /** - * Verify the response code from the server and log response if flag is set - * - * @param mixed $expected Integer response code or array of integer response codes - * - * @return boolean True if response code from the server is expected - * - * @since 1.0 - * @throws FilesystemException - */ - protected function _verifyResponse($expected) - { - $parts = null; - - // Wait for a response from the server, but timeout after the set time limit - $endTime = time() + $this->timeout; - $this->response = ''; - - do - { - $this->response .= fgets($this->conn, 4096); - } - - while (!preg_match("/^([0-9]{3})(-(.*" . CRLF . ")+\\1)? [^" . CRLF . "]+" . CRLF . "$/", $this->response, $parts) && time() < $endTime); - - // Catch a timeout or bad response - if (!isset($parts[1])) - { - throw new FilesystemException( - sprintf( - '%1$s: Timeout or unrecognised response while waiting for a response from the server. Server response: %2$s', - __METHOD__, $this->response - ) - ); - } - - // Separate the code from the message - $this->responseCode = $parts[1]; - $this->responseMsg = $parts[0]; - - // Did the server respond with the code we wanted? - if (is_array($expected)) - { - if (in_array($this->responseCode, $expected)) - { - $retval = true; - } - else - { - $retval = false; - } - } - else - { - if ($this->responseCode == $expected) - { - $retval = true; - } - else - { - $retval = false; - } - } - - return $retval; - } - - /** - * Set server to passive mode and open a data port connection - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - protected function _passive() - { - $match = array(); - $parts = array(); - $errno = null; - $err = null; - - // Make sure we have a connection to the server - if (!is_resource($this->conn)) - { - throw new FilesystemException(__METHOD__ . ': Not connected to the control port.'); - } - - // Request a passive connection - this means, we'll talk to you, you don't talk to us. - @ fwrite($this->conn, "PASV\r\n"); - - // Wait for a response from the server, but timeout after the set time limit - $endTime = time() + $this->timeout; - $this->response = ''; - - do - { - $this->response .= fgets($this->conn, 4096); - } - - while (!preg_match("/^([0-9]{3})(-(.*" . CRLF . ")+\\1)? [^" . CRLF . "]+" . CRLF . "$/", $this->response, $parts) && time() < $endTime); - - // Catch a timeout or bad response - if (!isset($parts[1])) - { - throw new FilesystemException( - sprintf( - '%1$s: Timeout or unrecognised response while waiting for a response from the server. Server response: %2$s', - __METHOD__, $this->response - ) - ); - } - - // Separate the code from the message - $this->responseCode = $parts[1]; - $this->responseMsg = $parts[0]; - - // If it's not 227, we weren't given an IP and port, which means it failed. - if ($this->responseCode != 227) - { - throw new FilesystemException( - sprintf('%1$s: Unable to obtain IP and port for data transfer. Server response: %2$s', __METHOD__, $this->responseMsg) - ); - } - - // Snatch the IP and port information, or die horribly trying... - if (preg_match('~\((\d+),\s*(\d+),\s*(\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))\)~', $this->responseMsg, $match) == 0) - { - throw new FilesystemException( - sprintf('%1$s: IP and port for data transfer not valid. Server response: %2$s', __METHOD__, $this->responseMsg) - ); - } - - // This is pretty simple - store it for later use ;). - $this->pasv = array('ip' => $match[1] . '.' . $match[2] . '.' . $match[3] . '.' . $match[4], 'port' => $match[5] * 256 + $match[6]); - - // Connect, assuming we've got a connection. - $this->dataconn = @fsockopen($this->pasv['ip'], $this->pasv['port'], $errno, $err, $this->timeout); - - if (!$this->dataconn) - { - throw new FilesystemException( - sprintf( - '%1$s: Could not connect to host %2$s on port %3$s. Socket error number: %4$s and error message: %5$s', - __METHOD__, - $this->pasv['ip'], - $this->pasv['port'], - $errno, - $err - ) - ); - } - - // Set the timeout for this connection - socket_set_timeout($this->conn, $this->timeout, 0); - - return true; - } - - /** - * Method to find out the correct transfer mode for a specific file - * - * @param string $fileName Name of the file - * - * @return integer Transfer-mode for this filetype [FTP_ASCII|FTP_BINARY] - * - * @since 1.0 - */ - protected function _findMode($fileName) - { - if ($this->type == FTP_AUTOASCII) - { - $dot = strrpos($fileName, '.') + 1; - $ext = substr($fileName, $dot); - - if (in_array($ext, $this->autoAscii)) - { - $mode = FTP_ASCII; - } - else - { - $mode = FTP_BINARY; - } - } - elseif ($this->type == FTP_ASCII) - { - $mode = FTP_ASCII; - } - else - { - $mode = FTP_BINARY; - } - - return $mode; - } - - /** - * Set transfer mode - * - * @param integer $mode Integer representation of data transfer mode [1:Binary|0:Ascii] - * Defined constants can also be used [FTP_BINARY|FTP_ASCII] - * - * @return boolean True if successful - * - * @since 1.0 - * @throws FilesystemException - */ - protected function _mode($mode) - { - if ($mode == FTP_BINARY) - { - if (!$this->_putCmd("TYPE I", 200)) - { - throw new FilesystemException( - sprintf('%1$s: Bad response. Server response: %2$s [Expected: 200]. Mode sent: Binary', __METHOD__, $this->response) - ); - } - } - else - { - if (!$this->_putCmd("TYPE A", 200)) - { - throw new FilesystemException( - sprintf('%1$s: Bad response. Server response: %2$s [Expected: 200]. Mode sent: ASCII', __METHOD__, $this->response) - ); - } - } - - return true; - } -} diff --git a/libraries/vendor/joomla/filesystem/src/Exception/FilesystemException.php b/libraries/vendor/joomla/filesystem/src/Exception/FilesystemException.php deleted file mode 100644 index 575bc2f7214d0..0000000000000 --- a/libraries/vendor/joomla/filesystem/src/Exception/FilesystemException.php +++ /dev/null @@ -1,18 +0,0 @@ -copy($src, $dest); - - return true; - } - - if (!@ copy($src, $dest)) - { - throw new FilesystemException(__METHOD__ . ': Copy failed.'); - } - - return true; - } - - /** - * Delete a file or array of files - * - * @param mixed $file The file name or an array of file names - * - * @return boolean True on success - * - * @since 1.0 - * @throws FilesystemException - */ - public static function delete($file) - { - $files = (array) $file; - - foreach ($files as $file) - { - $file = Path::clean($file); - - // Try making the file writable first. If it's read-only, it can't be deleted - // on Windows, even if the parent folder is writable - @chmod($file, 0777); - - // In case of restricted permissions we zap it one way or the other - // as long as the owner is either the webserver or the ftp - if (!@ unlink($file)) - { - $filename = basename($file); - - throw new FilesystemException(__METHOD__ . ': Failed deleting ' . $filename); - } - } - - return true; - } - - /** - * Moves a file - * - * @param string $src The path to the source file - * @param string $dest The path to the destination file - * @param string $path An optional base path to prefix to the file names - * @param boolean $use_streams True to use streams - * - * @return boolean True on success - * - * @since 1.0 - * @throws FilesystemException - */ - public static function move($src, $dest, $path = '', $use_streams = false) - { - if ($path) - { - $src = Path::clean($path . '/' . $src); - $dest = Path::clean($path . '/' . $dest); - } - - // Check src path - if (!is_readable($src)) - { - return 'Cannot find source file.'; - } - - if ($use_streams) - { - Stream::getStream()->move($src, $dest); - - return true; - } - - if (!@ rename($src, $dest)) - { - throw new FilesystemException(__METHOD__ . ': Rename failed.'); - } - - return true; - } - - /** - * Write contents to a file - * - * @param string $file The full file path - * @param string &$buffer The buffer to write - * @param boolean $use_streams Use streams - * - * @return boolean True on success - * - * @since 1.0 - */ - public static function write($file, &$buffer, $use_streams = false) - { - @set_time_limit(ini_get('max_execution_time')); - - // If the destination directory doesn't exist we need to create it - if (!file_exists(dirname($file))) - { - Folder::create(dirname($file)); - } - - if ($use_streams) - { - $stream = Stream::getStream(); - - // Beef up the chunk size to a meg - $stream->set('chunksize', (1024 * 1024)); - - $stream->writeFile($file, $buffer); - - return true; - } - - $file = Path::clean($file); - - return is_int(file_put_contents($file, $buffer)); - } - - /** - * Moves an uploaded file to a destination folder - * - * @param string $src The name of the php (temporary) uploaded file - * @param string $dest The path (including filename) to move the uploaded file to - * @param boolean $use_streams True to use streams - * - * @return boolean True on success - * - * @since 1.0 - * @throws FilesystemException - */ - public static function upload($src, $dest, $use_streams = false) - { - // Ensure that the path is valid and clean - $dest = Path::clean($dest); - - // Create the destination directory if it does not exist - $baseDir = dirname($dest); - - if (!file_exists($baseDir)) - { - Folder::create($baseDir); - } - - if ($use_streams) - { - Stream::getStream()->upload($src, $dest); - - return true; - } - - if (is_writeable($baseDir) && move_uploaded_file($src, $dest)) - { - // Short circuit to prevent file permission errors - if (Path::setPermissions($dest)) - { - return true; - } - - throw new FilesystemException(__METHOD__ . ': Failed to change file permissions.'); - } - - throw new FilesystemException(__METHOD__ . ': Failed to move file.'); - } -} diff --git a/libraries/vendor/joomla/filesystem/src/Folder.php b/libraries/vendor/joomla/filesystem/src/Folder.php deleted file mode 100644 index 129e085b967f4..0000000000000 --- a/libraries/vendor/joomla/filesystem/src/Folder.php +++ /dev/null @@ -1,563 +0,0 @@ -copy($sfid, $dfid); - } - else - { - if (!@copy($sfid, $dfid)) - { - throw new FilesystemException('Copy file failed', -1); - } - } - break; - } - } - - return true; - } - - /** - * Create a folder -- and all necessary parent folders. - * - * @param string $path A path to create from the base path. - * @param integer $mode Directory permissions to set for folders created. 0755 by default. - * - * @return boolean True if successful. - * - * @since 1.0 - * @throws FilesystemException - */ - public static function create($path = '', $mode = 0755) - { - static $nested = 0; - - // Check to make sure the path valid and clean - $path = Path::clean($path); - - // Check if parent dir exists - $parent = dirname($path); - - if (!is_dir(Path::clean($parent))) - { - // Prevent infinite loops! - $nested++; - - if (($nested > 20) || ($parent == $path)) - { - throw new FilesystemException(__METHOD__ . ': Infinite loop detected'); - } - - // Create the parent directory - if (self::create($parent, $mode) !== true) - { - // Folder::create throws an error - $nested--; - - return false; - } - - // OK, parent directory has been created - $nested--; - } - - // Check if dir already exists - if (is_dir(Path::clean($path))) - { - return true; - } - - // We need to get and explode the open_basedir paths - $obd = ini_get('open_basedir'); - - // If open_basedir is set we need to get the open_basedir that the path is in - if ($obd != null) - { - if (defined('PHP_WINDOWS_VERSION_MAJOR')) - { - $obdSeparator = ";"; - } - else - { - $obdSeparator = ":"; - } - - // Create the array of open_basedir paths - $obdArray = explode($obdSeparator, $obd); - $inBaseDir = false; - - // Iterate through open_basedir paths looking for a match - foreach ($obdArray as $test) - { - $test = Path::clean($test); - - if (strpos($path, $test) === 0) - { - $inBaseDir = true; - break; - } - } - - if ($inBaseDir == false) - { - // Throw a FilesystemException because the path to be created is not in open_basedir - throw new FilesystemException(__METHOD__ . ': Path not in open_basedir paths'); - } - } - - // First set umask - $origmask = @umask(0); - - // Create the path - if (!$ret = @mkdir($path, $mode)) - { - @umask($origmask); - - throw new FilesystemException(__METHOD__ . ': Could not create directory. Path: ' . $path); - } - - // Reset umask - @umask($origmask); - - return $ret; - } - - /** - * Delete a folder. - * - * @param string $path The path to the folder to delete. - * - * @return boolean True on success. - * - * @since 1.0 - * @throws FilesystemException - * @throws \UnexpectedValueException - */ - public static function delete($path) - { - @set_time_limit(ini_get('max_execution_time')); - - // Sanity check - if (!$path) - { - // Bad programmer! Bad Bad programmer! - throw new FilesystemException(__METHOD__ . ': You can not delete a base directory.'); - } - - try - { - // Check to make sure the path valid and clean - $path = Path::clean($path); - } - catch (\UnexpectedValueException $e) - { - throw $e; - } - - // Is this really a folder? - if (!is_dir($path)) - { - throw new \UnexpectedValueException(sprintf('%1$s: Path is not a folder. Path: %2$s', __METHOD__, $path)); - } - - // Remove all the files in folder if they exist; disable all filtering - $files = self::files($path, '.', false, true, array(), array()); - - if (!empty($files)) - { - if (File::delete($files) !== true) - { - // File::delete throws an error - return false; - } - } - - // Remove sub-folders of folder; disable all filtering - $folders = self::folders($path, '.', false, true, array(), array()); - - foreach ($folders as $folder) - { - if (is_link($folder)) - { - // Don't descend into linked directories, just delete the link. - if (File::delete($folder) !== true) - { - // File::delete throws an error - return false; - } - } - elseif (self::delete($folder) !== true) - { - // Folder::delete throws an error - return false; - } - } - - // In case of restricted permissions we zap it one way or the other - // as long as the owner is either the webserver or the ftp. - if (@rmdir($path)) - { - return true; - } - else - { - throw new FilesystemException(sprintf('%1$s: Could not delete folder. Path: %2$s', __METHOD__, $path)); - } - } - - /** - * Moves a folder. - * - * @param string $src The path to the source folder. - * @param string $dest The path to the destination folder. - * @param string $path An optional base path to prefix to the file names. - * @param boolean $use_streams Optionally use streams. - * - * @return mixed Error message on false or boolean true on success. - * - * @since 1.0 - */ - public static function move($src, $dest, $path = '', $use_streams = false) - { - if ($path) - { - $src = Path::clean($path . '/' . $src); - $dest = Path::clean($path . '/' . $dest); - } - - if (!is_dir(Path::clean($src))) - { - return 'Cannot find source folder'; - } - - if (is_dir(Path::clean($dest))) - { - return 'Folder already exists'; - } - - if ($use_streams) - { - Stream::getStream()->move($src, $dest); - - return true; - } - - if (!@rename($src, $dest)) - { - return 'Rename failed'; - } - - return true; - } - - /** - * Utility function to read the files in a folder. - * - * @param string $path The path of the folder to read. - * @param string $filter A filter for file names. - * @param mixed $recurse True to recursively search into sub-folders, or an integer to specify the maximum depth. - * @param boolean $full True to return the full path to the file. - * @param array $exclude Array with names of files which should not be shown in the result. - * @param array $excludefilter Array of filter to exclude - * - * @return array Files in the given folder. - * - * @since 1.0 - * @throws \UnexpectedValueException - */ - public static function files($path, $filter = '.', $recurse = false, $full = false, $exclude = array('.svn', 'CVS', '.DS_Store', '__MACOSX'), - $excludefilter = array('^\..*', '.*~')) - { - // Check to make sure the path valid and clean - $path = Path::clean($path); - - // Is the path a folder? - if (!is_dir($path)) - { - throw new \UnexpectedValueException(sprintf('%1$s: Path is not a folder. Path: %2$s', __METHOD__, $path)); - } - - // Compute the excludefilter string - if (count($excludefilter)) - { - $excludefilter_string = '/(' . implode('|', $excludefilter) . ')/'; - } - else - { - $excludefilter_string = ''; - } - - // Get the files - $arr = self::_items($path, $filter, $recurse, $full, $exclude, $excludefilter_string, true); - - // Sort the files - asort($arr); - - return array_values($arr); - } - - /** - * Utility function to read the folders in a folder. - * - * @param string $path The path of the folder to read. - * @param string $filter A filter for folder names. - * @param mixed $recurse True to recursively search into sub-folders, or an integer to specify the maximum depth. - * @param boolean $full True to return the full path to the folders. - * @param array $exclude Array with names of folders which should not be shown in the result. - * @param array $excludefilter Array with regular expressions matching folders which should not be shown in the result. - * - * @return array Folders in the given folder. - * - * @since 1.0 - * @throws \UnexpectedValueException - */ - public static function folders($path, $filter = '.', $recurse = false, $full = false, $exclude = array('.svn', 'CVS', '.DS_Store', '__MACOSX'), - $excludefilter = array('^\..*')) - { - // Check to make sure the path valid and clean - $path = Path::clean($path); - - // Is the path a folder? - if (!is_dir($path)) - { - throw new \UnexpectedValueException(sprintf('%1$s: Path is not a folder. Path: %2$s', __METHOD__, $path)); - } - - // Compute the excludefilter string - if (count($excludefilter)) - { - $excludefilter_string = '/(' . implode('|', $excludefilter) . ')/'; - } - else - { - $excludefilter_string = ''; - } - - // Get the folders - $arr = self::_items($path, $filter, $recurse, $full, $exclude, $excludefilter_string, false); - - // Sort the folders - asort($arr); - - return array_values($arr); - } - - /** - * Function to read the files/folders in a folder. - * - * @param string $path The path of the folder to read. - * @param string $filter A filter for file names. - * @param mixed $recurse True to recursively search into sub-folders, or an integer to specify the maximum depth. - * @param boolean $full True to return the full path to the file. - * @param array $exclude Array with names of files which should not be shown in the result. - * @param string $excludefilter_string Regexp of files to exclude - * @param boolean $findfiles True to read the files, false to read the folders - * - * @return array Files. - * - * @since 1.0 - */ - protected static function _items($path, $filter, $recurse, $full, $exclude, $excludefilter_string, $findfiles) - { - @set_time_limit(ini_get('max_execution_time')); - - $arr = array(); - - // Read the source directory - if (!($handle = @opendir($path))) - { - return $arr; - } - - while (($file = readdir($handle)) !== false) - { - if ($file != '.' && $file != '..' && !in_array($file, $exclude) - && (empty($excludefilter_string) || !preg_match($excludefilter_string, $file))) - { - // Compute the fullpath - $fullpath = $path . '/' . $file; - - // Compute the isDir flag - $isDir = is_dir($fullpath); - - if (($isDir xor $findfiles) && preg_match("/$filter/", $file)) - { - // (fullpath is dir and folders are searched or fullpath is not dir and files are searched) and file matches the filter - if ($full) - { - // Full path is requested - $arr[] = $fullpath; - } - else - { - // Filename is requested - $arr[] = $file; - } - } - - if ($isDir && $recurse) - { - // Search recursively - if (is_int($recurse)) - { - // Until depth 0 is reached - $arr = array_merge($arr, self::_items($fullpath, $filter, $recurse - 1, $full, $exclude, $excludefilter_string, $findfiles)); - } - else - { - $arr = array_merge($arr, self::_items($fullpath, $filter, $recurse, $full, $exclude, $excludefilter_string, $findfiles)); - } - } - } - } - - closedir($handle); - - return $arr; - } - - /** - * Lists folder in format suitable for tree display. - * - * @param string $path The path of the folder to read. - * @param string $filter A filter for folder names. - * @param integer $maxLevel The maximum number of levels to recursively read, defaults to three. - * @param integer $level The current level, optional. - * @param integer $parent Unique identifier of the parent folder, if any. - * - * @return array Folders in the given folder. - * - * @since 1.0 - */ - public static function listFolderTree($path, $filter, $maxLevel = 3, $level = 0, $parent = 0) - { - $dirs = array(); - - if ($level == 0) - { - $GLOBALS['_JFolder_folder_tree_index'] = 0; - } - - if ($level < $maxLevel) - { - $folders = self::folders($path, $filter); - - // First path, index foldernames - foreach ($folders as $name) - { - $id = ++$GLOBALS['_JFolder_folder_tree_index']; - $fullName = Path::clean($path . '/' . $name); - $dirs[] = array('id' => $id, 'parent' => $parent, 'name' => $name, 'fullname' => $fullName, - 'relname' => str_replace(JPATH_ROOT, '', $fullName)); - $dirs2 = self::listFolderTree($fullName, $filter, $maxLevel, $level + 1, $id); - $dirs = array_merge($dirs, $dirs2); - } - } - - return $dirs; - } - - /** - * Makes path name safe to use. - * - * @param string $path The full path to sanitise. - * - * @return string The sanitised string. - * - * @since 1.0 - */ - public static function makeSafe($path) - { - $regex = array('#[^A-Za-z0-9_\\\/\(\)\[\]\{\}\#\$\^\+\.\'~`!@&=;,-]#'); - - return preg_replace($regex, '', $path); - } -} diff --git a/libraries/vendor/joomla/filesystem/src/Helper.php b/libraries/vendor/joomla/filesystem/src/Helper.php deleted file mode 100644 index dee497e7d366b..0000000000000 --- a/libraries/vendor/joomla/filesystem/src/Helper.php +++ /dev/null @@ -1,299 +0,0 @@ -isFile() || $file->getExtension() != 'php') - { - continue; - } - - $streams[] = $file->getBasename('.php'); - } - } - - return $streams; - } - - /** - * Determine if a stream is a Joomla stream. - * - * @param string $streamname The name of a stream - * - * @return boolean True for a Joomla Stream - * - * @since 1.0 - */ - public static function isJoomlaStream($streamname) - { - return in_array($streamname, self::getJStreams()); - } -} diff --git a/libraries/vendor/joomla/filesystem/src/Patcher.php b/libraries/vendor/joomla/filesystem/src/Patcher.php deleted file mode 100644 index ec46f77980520..0000000000000 --- a/libraries/vendor/joomla/filesystem/src/Patcher.php +++ /dev/null @@ -1,544 +0,0 @@ -sources = array(); - $this->destinations = array(); - $this->removals = array(); - $this->patches = array(); - - return $this; - } - - /** - * Apply the patches - * - * @return integer The number of files patched - * - * @since 1.0 - * @throws \RuntimeException - */ - public function apply() - { - foreach ($this->patches as $patch) - { - // Separate the input into lines - $lines = self::splitLines($patch['udiff']); - - // Loop for each header - while (self::findHeader($lines, $src, $dst)) - { - $done = false; - - if ($patch['strip'] === null) - { - $src = $patch['root'] . preg_replace('#^([^/]*/)*#', '', $src); - $dst = $patch['root'] . preg_replace('#^([^/]*/)*#', '', $dst); - } - else - { - $src = $patch['root'] . preg_replace('#^([^/]*/){' . (int) $patch['strip'] . '}#', '', $src); - $dst = $patch['root'] . preg_replace('#^([^/]*/){' . (int) $patch['strip'] . '}#', '', $dst); - } - - // Loop for each hunk of differences - while (self::findHunk($lines, $src_line, $src_size, $dst_line, $dst_size)) - { - $done = true; - - // Apply the hunk of differences - $this->applyHunk($lines, $src, $dst, $src_line, $src_size, $dst_line, $dst_size); - } - - // If no modifications were found, throw an exception - if (!$done) - { - throw new \RuntimeException('Invalid Diff'); - } - } - } - - // Initialize the counter - $done = 0; - - // Patch each destination file - foreach ($this->destinations as $file => $content) - { - $content = implode("\n", $content); - - if (File::write($file, $content)) - { - if (isset($this->sources[$file])) - { - $this->sources[$file] = $content; - } - - $done++; - } - } - - // Remove each removed file - foreach ($this->removals as $file) - { - if (File::delete($file)) - { - if (isset($this->sources[$file])) - { - unset($this->sources[$file]); - } - - $done++; - } - } - - // Clear the destinations cache - $this->destinations = array(); - - // Clear the removals - $this->removals = array(); - - // Clear the patches - $this->patches = array(); - - return $done; - } - - /** - * Add a unified diff file to the patcher - * - * @param string $filename Path to the unified diff file - * @param string $root The files root path - * @param integer $strip The number of '/' to strip - * - * @return Patcher $this for chaining - * - * @since 1.0 - */ - public function addFile($filename, $root = JPATH_ROOT, $strip = 0) - { - return $this->add(file_get_contents($filename), $root, $strip); - } - - /** - * Add a unified diff string to the patcher - * - * @param string $udiff Unified diff input string - * @param string $root The files root path - * @param integer $strip The number of '/' to strip - * - * @return Patcher $this for chaining - * - * @since 1.0 - */ - public function add($udiff, $root = JPATH_ROOT, $strip = 0) - { - $this->patches[] = array( - 'udiff' => $udiff, - 'root' => isset($root) ? rtrim($root, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR : '', - 'strip' => $strip - ); - - return $this; - } - - /** - * Separate CR or CRLF lines - * - * @param string $data Input string - * - * @return array The lines of the input destination file - * - * @since 1.0 - */ - protected static function splitLines($data) - { - return preg_split(self::SPLIT, $data); - } - - /** - * Find the diff header - * - * The internal array pointer of $lines is on the next line after the finding - * - * @param array &$lines The udiff array of lines - * @param string &$src The source file - * @param string &$dst The destination file - * - * @return boolean TRUE in case of success, FALSE in case of failure - * - * @since 1.0 - * @throws \RuntimeException - */ - protected static function findHeader(&$lines, &$src, &$dst) - { - // Get the current line - $line = current($lines); - - // Search for the header - while ($line !== false && !preg_match(self::SRC_FILE, $line, $m)) - { - $line = next($lines); - } - - if ($line === false) - { - // No header found, return false - return false; - } - else - { - // Set the source file - $src = $m[1]; - - // Advance to the next line - $line = next($lines); - - if ($line === false) - { - throw new \RuntimeException('Unexpected EOF'); - } - - // Search the destination file - if (!preg_match(self::DST_FILE, $line, $m)) - { - throw new \RuntimeException('Invalid Diff file'); - } - - // Set the destination file - $dst = $m[1]; - - // Advance to the next line - if (next($lines) === false) - { - throw new \RuntimeException('Unexpected EOF'); - } - - return true; - } - } - - /** - * Find the next hunk of difference - * - * The internal array pointer of $lines is on the next line after the finding - * - * @param array &$lines The udiff array of lines - * @param string &$src_line The beginning of the patch for the source file - * @param string &$src_size The size of the patch for the source file - * @param string &$dst_line The beginning of the patch for the destination file - * @param string &$dst_size The size of the patch for the destination file - * - * @return boolean TRUE in case of success, false in case of failure - * - * @since 1.0 - * @throws \RuntimeException - */ - protected static function findHunk(&$lines, &$src_line, &$src_size, &$dst_line, &$dst_size) - { - $line = current($lines); - - if (preg_match(self::HUNK, $line, $m)) - { - $src_line = (int) $m[1]; - - if ($m[3] === '') - { - $src_size = 1; - } - else - { - $src_size = (int) $m[3]; - } - - $dst_line = (int) $m[4]; - - if ($m[6] === '') - { - $dst_size = 1; - } - else - { - $dst_size = (int) $m[6]; - } - - if (next($lines) === false) - { - throw new \RuntimeException('Unexpected EOF'); - } - - return true; - } - else - { - return false; - } - } - - /** - * Apply the patch - * - * @param array &$lines The udiff array of lines - * @param string $src The source file - * @param string $dst The destination file - * @param string $src_line The beginning of the patch for the source file - * @param string $src_size The size of the patch for the source file - * @param string $dst_line The beginning of the patch for the destination file - * @param string $dst_size The size of the patch for the destination file - * - * @return void - * - * @since 1.0 - * @throws \RuntimeException - */ - protected function applyHunk(&$lines, $src, $dst, $src_line, $src_size, $dst_line, $dst_size) - { - $src_line--; - $dst_line--; - $line = current($lines); - - // Source lines (old file) - $source = array(); - - // New lines (new file) - $destin = array(); - $src_left = $src_size; - $dst_left = $dst_size; - - do - { - if (!isset($line[0])) - { - $source[] = ''; - $destin[] = ''; - $src_left--; - $dst_left--; - } - elseif ($line[0] == '-') - { - if ($src_left == 0) - { - throw new \RuntimeException('Unexpected remove line at line ' . key($lines)); - } - - $source[] = substr($line, 1); - $src_left--; - } - elseif ($line[0] == '+') - { - if ($dst_left == 0) - { - throw new \RuntimeException('Unexpected add line at line ' . key($lines)); - } - - $destin[] = substr($line, 1); - $dst_left--; - } - elseif ($line != '\\ No newline at end of file') - { - $line = substr($line, 1); - $source[] = $line; - $destin[] = $line; - $src_left--; - $dst_left--; - } - - if ($src_left == 0 && $dst_left == 0) - { - // Now apply the patch, finally! - if ($src_size > 0) - { - $src_lines = & $this->getSource($src); - - if (!isset($src_lines)) - { - throw new \RuntimeException('Unexisting source file: ' . $src); - } - } - - if ($dst_size > 0) - { - if ($src_size > 0) - { - $dst_lines = & $this->getDestination($dst, $src); - $src_bottom = $src_line + count($source); - - for ($l = $src_line;$l < $src_bottom;$l++) - { - if ($src_lines[$l] != $source[$l - $src_line]) - { - throw new \RuntimeException(sprintf('Failed source verification of file %1$s at line %2$s', $src, $l)); - } - } - - array_splice($dst_lines, $dst_line, count($source), $destin); - } - else - { - $this->destinations[$dst] = $destin; - } - } - else - { - $this->removals[] = $src; - } - - next($lines); - - return; - } - - $line = next($lines); - } - - while ($line !== false); - - throw new \RuntimeException('Unexpected EOF'); - } - - /** - * Get the lines of a source file - * - * @param string $src The path of a file - * - * @return array The lines of the source file - * - * @since 1.0 - */ - protected function &getSource($src) - { - if (!isset($this->sources[$src])) - { - if (is_readable($src)) - { - $this->sources[$src] = self::splitLines(file_get_contents($src)); - } - else - { - $this->sources[$src] = null; - } - } - - return $this->sources[$src]; - } - - /** - * Get the lines of a destination file - * - * @param string $dst The path of a destination file - * @param string $src The path of a source file - * - * @return array The lines of the destination file - * - * @since 1.0 - */ - protected function &getDestination($dst, $src) - { - if (!isset($this->destinations[$dst])) - { - $this->destinations[$dst] = $this->getSource($src); - } - - return $this->destinations[$dst]; - } -} diff --git a/libraries/vendor/joomla/filesystem/src/Path.php b/libraries/vendor/joomla/filesystem/src/Path.php deleted file mode 100644 index 1ffb3d0758d4f..0000000000000 --- a/libraries/vendor/joomla/filesystem/src/Path.php +++ /dev/null @@ -1,307 +0,0 @@ -writeprefix = $writeprefix; - $this->readprefix = $readprefix; - $this->contextOptions = $context; - $this->_buildContext(); - } - - /** - * Destructor - * - * @since 1.0 - */ - public function __destruct() - { - // Attempt to close on destruction if there is a file handle - if ($this->fh) - { - @$this->close(); - } - } - - /** - * Creates a new stream object with appropriate prefix - * - * @param boolean $use_prefix Prefix the connections for writing - * @param string $ua UA User agent to use - * @param boolean $uamask User agent masking (prefix Mozilla) - * - * @return Stream - * - * @see Stream - * @since 1.0 - */ - public static function getStream($use_prefix = true, $ua = null, $uamask = false) - { - // Setup the context; Joomla! UA and overwrite - $context = array(); - - // Set the UA for HTTP - $context['http']['user_agent'] = $ua ?: 'Joomla! Framework Stream'; - - if ($use_prefix) - { - return new Stream(JPATH_ROOT . '/', JPATH_ROOT, $context); - } - - return new Stream('', '', $context); - } - - /** - * Generic File Operations - * - * Open a stream with some lazy loading smarts - * - * @param string $filename Filename - * @param string $mode Mode string to use - * @param boolean $use_include_path Use the PHP include path - * @param resource $context Context to use when opening - * @param boolean $use_prefix Use a prefix to open the file - * @param boolean $relative Filename is a relative path (if false, strips JPATH_ROOT to make it relative) - * @param boolean $detectprocessingmode Detect the processing method for the file and use the appropriate function - * to handle output automatically - * - * @return boolean - * - * @since 1.0 - * @throws FilesystemException - */ - public function open($filename, $mode = 'r', $use_include_path = false, $context = null, $use_prefix = false, $relative = false, - $detectprocessingmode = false) - { - $filename = $this->_getFilename($filename, $mode, $use_prefix, $relative); - - if (!$filename) - { - throw new FilesystemException('Filename not set'); - } - - $this->filename = $filename; - $this->openmode = $mode; - - $url = parse_url($filename); - - if (isset($url['scheme'])) - { - // If we're dealing with a Joomla! stream, load it - if (Helper::isJoomlaStream($url['scheme'])) - { - require_once __DIR__ . '/streams/' . $url['scheme'] . '.php'; - } - - // We have a scheme! force the method to be f - $this->processingmethod = 'f'; - } - elseif ($detectprocessingmode) - { - $ext = strtolower(pathinfo($this->filename, PATHINFO_EXTENSION)); - - switch ($ext) - { - case 'tgz': - case 'gz': - case 'gzip': - $this->processingmethod = 'gz'; - break; - - case 'tbz2': - case 'bz2': - case 'bzip2': - $this->processingmethod = 'bz'; - break; - - default: - $this->processingmethod = 'f'; - break; - } - } - - // Capture PHP errors - $php_errormsg = 'Error Unknown whilst opening a file'; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - - // Decide which context to use: - switch ($this->processingmethod) - { - // Gzip doesn't support contexts or streams - case 'gz': - $this->fh = gzopen($filename, $mode, $use_include_path); - break; - - // Bzip2 is much like gzip except it doesn't use the include path - case 'bz': - $this->fh = bzopen($filename, $mode); - break; - - // Fopen can handle streams - case 'f': - default: - // One supplied at open; overrides everything - if ($context) - { - $this->fh = fopen($filename, $mode, $use_include_path, $context); - } - elseif ($this->context) - // One provided at initialisation - { - $this->fh = fopen($filename, $mode, $use_include_path, $this->context); - } - else - // No context; all defaults - { - $this->fh = fopen($filename, $mode, $use_include_path); - } - break; - } - - if (!$this->fh) - { - throw new FilesystemException($php_errormsg); - } - - // Restore error tracking to what it was before - ini_set('track_errors', $track_errors); - - // Return the result - return true; - } - - /** - * Attempt to close a file handle - * - * Will return false if it failed and true on success - * If the file is not open the system will return true, this function destroys the file handle as well - * - * @return boolean - * - * @since 1.0 - * @throws FilesystemException - */ - public function close() - { - if (!$this->fh) - { - throw new FilesystemException('File not open'); - } - - // Capture PHP errors - $php_errormsg = 'Error Unknown'; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - - switch ($this->processingmethod) - { - case 'gz': - $res = gzclose($this->fh); - break; - - case 'bz': - $res = bzclose($this->fh); - break; - - case 'f': - default: - $res = fclose($this->fh); - break; - } - - if (!$res) - { - throw new FilesystemException($php_errormsg); - } - - // Reset this - $this->fh = null; - - // If we wrote, chmod the file after it's closed - if ($this->openmode[0] == 'w') - { - $this->chmod(); - } - - // Restore error tracking to what it was before - ini_set('track_errors', $track_errors); - - // Return the result - return true; - } - - /** - * Work out if we're at the end of the file for a stream - * - * @return boolean - * - * @since 1.0 - * @throws FilesystemException - */ - public function eof() - { - if (!$this->fh) - { - throw new FilesystemException('File not open'); - } - - // Capture PHP errors - $php_errormsg = ''; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - - switch ($this->processingmethod) - { - case 'gz': - $res = gzeof($this->fh); - break; - - case 'bz': - case 'f': - default: - $res = feof($this->fh); - break; - } - - if ($php_errormsg) - { - throw new FilesystemException($php_errormsg); - } - - // Restore error tracking to what it was before - ini_set('track_errors', $track_errors); - - // Return the result - return $res; - } - - /** - * Retrieve the file size of the path - * - * @return mixed - * - * @since 1.0 - * @throws FilesystemException - */ - public function filesize() - { - if (!$this->filename) - { - throw new FilesystemException('File not open'); - } - - // Capture PHP errors - $php_errormsg = ''; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - $res = @filesize($this->filename); - - if (!$res) - { - $tmp_error = ''; - - if ($php_errormsg) - { - // Something went wrong. - // Store the error in case we need it. - $tmp_error = $php_errormsg; - } - - $res = Helper::remotefsize($this->filename); - - if (!$res) - { - if ($tmp_error) - { - // Use the php_errormsg from before - throw new FilesystemException($tmp_error); - } - - // Error but nothing from php? How strange! Create our own - throw new FilesystemException('Failed to get file size. This may not work for all streams.'); - } - else - { - $this->filesize = $res; - $retval = $res; - } - } - else - { - $this->filesize = $res; - $retval = $res; - } - - // Restore error tracking to what it was before. - ini_set('track_errors', $track_errors); - - // Return the result - return $retval; - } - - /** - * Get a line from the stream source. - * - * @param integer $length The number of bytes (optional) to read. - * - * @return mixed - * - * @since 1.0 - * @throws FilesystemException - */ - public function gets($length = 0) - { - if (!$this->fh) - { - throw new FilesystemException('File not open'); - } - - // Capture PHP errors - $php_errormsg = 'Error Unknown'; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - - switch ($this->processingmethod) - { - case 'gz': - $res = $length ? gzgets($this->fh, $length) : gzgets($this->fh); - break; - - case 'bz': - case 'f': - default: - $res = $length ? fgets($this->fh, $length) : fgets($this->fh); - break; - } - - if (!$res) - { - throw new FilesystemException($php_errormsg); - } - - // Restore error tracking to what it was before - ini_set('track_errors', $track_errors); - - // Return the result - return $res; - } - - /** - * Read a file - * - * Handles user space streams appropriately otherwise any read will return 8192 - * - * @param integer $length Length of data to read - * - * @return mixed - * - * @see http://php.net/manual/en/function.fread.php - * @since 1.0 - * @throws FilesystemException - */ - public function read($length = 0) - { - if (!$this->filesize && !$length) - { - // Get the filesize - $this->filesize(); - - if (!$this->filesize) - { - // Set it to the biggest and then wait until eof - $length = -1; - } - else - { - $length = $this->filesize; - } - } - - if (!$this->fh) - { - throw new FilesystemException('File not open'); - } - - $retval = false; - - // Capture PHP errors - $php_errormsg = 'Error Unknown'; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - $remaining = $length; - - do - { - // Do chunked reads where relevant - switch ($this->processingmethod) - { - case 'bz': - $res = ($remaining > 0) ? bzread($this->fh, $remaining) : bzread($this->fh, $this->chunksize); - break; - - case 'gz': - $res = ($remaining > 0) ? gzread($this->fh, $remaining) : gzread($this->fh, $this->chunksize); - break; - - case 'f': - default: - $res = ($remaining > 0) ? fread($this->fh, $remaining) : fread($this->fh, $this->chunksize); - break; - } - - if (!$res) - { - throw new FilesystemException($php_errormsg); - } - - if (!$retval) - { - $retval = ''; - } - - $retval .= $res; - - if (!$this->eof()) - { - $len = strlen($res); - $remaining -= $len; - } - else - { - // If it's the end of the file then we've nothing left to read; reset remaining and len - $remaining = 0; - $length = strlen($retval); - } - } - - while ($remaining || !$length); - - // Restore error tracking to what it was before - ini_set('track_errors', $track_errors); - - // Return the result - return $retval; - } - - /** - * Seek the file - * - * Note: the return value is different to that of fseek - * - * @param integer $offset Offset to use when seeking. - * @param integer $whence Seek mode to use. - * - * @return boolean True on success, false on failure - * - * @see http://php.net/manual/en/function.fseek.php - * @since 1.0 - * @throws FilesystemException - */ - public function seek($offset, $whence = SEEK_SET) - { - if (!$this->fh) - { - throw new FilesystemException('File not open'); - } - - // Capture PHP errors - $php_errormsg = ''; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - - switch ($this->processingmethod) - { - case 'gz': - $res = gzseek($this->fh, $offset, $whence); - break; - - case 'bz': - case 'f': - default: - $res = fseek($this->fh, $offset, $whence); - break; - } - - // Seek, interestingly, returns 0 on success or -1 on failure. - if ($res == -1) - { - throw new FilesystemException($php_errormsg); - } - - // Restore error tracking to what it was before - ini_set('track_errors', $track_errors); - - // Return the result - return true; - } - - /** - * Returns the current position of the file read/write pointer. - * - * @return mixed - * - * @since 1.0 - * @throws FilesystemException - */ - public function tell() - { - if (!$this->fh) - { - throw new FilesystemException('File not open'); - } - - // Capture PHP errors - $php_errormsg = ''; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - - switch ($this->processingmethod) - { - case 'gz': - $res = gztell($this->fh); - break; - - case 'bz': - case 'f': - default: - $res = ftell($this->fh); - break; - } - - // May return 0 so check if it's really false - if ($res === false) - { - throw new FilesystemException($php_errormsg); - } - - // Restore error tracking to what it was before - ini_set('track_errors', $track_errors); - - // Return the result - return $res; - } - - /** - * File write - * - * Whilst this function accepts a reference, the underlying fwrite - * will do a copy! This will roughly double the memory allocation for - * any write you do. Specifying chunked will get around this by only - * writing in specific chunk sizes. This defaults to 8192 which is a - * sane number to use most of the time (change the default with - * Stream::set('chunksize', newsize);) - * Note: This doesn't support gzip/bzip2 writing like reading does - * - * @param string &$string Reference to the string to write. - * @param integer $length Length of the string to write. - * @param integer $chunk Size of chunks to write in. - * - * @return boolean - * - * @see http://php.net/manual/en/function.fwrite.php - * @since 1.0 - * @throws FilesystemException - */ - public function write(&$string, $length = 0, $chunk = 0) - { - if (!$this->fh) - { - throw new FilesystemException('File not open'); - } - - // If the length isn't set, set it to the length of the string. - if (!$length) - { - $length = strlen($string); - } - - // If the chunk isn't set, set it to the default. - if (!$chunk) - { - $chunk = $this->chunksize; - } - - $retval = true; - - // Capture PHP errors - $php_errormsg = ''; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - $remaining = $length; - $start = 0; - - do - { - // If the amount remaining is greater than the chunk size, then use the chunk - $amount = ($remaining > $chunk) ? $chunk : $remaining; - $res = fwrite($this->fh, substr($string, $start), $amount); - - // Returns false on error or the number of bytes written - if ($res === false) - { - // Returned error - throw new FilesystemException($php_errormsg); - } - elseif ($res === 0) - { - // Wrote nothing? - throw new FilesystemException('Warning: No data written'); - } - else - { - // Wrote something - $start += $amount; - $remaining -= $res; - } - } - - while ($remaining); - - // Restore error tracking to what it was before. - ini_set('track_errors', $track_errors); - - // Return the result - return $retval; - } - - /** - * Chmod wrapper - * - * @param string $filename File name. - * @param mixed $mode Mode to use. - * - * @return boolean - * - * @since 1.0 - * @throws FilesystemException - */ - public function chmod($filename = '', $mode = 0) - { - if (!$filename) - { - if (!isset($this->filename) || !$this->filename) - { - throw new FilesystemException('Filename not set'); - } - - $filename = $this->filename; - } - - // If no mode is set use the default - if (!$mode) - { - $mode = $this->filemode; - } - - // Capture PHP errors - $php_errormsg = ''; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - $sch = parse_url($filename, PHP_URL_SCHEME); - - // Scheme specific options; ftp's chmod support is fun. - switch ($sch) - { - case 'ftp': - case 'ftps': - $res = Helper::ftpChmod($filename, $mode); - break; - - default: - $res = chmod($filename, $mode); - break; - } - - // Seek, interestingly, returns 0 on success or -1 on failure - if (!$res) - { - throw new FilesystemException($php_errormsg); - } - - // Restore error tracking to what it was before. - ini_set('track_errors', $track_errors); - - // Return the result - return true; - } - - /** - * Get the stream metadata - * - * @return array header/metadata - * - * @see http://php.net/manual/en/function.stream-get-meta-data.php - * @since 1.0 - * @throws FilesystemException - */ - public function get_meta_data() - { - if (!$this->fh) - { - throw new FilesystemException('File not open'); - } - - return stream_get_meta_data($this->fh); - } - - /** - * Stream contexts - * Builds the context from the array - * - * @return mixed - * - * @since 1.0 - */ - public function _buildContext() - { - // According to the manual this always works! - if (count($this->contextOptions)) - { - $this->context = @stream_context_create($this->contextOptions); - } - else - { - $this->context = null; - } - } - - /** - * Updates the context to the array - * - * Format is the same as the options for stream_context_create - * - * @param array $context Options to create the context with - * - * @return void - * - * @see http://php.net/stream_context_create - * @since 1.0 - */ - public function setContextOptions($context) - { - $this->contextOptions = $context; - $this->_buildContext(); - } - - /** - * Adds a particular options to the context - * - * @param string $wrapper The wrapper to use - * @param string $name The option to set - * @param string $value The value of the option - * - * @return void - * - * @see http://php.net/stream_context_create Stream Context Creation - * @see http://php.net/manual/en/context.php Context Options for various streams - * @since 1.0 - */ - public function addContextEntry($wrapper, $name, $value) - { - $this->contextOptions[$wrapper][$name] = $value; - $this->_buildContext(); - } - - /** - * Deletes a particular setting from a context - * - * @param string $wrapper The wrapper to use - * @param string $name The option to unset - * - * @return void - * - * @see http://php.net/stream_context_create - * @since 1.0 - */ - public function deleteContextEntry($wrapper, $name) - { - // Check whether the wrapper is set - if (isset($this->contextOptions[$wrapper])) - { - // Check that entry is set for that wrapper - if (isset($this->contextOptions[$wrapper][$name])) - { - // Unset the item - unset($this->contextOptions[$wrapper][$name]); - - // Check that there are still items there - if (!count($this->contextOptions[$wrapper])) - { - // Clean up an empty wrapper context option - unset($this->contextOptions[$wrapper]); - } - } - } - - // Rebuild the context and apply it to the stream - $this->_buildContext(); - } - - /** - * Applies the current context to the stream - * - * Use this to change the values of the context after you've opened a stream - * - * @return mixed - * - * @since 1.0 - * @throws FilesystemException - */ - public function applyContextToStream() - { - $retval = false; - - if ($this->fh) - { - // Capture PHP errors - $php_errormsg = 'Unknown error setting context option'; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - $retval = @stream_context_set_option($this->fh, $this->contextOptions); - - if (!$retval) - { - throw new FilesystemException($php_errormsg); - } - - // Restore error tracking to what it was before - ini_set('track_errors', $track_errors); - } - - return $retval; - } - - /** - * Stream filters - * Append a filter to the chain - * - * @param string $filtername The key name of the filter. - * @param integer $read_write Optional. Defaults to STREAM_FILTER_READ. - * @param array $params An array of params for the stream_filter_append call. - * - * @return mixed - * - * @see http://php.net/manual/en/function.stream-filter-append.php - * @since 1.0 - * @throws FilesystemException - */ - public function appendFilter($filtername, $read_write = STREAM_FILTER_READ, $params = array()) - { - $res = false; - - if ($this->fh) - { - // Capture PHP errors - $php_errormsg = ''; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - - $res = @stream_filter_append($this->fh, $filtername, $read_write, $params); - - if (!$res && $php_errormsg) - { - throw new FilesystemException($php_errormsg); - } - - $this->filters[] = &$res; - - // Restore error tracking to what it was before. - ini_set('track_errors', $track_errors); - } - - return $res; - } - - /** - * Prepend a filter to the chain - * - * @param string $filtername The key name of the filter. - * @param integer $read_write Optional. Defaults to STREAM_FILTER_READ. - * @param array $params An array of params for the stream_filter_prepend call. - * - * @return mixed - * - * @see http://php.net/manual/en/function.stream-filter-prepend.php - * @since 1.0 - * @throws FilesystemException - */ - public function prependFilter($filtername, $read_write = STREAM_FILTER_READ, $params = array()) - { - $res = false; - - if ($this->fh) - { - // Capture PHP errors - $php_errormsg = ''; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - $res = @stream_filter_prepend($this->fh, $filtername, $read_write, $params); - - if (!$res && $php_errormsg) - { - // Set the error msg - throw new FilesystemException($php_errormsg); - } - - array_unshift($res, ''); - $res[0] = &$this->filters; - - // Restore error tracking to what it was before. - ini_set('track_errors', $track_errors); - } - - return $res; - } - - /** - * Remove a filter, either by resource (handed out from the append or prepend function) - * or via getting the filter list) - * - * @param resource &$resource The resource. - * @param boolean $byindex The index of the filter. - * - * @return boolean Result of operation - * - * @since 1.0 - * @throws FilesystemException - */ - public function removeFilter(&$resource, $byindex = false) - { - // Capture PHP errors - $php_errormsg = ''; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - - if ($byindex) - { - $res = stream_filter_remove($this->filters[$resource]); - } - else - { - $res = stream_filter_remove($resource); - } - - if ($res && $php_errormsg) - { - throw new FilesystemException($php_errormsg); - } - - // Restore error tracking to what it was before. - ini_set('track_errors', $track_errors); - - return $res; - } - - /** - * Copy a file from src to dest - * - * @param string $src The file path to copy from. - * @param string $dest The file path to copy to. - * @param resource $context A valid context resource (optional) created with stream_context_create. - * @param boolean $use_prefix Controls the use of a prefix (optional). - * @param boolean $relative Determines if the filename given is relative. Relative paths do not have JPATH_ROOT stripped. - * - * @return mixed - * - * @since 1.0 - * @throws FilesystemException - */ - public function copy($src, $dest, $context = null, $use_prefix = true, $relative = false) - { - // Capture PHP errors - $php_errormsg = ''; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - - $chmodDest = $this->_getFilename($dest, 'w', $use_prefix, $relative); - - // Since we're going to open the file directly we need to get the filename. - // We need to use the same prefix so force everything to write. - $src = $this->_getFilename($src, 'w', $use_prefix, $relative); - $dest = $this->_getFilename($dest, 'w', $use_prefix, $relative); - - if ($context) - { - // Use the provided context - $res = @copy($src, $dest, $context); - } - elseif ($this->context) - { - // Use the objects context - $res = @copy($src, $dest, $this->context); - } - else - { - // Don't use any context - $res = @copy($src, $dest); - } - - if (!$res && $php_errormsg) - { - throw new FilesystemException($php_errormsg); - } - - $this->chmod($chmodDest); - - // Restore error tracking to what it was before - ini_set('track_errors', $track_errors); - - return $res; - } - - /** - * Moves a file - * - * @param string $src The file path to move from. - * @param string $dest The file path to move to. - * @param resource $context A valid context resource (optional) created with stream_context_create. - * @param boolean $use_prefix Controls the use of a prefix (optional). - * @param boolean $relative Determines if the filename given is relative. Relative paths do not have JPATH_ROOT stripped. - * - * @return mixed - * - * @since 1.0 - * @throws FilesystemException - */ - public function move($src, $dest, $context = null, $use_prefix = true, $relative = false) - { - // Capture PHP errors - $php_errormsg = ''; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - - $src = $this->_getFilename($src, 'w', $use_prefix, $relative); - $dest = $this->_getFilename($dest, 'w', $use_prefix, $relative); - - if ($context) - { - // Use the provided context - $res = @rename($src, $dest, $context); - } - elseif ($this->context) - { - // Use the object's context - $res = @rename($src, $dest, $this->context); - } - else - { - // Don't use any context - $res = @rename($src, $dest); - } - - if (!$res && $php_errormsg) - { - throw new FilesystemException($php_errormsg); - } - - $this->chmod($dest); - - // Restore error tracking to what it was before - ini_set('track_errors', $track_errors); - - return $res; - } - - /** - * Delete a file - * - * @param string $filename The file path to delete. - * @param resource $context A valid context resource (optional) created with stream_context_create. - * @param boolean $use_prefix Controls the use of a prefix (optional). - * @param boolean $relative Determines if the filename given is relative. Relative paths do not have JPATH_ROOT stripped. - * - * @return mixed - * - * @since 1.0 - * @throws FilesystemException - */ - public function delete($filename, $context = null, $use_prefix = true, $relative = false) - { - // Capture PHP errors - $php_errormsg = ''; - $track_errors = ini_get('track_errors'); - ini_set('track_errors', true); - - $filename = $this->_getFilename($filename, 'w', $use_prefix, $relative); - - if ($context) - { - // Use the provided context - $res = @unlink($filename, $context); - } - elseif ($this->context) - { - // Use the object's context - $res = @unlink($filename, $this->context); - } - else - { - // Don't use any context - $res = @unlink($filename); - } - - if (!$res && $php_errormsg) - { - throw new FilesystemException($php_errormsg); - } - - // Restore error tracking to what it was before. - ini_set('track_errors', $track_errors); - - return $res; - } - - /** - * Upload a file - * - * @param string $src The file path to copy from (usually a temp folder). - * @param string $dest The file path to copy to. - * @param resource $context A valid context resource (optional) created with stream_context_create. - * @param boolean $use_prefix Controls the use of a prefix (optional). - * @param boolean $relative Determines if the filename given is relative. Relative paths do not have JPATH_ROOT stripped. - * - * @return mixed - * - * @since 1.0 - * @throws FilesystemException - */ - public function upload($src, $dest, $context = null, $use_prefix = true, $relative = false) - { - if (is_uploaded_file($src)) - { - // Make sure it's an uploaded file - return $this->copy($src, $dest, $context, $use_prefix, $relative); - } - - throw new FilesystemException('Not an uploaded file.'); - } - - /** - * Writes a chunk of data to a file. - * - * @param string $filename The file name. - * @param string &$buffer The data to write to the file. - * - * @return boolean - * - * @since 1.0 - */ - public function writeFile($filename, &$buffer) - { - if ($this->open($filename, 'w')) - { - $result = $this->write($buffer); - $this->chmod(); - $this->close(); - - return $result; - } - - return false; - } - - /** - * Determine the appropriate 'filename' of a file - * - * @param string $filename Original filename of the file - * @param string $mode Mode string to retrieve the filename - * @param boolean $use_prefix Controls the use of a prefix - * @param boolean $relative Determines if the filename given is relative. Relative paths do not have JPATH_ROOT stripped. - * - * @return string - * - * @since 1.0 - */ - public function _getFilename($filename, $mode, $use_prefix, $relative) - { - if ($use_prefix) - { - // Get rid of binary or t, should be at the end of the string - $tmode = trim($mode, 'btf123456789'); - - // Check if it's a write mode then add the appropriate prefix - if (in_array($tmode, Helper::getWriteModes())) - { - $prefixToUse = $this->writeprefix; - } - else - { - $prefixToUse = $this->readprefix; - } - - // Get rid of JPATH_ROOT (legacy compat) - if (!$relative && $prefixToUse) - { - $pos = strpos($filename, JPATH_ROOT); - - if ($pos !== false) - { - $filename = substr_replace($filename, '', $pos, strlen(JPATH_ROOT)); - } - } - - $filename = ($prefixToUse ? $prefixToUse : '') . $filename; - } - - return $filename; - } - - /** - * Return the internal file handle - * - * @return File handler - * - * @since 1.0 - */ - public function getFileHandle() - { - return $this->fh; - } - - /** - * Modifies a property of the object, creating it if it does not already exist. - * - * @param string $property The name of the property. - * @param mixed $value The value of the property to set. - * - * @return mixed Previous value of the property. - * - * @since 1.0 - */ - public function set($property, $value = null) - { - $previous = isset($this->$property) ? $this->$property : null; - $this->$property = $value; - - return $previous; - } - - /** - * Returns a property of the object or the default value if the property is not set. - * - * @param string $property The name of the property. - * @param mixed $default The default value. - * - * @return mixed The value of the property. - * - * @since 1.0 - */ - public function get($property, $default = null) - { - if (isset($this->$property)) - { - return $this->$property; - } - - return $default; - } -} diff --git a/libraries/vendor/joomla/filesystem/src/Stream/String.php b/libraries/vendor/joomla/filesystem/src/Stream/String.php deleted file mode 100644 index 429fcba2142d3..0000000000000 --- a/libraries/vendor/joomla/filesystem/src/Stream/String.php +++ /dev/null @@ -1,22 +0,0 @@ -currentString = &StringController::getRef(str_replace('string://', '', $path)); - - if ($this->currentString) - { - $this->len = strlen($this->currentString); - $this->pos = 0; - $this->stat = $this->url_stat($path, 0); - - return true; - } - - return false; - } - - /** - * Method to retrieve information from a file resource - * - * @return array - * - * @see http://www.php.net/manual/en/streamwrapper.stream-stat.php - * @since 1.3.0 - */ - public function stream_stat() - { - return $this->stat; - } - - /** - * Method to retrieve information about a file. - * - * @param string $path File path or URL to stat - * @param integer $flags Additional flags set by the streams API - * - * @return array - * - * @see http://php.net/manual/en/streamwrapper.url-stat.php - * @since 1.3.0 - */ - public function url_stat($path, $flags = 0) - { - $now = time(); - $string = &StringController::getRef(str_replace('string://', '', $path)); - $stat = array( - 'dev' => 0, - 'ino' => 0, - 'mode' => 0, - 'nlink' => 1, - 'uid' => 0, - 'gid' => 0, - 'rdev' => 0, - 'size' => strlen($string), - 'atime' => $now, - 'mtime' => $now, - 'ctime' => $now, - 'blksize' => '512', - 'blocks' => ceil(strlen($string) / 512)); - - return $stat; - } - - /** - * Method to read a given number of bytes starting at the current position - * and moving to the end of the string defined by the current position plus the - * given number. - * - * @param integer $count Bytes of data from the current position should be returned. - * - * @return string - * - * @see http://www.php.net/manual/en/streamwrapper.stream-read.php - * @since 1.3.0 - */ - public function stream_read($count) - { - $result = substr($this->currentString, $this->pos, $count); - $this->pos += $count; - - return $result; - } - - /** - * Stream write, always returning false. - * - * @param string $data The data to write. - * - * @return boolean - * - * @since 1.3.0 - * @note Updating the string is not supported. - */ - public function stream_write($data) - { - // We don't support updating the string. - return false; - } - - /** - * Method to get the current position - * - * @return integer The position - * - * @since 1.3.0 - */ - public function stream_tell() - { - return $this->pos; - } - - /** - * End of field check - * - * @return boolean True if at end of field. - * - * @since 1.3.0 - */ - public function stream_eof() - { - if ($this->pos > $this->len) - { - return true; - } - - return false; - } - - /** - * Stream offset - * - * @param integer $offset The starting offset. - * @param integer $whence SEEK_SET, SEEK_CUR, SEEK_END - * - * @return boolean True on success. - * - * @since 1.3.0 - */ - public function stream_seek($offset, $whence) - { - // $whence: SEEK_SET, SEEK_CUR, SEEK_END - if ($offset > $this->len) - { - // We can't seek beyond our len. - return false; - } - - switch ($whence) - { - case SEEK_SET: - $this->pos = $offset; - break; - - case SEEK_CUR: - if (($this->pos + $offset) >= $this->len) - { - return false; - } - - $this->pos += $offset; - break; - - case SEEK_END: - $this->pos = $this->len - $offset; - break; - } - - return true; - } - - /** - * Stream flush, always returns true. - * - * @return boolean - * - * @since 1.3.0 - * @note Data storage is not supported - */ - public function stream_flush() - { - // We don't store data. - return true; - } -} - -if (!stream_wrapper_register('string', '\\Joomla\\Filesystem\\Stream\\StringWrapper')) -{ - die('\\Joomla\\Filesystem\\Stream\\StringWrapper Wrapper Registration Failed'); -} diff --git a/libraries/vendor/joomla/filesystem/src/Support/StringController.php b/libraries/vendor/joomla/filesystem/src/Support/StringController.php deleted file mode 100644 index 64177f949a641..0000000000000 --- a/libraries/vendor/joomla/filesystem/src/Support/StringController.php +++ /dev/null @@ -1,70 +0,0 @@ - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/filter/src/InputFilter.php b/libraries/vendor/joomla/filter/src/InputFilter.php deleted file mode 100644 index 1a17f5204b549..0000000000000 --- a/libraries/vendor/joomla/filter/src/InputFilter.php +++ /dev/null @@ -1,1053 +0,0 @@ - - * Original Contributors: Gianpaolo Racca, Ghislain Picard, Marco Wandschneider, Chris Tobin and Andrew Eddie. - * - * @since 1.0 - */ -class InputFilter -{ - /** - * Defines the InputFilter instance should use a whitelist method for sanitising tags. - * - * @var integer - * @since 1.3.0 - */ - const TAGS_WHITELIST = 0; - - /** - * Defines the InputFilter instance should use a blacklist method for sanitising tags. - * - * @var integer - * @since 1.3.0 - */ - const TAGS_BLACKLIST = 1; - - /** - * Defines the InputFilter instance should use a whitelist method for sanitising attributes. - * - * @var integer - * @since 1.3.0 - */ - const ATTR_WHITELIST = 0; - - /** - * Defines the InputFilter instance should use a blacklist method for sanitising attributes. - * - * @var integer - * @since 1.3.0 - */ - const ATTR_BLACKLIST = 1; - - /** - * A container for InputFilter instances. - * - * @var InputFilter[] - * @since 1.0 - * @deprecated 1.2.0 - */ - protected static $instances = array(); - - /** - * The array of permitted tags (whitelist). - * - * @var array - * @since 1.0 - */ - public $tagsArray; - - /** - * The array of permitted tag attributes (whitelist). - * - * @var array - * @since 1.0 - */ - public $attrArray; - - /** - * The method for sanitising tags - * - * @var integer - * @since 1.0 - */ - public $tagsMethod; - - /** - * The method for sanitising attributes - * - * @var integer - * @since 1.0 - */ - public $attrMethod; - - /** - * A flag for XSS checks. Only auto clean essentials = 0, Allow clean blacklisted tags/attr = 1 - * - * @var integer - * @since 1.0 - */ - public $xssAuto; - - /** - * The list of the default blacklisted tags. - * - * @var array - * @since 1.0 - */ - public $tagBlacklist = array( - 'applet', - 'body', - 'bgsound', - 'base', - 'basefont', - 'canvas', - 'embed', - 'frame', - 'frameset', - 'head', - 'html', - 'id', - 'iframe', - 'ilayer', - 'layer', - 'link', - 'meta', - 'name', - 'object', - 'script', - 'style', - 'title', - 'xml', - ); - - /** - * The list of the default blacklisted tag attributes. All event handlers implicit. - * - * @var array - * @since 1.0 - */ - public $attrBlacklist = array( - 'action', - 'background', - 'codebase', - 'dynsrc', - 'formaction', - 'lowsrc', - ); - - /** - * A special list of blacklisted chars - * - * @var array - * @since 1.3.3 - */ - private $blacklistedChars = array( - '&tab;', - '&space;', - ':', - '&column;', - ); - - /** - * Constructor for InputFilter class. - * - * @param array $tagsArray List of user-defined tags - * @param array $attrArray List of user-defined attributes - * @param integer $tagsMethod WhiteList method = 0, BlackList method = 1 - * @param integer $attrMethod WhiteList method = 0, BlackList method = 1 - * @param integer $xssAuto Only auto clean essentials = 0, Allow clean blacklisted tags/attr = 1 - * - * @since 1.0 - */ - public function __construct($tagsArray = array(), $attrArray = array(), $tagsMethod = self::TAGS_WHITELIST, $attrMethod = self::ATTR_WHITELIST, - $xssAuto = 1 - ) - { - // Make sure user defined arrays are in lowercase - $tagsArray = array_map('strtolower', (array) $tagsArray); - $attrArray = array_map('strtolower', (array) $attrArray); - - // Assign member variables - $this->tagsArray = $tagsArray; - $this->attrArray = $attrArray; - $this->tagsMethod = $tagsMethod; - $this->attrMethod = $attrMethod; - $this->xssAuto = $xssAuto; - } - - /** - * Method to be called by another php script. Processes for XSS and - * specified bad code. - * - * @param mixed $source Input string/array-of-string to be 'cleaned' - * @param string $type The return type for the variable: - * INT: An integer, or an array of integers, - * UINT: An unsigned integer, or an array of unsigned integers, - * FLOAT: A floating point number, or an array of floating point numbers, - * BOOLEAN: A boolean value, - * WORD: A string containing A-Z or underscores only (not case sensitive), - * ALNUM: A string containing A-Z or 0-9 only (not case sensitive), - * CMD: A string containing A-Z, 0-9, underscores, periods or hyphens (not case sensitive), - * BASE64: A string containing A-Z, 0-9, forward slashes, plus or equals (not case sensitive), - * STRING: A fully decoded and sanitised string (default), - * HTML: A sanitised string, - * ARRAY: An array, - * PATH: A sanitised file path, or an array of sanitised file paths, - * TRIM: A string trimmed from normal, non-breaking and multibyte spaces - * USERNAME: Do not use (use an application specific filter), - * RAW: The raw string is returned with no filtering, - * unknown: An unknown filter will act like STRING. If the input is an array it will return an - * array of fully decoded and sanitised strings. - * - * @return mixed 'Cleaned' version of input parameter - * - * @since 1.0 - */ - public function clean($source, $type = 'string') - { - // Handle the type constraint cases - switch (strtoupper($type)) - { - case 'INT': - case 'INTEGER': - $pattern = '/[-+]?[0-9]+/'; - - if (is_array($source)) - { - $result = array(); - - // Iterate through the array - foreach ($source as $eachString) - { - preg_match($pattern, (string) $eachString, $matches); - $result[] = isset($matches[0]) ? (int) $matches[0] : 0; - } - } - else - { - preg_match($pattern, (string) $source, $matches); - $result = isset($matches[0]) ? (int) $matches[0] : 0; - } - - break; - - case 'UINT': - $pattern = '/[-+]?[0-9]+/'; - - if (is_array($source)) - { - $result = array(); - - // Iterate through the array - foreach ($source as $eachString) - { - preg_match($pattern, (string) $eachString, $matches); - $result[] = isset($matches[0]) ? abs((int) $matches[0]) : 0; - } - } - else - { - preg_match($pattern, (string) $source, $matches); - $result = isset($matches[0]) ? abs((int) $matches[0]) : 0; - } - - break; - - case 'FLOAT': - case 'DOUBLE': - $pattern = '/[-+]?[0-9]+(\.[0-9]+)?([eE][-+]?[0-9]+)?/'; - - if (is_array($source)) - { - $result = array(); - - // Iterate through the array - foreach ($source as $eachString) - { - preg_match($pattern, (string) $eachString, $matches); - $result[] = isset($matches[0]) ? (float) $matches[0] : 0; - } - } - else - { - preg_match($pattern, (string) $source, $matches); - $result = isset($matches[0]) ? (float) $matches[0] : 0; - } - - break; - - case 'BOOL': - case 'BOOLEAN': - - if (is_array($source)) - { - $result = array(); - - // Iterate through the array - foreach ($source as $eachString) - { - $result[] = (bool) $eachString; - } - } - else - { - $result = (bool) $source; - } - - break; - - case 'WORD': - $pattern = '/[^A-Z_]/i'; - - if (is_array($source)) - { - $result = array(); - - // Iterate through the array - foreach ($source as $eachString) - { - $result[] = (string) preg_replace($pattern, '', $eachString); - } - } - else - { - $result = (string) preg_replace($pattern, '', $source); - } - - break; - - case 'ALNUM': - $pattern = '/[^A-Z0-9]/i'; - - if (is_array($source)) - { - $result = array(); - - // Iterate through the array - foreach ($source as $eachString) - { - $result[] = (string) preg_replace($pattern, '', $eachString); - } - } - else - { - $result = (string) preg_replace($pattern, '', $source); - } - - break; - - case 'CMD': - $pattern = '/[^A-Z0-9_\.-]/i'; - - if (is_array($source)) - { - $result = array(); - - // Iterate through the array - foreach ($source as $eachString) - { - $cleaned = (string) preg_replace($pattern, '', $eachString); - $result[] = ltrim($cleaned, '.'); - } - } - else - { - $result = (string) preg_replace($pattern, '', $source); - $result = ltrim($result, '.'); - } - - break; - - case 'BASE64': - $pattern = '/[^A-Z0-9\/+=]/i'; - - if (is_array($source)) - { - $result = array(); - - // Iterate through the array - foreach ($source as $eachString) - { - $result[] = (string) preg_replace($pattern, '', $eachString); - } - } - else - { - $result = (string) preg_replace($pattern, '', $source); - } - - break; - - case 'STRING': - if (is_array($source)) - { - $result = array(); - - // Iterate through the array - foreach ($source as $eachString) - { - $result[] = (string) $this->remove($this->decode((string) $eachString)); - } - } - else - { - $result = (string) $this->remove($this->decode((string) $source)); - } - - break; - - case 'HTML': - if (is_array($source)) - { - $result = array(); - - // Iterate through the array - foreach ($source as $eachString) - { - $result[] = (string) $this->remove((string) $eachString); - } - } - else - { - $result = (string) $this->remove((string) $source); - } - - break; - - case 'ARRAY': - $result = (array) $source; - break; - - case 'PATH': - $pattern = '/^[A-Za-z0-9_\/-]+[A-Za-z0-9_\.-]*([\\\\\/][A-Za-z0-9_-]+[A-Za-z0-9_\.-]*)*$/'; - - if (is_array($source)) - { - $result = array(); - - // Iterate through the array - foreach ($source as $eachString) - { - preg_match($pattern, (string) $eachString, $matches); - $result[] = isset($matches[0]) ? (string) $matches[0] : ''; - } - } - else - { - preg_match($pattern, $source, $matches); - $result = isset($matches[0]) ? (string) $matches[0] : ''; - } - - break; - - case 'TRIM': - if (is_array($source)) - { - $result = array(); - - // Iterate through the array - foreach ($source as $eachString) - { - $cleaned = (string) trim($eachString); - $cleaned = StringHelper::trim($cleaned, chr(0xE3) . chr(0x80) . chr(0x80)); - $result[] = StringHelper::trim($cleaned, chr(0xC2) . chr(0xA0)); - } - } - else - { - $result = (string) trim($source); - $result = StringHelper::trim($result, chr(0xE3) . chr(0x80) . chr(0x80)); - $result = StringHelper::trim($result, chr(0xC2) . chr(0xA0)); - } - - break; - - case 'USERNAME': - $pattern = '/[\x00-\x1F\x7F<>"\'%&]/'; - - if (is_array($source)) - { - $result = array(); - - // Iterate through the array - foreach ($source as $eachString) - { - $result[] = (string) preg_replace($pattern, '', $eachString); - } - } - else - { - $result = (string) preg_replace($pattern, '', $source); - } - - break; - - case 'RAW': - $result = $source; - break; - - default: - // Are we dealing with an array? - if (is_array($source)) - { - foreach ($source as $key => $value) - { - // Filter element for XSS and other 'bad' code etc. - if (is_string($value)) - { - $source[$key] = $this->remove($this->decode($value)); - } - } - - $result = $source; - } - else - { - // Or a string? - if (is_string($source) && !empty($source)) - { - // Filter source for XSS and other 'bad' code etc. - $result = $this->remove($this->decode($source)); - } - else - { - // Not an array or string... return the passed parameter - $result = $source; - } - } - - break; - } - - return $result; - } - - /** - * Function to determine if contents of an attribute are safe - * - * @param array $attrSubSet A 2 element array for attribute's name, value - * - * @return boolean True if bad code is detected - * - * @since 1.0 - */ - public static function checkAttribute($attrSubSet) - { - $quoteStyle = version_compare(PHP_VERSION, '5.4', '>=') ? ENT_QUOTES | ENT_HTML401 : ENT_QUOTES; - - $attrSubSet[0] = strtolower($attrSubSet[0]); - $attrSubSet[1] = html_entity_decode(strtolower($attrSubSet[1]), $quoteStyle, 'UTF-8'); - - return ((strpos($attrSubSet[1], 'expression') !== false && $attrSubSet[0] === 'style') - || preg_match('/(?:(?:java|vb|live)script|behaviour|mocha)(?::|:|&column;)/', $attrSubSet[1]) !== 0); - } - - /** - * Internal method to iteratively remove all unwanted tags and attributes - * - * @param string $source Input string to be 'cleaned' - * - * @return string 'Cleaned' version of input parameter - * - * @since 1.0 - */ - protected function remove($source) - { - // Iteration provides nested tag protection - do - { - $temp = $source; - $source = $this->cleanTags($source); - } - while ($temp !== $source); - - return $source; - } - - /** - * Internal method to strip a string of certain tags - * - * @param string $source Input string to be 'cleaned' - * - * @return string 'Cleaned' version of input parameter - * - * @since 1.0 - */ - protected function cleanTags($source) - { - // First, pre-process this for illegal characters inside attribute values - $source = $this->escapeAttributeValues($source); - - // In the beginning we don't really have a tag, so everything is postTag - $preTag = null; - $postTag = $source; - $currentSpace = false; - - // Setting to null to deal with undefined variables - $attr = ''; - - // Is there a tag? If so it will certainly start with a '<'. - $tagOpenStart = StringHelper::strpos($source, '<'); - - while ($tagOpenStart !== false) - { - // Get some information about the tag we are processing - $preTag .= StringHelper::substr($postTag, 0, $tagOpenStart); - $postTag = StringHelper::substr($postTag, $tagOpenStart); - $fromTagOpen = StringHelper::substr($postTag, 1); - $tagOpenEnd = StringHelper::strpos($fromTagOpen, '>'); - - // Check for mal-formed tag where we have a second '<' before the first '>' - $nextOpenTag = (StringHelper::strlen($postTag) > $tagOpenStart) ? StringHelper::strpos($postTag, '<', $tagOpenStart + 1) : false; - - if (($nextOpenTag !== false) && ($nextOpenTag < $tagOpenEnd)) - { - // At this point we have a mal-formed tag -- remove the offending open - $postTag = StringHelper::substr($postTag, 0, $tagOpenStart) . StringHelper::substr($postTag, $tagOpenStart + 1); - $tagOpenStart = StringHelper::strpos($postTag, '<'); - continue; - } - - // Let's catch any non-terminated tags and skip over them - if ($tagOpenEnd === false) - { - $postTag = StringHelper::substr($postTag, $tagOpenStart + 1); - $tagOpenStart = StringHelper::strpos($postTag, '<'); - continue; - } - - // Do we have a nested tag? - $tagOpenNested = StringHelper::strpos($fromTagOpen, '<'); - - if (($tagOpenNested !== false) && ($tagOpenNested < $tagOpenEnd)) - { - $preTag .= StringHelper::substr($postTag, 0, ($tagOpenNested + 1)); - $postTag = StringHelper::substr($postTag, ($tagOpenNested + 1)); - $tagOpenStart = StringHelper::strpos($postTag, '<'); - continue; - } - - // Let's get some information about our tag and setup attribute pairs - $tagOpenNested = (StringHelper::strpos($fromTagOpen, '<') + $tagOpenStart + 1); - $currentTag = StringHelper::substr($fromTagOpen, 0, $tagOpenEnd); - $tagLength = StringHelper::strlen($currentTag); - $tagLeft = $currentTag; - $attrSet = array(); - $currentSpace = StringHelper::strpos($tagLeft, ' '); - - // Are we an open tag or a close tag? - if (StringHelper::substr($currentTag, 0, 1) === '/') - { - // Close Tag - $isCloseTag = true; - list ($tagName) = explode(' ', $currentTag); - $tagName = StringHelper::substr($tagName, 1); - } - else - { - // Open Tag - $isCloseTag = false; - list ($tagName) = explode(' ', $currentTag); - } - - /* - * Exclude all "non-regular" tagnames - * OR no tagname - * OR remove if xssauto is on and tag is blacklisted - */ - if ((!preg_match("/^[a-z][a-z0-9]*$/i", $tagName)) - || (!$tagName) - || ((in_array(strtolower($tagName), $this->tagBlacklist)) && ($this->xssAuto))) - { - $postTag = StringHelper::substr($postTag, ($tagLength + 2)); - $tagOpenStart = StringHelper::strpos($postTag, '<'); - - // Strip tag - continue; - } - - /* - * Time to grab any attributes from the tag... need this section in - * case attributes have spaces in the values. - */ - while ($currentSpace !== false) - { - $attr = ''; - $fromSpace = StringHelper::substr($tagLeft, ($currentSpace + 1)); - $nextEqual = StringHelper::strpos($fromSpace, '='); - $nextSpace = StringHelper::strpos($fromSpace, ' '); - $openQuotes = StringHelper::strpos($fromSpace, '"'); - $closeQuotes = StringHelper::strpos(StringHelper::substr($fromSpace, ($openQuotes + 1)), '"') + $openQuotes + 1; - - $startAtt = ''; - $startAttPosition = 0; - - // Find position of equal and open quotes ignoring - if (preg_match('#\s*=\s*\"#', $fromSpace, $matches, PREG_OFFSET_CAPTURE)) - { - // We have found an attribute, convert its byte position to a UTF-8 string length, using non-multibyte substr() - $stringBeforeAttr = substr($fromSpace, 0, $matches[0][1]); - $startAttPosition = StringHelper::strlen($stringBeforeAttr); - $startAtt = $matches[0][0]; - $closeQuotePos = StringHelper::strpos( - StringHelper::substr($fromSpace, ($startAttPosition + StringHelper::strlen($startAtt))), '"' - ); - $closeQuotes = $closeQuotePos + $startAttPosition + StringHelper::strlen($startAtt); - $nextEqual = $startAttPosition + StringHelper::strpos($startAtt, '='); - $openQuotes = $startAttPosition + StringHelper::strpos($startAtt, '"'); - $nextSpace = StringHelper::strpos(StringHelper::substr($fromSpace, $closeQuotes), ' ') + $closeQuotes; - } - - // Do we have an attribute to process? [check for equal sign] - if ($fromSpace !== '/' && (($nextEqual && $nextSpace && $nextSpace < $nextEqual) || !$nextEqual)) - { - if (!$nextEqual) - { - $attribEnd = StringHelper::strpos($fromSpace, '/') - 1; - } - else - { - $attribEnd = $nextSpace - 1; - } - - // If there is an ending, use this, if not, do not worry. - if ($attribEnd > 0) - { - $fromSpace = StringHelper::substr($fromSpace, $attribEnd + 1); - } - } - - if (StringHelper::strpos($fromSpace, '=') !== false) - { - /* - * If the attribute value is wrapped in quotes we need to grab the substring from the closing quote, - * otherwise grab until the next space. - */ - if (($openQuotes !== false) - && (StringHelper::strpos(StringHelper::substr($fromSpace, ($openQuotes + 1)), '"') !== false)) - { - $attr = StringHelper::substr($fromSpace, 0, ($closeQuotes + 1)); - } - else - { - $attr = StringHelper::substr($fromSpace, 0, $nextSpace); - } - } - else - // No more equal signs so add any extra text in the tag into the attribute array [eg. checked] - { - if ($fromSpace !== '/') - { - $attr = StringHelper::substr($fromSpace, 0, $nextSpace); - } - } - - // Last Attribute Pair - if (!$attr && $fromSpace !== '/') - { - $attr = $fromSpace; - } - - // Add attribute pair to the attribute array - $attrSet[] = $attr; - - // Move search point and continue iteration - $tagLeft = StringHelper::substr($fromSpace, StringHelper::strlen($attr)); - $currentSpace = StringHelper::strpos($tagLeft, ' '); - } - - // Is our tag in the user input array? - $tagFound = in_array(strtolower($tagName), $this->tagsArray); - - // If the tag is allowed let's append it to the output string. - if ((!$tagFound && $this->tagsMethod) || ($tagFound && !$this->tagsMethod)) - { - // Reconstruct tag with allowed attributes - if (!$isCloseTag) - { - // Open or single tag - $attrSet = $this->cleanAttributes($attrSet); - $preTag .= '<' . $tagName; - - for ($i = 0, $count = count($attrSet); $i < $count; $i++) - { - $preTag .= ' ' . $attrSet[$i]; - } - - // Reformat single tags to XHTML - if (StringHelper::strpos($fromTagOpen, ''; - } - else - { - $preTag .= ' />'; - } - } - else - // Closing tag - { - $preTag .= ''; - } - } - - // Find next tag's start and continue iteration - $postTag = StringHelper::substr($postTag, ($tagLength + 2)); - $tagOpenStart = StringHelper::strpos($postTag, '<'); - } - - // Append any code after the end of tags and return - if ($postTag !== '<') - { - $preTag .= $postTag; - } - - return $preTag; - } - - /** - * Internal method to strip a tag of certain attributes - * - * @param array $attrSet Array of attribute pairs to filter - * - * @return array Filtered array of attribute pairs - * - * @since 1.0 - */ - protected function cleanAttributes($attrSet) - { - $newSet = array(); - - $count = count($attrSet); - - // Iterate through attribute pairs - for ($i = 0; $i < $count; $i++) - { - // Skip blank spaces - if (!$attrSet[$i]) - { - continue; - } - - // Split into name/value pairs - $attrSubSet = explode('=', trim($attrSet[$i]), 2); - - // Take the last attribute in case there is an attribute with no value - $attrSubSet0 = explode(' ', trim($attrSubSet[0])); - $attrSubSet[0] = array_pop($attrSubSet0); - - $attrSubSet[0] = strtolower($attrSubSet[0]); - $quoteStyle = version_compare(PHP_VERSION, '5.4', '>=') ? ENT_QUOTES | ENT_HTML401 : ENT_QUOTES; - - // Remove all spaces as valid attributes does not have spaces. - $attrSubSet[0] = html_entity_decode($attrSubSet[0], $quoteStyle, 'UTF-8'); - $attrSubSet[0] = preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$/u', '', $attrSubSet[0]); - $attrSubSet[0] = preg_replace('/\s+/u', '', $attrSubSet[0]); - - // Remove blacklisted chars from the attribute name - foreach ($this->blacklistedChars as $blacklistedChar) - { - $attrSubSet[0] = str_ireplace($blacklistedChar, '', $attrSubSet[0]); - } - - // Remove all symbols - $attrSubSet[0] = preg_replace('/[^\p{L}\p{N}\-\s]/u', '', $attrSubSet[0]); - - // Remove all "non-regular" attribute names - // AND blacklisted attributes - if ((!preg_match('/[a-z]*$/i', $attrSubSet[0])) - || (($this->xssAuto) && ((in_array(strtolower($attrSubSet[0]), $this->attrBlacklist)) - || (substr($attrSubSet[0], 0, 2) == 'on')))) - { - continue; - } - - // XSS attribute value filtering - if (!isset($attrSubSet[1])) - { - continue; - } - - // Remove blacklisted chars from the attribute value - foreach ($this->blacklistedChars as $blacklistedChar) - { - $attrSubSet[1] = str_ireplace($blacklistedChar, '', $attrSubSet[1]); - } - - // Trim leading and trailing spaces - $attrSubSet[1] = trim($attrSubSet[1]); - - // Strips unicode, hex, etc - $attrSubSet[1] = str_replace('&#', '', $attrSubSet[1]); - - // Strip normal newline within attr value - $attrSubSet[1] = preg_replace('/[\n\r]/', '', $attrSubSet[1]); - - // Strip double quotes - $attrSubSet[1] = str_replace('"', '', $attrSubSet[1]); - - // Convert single quotes from either side to doubles (Single quotes shouldn't be used to pad attr values) - if ((substr($attrSubSet[1], 0, 1) == "'") && (substr($attrSubSet[1], (strlen($attrSubSet[1]) - 1), 1) == "'")) - { - $attrSubSet[1] = substr($attrSubSet[1], 1, (strlen($attrSubSet[1]) - 2)); - } - - // Strip slashes - $attrSubSet[1] = stripslashes($attrSubSet[1]); - - // Autostrip script tags - if (static::checkAttribute($attrSubSet)) - { - continue; - } - - // Is our attribute in the user input array? - $attrFound = in_array(strtolower($attrSubSet[0]), $this->attrArray); - - // If the tag is allowed lets keep it - if ((!$attrFound && $this->attrMethod) || ($attrFound && !$this->attrMethod)) - { - // Does the attribute have a value? - if (empty($attrSubSet[1]) === false) - { - $newSet[] = $attrSubSet[0] . '="' . $attrSubSet[1] . '"'; - } - elseif ($attrSubSet[1] === "0") - { - // Special Case - // Is the value 0? - $newSet[] = $attrSubSet[0] . '="0"'; - } - else - { - // Leave empty attributes alone - $newSet[] = $attrSubSet[0] . '=""'; - } - } - } - - return $newSet; - } - - /** - * Try to convert to plaintext - * - * @param string $source The source string. - * - * @return string Plaintext string - * - * @since 1.0 - * @deprecated This method will be removed once support for PHP 5.3 is discontinued. - */ - protected function decode($source) - { - return html_entity_decode($source, ENT_QUOTES, 'UTF-8'); - } - - /** - * Escape < > and " inside attribute values - * - * @param string $source The source string. - * - * @return string Filtered string - * - * @since 1.0 - */ - protected function escapeAttributeValues($source) - { - $alreadyFiltered = ''; - $remainder = $source; - $badChars = array('<', '"', '>'); - $escapedChars = array('<', '"', '>'); - - // Process each portion based on presence of =" and ", "/>, or "> - // See if there are any more attributes to process - while (preg_match('#<[^>]*?=\s*?(\"|\')#s', $remainder, $matches, PREG_OFFSET_CAPTURE)) - { - // We have found a tag with an attribute, convert its byte position to a UTF-8 string length, using non-multibyte substr() - $stringBeforeTag = substr($remainder, 0, $matches[0][1]); - $tagPosition = StringHelper::strlen($stringBeforeTag); - - // Get the character length before the attribute value - $nextBefore = $tagPosition + StringHelper::strlen($matches[0][0]); - - // Figure out if we have a single or double quote and look for the matching closing quote - // Closing quote should be "/>, ">, ", or " at the end of the string - $quote = StringHelper::substr($matches[0][0], -1); - $pregMatch = ($quote == '"') ? '#(\"\s*/\s*>|\"\s*>|\"\s+|\"$)#' : "#(\'\s*/\s*>|\'\s*>|\'\s+|\'$)#"; - - // Get the portion after attribute value - $attributeValueRemainder = StringHelper::substr($remainder, $nextBefore); - - if (preg_match($pregMatch, $attributeValueRemainder, $matches, PREG_OFFSET_CAPTURE)) - { - // We have a closing quote, convert its byte position to a UTF-8 string length, using non-multibyte substr() - $stringBeforeQuote = substr($attributeValueRemainder, 0, $matches[0][1]); - $closeQuoteChars = StringHelper::strlen($stringBeforeQuote); - $nextAfter = $nextBefore + $matches[0][1]; - } - else - { - // No closing quote - $nextAfter = StringHelper::strlen($remainder); - } - - // Get the actual attribute value - $attributeValue = StringHelper::substr($remainder, $nextBefore, $nextAfter - $nextBefore); - - // Escape bad chars - $attributeValue = str_replace($badChars, $escapedChars, $attributeValue); - $attributeValue = $this->stripCssExpressions($attributeValue); - $alreadyFiltered .= StringHelper::substr($remainder, 0, $nextBefore) . $attributeValue . $quote; - $remainder = StringHelper::substr($remainder, $nextAfter + 1); - } - - // At this point, we just have to return the $alreadyFiltered and the $remainder - return $alreadyFiltered . $remainder; - } - - /** - * Remove CSS Expressions in the form of :expression(...) - * - * @param string $source The source string. - * - * @return string Filtered string - * - * @since 1.0 - */ - protected function stripCssExpressions($source) - { - // Strip any comments out (in the form of /*...*/) - $test = preg_replace('#\/\*.*\*\/#U', '', $source); - - // Test for :expression - if (!stripos($test, ':expression')) - { - // Not found, so we are done - return $source; - } - - // At this point, we have stripped out the comments and have found :expression - // Test stripped string for :expression followed by a '(' - if (preg_match_all('#:expression\s*\(#', $test, $matches)) - { - // If found, remove :expression - return str_ireplace(':expression', '', $test); - } - - return $source; - } -} diff --git a/libraries/vendor/joomla/filter/src/OutputFilter.php b/libraries/vendor/joomla/filter/src/OutputFilter.php deleted file mode 100644 index 8ca20e4e8c87a..0000000000000 --- a/libraries/vendor/joomla/filter/src/OutputFilter.php +++ /dev/null @@ -1,214 +0,0 @@ - $v) - { - if (is_array($v) || is_object($v) || $v == null || substr($k, 1, 1) == '_') - { - continue; - } - - if (is_string($excludeKeys) && $k == $excludeKeys) - { - continue; - } - elseif (is_array($excludeKeys) && in_array($k, $excludeKeys)) - { - continue; - } - - $mixed->$k = htmlspecialchars($v, $quoteStyle, 'UTF-8'); - } - } - } - - /** - * This method processes a string and replaces all instances of & with & in links only. - * - * @param string $input String to process - * - * @return string Processed string - * - * @since 1.0 - */ - public static function linkXhtmlSafe($input) - { - $regex = 'href="([^"]*(&(amp;){0})[^"]*)*?"'; - - return preg_replace_callback( - "#$regex#i", - function ($m) - { - return preg_replace('#&(?!amp;)#', '&', $m[0]); - }, - $input - ); - } - - /** - * This method processes a string and replaces all accented UTF-8 characters by unaccented - * ASCII-7 "equivalents", whitespaces are replaced by hyphens and the string is lowercase. - * - * @param string $string String to process - * @param string $language Language to transliterate to - * - * @return string Processed string - * - * @since 1.0 - */ - public static function stringUrlSafe($string, $language = '') - { - // Remove any '-' from the string since they will be used as concatenaters - $str = str_replace('-', ' ', $string); - - // Transliterate on the language requested (fallback to current language if not specified) - $lang = empty($language) ? Language::getInstance() : Language::getInstance($language); - $str = $lang->transliterate($str); - - // Trim white spaces at beginning and end of alias and make lowercase - $str = trim(StringHelper::strtolower($str)); - - // Remove any duplicate whitespace, and ensure all characters are alphanumeric - $str = preg_replace('/(\s|[^A-Za-z0-9\-])+/', '-', $str); - - // Trim dashes at beginning and end of alias - $str = trim($str, '-'); - - return $str; - } - - /** - * This method implements unicode slugs instead of transliteration. - * - * @param string $string String to process - * - * @return string Processed string - * - * @since 1.0 - */ - public static function stringUrlUnicodeSlug($string) - { - // Replace double byte whitespaces by single byte (East Asian languages) - $str = preg_replace('/\xE3\x80\x80/', ' ', $string); - - // Remove any '-' from the string as they will be used as concatenator. - // Would be great to let the spaces in but only Firefox is friendly with this - - $str = str_replace('-', ' ', $str); - - // Replace forbidden characters by whitespaces - $str = preg_replace('#[:\#\*"@+=;!><&\.%()\]\/\'\\\\|\[]#', "\x20", $str); - - // Delete all '?' - $str = str_replace('?', '', $str); - - // Trim white spaces at beginning and end of alias and make lowercase - $str = trim(StringHelper::strtolower($str)); - - // Remove any duplicate whitespace and replace whitespaces by hyphens - $str = preg_replace('#\x20+#', '-', $str); - - return $str; - } - - /** - * Replaces & with & for XHTML compliance - * - * @param string $text Text to process - * - * @return string Processed string. - * - * @since 1.0 - */ - public static function ampReplace($text) - { - return preg_replace('/(?]*>.*?'si", '', $text); - $text = preg_replace('/]*>([^<]+)<\/a>/is', '\2 (\1)', $text); - $text = preg_replace('//', '', $text); - $text = preg_replace('/{.+?}/', '', $text); - $text = preg_replace('/ /', ' ', $text); - $text = preg_replace('/&/', ' ', $text); - $text = preg_replace('/"/', ' ', $text); - $text = strip_tags($text); - $text = htmlspecialchars($text, ENT_COMPAT, 'UTF-8'); - - return $text; - } - - /** - * Strip img-tags from string - * - * @param string $string Sting to be cleaned. - * - * @return string Cleaned string - * - * @since 1.0 - */ - public static function stripImages($string) - { - return preg_replace('#(<[/]?img.*>)#U', '', $string); - } - - /** - * Strip iframe-tags from string - * - * @param string $string Sting to be cleaned. - * - * @return string Cleaned string - * - * @since 1.0 - */ - public static function stripIframes($string) - { - return preg_replace('#(<[/]?iframe.*>)#U', '', $string); - } -} diff --git a/libraries/vendor/joomla/http/LICENSE b/libraries/vendor/joomla/http/LICENSE deleted file mode 100644 index df50810b85774..0000000000000 --- a/libraries/vendor/joomla/http/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/http/src/AbstractTransport.php b/libraries/vendor/joomla/http/src/AbstractTransport.php deleted file mode 100644 index fa80ac76634c9..0000000000000 --- a/libraries/vendor/joomla/http/src/AbstractTransport.php +++ /dev/null @@ -1,95 +0,0 @@ -options = $options; - } - - /** - * Get an option from the HTTP transport. - * - * @param string $key The name of the option to get. - * @param mixed $default The default value if the option is not set. - * - * @return mixed The option value. - * - * @since __DEPLOY_VERSION__ - */ - protected function getOption(string $key, $default = null) - { - return $this->options[$key] ?? $default; - } - - /** - * Processes the headers from a transport's response data. - * - * @param array $headers The headers to process. - * - * @return array - * - * @since __DEPLOY_VERSION__ - */ - protected function processHeaders(array $headers): array - { - $verifiedHeaders = []; - - // Add the response headers to the response object. - foreach ($headers as $header) - { - $pos = strpos($header, ':'); - $keyName = trim(substr($header, 0, $pos)); - - if (!isset($verifiedHeaders[$keyName])) - { - $verifiedHeaders[$keyName] = []; - } - - $verifiedHeaders[$keyName][] = trim(substr($header, ($pos + 1))); - } - - return $verifiedHeaders; - } -} diff --git a/libraries/vendor/joomla/http/src/Exception/InvalidResponseCodeException.php b/libraries/vendor/joomla/http/src/Exception/InvalidResponseCodeException.php deleted file mode 100644 index 04c8fff88e11d..0000000000000 --- a/libraries/vendor/joomla/http/src/Exception/InvalidResponseCodeException.php +++ /dev/null @@ -1,18 +0,0 @@ -response = $response; - } - - /** - * Get the Response object. - * - * @return Response - * - * @since 1.2.0 - */ - public function getResponse() - { - return $this->response; - } -} diff --git a/libraries/vendor/joomla/http/src/Http.php b/libraries/vendor/joomla/http/src/Http.php deleted file mode 100644 index a6b6a5668a3c8..0000000000000 --- a/libraries/vendor/joomla/http/src/Http.php +++ /dev/null @@ -1,308 +0,0 @@ -options = $options; - - if (!$transport) - { - $transport = (new HttpFactory)->getAvailableDriver($this->options); - - // Ensure the transport is a TransportInterface instance or bail out - if (!($transport instanceof TransportInterface)) - { - throw new \InvalidArgumentException('A valid TransportInterface object was not set.'); - } - } - - $this->transport = $transport; - } - - /** - * Get an option from the HTTP client. - * - * @param string $key The name of the option to get. - * @param mixed $default The default value if the option is not set. - * - * @return mixed The option value. - * - * @since 1.0 - */ - public function getOption($key, $default = null) - { - return $this->options[$key] ?? $default; - } - - /** - * Set an option for the HTTP client. - * - * @param string $key The name of the option to set. - * @param mixed $value The option value to set. - * - * @return $this - * - * @since 1.0 - */ - public function setOption($key, $value) - { - $this->options[$key] = $value; - - return $this; - } - - /** - * Method to send the OPTIONS command to the server. - * - * @param string|UriInterface $url The URI to the resource to request. - * @param array $headers An array of request headers to send with the request. - * @param integer $timeout Read timeout in seconds. - * - * @return Response - * - * @since 1.0 - */ - public function options($url, array $headers = [], $timeout = null) - { - return $this->makeTransportRequest('OPTIONS', $url, null, $headers, $timeout); - } - - /** - * Method to send the HEAD command to the server. - * - * @param string|UriInterface $url The URI to the resource to request. - * @param array $headers An array of request headers to send with the request. - * @param integer $timeout Read timeout in seconds. - * - * @return Response - * - * @since 1.0 - */ - public function head($url, array $headers = [], $timeout = null) - { - return $this->makeTransportRequest('HEAD', $url, null, $headers, $timeout); - } - - /** - * Method to send the GET command to the server. - * - * @param string|UriInterface $url The URI to the resource to request. - * @param array $headers An array of request headers to send with the request. - * @param integer $timeout Read timeout in seconds. - * - * @return Response - * - * @since 1.0 - */ - public function get($url, array $headers = [], $timeout = null) - { - return $this->makeTransportRequest('GET', $url, null, $headers, $timeout); - } - - /** - * Method to send the POST command to the server. - * - * @param string|UriInterface $url The URI to the resource to request. - * @param mixed $data Either an associative array or a string to be sent with the request. - * @param array $headers An array of request headers to send with the request. - * @param integer $timeout Read timeout in seconds. - * - * @return Response - * - * @since 1.0 - */ - public function post($url, $data, array $headers = [], $timeout = null) - { - return $this->makeTransportRequest('POST', $url, $data, $headers, $timeout); - } - - /** - * Method to send the PUT command to the server. - * - * @param string|UriInterface $url The URI to the resource to request. - * @param mixed $data Either an associative array or a string to be sent with the request. - * @param array $headers An array of request headers to send with the request. - * @param integer $timeout Read timeout in seconds. - * - * @return Response - * - * @since 1.0 - */ - public function put($url, $data, array $headers = [], $timeout = null) - { - return $this->makeTransportRequest('PUT', $url, $data, $headers, $timeout); - } - - /** - * Method to send the DELETE command to the server. - * - * @param string|UriInterface $url The URI to the resource to request. - * @param array $headers An array of request headers to send with the request. - * @param integer $timeout Read timeout in seconds. - * @param mixed $data Either an associative array or a string to be sent with the request. - * - * @return Response - * - * @since 1.0 - */ - public function delete($url, array $headers = [], $timeout = null, $data = null) - { - return $this->makeTransportRequest('DELETE', $url, $data, $headers, $timeout); - } - - /** - * Method to send the TRACE command to the server. - * - * @param string|UriInterface $url The URI to the resource to request. - * @param array $headers An array of request headers to send with the request. - * @param integer $timeout Read timeout in seconds. - * - * @return Response - * - * @since 1.0 - */ - public function trace($url, array $headers = [], $timeout = null) - { - return $this->makeTransportRequest('TRACE', $url, null, $headers, $timeout); - } - - /** - * Method to send the PATCH command to the server. - * - * @param string|UriInterface $url The URI to the resource to request. - * @param mixed $data Either an associative array or a string to be sent with the request. - * @param array $headers An array of request headers to send with the request. - * @param integer $timeout Read timeout in seconds. - * - * @return Response - * - * @since 1.0 - */ - public function patch($url, $data, array $headers = [], $timeout = null) - { - return $this->makeTransportRequest('PATCH', $url, $data, $headers, $timeout); - } - - /** - * Send a request to a remote server based on a PSR-7 RequestInterface object. - * - * @param RequestInterface $request The PSR-7 request object. - * - * @return Response - * - * @since __DEPLOY_VERSION__ - */ - public function sendRequest(RequestInterface $request) - { - $data = $request->getBody()->getContents(); - - return $this->makeTransportRequest( - $request->getMethod(), - new Uri((string) $request->getUri()), - empty($data) ? null : $data, - $request->getHeaders() - ); - } - - /** - * Send a request to the server and return a Response object with the response. - * - * @param string $method The HTTP method for sending the request. - * @param string|UriInterface $url The URI to the resource to request. - * @param mixed $data Either an associative array or a string to be sent with the request. - * @param array $headers An array of request headers to send with the request. - * @param integer $timeout Read timeout in seconds. - * - * @return Response - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - protected function makeTransportRequest($method, $url, $data = null, array $headers = [], $timeout = null) - { - // Look for headers set in the options. - if (isset($this->options['headers'])) - { - $temp = (array) $this->options['headers']; - - foreach ($temp as $key => $val) - { - if (!isset($headers[$key])) - { - $headers[$key] = $val; - } - } - } - - // Look for timeout set in the options. - if ($timeout === null && isset($this->options['timeout'])) - { - $timeout = $this->options['timeout']; - } - - $userAgent = isset($this->options['userAgent']) ? $this->options['userAgent'] : null; - - // Convert to a Uri object if we were given a string - if (is_string($url)) - { - $url = new Uri($url); - } - elseif (!($url instanceof UriInterface)) - { - throw new \InvalidArgumentException(sprintf('A string or UriInterface object must be provided, a "%s" was provided.', gettype($url))); - } - - return $this->transport->request($method, $url, $data, $headers, $timeout, $userAgent); - } -} diff --git a/libraries/vendor/joomla/http/src/HttpFactory.php b/libraries/vendor/joomla/http/src/HttpFactory.php deleted file mode 100644 index b0dafa4916e04..0000000000000 --- a/libraries/vendor/joomla/http/src/HttpFactory.php +++ /dev/null @@ -1,138 +0,0 @@ -getAvailableDriver($options, $adapters)) - { - throw new \RuntimeException('No transport driver available.'); - } - - return new Http($options, $driver); - } - - /** - * Finds an available TransportInterface object for communication - * - * @param array|\ArrayAccess $options Options for creating TransportInterface object - * @param array|string $default Adapter (string) or queue of adapters (array) to use - * - * @return TransportInterface|boolean Interface sub-class or boolean false if no adapters are available - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - public function getAvailableDriver($options = [], $default = null) - { - if (!is_array($options) && !($options instanceof \ArrayAccess)) - { - throw new \InvalidArgumentException( - 'The options param must be an array or implement the ArrayAccess interface.' - ); - } - - if (is_null($default)) - { - $availableAdapters = $this->getHttpTransports(); - } - else - { - settype($default, 'array'); - $availableAdapters = $default; - } - - // Check if there is at least one available http transport adapter - if (!count($availableAdapters)) - { - return false; - } - - foreach ($availableAdapters as $adapter) - { - /** @var $class TransportInterface */ - $class = __NAMESPACE__ . '\\Transport\\' . ucfirst($adapter); - - if (class_exists($class)) - { - if ($class::isSupported()) - { - return new $class($options); - } - } - } - - return false; - } - - /** - * Get the HTTP transport handlers - * - * @return array An array of available transport handler types - * - * @since 1.0 - */ - public function getHttpTransports() - { - $names = []; - $iterator = new \DirectoryIterator(__DIR__ . '/Transport'); - - /** @var $file \DirectoryIterator */ - foreach ($iterator as $file) - { - $fileName = $file->getFilename(); - - // Only load for php files. - if ($file->isFile() && $file->getExtension() == 'php') - { - $names[] = substr($fileName, 0, strrpos($fileName, '.')); - } - } - - // Keep alphabetical order across all environments - sort($names); - - // If curl is available set it to the first position - $key = array_search('Curl', $names); - - if ($key) - { - unset($names[$key]); - array_unshift($names, 'Curl'); - } - - return $names; - } -} diff --git a/libraries/vendor/joomla/http/src/Response.php b/libraries/vendor/joomla/http/src/Response.php deleted file mode 100644 index c43abd85695c2..0000000000000 --- a/libraries/vendor/joomla/http/src/Response.php +++ /dev/null @@ -1,61 +0,0 @@ -getBody(); - } - - if (strtolower($name) === 'code') - { - return $this->getStatusCode(); - } - - if (strtolower($name) === 'headers') - { - return $this->getHeaders(); - } - - $trace = debug_backtrace(); - trigger_error( - 'Undefined property via __get(): ' . $name . - ' in ' . $trace[0]['file'] . - ' on line ' . $trace[0]['line'], - E_USER_NOTICE - ); - - return; - } -} diff --git a/libraries/vendor/joomla/http/src/Transport/Curl.php b/libraries/vendor/joomla/http/src/Transport/Curl.php deleted file mode 100644 index 6bbb0fb0a18e0..0000000000000 --- a/libraries/vendor/joomla/http/src/Transport/Curl.php +++ /dev/null @@ -1,324 +0,0 @@ -getOption('curl.certpath', CaBundle::getSystemCaRootBundlePath()); - - // If data exists let's encode it and make sure our Content-type header is set. - if (isset($data)) - { - // If the data is a scalar value simply add it to the cURL post fields. - if (is_scalar($data) || (isset($headers['Content-Type']) && strpos($headers['Content-Type'], 'multipart/form-data') === 0)) - { - $options[CURLOPT_POSTFIELDS] = $data; - } - else - // Otherwise we need to encode the value first. - { - $options[CURLOPT_POSTFIELDS] = http_build_query($data); - } - - if (!isset($headers['Content-Type'])) - { - $headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'; - } - - // Add the relevant headers. - if (is_scalar($options[CURLOPT_POSTFIELDS])) - { - $headers['Content-Length'] = strlen($options[CURLOPT_POSTFIELDS]); - } - } - - // Build the headers string for the request. - $headerArray = []; - - if (!empty($headers)) - { - foreach ($headers as $key => $value) - { - if (is_array($value)) - { - foreach ($value as $header) - { - $headerArray[] = "$key: $header"; - } - } - else - { - $headerArray[] = "$key: $value"; - } - } - - // Add the headers string into the stream context options array. - $options[CURLOPT_HTTPHEADER] = $headerArray; - } - - // Curl needs the accepted encoding header as option - if (isset($headers['Accept-Encoding'])) - { - $options[CURLOPT_ENCODING] = $headers['Accept-Encoding']; - } - - // If an explicit timeout is given user it. - if (isset($timeout)) - { - $options[CURLOPT_TIMEOUT] = (int) $timeout; - $options[CURLOPT_CONNECTTIMEOUT] = (int) $timeout; - } - - // If an explicit user agent is given use it. - if (isset($userAgent)) - { - $options[CURLOPT_USERAGENT] = $userAgent; - } - - // Set the request URL. - $options[CURLOPT_URL] = (string) $uri; - - // We want our headers. :-) - $options[CURLOPT_HEADER] = true; - - // Return it... echoing it would be tacky. - $options[CURLOPT_RETURNTRANSFER] = true; - - // Override the Expect header to prevent cURL from confusing itself in its own stupidity. - // Link: http://the-stickman.com/web-development/php-and-curl-disabling-100-continue-header/ - $options[CURLOPT_HTTPHEADER][] = 'Expect:'; - - // Follow redirects if server config allows - if ($this->redirectsAllowed()) - { - $options[CURLOPT_FOLLOWLOCATION] = (bool) $this->getOption('follow_location', true); - } - - // Authentication, if needed - if ($this->getOption('userauth') && $this->getOption('passwordauth')) - { - $options[CURLOPT_USERPWD] = $this->getOption('userauth') . ':' . $this->getOption('passwordauth'); - $options[CURLOPT_HTTPAUTH] = CURLAUTH_BASIC; - } - - // Configure protocol version - if ($protocolVersion = $this->getOption('protocolVersion')) - { - $options[CURLOPT_HTTP_VERSION] = $this->mapProtocolVersion($protocolVersion); - } - - // Set any custom transport options - foreach ($this->getOption('transport.curl', []) as $key => $value) - { - $options[$key] = $value; - } - - // Set the cURL options. - curl_setopt_array($ch, $options); - - // Execute the request and close the connection. - $content = curl_exec($ch); - - // Check if the content is a string. If it is not, it must be an error. - if (!is_string($content)) - { - $message = curl_error($ch); - - if (empty($message)) - { - // Error but nothing from cURL? Create our own - $message = 'No HTTP response received'; - } - - throw new \RuntimeException($message); - } - - // Get the request information. - $info = curl_getinfo($ch); - - // Close the connection. - curl_close($ch); - - return $this->getResponse($content, $info); - } - - /** - * Method to get a response object from a server response. - * - * @param string $content The complete server response, including headers - * as a string if the response has no errors. - * @param array $info The cURL request information. - * - * @return Response - * - * @since 1.0 - * @throws InvalidResponseCodeException - */ - protected function getResponse($content, $info) - { - // Try to get header size - if (isset($info['header_size'])) - { - $headerString = trim(substr($content, 0, $info['header_size'])); - $headerArray = explode("\r\n\r\n", $headerString); - - // Get the last set of response headers as an array. - $headers = explode("\r\n", array_pop($headerArray)); - - // Set the body for the response. - $body = substr($content, $info['header_size']); - } - // Fallback and try to guess header count by redirect count - else - { - // Get the number of redirects that occurred. - $redirects = isset($info['redirect_count']) ? $info['redirect_count'] : 0; - - /* - * Split the response into headers and body. If cURL encountered redirects, the headers for the redirected requests will - * also be included. So we split the response into header + body + the number of redirects and only use the last two - * sections which should be the last set of headers and the actual body. - */ - $response = explode("\r\n\r\n", $content, 2 + $redirects); - - // Set the body for the response. - $body = array_pop($response); - - // Get the last set of response headers as an array. - $headers = explode("\r\n", array_pop($response)); - } - - // Get the response code from the first offset of the response headers. - preg_match('/[0-9]{3}/', array_shift($headers), $matches); - - $code = count($matches) ? $matches[0] : null; - - if (!is_numeric($code)) - { - // No valid response code was detected. - throw new InvalidResponseCodeException('No HTTP response code found.'); - } - - $statusCode = (int) $code; - $verifiedHeaders = $this->processHeaders($headers); - - $streamInterface = new StreamResponse('php://memory', 'rw'); - $streamInterface->write($body); - - return new Response($streamInterface, $statusCode, $verifiedHeaders); - } - - /** - * Method to check if HTTP transport cURL is available for use - * - * @return boolean True if available, else false - * - * @since 1.0 - */ - public static function isSupported() - { - return function_exists('curl_version') && curl_version(); - } - - /** - * Get the cURL constant for a HTTP protocol version - * - * @param string $version The HTTP protocol version to use - * - * @return integer - * - * @since 1.3.1 - */ - private function mapProtocolVersion($version) - { - switch ($version) - { - case '1.0': - return CURL_HTTP_VERSION_1_0; - - case '1.1': - return CURL_HTTP_VERSION_1_1; - - case '2.0': - case '2': - if (defined('CURL_HTTP_VERSION_2')) - { - return CURL_HTTP_VERSION_2; - } - } - - return CURL_HTTP_VERSION_NONE; - } - - /** - * Check if redirects are allowed - * - * @return boolean - * - * @since 1.2.1 - */ - private function redirectsAllowed(): bool - { - return true; - } -} diff --git a/libraries/vendor/joomla/http/src/Transport/Socket.php b/libraries/vendor/joomla/http/src/Transport/Socket.php deleted file mode 100644 index 1da29aa89cbe8..0000000000000 --- a/libraries/vendor/joomla/http/src/Transport/Socket.php +++ /dev/null @@ -1,323 +0,0 @@ -connect($uri, $timeout); - - // Make sure the connection is alive and valid. - if (!is_resource($connection)) - { - throw new \RuntimeException('Not connected to server.'); - } - - // Make sure the connection has not timed out. - $meta = stream_get_meta_data($connection); - - if ($meta['timed_out']) - { - throw new \RuntimeException('Server connection timed out.'); - } - - // Get the request path from the URI object. - $path = $uri->toString(['path', 'query']); - - // If we have data to send make sure our request is setup for it. - if (!empty($data)) - { - // If the data is not a scalar value encode it to be sent with the request. - if (!is_scalar($data)) - { - $data = http_build_query($data); - } - - if (!isset($headers['Content-Type'])) - { - $headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'; - } - - // Add the relevant headers. - $headers['Content-Length'] = strlen($data); - } - - // Configure protocol version, use transport's default if not set otherwise. - $protocolVersion = $this->getOption('protocolVersion', '1.0'); - - // Build the request payload. - $request = []; - $request[] = strtoupper($method) . ' ' . ((empty($path)) ? '/' : $path) . ' HTTP/' . $protocolVersion; - $request[] = 'Host: ' . $uri->getHost(); - - // If an explicit user agent is given use it. - if (isset($userAgent)) - { - $headers['User-Agent'] = $userAgent; - } - - // If we have a username then we include basic authentication credentials. - if ($uri->getUser()) - { - $authString = $uri->getUser() . ':' . $uri->getPass(); - $headers['Authorization'] = 'Basic ' . base64_encode($authString); - } - - // If there are custom headers to send add them to the request payload. - if (!empty($headers)) - { - foreach ($headers as $key => $value) - { - if (is_array($value)) - { - foreach ($value as $header) - { - $request[] = "$key: $header"; - } - } - else - { - $request[] = "$key: $value"; - } - } - } - - // Authentication, if needed - if ($this->getOption('userauth') && $this->getOption('passwordauth')) - { - $request[] = 'Authorization: Basic ' . base64_encode($this->getOption('userauth') . ':' . $this->getOption('passwordauth')); - } - - // Set any custom transport options - foreach ($this->getOption('transport.socket', []) as $value) - { - $request[] = $value; - } - - // If we have data to send add it to the request payload. - if (!empty($data)) - { - $request[] = null; - $request[] = $data; - } - - // Send the request to the server. - fwrite($connection, implode("\r\n", $request) . "\r\n\r\n"); - - // Get the response data from the server. - $content = ''; - - while (!feof($connection)) - { - $content .= fgets($connection, 4096); - } - - $content = $this->getResponse($content); - - // Follow Http redirects - if ($content->code >= 301 && $content->code < 400 && isset($content->headers['Location'])) - { - return $this->request($method, new Uri($content->headers['Location']), $data, $headers, $timeout, $userAgent); - } - - return $content; - } - - /** - * Method to get a response object from a server response. - * - * @param string $content The complete server response, including headers. - * - * @return Response - * - * @since 1.0 - * @throws \UnexpectedValueException - * @throws InvalidResponseCodeException - */ - protected function getResponse($content) - { - if (empty($content)) - { - throw new \UnexpectedValueException('No content in response.'); - } - - // Split the response into headers and body. - $response = explode("\r\n\r\n", $content, 2); - - // Get the response headers as an array. - $headers = explode("\r\n", $response[0]); - - // Set the body for the response. - $body = empty($response[1]) ? '' : $response[1]; - - // Get the response code from the first offset of the response headers. - preg_match('/[0-9]{3}/', array_shift($headers), $matches); - $code = $matches[0]; - - if (!is_numeric($code)) - { - // No valid response code was detected. - throw new InvalidResponseCodeException('No HTTP response code found.'); - } - - $statusCode = (int) $code; - $verifiedHeaders = $this->processHeaders($headers); - - $streamInterface = new StreamResponse('php://memory', 'rw'); - $streamInterface->write($body); - - return new Response($streamInterface, $statusCode, $verifiedHeaders); - } - - /** - * Method to connect to a server and get the resource. - * - * @param UriInterface $uri The URI to connect with. - * @param integer $timeout Read timeout in seconds. - * - * @return resource Socket connection resource. - * - * @since 1.0 - * @throws \RuntimeException - */ - protected function connect(UriInterface $uri, $timeout = null) - { - $errno = null; - $err = null; - - // Get the host from the uri. - $host = ($uri->isSsl()) ? 'ssl://' . $uri->getHost() : $uri->getHost(); - - // If the port is not explicitly set in the URI detect it. - if (!$uri->getPort()) - { - $port = ($uri->getScheme() == 'https') ? 443 : 80; - } - - // Use the set port. - else - { - $port = $uri->getPort(); - } - - // Build the connection key for resource memory caching. - $key = md5($host . $port); - - // If the connection already exists, use it. - if (!empty($this->connections[$key]) && is_resource($this->connections[$key])) - { - // Connection reached EOF, cannot be used anymore - $meta = stream_get_meta_data($this->connections[$key]); - - if ($meta['eof']) - { - if (!fclose($this->connections[$key])) - { - throw new \RuntimeException('Cannot close connection'); - } - } - - // Make sure the connection has not timed out. - elseif (!$meta['timed_out']) - { - return $this->connections[$key]; - } - } - - if (!is_numeric($timeout)) - { - $timeout = ini_get('default_socket_timeout'); - } - - // Capture PHP errors - $php_errormsg = ''; - $trackErrors = ini_get('track_errors'); - ini_set('track_errors', true); - - // PHP sends a warning if the uri does not exists; we silence it and throw an exception instead. - // Attempt to connect to the server - $connection = @fsockopen($host, $port, $errno, $err, $timeout); - - if (!$connection) - { - if (!$php_errormsg) - { - // Error but nothing from php? Create our own - $php_errormsg = sprintf('Could not connect to resource: %s', $uri, $err, $errno); - } - - // Restore error tracking to give control to the exception handler - ini_set('track_errors', $trackErrors); - - throw new \RuntimeException($php_errormsg); - } - - // Restore error tracking to what it was before. - ini_set('track_errors', $trackErrors); - - // Since the connection was successful let's store it in case we need to use it later. - $this->connections[$key] = $connection; - - // If an explicit timeout is set, set it. - if (isset($timeout)) - { - stream_set_timeout($this->connections[$key], (int) $timeout); - } - - return $this->connections[$key]; - } - - /** - * Method to check if http transport socket available for use - * - * @return boolean True if available else false - * - * @since 1.0 - */ - public static function isSupported() - { - return function_exists('fsockopen') && is_callable('fsockopen'); - } -} diff --git a/libraries/vendor/joomla/http/src/Transport/Stream.php b/libraries/vendor/joomla/http/src/Transport/Stream.php deleted file mode 100644 index d0269d17016a9..0000000000000 --- a/libraries/vendor/joomla/http/src/Transport/Stream.php +++ /dev/null @@ -1,266 +0,0 @@ - strtoupper($method)]; - - // If data exists let's encode it and make sure our Content-Type header is set. - if (isset($data)) - { - // If the data is a scalar value simply add it to the stream context options. - if (is_scalar($data)) - { - $options['content'] = $data; - } - else - // Otherwise we need to encode the value first. - { - $options['content'] = http_build_query($data); - } - - if (!isset($headers['Content-Type'])) - { - $headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'; - } - - // Add the relevant headers. - $headers['Content-Length'] = strlen($options['content']); - } - - // If an explicit timeout is given user it. - if (isset($timeout)) - { - $options['timeout'] = (int) $timeout; - } - - // If an explicit user agent is given use it. - if (isset($userAgent)) - { - $options['user_agent'] = $userAgent; - } - - // Ignore HTTP errors so that we can capture them. - $options['ignore_errors'] = 1; - - // Follow redirects. - $options['follow_location'] = (int) $this->getOption('follow_location', 1); - - // Configure protocol version, use transport's default if not set otherwise. - $options['follow_location'] = $this->getOption('protocolVersion', '1.0'); - - // Add the proxy configuration if enabled - if ($this->getOption('proxy.enabled', false)) - { - $options['request_fulluri'] = true; - - if ($this->getOption('proxy.host') && $this->getOption('proxy.port')) - { - $options['proxy'] = $this->getOption('proxy.host') . ':' . (int) $this->getOption('proxy.port'); - } - - // If authentication details are provided, add those as well - if ($this->getOption('proxy.port') && $this->getOption('proxy.password')) - { - $headers['Proxy-Authorization'] = 'Basic ' . base64_encode($this->getOption('proxy.user') . ':' . $this->getOption('proxy.password')); - } - } - - // Build the headers string for the request. - if (!empty($headers)) - { - $headerString = ''; - - foreach ($headers as $key => $value) - { - if (is_array($value)) - { - foreach ($value as $header) - { - $headerString .= "$key: $header\r\n"; - } - } - else - { - $headerString .= "$key: $value\r\n"; - } - } - - // Add the headers string into the stream context options array. - $options['header'] = trim($headerString, "\r\n"); - } - - // Authentication, if needed - if ($uri instanceof Uri && $this->getOption('userauth') && $this->getOption('passwordauth')) - { - $uri->setUser($this->getOption('userauth')); - $uri->setPass($this->getOption('passwordauth')); - } - - // Set any custom transport options - foreach ($this->getOption('transport.stream', []) as $key => $value) - { - $options[$key] = $value; - } - - // Get the current context options. - $contextOptions = stream_context_get_options(stream_context_get_default()); - - // Add our options to the currently defined options, if any. - $contextOptions['http'] = isset($contextOptions['http']) ? array_merge($contextOptions['http'], $options) : $options; - - // Create the stream context for the request. - $streamOptions = [ - 'http' => $options, - 'ssl' => [ - 'verify_peer' => true, - 'verify_depth' => 5, - 'verify_peer_name' => true, - ], - ]; - - // The cacert may be a file or path - $certpath = $this->getOption('stream.certpath', CaBundle::getSystemCaRootBundlePath()); - - if (is_dir($certpath)) - { - $streamOptions['ssl']['capath'] = $certpath; - } - else - { - $streamOptions['ssl']['cafile'] = $certpath; - } - - $context = stream_context_create($streamOptions); - - // Capture PHP errors - $php_errormsg = ''; - $trackErrors = ini_get('track_errors'); - ini_set('track_errors', true); - - // Open the stream for reading. - $stream = @fopen((string) $uri, 'r', false, $context); - - if (!$stream) - { - if (!$php_errormsg) - { - // Error but nothing from php? Create our own - // @todo $err and $errno are undefined variables. - $php_errormsg = sprintf('Could not connect to resource: %s', $uri, $err, $errno); - } - - // Restore error tracking to give control to the exception handler - ini_set('track_errors', $trackErrors); - - throw new \RuntimeException($php_errormsg); - } - - // Restore error tracking to what it was before. - ini_set('track_errors', $trackErrors); - - // Get the metadata for the stream, including response headers. - $metadata = stream_get_meta_data($stream); - - // Get the contents from the stream. - $content = stream_get_contents($stream); - - // Close the stream. - fclose($stream); - - $headers = []; - - if (isset($metadata['wrapper_data']['headers'])) - { - $headers = $metadata['wrapper_data']['headers']; - } - elseif (isset($metadata['wrapper_data'])) - { - $headers = $metadata['wrapper_data']; - } - - return $this->getResponse($headers, $content); - } - - /** - * Method to get a response object from a server response. - * - * @param array $headers The response headers as an array. - * @param string $body The response body as a string. - * - * @return Response - * - * @since 1.0 - * @throws InvalidResponseCodeException - */ - protected function getResponse(array $headers, $body) - { - // Get the response code from the first offset of the response headers. - preg_match('/[0-9]{3}/', array_shift($headers), $matches); - $code = $matches[0]; - - if (!is_numeric($code)) - { - // No valid response code was detected. - throw new InvalidResponseCodeException('No HTTP response code found.'); - } - - $statusCode = (int) $code; - $verifiedHeaders = $this->processHeaders($headers); - - $streamInterface = new StreamResponse('php://memory', 'rw'); - $streamInterface->write($body); - - return new Response($streamInterface, $statusCode, $verifiedHeaders); - } - - /** - * Method to check if http transport stream available for use - * - * @return boolean True if available else false - * - * @since 1.0 - */ - public static function isSupported() - { - return function_exists('fopen') && is_callable('fopen') && ini_get('allow_url_fopen'); - } -} diff --git a/libraries/vendor/joomla/http/src/TransportInterface.php b/libraries/vendor/joomla/http/src/TransportInterface.php deleted file mode 100644 index fce85c3e4e5b1..0000000000000 --- a/libraries/vendor/joomla/http/src/TransportInterface.php +++ /dev/null @@ -1,44 +0,0 @@ - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/image/src/Filter/Backgroundfill.php b/libraries/vendor/joomla/image/src/Filter/Backgroundfill.php deleted file mode 100644 index 6228c2632ca19..0000000000000 --- a/libraries/vendor/joomla/image/src/Filter/Backgroundfill.php +++ /dev/null @@ -1,136 +0,0 @@ -handle); - $height = imagesy($this->handle); - - // Sanitize color - $rgba = $this->sanitizeColor($colorCode); - - // Enforce alpha on source image - if (imageistruecolor($this->handle)) - { - imagealphablending($this->handle, false); - imagesavealpha($this->handle, true); - } - - // Create background - $bg = imagecreatetruecolor($width, $height); - imagesavealpha($bg, empty($rgba['alpha'])); - - // Allocate background color. - $color = imagecolorallocatealpha($bg, $rgba['red'], $rgba['green'], $rgba['blue'], $rgba['alpha']); - - // Fill background - imagefill($bg, 0, 0, $color); - - // Apply image over background - imagecopy($bg, $this->handle, 0, 0, 0, 0, $width, $height); - - // Move flattened result onto curent handle. - // If handle was palette-based, it'll stay like that. - imagecopy($this->handle, $bg, 0, 0, 0, 0, $width, $height); - - // Free up memory - imagedestroy($bg); - - return; - } - - /** - * Method to sanitize color values and/or convert to an array - * - * @param mixed $input Associative array of colors and alpha, or hex RGBA string when alpha FF is opaque. Defaults to black and opaque alpha. - * - * @return array Associative array of red, green, blue and alpha - * - * @since 1.0 - * - * @note '#FF0000FF' returns an array with alpha of 0 (opaque) - */ - protected function sanitizeColor($input) - { - // Construct default values - $colors = ['red' => 0, 'green' => 0, 'blue' => 0, 'alpha' => 0]; - - // Make sure all values are in - if (is_array($input)) - { - $colors = array_merge($colors, $input); - } - elseif (is_string($input)) - // Convert RGBA 6-9 char string - { - $hex = ltrim($input, '#'); - - $hexValues = [ - 'red' => substr($hex, 0, 2), - 'green' => substr($hex, 2, 2), - 'blue' => substr($hex, 4, 2), - 'alpha' => substr($hex, 6, 2), - ]; - - $colors = array_map('hexdec', $hexValues); - - // Convert Alpha to 0..127 when provided - if (strlen($hex) > 6) - { - $colors['alpha'] = floor((255 - $colors['alpha']) / 2); - } - } - else - // Cannot sanitize such type - { - return $colors; - } - - // Make sure each value is within the allowed range - foreach ($colors as &$value) - { - $value = max(0, min(255, (int) $value)); - } - - $colors['alpha'] = min(127, $colors['alpha']); - - return $colors; - } -} diff --git a/libraries/vendor/joomla/image/src/Filter/Brightness.php b/libraries/vendor/joomla/image/src/Filter/Brightness.php deleted file mode 100644 index f140cd4883077..0000000000000 --- a/libraries/vendor/joomla/image/src/Filter/Brightness.php +++ /dev/null @@ -1,42 +0,0 @@ -handle, IMG_FILTER_BRIGHTNESS, $options[IMG_FILTER_BRIGHTNESS]); - } -} diff --git a/libraries/vendor/joomla/image/src/Filter/Contrast.php b/libraries/vendor/joomla/image/src/Filter/Contrast.php deleted file mode 100644 index 1cd857c9ef261..0000000000000 --- a/libraries/vendor/joomla/image/src/Filter/Contrast.php +++ /dev/null @@ -1,42 +0,0 @@ -handle, IMG_FILTER_CONTRAST, $options[IMG_FILTER_CONTRAST]); - } -} diff --git a/libraries/vendor/joomla/image/src/Filter/Edgedetect.php b/libraries/vendor/joomla/image/src/Filter/Edgedetect.php deleted file mode 100644 index f3c9e756d49b4..0000000000000 --- a/libraries/vendor/joomla/image/src/Filter/Edgedetect.php +++ /dev/null @@ -1,35 +0,0 @@ -handle, IMG_FILTER_EDGEDETECT); - } -} diff --git a/libraries/vendor/joomla/image/src/Filter/Emboss.php b/libraries/vendor/joomla/image/src/Filter/Emboss.php deleted file mode 100644 index d86be920f7929..0000000000000 --- a/libraries/vendor/joomla/image/src/Filter/Emboss.php +++ /dev/null @@ -1,35 +0,0 @@ -handle, IMG_FILTER_EMBOSS); - } -} diff --git a/libraries/vendor/joomla/image/src/Filter/Grayscale.php b/libraries/vendor/joomla/image/src/Filter/Grayscale.php deleted file mode 100644 index 2bd7ba8b75150..0000000000000 --- a/libraries/vendor/joomla/image/src/Filter/Grayscale.php +++ /dev/null @@ -1,35 +0,0 @@ -handle, IMG_FILTER_GRAYSCALE); - } -} diff --git a/libraries/vendor/joomla/image/src/Filter/Negate.php b/libraries/vendor/joomla/image/src/Filter/Negate.php deleted file mode 100644 index 3b13b2752e90c..0000000000000 --- a/libraries/vendor/joomla/image/src/Filter/Negate.php +++ /dev/null @@ -1,35 +0,0 @@ -handle, IMG_FILTER_NEGATE); - } -} diff --git a/libraries/vendor/joomla/image/src/Filter/Sketchy.php b/libraries/vendor/joomla/image/src/Filter/Sketchy.php deleted file mode 100644 index c5e4bcb2d77b3..0000000000000 --- a/libraries/vendor/joomla/image/src/Filter/Sketchy.php +++ /dev/null @@ -1,35 +0,0 @@ -handle, IMG_FILTER_MEAN_REMOVAL); - } -} diff --git a/libraries/vendor/joomla/image/src/Filter/Smooth.php b/libraries/vendor/joomla/image/src/Filter/Smooth.php deleted file mode 100644 index be937cd2a3fd2..0000000000000 --- a/libraries/vendor/joomla/image/src/Filter/Smooth.php +++ /dev/null @@ -1,42 +0,0 @@ -handle, IMG_FILTER_SMOOTH, $options[IMG_FILTER_SMOOTH]); - } -} diff --git a/libraries/vendor/joomla/image/src/Image.php b/libraries/vendor/joomla/image/src/Image.php deleted file mode 100644 index d409cbbf7eeb7..0000000000000 --- a/libraries/vendor/joomla/image/src/Image.php +++ /dev/null @@ -1,1185 +0,0 @@ -handle = &$source; - } - elseif (!empty($source) && is_string($source)) - { - // If the source input is not empty, assume it is a path and populate the image handle. - $this->loadFile($source); - } - } - - /** - * Get the image resource handle - * - * @return resource - * - * @since 1.3.0 - * @throws \LogicException if an image has not been loaded into the instance - */ - public function getHandle() - { - // Make sure the resource handle is valid. - if (!$this->isLoaded()) - { - throw new \LogicException('No valid image was loaded.'); - } - - return $this->handle; - } - - /** - * Get the logger. - * - * @return LoggerInterface - * - * @since 1.0 - */ - public function getLogger() - { - // If a logger hasn't been set, use NullLogger - if (! ($this->logger instanceof LoggerInterface)) - { - $this->logger = new NullLogger; - } - - return $this->logger; - } - - /** - * Method to return a properties object for an image given a filesystem path. - * - * The result object has values for image width, height, type, attributes, mime type, bits, and channels. - * - * @param string $path The filesystem path to the image for which to get properties. - * - * @return \stdClass - * - * @since 1.0 - * @throws \InvalidArgumentException - * @throws \RuntimeException - */ - public static function getImageFileProperties($path) - { - // Make sure the file exists. - if (!file_exists($path)) - { - throw new \InvalidArgumentException('The image file does not exist.'); - } - - // Get the image file information. - $info = getimagesize($path); - - if (!$info) - { - throw new \RuntimeException('Unable to get properties for the image.'); - } - - // Build the response object. - return (object) [ - 'width' => $info[0], - 'height' => $info[1], - 'type' => $info[2], - 'attributes' => $info[3], - 'bits' => $info['bits'] ?? null, - 'channels' => $info['channels'] ?? null, - 'mime' => $info['mime'], - 'filesize' => filesize($path), - 'orientation' => self::getOrientationString((int) $info[0], (int) $info[1]), - ]; - } - - /** - * Method to detect whether an image's orientation is landscape, portrait or square. - * - * The orientation will be returned as a string. - * - * @return mixed Orientation string or null. - * - * @since 1.2.0 - */ - public function getOrientation() - { - if ($this->isLoaded()) - { - return self::getOrientationString($this->getWidth(), $this->getHeight()); - } - - return null; - } - - /** - * Compare width and height integers to determine image orientation. - * - * @param integer $width The width value to use for calculation - * @param integer $height The height value to use for calculation - * - * @return string Orientation string - * - * @since 1.2.0 - */ - private static function getOrientationString(int $width, int $height): string - { - switch (true) - { - case ($width > $height) : - return self::ORIENTATION_LANDSCAPE; - - case ($width < $height) : - return self::ORIENTATION_PORTRAIT; - - default: - return self::ORIENTATION_SQUARE; - } - } - - /** - * Method to generate thumbnails from the current image. It allows creation by resizing or cropping the original image. - * - * @param mixed $thumbSizes String or array of strings. Example: $thumbSizes = array('150x75','250x150'); - * @param integer $creationMethod 1-3 resize $scaleMethod | 4 create cropping | 5 resize then crop - * - * @return array - * - * @since 1.0 - * @throws \LogicException - * @throws \InvalidArgumentException - */ - public function generateThumbs($thumbSizes, $creationMethod = self::SCALE_INSIDE) - { - // Make sure the resource handle is valid. - if (!$this->isLoaded()) - { - throw new \LogicException('No valid image was loaded.'); - } - - // Accept a single thumbsize string as parameter - if (!is_array($thumbSizes)) - { - $thumbSizes = [$thumbSizes]; - } - - // Process thumbs - $generated = []; - - if (!empty($thumbSizes)) - { - foreach ($thumbSizes as $thumbSize) - { - // Desired thumbnail size - $size = explode('x', strtolower($thumbSize)); - - if (count($size) != 2) - { - throw new \InvalidArgumentException('Invalid thumb size received: ' . $thumbSize); - } - - $thumbWidth = $size[0]; - $thumbHeight = $size[1]; - - switch ($creationMethod) - { - case self::CROP: - $thumb = $this->crop($thumbWidth, $thumbHeight, null, null, true); - break; - - case self::CROP_RESIZE: - $thumb = $this->cropResize($thumbWidth, $thumbHeight, true); - break; - - default: - $thumb = $this->resize($thumbWidth, $thumbHeight, true, $creationMethod); - break; - } - - // Store the thumb in the results array - $generated[] = $thumb; - } - } - - return $generated; - } - - /** - * Method to create thumbnails from the current image and save them to disk. It allows creation by resizing or croppping the original image. - * - * @param mixed $thumbSizes string or array of strings. Example: $thumbSizes = array('150x75','250x150'); - * @param integer $creationMethod 1-3 resize $scaleMethod | 4 create cropping - * @param string $thumbsFolder destination thumbs folder. null generates a thumbs folder in the image folder - * - * @return array - * - * @since 1.0 - * @throws \LogicException - * @throws \InvalidArgumentException - */ - public function createThumbs($thumbSizes, $creationMethod = self::SCALE_INSIDE, $thumbsFolder = null) - { - // Make sure the resource handle is valid. - if (!$this->isLoaded()) - { - throw new \LogicException('No valid image was loaded.'); - } - - // No thumbFolder set -> we will create a thumbs folder in the current image folder - if (is_null($thumbsFolder)) - { - $thumbsFolder = dirname($this->getPath()) . '/thumbs'; - } - - // Check destination - if (!is_dir($thumbsFolder) && (!is_dir(dirname($thumbsFolder)) || !@mkdir($thumbsFolder))) - { - throw new \InvalidArgumentException('Folder does not exist and cannot be created: ' . $thumbsFolder); - } - - // Process thumbs - $thumbsCreated = []; - - if ($thumbs = $this->generateThumbs($thumbSizes, $creationMethod)) - { - // Parent image properties - $imgProperties = static::getImageFileProperties($this->getPath()); - - foreach ($thumbs as $thumb) - { - // Get thumb properties - $thumbWidth = $thumb->getWidth(); - $thumbHeight = $thumb->getHeight(); - - // Generate thumb name - $filename = pathinfo($this->getPath(), PATHINFO_FILENAME); - $fileExtension = pathinfo($this->getPath(), PATHINFO_EXTENSION); - $thumbFileName = $filename . '_' . $thumbWidth . 'x' . $thumbHeight . '.' . $fileExtension; - - // Save thumb file to disk - $thumbFileName = $thumbsFolder . '/' . $thumbFileName; - - if ($thumb->toFile($thumbFileName, $imgProperties->type)) - { - // Return Image object with thumb path to ease further manipulation - $thumb->path = $thumbFileName; - $thumbsCreated[] = $thumb; - } - } - } - - return $thumbsCreated; - } - - /** - * Method to crop the current image. - * - * @param mixed $width The width of the image section to crop in pixels or a percentage. - * @param mixed $height The height of the image section to crop in pixels or a percentage. - * @param integer $left The number of pixels from the left to start cropping. - * @param integer $top The number of pixels from the top to start cropping. - * @param boolean $createNew If true the current image will be cloned, cropped and returned; else - * the current image will be cropped and returned. - * - * @return Image - * - * @since 1.0 - * @throws \LogicException - */ - public function crop($width, $height, $left = null, $top = null, $createNew = true) - { - // Sanitize width. - $width = $this->sanitizeWidth($width, $height); - - // Sanitize height. - $height = $this->sanitizeHeight($height, $width); - - // Autocrop offsets - if (is_null($left)) - { - $left = round(($this->getWidth() - $width) / 2); - } - - if (is_null($top)) - { - $top = round(($this->getHeight() - $height) / 2); - } - - // Sanitize left. - $left = $this->sanitizeOffset($left); - - // Sanitize top. - $top = $this->sanitizeOffset($top); - - // Create the new truecolor image handle. - $handle = imagecreatetruecolor($width, $height); - - // Allow transparency for the new image handle. - imagealphablending($handle, false); - imagesavealpha($handle, true); - - if ($this->isTransparent()) - { - // Get the transparent color values for the current image. - $rgba = imagecolorsforindex($this->getHandle(), imagecolortransparent($this->getHandle())); - $color = imagecolorallocatealpha($handle, $rgba['red'], $rgba['green'], $rgba['blue'], $rgba['alpha']); - - // Set the transparent color values for the new image. - imagecolortransparent($handle, $color); - imagefill($handle, 0, 0, $color); - } - - if (!$this->generateBestQuality) - { - imagecopyresized($handle, $this->getHandle(), 0, 0, $left, $top, $width, $height, $width, $height); - } - else - { - imagecopyresampled($handle, $this->getHandle(), 0, 0, $left, $top, $width, $height, $width, $height); - } - - // If we are cropping to a new image, create a new Image object. - if ($createNew) - { - return new static($handle); - } - - // Swap out the current handle for the new image handle. - $this->destroy(); - - $this->handle = $handle; - - return $this; - } - - /** - * Method to apply a filter to the image by type. Two examples are: grayscale and sketchy. - * - * @param string $type The name of the image filter to apply. - * @param array $options An array of options for the filter. - * - * @return Image - * - * @since 1.0 - * @see Joomla\Image\Filter - * @throws \LogicException - */ - public function filter($type, array $options = []) - { - // Make sure the resource handle is valid. - if (!$this->isLoaded()) - { - throw new \LogicException('No valid image was loaded.'); - } - - // Get the image filter instance. - $filter = $this->getFilterInstance($type); - - // Execute the image filter. - $filter->execute($options); - - return $this; - } - - /** - * Method to get the height of the image in pixels. - * - * @return integer - * - * @since 1.0 - * @throws \LogicException - */ - public function getHeight() - { - return imagesy($this->getHandle()); - } - - /** - * Method to get the width of the image in pixels. - * - * @return integer - * - * @since 1.0 - * @throws \LogicException - */ - public function getWidth() - { - return imagesx($this->getHandle()); - } - - /** - * Method to return the path - * - * @return string - * - * @since 1.0 - */ - public function getPath() - { - return $this->path; - } - - /** - * Method to determine whether or not an image has been loaded into the object. - * - * @return boolean - * - * @since 1.0 - */ - public function isLoaded() - { - // Make sure the resource handle is valid. - if (!is_resource($this->handle) || (get_resource_type($this->handle) != 'gd')) - { - return false; - } - - return true; - } - - /** - * Method to determine whether or not the image has transparency. - * - * @return boolean - * - * @since 1.0 - * @throws \LogicException - */ - public function isTransparent() - { - return imagecolortransparent($this->getHandle()) >= 0; - } - - /** - * Method to load a file into the Image object as the resource. - * - * @param string $path The filesystem path to load as an image. - * - * @return void - * - * @since 1.0 - * @throws \InvalidArgumentException - * @throws \RuntimeException - */ - public function loadFile($path) - { - // Destroy the current image handle if it exists - $this->destroy(); - - // Make sure the file exists. - if (!file_exists($path)) - { - throw new \InvalidArgumentException('The image file does not exist.'); - } - - // Get the image properties. - $properties = static::getImageFileProperties($path); - - // Attempt to load the image based on the MIME-Type - switch ($properties->mime) - { - case 'image/gif': - // Make sure the image type is supported. - if (empty(static::$formats[IMAGETYPE_GIF])) - { - $this->getLogger()->error('Attempting to load an image of unsupported type GIF.'); - - throw new \RuntimeException('Attempting to load an image of unsupported type GIF.'); - } - - // Attempt to create the image handle. - $handle = imagecreatefromgif($path); - - if (!is_resource($handle)) - { - throw new \RuntimeException('Unable to process GIF image.'); - } - - $this->handle = $handle; - break; - - case 'image/jpeg': - // Make sure the image type is supported. - if (empty(static::$formats[IMAGETYPE_JPEG])) - { - $this->getLogger()->error('Attempting to load an image of unsupported type JPG.'); - - throw new \RuntimeException('Attempting to load an image of unsupported type JPG.'); - } - - // Attempt to create the image handle. - $handle = imagecreatefromjpeg($path); - - if (!is_resource($handle)) - { - throw new \RuntimeException('Unable to process JPG image.'); - } - - $this->handle = $handle; - break; - - case 'image/png': - // Make sure the image type is supported. - if (empty(static::$formats[IMAGETYPE_PNG])) - { - $this->getLogger()->error('Attempting to load an image of unsupported type PNG.'); - - throw new \RuntimeException('Attempting to load an image of unsupported type PNG.'); - } - - // Attempt to create the image handle. - $handle = imagecreatefrompng($path); - - if (!is_resource($handle)) - { - throw new \RuntimeException('Unable to process PNG image.'); - } - - $this->handle = $handle; - - break; - - default: - $this->getLogger()->error('Attempting to load an image of unsupported type ' . $properties->mime); - - throw new \InvalidArgumentException('Attempting to load an image of unsupported type ' . $properties->mime); - } - - // Set the filesystem path to the source image. - $this->path = $path; - } - - /** - * Method to resize the current image. - * - * @param mixed $width The width of the resized image in pixels or a percentage. - * @param mixed $height The height of the resized image in pixels or a percentage. - * @param boolean $createNew If true the current image will be cloned, resized and returned; else - * the current image will be resized and returned. - * @param integer $scaleMethod Which method to use for scaling - * - * @return Image - * - * @since 1.0 - * @throws \LogicException - */ - public function resize($width, $height, $createNew = true, $scaleMethod = self::SCALE_INSIDE) - { - // Sanitize width. - $width = $this->sanitizeWidth($width, $height); - - // Sanitize height. - $height = $this->sanitizeHeight($height, $width); - - // Prepare the dimensions for the resize operation. - $dimensions = $this->prepareDimensions($width, $height, $scaleMethod); - - // Instantiate offset. - $offset = new \stdClass; - $offset->x = $offset->y = 0; - - // Center image if needed and create the new truecolor image handle. - if ($scaleMethod == self::SCALE_FIT) - { - // Get the offsets - $offset->x = round(($width - $dimensions->width) / 2); - $offset->y = round(($height - $dimensions->height) / 2); - - $handle = imagecreatetruecolor($width, $height); - - // Make image transparent, otherwise canvas outside initial image would default to black - if (!$this->isTransparent()) - { - $transparency = imagecolorallocatealpha($this->getHandle(), 0, 0, 0, 127); - imagecolortransparent($this->getHandle(), $transparency); - } - } - else - { - $handle = imagecreatetruecolor($dimensions->width, $dimensions->height); - } - - // Allow transparency for the new image handle. - imagealphablending($handle, false); - imagesavealpha($handle, true); - - if ($this->isTransparent()) - { - // Get the transparent color values for the current image. - $rgba = imagecolorsforindex($this->getHandle(), imagecolortransparent($this->getHandle())); - $color = imagecolorallocatealpha($handle, $rgba['red'], $rgba['green'], $rgba['blue'], $rgba['alpha']); - - // Set the transparent color values for the new image. - imagecolortransparent($handle, $color); - imagefill($handle, 0, 0, $color); - } - - if (!$this->generateBestQuality) - { - imagecopyresized( - $handle, - $this->getHandle(), - $offset->x, - $offset->y, - 0, - 0, - $dimensions->width, - $dimensions->height, - $this->getWidth(), - $this->getHeight() - ); - } - else - { - // Use resampling for better quality - imagecopyresampled( - $handle, - $this->getHandle(), - $offset->x, - $offset->y, - 0, - 0, - $dimensions->width, - $dimensions->height, - $this->getWidth(), - $this->getHeight() - ); - } - - // If we are resizing to a new image, create a new JImage object. - if ($createNew) - { - return new static($handle); - } - - // Swap out the current handle for the new image handle. - $this->destroy(); - - $this->handle = $handle; - - return $this; - } - - /** - * Method to crop an image after resizing it to maintain - * proportions without having to do all the set up work. - * - * @param integer $width The desired width of the image in pixels or a percentage. - * @param integer $height The desired height of the image in pixels or a percentage. - * @param integer $createNew If true the current image will be cloned, resized, cropped and returned. - * - * @return Image - * - * @since 1.0 - */ - public function cropResize($width, $height, $createNew = true) - { - $width = $this->sanitizeWidth($width, $height); - $height = $this->sanitizeHeight($height, $width); - - $resizewidth = $width; - $resizeheight = $height; - - if (($this->getWidth() / $width) < ($this->getHeight() / $height)) - { - $resizeheight = 0; - } - else - { - $resizewidth = 0; - } - - return $this->resize($resizewidth, $resizeheight, $createNew)->crop($width, $height, null, null, false); - } - - /** - * Method to rotate the current image. - * - * @param mixed $angle The angle of rotation for the image - * @param integer $background The background color to use when areas are added due to rotation - * @param boolean $createNew If true the current image will be cloned, rotated and returned; else - * the current image will be rotated and returned. - * - * @return Image - * - * @since 1.0 - * @throws \LogicException - */ - public function rotate($angle, $background = -1, $createNew = true) - { - // Sanitize input - $angle = (float) $angle; - - // Create the new truecolor image handle. - $handle = imagecreatetruecolor($this->getWidth(), $this->getHeight()); - - // Make background transparent if no external background color is provided. - if ($background == -1) - { - // Allow transparency for the new image handle. - imagealphablending($handle, false); - imagesavealpha($handle, true); - - $background = imagecolorallocatealpha($handle, 0, 0, 0, 127); - } - - // Copy the image - imagecopy($handle, $this->getHandle(), 0, 0, 0, 0, $this->getWidth(), $this->getHeight()); - - // Rotate the image - $handle = imagerotate($handle, $angle, $background); - - // If we are resizing to a new image, create a new Image object. - if ($createNew) - { - return new static($handle); - } - - // Swap out the current handle for the new image handle. - $this->destroy(); - - $this->handle = $handle; - - return $this; - } - - /** - * Method to flip the current image. - * - * @param integer $mode The flip mode for flipping the image {@link http://php.net/imageflip#refsect1-function.imageflip-parameters} - * @param boolean $createNew If true the current image will be cloned, flipped and returned; else - * the current image will be flipped and returned. - * - * @return Image - * - * @since 1.2.0 - * @throws \LogicException - */ - public function flip($mode, $createNew = true) - { - // Create the new truecolor image handle. - $handle = imagecreatetruecolor($this->getWidth(), $this->getHeight()); - - // Copy the image - imagecopy($handle, $this->getHandle(), 0, 0, 0, 0, $this->getWidth(), $this->getHeight()); - - // Flip the image - if (!imageflip($handle, $mode)) - { - throw new \LogicException('Unable to flip the image.'); - } - - // If we are resizing to a new image, create a new Image object. - if ($createNew) - { - // @codeCoverageIgnoreStart - return new static($handle); - - // @codeCoverageIgnoreEnd - } - - // Free the memory from the current handle - $this->destroy(); - - // Swap out the current handle for the new image handle. - $this->handle = $handle; - - return $this; - } - - /** - * Watermark the image - * - * @param Image $watermark The Image object containing the watermark graphic - * @param integer $transparency The transparency to use for the watermark graphic - * @param integer $bottomMargin The margin from the bottom of this image - * @param integer $rightMargin The margin from the right side of this image - * - * @return Image - * - * @since 1.3.0 - * @link https://secure.php.net/manual/en/image.examples-watermark.php - */ - public function watermark(Image $watermark, $transparency = 50, $bottomMargin = 0, $rightMargin = 0) - { - imagecopymerge( - $this->getHandle(), - $watermark->getHandle(), - $this->getWidth() - $watermark->getWidth() - $rightMargin, - $this->getHeight() - $watermark->getHeight() - $bottomMargin, - 0, - 0, - $watermark->getWidth(), - $watermark->getHeight(), - $transparency - ); - - return $this; - } - - /** - * Method to write the current image out to a file or output directly. - * - * @param mixed $path The filesystem path to save the image. - * When null, the raw image stream will be outputted directly. - * @param integer $type The image type to save the file as. - * @param array $options The image type options to use in saving the file. - * For PNG and JPEG formats use `quality` key to set compression level (0..9 and 0..100) - * - * @return boolean - * - * @link http://www.php.net/manual/image.constants.php - * @since 1.0 - * @throws \LogicException - */ - public function toFile($path, $type = IMAGETYPE_JPEG, array $options = []) - { - switch ($type) - { - case IMAGETYPE_GIF: - return imagegif($this->getHandle(), $path); - break; - - case IMAGETYPE_PNG: - return imagepng($this->getHandle(), $path, (array_key_exists('quality', $options)) ? $options['quality'] : 0); - break; - } - - // Case IMAGETYPE_JPEG & default - return imagejpeg($this->getHandle(), $path, (array_key_exists('quality', $options)) ? $options['quality'] : 100); - } - - /** - * Method to get an image filter instance of a specified type. - * - * @param string $type The image filter type to get. - * - * @return ImageFilter - * - * @since 1.0 - * @throws \RuntimeException - */ - protected function getFilterInstance($type) - { - // Sanitize the filter type. - $type = strtolower(preg_replace('#[^A-Z0-9_]#i', '', $type)); - - // Verify that the filter type exists. - $className = __NAMESPACE__ . '\\Filter\\' . ucfirst($type); - - if (!class_exists($className)) - { - $this->getLogger()->error('The ' . ucfirst($type) . ' image filter is not available.'); - - throw new \RuntimeException('The ' . ucfirst($type) . ' image filter is not available.'); - } - - // Instantiate the filter object. - $instance = new $className($this->getHandle()); - - // Verify that the filter type is valid. - if (!($instance instanceof ImageFilter)) - { - $this->getLogger()->error('The ' . ucfirst($type) . ' image filter is not valid.'); - - throw new \RuntimeException('The ' . ucfirst($type) . ' image filter is not valid.'); - } - - return $instance; - } - - /** - * Method to get the new dimensions for a resized image. - * - * @param integer $width The width of the resized image in pixels. - * @param integer $height The height of the resized image in pixels. - * @param integer $scaleMethod The method to use for scaling - * - * @return \stdClass - * - * @since 1.0 - * @throws \InvalidArgumentException If width, height or both given as zero - */ - protected function prepareDimensions($width, $height, $scaleMethod) - { - // Instantiate variables. - $dimensions = new \stdClass; - - switch ($scaleMethod) - { - case self::SCALE_FILL: - $dimensions->width = (int) round($width); - $dimensions->height = (int) round($height); - break; - - case self::SCALE_INSIDE: - case self::SCALE_OUTSIDE: - case self::SCALE_FIT: - $rx = ($width > 0) ? ($this->getWidth() / $width) : 0; - $ry = ($height > 0) ? ($this->getHeight() / $height) : 0; - - if ($scaleMethod != self::SCALE_OUTSIDE) - { - $ratio = max($rx, $ry); - } - else - { - $ratio = min($rx, $ry); - } - - $dimensions->width = (int) round($this->getWidth() / $ratio); - $dimensions->height = (int) round($this->getHeight() / $ratio); - break; - - default: - throw new \InvalidArgumentException('Invalid scale method.'); - break; - } - - return $dimensions; - } - - /** - * Method to sanitize a height value. - * - * @param mixed $height The input height value to sanitize. - * @param mixed $width The input width value for reference. - * - * @return integer - * - * @since 1.0 - */ - protected function sanitizeHeight($height, $width) - { - // If no height was given we will assume it is a square and use the width. - $height = ($height === null) ? $width : $height; - - // If we were given a percentage, calculate the integer value. - if (preg_match('/^[0-9]+(\.[0-9]+)?\%$/', $height)) - { - $height = (int) round($this->getHeight() * (float) str_replace('%', '', $height) / 100); - } - else - // Else do some rounding so we come out with a sane integer value. - { - $height = (int) round((float) $height); - } - - return $height; - } - - /** - * Method to sanitize an offset value like left or top. - * - * @param mixed $offset An offset value. - * - * @return integer - * - * @since 1.0 - */ - protected function sanitizeOffset($offset) - { - return (int) round((float) $offset); - } - - /** - * Method to sanitize a width value. - * - * @param mixed $width The input width value to sanitize. - * @param mixed $height The input height value for reference. - * - * @return integer - * - * @since 1.0 - */ - protected function sanitizeWidth($width, $height) - { - // If no width was given we will assume it is a square and use the height. - $width = ($width === null) ? $height : $width; - - // If we were given a percentage, calculate the integer value. - if (preg_match('/^[0-9]+(\.[0-9]+)?\%$/', $width)) - { - $width = (int) round($this->getWidth() * (float) str_replace('%', '', $width) / 100); - } - else - // Else do some rounding so we come out with a sane integer value. - { - $width = (int) round((float) $width); - } - - return $width; - } - - /** - * Method to destroy an image handle and - * free the memory associated with the handle - * - * @return boolean True on success, false on failure or if no image is loaded - * - * @since 1.0 - */ - public function destroy() - { - if ($this->isLoaded()) - { - return imagedestroy($this->getHandle()); - } - - return false; - } - - /** - * Method to call the destroy() method one last time - * to free any memory when the object is unset - * - * @see Image::destroy() - * @since 1.0 - */ - public function __destruct() - { - $this->destroy(); - } - - /** - * Method for set option of generate thumbnail method - * - * @param boolean $quality True for best quality. False for best speed. - * - * @return void - * - * @since 1.4.0 - */ - public function setThumbnailGenerate($quality = true) - { - $this->generateBestQuality = (boolean) $quality; - } -} diff --git a/libraries/vendor/joomla/image/src/ImageFilter.php b/libraries/vendor/joomla/image/src/ImageFilter.php deleted file mode 100644 index bf2cec381d881..0000000000000 --- a/libraries/vendor/joomla/image/src/ImageFilter.php +++ /dev/null @@ -1,90 +0,0 @@ -getLogger()->error('The imagefilter function for PHP is not available.'); - - throw new \RuntimeException('The imagefilter function for PHP is not available.'); - } - - // Make sure the file handle is valid. - if (!is_resource($handle) || (get_resource_type($handle) != 'gd')) - { - $this->getLogger()->error('The image handle is invalid for the image filter.'); - - throw new \InvalidArgumentException('The image handle is invalid for the image filter.'); - } - - $this->handle = $handle; - } - - /** - * Get the logger. - * - * @return LoggerInterface - * - * @since 1.0 - */ - public function getLogger() - { - // If a logger hasn't been set, use NullLogger - if (! ($this->logger instanceof LoggerInterface)) - { - $this->logger = new NullLogger; - } - - return $this->logger; - } - - /** - * Method to apply a filter to an image resource. - * - * @param array $options An array of options for the filter. - * - * @return void - * - * @since 1.0 - */ - abstract public function execute(array $options = []); -} diff --git a/libraries/vendor/joomla/input/LICENSE b/libraries/vendor/joomla/input/LICENSE deleted file mode 100644 index df50810b85774..0000000000000 --- a/libraries/vendor/joomla/input/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/input/src/Cli.php b/libraries/vendor/joomla/input/src/Cli.php deleted file mode 100644 index dc489e0df7c7d..0000000000000 --- a/libraries/vendor/joomla/input/src/Cli.php +++ /dev/null @@ -1,217 +0,0 @@ -filter = $options['filter']; - } - else - { - $this->filter = new Filter\InputFilter; - } - - // Get the command line options - $this->parseArguments(); - - // Set the options for the class. - $this->options = $options; - } - - /** - * Method to serialize the input. - * - * @return string The serialized input. - * - * @since 1.0 - */ - public function serialize() - { - // Load all of the inputs. - $this->loadAllInputs(); - - // Remove $_ENV and $_SERVER from the inputs. - $inputs = $this->inputs; - unset($inputs['env']); - unset($inputs['server']); - - // Serialize the executable, args, options, data, and inputs. - return serialize(array($this->executable, $this->args, $this->options, $this->data, $inputs)); - } - - /** - * Gets a value from the input data. - * - * @param string $name Name of the value to get. - * @param mixed $default Default value to return if variable does not exist. - * @param string $filter Filter to apply to the value. - * - * @return mixed The filtered input value. - * - * @since 1.0 - */ - public function get($name, $default = null, $filter = 'string') - { - return parent::get($name, $default, $filter); - } - - /** - * Method to unserialize the input. - * - * @param string $input The serialized input. - * - * @return void - * - * @since 1.0 - */ - public function unserialize($input) - { - // Unserialize the executable, args, options, data, and inputs. - list($this->executable, $this->args, $this->options, $this->data, $this->inputs) = unserialize($input); - - // Load the filter. - if (isset($this->options['filter'])) - { - $this->filter = $this->options['filter']; - } - else - { - $this->filter = new Filter\InputFilter; - } - } - - /** - * Initialise the options and arguments - * - * Not supported: -abc c-value - * - * @return void - * - * @since 1.0 - */ - protected function parseArguments() - { - $argv = $_SERVER['argv']; - - $this->executable = array_shift($argv); - - $out = array(); - - for ($i = 0, $j = count($argv); $i < $j; $i++) - { - $arg = $argv[$i]; - - // --foo --bar=baz - if (substr($arg, 0, 2) === '--') - { - $eqPos = strpos($arg, '='); - - // --foo - if ($eqPos === false) - { - $key = substr($arg, 2); - - // --foo value - if ($i + 1 < $j && $argv[$i + 1][0] !== '-') - { - $value = $argv[$i + 1]; - $i++; - } - else - { - $value = isset($out[$key]) ? $out[$key] : true; - } - - $out[$key] = $value; - } - - // --bar=baz - else - { - $key = substr($arg, 2, $eqPos - 2); - $value = substr($arg, $eqPos + 1); - $out[$key] = $value; - } - } - // -k=value -abc - elseif (substr($arg, 0, 1) === '-') - { - // -k=value - if (substr($arg, 2, 1) === '=') - { - $key = substr($arg, 1, 1); - $value = substr($arg, 3); - $out[$key] = $value; - } - // -abc - else - { - $chars = str_split(substr($arg, 1)); - - foreach ($chars as $char) - { - $key = $char; - $value = isset($out[$key]) ? $out[$key] : true; - $out[$key] = $value; - } - - // -a a-value - if ((count($chars) === 1) && ($i + 1 < $j) && ($argv[$i + 1][0] !== '-')) - { - $out[$key] = $argv[$i + 1]; - $i++; - } - } - } - // Plain-arg - else - { - $this->args[] = $arg; - } - } - - $this->data = $out; - } -} diff --git a/libraries/vendor/joomla/input/src/Cookie.php b/libraries/vendor/joomla/input/src/Cookie.php deleted file mode 100644 index e36b7ea66aa18..0000000000000 --- a/libraries/vendor/joomla/input/src/Cookie.php +++ /dev/null @@ -1,90 +0,0 @@ -filter = $options['filter']; - } - else - { - $this->filter = new Filter\InputFilter; - } - - // Set the data source. - $this->data = & $_COOKIE; - - // Set the options for the class. - $this->options = $options; - } - - /** - * Sets a value - * - * @param string $name Name of the value to set. - * @param mixed $value Value to assign to the input. - * @param integer $expire The time the cookie expires. This is a Unix timestamp so is in number - * of seconds since the epoch. In other words, you'll most likely set this - * with the time() function plus the number of seconds before you want it - * to expire. Or you might use mktime(). time()+60*60*24*30 will set the - * cookie to expire in 30 days. If set to 0, or omitted, the cookie will - * expire at the end of the session (when the browser closes). - * @param string $path The path on the server in which the cookie will be available on. If set - * to '/', the cookie will be available within the entire domain. If set to - * '/foo/', the cookie will only be available within the /foo/ directory and - * all sub-directories such as /foo/bar/ of domain. The default value is the - * current directory that the cookie is being set in. - * @param string $domain The domain that the cookie is available to. To make the cookie available - * on all subdomains of example.com (including example.com itself) then you'd - * set it to '.example.com'. Although some browsers will accept cookies without - * the initial ., RFC 2109 requires it to be included. Setting the domain to - * 'www.example.com' or '.www.example.com' will make the cookie only available - * in the www subdomain. - * @param boolean $secure Indicates that the cookie should only be transmitted over a secure HTTPS - * connection from the client. When set to TRUE, the cookie will only be set - * if a secure connection exists. On the server-side, it's on the programmer - * to send this kind of cookie only on secure connection (e.g. with respect - * to $_SERVER["HTTPS"]). - * @param boolean $httpOnly When TRUE the cookie will be made accessible only through the HTTP protocol. - * This means that the cookie won't be accessible by scripting languages, such - * as JavaScript. This setting can effectively help to reduce identity theft - * through XSS attacks (although it is not supported by all browsers). - * - * @return void - * - * @link http://www.ietf.org/rfc/rfc2109.txt - * @see setcookie() - * @since 1.0 - */ - public function set($name, $value, $expire = 0, $path = '', $domain = '', $secure = false, $httpOnly = false) - { - setcookie($name, $value, $expire, $path, $domain, $secure, $httpOnly); - - $this->data[$name] = $value; - } -} diff --git a/libraries/vendor/joomla/input/src/Files.php b/libraries/vendor/joomla/input/src/Files.php deleted file mode 100644 index 49533a5a801b1..0000000000000 --- a/libraries/vendor/joomla/input/src/Files.php +++ /dev/null @@ -1,127 +0,0 @@ -filter = $options['filter']; - } - else - { - $this->filter = new Filter\InputFilter; - } - - // Set the data source. - $this->data = & $_FILES; - - // Set the options for the class. - $this->options = $options; - } - - /** - * Gets a value from the input data. - * - * @param string $name The name of the input property (usually the name of the files INPUT tag) to get. - * @param mixed $default The default value to return if the named property does not exist. - * @param string $filter The filter to apply to the value. - * - * @return mixed The filtered input value. - * - * @see \Joomla\Filter\InputFilter::clean() - * @since 1.0 - */ - public function get($name, $default = null, $filter = 'cmd') - { - if (isset($this->data[$name])) - { - $results = $this->decodeData( - array( - $this->data[$name]['name'], - $this->data[$name]['type'], - $this->data[$name]['tmp_name'], - $this->data[$name]['error'], - $this->data[$name]['size'] - ) - ); - - return $results; - } - - return $default; - } - - /** - * Method to decode a data array. - * - * @param array $data The data array to decode. - * - * @return array - * - * @since 1.0 - */ - protected function decodeData(array $data) - { - $result = array(); - - if (is_array($data[0])) - { - foreach ($data[0] as $k => $v) - { - $result[$k] = $this->decodeData(array($data[0][$k], $data[1][$k], $data[2][$k], $data[3][$k], $data[4][$k])); - } - - return $result; - } - - return array('name' => $data[0], 'type' => $data[1], 'tmp_name' => $data[2], 'error' => $data[3], 'size' => $data[4]); - } - - /** - * Sets a value. - * - * @param string $name The name of the input property to set. - * @param mixed $value The value to assign to the input property. - * - * @return void - * - * @since 1.0 - */ - public function set($name, $value) - { - // Restricts the usage of parent's set method. - } -} diff --git a/libraries/vendor/joomla/input/src/Input.php b/libraries/vendor/joomla/input/src/Input.php deleted file mode 100644 index 2c259d44ad161..0000000000000 --- a/libraries/vendor/joomla/input/src/Input.php +++ /dev/null @@ -1,406 +0,0 @@ -filter = $options['filter']; - } - else - { - $this->filter = new Filter\InputFilter; - } - - if (is_null($source)) - { - $this->data = &$_REQUEST; - } - else - { - $this->data = $source; - } - - // Set the options for the class. - $this->options = $options; - } - - /** - * Magic method to get an input object - * - * @param mixed $name Name of the input object to retrieve. - * - * @return Input The request input object - * - * @since 1.0 - */ - public function __get($name) - { - if (isset($this->inputs[$name])) - { - return $this->inputs[$name]; - } - - $className = '\\Joomla\\Input\\' . ucfirst($name); - - if (class_exists($className)) - { - $this->inputs[$name] = new $className(null, $this->options); - - return $this->inputs[$name]; - } - - $superGlobal = '_' . strtoupper($name); - - if (isset($GLOBALS[$superGlobal])) - { - $this->inputs[$name] = new Input($GLOBALS[$superGlobal], $this->options); - - return $this->inputs[$name]; - } - - // TODO throw an exception - } - - /** - * Get the number of variables. - * - * @return integer The number of variables in the input. - * - * @since 1.0 - * @see Countable::count() - */ - public function count() - { - return count($this->data); - } - - /** - * Gets a value from the input data. - * - * @param string $name Name of the value to get. - * @param mixed $default Default value to return if variable does not exist. - * @param string $filter Filter to apply to the value. - * - * @return mixed The filtered input value. - * - * @see \Joomla\Filter\InputFilter::clean() - * @since 1.0 - */ - public function get($name, $default = null, $filter = 'cmd') - { - if (isset($this->data[$name])) - { - return $this->filter->clean($this->data[$name], $filter); - } - - return $default; - } - - /** - * Gets an array of values from the request. - * - * @param array $vars Associative array of keys and filter types to apply. - * If empty and datasource is null, all the input data will be returned - * but filtered using the default case in JFilterInput::clean. - * @param mixed $datasource Array to retrieve data from, or null - * - * @return mixed The filtered input data. - * - * @since 1.0 - */ - public function getArray(array $vars = array(), $datasource = null) - { - if (empty($vars) && is_null($datasource)) - { - $vars = $this->data; - } - - $results = array(); - - foreach ($vars as $k => $v) - { - if (is_array($v)) - { - if (is_null($datasource)) - { - $results[$k] = $this->getArray($v, $this->get($k, null, 'array')); - } - else - { - $results[$k] = $this->getArray($v, $datasource[$k]); - } - } - else - { - if (is_null($datasource)) - { - $results[$k] = $this->get($k, null, $v); - } - elseif (isset($datasource[$k])) - { - $results[$k] = $this->filter->clean($datasource[$k], $v); - } - else - { - $results[$k] = $this->filter->clean(null, $v); - } - } - } - - return $results; - } - - /** - * Sets a value - * - * @param string $name Name of the value to set. - * @param mixed $value Value to assign to the input. - * - * @return void - * - * @since 1.0 - */ - public function set($name, $value) - { - $this->data[$name] = $value; - } - - /** - * Define a value. The value will only be set if there's no value for the name or if it is null. - * - * @param string $name Name of the value to define. - * @param mixed $value Value to assign to the input. - * - * @return void - * - * @since 1.0 - */ - public function def($name, $value) - { - if (isset($this->data[$name])) - { - return; - } - - $this->data[$name] = $value; - } - - /** - * Check if a value name exists. - * - * @param string $name Value name - * - * @return boolean - * - * @since 1.2.0 - */ - public function exists($name) - { - return isset($this->data[$name]); - } - - /** - * Magic method to get filtered input data. - * - * @param string $name Name of the filter type prefixed with 'get'. - * @param array $arguments [0] The name of the variable [1] The default value. - * - * @return mixed The filtered input value. - * - * @since 1.0 - */ - public function __call($name, $arguments) - { - if (substr($name, 0, 3) == 'get') - { - $filter = substr($name, 3); - - $default = null; - - if (isset($arguments[1])) - { - $default = $arguments[1]; - } - - return $this->get($arguments[0], $default, $filter); - } - } - - /** - * Gets the request method. - * - * @return string The request method. - * - * @since 1.0 - */ - public function getMethod() - { - $method = strtoupper($_SERVER['REQUEST_METHOD']); - - return $method; - } - - /** - * Method to serialize the input. - * - * @return string The serialized input. - * - * @since 1.0 - */ - public function serialize() - { - // Load all of the inputs. - $this->loadAllInputs(); - - // Remove $_ENV and $_SERVER from the inputs. - $inputs = $this->inputs; - unset($inputs['env']); - unset($inputs['server']); - - // Serialize the options, data, and inputs. - return serialize(array($this->options, $this->data, $inputs)); - } - - /** - * Method to unserialize the input. - * - * @param string $input The serialized input. - * - * @return void - * - * @since 1.0 - */ - public function unserialize($input) - { - // Unserialize the options, data, and inputs. - list($this->options, $this->data, $this->inputs) = unserialize($input); - - // Load the filter. - if (isset($this->options['filter'])) - { - $this->filter = $this->options['filter']; - } - else - { - $this->filter = new Filter\InputFilter; - } - } - - /** - * Method to load all of the global inputs. - * - * @return void - * - * @since 1.0 - */ - protected function loadAllInputs() - { - if (!self::$loaded) - { - // Load up all the globals. - foreach ($GLOBALS as $global => $data) - { - // Check if the global starts with an underscore. - if (strpos($global, '_') === 0) - { - // Convert global name to input name. - $global = strtolower($global); - $global = substr($global, 1); - - // Get the input. - $this->$global; - } - } - - self::$loaded = true; - } - } -} diff --git a/libraries/vendor/joomla/input/src/Json.php b/libraries/vendor/joomla/input/src/Json.php deleted file mode 100644 index 12a752497a86e..0000000000000 --- a/libraries/vendor/joomla/input/src/Json.php +++ /dev/null @@ -1,86 +0,0 @@ -filter = $options['filter']; - } - else - { - $this->filter = new Filter\InputFilter; - } - - if (is_null($source)) - { - $this->raw = file_get_contents('php://input'); - - // This is a workaround for where php://input has already been read. - // See note under php://input on http://php.net/manual/en/wrappers.php.php - if (empty($this->raw) && isset($GLOBALS['HTTP_RAW_POST_DATA'])) - { - $this->raw = $GLOBALS['HTTP_RAW_POST_DATA']; - } - - $this->data = json_decode($this->raw, true); - - if (!is_array($this->data)) - { - $this->data = array(); - } - } - else - { - $this->data = $source; - } - - // Set the options for the class. - $this->options = $options; - } - - /** - * Gets the raw JSON string from the request. - * - * @return string The raw JSON string from the request. - * - * @since 1.0 - */ - public function getRaw() - { - return $this->raw; - } -} diff --git a/libraries/vendor/joomla/ldap/LICENSE b/libraries/vendor/joomla/ldap/LICENSE deleted file mode 100644 index df50810b85774..0000000000000 --- a/libraries/vendor/joomla/ldap/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/ldap/src/LdapClient.php b/libraries/vendor/joomla/ldap/src/LdapClient.php deleted file mode 100644 index fd2459345c6e8..0000000000000 --- a/libraries/vendor/joomla/ldap/src/LdapClient.php +++ /dev/null @@ -1,807 +0,0 @@ -get($var); - - if ($param) - { - $this->$var = $param; - } - } - } - } - } - - /** - * Class destructor. - * - * @since 1.3.0 - */ - public function __destruct() - { - $this->close(); - } - - /** - * Connect to an LDAP server - * - * @return boolean - * - * @since 1.0 - */ - public function connect() - { - if ($this->host == '') - { - return false; - } - - $this->resource = ldap_connect($this->host, $this->port); - - if (!$this->resource) - { - return false; - } - - if ($this->use_ldapV3 && !ldap_set_option($this->resource, LDAP_OPT_PROTOCOL_VERSION, 3)) - { - return false; - } - - if (!ldap_set_option($this->resource, LDAP_OPT_REFERRALS, (int) $this->no_referrals)) - { - return false; - } - - if ($this->negotiate_tls && !ldap_start_tls($this->resource)) - { - return false; - } - - return true; - } - - /** - * Close the connection - * - * @return void - * - * @since 1.0 - */ - public function close() - { - if ($this->isConnected()) - { - $this->unbind(); - } - - $this->resource = null; - } - - /** - * Sets the DN with some template replacements - * - * @param string $username The username - * @param string $nosub ... - * - * @return void - * - * @since 1.0 - */ - public function setDn($username, $nosub = 0) - { - if ($this->users_dn == '' || $nosub) - { - $this->dn = $username; - } - elseif (strlen($username)) - { - $this->dn = str_replace('[username]', $username, $this->users_dn); - } - else - { - $this->dn = ''; - } - } - - /** - * Get the configured DN - * - * @return string - * - * @since 1.0 - */ - public function getDn() - { - return $this->dn; - } - - /** - * Anonymously binds to LDAP directory - * - * @return boolean - * - * @since 1.0 - */ - public function anonymous_bind() - { - if (!$this->isConnected()) - { - if (!$this->connect()) - { - return false; - } - } - - $this->isBound = ldap_bind($this->resource); - - return $this->isBound; - } - - /** - * Binds to the LDAP directory - * - * @param string $username The username - * @param string $password The password - * @param string $nosub ... - * - * @return boolean - * - * @since 1.0 - */ - public function bind($username = null, $password = null, $nosub = 0) - { - if (!$this->isConnected()) - { - if (!$this->connect()) - { - return false; - } - } - - if (is_null($username)) - { - $username = $this->username; - } - - if (is_null($password)) - { - $password = $this->password; - } - - $this->setDn($username, $nosub); - - $this->isBound = ldap_bind($this->resource, $this->getDn(), $password); - - return $this->isBound; - } - - /** - * Unbinds from the LDAP directory - * - * @return boolean - * - * @since 1.3.0 - */ - public function unbind() - { - if ($this->isBound && $this->resource && is_resource($this->resource)) - { - return ldap_unbind($this->resource); - } - - return true; - } - - /** - * Perform an LDAP search using comma separated search strings - * - * @param string $search search string of search values - * - * @return array Search results - * - * @since 1.0 - */ - public function simple_search($search) - { - $results = explode(';', $search); - - foreach ($results as $key => $result) - { - $results[$key] = '(' . $result . ')'; - } - - return $this->search($results); - } - - /** - * Performs an LDAP search - * - * @param array $filters Search Filters (array of strings) - * @param string $dnoverride DN Override - * @param array $attributes An array of attributes to return (if empty, all fields are returned). - * - * @return array Multidimensional array of results - * - * @since 1.0 - */ - public function search(array $filters, $dnoverride = null, array $attributes = array()) - { - $result = array(); - - if (!$this->isBound || !$this->isConnected()) - { - return $result; - } - - if ($dnoverride) - { - $dn = $dnoverride; - } - else - { - $dn = $this->base_dn; - } - - foreach ($filters as $searchFilter) - { - $searchResult = ldap_search($this->resource, $dn, $searchFilter, $attributes); - - if ($searchResult && ($count = ldap_count_entries($this->resource, $searchResult)) > 0) - { - for ($i = 0; $i < $count; $i++) - { - $result[$i] = array(); - - if (!$i) - { - $firstentry = ldap_first_entry($this->resource, $searchResult); - } - else - { - $firstentry = ldap_next_entry($this->resource, $firstentry); - } - - // Load user-specified attributes - $attributeResult = ldap_get_attributes($this->resource, $firstentry); - - // LDAP returns an array of arrays, fit this into attributes result array - foreach ($attributeResult as $ki => $ai) - { - if (is_array($ai)) - { - $subcount = $ai['count']; - $result[$i][$ki] = array(); - - for ($k = 0; $k < $subcount; $k++) - { - $result[$i][$ki][$k] = $ai[$k]; - } - } - } - - $result[$i]['dn'] = ldap_get_dn($this->resource, $firstentry); - } - } - } - - return $result; - } - - /** - * Replace attribute values with new ones - * - * @param string $dn The DN which contains the attribute you want to replace - * @param string $attribute The attribute values you want to replace - * - * @return boolean - * - * @since 1.0 - */ - public function replace($dn, $attribute) - { - if (!$this->isBound || !$this->isConnected()) - { - return false; - } - - return ldap_mod_replace($this->resource, $dn, $attribute); - } - - /** - * Modify an LDAP entry - * - * @param string $dn The DN which contains the attribute you want to modify - * @param string $attribute The attribute values you want to modify - * - * @return boolean - * - * @since 1.0 - */ - public function modify($dn, $attribute) - { - if (!$this->isBound || !$this->isConnected()) - { - return false; - } - - return ldap_modify($this->resource, $dn, $attribute); - } - - /** - * Delete attribute values from current attributes - * - * @param string $dn The DN which contains the attribute you want to remove - * @param string $attribute The attribute values you want to remove - * - * @return boolean - * - * @since 1.0 - */ - public function remove($dn, $attribute) - { - if (!$this->isBound || !$this->isConnected()) - { - return false; - } - - return ldap_mod_del($this->resource, $dn, $attribute); - } - - /** - * Compare value of attribute found in entry specified with DN - * - * @param string $dn The DN which contains the attribute you want to compare - * @param string $attribute The attribute whose value you want to compare - * @param string $value The value you want to check against the LDAP attribute - * - * @return boolean|integer Boolean result of the comparison or -1 on error - * - * @since 1.0 - */ - public function compare($dn, $attribute, $value) - { - if (!$this->isBound || !$this->isConnected()) - { - return false; - } - - return ldap_compare($this->resource, $dn, $attribute, $value); - } - - /** - * Read attributes of a given DN - * - * @param string $dn The DN of the object you want to read - * - * @return array|boolean Array of attributes for the given DN or boolean false on failure - * - * @since 1.0 - */ - public function read($dn) - { - if (!$this->isBound || !$this->isConnected()) - { - return false; - } - - $base = substr($dn, strpos($dn, ',') + 1); - $cn = substr($dn, 0, strpos($dn, ',')); - $result = ldap_read($this->resource, $base, $cn); - - if ($result === false) - { - return false; - } - - return ldap_get_entries($this->resource, $result); - } - - /** - * Delete an entry from a directory - * - * @param string $dn The DN of the object you want to delete - * - * @return boolean - * - * @since 1.0 - */ - public function delete($dn) - { - if (!$this->isBound || !$this->isConnected()) - { - return false; - } - - return ldap_delete($this->resource, $dn); - } - - /** - * Add entries to LDAP directory - * - * @param string $dn The DN where you want to put the object - * @param array $entries An array of arrays describing the object to add - * - * @return boolean - * - * @since 1.0 - */ - public function create($dn, array $entries) - { - if (!$this->isBound || !$this->isConnected()) - { - return false; - } - - return ldap_add($this->resource, $dn, $entries); - } - - /** - * Add attribute values to current attributes - * - * @param string $dn The DN of the entry to add the attribute - * @param array $entry An array of arrays with attributes to add - * - * @return boolean - * - * @since 1.0 - */ - public function add($dn, array $entry) - { - if (!$this->isBound || !$this->isConnected()) - { - return false; - } - - return ldap_mod_add($this->resource, $dn, $entry); - } - - /** - * Modify the name of an entry - * - * @param string $dn The DN of the entry at the moment - * @param string $newdn The DN of the entry should be (only cn=newvalue) - * @param string $newparent The full DN of the parent (null by default) - * @param boolean $deleteolddn Delete the old values (default) - * - * @return boolean - * - * @since 1.0 - */ - public function rename($dn, $newdn, $newparent, $deleteolddn) - { - if (!$this->isBound || !$this->isConnected()) - { - return false; - } - - return ldap_rename($this->resource, $dn, $newdn, $newparent, $deleteolddn); - } - - /** - * Escape a string - * - * @param string $value The subject string - * @param string $ignore Characters to ignore when escaping. - * @param integer $flags The context the escaped string will be used in LDAP_ESCAPE_FILTER or LDAP_ESCAPE_DN - * - * @return string - * - * @since 1.2.0 - */ - public function escape($value, $ignore = '', $flags = 0) - { - return ldap_escape($value, $ignore, $flags); - } - - /** - * Return the LDAP error message of the last LDAP command - * - * @return string - * - * @since 1.0 - */ - public function getErrorMsg() - { - if (!$this->isBound || !$this->isConnected()) - { - return ''; - } - - return ldap_error($this->resource); - } - - /** - * Check if the connection is established - * - * @return boolean - * - * @since 1.3.0 - */ - public function isConnected() - { - return $this->resource && is_resource($this->resource); - } - - /** - * Converts a dot notation IP address to net address (e.g. for Netware, etc) - * - * @param string $ip IP Address (e.g. xxx.xxx.xxx.xxx) - * - * @return string - * - * @since 1.0 - */ - public static function ipToNetAddress($ip) - { - $parts = explode('.', $ip); - $address = '1#'; - - foreach ($parts as $int) - { - $tmp = dechex($int); - - if (strlen($tmp) != 2) - { - $tmp = '0' . $tmp; - } - - $address .= '\\' . $tmp; - } - - return $address; - } - - /** - * Extract readable network address from the LDAP encoded networkAddress attribute. - * - * Please keep this document block and author attribution in place. - * - * Novell Docs, see: http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5624.html#sdk5624 - * for Address types: http://developer.novell.com/ndk/doc/ndslib/index.html?page=/ndk/doc/ndslib/schm_enu/data/sdk4170.html - * LDAP Format, String: - * taggedData = uint32String "#" octetstring - * byte 0 = uint32String = Address Type: 0= IPX Address; 1 = IP Address - * byte 1 = char = "#" - separator - * byte 2+ = octetstring - the ordinal value of the address - * Note: with eDirectory 8.6.2, the IP address (type 1) returns - * correctly, however, an IPX address does not seem to. eDir 8.7 may correct this. - * Enhancement made by Merijn van de Schoot: - * If addresstype is 8 (UDP) or 9 (TCP) do some additional parsing like still returning the IP address - * - * @param string $networkaddress The network address - * - * @return array - * - * @author Jay Burrell, Systems & Networks, Mississippi State University - * @since 1.0 - */ - public static function ldapNetAddr($networkaddress) - { - $addr = ""; - $addrtype = (int) substr($networkaddress, 0, 1); - - // Throw away bytes 0 and 1 which should be the addrtype and the "#" separator - $networkaddress = substr($networkaddress, 2); - - if (($addrtype == 8) || ($addrtype = 9)) - { - // TODO 1.6: If UDP or TCP, (TODO fill addrport and) strip portnumber information from address - $networkaddress = substr($networkaddress, (strlen($networkaddress) - 4)); - } - - $addrtypes = array( - 'IPX', - 'IP', - 'SDLC', - 'Token Ring', - 'OSI', - 'AppleTalk', - 'NetBEUI', - 'Socket', - 'UDP', - 'TCP', - 'UDP6', - 'TCP6', - 'Reserved (12)', - 'URL', - 'Count' - ); - - $len = strlen($networkaddress); - - if ($len > 0) - { - for ($i = 0; $i < $len; $i++) - { - $byte = substr($networkaddress, $i, 1); - $addr .= ord($byte); - - if (($addrtype == 1) || ($addrtype == 8) || ($addrtype = 9)) - { - // Dot separate IP addresses... - $addr .= "."; - } - } - - if (($addrtype == 1) || ($addrtype == 8) || ($addrtype = 9)) - { - // Strip last period from end of $addr - $addr = substr($addr, 0, strlen($addr) - 1); - } - } - else - { - $addr .= 'Address not available.'; - } - - return array('protocol' => $addrtypes[$addrtype], 'address' => $addr); - } - - /** - * Generates a LDAP compatible password - * - * @param string $password Clear text password to encrypt - * @param string $type Type of password hash, either md5 or SHA - * - * @return string - * - * @since 1.0 - */ - public static function generatePassword($password, $type = 'md5') - { - switch (strtolower($type)) - { - case 'sha': - return '{SHA}' . base64_encode(pack('H*', sha1($password))); - - case 'md5': - default: - return '{MD5}' . base64_encode(pack('H*', md5($password))); - } - } -} diff --git a/libraries/vendor/joomla/oauth1/LICENSE b/libraries/vendor/joomla/oauth1/LICENSE deleted file mode 100644 index df50810b85774..0000000000000 --- a/libraries/vendor/joomla/oauth1/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/oauth1/src/Client.php b/libraries/vendor/joomla/oauth1/src/Client.php deleted file mode 100644 index 82118c9f7d924..0000000000000 --- a/libraries/vendor/joomla/oauth1/src/Client.php +++ /dev/null @@ -1,623 +0,0 @@ -application = $application; - $this->client = $client ?: HttpFactory::getHttp($options); - $this->input = $input ?: $application->input; - $this->options = $options; - $this->version = $version; - } - - /** - * Method to form the oauth flow. - * - * @return string The access token. - * - * @since 1.0 - * @throws \DomainException - */ - public function authenticate() - { - // Already got some credentials stored? - if ($this->token) - { - $response = $this->verifyCredentials(); - - if ($response) - { - return $this->token; - } - - $this->token = null; - } - - // Check for callback. - if (strcmp($this->version, '1.0a') === 0) - { - $verifier = $this->input->get('oauth_verifier'); - } - else - { - $verifier = $this->input->get('oauth_token'); - } - - if (!empty($verifier)) - { - $session = $this->application->getSession(); - - // Get token form session. - $this->token = [ - 'key' => $session->get('oauth_token.key'), - 'secret' => $session->get('oauth_token.secret') - ]; - - // Verify the returned request token. - if (strcmp($this->token['key'], $this->input->get('oauth_token')) !== 0) - { - throw new \DomainException('Bad session!'); - } - - // Set token verifier for 1.0a. - if (strcmp($this->version, '1.0a') === 0) - { - $this->token['verifier'] = $this->input->get('oauth_verifier'); - } - - // Generate access token. - $this->generateAccessToken(); - - // Return the access token. - return $this->token; - } - - // Generate a request token. - $this->generateRequestToken(); - - // Authenticate the user and authorise the app. - $this->authorise(); - } - - /** - * Method used to get a request token. - * - * @return void - * - * @since 1.1.2 - * @throws \DomainException - */ - private function generateRequestToken() - { - $parameters = []; - - // Set the callback URL. - if ($this->getOption('callback')) - { - $parameters['oauth_callback'] = $this->getOption('callback'); - } - - // Make an OAuth request for the Request Token. - $response = $this->oauthRequest($this->getOption('requestTokenURL'), 'POST', $parameters); - - parse_str($response->body, $params); - - if (strcmp($this->version, '1.0a') === 0 && strcmp($params['oauth_callback_confirmed'], 'true') !== 0) - { - throw new \DomainException('Bad request token!'); - } - - // Save the request token. - $this->token = ['key' => $params['oauth_token'], 'secret' => $params['oauth_token_secret']]; - - // Save the request token in session - $session = $this->application->getSession(); - $session->set('oauth_token.key', $this->token['key']); - $session->set('oauth_token.secret', $this->token['secret']); - } - - /** - * Method used to authorise the application. - * - * @return void - * - * @since 1.1.2 - */ - private function authorise() - { - $url = $this->getOption('authoriseURL') . '?oauth_token=' . $this->token['key']; - - if ($this->getOption('scope')) - { - $scope = is_array($this->getOption('scope')) ? implode(' ', $this->getOption('scope')) : $this->getOption('scope'); - $url .= '&scope=' . urlencode($scope); - } - - if ($this->getOption('sendheaders')) - { - $this->application->redirect($url); - } - } - - /** - * Method used to get an access token. - * - * @return void - * - * @since 1.1.2 - */ - private function generateAccessToken() - { - // Set the parameters. - $parameters = [ - 'oauth_token' => $this->token['key'] - ]; - - if (strcmp($this->version, '1.0a') === 0) - { - $parameters = array_merge($parameters, ['oauth_verifier' => $this->token['verifier']]); - } - - // Make an OAuth request for the Access Token. - $response = $this->oauthRequest($this->getOption('accessTokenURL'), 'POST', $parameters); - - parse_str($response->body, $params); - - // Save the access token. - $this->token = ['key' => $params['oauth_token'], 'secret' => $params['oauth_token_secret']]; - } - - /** - * Method used to make an OAuth request. - * - * @param string $url The request URL. - * @param string $method The request method. - * @param array $parameters Array containing request parameters. - * @param mixed $data The POST request data. - * @param array $headers An array of name-value pairs to include in the header of the request - * - * @return \Joomla\Http\Response - * - * @since 1.0 - * @throws \DomainException - */ - public function oauthRequest($url, $method, $parameters, $data = [], $headers = []) - { - // Set the parameters. - $defaults = [ - 'oauth_consumer_key' => $this->getOption('consumer_key'), - 'oauth_signature_method' => 'HMAC-SHA1', - 'oauth_version' => '1.0', - 'oauth_nonce' => $this->generateNonce(), - 'oauth_timestamp' => time() - ]; - - $parameters = array_merge($parameters, $defaults); - - // Do not encode multipart parameters. Do not include $data in the signature if $data is not array. - if (isset($headers['Content-Type']) && strpos($headers['Content-Type'], 'multipart/form-data') !== false || !is_array($data)) - { - $oauthHeaders = $parameters; - } - else - { - // Use all parameters for the signature. - $oauthHeaders = array_merge($parameters, $data); - } - - // Sign the request. - $oauthHeaders = $this->signRequest($url, $method, $oauthHeaders); - - // Get parameters for the Authorisation header. - if (is_array($data)) - { - $oauthHeaders = array_diff_key($oauthHeaders, $data); - } - - // Send the request. - switch ($method) - { - case 'GET': - $url = $this->toUrl($url, $data); - $response = $this->client->get($url, ['Authorization' => $this->createHeader($oauthHeaders)]); - break; - - case 'POST': - $headers = array_merge($headers, ['Authorization' => $this->createHeader($oauthHeaders)]); - $response = $this->client->post($url, $data, $headers); - break; - - case 'PUT': - $headers = array_merge($headers, ['Authorization' => $this->createHeader($oauthHeaders)]); - $response = $this->client->put($url, $data, $headers); - break; - - case 'DELETE': - $headers = array_merge($headers, ['Authorization' => $this->createHeader($oauthHeaders)]); - $response = $this->client->delete($url, $headers); - break; - } - - // Validate the response code. - $this->validateResponse($url, $response); - - return $response; - } - - /** - * Method to validate a response. - * - * @param string $url The request URL. - * @param Response $response The response to validate. - * - * @return void - * - * @since 1.0 - * @throws \DomainException - */ - abstract public function validateResponse($url, $response); - - /** - * Method used to create the header for the POST request. - * - * @param array $parameters Array containing request parameters. - * - * @return string The header. - * - * @since 1.1.2 - */ - private function createHeader(array $parameters): string - { - $header = 'OAuth '; - - foreach ($parameters as $key => $value) - { - if (!strcmp($header, 'OAuth ')) - { - $header .= $key . '="' . $this->safeEncode($value) . '"'; - } - else - { - $header .= ', ' . $key . '="' . $value . '"'; - } - } - - return $header; - } - - /** - * Method to create the URL formed string with the parameters. - * - * @param string $url The request URL. - * @param array $parameters Array containing request parameters. - * - * @return string The formed URL. - * - * @since 1.0 - */ - public function toUrl($url, $parameters) - { - foreach ($parameters as $key => $value) - { - if (is_array($value)) - { - foreach ($value as $k => $v) - { - if (strpos($url, '?') === false) - { - $url .= '?'; - } - else - { - $url .= '&'; - } - - $url .= $key . '=' . $v; - } - } - else - { - if (strpos($value, ' ') !== false) - { - $value = $this->safeEncode($value); - } - - if (strpos($url, '?') === false) - { - $url .= '?'; - } - else - { - $url .= '&'; - } - - $url .= $key . '=' . $value; - } - } - - return $url; - } - - /** - * Method used to sign requests. - * - * @param string $url The URL to sign. - * @param string $method The request method. - * @param array $parameters Array containing request parameters. - * - * @return array The array containing the request parameters, including signature. - * - * @since 1.1.2 - */ - private function signRequest(string $url, string $method, array $parameters): array - { - // Create the signature base string. - $base = $this->baseString($url, $method, $parameters); - - $parameters['oauth_signature'] = $this->safeEncode( - base64_encode( - hash_hmac('sha1', $base, $this->prepareSigningKey(), true) - ) - ); - - return $parameters; - } - - /** - * Prepare the signature base string. - * - * @param string $url The URL to sign. - * @param string $method The request method. - * @param array $parameters Array containing request parameters. - * - * @return string The base string. - * - * @since 1.1.2 - */ - private function baseString(string $url, string $method, array $parameters): string - { - // Sort the parameters alphabetically - uksort($parameters, 'strcmp'); - - // Encode parameters. - foreach ($parameters as $key => $value) - { - $key = $this->safeEncode($key); - - if (is_array($value)) - { - foreach ($value as $k => $v) - { - $v = $this->safeEncode($v); - $kv[] = "{$key}={$v}"; - } - } - else - { - $value = $this->safeEncode($value); - $kv[] = "{$key}={$value}"; - } - } - - // Form the parameter string. - $params = implode('&', $kv); - - // Signature base string elements. - $base = [ - $method, - $url, - $params - ]; - - // Return the base string. - return implode('&', $this->safeEncode($base)); - } - - /** - * Encodes the string or array passed in a way compatible with OAuth. - * If an array is passed each array value will will be encoded. - * - * @param mixed $data The scalar or array to encode. - * - * @return string $data encoded in a way compatible with OAuth. - * - * @since 1.0 - */ - public function safeEncode($data) - { - if (is_array($data)) - { - return array_map([$this, 'safeEncode'], $data); - } - - if (is_scalar($data)) - { - return str_ireplace( - ['+', '%7E'], - [' ', '~'], - rawurlencode($data) - ); - } - - return ''; - } - - /** - * Method used to generate the current nonce. - * - * @return string The current nonce. - * - * @since 1.0 - */ - public static function generateNonce() - { - // The md5s look nicer than numbers. - return md5(microtime() . random_bytes(16)); - } - - /** - * Prepares the OAuth signing key. - * - * @return string The prepared signing key. - * - * @since 1.1.2 - */ - private function prepareSigningKey(): string - { - return $this->safeEncode($this->getOption('consumer_secret')) . '&' . $this->safeEncode(($this->token) ? $this->token['secret'] : ''); - } - - /** - * Returns an HTTP 200 OK response code and a representation of the requesting user if authentication was successful; - * returns a 401 status code and an error message if not. - * - * @return array The decoded JSON response - * - * @since 1.0 - */ - abstract public function verifyCredentials(); - - /** - * Get an option from the OAuth1 Client instance. - * - * @param string $key The name of the option to get - * @param mixed $default Optional default value if the option does not exist - * - * @return mixed The option value - * - * @since 1.0 - */ - public function getOption($key, $default = null) - { - return $this->options[$key] ?? $default; - } - - /** - * Set an option for the OAuth1 Client instance. - * - * @param string $key The name of the option to set - * @param mixed $value The option value to set - * - * @return $this - * - * @since 1.0 - */ - public function setOption($key, $value) - { - $this->options[$key] = $value; - - return $this; - } - - /** - * Get the oauth token key or secret. - * - * @return array The oauth token key and secret. - * - * @since 1.0 - */ - public function getToken() - { - return $this->token; - } - - /** - * Set the oauth token. - * - * @param array $token The access token key and secret. - * - * @return $this - * - * @since 1.0 - */ - public function setToken($token) - { - $this->token = $token; - - return $this; - } -} diff --git a/libraries/vendor/joomla/oauth2/LICENSE b/libraries/vendor/joomla/oauth2/LICENSE deleted file mode 100644 index df50810b85774..0000000000000 --- a/libraries/vendor/joomla/oauth2/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/oauth2/src/Client.php b/libraries/vendor/joomla/oauth2/src/Client.php deleted file mode 100644 index 9b24424381c0a..0000000000000 --- a/libraries/vendor/joomla/oauth2/src/Client.php +++ /dev/null @@ -1,419 +0,0 @@ -options = $options; - $this->http = $http ?: HttpFactory::getHttp($this->options); - $this->input = $input ?: ($application ? $application->input : new Input); - $this->application = $application; - } - - /** - * Get the access token or redirect to the authentication URL. - * - * @return string The access token - * - * @since 1.0 - * @throws UnexpectedResponseException - * @throws \RuntimeException - */ - public function authenticate() - { - if ($data['code'] = $this->input->get('code', false, 'raw')) - { - $data = array( - 'grant_type' => 'authorization_code', - 'redirect_uri' => $this->getOption('redirecturi'), - 'client_id' => $this->getOption('clientid'), - 'client_secret' => $this->getOption('clientsecret'), - ); - - $response = $this->http->post($this->getOption('tokenurl'), $data); - - if (!($response->code >= 200 && $response->code < 400)) - { - throw new UnexpectedResponseException( - $response, - sprintf( - 'Error code %s received requesting access token: %s.', - $response->code, - $response->body - ) - ); - } - - if (strpos($response->headers['Content-Type'], 'application/json') !== false) - { - $token = array_merge(json_decode($response->body, true), array('created' => time())); - } - else - { - parse_str($response->body, $token); - $token = array_merge($token, array('created' => time())); - } - - $this->setToken($token); - - return $token; - } - - if ($this->getOption('sendheaders')) - { - if (!($this->application instanceof AbstractWebApplication)) - { - throw new \RuntimeException('AbstractWebApplication object required for authentication process.'); - } - - $this->application->redirect($this->createUrl()); - } - - return false; - } - - /** - * Verify if the client has been authenticated - * - * @return boolean Is authenticated - * - * @since 1.0 - */ - public function isAuthenticated() - { - $token = $this->getToken(); - - if (!$token || !array_key_exists('access_token', $token)) - { - return false; - } - - if (array_key_exists('expires_in', $token) && $token['created'] + $token['expires_in'] < time() + 20) - { - return false; - } - - return true; - } - - /** - * Create the URL for authentication. - * - * @return string - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - public function createUrl() - { - if (!$this->getOption('authurl') || !$this->getOption('clientid')) - { - throw new \InvalidArgumentException('Authorization URL and client_id are required'); - } - - $url = new Uri($this->getOption('authurl')); - $url->setVar('response_type', 'code'); - $url->setVar('client_id', urlencode($this->getOption('clientid'))); - - if ($redirect = $this->getOption('redirecturi')) - { - $url->setVar('redirect_uri', urlencode($redirect)); - } - - if ($scope = $this->getOption('scope')) - { - $scope = is_array($scope) ? implode(' ', $scope) : $scope; - $url->setVar('scope', urlencode($scope)); - } - - if ($state = $this->getOption('state')) - { - $url->setVar('state', urlencode($state)); - } - - if (is_array($this->getOption('requestparams'))) - { - foreach ($this->getOption('requestparams') as $key => $value) - { - $url->setVar($key, urlencode($value)); - } - } - - return (string) $url; - } - - /** - * Send a signed OAuth request. - * - * @param string $url The URL for the request - * @param mixed $data Either an associative array or a string to be sent with the request - * @param array $headers The headers to send with the request - * @param string $method The method with which to send the request - * @param integer $timeout The timeout for the request - * - * @return \Joomla\Http\Response - * - * @since 1.0 - * @throws \InvalidArgumentException - * @throws \RuntimeException - */ - public function query($url, $data = null, $headers = array(), $method = 'get', $timeout = null) - { - $token = $this->getToken(); - - if (array_key_exists('expires_in', $token) && $token['created'] + $token['expires_in'] < time() + 20) - { - if (!$this->getOption('userefresh')) - { - return false; - } - - $token = $this->refreshToken($token['refresh_token']); - } - - $url = new Uri($url); - - if (!$this->getOption('authmethod') || $this->getOption('authmethod') == 'bearer') - { - $headers['Authorization'] = 'Bearer ' . $token['access_token']; - } - elseif ($this->getOption('authmethod') == 'get') - { - $url->setVar($this->getOption('getparam', 'access_token'), $token['access_token']); - } - - switch ($method) - { - case 'head': - case 'get': - case 'delete': - case 'trace': - $response = $this->http->$method($url, $headers, $timeout); - break; - - case 'post': - case 'put': - case 'patch': - $response = $this->http->$method($url, $data, $headers, $timeout); - break; - - default: - throw new \InvalidArgumentException('Unknown HTTP request method: ' . $method . '.'); - } - - if ($response->code < 200 || $response->code >= 400) - { - throw new UnexpectedResponseException( - $response, - sprintf( - 'Error code %s received requesting data: %s.', - $response->code, - $response->body - ) - ); - } - - return $response; - } - - /** - * Get an option from the OAuth2 Client instance. - * - * @param string $key The name of the option to get - * @param mixed $default Optional default value, returned if the requested option does not exist. - * - * @return mixed The option value - * - * @since 1.0 - */ - public function getOption($key, $default = null) - { - return $this->options[$key] ?? $default; - } - - /** - * Set an option for the OAuth2 Client instance. - * - * @param string $key The name of the option to set - * @param mixed $value The option value to set - * - * @return Client This object for method chaining - * - * @since 1.0 - */ - public function setOption($key, $value) - { - $this->options[$key] = $value; - - return $this; - } - - /** - * Get the access token from the Client instance. - * - * @return array The access token - * - * @since 1.0 - */ - public function getToken() - { - return $this->getOption('accesstoken'); - } - - /** - * Set an option for the Client instance. - * - * @param array $value The access token - * - * @return Client This object for method chaining - * - * @since 1.0 - */ - public function setToken($value) - { - if (is_array($value) && !array_key_exists('expires_in', $value) && array_key_exists('expires', $value)) - { - $value['expires_in'] = $value['expires']; - unset($value['expires']); - } - - $this->setOption('accesstoken', $value); - - return $this; - } - - /** - * Refresh the access token instance. - * - * @param string $token The refresh token - * - * @return array The new access token - * - * @since 1.0 - * @throws UnexpectedResponseException - * @throws \RuntimeException - */ - public function refreshToken($token = null) - { - if (!$this->getOption('userefresh')) - { - throw new \RuntimeException('Refresh token is not supported for this OAuth instance.'); - } - - if (!$token) - { - $token = $this->getToken(); - - if (!array_key_exists('refresh_token', $token)) - { - throw new \RuntimeException('No refresh token is available.'); - } - - $token = $token['refresh_token']; - } - - $data = array( - 'grant_type' => 'refresh_token', - 'refresh_token' => $token, - 'client_id' => $this->getOption('clientid'), - 'client_secret' => $this->getOption('clientsecret'), - ); - - $response = $this->http->post($this->getOption('tokenurl'), $data); - - if (!($response->code >= 200 || $response->code < 400)) - { - throw new UnexpectedResponseException( - $response, - sprintf( - 'Error code %s received refreshing token: %s.', - $response->code, - $response->body - ) - ); - } - - if (strpos($response->headers['Content-Type'], 'application/json') !== false) - { - $token = array_merge(json_decode($response->body, true), array('created' => time())); - } - else - { - parse_str($response->body, $token); - $token = array_merge($token, array('created' => time())); - } - - $this->setToken($token); - - return $token; - } -} diff --git a/libraries/vendor/joomla/registry/LICENSE b/libraries/vendor/joomla/registry/LICENSE deleted file mode 100644 index df50810b85774..0000000000000 --- a/libraries/vendor/joomla/registry/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/registry/src/Factory.php b/libraries/vendor/joomla/registry/src/Factory.php deleted file mode 100644 index 39c7aff12d729..0000000000000 --- a/libraries/vendor/joomla/registry/src/Factory.php +++ /dev/null @@ -1,56 +0,0 @@ - false, - 'parseBooleanWords' => false, - 'processSections' => false, - ]; - - /** - * A cache used by stringToObject. - * - * @var array - * @since 1.0 - */ - protected static $cache = []; - - /** - * Converts an object into an INI formatted string - * - Unfortunately, there is no way to have ini values nested further than two - * levels deep. Therefore we will only go through the first two levels of - * the object. - * - * @param object $object Data source object. - * @param array $options Options used by the formatter. - * - * @return string INI formatted string. - * - * @since 1.0 - */ - public function objectToString($object, array $options = []) - { - $options = array_merge(static::$options, $options); - $supportArrayValues = $options['supportArrayValues']; - - $local = []; - $global = []; - - $variables = get_object_vars($object); - - $last = count($variables); - - // Assume that the first element is in section - $inSection = true; - - // Iterate over the object to set the properties. - foreach ($variables as $key => $value) - { - // If the value is an object then we need to put it in a local section. - if (is_object($value)) - { - // Add an empty line if previous string wasn't in a section - if (!$inSection) - { - $local[] = ''; - } - - // Add the section line. - $local[] = '[' . $key . ']'; - - // Add the properties for this section. - foreach (get_object_vars($value) as $k => $v) - { - if (is_array($v) && $supportArrayValues) - { - $assoc = ArrayHelper::isAssociative($v); - - foreach ($v as $arrayKey => $item) - { - $arrayKey = $assoc ? $arrayKey : ''; - $local[] = $k . '[' . $arrayKey . ']=' . $this->getValueAsIni($item); - } - } - else - { - $local[] = $k . '=' . $this->getValueAsIni($v); - } - } - - // Add empty line after section if it is not the last one - if (0 !== --$last) - { - $local[] = ''; - } - } - elseif (is_array($value) && $supportArrayValues) - { - $assoc = ArrayHelper::isAssociative($value); - - foreach ($value as $arrayKey => $item) - { - $arrayKey = $assoc ? $arrayKey : ''; - $global[] = $key . '[' . $arrayKey . ']=' . $this->getValueAsIni($item); - } - } - else - { - // Not in a section so add the property to the global array. - $global[] = $key . '=' . $this->getValueAsIni($value); - $inSection = false; - } - } - - return implode("\n", array_merge($global, $local)); - } - - /** - * Parse an INI formatted string and convert it into an object. - * - * @param string $data INI formatted string to convert. - * @param array $options An array of options used by the formatter, or a boolean setting to process sections. - * - * @return object Data object. - * - * @since 1.0 - */ - public function stringToObject($data, array $options = []) - { - $options = array_merge(static::$options, $options); - - // Check the memory cache for already processed strings. - $hash = md5($data . ':' . (int) $options['processSections']); - - if (isset(static::$cache[$hash])) - { - return static::$cache[$hash]; - } - - // If no lines present just return the object. - if (empty($data)) - { - return new \stdClass; - } - - $obj = new \stdClass; - $section = false; - $array = false; - $lines = explode("\n", $data); - - // Process the lines. - foreach ($lines as $line) - { - // Trim any unnecessary whitespace. - $line = trim($line); - - // Ignore empty lines and comments. - if (empty($line) || ($line[0] === ';')) - { - continue; - } - - if ($options['processSections']) - { - $length = strlen($line); - - // If we are processing sections and the line is a section add the object and continue. - if ($line[0] === '[' && ($line[$length - 1] === ']')) - { - $section = substr($line, 1, $length - 2); - $obj->$section = new \stdClass; - continue; - } - } - elseif ($line[0] === '[') - { - continue; - } - - // Check that an equal sign exists and is not the first character of the line. - if (!strpos($line, '=')) - { - // Maybe throw exception? - continue; - } - - // Get the key and value for the line. - list ($key, $value) = explode('=', $line, 2); - - // If we have an array item - if (substr($key, -1) === ']' && ($openBrace = strpos($key, '[', 1)) !== false) - { - if ($options['supportArrayValues']) - { - $array = true; - $arrayKey = substr($key, $openBrace + 1, -1); - - // If we have a multi-dimensional array or malformed key - if (strpos($arrayKey, '[') !== false || strpos($arrayKey, ']') !== false) - { - // Maybe throw exception? - continue; - } - - $key = substr($key, 0, $openBrace); - } - else - { - continue; - } - } - - // Validate the key. - if (preg_match('/[^A-Z0-9_]/i', $key)) - { - // Maybe throw exception? - continue; - } - - // If the value is quoted then we assume it is a string. - $length = strlen($value); - - if ($length && ($value[0] === '"') && ($value[$length - 1] === '"')) - { - // Strip the quotes and Convert the new line characters. - $value = stripcslashes(substr($value, 1, $length - 2)); - $value = str_replace('\n', "\n", $value); - } - else - { - // If the value is not quoted, we assume it is not a string. - - // If the value is 'false' assume boolean false. - if ($value === 'false') - { - $value = false; - } - elseif ($value === 'true') - // If the value is 'true' assume boolean true. - { - $value = true; - } - elseif ($options['parseBooleanWords'] && in_array(strtolower($value), ['yes', 'no'], true)) - // If the value is 'yes' or 'no' and option is enabled assume appropriate boolean - { - $value = (strtolower($value) === 'yes'); - } - elseif (is_numeric($value)) - // If the value is numeric than it is either a float or int. - { - // If there is a period then we assume a float. - if (strpos($value, '.') !== false) - { - $value = (float) $value; - } - else - { - $value = (int) $value; - } - } - } - - // If a section is set add the key/value to the section, otherwise top level. - if ($section) - { - if ($array) - { - if (!isset($obj->$section->$key)) - { - $obj->$section->$key = []; - } - - if (!empty($arrayKey)) - { - $obj->$section->{$key}[$arrayKey] = $value; - } - else - { - $obj->$section->{$key}[] = $value; - } - } - else - { - $obj->$section->$key = $value; - } - } - else - { - if ($array) - { - if (!isset($obj->$key)) - { - $obj->$key = []; - } - - if (!empty($arrayKey)) - { - $obj->{$key}[$arrayKey] = $value; - } - else - { - $obj->{$key}[] = $value; - } - } - else - { - $obj->$key = $value; - } - } - - $array = false; - } - - // Cache the string to save cpu cycles -- thus the world :) - static::$cache[$hash] = clone $obj; - - return $obj; - } - - /** - * Method to get a value in an INI format. - * - * @param mixed $value The value to convert to INI format. - * - * @return string The value in INI format. - * - * @since 1.0 - */ - protected function getValueAsIni($value) - { - $string = ''; - - switch (gettype($value)) - { - case 'integer': - case 'double': - $string = $value; - break; - - case 'boolean': - $string = $value ? 'true' : 'false'; - break; - - case 'string': - // Sanitize any CRLF characters.. - $string = '"' . str_replace(["\r\n", "\n"], '\\n', $value) . '"'; - break; - } - - return $string; - } -} diff --git a/libraries/vendor/joomla/registry/src/Format/Json.php b/libraries/vendor/joomla/registry/src/Format/Json.php deleted file mode 100644 index 201f07cca4cd4..0000000000000 --- a/libraries/vendor/joomla/registry/src/Format/Json.php +++ /dev/null @@ -1,78 +0,0 @@ - false]) - { - $data = trim($data); - - // Because developers are clearly not validating their data before pushing it into a Registry, we'll do it for them - if (empty($data)) - { - return new \stdClass; - } - - $decoded = json_decode($data); - - // Check for an error decoding the data - if ($decoded === null && json_last_error() !== JSON_ERROR_NONE) - { - // If it's an ini file, parse as ini. - if ($data !== '' && $data[0] !== '{') - { - return Factory::getFormat('Ini')->stringToObject($data, $options); - } - - throw new \RuntimeException(sprintf('Error decoding JSON data: %s', json_last_error_msg())); - } - - return (object) $decoded; - } -} diff --git a/libraries/vendor/joomla/registry/src/Format/Php.php b/libraries/vendor/joomla/registry/src/Format/Php.php deleted file mode 100644 index 64a33915d8af7..0000000000000 --- a/libraries/vendor/joomla/registry/src/Format/Php.php +++ /dev/null @@ -1,136 +0,0 @@ - $v) - { - $vars .= "\tpublic \$$k = " . $this->formatValue($v) . ";\n"; - } - - $str = ""; - } - - return $str; - } - - /** - * Parse a PHP class formatted string and convert it into an object. - * - * @param string $data PHP Class formatted string to convert. - * @param array $options Options used by the formatter. - * - * @return object Data object. - * - * @since 1.0 - */ - public function stringToObject($data, array $options = []) - { - return new \stdClass; - } - - /** - * Format a value for the string conversion - * - * @param mixed $value The value to format - * - * @return mixed The formatted value - * - * @since __DEPLOY_VERSION__ - */ - protected function formatValue($value) - { - switch (gettype($value)) - { - case 'string': - return "'" . addcslashes($value, '\\\'') . "'"; - - case 'array': - case 'object': - return $this->getArrayString((array) $value); - - case 'double': - case 'integer': - return $value; - - case 'boolean': - return $value ? 'true' : 'false'; - } - } - - /** - * Method to get an array as an exported string. - * - * @param array $a The array to get as a string. - * - * @return string - * - * @since 1.0 - */ - protected function getArrayString($a) - { - $s = 'array('; - $i = 0; - - foreach ($a as $k => $v) - { - $s .= $i ? ', ' : ''; - $s .= "'" . addcslashes($k, '\\\'') . "' => "; - $s .= $this->formatValue($v); - - $i++; - } - - $s .= ')'; - - return $s; - } -} diff --git a/libraries/vendor/joomla/registry/src/Format/Xml.php b/libraries/vendor/joomla/registry/src/Format/Xml.php deleted file mode 100644 index bd0117c90c1cd..0000000000000 --- a/libraries/vendor/joomla/registry/src/Format/Xml.php +++ /dev/null @@ -1,164 +0,0 @@ -'); - - // Iterate over the object members. - $this->getXmlChildren($root, $object, $nodeName); - - return $root->asXML(); - } - - /** - * Parse a XML formatted string and convert it into an object. - * - * @param string $data XML formatted string to convert. - * @param array $options Options used by the formatter. - * - * @return object Data object. - * - * @since 1.0 - */ - public function stringToObject($data, array $options = []) - { - $obj = new stdClass; - - // Parse the XML string. - $xml = simplexml_load_string($data); - - foreach ($xml->children() as $node) - { - $obj->{$node['name']} = $this->getValueFromNode($node); - } - - return $obj; - } - - /** - * Method to get a PHP native value for a SimpleXMLElement object. -- called recursively - * - * @param object $node SimpleXMLElement object for which to get the native value. - * - * @return mixed Native value of the SimpleXMLElement object. - * - * @since 1.0 - */ - protected function getValueFromNode($node) - { - switch ($node['type']) - { - case 'integer': - $value = (string) $node; - - return (int) $value; - break; - - case 'string': - return (string) $node; - break; - - case 'boolean': - $value = (string) $node; - - return (bool) $value; - break; - - case 'double': - $value = (string) $node; - - return (float) $value; - break; - - case 'array': - $value = []; - - foreach ($node->children() as $child) - { - $value[(string) $child['name']] = $this->getValueFromNode($child); - } - - break; - - default: - $value = new stdClass; - - foreach ($node->children() as $child) - { - $value->{$child['name']} = $this->getValueFromNode($child); - } - - break; - } - - return $value; - } - - /** - * Method to build a level of the XML string -- called recursively - * - * @param SimpleXMLElement $node SimpleXMLElement object to attach children. - * @param object $var Object that represents a node of the XML document. - * @param string $nodeName The name to use for node elements. - * - * @return void - * - * @since 1.0 - */ - protected function getXmlChildren(SimpleXMLElement $node, $var, $nodeName) - { - // Iterate over the object members. - foreach ((array) $var as $k => $v) - { - if (is_scalar($v)) - { - $n = $node->addChild($nodeName, $v); - $n->addAttribute('name', $k); - $n->addAttribute('type', gettype($v)); - } - else - { - $n = $node->addChild($nodeName); - $n->addAttribute('name', $k); - $n->addAttribute('type', gettype($v)); - - $this->getXmlChildren($n, $v, $nodeName); - } - } - } -} diff --git a/libraries/vendor/joomla/registry/src/Format/Yaml.php b/libraries/vendor/joomla/registry/src/Format/Yaml.php deleted file mode 100644 index c9d41a809308c..0000000000000 --- a/libraries/vendor/joomla/registry/src/Format/Yaml.php +++ /dev/null @@ -1,84 +0,0 @@ -parser = new SymfonyYamlParser; - $this->dumper = new SymfonyYamlDumper; - } - - /** - * Converts an object into a YAML formatted string. - * We use json_* to convert the passed object to an array. - * - * @param object $object Data source object. - * @param array $options Options used by the formatter. - * - * @return string YAML formatted string. - * - * @since 1.0 - */ - public function objectToString($object, array $options = []) - { - $array = json_decode(json_encode($object), true); - - return $this->dumper->dump($array, 2, 0); - } - - /** - * Parse a YAML formatted string and convert it into an object. - * We use the json_* methods to convert the parsed YAML array to an object. - * - * @param string $data YAML formatted string to convert. - * @param array $options Options used by the formatter. - * - * @return object Data object. - * - * @since 1.0 - */ - public function stringToObject($data, array $options = []) - { - $array = $this->parser->parse(trim($data)); - - return (object) json_decode(json_encode($array)); - } -} diff --git a/libraries/vendor/joomla/registry/src/FormatInterface.php b/libraries/vendor/joomla/registry/src/FormatInterface.php deleted file mode 100644 index 43fb5f6195d64..0000000000000 --- a/libraries/vendor/joomla/registry/src/FormatInterface.php +++ /dev/null @@ -1,41 +0,0 @@ -data = new \stdClass; - - // Optionally load supplied data. - if ($data instanceof Registry) - { - $this->merge($data); - } - elseif (is_array($data) || is_object($data)) - { - $this->bindData($this->data, $data); - } - elseif (!empty($data) && is_string($data)) - { - $this->loadString($data); - } - } - - /** - * Magic function to clone the registry object. - * - * @return void - * - * @since 1.0 - */ - public function __clone() - { - $this->data = unserialize(serialize($this->data)); - } - - /** - * Magic function to render this object as a string using default args of toString method. - * - * @return string - * - * @since 1.0 - */ - public function __toString() - { - return $this->toString(); - } - - /** - * Count elements of the data object - * - * @return integer The custom count as an integer. - * - * @link https://secure.php.net/manual/en/countable.count.php - * @since 1.3.0 - */ - public function count() - { - return count(get_object_vars($this->data)); - } - - /** - * Implementation for the JsonSerializable interface. - * Allows us to pass Registry objects to json_encode. - * - * @return object - * - * @since 1.0 - * @note The interface is only present in PHP 5.4 and up. - */ - public function jsonSerialize() - { - return $this->data; - } - - /** - * Sets a default value if not already assigned. - * - * @param string $key The name of the parameter. - * @param mixed $default An optional value for the parameter. - * - * @return mixed The value set, or the default if the value was not previously set (or null). - * - * @since 1.0 - */ - public function def($key, $default = '') - { - $value = $this->get($key, $default); - $this->set($key, $value); - - return $value; - } - - /** - * Check if a registry path exists. - * - * @param string $path Registry path (e.g. joomla.content.showauthor) - * - * @return boolean - * - * @since 1.0 - */ - public function exists($path) - { - // Return default value if path is empty - if (empty($path)) - { - return false; - } - - // Explode the registry path into an array - $nodes = explode($this->separator, $path); - - // Initialize the current node to be the registry root. - $node = $this->data; - $found = false; - - // Traverse the registry to find the correct node for the result. - foreach ($nodes as $n) - { - if (is_array($node) && isset($node[$n])) - { - $node = $node[$n]; - $found = true; - continue; - } - - if (!isset($node->$n)) - { - return false; - } - - $node = $node->$n; - $found = true; - } - - return $found; - } - - /** - * Get a registry value. - * - * @param string $path Registry path (e.g. joomla.content.showauthor) - * @param mixed $default Optional default value, returned if the internal value is null. - * - * @return mixed Value of entry or null - * - * @since 1.0 - */ - public function get($path, $default = null) - { - // Return default value if path is empty - if (empty($path)) - { - return $default; - } - - if (!strpos($path, $this->separator)) - { - return (isset($this->data->$path) && $this->data->$path !== null && $this->data->$path !== '') ? $this->data->$path : $default; - } - - // Explode the registry path into an array - $nodes = explode($this->separator, trim($path)); - - // Initialize the current node to be the registry root. - $node = $this->data; - $found = false; - - // Traverse the registry to find the correct node for the result. - foreach ($nodes as $n) - { - if (is_array($node) && isset($node[$n])) - { - $node = $node[$n]; - $found = true; - - continue; - } - - if (!isset($node->$n)) - { - return $default; - } - - $node = $node->$n; - $found = true; - } - - if (!$found || $node === null || $node === '') - { - return $default; - } - - return $node; - } - - /** - * Gets this object represented as an ArrayIterator. - * - * This allows the data properties to be accessed via a foreach statement. - * - * @return \ArrayIterator This object represented as an ArrayIterator. - * - * @see IteratorAggregate::getIterator() - * @since 1.3.0 - */ - public function getIterator() - { - return new \ArrayIterator($this->data); - } - - /** - * Load an associative array of values into the default namespace - * - * @param array $array Associative array of value to load - * @param boolean $flattened Load from a one-dimensional array - * @param string $separator The key separator - * - * @return Registry Return this object to support chaining. - * - * @since 1.0 - */ - public function loadArray(array $array, $flattened = false, $separator = null) - { - if (!$flattened) - { - $this->bindData($this->data, $array); - - return $this; - } - - foreach ($array as $k => $v) - { - $this->set($k, $v, $separator); - } - - return $this; - } - - /** - * Load the public variables of the object into the default namespace. - * - * @param object $object The object holding the publics to load - * - * @return Registry Return this object to support chaining. - * - * @since 1.0 - */ - public function loadObject($object) - { - $this->bindData($this->data, $object); - - return $this; - } - - /** - * Load the contents of a file into the registry - * - * @param string $file Path to file to load - * @param string $format Format of the file [optional: defaults to JSON] - * @param array $options Options used by the formatter - * - * @return Registry Return this object to support chaining. - * - * @since 1.0 - */ - public function loadFile($file, $format = 'JSON', array $options = []) - { - $data = file_get_contents($file); - - return $this->loadString($data, $format, $options); - } - - /** - * Load a string into the registry - * - * @param string $data String to load into the registry - * @param string $format Format of the string - * @param array $options Options used by the formatter - * - * @return Registry Return this object to support chaining. - * - * @since 1.0 - */ - public function loadString($data, $format = 'JSON', array $options = []) - { - // Load a string into the given namespace [or default namespace if not given] - $obj = Factory::getFormat($format, $options)->stringToObject($data, $options); - - // If the data object has not yet been initialized, direct assign the object - if (!$this->initialized) - { - $this->data = $obj; - $this->initialized = true; - - return $this; - } - - $this->loadObject($obj); - - return $this; - } - - /** - * Merge a Registry object into this one - * - * @param Registry $source Source Registry object to merge. - * @param boolean $recursive True to support recursive merge the children values. - * - * @return Registry Return this object to support chaining. - * - * @since 1.0 - */ - public function merge(Registry $source, $recursive = false) - { - $this->bindData($this->data, $source->toArray(), $recursive, false); - - return $this; - } - - /** - * Method to extract a sub-registry from path - * - * @param string $path Registry path (e.g. joomla.content.showauthor) - * - * @return Registry|null Registry object if data is present - * - * @since 1.2.0 - */ - public function extract($path) - { - $data = $this->get($path); - - if (null === $data) - { - return null; - } - - return new Registry($data); - } - - /** - * Checks whether an offset exists in the iterator. - * - * @param mixed $offset The array offset. - * - * @return boolean True if the offset exists, false otherwise. - * - * @since 1.0 - */ - public function offsetExists($offset) - { - return $this->exists($offset); - } - - /** - * Gets an offset in the iterator. - * - * @param mixed $offset The array offset. - * - * @return mixed The array value if it exists, null otherwise. - * - * @since 1.0 - */ - public function offsetGet($offset) - { - return $this->get($offset); - } - - /** - * Sets an offset in the iterator. - * - * @param mixed $offset The array offset. - * @param mixed $value The array value. - * - * @return void - * - * @since 1.0 - */ - public function offsetSet($offset, $value) - { - $this->set($offset, $value); - } - - /** - * Unsets an offset in the iterator. - * - * @param mixed $offset The array offset. - * - * @return void - * - * @since 1.0 - */ - public function offsetUnset($offset) - { - $this->remove($offset); - } - - /** - * Set a registry value. - * - * @param string $path Registry Path (e.g. joomla.content.showauthor) - * @param mixed $value Value of entry - * @param string $separator The key separator - * - * @return mixed The value of the that has been set. - * - * @since 1.0 - */ - public function set($path, $value, $separator = null) - { - if (empty($separator)) - { - $separator = $this->separator; - } - - /* - * Explode the registry path into an array and remove empty - * nodes that occur as a result of a double separator. ex: joomla..test - * Finally, re-key the array so they are sequential. - */ - $nodes = array_values(array_filter(explode($separator, $path), 'strlen')); - - if (!$nodes) - { - return null; - } - - // Initialize the current node to be the registry root. - $node = $this->data; - - // Traverse the registry to find the correct node for the result. - for ($i = 0, $n = count($nodes) - 1; $i < $n; $i++) - { - if (is_object($node)) - { - if (!isset($node->{$nodes[$i]}) && ($i !== $n)) - { - $node->{$nodes[$i]} = new \stdClass; - } - - // Pass the child as pointer in case it is an object - $node = &$node->{$nodes[$i]}; - - continue; - } - - if (is_array($node)) - { - if (($i !== $n) && !isset($node[$nodes[$i]])) - { - $node[$nodes[$i]] = new \stdClass; - } - - // Pass the child as pointer in case it is an array - $node = &$node[$nodes[$i]]; - } - } - - // Get the old value if exists so we can return it - switch (true) - { - case (is_object($node)): - $result = $node->{$nodes[$i]} = $value; - break; - - case (is_array($node)): - $result = $node[$nodes[$i]] = $value; - break; - - default: - $result = null; - break; - } - - return $result; - } - - /** - * Append value to a path in registry - * - * @param string $path Parent registry Path (e.g. joomla.content.showauthor) - * @param mixed $value Value of entry - * - * @return mixed The value of the that has been set. - * - * @since 1.4.0 - */ - public function append($path, $value) - { - $result = null; - - /* - * Explode the registry path into an array and remove empty - * nodes that occur as a result of a double dot. ex: joomla..test - * Finally, re-key the array so they are sequential. - */ - $nodes = array_values(array_filter(explode('.', $path), 'strlen')); - - if ($nodes) - { - // Initialize the current node to be the registry root. - $node = $this->data; - - // Traverse the registry to find the correct node for the result. - // TODO Create a new private method from part of code below, as it is almost equal to 'set' method - for ($i = 0, $n = count($nodes) - 1; $i <= $n; $i++) - { - if (is_object($node)) - { - if (!isset($node->{$nodes[$i]}) && ($i !== $n)) - { - $node->{$nodes[$i]} = new \stdClass; - } - - // Pass the child as pointer in case it is an array - $node = &$node->{$nodes[$i]}; - } - elseif (is_array($node)) - { - if (($i !== $n) && !isset($node[$nodes[$i]])) - { - $node[$nodes[$i]] = new \stdClass; - } - - // Pass the child as pointer in case it is an array - $node = &$node[$nodes[$i]]; - } - } - - if (!is_array($node)) - // Convert the node to array to make append possible - { - $node = get_object_vars($node); - } - - $node[] = $value; - $result = $value; - } - - return $result; - } - - /** - * Delete a registry value - * - * @param string $path Registry Path (e.g. joomla.content.showauthor) - * - * @return mixed The value of the removed node or null if not set - * - * @since 1.6.0 - */ - public function remove($path) - { - // Cheap optimisation to direct remove the node if there is no separator - if (!strpos($path, $this->separator)) - { - $result = (isset($this->data->$path) && $this->data->$path !== null && $this->data->$path !== '') ? $this->data->$path : null; - - unset($this->data->$path); - - return $result; - } - - /* - * Explode the registry path into an array and remove empty - * nodes that occur as a result of a double separator. ex: joomla..test - * Finally, re-key the array so they are sequential. - */ - $nodes = array_values(array_filter(explode($this->separator, $path), 'strlen')); - - if (!$nodes) - { - return null; - } - - // Initialize the current node to be the registry root. - $node = $this->data; - $parent = null; - - // Traverse the registry to find the correct node for the result. - for ($i = 0, $n = count($nodes) - 1; $i < $n; $i++) - { - if (is_object($node)) - { - if (!isset($node->{$nodes[$i]}) && ($i !== $n)) - { - continue; - } - - $parent = &$node; - $node = $node->{$nodes[$i]}; - - continue; - } - - if (is_array($node)) - { - if (($i !== $n) && !isset($node[$nodes[$i]])) - { - continue; - } - - $parent = &$node; - $node = $node[$nodes[$i]]; - - continue; - } - } - - // Get the old value if exists so we can return it - switch (true) - { - case (is_object($node)): - $result = isset($node->{$nodes[$i]}) ? $node->{$nodes[$i]} : null; - unset($parent->{$nodes[$i]}); - break; - - case (is_array($node)): - $result = isset($node[$nodes[$i]]) ? $node[$nodes[$i]] : null; - unset($parent[$nodes[$i]]); - break; - - default: - $result = null; - break; - } - - return $result; - } - - /** - * Transforms a namespace to an array - * - * @return array An associative array holding the namespace data - * - * @since 1.0 - */ - public function toArray() - { - return (array) $this->asArray($this->data); - } - - /** - * Transforms a namespace to an object - * - * @return object An an object holding the namespace data - * - * @since 1.0 - */ - public function toObject() - { - return $this->data; - } - - /** - * Get a namespace in a given string format - * - * @param string $format Format to return the string in - * @param array $options Parameters used by the formatter, see formatters for more info - * - * @return string Namespace in string format - * - * @since 1.0 - */ - public function toString($format = 'JSON', array $options = []) - { - return Factory::getFormat($format, $options)->objectToString($this->data, $options); - } - - /** - * Method to recursively bind data to a parent object. - * - * @param object $parent The parent object on which to attach the data values. - * @param mixed $data An array or object of data to bind to the parent object. - * @param boolean $recursive True to support recursive bindData. - * @param boolean $allowNull True to allow null values. - * - * @return void - * - * @since 1.0 - */ - protected function bindData($parent, $data, $recursive = true, $allowNull = true) - { - // The data object is now initialized - $this->initialized = true; - - // Ensure the input data is an array. - $data = is_object($data) ? get_object_vars($data) : (array) $data; - - foreach ($data as $k => $v) - { - if (!$allowNull && !(($v !== null) && ($v !== ''))) - { - continue; - } - - if ($recursive && ((is_array($v) && ArrayHelper::isAssociative($v)) || is_object($v))) - { - if (!isset($parent->$k)) - { - $parent->$k = new \stdClass; - } - - $this->bindData($parent->$k, $v); - - continue; - } - - $parent->$k = $v; - } - } - - /** - * Method to recursively convert an object of data to an array. - * - * @param object $data An object of data to return as an array. - * - * @return array Array representation of the input object. - * - * @since 1.0 - */ - protected function asArray($data) - { - $array = []; - - if (is_object($data)) - { - $data = get_object_vars($data); - } - - foreach ($data as $k => $v) - { - if (is_object($v) || is_array($v)) - { - $array[$k] = $this->asArray($v); - - continue; - } - - $array[$k] = $v; - } - - return $array; - } - - /** - * Dump to one dimension array. - * - * @param string $separator The key separator. - * - * @return string[] Dumped array. - * - * @since 1.3.0 - */ - public function flatten($separator = null) - { - $array = []; - - if (empty($separator)) - { - $separator = $this->separator; - } - - $this->toFlatten($separator, $this->data, $array); - - return $array; - } - - /** - * Method to recursively convert data to one dimension array. - * - * @param string $separator The key separator. - * @param array|object $data Data source of this scope. - * @param array $array The result array, it is passed by reference. - * @param string $prefix Last level key prefix. - * - * @return void - * - * @since 1.3.0 - */ - protected function toFlatten($separator = null, $data = null, array &$array = [], $prefix = '') - { - $data = (array) $data; - - if (empty($separator)) - { - $separator = $this->separator; - } - - foreach ($data as $k => $v) - { - $key = $prefix ? $prefix . $separator . $k : $k; - - if (is_object($v) || is_array($v)) - { - $this->toFlatten($separator, $v, $array, $key); - - continue; - } - - $array[$key] = $v; - } - } -} diff --git a/libraries/vendor/joomla/session/LICENSE b/libraries/vendor/joomla/session/LICENSE deleted file mode 100644 index df50810b85774..0000000000000 --- a/libraries/vendor/joomla/session/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/session/meta/sql/mysql.sql b/libraries/vendor/joomla/session/meta/sql/mysql.sql deleted file mode 100644 index 53faf44b7c0c7..0000000000000 --- a/libraries/vendor/joomla/session/meta/sql/mysql.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE IF NOT EXISTS `#__session` ( - `session_id` VARBINARY(128) NOT NULL, - `time` INTEGER UNSIGNED NOT NULL, - `data` BLOB NOT NULL, - PRIMARY KEY (`session_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/libraries/vendor/joomla/session/meta/sql/pgsql.sql b/libraries/vendor/joomla/session/meta/sql/pgsql.sql deleted file mode 100644 index f6d6eef71976d..0000000000000 --- a/libraries/vendor/joomla/session/meta/sql/pgsql.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE "#__session" ( - "session_id" VARCHAR(128) NOT NULL, - "time" INTEGER NOT NULL, - "data" BYTEA NOT NULL, - PRIMARY KEY ("session_id") -); diff --git a/libraries/vendor/joomla/session/meta/sql/sqlite.sql b/libraries/vendor/joomla/session/meta/sql/sqlite.sql deleted file mode 100644 index 061406d53cac0..0000000000000 --- a/libraries/vendor/joomla/session/meta/sql/sqlite.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE `#__session` ( - `session_id` TEXT NOT NULL, - `time` INTEGER NOT NULL, - `data` BLOB NOT NULL, - CONSTRAINT `idx_session` PRIMARY KEY (`session_id`) -); diff --git a/libraries/vendor/joomla/session/meta/sql/sqlsrv.sql b/libraries/vendor/joomla/session/meta/sql/sqlsrv.sql deleted file mode 100644 index e6c026bf088a1..0000000000000 --- a/libraries/vendor/joomla/session/meta/sql/sqlsrv.sql +++ /dev/null @@ -1,9 +0,0 @@ -CREATE TABLE [#__session] ( - [session_id] VARCHAR(128) NOT NULL, - [time] INTEGER NOT NULL, - [data] VARBINARY(MAX) NOT NULL, - CONSTRAINT [PK_#__session_session_id] PRIMARY KEY CLUSTERED - ( - [session_id] ASC - ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] -) ON [PRIMARY]; diff --git a/libraries/vendor/joomla/session/src/Exception/InvalidSessionException.php b/libraries/vendor/joomla/session/src/Exception/InvalidSessionException.php deleted file mode 100644 index 0da6800683832..0000000000000 --- a/libraries/vendor/joomla/session/src/Exception/InvalidSessionException.php +++ /dev/null @@ -1,18 +0,0 @@ -prefix = isset($options['prefix']) ? $options['prefix'] : 'jfw'; - } - - /** - * Close the session - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function close() - { - return true; - } - - /** - * Destroy a session - * - * @param integer $session_id The session ID being destroyed - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function destroy($session_id) - { - // The apcu_delete function returns false if the id does not exist - return apcu_delete($this->prefix . $session_id) || !apcu_exists($this->prefix . $session_id); - } - - /** - * Cleanup old sessions - * - * @param integer $maxlifetime Sessions that have not updated for the last maxlifetime seconds will be removed - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function gc($maxlifetime) - { - return true; - } - - /** - * Test to see if the HandlerInterface is available - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public static function isSupported(): bool - { - $supported = extension_loaded('apcu') && ini_get('apc.enabled'); - - // If on the CLI interface, the `apc.enable_cli` option must also be enabled - if ($supported && php_sapi_name() === 'cli') - { - $supported = ini_get('apc.enable_cli'); - } - - return (bool) $supported; - } - - /** - * Initialize session - * - * @param string $save_path The path where to store/retrieve the session - * @param string $session_id The session id - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function open($save_path, $session_id) - { - return true; - } - - /** - * Read session data - * - * @param string $session_id The session id to read data for - * - * @return string The session data - * - * @since __DEPLOY_VERSION__ - */ - public function read($session_id) - { - return (string) apcu_fetch($this->prefix . $session_id); - } - - /** - * Write session data - * - * @param string $session_id The session id - * @param string $session_data The encoded session data - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function write($session_id, $session_data) - { - return apcu_store($this->prefix . $session_id, $session_data, ini_get('session.gc_maxlifetime')); - } -} diff --git a/libraries/vendor/joomla/session/src/Handler/DatabaseHandler.php b/libraries/vendor/joomla/session/src/Handler/DatabaseHandler.php deleted file mode 100644 index 3bf6323623b9f..0000000000000 --- a/libraries/vendor/joomla/session/src/Handler/DatabaseHandler.php +++ /dev/null @@ -1,316 +0,0 @@ -db = $db; - } - - /** - * Close the session - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function close() - { - if ($this->gcCalled) - { - $query = $this->db->getQuery(true) - ->delete($this->db->quoteName('#__session')) - ->where($this->db->quoteName('time') . ' < ?') - ->bind(1, $this->gcLifetime, ParameterType::INTEGER); - - // Remove expired sessions from the database. - $this->db->setQuery($query)->execute(); - - $this->gcCalled = false; - $this->gcLifetime = null; - } - - $this->db->disconnect(); - - return true; - } - - /** - * Creates the session database table - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - * @throws \UnexpectedValueException - */ - public function createDatabaseTable() - { - switch ($this->db->name) - { - case 'mysql': - case 'mysqli': - $filename = 'mysql.sql'; - - break; - - case 'postgresql': - $filename = 'pgsql.sql'; - - break; - - case 'sqlsrv': - case 'sqlazure': - $filename = 'sqlsrv.sql'; - - break; - - case 'sqlite': - $filename = 'sqlite.sql'; - - break; - - default: - throw new \UnexpectedValueException(sprintf('The %s database driver is not supported.', $this->db->name)); - } - - $path = dirname(dirname(__DIR__)) . '/meta/sql/' . $filename; - - if (!is_readable($path)) - { - throw new \RuntimeException(sprintf('Database schema could not be read from %s. Please ensure the file exists and is readable.', $path)); - } - - $queries = $this->db->splitSql(file_get_contents($path)); - - foreach ($queries as $query) - { - $query = trim($query); - - if ($query !== '') - { - try - { - $this->db->setQuery($query)->execute(); - } - catch (\RuntimeException $exception) - { - throw new \RuntimeException('Failed to create the session table.', 0, $exception); - } - } - } - - return true; - } - - /** - * Destroy a session - * - * @param integer $session_id The session ID being destroyed - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function destroy($session_id) - { - try - { - $query = $this->db->getQuery(true) - ->delete($this->db->quoteName('#__session')) - ->where($this->db->quoteName('session_id') . ' = ' . $this->db->quote($session_id)); - - // Remove a session from the database. - $this->db->setQuery($query)->execute(); - - return true; - } - catch (\Exception $e) - { - return false; - } - } - - /** - * Cleanup old sessions - * - * @param integer $maxlifetime Sessions that have not updated for the last maxlifetime seconds will be removed - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function gc($maxlifetime) - { - // We'll delay garbage collection until the session is closed to prevent potential issues mid-cycle - $this->gcLifetime = time() - $maxlifetime; - $this->gcCalled = true; - - return true; - } - - /** - * Test to see if the HandlerInterface is available - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public static function isSupported(): bool - { - return interface_exists(DatabaseInterface::class); - } - - /** - * Initialize session - * - * @param string $save_path The path where to store/retrieve the session - * @param string $session_id The session id - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function open($save_path, $session_id) - { - $this->db->connect(); - - return true; - } - - /** - * Read session data - * - * @param string $session_id The session id to read data for - * - * @return string The session data - * - * @since __DEPLOY_VERSION__ - */ - public function read($session_id) - { - try - { - // Get the session data from the database table. - $query = $this->db->getQuery(true) - ->select($this->db->quoteName('data')) - ->from($this->db->quoteName('#__session')) - ->where($this->db->quoteName('session_id') . ' = ?') - ->bind(1, $session_id); - - $this->db->setQuery($query); - - return (string) $this->db->loadResult(); - } - catch (\Exception $e) - { - return ''; - } - } - - /** - * Write session data - * - * @param string $session_id The session id - * @param string $session_data The encoded session data - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function write($session_id, $session_data) - { - try - { - // Figure out if a row exists for the session ID - $query = $this->db->getQuery(true) - ->select($this->db->quoteName('session_id')) - ->from($this->db->quoteName('#__session')) - ->where($this->db->quoteName('session_id') . ' = ?') - ->bind(1, $session_id); - - $idExists = $this->db->setQuery($query)->loadResult(); - - $query = $this->db->getQuery(true); - - $time = time(); - - if ($idExists) - { - $query->update($this->db->quoteName('#__session')) - ->set($this->db->quoteName('data') . ' = ?') - ->set($this->db->quoteName('time') . ' = ?') - ->where($this->db->quoteName('session_id') . ' = ?') - ->bind(1, $session_data) - ->bind(2, $time, ParameterType::INTEGER) - ->bind(3, $session_id); - } - else - { - $query->insert($this->db->quoteName('#__session')) - ->columns(array($this->db->quoteName('data'), $this->db->quoteName('time'), $this->db->quoteName('session_id'))) - ->values('?, ?, ?') - ->bind(1, $session_data) - ->bind(2, $time, ParameterType::INTEGER) - ->bind(3, $session_id); - } - - // Try to insert the session data in the database table. - $this->db->setQuery($query)->execute(); - - return true; - } - catch (\Exception $e) - { - return false; - } - } -} diff --git a/libraries/vendor/joomla/session/src/Handler/FilesystemHandler.php b/libraries/vendor/joomla/session/src/Handler/FilesystemHandler.php deleted file mode 100644 index b4fa3f8db9996..0000000000000 --- a/libraries/vendor/joomla/session/src/Handler/FilesystemHandler.php +++ /dev/null @@ -1,79 +0,0 @@ - 2) - { - throw new \InvalidArgumentException(sprintf('Invalid argument $path "%s"', $path)); - } - - // Characters after the last semi-colon are the path - $baseDir = ltrim(strrchr($path, ';'), ';'); - } - - // Create the directory if it doesn't exist - if (!is_dir($baseDir)) - { - if (!mkdir($baseDir, 0755)) - { - throw new \RuntimeException(sprintf('Could not create session directory "%s"', $baseDir)); - } - } - - if (!headers_sent()) - { - ini_set('session.save_path', $path); - ini_set('session.save_handler', 'files'); - } - } - - /** - * Test to see if the HandlerInterface is available - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public static function isSupported(): bool - { - return true; - } -} diff --git a/libraries/vendor/joomla/session/src/Handler/MemcachedHandler.php b/libraries/vendor/joomla/session/src/Handler/MemcachedHandler.php deleted file mode 100644 index d130524f87169..0000000000000 --- a/libraries/vendor/joomla/session/src/Handler/MemcachedHandler.php +++ /dev/null @@ -1,163 +0,0 @@ -memcached = $memcached; - - // Set the default time-to-live based on the Session object's default configuration - $this->ttl = isset($options['ttl']) ? (int) $options['ttl'] : 900; - - // Namespace our session IDs to avoid potential conflicts - $this->prefix = isset($options['prefix']) ? $options['prefix'] : 'jfw'; - } - - /** - * Close the session - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function close() - { - return true; - } - - /** - * Destroy a session - * - * @param integer $session_id The session ID being destroyed - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function destroy($session_id) - { - return $this->memcached->delete($this->prefix . $session_id); - } - - /** - * Cleanup old sessions - * - * @param integer $maxlifetime Sessions that have not updated for the last maxlifetime seconds will be removed - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function gc($maxlifetime) - { - // Memcached manages garbage collection on its own - return true; - } - - /** - * Test to see if the HandlerInterface is available - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public static function isSupported(): bool - { - /* - * GAE and HHVM have both had instances where Memcached the class was defined but no extension was loaded. - * If the class is there, we can assume it works. - */ - return (class_exists('Memcached')); - } - - /** - * Initialize session - * - * @param string $save_path The path where to store/retrieve the session - * @param string $session_id The session id - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function open($save_path, $session_id) - { - return true; - } - - /** - * Read session data - * - * @param string $session_id The session id to read data for - * - * @return string The session data - * - * @since __DEPLOY_VERSION__ - */ - public function read($session_id) - { - return $this->memcached->get($this->prefix . $session_id) ?: ''; - } - - /** - * Write session data - * - * @param string $session_id The session id - * @param string $session_data The encoded session data - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function write($session_id, $session_data) - { - return $this->memcached->set($this->prefix . $session_id, $session_data, time() + $this->ttl); - } -} diff --git a/libraries/vendor/joomla/session/src/Handler/RedisHandler.php b/libraries/vendor/joomla/session/src/Handler/RedisHandler.php deleted file mode 100644 index 8aa300563d380..0000000000000 --- a/libraries/vendor/joomla/session/src/Handler/RedisHandler.php +++ /dev/null @@ -1,167 +0,0 @@ -redis = $redis; - - // Set the default time-to-live based on the Session object's default configuration - $this->ttl = isset($options['ttl']) ? (int) $options['ttl'] : 900; - - // Namespace our session IDs to avoid potential conflicts - $this->prefix = isset($options['prefix']) ? $options['prefix'] : 'jfw'; - } - - /** - * Close the session - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function close() - { - $this->redis->close(); - - return true; - } - - /** - * Destroy a session - * - * @param integer $session_id The session ID being destroyed - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function destroy($session_id) - { - $this->redis->del($this->prefix . $session_id); - - return $this->close(); - } - - /** - * Cleanup old sessions - * - * @param integer $maxlifetime Sessions that have not updated for the last maxlifetime seconds will be removed - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function gc($maxlifetime) - { - return true; - } - - /** - * Test to see if the HandlerInterface is available - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public static function isSupported(): bool - { - return extension_loaded('redis') && class_exists('Redis'); - } - - /** - * Initialize session - * - * @param string $save_path The path where to store/retrieve the session - * @param string $session_id The session id - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function open($save_path, $session_id) - { - return true; - } - - /** - * Read session data - * - * @param string $session_id The session id to read data for - * - * @return string The session data - * - * @since __DEPLOY_VERSION__ - */ - public function read($session_id) - { - return $this->redis->get($this->prefix . $session_id) ?: ''; - } - - /** - * Write session data - * - * @param string $session_id The session id - * @param string $session_data The encoded session data - * - * @return boolean True on success, false otherwise - * - * @since __DEPLOY_VERSION__ - */ - public function write($session_id, $session_data) - { - if ($this->ttl > 0) - { - return $this->redis->setex($this->prefix . $session_id, $this->ttl, $session_data); - } - - return $this->redis->set($this->prefix . $session_id, $session_data); - } -} diff --git a/libraries/vendor/joomla/session/src/Handler/WincacheHandler.php b/libraries/vendor/joomla/session/src/Handler/WincacheHandler.php deleted file mode 100644 index 37a6b8f3a22c0..0000000000000 --- a/libraries/vendor/joomla/session/src/Handler/WincacheHandler.php +++ /dev/null @@ -1,44 +0,0 @@ -store = $store ?: new Storage\NativeStorage(new Handler\FilesystemHandler); - - if ($dispatcher) - { - $this->setDispatcher($dispatcher); - } - - $this->setOptions($options); - - $this->setState('inactive'); - } - - /** - * Adds a validator to the session - * - * @param ValidatorInterface $validator The session validator - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function addValidator(ValidatorInterface $validator) - { - $this->sessionValidators[] = $validator; - } - - /** - * Get expiration time in seconds - * - * @return integer The session expiration time in seconds - * - * @since 1.0 - */ - public function getExpire() - { - return $this->expire; - } - - /** - * Get current state of session - * - * @return string The session state - * - * @since 1.0 - */ - public function getState() - { - return $this->state; - } - - /** - * Get a session token. - * - * Tokens are used to secure forms from spamming attacks. Once a token has been generated the system will check the request to see if - * it is present, if not it will invalidate the session. - * - * @param boolean $forceNew If true, forces a new token to be created - * - * @return string - * - * @since 1.0 - */ - public function getToken($forceNew = false) - { - // Ensure the session token exists and create it if necessary - if (!$this->has('session.token') || $forceNew) - { - $this->set('session.token', $this->createToken()); - } - - return $this->get('session.token'); - } - - /** - * Check if the session has the given token. - * - * @param string $token Hashed token to be verified - * @param boolean $forceExpire If true, expires the session - * - * @return boolean - * - * @since 1.0 - */ - public function hasToken($token, $forceExpire = true) - { - $result = $this->get('session.token') === $token; - - if (!$result && $forceExpire) - { - $this->setState('expired'); - } - - return $result; - } - - /** - * Retrieve an external iterator. - * - * @return \ArrayIterator Return an ArrayIterator of $_SESSION. - * - * @since 1.0 - */ - public function getIterator() - { - return new \ArrayIterator($this->all()); - } - - /** - * Get session name - * - * @return string The session name - * - * @since 1.0 - */ - public function getName() - { - return $this->store->getName(); - } - - /** - * Set the session name - * - * @param string $name The session name - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function setName(string $name) - { - $this->store->setName($name); - - return $this; - } - - /** - * Get session id - * - * @return string The session name - * - * @since 1.0 - */ - public function getId() - { - return $this->store->getId(); - } - - /** - * Set the session ID - * - * @param string $id The session ID - * - * @return $this - * - * @since __DEPLOY_VERSION__ - */ - public function setId(string $id) - { - $this->store->setId($id); - - return $this; - } - - /** - * Get the available session handlers - * - * @return array An array of available session handlers - * - * @since __DEPLOY_VERSION__ - */ - public static function getHandlers(): array - { - $connectors = []; - - // Get an iterator and loop trough the handler classes. - $iterator = new \DirectoryIterator(__DIR__ . '/Handler'); - - foreach ($iterator as $file) - { - $fileName = $file->getFilename(); - - // Only load for PHP files. - if (!$file->isFile() || $file->getExtension() != 'php') - { - continue; - } - - // Derive the class name from the type. - $class = str_ireplace('.php', '', __NAMESPACE__ . '\\Handler\\' . ucfirst(trim($fileName))); - - // If the class doesn't exist we have nothing left to do but look at the next type. We did our best. - if (!class_exists($class)) - { - continue; - } - - // Sweet! Our class exists, so now we just need to know if it passes its test method. - if ($class::isSupported()) - { - // Connector names should not have file the handler suffix or the file extension. - $connectors[] = str_ireplace('Handler.php', '', $fileName); - } - } - - return $connectors; - } - - /** - * Check if the session is active - * - * @return boolean - * - * @since 1.0 - */ - public function isActive() - { - if ($this->getState() === 'active') - { - return $this->store->isActive(); - } - - return false; - } - - /** - * Check whether this session is currently created - * - * @return boolean True on success. - * - * @since 1.0 - */ - public function isNew() - { - $counter = $this->get('session.counter'); - - return (bool) ($counter === 1); - } - - /** - * Check if the session is started - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function isStarted(): bool - { - return $this->store->isStarted(); - } - - /** - * Get data from the session store - * - * @param string $name Name of a variable - * @param mixed $default Default value of a variable if not set - * - * @return mixed Value of a variable - * - * @since 1.0 - */ - public function get($name, $default = null) - { - if (!$this->isActive()) - { - $this->start(); - } - - return $this->store->get($name, $default); - } - - /** - * Set data into the session store. - * - * @param string $name Name of a variable. - * @param mixed $value Value of a variable. - * - * @return mixed Old value of a variable. - * - * @since 1.0 - */ - public function set($name, $value = null) - { - if (!$this->isActive()) - { - $this->start(); - } - - return $this->store->set($name, $value); - } - - /** - * Check whether data exists in the session store - * - * @param string $name Name of variable - * - * @return boolean True if the variable exists - * - * @since 1.0 - */ - public function has($name) - { - if (!$this->isActive()) - { - $this->start(); - } - - return $this->store->has($name); - } - - /** - * Unset a variable from the session store - * - * @param string $name Name of variable - * - * @return mixed The value from session or NULL if not set - * - * @since __DEPLOY_VERSION__ - */ - public function remove(string $name) - { - if (!$this->isActive()) - { - $this->start(); - } - - return $this->store->remove($name); - } - - /** - * Clears all variables from the session store - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function clear() - { - if (!$this->isActive()) - { - $this->start(); - } - - $this->store->clear(); - } - - /** - * Retrieves all variables from the session store - * - * @return array - * - * @since __DEPLOY_VERSION__ - */ - public function all() - { - if (!$this->isActive()) - { - $this->start(); - } - - return $this->store->all(); - } - - /** - * Start a session. - * - * @return void - * - * @since 1.0 - */ - public function start() - { - if ($this->isStarted()) - { - return; - } - - $this->store->start(); - - $this->setState('active'); - - // Initialise the session - $this->setCounter(); - $this->setTimers(); - - // Perform security checks - if (!$this->validate()) - { - // If the session isn't valid because it expired try to restart it or destroy it. - if ($this->getState() === 'expired') - { - $this->restart(); - } - else - { - $this->destroy(); - } - } - - if ($this->dispatcher) - { - if (!empty($this->dispatcher->getListeners('onAfterSessionStart'))) - { - @trigger_error( - sprintf( - 'The `onAfterSessionStart` event is deprecated and will be removed in 3.0, use the %s::START event instead.', - SessionEvents::class - ), - E_USER_DEPRECATED - ); - - // Dispatch deprecated event - $this->dispatcher->dispatch('onAfterSessionStart', new SessionEvent('onAfterSessionStart', $this)); - } - - // Dispatch new event - $this->dispatcher->dispatch(SessionEvents::START, new SessionEvent(SessionEvents::START, $this)); - } - } - - /** - * Frees all session variables and destroys all data registered to a session - * - * This method resets the $_SESSION variable and destroys all of the data associated - * with the current session in its storage (file or DB). It forces new session to be - * started after this method is called. - * - * @return boolean True on success - * - * @see session_destroy() - * @see session_unset() - * @since 1.0 - */ - public function destroy() - { - // Session was already destroyed - if ($this->getState() === 'destroyed') - { - return true; - } - - $this->clear(); - $this->fork(true); - - $this->setState('destroyed'); - - return true; - } - - /** - * Restart an expired or locked session. - * - * @return boolean True on success - * - * @see destroy - * @since 1.0 - */ - public function restart() - { - // Backup existing session data - $data = $this->all(); - - $this->destroy(); - - if ($this->getState() !== 'destroyed') - { - // @TODO :: generated error here - return false; - } - - // Restart the session - $this->store->start(); - - $this->setState('active'); - - // Initialise the session - $this->setCounter(); - $this->setTimers(); - - // Restore the data - foreach ($data as $key => $value) - { - $this->set($key, $value); - } - - // If the restarted session cannot be validated then it will be destroyed - if (!$this->validate(true)) - { - $this->destroy(); - } - - if ($this->dispatcher) - { - if (!empty($this->dispatcher->getListeners('onAfterSessionRestart'))) - { - @trigger_error( - sprintf( - 'The `onAfterSessionRestart` event is deprecated and will be removed in 3.0, use the %s::RESTART event instead.', - SessionEvents::class - ), - E_USER_DEPRECATED - ); - - // Dispatch deprecated event - $this->dispatcher->dispatch('onAfterSessionRestart', new SessionEvent('onAfterSessionRestart', $this)); - } - - // Dispatch new event - $this->dispatcher->dispatch(SessionEvents::RESTART, new SessionEvent(SessionEvents::RESTART, $this)); - } - - return true; - } - - /** - * Create a new session and copy variables from the old one - * - * @param boolean $destroy Whether to delete the old session or leave it to garbage collection. - * - * @return boolean True on success - * - * @since 1.0 - */ - public function fork($destroy = false) - { - $result = $this->store->regenerate($destroy); - - if ($result) - { - $this->setTimers(); - } - - return $result; - } - - /** - * Writes session data and ends session - * - * Session data is usually stored after your script terminated without the need - * to call {@link Session::close()}, but as session data is locked to prevent concurrent - * writes only one script may operate on a session at any time. When using - * framesets together with sessions you will experience the frames loading one - * by one due to this locking. You can reduce the time needed to load all the - * frames by ending the session as soon as all changes to session variables are - * done. - * - * @return void - * - * @see session_write_close() - * @since 1.0 - */ - public function close() - { - $this->store->close(); - $this->setState('closed'); - } - - /** - * Perform session data garbage collection - * - * @return integer|boolean Number of deleted sessions on success or boolean false on failure or if the function is unsupported - * - * @see session_gc() - * @since __DEPLOY_VERSION__ - */ - public function gc() - { - if (!$this->isActive()) - { - $this->start(); - } - - return $this->store->gc(); - } - - /** - * Aborts the current session - * - * @return boolean - * - * @see session_abort() - * @since __DEPLOY_VERSION__ - */ - public function abort() - { - if (!$this->isActive()) - { - return true; - } - - return $this->store->abort(); - } - - /** - * Create a token-string - * - * @param integer $length Length of string - * - * @return string Generated token - * - * @since __DEPLOY_VERSION__ - */ - protected function createToken(int $length = 32): string - { - return bin2hex(random_bytes($length)); - } - - /** - * Set counter of session usage - * - * @return boolean True on success - * - * @since 1.0 - */ - protected function setCounter() - { - $counter = $this->get('session.counter', 0); - ++$counter; - - $this->set('session.counter', $counter); - - return true; - } - - /** - * Set the session expiration - * - * @param integer $expire Maximum age of unused session in seconds - * - * @return $this - * - * @since 1.3.0 - */ - protected function setExpire($expire) - { - $this->expire = $expire; - - return $this; - } - - /** - * Set the session state - * - * @param string $state Internal state - * - * @return $this - * - * @since 1.3.0 - */ - protected function setState($state) - { - $this->state = $state; - - return $this; - } - - /** - * Set the session timers - * - * @return boolean True on success - * - * @since 1.0 - */ - protected function setTimers() - { - if (!$this->has('session.timer.start')) - { - $start = time(); - - $this->set('session.timer.start', $start); - $this->set('session.timer.last', $start); - $this->set('session.timer.now', $start); - } - - $this->set('session.timer.last', $this->get('session.timer.now')); - $this->set('session.timer.now', time()); - - return true; - } - - /** - * Set additional session options - * - * @param array $options List of parameter - * - * @return boolean True on success - * - * @since 1.0 - */ - protected function setOptions(array $options) - { - // Set name - if (isset($options['name'])) - { - $this->setName($options['name']); - } - - // Set id - if (isset($options['id'])) - { - $this->setId($options['id']); - } - - // Set expire time - if (isset($options['expire'])) - { - $this->setExpire($options['expire']); - } - - // Sync the session maxlifetime - if (!headers_sent()) - { - ini_set('session.gc_maxlifetime', $this->getExpire()); - } - - return true; - } - - /** - * Do some checks for security reasons - * - * If one check fails, session data has to be cleaned. - * - * @param boolean $restart Reactivate session - * - * @return boolean True on success - * - * @see http://shiflett.org/articles/the-truth-about-sessions - * @since 1.0 - */ - protected function validate($restart = false) - { - // Allow to restart a session - if ($restart) - { - $this->setState('active'); - } - - // Check if session has expired - if ($this->expire) - { - $curTime = $this->get('session.timer.now', 0); - $maxTime = $this->get('session.timer.last', 0) + $this->expire; - - // Empty session variables - if ($maxTime < $curTime) - { - $this->setState('expired'); - - return false; - } - } - - try - { - foreach ($this->sessionValidators as $validator) - { - $validator->validate($restart); - } - } - catch (Exception\InvalidSessionException $e) - { - $this->setState('error'); - - return false; - } - - return true; - } -} diff --git a/libraries/vendor/joomla/session/src/SessionEvent.php b/libraries/vendor/joomla/session/src/SessionEvent.php deleted file mode 100644 index e7a2c3c820915..0000000000000 --- a/libraries/vendor/joomla/session/src/SessionEvent.php +++ /dev/null @@ -1,54 +0,0 @@ -session = $session; - } - - /** - * Retrieve the SessionInterface object attached to this event. - * - * @return SessionInterface - * - * @since __DEPLOY_VERSION__ - */ - public function getSession(): SessionInterface - { - return $this->session; - } -} diff --git a/libraries/vendor/joomla/session/src/SessionEvents.php b/libraries/vendor/joomla/session/src/SessionEvents.php deleted file mode 100644 index c4d5368d16f13..0000000000000 --- a/libraries/vendor/joomla/session/src/SessionEvents.php +++ /dev/null @@ -1,46 +0,0 @@ - 1, - 'use_trans_sid' => 0, - ]; - - if (!headers_sent()) - { - session_cache_limiter('none'); - } - - session_register_shutdown(); - - $this->setOptions($options); - $this->setHandler($handler); - } - - /** - * Retrieves all variables from the session store - * - * @return array - * - * @since __DEPLOY_VERSION__ - */ - public function all(): array - { - return $_SESSION; - } - - /** - * Clears all variables from the session store - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function clear() - { - $_SESSION = []; - } - - /** - * Writes session data and ends session - * - * @return void - * - * @see session_write_close() - * @since __DEPLOY_VERSION__ - */ - public function close() - { - session_write_close(); - - $this->closed = true; - $this->started = false; - } - - /** - * Perform session data garbage collection - * - * @return integer|boolean Number of deleted sessions on success or boolean false on failure or if the function is unsupported - * - * @see session_gc() - * @since __DEPLOY_VERSION__ - */ - public function gc() - { - if (!function_exists('session_gc')) - { - return false; - } - - if (!$this->isStarted()) - { - $this->start(); - } - - return session_gc(); - } - - /** - * Aborts the current session - * - * @return boolean - * - * @see session_abort() - * @since __DEPLOY_VERSION__ - */ - public function abort() - { - if (!$this->isStarted()) - { - return true; - } - - return session_abort(); - } - - /** - * Get data from the session store - * - * @param string $name Name of a variable - * @param mixed $default Default value of a variable if not set - * - * @return mixed Value of a variable - * - * @since __DEPLOY_VERSION__ - */ - public function get(string $name, $default) - { - if (!$this->isStarted()) - { - $this->start(); - } - - if (isset($_SESSION[$name])) - { - return $_SESSION[$name]; - } - - return $default; - } - - /** - * Gets the save handler instance - * - * @return \SessionHandlerInterface - * - * @since __DEPLOY_VERSION__ - */ - public function getHandler(): \SessionHandlerInterface - { - return $this->handler; - } - - /** - * Get the session ID - * - * @return string The session ID - * - * @since __DEPLOY_VERSION__ - */ - public function getId(): string - { - return session_id(); - } - - /** - * Get the session name - * - * @return string The session name - * - * @since __DEPLOY_VERSION__ - */ - public function getName(): string - { - return session_name(); - } - - /** - * Check whether data exists in the session store - * - * @param string $name Name of variable - * - * @return boolean True if the variable exists - * - * @since __DEPLOY_VERSION__ - */ - public function has(string $name): bool - { - if (!$this->isStarted()) - { - $this->start(); - } - - return isset($_SESSION[$name]); - } - - /** - * Check if the session is active - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function isActive(): bool - { - return $this->active = session_status() === \PHP_SESSION_ACTIVE; - } - - /** - * Check if the session is started - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function isStarted(): bool - { - return $this->started; - } - - /** - * Unset a variable from the session store - * - * @param string $name Name of variable - * - * @return mixed The value from session or NULL if not set - * - * @since __DEPLOY_VERSION__ - */ - public function remove(string $name) - { - if (!$this->isStarted()) - { - $this->start(); - } - - $old = $_SESSION[$name] ?? null; - - unset($_SESSION[$name]); - - return $old; - } - - /** - * Regenerates the session ID that represents this storage. - * - * This method must invoke session_regenerate_id($destroy) unless this interface is used for a storage object designed for unit - * or functional testing where a real PHP session would interfere with testing. - * - * @param boolean $destroy Destroy session when regenerating? - * - * @return boolean True on success - * - * @see session_regenerate_id() - * @since __DEPLOY_VERSION__ - */ - public function regenerate(bool $destroy = false): bool - { - if (headers_sent() || !$this->isActive()) - { - return false; - } - - return session_regenerate_id($destroy); - } - - /** - * Set data into the session store - * - * @param string $name Name of a variable. - * @param mixed $value Value of a variable. - * - * @return mixed Old value of a variable. - * - * @since __DEPLOY_VERSION__ - */ - public function set(string $name, $value = null) - { - if (!$this->isStarted()) - { - $this->start(); - } - - $old = $_SESSION[$name] ?? null; - - $_SESSION[$name] = $value; - - return $old; - } - - /** - * Registers session save handler as a PHP session handler - * - * @param \SessionHandlerInterface $handler The save handler to use - * - * @return $this - * - * @since __DEPLOY_VERSION__ - * @throws \RuntimeException - */ - public function setHandler(\SessionHandlerInterface $handler = null) - { - // If the handler is an instance of our HandlerInterface, check whether it is supported - if ($handler instanceof HandlerInterface) - { - if (!$handler::isSupported()) - { - throw new \RuntimeException( - sprintf( - 'The "%s" handler is not supported in this environment.', - get_class($handler) - ) - ); - } - } - - $this->handler = $handler; - - if (!headers_sent() && !$this->isActive()) - { - session_set_save_handler($this->handler, false); - } - - return $this; - } - - /** - * Set the session ID - * - * @param string $id The session ID - * - * @return $this - * - * @since __DEPLOY_VERSION__ - * @throws \LogicException - */ - public function setId(string $id) - { - if ($this->isActive()) - { - throw new \LogicException('Cannot change the ID of an active session'); - } - - session_id($id); - - return $this; - } - - /** - * Set the session name - * - * @param string $name The session name - * - * @return $this - * - * @since __DEPLOY_VERSION__ - * @throws \LogicException - */ - public function setName(string $name) - { - if ($this->isActive()) - { - throw new \LogicException('Cannot change the name of an active session'); - } - - session_name($name); - - return $this; - } - - /** - * Sets session.* ini variables. - * - * For convenience we omit 'session.' from the beginning of the keys. - * Explicitly ignores other ini keys. - * - * @param array $options Session ini directives array(key => value). - * - * @return $this - * - * @note Based on \Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage::setOptions() - * @see http://php.net/session.configuration - * @since __DEPLOY_VERSION__ - */ - public function setOptions(array $options) - { - if (headers_sent() || $this->isActive()) - { - return $this; - } - - $validOptions = array_flip( - [ - 'cache_limiter', 'cache_expire', 'cookie_domain', 'cookie_httponly', 'cookie_lifetime', 'cookie_path', 'cookie_secure', 'gc_divisor', - 'gc_maxlifetime', 'gc_probability', 'lazy_write', 'name', 'referer_check', 'serialize_handler', 'use_strict_mode', 'use_cookies', - 'use_only_cookies', 'use_trans_sid', 'upload_progress.enabled', 'upload_progress.cleanup', 'upload_progress.prefix', - 'upload_progress.name', 'upload_progress.freq', 'upload_progress.min-freq', 'url_rewriter.tags', 'sid_length', - 'sid_bits_per_character', 'trans_sid_hosts', 'trans_sid_tags', - ] - ); - - foreach ($options as $key => $value) - { - if (isset($validOptions[$key])) - { - ini_set('session.' . $key, $value); - } - } - - return $this; - } - - /** - * Start a session - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function start() - { - if ($this->isStarted()) - { - return; - } - - if ($this->isActive()) - { - throw new \RuntimeException('Failed to start the session: already started by PHP.'); - } - - if (ini_get('session.use_cookies') && headers_sent($file, $line)) - { - throw new \RuntimeException( - sprintf('Failed to start the session because headers have already been sent by "%s" at line %d.', $file, $line) - ); - } - - if (!session_start()) - { - throw new \RuntimeException('Failed to start the session'); - } - - $this->isActive(); - $this->closed = false; - $this->started = true; - } -} diff --git a/libraries/vendor/joomla/session/src/Storage/RuntimeStorage.php b/libraries/vendor/joomla/session/src/Storage/RuntimeStorage.php deleted file mode 100644 index 7a3dce33a63d5..0000000000000 --- a/libraries/vendor/joomla/session/src/Storage/RuntimeStorage.php +++ /dev/null @@ -1,383 +0,0 @@ -data; - } - - /** - * Clears all variables from the session store - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function clear() - { - $this->data = array(); - } - - /** - * Writes session data and ends session - * - * @return void - * - * @see session_write_close() - * @since __DEPLOY_VERSION__ - */ - public function close() - { - $this->closed = true; - $this->started = false; - } - - /** - * Perform session data garbage collection - * - * @return integer|boolean Number of deleted sessions on success or boolean false on failure or if the function is unsupported - * - * @see session_gc() - * @since __DEPLOY_VERSION__ - */ - public function gc() - { - return 0; - } - - /** - * Aborts the current session - * - * @return boolean - * - * @see session_abort() - * @since __DEPLOY_VERSION__ - */ - public function abort() - { - $this->closed = true; - $this->started = false; - - return true; - } - - /** - * Generates a session ID - * - * @return string - * - * @since __DEPLOY_VERSION__ - */ - private function generateId(): string - { - return hash('sha256', uniqid(mt_rand())); - } - - /** - * Get data from the session store - * - * @param string $name Name of a variable - * @param mixed $default Default value of a variable if not set - * - * @return mixed Value of a variable - * - * @since __DEPLOY_VERSION__ - */ - public function get(string $name, $default) - { - if (!$this->isStarted()) - { - $this->start(); - } - - if (isset($this->data[$name])) - { - return $this->data[$name]; - } - - return $default; - } - - /** - * Get the session ID - * - * @return string The session ID - * - * @since __DEPLOY_VERSION__ - */ - public function getId(): string - { - return $this->id; - } - - /** - * Get the session name - * - * @return string The session name - * - * @since __DEPLOY_VERSION__ - */ - public function getName(): string - { - return $this->name; - } - - /** - * Check whether data exists in the session store - * - * @param string $name Name of variable - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function has(string $name): bool - { - if (!$this->isStarted()) - { - $this->start(); - } - - return isset($this->data[$name]); - } - - /** - * Check if the session is active - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function isActive(): bool - { - return $this->active = $this->started; - } - - /** - * Check if the session is started - * - * @return boolean - * - * @since __DEPLOY_VERSION__ - */ - public function isStarted(): bool - { - return $this->started; - } - - /** - * Unset a variable from the session store - * - * @param string $name Name of variable - * - * @return mixed The value from session or NULL if not set - * - * @since __DEPLOY_VERSION__ - */ - public function remove(string $name) - { - if (!$this->isStarted()) - { - $this->start(); - } - - $old = $this->data[$name] ?? null; - - unset($this->data[$name]); - - return $old; - } - - /** - * Regenerates the session ID that represents this storage. - * - * This method must invoke session_regenerate_id($destroy) unless this interface is used for a storage object designed for unit - * or functional testing where a real PHP session would interfere with testing. - * - * @param boolean $destroy Destroy session when regenerating? - * - * @return boolean True on success - * - * @see session_regenerate_id() - * @since __DEPLOY_VERSION__ - */ - public function regenerate(bool $destroy = false): bool - { - if (!$this->isActive()) - { - return false; - } - - if ($destroy) - { - $this->id = $this->generateId(); - } - - return true; - } - - /** - * Set data into the session store - * - * @param string $name Name of a variable. - * @param mixed $value Value of a variable. - * - * @return mixed Old value of a variable. - * - * @since __DEPLOY_VERSION__ - */ - public function set(string $name, $value = null) - { - if (!$this->isStarted()) - { - $this->start(); - } - - $old = $this->data[$name] ?? null; - - $this->data[$name] = $value; - - return $old; - } - - /** - * Set the session ID - * - * @param string $id The session ID - * - * @return $this - * - * @since __DEPLOY_VERSION__ - * @throws \LogicException - */ - public function setId(string $id) - { - if ($this->isActive()) - { - throw new \LogicException('Cannot change the ID of an active session'); - } - - $this->id = $id; - - return $this; - } - - /** - * Set the session name - * - * @param string $name The session name - * - * @return $this - * - * @since __DEPLOY_VERSION__ - * @throws \LogicException - */ - public function setName(string $name) - { - if ($this->isActive()) - { - throw new \LogicException('Cannot change the name of an active session'); - } - - $this->name = $name; - - return $this; - } - - /** - * Start a session - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function start() - { - if ($this->isStarted()) - { - return; - } - - if ($this->isActive()) - { - throw new \RuntimeException('Failed to start the session: already started by PHP.'); - } - - if (empty($this->id)) - { - $this->setId($this->generateId()); - } - - $this->closed = false; - $this->started = true; - $this->isActive(); - } -} diff --git a/libraries/vendor/joomla/session/src/StorageInterface.php b/libraries/vendor/joomla/session/src/StorageInterface.php deleted file mode 100644 index f653c5128f695..0000000000000 --- a/libraries/vendor/joomla/session/src/StorageInterface.php +++ /dev/null @@ -1,193 +0,0 @@ -input = $input; - $this->session = $session; - } - - /** - * Validates the session - * - * @param boolean $restart Flag if the session should be restarted - * - * @return void - * - * @since __DEPLOY_VERSION__ - * @throws InvalidSessionException - */ - public function validate(bool $restart = false) - { - if ($restart) - { - $this->session->set('session.client.address', null); - } - - $remoteAddr = $this->input->server->getString('REMOTE_ADDR', ''); - - // Check for client address - if (!empty($remoteAddr) && filter_var($remoteAddr, FILTER_VALIDATE_IP) !== false) - { - $ip = $this->session->get('session.client.address'); - - if ($ip === null) - { - $this->session->set('session.client.address', $remoteAddr); - } - elseif ($remoteAddr !== $ip) - { - throw new InvalidSessionException('Invalid client IP'); - } - } - } -} diff --git a/libraries/vendor/joomla/session/src/Validator/ForwardedValidator.php b/libraries/vendor/joomla/session/src/Validator/ForwardedValidator.php deleted file mode 100644 index d28561727a93f..0000000000000 --- a/libraries/vendor/joomla/session/src/Validator/ForwardedValidator.php +++ /dev/null @@ -1,76 +0,0 @@ -input = $input; - $this->session = $session; - } - - /** - * Validates the session - * - * @param boolean $restart Flag if the session should be restarted - * - * @return void - * - * @since __DEPLOY_VERSION__ - */ - public function validate(bool $restart = false) - { - if ($restart) - { - $this->session->set('session.client.forwarded', null); - } - - $xForwardedFor = $this->input->server->getString('HTTP_X_FORWARDED_FOR', ''); - - // Record proxy forwarded for in the session in case we need it later - if (!empty($xForwardedFor) && filter_var($xForwardedFor, FILTER_VALIDATE_IP) !== false) - { - $this->session->set('session.client.forwarded', $xForwardedFor); - } - } -} diff --git a/libraries/vendor/joomla/session/src/ValidatorInterface.php b/libraries/vendor/joomla/session/src/ValidatorInterface.php deleted file mode 100644 index b61603fcd0e27..0000000000000 --- a/libraries/vendor/joomla/session/src/ValidatorInterface.php +++ /dev/null @@ -1,29 +0,0 @@ - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/string/src/Inflector.php b/libraries/vendor/joomla/string/src/Inflector.php deleted file mode 100644 index 472e9e5d7d9e2..0000000000000 --- a/libraries/vendor/joomla/string/src/Inflector.php +++ /dev/null @@ -1,333 +0,0 @@ - [ - 'id', - 'hits', - 'clicks', - ], - ]; - - /** - * Adds inflection regex rules to the inflector. - * - * @param mixed $data A string or an array of strings or regex rules to add. - * @param string $ruleType The rule type: singular | plural | countable - * - * @return void - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - private function addRule($data, string $ruleType) - { - if (is_string($data)) - { - $data = [$data]; - } - elseif (!is_array($data)) - { - throw new \InvalidArgumentException('Invalid inflector rule data.'); - } - elseif (!in_array($ruleType, ['singular', 'plural', 'countable'])) - { - throw new \InvalidArgumentException('Unsupported rule type.'); - } - - if ($ruleType === 'countable') - { - foreach ($data as $rule) - { - // Ensure a string is pushed. - array_push(self::$countable['rules'], (string) $rule); - } - } - else - { - static::rules($ruleType, $data); - } - } - - /** - * Adds a countable word. - * - * @param mixed $data A string or an array of strings to add. - * - * @return $this - * - * @since 1.0 - */ - public function addCountableRule($data) - { - $this->addRule($data, 'countable'); - - return $this; - } - - /** - * Adds a specific singular-plural pair for a word. - * - * @param string $singular The singular form of the word. - * @param string $plural The plural form of the word. If omitted, it is assumed the singular and plural are identical. - * - * @return $this - * - * @since 1.0 - * @deprecated 3.0 Use Doctrine\Common\Inflector\Inflector::rules() instead. - */ - public function addWord($singular, $plural = '') - { - @trigger_error( - sprintf( - '%1$s() is deprecated and will be removed in 3.0, use %2$s::rules() instead.', - __METHOD__, - DoctrineInflector::class - ), - E_USER_DEPRECATED - ); - - if ($plural !== '') - { - static::rules( - 'plural', - [ - 'irregular' => [$plural => $singular] - ] - ); - - static::rules( - 'singular', - [ - 'irregular' => [$singular => $plural] - ] - ); - } - else - { - static::rules( - 'plural', - [ - 'uninflected' => [$singular] - ] - ); - - static::rules( - 'singular', - [ - 'uninflected' => [$singular] - ] - ); - } - - return $this; - } - - /** - * Adds a pluralisation rule. - * - * @param mixed $data A string or an array of regex rules to add. - * - * @return $this - * - * @since 1.0 - * @deprecated 3.0 Use Doctrine\Common\Inflector\Inflector::rules() instead. - */ - public function addPluraliseRule($data) - { - @trigger_error( - sprintf( - '%1$s() is deprecated and will be removed in 3.0, use %2$s::rules() instead.', - __METHOD__, - DoctrineInflector::class - ), - E_USER_DEPRECATED - ); - - $this->addRule($data, 'plural'); - - return $this; - } - - /** - * Adds a singularisation rule. - * - * @param mixed $data A string or an array of regex rules to add. - * - * @return $this - * - * @since 1.0 - * @deprecated 3.0 Use Doctrine\Common\Inflector\Inflector::rules() instead. - */ - public function addSingulariseRule($data) - { - @trigger_error( - sprintf( - '%1$s() is deprecated and will be removed in 3.0, use %2$s::rules() instead.', - __METHOD__, - DoctrineInflector::class - ), - E_USER_DEPRECATED - ); - - $this->addRule($data, 'singular'); - - return $this; - } - - /** - * Gets an instance of the Inflector singleton. - * - * @param boolean $new If true (default is false), returns a new instance regardless if one exists. This argument is mainly used for testing. - * - * @return static - * - * @since 1.0 - * @deprecated 3.0 Use static methods without a class instance instead. - */ - public static function getInstance($new = false) - { - @trigger_error( - sprintf( - '%1$s() is deprecated and will be removed in 3.0.', - __METHOD__ - ), - E_USER_DEPRECATED - ); - - if ($new) - { - return new static; - } - - if (!is_object(self::$instance)) - { - self::$instance = new static; - } - - return self::$instance; - } - - /** - * Checks if a word is countable. - * - * @param string $word The string input. - * - * @return boolean True if word is countable, false otherwise. - * - * @since 1.0 - */ - public function isCountable($word) - { - return in_array($word, self::$countable['rules']); - } - - /** - * Checks if a word is in a plural form. - * - * @param string $word The string input. - * - * @return boolean True if word is plural, false if not. - * - * @since 1.0 - */ - public function isPlural($word) - { - return $this->toPlural($this->toSingular($word)) === $word; - } - - /** - * Checks if a word is in a singular form. - * - * @param string $word The string input. - * - * @return boolean True if word is singular, false if not. - * - * @since 1.0 - */ - public function isSingular($word) - { - return $this->toSingular($word) === $word; - } - - /** - * Converts a word into its plural form. - * - * @param string $word The singular word to pluralise. - * - * @return string The word in plural form. - * - * @since 1.0 - * @deprecated 3.0 Use Doctrine\Common\Inflector\Inflector::pluralize() instead. - */ - public function toPlural($word) - { - @trigger_error( - sprintf( - '%1$s() is deprecated and will be removed in 3.0, use %2$s::pluralize() instead.', - __METHOD__, - DoctrineInflector::class - ), - E_USER_DEPRECATED - ); - - return static::pluralize($word); - } - - /** - * Converts a word into its singular form. - * - * @param string $word The plural word to singularise. - * - * @return string The word in singular form. - * - * @since 1.0 - * @deprecated 3.0 Use Doctrine\Common\Inflector\Inflector::singularize() instead. - */ - public function toSingular($word) - { - @trigger_error( - sprintf( - '%1$s() is deprecated and will be removed in 3.0, use %2$s::singularize() instead.', - __METHOD__, - DoctrineInflector::class - ), - E_USER_DEPRECATED - ); - - return static::singularize($word); - } -} diff --git a/libraries/vendor/joomla/string/src/Normalise.php b/libraries/vendor/joomla/string/src/Normalise.php deleted file mode 100644 index 8d30395aa53ab..0000000000000 --- a/libraries/vendor/joomla/string/src/Normalise.php +++ /dev/null @@ -1,155 +0,0 @@ - [ - '#-(\d+)$#', - '-%d' - ], - 'default' => [ - ['#\((\d+)\)$#', '#\(\d+\)$#'], - [' (%d)', '(%d)'], - ], - ]; - - /** - * Increments a trailing number in a string. - * - * Used to easily create distinct labels when copying objects. The method has the following styles: - * - * default: "Label" becomes "Label (2)" - * dash: "Label" becomes "Label-2" - * - * @param string $string The source string. - * @param string $style The the style (default|dash). - * @param integer $n If supplied, this number is used for the copy, otherwise it is the 'next' number. - * - * @return string The incremented string. - * - * @since 1.3.0 - */ - public static function increment($string, $style = 'default', $n = 0) - { - $styleSpec = isset(static::$incrementStyles[$style]) ? static::$incrementStyles[$style] : static::$incrementStyles['default']; - - // Regular expression search and replace patterns. - if (is_array($styleSpec[0])) - { - $rxSearch = $styleSpec[0][0]; - $rxReplace = $styleSpec[0][1]; - } - else - { - $rxSearch = $rxReplace = $styleSpec[0]; - } - - // New and old (existing) sprintf formats. - if (is_array($styleSpec[1])) - { - $newFormat = $styleSpec[1][0]; - $oldFormat = $styleSpec[1][1]; - } - else - { - $newFormat = $oldFormat = $styleSpec[1]; - } - - // Check if we are incrementing an existing pattern, or appending a new one. - if (preg_match($rxSearch, $string, $matches)) - { - $n = empty($n) ? ($matches[1] + 1) : $n; - $string = preg_replace($rxReplace, sprintf($oldFormat, $n), $string); - } - else - { - $n = empty($n) ? 2 : $n; - $string .= sprintf($newFormat, $n); - } - - return $string; - } - - /** - * Tests whether a string contains only 7bit ASCII bytes. - * - * You might use this to conditionally check whether a string needs handling as UTF-8 or not, potentially offering performance - * benefits by using the native PHP equivalent if it's just ASCII e.g.; - * - * - * if (StringHelper::is_ascii($someString)) - * { - * // It's just ASCII - use the native PHP version - * $someString = strtolower($someString); - * } - * else - * { - * $someString = StringHelper::strtolower($someString); - * } - * - * - * @param string $str The string to test. - * - * @return boolean True if the string is all ASCII - * - * @since 1.3.0 - */ - public static function is_ascii($str) - { - return utf8_is_ascii($str); - } - - /** - * UTF-8 aware alternative to ord() - * - * Returns the unicode ordinal for a character. - * - * @param string $chr UTF-8 encoded character - * - * @return integer Unicode ordinal for the character - * - * @link https://secure.php.net/ord - * @since 1.4.0 - */ - public static function ord($chr) - { - return utf8_ord($chr); - } - - /** - * UTF-8 aware alternative to strpos() - * - * Find position of first occurrence of a string. - * - * @param string $str String being examined - * @param string $search String being searched for - * @param integer $offset Optional, specifies the position from which the search should be performed - * - * @return mixed Number of characters before the first match or FALSE on failure - * - * @link https://secure.php.net/strpos - * @since 1.3.0 - */ - public static function strpos($str, $search, $offset = false) - { - if ($offset === false) - { - return utf8_strpos($str, $search); - } - - return utf8_strpos($str, $search, $offset); - } - - /** - * UTF-8 aware alternative to strrpos() - * - * Finds position of last occurrence of a string. - * - * @param string $str String being examined. - * @param string $search String being searched for. - * @param integer $offset Offset from the left of the string. - * - * @return mixed Number of characters before the last match or false on failure - * - * @link https://secure.php.net/strrpos - * @since 1.3.0 - */ - public static function strrpos($str, $search, $offset = 0) - { - return utf8_strrpos($str, $search, $offset); - } - - /** - * UTF-8 aware alternative to substr() - * - * Return part of a string given character offset (and optionally length). - * - * @param string $str String being processed - * @param integer $offset Number of UTF-8 characters offset (from left) - * @param integer $length Optional length in UTF-8 characters from offset - * - * @return mixed string or FALSE if failure - * - * @link https://secure.php.net/substr - * @since 1.3.0 - */ - public static function substr($str, $offset, $length = false) - { - if ($length === false) - { - return utf8_substr($str, $offset); - } - - return utf8_substr($str, $offset, $length); - } - - /** - * UTF-8 aware alternative to strtolower() - * - * Make a string lowercase - * - * Note: The concept of a characters "case" only exists is some alphabets such as Latin, Greek, Cyrillic, Armenian and archaic Georgian - it does - * not exist in the Chinese alphabet, for example. See Unicode Standard Annex #21: Case Mappings - * - * @param string $str String being processed - * - * @return mixed Either string in lowercase or FALSE is UTF-8 invalid - * - * @link https://secure.php.net/strtolower - * @since 1.3.0 - */ - public static function strtolower($str) - { - return utf8_strtolower($str); - } - - /** - * UTF-8 aware alternative to strtoupper() - * - * Make a string uppercase - * - * Note: The concept of a characters "case" only exists is some alphabets such as Latin, Greek, Cyrillic, Armenian and archaic Georgian - it does - * not exist in the Chinese alphabet, for example. See Unicode Standard Annex #21: Case Mappings - * - * @param string $str String being processed - * - * @return mixed Either string in uppercase or FALSE is UTF-8 invalid - * - * @link https://secure.php.net/strtoupper - * @since 1.3.0 - */ - public static function strtoupper($str) - { - return utf8_strtoupper($str); - } - - /** - * UTF-8 aware alternative to strlen() - * - * Returns the number of characters in the string (NOT THE NUMBER OF BYTES). - * - * @param string $str UTF-8 string. - * - * @return integer Number of UTF-8 characters in string. - * - * @link https://secure.php.net/strlen - * @since 1.3.0 - */ - public static function strlen($str) - { - return utf8_strlen($str); - } - - /** - * UTF-8 aware alternative to str_ireplace() - * - * Case-insensitive version of str_replace() - * - * @param string $search String to search - * @param string $replace Existing string to replace - * @param string $str New string to replace with - * @param integer $count Optional count value to be passed by referene - * - * @return string UTF-8 String - * - * @link https://secure.php.net/str_ireplace - * @since 1.3.0 - */ - public static function str_ireplace($search, $replace, $str, $count = null) - { - if ($count === false) - { - return utf8_ireplace($search, $replace, $str); - } - - return utf8_ireplace($search, $replace, $str, $count); - } - - /** - * UTF-8 aware alternative to str_pad() - * - * Pad a string to a certain length with another string. - * $padStr may contain multi-byte characters. - * - * @param string $input The input string. - * @param integer $length If the value is negative, less than, or equal to the length of the input string, no padding takes place. - * @param string $padStr The string may be truncated if the number of padding characters can't be evenly divided by the string's length. - * @param integer $type The type of padding to apply - * - * @return string - * - * @link https://secure.php.net/str_pad - * @since 1.4.0 - */ - public static function str_pad($input, $length, $padStr = ' ', $type = STR_PAD_RIGHT) - { - return utf8_str_pad($input, $length, $padStr, $type); - } - - /** - * UTF-8 aware alternative to str_split() - * - * Convert a string to an array. - * - * @param string $str UTF-8 encoded string to process - * @param integer $splitLen Number to characters to split string by - * - * @return array - * - * @link https://secure.php.net/str_split - * @since 1.3.0 - */ - public static function str_split($str, $splitLen = 1) - { - return utf8_str_split($str, $splitLen); - } - - /** - * UTF-8/LOCALE aware alternative to strcasecmp() - * - * A case insensitive string comparison. - * - * @param string $str1 string 1 to compare - * @param string $str2 string 2 to compare - * @param mixed $locale The locale used by strcoll or false to use classical comparison - * - * @return integer < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal. - * - * @link https://secure.php.net/strcasecmp - * @link https://secure.php.net/strcoll - * @link https://secure.php.net/setlocale - * @since 1.3.0 - */ - public static function strcasecmp($str1, $str2, $locale = false) - { - if ($locale) - { - // Get current locale - $locale0 = setlocale(LC_COLLATE, 0); - - if (!$locale = setlocale(LC_COLLATE, $locale)) - { - $locale = $locale0; - } - - // See if we have successfully set locale to UTF-8 - if (!stristr($locale, 'UTF-8') && stristr($locale, '_') && preg_match('~\.(\d+)$~', $locale, $m)) - { - $encoding = 'CP' . $m[1]; - } - elseif (stristr($locale, 'UTF-8') || stristr($locale, 'utf8')) - { - $encoding = 'UTF-8'; - } - else - { - $encoding = 'nonrecodable'; - } - - // If we successfully set encoding it to utf-8 or encoding is sth weird don't recode - if ($encoding == 'UTF-8' || $encoding == 'nonrecodable') - { - return strcoll(utf8_strtolower($str1), utf8_strtolower($str2)); - } - - return strcoll( - static::transcode(utf8_strtolower($str1), 'UTF-8', $encoding), - static::transcode(utf8_strtolower($str2), 'UTF-8', $encoding) - ); - } - - return utf8_strcasecmp($str1, $str2); - } - - /** - * UTF-8/LOCALE aware alternative to strcmp() - * - * A case sensitive string comparison. - * - * @param string $str1 string 1 to compare - * @param string $str2 string 2 to compare - * @param mixed $locale The locale used by strcoll or false to use classical comparison - * - * @return integer < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal. - * - * @link https://secure.php.net/strcmp - * @link https://secure.php.net/strcoll - * @link https://secure.php.net/setlocale - * @since 1.3.0 - */ - public static function strcmp($str1, $str2, $locale = false) - { - if ($locale) - { - // Get current locale - $locale0 = setlocale(LC_COLLATE, 0); - - if (!$locale = setlocale(LC_COLLATE, $locale)) - { - $locale = $locale0; - } - - // See if we have successfully set locale to UTF-8 - if (!stristr($locale, 'UTF-8') && stristr($locale, '_') && preg_match('~\.(\d+)$~', $locale, $m)) - { - $encoding = 'CP' . $m[1]; - } - elseif (stristr($locale, 'UTF-8') || stristr($locale, 'utf8')) - { - $encoding = 'UTF-8'; - } - else - { - $encoding = 'nonrecodable'; - } - - // If we successfully set encoding it to utf-8 or encoding is sth weird don't recode - if ($encoding == 'UTF-8' || $encoding == 'nonrecodable') - { - return strcoll($str1, $str2); - } - - return strcoll(static::transcode($str1, 'UTF-8', $encoding), static::transcode($str2, 'UTF-8', $encoding)); - } - - return strcmp($str1, $str2); - } - - /** - * UTF-8 aware alternative to strcspn() - * - * Find length of initial segment not matching mask. - * - * @param string $str The string to process - * @param string $mask The mask - * @param integer $start Optional starting character position (in characters) - * @param integer $length Optional length - * - * @return integer The length of the initial segment of str1 which does not contain any of the characters in str2 - * - * @link https://secure.php.net/strcspn - * @since 1.3.0 - */ - public static function strcspn($str, $mask, $start = null, $length = null) - { - if ($start === false && $length === false) - { - return utf8_strcspn($str, $mask); - } - - if ($length === false) - { - return utf8_strcspn($str, $mask, $start); - } - - return utf8_strcspn($str, $mask, $start, $length); - } - - /** - * UTF-8 aware alternative to stristr() - * - * Returns all of haystack from the first occurrence of needle to the end. Needle and haystack are examined in a case-insensitive manner to - * find the first occurrence of a string using case insensitive comparison. - * - * @param string $str The haystack - * @param string $search The needle - * - * @return string the sub string - * - * @link https://secure.php.net/stristr - * @since 1.3.0 - */ - public static function stristr($str, $search) - { - return utf8_stristr($str, $search); - } - - /** - * UTF-8 aware alternative to strrev() - * - * Reverse a string. - * - * @param string $str String to be reversed - * - * @return string The string in reverse character order - * - * @link https://secure.php.net/strrev - * @since 1.3.0 - */ - public static function strrev($str) - { - return utf8_strrev($str); - } - - /** - * UTF-8 aware alternative to strspn() - * - * Find length of initial segment matching mask. - * - * @param string $str The haystack - * @param string $mask The mask - * @param integer $start Start optional - * @param integer $length Length optional - * - * @return integer - * - * @link https://secure.php.net/strspn - * @since 1.3.0 - */ - public static function strspn($str, $mask, $start = null, $length = null) - { - if ($start === null && $length === null) - { - return utf8_strspn($str, $mask); - } - - if ($length === null) - { - return utf8_strspn($str, $mask, $start); - } - - return utf8_strspn($str, $mask, $start, $length); - } - - /** - * UTF-8 aware alternative to substr_replace() - * - * Replace text within a portion of a string. - * - * @param string $str The haystack - * @param string $repl The replacement string - * @param integer $start Start - * @param integer $length Length (optional) - * - * @return string - * - * @link https://secure.php.net/substr_replace - * @since 1.3.0 - */ - public static function substr_replace($str, $repl, $start, $length = null) - { - // Loaded by library loader - if ($length === false) - { - return utf8_substr_replace($str, $repl, $start); - } - - return utf8_substr_replace($str, $repl, $start, $length); - } - - /** - * UTF-8 aware replacement for ltrim() - * - * Strip whitespace (or other characters) from the beginning of a string. You only need to use this if you are supplying the charlist - * optional arg and it contains UTF-8 characters. Otherwise ltrim will work normally on a UTF-8 string. - * - * @param string $str The string to be trimmed - * @param string $charlist The optional charlist of additional characters to trim - * - * @return string The trimmed string - * - * @link https://secure.php.net/ltrim - * @since 1.3.0 - */ - public static function ltrim($str, $charlist = false) - { - if (empty($charlist) && $charlist !== false) - { - return $str; - } - - if ($charlist === false) - { - return utf8_ltrim($str); - } - - return utf8_ltrim($str, $charlist); - } - - /** - * UTF-8 aware replacement for rtrim() - * - * Strip whitespace (or other characters) from the end of a string. You only need to use this if you are supplying the charlist - * optional arg and it contains UTF-8 characters. Otherwise rtrim will work normally on a UTF-8 string. - * - * @param string $str The string to be trimmed - * @param string $charlist The optional charlist of additional characters to trim - * - * @return string The trimmed string - * - * @link https://secure.php.net/rtrim - * @since 1.3.0 - */ - public static function rtrim($str, $charlist = false) - { - if (empty($charlist) && $charlist !== false) - { - return $str; - } - - if ($charlist === false) - { - return utf8_rtrim($str); - } - - return utf8_rtrim($str, $charlist); - } - - /** - * UTF-8 aware replacement for trim() - * - * Strip whitespace (or other characters) from the beginning and end of a string. You only need to use this if you are supplying the charlist - * optional arg and it contains UTF-8 characters. Otherwise trim will work normally on a UTF-8 string - * - * @param string $str The string to be trimmed - * @param string $charlist The optional charlist of additional characters to trim - * - * @return string The trimmed string - * - * @link https://secure.php.net/trim - * @since 1.3.0 - */ - public static function trim($str, $charlist = false) - { - if (empty($charlist) && $charlist !== false) - { - return $str; - } - - if ($charlist === false) - { - return utf8_trim($str); - } - - return utf8_trim($str, $charlist); - } - - /** - * UTF-8 aware alternative to ucfirst() - * - * Make a string's first character uppercase or all words' first character uppercase. - * - * @param string $str String to be processed - * @param string $delimiter The words delimiter (null means do not split the string) - * @param string $newDelimiter The new words delimiter (null means equal to $delimiter) - * - * @return string If $delimiter is null, return the string with first character as upper case (if applicable) - * else consider the string of words separated by the delimiter, apply the ucfirst to each words - * and return the string with the new delimiter - * - * @link https://secure.php.net/ucfirst - * @since 1.3.0 - */ - public static function ucfirst($str, $delimiter = null, $newDelimiter = null) - { - if ($delimiter === null) - { - return utf8_ucfirst($str); - } - - if ($newDelimiter === null) - { - $newDelimiter = $delimiter; - } - - return implode($newDelimiter, array_map('utf8_ucfirst', explode($delimiter, $str))); - } - - /** - * UTF-8 aware alternative to ucwords() - * - * Uppercase the first character of each word in a string. - * - * @param string $str String to be processed - * - * @return string String with first char of each word uppercase - * - * @link https://secure.php.net/ucwords - * @since 1.3.0 - */ - public static function ucwords($str) - { - return utf8_ucwords($str); - } - - /** - * Transcode a string. - * - * @param string $source The string to transcode. - * @param string $fromEncoding The source encoding. - * @param string $toEncoding The target encoding. - * - * @return mixed The transcoded string, or null if the source was not a string. - * - * @link https://bugs.php.net/bug.php?id=48147 - * - * @since 1.3.0 - */ - public static function transcode($source, $fromEncoding, $toEncoding) - { - if (is_string($source)) - { - switch (ICONV_IMPL) - { - case 'glibc': - return @iconv($fromEncoding, $toEncoding . '//TRANSLIT,IGNORE', $source); - - case 'libiconv': - default: - return iconv($fromEncoding, $toEncoding . '//IGNORE//TRANSLIT', $source); - } - } - - return null; - } - - /** - * Tests a string as to whether it's valid UTF-8 and supported by the Unicode standard. - * - * Note: this function has been modified to simple return true or false. - * - * @param string $str UTF-8 encoded string. - * - * @return boolean true if valid - * - * @author - * @link https://hsivonen.fi/php-utf8/ - * @see compliant - * @since 1.3.0 - */ - public static function valid($str) - { - return utf8_is_valid($str); - } - - /** - * Tests whether a string complies as UTF-8. - * - * This will be much faster than StringHelper::valid() but will pass five and six octet UTF-8 sequences, which are not supported by Unicode and - * so cannot be displayed correctly in a browser. In other words it is not as strict as StringHelper::valid() but it's faster. If you use it to - * validate user input, you place yourself at the risk that attackers will be able to inject 5 and 6 byte sequences (which may or may not be a - * significant risk, depending on what you are are doing). - * - * @param string $str UTF-8 string to check - * - * @return boolean TRUE if string is valid UTF-8 - * - * @see StringHelper::valid - * @link https://secure.php.net/manual/en/reference.pcre.pattern.modifiers.php#54805 - * @since 1.3.0 - */ - public static function compliant($str) - { - return utf8_compliant($str); - } - - /** - * Converts Unicode sequences to UTF-8 string. - * - * @param string $str Unicode string to convert - * - * @return string UTF-8 string - * - * @since 1.3.0 - */ - public static function unicode_to_utf8($str) - { - if (extension_loaded('mbstring')) - { - return preg_replace_callback( - '/\\\\u([0-9a-fA-F]{4})/', - function ($match) - { - return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE'); - }, - $str - ); - } - - return $str; - } - - /** - * Converts Unicode sequences to UTF-16 string. - * - * @param string $str Unicode string to convert - * - * @return string UTF-16 string - * - * @since 1.3.0 - */ - public static function unicode_to_utf16($str) - { - if (extension_loaded('mbstring')) - { - return preg_replace_callback( - '/\\\\u([0-9a-fA-F]{4})/', - function ($match) - { - return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UTF-16BE'); - }, - $str - ); - } - - return $str; - } -} diff --git a/libraries/vendor/joomla/string/src/phputf8/LICENSE b/libraries/vendor/joomla/string/src/phputf8/LICENSE deleted file mode 100644 index 28f1889698245..0000000000000 --- a/libraries/vendor/joomla/string/src/phputf8/LICENSE +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/libraries/vendor/joomla/string/src/phputf8/README b/libraries/vendor/joomla/string/src/phputf8/README deleted file mode 100644 index 6c30905418608..0000000000000 --- a/libraries/vendor/joomla/string/src/phputf8/README +++ /dev/null @@ -1,82 +0,0 @@ -++PHP UTF-8++ - -Version 0.5 - -++DOCUMENTATION++ - -Documentation in progress in ./docs dir - -http://www.phpwact.org/php/i18n/charsets -http://www.phpwact.org/php/i18n/utf-8 - -Important Note: DO NOT use these functions without understanding WHY -you are using them. In particular, do not blindly replace all use of PHP's -string functions which functions found here - most of the time you will -not need to, and you will be introducing a significant performance -overhead to your application. You can get a good idea of when to use what -from reading: http://www.phpwact.org/php/i18n/utf-8 - -Important Note: For sake of performance most of the functions here are -not "defensive" (e.g. there is not extensive parameter checking, well -formed UTF-8 is assumed). This is particularily relevant when is comes to -catching badly formed UTF-8 - you should screen input on the "outer -perimeter" with help from functions in the utf8_validation.php and -utf8_bad.php files. - -Important Note: this library treats ALL ASCII characters as valid, including ASCII control characters. But if you use some ASCII control characters in XML, it will render the XML ill-formed. Don't be a bozo: http://hsivonen.iki.fi/producing-xml/#controlchar - -++BUGS / SUPPORT / FEATURE REQUESTS ++ - -Please report bugs to: -http://sourceforge.net/tracker/?group_id=142846&atid=753842 -- if you are able, please submit a failing unit test -(http://www.lastcraft.com/simple_test.php) with your bug report. - -For feature requests / faster implementation of functions found here, -please drop them in via the RFE tracker: http://sourceforge.net/tracker/?group_id=142846&atid=753845 -Particularily interested in faster implementations! - -For general support / help, use: -http://sourceforge.net/tracker/?group_id=142846&atid=753843 - -In the VERY WORST case, you can email me: hfuecks gmail com - I tend to be slow to respond though so be warned. - -Important Note: when reporting bugs, please provide the following -information; - -PHP version, whether the iconv extension is loaded (in PHP5 it's -there by default), whether the mbstring extension is loaded. The -following PHP script can be used to determine this information; - -"; -if ( extension_loaded('mbstring') ) { - print "mbstring available
"; -} else { - print "mbstring not available
"; -} -if ( extension_loaded('iconv') ) { - print "iconv available
"; -} else { - print "iconv not available
"; -} -?> - -++LICENSING++ - -Parts of the code in this library come from other places, under different -licenses. -The authors involved have been contacted (see below). Attribution for -which code came from elsewhere can be found in the source code itself. - -+Andreas Gohr / Chris Smith - Dokuwiki -There is a fair degree of collaboration / exchange of ideas and code -beteen Dokuwiki's UTF-8 library; -http://dev.splitbrain.org/view/darcs/dokuwiki/inc/utf8.php -and phputf8. Although Dokuwiki is released under GPL, its UTF-8 -library is released under LGPL, hence no conflict with phputf8 - -+Henri Sivonen (http://hsivonen.iki.fi/php-utf8/ / -http://hsivonen.iki.fi/php-utf8/) has also given permission for his -code to be released under the terms of the LGPL. He ported a Unicode / UTF-8 -converter from the Mozilla codebase to PHP, which is re-used in phputf8 diff --git a/libraries/vendor/joomla/string/src/phputf8/mbstring/core.php b/libraries/vendor/joomla/string/src/phputf8/mbstring/core.php deleted file mode 100644 index 6cb5501d7b8ce..0000000000000 --- a/libraries/vendor/joomla/string/src/phputf8/mbstring/core.php +++ /dev/null @@ -1,132 +0,0 @@ - -* @link http://www.php.net/manual/en/function.strlen.php -* @link http://www.php.net/manual/en/function.utf8-decode.php -* @param string UTF-8 string -* @return int number of UTF-8 characters in string -* @package utf8 -*/ -function utf8_strlen($str){ - return strlen(utf8_decode($str)); -} - - -//-------------------------------------------------------------------- -/** -* UTF-8 aware alternative to strpos -* Find position of first occurrence of a string -* Note: This will get alot slower if offset is used -* Note: requires utf8_strlen amd utf8_substr to be loaded -* @param string haystack -* @param string needle (you should validate this with utf8_is_valid) -* @param integer offset in characters (from left) -* @return mixed integer position or FALSE on failure -* @see http://www.php.net/strpos -* @see utf8_strlen -* @see utf8_substr -* @package utf8 -*/ -function utf8_strpos($str, $needle, $offset = NULL) { - - if ( is_null($offset) ) { - - $ar = explode($needle, $str, 2); - if ( count($ar) > 1 ) { - return utf8_strlen($ar[0]); - } - return FALSE; - - } else { - - if ( !is_int($offset) ) { - trigger_error('utf8_strpos: Offset must be an integer',E_USER_ERROR); - return FALSE; - } - - $str = utf8_substr($str, $offset); - - if ( FALSE !== ( $pos = utf8_strpos($str, $needle) ) ) { - return $pos + $offset; - } - - return FALSE; - } - -} - -//-------------------------------------------------------------------- -/** -* UTF-8 aware alternative to strrpos -* Find position of last occurrence of a char in a string -* Note: This will get alot slower if offset is used -* Note: requires utf8_substr and utf8_strlen to be loaded -* @param string haystack -* @param string needle (you should validate this with utf8_is_valid) -* @param integer (optional) offset (from left) -* @return mixed integer position or FALSE on failure -* @see http://www.php.net/strrpos -* @see utf8_substr -* @see utf8_strlen -* @package utf8 -*/ -function utf8_strrpos($str, $needle, $offset = NULL) { - - if ( is_null($offset) ) { - - $ar = explode($needle, $str); - - if ( count($ar) > 1 ) { - // Pop off the end of the string where the last match was made - array_pop($ar); - $str = join($needle,$ar); - return utf8_strlen($str); - } - return FALSE; - - } else { - - if ( !is_int($offset) ) { - trigger_error('utf8_strrpos expects parameter 3 to be long',E_USER_WARNING); - return FALSE; - } - - $str = utf8_substr($str, $offset); - - if ( FALSE !== ( $pos = utf8_strrpos($str, $needle) ) ) { - return $pos + $offset; - } - - return FALSE; - } - -} - -//-------------------------------------------------------------------- -/** -* UTF-8 aware alternative to substr -* Return part of a string given character offset (and optionally length) -* -* Note arguments: comparied to substr - if offset or length are -* not integers, this version will not complain but rather massages them -* into an integer. -* -* Note on returned values: substr documentation states false can be -* returned in some cases (e.g. offset > string length) -* mb_substr never returns false, it will return an empty string instead. -* This adopts the mb_substr approach -* -* Note on implementation: PCRE only supports repetitions of less than -* 65536, in order to accept up to MAXINT values for offset and length, -* we'll repeat a group of 65535 characters when needed. -* -* Note on implementation: calculating the number of characters in the -* string is a relatively expensive operation, so we only carry it out when -* necessary. It isn't necessary for +ve offsets and no specified length -* -* @author Chris Smith -* @param string -* @param integer number of UTF-8 characters offset (from left) -* @param integer (optional) length in UTF-8 characters from offset -* @return mixed string or FALSE if failure -* @package utf8 -*/ -function utf8_substr($str, $offset, $length = NULL) { - - // generates E_NOTICE - // for PHP4 objects, but not PHP5 objects - $str = (string)$str; - $offset = (int)$offset; - if (!is_null($length)) $length = (int)$length; - - // handle trivial cases - if ($length === 0) return ''; - if ($offset < 0 && $length < 0 && $length < $offset) - return ''; - - // normalise negative offsets (we could use a tail - // anchored pattern, but they are horribly slow!) - if ($offset < 0) { - - // see notes - $strlen = strlen(utf8_decode($str)); - $offset = $strlen + $offset; - if ($offset < 0) $offset = 0; - - } - - $Op = ''; - $Lp = ''; - - // establish a pattern for offset, a - // non-captured group equal in length to offset - if ($offset > 0) { - - $Ox = (int)($offset/65535); - $Oy = $offset%65535; - - if ($Ox) { - $Op = '(?:.{65535}){'.$Ox.'}'; - } - - $Op = '^(?:'.$Op.'.{'.$Oy.'})'; - - } else { - - // offset == 0; just anchor the pattern - $Op = '^'; - - } - - // establish a pattern for length - if (is_null($length)) { - - // the rest of the string - $Lp = '(.*)$'; - - } else { - - if (!isset($strlen)) { - // see notes - $strlen = strlen(utf8_decode($str)); - } - - // another trivial case - if ($offset > $strlen) return ''; - - if ($length > 0) { - - // reduce any length that would - // go passed the end of the string - $length = min($strlen-$offset, $length); - - $Lx = (int)( $length / 65535 ); - $Ly = $length % 65535; - - // negative length requires a captured group - // of length characters - if ($Lx) $Lp = '(?:.{65535}){'.$Lx.'}'; - $Lp = '('.$Lp.'.{'.$Ly.'})'; - - } else if ($length < 0) { - - if ( $length < ($offset - $strlen) ) { - return ''; - } - - $Lx = (int)((-$length)/65535); - $Ly = (-$length)%65535; - - // negative length requires ... capture everything - // except a group of -length characters - // anchored at the tail-end of the string - if ($Lx) $Lp = '(?:.{65535}){'.$Lx.'}'; - $Lp = '(.*)(?:'.$Lp.'.{'.$Ly.'})$'; - - } - - } - - if (!preg_match( '#'.$Op.$Lp.'#us',$str, $match )) { - return ''; - } - - return $match[1]; - -} - -//--------------------------------------------------------------- -/** -* UTF-8 aware alternative to strtolower -* Make a string lowercase -* Note: The concept of a characters "case" only exists is some alphabets -* such as Latin, Greek, Cyrillic, Armenian and archaic Georgian - it does -* not exist in the Chinese alphabet, for example. See Unicode Standard -* Annex #21: Case Mappings -* Note: requires utf8_to_unicode and utf8_from_unicode -* @author Andreas Gohr -* @param string -* @return mixed either string in lowercase or FALSE is UTF-8 invalid -* @see http://www.php.net/strtolower -* @see utf8_to_unicode -* @see utf8_from_unicode -* @see http://www.unicode.org/reports/tr21/tr21-5.html -* @see http://dev.splitbrain.org/view/darcs/dokuwiki/inc/utf8.php -* @package utf8 -*/ -function utf8_strtolower($string){ - - static $UTF8_UPPER_TO_LOWER = NULL; - - if ( is_null($UTF8_UPPER_TO_LOWER) ) { - $UTF8_UPPER_TO_LOWER = array( - 0x0041=>0x0061, 0x03A6=>0x03C6, 0x0162=>0x0163, 0x00C5=>0x00E5, 0x0042=>0x0062, - 0x0139=>0x013A, 0x00C1=>0x00E1, 0x0141=>0x0142, 0x038E=>0x03CD, 0x0100=>0x0101, - 0x0490=>0x0491, 0x0394=>0x03B4, 0x015A=>0x015B, 0x0044=>0x0064, 0x0393=>0x03B3, - 0x00D4=>0x00F4, 0x042A=>0x044A, 0x0419=>0x0439, 0x0112=>0x0113, 0x041C=>0x043C, - 0x015E=>0x015F, 0x0143=>0x0144, 0x00CE=>0x00EE, 0x040E=>0x045E, 0x042F=>0x044F, - 0x039A=>0x03BA, 0x0154=>0x0155, 0x0049=>0x0069, 0x0053=>0x0073, 0x1E1E=>0x1E1F, - 0x0134=>0x0135, 0x0427=>0x0447, 0x03A0=>0x03C0, 0x0418=>0x0438, 0x00D3=>0x00F3, - 0x0420=>0x0440, 0x0404=>0x0454, 0x0415=>0x0435, 0x0429=>0x0449, 0x014A=>0x014B, - 0x0411=>0x0431, 0x0409=>0x0459, 0x1E02=>0x1E03, 0x00D6=>0x00F6, 0x00D9=>0x00F9, - 0x004E=>0x006E, 0x0401=>0x0451, 0x03A4=>0x03C4, 0x0423=>0x0443, 0x015C=>0x015D, - 0x0403=>0x0453, 0x03A8=>0x03C8, 0x0158=>0x0159, 0x0047=>0x0067, 0x00C4=>0x00E4, - 0x0386=>0x03AC, 0x0389=>0x03AE, 0x0166=>0x0167, 0x039E=>0x03BE, 0x0164=>0x0165, - 0x0116=>0x0117, 0x0108=>0x0109, 0x0056=>0x0076, 0x00DE=>0x00FE, 0x0156=>0x0157, - 0x00DA=>0x00FA, 0x1E60=>0x1E61, 0x1E82=>0x1E83, 0x00C2=>0x00E2, 0x0118=>0x0119, - 0x0145=>0x0146, 0x0050=>0x0070, 0x0150=>0x0151, 0x042E=>0x044E, 0x0128=>0x0129, - 0x03A7=>0x03C7, 0x013D=>0x013E, 0x0422=>0x0442, 0x005A=>0x007A, 0x0428=>0x0448, - 0x03A1=>0x03C1, 0x1E80=>0x1E81, 0x016C=>0x016D, 0x00D5=>0x00F5, 0x0055=>0x0075, - 0x0176=>0x0177, 0x00DC=>0x00FC, 0x1E56=>0x1E57, 0x03A3=>0x03C3, 0x041A=>0x043A, - 0x004D=>0x006D, 0x016A=>0x016B, 0x0170=>0x0171, 0x0424=>0x0444, 0x00CC=>0x00EC, - 0x0168=>0x0169, 0x039F=>0x03BF, 0x004B=>0x006B, 0x00D2=>0x00F2, 0x00C0=>0x00E0, - 0x0414=>0x0434, 0x03A9=>0x03C9, 0x1E6A=>0x1E6B, 0x00C3=>0x00E3, 0x042D=>0x044D, - 0x0416=>0x0436, 0x01A0=>0x01A1, 0x010C=>0x010D, 0x011C=>0x011D, 0x00D0=>0x00F0, - 0x013B=>0x013C, 0x040F=>0x045F, 0x040A=>0x045A, 0x00C8=>0x00E8, 0x03A5=>0x03C5, - 0x0046=>0x0066, 0x00DD=>0x00FD, 0x0043=>0x0063, 0x021A=>0x021B, 0x00CA=>0x00EA, - 0x0399=>0x03B9, 0x0179=>0x017A, 0x00CF=>0x00EF, 0x01AF=>0x01B0, 0x0045=>0x0065, - 0x039B=>0x03BB, 0x0398=>0x03B8, 0x039C=>0x03BC, 0x040C=>0x045C, 0x041F=>0x043F, - 0x042C=>0x044C, 0x00DE=>0x00FE, 0x00D0=>0x00F0, 0x1EF2=>0x1EF3, 0x0048=>0x0068, - 0x00CB=>0x00EB, 0x0110=>0x0111, 0x0413=>0x0433, 0x012E=>0x012F, 0x00C6=>0x00E6, - 0x0058=>0x0078, 0x0160=>0x0161, 0x016E=>0x016F, 0x0391=>0x03B1, 0x0407=>0x0457, - 0x0172=>0x0173, 0x0178=>0x00FF, 0x004F=>0x006F, 0x041B=>0x043B, 0x0395=>0x03B5, - 0x0425=>0x0445, 0x0120=>0x0121, 0x017D=>0x017E, 0x017B=>0x017C, 0x0396=>0x03B6, - 0x0392=>0x03B2, 0x0388=>0x03AD, 0x1E84=>0x1E85, 0x0174=>0x0175, 0x0051=>0x0071, - 0x0417=>0x0437, 0x1E0A=>0x1E0B, 0x0147=>0x0148, 0x0104=>0x0105, 0x0408=>0x0458, - 0x014C=>0x014D, 0x00CD=>0x00ED, 0x0059=>0x0079, 0x010A=>0x010B, 0x038F=>0x03CE, - 0x0052=>0x0072, 0x0410=>0x0430, 0x0405=>0x0455, 0x0402=>0x0452, 0x0126=>0x0127, - 0x0136=>0x0137, 0x012A=>0x012B, 0x038A=>0x03AF, 0x042B=>0x044B, 0x004C=>0x006C, - 0x0397=>0x03B7, 0x0124=>0x0125, 0x0218=>0x0219, 0x00DB=>0x00FB, 0x011E=>0x011F, - 0x041E=>0x043E, 0x1E40=>0x1E41, 0x039D=>0x03BD, 0x0106=>0x0107, 0x03AB=>0x03CB, - 0x0426=>0x0446, 0x00DE=>0x00FE, 0x00C7=>0x00E7, 0x03AA=>0x03CA, 0x0421=>0x0441, - 0x0412=>0x0432, 0x010E=>0x010F, 0x00D8=>0x00F8, 0x0057=>0x0077, 0x011A=>0x011B, - 0x0054=>0x0074, 0x004A=>0x006A, 0x040B=>0x045B, 0x0406=>0x0456, 0x0102=>0x0103, - 0x039B=>0x03BB, 0x00D1=>0x00F1, 0x041D=>0x043D, 0x038C=>0x03CC, 0x00C9=>0x00E9, - 0x00D0=>0x00F0, 0x0407=>0x0457, 0x0122=>0x0123, - ); - } - - $uni = utf8_to_unicode($string); - - if ( !$uni ) { - return FALSE; - } - - $cnt = count($uni); - for ($i=0; $i < $cnt; $i++){ - if ( isset($UTF8_UPPER_TO_LOWER[$uni[$i]]) ) { - $uni[$i] = $UTF8_UPPER_TO_LOWER[$uni[$i]]; - } - } - - return utf8_from_unicode($uni); -} - -//--------------------------------------------------------------- -/** -* UTF-8 aware alternative to strtoupper -* Make a string uppercase -* Note: The concept of a characters "case" only exists is some alphabets -* such as Latin, Greek, Cyrillic, Armenian and archaic Georgian - it does -* not exist in the Chinese alphabet, for example. See Unicode Standard -* Annex #21: Case Mappings -* Note: requires utf8_to_unicode and utf8_from_unicode -* @author Andreas Gohr -* @param string -* @return mixed either string in lowercase or FALSE is UTF-8 invalid -* @see http://www.php.net/strtoupper -* @see utf8_to_unicode -* @see utf8_from_unicode -* @see http://www.unicode.org/reports/tr21/tr21-5.html -* @see http://dev.splitbrain.org/view/darcs/dokuwiki/inc/utf8.php -* @package utf8 -*/ -function utf8_strtoupper($string){ - - static $UTF8_LOWER_TO_UPPER = NULL; - - if ( is_null($UTF8_LOWER_TO_UPPER) ) { - $UTF8_LOWER_TO_UPPER = array( - 0x0061=>0x0041, 0x03C6=>0x03A6, 0x0163=>0x0162, 0x00E5=>0x00C5, 0x0062=>0x0042, - 0x013A=>0x0139, 0x00E1=>0x00C1, 0x0142=>0x0141, 0x03CD=>0x038E, 0x0101=>0x0100, - 0x0491=>0x0490, 0x03B4=>0x0394, 0x015B=>0x015A, 0x0064=>0x0044, 0x03B3=>0x0393, - 0x00F4=>0x00D4, 0x044A=>0x042A, 0x0439=>0x0419, 0x0113=>0x0112, 0x043C=>0x041C, - 0x015F=>0x015E, 0x0144=>0x0143, 0x00EE=>0x00CE, 0x045E=>0x040E, 0x044F=>0x042F, - 0x03BA=>0x039A, 0x0155=>0x0154, 0x0069=>0x0049, 0x0073=>0x0053, 0x1E1F=>0x1E1E, - 0x0135=>0x0134, 0x0447=>0x0427, 0x03C0=>0x03A0, 0x0438=>0x0418, 0x00F3=>0x00D3, - 0x0440=>0x0420, 0x0454=>0x0404, 0x0435=>0x0415, 0x0449=>0x0429, 0x014B=>0x014A, - 0x0431=>0x0411, 0x0459=>0x0409, 0x1E03=>0x1E02, 0x00F6=>0x00D6, 0x00F9=>0x00D9, - 0x006E=>0x004E, 0x0451=>0x0401, 0x03C4=>0x03A4, 0x0443=>0x0423, 0x015D=>0x015C, - 0x0453=>0x0403, 0x03C8=>0x03A8, 0x0159=>0x0158, 0x0067=>0x0047, 0x00E4=>0x00C4, - 0x03AC=>0x0386, 0x03AE=>0x0389, 0x0167=>0x0166, 0x03BE=>0x039E, 0x0165=>0x0164, - 0x0117=>0x0116, 0x0109=>0x0108, 0x0076=>0x0056, 0x00FE=>0x00DE, 0x0157=>0x0156, - 0x00FA=>0x00DA, 0x1E61=>0x1E60, 0x1E83=>0x1E82, 0x00E2=>0x00C2, 0x0119=>0x0118, - 0x0146=>0x0145, 0x0070=>0x0050, 0x0151=>0x0150, 0x044E=>0x042E, 0x0129=>0x0128, - 0x03C7=>0x03A7, 0x013E=>0x013D, 0x0442=>0x0422, 0x007A=>0x005A, 0x0448=>0x0428, - 0x03C1=>0x03A1, 0x1E81=>0x1E80, 0x016D=>0x016C, 0x00F5=>0x00D5, 0x0075=>0x0055, - 0x0177=>0x0176, 0x00FC=>0x00DC, 0x1E57=>0x1E56, 0x03C3=>0x03A3, 0x043A=>0x041A, - 0x006D=>0x004D, 0x016B=>0x016A, 0x0171=>0x0170, 0x0444=>0x0424, 0x00EC=>0x00CC, - 0x0169=>0x0168, 0x03BF=>0x039F, 0x006B=>0x004B, 0x00F2=>0x00D2, 0x00E0=>0x00C0, - 0x0434=>0x0414, 0x03C9=>0x03A9, 0x1E6B=>0x1E6A, 0x00E3=>0x00C3, 0x044D=>0x042D, - 0x0436=>0x0416, 0x01A1=>0x01A0, 0x010D=>0x010C, 0x011D=>0x011C, 0x00F0=>0x00D0, - 0x013C=>0x013B, 0x045F=>0x040F, 0x045A=>0x040A, 0x00E8=>0x00C8, 0x03C5=>0x03A5, - 0x0066=>0x0046, 0x00FD=>0x00DD, 0x0063=>0x0043, 0x021B=>0x021A, 0x00EA=>0x00CA, - 0x03B9=>0x0399, 0x017A=>0x0179, 0x00EF=>0x00CF, 0x01B0=>0x01AF, 0x0065=>0x0045, - 0x03BB=>0x039B, 0x03B8=>0x0398, 0x03BC=>0x039C, 0x045C=>0x040C, 0x043F=>0x041F, - 0x044C=>0x042C, 0x00FE=>0x00DE, 0x00F0=>0x00D0, 0x1EF3=>0x1EF2, 0x0068=>0x0048, - 0x00EB=>0x00CB, 0x0111=>0x0110, 0x0433=>0x0413, 0x012F=>0x012E, 0x00E6=>0x00C6, - 0x0078=>0x0058, 0x0161=>0x0160, 0x016F=>0x016E, 0x03B1=>0x0391, 0x0457=>0x0407, - 0x0173=>0x0172, 0x00FF=>0x0178, 0x006F=>0x004F, 0x043B=>0x041B, 0x03B5=>0x0395, - 0x0445=>0x0425, 0x0121=>0x0120, 0x017E=>0x017D, 0x017C=>0x017B, 0x03B6=>0x0396, - 0x03B2=>0x0392, 0x03AD=>0x0388, 0x1E85=>0x1E84, 0x0175=>0x0174, 0x0071=>0x0051, - 0x0437=>0x0417, 0x1E0B=>0x1E0A, 0x0148=>0x0147, 0x0105=>0x0104, 0x0458=>0x0408, - 0x014D=>0x014C, 0x00ED=>0x00CD, 0x0079=>0x0059, 0x010B=>0x010A, 0x03CE=>0x038F, - 0x0072=>0x0052, 0x0430=>0x0410, 0x0455=>0x0405, 0x0452=>0x0402, 0x0127=>0x0126, - 0x0137=>0x0136, 0x012B=>0x012A, 0x03AF=>0x038A, 0x044B=>0x042B, 0x006C=>0x004C, - 0x03B7=>0x0397, 0x0125=>0x0124, 0x0219=>0x0218, 0x00FB=>0x00DB, 0x011F=>0x011E, - 0x043E=>0x041E, 0x1E41=>0x1E40, 0x03BD=>0x039D, 0x0107=>0x0106, 0x03CB=>0x03AB, - 0x0446=>0x0426, 0x00FE=>0x00DE, 0x00E7=>0x00C7, 0x03CA=>0x03AA, 0x0441=>0x0421, - 0x0432=>0x0412, 0x010F=>0x010E, 0x00F8=>0x00D8, 0x0077=>0x0057, 0x011B=>0x011A, - 0x0074=>0x0054, 0x006A=>0x004A, 0x045B=>0x040B, 0x0456=>0x0406, 0x0103=>0x0102, - 0x03BB=>0x039B, 0x00F1=>0x00D1, 0x043D=>0x041D, 0x03CC=>0x038C, 0x00E9=>0x00C9, - 0x00F0=>0x00D0, 0x0457=>0x0407, 0x0123=>0x0122, - ); - } - - $uni = utf8_to_unicode($string); - - if ( !$uni ) { - return FALSE; - } - - $cnt = count($uni); - for ($i=0; $i < $cnt; $i++){ - if( isset($UTF8_LOWER_TO_UPPER[$uni[$i]]) ) { - $uni[$i] = $UTF8_LOWER_TO_UPPER[$uni[$i]]; - } - } - - return utf8_from_unicode($uni); -} diff --git a/libraries/vendor/joomla/string/src/phputf8/ord.php b/libraries/vendor/joomla/string/src/phputf8/ord.php deleted file mode 100644 index 449fe313fcf03..0000000000000 --- a/libraries/vendor/joomla/string/src/phputf8/ord.php +++ /dev/null @@ -1,90 +0,0 @@ -= 0 && $ord0 <= 127 ) { - return $ord0; - } - - if ( !isset($chr{1}) ) { - trigger_error('Short sequence - at least 2 bytes expected, only 1 seen'); - return FALSE; - } - - $ord1 = ord($chr{1}); - if ( $ord0 >= 192 && $ord0 <= 223 ) { - return ( $ord0 - 192 ) * 64 - + ( $ord1 - 128 ); - } - - if ( !isset($chr{2}) ) { - trigger_error('Short sequence - at least 3 bytes expected, only 2 seen'); - return FALSE; - } - $ord2 = ord($chr{2}); - if ( $ord0 >= 224 && $ord0 <= 239 ) { - return ($ord0-224)*4096 - + ($ord1-128)*64 - + ($ord2-128); - } - - if ( !isset($chr{3}) ) { - trigger_error('Short sequence - at least 4 bytes expected, only 3 seen'); - return FALSE; - } - $ord3 = ord($chr{3}); - if ($ord0>=240 && $ord0<=247) { - return ($ord0-240)*262144 - + ($ord1-128)*4096 - + ($ord2-128)*64 - + ($ord3-128); - - } - - if ( !isset($chr{4}) ) { - trigger_error('Short sequence - at least 5 bytes expected, only 4 seen'); - return FALSE; - } - $ord4 = ord($chr{4}); - if ($ord0>=248 && $ord0<=251) { - return ($ord0-248)*16777216 - + ($ord1-128)*262144 - + ($ord2-128)*4096 - + ($ord3-128)*64 - + ($ord4-128); - } - - if ( !isset($chr{5}) ) { - trigger_error('Short sequence - at least 6 bytes expected, only 5 seen'); - return FALSE; - } - if ($ord0>=252 && $ord0<=253) { - return ($ord0-252) * 1073741824 - + ($ord1-128)*16777216 - + ($ord2-128)*262144 - + ($ord3-128)*4096 - + ($ord4-128)*64 - + (ord($chr{5})-128); - } - - if ( $ord0 >= 254 && $ord0 <= 255 ) { - trigger_error('Invalid UTF-8 with surrogate ordinal '.$ord0); - return FALSE; - } - -} - diff --git a/libraries/vendor/joomla/string/src/phputf8/str_ireplace.php b/libraries/vendor/joomla/string/src/phputf8/str_ireplace.php deleted file mode 100644 index c4b4df8d67e90..0000000000000 --- a/libraries/vendor/joomla/string/src/phputf8/str_ireplace.php +++ /dev/null @@ -1,77 +0,0 @@ - -* @param string $input -* @param int $length -* @param string $padStr -* @param int $type ( same constants as str_pad ) -* @return string -* @see http://www.php.net/str_pad -* @see utf8_substr -* @package utf8 -*/ -function utf8_str_pad($input, $length, $padStr = ' ', $type = STR_PAD_RIGHT) { - - $inputLen = utf8_strlen($input); - if ($length <= $inputLen) { - return $input; - } - - $padStrLen = utf8_strlen($padStr); - $padLen = $length - $inputLen; - - if ($type == STR_PAD_RIGHT) { - $repeatTimes = ceil($padLen / $padStrLen); - return utf8_substr($input . str_repeat($padStr, $repeatTimes), 0, $length); - } - - if ($type == STR_PAD_LEFT) { - $repeatTimes = ceil($padLen / $padStrLen); - return utf8_substr(str_repeat($padStr, $repeatTimes), 0, floor($padLen)) . $input; - } - - if ($type == STR_PAD_BOTH) { - - $padLen/= 2; - $padAmountLeft = floor($padLen); - $padAmountRight = ceil($padLen); - $repeatTimesLeft = ceil($padAmountLeft / $padStrLen); - $repeatTimesRight = ceil($padAmountRight / $padStrLen); - - $paddingLeft = utf8_substr(str_repeat($padStr, $repeatTimesLeft), 0, $padAmountLeft); - $paddingRight = utf8_substr(str_repeat($padStr, $repeatTimesRight), 0, $padAmountLeft); - return $paddingLeft . $input . $paddingRight; - } - - trigger_error('utf8_str_pad: Unknown padding type (' . $type . ')',E_USER_ERROR); -} diff --git a/libraries/vendor/joomla/string/src/phputf8/str_split.php b/libraries/vendor/joomla/string/src/phputf8/str_split.php deleted file mode 100644 index 13b93d517b96e..0000000000000 --- a/libraries/vendor/joomla/string/src/phputf8/str_split.php +++ /dev/null @@ -1,32 +0,0 @@ - -* @see http://www.php.net/ltrim -* @see http://dev.splitbrain.org/view/darcs/dokuwiki/inc/utf8.php -* @return string -* @package utf8 -*/ -function utf8_ltrim( $str, $charlist = FALSE ) { - if($charlist === FALSE) return ltrim($str); - - //quote charlist for use in a characterclass - $charlist = preg_replace('!([\\\\\\-\\]\\[/^])!','\\\${1}',$charlist); - - return preg_replace('/^['.$charlist.']+/u','',$str); -} - -//--------------------------------------------------------------- -/** -* UTF-8 aware replacement for rtrim() -* Note: you only need to use this if you are supplying the charlist -* optional arg and it contains UTF-8 characters. Otherwise rtrim will -* work normally on a UTF-8 string -* @author Andreas Gohr -* @see http://www.php.net/rtrim -* @see http://dev.splitbrain.org/view/darcs/dokuwiki/inc/utf8.php -* @return string -* @package utf8 -*/ -function utf8_rtrim( $str, $charlist = FALSE ) { - if($charlist === FALSE) return rtrim($str); - - //quote charlist for use in a characterclass - $charlist = preg_replace('!([\\\\\\-\\]\\[/^])!','\\\${1}',$charlist); - - return preg_replace('/['.$charlist.']+$/u','',$str); -} - -//--------------------------------------------------------------- -/** -* UTF-8 aware replacement for trim() -* Note: you only need to use this if you are supplying the charlist -* optional arg and it contains UTF-8 characters. Otherwise trim will -* work normally on a UTF-8 string -* @author Andreas Gohr -* @see http://www.php.net/trim -* @see http://dev.splitbrain.org/view/darcs/dokuwiki/inc/utf8.php -* @return string -* @package utf8 -*/ -function utf8_trim( $str, $charlist = FALSE ) { - if($charlist === FALSE) return trim($str); - return utf8_ltrim(utf8_rtrim($str, $charlist), $charlist); -} diff --git a/libraries/vendor/joomla/string/src/phputf8/ucfirst.php b/libraries/vendor/joomla/string/src/phputf8/ucfirst.php deleted file mode 100644 index 7f7ae9ecab9e5..0000000000000 --- a/libraries/vendor/joomla/string/src/phputf8/ucfirst.php +++ /dev/null @@ -1,31 +0,0 @@ - -* if ( utf8_is_ascii($someString) ) { -* // It's just ASCII - use the native PHP version -* $someString = strtolower($someString); -* } else { -* $someString = utf8_strtolower($someString); -* } -* -* -* @param string -* @return boolean TRUE if it's all ASCII -* @package utf8 -* @see utf8_is_ascii_ctrl -*/ -function utf8_is_ascii($str) { - // Search for any bytes which are outside the ASCII range... - return (preg_match('/(?:[^\x00-\x7F])/',$str) !== 1); -} - -//-------------------------------------------------------------------- -/** -* Tests whether a string contains only 7bit ASCII bytes with device -* control codes omitted. The device control codes can be found on the -* second table here: http://www.w3schools.com/tags/ref_ascii.asp -* -* @param string -* @return boolean TRUE if it's all ASCII without device control codes -* @package utf8 -* @see utf8_is_ascii -*/ -function utf8_is_ascii_ctrl($str) { - if ( strlen($str) > 0 ) { - // Search for any bytes which are outside the ASCII range, - // or are device control codes - return (preg_match('/[^\x09\x0A\x0D\x20-\x7E]/',$str) !== 1); - } - return FALSE; -} - -//-------------------------------------------------------------------- -/** -* Strip out all non-7bit ASCII bytes -* If you need to transmit a string to system which you know can only -* support 7bit ASCII, you could use this function. -* @param string -* @return string with non ASCII bytes removed -* @package utf8 -* @see utf8_strip_non_ascii_ctrl -*/ -function utf8_strip_non_ascii($str) { - ob_start(); - while ( preg_match( - '/^([\x00-\x7F]+)|([^\x00-\x7F]+)/S', - $str, $matches) ) { - if ( !isset($matches[2]) ) { - echo $matches[0]; - } - $str = substr($str, strlen($matches[0])); - } - $result = ob_get_contents(); - ob_end_clean(); - return $result; -} - -//-------------------------------------------------------------------- -/** -* Strip out device control codes in the ASCII range -* which are not permitted in XML. Note that this leaves -* multi-byte characters untouched - it only removes device -* control codes -* @see http://hsivonen.iki.fi/producing-xml/#controlchar -* @param string -* @return string control codes removed -*/ -function utf8_strip_ascii_ctrl($str) { - ob_start(); - while ( preg_match( - '/^([^\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+)|([\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+)/S', - $str, $matches) ) { - if ( !isset($matches[2]) ) { - echo $matches[0]; - } - $str = substr($str, strlen($matches[0])); - } - $result = ob_get_contents(); - ob_end_clean(); - return $result; -} - -//-------------------------------------------------------------------- -/** -* Strip out all non 7bit ASCII bytes and ASCII device control codes. -* For a list of ASCII device control codes see the 2nd table here: -* http://www.w3schools.com/tags/ref_ascii.asp -* -* @param string -* @return boolean TRUE if it's all ASCII -* @package utf8 -*/ -function utf8_strip_non_ascii_ctrl($str) { - ob_start(); - while ( preg_match( - '/^([\x09\x0A\x0D\x20-\x7E]+)|([^\x09\x0A\x0D\x20-\x7E]+)/S', - $str, $matches) ) { - if ( !isset($matches[2]) ) { - echo $matches[0]; - } - $str = substr($str, strlen($matches[0])); - } - $result = ob_get_contents(); - ob_end_clean(); - return $result; -} - -//--------------------------------------------------------------- -/** -* Replace accented UTF-8 characters by unaccented ASCII-7 "equivalents". -* The purpose of this function is to replace characters commonly found in Latin -* alphabets with something more or less equivalent from the ASCII range. This can -* be useful for converting a UTF-8 to something ready for a filename, for example. -* Following the use of this function, you would probably also pass the string -* through utf8_strip_non_ascii to clean out any other non-ASCII chars -* Use the optional parameter to just deaccent lower ($case = -1) or upper ($case = 1) -* letters. Default is to deaccent both cases ($case = 0) -* -* For a more complete implementation of transliteration, see the utf8_to_ascii package -* available from the phputf8 project downloads: -* http://prdownloads.sourceforge.net/phputf8 -* -* @param string UTF-8 string -* @param int (optional) -1 lowercase only, +1 uppercase only, 1 both cases -* @param string UTF-8 with accented characters replaced by ASCII chars -* @return string accented chars replaced with ascii equivalents -* @author Andreas Gohr -* @package utf8 -*/ -function utf8_accents_to_ascii( $str, $case=0 ){ - - static $UTF8_LOWER_ACCENTS = NULL; - static $UTF8_UPPER_ACCENTS = NULL; - - if($case <= 0){ - - if ( is_null($UTF8_LOWER_ACCENTS) ) { - $UTF8_LOWER_ACCENTS = array( - 'à' => 'a', 'ô' => 'o', 'ď' => 'd', 'ḟ' => 'f', 'ë' => 'e', 'š' => 's', 'ơ' => 'o', - 'ß' => 'ss', 'ă' => 'a', 'ř' => 'r', 'ț' => 't', 'ň' => 'n', 'ā' => 'a', 'ķ' => 'k', - 'ŝ' => 's', 'ỳ' => 'y', 'ņ' => 'n', 'ĺ' => 'l', 'ħ' => 'h', 'ṗ' => 'p', 'ó' => 'o', - 'ú' => 'u', 'ě' => 'e', 'é' => 'e', 'ç' => 'c', 'ẁ' => 'w', 'ċ' => 'c', 'õ' => 'o', - 'ṡ' => 's', 'ø' => 'o', 'ģ' => 'g', 'ŧ' => 't', 'ș' => 's', 'ė' => 'e', 'ĉ' => 'c', - 'ś' => 's', 'î' => 'i', 'ű' => 'u', 'ć' => 'c', 'ę' => 'e', 'ŵ' => 'w', 'ṫ' => 't', - 'ū' => 'u', 'č' => 'c', 'ö' => 'oe', 'è' => 'e', 'ŷ' => 'y', 'ą' => 'a', 'ł' => 'l', - 'ų' => 'u', 'ů' => 'u', 'ş' => 's', 'ğ' => 'g', 'ļ' => 'l', 'ƒ' => 'f', 'ž' => 'z', - 'ẃ' => 'w', 'ḃ' => 'b', 'å' => 'a', 'ì' => 'i', 'ï' => 'i', 'ḋ' => 'd', 'ť' => 't', - 'ŗ' => 'r', 'ä' => 'ae', 'í' => 'i', 'ŕ' => 'r', 'ê' => 'e', 'ü' => 'ue', 'ò' => 'o', - 'ē' => 'e', 'ñ' => 'n', 'ń' => 'n', 'ĥ' => 'h', 'ĝ' => 'g', 'đ' => 'd', 'ĵ' => 'j', - 'ÿ' => 'y', 'ũ' => 'u', 'ŭ' => 'u', 'ư' => 'u', 'ţ' => 't', 'ý' => 'y', 'ő' => 'o', - 'â' => 'a', 'ľ' => 'l', 'ẅ' => 'w', 'ż' => 'z', 'ī' => 'i', 'ã' => 'a', 'ġ' => 'g', - 'ṁ' => 'm', 'ō' => 'o', 'ĩ' => 'i', 'ù' => 'u', 'į' => 'i', 'ź' => 'z', 'á' => 'a', - 'û' => 'u', 'þ' => 'th', 'ð' => 'dh', 'æ' => 'ae', 'µ' => 'u', 'ĕ' => 'e', - ); - } - - $str = str_replace( - array_keys($UTF8_LOWER_ACCENTS), - array_values($UTF8_LOWER_ACCENTS), - $str - ); - } - - if($case >= 0){ - if ( is_null($UTF8_UPPER_ACCENTS) ) { - $UTF8_UPPER_ACCENTS = array( - 'À' => 'A', 'Ô' => 'O', 'Ď' => 'D', 'Ḟ' => 'F', 'Ë' => 'E', 'Š' => 'S', 'Ơ' => 'O', - 'Ă' => 'A', 'Ř' => 'R', 'Ț' => 'T', 'Ň' => 'N', 'Ā' => 'A', 'Ķ' => 'K', - 'Ŝ' => 'S', 'Ỳ' => 'Y', 'Ņ' => 'N', 'Ĺ' => 'L', 'Ħ' => 'H', 'Ṗ' => 'P', 'Ó' => 'O', - 'Ú' => 'U', 'Ě' => 'E', 'É' => 'E', 'Ç' => 'C', 'Ẁ' => 'W', 'Ċ' => 'C', 'Õ' => 'O', - 'Ṡ' => 'S', 'Ø' => 'O', 'Ģ' => 'G', 'Ŧ' => 'T', 'Ș' => 'S', 'Ė' => 'E', 'Ĉ' => 'C', - 'Ś' => 'S', 'Î' => 'I', 'Ű' => 'U', 'Ć' => 'C', 'Ę' => 'E', 'Ŵ' => 'W', 'Ṫ' => 'T', - 'Ū' => 'U', 'Č' => 'C', 'Ö' => 'Oe', 'È' => 'E', 'Ŷ' => 'Y', 'Ą' => 'A', 'Ł' => 'L', - 'Ų' => 'U', 'Ů' => 'U', 'Ş' => 'S', 'Ğ' => 'G', 'Ļ' => 'L', 'Ƒ' => 'F', 'Ž' => 'Z', - 'Ẃ' => 'W', 'Ḃ' => 'B', 'Å' => 'A', 'Ì' => 'I', 'Ï' => 'I', 'Ḋ' => 'D', 'Ť' => 'T', - 'Ŗ' => 'R', 'Ä' => 'Ae', 'Í' => 'I', 'Ŕ' => 'R', 'Ê' => 'E', 'Ü' => 'Ue', 'Ò' => 'O', - 'Ē' => 'E', 'Ñ' => 'N', 'Ń' => 'N', 'Ĥ' => 'H', 'Ĝ' => 'G', 'Đ' => 'D', 'Ĵ' => 'J', - 'Ÿ' => 'Y', 'Ũ' => 'U', 'Ŭ' => 'U', 'Ư' => 'U', 'Ţ' => 'T', 'Ý' => 'Y', 'Ő' => 'O', - 'Â' => 'A', 'Ľ' => 'L', 'Ẅ' => 'W', 'Ż' => 'Z', 'Ī' => 'I', 'Ã' => 'A', 'Ġ' => 'G', - 'Ṁ' => 'M', 'Ō' => 'O', 'Ĩ' => 'I', 'Ù' => 'U', 'Į' => 'I', 'Ź' => 'Z', 'Á' => 'A', - 'Û' => 'U', 'Þ' => 'Th', 'Ð' => 'Dh', 'Æ' => 'Ae', 'Ĕ' => 'E', - ); - } - $str = str_replace( - array_keys($UTF8_UPPER_ACCENTS), - array_values($UTF8_UPPER_ACCENTS), - $str - ); - } - - return $str; - -} diff --git a/libraries/vendor/joomla/string/src/phputf8/utils/bad.php b/libraries/vendor/joomla/string/src/phputf8/utils/bad.php deleted file mode 100644 index e8b8f117758e0..0000000000000 --- a/libraries/vendor/joomla/string/src/phputf8/utils/bad.php +++ /dev/null @@ -1,406 +0,0 @@ - 0 ) { - return $badList; - } - return FALSE; -} - -//-------------------------------------------------------------------- -/** -* Strips out any bad bytes from a UTF-8 string and returns the rest -* PCRE Pattern to locate bad bytes in a UTF-8 string -* Comes from W3 FAQ: Multilingual Forms -* Note: modified to include full ASCII range including control chars -* @see http://www.w3.org/International/questions/qa-forms-utf-8 -* @param string -* @return string -* @package utf8 -*/ -function utf8_bad_strip($str) { - $UTF8_BAD = - '([\x00-\x7F]'. # ASCII (including control chars) - '|[\xC2-\xDF][\x80-\xBF]'. # non-overlong 2-byte - '|\xE0[\xA0-\xBF][\x80-\xBF]'. # excluding overlongs - '|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}'. # straight 3-byte - '|\xED[\x80-\x9F][\x80-\xBF]'. # excluding surrogates - '|\xF0[\x90-\xBF][\x80-\xBF]{2}'. # planes 1-3 - '|[\xF1-\xF3][\x80-\xBF]{3}'. # planes 4-15 - '|\xF4[\x80-\x8F][\x80-\xBF]{2}'. # plane 16 - '|(.{1}))'; # invalid byte - ob_start(); - while (preg_match('/'.$UTF8_BAD.'/S', $str, $matches)) { - if ( !isset($matches[2])) { - echo $matches[0]; - } - $str = substr($str,strlen($matches[0])); - } - $result = ob_get_contents(); - ob_end_clean(); - return $result; -} - -//-------------------------------------------------------------------- -/** -* Replace bad bytes with an alternative character - ASCII character -* recommended is replacement char -* PCRE Pattern to locate bad bytes in a UTF-8 string -* Comes from W3 FAQ: Multilingual Forms -* Note: modified to include full ASCII range including control chars -* @see http://www.w3.org/International/questions/qa-forms-utf-8 -* @param string to search -* @param string to replace bad bytes with (defaults to '?') - use ASCII -* @return string -* @package utf8 -*/ -function utf8_bad_replace($str, $replace = '?') { - $UTF8_BAD = - '([\x00-\x7F]'. # ASCII (including control chars) - '|[\xC2-\xDF][\x80-\xBF]'. # non-overlong 2-byte - '|\xE0[\xA0-\xBF][\x80-\xBF]'. # excluding overlongs - '|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}'. # straight 3-byte - '|\xED[\x80-\x9F][\x80-\xBF]'. # excluding surrogates - '|\xF0[\x90-\xBF][\x80-\xBF]{2}'. # planes 1-3 - '|[\xF1-\xF3][\x80-\xBF]{3}'. # planes 4-15 - '|\xF4[\x80-\x8F][\x80-\xBF]{2}'. # plane 16 - '|(.{1}))'; # invalid byte - ob_start(); - while (preg_match('/'.$UTF8_BAD.'/S', $str, $matches)) { - if ( !isset($matches[2])) { - echo $matches[0]; - } else { - echo $replace; - } - $str = substr($str,strlen($matches[0])); - } - $result = ob_get_contents(); - ob_end_clean(); - return $result; -} - -//-------------------------------------------------------------------- -/** -* Return code from utf8_bad_identify() when a five octet sequence is detected. -* Note: 5 octets sequences are valid UTF-8 but are not supported by Unicode so -* do not represent a useful character -* @see utf8_bad_identify -* @package utf8 -*/ -define('UTF8_BAD_5OCTET',1); - -/** -* Return code from utf8_bad_identify() when a six octet sequence is detected. -* Note: 6 octets sequences are valid UTF-8 but are not supported by Unicode so -* do not represent a useful character -* @see utf8_bad_identify -* @package utf8 -*/ -define('UTF8_BAD_6OCTET',2); - -/** -* Return code from utf8_bad_identify(). -* Invalid octet for use as start of multi-byte UTF-8 sequence -* @see utf8_bad_identify -* @package utf8 -*/ -define('UTF8_BAD_SEQID',3); - -/** -* Return code from utf8_bad_identify(). -* From Unicode 3.1, non-shortest form is illegal -* @see utf8_bad_identify -* @package utf8 -*/ -define('UTF8_BAD_NONSHORT',4); - -/** -* Return code from utf8_bad_identify(). -* From Unicode 3.2, surrogate characters are illegal -* @see utf8_bad_identify -* @package utf8 -*/ -define('UTF8_BAD_SURROGATE',5); - -/** -* Return code from utf8_bad_identify(). -* Codepoints outside the Unicode range are illegal -* @see utf8_bad_identify -* @package utf8 -*/ -define('UTF8_BAD_UNIOUTRANGE',6); - -/** -* Return code from utf8_bad_identify(). -* Incomplete multi-octet sequence -* Note: this is kind of a "catch-all" -* @see utf8_bad_identify -* @package utf8 -*/ -define('UTF8_BAD_SEQINCOMPLETE',7); - -//-------------------------------------------------------------------- -/** -* Reports on the type of bad byte found in a UTF-8 string. Returns a -* status code on the first bad byte found -* @author -* @param string UTF-8 encoded string -* @return mixed integer constant describing problem or FALSE if valid UTF-8 -* @see utf8_bad_explain -* @see http://hsivonen.iki.fi/php-utf8/ -* @package utf8 -*/ -function utf8_bad_identify($str, &$i) { - - $mState = 0; // cached expected number of octets after the current octet - // until the beginning of the next UTF8 character sequence - $mUcs4 = 0; // cached Unicode character - $mBytes = 1; // cached expected number of octets in the current sequence - - $len = strlen($str); - - for($i = 0; $i < $len; $i++) { - - $in = ord($str{$i}); - - if ( $mState == 0) { - - // When mState is zero we expect either a US-ASCII character or a - // multi-octet sequence. - if (0 == (0x80 & ($in))) { - // US-ASCII, pass straight through. - $mBytes = 1; - - } else if (0xC0 == (0xE0 & ($in))) { - // First octet of 2 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x1F) << 6; - $mState = 1; - $mBytes = 2; - - } else if (0xE0 == (0xF0 & ($in))) { - // First octet of 3 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x0F) << 12; - $mState = 2; - $mBytes = 3; - - } else if (0xF0 == (0xF8 & ($in))) { - // First octet of 4 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x07) << 18; - $mState = 3; - $mBytes = 4; - - } else if (0xF8 == (0xFC & ($in))) { - - /* First octet of 5 octet sequence. - * - * This is illegal because the encoded codepoint must be either - * (a) not the shortest form or - * (b) outside the Unicode range of 0-0x10FFFF. - */ - - return UTF8_BAD_5OCTET; - - } else if (0xFC == (0xFE & ($in))) { - - // First octet of 6 octet sequence, see comments for 5 octet sequence. - return UTF8_BAD_6OCTET; - - } else { - // Current octet is neither in the US-ASCII range nor a legal first - // octet of a multi-octet sequence. - return UTF8_BAD_SEQID; - - } - - } else { - - // When mState is non-zero, we expect a continuation of the multi-octet - // sequence - if (0x80 == (0xC0 & ($in))) { - - // Legal continuation. - $shift = ($mState - 1) * 6; - $tmp = $in; - $tmp = ($tmp & 0x0000003F) << $shift; - $mUcs4 |= $tmp; - - /** - * End of the multi-octet sequence. mUcs4 now contains the final - * Unicode codepoint to be output - */ - if (0 == --$mState) { - - // From Unicode 3.1, non-shortest form is illegal - if (((2 == $mBytes) && ($mUcs4 < 0x0080)) || - ((3 == $mBytes) && ($mUcs4 < 0x0800)) || - ((4 == $mBytes) && ($mUcs4 < 0x10000)) ) { - return UTF8_BAD_NONSHORT; - - // From Unicode 3.2, surrogate characters are illegal - } else if (($mUcs4 & 0xFFFFF800) == 0xD800) { - return UTF8_BAD_SURROGATE; - - // Codepoints outside the Unicode range are illegal - } else if ($mUcs4 > 0x10FFFF) { - return UTF8_BAD_UNIOUTRANGE; - } - - //initialize UTF8 cache - $mState = 0; - $mUcs4 = 0; - $mBytes = 1; - } - - } else { - // ((0xC0 & (*in) != 0x80) && (mState != 0)) - // Incomplete multi-octet sequence. - $i--; - return UTF8_BAD_SEQINCOMPLETE; - } - } - } - - if ( $mState != 0 ) { - // Incomplete multi-octet sequence. - $i--; - return UTF8_BAD_SEQINCOMPLETE; - } - - // No bad octets found - $i = NULL; - return FALSE; -} - -//-------------------------------------------------------------------- -/** -* Takes a return code from utf8_bad_identify() are returns a message -* (in English) explaining what the problem is. -* @param int return code from utf8_bad_identify -* @return mixed string message or FALSE if return code unknown -* @see utf8_bad_identify -* @package utf8 -*/ -function utf8_bad_explain($code) { - - switch ($code) { - - case UTF8_BAD_5OCTET: - return 'Five octet sequences are valid UTF-8 but are not supported by Unicode'; - break; - - case UTF8_BAD_6OCTET: - return 'Six octet sequences are valid UTF-8 but are not supported by Unicode'; - break; - - case UTF8_BAD_SEQID: - return 'Invalid octet for use as start of multi-byte UTF-8 sequence'; - break; - - case UTF8_BAD_NONSHORT: - return 'From Unicode 3.1, non-shortest form is illegal'; - break; - - case UTF8_BAD_SURROGATE: - return 'From Unicode 3.2, surrogate characters are illegal'; - break; - - case UTF8_BAD_UNIOUTRANGE: - return 'Codepoints outside the Unicode range are illegal'; - break; - - case UTF8_BAD_SEQINCOMPLETE: - return 'Incomplete multi-octet sequence'; - break; - - } - - trigger_error('Unknown error code: '.$code,E_USER_WARNING); - return FALSE; - -} diff --git a/libraries/vendor/joomla/string/src/phputf8/utils/patterns.php b/libraries/vendor/joomla/string/src/phputf8/utils/patterns.php deleted file mode 100644 index 0ed8346337795..0000000000000 --- a/libraries/vendor/joomla/string/src/phputf8/utils/patterns.php +++ /dev/null @@ -1,64 +0,0 @@ - -* @param string string to locate index in -* @param int (n times) -* @return mixed - int if only one input int, array if more -* @return boolean TRUE if it's all ASCII -* @package utf8 -*/ -function utf8_byte_position() { - - $args = func_get_args(); - $str =& array_shift($args); - if (!is_string($str)) return false; - - $result = array(); - - // trivial byte index, character offset pair - $prev = array(0,0); - - // use a short piece of str to estimate bytes per character - // $i (& $j) -> byte indexes into $str - $i = utf8_locate_next_chr($str, 300); - - // $c -> character offset into $str - $c = strlen(utf8_decode(substr($str,0,$i))); - - // deal with arguments from lowest to highest - sort($args); - - foreach ($args as $offset) { - // sanity checks FIXME - - // 0 is an easy check - if ($offset == 0) { $result[] = 0; continue; } - - // ensure no endless looping - $safety_valve = 50; - - do { - - if ( ($c - $prev[1]) == 0 ) { - // Hack: gone past end of string - $error = 0; - $i = strlen($str); - break; - } - - $j = $i + (int)(($offset-$c) * ($i - $prev[0]) / ($c - $prev[1])); - - // correct to utf8 character boundary - $j = utf8_locate_next_chr($str, $j); - - // save the index, offset for use next iteration - $prev = array($i,$c); - - if ($j > $i) { - // determine new character offset - $c += strlen(utf8_decode(substr($str,$i,$j-$i))); - } else { - // ditto - $c -= strlen(utf8_decode(substr($str,$j,$i-$j))); - } - - $error = abs($c-$offset); - - // ready for next time around - $i = $j; - - // from 7 it is faster to iterate over the string - } while ( ($error > 7) && --$safety_valve) ; - - if ($error && $error <= 7) { - - if ($c < $offset) { - // move up - while ($error--) { $i = utf8_locate_next_chr($str,++$i); } - } else { - // move down - while ($error--) { $i = utf8_locate_current_chr($str,--$i); } - } - - // ready for next arg - $c = $offset; - } - $result[] = $i; - } - - if ( count($result) == 1 ) { - return $result[0]; - } - - return $result; -} - -//-------------------------------------------------------------------- -/** -* Given a string and any byte index, returns the byte index -* of the start of the current UTF-8 character, relative to supplied -* position. If the current character begins at the same place as the -* supplied byte index, that byte index will be returned. Otherwise -* this function will step backwards, looking for the index where -* curent UTF-8 character begins -* @author Chris Smith -* @param string -* @param int byte index in the string -* @return int byte index of start of next UTF-8 character -* @package utf8 -*/ -function utf8_locate_current_chr( &$str, $idx ) { - - if ($idx <= 0) return 0; - - $limit = strlen($str); - if ($idx >= $limit) return $limit; - - // Binary value for any byte after the first in a multi-byte UTF-8 character - // will be like 10xxxxxx so & 0xC0 can be used to detect this kind - // of byte - assuming well formed UTF-8 - while ($idx && ((ord($str[$idx]) & 0xC0) == 0x80)) $idx--; - - return $idx; -} - -//-------------------------------------------------------------------- -/** -* Given a string and any byte index, returns the byte index -* of the start of the next UTF-8 character, relative to supplied -* position. If the next character begins at the same place as the -* supplied byte index, that byte index will be returned. -* @author Chris Smith -* @param string -* @param int byte index in the string -* @return int byte index of start of next UTF-8 character -* @package utf8 -*/ -function utf8_locate_next_chr( &$str, $idx ) { - - if ($idx <= 0) return 0; - - $limit = strlen($str); - if ($idx >= $limit) return $limit; - - // Binary value for any byte after the first in a multi-byte UTF-8 character - // will be like 10xxxxxx so & 0xC0 can be used to detect this kind - // of byte - assuming well formed UTF-8 - while (($idx < $limit) && ((ord($str[$idx]) & 0xC0) == 0x80)) $idx++; - - return $idx; -} - diff --git a/libraries/vendor/joomla/string/src/phputf8/utils/specials.php b/libraries/vendor/joomla/string/src/phputf8/utils/specials.php deleted file mode 100644 index a53e2745e2b87..0000000000000 --- a/libraries/vendor/joomla/string/src/phputf8/utils/specials.php +++ /dev/null @@ -1,126 +0,0 @@ - -* @param string $string The UTF8 string to strip of special chars -* @param string (optional) $repl Replace special with this string -* @return string with common non-alphanumeric characters removed -* @see utf8_specials_pattern -*/ -function utf8_strip_specials($string, $repl=''){ - return preg_replace(utf8_specials_pattern(), $repl, $string); -} - - diff --git a/libraries/vendor/joomla/string/src/phputf8/utils/unicode.php b/libraries/vendor/joomla/string/src/phputf8/utils/unicode.php deleted file mode 100644 index 2d561f3c2c451..0000000000000 --- a/libraries/vendor/joomla/string/src/phputf8/utils/unicode.php +++ /dev/null @@ -1,265 +0,0 @@ - 0xFFFF. Occurrances of the BOM are ignored. Surrogates -* are not allowed. -* Returns false if the input string isn't a valid UTF-8 octet sequence -* and raises a PHP error at level E_USER_WARNING -* Note: this function has been modified slightly in this library to -* trigger errors on encountering bad bytes -* @author -* @param string UTF-8 encoded string -* @return mixed array of unicode code points or FALSE if UTF-8 invalid -* @see utf8_from_unicode -* @see http://hsivonen.iki.fi/php-utf8/ -* @package utf8 -*/ -function utf8_to_unicode($str) { - $mState = 0; // cached expected number of octets after the current octet - // until the beginning of the next UTF8 character sequence - $mUcs4 = 0; // cached Unicode character - $mBytes = 1; // cached expected number of octets in the current sequence - - $out = array(); - - $len = strlen($str); - - for($i = 0; $i < $len; $i++) { - - $in = ord($str{$i}); - - if ( $mState == 0) { - - // When mState is zero we expect either a US-ASCII character or a - // multi-octet sequence. - if (0 == (0x80 & ($in))) { - // US-ASCII, pass straight through. - $out[] = $in; - $mBytes = 1; - - } else if (0xC0 == (0xE0 & ($in))) { - // First octet of 2 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x1F) << 6; - $mState = 1; - $mBytes = 2; - - } else if (0xE0 == (0xF0 & ($in))) { - // First octet of 3 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x0F) << 12; - $mState = 2; - $mBytes = 3; - - } else if (0xF0 == (0xF8 & ($in))) { - // First octet of 4 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x07) << 18; - $mState = 3; - $mBytes = 4; - - } else if (0xF8 == (0xFC & ($in))) { - /* First octet of 5 octet sequence. - * - * This is illegal because the encoded codepoint must be either - * (a) not the shortest form or - * (b) outside the Unicode range of 0-0x10FFFF. - * Rather than trying to resynchronize, we will carry on until the end - * of the sequence and let the later error handling code catch it. - */ - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x03) << 24; - $mState = 4; - $mBytes = 5; - - } else if (0xFC == (0xFE & ($in))) { - // First octet of 6 octet sequence, see comments for 5 octet sequence. - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 1) << 30; - $mState = 5; - $mBytes = 6; - - } else { - /* Current octet is neither in the US-ASCII range nor a legal first - * octet of a multi-octet sequence. - */ - trigger_error( - 'utf8_to_unicode: Illegal sequence identifier '. - 'in UTF-8 at byte '.$i, - E_USER_WARNING - ); - return FALSE; - - } - - } else { - - // When mState is non-zero, we expect a continuation of the multi-octet - // sequence - if (0x80 == (0xC0 & ($in))) { - - // Legal continuation. - $shift = ($mState - 1) * 6; - $tmp = $in; - $tmp = ($tmp & 0x0000003F) << $shift; - $mUcs4 |= $tmp; - - /** - * End of the multi-octet sequence. mUcs4 now contains the final - * Unicode codepoint to be output - */ - if (0 == --$mState) { - - /* - * Check for illegal sequences and codepoints. - */ - // From Unicode 3.1, non-shortest form is illegal - if (((2 == $mBytes) && ($mUcs4 < 0x0080)) || - ((3 == $mBytes) && ($mUcs4 < 0x0800)) || - ((4 == $mBytes) && ($mUcs4 < 0x10000)) || - (4 < $mBytes) || - // From Unicode 3.2, surrogate characters are illegal - (($mUcs4 & 0xFFFFF800) == 0xD800) || - // Codepoints outside the Unicode range are illegal - ($mUcs4 > 0x10FFFF)) { - - trigger_error( - 'utf8_to_unicode: Illegal sequence or codepoint '. - 'in UTF-8 at byte '.$i, - E_USER_WARNING - ); - - return FALSE; - - } - - if (0xFEFF != $mUcs4) { - // BOM is legal but we don't want to output it - $out[] = $mUcs4; - } - - //initialize UTF8 cache - $mState = 0; - $mUcs4 = 0; - $mBytes = 1; - } - - } else { - /** - *((0xC0 & (*in) != 0x80) && (mState != 0)) - * Incomplete multi-octet sequence. - */ - trigger_error( - 'utf8_to_unicode: Incomplete multi-octet '. - ' sequence in UTF-8 at byte '.$i, - E_USER_WARNING - ); - - return FALSE; - } - } - } - return $out; -} - -//-------------------------------------------------------------------- -/** -* Takes an array of ints representing the Unicode characters and returns -* a UTF-8 string. Astral planes are supported ie. the ints in the -* input can be > 0xFFFF. Occurrances of the BOM are ignored. Surrogates -* are not allowed. -* Returns false if the input array contains ints that represent -* surrogates or are outside the Unicode range -* and raises a PHP error at level E_USER_WARNING -* Note: this function has been modified slightly in this library to use -* output buffering to concatenate the UTF-8 string (faster) as well as -* reference the array by it's keys -* @param array of unicode code points representing a string -* @return mixed UTF-8 string or FALSE if array contains invalid code points -* @author -* @see utf8_to_unicode -* @see http://hsivonen.iki.fi/php-utf8/ -* @package utf8 -*/ -function utf8_from_unicode($arr) { - ob_start(); - - foreach (array_keys($arr) as $k) { - - # ASCII range (including control chars) - if ( ($arr[$k] >= 0) && ($arr[$k] <= 0x007f) ) { - - echo chr($arr[$k]); - - # 2 byte sequence - } else if ($arr[$k] <= 0x07ff) { - - echo chr(0xc0 | ($arr[$k] >> 6)); - echo chr(0x80 | ($arr[$k] & 0x003f)); - - # Byte order mark (skip) - } else if($arr[$k] == 0xFEFF) { - - // nop -- zap the BOM - - # Test for illegal surrogates - } else if ($arr[$k] >= 0xD800 && $arr[$k] <= 0xDFFF) { - - // found a surrogate - trigger_error( - 'utf8_from_unicode: Illegal surrogate '. - 'at index: '.$k.', value: '.$arr[$k], - E_USER_WARNING - ); - - return FALSE; - - # 3 byte sequence - } else if ($arr[$k] <= 0xffff) { - - echo chr(0xe0 | ($arr[$k] >> 12)); - echo chr(0x80 | (($arr[$k] >> 6) & 0x003f)); - echo chr(0x80 | ($arr[$k] & 0x003f)); - - # 4 byte sequence - } else if ($arr[$k] <= 0x10ffff) { - - echo chr(0xf0 | ($arr[$k] >> 18)); - echo chr(0x80 | (($arr[$k] >> 12) & 0x3f)); - echo chr(0x80 | (($arr[$k] >> 6) & 0x3f)); - echo chr(0x80 | ($arr[$k] & 0x3f)); - - } else { - - trigger_error( - 'utf8_from_unicode: Codepoint out of Unicode range '. - 'at index: '.$k.', value: '.$arr[$k], - E_USER_WARNING - ); - - // out of range - return FALSE; - } - } - - $result = ob_get_contents(); - ob_end_clean(); - return $result; -} diff --git a/libraries/vendor/joomla/string/src/phputf8/utils/validation.php b/libraries/vendor/joomla/string/src/phputf8/utils/validation.php deleted file mode 100644 index 13e180610b22d..0000000000000 --- a/libraries/vendor/joomla/string/src/phputf8/utils/validation.php +++ /dev/null @@ -1,181 +0,0 @@ - -* @param string UTF-8 encoded string -* @return boolean true if valid -* @see http://hsivonen.iki.fi/php-utf8/ -* @see utf8_compliant -* @package utf8 -*/ -function utf8_is_valid($str) { - - $mState = 0; // cached expected number of octets after the current octet - // until the beginning of the next UTF8 character sequence - $mUcs4 = 0; // cached Unicode character - $mBytes = 1; // cached expected number of octets in the current sequence - - $len = strlen($str); - - for($i = 0; $i < $len; $i++) { - - $in = ord($str{$i}); - - if ( $mState == 0) { - - // When mState is zero we expect either a US-ASCII character or a - // multi-octet sequence. - if (0 == (0x80 & ($in))) { - // US-ASCII, pass straight through. - $mBytes = 1; - - } else if (0xC0 == (0xE0 & ($in))) { - // First octet of 2 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x1F) << 6; - $mState = 1; - $mBytes = 2; - - } else if (0xE0 == (0xF0 & ($in))) { - // First octet of 3 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x0F) << 12; - $mState = 2; - $mBytes = 3; - - } else if (0xF0 == (0xF8 & ($in))) { - // First octet of 4 octet sequence - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x07) << 18; - $mState = 3; - $mBytes = 4; - - } else if (0xF8 == (0xFC & ($in))) { - /* First octet of 5 octet sequence. - * - * This is illegal because the encoded codepoint must be either - * (a) not the shortest form or - * (b) outside the Unicode range of 0-0x10FFFF. - * Rather than trying to resynchronize, we will carry on until the end - * of the sequence and let the later error handling code catch it. - */ - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 0x03) << 24; - $mState = 4; - $mBytes = 5; - - } else if (0xFC == (0xFE & ($in))) { - // First octet of 6 octet sequence, see comments for 5 octet sequence. - $mUcs4 = ($in); - $mUcs4 = ($mUcs4 & 1) << 30; - $mState = 5; - $mBytes = 6; - - } else { - /* Current octet is neither in the US-ASCII range nor a legal first - * octet of a multi-octet sequence. - */ - return FALSE; - - } - - } else { - - // When mState is non-zero, we expect a continuation of the multi-octet - // sequence - if (0x80 == (0xC0 & ($in))) { - - // Legal continuation. - $shift = ($mState - 1) * 6; - $tmp = $in; - $tmp = ($tmp & 0x0000003F) << $shift; - $mUcs4 |= $tmp; - - /** - * End of the multi-octet sequence. mUcs4 now contains the final - * Unicode codepoint to be output - */ - if (0 == --$mState) { - - /* - * Check for illegal sequences and codepoints. - */ - // From Unicode 3.1, non-shortest form is illegal - if (((2 == $mBytes) && ($mUcs4 < 0x0080)) || - ((3 == $mBytes) && ($mUcs4 < 0x0800)) || - ((4 == $mBytes) && ($mUcs4 < 0x10000)) || - (4 < $mBytes) || - // From Unicode 3.2, surrogate characters are illegal - (($mUcs4 & 0xFFFFF800) == 0xD800) || - // Codepoints outside the Unicode range are illegal - ($mUcs4 > 0x10FFFF)) { - - return FALSE; - - } - - //initialize UTF8 cache - $mState = 0; - $mUcs4 = 0; - $mBytes = 1; - } - - } else { - /** - *((0xC0 & (*in) != 0x80) && (mState != 0)) - * Incomplete multi-octet sequence. - */ - - return FALSE; - } - } - } - return TRUE; -} - -//-------------------------------------------------------------------- -/** -* Tests whether a string complies as UTF-8. This will be much -* faster than utf8_is_valid but will pass five and six octet -* UTF-8 sequences, which are not supported by Unicode and -* so cannot be displayed correctly in a browser. In other words -* it is not as strict as utf8_is_valid but it's faster. If you use -* is to validate user input, you place yourself at the risk that -* attackers will be able to inject 5 and 6 byte sequences (which -* may or may not be a significant risk, depending on what you are -* are doing) -* @see utf8_is_valid -* @see http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php#54805 -* @param string UTF-8 string to check -* @return boolean TRUE if string is valid UTF-8 -* @package utf8 -*/ -function utf8_compliant($str) { - if ( strlen($str) == 0 ) { - return TRUE; - } - // If even just the first character can be matched, when the /u - // modifier is used, then it's valid UTF-8. If the UTF-8 is somehow - // invalid, nothing at all will match, even if the string contains - // some valid sequences - return (preg_match('/^.{1}/us',$str,$ar) == 1); -} - diff --git a/libraries/vendor/joomla/uri/LICENSE b/libraries/vendor/joomla/uri/LICENSE deleted file mode 100644 index df50810b85774..0000000000000 --- a/libraries/vendor/joomla/uri/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/uri/src/AbstractUri.php b/libraries/vendor/joomla/uri/src/AbstractUri.php deleted file mode 100644 index 3c67c21c52f6a..0000000000000 --- a/libraries/vendor/joomla/uri/src/AbstractUri.php +++ /dev/null @@ -1,414 +0,0 @@ -parse($uri); - } - } - - /** - * Magic method to get the string representation of the UriInterface object. - * - * @return string - * - * @since 1.0 - */ - public function __toString() - { - return $this->toString(); - } - - /** - * Returns full URI string. - * - * @param array $parts An array specifying the parts to render. - * - * @return string The rendered URI string. - * - * @since 1.0 - */ - public function toString(array $parts = ['scheme', 'user', 'pass', 'host', 'port', 'path', 'query', 'fragment']) - { - // Make sure the query is created - $query = $this->getQuery(); - - $uri = ''; - $uri .= in_array('scheme', $parts) ? (!empty($this->scheme) ? $this->scheme . '://' : '') : ''; - $uri .= in_array('user', $parts) ? $this->user : ''; - $uri .= in_array('pass', $parts) ? (!empty($this->pass) ? ':' : '') . $this->pass . (!empty($this->user) ? '@' : '') : ''; - $uri .= in_array('host', $parts) ? $this->host : ''; - $uri .= in_array('port', $parts) ? (!empty($this->port) ? ':' : '') . $this->port : ''; - $uri .= in_array('path', $parts) ? $this->path : ''; - $uri .= in_array('query', $parts) ? (!empty($query) ? '?' . $query : '') : ''; - $uri .= in_array('fragment', $parts) ? (!empty($this->fragment) ? '#' . $this->fragment : '') : ''; - - return $uri; - } - - /** - * Checks if variable exists. - * - * @param string $name Name of the query variable to check. - * - * @return boolean True if the variable exists. - * - * @since 1.0 - */ - public function hasVar($name) - { - return array_key_exists($name, $this->vars); - } - - /** - * Returns a query variable by name. - * - * @param string $name Name of the query variable to get. - * @param string $default Default value to return if the variable is not set. - * - * @return mixed Requested query variable if present otherwise the default value. - * - * @since 1.0 - */ - public function getVar($name, $default = null) - { - if (array_key_exists($name, $this->vars)) - { - return $this->vars[$name]; - } - - return $default; - } - - /** - * Returns flat query string. - * - * @param boolean $toArray True to return the query as a key => value pair array. - * - * @return string|array Query string or Array of parts in query string depending on the function param - * - * @since 1.0 - */ - public function getQuery($toArray = false) - { - if ($toArray) - { - return $this->vars; - } - - // If the query is empty build it first - if (is_null($this->query)) - { - $this->query = static::buildQuery($this->vars); - } - - return $this->query; - } - - /** - * Get the URI scheme (protocol) - * - * @return string The URI scheme. - * - * @since 1.0 - */ - public function getScheme() - { - return $this->scheme; - } - - /** - * Get the URI username - * - * @return string The username, or null if no username was specified. - * - * @since 1.0 - */ - public function getUser() - { - return $this->user; - } - - /** - * Get the URI password - * - * @return string The password, or null if no password was specified. - * - * @since 1.0 - */ - public function getPass() - { - return $this->pass; - } - - /** - * Get the URI host - * - * @return string The hostname/IP or null if no hostname/IP was specified. - * - * @since 1.0 - */ - public function getHost() - { - return $this->host; - } - - /** - * Get the URI port - * - * @return integer The port number, or null if no port was specified. - * - * @since 1.0 - */ - public function getPort() - { - return $this->port; - } - - /** - * Gets the URI path string - * - * @return string The URI path string. - * - * @since 1.0 - */ - public function getPath() - { - return $this->path; - } - - /** - * Get the URI anchor string - * - * @return string The URI anchor string. - * - * @since 1.0 - */ - public function getFragment() - { - return $this->fragment; - } - - /** - * Checks whether the current URI is using HTTPS. - * - * @return boolean True if using SSL via HTTPS. - * - * @since 1.0 - */ - public function isSsl() - { - return strtolower($this->getScheme()) === 'https'; - } - - /** - * Build a query from an array (reverse of the PHP parse_str()). - * - * @param array $params The array of key => value pairs to return as a query string. - * - * @return string The resulting query string. - * - * @see parse_str() - * @since 1.0 - */ - protected static function buildQuery(array $params) - { - return urldecode(http_build_query($params, '', '&')); - } - - /** - * Parse a given URI and populate the class fields. - * - * @param string $uri The URI string to parse. - * - * @return boolean True on success. - * - * @since 1.0 - */ - protected function parse($uri) - { - // Set the original URI to fall back on - $this->uri = $uri; - - /* - * Parse the URI and populate the object fields. If URI is parsed properly, - * set method return value to true. - */ - - $parts = UriHelper::parse_url($uri); - - if ($parts === false) - { - throw new \RuntimeException(sprintf('Could not parse the requested URI %s', $uri)); - } - - $retval = ($parts) ? true : false; - - // We need to replace & with & for parse_str to work right... - if (isset($parts['query']) && strpos($parts['query'], '&')) - { - $parts['query'] = str_replace('&', '&', $parts['query']); - } - - foreach ($parts as $key => $value) - { - $this->$key = $value; - } - - // Parse the query - if (isset($parts['query'])) - { - parse_str($parts['query'], $this->vars); - } - - return $retval; - } - - /** - * Resolves //, ../ and ./ from a path and returns the result. - * - * For example: - * /foo/bar/../boo.php => /foo/boo.php - * /foo/bar/../../boo.php => /boo.php - * /foo/bar/.././/boo.php => /foo/boo.php - * - * @param string $path The URI path to clean. - * - * @return string Cleaned and resolved URI path. - * - * @since 1.0 - */ - protected function cleanPath($path) - { - $path = explode('/', preg_replace('#(/+)#', '/', $path)); - - for ($i = 0, $n = count($path); $i < $n; $i++) - { - if ($path[$i] == '.' || $path[$i] == '..') - { - if (($path[$i] == '.') || ($path[$i] == '..' && $i == 1 && $path[0] == '')) - { - unset($path[$i]); - $path = array_values($path); - $i--; - $n--; - } - elseif ($path[$i] == '..' && ($i > 1 || ($i == 1 && $path[0] != ''))) - { - unset($path[$i]); - unset($path[$i - 1]); - $path = array_values($path); - $i -= 2; - $n -= 2; - } - } - } - - return implode('/', $path); - } -} diff --git a/libraries/vendor/joomla/uri/src/Uri.php b/libraries/vendor/joomla/uri/src/Uri.php deleted file mode 100644 index 0bc964b6c2e26..0000000000000 --- a/libraries/vendor/joomla/uri/src/Uri.php +++ /dev/null @@ -1,202 +0,0 @@ -vars[$name] ?? null; - - $this->vars[$name] = $value; - - // Empty the query - $this->query = null; - - return $tmp; - } - - /** - * Removes an item from the query string variables if it exists - * - * @param string $name Name of variable to remove. - * - * @return void - * - * @since 1.0 - */ - public function delVar($name) - { - if (array_key_exists($name, $this->vars)) - { - unset($this->vars[$name]); - - // Empty the query - $this->query = null; - } - } - - /** - * Sets the query to a supplied string in format foo=bar&x=y - * - * @param array|string $query The query string or array. - * - * @return void - * - * @since 1.0 - */ - public function setQuery($query) - { - if (is_array($query)) - { - $this->vars = $query; - } - else - { - if (strpos($query, '&') !== false) - { - $query = str_replace('&', '&', $query); - } - - parse_str($query, $this->vars); - } - - // Empty the query - $this->query = null; - } - - /** - * Set the URI scheme (protocol) - * - * @param string $scheme The URI scheme. - * - * @return Uri This method supports chaining. - * - * @since 1.0 - */ - public function setScheme($scheme) - { - $this->scheme = $scheme; - - return $this; - } - - /** - * Set the URI username - * - * @param string $user The URI username. - * - * @return Uri This method supports chaining. - * - * @since 1.0 - */ - public function setUser($user) - { - $this->user = $user; - - return $this; - } - - /** - * Set the URI password - * - * @param string $pass The URI password. - * - * @return Uri This method supports chaining. - * - * @since 1.0 - */ - public function setPass($pass) - { - $this->pass = $pass; - - return $this; - } - - /** - * Set the URI host - * - * @param string $host The URI host. - * - * @return Uri This method supports chaining. - * - * @since 1.0 - */ - public function setHost($host) - { - $this->host = $host; - - return $this; - } - - /** - * Set the URI port - * - * @param integer $port The URI port number. - * - * @return Uri This method supports chaining. - * - * @since 1.0 - */ - public function setPort($port) - { - $this->port = $port; - - return $this; - } - - /** - * Set the URI path string - * - * @param string $path The URI path string. - * - * @return Uri This method supports chaining. - * - * @since 1.0 - */ - public function setPath($path) - { - $this->path = $this->cleanPath($path); - - return $this; - } - - /** - * Set the URI anchor string - * - * @param string $anchor The URI anchor string. - * - * @return Uri This method supports chaining. - * - * @since 1.0 - */ - public function setFragment($anchor) - { - $this->fragment = $anchor; - - return $this; - } -} diff --git a/libraries/vendor/joomla/uri/src/UriHelper.php b/libraries/vendor/joomla/uri/src/UriHelper.php deleted file mode 100644 index b172ec937151a..0000000000000 --- a/libraries/vendor/joomla/uri/src/UriHelper.php +++ /dev/null @@ -1,68 +0,0 @@ - '!', - '%2A' => '*', - '%27' => '\'', - '%28' => '(', - '%29' => ')', - '%3B' => ';', - '%3A' => ':', - '%40' => '@', - '%26' => '&', - '%3D' => '=', - '%24' => '$', - '%2C' => ',', - '%2F' => '/', - '%3F' => '?', - '%23' => '#', - '%5B' => '[', - '%5D' => ']', - ]; - - // Encode the URL (so UTF-8 chars are encoded), revert the encoding in the reserved uri characters and parse the url. - $parts = parse_url(strtr(urlencode($url), $reservedUriCharactersMap), $component); - - // With a well formed url decode the url (so UTF-8 chars are decoded). - return $parts ? array_map('urldecode', $parts) : $parts; - } -} diff --git a/libraries/vendor/joomla/uri/src/UriImmutable.php b/libraries/vendor/joomla/uri/src/UriImmutable.php deleted file mode 100644 index ca389d01c5692..0000000000000 --- a/libraries/vendor/joomla/uri/src/UriImmutable.php +++ /dev/null @@ -1,63 +0,0 @@ -constructed === true) - { - throw new \BadMethodCallException('This is an immutable object'); - } - - $this->constructed = true; - - parent::__construct($uri); - } -} diff --git a/libraries/vendor/joomla/uri/src/UriInterface.php b/libraries/vendor/joomla/uri/src/UriInterface.php deleted file mode 100644 index 56c53c64d1a6a..0000000000000 --- a/libraries/vendor/joomla/uri/src/UriInterface.php +++ /dev/null @@ -1,145 +0,0 @@ - value pair array. - * - * @return array|string Query string, optionally as an array. - * - * @since 1.0 - */ - public function getQuery($toArray = false); - - /** - * Get the URI scheme (protocol) - * - * @return string The URI scheme. - * - * @since 1.0 - */ - public function getScheme(); - - /** - * Get the URI username - * - * @return string The username, or null if no username was specified. - * - * @since 1.0 - */ - public function getUser(); - - /** - * Get the URI password - * - * @return string The password, or null if no password was specified. - * - * @since 1.0 - */ - public function getPass(); - - /** - * Get the URI host - * - * @return string The hostname/IP or null if no hostname/IP was specified. - * - * @since 1.0 - */ - public function getHost(); - - /** - * Get the URI port - * - * @return integer The port number, or null if no port was specified. - * - * @since 1.0 - */ - public function getPort(); - - /** - * Gets the URI path string - * - * @return string The URI path string. - * - * @since 1.0 - */ - public function getPath(); - - /** - * Get the URI archor string - * - * @return string The URI anchor string. - * - * @since 1.0 - */ - public function getFragment(); - - /** - * Checks whether the current URI is using HTTPS. - * - * @return boolean True if using SSL via HTTPS. - * - * @since 1.0 - */ - public function isSsl(); -} diff --git a/libraries/vendor/joomla/utilities/LICENSE b/libraries/vendor/joomla/utilities/LICENSE deleted file mode 100644 index df50810b85774..0000000000000 --- a/libraries/vendor/joomla/utilities/LICENSE +++ /dev/null @@ -1,340 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libraries/vendor/joomla/utilities/src/ArrayHelper.php b/libraries/vendor/joomla/utilities/src/ArrayHelper.php deleted file mode 100644 index 30a7e8929ec32..0000000000000 --- a/libraries/vendor/joomla/utilities/src/ArrayHelper.php +++ /dev/null @@ -1,751 +0,0 @@ - $v) - { - if ($recursive && is_array($v)) - { - $obj->$k = static::toObject($v, $class); - } - else - { - $obj->$k = $v; - } - } - - return $obj; - } - - /** - * Utility function to map an array to a string. - * - * @param array $array The array to map. - * @param string $innerGlue The glue (optional, defaults to '=') between the key and the value. - * @param string $outerGlue The glue (optional, defaults to ' ') between array elements. - * @param boolean $keepOuterKey True if final key should be kept. - * - * @return string - * - * @since 1.0 - */ - public static function toString(array $array, $innerGlue = '=', $outerGlue = ' ', $keepOuterKey = false) - { - $output = []; - - foreach ($array as $key => $item) - { - if (is_array($item)) - { - if ($keepOuterKey) - { - $output[] = $key; - } - - // This is value is an array, go and do it again! - $output[] = static::toString($item, $innerGlue, $outerGlue, $keepOuterKey); - } - else - { - $output[] = $key . $innerGlue . '"' . $item . '"'; - } - } - - return implode($outerGlue, $output); - } - - /** - * Utility function to map an object to an array - * - * @param object $source The source object - * @param boolean $recurse True to recurse through multi-level objects - * @param string $regex An optional regular expression to match on field names - * - * @return array - * - * @since 1.0 - */ - public static function fromObject($source, $recurse = true, $regex = null) - { - if (is_object($source) || is_array($source)) - { - return self::arrayFromObject($source, $recurse, $regex); - } - - return []; - } - - /** - * Utility function to map an object or array to an array - * - * @param mixed $item The source object or array - * @param boolean $recurse True to recurse through multi-level objects - * @param string $regex An optional regular expression to match on field names - * - * @return array - * - * @since 1.0 - */ - private static function arrayFromObject($item, $recurse, $regex) - { - if (is_object($item)) - { - $result = []; - - foreach (get_object_vars($item) as $k => $v) - { - if (!$regex || preg_match($regex, $k)) - { - if ($recurse) - { - $result[$k] = self::arrayFromObject($v, $recurse, $regex); - } - else - { - $result[$k] = $v; - } - } - } - - return $result; - } - - if (is_array($item)) - { - $result = []; - - foreach ($item as $k => $v) - { - $result[$k] = self::arrayFromObject($v, $recurse, $regex); - } - - return $result; - } - - return $item; - } - - /** - * Adds a column to an array of arrays or objects - * - * @param array $array The source array - * @param array $column The array to be used as new column - * @param string $colName The index of the new column or name of the new object property - * @param string $keyCol The index of the column or name of object property to be used for mapping with the new column - * - * @return array An array with the new column added to the source array - * - * @since 1.5.0 - * @see https://secure.php.net/manual/en/language.types.array.php - */ - public static function addColumn(array $array, array $column, $colName, $keyCol = null) - { - $result = array(); - - foreach ($array as $i => $item) - { - $value = null; - - if (!isset($keyCol)) - { - $value = static::getValue($column, $i); - } - else - { - // Convert object to array - $subject = is_object($item) ? static::fromObject($item) : $item; - - if (isset($subject[$keyCol]) && is_scalar($subject[$keyCol])) - { - $value = static::getValue($column, $subject[$keyCol]); - } - } - - // Add the column - if (is_object($item)) - { - if (isset($colName)) - { - $item->$colName = $value; - } - } - else - { - if (isset($colName)) - { - $item[$colName] = $value; - } - else - { - $item[] = $value; - } - } - - $result[$i] = $item; - } - - return $result; - } - - /** - * Remove a column from an array of arrays or objects - * - * @param array $array The source array - * @param string $colName The index of the column or name of object property to be removed - * - * @return array Column of values from the source array - * - * @since 1.5.0 - * @see https://secure.php.net/manual/en/language.types.array.php - */ - public static function dropColumn(array $array, $colName) - { - $result = array(); - - foreach ($array as $i => $item) - { - if (is_object($item) && isset($item->$colName)) - { - unset($item->$colName); - } - elseif (is_array($item) && isset($item[$colName])) - { - unset($item[$colName]); - } - - $result[$i] = $item; - } - - return $result; - } - - /** - * Extracts a column from an array of arrays or objects - * - * @param array $array The source array - * @param string $valueCol The index of the column or name of object property to be used as value - * It may also be NULL to return complete arrays or objects (this is - * useful together with $keyCol to reindex the array). - * @param string $keyCol The index of the column or name of object property to be used as key - * - * @return array Column of values from the source array - * - * @since 1.0 - * @see https://secure.php.net/manual/en/language.types.array.php - * @see https://secure.php.net/manual/en/function.array-column.php - */ - public static function getColumn(array $array, $valueCol, $keyCol = null) - { - return array_column($array, $valueCol, $keyCol); - } - - /** - * Utility function to return a value from a named array or a specified default - * - * @param array|\ArrayAccess $array A named array or object that implements ArrayAccess - * @param string $name The key to search for (this can be an array index or a dot separated key sequence as in Registry) - * @param mixed $default The default value to give if no key found - * @param string $type Return type for the variable (INT, FLOAT, STRING, WORD, BOOLEAN, ARRAY) - * - * @return mixed - * - * @since 1.0 - * @throws \InvalidArgumentException - */ - public static function getValue($array, $name, $default = null, $type = '') - { - if (!is_array($array) && !($array instanceof \ArrayAccess)) - { - throw new \InvalidArgumentException('The object must be an array or an object that implements ArrayAccess'); - } - - $result = null; - - if (isset($array[$name])) - { - $result = $array[$name]; - } - elseif (strpos($name, '.')) - { - list($name, $subset) = explode('.', $name, 2); - - if (isset($array[$name]) && is_array($array[$name])) - { - return static::getValue($array[$name], $subset, $default, $type); - } - } - - // Handle the default case - if (is_null($result)) - { - $result = $default; - } - - // Handle the type constraint - switch (strtoupper($type)) - { - case 'INT': - case 'INTEGER': - // Only use the first integer value - @preg_match('/-?[0-9]+/', $result, $matches); - $result = @(int) $matches[0]; - break; - - case 'FLOAT': - case 'DOUBLE': - // Only use the first floating point value - @preg_match('/-?[0-9]+(\.[0-9]+)?/', $result, $matches); - $result = @(float) $matches[0]; - break; - - case 'BOOL': - case 'BOOLEAN': - $result = (bool) $result; - break; - - case 'ARRAY': - if (!is_array($result)) - { - $result = [$result]; - } - break; - - case 'STRING': - $result = (string) $result; - break; - - case 'WORD': - $result = (string) preg_replace('#\W#', '', $result); - break; - - case 'NONE': - default: - // No casting necessary - break; - } - - return $result; - } - - /** - * Takes an associative array of arrays and inverts the array keys to values using the array values as keys. - * - * Example: - * $input = array( - * 'New' => array('1000', '1500', '1750'), - * 'Used' => array('3000', '4000', '5000', '6000') - * ); - * $output = ArrayHelper::invert($input); - * - * Output would be equal to: - * $output = array( - * '1000' => 'New', - * '1500' => 'New', - * '1750' => 'New', - * '3000' => 'Used', - * '4000' => 'Used', - * '5000' => 'Used', - * '6000' => 'Used' - * ); - * - * @param array $array The source array. - * - * @return array - * - * @since 1.0 - */ - public static function invert(array $array) - { - $return = []; - - foreach ($array as $base => $values) - { - if (!is_array($values)) - { - continue; - } - - foreach ($values as $key) - { - // If the key isn't scalar then ignore it. - if (is_scalar($key)) - { - $return[$key] = $base; - } - } - } - - return $return; - } - - /** - * Method to determine if an array is an associative array. - * - * @param array $array An array to test. - * - * @return boolean - * - * @since 1.0 - */ - public static function isAssociative($array) - { - if (is_array($array)) - { - foreach (array_keys($array) as $k => $v) - { - if ($k !== $v) - { - return true; - } - } - } - - return false; - } - - /** - * Pivots an array to create a reverse lookup of an array of scalars, arrays or objects. - * - * @param array $source The source array. - * @param string $key Where the elements of the source array are objects or arrays, the key to pivot on. - * - * @return array An array of arrays pivoted either on the value of the keys, or an individual key of an object or array. - * - * @since 1.0 - */ - public static function pivot(array $source, $key = null) - { - $result = []; - $counter = []; - - foreach ($source as $index => $value) - { - // Determine the name of the pivot key, and its value. - if (is_array($value)) - { - // If the key does not exist, ignore it. - if (!isset($value[$key])) - { - continue; - } - - $resultKey = $value[$key]; - $resultValue = $source[$index]; - } - elseif (is_object($value)) - { - // If the key does not exist, ignore it. - if (!isset($value->$key)) - { - continue; - } - - $resultKey = $value->$key; - $resultValue = $source[$index]; - } - else - { - // Just a scalar value. - $resultKey = $value; - $resultValue = $index; - } - - // The counter tracks how many times a key has been used. - if (empty($counter[$resultKey])) - { - // The first time around we just assign the value to the key. - $result[$resultKey] = $resultValue; - $counter[$resultKey] = 1; - } - elseif ($counter[$resultKey] == 1) - { - // If there is a second time, we convert the value into an array. - $result[$resultKey] = [ - $result[$resultKey], - $resultValue, - ]; - $counter[$resultKey]++; - } - else - { - // After the second time, no need to track any more. Just append to the existing array. - $result[$resultKey][] = $resultValue; - } - } - - unset($counter); - - return $result; - } - - /** - * Utility function to sort an array of objects on a given field - * - * @param array $a An array of objects - * @param mixed $k The key (string) or an array of keys to sort on - * @param mixed $direction Direction (integer) or an array of direction to sort in [1 = Ascending] [-1 = Descending] - * @param mixed $caseSensitive Boolean or array of booleans to let sort occur case sensitive or insensitive - * @param mixed $locale Boolean or array of booleans to let sort occur using the locale language or not - * - * @return array - * - * @since 1.0 - */ - public static function sortObjects(array $a, $k, $direction = 1, $caseSensitive = true, $locale = false) - { - if (!is_array($locale) || !is_array($locale[0])) - { - $locale = [$locale]; - } - - $sortCase = (array) $caseSensitive; - $sortDirection = (array) $direction; - $key = (array) $k; - $sortLocale = $locale; - - usort( - $a, function ($a, $b) use ($sortCase, $sortDirection, $key, $sortLocale) - { - for ($i = 0, $count = count($key); $i < $count; $i++) - { - if (isset($sortDirection[$i])) - { - $direction = $sortDirection[$i]; - } - - if (isset($sortCase[$i])) - { - $caseSensitive = $sortCase[$i]; - } - - if (isset($sortLocale[$i])) - { - $locale = $sortLocale[$i]; - } - - $va = $a->{$key[$i]}; - $vb = $b->{$key[$i]}; - - if ((is_bool($va) || is_numeric($va)) && (is_bool($vb) || is_numeric($vb))) - { - $cmp = $va - $vb; - } - elseif ($caseSensitive) - { - $cmp = StringHelper::strcmp($va, $vb, $locale); - } - else - { - $cmp = StringHelper::strcasecmp($va, $vb, $locale); - } - - if ($cmp > 0) - { - return $direction; - } - - if ($cmp < 0) - { - return -$direction; - } - } - - return 0; - } - ); - - return $a; - } - - /** - * Multidimensional array safe unique test - * - * @param array $array The array to make unique. - * - * @return array - * - * @see https://secure.php.net/manual/en/function.array-unique.php - * @since 1.0 - */ - public static function arrayUnique(array $array) - { - $array = array_map('serialize', $array); - $array = array_unique($array); - $array = array_map('unserialize', $array); - - return $array; - } - - /** - * An improved array_search that allows for partial matching of strings values in associative arrays. - * - * @param string $needle The text to search for within the array. - * @param array $haystack Associative array to search in to find $needle. - * @param boolean $caseSensitive True to search case sensitive, false otherwise. - * - * @return mixed Returns the matching array $key if found, otherwise false. - * - * @since 1.0 - */ - public static function arraySearch($needle, array $haystack, $caseSensitive = true) - { - foreach ($haystack as $key => $value) - { - $searchFunc = ($caseSensitive) ? 'strpos' : 'stripos'; - - if ($searchFunc($value, $needle) === 0) - { - return $key; - } - } - - return false; - } - - /** - * Method to recursively convert data to a one dimension array. - * - * @param array|object $array The array or object to convert. - * @param string $separator The key separator. - * @param string $prefix Last level key prefix. - * - * @return array - * - * @since 1.3.0 - */ - public static function flatten($array, $separator = '.', $prefix = '') - { - if ($array instanceof \Traversable) - { - $array = iterator_to_array($array); - } - elseif (is_object($array)) - { - $array = get_object_vars($array); - } - - $result = []; - - foreach ($array as $k => $v) - { - $key = $prefix ? $prefix . $separator . $k : $k; - - if (is_object($v) || is_array($v)) - { - $result[] = static::flatten($v, $separator, $key); - } - else - { - $result[] = [$key => $v]; - } - } - - return array_merge(...$result); - } - - /** - * Merge array recursively. - * - * @param array ...$args Array list to be merged. - * - * @return array Merged array. - * - * @since __DEPLOY_VERSION__ - * @throws \InvalidArgumentException - */ - public static function mergeRecursive(...$args): array - { - $result = []; - - foreach ($args as $i => $array) - { - if (!is_array($array)) - { - throw new \InvalidArgumentException(sprintf('Argument #%d is not an array.', $i + 2)); - } - - foreach ($array as $key => &$value) - { - if (is_array($value) && isset($result[$key]) && is_array($result[$key])) - { - $result[$key] = static::mergeRecursive($result [$key], $value); - } - else - { - $result[$key] = $value; - } - } - } - - return $result; - } -} diff --git a/libraries/vendor/mso/idna-convert/LICENSE b/libraries/vendor/mso/idna-convert/LICENSE deleted file mode 100644 index 5f2dd7fca2dda..0000000000000 --- a/libraries/vendor/mso/idna-convert/LICENSE +++ /dev/null @@ -1,505 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -(This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.) - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - {description} - Copyright (C) {year} {fullname} - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 - USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random - Hacker. - - {signature of Ty Coon}, 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - diff --git a/libraries/vendor/mso/idna-convert/src/EncodingHelper.php b/libraries/vendor/mso/idna-convert/src/EncodingHelper.php deleted file mode 100644 index 41b502098a53c..0000000000000 --- a/libraries/vendor/mso/idna-convert/src/EncodingHelper.php +++ /dev/null @@ -1,186 +0,0 @@ - - * @copyright 2003-2016 phlyLabs Berlin, http://phlylabs.de - * @version 1.0.0 2016-01-08 - */ - -namespace Mso\IdnaConvert; - -class EncodingHelper -{ - /** - * Convert a string from any of various encodings to UTF-8 - * - * @param string $string String to encode - *[@param string $encoding Encoding; Default: ISO-8859-1] - *[@param bool $safe_mode Safe Mode: if set to TRUE, the original string is retunred on errors] - * @return string|false The encoded string or false on failure - * @since 0.0.1 - */ - public static function toUtf8($string = '', $encoding = 'iso-8859-1', $safe_mode = false) - { - $safe = ($safe_mode) ? $string : false; - if (strtoupper($encoding) == 'UTF-8' || strtoupper($encoding) == 'UTF8') { - - return $string; - } - if (strtoupper($encoding) == 'ISO-8859-1') { - - return \utf8_encode($string); - - } if (strtoupper($encoding) == 'WINDOWS-1252') { - - return \utf8_encode(self::map_w1252_iso8859_1($string)); - } - - if (strtoupper($encoding) == 'UNICODE-1-1-UTF-7') { - $encoding = 'utf-7'; - } - if (function_exists('mb_convert_encoding')) { - $conv = @mb_convert_encoding($string, 'UTF-8', strtoupper($encoding)); - if ($conv) { - - return $conv; - } - } - if (function_exists('iconv')) { - $conv = @iconv(strtoupper($encoding), 'UTF-8', $string); - if ($conv) { - - return $conv; - } - } - if (function_exists('libiconv')) { - $conv = @libiconv(strtoupper($encoding), 'UTF-8', $string); - if ($conv) { - - return $conv; - } - } - - return $safe; - } - - /** - * Convert a string from UTF-8 to any of various encodings - * - * @param string $string String to decode - *[@param string $encoding Encoding; Default: ISO-8859-1] - *[@param bool $safe_mode Safe Mode: if set to TRUE, the original string is retunred on errors] - * @return string|false The decoded string or false on failure - * @since 0.0.1 - */ - public static function fromUtf8($string = '', $encoding = 'iso-8859-1', $safe_mode = false) - { - $safe = ($safe_mode) ? $string : false; - if (!$encoding) $encoding = 'ISO-8859-1'; - if (strtoupper($encoding) == 'UTF-8' || strtoupper($encoding) == 'UTF8') { - - return $string; - } - if (strtoupper($encoding) == 'ISO-8859-1') { - - return utf8_decode($string); - } - if (strtoupper($encoding) == 'WINDOWS-1252') { - - return self::map_iso8859_1_w1252(utf8_decode($string)); - } - - if (strtoupper($encoding) == 'UNICODE-1-1-UTF-7') { - $encoding = 'utf-7'; - } - if (function_exists('mb_convert_encoding')) { - $conv = @mb_convert_encoding($string, strtoupper($encoding), 'UTF-8'); - if ($conv) { - - return $conv; - } - } - if (function_exists('iconv')) { - $conv = @iconv('UTF-8', strtoupper($encoding), $string); - if ($conv) { - - return $conv; - } - } - if (function_exists('libiconv')) { - $conv = @libiconv('UTF-8', strtoupper($encoding), $string); - if ($conv) { - - return $conv; - } - } - - return $safe; - } - - /** - * Special treatment for our guys in Redmond - * Windows-1252 is basically ISO-8859-1 -- with some exceptions, which get accounted for here - * - * @param string $string Your input in Win1252 - * @return string The resulting ISO-8859-1 string - * @since 0.0.1 - */ - protected static function map_w1252_iso8859_1($string = '') - { - if ($string == '') { - - return ''; - } - $return = ''; - - for ($i = 0; $i < strlen($string); ++$i) { - $c = ord($string{$i}); - switch ($c) { - case 129: $return .= chr(252); break; - case 132: $return .= chr(228); break; - case 142: $return .= chr(196); break; - case 148: $return .= chr(246); break; - case 153: $return .= chr(214); break; - case 154: $return .= chr(220); break; - case 225: $return .= chr(223); break; - default: $return .= chr($c); - } - } - - return $return; - } - - /** - * Special treatment for our guys in Redmond - * Windows-1252 is basically ISO-8859-1 -- with some exceptions, which get accounted for here - * - * @param string $string Your input in ISO-8859-1 - * @return string The resulting Win1252 string - * @since 0.0.1 - */ - protected static function map_iso8859_1_w1252($string = '') - { - if ($string == '') { - return ''; - } - - $return = ''; - for ($i = 0; $i < strlen($string); ++$i) { - $c = ord($string{$i}); - switch ($c) { - case 196: $return .= chr(142); break; - case 214: $return .= chr(153); break; - case 220: $return .= chr(154); break; - case 223: $return .= chr(225); break; - case 228: $return .= chr(132); break; - case 246: $return .= chr(148); break; - case 252: $return .= chr(129); break; - default: $return .= chr($c); - } - } - - return $return; - } -} diff --git a/libraries/vendor/mso/idna-convert/src/IdnaConvert.php b/libraries/vendor/mso/idna-convert/src/IdnaConvert.php deleted file mode 100644 index 3c1b45c558e42..0000000000000 --- a/libraries/vendor/mso/idna-convert/src/IdnaConvert.php +++ /dev/null @@ -1,405 +0,0 @@ - - * @copyright 2004-2016 phlyLabs Berlin, http://phlylabs.de - * @version 1.0.1-dev 2016-01-12 - */ - -namespace Mso\IdnaConvert; - -class IdnaConvert { - - const Version = '1.1.0'; - const SubVersion = 'main'; - - // Internal settings, do not touch! - protected $encoding = 'utf8'; // Default input charset is UTF-8 - protected $strictMode = false; // Behave strict or not - protected $idnVersion = '2008'; // Can be either 2003 (old) or 2008 (default) - - protected $NamePrepData = null; - protected $UnicodeTranscoder = null; - - /** - * the constructor - * - * @param array|null $params Parameters to control the class' behaviour - * @since 0.5.2 - */ - public function __construct($params = null) - { - $this->UnicodeTranscoder = new UnicodeTranscoder(); - - // Kept for backwarsds compatibility. Consider using the setter methods instead. - if (!empty($params) && is_array($params)) { - if (isset($params['encoding'])) { - $this->setEncoding($params['encoding']); - } - - if (isset($params['idn_version'])) { - $this->setIdnVersion($params['idn_version']); - } - - if (isset($params['strict_mode'])) { - $this->setStrictMode($params['strict_mode']); - } - } - - $this->setIdnVersion($this->idnVersion); - } - - public function getClassVersion() - { - return self::Version.'-'.self::SubVersion; - } - - /** - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * @param string $encoding - */ - public function setEncoding($encoding) - { - switch ($encoding) { - case 'utf8': - case 'ucs4_string': - case 'ucs4_array': - $this->encoding = $encoding; - break; - default: - throw new \InvalidArgumentException(sprintf('Invalid encoding %s', $encoding)); - } - } - - /** - * @return boolean - */ - public function isStrictMode() - { - return $this->strictMode; - } - - /** - * @param boolean $strictMode - */ - public function setStrictMode($strictMode) - { - $this->strictMode = ($strictMode) ? true : false; - } - - /** - * @return int - */ - public function getIdnVersion() - { - return $this->idnVersion; - } - - /** - * @param int $idnVersion - */ - public function setIdnVersion($idnVersion) - { - if (in_array($idnVersion, ['2003', '2008'])) { - if (is_null($this->NamePrepData) || $idnVersion != $this->idnVersion) { - $this->NamePrepData = null; // Ought to destroy the object's reference - // Re-instantiate with different data set - $this->NamePrepData = ($idnVersion == 2003) - ? new NamePrepData2003() - : new NamePrepData(); - } - - $this->idnVersion = $idnVersion; - - } else { - throw new \InvalidArgumentException(sprintf('Invalid IDN version %d', $idnVersion)); - } - } - - /** - * Decode a given ACE domain name - * @param string $input Domain name (ACE string) - * [@param string $one_time_encoding Desired output encoding] - * @return string Decoded Domain name (UTF-8 or UCS-4) - */ - public function decode($input, $one_time_encoding = null) - { - $punyCode = $this->punycodeFactory(); - - // Optionally set - if ($one_time_encoding) { - switch ($one_time_encoding) { - case 'utf8': - case 'ucs4_string': - case 'ucs4_array': - break; - default: - throw new \InvalidArgumentException(sprintf('Invalid encoding %s', $one_time_encoding)); - } - } - // Make sure to drop any newline characters around - $input = trim($input); - - // Negotiate input and try to determine, whether it is a plain string, - // an email address or something like a complete URL - if (strpos($input, '@')) { // Maybe it is an email address - // No no in strict mode - if ($this->strictMode) { - throw new \InvalidArgumentException('Only individual domain name parts can be handled in strict mode'); - } - list ($email_pref, $input) = explode('@', $input, 2); - $arr = explode('.', $input); - foreach ($arr as $k => $v) { - $conv = $punyCode->decode($v); - if ($conv) { - $arr[$k] = $conv; - } - } - $input = join('.', $arr); - $arr = explode('.', $email_pref); - foreach ($arr as $k => $v) { - $conv = $punyCode->decode($v); - if ($conv) { - $arr[$k] = $conv; - } - } - $email_pref = join('.', $arr); - $return = $email_pref . '@' . $input; - } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters) - // No no in strict mode - if ($this->strictMode) { - throw new \InvalidArgumentException('Only individual domain name parts can be handled in strict mode'); - } - $parsed = parse_url($input); - if (isset($parsed['host'])) { - $arr = explode('.', $parsed['host']); - foreach ($arr as $k => $v) { - $conv = $punyCode->decode($v); - if ($conv) { - $arr[$k] = $conv; - } - } - $parsed['host'] = join('.', $arr); - $return = (empty($parsed['scheme']) ? '' : $parsed['scheme'] . (strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')). - (empty($parsed['user']) ? '' : $parsed['user'] . (empty($parsed['pass']) ? '' : ':' . $parsed['pass']) . '@'). - $parsed['host']. - (empty($parsed['port']) ? '' : ':' . $parsed['port']). - (empty($parsed['path']) ? '' : $parsed['path']). - (empty($parsed['query']) ? '' : '?' . $parsed['query']). - (empty($parsed['fragment']) ? '' : '#' . $parsed['fragment']); - } else { // parse_url seems to have failed, try without it - $arr = explode('.', $input); - foreach ($arr as $k => $v) { - $conv = $punyCode->decode($v); - if ($conv) { - $arr[$k] = $conv; - } - } - $return = join('.', $arr); - } - } else { // Otherwise we consider it being a pure domain name string - $return = $punyCode->decode($input); - if (!$return) { - $return = $input; - } - } - // The output is UTF-8 by default, other output formats need conversion here - // If one time encoding is given, use this, else the objects property - $outputEncoding = ($one_time_encoding) ? $one_time_encoding : $this->encoding; - switch ($outputEncoding) { - case 'utf8': - return $return; // break; - case 'ucs4_string': - return $this->UnicodeTranscoder->convert($return, 'utf8', 'ucs4'); // break; - case 'ucs4_array': - return $this->UnicodeTranscoder->convert($return, 'utf8', 'ucs4array'); // break; - default: - throw new \InvalidArgumentException(sprintf('Unsupported output encoding %s', $outputEncoding)); - } - } - - /** - * Encode a given UTF-8 domain name - * @param string $decoded Domain name (UTF-8 or UCS-4) - * [@param boolean $one_time_encoding Desired input encoding, see {@link set_parameter}] - * @return string Encoded Domain name (ACE string) - */ - public function encode($decoded, $one_time_encoding = false) - { - // Forcing conversion of input to UCS4 array - // If one time encoding is given, use this, else the objects property - $inputEncoding = $one_time_encoding ? $one_time_encoding : $this->encoding; - switch ($inputEncoding) { - case 'utf8': - $decoded = $this->UnicodeTranscoder->convert($decoded, 'utf8', 'ucs4array'); - break; - case 'ucs4_string': - $decoded = $this->UnicodeTranscoder->convert($decoded, 'ucs4', 'ucs4array'); - break; - case 'ucs4_array': - break; - default: - throw new \InvalidArgumentException(sprintf('Unsupported input encoding %s', $inputEncoding)); - } - - // No input, no output, what else did you expect? - if (empty($decoded)) { - return ''; - } - - $punyCode = $this->punycodeFactory(); - - // Anchors for iteration - $last_begin = 0; - // Output string - $output = ''; - foreach ($decoded as $k => $v) { - // Make sure to use just the plain dot - switch ($v) { - case 0x3002: - case 0xFF0E: - case 0xFF61: - $decoded[$k] = 0x2E; - // Right, no break here, the above are converted to dots anyway - // Stumbling across an anchoring character - case 0x2E: - case 0x2F: - case 0x3A: - case 0x3F: - case 0x40: - // Neither email addresses nor URLs allowed in strict mode - if ($this->strictMode) { - throw new \InvalidArgumentException('Neither email addresses nor URLs are allowed in strict mode.'); - } else { - // Skip first char - if ($k) { - $encoded = $punyCode->encode(array_slice($decoded, $last_begin, (($k) - $last_begin))); - if ($encoded) { - $output .= $encoded; - } else { - $output .= $this->UnicodeTranscoder->convert(array_slice($decoded, $last_begin, (($k) - $last_begin)), 'ucs4array', 'utf8'); - } - $output .= chr($decoded[$k]); - } - $last_begin = $k + 1; - } - } - } - // Catch the rest of the string - if ($last_begin) { - $inp_len = sizeof($decoded); - $encoded = $punyCode->encode(array_slice($decoded, $last_begin, (($inp_len) - $last_begin))); - if ($encoded) { - $output .= $encoded; - } else { - $output .= $this->UnicodeTranscoder->convert(array_slice($decoded, $last_begin, (($inp_len) - $last_begin)), 'ucs4array', 'utf8'); - } - return $output; - } else { - if (false !== ($output = $punyCode->encode($decoded))) { - return $output; - } else { - return $this->UnicodeTranscoder->convert($decoded, 'ucs4array', 'utf8'); - } - } - } - - /** - * Mitigates a weakness of encode(), which cannot properly handle URIs but instead encodes their - * path or query components, too. - * @param string $uri Expects the URI as a UTF-8 (or ASCII) string - * @return string The URI encoded to Punycode, everything but the host component is left alone - * @since 0.6.4 - */ - public function encodeUri($uri) - { - $parsed = parse_url($uri); - if (!isset($parsed['host'])) { - throw new \InvalidArgumentException('The given string does not look like a URI'); - } - $arr = explode('.', $parsed['host']); - foreach ($arr as $k => $v) { - $conv = $this->encode($v, 'utf8'); - if ($conv) { - $arr[$k] = $conv; - } - } - $parsed['host'] = join('.', $arr); - $return = (empty($parsed['scheme']) ? '' : $parsed['scheme'] . (strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')). - (empty($parsed['user']) ? '' : $parsed['user'] . (empty($parsed['pass']) ? '' : ':' . $parsed['pass']) . '@'). - $parsed['host']. - (empty($parsed['port']) ? '' : ':' . $parsed['port']). - (empty($parsed['path']) ? '' : $parsed['path']). - (empty($parsed['query']) ? '' : '?' . $parsed['query']). - (empty($parsed['fragment']) ? '' : '#' . $parsed['fragment']); - return $return; - } - - /** - * The actual punycode class is rather costly, as well as passing the huge nameprep database around. - * This factory method allows to ease the burden when dealing with multiple IDN versions. - * - * @return \Mso\IdnaConvert\Punycode - */ - protected function punycodeFactory() - { - static $instances = []; - - if (!isset($instances[$this->idnVersion])) { - $instances[$this->idnVersion] = new Punycode($this->NamePrepData, $this->UnicodeTranscoder); - } - return $instances[$this->idnVersion]; - } - -} diff --git a/libraries/vendor/mso/idna-convert/src/NamePrepData.php b/libraries/vendor/mso/idna-convert/src/NamePrepData.php deleted file mode 100644 index 2de76af8fca7c..0000000000000 --- a/libraries/vendor/mso/idna-convert/src/NamePrepData.php +++ /dev/null @@ -1,1921 +0,0 @@ - [0x61], 0x42 => [0x62], 0x43 => [0x63], - 0x44 => [0x64], 0x45 => [0x65], 0x46 => [0x66], - 0x47 => [0x67], 0x48 => [0x68], 0x49 => [0x69], - 0x4A => [0x6A], 0x4B => [0x6B], 0x4C => [0x6C], - 0x4D => [0x6D], 0x4E => [0x6E], 0x4F => [0x6F], - 0x50 => [0x70], 0x51 => [0x71], 0x52 => [0x72], - 0x53 => [0x73], 0x54 => [0x74], 0x55 => [0x75], - 0x56 => [0x76], 0x57 => [0x77], 0x58 => [0x78], - 0x59 => [0x79], 0x5A => [0x7A], 0xAA => [0x61], - 0xB2 => [0x32], 0xB3 => [0x33], 0xB5 => [0x3BC], - 0xB9 => [0x31], 0xBA => [0x6F], 0xBC => [0x31, 0x2044, 0x34], - 0xBD => [0x31, 0x2044, 0x32], 0xBE => [0x33, 0x2044, 0x34], 0xC0 => [0xE0], - 0xC1 => [0xE1], 0xC2 => [0xE2], 0xC3 => [0xE3], - 0xC4 => [0xE4], 0xC5 => [0xE5], 0xC6 => [0xE6], - 0xC7 => [0xE7], 0xC8 => [0xE8], 0xC9 => [0xE9], - 0xCA => [0xEA], 0xCB => [0xEB], 0xCC => [0xEC], - 0xCD => [0xED], 0xCE => [0xEE], 0xCF => [0xEF], - 0xD0 => [0xF0], 0xD1 => [0xF1], 0xD2 => [0xF2], - 0xD3 => [0xF3], 0xD4 => [0xF4], 0xD5 => [0xF5], - 0xD6 => [0xF6], 0xD8 => [0xF8], 0xD9 => [0xF9], - 0xDA => [0xFA], 0xDB => [0xFB], 0xDC => [0xFC], - 0xDD => [0xFD], 0xDE => [0xFE], 0x100 => [0x101], - 0x102 => [0x103], 0x104 => [0x105], 0x106 => [0x107], - 0x108 => [0x109], 0x10A => [0x10B], 0x10C => [0x10D], - 0x10E => [0x10F], 0x110 => [0x111], 0x112 => [0x113], - 0x114 => [0x115], 0x116 => [0x117], 0x118 => [0x119], - 0x11A => [0x11B], 0x11C => [0x11D], 0x11E => [0x11F], - 0x120 => [0x121], 0x122 => [0x123], 0x124 => [0x125], - 0x126 => [0x127], 0x128 => [0x129], 0x12A => [0x12B], - 0x12C => [0x12D], 0x12E => [0x12F], 0x130 => [0x69, 0x307], - 0x132 => [0x69, 0x6A], 0x133 => [0x69, 0x6A], 0x134 => [0x135], - 0x136 => [0x137], 0x139 => [0x13A], 0x13B => [0x13C], - 0x13D => [0x13E], 0x13F => [0x6C, 0xB7], 0x140 => [0x6C, 0xB7], - 0x141 => [0x142], 0x143 => [0x144], 0x145 => [0x146], - 0x147 => [0x148], 0x149 => [0x2BC, 0x6E], 0x14A => [0x14B], - 0x14C => [0x14D], 0x14E => [0x14F], 0x150 => [0x151], - 0x152 => [0x153], 0x154 => [0x155], 0x156 => [0x157], - 0x158 => [0x159], 0x15A => [0x15B], 0x15C => [0x15D], - 0x15E => [0x15F], 0x160 => [0x161], 0x162 => [0x163], - 0x164 => [0x165], 0x166 => [0x167], 0x168 => [0x169], - 0x16A => [0x16B], 0x16C => [0x16D], 0x16E => [0x16F], - 0x170 => [0x171], 0x172 => [0x173], 0x174 => [0x175], - 0x176 => [0x177], 0x178 => [0xFF], 0x179 => [0x17A], - 0x17B => [0x17C], 0x17D => [0x17E], 0x17F => [0x73], - 0x181 => [0x253], 0x182 => [0x183], 0x184 => [0x185], - 0x186 => [0x254], 0x187 => [0x188], 0x189 => [0x256], - 0x18A => [0x257], 0x18B => [0x18C], 0x18E => [0x1DD], - 0x18F => [0x259], 0x190 => [0x25B], 0x191 => [0x192], - 0x193 => [0x260], 0x194 => [0x263], 0x196 => [0x269], - 0x197 => [0x268], 0x198 => [0x199], 0x19C => [0x26F], - 0x19D => [0x272], 0x19F => [0x275], 0x1A0 => [0x1A1], - 0x1A2 => [0x1A3], 0x1A4 => [0x1A5], 0x1A6 => [0x280], - 0x1A7 => [0x1A8], 0x1A9 => [0x283], 0x1AC => [0x1AD], - 0x1AE => [0x288], 0x1AF => [0x1B0], 0x1B1 => [0x28A], - 0x1B2 => [0x28B], 0x1B3 => [0x1B4], 0x1B5 => [0x1B6], - 0x1B7 => [0x292], 0x1B8 => [0x1B9], 0x1BC => [0x1BD], - 0x1C4 => [0x64, 0x17E], 0x1C5 => [0x64, 0x17E], 0x1C6 => [0x64, 0x17E], - 0x1C7 => [0x6C, 0x6A], 0x1C8 => [0x6C, 0x6A], 0x1C9 => [0x6C, 0x6A], - 0x1CA => [0x6E, 0x6A], 0x1CB => [0x6E, 0x6A], 0x1CC => [0x6E, 0x6A], - 0x1CD => [0x1CE], 0x1CF => [0x1D0], 0x1D1 => [0x1D2], - 0x1D3 => [0x1D4], 0x1D5 => [0x1D6], 0x1D7 => [0x1D8], - 0x1D9 => [0x1DA], 0x1DB => [0x1DC], 0x1DE => [0x1DF], - 0x1E0 => [0x1E1], 0x1E2 => [0x1E3], 0x1E4 => [0x1E5], - 0x1E6 => [0x1E7], 0x1E8 => [0x1E9], 0x1EA => [0x1EB], - 0x1EC => [0x1ED], 0x1EE => [0x1EF], 0x1F1 => [0x64, 0x7A], - 0x1F2 => [0x64, 0x7A], 0x1F3 => [0x64, 0x7A], 0x1F4 => [0x1F5], - 0x1F6 => [0x195], 0x1F7 => [0x1BF], 0x1F8 => [0x1F9], - 0x1FA => [0x1FB], 0x1FC => [0x1FD], 0x1FE => [0x1FF], - 0x200 => [0x201], 0x202 => [0x203], 0x204 => [0x205], - 0x206 => [0x207], 0x208 => [0x209], 0x20A => [0x20B], - 0x20C => [0x20D], 0x20E => [0x20F], 0x210 => [0x211], - 0x212 => [0x213], 0x214 => [0x215], 0x216 => [0x217], - 0x218 => [0x219], 0x21A => [0x21B], 0x21C => [0x21D], - 0x21E => [0x21F], 0x220 => [0x19E], 0x222 => [0x223], - 0x224 => [0x225], 0x226 => [0x227], 0x228 => [0x229], - 0x22A => [0x22B], 0x22C => [0x22D], 0x22E => [0x22F], - 0x230 => [0x231], 0x232 => [0x233], 0x23A => [0x2C65], - 0x23B => [0x23C], 0x23D => [0x19A], 0x23E => [0x2C66], - 0x241 => [0x242], 0x243 => [0x180], 0x244 => [0x289], - 0x245 => [0x28C], 0x246 => [0x247], 0x248 => [0x249], - 0x24A => [0x24B], 0x24C => [0x24D], 0x24E => [0x24F], - 0x2B0 => [0x68], 0x2B1 => [0x266], 0x2B2 => [0x6A], - 0x2B3 => [0x72], 0x2B4 => [0x279], 0x2B5 => [0x27B], - 0x2B6 => [0x281], 0x2B7 => [0x77], 0x2B8 => [0x79], - 0x2E0 => [0x263], 0x2E1 => [0x6C], 0x2E2 => [0x73], - 0x2E3 => [0x78], 0x2E4 => [0x295], 0x340 => [0x300], - 0x341 => [0x301], 0x343 => [0x313], 0x344 => [0x308, 0x301], - 0x345 => [0x3B9], 0x370 => [0x371], 0x372 => [0x373], - 0x374 => [0x2B9], 0x376 => [0x377], 0x37F => [0x3F3], - 0x386 => [0x3AC], 0x387 => [0xB7], 0x388 => [0x3AD], - 0x389 => [0x3AE], 0x38A => [0x3AF], 0x38C => [0x3CC], - 0x38E => [0x3CD], 0x38F => [0x3CE], 0x391 => [0x3B1], - 0x392 => [0x3B2], 0x393 => [0x3B3], 0x394 => [0x3B4], - 0x395 => [0x3B5], 0x396 => [0x3B6], 0x397 => [0x3B7], - 0x398 => [0x3B8], 0x399 => [0x3B9], 0x39A => [0x3BA], - 0x39B => [0x3BB], 0x39C => [0x3BC], 0x39D => [0x3BD], - 0x39E => [0x3BE], 0x39F => [0x3BF], 0x3A0 => [0x3C0], - 0x3A1 => [0x3C1], 0x3A3 => [0x3C3], 0x3A4 => [0x3C4], - 0x3A5 => [0x3C5], 0x3A6 => [0x3C6], 0x3A7 => [0x3C7], - 0x3A8 => [0x3C8], 0x3A9 => [0x3C9], 0x3AA => [0x3CA], - 0x3AB => [0x3CB], 0x3CF => [0x3D7], 0x3D0 => [0x3B2], - 0x3D1 => [0x3B8], 0x3D2 => [0x3C5], 0x3D3 => [0x3CD], - 0x3D4 => [0x3CB], 0x3D5 => [0x3C6], 0x3D6 => [0x3C0], - 0x3D8 => [0x3D9], 0x3DA => [0x3DB], 0x3DC => [0x3DD], - 0x3DE => [0x3DF], 0x3E0 => [0x3E1], 0x3E2 => [0x3E3], - 0x3E4 => [0x3E5], 0x3E6 => [0x3E7], 0x3E8 => [0x3E9], - 0x3EA => [0x3EB], 0x3EC => [0x3ED], 0x3EE => [0x3EF], - 0x3F0 => [0x3BA], 0x3F1 => [0x3C1], 0x3F2 => [0x3C3], - 0x3F4 => [0x3B8], 0x3F5 => [0x3B5], 0x3F7 => [0x3F8], - 0x3F9 => [0x3C3], 0x3FA => [0x3FB], 0x3FD => [0x37B], - 0x3FE => [0x37C], 0x3FF => [0x37D], 0x400 => [0x450], - 0x401 => [0x451], 0x402 => [0x452], 0x403 => [0x453], - 0x404 => [0x454], 0x405 => [0x455], 0x406 => [0x456], - 0x407 => [0x457], 0x408 => [0x458], 0x409 => [0x459], - 0x40A => [0x45A], 0x40B => [0x45B], 0x40C => [0x45C], - 0x40D => [0x45D], 0x40E => [0x45E], 0x40F => [0x45F], - 0x410 => [0x430], 0x411 => [0x431], 0x412 => [0x432], - 0x413 => [0x433], 0x414 => [0x434], 0x415 => [0x435], - 0x416 => [0x436], 0x417 => [0x437], 0x418 => [0x438], - 0x419 => [0x439], 0x41A => [0x43A], 0x41B => [0x43B], - 0x41C => [0x43C], 0x41D => [0x43D], 0x41E => [0x43E], - 0x41F => [0x43F], 0x420 => [0x440], 0x421 => [0x441], - 0x422 => [0x442], 0x423 => [0x443], 0x424 => [0x444], - 0x425 => [0x445], 0x426 => [0x446], 0x427 => [0x447], - 0x428 => [0x448], 0x429 => [0x449], 0x42A => [0x44A], - 0x42B => [0x44B], 0x42C => [0x44C], 0x42D => [0x44D], - 0x42E => [0x44E], 0x42F => [0x44F], 0x460 => [0x461], - 0x462 => [0x463], 0x464 => [0x465], 0x466 => [0x467], - 0x468 => [0x469], 0x46A => [0x46B], 0x46C => [0x46D], - 0x46E => [0x46F], 0x470 => [0x471], 0x472 => [0x473], - 0x474 => [0x475], 0x476 => [0x477], 0x478 => [0x479], - 0x47A => [0x47B], 0x47C => [0x47D], 0x47E => [0x47F], - 0x480 => [0x481], 0x48A => [0x48B], 0x48C => [0x48D], - 0x48E => [0x48F], 0x490 => [0x491], 0x492 => [0x493], - 0x494 => [0x495], 0x496 => [0x497], 0x498 => [0x499], - 0x49A => [0x49B], 0x49C => [0x49D], 0x49E => [0x49F], - 0x4A0 => [0x4A1], 0x4A2 => [0x4A3], 0x4A4 => [0x4A5], - 0x4A6 => [0x4A7], 0x4A8 => [0x4A9], 0x4AA => [0x4AB], - 0x4AC => [0x4AD], 0x4AE => [0x4AF], 0x4B0 => [0x4B1], - 0x4B2 => [0x4B3], 0x4B4 => [0x4B5], 0x4B6 => [0x4B7], - 0x4B8 => [0x4B9], 0x4BA => [0x4BB], 0x4BC => [0x4BD], - 0x4BE => [0x4BF], 0x4C1 => [0x4C2], 0x4C3 => [0x4C4], - 0x4C5 => [0x4C6], 0x4C7 => [0x4C8], 0x4C9 => [0x4CA], - 0x4CB => [0x4CC], 0x4CD => [0x4CE], 0x4D0 => [0x4D1], - 0x4D2 => [0x4D3], 0x4D4 => [0x4D5], 0x4D6 => [0x4D7], - 0x4D8 => [0x4D9], 0x4DA => [0x4DB], 0x4DC => [0x4DD], - 0x4DE => [0x4DF], 0x4E0 => [0x4E1], 0x4E2 => [0x4E3], - 0x4E4 => [0x4E5], 0x4E6 => [0x4E7], 0x4E8 => [0x4E9], - 0x4EA => [0x4EB], 0x4EC => [0x4ED], 0x4EE => [0x4EF], - 0x4F0 => [0x4F1], 0x4F2 => [0x4F3], 0x4F4 => [0x4F5], - 0x4F6 => [0x4F7], 0x4F8 => [0x4F9], 0x4FA => [0x4FB], - 0x4FC => [0x4FD], 0x4FE => [0x4FF], 0x500 => [0x501], - 0x502 => [0x503], 0x504 => [0x505], 0x506 => [0x507], - 0x508 => [0x509], 0x50A => [0x50B], 0x50C => [0x50D], - 0x50E => [0x50F], 0x510 => [0x511], 0x512 => [0x513], - 0x514 => [0x515], 0x516 => [0x517], 0x518 => [0x519], - 0x51A => [0x51B], 0x51C => [0x51D], 0x51E => [0x51F], - 0x520 => [0x521], 0x522 => [0x523], 0x524 => [0x525], - 0x526 => [0x527], 0x528 => [0x529], 0x52A => [0x52B], - 0x52C => [0x52D], 0x52E => [0x52F], 0x531 => [0x561], - 0x532 => [0x562], 0x533 => [0x563], 0x534 => [0x564], - 0x535 => [0x565], 0x536 => [0x566], 0x537 => [0x567], - 0x538 => [0x568], 0x539 => [0x569], 0x53A => [0x56A], - 0x53B => [0x56B], 0x53C => [0x56C], 0x53D => [0x56D], - 0x53E => [0x56E], 0x53F => [0x56F], 0x540 => [0x570], - 0x541 => [0x571], 0x542 => [0x572], 0x543 => [0x573], - 0x544 => [0x574], 0x545 => [0x575], 0x546 => [0x576], - 0x547 => [0x577], 0x548 => [0x578], 0x549 => [0x579], - 0x54A => [0x57A], 0x54B => [0x57B], 0x54C => [0x57C], - 0x54D => [0x57D], 0x54E => [0x57E], 0x54F => [0x57F], - 0x550 => [0x580], 0x551 => [0x581], 0x552 => [0x582], - 0x553 => [0x583], 0x554 => [0x584], 0x555 => [0x585], - 0x556 => [0x586], 0x587 => [0x565, 0x582], 0x675 => [0x627, 0x674], - 0x676 => [0x648, 0x674], 0x677 => [0x6C7, 0x674], 0x678 => [0x64A, 0x674], - 0x958 => [0x915, 0x93C], 0x959 => [0x916, 0x93C], 0x95A => [0x917, 0x93C], - 0x95B => [0x91C, 0x93C], 0x95C => [0x921, 0x93C], 0x95D => [0x922, 0x93C], - 0x95E => [0x92B, 0x93C], 0x95F => [0x92F, 0x93C], 0x9DC => [0x9A1, 0x9BC], - 0x9DD => [0x9A2, 0x9BC], 0x9DF => [0x9AF, 0x9BC], 0xA33 => [0xA32, 0xA3C], - 0xA36 => [0xA38, 0xA3C], 0xA59 => [0xA16, 0xA3C], 0xA5A => [0xA17, 0xA3C], - 0xA5B => [0xA1C, 0xA3C], 0xA5E => [0xA2B, 0xA3C], 0xB5C => [0xB21, 0xB3C], - 0xB5D => [0xB22, 0xB3C], 0xE33 => [0xE4D, 0xE32], 0xEB3 => [0xECD, 0xEB2], - 0xEDC => [0xEAB, 0xE99], 0xEDD => [0xEAB, 0xEA1], 0xF0C => [0xF0B], - 0xF43 => [0xF42, 0xFB7], 0xF4D => [0xF4C, 0xFB7], 0xF52 => [0xF51, 0xFB7], - 0xF57 => [0xF56, 0xFB7], 0xF5C => [0xF5B, 0xFB7], 0xF69 => [0xF40, 0xFB5], - 0xF73 => [0xF71, 0xF72], 0xF75 => [0xF71, 0xF74], 0xF76 => [0xFB2, 0xF80], - 0xF77 => [0xFB2, 0xF71, 0xF80], 0xF78 => [0xFB3, 0xF80], 0xF79 => [0xFB3, 0xF71, 0xF80], - 0xF81 => [0xF71, 0xF80], 0xF93 => [0xF92, 0xFB7], 0xF9D => [0xF9C, 0xFB7], - 0xFA2 => [0xFA1, 0xFB7], 0xFA7 => [0xFA6, 0xFB7], 0xFAC => [0xFAB, 0xFB7], - 0xFB9 => [0xF90, 0xFB5], 0x10C7 => [0x2D27], 0x10CD => [0x2D2D], - 0x10FC => [0x10DC], 0x1D2C => [0x61], 0x1D2D => [0xE6], - 0x1D2E => [0x62], 0x1D30 => [0x64], 0x1D31 => [0x65], - 0x1D32 => [0x1DD], 0x1D33 => [0x67], 0x1D34 => [0x68], - 0x1D35 => [0x69], 0x1D36 => [0x6A], 0x1D37 => [0x6B], - 0x1D38 => [0x6C], 0x1D39 => [0x6D], 0x1D3A => [0x6E], - 0x1D3C => [0x6F], 0x1D3D => [0x223], 0x1D3E => [0x70], - 0x1D3F => [0x72], 0x1D40 => [0x74], 0x1D41 => [0x75], - 0x1D42 => [0x77], 0x1D43 => [0x61], 0x1D44 => [0x250], - 0x1D45 => [0x251], 0x1D46 => [0x1D02], 0x1D47 => [0x62], - 0x1D48 => [0x64], 0x1D49 => [0x65], 0x1D4A => [0x259], - 0x1D4B => [0x25B], 0x1D4C => [0x25C], 0x1D4D => [0x67], - 0x1D4F => [0x6B], 0x1D50 => [0x6D], 0x1D51 => [0x14B], - 0x1D52 => [0x6F], 0x1D53 => [0x254], 0x1D54 => [0x1D16], - 0x1D55 => [0x1D17], 0x1D56 => [0x70], 0x1D57 => [0x74], - 0x1D58 => [0x75], 0x1D59 => [0x1D1D], 0x1D5A => [0x26F], - 0x1D5B => [0x76], 0x1D5C => [0x1D25], 0x1D5D => [0x3B2], - 0x1D5E => [0x3B3], 0x1D5F => [0x3B4], 0x1D60 => [0x3C6], - 0x1D61 => [0x3C7], 0x1D62 => [0x69], 0x1D63 => [0x72], - 0x1D64 => [0x75], 0x1D65 => [0x76], 0x1D66 => [0x3B2], - 0x1D67 => [0x3B3], 0x1D68 => [0x3C1], 0x1D69 => [0x3C6], - 0x1D6A => [0x3C7], 0x1D78 => [0x43D], 0x1D9B => [0x252], - 0x1D9C => [0x63], 0x1D9D => [0x255], 0x1D9E => [0xF0], - 0x1D9F => [0x25C], 0x1DA0 => [0x66], 0x1DA1 => [0x25F], - 0x1DA2 => [0x261], 0x1DA3 => [0x265], 0x1DA4 => [0x268], - 0x1DA5 => [0x269], 0x1DA6 => [0x26A], 0x1DA7 => [0x1D7B], - 0x1DA8 => [0x29D], 0x1DA9 => [0x26D], 0x1DAA => [0x1D85], - 0x1DAB => [0x29F], 0x1DAC => [0x271], 0x1DAD => [0x270], - 0x1DAE => [0x272], 0x1DAF => [0x273], 0x1DB0 => [0x274], - 0x1DB1 => [0x275], 0x1DB2 => [0x278], 0x1DB3 => [0x282], - 0x1DB4 => [0x283], 0x1DB5 => [0x1AB], 0x1DB6 => [0x289], - 0x1DB7 => [0x28A], 0x1DB8 => [0x1D1C], 0x1DB9 => [0x28B], - 0x1DBA => [0x28C], 0x1DBB => [0x7A], 0x1DBC => [0x290], - 0x1DBD => [0x291], 0x1DBE => [0x292], 0x1DBF => [0x3B8], - 0x1E00 => [0x1E01], 0x1E02 => [0x1E03], 0x1E04 => [0x1E05], - 0x1E06 => [0x1E07], 0x1E08 => [0x1E09], 0x1E0A => [0x1E0B], - 0x1E0C => [0x1E0D], 0x1E0E => [0x1E0F], 0x1E10 => [0x1E11], - 0x1E12 => [0x1E13], 0x1E14 => [0x1E15], 0x1E16 => [0x1E17], - 0x1E18 => [0x1E19], 0x1E1A => [0x1E1B], 0x1E1C => [0x1E1D], - 0x1E1E => [0x1E1F], 0x1E20 => [0x1E21], 0x1E22 => [0x1E23], - 0x1E24 => [0x1E25], 0x1E26 => [0x1E27], 0x1E28 => [0x1E29], - 0x1E2A => [0x1E2B], 0x1E2C => [0x1E2D], 0x1E2E => [0x1E2F], - 0x1E30 => [0x1E31], 0x1E32 => [0x1E33], 0x1E34 => [0x1E35], - 0x1E36 => [0x1E37], 0x1E38 => [0x1E39], 0x1E3A => [0x1E3B], - 0x1E3C => [0x1E3D], 0x1E3E => [0x1E3F], 0x1E40 => [0x1E41], - 0x1E42 => [0x1E43], 0x1E44 => [0x1E45], 0x1E46 => [0x1E47], - 0x1E48 => [0x1E49], 0x1E4A => [0x1E4B], 0x1E4C => [0x1E4D], - 0x1E4E => [0x1E4F], 0x1E50 => [0x1E51], 0x1E52 => [0x1E53], - 0x1E54 => [0x1E55], 0x1E56 => [0x1E57], 0x1E58 => [0x1E59], - 0x1E5A => [0x1E5B], 0x1E5C => [0x1E5D], 0x1E5E => [0x1E5F], - 0x1E60 => [0x1E61], 0x1E62 => [0x1E63], 0x1E64 => [0x1E65], - 0x1E66 => [0x1E67], 0x1E68 => [0x1E69], 0x1E6A => [0x1E6B], - 0x1E6C => [0x1E6D], 0x1E6E => [0x1E6F], 0x1E70 => [0x1E71], - 0x1E72 => [0x1E73], 0x1E74 => [0x1E75], 0x1E76 => [0x1E77], - 0x1E78 => [0x1E79], 0x1E7A => [0x1E7B], 0x1E7C => [0x1E7D], - 0x1E7E => [0x1E7F], 0x1E80 => [0x1E81], 0x1E82 => [0x1E83], - 0x1E84 => [0x1E85], 0x1E86 => [0x1E87], 0x1E88 => [0x1E89], - 0x1E8A => [0x1E8B], 0x1E8C => [0x1E8D], 0x1E8E => [0x1E8F], - 0x1E90 => [0x1E91], 0x1E92 => [0x1E93], 0x1E94 => [0x1E95], - 0x1E9A => [0x61, 0x2BE], 0x1E9B => [0x1E61], 0x1E9E => [0x73, 0x73], - 0x1EA0 => [0x1EA1], 0x1EA2 => [0x1EA3], 0x1EA4 => [0x1EA5], - 0x1EA6 => [0x1EA7], 0x1EA8 => [0x1EA9], 0x1EAA => [0x1EAB], - 0x1EAC => [0x1EAD], 0x1EAE => [0x1EAF], 0x1EB0 => [0x1EB1], - 0x1EB2 => [0x1EB3], 0x1EB4 => [0x1EB5], 0x1EB6 => [0x1EB7], - 0x1EB8 => [0x1EB9], 0x1EBA => [0x1EBB], 0x1EBC => [0x1EBD], - 0x1EBE => [0x1EBF], 0x1EC0 => [0x1EC1], 0x1EC2 => [0x1EC3], - 0x1EC4 => [0x1EC5], 0x1EC6 => [0x1EC7], 0x1EC8 => [0x1EC9], - 0x1ECA => [0x1ECB], 0x1ECC => [0x1ECD], 0x1ECE => [0x1ECF], - 0x1ED0 => [0x1ED1], 0x1ED2 => [0x1ED3], 0x1ED4 => [0x1ED5], - 0x1ED6 => [0x1ED7], 0x1ED8 => [0x1ED9], 0x1EDA => [0x1EDB], - 0x1EDC => [0x1EDD], 0x1EDE => [0x1EDF], 0x1EE0 => [0x1EE1], - 0x1EE2 => [0x1EE3], 0x1EE4 => [0x1EE5], 0x1EE6 => [0x1EE7], - 0x1EE8 => [0x1EE9], 0x1EEA => [0x1EEB], 0x1EEC => [0x1EED], - 0x1EEE => [0x1EEF], 0x1EF0 => [0x1EF1], 0x1EF2 => [0x1EF3], - 0x1EF4 => [0x1EF5], 0x1EF6 => [0x1EF7], 0x1EF8 => [0x1EF9], - 0x1EFA => [0x1EFB], 0x1EFC => [0x1EFD], 0x1EFE => [0x1EFF], - 0x1F08 => [0x1F00], 0x1F09 => [0x1F01], 0x1F0A => [0x1F02], - 0x1F0B => [0x1F03], 0x1F0C => [0x1F04], 0x1F0D => [0x1F05], - 0x1F0E => [0x1F06], 0x1F0F => [0x1F07], 0x1F18 => [0x1F10], - 0x1F19 => [0x1F11], 0x1F1A => [0x1F12], 0x1F1B => [0x1F13], - 0x1F1C => [0x1F14], 0x1F1D => [0x1F15], 0x1F28 => [0x1F20], - 0x1F29 => [0x1F21], 0x1F2A => [0x1F22], 0x1F2B => [0x1F23], - 0x1F2C => [0x1F24], 0x1F2D => [0x1F25], 0x1F2E => [0x1F26], - 0x1F2F => [0x1F27], 0x1F38 => [0x1F30], 0x1F39 => [0x1F31], - 0x1F3A => [0x1F32], 0x1F3B => [0x1F33], 0x1F3C => [0x1F34], - 0x1F3D => [0x1F35], 0x1F3E => [0x1F36], 0x1F3F => [0x1F37], - 0x1F48 => [0x1F40], 0x1F49 => [0x1F41], 0x1F4A => [0x1F42], - 0x1F4B => [0x1F43], 0x1F4C => [0x1F44], 0x1F4D => [0x1F45], - 0x1F59 => [0x1F51], 0x1F5B => [0x1F53], 0x1F5D => [0x1F55], - 0x1F5F => [0x1F57], 0x1F68 => [0x1F60], 0x1F69 => [0x1F61], - 0x1F6A => [0x1F62], 0x1F6B => [0x1F63], 0x1F6C => [0x1F64], - 0x1F6D => [0x1F65], 0x1F6E => [0x1F66], 0x1F6F => [0x1F67], - 0x1F71 => [0x3AC], 0x1F73 => [0x3AD], 0x1F75 => [0x3AE], - 0x1F77 => [0x3AF], 0x1F79 => [0x3CC], 0x1F7B => [0x3CD], - 0x1F7D => [0x3CE], 0x1F80 => [0x1F00, 0x3B9], 0x1F81 => [0x1F01, 0x3B9], - 0x1F82 => [0x1F02, 0x3B9], 0x1F83 => [0x1F03, 0x3B9], 0x1F84 => [0x1F04, 0x3B9], - 0x1F85 => [0x1F05, 0x3B9], 0x1F86 => [0x1F06, 0x3B9], 0x1F87 => [0x1F07, 0x3B9], - 0x1F88 => [0x1F00, 0x3B9], 0x1F89 => [0x1F01, 0x3B9], 0x1F8A => [0x1F02, 0x3B9], - 0x1F8B => [0x1F03, 0x3B9], 0x1F8C => [0x1F04, 0x3B9], 0x1F8D => [0x1F05, 0x3B9], - 0x1F8E => [0x1F06, 0x3B9], 0x1F8F => [0x1F07, 0x3B9], 0x1F90 => [0x1F20, 0x3B9], - 0x1F91 => [0x1F21, 0x3B9], 0x1F92 => [0x1F22, 0x3B9], 0x1F93 => [0x1F23, 0x3B9], - 0x1F94 => [0x1F24, 0x3B9], 0x1F95 => [0x1F25, 0x3B9], 0x1F96 => [0x1F26, 0x3B9], - 0x1F97 => [0x1F27, 0x3B9], 0x1F98 => [0x1F20, 0x3B9], 0x1F99 => [0x1F21, 0x3B9], - 0x1F9A => [0x1F22, 0x3B9], 0x1F9B => [0x1F23, 0x3B9], 0x1F9C => [0x1F24, 0x3B9], - 0x1F9D => [0x1F25, 0x3B9], 0x1F9E => [0x1F26, 0x3B9], 0x1F9F => [0x1F27, 0x3B9], - 0x1FA0 => [0x1F60, 0x3B9], 0x1FA1 => [0x1F61, 0x3B9], 0x1FA2 => [0x1F62, 0x3B9], - 0x1FA3 => [0x1F63, 0x3B9], 0x1FA4 => [0x1F64, 0x3B9], 0x1FA5 => [0x1F65, 0x3B9], - 0x1FA6 => [0x1F66, 0x3B9], 0x1FA7 => [0x1F67, 0x3B9], 0x1FA8 => [0x1F60, 0x3B9], - 0x1FA9 => [0x1F61, 0x3B9], 0x1FAA => [0x1F62, 0x3B9], 0x1FAB => [0x1F63, 0x3B9], - 0x1FAC => [0x1F64, 0x3B9], 0x1FAD => [0x1F65, 0x3B9], 0x1FAE => [0x1F66, 0x3B9], - 0x1FAF => [0x1F67, 0x3B9], 0x1FB2 => [0x1F70, 0x3B9], 0x1FB3 => [0x3B1, 0x3B9], - 0x1FB4 => [0x3AC, 0x3B9], 0x1FB7 => [0x1FB6, 0x3B9], 0x1FB8 => [0x1FB0], - 0x1FB9 => [0x1FB1], 0x1FBA => [0x1F70], 0x1FBB => [0x3AC], - 0x1FBC => [0x3B1, 0x3B9], 0x1FBE => [0x3B9], 0x1FC2 => [0x1F74, 0x3B9], - 0x1FC3 => [0x3B7, 0x3B9], 0x1FC4 => [0x3AE, 0x3B9], 0x1FC7 => [0x1FC6, 0x3B9], - 0x1FC8 => [0x1F72], 0x1FC9 => [0x3AD], 0x1FCA => [0x1F74], - 0x1FCB => [0x3AE], 0x1FCC => [0x3B7, 0x3B9], 0x1FD3 => [0x390], - 0x1FD8 => [0x1FD0], 0x1FD9 => [0x1FD1], 0x1FDA => [0x1F76], - 0x1FDB => [0x3AF], 0x1FE3 => [0x3B0], 0x1FE8 => [0x1FE0], - 0x1FE9 => [0x1FE1], 0x1FEA => [0x1F7A], 0x1FEB => [0x3CD], - 0x1FEC => [0x1FE5], 0x1FF2 => [0x1F7C, 0x3B9], 0x1FF3 => [0x3C9, 0x3B9], - 0x1FF4 => [0x3CE, 0x3B9], 0x1FF7 => [0x1FF6, 0x3B9], 0x1FF8 => [0x1F78], - 0x1FF9 => [0x3CC], 0x1FFA => [0x1F7C], 0x1FFB => [0x3CE], - 0x1FFC => [0x3C9, 0x3B9], 0x2011 => [0x2010], 0x2033 => [0x2032, 0x2032], - 0x2034 => [0x2032, 0x2032, 0x2032], 0x2036 => [0x2035, 0x2035], 0x2037 => [0x2035, 0x2035, 0x2035], - 0x2057 => [0x2032, 0x2032, 0x2032, 0x2032], 0x2070 => [0x30], 0x2071 => [0x69], - 0x2074 => [0x34], 0x2075 => [0x35], 0x2076 => [0x36], - 0x2077 => [0x37], 0x2078 => [0x38], 0x2079 => [0x39], - 0x207B => [0x2212], 0x207F => [0x6E], 0x2080 => [0x30], - 0x2081 => [0x31], 0x2082 => [0x32], 0x2083 => [0x33], - 0x2084 => [0x34], 0x2085 => [0x35], 0x2086 => [0x36], - 0x2087 => [0x37], 0x2088 => [0x38], 0x2089 => [0x39], - 0x208B => [0x2212], 0x2090 => [0x61], 0x2091 => [0x65], - 0x2092 => [0x6F], 0x2093 => [0x78], 0x2094 => [0x259], - 0x2095 => [0x68], 0x2096 => [0x6B], 0x2097 => [0x6C], - 0x2098 => [0x6D], 0x2099 => [0x6E], 0x209A => [0x70], - 0x209B => [0x73], 0x209C => [0x74], 0x20A8 => [0x72, 0x73], - 0x2102 => [0x63], 0x2103 => [0xB0, 0x63], 0x2107 => [0x25B], - 0x2109 => [0xB0, 0x66], 0x210A => [0x67], 0x210B => [0x68], - 0x210C => [0x68], 0x210D => [0x68], 0x210E => [0x68], - 0x210F => [0x127], 0x2110 => [0x69], 0x2111 => [0x69], - 0x2112 => [0x6C], 0x2113 => [0x6C], 0x2115 => [0x6E], - 0x2116 => [0x6E, 0x6F], 0x2119 => [0x70], 0x211A => [0x71], - 0x211B => [0x72], 0x211C => [0x72], 0x211D => [0x72], - 0x2120 => [0x73, 0x6D], 0x2121 => [0x74, 0x65, 0x6C], 0x2122 => [0x74, 0x6D], - 0x2124 => [0x7A], 0x2126 => [0x3C9], 0x2128 => [0x7A], - 0x212A => [0x6B], 0x212B => [0xE5], 0x212C => [0x62], - 0x212D => [0x63], 0x212F => [0x65], 0x2130 => [0x65], - 0x2131 => [0x66], 0x2133 => [0x6D], 0x2134 => [0x6F], - 0x2135 => [0x5D0], 0x2136 => [0x5D1], 0x2137 => [0x5D2], - 0x2138 => [0x5D3], 0x2139 => [0x69], 0x213B => [0x66, 0x61, 0x78], - 0x213C => [0x3C0], 0x213D => [0x3B3], 0x213E => [0x3B3], - 0x213F => [0x3C0], 0x2140 => [0x2211], 0x2145 => [0x64], - 0x2146 => [0x64], 0x2147 => [0x65], 0x2148 => [0x69], - 0x2149 => [0x6A], 0x2150 => [0x31, 0x2044, 0x37], 0x2151 => [0x31, 0x2044, 0x39], - 0x2152 => [0x31, 0x2044, 0x31, 0x30], 0x2153 => [0x31, 0x2044, 0x33], 0x2154 => [0x32, 0x2044, 0x33], - 0x2155 => [0x31, 0x2044, 0x35], 0x2156 => [0x32, 0x2044, 0x35], 0x2157 => [0x33, 0x2044, 0x35], - 0x2158 => [0x34, 0x2044, 0x35], 0x2159 => [0x31, 0x2044, 0x36], 0x215A => [0x35, 0x2044, 0x36], - 0x215B => [0x31, 0x2044, 0x38], 0x215C => [0x33, 0x2044, 0x38], 0x215D => [0x35, 0x2044, 0x38], - 0x215E => [0x37, 0x2044, 0x38], 0x215F => [0x31, 0x2044], 0x2160 => [0x69], - 0x2161 => [0x69, 0x69], 0x2162 => [0x69, 0x69, 0x69], 0x2163 => [0x69, 0x76], - 0x2164 => [0x76], 0x2165 => [0x76, 0x69], 0x2166 => [0x76, 0x69, 0x69], - 0x2167 => [0x76, 0x69, 0x69, 0x69], 0x2168 => [0x69, 0x78], 0x2169 => [0x78], - 0x216A => [0x78, 0x69], 0x216B => [0x78, 0x69, 0x69], 0x216C => [0x6C], - 0x216D => [0x63], 0x216E => [0x64], 0x216F => [0x6D], - 0x2170 => [0x69], 0x2171 => [0x69, 0x69], 0x2172 => [0x69, 0x69, 0x69], - 0x2173 => [0x69, 0x76], 0x2174 => [0x76], 0x2175 => [0x76, 0x69], - 0x2176 => [0x76, 0x69, 0x69], 0x2177 => [0x76, 0x69, 0x69, 0x69], 0x2178 => [0x69, 0x78], - 0x2179 => [0x78], 0x217A => [0x78, 0x69], 0x217B => [0x78, 0x69, 0x69], - 0x217C => [0x6C], 0x217D => [0x63], 0x217E => [0x64], - 0x217F => [0x6D], 0x2189 => [0x30, 0x2044, 0x33], 0x222C => [0x222B, 0x222B], - 0x222D => [0x222B, 0x222B, 0x222B], 0x222F => [0x222E, 0x222E], 0x2230 => [0x222E, 0x222E, 0x222E], - 0x2329 => [0x3008], 0x232A => [0x3009], 0x2460 => [0x31], - 0x2461 => [0x32], 0x2462 => [0x33], 0x2463 => [0x34], - 0x2464 => [0x35], 0x2465 => [0x36], 0x2466 => [0x37], - 0x2467 => [0x38], 0x2468 => [0x39], 0x2469 => [0x31, 0x30], - 0x246A => [0x31, 0x31], 0x246B => [0x31, 0x32], 0x246C => [0x31, 0x33], - 0x246D => [0x31, 0x34], 0x246E => [0x31, 0x35], 0x246F => [0x31, 0x36], - 0x2470 => [0x31, 0x37], 0x2471 => [0x31, 0x38], 0x2472 => [0x31, 0x39], - 0x2473 => [0x32, 0x30], 0x24B6 => [0x61], 0x24B7 => [0x62], - 0x24B8 => [0x63], 0x24B9 => [0x64], 0x24BA => [0x65], - 0x24BB => [0x66], 0x24BC => [0x67], 0x24BD => [0x68], - 0x24BE => [0x69], 0x24BF => [0x6A], 0x24C0 => [0x6B], - 0x24C1 => [0x6C], 0x24C2 => [0x6D], 0x24C3 => [0x6E], - 0x24C4 => [0x6F], 0x24C5 => [0x70], 0x24C6 => [0x71], - 0x24C7 => [0x72], 0x24C8 => [0x73], 0x24C9 => [0x74], - 0x24CA => [0x75], 0x24CB => [0x76], 0x24CC => [0x77], - 0x24CD => [0x78], 0x24CE => [0x79], 0x24CF => [0x7A], - 0x24D0 => [0x61], 0x24D1 => [0x62], 0x24D2 => [0x63], - 0x24D3 => [0x64], 0x24D4 => [0x65], 0x24D5 => [0x66], - 0x24D6 => [0x67], 0x24D7 => [0x68], 0x24D8 => [0x69], - 0x24D9 => [0x6A], 0x24DA => [0x6B], 0x24DB => [0x6C], - 0x24DC => [0x6D], 0x24DD => [0x6E], 0x24DE => [0x6F], - 0x24DF => [0x70], 0x24E0 => [0x71], 0x24E1 => [0x72], - 0x24E2 => [0x73], 0x24E3 => [0x74], 0x24E4 => [0x75], - 0x24E5 => [0x76], 0x24E6 => [0x77], 0x24E7 => [0x78], - 0x24E8 => [0x79], 0x24E9 => [0x7A], 0x24EA => [0x30], - 0x2A0C => [0x222B, 0x222B, 0x222B, 0x222B], 0x2ADC => [0x2ADD, 0x338], 0x2C00 => [0x2C30], - 0x2C01 => [0x2C31], 0x2C02 => [0x2C32], 0x2C03 => [0x2C33], - 0x2C04 => [0x2C34], 0x2C05 => [0x2C35], 0x2C06 => [0x2C36], - 0x2C07 => [0x2C37], 0x2C08 => [0x2C38], 0x2C09 => [0x2C39], - 0x2C0A => [0x2C3A], 0x2C0B => [0x2C3B], 0x2C0C => [0x2C3C], - 0x2C0D => [0x2C3D], 0x2C0E => [0x2C3E], 0x2C0F => [0x2C3F], - 0x2C10 => [0x2C40], 0x2C11 => [0x2C41], 0x2C12 => [0x2C42], - 0x2C13 => [0x2C43], 0x2C14 => [0x2C44], 0x2C15 => [0x2C45], - 0x2C16 => [0x2C46], 0x2C17 => [0x2C47], 0x2C18 => [0x2C48], - 0x2C19 => [0x2C49], 0x2C1A => [0x2C4A], 0x2C1B => [0x2C4B], - 0x2C1C => [0x2C4C], 0x2C1D => [0x2C4D], 0x2C1E => [0x2C4E], - 0x2C1F => [0x2C4F], 0x2C20 => [0x2C50], 0x2C21 => [0x2C51], - 0x2C22 => [0x2C52], 0x2C23 => [0x2C53], 0x2C24 => [0x2C54], - 0x2C25 => [0x2C55], 0x2C26 => [0x2C56], 0x2C27 => [0x2C57], - 0x2C28 => [0x2C58], 0x2C29 => [0x2C59], 0x2C2A => [0x2C5A], - 0x2C2B => [0x2C5B], 0x2C2C => [0x2C5C], 0x2C2D => [0x2C5D], - 0x2C2E => [0x2C5E], 0x2C60 => [0x2C61], 0x2C62 => [0x26B], - 0x2C63 => [0x1D7D], 0x2C64 => [0x27D], 0x2C67 => [0x2C68], - 0x2C69 => [0x2C6A], 0x2C6B => [0x2C6C], 0x2C6D => [0x251], - 0x2C6E => [0x271], 0x2C6F => [0x250], 0x2C70 => [0x252], - 0x2C72 => [0x2C73], 0x2C75 => [0x2C76], 0x2C7C => [0x6A], - 0x2C7D => [0x76], 0x2C7E => [0x23F], 0x2C7F => [0x240], - 0x2C80 => [0x2C81], 0x2C82 => [0x2C83], 0x2C84 => [0x2C85], - 0x2C86 => [0x2C87], 0x2C88 => [0x2C89], 0x2C8A => [0x2C8B], - 0x2C8C => [0x2C8D], 0x2C8E => [0x2C8F], 0x2C90 => [0x2C91], - 0x2C92 => [0x2C93], 0x2C94 => [0x2C95], 0x2C96 => [0x2C97], - 0x2C98 => [0x2C99], 0x2C9A => [0x2C9B], 0x2C9C => [0x2C9D], - 0x2C9E => [0x2C9F], 0x2CA0 => [0x2CA1], 0x2CA2 => [0x2CA3], - 0x2CA4 => [0x2CA5], 0x2CA6 => [0x2CA7], 0x2CA8 => [0x2CA9], - 0x2CAA => [0x2CAB], 0x2CAC => [0x2CAD], 0x2CAE => [0x2CAF], - 0x2CB0 => [0x2CB1], 0x2CB2 => [0x2CB3], 0x2CB4 => [0x2CB5], - 0x2CB6 => [0x2CB7], 0x2CB8 => [0x2CB9], 0x2CBA => [0x2CBB], - 0x2CBC => [0x2CBD], 0x2CBE => [0x2CBF], 0x2CC0 => [0x2CC1], - 0x2CC2 => [0x2CC3], 0x2CC4 => [0x2CC5], 0x2CC6 => [0x2CC7], - 0x2CC8 => [0x2CC9], 0x2CCA => [0x2CCB], 0x2CCC => [0x2CCD], - 0x2CCE => [0x2CCF], 0x2CD0 => [0x2CD1], 0x2CD2 => [0x2CD3], - 0x2CD4 => [0x2CD5], 0x2CD6 => [0x2CD7], 0x2CD8 => [0x2CD9], - 0x2CDA => [0x2CDB], 0x2CDC => [0x2CDD], 0x2CDE => [0x2CDF], - 0x2CE0 => [0x2CE1], 0x2CE2 => [0x2CE3], 0x2CEB => [0x2CEC], - 0x2CED => [0x2CEE], 0x2CF2 => [0x2CF3], 0x2D6F => [0x2D61], - 0x2E9F => [0x6BCD], 0x2EF3 => [0x9F9F], 0x2F00 => [0x4E00], - 0x2F01 => [0x4E28], 0x2F02 => [0x4E36], 0x2F03 => [0x4E3F], - 0x2F04 => [0x4E59], 0x2F05 => [0x4E85], 0x2F06 => [0x4E8C], - 0x2F07 => [0x4EA0], 0x2F08 => [0x4EBA], 0x2F09 => [0x513F], - 0x2F0A => [0x5165], 0x2F0B => [0x516B], 0x2F0C => [0x5182], - 0x2F0D => [0x5196], 0x2F0E => [0x51AB], 0x2F0F => [0x51E0], - 0x2F10 => [0x51F5], 0x2F11 => [0x5200], 0x2F12 => [0x529B], - 0x2F13 => [0x52F9], 0x2F14 => [0x5315], 0x2F15 => [0x531A], - 0x2F16 => [0x5338], 0x2F17 => [0x5341], 0x2F18 => [0x535C], - 0x2F19 => [0x5369], 0x2F1A => [0x5382], 0x2F1B => [0x53B6], - 0x2F1C => [0x53C8], 0x2F1D => [0x53E3], 0x2F1E => [0x56D7], - 0x2F1F => [0x571F], 0x2F20 => [0x58EB], 0x2F21 => [0x5902], - 0x2F22 => [0x590A], 0x2F23 => [0x5915], 0x2F24 => [0x5927], - 0x2F25 => [0x5973], 0x2F26 => [0x5B50], 0x2F27 => [0x5B80], - 0x2F28 => [0x5BF8], 0x2F29 => [0x5C0F], 0x2F2A => [0x5C22], - 0x2F2B => [0x5C38], 0x2F2C => [0x5C6E], 0x2F2D => [0x5C71], - 0x2F2E => [0x5DDB], 0x2F2F => [0x5DE5], 0x2F30 => [0x5DF1], - 0x2F31 => [0x5DFE], 0x2F32 => [0x5E72], 0x2F33 => [0x5E7A], - 0x2F34 => [0x5E7F], 0x2F35 => [0x5EF4], 0x2F36 => [0x5EFE], - 0x2F37 => [0x5F0B], 0x2F38 => [0x5F13], 0x2F39 => [0x5F50], - 0x2F3A => [0x5F61], 0x2F3B => [0x5F73], 0x2F3C => [0x5FC3], - 0x2F3D => [0x6208], 0x2F3E => [0x6236], 0x2F3F => [0x624B], - 0x2F40 => [0x652F], 0x2F41 => [0x6534], 0x2F42 => [0x6587], - 0x2F43 => [0x6597], 0x2F44 => [0x65A4], 0x2F45 => [0x65B9], - 0x2F46 => [0x65E0], 0x2F47 => [0x65E5], 0x2F48 => [0x66F0], - 0x2F49 => [0x6708], 0x2F4A => [0x6728], 0x2F4B => [0x6B20], - 0x2F4C => [0x6B62], 0x2F4D => [0x6B79], 0x2F4E => [0x6BB3], - 0x2F4F => [0x6BCB], 0x2F50 => [0x6BD4], 0x2F51 => [0x6BDB], - 0x2F52 => [0x6C0F], 0x2F53 => [0x6C14], 0x2F54 => [0x6C34], - 0x2F55 => [0x706B], 0x2F56 => [0x722A], 0x2F57 => [0x7236], - 0x2F58 => [0x723B], 0x2F59 => [0x723F], 0x2F5A => [0x7247], - 0x2F5B => [0x7259], 0x2F5C => [0x725B], 0x2F5D => [0x72AC], - 0x2F5E => [0x7384], 0x2F5F => [0x7389], 0x2F60 => [0x74DC], - 0x2F61 => [0x74E6], 0x2F62 => [0x7518], 0x2F63 => [0x751F], - 0x2F64 => [0x7528], 0x2F65 => [0x7530], 0x2F66 => [0x758B], - 0x2F67 => [0x7592], 0x2F68 => [0x7676], 0x2F69 => [0x767D], - 0x2F6A => [0x76AE], 0x2F6B => [0x76BF], 0x2F6C => [0x76EE], - 0x2F6D => [0x77DB], 0x2F6E => [0x77E2], 0x2F6F => [0x77F3], - 0x2F70 => [0x793A], 0x2F71 => [0x79B8], 0x2F72 => [0x79BE], - 0x2F73 => [0x7A74], 0x2F74 => [0x7ACB], 0x2F75 => [0x7AF9], - 0x2F76 => [0x7C73], 0x2F77 => [0x7CF8], 0x2F78 => [0x7F36], - 0x2F79 => [0x7F51], 0x2F7A => [0x7F8A], 0x2F7B => [0x7FBD], - 0x2F7C => [0x8001], 0x2F7D => [0x800C], 0x2F7E => [0x8012], - 0x2F7F => [0x8033], 0x2F80 => [0x807F], 0x2F81 => [0x8089], - 0x2F82 => [0x81E3], 0x2F83 => [0x81EA], 0x2F84 => [0x81F3], - 0x2F85 => [0x81FC], 0x2F86 => [0x820C], 0x2F87 => [0x821B], - 0x2F88 => [0x821F], 0x2F89 => [0x826E], 0x2F8A => [0x8272], - 0x2F8B => [0x8278], 0x2F8C => [0x864D], 0x2F8D => [0x866B], - 0x2F8E => [0x8840], 0x2F8F => [0x884C], 0x2F90 => [0x8863], - 0x2F91 => [0x897E], 0x2F92 => [0x898B], 0x2F93 => [0x89D2], - 0x2F94 => [0x8A00], 0x2F95 => [0x8C37], 0x2F96 => [0x8C46], - 0x2F97 => [0x8C55], 0x2F98 => [0x8C78], 0x2F99 => [0x8C9D], - 0x2F9A => [0x8D64], 0x2F9B => [0x8D70], 0x2F9C => [0x8DB3], - 0x2F9D => [0x8EAB], 0x2F9E => [0x8ECA], 0x2F9F => [0x8F9B], - 0x2FA0 => [0x8FB0], 0x2FA1 => [0x8FB5], 0x2FA2 => [0x9091], - 0x2FA3 => [0x9149], 0x2FA4 => [0x91C6], 0x2FA5 => [0x91CC], - 0x2FA6 => [0x91D1], 0x2FA7 => [0x9577], 0x2FA8 => [0x9580], - 0x2FA9 => [0x961C], 0x2FAA => [0x96B6], 0x2FAB => [0x96B9], - 0x2FAC => [0x96E8], 0x2FAD => [0x9751], 0x2FAE => [0x975E], - 0x2FAF => [0x9762], 0x2FB0 => [0x9769], 0x2FB1 => [0x97CB], - 0x2FB2 => [0x97ED], 0x2FB3 => [0x97F3], 0x2FB4 => [0x9801], - 0x2FB5 => [0x98A8], 0x2FB6 => [0x98DB], 0x2FB7 => [0x98DF], - 0x2FB8 => [0x9996], 0x2FB9 => [0x9999], 0x2FBA => [0x99AC], - 0x2FBB => [0x9AA8], 0x2FBC => [0x9AD8], 0x2FBD => [0x9ADF], - 0x2FBE => [0x9B25], 0x2FBF => [0x9B2F], 0x2FC0 => [0x9B32], - 0x2FC1 => [0x9B3C], 0x2FC2 => [0x9B5A], 0x2FC3 => [0x9CE5], - 0x2FC4 => [0x9E75], 0x2FC5 => [0x9E7F], 0x2FC6 => [0x9EA5], - 0x2FC7 => [0x9EBB], 0x2FC8 => [0x9EC3], 0x2FC9 => [0x9ECD], - 0x2FCA => [0x9ED1], 0x2FCB => [0x9EF9], 0x2FCC => [0x9EFD], - 0x2FCD => [0x9F0E], 0x2FCE => [0x9F13], 0x2FCF => [0x9F20], - 0x2FD0 => [0x9F3B], 0x2FD1 => [0x9F4A], 0x2FD2 => [0x9F52], - 0x2FD3 => [0x9F8D], 0x2FD4 => [0x9F9C], 0x2FD5 => [0x9FA0], - 0x3002 => [0x2E], 0x3036 => [0x3012], 0x3038 => [0x5341], - 0x3039 => [0x5344], 0x303A => [0x5345], 0x309F => [0x3088, 0x308A], - 0x30FF => [0x30B3, 0x30C8], 0x3131 => [0x1100], 0x3132 => [0x1101], - 0x3133 => [0x11AA], 0x3134 => [0x1102], 0x3135 => [0x11AC], - 0x3136 => [0x11AD], 0x3137 => [0x1103], 0x3138 => [0x1104], - 0x3139 => [0x1105], 0x313A => [0x11B0], 0x313B => [0x11B1], - 0x313C => [0x11B2], 0x313D => [0x11B3], 0x313E => [0x11B4], - 0x313F => [0x11B5], 0x3140 => [0x111A], 0x3141 => [0x1106], - 0x3142 => [0x1107], 0x3143 => [0x1108], 0x3144 => [0x1121], - 0x3145 => [0x1109], 0x3146 => [0x110A], 0x3147 => [0x110B], - 0x3148 => [0x110C], 0x3149 => [0x110D], 0x314A => [0x110E], - 0x314B => [0x110F], 0x314C => [0x1110], 0x314D => [0x1111], - 0x314E => [0x1112], 0x314F => [0x1161], 0x3150 => [0x1162], - 0x3151 => [0x1163], 0x3152 => [0x1164], 0x3153 => [0x1165], - 0x3154 => [0x1166], 0x3155 => [0x1167], 0x3156 => [0x1168], - 0x3157 => [0x1169], 0x3158 => [0x116A], 0x3159 => [0x116B], - 0x315A => [0x116C], 0x315B => [0x116D], 0x315C => [0x116E], - 0x315D => [0x116F], 0x315E => [0x1170], 0x315F => [0x1171], - 0x3160 => [0x1172], 0x3161 => [0x1173], 0x3162 => [0x1174], - 0x3163 => [0x1175], 0x3165 => [0x1114], 0x3166 => [0x1115], - 0x3167 => [0x11C7], 0x3168 => [0x11C8], 0x3169 => [0x11CC], - 0x316A => [0x11CE], 0x316B => [0x11D3], 0x316C => [0x11D7], - 0x316D => [0x11D9], 0x316E => [0x111C], 0x316F => [0x11DD], - 0x3170 => [0x11DF], 0x3171 => [0x111D], 0x3172 => [0x111E], - 0x3173 => [0x1120], 0x3174 => [0x1122], 0x3175 => [0x1123], - 0x3176 => [0x1127], 0x3177 => [0x1129], 0x3178 => [0x112B], - 0x3179 => [0x112C], 0x317A => [0x112D], 0x317B => [0x112E], - 0x317C => [0x112F], 0x317D => [0x1132], 0x317E => [0x1136], - 0x317F => [0x1140], 0x3180 => [0x1147], 0x3181 => [0x114C], - 0x3182 => [0x11F1], 0x3183 => [0x11F2], 0x3184 => [0x1157], - 0x3185 => [0x1158], 0x3186 => [0x1159], 0x3187 => [0x1184], - 0x3188 => [0x1185], 0x3189 => [0x1188], 0x318A => [0x1191], - 0x318B => [0x1192], 0x318C => [0x1194], 0x318D => [0x119E], - 0x318E => [0x11A1], 0x3192 => [0x4E00], 0x3193 => [0x4E8C], - 0x3194 => [0x4E09], 0x3195 => [0x56DB], 0x3196 => [0x4E0A], - 0x3197 => [0x4E2D], 0x3198 => [0x4E0B], 0x3199 => [0x7532], - 0x319A => [0x4E59], 0x319B => [0x4E19], 0x319C => [0x4E01], - 0x319D => [0x5929], 0x319E => [0x5730], 0x319F => [0x4EBA], - 0x3244 => [0x554F], 0x3245 => [0x5E7C], 0x3246 => [0x6587], - 0x3247 => [0x7B8F], 0x3250 => [0x70, 0x74, 0x65], 0x3251 => [0x32, 0x31], - 0x3252 => [0x32, 0x32], 0x3253 => [0x32, 0x33], 0x3254 => [0x32, 0x34], - 0x3255 => [0x32, 0x35], 0x3256 => [0x32, 0x36], 0x3257 => [0x32, 0x37], - 0x3258 => [0x32, 0x38], 0x3259 => [0x32, 0x39], 0x325A => [0x33, 0x30], - 0x325B => [0x33, 0x31], 0x325C => [0x33, 0x32], 0x325D => [0x33, 0x33], - 0x325E => [0x33, 0x34], 0x325F => [0x33, 0x35], 0x3260 => [0x1100], - 0x3261 => [0x1102], 0x3262 => [0x1103], 0x3263 => [0x1105], - 0x3264 => [0x1106], 0x3265 => [0x1107], 0x3266 => [0x1109], - 0x3267 => [0x110B], 0x3268 => [0x110C], 0x3269 => [0x110E], - 0x326A => [0x110F], 0x326B => [0x1110], 0x326C => [0x1111], - 0x326D => [0x1112], 0x326E => [0xAC00], 0x326F => [0xB098], - 0x3270 => [0xB2E4], 0x3271 => [0xB77C], 0x3272 => [0xB9C8], - 0x3273 => [0xBC14], 0x3274 => [0xC0AC], 0x3275 => [0xC544], - 0x3276 => [0xC790], 0x3277 => [0xCC28], 0x3278 => [0xCE74], - 0x3279 => [0xD0C0], 0x327A => [0xD30C], 0x327B => [0xD558], - 0x327C => [0xCC38, 0xACE0], 0x327D => [0xC8FC, 0xC758], 0x327E => [0xC6B0], - 0x3280 => [0x4E00], 0x3281 => [0x4E8C], 0x3282 => [0x4E09], - 0x3283 => [0x56DB], 0x3284 => [0x4E94], 0x3285 => [0x516D], - 0x3286 => [0x4E03], 0x3287 => [0x516B], 0x3288 => [0x4E5D], - 0x3289 => [0x5341], 0x328A => [0x6708], 0x328B => [0x706B], - 0x328C => [0x6C34], 0x328D => [0x6728], 0x328E => [0x91D1], - 0x328F => [0x571F], 0x3290 => [0x65E5], 0x3291 => [0x682A], - 0x3292 => [0x6709], 0x3293 => [0x793E], 0x3294 => [0x540D], - 0x3295 => [0x7279], 0x3296 => [0x8CA1], 0x3297 => [0x795D], - 0x3298 => [0x52B4], 0x3299 => [0x79D8], 0x329A => [0x7537], - 0x329B => [0x5973], 0x329C => [0x9069], 0x329D => [0x512A], - 0x329E => [0x5370], 0x329F => [0x6CE8], 0x32A0 => [0x9805], - 0x32A1 => [0x4F11], 0x32A2 => [0x5199], 0x32A3 => [0x6B63], - 0x32A4 => [0x4E0A], 0x32A5 => [0x4E2D], 0x32A6 => [0x4E0B], - 0x32A7 => [0x5DE6], 0x32A8 => [0x53F3], 0x32A9 => [0x533B], - 0x32AA => [0x5B97], 0x32AB => [0x5B66], 0x32AC => [0x76E3], - 0x32AD => [0x4F01], 0x32AE => [0x8CC7], 0x32AF => [0x5354], - 0x32B0 => [0x591C], 0x32B1 => [0x33, 0x36], 0x32B2 => [0x33, 0x37], - 0x32B3 => [0x33, 0x38], 0x32B4 => [0x33, 0x39], 0x32B5 => [0x34, 0x30], - 0x32B6 => [0x34, 0x31], 0x32B7 => [0x34, 0x32], 0x32B8 => [0x34, 0x33], - 0x32B9 => [0x34, 0x34], 0x32BA => [0x34, 0x35], 0x32BB => [0x34, 0x36], - 0x32BC => [0x34, 0x37], 0x32BD => [0x34, 0x38], 0x32BE => [0x34, 0x39], - 0x32BF => [0x35, 0x30], 0x32C0 => [0x31, 0x6708], 0x32C1 => [0x32, 0x6708], - 0x32C2 => [0x33, 0x6708], 0x32C3 => [0x34, 0x6708], 0x32C4 => [0x35, 0x6708], - 0x32C5 => [0x36, 0x6708], 0x32C6 => [0x37, 0x6708], 0x32C7 => [0x38, 0x6708], - 0x32C8 => [0x39, 0x6708], 0x32C9 => [0x31, 0x30, 0x6708], 0x32CA => [0x31, 0x31, 0x6708], - 0x32CB => [0x31, 0x32, 0x6708], 0x32CC => [0x68, 0x67], 0x32CD => [0x65, 0x72, 0x67], - 0x32CE => [0x65, 0x76], 0x32CF => [0x6C, 0x74, 0x64], 0x32D0 => [0x30A2], - 0x32D1 => [0x30A4], 0x32D2 => [0x30A6], 0x32D3 => [0x30A8], - 0x32D4 => [0x30AA], 0x32D5 => [0x30AB], 0x32D6 => [0x30AD], - 0x32D7 => [0x30AF], 0x32D8 => [0x30B1], 0x32D9 => [0x30B3], - 0x32DA => [0x30B5], 0x32DB => [0x30B7], 0x32DC => [0x30B9], - 0x32DD => [0x30BB], 0x32DE => [0x30BD], 0x32DF => [0x30BF], - 0x32E0 => [0x30C1], 0x32E1 => [0x30C4], 0x32E2 => [0x30C6], - 0x32E3 => [0x30C8], 0x32E4 => [0x30CA], 0x32E5 => [0x30CB], - 0x32E6 => [0x30CC], 0x32E7 => [0x30CD], 0x32E8 => [0x30CE], - 0x32E9 => [0x30CF], 0x32EA => [0x30D2], 0x32EB => [0x30D5], - 0x32EC => [0x30D8], 0x32ED => [0x30DB], 0x32EE => [0x30DE], - 0x32EF => [0x30DF], 0x32F0 => [0x30E0], 0x32F1 => [0x30E1], - 0x32F2 => [0x30E2], 0x32F3 => [0x30E4], 0x32F4 => [0x30E6], - 0x32F5 => [0x30E8], 0x32F6 => [0x30E9], 0x32F7 => [0x30EA], - 0x32F8 => [0x30EB], 0x32F9 => [0x30EC], 0x32FA => [0x30ED], - 0x32FB => [0x30EF], 0x32FC => [0x30F0], 0x32FD => [0x30F1], - 0x32FE => [0x30F2], 0x3300 => [0x30A2, 0x30D1, 0x30FC, 0x30C8], 0x3301 => [0x30A2, 0x30EB, 0x30D5, 0x30A1], - 0x3302 => [0x30A2, 0x30F3, 0x30DA, 0x30A2], 0x3303 => [0x30A2, 0x30FC, 0x30EB], 0x3304 => [0x30A4, 0x30CB, 0x30F3, 0x30B0], - 0x3305 => [0x30A4, 0x30F3, 0x30C1], 0x3306 => [0x30A6, 0x30A9, 0x30F3], 0x3307 => [0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9], - 0x3308 => [0x30A8, 0x30FC, 0x30AB, 0x30FC], 0x3309 => [0x30AA, 0x30F3, 0x30B9], 0x330A => [0x30AA, 0x30FC, 0x30E0], - 0x330B => [0x30AB, 0x30A4, 0x30EA], 0x330C => [0x30AB, 0x30E9, 0x30C3, 0x30C8], 0x330D => [0x30AB, 0x30ED, 0x30EA, 0x30FC], - 0x330E => [0x30AC, 0x30ED, 0x30F3], 0x330F => [0x30AC, 0x30F3, 0x30DE], 0x3310 => [0x30AE, 0x30AC], - 0x3311 => [0x30AE, 0x30CB, 0x30FC], 0x3312 => [0x30AD, 0x30E5, 0x30EA, 0x30FC], 0x3313 => [0x30AE, 0x30EB, 0x30C0, 0x30FC], - 0x3314 => [0x30AD, 0x30ED], 0x3315 => [0x30AD, 0x30ED, 0x30B0, 0x30E9, 0x30E0], 0x3316 => [0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB], - 0x3317 => [0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8], 0x3318 => [0x30B0, 0x30E9, 0x30E0], 0x3319 => [0x30B0, 0x30E9, 0x30E0, 0x30C8, 0x30F3], - 0x331A => [0x30AF, 0x30EB, 0x30BC, 0x30A4, 0x30ED], 0x331B => [0x30AF, 0x30ED, 0x30FC, 0x30CD], 0x331C => [0x30B1, 0x30FC, 0x30B9], - 0x331D => [0x30B3, 0x30EB, 0x30CA], 0x331E => [0x30B3, 0x30FC, 0x30DD], 0x331F => [0x30B5, 0x30A4, 0x30AF, 0x30EB], - 0x3320 => [0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0], 0x3321 => [0x30B7, 0x30EA, 0x30F3, 0x30B0], 0x3322 => [0x30BB, 0x30F3, 0x30C1], - 0x3323 => [0x30BB, 0x30F3, 0x30C8], 0x3324 => [0x30C0, 0x30FC, 0x30B9], 0x3325 => [0x30C7, 0x30B7], - 0x3326 => [0x30C9, 0x30EB], 0x3327 => [0x30C8, 0x30F3], 0x3328 => [0x30CA, 0x30CE], - 0x3329 => [0x30CE, 0x30C3, 0x30C8], 0x332A => [0x30CF, 0x30A4, 0x30C4], 0x332B => [0x30D1, 0x30FC, 0x30BB, 0x30F3, 0x30C8], - 0x332C => [0x30D1, 0x30FC, 0x30C4], 0x332D => [0x30D0, 0x30FC, 0x30EC, 0x30EB], 0x332E => [0x30D4, 0x30A2, 0x30B9, 0x30C8, 0x30EB], - 0x332F => [0x30D4, 0x30AF, 0x30EB], 0x3330 => [0x30D4, 0x30B3], 0x3331 => [0x30D3, 0x30EB], - 0x3332 => [0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C9], 0x3333 => [0x30D5, 0x30A3, 0x30FC, 0x30C8], 0x3334 => [0x30D6, 0x30C3, 0x30B7, 0x30A7, 0x30EB], - 0x3335 => [0x30D5, 0x30E9, 0x30F3], 0x3336 => [0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB], 0x3337 => [0x30DA, 0x30BD], - 0x3338 => [0x30DA, 0x30CB, 0x30D2], 0x3339 => [0x30D8, 0x30EB, 0x30C4], 0x333A => [0x30DA, 0x30F3, 0x30B9], - 0x333B => [0x30DA, 0x30FC, 0x30B8], 0x333C => [0x30D9, 0x30FC, 0x30BF], 0x333D => [0x30DD, 0x30A4, 0x30F3, 0x30C8], - 0x333E => [0x30DC, 0x30EB, 0x30C8], 0x333F => [0x30DB, 0x30F3], 0x3340 => [0x30DD, 0x30F3, 0x30C9], - 0x3341 => [0x30DB, 0x30FC, 0x30EB], 0x3342 => [0x30DB, 0x30FC, 0x30F3], 0x3343 => [0x30DE, 0x30A4, 0x30AF, 0x30ED], - 0x3344 => [0x30DE, 0x30A4, 0x30EB], 0x3345 => [0x30DE, 0x30C3, 0x30CF], 0x3346 => [0x30DE, 0x30EB, 0x30AF], - 0x3347 => [0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3], 0x3348 => [0x30DF, 0x30AF, 0x30ED, 0x30F3], 0x3349 => [0x30DF, 0x30EA], - 0x334A => [0x30DF, 0x30EA, 0x30D0, 0x30FC, 0x30EB], 0x334B => [0x30E1, 0x30AC], 0x334C => [0x30E1, 0x30AC, 0x30C8, 0x30F3], - 0x334D => [0x30E1, 0x30FC, 0x30C8, 0x30EB], 0x334E => [0x30E4, 0x30FC, 0x30C9], 0x334F => [0x30E4, 0x30FC, 0x30EB], - 0x3350 => [0x30E6, 0x30A2, 0x30F3], 0x3351 => [0x30EA, 0x30C3, 0x30C8, 0x30EB], 0x3352 => [0x30EA, 0x30E9], - 0x3353 => [0x30EB, 0x30D4, 0x30FC], 0x3354 => [0x30EB, 0x30FC, 0x30D6, 0x30EB], 0x3355 => [0x30EC, 0x30E0], - 0x3356 => [0x30EC, 0x30F3, 0x30C8, 0x30B2, 0x30F3], 0x3357 => [0x30EF, 0x30C3, 0x30C8], 0x3358 => [0x30, 0x70B9], - 0x3359 => [0x31, 0x70B9], 0x335A => [0x32, 0x70B9], 0x335B => [0x33, 0x70B9], - 0x335C => [0x34, 0x70B9], 0x335D => [0x35, 0x70B9], 0x335E => [0x36, 0x70B9], - 0x335F => [0x37, 0x70B9], 0x3360 => [0x38, 0x70B9], 0x3361 => [0x39, 0x70B9], - 0x3362 => [0x31, 0x30, 0x70B9], 0x3363 => [0x31, 0x31, 0x70B9], 0x3364 => [0x31, 0x32, 0x70B9], - 0x3365 => [0x31, 0x33, 0x70B9], 0x3366 => [0x31, 0x34, 0x70B9], 0x3367 => [0x31, 0x35, 0x70B9], - 0x3368 => [0x31, 0x36, 0x70B9], 0x3369 => [0x31, 0x37, 0x70B9], 0x336A => [0x31, 0x38, 0x70B9], - 0x336B => [0x31, 0x39, 0x70B9], 0x336C => [0x32, 0x30, 0x70B9], 0x336D => [0x32, 0x31, 0x70B9], - 0x336E => [0x32, 0x32, 0x70B9], 0x336F => [0x32, 0x33, 0x70B9], 0x3370 => [0x32, 0x34, 0x70B9], - 0x3371 => [0x68, 0x70, 0x61], 0x3372 => [0x64, 0x61], 0x3373 => [0x61, 0x75], - 0x3374 => [0x62, 0x61, 0x72], 0x3375 => [0x6F, 0x76], 0x3376 => [0x70, 0x63], - 0x3377 => [0x64, 0x6D], 0x3378 => [0x64, 0x6D, 0x32], 0x3379 => [0x64, 0x6D, 0x33], - 0x337A => [0x69, 0x75], 0x337B => [0x5E73, 0x6210], 0x337C => [0x662D, 0x548C], - 0x337D => [0x5927, 0x6B63], 0x337E => [0x660E, 0x6CBB], 0x337F => [0x682A, 0x5F0F, 0x4F1A, 0x793E], - 0x3380 => [0x70, 0x61], 0x3381 => [0x6E, 0x61], 0x3382 => [0x3BC, 0x61], - 0x3383 => [0x6D, 0x61], 0x3384 => [0x6B, 0x61], 0x3385 => [0x6B, 0x62], - 0x3386 => [0x6D, 0x62], 0x3387 => [0x67, 0x62], 0x3388 => [0x63, 0x61, 0x6C], - 0x3389 => [0x6B, 0x63, 0x61, 0x6C], 0x338A => [0x70, 0x66], 0x338B => [0x6E, 0x66], - 0x338C => [0x3BC, 0x66], 0x338D => [0x3BC, 0x67], 0x338E => [0x6D, 0x67], - 0x338F => [0x6B, 0x67], 0x3390 => [0x68, 0x7A], 0x3391 => [0x6B, 0x68, 0x7A], - 0x3392 => [0x6D, 0x68, 0x7A], 0x3393 => [0x67, 0x68, 0x7A], 0x3394 => [0x74, 0x68, 0x7A], - 0x3395 => [0x3BC, 0x6C], 0x3396 => [0x6D, 0x6C], 0x3397 => [0x64, 0x6C], - 0x3398 => [0x6B, 0x6C], 0x3399 => [0x66, 0x6D], 0x339A => [0x6E, 0x6D], - 0x339B => [0x3BC, 0x6D], 0x339C => [0x6D, 0x6D], 0x339D => [0x63, 0x6D], - 0x339E => [0x6B, 0x6D], 0x339F => [0x6D, 0x6D, 0x32], 0x33A0 => [0x63, 0x6D, 0x32], - 0x33A1 => [0x6D, 0x32], 0x33A2 => [0x6B, 0x6D, 0x32], 0x33A3 => [0x6D, 0x6D, 0x33], - 0x33A4 => [0x63, 0x6D, 0x33], 0x33A5 => [0x6D, 0x33], 0x33A6 => [0x6B, 0x6D, 0x33], - 0x33A7 => [0x6D, 0x2215, 0x73], 0x33A8 => [0x6D, 0x2215, 0x73, 0x32], 0x33A9 => [0x70, 0x61], - 0x33AA => [0x6B, 0x70, 0x61], 0x33AB => [0x6D, 0x70, 0x61], 0x33AC => [0x67, 0x70, 0x61], - 0x33AD => [0x72, 0x61, 0x64], 0x33AE => [0x72, 0x61, 0x64, 0x2215, 0x73], 0x33AF => [0x72, 0x61, 0x64, 0x2215, 0x73, 0x32], - 0x33B0 => [0x70, 0x73], 0x33B1 => [0x6E, 0x73], 0x33B2 => [0x3BC, 0x73], - 0x33B3 => [0x6D, 0x73], 0x33B4 => [0x70, 0x76], 0x33B5 => [0x6E, 0x76], - 0x33B6 => [0x3BC, 0x76], 0x33B7 => [0x6D, 0x76], 0x33B8 => [0x6B, 0x76], - 0x33B9 => [0x6D, 0x76], 0x33BA => [0x70, 0x77], 0x33BB => [0x6E, 0x77], - 0x33BC => [0x3BC, 0x77], 0x33BD => [0x6D, 0x77], 0x33BE => [0x6B, 0x77], - 0x33BF => [0x6D, 0x77], 0x33C0 => [0x6B, 0x3C9], 0x33C1 => [0x6D, 0x3C9], - 0x33C3 => [0x62, 0x71], 0x33C4 => [0x63, 0x63], 0x33C5 => [0x63, 0x64], - 0x33C6 => [0x63, 0x2215, 0x6B, 0x67], 0x33C8 => [0x64, 0x62], 0x33C9 => [0x67, 0x79], - 0x33CA => [0x68, 0x61], 0x33CB => [0x68, 0x70], 0x33CC => [0x69, 0x6E], - 0x33CD => [0x6B, 0x6B], 0x33CE => [0x6B, 0x6D], 0x33CF => [0x6B, 0x74], - 0x33D0 => [0x6C, 0x6D], 0x33D1 => [0x6C, 0x6E], 0x33D2 => [0x6C, 0x6F, 0x67], - 0x33D3 => [0x6C, 0x78], 0x33D4 => [0x6D, 0x62], 0x33D5 => [0x6D, 0x69, 0x6C], - 0x33D6 => [0x6D, 0x6F, 0x6C], 0x33D7 => [0x70, 0x68], 0x33D9 => [0x70, 0x70, 0x6D], - 0x33DA => [0x70, 0x72], 0x33DB => [0x73, 0x72], 0x33DC => [0x73, 0x76], - 0x33DD => [0x77, 0x62], 0x33DE => [0x76, 0x2215, 0x6D], 0x33DF => [0x61, 0x2215, 0x6D], - 0x33E0 => [0x31, 0x65E5], 0x33E1 => [0x32, 0x65E5], 0x33E2 => [0x33, 0x65E5], - 0x33E3 => [0x34, 0x65E5], 0x33E4 => [0x35, 0x65E5], 0x33E5 => [0x36, 0x65E5], - 0x33E6 => [0x37, 0x65E5], 0x33E7 => [0x38, 0x65E5], 0x33E8 => [0x39, 0x65E5], - 0x33E9 => [0x31, 0x30, 0x65E5], 0x33EA => [0x31, 0x31, 0x65E5], 0x33EB => [0x31, 0x32, 0x65E5], - 0x33EC => [0x31, 0x33, 0x65E5], 0x33ED => [0x31, 0x34, 0x65E5], 0x33EE => [0x31, 0x35, 0x65E5], - 0x33EF => [0x31, 0x36, 0x65E5], 0x33F0 => [0x31, 0x37, 0x65E5], 0x33F1 => [0x31, 0x38, 0x65E5], - 0x33F2 => [0x31, 0x39, 0x65E5], 0x33F3 => [0x32, 0x30, 0x65E5], 0x33F4 => [0x32, 0x31, 0x65E5], - 0x33F5 => [0x32, 0x32, 0x65E5], 0x33F6 => [0x32, 0x33, 0x65E5], 0x33F7 => [0x32, 0x34, 0x65E5], - 0x33F8 => [0x32, 0x35, 0x65E5], 0x33F9 => [0x32, 0x36, 0x65E5], 0x33FA => [0x32, 0x37, 0x65E5], - 0x33FB => [0x32, 0x38, 0x65E5], 0x33FC => [0x32, 0x39, 0x65E5], 0x33FD => [0x33, 0x30, 0x65E5], - 0x33FE => [0x33, 0x31, 0x65E5], 0x33FF => [0x67, 0x61, 0x6C], 0xA640 => [0xA641], - 0xA642 => [0xA643], 0xA644 => [0xA645], 0xA646 => [0xA647], - 0xA648 => [0xA649], 0xA64A => [0xA64B], 0xA64C => [0xA64D], - 0xA64E => [0xA64F], 0xA650 => [0xA651], 0xA652 => [0xA653], - 0xA654 => [0xA655], 0xA656 => [0xA657], 0xA658 => [0xA659], - 0xA65A => [0xA65B], 0xA65C => [0xA65D], 0xA65E => [0xA65F], - 0xA660 => [0xA661], 0xA662 => [0xA663], 0xA664 => [0xA665], - 0xA666 => [0xA667], 0xA668 => [0xA669], 0xA66A => [0xA66B], - 0xA66C => [0xA66D], 0xA680 => [0xA681], 0xA682 => [0xA683], - 0xA684 => [0xA685], 0xA686 => [0xA687], 0xA688 => [0xA689], - 0xA68A => [0xA68B], 0xA68C => [0xA68D], 0xA68E => [0xA68F], - 0xA690 => [0xA691], 0xA692 => [0xA693], 0xA694 => [0xA695], - 0xA696 => [0xA697], 0xA698 => [0xA699], 0xA69A => [0xA69B], - 0xA69C => [0x44A], 0xA69D => [0x44C], 0xA722 => [0xA723], - 0xA724 => [0xA725], 0xA726 => [0xA727], 0xA728 => [0xA729], - 0xA72A => [0xA72B], 0xA72C => [0xA72D], 0xA72E => [0xA72F], - 0xA732 => [0xA733], 0xA734 => [0xA735], 0xA736 => [0xA737], - 0xA738 => [0xA739], 0xA73A => [0xA73B], 0xA73C => [0xA73D], - 0xA73E => [0xA73F], 0xA740 => [0xA741], 0xA742 => [0xA743], - 0xA744 => [0xA745], 0xA746 => [0xA747], 0xA748 => [0xA749], - 0xA74A => [0xA74B], 0xA74C => [0xA74D], 0xA74E => [0xA74F], - 0xA750 => [0xA751], 0xA752 => [0xA753], 0xA754 => [0xA755], - 0xA756 => [0xA757], 0xA758 => [0xA759], 0xA75A => [0xA75B], - 0xA75C => [0xA75D], 0xA75E => [0xA75F], 0xA760 => [0xA761], - 0xA762 => [0xA763], 0xA764 => [0xA765], 0xA766 => [0xA767], - 0xA768 => [0xA769], 0xA76A => [0xA76B], 0xA76C => [0xA76D], - 0xA76E => [0xA76F], 0xA770 => [0xA76F], 0xA779 => [0xA77A], - 0xA77B => [0xA77C], 0xA77D => [0x1D79], 0xA77E => [0xA77F], - 0xA780 => [0xA781], 0xA782 => [0xA783], 0xA784 => [0xA785], - 0xA786 => [0xA787], 0xA78B => [0xA78C], 0xA78D => [0x265], - 0xA790 => [0xA791], 0xA792 => [0xA793], 0xA796 => [0xA797], - 0xA798 => [0xA799], 0xA79A => [0xA79B], 0xA79C => [0xA79D], - 0xA79E => [0xA79F], 0xA7A0 => [0xA7A1], 0xA7A2 => [0xA7A3], - 0xA7A4 => [0xA7A5], 0xA7A6 => [0xA7A7], 0xA7A8 => [0xA7A9], - 0xA7AA => [0x266], 0xA7AB => [0x25C], 0xA7AC => [0x261], - 0xA7AD => [0x26C], 0xA7B0 => [0x29E], 0xA7B1 => [0x287], - 0xA7F8 => [0x127], 0xA7F9 => [0x153], 0xAB5C => [0xA727], - 0xAB5D => [0xAB37], 0xAB5E => [0x26B], 0xAB5F => [0xAB52], - 0xF900 => [0x8C48], 0xF901 => [0x66F4], 0xF902 => [0x8ECA], - 0xF903 => [0x8CC8], 0xF904 => [0x6ED1], 0xF905 => [0x4E32], - 0xF906 => [0x53E5], 0xF907 => [0x9F9C], 0xF908 => [0x9F9C], - 0xF909 => [0x5951], 0xF90A => [0x91D1], 0xF90B => [0x5587], - 0xF90C => [0x5948], 0xF90D => [0x61F6], 0xF90E => [0x7669], - 0xF90F => [0x7F85], 0xF910 => [0x863F], 0xF911 => [0x87BA], - 0xF912 => [0x88F8], 0xF913 => [0x908F], 0xF914 => [0x6A02], - 0xF915 => [0x6D1B], 0xF916 => [0x70D9], 0xF917 => [0x73DE], - 0xF918 => [0x843D], 0xF919 => [0x916A], 0xF91A => [0x99F1], - 0xF91B => [0x4E82], 0xF91C => [0x5375], 0xF91D => [0x6B04], - 0xF91E => [0x721B], 0xF91F => [0x862D], 0xF920 => [0x9E1E], - 0xF921 => [0x5D50], 0xF922 => [0x6FEB], 0xF923 => [0x85CD], - 0xF924 => [0x8964], 0xF925 => [0x62C9], 0xF926 => [0x81D8], - 0xF927 => [0x881F], 0xF928 => [0x5ECA], 0xF929 => [0x6717], - 0xF92A => [0x6D6A], 0xF92B => [0x72FC], 0xF92C => [0x90CE], - 0xF92D => [0x4F86], 0xF92E => [0x51B7], 0xF92F => [0x52DE], - 0xF930 => [0x64C4], 0xF931 => [0x6AD3], 0xF932 => [0x7210], - 0xF933 => [0x76E7], 0xF934 => [0x8001], 0xF935 => [0x8606], - 0xF936 => [0x865C], 0xF937 => [0x8DEF], 0xF938 => [0x9732], - 0xF939 => [0x9B6F], 0xF93A => [0x9DFA], 0xF93B => [0x788C], - 0xF93C => [0x797F], 0xF93D => [0x7DA0], 0xF93E => [0x83C9], - 0xF93F => [0x9304], 0xF940 => [0x9E7F], 0xF941 => [0x8AD6], - 0xF942 => [0x58DF], 0xF943 => [0x5F04], 0xF944 => [0x7C60], - 0xF945 => [0x807E], 0xF946 => [0x7262], 0xF947 => [0x78CA], - 0xF948 => [0x8CC2], 0xF949 => [0x96F7], 0xF94A => [0x58D8], - 0xF94B => [0x5C62], 0xF94C => [0x6A13], 0xF94D => [0x6DDA], - 0xF94E => [0x6F0F], 0xF94F => [0x7D2F], 0xF950 => [0x7E37], - 0xF951 => [0x964B], 0xF952 => [0x52D2], 0xF953 => [0x808B], - 0xF954 => [0x51DC], 0xF955 => [0x51CC], 0xF956 => [0x7A1C], - 0xF957 => [0x7DBE], 0xF958 => [0x83F1], 0xF959 => [0x9675], - 0xF95A => [0x8B80], 0xF95B => [0x62CF], 0xF95C => [0x6A02], - 0xF95D => [0x8AFE], 0xF95E => [0x4E39], 0xF95F => [0x5BE7], - 0xF960 => [0x6012], 0xF961 => [0x7387], 0xF962 => [0x7570], - 0xF963 => [0x5317], 0xF964 => [0x78FB], 0xF965 => [0x4FBF], - 0xF966 => [0x5FA9], 0xF967 => [0x4E0D], 0xF968 => [0x6CCC], - 0xF969 => [0x6578], 0xF96A => [0x7D22], 0xF96B => [0x53C3], - 0xF96C => [0x585E], 0xF96D => [0x7701], 0xF96E => [0x8449], - 0xF96F => [0x8AAA], 0xF970 => [0x6BBA], 0xF971 => [0x8FB0], - 0xF972 => [0x6C88], 0xF973 => [0x62FE], 0xF974 => [0x82E5], - 0xF975 => [0x63A0], 0xF976 => [0x7565], 0xF977 => [0x4EAE], - 0xF978 => [0x5169], 0xF979 => [0x51C9], 0xF97A => [0x6881], - 0xF97B => [0x7CE7], 0xF97C => [0x826F], 0xF97D => [0x8AD2], - 0xF97E => [0x91CF], 0xF97F => [0x52F5], 0xF980 => [0x5442], - 0xF981 => [0x5973], 0xF982 => [0x5EEC], 0xF983 => [0x65C5], - 0xF984 => [0x6FFE], 0xF985 => [0x792A], 0xF986 => [0x95AD], - 0xF987 => [0x9A6A], 0xF988 => [0x9E97], 0xF989 => [0x9ECE], - 0xF98A => [0x529B], 0xF98B => [0x66C6], 0xF98C => [0x6B77], - 0xF98D => [0x8F62], 0xF98E => [0x5E74], 0xF98F => [0x6190], - 0xF990 => [0x6200], 0xF991 => [0x649A], 0xF992 => [0x6F23], - 0xF993 => [0x7149], 0xF994 => [0x7489], 0xF995 => [0x79CA], - 0xF996 => [0x7DF4], 0xF997 => [0x806F], 0xF998 => [0x8F26], - 0xF999 => [0x84EE], 0xF99A => [0x9023], 0xF99B => [0x934A], - 0xF99C => [0x5217], 0xF99D => [0x52A3], 0xF99E => [0x54BD], - 0xF99F => [0x70C8], 0xF9A0 => [0x88C2], 0xF9A1 => [0x8AAA], - 0xF9A2 => [0x5EC9], 0xF9A3 => [0x5FF5], 0xF9A4 => [0x637B], - 0xF9A5 => [0x6BAE], 0xF9A6 => [0x7C3E], 0xF9A7 => [0x7375], - 0xF9A8 => [0x4EE4], 0xF9A9 => [0x56F9], 0xF9AA => [0x5BE7], - 0xF9AB => [0x5DBA], 0xF9AC => [0x601C], 0xF9AD => [0x73B2], - 0xF9AE => [0x7469], 0xF9AF => [0x7F9A], 0xF9B0 => [0x8046], - 0xF9B1 => [0x9234], 0xF9B2 => [0x96F6], 0xF9B3 => [0x9748], - 0xF9B4 => [0x9818], 0xF9B5 => [0x4F8B], 0xF9B6 => [0x79AE], - 0xF9B7 => [0x91B4], 0xF9B8 => [0x96B8], 0xF9B9 => [0x60E1], - 0xF9BA => [0x4E86], 0xF9BB => [0x50DA], 0xF9BC => [0x5BEE], - 0xF9BD => [0x5C3F], 0xF9BE => [0x6599], 0xF9BF => [0x6A02], - 0xF9C0 => [0x71CE], 0xF9C1 => [0x7642], 0xF9C2 => [0x84FC], - 0xF9C3 => [0x907C], 0xF9C4 => [0x9F8D], 0xF9C5 => [0x6688], - 0xF9C6 => [0x962E], 0xF9C7 => [0x5289], 0xF9C8 => [0x677B], - 0xF9C9 => [0x67F3], 0xF9CA => [0x6D41], 0xF9CB => [0x6E9C], - 0xF9CC => [0x7409], 0xF9CD => [0x7559], 0xF9CE => [0x786B], - 0xF9CF => [0x7D10], 0xF9D0 => [0x985E], 0xF9D1 => [0x516D], - 0xF9D2 => [0x622E], 0xF9D3 => [0x9678], 0xF9D4 => [0x502B], - 0xF9D5 => [0x5D19], 0xF9D6 => [0x6DEA], 0xF9D7 => [0x8F2A], - 0xF9D8 => [0x5F8B], 0xF9D9 => [0x6144], 0xF9DA => [0x6817], - 0xF9DB => [0x7387], 0xF9DC => [0x9686], 0xF9DD => [0x5229], - 0xF9DE => [0x540F], 0xF9DF => [0x5C65], 0xF9E0 => [0x6613], - 0xF9E1 => [0x674E], 0xF9E2 => [0x68A8], 0xF9E3 => [0x6CE5], - 0xF9E4 => [0x7406], 0xF9E5 => [0x75E2], 0xF9E6 => [0x7F79], - 0xF9E7 => [0x88CF], 0xF9E8 => [0x88E1], 0xF9E9 => [0x91CC], - 0xF9EA => [0x96E2], 0xF9EB => [0x533F], 0xF9EC => [0x6EBA], - 0xF9ED => [0x541D], 0xF9EE => [0x71D0], 0xF9EF => [0x7498], - 0xF9F0 => [0x85FA], 0xF9F1 => [0x96A3], 0xF9F2 => [0x9C57], - 0xF9F3 => [0x9E9F], 0xF9F4 => [0x6797], 0xF9F5 => [0x6DCB], - 0xF9F6 => [0x81E8], 0xF9F7 => [0x7ACB], 0xF9F8 => [0x7B20], - 0xF9F9 => [0x7C92], 0xF9FA => [0x72C0], 0xF9FB => [0x7099], - 0xF9FC => [0x8B58], 0xF9FD => [0x4EC0], 0xF9FE => [0x8336], - 0xF9FF => [0x523A], 0xFA00 => [0x5207], 0xFA01 => [0x5EA6], - 0xFA02 => [0x62D3], 0xFA03 => [0x7CD6], 0xFA04 => [0x5B85], - 0xFA05 => [0x6D1E], 0xFA06 => [0x66B4], 0xFA07 => [0x8F3B], - 0xFA08 => [0x884C], 0xFA09 => [0x964D], 0xFA0A => [0x898B], - 0xFA0B => [0x5ED3], 0xFA0C => [0x5140], 0xFA0D => [0x55C0], - 0xFA10 => [0x585A], 0xFA12 => [0x6674], 0xFA15 => [0x51DE], - 0xFA16 => [0x732A], 0xFA17 => [0x76CA], 0xFA18 => [0x793C], - 0xFA19 => [0x795E], 0xFA1A => [0x7965], 0xFA1B => [0x798F], - 0xFA1C => [0x9756], 0xFA1D => [0x7CBE], 0xFA1E => [0x7FBD], - 0xFA20 => [0x8612], 0xFA22 => [0x8AF8], 0xFA25 => [0x9038], - 0xFA26 => [0x90FD], 0xFA2A => [0x98EF], 0xFA2B => [0x98FC], - 0xFA2C => [0x9928], 0xFA2D => [0x9DB4], 0xFA2E => [0x90DE], - 0xFA2F => [0x96B7], 0xFA30 => [0x4FAE], 0xFA31 => [0x50E7], - 0xFA32 => [0x514D], 0xFA33 => [0x52C9], 0xFA34 => [0x52E4], - 0xFA35 => [0x5351], 0xFA36 => [0x559D], 0xFA37 => [0x5606], - 0xFA38 => [0x5668], 0xFA39 => [0x5840], 0xFA3A => [0x58A8], - 0xFA3B => [0x5C64], 0xFA3C => [0x5C6E], 0xFA3D => [0x6094], - 0xFA3E => [0x6168], 0xFA3F => [0x618E], 0xFA40 => [0x61F2], - 0xFA41 => [0x654F], 0xFA42 => [0x65E2], 0xFA43 => [0x6691], - 0xFA44 => [0x6885], 0xFA45 => [0x6D77], 0xFA46 => [0x6E1A], - 0xFA47 => [0x6F22], 0xFA48 => [0x716E], 0xFA49 => [0x722B], - 0xFA4A => [0x7422], 0xFA4B => [0x7891], 0xFA4C => [0x793E], - 0xFA4D => [0x7949], 0xFA4E => [0x7948], 0xFA4F => [0x7950], - 0xFA50 => [0x7956], 0xFA51 => [0x795D], 0xFA52 => [0x798D], - 0xFA53 => [0x798E], 0xFA54 => [0x7A40], 0xFA55 => [0x7A81], - 0xFA56 => [0x7BC0], 0xFA57 => [0x7DF4], 0xFA58 => [0x7E09], - 0xFA59 => [0x7E41], 0xFA5A => [0x7F72], 0xFA5B => [0x8005], - 0xFA5C => [0x81ED], 0xFA5D => [0x8279], 0xFA5E => [0x8279], - 0xFA5F => [0x8457], 0xFA60 => [0x8910], 0xFA61 => [0x8996], - 0xFA62 => [0x8B01], 0xFA63 => [0x8B39], 0xFA64 => [0x8CD3], - 0xFA65 => [0x8D08], 0xFA66 => [0x8FB6], 0xFA67 => [0x9038], - 0xFA68 => [0x96E3], 0xFA69 => [0x97FF], 0xFA6A => [0x983B], - 0xFA6B => [0x6075], 0xFA6C => [0x242EE], 0xFA6D => [0x8218], - 0xFA70 => [0x4E26], 0xFA71 => [0x51B5], 0xFA72 => [0x5168], - 0xFA73 => [0x4F80], 0xFA74 => [0x5145], 0xFA75 => [0x5180], - 0xFA76 => [0x52C7], 0xFA77 => [0x52FA], 0xFA78 => [0x559D], - 0xFA79 => [0x5555], 0xFA7A => [0x5599], 0xFA7B => [0x55E2], - 0xFA7C => [0x585A], 0xFA7D => [0x58B3], 0xFA7E => [0x5944], - 0xFA7F => [0x5954], 0xFA80 => [0x5A62], 0xFA81 => [0x5B28], - 0xFA82 => [0x5ED2], 0xFA83 => [0x5ED9], 0xFA84 => [0x5F69], - 0xFA85 => [0x5FAD], 0xFA86 => [0x60D8], 0xFA87 => [0x614E], - 0xFA88 => [0x6108], 0xFA89 => [0x618E], 0xFA8A => [0x6160], - 0xFA8B => [0x61F2], 0xFA8C => [0x6234], 0xFA8D => [0x63C4], - 0xFA8E => [0x641C], 0xFA8F => [0x6452], 0xFA90 => [0x6556], - 0xFA91 => [0x6674], 0xFA92 => [0x6717], 0xFA93 => [0x671B], - 0xFA94 => [0x6756], 0xFA95 => [0x6B79], 0xFA96 => [0x6BBA], - 0xFA97 => [0x6D41], 0xFA98 => [0x6EDB], 0xFA99 => [0x6ECB], - 0xFA9A => [0x6F22], 0xFA9B => [0x701E], 0xFA9C => [0x716E], - 0xFA9D => [0x77A7], 0xFA9E => [0x7235], 0xFA9F => [0x72AF], - 0xFAA0 => [0x732A], 0xFAA1 => [0x7471], 0xFAA2 => [0x7506], - 0xFAA3 => [0x753B], 0xFAA4 => [0x761D], 0xFAA5 => [0x761F], - 0xFAA6 => [0x76CA], 0xFAA7 => [0x76DB], 0xFAA8 => [0x76F4], - 0xFAA9 => [0x774A], 0xFAAA => [0x7740], 0xFAAB => [0x78CC], - 0xFAAC => [0x7AB1], 0xFAAD => [0x7BC0], 0xFAAE => [0x7C7B], - 0xFAAF => [0x7D5B], 0xFAB0 => [0x7DF4], 0xFAB1 => [0x7F3E], - 0xFAB2 => [0x8005], 0xFAB3 => [0x8352], 0xFAB4 => [0x83EF], - 0xFAB5 => [0x8779], 0xFAB6 => [0x8941], 0xFAB7 => [0x8986], - 0xFAB8 => [0x8996], 0xFAB9 => [0x8ABF], 0xFABA => [0x8AF8], - 0xFABB => [0x8ACB], 0xFABC => [0x8B01], 0xFABD => [0x8AFE], - 0xFABE => [0x8AED], 0xFABF => [0x8B39], 0xFAC0 => [0x8B8A], - 0xFAC1 => [0x8D08], 0xFAC2 => [0x8F38], 0xFAC3 => [0x9072], - 0xFAC4 => [0x9199], 0xFAC5 => [0x9276], 0xFAC6 => [0x967C], - 0xFAC7 => [0x96E3], 0xFAC8 => [0x9756], 0xFAC9 => [0x97DB], - 0xFACA => [0x97FF], 0xFACB => [0x980B], 0xFACC => [0x983B], - 0xFACD => [0x9B12], 0xFACE => [0x9F9C], 0xFACF => [0x2284A], - 0xFAD0 => [0x22844], 0xFAD1 => [0x233D5], 0xFAD2 => [0x3B9D], - 0xFAD3 => [0x4018], 0xFAD4 => [0x4039], 0xFAD5 => [0x25249], - 0xFAD6 => [0x25CD0], 0xFAD7 => [0x27ED3], 0xFAD8 => [0x9F43], - 0xFAD9 => [0x9F8E], 0xFB00 => [0x66, 0x66], 0xFB01 => [0x66, 0x69], - 0xFB02 => [0x66, 0x6C], 0xFB03 => [0x66, 0x66, 0x69], 0xFB04 => [0x66, 0x66, 0x6C], - 0xFB05 => [0x73, 0x74], 0xFB06 => [0x73, 0x74], 0xFB13 => [0x574, 0x576], - 0xFB14 => [0x574, 0x565], 0xFB15 => [0x574, 0x56B], 0xFB16 => [0x57E, 0x576], - 0xFB17 => [0x574, 0x56D], 0xFB1D => [0x5D9, 0x5B4], 0xFB1F => [0x5F2, 0x5B7], - 0xFB20 => [0x5E2], 0xFB21 => [0x5D0], 0xFB22 => [0x5D3], - 0xFB23 => [0x5D4], 0xFB24 => [0x5DB], 0xFB25 => [0x5DC], - 0xFB26 => [0x5DD], 0xFB27 => [0x5E8], 0xFB28 => [0x5EA], - 0xFB2A => [0x5E9, 0x5C1], 0xFB2B => [0x5E9, 0x5C2], 0xFB2C => [0x5E9, 0x5BC, 0x5C1], - 0xFB2D => [0x5E9, 0x5BC, 0x5C2], 0xFB2E => [0x5D0, 0x5B7], 0xFB2F => [0x5D0, 0x5B8], - 0xFB30 => [0x5D0, 0x5BC], 0xFB31 => [0x5D1, 0x5BC], 0xFB32 => [0x5D2, 0x5BC], - 0xFB33 => [0x5D3, 0x5BC], 0xFB34 => [0x5D4, 0x5BC], 0xFB35 => [0x5D5, 0x5BC], - 0xFB36 => [0x5D6, 0x5BC], 0xFB38 => [0x5D8, 0x5BC], 0xFB39 => [0x5D9, 0x5BC], - 0xFB3A => [0x5DA, 0x5BC], 0xFB3B => [0x5DB, 0x5BC], 0xFB3C => [0x5DC, 0x5BC], - 0xFB3E => [0x5DE, 0x5BC], 0xFB40 => [0x5E0, 0x5BC], 0xFB41 => [0x5E1, 0x5BC], - 0xFB43 => [0x5E3, 0x5BC], 0xFB44 => [0x5E4, 0x5BC], 0xFB46 => [0x5E6, 0x5BC], - 0xFB47 => [0x5E7, 0x5BC], 0xFB48 => [0x5E8, 0x5BC], 0xFB49 => [0x5E9, 0x5BC], - 0xFB4A => [0x5EA, 0x5BC], 0xFB4B => [0x5D5, 0x5B9], 0xFB4C => [0x5D1, 0x5BF], - 0xFB4D => [0x5DB, 0x5BF], 0xFB4E => [0x5E4, 0x5BF], 0xFB4F => [0x5D0, 0x5DC], - 0xFB50 => [0x671], 0xFB51 => [0x671], 0xFB52 => [0x67B], - 0xFB53 => [0x67B], 0xFB54 => [0x67B], 0xFB55 => [0x67B], - 0xFB56 => [0x67E], 0xFB57 => [0x67E], 0xFB58 => [0x67E], - 0xFB59 => [0x67E], 0xFB5A => [0x680], 0xFB5B => [0x680], - 0xFB5C => [0x680], 0xFB5D => [0x680], 0xFB5E => [0x67A], - 0xFB5F => [0x67A], 0xFB60 => [0x67A], 0xFB61 => [0x67A], - 0xFB62 => [0x67F], 0xFB63 => [0x67F], 0xFB64 => [0x67F], - 0xFB65 => [0x67F], 0xFB66 => [0x679], 0xFB67 => [0x679], - 0xFB68 => [0x679], 0xFB69 => [0x679], 0xFB6A => [0x6A4], - 0xFB6B => [0x6A4], 0xFB6C => [0x6A4], 0xFB6D => [0x6A4], - 0xFB6E => [0x6A6], 0xFB6F => [0x6A6], 0xFB70 => [0x6A6], - 0xFB71 => [0x6A6], 0xFB72 => [0x684], 0xFB73 => [0x684], - 0xFB74 => [0x684], 0xFB75 => [0x684], 0xFB76 => [0x683], - 0xFB77 => [0x683], 0xFB78 => [0x683], 0xFB79 => [0x683], - 0xFB7A => [0x686], 0xFB7B => [0x686], 0xFB7C => [0x686], - 0xFB7D => [0x686], 0xFB7E => [0x687], 0xFB7F => [0x687], - 0xFB80 => [0x687], 0xFB81 => [0x687], 0xFB82 => [0x68D], - 0xFB83 => [0x68D], 0xFB84 => [0x68C], 0xFB85 => [0x68C], - 0xFB86 => [0x68E], 0xFB87 => [0x68E], 0xFB88 => [0x688], - 0xFB89 => [0x688], 0xFB8A => [0x698], 0xFB8B => [0x698], - 0xFB8C => [0x691], 0xFB8D => [0x691], 0xFB8E => [0x6A9], - 0xFB8F => [0x6A9], 0xFB90 => [0x6A9], 0xFB91 => [0x6A9], - 0xFB92 => [0x6AF], 0xFB93 => [0x6AF], 0xFB94 => [0x6AF], - 0xFB95 => [0x6AF], 0xFB96 => [0x6B3], 0xFB97 => [0x6B3], - 0xFB98 => [0x6B3], 0xFB99 => [0x6B3], 0xFB9A => [0x6B1], - 0xFB9B => [0x6B1], 0xFB9C => [0x6B1], 0xFB9D => [0x6B1], - 0xFB9E => [0x6BA], 0xFB9F => [0x6BA], 0xFBA0 => [0x6BB], - 0xFBA1 => [0x6BB], 0xFBA2 => [0x6BB], 0xFBA3 => [0x6BB], - 0xFBA4 => [0x6C0], 0xFBA5 => [0x6C0], 0xFBA6 => [0x6C1], - 0xFBA7 => [0x6C1], 0xFBA8 => [0x6C1], 0xFBA9 => [0x6C1], - 0xFBAA => [0x6BE], 0xFBAB => [0x6BE], 0xFBAC => [0x6BE], - 0xFBAD => [0x6BE], 0xFBAE => [0x6D2], 0xFBAF => [0x6D2], - 0xFBB0 => [0x6D3], 0xFBB1 => [0x6D3], 0xFBD3 => [0x6AD], - 0xFBD4 => [0x6AD], 0xFBD5 => [0x6AD], 0xFBD6 => [0x6AD], - 0xFBD7 => [0x6C7], 0xFBD8 => [0x6C7], 0xFBD9 => [0x6C6], - 0xFBDA => [0x6C6], 0xFBDB => [0x6C8], 0xFBDC => [0x6C8], - 0xFBDD => [0x6C7, 0x674], 0xFBDE => [0x6CB], 0xFBDF => [0x6CB], - 0xFBE0 => [0x6C5], 0xFBE1 => [0x6C5], 0xFBE2 => [0x6C9], - 0xFBE3 => [0x6C9], 0xFBE4 => [0x6D0], 0xFBE5 => [0x6D0], - 0xFBE6 => [0x6D0], 0xFBE7 => [0x6D0], 0xFBE8 => [0x649], - 0xFBE9 => [0x649], 0xFBEA => [0x626, 0x627], 0xFBEB => [0x626, 0x627], - 0xFBEC => [0x626, 0x6D5], 0xFBED => [0x626, 0x6D5], 0xFBEE => [0x626, 0x648], - 0xFBEF => [0x626, 0x648], 0xFBF0 => [0x626, 0x6C7], 0xFBF1 => [0x626, 0x6C7], - 0xFBF2 => [0x626, 0x6C6], 0xFBF3 => [0x626, 0x6C6], 0xFBF4 => [0x626, 0x6C8], - 0xFBF5 => [0x626, 0x6C8], 0xFBF6 => [0x626, 0x6D0], 0xFBF7 => [0x626, 0x6D0], - 0xFBF8 => [0x626, 0x6D0], 0xFBF9 => [0x626, 0x649], 0xFBFA => [0x626, 0x649], - 0xFBFB => [0x626, 0x649], 0xFBFC => [0x6CC], 0xFBFD => [0x6CC], - 0xFBFE => [0x6CC], 0xFBFF => [0x6CC], 0xFC00 => [0x626, 0x62C], - 0xFC01 => [0x626, 0x62D], 0xFC02 => [0x626, 0x645], 0xFC03 => [0x626, 0x649], - 0xFC04 => [0x626, 0x64A], 0xFC05 => [0x628, 0x62C], 0xFC06 => [0x628, 0x62D], - 0xFC07 => [0x628, 0x62E], 0xFC08 => [0x628, 0x645], 0xFC09 => [0x628, 0x649], - 0xFC0A => [0x628, 0x64A], 0xFC0B => [0x62A, 0x62C], 0xFC0C => [0x62A, 0x62D], - 0xFC0D => [0x62A, 0x62E], 0xFC0E => [0x62A, 0x645], 0xFC0F => [0x62A, 0x649], - 0xFC10 => [0x62A, 0x64A], 0xFC11 => [0x62B, 0x62C], 0xFC12 => [0x62B, 0x645], - 0xFC13 => [0x62B, 0x649], 0xFC14 => [0x62B, 0x64A], 0xFC15 => [0x62C, 0x62D], - 0xFC16 => [0x62C, 0x645], 0xFC17 => [0x62D, 0x62C], 0xFC18 => [0x62D, 0x645], - 0xFC19 => [0x62E, 0x62C], 0xFC1A => [0x62E, 0x62D], 0xFC1B => [0x62E, 0x645], - 0xFC1C => [0x633, 0x62C], 0xFC1D => [0x633, 0x62D], 0xFC1E => [0x633, 0x62E], - 0xFC1F => [0x633, 0x645], 0xFC20 => [0x635, 0x62D], 0xFC21 => [0x635, 0x645], - 0xFC22 => [0x636, 0x62C], 0xFC23 => [0x636, 0x62D], 0xFC24 => [0x636, 0x62E], - 0xFC25 => [0x636, 0x645], 0xFC26 => [0x637, 0x62D], 0xFC27 => [0x637, 0x645], - 0xFC28 => [0x638, 0x645], 0xFC29 => [0x639, 0x62C], 0xFC2A => [0x639, 0x645], - 0xFC2B => [0x63A, 0x62C], 0xFC2C => [0x63A, 0x645], 0xFC2D => [0x641, 0x62C], - 0xFC2E => [0x641, 0x62D], 0xFC2F => [0x641, 0x62E], 0xFC30 => [0x641, 0x645], - 0xFC31 => [0x641, 0x649], 0xFC32 => [0x641, 0x64A], 0xFC33 => [0x642, 0x62D], - 0xFC34 => [0x642, 0x645], 0xFC35 => [0x642, 0x649], 0xFC36 => [0x642, 0x64A], - 0xFC37 => [0x643, 0x627], 0xFC38 => [0x643, 0x62C], 0xFC39 => [0x643, 0x62D], - 0xFC3A => [0x643, 0x62E], 0xFC3B => [0x643, 0x644], 0xFC3C => [0x643, 0x645], - 0xFC3D => [0x643, 0x649], 0xFC3E => [0x643, 0x64A], 0xFC3F => [0x644, 0x62C], - 0xFC40 => [0x644, 0x62D], 0xFC41 => [0x644, 0x62E], 0xFC42 => [0x644, 0x645], - 0xFC43 => [0x644, 0x649], 0xFC44 => [0x644, 0x64A], 0xFC45 => [0x645, 0x62C], - 0xFC46 => [0x645, 0x62D], 0xFC47 => [0x645, 0x62E], 0xFC48 => [0x645, 0x645], - 0xFC49 => [0x645, 0x649], 0xFC4A => [0x645, 0x64A], 0xFC4B => [0x646, 0x62C], - 0xFC4C => [0x646, 0x62D], 0xFC4D => [0x646, 0x62E], 0xFC4E => [0x646, 0x645], - 0xFC4F => [0x646, 0x649], 0xFC50 => [0x646, 0x64A], 0xFC51 => [0x647, 0x62C], - 0xFC52 => [0x647, 0x645], 0xFC53 => [0x647, 0x649], 0xFC54 => [0x647, 0x64A], - 0xFC55 => [0x64A, 0x62C], 0xFC56 => [0x64A, 0x62D], 0xFC57 => [0x64A, 0x62E], - 0xFC58 => [0x64A, 0x645], 0xFC59 => [0x64A, 0x649], 0xFC5A => [0x64A, 0x64A], - 0xFC5B => [0x630, 0x670], 0xFC5C => [0x631, 0x670], 0xFC5D => [0x649, 0x670], - 0xFC64 => [0x626, 0x631], 0xFC65 => [0x626, 0x632], 0xFC66 => [0x626, 0x645], - 0xFC67 => [0x626, 0x646], 0xFC68 => [0x626, 0x649], 0xFC69 => [0x626, 0x64A], - 0xFC6A => [0x628, 0x631], 0xFC6B => [0x628, 0x632], 0xFC6C => [0x628, 0x645], - 0xFC6D => [0x628, 0x646], 0xFC6E => [0x628, 0x649], 0xFC6F => [0x628, 0x64A], - 0xFC70 => [0x62A, 0x631], 0xFC71 => [0x62A, 0x632], 0xFC72 => [0x62A, 0x645], - 0xFC73 => [0x62A, 0x646], 0xFC74 => [0x62A, 0x649], 0xFC75 => [0x62A, 0x64A], - 0xFC76 => [0x62B, 0x631], 0xFC77 => [0x62B, 0x632], 0xFC78 => [0x62B, 0x645], - 0xFC79 => [0x62B, 0x646], 0xFC7A => [0x62B, 0x649], 0xFC7B => [0x62B, 0x64A], - 0xFC7C => [0x641, 0x649], 0xFC7D => [0x641, 0x64A], 0xFC7E => [0x642, 0x649], - 0xFC7F => [0x642, 0x64A], 0xFC80 => [0x643, 0x627], 0xFC81 => [0x643, 0x644], - 0xFC82 => [0x643, 0x645], 0xFC83 => [0x643, 0x649], 0xFC84 => [0x643, 0x64A], - 0xFC85 => [0x644, 0x645], 0xFC86 => [0x644, 0x649], 0xFC87 => [0x644, 0x64A], - 0xFC88 => [0x645, 0x627], 0xFC89 => [0x645, 0x645], 0xFC8A => [0x646, 0x631], - 0xFC8B => [0x646, 0x632], 0xFC8C => [0x646, 0x645], 0xFC8D => [0x646, 0x646], - 0xFC8E => [0x646, 0x649], 0xFC8F => [0x646, 0x64A], 0xFC90 => [0x649, 0x670], - 0xFC91 => [0x64A, 0x631], 0xFC92 => [0x64A, 0x632], 0xFC93 => [0x64A, 0x645], - 0xFC94 => [0x64A, 0x646], 0xFC95 => [0x64A, 0x649], 0xFC96 => [0x64A, 0x64A], - 0xFC97 => [0x626, 0x62C], 0xFC98 => [0x626, 0x62D], 0xFC99 => [0x626, 0x62E], - 0xFC9A => [0x626, 0x645], 0xFC9B => [0x626, 0x647], 0xFC9C => [0x628, 0x62C], - 0xFC9D => [0x628, 0x62D], 0xFC9E => [0x628, 0x62E], 0xFC9F => [0x628, 0x645], - 0xFCA0 => [0x628, 0x647], 0xFCA1 => [0x62A, 0x62C], 0xFCA2 => [0x62A, 0x62D], - 0xFCA3 => [0x62A, 0x62E], 0xFCA4 => [0x62A, 0x645], 0xFCA5 => [0x62A, 0x647], - 0xFCA6 => [0x62B, 0x645], 0xFCA7 => [0x62C, 0x62D], 0xFCA8 => [0x62C, 0x645], - 0xFCA9 => [0x62D, 0x62C], 0xFCAA => [0x62D, 0x645], 0xFCAB => [0x62E, 0x62C], - 0xFCAC => [0x62E, 0x645], 0xFCAD => [0x633, 0x62C], 0xFCAE => [0x633, 0x62D], - 0xFCAF => [0x633, 0x62E], 0xFCB0 => [0x633, 0x645], 0xFCB1 => [0x635, 0x62D], - 0xFCB2 => [0x635, 0x62E], 0xFCB3 => [0x635, 0x645], 0xFCB4 => [0x636, 0x62C], - 0xFCB5 => [0x636, 0x62D], 0xFCB6 => [0x636, 0x62E], 0xFCB7 => [0x636, 0x645], - 0xFCB8 => [0x637, 0x62D], 0xFCB9 => [0x638, 0x645], 0xFCBA => [0x639, 0x62C], - 0xFCBB => [0x639, 0x645], 0xFCBC => [0x63A, 0x62C], 0xFCBD => [0x63A, 0x645], - 0xFCBE => [0x641, 0x62C], 0xFCBF => [0x641, 0x62D], 0xFCC0 => [0x641, 0x62E], - 0xFCC1 => [0x641, 0x645], 0xFCC2 => [0x642, 0x62D], 0xFCC3 => [0x642, 0x645], - 0xFCC4 => [0x643, 0x62C], 0xFCC5 => [0x643, 0x62D], 0xFCC6 => [0x643, 0x62E], - 0xFCC7 => [0x643, 0x644], 0xFCC8 => [0x643, 0x645], 0xFCC9 => [0x644, 0x62C], - 0xFCCA => [0x644, 0x62D], 0xFCCB => [0x644, 0x62E], 0xFCCC => [0x644, 0x645], - 0xFCCD => [0x644, 0x647], 0xFCCE => [0x645, 0x62C], 0xFCCF => [0x645, 0x62D], - 0xFCD0 => [0x645, 0x62E], 0xFCD1 => [0x645, 0x645], 0xFCD2 => [0x646, 0x62C], - 0xFCD3 => [0x646, 0x62D], 0xFCD4 => [0x646, 0x62E], 0xFCD5 => [0x646, 0x645], - 0xFCD6 => [0x646, 0x647], 0xFCD7 => [0x647, 0x62C], 0xFCD8 => [0x647, 0x645], - 0xFCD9 => [0x647, 0x670], 0xFCDA => [0x64A, 0x62C], 0xFCDB => [0x64A, 0x62D], - 0xFCDC => [0x64A, 0x62E], 0xFCDD => [0x64A, 0x645], 0xFCDE => [0x64A, 0x647], - 0xFCDF => [0x626, 0x645], 0xFCE0 => [0x626, 0x647], 0xFCE1 => [0x628, 0x645], - 0xFCE2 => [0x628, 0x647], 0xFCE3 => [0x62A, 0x645], 0xFCE4 => [0x62A, 0x647], - 0xFCE5 => [0x62B, 0x645], 0xFCE6 => [0x62B, 0x647], 0xFCE7 => [0x633, 0x645], - 0xFCE8 => [0x633, 0x647], 0xFCE9 => [0x634, 0x645], 0xFCEA => [0x634, 0x647], - 0xFCEB => [0x643, 0x644], 0xFCEC => [0x643, 0x645], 0xFCED => [0x644, 0x645], - 0xFCEE => [0x646, 0x645], 0xFCEF => [0x646, 0x647], 0xFCF0 => [0x64A, 0x645], - 0xFCF1 => [0x64A, 0x647], 0xFCF2 => [0x640, 0x64E, 0x651], 0xFCF3 => [0x640, 0x64F, 0x651], - 0xFCF4 => [0x640, 0x650, 0x651], 0xFCF5 => [0x637, 0x649], 0xFCF6 => [0x637, 0x64A], - 0xFCF7 => [0x639, 0x649], 0xFCF8 => [0x639, 0x64A], 0xFCF9 => [0x63A, 0x649], - 0xFCFA => [0x63A, 0x64A], 0xFCFB => [0x633, 0x649], 0xFCFC => [0x633, 0x64A], - 0xFCFD => [0x634, 0x649], 0xFCFE => [0x634, 0x64A], 0xFCFF => [0x62D, 0x649], - 0xFD00 => [0x62D, 0x64A], 0xFD01 => [0x62C, 0x649], 0xFD02 => [0x62C, 0x64A], - 0xFD03 => [0x62E, 0x649], 0xFD04 => [0x62E, 0x64A], 0xFD05 => [0x635, 0x649], - 0xFD06 => [0x635, 0x64A], 0xFD07 => [0x636, 0x649], 0xFD08 => [0x636, 0x64A], - 0xFD09 => [0x634, 0x62C], 0xFD0A => [0x634, 0x62D], 0xFD0B => [0x634, 0x62E], - 0xFD0C => [0x634, 0x645], 0xFD0D => [0x634, 0x631], 0xFD0E => [0x633, 0x631], - 0xFD0F => [0x635, 0x631], 0xFD10 => [0x636, 0x631], 0xFD11 => [0x637, 0x649], - 0xFD12 => [0x637, 0x64A], 0xFD13 => [0x639, 0x649], 0xFD14 => [0x639, 0x64A], - 0xFD15 => [0x63A, 0x649], 0xFD16 => [0x63A, 0x64A], 0xFD17 => [0x633, 0x649], - 0xFD18 => [0x633, 0x64A], 0xFD19 => [0x634, 0x649], 0xFD1A => [0x634, 0x64A], - 0xFD1B => [0x62D, 0x649], 0xFD1C => [0x62D, 0x64A], 0xFD1D => [0x62C, 0x649], - 0xFD1E => [0x62C, 0x64A], 0xFD1F => [0x62E, 0x649], 0xFD20 => [0x62E, 0x64A], - 0xFD21 => [0x635, 0x649], 0xFD22 => [0x635, 0x64A], 0xFD23 => [0x636, 0x649], - 0xFD24 => [0x636, 0x64A], 0xFD25 => [0x634, 0x62C], 0xFD26 => [0x634, 0x62D], - 0xFD27 => [0x634, 0x62E], 0xFD28 => [0x634, 0x645], 0xFD29 => [0x634, 0x631], - 0xFD2A => [0x633, 0x631], 0xFD2B => [0x635, 0x631], 0xFD2C => [0x636, 0x631], - 0xFD2D => [0x634, 0x62C], 0xFD2E => [0x634, 0x62D], 0xFD2F => [0x634, 0x62E], - 0xFD30 => [0x634, 0x645], 0xFD31 => [0x633, 0x647], 0xFD32 => [0x634, 0x647], - 0xFD33 => [0x637, 0x645], 0xFD34 => [0x633, 0x62C], 0xFD35 => [0x633, 0x62D], - 0xFD36 => [0x633, 0x62E], 0xFD37 => [0x634, 0x62C], 0xFD38 => [0x634, 0x62D], - 0xFD39 => [0x634, 0x62E], 0xFD3A => [0x637, 0x645], 0xFD3B => [0x638, 0x645], - 0xFD3C => [0x627, 0x64B], 0xFD3D => [0x627, 0x64B], 0xFD50 => [0x62A, 0x62C, 0x645], - 0xFD51 => [0x62A, 0x62D, 0x62C], 0xFD52 => [0x62A, 0x62D, 0x62C], 0xFD53 => [0x62A, 0x62D, 0x645], - 0xFD54 => [0x62A, 0x62E, 0x645], 0xFD55 => [0x62A, 0x645, 0x62C], 0xFD56 => [0x62A, 0x645, 0x62D], - 0xFD57 => [0x62A, 0x645, 0x62E], 0xFD58 => [0x62C, 0x645, 0x62D], 0xFD59 => [0x62C, 0x645, 0x62D], - 0xFD5A => [0x62D, 0x645, 0x64A], 0xFD5B => [0x62D, 0x645, 0x649], 0xFD5C => [0x633, 0x62D, 0x62C], - 0xFD5D => [0x633, 0x62C, 0x62D], 0xFD5E => [0x633, 0x62C, 0x649], 0xFD5F => [0x633, 0x645, 0x62D], - 0xFD60 => [0x633, 0x645, 0x62D], 0xFD61 => [0x633, 0x645, 0x62C], 0xFD62 => [0x633, 0x645, 0x645], - 0xFD63 => [0x633, 0x645, 0x645], 0xFD64 => [0x635, 0x62D, 0x62D], 0xFD65 => [0x635, 0x62D, 0x62D], - 0xFD66 => [0x635, 0x645, 0x645], 0xFD67 => [0x634, 0x62D, 0x645], 0xFD68 => [0x634, 0x62D, 0x645], - 0xFD69 => [0x634, 0x62C, 0x64A], 0xFD6A => [0x634, 0x645, 0x62E], 0xFD6B => [0x634, 0x645, 0x62E], - 0xFD6C => [0x634, 0x645, 0x645], 0xFD6D => [0x634, 0x645, 0x645], 0xFD6E => [0x636, 0x62D, 0x649], - 0xFD6F => [0x636, 0x62E, 0x645], 0xFD70 => [0x636, 0x62E, 0x645], 0xFD71 => [0x637, 0x645, 0x62D], - 0xFD72 => [0x637, 0x645, 0x62D], 0xFD73 => [0x637, 0x645, 0x645], 0xFD74 => [0x637, 0x645, 0x64A], - 0xFD75 => [0x639, 0x62C, 0x645], 0xFD76 => [0x639, 0x645, 0x645], 0xFD77 => [0x639, 0x645, 0x645], - 0xFD78 => [0x639, 0x645, 0x649], 0xFD79 => [0x63A, 0x645, 0x645], 0xFD7A => [0x63A, 0x645, 0x64A], - 0xFD7B => [0x63A, 0x645, 0x649], 0xFD7C => [0x641, 0x62E, 0x645], 0xFD7D => [0x641, 0x62E, 0x645], - 0xFD7E => [0x642, 0x645, 0x62D], 0xFD7F => [0x642, 0x645, 0x645], 0xFD80 => [0x644, 0x62D, 0x645], - 0xFD81 => [0x644, 0x62D, 0x64A], 0xFD82 => [0x644, 0x62D, 0x649], 0xFD83 => [0x644, 0x62C, 0x62C], - 0xFD84 => [0x644, 0x62C, 0x62C], 0xFD85 => [0x644, 0x62E, 0x645], 0xFD86 => [0x644, 0x62E, 0x645], - 0xFD87 => [0x644, 0x645, 0x62D], 0xFD88 => [0x644, 0x645, 0x62D], 0xFD89 => [0x645, 0x62D, 0x62C], - 0xFD8A => [0x645, 0x62D, 0x645], 0xFD8B => [0x645, 0x62D, 0x64A], 0xFD8C => [0x645, 0x62C, 0x62D], - 0xFD8D => [0x645, 0x62C, 0x645], 0xFD8E => [0x645, 0x62E, 0x62C], 0xFD8F => [0x645, 0x62E, 0x645], - 0xFD92 => [0x645, 0x62C, 0x62E], 0xFD93 => [0x647, 0x645, 0x62C], 0xFD94 => [0x647, 0x645, 0x645], - 0xFD95 => [0x646, 0x62D, 0x645], 0xFD96 => [0x646, 0x62D, 0x649], 0xFD97 => [0x646, 0x62C, 0x645], - 0xFD98 => [0x646, 0x62C, 0x645], 0xFD99 => [0x646, 0x62C, 0x649], 0xFD9A => [0x646, 0x645, 0x64A], - 0xFD9B => [0x646, 0x645, 0x649], 0xFD9C => [0x64A, 0x645, 0x645], 0xFD9D => [0x64A, 0x645, 0x645], - 0xFD9E => [0x628, 0x62E, 0x64A], 0xFD9F => [0x62A, 0x62C, 0x64A], 0xFDA0 => [0x62A, 0x62C, 0x649], - 0xFDA1 => [0x62A, 0x62E, 0x64A], 0xFDA2 => [0x62A, 0x62E, 0x649], 0xFDA3 => [0x62A, 0x645, 0x64A], - 0xFDA4 => [0x62A, 0x645, 0x649], 0xFDA5 => [0x62C, 0x645, 0x64A], 0xFDA6 => [0x62C, 0x62D, 0x649], - 0xFDA7 => [0x62C, 0x645, 0x649], 0xFDA8 => [0x633, 0x62E, 0x649], 0xFDA9 => [0x635, 0x62D, 0x64A], - 0xFDAA => [0x634, 0x62D, 0x64A], 0xFDAB => [0x636, 0x62D, 0x64A], 0xFDAC => [0x644, 0x62C, 0x64A], - 0xFDAD => [0x644, 0x645, 0x64A], 0xFDAE => [0x64A, 0x62D, 0x64A], 0xFDAF => [0x64A, 0x62C, 0x64A], - 0xFDB0 => [0x64A, 0x645, 0x64A], 0xFDB1 => [0x645, 0x645, 0x64A], 0xFDB2 => [0x642, 0x645, 0x64A], - 0xFDB3 => [0x646, 0x62D, 0x64A], 0xFDB4 => [0x642, 0x645, 0x62D], 0xFDB5 => [0x644, 0x62D, 0x645], - 0xFDB6 => [0x639, 0x645, 0x64A], 0xFDB7 => [0x643, 0x645, 0x64A], 0xFDB8 => [0x646, 0x62C, 0x62D], - 0xFDB9 => [0x645, 0x62E, 0x64A], 0xFDBA => [0x644, 0x62C, 0x645], 0xFDBB => [0x643, 0x645, 0x645], - 0xFDBC => [0x644, 0x62C, 0x645], 0xFDBD => [0x646, 0x62C, 0x62D], 0xFDBE => [0x62C, 0x62D, 0x64A], - 0xFDBF => [0x62D, 0x62C, 0x64A], 0xFDC0 => [0x645, 0x62C, 0x64A], 0xFDC1 => [0x641, 0x645, 0x64A], - 0xFDC2 => [0x628, 0x62D, 0x64A], 0xFDC3 => [0x643, 0x645, 0x645], 0xFDC4 => [0x639, 0x62C, 0x645], - 0xFDC5 => [0x635, 0x645, 0x645], 0xFDC6 => [0x633, 0x62E, 0x64A], 0xFDC7 => [0x646, 0x62C, 0x64A], - 0xFDF0 => [0x635, 0x644, 0x6D2], 0xFDF1 => [0x642, 0x644, 0x6D2], 0xFDF2 => [0x627, 0x644, 0x644, 0x647], - 0xFDF3 => [0x627, 0x643, 0x628, 0x631], 0xFDF4 => [0x645, 0x62D, 0x645, 0x62F], 0xFDF5 => [0x635, 0x644, 0x639, 0x645], - 0xFDF6 => [0x631, 0x633, 0x648, 0x644], 0xFDF7 => [0x639, 0x644, 0x64A, 0x647], 0xFDF8 => [0x648, 0x633, 0x644, 0x645], - 0xFDF9 => [0x635, 0x644, 0x649], 0xFDFC => [0x631, 0x6CC, 0x627, 0x644], 0xFE11 => [0x3001], - 0xFE17 => [0x3016], 0xFE18 => [0x3017], 0xFE31 => [0x2014], - 0xFE32 => [0x2013], 0xFE39 => [0x3014], 0xFE3A => [0x3015], - 0xFE3B => [0x3010], 0xFE3C => [0x3011], 0xFE3D => [0x300A], - 0xFE3E => [0x300B], 0xFE3F => [0x3008], 0xFE40 => [0x3009], - 0xFE41 => [0x300C], 0xFE42 => [0x300D], 0xFE43 => [0x300E], - 0xFE44 => [0x300F], 0xFE51 => [0x3001], 0xFE58 => [0x2014], - 0xFE5D => [0x3014], 0xFE5E => [0x3015], 0xFE63 => [0x2D], - 0xFE71 => [0x640, 0x64B], 0xFE77 => [0x640, 0x64E], 0xFE79 => [0x640, 0x64F], - 0xFE7B => [0x640, 0x650], 0xFE7D => [0x640, 0x651], 0xFE7F => [0x640, 0x652], - 0xFE80 => [0x621], 0xFE81 => [0x622], 0xFE82 => [0x622], - 0xFE83 => [0x623], 0xFE84 => [0x623], 0xFE85 => [0x624], - 0xFE86 => [0x624], 0xFE87 => [0x625], 0xFE88 => [0x625], - 0xFE89 => [0x626], 0xFE8A => [0x626], 0xFE8B => [0x626], - 0xFE8C => [0x626], 0xFE8D => [0x627], 0xFE8E => [0x627], - 0xFE8F => [0x628], 0xFE90 => [0x628], 0xFE91 => [0x628], - 0xFE92 => [0x628], 0xFE93 => [0x629], 0xFE94 => [0x629], - 0xFE95 => [0x62A], 0xFE96 => [0x62A], 0xFE97 => [0x62A], - 0xFE98 => [0x62A], 0xFE99 => [0x62B], 0xFE9A => [0x62B], - 0xFE9B => [0x62B], 0xFE9C => [0x62B], 0xFE9D => [0x62C], - 0xFE9E => [0x62C], 0xFE9F => [0x62C], 0xFEA0 => [0x62C], - 0xFEA1 => [0x62D], 0xFEA2 => [0x62D], 0xFEA3 => [0x62D], - 0xFEA4 => [0x62D], 0xFEA5 => [0x62E], 0xFEA6 => [0x62E], - 0xFEA7 => [0x62E], 0xFEA8 => [0x62E], 0xFEA9 => [0x62F], - 0xFEAA => [0x62F], 0xFEAB => [0x630], 0xFEAC => [0x630], - 0xFEAD => [0x631], 0xFEAE => [0x631], 0xFEAF => [0x632], - 0xFEB0 => [0x632], 0xFEB1 => [0x633], 0xFEB2 => [0x633], - 0xFEB3 => [0x633], 0xFEB4 => [0x633], 0xFEB5 => [0x634], - 0xFEB6 => [0x634], 0xFEB7 => [0x634], 0xFEB8 => [0x634], - 0xFEB9 => [0x635], 0xFEBA => [0x635], 0xFEBB => [0x635], - 0xFEBC => [0x635], 0xFEBD => [0x636], 0xFEBE => [0x636], - 0xFEBF => [0x636], 0xFEC0 => [0x636], 0xFEC1 => [0x637], - 0xFEC2 => [0x637], 0xFEC3 => [0x637], 0xFEC4 => [0x637], - 0xFEC5 => [0x638], 0xFEC6 => [0x638], 0xFEC7 => [0x638], - 0xFEC8 => [0x638], 0xFEC9 => [0x639], 0xFECA => [0x639], - 0xFECB => [0x639], 0xFECC => [0x639], 0xFECD => [0x63A], - 0xFECE => [0x63A], 0xFECF => [0x63A], 0xFED0 => [0x63A], - 0xFED1 => [0x641], 0xFED2 => [0x641], 0xFED3 => [0x641], - 0xFED4 => [0x641], 0xFED5 => [0x642], 0xFED6 => [0x642], - 0xFED7 => [0x642], 0xFED8 => [0x642], 0xFED9 => [0x643], - 0xFEDA => [0x643], 0xFEDB => [0x643], 0xFEDC => [0x643], - 0xFEDD => [0x644], 0xFEDE => [0x644], 0xFEDF => [0x644], - 0xFEE0 => [0x644], 0xFEE1 => [0x645], 0xFEE2 => [0x645], - 0xFEE3 => [0x645], 0xFEE4 => [0x645], 0xFEE5 => [0x646], - 0xFEE6 => [0x646], 0xFEE7 => [0x646], 0xFEE8 => [0x646], - 0xFEE9 => [0x647], 0xFEEA => [0x647], 0xFEEB => [0x647], - 0xFEEC => [0x647], 0xFEED => [0x648], 0xFEEE => [0x648], - 0xFEEF => [0x649], 0xFEF0 => [0x649], 0xFEF1 => [0x64A], - 0xFEF2 => [0x64A], 0xFEF3 => [0x64A], 0xFEF4 => [0x64A], - 0xFEF5 => [0x644, 0x622], 0xFEF6 => [0x644, 0x622], 0xFEF7 => [0x644, 0x623], - 0xFEF8 => [0x644, 0x623], 0xFEF9 => [0x644, 0x625], 0xFEFA => [0x644, 0x625], - 0xFEFB => [0x644, 0x627], 0xFEFC => [0x644, 0x627], 0xFF0D => [0x2D], - 0xFF0E => [0x2E], 0xFF10 => [0x30], 0xFF11 => [0x31], - 0xFF12 => [0x32], 0xFF13 => [0x33], 0xFF14 => [0x34], - 0xFF15 => [0x35], 0xFF16 => [0x36], 0xFF17 => [0x37], - 0xFF18 => [0x38], 0xFF19 => [0x39], 0xFF21 => [0x61], - 0xFF22 => [0x62], 0xFF23 => [0x63], 0xFF24 => [0x64], - 0xFF25 => [0x65], 0xFF26 => [0x66], 0xFF27 => [0x67], - 0xFF28 => [0x68], 0xFF29 => [0x69], 0xFF2A => [0x6A], - 0xFF2B => [0x6B], 0xFF2C => [0x6C], 0xFF2D => [0x6D], - 0xFF2E => [0x6E], 0xFF2F => [0x6F], 0xFF30 => [0x70], - 0xFF31 => [0x71], 0xFF32 => [0x72], 0xFF33 => [0x73], - 0xFF34 => [0x74], 0xFF35 => [0x75], 0xFF36 => [0x76], - 0xFF37 => [0x77], 0xFF38 => [0x78], 0xFF39 => [0x79], - 0xFF3A => [0x7A], 0xFF41 => [0x61], 0xFF42 => [0x62], - 0xFF43 => [0x63], 0xFF44 => [0x64], 0xFF45 => [0x65], - 0xFF46 => [0x66], 0xFF47 => [0x67], 0xFF48 => [0x68], - 0xFF49 => [0x69], 0xFF4A => [0x6A], 0xFF4B => [0x6B], - 0xFF4C => [0x6C], 0xFF4D => [0x6D], 0xFF4E => [0x6E], - 0xFF4F => [0x6F], 0xFF50 => [0x70], 0xFF51 => [0x71], - 0xFF52 => [0x72], 0xFF53 => [0x73], 0xFF54 => [0x74], - 0xFF55 => [0x75], 0xFF56 => [0x76], 0xFF57 => [0x77], - 0xFF58 => [0x78], 0xFF59 => [0x79], 0xFF5A => [0x7A], - 0xFF5F => [0x2985], 0xFF60 => [0x2986], 0xFF61 => [0x2E], - 0xFF62 => [0x300C], 0xFF63 => [0x300D], 0xFF64 => [0x3001], - 0xFF65 => [0x30FB], 0xFF66 => [0x30F2], 0xFF67 => [0x30A1], - 0xFF68 => [0x30A3], 0xFF69 => [0x30A5], 0xFF6A => [0x30A7], - 0xFF6B => [0x30A9], 0xFF6C => [0x30E3], 0xFF6D => [0x30E5], - 0xFF6E => [0x30E7], 0xFF6F => [0x30C3], 0xFF70 => [0x30FC], - 0xFF71 => [0x30A2], 0xFF72 => [0x30A4], 0xFF73 => [0x30A6], - 0xFF74 => [0x30A8], 0xFF75 => [0x30AA], 0xFF76 => [0x30AB], - 0xFF77 => [0x30AD], 0xFF78 => [0x30AF], 0xFF79 => [0x30B1], - 0xFF7A => [0x30B3], 0xFF7B => [0x30B5], 0xFF7C => [0x30B7], - 0xFF7D => [0x30B9], 0xFF7E => [0x30BB], 0xFF7F => [0x30BD], - 0xFF80 => [0x30BF], 0xFF81 => [0x30C1], 0xFF82 => [0x30C4], - 0xFF83 => [0x30C6], 0xFF84 => [0x30C8], 0xFF85 => [0x30CA], - 0xFF86 => [0x30CB], 0xFF87 => [0x30CC], 0xFF88 => [0x30CD], - 0xFF89 => [0x30CE], 0xFF8A => [0x30CF], 0xFF8B => [0x30D2], - 0xFF8C => [0x30D5], 0xFF8D => [0x30D8], 0xFF8E => [0x30DB], - 0xFF8F => [0x30DE], 0xFF90 => [0x30DF], 0xFF91 => [0x30E0], - 0xFF92 => [0x30E1], 0xFF93 => [0x30E2], 0xFF94 => [0x30E4], - 0xFF95 => [0x30E6], 0xFF96 => [0x30E8], 0xFF97 => [0x30E9], - 0xFF98 => [0x30EA], 0xFF99 => [0x30EB], 0xFF9A => [0x30EC], - 0xFF9B => [0x30ED], 0xFF9C => [0x30EF], 0xFF9D => [0x30F3], - 0xFF9E => [0x3099], 0xFF9F => [0x309A], 0xFFA1 => [0x1100], - 0xFFA2 => [0x1101], 0xFFA3 => [0x11AA], 0xFFA4 => [0x1102], - 0xFFA5 => [0x11AC], 0xFFA6 => [0x11AD], 0xFFA7 => [0x1103], - 0xFFA8 => [0x1104], 0xFFA9 => [0x1105], 0xFFAA => [0x11B0], - 0xFFAB => [0x11B1], 0xFFAC => [0x11B2], 0xFFAD => [0x11B3], - 0xFFAE => [0x11B4], 0xFFAF => [0x11B5], 0xFFB0 => [0x111A], - 0xFFB1 => [0x1106], 0xFFB2 => [0x1107], 0xFFB3 => [0x1108], - 0xFFB4 => [0x1121], 0xFFB5 => [0x1109], 0xFFB6 => [0x110A], - 0xFFB7 => [0x110B], 0xFFB8 => [0x110C], 0xFFB9 => [0x110D], - 0xFFBA => [0x110E], 0xFFBB => [0x110F], 0xFFBC => [0x1110], - 0xFFBD => [0x1111], 0xFFBE => [0x1112], 0xFFC2 => [0x1161], - 0xFFC3 => [0x1162], 0xFFC4 => [0x1163], 0xFFC5 => [0x1164], - 0xFFC6 => [0x1165], 0xFFC7 => [0x1166], 0xFFCA => [0x1167], - 0xFFCB => [0x1168], 0xFFCC => [0x1169], 0xFFCD => [0x116A], - 0xFFCE => [0x116B], 0xFFCF => [0x116C], 0xFFD2 => [0x116D], - 0xFFD3 => [0x116E], 0xFFD4 => [0x116F], 0xFFD5 => [0x1170], - 0xFFD6 => [0x1171], 0xFFD7 => [0x1172], 0xFFDA => [0x1173], - 0xFFDB => [0x1174], 0xFFDC => [0x1175], 0xFFE0 => [0xA2], - 0xFFE1 => [0xA3], 0xFFE2 => [0xAC], 0xFFE4 => [0xA6], - 0xFFE5 => [0xA5], 0xFFE6 => [0x20A9], 0xFFE8 => [0x2502], - 0xFFE9 => [0x2190], 0xFFEA => [0x2191], 0xFFEB => [0x2192], - 0xFFEC => [0x2193], 0xFFED => [0x25A0], 0xFFEE => [0x25CB], - 0x10400 => [0x10428], 0x10401 => [0x10429], 0x10402 => [0x1042A], - 0x10403 => [0x1042B], 0x10404 => [0x1042C], 0x10405 => [0x1042D], - 0x10406 => [0x1042E], 0x10407 => [0x1042F], 0x10408 => [0x10430], - 0x10409 => [0x10431], 0x1040A => [0x10432], 0x1040B => [0x10433], - 0x1040C => [0x10434], 0x1040D => [0x10435], 0x1040E => [0x10436], - 0x1040F => [0x10437], 0x10410 => [0x10438], 0x10411 => [0x10439], - 0x10412 => [0x1043A], 0x10413 => [0x1043B], 0x10414 => [0x1043C], - 0x10415 => [0x1043D], 0x10416 => [0x1043E], 0x10417 => [0x1043F], - 0x10418 => [0x10440], 0x10419 => [0x10441], 0x1041A => [0x10442], - 0x1041B => [0x10443], 0x1041C => [0x10444], 0x1041D => [0x10445], - 0x1041E => [0x10446], 0x1041F => [0x10447], 0x10420 => [0x10448], - 0x10421 => [0x10449], 0x10422 => [0x1044A], 0x10423 => [0x1044B], - 0x10424 => [0x1044C], 0x10425 => [0x1044D], 0x10426 => [0x1044E], - 0x10427 => [0x1044F], 0x118A0 => [0x118C0], 0x118A1 => [0x118C1], - 0x118A2 => [0x118C2], 0x118A3 => [0x118C3], 0x118A4 => [0x118C4], - 0x118A5 => [0x118C5], 0x118A6 => [0x118C6], 0x118A7 => [0x118C7], - 0x118A8 => [0x118C8], 0x118A9 => [0x118C9], 0x118AA => [0x118CA], - 0x118AB => [0x118CB], 0x118AC => [0x118CC], 0x118AD => [0x118CD], - 0x118AE => [0x118CE], 0x118AF => [0x118CF], 0x118B0 => [0x118D0], - 0x118B1 => [0x118D1], 0x118B2 => [0x118D2], 0x118B3 => [0x118D3], - 0x118B4 => [0x118D4], 0x118B5 => [0x118D5], 0x118B6 => [0x118D6], - 0x118B7 => [0x118D7], 0x118B8 => [0x118D8], 0x118B9 => [0x118D9], - 0x118BA => [0x118DA], 0x118BB => [0x118DB], 0x118BC => [0x118DC], - 0x118BD => [0x118DD], 0x118BE => [0x118DE], 0x118BF => [0x118DF], - 0x1D15E => [0x1D157, 0x1D165], 0x1D15F => [0x1D158, 0x1D165], 0x1D160 => [0x1D158, 0x1D165, 0x1D16E], - 0x1D161 => [0x1D158, 0x1D165, 0x1D16F], 0x1D162 => [0x1D158, 0x1D165, 0x1D170], 0x1D163 => [0x1D158, 0x1D165, 0x1D171], - 0x1D164 => [0x1D158, 0x1D165, 0x1D172], 0x1D1BB => [0x1D1B9, 0x1D165], 0x1D1BC => [0x1D1BA, 0x1D165], - 0x1D1BD => [0x1D1B9, 0x1D165, 0x1D16E], 0x1D1BE => [0x1D1BA, 0x1D165, 0x1D16E], 0x1D1BF => [0x1D1B9, 0x1D165, 0x1D16F], - 0x1D1C0 => [0x1D1BA, 0x1D165, 0x1D16F], 0x1D400 => [0x61], 0x1D401 => [0x62], - 0x1D402 => [0x63], 0x1D403 => [0x64], 0x1D404 => [0x65], - 0x1D405 => [0x66], 0x1D406 => [0x67], 0x1D407 => [0x68], - 0x1D408 => [0x69], 0x1D409 => [0x6A], 0x1D40A => [0x6B], - 0x1D40B => [0x6C], 0x1D40C => [0x6D], 0x1D40D => [0x6E], - 0x1D40E => [0x6F], 0x1D40F => [0x70], 0x1D410 => [0x71], - 0x1D411 => [0x72], 0x1D412 => [0x73], 0x1D413 => [0x74], - 0x1D414 => [0x75], 0x1D415 => [0x76], 0x1D416 => [0x77], - 0x1D417 => [0x78], 0x1D418 => [0x79], 0x1D419 => [0x7A], - 0x1D41A => [0x61], 0x1D41B => [0x62], 0x1D41C => [0x63], - 0x1D41D => [0x64], 0x1D41E => [0x65], 0x1D41F => [0x66], - 0x1D420 => [0x67], 0x1D421 => [0x68], 0x1D422 => [0x69], - 0x1D423 => [0x6A], 0x1D424 => [0x6B], 0x1D425 => [0x6C], - 0x1D426 => [0x6D], 0x1D427 => [0x6E], 0x1D428 => [0x6F], - 0x1D429 => [0x70], 0x1D42A => [0x71], 0x1D42B => [0x72], - 0x1D42C => [0x73], 0x1D42D => [0x74], 0x1D42E => [0x75], - 0x1D42F => [0x76], 0x1D430 => [0x77], 0x1D431 => [0x78], - 0x1D432 => [0x79], 0x1D433 => [0x7A], 0x1D434 => [0x61], - 0x1D435 => [0x62], 0x1D436 => [0x63], 0x1D437 => [0x64], - 0x1D438 => [0x65], 0x1D439 => [0x66], 0x1D43A => [0x67], - 0x1D43B => [0x68], 0x1D43C => [0x69], 0x1D43D => [0x6A], - 0x1D43E => [0x6B], 0x1D43F => [0x6C], 0x1D440 => [0x6D], - 0x1D441 => [0x6E], 0x1D442 => [0x6F], 0x1D443 => [0x70], - 0x1D444 => [0x71], 0x1D445 => [0x72], 0x1D446 => [0x73], - 0x1D447 => [0x74], 0x1D448 => [0x75], 0x1D449 => [0x76], - 0x1D44A => [0x77], 0x1D44B => [0x78], 0x1D44C => [0x79], - 0x1D44D => [0x7A], 0x1D44E => [0x61], 0x1D44F => [0x62], - 0x1D450 => [0x63], 0x1D451 => [0x64], 0x1D452 => [0x65], - 0x1D453 => [0x66], 0x1D454 => [0x67], 0x1D456 => [0x69], - 0x1D457 => [0x6A], 0x1D458 => [0x6B], 0x1D459 => [0x6C], - 0x1D45A => [0x6D], 0x1D45B => [0x6E], 0x1D45C => [0x6F], - 0x1D45D => [0x70], 0x1D45E => [0x71], 0x1D45F => [0x72], - 0x1D460 => [0x73], 0x1D461 => [0x74], 0x1D462 => [0x75], - 0x1D463 => [0x76], 0x1D464 => [0x77], 0x1D465 => [0x78], - 0x1D466 => [0x79], 0x1D467 => [0x7A], 0x1D468 => [0x61], - 0x1D469 => [0x62], 0x1D46A => [0x63], 0x1D46B => [0x64], - 0x1D46C => [0x65], 0x1D46D => [0x66], 0x1D46E => [0x67], - 0x1D46F => [0x68], 0x1D470 => [0x69], 0x1D471 => [0x6A], - 0x1D472 => [0x6B], 0x1D473 => [0x6C], 0x1D474 => [0x6D], - 0x1D475 => [0x6E], 0x1D476 => [0x6F], 0x1D477 => [0x70], - 0x1D478 => [0x71], 0x1D479 => [0x72], 0x1D47A => [0x73], - 0x1D47B => [0x74], 0x1D47C => [0x75], 0x1D47D => [0x76], - 0x1D47E => [0x77], 0x1D47F => [0x78], 0x1D480 => [0x79], - 0x1D481 => [0x7A], 0x1D482 => [0x61], 0x1D483 => [0x62], - 0x1D484 => [0x63], 0x1D485 => [0x64], 0x1D486 => [0x65], - 0x1D487 => [0x66], 0x1D488 => [0x67], 0x1D489 => [0x68], - 0x1D48A => [0x69], 0x1D48B => [0x6A], 0x1D48C => [0x6B], - 0x1D48D => [0x6C], 0x1D48E => [0x6D], 0x1D48F => [0x6E], - 0x1D490 => [0x6F], 0x1D491 => [0x70], 0x1D492 => [0x71], - 0x1D493 => [0x72], 0x1D494 => [0x73], 0x1D495 => [0x74], - 0x1D496 => [0x75], 0x1D497 => [0x76], 0x1D498 => [0x77], - 0x1D499 => [0x78], 0x1D49A => [0x79], 0x1D49B => [0x7A], - 0x1D49C => [0x61], 0x1D49E => [0x63], 0x1D49F => [0x64], - 0x1D4A2 => [0x67], 0x1D4A5 => [0x6A], 0x1D4A6 => [0x6B], - 0x1D4A9 => [0x6E], 0x1D4AA => [0x6F], 0x1D4AB => [0x70], - 0x1D4AC => [0x71], 0x1D4AE => [0x73], 0x1D4AF => [0x74], - 0x1D4B0 => [0x75], 0x1D4B1 => [0x76], 0x1D4B2 => [0x77], - 0x1D4B3 => [0x78], 0x1D4B4 => [0x79], 0x1D4B5 => [0x7A], - 0x1D4B6 => [0x61], 0x1D4B7 => [0x62], 0x1D4B8 => [0x63], - 0x1D4B9 => [0x64], 0x1D4BB => [0x66], 0x1D4BD => [0x68], - 0x1D4BE => [0x69], 0x1D4BF => [0x6A], 0x1D4C0 => [0x6B], - 0x1D4C1 => [0x6C], 0x1D4C2 => [0x6D], 0x1D4C3 => [0x6E], - 0x1D4C5 => [0x70], 0x1D4C6 => [0x71], 0x1D4C7 => [0x72], - 0x1D4C8 => [0x73], 0x1D4C9 => [0x74], 0x1D4CA => [0x75], - 0x1D4CB => [0x76], 0x1D4CC => [0x77], 0x1D4CD => [0x78], - 0x1D4CE => [0x79], 0x1D4CF => [0x7A], 0x1D4D0 => [0x61], - 0x1D4D1 => [0x62], 0x1D4D2 => [0x63], 0x1D4D3 => [0x64], - 0x1D4D4 => [0x65], 0x1D4D5 => [0x66], 0x1D4D6 => [0x67], - 0x1D4D7 => [0x68], 0x1D4D8 => [0x69], 0x1D4D9 => [0x6A], - 0x1D4DA => [0x6B], 0x1D4DB => [0x6C], 0x1D4DC => [0x6D], - 0x1D4DD => [0x6E], 0x1D4DE => [0x6F], 0x1D4DF => [0x70], - 0x1D4E0 => [0x71], 0x1D4E1 => [0x72], 0x1D4E2 => [0x73], - 0x1D4E3 => [0x74], 0x1D4E4 => [0x75], 0x1D4E5 => [0x76], - 0x1D4E6 => [0x77], 0x1D4E7 => [0x78], 0x1D4E8 => [0x79], - 0x1D4E9 => [0x7A], 0x1D4EA => [0x61], 0x1D4EB => [0x62], - 0x1D4EC => [0x63], 0x1D4ED => [0x64], 0x1D4EE => [0x65], - 0x1D4EF => [0x66], 0x1D4F0 => [0x67], 0x1D4F1 => [0x68], - 0x1D4F2 => [0x69], 0x1D4F3 => [0x6A], 0x1D4F4 => [0x6B], - 0x1D4F5 => [0x6C], 0x1D4F6 => [0x6D], 0x1D4F7 => [0x6E], - 0x1D4F8 => [0x6F], 0x1D4F9 => [0x70], 0x1D4FA => [0x71], - 0x1D4FB => [0x72], 0x1D4FC => [0x73], 0x1D4FD => [0x74], - 0x1D4FE => [0x75], 0x1D4FF => [0x76], 0x1D500 => [0x77], - 0x1D501 => [0x78], 0x1D502 => [0x79], 0x1D503 => [0x7A], - 0x1D504 => [0x61], 0x1D505 => [0x62], 0x1D507 => [0x64], - 0x1D508 => [0x65], 0x1D509 => [0x66], 0x1D50A => [0x67], - 0x1D50D => [0x6A], 0x1D50E => [0x6B], 0x1D50F => [0x6C], - 0x1D510 => [0x6D], 0x1D511 => [0x6E], 0x1D512 => [0x6F], - 0x1D513 => [0x70], 0x1D514 => [0x71], 0x1D516 => [0x73], - 0x1D517 => [0x74], 0x1D518 => [0x75], 0x1D519 => [0x76], - 0x1D51A => [0x77], 0x1D51B => [0x78], 0x1D51C => [0x79], - 0x1D51E => [0x61], 0x1D51F => [0x62], 0x1D520 => [0x63], - 0x1D521 => [0x64], 0x1D522 => [0x65], 0x1D523 => [0x66], - 0x1D524 => [0x67], 0x1D525 => [0x68], 0x1D526 => [0x69], - 0x1D527 => [0x6A], 0x1D528 => [0x6B], 0x1D529 => [0x6C], - 0x1D52A => [0x6D], 0x1D52B => [0x6E], 0x1D52C => [0x6F], - 0x1D52D => [0x70], 0x1D52E => [0x71], 0x1D52F => [0x72], - 0x1D530 => [0x73], 0x1D531 => [0x74], 0x1D532 => [0x75], - 0x1D533 => [0x76], 0x1D534 => [0x77], 0x1D535 => [0x78], - 0x1D536 => [0x79], 0x1D537 => [0x7A], 0x1D538 => [0x61], - 0x1D539 => [0x62], 0x1D53B => [0x64], 0x1D53C => [0x65], - 0x1D53D => [0x66], 0x1D53E => [0x67], 0x1D540 => [0x69], - 0x1D541 => [0x6A], 0x1D542 => [0x6B], 0x1D543 => [0x6C], - 0x1D544 => [0x6D], 0x1D546 => [0x6F], 0x1D54A => [0x73], - 0x1D54B => [0x74], 0x1D54C => [0x75], 0x1D54D => [0x76], - 0x1D54E => [0x77], 0x1D54F => [0x78], 0x1D550 => [0x79], - 0x1D552 => [0x61], 0x1D553 => [0x62], 0x1D554 => [0x63], - 0x1D555 => [0x64], 0x1D556 => [0x65], 0x1D557 => [0x66], - 0x1D558 => [0x67], 0x1D559 => [0x68], 0x1D55A => [0x69], - 0x1D55B => [0x6A], 0x1D55C => [0x6B], 0x1D55D => [0x6C], - 0x1D55E => [0x6D], 0x1D55F => [0x6E], 0x1D560 => [0x6F], - 0x1D561 => [0x70], 0x1D562 => [0x71], 0x1D563 => [0x72], - 0x1D564 => [0x73], 0x1D565 => [0x74], 0x1D566 => [0x75], - 0x1D567 => [0x76], 0x1D568 => [0x77], 0x1D569 => [0x78], - 0x1D56A => [0x79], 0x1D56B => [0x7A], 0x1D56C => [0x61], - 0x1D56D => [0x62], 0x1D56E => [0x63], 0x1D56F => [0x64], - 0x1D570 => [0x65], 0x1D571 => [0x66], 0x1D572 => [0x67], - 0x1D573 => [0x68], 0x1D574 => [0x69], 0x1D575 => [0x6A], - 0x1D576 => [0x6B], 0x1D577 => [0x6C], 0x1D578 => [0x6D], - 0x1D579 => [0x6E], 0x1D57A => [0x6F], 0x1D57B => [0x70], - 0x1D57C => [0x71], 0x1D57D => [0x72], 0x1D57E => [0x73], - 0x1D57F => [0x74], 0x1D580 => [0x75], 0x1D581 => [0x76], - 0x1D582 => [0x77], 0x1D583 => [0x78], 0x1D584 => [0x79], - 0x1D585 => [0x7A], 0x1D586 => [0x61], 0x1D587 => [0x62], - 0x1D588 => [0x63], 0x1D589 => [0x64], 0x1D58A => [0x65], - 0x1D58B => [0x66], 0x1D58C => [0x67], 0x1D58D => [0x68], - 0x1D58E => [0x69], 0x1D58F => [0x6A], 0x1D590 => [0x6B], - 0x1D591 => [0x6C], 0x1D592 => [0x6D], 0x1D593 => [0x6E], - 0x1D594 => [0x6F], 0x1D595 => [0x70], 0x1D596 => [0x71], - 0x1D597 => [0x72], 0x1D598 => [0x73], 0x1D599 => [0x74], - 0x1D59A => [0x75], 0x1D59B => [0x76], 0x1D59C => [0x77], - 0x1D59D => [0x78], 0x1D59E => [0x79], 0x1D59F => [0x7A], - 0x1D5A0 => [0x61], 0x1D5A1 => [0x62], 0x1D5A2 => [0x63], - 0x1D5A3 => [0x64], 0x1D5A4 => [0x65], 0x1D5A5 => [0x66], - 0x1D5A6 => [0x67], 0x1D5A7 => [0x68], 0x1D5A8 => [0x69], - 0x1D5A9 => [0x6A], 0x1D5AA => [0x6B], 0x1D5AB => [0x6C], - 0x1D5AC => [0x6D], 0x1D5AD => [0x6E], 0x1D5AE => [0x6F], - 0x1D5AF => [0x70], 0x1D5B0 => [0x71], 0x1D5B1 => [0x72], - 0x1D5B2 => [0x73], 0x1D5B3 => [0x74], 0x1D5B4 => [0x75], - 0x1D5B5 => [0x76], 0x1D5B6 => [0x77], 0x1D5B7 => [0x78], - 0x1D5B8 => [0x79], 0x1D5B9 => [0x7A], 0x1D5BA => [0x61], - 0x1D5BB => [0x62], 0x1D5BC => [0x63], 0x1D5BD => [0x64], - 0x1D5BE => [0x65], 0x1D5BF => [0x66], 0x1D5C0 => [0x67], - 0x1D5C1 => [0x68], 0x1D5C2 => [0x69], 0x1D5C3 => [0x6A], - 0x1D5C4 => [0x6B], 0x1D5C5 => [0x6C], 0x1D5C6 => [0x6D], - 0x1D5C7 => [0x6E], 0x1D5C8 => [0x6F], 0x1D5C9 => [0x70], - 0x1D5CA => [0x71], 0x1D5CB => [0x72], 0x1D5CC => [0x73], - 0x1D5CD => [0x74], 0x1D5CE => [0x75], 0x1D5CF => [0x76], - 0x1D5D0 => [0x77], 0x1D5D1 => [0x78], 0x1D5D2 => [0x79], - 0x1D5D3 => [0x7A], 0x1D5D4 => [0x61], 0x1D5D5 => [0x62], - 0x1D5D6 => [0x63], 0x1D5D7 => [0x64], 0x1D5D8 => [0x65], - 0x1D5D9 => [0x66], 0x1D5DA => [0x67], 0x1D5DB => [0x68], - 0x1D5DC => [0x69], 0x1D5DD => [0x6A], 0x1D5DE => [0x6B], - 0x1D5DF => [0x6C], 0x1D5E0 => [0x6D], 0x1D5E1 => [0x6E], - 0x1D5E2 => [0x6F], 0x1D5E3 => [0x70], 0x1D5E4 => [0x71], - 0x1D5E5 => [0x72], 0x1D5E6 => [0x73], 0x1D5E7 => [0x74], - 0x1D5E8 => [0x75], 0x1D5E9 => [0x76], 0x1D5EA => [0x77], - 0x1D5EB => [0x78], 0x1D5EC => [0x79], 0x1D5ED => [0x7A], - 0x1D5EE => [0x61], 0x1D5EF => [0x62], 0x1D5F0 => [0x63], - 0x1D5F1 => [0x64], 0x1D5F2 => [0x65], 0x1D5F3 => [0x66], - 0x1D5F4 => [0x67], 0x1D5F5 => [0x68], 0x1D5F6 => [0x69], - 0x1D5F7 => [0x6A], 0x1D5F8 => [0x6B], 0x1D5F9 => [0x6C], - 0x1D5FA => [0x6D], 0x1D5FB => [0x6E], 0x1D5FC => [0x6F], - 0x1D5FD => [0x70], 0x1D5FE => [0x71], 0x1D5FF => [0x72], - 0x1D600 => [0x73], 0x1D601 => [0x74], 0x1D602 => [0x75], - 0x1D603 => [0x76], 0x1D604 => [0x77], 0x1D605 => [0x78], - 0x1D606 => [0x79], 0x1D607 => [0x7A], 0x1D608 => [0x61], - 0x1D609 => [0x62], 0x1D60A => [0x63], 0x1D60B => [0x64], - 0x1D60C => [0x65], 0x1D60D => [0x66], 0x1D60E => [0x67], - 0x1D60F => [0x68], 0x1D610 => [0x69], 0x1D611 => [0x6A], - 0x1D612 => [0x6B], 0x1D613 => [0x6C], 0x1D614 => [0x6D], - 0x1D615 => [0x6E], 0x1D616 => [0x6F], 0x1D617 => [0x70], - 0x1D618 => [0x71], 0x1D619 => [0x72], 0x1D61A => [0x73], - 0x1D61B => [0x74], 0x1D61C => [0x75], 0x1D61D => [0x76], - 0x1D61E => [0x77], 0x1D61F => [0x78], 0x1D620 => [0x79], - 0x1D621 => [0x7A], 0x1D622 => [0x61], 0x1D623 => [0x62], - 0x1D624 => [0x63], 0x1D625 => [0x64], 0x1D626 => [0x65], - 0x1D627 => [0x66], 0x1D628 => [0x67], 0x1D629 => [0x68], - 0x1D62A => [0x69], 0x1D62B => [0x6A], 0x1D62C => [0x6B], - 0x1D62D => [0x6C], 0x1D62E => [0x6D], 0x1D62F => [0x6E], - 0x1D630 => [0x6F], 0x1D631 => [0x70], 0x1D632 => [0x71], - 0x1D633 => [0x72], 0x1D634 => [0x73], 0x1D635 => [0x74], - 0x1D636 => [0x75], 0x1D637 => [0x76], 0x1D638 => [0x77], - 0x1D639 => [0x78], 0x1D63A => [0x79], 0x1D63B => [0x7A], - 0x1D63C => [0x61], 0x1D63D => [0x62], 0x1D63E => [0x63], - 0x1D63F => [0x64], 0x1D640 => [0x65], 0x1D641 => [0x66], - 0x1D642 => [0x67], 0x1D643 => [0x68], 0x1D644 => [0x69], - 0x1D645 => [0x6A], 0x1D646 => [0x6B], 0x1D647 => [0x6C], - 0x1D648 => [0x6D], 0x1D649 => [0x6E], 0x1D64A => [0x6F], - 0x1D64B => [0x70], 0x1D64C => [0x71], 0x1D64D => [0x72], - 0x1D64E => [0x73], 0x1D64F => [0x74], 0x1D650 => [0x75], - 0x1D651 => [0x76], 0x1D652 => [0x77], 0x1D653 => [0x78], - 0x1D654 => [0x79], 0x1D655 => [0x7A], 0x1D656 => [0x61], - 0x1D657 => [0x62], 0x1D658 => [0x63], 0x1D659 => [0x64], - 0x1D65A => [0x65], 0x1D65B => [0x66], 0x1D65C => [0x67], - 0x1D65D => [0x68], 0x1D65E => [0x69], 0x1D65F => [0x6A], - 0x1D660 => [0x6B], 0x1D661 => [0x6C], 0x1D662 => [0x6D], - 0x1D663 => [0x6E], 0x1D664 => [0x6F], 0x1D665 => [0x70], - 0x1D666 => [0x71], 0x1D667 => [0x72], 0x1D668 => [0x73], - 0x1D669 => [0x74], 0x1D66A => [0x75], 0x1D66B => [0x76], - 0x1D66C => [0x77], 0x1D66D => [0x78], 0x1D66E => [0x79], - 0x1D66F => [0x7A], 0x1D670 => [0x61], 0x1D671 => [0x62], - 0x1D672 => [0x63], 0x1D673 => [0x64], 0x1D674 => [0x65], - 0x1D675 => [0x66], 0x1D676 => [0x67], 0x1D677 => [0x68], - 0x1D678 => [0x69], 0x1D679 => [0x6A], 0x1D67A => [0x6B], - 0x1D67B => [0x6C], 0x1D67C => [0x6D], 0x1D67D => [0x6E], - 0x1D67E => [0x6F], 0x1D67F => [0x70], 0x1D680 => [0x71], - 0x1D681 => [0x72], 0x1D682 => [0x73], 0x1D683 => [0x74], - 0x1D684 => [0x75], 0x1D685 => [0x76], 0x1D686 => [0x77], - 0x1D687 => [0x78], 0x1D688 => [0x79], 0x1D689 => [0x7A], - 0x1D68A => [0x61], 0x1D68B => [0x62], 0x1D68C => [0x63], - 0x1D68D => [0x64], 0x1D68E => [0x65], 0x1D68F => [0x66], - 0x1D690 => [0x67], 0x1D691 => [0x68], 0x1D692 => [0x69], - 0x1D693 => [0x6A], 0x1D694 => [0x6B], 0x1D695 => [0x6C], - 0x1D696 => [0x6D], 0x1D697 => [0x6E], 0x1D698 => [0x6F], - 0x1D699 => [0x70], 0x1D69A => [0x71], 0x1D69B => [0x72], - 0x1D69C => [0x73], 0x1D69D => [0x74], 0x1D69E => [0x75], - 0x1D69F => [0x76], 0x1D6A0 => [0x77], 0x1D6A1 => [0x78], - 0x1D6A2 => [0x79], 0x1D6A3 => [0x7A], 0x1D6A4 => [0x131], - 0x1D6A5 => [0x237], 0x1D6A8 => [0x3B1], 0x1D6A9 => [0x3B2], - 0x1D6AA => [0x3B3], 0x1D6AB => [0x3B4], 0x1D6AC => [0x3B5], - 0x1D6AD => [0x3B6], 0x1D6AE => [0x3B7], 0x1D6AF => [0x3B8], - 0x1D6B0 => [0x3B9], 0x1D6B1 => [0x3BA], 0x1D6B2 => [0x3BB], - 0x1D6B3 => [0x3BC], 0x1D6B4 => [0x3BD], 0x1D6B5 => [0x3BE], - 0x1D6B6 => [0x3BF], 0x1D6B7 => [0x3C0], 0x1D6B8 => [0x3C1], - 0x1D6B9 => [0x3B8], 0x1D6BA => [0x3C3], 0x1D6BB => [0x3C4], - 0x1D6BC => [0x3C5], 0x1D6BD => [0x3C6], 0x1D6BE => [0x3C7], - 0x1D6BF => [0x3C8], 0x1D6C0 => [0x3C9], 0x1D6C1 => [0x2207], - 0x1D6C2 => [0x3B1], 0x1D6C3 => [0x3B2], 0x1D6C4 => [0x3B3], - 0x1D6C5 => [0x3B4], 0x1D6C6 => [0x3B5], 0x1D6C7 => [0x3B6], - 0x1D6C8 => [0x3B7], 0x1D6C9 => [0x3B8], 0x1D6CA => [0x3B9], - 0x1D6CB => [0x3BA], 0x1D6CC => [0x3BB], 0x1D6CD => [0x3BC], - 0x1D6CE => [0x3BD], 0x1D6CF => [0x3BE], 0x1D6D0 => [0x3BF], - 0x1D6D1 => [0x3C0], 0x1D6D2 => [0x3C1], 0x1D6D3 => [0x3C3], - 0x1D6D4 => [0x3C3], 0x1D6D5 => [0x3C4], 0x1D6D6 => [0x3C5], - 0x1D6D7 => [0x3C6], 0x1D6D8 => [0x3C7], 0x1D6D9 => [0x3C8], - 0x1D6DA => [0x3C9], 0x1D6DB => [0x2202], 0x1D6DC => [0x3B5], - 0x1D6DD => [0x3B8], 0x1D6DE => [0x3BA], 0x1D6DF => [0x3C6], - 0x1D6E0 => [0x3C1], 0x1D6E1 => [0x3C0], 0x1D6E2 => [0x3B1], - 0x1D6E3 => [0x3B2], 0x1D6E4 => [0x3B3], 0x1D6E5 => [0x3B4], - 0x1D6E6 => [0x3B5], 0x1D6E7 => [0x3B6], 0x1D6E8 => [0x3B7], - 0x1D6E9 => [0x3B8], 0x1D6EA => [0x3B9], 0x1D6EB => [0x3BA], - 0x1D6EC => [0x3BB], 0x1D6ED => [0x3BC], 0x1D6EE => [0x3BD], - 0x1D6EF => [0x3BE], 0x1D6F0 => [0x3BF], 0x1D6F1 => [0x3C0], - 0x1D6F2 => [0x3C1], 0x1D6F3 => [0x3B8], 0x1D6F4 => [0x3C3], - 0x1D6F5 => [0x3C4], 0x1D6F6 => [0x3C5], 0x1D6F7 => [0x3C6], - 0x1D6F8 => [0x3C7], 0x1D6F9 => [0x3C8], 0x1D6FA => [0x3C9], - 0x1D6FB => [0x2207], 0x1D6FC => [0x3B1], 0x1D6FD => [0x3B2], - 0x1D6FE => [0x3B3], 0x1D6FF => [0x3B4], 0x1D700 => [0x3B5], - 0x1D701 => [0x3B6], 0x1D702 => [0x3B7], 0x1D703 => [0x3B8], - 0x1D704 => [0x3B9], 0x1D705 => [0x3BA], 0x1D706 => [0x3BB], - 0x1D707 => [0x3BC], 0x1D708 => [0x3BD], 0x1D709 => [0x3BE], - 0x1D70A => [0x3BF], 0x1D70B => [0x3C0], 0x1D70C => [0x3C1], - 0x1D70D => [0x3C3], 0x1D70E => [0x3C3], 0x1D70F => [0x3C4], - 0x1D710 => [0x3C5], 0x1D711 => [0x3C6], 0x1D712 => [0x3C7], - 0x1D713 => [0x3C8], 0x1D714 => [0x3C9], 0x1D715 => [0x2202], - 0x1D716 => [0x3B5], 0x1D717 => [0x3B8], 0x1D718 => [0x3BA], - 0x1D719 => [0x3C6], 0x1D71A => [0x3C1], 0x1D71B => [0x3C0], - 0x1D71C => [0x3B1], 0x1D71D => [0x3B2], 0x1D71E => [0x3B3], - 0x1D71F => [0x3B4], 0x1D720 => [0x3B5], 0x1D721 => [0x3B6], - 0x1D722 => [0x3B7], 0x1D723 => [0x3B8], 0x1D724 => [0x3B9], - 0x1D725 => [0x3BA], 0x1D726 => [0x3BB], 0x1D727 => [0x3BC], - 0x1D728 => [0x3BD], 0x1D729 => [0x3BE], 0x1D72A => [0x3BF], - 0x1D72B => [0x3C0], 0x1D72C => [0x3C1], 0x1D72D => [0x3B8], - 0x1D72E => [0x3C3], 0x1D72F => [0x3C4], 0x1D730 => [0x3C5], - 0x1D731 => [0x3C6], 0x1D732 => [0x3C7], 0x1D733 => [0x3C8], - 0x1D734 => [0x3C9], 0x1D735 => [0x2207], 0x1D736 => [0x3B1], - 0x1D737 => [0x3B2], 0x1D738 => [0x3B3], 0x1D739 => [0x3B4], - 0x1D73A => [0x3B5], 0x1D73B => [0x3B6], 0x1D73C => [0x3B7], - 0x1D73D => [0x3B8], 0x1D73E => [0x3B9], 0x1D73F => [0x3BA], - 0x1D740 => [0x3BB], 0x1D741 => [0x3BC], 0x1D742 => [0x3BD], - 0x1D743 => [0x3BE], 0x1D744 => [0x3BF], 0x1D745 => [0x3C0], - 0x1D746 => [0x3C1], 0x1D747 => [0x3C3], 0x1D748 => [0x3C3], - 0x1D749 => [0x3C4], 0x1D74A => [0x3C5], 0x1D74B => [0x3C6], - 0x1D74C => [0x3C7], 0x1D74D => [0x3C8], 0x1D74E => [0x3C9], - 0x1D74F => [0x2202], 0x1D750 => [0x3B5], 0x1D751 => [0x3B8], - 0x1D752 => [0x3BA], 0x1D753 => [0x3C6], 0x1D754 => [0x3C1], - 0x1D755 => [0x3C0], 0x1D756 => [0x3B1], 0x1D757 => [0x3B2], - 0x1D758 => [0x3B3], 0x1D759 => [0x3B4], 0x1D75A => [0x3B5], - 0x1D75B => [0x3B6], 0x1D75C => [0x3B7], 0x1D75D => [0x3B8], - 0x1D75E => [0x3B9], 0x1D75F => [0x3BA], 0x1D760 => [0x3BB], - 0x1D761 => [0x3BC], 0x1D762 => [0x3BD], 0x1D763 => [0x3BE], - 0x1D764 => [0x3BF], 0x1D765 => [0x3C0], 0x1D766 => [0x3C1], - 0x1D767 => [0x3B8], 0x1D768 => [0x3C3], 0x1D769 => [0x3C4], - 0x1D76A => [0x3C5], 0x1D76B => [0x3C6], 0x1D76C => [0x3C7], - 0x1D76D => [0x3C8], 0x1D76E => [0x3C9], 0x1D76F => [0x2207], - 0x1D770 => [0x3B1], 0x1D771 => [0x3B2], 0x1D772 => [0x3B3], - 0x1D773 => [0x3B4], 0x1D774 => [0x3B5], 0x1D775 => [0x3B6], - 0x1D776 => [0x3B7], 0x1D777 => [0x3B8], 0x1D778 => [0x3B9], - 0x1D779 => [0x3BA], 0x1D77A => [0x3BB], 0x1D77B => [0x3BC], - 0x1D77C => [0x3BD], 0x1D77D => [0x3BE], 0x1D77E => [0x3BF], - 0x1D77F => [0x3C0], 0x1D780 => [0x3C1], 0x1D781 => [0x3C3], - 0x1D782 => [0x3C3], 0x1D783 => [0x3C4], 0x1D784 => [0x3C5], - 0x1D785 => [0x3C6], 0x1D786 => [0x3C7], 0x1D787 => [0x3C8], - 0x1D788 => [0x3C9], 0x1D789 => [0x2202], 0x1D78A => [0x3B5], - 0x1D78B => [0x3B8], 0x1D78C => [0x3BA], 0x1D78D => [0x3C6], - 0x1D78E => [0x3C1], 0x1D78F => [0x3C0], 0x1D790 => [0x3B1], - 0x1D791 => [0x3B2], 0x1D792 => [0x3B3], 0x1D793 => [0x3B4], - 0x1D794 => [0x3B5], 0x1D795 => [0x3B6], 0x1D796 => [0x3B7], - 0x1D797 => [0x3B8], 0x1D798 => [0x3B9], 0x1D799 => [0x3BA], - 0x1D79A => [0x3BB], 0x1D79B => [0x3BC], 0x1D79C => [0x3BD], - 0x1D79D => [0x3BE], 0x1D79E => [0x3BF], 0x1D79F => [0x3C0], - 0x1D7A0 => [0x3C1], 0x1D7A1 => [0x3B8], 0x1D7A2 => [0x3C3], - 0x1D7A3 => [0x3C4], 0x1D7A4 => [0x3C5], 0x1D7A5 => [0x3C6], - 0x1D7A6 => [0x3C7], 0x1D7A7 => [0x3C8], 0x1D7A8 => [0x3C9], - 0x1D7A9 => [0x2207], 0x1D7AA => [0x3B1], 0x1D7AB => [0x3B2], - 0x1D7AC => [0x3B3], 0x1D7AD => [0x3B4], 0x1D7AE => [0x3B5], - 0x1D7AF => [0x3B6], 0x1D7B0 => [0x3B7], 0x1D7B1 => [0x3B8], - 0x1D7B2 => [0x3B9], 0x1D7B3 => [0x3BA], 0x1D7B4 => [0x3BB], - 0x1D7B5 => [0x3BC], 0x1D7B6 => [0x3BD], 0x1D7B7 => [0x3BE], - 0x1D7B8 => [0x3BF], 0x1D7B9 => [0x3C0], 0x1D7BA => [0x3C1], - 0x1D7BB => [0x3C3], 0x1D7BC => [0x3C3], 0x1D7BD => [0x3C4], - 0x1D7BE => [0x3C5], 0x1D7BF => [0x3C6], 0x1D7C0 => [0x3C7], - 0x1D7C1 => [0x3C8], 0x1D7C2 => [0x3C9], 0x1D7C3 => [0x2202], - 0x1D7C4 => [0x3B5], 0x1D7C5 => [0x3B8], 0x1D7C6 => [0x3BA], - 0x1D7C7 => [0x3C6], 0x1D7C8 => [0x3C1], 0x1D7C9 => [0x3C0], - 0x1D7CA => [0x3DD], 0x1D7CB => [0x3DD], 0x1D7CE => [0x30], - 0x1D7CF => [0x31], 0x1D7D0 => [0x32], 0x1D7D1 => [0x33], - 0x1D7D2 => [0x34], 0x1D7D3 => [0x35], 0x1D7D4 => [0x36], - 0x1D7D5 => [0x37], 0x1D7D6 => [0x38], 0x1D7D7 => [0x39], - 0x1D7D8 => [0x30], 0x1D7D9 => [0x31], 0x1D7DA => [0x32], - 0x1D7DB => [0x33], 0x1D7DC => [0x34], 0x1D7DD => [0x35], - 0x1D7DE => [0x36], 0x1D7DF => [0x37], 0x1D7E0 => [0x38], - 0x1D7E1 => [0x39], 0x1D7E2 => [0x30], 0x1D7E3 => [0x31], - 0x1D7E4 => [0x32], 0x1D7E5 => [0x33], 0x1D7E6 => [0x34], - 0x1D7E7 => [0x35], 0x1D7E8 => [0x36], 0x1D7E9 => [0x37], - 0x1D7EA => [0x38], 0x1D7EB => [0x39], 0x1D7EC => [0x30], - 0x1D7ED => [0x31], 0x1D7EE => [0x32], 0x1D7EF => [0x33], - 0x1D7F0 => [0x34], 0x1D7F1 => [0x35], 0x1D7F2 => [0x36], - 0x1D7F3 => [0x37], 0x1D7F4 => [0x38], 0x1D7F5 => [0x39], - 0x1D7F6 => [0x30], 0x1D7F7 => [0x31], 0x1D7F8 => [0x32], - 0x1D7F9 => [0x33], 0x1D7FA => [0x34], 0x1D7FB => [0x35], - 0x1D7FC => [0x36], 0x1D7FD => [0x37], 0x1D7FE => [0x38], - 0x1D7FF => [0x39], 0x1EE00 => [0x627], 0x1EE01 => [0x628], - 0x1EE02 => [0x62C], 0x1EE03 => [0x62F], 0x1EE05 => [0x648], - 0x1EE06 => [0x632], 0x1EE07 => [0x62D], 0x1EE08 => [0x637], - 0x1EE09 => [0x64A], 0x1EE0A => [0x643], 0x1EE0B => [0x644], - 0x1EE0C => [0x645], 0x1EE0D => [0x646], 0x1EE0E => [0x633], - 0x1EE0F => [0x639], 0x1EE10 => [0x641], 0x1EE11 => [0x635], - 0x1EE12 => [0x642], 0x1EE13 => [0x631], 0x1EE14 => [0x634], - 0x1EE15 => [0x62A], 0x1EE16 => [0x62B], 0x1EE17 => [0x62E], - 0x1EE18 => [0x630], 0x1EE19 => [0x636], 0x1EE1A => [0x638], - 0x1EE1B => [0x63A], 0x1EE1C => [0x66E], 0x1EE1D => [0x6BA], - 0x1EE1E => [0x6A1], 0x1EE1F => [0x66F], 0x1EE21 => [0x628], - 0x1EE22 => [0x62C], 0x1EE24 => [0x647], 0x1EE27 => [0x62D], - 0x1EE29 => [0x64A], 0x1EE2A => [0x643], 0x1EE2B => [0x644], - 0x1EE2C => [0x645], 0x1EE2D => [0x646], 0x1EE2E => [0x633], - 0x1EE2F => [0x639], 0x1EE30 => [0x641], 0x1EE31 => [0x635], - 0x1EE32 => [0x642], 0x1EE34 => [0x634], 0x1EE35 => [0x62A], - 0x1EE36 => [0x62B], 0x1EE37 => [0x62E], 0x1EE39 => [0x636], - 0x1EE3B => [0x63A], 0x1EE42 => [0x62C], 0x1EE47 => [0x62D], - 0x1EE49 => [0x64A], 0x1EE4B => [0x644], 0x1EE4D => [0x646], - 0x1EE4E => [0x633], 0x1EE4F => [0x639], 0x1EE51 => [0x635], - 0x1EE52 => [0x642], 0x1EE54 => [0x634], 0x1EE57 => [0x62E], - 0x1EE59 => [0x636], 0x1EE5B => [0x63A], 0x1EE5D => [0x6BA], - 0x1EE5F => [0x66F], 0x1EE61 => [0x628], 0x1EE62 => [0x62C], - 0x1EE64 => [0x647], 0x1EE67 => [0x62D], 0x1EE68 => [0x637], - 0x1EE69 => [0x64A], 0x1EE6A => [0x643], 0x1EE6C => [0x645], - 0x1EE6D => [0x646], 0x1EE6E => [0x633], 0x1EE6F => [0x639], - 0x1EE70 => [0x641], 0x1EE71 => [0x635], 0x1EE72 => [0x642], - 0x1EE74 => [0x634], 0x1EE75 => [0x62A], 0x1EE76 => [0x62B], - 0x1EE77 => [0x62E], 0x1EE79 => [0x636], 0x1EE7A => [0x638], - 0x1EE7B => [0x63A], 0x1EE7C => [0x66E], 0x1EE7E => [0x6A1], - 0x1EE80 => [0x627], 0x1EE81 => [0x628], 0x1EE82 => [0x62C], - 0x1EE83 => [0x62F], 0x1EE84 => [0x647], 0x1EE85 => [0x648], - 0x1EE86 => [0x632], 0x1EE87 => [0x62D], 0x1EE88 => [0x637], - 0x1EE89 => [0x64A], 0x1EE8B => [0x644], 0x1EE8C => [0x645], - 0x1EE8D => [0x646], 0x1EE8E => [0x633], 0x1EE8F => [0x639], - 0x1EE90 => [0x641], 0x1EE91 => [0x635], 0x1EE92 => [0x642], - 0x1EE93 => [0x631], 0x1EE94 => [0x634], 0x1EE95 => [0x62A], - 0x1EE96 => [0x62B], 0x1EE97 => [0x62E], 0x1EE98 => [0x630], - 0x1EE99 => [0x636], 0x1EE9A => [0x638], 0x1EE9B => [0x63A], - 0x1EEA1 => [0x628], 0x1EEA2 => [0x62C], 0x1EEA3 => [0x62F], - 0x1EEA5 => [0x648], 0x1EEA6 => [0x632], 0x1EEA7 => [0x62D], - 0x1EEA8 => [0x637], 0x1EEA9 => [0x64A], 0x1EEAB => [0x644], - 0x1EEAC => [0x645], 0x1EEAD => [0x646], 0x1EEAE => [0x633], - 0x1EEAF => [0x639], 0x1EEB0 => [0x641], 0x1EEB1 => [0x635], - 0x1EEB2 => [0x642], 0x1EEB3 => [0x631], 0x1EEB4 => [0x634], - 0x1EEB5 => [0x62A], 0x1EEB6 => [0x62B], 0x1EEB7 => [0x62E], - 0x1EEB8 => [0x630], 0x1EEB9 => [0x636], 0x1EEBA => [0x638], - 0x1EEBB => [0x63A], 0x1F12A => [0x3014, 0x73, 0x3015], 0x1F12B => [0x63], - 0x1F12C => [0x72], 0x1F12D => [0x63, 0x64], 0x1F12E => [0x77, 0x7A], - 0x1F130 => [0x61], 0x1F131 => [0x62], 0x1F132 => [0x63], - 0x1F133 => [0x64], 0x1F134 => [0x65], 0x1F135 => [0x66], - 0x1F136 => [0x67], 0x1F137 => [0x68], 0x1F138 => [0x69], - 0x1F139 => [0x6A], 0x1F13A => [0x6B], 0x1F13B => [0x6C], - 0x1F13C => [0x6D], 0x1F13D => [0x6E], 0x1F13E => [0x6F], - 0x1F13F => [0x70], 0x1F140 => [0x71], 0x1F141 => [0x72], - 0x1F142 => [0x73], 0x1F143 => [0x74], 0x1F144 => [0x75], - 0x1F145 => [0x76], 0x1F146 => [0x77], 0x1F147 => [0x78], - 0x1F148 => [0x79], 0x1F149 => [0x7A], 0x1F14A => [0x68, 0x76], - 0x1F14B => [0x6D, 0x76], 0x1F14C => [0x73, 0x64], 0x1F14D => [0x73, 0x73], - 0x1F14E => [0x70, 0x70, 0x76], 0x1F14F => [0x77, 0x63], 0x1F16A => [0x6D, 0x63], - 0x1F16B => [0x6D, 0x64], 0x1F190 => [0x64, 0x6A], 0x1F200 => [0x307B, 0x304B], - 0x1F201 => [0x30B3, 0x30B3], 0x1F202 => [0x30B5], 0x1F210 => [0x624B], - 0x1F211 => [0x5B57], 0x1F212 => [0x53CC], 0x1F213 => [0x30C7], - 0x1F214 => [0x4E8C], 0x1F215 => [0x591A], 0x1F216 => [0x89E3], - 0x1F217 => [0x5929], 0x1F218 => [0x4EA4], 0x1F219 => [0x6620], - 0x1F21A => [0x7121], 0x1F21B => [0x6599], 0x1F21C => [0x524D], - 0x1F21D => [0x5F8C], 0x1F21E => [0x518D], 0x1F21F => [0x65B0], - 0x1F220 => [0x521D], 0x1F221 => [0x7D42], 0x1F222 => [0x751F], - 0x1F223 => [0x8CA9], 0x1F224 => [0x58F0], 0x1F225 => [0x5439], - 0x1F226 => [0x6F14], 0x1F227 => [0x6295], 0x1F228 => [0x6355], - 0x1F229 => [0x4E00], 0x1F22A => [0x4E09], 0x1F22B => [0x904A], - 0x1F22C => [0x5DE6], 0x1F22D => [0x4E2D], 0x1F22E => [0x53F3], - 0x1F22F => [0x6307], 0x1F230 => [0x8D70], 0x1F231 => [0x6253], - 0x1F232 => [0x7981], 0x1F233 => [0x7A7A], 0x1F234 => [0x5408], - 0x1F235 => [0x6E80], 0x1F236 => [0x6709], 0x1F237 => [0x6708], - 0x1F238 => [0x7533], 0x1F239 => [0x5272], 0x1F23A => [0x55B6], - 0x1F240 => [0x3014, 0x672C, 0x3015], 0x1F241 => [0x3014, 0x4E09, 0x3015], 0x1F242 => [0x3014, 0x4E8C, 0x3015], - 0x1F243 => [0x3014, 0x5B89, 0x3015], 0x1F244 => [0x3014, 0x70B9, 0x3015], 0x1F245 => [0x3014, 0x6253, 0x3015], - 0x1F246 => [0x3014, 0x76D7, 0x3015], 0x1F247 => [0x3014, 0x52DD, 0x3015], 0x1F248 => [0x3014, 0x6557, 0x3015], - 0x1F250 => [0x5F97], 0x1F251 => [0x53EF], 0x2F800 => [0x4E3D], - 0x2F801 => [0x4E38], 0x2F802 => [0x4E41], 0x2F803 => [0x20122], - 0x2F804 => [0x4F60], 0x2F805 => [0x4FAE], 0x2F806 => [0x4FBB], - 0x2F807 => [0x5002], 0x2F808 => [0x507A], 0x2F809 => [0x5099], - 0x2F80A => [0x50E7], 0x2F80B => [0x50CF], 0x2F80C => [0x349E], - 0x2F80D => [0x2063A], 0x2F80E => [0x514D], 0x2F80F => [0x5154], - 0x2F810 => [0x5164], 0x2F811 => [0x5177], 0x2F812 => [0x2051C], - 0x2F813 => [0x34B9], 0x2F814 => [0x5167], 0x2F815 => [0x518D], - 0x2F816 => [0x2054B], 0x2F817 => [0x5197], 0x2F818 => [0x51A4], - 0x2F819 => [0x4ECC], 0x2F81A => [0x51AC], 0x2F81B => [0x51B5], - 0x2F81C => [0x291DF], 0x2F81D => [0x51F5], 0x2F81E => [0x5203], - 0x2F81F => [0x34DF], 0x2F820 => [0x523B], 0x2F821 => [0x5246], - 0x2F822 => [0x5272], 0x2F823 => [0x5277], 0x2F824 => [0x3515], - 0x2F825 => [0x52C7], 0x2F826 => [0x52C9], 0x2F827 => [0x52E4], - 0x2F828 => [0x52FA], 0x2F829 => [0x5305], 0x2F82A => [0x5306], - 0x2F82B => [0x5317], 0x2F82C => [0x5349], 0x2F82D => [0x5351], - 0x2F82E => [0x535A], 0x2F82F => [0x5373], 0x2F830 => [0x537D], - 0x2F831 => [0x537F], 0x2F832 => [0x537F], 0x2F833 => [0x537F], - 0x2F834 => [0x20A2C], 0x2F835 => [0x7070], 0x2F836 => [0x53CA], - 0x2F837 => [0x53DF], 0x2F838 => [0x20B63], 0x2F839 => [0x53EB], - 0x2F83A => [0x53F1], 0x2F83B => [0x5406], 0x2F83C => [0x549E], - 0x2F83D => [0x5438], 0x2F83E => [0x5448], 0x2F83F => [0x5468], - 0x2F840 => [0x54A2], 0x2F841 => [0x54F6], 0x2F842 => [0x5510], - 0x2F843 => [0x5553], 0x2F844 => [0x5563], 0x2F845 => [0x5584], - 0x2F846 => [0x5584], 0x2F847 => [0x5599], 0x2F848 => [0x55AB], - 0x2F849 => [0x55B3], 0x2F84A => [0x55C2], 0x2F84B => [0x5716], - 0x2F84C => [0x5606], 0x2F84D => [0x5717], 0x2F84E => [0x5651], - 0x2F84F => [0x5674], 0x2F850 => [0x5207], 0x2F851 => [0x58EE], - 0x2F852 => [0x57CE], 0x2F853 => [0x57F4], 0x2F854 => [0x580D], - 0x2F855 => [0x578B], 0x2F856 => [0x5832], 0x2F857 => [0x5831], - 0x2F858 => [0x58AC], 0x2F859 => [0x214E4], 0x2F85A => [0x58F2], - 0x2F85B => [0x58F7], 0x2F85C => [0x5906], 0x2F85D => [0x591A], - 0x2F85E => [0x5922], 0x2F85F => [0x5962], 0x2F860 => [0x216A8], - 0x2F861 => [0x216EA], 0x2F862 => [0x59EC], 0x2F863 => [0x5A1B], - 0x2F864 => [0x5A27], 0x2F865 => [0x59D8], 0x2F866 => [0x5A66], - 0x2F867 => [0x36EE], 0x2F869 => [0x5B08], 0x2F86A => [0x5B3E], - 0x2F86B => [0x5B3E], 0x2F86C => [0x219C8], 0x2F86D => [0x5BC3], - 0x2F86E => [0x5BD8], 0x2F86F => [0x5BE7], 0x2F870 => [0x5BF3], - 0x2F871 => [0x21B18], 0x2F872 => [0x5BFF], 0x2F873 => [0x5C06], - 0x2F875 => [0x5C22], 0x2F876 => [0x3781], 0x2F877 => [0x5C60], - 0x2F878 => [0x5C6E], 0x2F879 => [0x5CC0], 0x2F87A => [0x5C8D], - 0x2F87B => [0x21DE4], 0x2F87C => [0x5D43], 0x2F87D => [0x21DE6], - 0x2F87E => [0x5D6E], 0x2F87F => [0x5D6B], 0x2F880 => [0x5D7C], - 0x2F881 => [0x5DE1], 0x2F882 => [0x5DE2], 0x2F883 => [0x382F], - 0x2F884 => [0x5DFD], 0x2F885 => [0x5E28], 0x2F886 => [0x5E3D], - 0x2F887 => [0x5E69], 0x2F888 => [0x3862], 0x2F889 => [0x22183], - 0x2F88A => [0x387C], 0x2F88B => [0x5EB0], 0x2F88C => [0x5EB3], - 0x2F88D => [0x5EB6], 0x2F88E => [0x5ECA], 0x2F88F => [0x2A392], - 0x2F890 => [0x5EFE], 0x2F891 => [0x22331], 0x2F892 => [0x22331], - 0x2F893 => [0x8201], 0x2F894 => [0x5F22], 0x2F895 => [0x5F22], - 0x2F896 => [0x38C7], 0x2F897 => [0x232B8], 0x2F898 => [0x261DA], - 0x2F899 => [0x5F62], 0x2F89A => [0x5F6B], 0x2F89B => [0x38E3], - 0x2F89C => [0x5F9A], 0x2F89D => [0x5FCD], 0x2F89E => [0x5FD7], - 0x2F89F => [0x5FF9], 0x2F8A0 => [0x6081], 0x2F8A1 => [0x393A], - 0x2F8A2 => [0x391C], 0x2F8A3 => [0x6094], 0x2F8A4 => [0x226D4], - 0x2F8A5 => [0x60C7], 0x2F8A6 => [0x6148], 0x2F8A7 => [0x614C], - 0x2F8A8 => [0x614E], 0x2F8A9 => [0x614C], 0x2F8AA => [0x617A], - 0x2F8AB => [0x618E], 0x2F8AC => [0x61B2], 0x2F8AD => [0x61A4], - 0x2F8AE => [0x61AF], 0x2F8AF => [0x61DE], 0x2F8B0 => [0x61F2], - 0x2F8B1 => [0x61F6], 0x2F8B2 => [0x6210], 0x2F8B3 => [0x621B], - 0x2F8B4 => [0x625D], 0x2F8B5 => [0x62B1], 0x2F8B6 => [0x62D4], - 0x2F8B7 => [0x6350], 0x2F8B8 => [0x22B0C], 0x2F8B9 => [0x633D], - 0x2F8BA => [0x62FC], 0x2F8BB => [0x6368], 0x2F8BC => [0x6383], - 0x2F8BD => [0x63E4], 0x2F8BE => [0x22BF1], 0x2F8BF => [0x6422], - 0x2F8C0 => [0x63C5], 0x2F8C1 => [0x63A9], 0x2F8C2 => [0x3A2E], - 0x2F8C3 => [0x6469], 0x2F8C4 => [0x647E], 0x2F8C5 => [0x649D], - 0x2F8C6 => [0x6477], 0x2F8C7 => [0x3A6C], 0x2F8C8 => [0x654F], - 0x2F8C9 => [0x656C], 0x2F8CA => [0x2300A], 0x2F8CB => [0x65E3], - 0x2F8CC => [0x66F8], 0x2F8CD => [0x6649], 0x2F8CE => [0x3B19], - 0x2F8CF => [0x6691], 0x2F8D0 => [0x3B08], 0x2F8D1 => [0x3AE4], - 0x2F8D2 => [0x5192], 0x2F8D3 => [0x5195], 0x2F8D4 => [0x6700], - 0x2F8D5 => [0x669C], 0x2F8D6 => [0x80AD], 0x2F8D7 => [0x43D9], - 0x2F8D8 => [0x6717], 0x2F8D9 => [0x671B], 0x2F8DA => [0x6721], - 0x2F8DB => [0x675E], 0x2F8DC => [0x6753], 0x2F8DD => [0x233C3], - 0x2F8DE => [0x3B49], 0x2F8DF => [0x67FA], 0x2F8E0 => [0x6785], - 0x2F8E1 => [0x6852], 0x2F8E2 => [0x6885], 0x2F8E3 => [0x2346D], - 0x2F8E4 => [0x688E], 0x2F8E5 => [0x681F], 0x2F8E6 => [0x6914], - 0x2F8E7 => [0x3B9D], 0x2F8E8 => [0x6942], 0x2F8E9 => [0x69A3], - 0x2F8EA => [0x69EA], 0x2F8EB => [0x6AA8], 0x2F8EC => [0x236A3], - 0x2F8ED => [0x6ADB], 0x2F8EE => [0x3C18], 0x2F8EF => [0x6B21], - 0x2F8F0 => [0x238A7], 0x2F8F1 => [0x6B54], 0x2F8F2 => [0x3C4E], - 0x2F8F3 => [0x6B72], 0x2F8F4 => [0x6B9F], 0x2F8F5 => [0x6BBA], - 0x2F8F6 => [0x6BBB], 0x2F8F7 => [0x23A8D], 0x2F8F8 => [0x21D0B], - 0x2F8F9 => [0x23AFA], 0x2F8FA => [0x6C4E], 0x2F8FB => [0x23CBC], - 0x2F8FC => [0x6CBF], 0x2F8FD => [0x6CCD], 0x2F8FE => [0x6C67], - 0x2F8FF => [0x6D16], 0x2F900 => [0x6D3E], 0x2F901 => [0x6D77], - 0x2F902 => [0x6D41], 0x2F903 => [0x6D69], 0x2F904 => [0x6D78], - 0x2F905 => [0x6D85], 0x2F906 => [0x23D1E], 0x2F907 => [0x6D34], - 0x2F908 => [0x6E2F], 0x2F909 => [0x6E6E], 0x2F90A => [0x3D33], - 0x2F90B => [0x6ECB], 0x2F90C => [0x6EC7], 0x2F90D => [0x23ED1], - 0x2F90E => [0x6DF9], 0x2F90F => [0x6F6E], 0x2F910 => [0x23F5E], - 0x2F911 => [0x23F8E], 0x2F912 => [0x6FC6], 0x2F913 => [0x7039], - 0x2F914 => [0x701E], 0x2F915 => [0x701B], 0x2F916 => [0x3D96], - 0x2F917 => [0x704A], 0x2F918 => [0x707D], 0x2F919 => [0x7077], - 0x2F91A => [0x70AD], 0x2F91B => [0x20525], 0x2F91C => [0x7145], - 0x2F91D => [0x24263], 0x2F91E => [0x719C], 0x2F920 => [0x7228], - 0x2F921 => [0x7235], 0x2F922 => [0x7250], 0x2F923 => [0x24608], - 0x2F924 => [0x7280], 0x2F925 => [0x7295], 0x2F926 => [0x24735], - 0x2F927 => [0x24814], 0x2F928 => [0x737A], 0x2F929 => [0x738B], - 0x2F92A => [0x3EAC], 0x2F92B => [0x73A5], 0x2F92C => [0x3EB8], - 0x2F92D => [0x3EB8], 0x2F92E => [0x7447], 0x2F92F => [0x745C], - 0x2F930 => [0x7471], 0x2F931 => [0x7485], 0x2F932 => [0x74CA], - 0x2F933 => [0x3F1B], 0x2F934 => [0x7524], 0x2F935 => [0x24C36], - 0x2F936 => [0x753E], 0x2F937 => [0x24C92], 0x2F938 => [0x7570], - 0x2F939 => [0x2219F], 0x2F93A => [0x7610], 0x2F93B => [0x24FA1], - 0x2F93C => [0x24FB8], 0x2F93D => [0x25044], 0x2F93E => [0x3FFC], - 0x2F93F => [0x4008], 0x2F940 => [0x76F4], 0x2F941 => [0x250F3], - 0x2F942 => [0x250F2], 0x2F943 => [0x25119], 0x2F944 => [0x25133], - 0x2F945 => [0x771E], 0x2F946 => [0x771F], 0x2F947 => [0x771F], - 0x2F948 => [0x774A], 0x2F949 => [0x4039], 0x2F94A => [0x778B], - 0x2F94B => [0x4046], 0x2F94C => [0x4096], 0x2F94D => [0x2541D], - 0x2F94E => [0x784E], 0x2F94F => [0x788C], 0x2F950 => [0x78CC], - 0x2F951 => [0x40E3], 0x2F952 => [0x25626], 0x2F953 => [0x7956], - 0x2F954 => [0x2569A], 0x2F955 => [0x256C5], 0x2F956 => [0x798F], - 0x2F957 => [0x79EB], 0x2F958 => [0x412F], 0x2F959 => [0x7A40], - 0x2F95A => [0x7A4A], 0x2F95B => [0x7A4F], 0x2F95C => [0x2597C], - 0x2F95D => [0x25AA7], 0x2F95E => [0x25AA7], 0x2F960 => [0x4202], - 0x2F961 => [0x25BAB], 0x2F962 => [0x7BC6], 0x2F963 => [0x7BC9], - 0x2F964 => [0x4227], 0x2F965 => [0x25C80], 0x2F966 => [0x7CD2], - 0x2F967 => [0x42A0], 0x2F968 => [0x7CE8], 0x2F969 => [0x7CE3], - 0x2F96A => [0x7D00], 0x2F96B => [0x25F86], 0x2F96C => [0x7D63], - 0x2F96D => [0x4301], 0x2F96E => [0x7DC7], 0x2F96F => [0x7E02], - 0x2F970 => [0x7E45], 0x2F971 => [0x4334], 0x2F972 => [0x26228], - 0x2F973 => [0x26247], 0x2F974 => [0x4359], 0x2F975 => [0x262D9], - 0x2F976 => [0x7F7A], 0x2F977 => [0x2633E], 0x2F978 => [0x7F95], - 0x2F979 => [0x7FFA], 0x2F97A => [0x8005], 0x2F97B => [0x264DA], - 0x2F97C => [0x26523], 0x2F97D => [0x8060], 0x2F97E => [0x265A8], - 0x2F97F => [0x8070], 0x2F980 => [0x2335F], 0x2F981 => [0x43D5], - 0x2F982 => [0x80B2], 0x2F983 => [0x8103], 0x2F984 => [0x440B], - 0x2F985 => [0x813E], 0x2F986 => [0x5AB5], 0x2F987 => [0x267A7], - 0x2F988 => [0x267B5], 0x2F989 => [0x23393], 0x2F98A => [0x2339C], - 0x2F98B => [0x8201], 0x2F98C => [0x8204], 0x2F98D => [0x8F9E], - 0x2F98E => [0x446B], 0x2F98F => [0x8291], 0x2F990 => [0x828B], - 0x2F991 => [0x829D], 0x2F992 => [0x52B3], 0x2F993 => [0x82B1], - 0x2F994 => [0x82B3], 0x2F995 => [0x82BD], 0x2F996 => [0x82E6], - 0x2F997 => [0x26B3C], 0x2F998 => [0x82E5], 0x2F999 => [0x831D], - 0x2F99A => [0x8363], 0x2F99B => [0x83AD], 0x2F99C => [0x8323], - 0x2F99D => [0x83BD], 0x2F99E => [0x83E7], 0x2F99F => [0x8457], - 0x2F9A0 => [0x8353], 0x2F9A1 => [0x83CA], 0x2F9A2 => [0x83CC], - 0x2F9A3 => [0x83DC], 0x2F9A4 => [0x26C36], 0x2F9A5 => [0x26D6B], - 0x2F9A6 => [0x26CD5], 0x2F9A7 => [0x452B], 0x2F9A8 => [0x84F1], - 0x2F9A9 => [0x84F3], 0x2F9AA => [0x8516], 0x2F9AB => [0x273CA], - 0x2F9AC => [0x8564], 0x2F9AD => [0x26F2C], 0x2F9AE => [0x455D], - 0x2F9AF => [0x4561], 0x2F9B0 => [0x26FB1], 0x2F9B1 => [0x270D2], - 0x2F9B2 => [0x456B], 0x2F9B3 => [0x8650], 0x2F9B4 => [0x865C], - 0x2F9B5 => [0x8667], 0x2F9B6 => [0x8669], 0x2F9B7 => [0x86A9], - 0x2F9B8 => [0x8688], 0x2F9B9 => [0x870E], 0x2F9BA => [0x86E2], - 0x2F9BB => [0x8779], 0x2F9BC => [0x8728], 0x2F9BD => [0x876B], - 0x2F9BE => [0x8786], 0x2F9C0 => [0x87E1], 0x2F9C1 => [0x8801], - 0x2F9C2 => [0x45F9], 0x2F9C3 => [0x8860], 0x2F9C4 => [0x8863], - 0x2F9C5 => [0x27667], 0x2F9C6 => [0x88D7], 0x2F9C7 => [0x88DE], - 0x2F9C8 => [0x4635], 0x2F9C9 => [0x88FA], 0x2F9CA => [0x34BB], - 0x2F9CB => [0x278AE], 0x2F9CC => [0x27966], 0x2F9CD => [0x46BE], - 0x2F9CE => [0x46C7], 0x2F9CF => [0x8AA0], 0x2F9D0 => [0x8AED], - 0x2F9D1 => [0x8B8A], 0x2F9D2 => [0x8C55], 0x2F9D3 => [0x27CA8], - 0x2F9D4 => [0x8CAB], 0x2F9D5 => [0x8CC1], 0x2F9D6 => [0x8D1B], - 0x2F9D7 => [0x8D77], 0x2F9D8 => [0x27F2F], 0x2F9D9 => [0x20804], - 0x2F9DA => [0x8DCB], 0x2F9DB => [0x8DBC], 0x2F9DC => [0x8DF0], - 0x2F9DD => [0x208DE], 0x2F9DE => [0x8ED4], 0x2F9DF => [0x8F38], - 0x2F9E0 => [0x285D2], 0x2F9E1 => [0x285ED], 0x2F9E2 => [0x9094], - 0x2F9E3 => [0x90F1], 0x2F9E4 => [0x9111], 0x2F9E5 => [0x2872E], - 0x2F9E6 => [0x911B], 0x2F9E7 => [0x9238], 0x2F9E8 => [0x92D7], - 0x2F9E9 => [0x92D8], 0x2F9EA => [0x927C], 0x2F9EB => [0x93F9], - 0x2F9EC => [0x9415], 0x2F9ED => [0x28BFA], 0x2F9EE => [0x958B], - 0x2F9EF => [0x4995], 0x2F9F0 => [0x95B7], 0x2F9F1 => [0x28D77], - 0x2F9F2 => [0x49E6], 0x2F9F3 => [0x96C3], 0x2F9F4 => [0x5DB2], - 0x2F9F5 => [0x9723], 0x2F9F6 => [0x29145], 0x2F9F7 => [0x2921A], - 0x2F9F8 => [0x4A6E], 0x2F9F9 => [0x4A76], 0x2F9FA => [0x97E0], - 0x2F9FB => [0x2940A], 0x2F9FC => [0x4AB2], 0x2F9FD => [0x29496], - 0x2F9FE => [0x980B], 0x2F9FF => [0x980B], 0x2FA00 => [0x9829], - 0x2FA01 => [0x295B6], 0x2FA02 => [0x98E2], 0x2FA03 => [0x4B33], - 0x2FA04 => [0x9929], 0x2FA05 => [0x99A7], 0x2FA06 => [0x99C2], - 0x2FA07 => [0x99FE], 0x2FA08 => [0x4BCE], 0x2FA09 => [0x29B30], - 0x2FA0A => [0x9B12], 0x2FA0B => [0x9C40], 0x2FA0C => [0x9CFD], - 0x2FA0D => [0x4CCE], 0x2FA0E => [0x4CED], 0x2FA0F => [0x9D67], - 0x2FA10 => [0x2A0CE], 0x2FA11 => [0x4CF8], 0x2FA12 => [0x2A105], - 0x2FA13 => [0x2A20E], 0x2FA14 => [0x2A291], 0x2FA15 => [0x9EBB], - 0x2FA16 => [0x4D56], 0x2FA17 => [0x9EF9], 0x2FA18 => [0x9EFE], - 0x2FA19 => [0x9F05], 0x2FA1A => [0x9F0F], 0x2FA1B => [0x9F16], - 0x2FA1C => [0x9F3B], 0x2FA1D => [0x2A600] - ]; - public $normalizeCombiningClasses = [ - 0x334 => 1, 0x335 => 1, 0x336 => 1, 0x337 => 1, - 0x338 => 1, 0x93C => 7, 0x9BC => 7, 0xA3C => 7, 0xABC => 7, - 0xB3C => 7, 0xCBC => 7, 0x1037 => 7, 0x3099 => 8, 0x309A => 8, - 0x94D => 9, 0x9CD => 9, 0xA4D => 9, 0xACD => 9, 0xB4D => 9, - 0xBCD => 9, 0xC4D => 9, 0xCCD => 9, 0xD4D => 9, 0xDCA => 9, - 0xE3A => 9, 0xF84 => 9, 0x1039 => 9, 0x1714 => 9, 0x1734 => 9, - 0x17D2 => 9, 0x5B0 => 10, 0x5B1 => 11, 0x5B2 => 12, 0x5B3 => 13, - 0x5B4 => 14, 0x5B5 => 15, 0x5B6 => 16, 0x5B7 => 17, 0x5B8 => 18, - 0x5B9 => 19, 0x5BB => 20, 0x5Bc => 21, 0x5BD => 22, 0x5BF => 23, - 0x5C1 => 24, 0x5C2 => 25, 0xFB1E => 26, 0x64B => 27, 0x64C => 28, - 0x64D => 29, 0x64E => 30, 0x64F => 31, 0x650 => 32, 0x651 => 33, - 0x652 => 34, 0x670 => 35, 0x711 => 36, 0xC55 => 84, 0xC56 => 91, - 0xE38 => 103, 0xE39 => 103, 0xE48 => 107, 0xE49 => 107, 0xE4A => 107, - 0xE4B => 107, 0xEB8 => 118, 0xEB9 => 118, 0xEC8 => 122, 0xEC9 => 122, - 0xECA => 122, 0xECB => 122, 0xF71 => 129, 0xF72 => 130, 0xF7A => 130, - 0xF7B => 130, 0xF7C => 130, 0xF7D => 130, 0xF80 => 130, 0xF74 => 132, - 0x321 => 202, 0x322 => 202, 0x327 => 202, 0x328 => 202, 0x31B => 216, - 0xF39 => 216, 0x1D165 => 216, 0x1D166 => 216, 0x1D16E => 216, 0x1D16F => 216, - 0x1D170 => 216, 0x1D171 => 216, 0x1D172 => 216, 0x302A => 218, 0x316 => 220, - 0x317 => 220, 0x318 => 220, 0x319 => 220, 0x31C => 220, 0x31D => 220, - 0x31E => 220, 0x31F => 220, 0x320 => 220, 0x323 => 220, 0x324 => 220, - 0x325 => 220, 0x326 => 220, 0x329 => 220, 0x32A => 220, 0x32B => 220, - 0x32C => 220, 0x32D => 220, 0x32E => 220, 0x32F => 220, 0x330 => 220, - 0x331 => 220, 0x332 => 220, 0x333 => 220, 0x339 => 220, 0x33A => 220, - 0x33B => 220, 0x33C => 220, 0x347 => 220, 0x348 => 220, 0x349 => 220, - 0x34D => 220, 0x34E => 220, 0x353 => 220, 0x354 => 220, 0x355 => 220, - 0x356 => 220, 0x591 => 220, 0x596 => 220, 0x59B => 220, 0x5A3 => 220, - 0x5A4 => 220, 0x5A5 => 220, 0x5A6 => 220, 0x5A7 => 220, 0x5AA => 220, - 0x655 => 220, 0x656 => 220, 0x6E3 => 220, 0x6EA => 220, 0x6ED => 220, - 0x731 => 220, 0x734 => 220, 0x737 => 220, 0x738 => 220, 0x739 => 220, - 0x73B => 220, 0x73C => 220, 0x73E => 220, 0x742 => 220, 0x744 => 220, - 0x746 => 220, 0x748 => 220, 0x952 => 220, 0xF18 => 220, 0xF19 => 220, - 0xF35 => 220, 0xF37 => 220, 0xFC6 => 220, 0x193B => 220, 0x20E8 => 220, - 0x1D17B => 220, 0x1D17C => 220, 0x1D17D => 220, 0x1D17E => 220, 0x1D17F => 220, - 0x1D180 => 220, 0x1D181 => 220, 0x1D182 => 220, 0x1D18A => 220, 0x1D18B => 220, - 0x59A => 222, 0x5AD => 222, 0x1929 => 222, 0x302D => 222, 0x302E => 224, - 0x302F => 224, 0x1D16D => 226, 0x5AE => 228, 0x18A9 => 228, 0x302B => 228, - 0x300 => 230, 0x301 => 230, 0x302 => 230, 0x303 => 230, 0x304 => 230, - 0x305 => 230, 0x306 => 230, 0x307 => 230, 0x308 => 230, 0x309 => 230, - 0x30A => 230, 0x30B => 230, 0x30C => 230, 0x30D => 230, 0x30E => 230, - 0x30F => 230, 0x310 => 230, 0x311 => 230, 0x312 => 230, 0x313 => 230, - 0x314 => 230, 0x33D => 230, 0x33E => 230, 0x33F => 230, 0x340 => 230, - 0x341 => 230, 0x342 => 230, 0x343 => 230, 0x344 => 230, 0x346 => 230, - 0x34A => 230, 0x34B => 230, 0x34C => 230, 0x350 => 230, 0x351 => 230, - 0x352 => 230, 0x357 => 230, 0x363 => 230, 0x364 => 230, 0x365 => 230, - 0x366 => 230, 0x367 => 230, 0x368 => 230, 0x369 => 230, 0x36A => 230, - 0x36B => 230, 0x36C => 230, 0x36D => 230, 0x36E => 230, 0x36F => 230, - 0x483 => 230, 0x484 => 230, 0x485 => 230, 0x486 => 230, 0x592 => 230, - 0x593 => 230, 0x594 => 230, 0x595 => 230, 0x597 => 230, 0x598 => 230, - 0x599 => 230, 0x59C => 230, 0x59D => 230, 0x59E => 230, 0x59F => 230, - 0x5A0 => 230, 0x5A1 => 230, 0x5A8 => 230, 0x5A9 => 230, 0x5AB => 230, - 0x5AC => 230, 0x5AF => 230, 0x5C4 => 230, 0x610 => 230, 0x611 => 230, - 0x612 => 230, 0x613 => 230, 0x614 => 230, 0x615 => 230, 0x653 => 230, - 0x654 => 230, 0x657 => 230, 0x658 => 230, 0x6D6 => 230, 0x6D7 => 230, - 0x6D8 => 230, 0x6D9 => 230, 0x6DA => 230, 0x6DB => 230, 0x6DC => 230, - 0x6DF => 230, 0x6E0 => 230, 0x6E1 => 230, 0x6E2 => 230, 0x6E4 => 230, - 0x6E7 => 230, 0x6E8 => 230, 0x6EB => 230, 0x6EC => 230, 0x730 => 230, - 0x732 => 230, 0x733 => 230, 0x735 => 230, 0x736 => 230, 0x73A => 230, - 0x73D => 230, 0x73F => 230, 0x740 => 230, 0x741 => 230, 0x743 => 230, - 0x745 => 230, 0x747 => 230, 0x749 => 230, 0x74A => 230, 0x951 => 230, - 0x953 => 230, 0x954 => 230, 0xF82 => 230, 0xF83 => 230, 0xF86 => 230, - 0xF87 => 230, 0x170D => 230, 0x193A => 230, 0x20D0 => 230, 0x20D1 => 230, - 0x20D4 => 230, 0x20D5 => 230, 0x20D6 => 230, 0x20D7 => 230, 0x20DB => 230, - 0x20DC => 230, 0x20E1 => 230, 0x20E7 => 230, 0x20E9 => 230, 0xFE20 => 230, - 0xFE21 => 230, 0xFE22 => 230, 0xFE23 => 230, 0x1D185 => 230, 0x1D186 => 230, - 0x1D187 => 230, 0x1D189 => 230, 0x1D188 => 230, 0x1D1AA => 230, 0x1D1AB => 230, - 0x1D1AC => 230, 0x1D1AD => 230, 0x315 => 232, 0x31A => 232, 0x302C => 232, - 0x35F => 233, 0x362 => 233, 0x35D => 234, 0x35E => 234, 0x360 => 234, - 0x361 => 234, 0x345 => 240 - ]; -} diff --git a/libraries/vendor/mso/idna-convert/src/NamePrepData2003.php b/libraries/vendor/mso/idna-convert/src/NamePrepData2003.php deleted file mode 100644 index baa05152d519b..0000000000000 --- a/libraries/vendor/mso/idna-convert/src/NamePrepData2003.php +++ /dev/null @@ -1,501 +0,0 @@ - [0x61], 0x42 => [0x62], 0x43 => [0x63], - 0x44 => [0x64], 0x45 => [0x65], 0x46 => [0x66], 0x47 => [0x67], - 0x48 => [0x68], 0x49 => [0x69], 0x4A => [0x6A], 0x4B => [0x6B], - 0x4C => [0x6C], 0x4D => [0x6D], 0x4E => [0x6E], 0x4F => [0x6F], - 0x50 => [0x70], 0x51 => [0x71], 0x52 => [0x72], 0x53 => [0x73], - 0x54 => [0x74], 0x55 => [0x75], 0x56 => [0x76], 0x57 => [0x77], - 0x58 => [0x78], 0x59 => [0x79], 0x5A => [0x7A], 0xB5 => [0x3BC], - 0xC0 => [0xE0], 0xC1 => [0xE1], 0xC2 => [0xE2], 0xC3 => [0xE3], - 0xC4 => [0xE4], 0xC5 => [0xE5], 0xC6 => [0xE6], 0xC7 => [0xE7], - 0xC8 => [0xE8], 0xC9 => [0xE9], 0xCA => [0xEA], 0xCB => [0xEB], - 0xCC => [0xEC], 0xCD => [0xED], 0xCE => [0xEE], 0xCF => [0xEF], - 0xD0 => [0xF0], 0xD1 => [0xF1], 0xD2 => [0xF2], 0xD3 => [0xF3], - 0xD4 => [0xF4], 0xD5 => [0xF5], 0xD6 => [0xF6], 0xD8 => [0xF8], - 0xD9 => [0xF9], 0xDA => [0xFA], 0xDB => [0xFB], 0xDC => [0xFC], - 0xDD => [0xFD], 0xDE => [0xFE], 0xDF => [0x73, 0x73], - 0x100 => [0x101], 0x102 => [0x103], 0x104 => [0x105], - 0x106 => [0x107], 0x108 => [0x109], 0x10A => [0x10B], - 0x10C => [0x10D], 0x10E => [0x10F], 0x110 => [0x111], - 0x112 => [0x113], 0x114 => [0x115], 0x116 => [0x117], - 0x118 => [0x119], 0x11A => [0x11B], 0x11C => [0x11D], - 0x11E => [0x11F], 0x120 => [0x121], 0x122 => [0x123], - 0x124 => [0x125], 0x126 => [0x127], 0x128 => [0x129], - 0x12A => [0x12B], 0x12C => [0x12D], 0x12E => [0x12F], - 0x130 => [0x69, 0x307], 0x132 => [0x133], 0x134 => [0x135], - 0x136 => [0x137], 0x139 => [0x13A], 0x13B => [0x13C], - 0x13D => [0x13E], 0x13F => [0x140], 0x141 => [0x142], - 0x143 => [0x144], 0x145 => [0x146], 0x147 => [0x148], - 0x149 => [0x2BC, 0x6E], 0x14A => [0x14B], 0x14C => [0x14D], - 0x14E => [0x14F], 0x150 => [0x151], 0x152 => [0x153], - 0x154 => [0x155], 0x156 => [0x157], 0x158 => [0x159], - 0x15A => [0x15B], 0x15C => [0x15D], 0x15E => [0x15F], - 0x160 => [0x161], 0x162 => [0x163], 0x164 => [0x165], - 0x166 => [0x167], 0x168 => [0x169], 0x16A => [0x16B], - 0x16C => [0x16D], 0x16E => [0x16F], 0x170 => [0x171], - 0x172 => [0x173], 0x174 => [0x175], 0x176 => [0x177], - 0x178 => [0xFF], 0x179 => [0x17A], 0x17B => [0x17C], - 0x17D => [0x17E], 0x17F => [0x73], 0x181 => [0x253], - 0x182 => [0x183], 0x184 => [0x185], 0x186 => [0x254], - 0x187 => [0x188], 0x189 => [0x256], 0x18A => [0x257], - 0x18B => [0x18C], 0x18E => [0x1DD], 0x18F => [0x259], - 0x190 => [0x25B], 0x191 => [0x192], 0x193 => [0x260], - 0x194 => [0x263], 0x196 => [0x269], 0x197 => [0x268], - 0x198 => [0x199], 0x19C => [0x26F], 0x19D => [0x272], - 0x19F => [0x275], 0x1A0 => [0x1A1], 0x1A2 => [0x1A3], - 0x1A4 => [0x1A5], 0x1A6 => [0x280], 0x1A7 => [0x1A8], - 0x1A9 => [0x283], 0x1AC => [0x1AD], 0x1AE => [0x288], - 0x1AF => [0x1B0], 0x1B1 => [0x28A], 0x1B2 => [0x28B], - 0x1B3 => [0x1B4], 0x1B5 => [0x1B6], 0x1B7 => [0x292], - 0x1B8 => [0x1B9], 0x1BC => [0x1BD], 0x1C4 => [0x1C6], - 0x1C5 => [0x1C6], 0x1C7 => [0x1C9], 0x1C8 => [0x1C9], - 0x1CA => [0x1CC], 0x1CB => [0x1CC], 0x1CD => [0x1CE], - 0x1CF => [0x1D0], 0x1D1 => [0x1D2], 0x1D3 => [0x1D4], - 0x1D5 => [0x1D6], 0x1D7 => [0x1D8], 0x1D9 => [0x1DA], - 0x1DB => [0x1DC], 0x1DE => [0x1DF], 0x1E0 => [0x1E1], - 0x1E2 => [0x1E3], 0x1E4 => [0x1E5], 0x1E6 => [0x1E7], - 0x1E8 => [0x1E9], 0x1EA => [0x1EB], 0x1EC => [0x1ED], - 0x1EE => [0x1EF], 0x1F0 => [0x6A, 0x30C], 0x1F1 => [0x1F3], - 0x1F2 => [0x1F3], 0x1F4 => [0x1F5], 0x1F6 => [0x195], - 0x1F7 => [0x1BF], 0x1F8 => [0x1F9], 0x1FA => [0x1FB], - 0x1FC => [0x1FD], 0x1FE => [0x1FF], 0x200 => [0x201], - 0x202 => [0x203], 0x204 => [0x205], 0x206 => [0x207], - 0x208 => [0x209], 0x20A => [0x20B], 0x20C => [0x20D], - 0x20E => [0x20F], 0x210 => [0x211], 0x212 => [0x213], - 0x214 => [0x215], 0x216 => [0x217], 0x218 => [0x219], - 0x21A => [0x21B], 0x21C => [0x21D], 0x21E => [0x21F], - 0x220 => [0x19E], 0x222 => [0x223], 0x224 => [0x225], - 0x226 => [0x227], 0x228 => [0x229], 0x22A => [0x22B], - 0x22C => [0x22D], 0x22E => [0x22F], 0x230 => [0x231], - 0x232 => [0x233], 0x345 => [0x3B9], 0x37A => [0x20, 0x3B9], - 0x386 => [0x3AC], 0x388 => [0x3AD], 0x389 => [0x3AE], - 0x38A => [0x3AF], 0x38C => [0x3CC], 0x38E => [0x3CD], - 0x38F => [0x3CE], 0x390 => [0x3B9, 0x308, 0x301], - 0x391 => [0x3B1], 0x392 => [0x3B2], 0x393 => [0x3B3], - 0x394 => [0x3B4], 0x395 => [0x3B5], 0x396 => [0x3B6], - 0x397 => [0x3B7], 0x398 => [0x3B8], 0x399 => [0x3B9], - 0x39A => [0x3BA], 0x39B => [0x3BB], 0x39C => [0x3BC], - 0x39D => [0x3BD], 0x39E => [0x3BE], 0x39F => [0x3BF], - 0x3A0 => [0x3C0], 0x3A1 => [0x3C1], 0x3A3 => [0x3C3], - 0x3A4 => [0x3C4], 0x3A5 => [0x3C5], 0x3A6 => [0x3C6], - 0x3A7 => [0x3C7], 0x3A8 => [0x3C8], 0x3A9 => [0x3C9], - 0x3AA => [0x3CA], 0x3AB => [0x3CB], 0x3B0 => [0x3C5, 0x308, 0x301], - 0x3C2 => [0x3C3], 0x3D0 => [0x3B2], 0x3D1 => [0x3B8], - 0x3D2 => [0x3C5], 0x3D3 => [0x3CD], 0x3D4 => [0x3CB], - 0x3D5 => [0x3C6], 0x3D6 => [0x3C0], 0x3D8 => [0x3D9], - 0x3DA => [0x3DB], 0x3DC => [0x3DD], 0x3DE => [0x3DF], - 0x3E0 => [0x3E1], 0x3E2 => [0x3E3], 0x3E4 => [0x3E5], - 0x3E6 => [0x3E7], 0x3E8 => [0x3E9], 0x3EA => [0x3EB], - 0x3EC => [0x3ED], 0x3EE => [0x3EF], 0x3F0 => [0x3BA], - 0x3F1 => [0x3C1], 0x3F2 => [0x3C3], 0x3F4 => [0x3B8], - 0x3F5 => [0x3B5], 0x400 => [0x450], 0x401 => [0x451], - 0x402 => [0x452], 0x403 => [0x453], 0x404 => [0x454], - 0x405 => [0x455], 0x406 => [0x456], 0x407 => [0x457], - 0x408 => [0x458], 0x409 => [0x459], 0x40A => [0x45A], - 0x40B => [0x45B], 0x40C => [0x45C], 0x40D => [0x45D], - 0x40E => [0x45E], 0x40F => [0x45F], 0x410 => [0x430], - 0x411 => [0x431], 0x412 => [0x432], 0x413 => [0x433], - 0x414 => [0x434], 0x415 => [0x435], 0x416 => [0x436], - 0x417 => [0x437], 0x418 => [0x438], 0x419 => [0x439], - 0x41A => [0x43A], 0x41B => [0x43B], 0x41C => [0x43C], - 0x41D => [0x43D], 0x41E => [0x43E], 0x41F => [0x43F], - 0x420 => [0x440], 0x421 => [0x441], 0x422 => [0x442], - 0x423 => [0x443], 0x424 => [0x444], 0x425 => [0x445], - 0x426 => [0x446], 0x427 => [0x447], 0x428 => [0x448], - 0x429 => [0x449], 0x42A => [0x44A], 0x42B => [0x44B], - 0x42C => [0x44C], 0x42D => [0x44D], 0x42E => [0x44E], - 0x42F => [0x44F], 0x460 => [0x461], 0x462 => [0x463], - 0x464 => [0x465], 0x466 => [0x467], 0x468 => [0x469], - 0x46A => [0x46B], 0x46C => [0x46D], 0x46E => [0x46F], - 0x470 => [0x471], 0x472 => [0x473], 0x474 => [0x475], - 0x476 => [0x477], 0x478 => [0x479], 0x47A => [0x47B], - 0x47C => [0x47D], 0x47E => [0x47F], 0x480 => [0x481], - 0x48A => [0x48B], 0x48C => [0x48D], 0x48E => [0x48F], - 0x490 => [0x491], 0x492 => [0x493], 0x494 => [0x495], - 0x496 => [0x497], 0x498 => [0x499], 0x49A => [0x49B], - 0x49C => [0x49D], 0x49E => [0x49F], 0x4A0 => [0x4A1], - 0x4A2 => [0x4A3], 0x4A4 => [0x4A5], 0x4A6 => [0x4A7], - 0x4A8 => [0x4A9], 0x4AA => [0x4AB], 0x4AC => [0x4AD], - 0x4AE => [0x4AF], 0x4B0 => [0x4B1], 0x4B2 => [0x4B3], - 0x4B4 => [0x4B5], 0x4B6 => [0x4B7], 0x4B8 => [0x4B9], - 0x4BA => [0x4BB], 0x4BC => [0x4BD], 0x4BE => [0x4BF], - 0x4C1 => [0x4C2], 0x4C3 => [0x4C4], 0x4C5 => [0x4C6], - 0x4C7 => [0x4C8], 0x4C9 => [0x4CA], 0x4CB => [0x4CC], - 0x4CD => [0x4CE], 0x4D0 => [0x4D1], 0x4D2 => [0x4D3], - 0x4D4 => [0x4D5], 0x4D6 => [0x4D7], 0x4D8 => [0x4D9], - 0x4DA => [0x4DB], 0x4DC => [0x4DD], 0x4DE => [0x4DF], - 0x4E0 => [0x4E1], 0x4E2 => [0x4E3], 0x4E4 => [0x4E5], - 0x4E6 => [0x4E7], 0x4E8 => [0x4E9], 0x4EA => [0x4EB], - 0x4EC => [0x4ED], 0x4EE => [0x4EF], 0x4F0 => [0x4F1], - 0x4F2 => [0x4F3], 0x4F4 => [0x4F5], 0x4F8 => [0x4F9], - 0x500 => [0x501], 0x502 => [0x503], 0x504 => [0x505], - 0x506 => [0x507], 0x508 => [0x509], 0x50A => [0x50B], - 0x50C => [0x50D], 0x50E => [0x50F], 0x531 => [0x561], - 0x532 => [0x562], 0x533 => [0x563], 0x534 => [0x564], - 0x535 => [0x565], 0x536 => [0x566], 0x537 => [0x567], - 0x538 => [0x568], 0x539 => [0x569], 0x53A => [0x56A], - 0x53B => [0x56B], 0x53C => [0x56C], 0x53D => [0x56D], - 0x53E => [0x56E], 0x53F => [0x56F], 0x540 => [0x570], - 0x541 => [0x571], 0x542 => [0x572], 0x543 => [0x573], - 0x544 => [0x574], 0x545 => [0x575], 0x546 => [0x576], - 0x547 => [0x577], 0x548 => [0x578], 0x549 => [0x579], - 0x54A => [0x57A], 0x54B => [0x57B], 0x54C => [0x57C], - 0x54D => [0x57D], 0x54E => [0x57E], 0x54F => [0x57F], - 0x550 => [0x580], 0x551 => [0x581], 0x552 => [0x582], - 0x553 => [0x583], 0x554 => [0x584], 0x555 => [0x585], - 0x556 => [0x586], 0x587 => [0x565, 0x582], 0xE33 => [0xE4D, 0xE32], - 0x1E00 => [0x1E01], 0x1E02 => [0x1E03], 0x1E04 => [0x1E05], - 0x1E06 => [0x1E07], 0x1E08 => [0x1E09], 0x1E0A => [0x1E0B], - 0x1E0C => [0x1E0D], 0x1E0E => [0x1E0F], 0x1E10 => [0x1E11], - 0x1E12 => [0x1E13], 0x1E14 => [0x1E15], 0x1E16 => [0x1E17], - 0x1E18 => [0x1E19], 0x1E1A => [0x1E1B], 0x1E1C => [0x1E1D], - 0x1E1E => [0x1E1F], 0x1E20 => [0x1E21], 0x1E22 => [0x1E23], - 0x1E24 => [0x1E25], 0x1E26 => [0x1E27], 0x1E28 => [0x1E29], - 0x1E2A => [0x1E2B], 0x1E2C => [0x1E2D], 0x1E2E => [0x1E2F], - 0x1E30 => [0x1E31], 0x1E32 => [0x1E33], 0x1E34 => [0x1E35], - 0x1E36 => [0x1E37], 0x1E38 => [0x1E39], 0x1E3A => [0x1E3B], - 0x1E3C => [0x1E3D], 0x1E3E => [0x1E3F], 0x1E40 => [0x1E41], - 0x1E42 => [0x1E43], 0x1E44 => [0x1E45], 0x1E46 => [0x1E47], - 0x1E48 => [0x1E49], 0x1E4A => [0x1E4B], 0x1E4C => [0x1E4D], - 0x1E4E => [0x1E4F], 0x1E50 => [0x1E51], 0x1E52 => [0x1E53], - 0x1E54 => [0x1E55], 0x1E56 => [0x1E57], 0x1E58 => [0x1E59], - 0x1E5A => [0x1E5B], 0x1E5C => [0x1E5D], 0x1E5E => [0x1E5F], - 0x1E60 => [0x1E61], 0x1E62 => [0x1E63], 0x1E64 => [0x1E65], - 0x1E66 => [0x1E67], 0x1E68 => [0x1E69], 0x1E6A => [0x1E6B], - 0x1E6C => [0x1E6D], 0x1E6E => [0x1E6F], 0x1E70 => [0x1E71], - 0x1E72 => [0x1E73], 0x1E74 => [0x1E75], 0x1E76 => [0x1E77], - 0x1E78 => [0x1E79], 0x1E7A => [0x1E7B], 0x1E7C => [0x1E7D], - 0x1E7E => [0x1E7F], 0x1E80 => [0x1E81], 0x1E82 => [0x1E83], - 0x1E84 => [0x1E85], 0x1E86 => [0x1E87], 0x1E88 => [0x1E89], - 0x1E8A => [0x1E8B], 0x1E8C => [0x1E8D], 0x1E8E => [0x1E8F], - 0x1E90 => [0x1E91], 0x1E92 => [0x1E93], 0x1E94 => [0x1E95], - 0x1E96 => [0x68, 0x331], 0x1E97 => [0x74, 0x308], 0x1E98 => [0x77, 0x30A], - 0x1E99 => [0x79, 0x30A], 0x1E9A => [0x61, 0x2BE], 0x1E9B => [0x1E61], - 0x1EA0 => [0x1EA1], 0x1EA2 => [0x1EA3], 0x1EA4 => [0x1EA5], - 0x1EA6 => [0x1EA7], 0x1EA8 => [0x1EA9], 0x1EAA => [0x1EAB], - 0x1EAC => [0x1EAD], 0x1EAE => [0x1EAF], 0x1EB0 => [0x1EB1], - 0x1EB2 => [0x1EB3], 0x1EB4 => [0x1EB5], 0x1EB6 => [0x1EB7], - 0x1EB8 => [0x1EB9], 0x1EBA => [0x1EBB], 0x1EBC => [0x1EBD], - 0x1EBE => [0x1EBF], 0x1EC0 => [0x1EC1], 0x1EC2 => [0x1EC3], - 0x1EC4 => [0x1EC5], 0x1EC6 => [0x1EC7], 0x1EC8 => [0x1EC9], - 0x1ECA => [0x1ECB], 0x1ECC => [0x1ECD], 0x1ECE => [0x1ECF], - 0x1ED0 => [0x1ED1], 0x1ED2 => [0x1ED3], 0x1ED4 => [0x1ED5], - 0x1ED6 => [0x1ED7], 0x1ED8 => [0x1ED9], 0x1EDA => [0x1EDB], - 0x1EDC => [0x1EDD], 0x1EDE => [0x1EDF], 0x1EE0 => [0x1EE1], - 0x1EE2 => [0x1EE3], 0x1EE4 => [0x1EE5], 0x1EE6 => [0x1EE7], - 0x1EE8 => [0x1EE9], 0x1EEA => [0x1EEB], 0x1EEC => [0x1EED], - 0x1EEE => [0x1EEF], 0x1EF0 => [0x1EF1], 0x1EF2 => [0x1EF3], - 0x1EF4 => [0x1EF5], 0x1EF6 => [0x1EF7], 0x1EF8 => [0x1EF9], - 0x1F08 => [0x1F00], 0x1F09 => [0x1F01], 0x1F0A => [0x1F02], - 0x1F0B => [0x1F03], 0x1F0C => [0x1F04], 0x1F0D => [0x1F05], - 0x1F0E => [0x1F06], 0x1F0F => [0x1F07], 0x1F18 => [0x1F10], - 0x1F19 => [0x1F11], 0x1F1A => [0x1F12], 0x1F1B => [0x1F13], - 0x1F1C => [0x1F14], 0x1F1D => [0x1F15], 0x1F28 => [0x1F20], - 0x1F29 => [0x1F21], 0x1F2A => [0x1F22], 0x1F2B => [0x1F23], - 0x1F2C => [0x1F24], 0x1F2D => [0x1F25], 0x1F2E => [0x1F26], - 0x1F2F => [0x1F27], 0x1F38 => [0x1F30], 0x1F39 => [0x1F31], - 0x1F3A => [0x1F32], 0x1F3B => [0x1F33], 0x1F3C => [0x1F34], - 0x1F3D => [0x1F35], 0x1F3E => [0x1F36], 0x1F3F => [0x1F37], - 0x1F48 => [0x1F40], 0x1F49 => [0x1F41], 0x1F4A => [0x1F42], - 0x1F4B => [0x1F43], 0x1F4C => [0x1F44], 0x1F4D => [0x1F45], - 0x1F50 => [0x3C5, 0x313], 0x1F52 => [0x3C5, 0x313, 0x300], - 0x1F54 => [0x3C5, 0x313, 0x301], 0x1F56 => [0x3C5, 0x313, 0x342], - 0x1F59 => [0x1F51], 0x1F5B => [0x1F53], 0x1F5D => [0x1F55], - 0x1F5F => [0x1F57], 0x1F68 => [0x1F60], 0x1F69 => [0x1F61], - 0x1F6A => [0x1F62], 0x1F6B => [0x1F63], 0x1F6C => [0x1F64], - 0x1F6D => [0x1F65], 0x1F6E => [0x1F66], 0x1F6F => [0x1F67], - 0x1F80 => [0x1F00, 0x3B9], 0x1F81 => [0x1F01, 0x3B9], - 0x1F82 => [0x1F02, 0x3B9], 0x1F83 => [0x1F03, 0x3B9], - 0x1F84 => [0x1F04, 0x3B9], 0x1F85 => [0x1F05, 0x3B9], - 0x1F86 => [0x1F06, 0x3B9], 0x1F87 => [0x1F07, 0x3B9], - 0x1F88 => [0x1F00, 0x3B9], 0x1F89 => [0x1F01, 0x3B9], - 0x1F8A => [0x1F02, 0x3B9], 0x1F8B => [0x1F03, 0x3B9], - 0x1F8C => [0x1F04, 0x3B9], 0x1F8D => [0x1F05, 0x3B9], - 0x1F8E => [0x1F06, 0x3B9], 0x1F8F => [0x1F07, 0x3B9], - 0x1F90 => [0x1F20, 0x3B9], 0x1F91 => [0x1F21, 0x3B9], - 0x1F92 => [0x1F22, 0x3B9], 0x1F93 => [0x1F23, 0x3B9], - 0x1F94 => [0x1F24, 0x3B9], 0x1F95 => [0x1F25, 0x3B9], - 0x1F96 => [0x1F26, 0x3B9], 0x1F97 => [0x1F27, 0x3B9], - 0x1F98 => [0x1F20, 0x3B9], 0x1F99 => [0x1F21, 0x3B9], - 0x1F9A => [0x1F22, 0x3B9], 0x1F9B => [0x1F23, 0x3B9], - 0x1F9C => [0x1F24, 0x3B9], 0x1F9D => [0x1F25, 0x3B9], - 0x1F9E => [0x1F26, 0x3B9], 0x1F9F => [0x1F27, 0x3B9], - 0x1FA0 => [0x1F60, 0x3B9], 0x1FA1 => [0x1F61, 0x3B9], - 0x1FA2 => [0x1F62, 0x3B9], 0x1FA3 => [0x1F63, 0x3B9], - 0x1FA4 => [0x1F64, 0x3B9], 0x1FA5 => [0x1F65, 0x3B9], - 0x1FA6 => [0x1F66, 0x3B9], 0x1FA7 => [0x1F67, 0x3B9], - 0x1FA8 => [0x1F60, 0x3B9], 0x1FA9 => [0x1F61, 0x3B9], - 0x1FAA => [0x1F62, 0x3B9], 0x1FAB => [0x1F63, 0x3B9], - 0x1FAC => [0x1F64, 0x3B9], 0x1FAD => [0x1F65, 0x3B9], - 0x1FAE => [0x1F66, 0x3B9], 0x1FAF => [0x1F67, 0x3B9], - 0x1FB2 => [0x1F70, 0x3B9], 0x1FB3 => [0x3B1, 0x3B9], - 0x1FB4 => [0x3AC, 0x3B9], 0x1FB6 => [0x3B1, 0x342], - 0x1FB7 => [0x3B1, 0x342, 0x3B9], 0x1FB8 => [0x1FB0], - 0x1FB9 => [0x1FB1], 0x1FBA => [0x1F70], 0x1FBB => [0x1F71], - 0x1FBC => [0x3B1, 0x3B9], 0x1FBE => [0x3B9], - 0x1FC2 => [0x1F74, 0x3B9], 0x1FC3 => [0x3B7, 0x3B9], - 0x1FC4 => [0x3AE, 0x3B9], 0x1FC6 => [0x3B7, 0x342], - 0x1FC7 => [0x3B7, 0x342, 0x3B9], 0x1FC8 => [0x1F72], - 0x1FC9 => [0x1F73], 0x1FCA => [0x1F74], 0x1FCB => [0x1F75], - 0x1FCC => [0x3B7, 0x3B9], 0x1FD2 => [0x3B9, 0x308, 0x300], - 0x1FD3 => [0x3B9, 0x308, 0x301], 0x1FD6 => [0x3B9, 0x342], - 0x1FD7 => [0x3B9, 0x308, 0x342], 0x1FD8 => [0x1FD0], - 0x1FD9 => [0x1FD1], 0x1FDA => [0x1F76], - 0x1FDB => [0x1F77], 0x1FE2 => [0x3C5, 0x308, 0x300], - 0x1FE3 => [0x3C5, 0x308, 0x301], 0x1FE4 => [0x3C1, 0x313], - 0x1FE6 => [0x3C5, 0x342], 0x1FE7 => [0x3C5, 0x308, 0x342], - 0x1FE8 => [0x1FE0], 0x1FE9 => [0x1FE1], - 0x1FEA => [0x1F7A], 0x1FEB => [0x1F7B], - 0x1FEC => [0x1FE5], 0x1FF2 => [0x1F7C, 0x3B9], - 0x1FF3 => [0x3C9, 0x3B9], 0x1FF4 => [0x3CE, 0x3B9], - 0x1FF6 => [0x3C9, 0x342], 0x1FF7 => [0x3C9, 0x342, 0x3B9], - 0x1FF8 => [0x1F78], 0x1FF9 => [0x1F79], 0x1FFA => [0x1F7C], - 0x1FFB => [0x1F7D], 0x1FFC => [0x3C9, 0x3B9], - 0x20A8 => [0x72, 0x73], 0x2102 => [0x63], 0x2103 => [0xB0, 0x63], - 0x2107 => [0x25B], 0x2109 => [0xB0, 0x66], 0x210B => [0x68], - 0x210C => [0x68], 0x210D => [0x68], 0x2110 => [0x69], - 0x2111 => [0x69], 0x2112 => [0x6C], 0x2115 => [0x6E], - 0x2116 => [0x6E, 0x6F], 0x2119 => [0x70], 0x211A => [0x71], - 0x211B => [0x72], 0x211C => [0x72], 0x211D => [0x72], - 0x2120 => [0x73, 0x6D], 0x2121 => [0x74, 0x65, 0x6C], - 0x2122 => [0x74, 0x6D], 0x2124 => [0x7A], 0x2126 => [0x3C9], - 0x2128 => [0x7A], 0x212A => [0x6B], 0x212B => [0xE5], - 0x212C => [0x62], 0x212D => [0x63], 0x2130 => [0x65], - 0x2131 => [0x66], 0x2133 => [0x6D], 0x213E => [0x3B3], - 0x213F => [0x3C0], 0x2145 => [0x64], 0x2160 => [0x2170], - 0x2161 => [0x2171], 0x2162 => [0x2172], 0x2163 => [0x2173], - 0x2164 => [0x2174], 0x2165 => [0x2175], 0x2166 => [0x2176], - 0x2167 => [0x2177], 0x2168 => [0x2178], 0x2169 => [0x2179], - 0x216A => [0x217A], 0x216B => [0x217B], 0x216C => [0x217C], - 0x216D => [0x217D], 0x216E => [0x217E], 0x216F => [0x217F], - 0x24B6 => [0x24D0], 0x24B7 => [0x24D1], 0x24B8 => [0x24D2], - 0x24B9 => [0x24D3], 0x24BA => [0x24D4], 0x24BB => [0x24D5], - 0x24BC => [0x24D6], 0x24BD => [0x24D7], 0x24BE => [0x24D8], - 0x24BF => [0x24D9], 0x24C0 => [0x24DA], 0x24C1 => [0x24DB], - 0x24C2 => [0x24DC], 0x24C3 => [0x24DD], 0x24C4 => [0x24DE], - 0x24C5 => [0x24DF], 0x24C6 => [0x24E0], 0x24C7 => [0x24E1], - 0x24C8 => [0x24E2], 0x24C9 => [0x24E3], 0x24CA => [0x24E4], - 0x24CB => [0x24E5], 0x24CC => [0x24E6], 0x24CD => [0x24E7], - 0x24CE => [0x24E8], 0x24CF => [0x24E9], 0x3371 => [0x68, 0x70, 0x61], - 0x3373 => [0x61, 0x75], 0x3375 => [0x6F, 0x76], - 0x3380 => [0x70, 0x61], 0x3381 => [0x6E, 0x61], - 0x3382 => [0x3BC, 0x61], 0x3383 => [0x6D, 0x61], - 0x3384 => [0x6B, 0x61], 0x3385 => [0x6B, 0x62], - 0x3386 => [0x6D, 0x62], 0x3387 => [0x67, 0x62], - 0x338A => [0x70, 0x66], 0x338B => [0x6E, 0x66], - 0x338C => [0x3BC, 0x66], 0x3390 => [0x68, 0x7A], - 0x3391 => [0x6B, 0x68, 0x7A], 0x3392 => [0x6D, 0x68, 0x7A], - 0x3393 => [0x67, 0x68, 0x7A], 0x3394 => [0x74, 0x68, 0x7A], - 0x33A9 => [0x70, 0x61], 0x33AA => [0x6B, 0x70, 0x61], - 0x33AB => [0x6D, 0x70, 0x61], 0x33AC => [0x67, 0x70, 0x61], - 0x33B4 => [0x70, 0x76], 0x33B5 => [0x6E, 0x76], - 0x33B6 => [0x3BC, 0x76], 0x33B7 => [0x6D, 0x76], - 0x33B8 => [0x6B, 0x76], 0x33B9 => [0x6D, 0x76], - 0x33BA => [0x70, 0x77], 0x33BB => [0x6E, 0x77], - 0x33BC => [0x3BC, 0x77], 0x33BD => [0x6D, 0x77], - 0x33BE => [0x6B, 0x77], 0x33BF => [0x6D, 0x77], - 0x33C0 => [0x6B, 0x3C9], 0x33C1 => [0x6D, 0x3C9], /* - 0x33C2 => array(0x61, 0x2E, 0x6D, 0x2E), */ - 0x33C3 => [0x62, 0x71], 0x33C6 => [0x63, 0x2215, 0x6B, 0x67], - 0x33C7 => [0x63, 0x6F, 0x2E], 0x33C8 => [0x64, 0x62], - 0x33C9 => [0x67, 0x79], 0x33CB => [0x68, 0x70], - 0x33CD => [0x6B, 0x6B], 0x33CE => [0x6B, 0x6D], - 0x33D7 => [0x70, 0x68], 0x33D9 => [0x70, 0x70, 0x6D], - 0x33DA => [0x70, 0x72], 0x33DC => [0x73, 0x76], - 0x33DD => [0x77, 0x62], 0xFB00 => [0x66, 0x66], - 0xFB01 => [0x66, 0x69], 0xFB02 => [0x66, 0x6C], - 0xFB03 => [0x66, 0x66, 0x69], 0xFB04 => [0x66, 0x66, 0x6C], - 0xFB05 => [0x73, 0x74], 0xFB06 => [0x73, 0x74], - 0xFB13 => [0x574, 0x576], 0xFB14 => [0x574, 0x565], - 0xFB15 => [0x574, 0x56B], 0xFB16 => [0x57E, 0x576], - 0xFB17 => [0x574, 0x56D], 0xFF21 => [0xFF41], - 0xFF22 => [0xFF42], 0xFF23 => [0xFF43], 0xFF24 => [0xFF44], - 0xFF25 => [0xFF45], 0xFF26 => [0xFF46], 0xFF27 => [0xFF47], - 0xFF28 => [0xFF48], 0xFF29 => [0xFF49], 0xFF2A => [0xFF4A], - 0xFF2B => [0xFF4B], 0xFF2C => [0xFF4C], 0xFF2D => [0xFF4D], - 0xFF2E => [0xFF4E], 0xFF2F => [0xFF4F], 0xFF30 => [0xFF50], - 0xFF31 => [0xFF51], 0xFF32 => [0xFF52], 0xFF33 => [0xFF53], - 0xFF34 => [0xFF54], 0xFF35 => [0xFF55], 0xFF36 => [0xFF56], - 0xFF37 => [0xFF57], 0xFF38 => [0xFF58], 0xFF39 => [0xFF59], - 0xFF3A => [0xFF5A], 0x10400 => [0x10428], 0x10401 => [0x10429], - 0x10402 => [0x1042A], 0x10403 => [0x1042B], 0x10404 => [0x1042C], - 0x10405 => [0x1042D], 0x10406 => [0x1042E], 0x10407 => [0x1042F], - 0x10408 => [0x10430], 0x10409 => [0x10431], 0x1040A => [0x10432], - 0x1040B => [0x10433], 0x1040C => [0x10434], 0x1040D => [0x10435], - 0x1040E => [0x10436], 0x1040F => [0x10437], 0x10410 => [0x10438], - 0x10411 => [0x10439], 0x10412 => [0x1043A], 0x10413 => [0x1043B], - 0x10414 => [0x1043C], 0x10415 => [0x1043D], 0x10416 => [0x1043E], - 0x10417 => [0x1043F], 0x10418 => [0x10440], 0x10419 => [0x10441], - 0x1041A => [0x10442], 0x1041B => [0x10443], 0x1041C => [0x10444], - 0x1041D => [0x10445], 0x1041E => [0x10446], 0x1041F => [0x10447], - 0x10420 => [0x10448], 0x10421 => [0x10449], 0x10422 => [0x1044A], - 0x10423 => [0x1044B], 0x10424 => [0x1044C], 0x10425 => [0x1044D], - 0x1D400 => [0x61], 0x1D401 => [0x62], 0x1D402 => [0x63], - 0x1D403 => [0x64], 0x1D404 => [0x65], 0x1D405 => [0x66], - 0x1D406 => [0x67], 0x1D407 => [0x68], 0x1D408 => [0x69], - 0x1D409 => [0x6A], 0x1D40A => [0x6B], 0x1D40B => [0x6C], - 0x1D40C => [0x6D], 0x1D40D => [0x6E], 0x1D40E => [0x6F], - 0x1D40F => [0x70], 0x1D410 => [0x71], 0x1D411 => [0x72], - 0x1D412 => [0x73], 0x1D413 => [0x74], 0x1D414 => [0x75], - 0x1D415 => [0x76], 0x1D416 => [0x77], 0x1D417 => [0x78], - 0x1D418 => [0x79], 0x1D419 => [0x7A], 0x1D434 => [0x61], - 0x1D435 => [0x62], 0x1D436 => [0x63], 0x1D437 => [0x64], - 0x1D438 => [0x65], 0x1D439 => [0x66], 0x1D43A => [0x67], - 0x1D43B => [0x68], 0x1D43C => [0x69], 0x1D43D => [0x6A], - 0x1D43E => [0x6B], 0x1D43F => [0x6C], 0x1D440 => [0x6D], - 0x1D441 => [0x6E], 0x1D442 => [0x6F], 0x1D443 => [0x70], - 0x1D444 => [0x71], 0x1D445 => [0x72], 0x1D446 => [0x73], - 0x1D447 => [0x74], 0x1D448 => [0x75], 0x1D449 => [0x76], - 0x1D44A => [0x77], 0x1D44B => [0x78], 0x1D44C => [0x79], - 0x1D44D => [0x7A], 0x1D468 => [0x61], 0x1D469 => [0x62], - 0x1D46A => [0x63], 0x1D46B => [0x64], 0x1D46C => [0x65], - 0x1D46D => [0x66], 0x1D46E => [0x67], 0x1D46F => [0x68], - 0x1D470 => [0x69], 0x1D471 => [0x6A], 0x1D472 => [0x6B], - 0x1D473 => [0x6C], 0x1D474 => [0x6D], 0x1D475 => [0x6E], - 0x1D476 => [0x6F], 0x1D477 => [0x70], 0x1D478 => [0x71], - 0x1D479 => [0x72], 0x1D47A => [0x73], 0x1D47B => [0x74], - 0x1D47C => [0x75], 0x1D47D => [0x76], 0x1D47E => [0x77], - 0x1D47F => [0x78], 0x1D480 => [0x79], 0x1D481 => [0x7A], - 0x1D49C => [0x61], 0x1D49E => [0x63], 0x1D49F => [0x64], - 0x1D4A2 => [0x67], 0x1D4A5 => [0x6A], 0x1D4A6 => [0x6B], - 0x1D4A9 => [0x6E], 0x1D4AA => [0x6F], 0x1D4AB => [0x70], - 0x1D4AC => [0x71], 0x1D4AE => [0x73], 0x1D4AF => [0x74], - 0x1D4B0 => [0x75], 0x1D4B1 => [0x76], 0x1D4B2 => [0x77], - 0x1D4B3 => [0x78], 0x1D4B4 => [0x79], 0x1D4B5 => [0x7A], - 0x1D4D0 => [0x61], 0x1D4D1 => [0x62], 0x1D4D2 => [0x63], - 0x1D4D3 => [0x64], 0x1D4D4 => [0x65], 0x1D4D5 => [0x66], - 0x1D4D6 => [0x67], 0x1D4D7 => [0x68], 0x1D4D8 => [0x69], - 0x1D4D9 => [0x6A], 0x1D4DA => [0x6B], 0x1D4DB => [0x6C], - 0x1D4DC => [0x6D], 0x1D4DD => [0x6E], 0x1D4DE => [0x6F], - 0x1D4DF => [0x70], 0x1D4E0 => [0x71], 0x1D4E1 => [0x72], - 0x1D4E2 => [0x73], 0x1D4E3 => [0x74], 0x1D4E4 => [0x75], - 0x1D4E5 => [0x76], 0x1D4E6 => [0x77], 0x1D4E7 => [0x78], - 0x1D4E8 => [0x79], 0x1D4E9 => [0x7A], 0x1D504 => [0x61], - 0x1D505 => [0x62], 0x1D507 => [0x64], 0x1D508 => [0x65], - 0x1D509 => [0x66], 0x1D50A => [0x67], 0x1D50D => [0x6A], - 0x1D50E => [0x6B], 0x1D50F => [0x6C], 0x1D510 => [0x6D], - 0x1D511 => [0x6E], 0x1D512 => [0x6F], 0x1D513 => [0x70], - 0x1D514 => [0x71], 0x1D516 => [0x73], 0x1D517 => [0x74], - 0x1D518 => [0x75], 0x1D519 => [0x76], 0x1D51A => [0x77], - 0x1D51B => [0x78], 0x1D51C => [0x79], 0x1D538 => [0x61], - 0x1D539 => [0x62], 0x1D53B => [0x64], 0x1D53C => [0x65], - 0x1D53D => [0x66], 0x1D53E => [0x67], 0x1D540 => [0x69], - 0x1D541 => [0x6A], 0x1D542 => [0x6B], 0x1D543 => [0x6C], - 0x1D544 => [0x6D], 0x1D546 => [0x6F], 0x1D54A => [0x73], - 0x1D54B => [0x74], 0x1D54C => [0x75], 0x1D54D => [0x76], - 0x1D54E => [0x77], 0x1D54F => [0x78], 0x1D550 => [0x79], - 0x1D56C => [0x61], 0x1D56D => [0x62], 0x1D56E => [0x63], - 0x1D56F => [0x64], 0x1D570 => [0x65], 0x1D571 => [0x66], - 0x1D572 => [0x67], 0x1D573 => [0x68], 0x1D574 => [0x69], - 0x1D575 => [0x6A], 0x1D576 => [0x6B], 0x1D577 => [0x6C], - 0x1D578 => [0x6D], 0x1D579 => [0x6E], 0x1D57A => [0x6F], - 0x1D57B => [0x70], 0x1D57C => [0x71], 0x1D57D => [0x72], - 0x1D57E => [0x73], 0x1D57F => [0x74], 0x1D580 => [0x75], - 0x1D581 => [0x76], 0x1D582 => [0x77], 0x1D583 => [0x78], - 0x1D584 => [0x79], 0x1D585 => [0x7A], 0x1D5A0 => [0x61], - 0x1D5A1 => [0x62], 0x1D5A2 => [0x63], 0x1D5A3 => [0x64], - 0x1D5A4 => [0x65], 0x1D5A5 => [0x66], 0x1D5A6 => [0x67], - 0x1D5A7 => [0x68], 0x1D5A8 => [0x69], 0x1D5A9 => [0x6A], - 0x1D5AA => [0x6B], 0x1D5AB => [0x6C], 0x1D5AC => [0x6D], - 0x1D5AD => [0x6E], 0x1D5AE => [0x6F], 0x1D5AF => [0x70], - 0x1D5B0 => [0x71], 0x1D5B1 => [0x72], 0x1D5B2 => [0x73], - 0x1D5B3 => [0x74], 0x1D5B4 => [0x75], 0x1D5B5 => [0x76], - 0x1D5B6 => [0x77], 0x1D5B7 => [0x78], 0x1D5B8 => [0x79], - 0x1D5B9 => [0x7A], 0x1D5D4 => [0x61], 0x1D5D5 => [0x62], - 0x1D5D6 => [0x63], 0x1D5D7 => [0x64], 0x1D5D8 => [0x65], - 0x1D5D9 => [0x66], 0x1D5DA => [0x67], 0x1D5DB => [0x68], - 0x1D5DC => [0x69], 0x1D5DD => [0x6A], 0x1D5DE => [0x6B], - 0x1D5DF => [0x6C], 0x1D5E0 => [0x6D], 0x1D5E1 => [0x6E], - 0x1D5E2 => [0x6F], 0x1D5E3 => [0x70], 0x1D5E4 => [0x71], - 0x1D5E5 => [0x72], 0x1D5E6 => [0x73], 0x1D5E7 => [0x74], - 0x1D5E8 => [0x75], 0x1D5E9 => [0x76], 0x1D5EA => [0x77], - 0x1D5EB => [0x78], 0x1D5EC => [0x79], 0x1D5ED => [0x7A], - 0x1D608 => [0x61], 0x1D609 => [0x62], 0x1D60A => [0x63], - 0x1D60B => [0x64], 0x1D60C => [0x65], 0x1D60D => [0x66], - 0x1D60E => [0x67], 0x1D60F => [0x68], 0x1D610 => [0x69], - 0x1D611 => [0x6A], 0x1D612 => [0x6B], 0x1D613 => [0x6C], - 0x1D614 => [0x6D], 0x1D615 => [0x6E], 0x1D616 => [0x6F], - 0x1D617 => [0x70], 0x1D618 => [0x71], 0x1D619 => [0x72], - 0x1D61A => [0x73], 0x1D61B => [0x74], 0x1D61C => [0x75], - 0x1D61D => [0x76], 0x1D61E => [0x77], 0x1D61F => [0x78], - 0x1D620 => [0x79], 0x1D621 => [0x7A], 0x1D63C => [0x61], - 0x1D63D => [0x62], 0x1D63E => [0x63], 0x1D63F => [0x64], - 0x1D640 => [0x65], 0x1D641 => [0x66], 0x1D642 => [0x67], - 0x1D643 => [0x68], 0x1D644 => [0x69], 0x1D645 => [0x6A], - 0x1D646 => [0x6B], 0x1D647 => [0x6C], 0x1D648 => [0x6D], - 0x1D649 => [0x6E], 0x1D64A => [0x6F], 0x1D64B => [0x70], - 0x1D64C => [0x71], 0x1D64D => [0x72], 0x1D64E => [0x73], - 0x1D64F => [0x74], 0x1D650 => [0x75], 0x1D651 => [0x76], - 0x1D652 => [0x77], 0x1D653 => [0x78], 0x1D654 => [0x79], - 0x1D655 => [0x7A], 0x1D670 => [0x61], 0x1D671 => [0x62], - 0x1D672 => [0x63], 0x1D673 => [0x64], 0x1D674 => [0x65], - 0x1D675 => [0x66], 0x1D676 => [0x67], 0x1D677 => [0x68], - 0x1D678 => [0x69], 0x1D679 => [0x6A], 0x1D67A => [0x6B], - 0x1D67B => [0x6C], 0x1D67C => [0x6D], 0x1D67D => [0x6E], - 0x1D67E => [0x6F], 0x1D67F => [0x70], 0x1D680 => [0x71], - 0x1D681 => [0x72], 0x1D682 => [0x73], 0x1D683 => [0x74], - 0x1D684 => [0x75], 0x1D685 => [0x76], 0x1D686 => [0x77], - 0x1D687 => [0x78], 0x1D688 => [0x79], 0x1D689 => [0x7A], - 0x1D6A8 => [0x3B1], 0x1D6A9 => [0x3B2], 0x1D6AA => [0x3B3], - 0x1D6AB => [0x3B4], 0x1D6AC => [0x3B5], 0x1D6AD => [0x3B6], - 0x1D6AE => [0x3B7], 0x1D6AF => [0x3B8], 0x1D6B0 => [0x3B9], - 0x1D6B1 => [0x3BA], 0x1D6B2 => [0x3BB], 0x1D6B3 => [0x3BC], - 0x1D6B4 => [0x3BD], 0x1D6B5 => [0x3BE], 0x1D6B6 => [0x3BF], - 0x1D6B7 => [0x3C0], 0x1D6B8 => [0x3C1], 0x1D6B9 => [0x3B8], - 0x1D6BA => [0x3C3], 0x1D6BB => [0x3C4], 0x1D6BC => [0x3C5], - 0x1D6BD => [0x3C6], 0x1D6BE => [0x3C7], 0x1D6BF => [0x3C8], - 0x1D6C0 => [0x3C9], 0x1D6D3 => [0x3C3], 0x1D6E2 => [0x3B1], - 0x1D6E3 => [0x3B2], 0x1D6E4 => [0x3B3], 0x1D6E5 => [0x3B4], - 0x1D6E6 => [0x3B5], 0x1D6E7 => [0x3B6], 0x1D6E8 => [0x3B7], - 0x1D6E9 => [0x3B8], 0x1D6EA => [0x3B9], 0x1D6EB => [0x3BA], - 0x1D6EC => [0x3BB], 0x1D6ED => [0x3BC], 0x1D6EE => [0x3BD], - 0x1D6EF => [0x3BE], 0x1D6F0 => [0x3BF], 0x1D6F1 => [0x3C0], - 0x1D6F2 => [0x3C1], 0x1D6F3 => [0x3B8], 0x1D6F4 => [0x3C3], - 0x1D6F5 => [0x3C4], 0x1D6F6 => [0x3C5], 0x1D6F7 => [0x3C6], - 0x1D6F8 => [0x3C7], 0x1D6F9 => [0x3C8], 0x1D6FA => [0x3C9], - 0x1D70D => [0x3C3], 0x1D71C => [0x3B1], 0x1D71D => [0x3B2], - 0x1D71E => [0x3B3], 0x1D71F => [0x3B4], 0x1D720 => [0x3B5], - 0x1D721 => [0x3B6], 0x1D722 => [0x3B7], 0x1D723 => [0x3B8], - 0x1D724 => [0x3B9], 0x1D725 => [0x3BA], 0x1D726 => [0x3BB], - 0x1D727 => [0x3BC], 0x1D728 => [0x3BD], 0x1D729 => [0x3BE], - 0x1D72A => [0x3BF], 0x1D72B => [0x3C0], 0x1D72C => [0x3C1], - 0x1D72D => [0x3B8], 0x1D72E => [0x3C3], 0x1D72F => [0x3C4], - 0x1D730 => [0x3C5], 0x1D731 => [0x3C6], 0x1D732 => [0x3C7], - 0x1D733 => [0x3C8], 0x1D734 => [0x3C9], 0x1D747 => [0x3C3], - 0x1D756 => [0x3B1], 0x1D757 => [0x3B2], 0x1D758 => [0x3B3], - 0x1D759 => [0x3B4], 0x1D75A => [0x3B5], 0x1D75B => [0x3B6], - 0x1D75C => [0x3B7], 0x1D75D => [0x3B8], 0x1D75E => [0x3B9], - 0x1D75F => [0x3BA], 0x1D760 => [0x3BB], 0x1D761 => [0x3BC], - 0x1D762 => [0x3BD], 0x1D763 => [0x3BE], 0x1D764 => [0x3BF], - 0x1D765 => [0x3C0], 0x1D766 => [0x3C1], 0x1D767 => [0x3B8], - 0x1D768 => [0x3C3], 0x1D769 => [0x3C4], 0x1D76A => [0x3C5], - 0x1D76B => [0x3C6], 0x1D76C => [0x3C7], 0x1D76D => [0x3C8], - 0x1D76E => [0x3C9], 0x1D781 => [0x3C3], 0x1D790 => [0x3B1], - 0x1D791 => [0x3B2], 0x1D792 => [0x3B3], 0x1D793 => [0x3B4], - 0x1D794 => [0x3B5], 0x1D795 => [0x3B6], 0x1D796 => [0x3B7], - 0x1D797 => [0x3B8], 0x1D798 => [0x3B9], 0x1D799 => [0x3BA], - 0x1D79A => [0x3BB], 0x1D79B => [0x3BC], 0x1D79C => [0x3BD], - 0x1D79D => [0x3BE], 0x1D79E => [0x3BF], 0x1D79F => [0x3C0], - 0x1D7A0 => [0x3C1], 0x1D7A1 => [0x3B8], 0x1D7A2 => [0x3C3], - 0x1D7A3 => [0x3C4], 0x1D7A4 => [0x3C5], 0x1D7A5 => [0x3C6], - 0x1D7A6 => [0x3C7], 0x1D7A7 => [0x3C8], 0x1D7A8 => [0x3C9], - 0x1D7BB => [0x3C3], 0x3F9 => [0x3C3], 0x1D2C => [0x61], - 0x1D2D => [0xE6], 0x1D2E => [0x62], 0x1D30 => [0x64], - 0x1D31 => [0x65], 0x1D32 => [0x1DD], 0x1D33 => [0x67], - 0x1D34 => [0x68], 0x1D35 => [0x69], 0x1D36 => [0x6A], - 0x1D37 => [0x6B], 0x1D38 => [0x6C], 0x1D39 => [0x6D], - 0x1D3A => [0x6E], 0x1D3C => [0x6F], 0x1D3D => [0x223], - 0x1D3E => [0x70], 0x1D3F => [0x72], 0x1D40 => [0x74], - 0x1D41 => [0x75], 0x1D42 => [0x77], 0x213B => [0x66, 0x61, 0x78], - 0x3250 => [0x70, 0x74, 0x65], 0x32CC => [0x68, 0x67], - 0x32CE => [0x65, 0x76], 0x32CF => [0x6C, 0x74, 0x64], - 0x337A => [0x69, 0x75], 0x33DE => [0x76, 0x2215, 0x6D], - 0x33DF => [0x61, 0x2215, 0x6D] - ]; -} diff --git a/libraries/vendor/mso/idna-convert/src/NamePrepDataInterface.php b/libraries/vendor/mso/idna-convert/src/NamePrepDataInterface.php deleted file mode 100644 index 11d791eb37165..0000000000000 --- a/libraries/vendor/mso/idna-convert/src/NamePrepDataInterface.php +++ /dev/null @@ -1,7 +0,0 @@ - - * @copyright 2004-2016 phlyLabs Berlin, http://phlylabs.de - * @version 1.0.1 2016-01-24 - */ - -namespace Mso\IdnaConvert; - -class Punycode implements PunycodeInterface -{ - // Internal settings, do not touch! - const punycodePrefix = 'xn--'; - const invalidUcs = 0x80000000; - const maxUcs = 0x10FFFF; - const base = 36; - const tMin = 1; - const tMax = 26; - const skew = 38; - const damp = 700; - const initialBias = 72; - const initialN = 0x80; - const sBase = 0xAC00; - const lBase = 0x1100; - const vBase = 0x1161; - const tBase = 0x11A7; - const lCount = 19; - const vCount = 21; - const tCount = 28; - const nCount = 588; // vCount * tCount - const sCount = 11172; // lCount * tCount * vCount - const sLast = self::sBase + self::lCount * self::vCount * self::tCount; - - protected static $isMbStringOverload = null; - - protected $NamePrepData; - protected $UnicodeTranscoder; - - /** - * the constructor - * - * @param $NamePrepData NamePrepDataInterface inject NamePrepData object - * @param $UnicodeTranscoder UnicodeTranscoderInterface inject Unicode Transcoder - * @since 0.5.2 - */ - public function __construct(NamePrepDataInterface $NamePrepData, UnicodeTranscoderInterface $UnicodeTranscoder) - { - // populate mbstring overloading cache if not set - if (self::$isMbStringOverload === null) { - self::$isMbStringOverload = (extension_loaded('mbstring') && (ini_get('mbstring.func_overload') & 0x02) === 0x02); - } - - $this->NamePrepData = $NamePrepData; - $this->UnicodeTranscoder = $UnicodeTranscoder; - } - - /** - * Returns the used prefix for punycode-encoded strings - * @return string - */ - public function getPunycodePrefix() - { - return self::punycodePrefix; - } - - /** - * Checks, whether or not the provided string is a valid punycode string - * @param string $encoded - * @return boolean - */ - public function validate($encoded) { - // Check for existence of the prefix - if (strpos($encoded, self::punycodePrefix) !== 0) { - return false; - } - // If nothing is left after the prefix, it is hopeless - if (strlen(trim($encoded)) <= strlen(self::punycodePrefix)) { - return false; - } - return true; - } - - /** - * The actual decoding algorithm - * @param string - * @return mixed - */ - public function decode($encoded) - { - if (!$this->validate($encoded)) { - return false; - } - - $decoded = []; - // Find last occurence of the delimiter - $delim_pos = strrpos($encoded, '-'); - if ($delim_pos > self::byteLength(self::punycodePrefix)) { - for ($k = self::byteLength(self::punycodePrefix); $k < $delim_pos; ++$k) { - $decoded[] = ord($encoded{$k}); - } - } - $deco_len = count($decoded); - $enco_len = self::byteLength($encoded); - - // Wandering through the strings; init - $is_first = true; - $bias = self::initialBias; - $idx = 0; - $char = self::initialN; - - for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) { - for ($old_idx = $idx, $w = 1, $k = self::base; 1; $k += self::base) { - $digit = $this->decodeDigit($encoded{$enco_idx++}); - $idx += $digit * $w; - $t = ($k <= $bias) ? self::tMin : - (($k >= $bias + self::tMax) ? self::tMax : ($k - $bias)); - if ($digit < $t) { - break; - } - $w = (int) ($w * (self::base - $t)); - } - $bias = $this->adapt($idx - $old_idx, $deco_len + 1, $is_first); - $is_first = false; - $char += (int) ($idx / ($deco_len + 1)); - $idx %= ($deco_len + 1); - if ($deco_len > 0) { - // Make room for the decoded char - for ($i = $deco_len; $i > $idx; $i--) { - $decoded[$i] = $decoded[($i - 1)]; - } - } - $decoded[$idx++] = $char; - } - return $this->UnicodeTranscoder->ucs4array_utf8($decoded); - } - - /** - * The actual encoding algorithm - * @param array $decoded - * @return mixed - */ - public function encode($decoded) - { - // We cannot encode a domain name containing the Punycode prefix - $extract = self::byteLength(self::punycodePrefix); - $check_pref = $this->UnicodeTranscoder->utf8_ucs4array(self::punycodePrefix); - $check_deco = array_slice($decoded, 0, $extract); - - if ($check_pref == $check_deco) { - throw new \InvalidArgumentException('This is already a Punycode string'); - } - // We will not try to encode strings consisting of basic code points only - $encodable = false; - foreach ($decoded as $k => $v) { - if ($v > 0x7a) { - $encodable = true; - break; - } - } - if (!$encodable) { - return false; - } - // Do NAMEPREP - $decoded = $this->namePrep($decoded); - if (!$decoded || !is_array($decoded)) { - return false; // NAMEPREP failed - } - $deco_len = count($decoded); - if (!$deco_len) { - return false; // Empty array - } - $codecount = 0; // How many chars have been consumed - $encoded = ''; - // Copy all basic code points to output - for ($i = 0; $i < $deco_len; ++$i) { - $test = $decoded[$i]; - // Will match [-0-9a-zA-Z] - if ((0x2F < $test && $test < 0x40) - || (0x40 < $test && $test < 0x5B) - || (0x60 < $test && $test <= 0x7B) - || (0x2D == $test)) { - $encoded .= chr($decoded[$i]); - $codecount++; - } - } - if ($codecount == $deco_len) { - return $encoded; // All codepoints were basic ones - } - // Start with the prefix; copy it to output - $encoded = self::punycodePrefix . $encoded; - // If we have basic code points in output, add an hyphen to the end - if ($codecount) { - $encoded .= '-'; - } - // Now find and encode all non-basic code points - $is_first = true; - $cur_code = self::initialN; - $bias = self::initialBias; - $delta = 0; - while ($codecount < $deco_len) { - // Find the smallest code point >= the current code point and - // remember the last ouccrence of it in the input - for ($i = 0, $next_code = self::maxUcs; $i < $deco_len; $i++) { - if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) { - $next_code = $decoded[$i]; - } - } - $delta += ($next_code - $cur_code) * ($codecount + 1); - $cur_code = $next_code; - - // Scan input again and encode all characters whose code point is $cur_code - for ($i = 0; $i < $deco_len; $i++) { - if ($decoded[$i] < $cur_code) { - $delta++; - } elseif ($decoded[$i] == $cur_code) { - for ($q = $delta, $k = self::base; 1; $k += self::base) { - $t = ($k <= $bias) - ? self::tMin - : (($k >= $bias + self::tMax) ? self::tMax : $k - $bias); - if ($q < $t) { - break; - } - - $encoded .= $this->encodeDigit(intval($t + (($q - $t) % (self::base - $t)))); - $q = (int) (($q - $t) / (self::base - $t)); - } - $encoded .= $this->encodeDigit($q); - $bias = $this->adapt($delta, $codecount + 1, $is_first); - $codecount++; - $delta = 0; - $is_first = false; - } - } - $delta++; - $cur_code++; - } - return $encoded; - } - - /** - * Adapt the bias according to the current code point and position - * @param int $delta - * @param int $npoints - * @param int $is_first - * @return int - */ - protected function adapt($delta, $npoints, $is_first) - { - $delta = intval($is_first ? ($delta / self::damp) : ($delta / 2)); - $delta += intval($delta / $npoints); - for ($k = 0; $delta > ((self::base - self::tMin) * self::tMax) / 2; $k += self::base) { - $delta = intval($delta / (self::base - self::tMin)); - } - return intval($k + (self::base - self::tMin + 1) * $delta / ($delta + self::skew)); - } - - /** - * Encoding a certain digit - * @param int $d - * @return string - */ - protected function encodeDigit($d) - { - return chr($d + 22 + 75 * ($d < 26)); - } - - /** - * Decode a certain digit - * @param int $cp - * @return int - */ - protected function decodeDigit($cp) - { - $cp = ord($cp); - if ($cp - 48 < 10) { - - return $cp - 22; - } - - if ($cp - 65 < 26) { - - return $cp - 65; - } - if ($cp - 97 < 26) { - - return $cp - 97; - } - - return self::base; - } - - /** - * Do Nameprep according to RFC3491 and RFC3454 - * @param array $input Unicode Characters - * @return string Unicode Characters, Nameprep'd - */ - protected function namePrep($input) - { - $output = []; - // - // Mapping - // Walking through the input array, performing the required steps on each of - // the input chars and putting the result into the output array - // While mapping required chars we apply the canonical ordering - foreach ($input as $v) { - // Map to nothing == skip that code point - if (in_array($v, $this->NamePrepData->mapToNothing)) { - continue; - } - // Try to find prohibited input - if (in_array($v, $this->NamePrepData->prohibit) || in_array($v, $this->NamePrepData->generalProhibited)) { - throw new \InvalidArgumentException(sprintf('NAMEPREP: Prohibited input U+%08X', $v)); - } - foreach ($this->NamePrepData->prohibitRanges as $range) { - if ($range[0] <= $v && $v <= $range[1]) { - throw new \InvalidArgumentException(sprintf('NAMEPREP: Prohibited input U+%08X', $v)); - } - } - - if (0xAC00 <= $v && $v <= 0xD7AF) { - // Hangul syllable decomposition - foreach ($this->hangulDecompose($v) as $out) { - $output[] = (int) $out; - } - } elseif (isset($this->NamePrepData->replaceMaps[$v])) { - foreach ($this->applyCanonicalOrdering($this->NamePrepData->replaceMaps[$v]) as $out) { - $output[] = (int) $out; - } - } else { - $output[] = (int) $v; - } - } - // Before applying any Combining, try to rearrange any Hangul syllables - $output = $this->hangulCompose($output); - // - // Combine code points - // - $last_class = 0; - $last_starter = 0; - $out_len = count($output); - for ($i = 0; $i < $out_len; ++$i) { - $class = $this->getCombiningClass($output[$i]); - if ((!$last_class || $last_class > $class) && $class) { - // Try to match - $seq_len = $i - $last_starter; - $out = $this->combine(array_slice($output, $last_starter, $seq_len)); - // On match: Replace the last starter with the composed character and remove - // the now redundant non-starter(s) - if ($out) { - $output[$last_starter] = $out; - if (count($out) != $seq_len) { - for ($j = $i + 1; $j < $out_len; ++$j) { - $output[$j - 1] = $output[$j]; - } - unset($output[$out_len]); - } - // Rewind the for loop by one, since there can be more possible compositions - $i--; - $out_len--; - $last_class = ($i == $last_starter) ? 0 : $this->getCombiningClass($output[$i - 1]); - continue; - } - } - // The current class is 0 - if (!$class) { - $last_starter = $i; - } - $last_class = $class; - } - return $output; - } - - /** - * Decomposes a Hangul syllable - * (see http://www.unicode.org/unicode/reports/tr15/#Hangul - * @param integer 32bit UCS4 code point - * @return array Either Hangul Syllable decomposed or original 32bit value as one value array - */ - protected function hangulDecompose($char) - { - $sindex = (int) $char - self::sBase; - if ($sindex < 0 || $sindex >= self::sCount) { - return [$char]; - } - $result = []; - $result[] = (int) self::lBase + $sindex / self::nCount; - $result[] = (int) self::vBase + ($sindex % self::nCount) / self::tCount; - $T = intval(self::tBase + $sindex % self::tCount); - if ($T != self::tBase) { - $result[] = $T; - } - return $result; - } - - /** - * Ccomposes a Hangul syllable - * (see http://www.unicode.org/unicode/reports/tr15/#Hangul - * @param array $input Decomposed UCS4 sequence - * @return array UCS4 sequence with syllables composed - */ - protected function hangulCompose($input) - { - $inp_len = count($input); - if (!$inp_len) { - return []; - } - $result = []; - $last = (int) $input[0]; - $result[] = $last; // copy first char from input to output - - for ($i = 1; $i < $inp_len; ++$i) { - $char = (int) $input[$i]; - $sindex = $last - self::sBase; - $lindex = $last - self::lBase; - $vindex = $char - self::vBase; - $tindex = $char - self::tBase; - // Find out, whether two current characters are LV and T - if (0 <= $sindex && $sindex < self::sCount && ($sindex % self::tCount == 0) && 0 <= $tindex && $tindex <= self::tCount) { - // create syllable of form LVT - $last += $tindex; - $result[(count($result) - 1)] = $last; // reset last - continue; // discard char - } - // Find out, whether two current characters form L and V - if (0 <= $lindex && $lindex < self::lCount && 0 <= $vindex && $vindex < self::vCount) { - // create syllable of form LV - $last = (int) self::sBase + ($lindex * self::vCount + $vindex) * self::tCount; - $result[(count($result) - 1)] = $last; // reset last - continue; // discard char - } - // if neither case was true, just add the character - $last = $char; - $result[] = $char; - } - return $result; - } - - /** - * Returns the combining class of a certain wide char - * @param integer $char Wide char to check (32bit integer) - * @return integer Combining class if found, else 0 - */ - protected function getCombiningClass($char) - { - return isset($this->NamePrepData->normalizeCombiningClasses[$char]) - ? $this->NamePrepData->normalizeCombiningClasses[$char] - : 0; - } - - /** - * Applies the canonical ordering of a decomposed UCS4 sequence - * @param array $input Decomposed UCS4 sequence - * @return array Ordered USC4 sequence - */ - protected function applyCanonicalOrdering($input) - { - $swap = true; - $size = count($input); - while ($swap) { - $swap = false; - $last = $this->getCombiningClass(intval($input[0])); - for ($i = 0; $i < $size - 1; ++$i) { - $next = $this->getCombiningClass(intval($input[$i + 1])); - if ($next != 0 && $last > $next) { - // Move item leftward until it fits - for ($j = $i + 1; $j > 0; --$j) { - if ($this->getCombiningClass(intval($input[$j - 1])) <= $next) { - break; - } - $t = intval($input[$j]); - $input[$j] = intval($input[$j - 1]); - $input[$j - 1] = $t; - $swap = true; - } - // Reentering the loop looking at the old character again - $next = $last; - } - $last = $next; - } - } - return $input; - } - - /** - * Do composition of a sequence of starter and non-starter - * @param array $input UCS4 Decomposed sequence - * @return array Ordered USC4 sequence - */ - protected function combine($input) - { - $inp_len = count($input); - if (0 == $inp_len) { - return false; - } - foreach ($this->NamePrepData->replaceMaps as $np_src => $np_target) { - if ($np_target[0] != $input[0]) { - continue; - } - if (count($np_target) != $inp_len) { - continue; - } - $hit = false; - foreach ($input as $k2 => $v2) { - if ($v2 == $np_target[$k2]) { - $hit = true; - } else { - $hit = false; - break; - } - } - if ($hit) { - return $np_src; - } - } - return false; - } - - /** - * Gets the length of a string in bytes even if mbstring function - * overloading is turned on - * - * @param string $string the string for which to get the length. - * @return integer the length of the string in bytes. - */ - protected static function byteLength($string) - { - if (self::$isMbStringOverload) { - return mb_strlen($string, '8bit'); - } - return strlen((binary) $string); - } -} diff --git a/libraries/vendor/mso/idna-convert/src/PunycodeInterface.php b/libraries/vendor/mso/idna-convert/src/PunycodeInterface.php deleted file mode 100644 index c64ad368ef6e6..0000000000000 --- a/libraries/vendor/mso/idna-convert/src/PunycodeInterface.php +++ /dev/null @@ -1,20 +0,0 @@ - - * @copyright 2004-2016 phlyLabs Berlin, http://phlylabs.de - */ - -namespace Mso\IdnaConvert; - -interface PunycodeInterface -{ - - public function __construct(NamePrepDataInterface $NamePrepData, UnicodeTranscoderInterface $UCTC); - - public function getPunycodePrefix(); - - public function decode($encoded); - - public function encode($decoded); - -} diff --git a/libraries/vendor/mso/idna-convert/src/UnicodeTranscoder.php b/libraries/vendor/mso/idna-convert/src/UnicodeTranscoder.php deleted file mode 100644 index 702ead58d0f7f..0000000000000 --- a/libraries/vendor/mso/idna-convert/src/UnicodeTranscoder.php +++ /dev/null @@ -1,358 +0,0 @@ - - * @copyright 2003-2016 phlyLabs Berlin, http://phlylabs.de - * @version 0.1.1 2016-01-24 - */ - -namespace Mso\IdnaConvert; - -class UnicodeTranscoder implements UnicodeTranscoderInterface -{ - private static $mechs = ['ucs4', 'ucs4array', 'utf8', 'utf7', 'utf7imap']; - // unsupported yet: 'ucs4le', 'ucs4be', 'utf16', 'utf16le', 'utf16be' - - private static $allow_overlong = false; - private static $safe_mode; - private static $safe_char; - - /** - * The actual conversion routine - * - * @param mixed $data The data to convert, usually a string, array when converting from UCS-4 array - * @param string $from Original encoding of the data - * @param string $to Target encoding of the data - * @param bool $safe_mode SafeMode tries to correct invalid codepoints - * @param int $safe_char Unicode Codepoint as placeholder for all otherwise broken characters - * @return mixed False on failure, String or array on success, depending on target encoding - * @access public - * @throws \InvalidArgumentException - * @since 0.0.1 - */ - public static function convert($data, $from, $to, $safe_mode = false, $safe_char = 0xFFFC) - { - self::$safe_mode = ($safe_mode) ? true : false; - self::$safe_char = ($safe_char) ? $safe_char : 0xFFFC; - - if (self::$safe_mode) { - self::$allow_overlong = true; - } - if (!in_array($from, self::$mechs)) { - throw new \InvalidArgumentException(sprintf('Invalid input format %s', $from)); - } - if (!in_array($to, self::$mechs)) { - throw new \InvalidArgumentException(sprintf('Invalid output format %s', $to)); - } - if ($from != 'ucs4array') { - $methodName = $from.'_ucs4array'; - $data = self::$methodName($data); - } - if ($to != 'ucs4array') { - $methodName = 'ucs4array_'.$to; - $data = self::$methodName($data); - } - - return $data; - } - - /** - * This converts an UTF-8 encoded string to its UCS-4 representation - * - * @param string $input The UTF-8 string to convert - * @return array Array of 32bit values representing each codepoint - * @throws \InvalidArgumentException - * @access public - */ - public static function utf8_ucs4array($input) - { - $start_byte = $next_byte = 0; - - $output = []; - $out_len = 0; - $inp_len = self::byteLength($input); - $mode = 'next'; - $test = 'none'; - for ($k = 0; $k < $inp_len; ++$k) { - $v = ord($input{$k}); // Extract byte from input string - - if ($v < 128) { // We found an ASCII char - put into stirng as is - $output[$out_len] = $v; - ++$out_len; - if ('add' == $mode) { - if (self::$safe_mode) { - $output[$out_len - 2] = self::$safe_char; - $mode = 'next'; - } else { - throw new \InvalidArgumentException(sprintf('Conversion from UTF-8 to UCS-4 failed: malformed input at byte %d', $k)); - } - } - continue; - } - if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char - $start_byte = $v; - $mode = 'add'; - $test = 'range'; - if ($v >> 5 == 6) { // &110xxxxx 10xxxxx - $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left - $v = ($v - 192) << 6; - } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx - $next_byte = 1; - $v = ($v - 224) << 12; - } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - $next_byte = 2; - $v = ($v - 240) << 18; - } elseif (self::$safe_mode) { - $mode = 'next'; - $output[$out_len] = self::$safe_char; - ++$out_len; - continue; - } else { - throw new \InvalidArgumentException(sprintf('This might be UTF-8, but I don\'t understand it at byte %d', $k)); - } - if ($inp_len - $k - $next_byte < 2) { - $output[$out_len] = self::$safe_char; - $mode = 'no'; - continue; - } - - if ('add' == $mode) { - $output[$out_len] = (int)$v; - ++$out_len; - continue; - } - } - if ('add' == $mode) { - if (!self::$allow_overlong && $test == 'range') { - $test = 'none'; - if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) { - throw new \InvalidArgumentException(sprintf('Bogus UTF-8 character detected (out of legal range) at byte %d', $k)); - } - } - if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx - $v = ($v - 128) << ($next_byte * 6); - $output[($out_len - 1)] += $v; - --$next_byte; - } else { - if (self::$safe_mode) { - $output[$out_len - 1] = ord(self::$safe_char); - $k--; - $mode = 'next'; - continue; - } else { - throw new \InvalidArgumentException(sprintf('Conversion from UTF-8 to UCS-4 failed: malformed input at byte %d', $k)); - } - } - if ($next_byte < 0) { - $mode = 'next'; - } - } - } // for - - return $output; - } - - /** - * Convert UCS-4 arary into UTF-8 string - * See utf8_ucs4array() for details - * @param $input array Array of UCS-4 codepoints - * @return string - * @access public - */ - public static function ucs4array_utf8($input) - { - $output = ''; - foreach ($input as $k => $v) { - if ($v < 128) { // 7bit are transferred literally - $output .= chr($v); - } elseif ($v < (1 << 11)) { // 2 bytes - $output .= chr(192 + ($v >> 6)) . chr(128 + ($v & 63)); - } elseif ($v < (1 << 16)) { // 3 bytes - $output .= chr(224 + ($v >> 12)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63)); - } elseif ($v < (1 << 21)) { // 4 bytes - $output .= chr(240 + ($v >> 18)) . chr(128 + (($v >> 12) & 63)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63)); - } elseif (self::$safe_mode) { - $output .= self::$safe_char; - } else { - throw new \InvalidArgumentException(sprintf('Conversion from UCS-4 to UTF-8 failed: malformed input at byte %d', $k)); - } - } - - return $output; - } - - public static function utf7imap_ucs4array($input) - { - return self::utf7_ucs4array(str_replace(',', '/', $input), '&'); - } - - public static function utf7_ucs4array($input, $sc = '+') - { - $output = []; - $out_len = 0; - $inp_len = self::byteLength($input); - $mode = 'd'; - $b64 = ''; - - for ($k = 0; $k < $inp_len; ++$k) { - $c = $input{$k}; - - // Ignore zero bytes - if (0 == ord($c)) { - continue; - } - if ('b' == $mode) { - // Sequence got terminated - if (!preg_match('![A-Za-z0-9/' . preg_quote($sc, '!') . ']!', $c)) { - if ('-' == $c) { - if ($b64 == '') { - $output[$out_len] = ord($sc); - $out_len++; - $mode = 'd'; - - continue; - } - } - $tmp = base64_decode($b64); - $tmp = substr($tmp, -1 * (strlen($tmp) % 2)); - for ($i = 0; $i < strlen($tmp); $i++) { - if ($i % 2) { - $output[$out_len] += ord($tmp{$i}); - $out_len++; - } else { - $output[$out_len] = ord($tmp{$i}) << 8; - } - } - $mode = 'd'; - $b64 = ''; - - continue; - } else { - $b64 .= $c; - } - } - if ('d' == $mode) { - if ($sc == $c) { - $mode = 'b'; - - continue; - } - $output[$out_len] = ord($c); - $out_len++; - } - } - - return $output; - } - - public static function ucs4array_utf7imap($input) - { - return str_replace('/', ',', self::ucs4array_utf7($input, '&')); - } - - public static function ucs4array_utf7($input, $sc = '+') - { - $output = ''; - $mode = 'd'; - $b64 = ''; - while (true) { - $v = (!empty($input)) ? array_shift($input) : false; - $is_direct = (false !== $v) ? (0x20 <= $v && $v <= 0x7e && $v != ord($sc)) : true; - if ($mode == 'b') { - if ($is_direct) { - if ($b64 == chr(0) . $sc) { - $output .= $sc . '-'; - $b64 = ''; - } elseif ($b64) { - $output .= $sc . str_replace('=', '', base64_encode($b64)) . '-'; - $b64 = ''; - } - $mode = 'd'; - } elseif (false !== $v) { - $b64 .= chr(($v >> 8) & 255) . chr($v & 255); - } - } - if ($mode == 'd' && false !== $v) { - if ($is_direct) { - $output .= chr($v); - } else { - $b64 = chr(($v >> 8) & 255) . chr($v & 255); - $mode = 'b'; - } - } - if (false === $v && $b64 == '') break; - } - - return $output; - } - - /** - * Convert UCS-4 array into UCS-4 string (Little Endian at the moment) - * @param $input array UCS-4 code points - * @return string - * @access public - */ - public static function ucs4array_ucs4($input) - { - $output = ''; - foreach ($input as $v) { - $output .= chr(($v >> 24) & 255) . chr(($v >> 16) & 255) . chr(($v >> 8) & 255) . chr($v & 255); - } - - return $output; - } - - /** - * Convert UCS-4 string (LE ar the moment) into UCS-4 array - * @param $input string UCS-4 LE string - * @return array - * @access public - */ - public static function ucs4_ucs4array($input) - { - $output = []; - - $inp_len = self::byteLength($input); - // Input length must be dividable by 4 - if ($inp_len % 4) { - throw new \InvalidArgumentException('Input UCS4 string is broken'); - } - // Empty input - return empty output - if (!$inp_len) return $output; - - for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) { - if (!($i % 4)) { // Increment output position every 4 input bytes - $out_len++; - $output[$out_len] = 0; - } - $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4))); - } - - return $output; - } - - /** - * Gets the length of a string in bytes even if mbstring function - * overloading is turned on - * - * @param string $string the string for which to get the length. - * @return integer the length of the string in bytes. - */ - protected static function byteLength($string) - { - if ((extension_loaded('mbstring') && (ini_get('mbstring.func_overload') & 0x02) === 0x02)) { - return mb_strlen($string, '8bit'); - } - return strlen((binary) $string); - } -} diff --git a/libraries/vendor/mso/idna-convert/src/UnicodeTranscoderInterface.php b/libraries/vendor/mso/idna-convert/src/UnicodeTranscoderInterface.php deleted file mode 100644 index b8b1b50542ca7..0000000000000 --- a/libraries/vendor/mso/idna-convert/src/UnicodeTranscoderInterface.php +++ /dev/null @@ -1,40 +0,0 @@ - - * @copyright 2003-2016 phlyLabs Berlin, http://phlylabs.de - * @version 0.1.0 2016-01-08 - */ - -namespace Mso\IdnaConvert; - -interface UnicodeTranscoderInterface -{ - public static function convert($data, $from, $to, $safe_mode = false, $safe_char = 0xFFFC); - - public static function utf8_ucs4array($input); - - public static function ucs4array_utf8($input); - - public static function utf7imap_ucs4array($input); - - public static function utf7_ucs4array($input, $sc = '+'); - - public static function ucs4array_utf7imap($input); - - public static function ucs4array_utf7($input, $sc = '+'); - - public static function ucs4array_ucs4($input); - - public static function ucs4_ucs4array($input); -} diff --git a/libraries/vendor/paragonie/random_compat/LICENSE b/libraries/vendor/paragonie/random_compat/LICENSE deleted file mode 100644 index 45c7017dfb33d..0000000000000 --- a/libraries/vendor/paragonie/random_compat/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Paragon Initiative Enterprises - -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/libraries/vendor/paragonie/random_compat/lib/byte_safe_strings.php b/libraries/vendor/paragonie/random_compat/lib/byte_safe_strings.php deleted file mode 100644 index 2a7335dd6b3b9..0000000000000 --- a/libraries/vendor/paragonie/random_compat/lib/byte_safe_strings.php +++ /dev/null @@ -1,181 +0,0 @@ - RandomCompat_strlen($binary_string)) { - return ''; - } - - return (string) mb_substr($binary_string, $start, $length, '8bit'); - } - - } else { - - /** - * substr() implementation that isn't brittle to mbstring.func_overload - * - * This version just uses the default substr() - * - * @param string $binary_string - * @param int $start - * @param int $length (optional) - * - * @throws TypeError - * - * @return string - */ - function RandomCompat_substr($binary_string, $start, $length = null) - { - if (!is_string($binary_string)) { - throw new TypeError( - 'RandomCompat_substr(): First argument should be a string' - ); - } - - if (!is_int($start)) { - throw new TypeError( - 'RandomCompat_substr(): Second argument should be an integer' - ); - } - - if ($length !== null) { - if (!is_int($length)) { - throw new TypeError( - 'RandomCompat_substr(): Third argument should be an integer, or omitted' - ); - } - - return (string) substr($binary_string, $start, $length); - } - - return (string) substr($binary_string, $start); - } - } -} diff --git a/libraries/vendor/paragonie/random_compat/lib/cast_to_int.php b/libraries/vendor/paragonie/random_compat/lib/cast_to_int.php deleted file mode 100644 index 14b4b348fac47..0000000000000 --- a/libraries/vendor/paragonie/random_compat/lib/cast_to_int.php +++ /dev/null @@ -1,75 +0,0 @@ - operators might accidentally let a float - * through. - * - * @param int|float $number The number we want to convert to an int - * @param bool $fail_open Set to true to not throw an exception - * - * @return float|int - * @psalm-suppress InvalidReturnType - * - * @throws TypeError - */ - function RandomCompat_intval($number, $fail_open = false) - { - if (is_int($number) || is_float($number)) { - $number += 0; - } elseif (is_numeric($number)) { - $number += 0; - } - - if ( - is_float($number) - && - $number > ~PHP_INT_MAX - && - $number < PHP_INT_MAX - ) { - $number = (int) $number; - } - - if (is_int($number)) { - return (int) $number; - } elseif (!$fail_open) { - throw new TypeError( - 'Expected an integer.' - ); - } - return $number; - } -} diff --git a/libraries/vendor/paragonie/random_compat/lib/error_polyfill.php b/libraries/vendor/paragonie/random_compat/lib/error_polyfill.php deleted file mode 100644 index 6d4a19ac7e0c4..0000000000000 --- a/libraries/vendor/paragonie/random_compat/lib/error_polyfill.php +++ /dev/null @@ -1,49 +0,0 @@ -= 70000) { - return; -} - -if (!defined('RANDOM_COMPAT_READ_BUFFER')) { - define('RANDOM_COMPAT_READ_BUFFER', 8); -} - -$RandomCompatDIR = dirname(__FILE__); - -require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'byte_safe_strings.php'; -require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'cast_to_int.php'; -require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'error_polyfill.php'; - -if (!is_callable('random_bytes')) { - /** - * PHP 5.2.0 - 5.6.x way to implement random_bytes() - * - * We use conditional statements here to define the function in accordance - * to the operating environment. It's a micro-optimization. - * - * In order of preference: - * 1. Use libsodium if available. - * 2. fread() /dev/urandom if available (never on Windows) - * 3. mcrypt_create_iv($bytes, MCRYPT_DEV_URANDOM) - * 4. COM('CAPICOM.Utilities.1')->GetRandom() - * - * See RATIONALE.md for our reasoning behind this particular order - */ - if (extension_loaded('libsodium')) { - // See random_bytes_libsodium.php - if (PHP_VERSION_ID >= 50300 && is_callable('\\Sodium\\randombytes_buf')) { - require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'random_bytes_libsodium.php'; - } elseif (method_exists('Sodium', 'randombytes_buf')) { - require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'random_bytes_libsodium_legacy.php'; - } - } - - /** - * Reading directly from /dev/urandom: - */ - if (DIRECTORY_SEPARATOR === '/') { - // DIRECTORY_SEPARATOR === '/' on Unix-like OSes -- this is a fast - // way to exclude Windows. - $RandomCompatUrandom = true; - $RandomCompat_basedir = ini_get('open_basedir'); - - if (!empty($RandomCompat_basedir)) { - $RandomCompat_open_basedir = explode( - PATH_SEPARATOR, - strtolower($RandomCompat_basedir) - ); - $RandomCompatUrandom = (array() !== array_intersect( - array('/dev', '/dev/', '/dev/urandom'), - $RandomCompat_open_basedir - )); - $RandomCompat_open_basedir = null; - } - - if ( - !is_callable('random_bytes') - && - $RandomCompatUrandom - && - @is_readable('/dev/urandom') - ) { - // Error suppression on is_readable() in case of an open_basedir - // or safe_mode failure. All we care about is whether or not we - // can read it at this point. If the PHP environment is going to - // panic over trying to see if the file can be read in the first - // place, that is not helpful to us here. - - // See random_bytes_dev_urandom.php - require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'random_bytes_dev_urandom.php'; - } - // Unset variables after use - $RandomCompat_basedir = null; - } else { - $RandomCompatUrandom = false; - } - - /** - * mcrypt_create_iv() - * - * We only want to use mcypt_create_iv() if: - * - * - random_bytes() hasn't already been defined - * - the mcrypt extensions is loaded - * - One of these two conditions is true: - * - We're on Windows (DIRECTORY_SEPARATOR !== '/') - * - We're not on Windows and /dev/urandom is readabale - * (i.e. we're not in a chroot jail) - * - Special case: - * - If we're not on Windows, but the PHP version is between - * 5.6.10 and 5.6.12, we don't want to use mcrypt. It will - * hang indefinitely. This is bad. - * - If we're on Windows, we want to use PHP >= 5.3.7 or else - * we get insufficient entropy errors. - */ - if ( - !is_callable('random_bytes') - && - // Windows on PHP < 5.3.7 is broken, but non-Windows is not known to be. - (DIRECTORY_SEPARATOR === '/' || PHP_VERSION_ID >= 50307) - && - // Prevent this code from hanging indefinitely on non-Windows; - // see https://bugs.php.net/bug.php?id=69833 - ( - DIRECTORY_SEPARATOR !== '/' || - (PHP_VERSION_ID <= 50609 || PHP_VERSION_ID >= 50613) - ) - && - extension_loaded('mcrypt') - ) { - // See random_bytes_mcrypt.php - require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'random_bytes_mcrypt.php'; - } - $RandomCompatUrandom = null; - - /** - * This is a Windows-specific fallback, for when the mcrypt extension - * isn't loaded. - */ - if ( - !is_callable('random_bytes') - && - extension_loaded('com_dotnet') - && - class_exists('COM') - ) { - $RandomCompat_disabled_classes = preg_split( - '#\s*,\s*#', - strtolower(ini_get('disable_classes')) - ); - - if (!in_array('com', $RandomCompat_disabled_classes)) { - try { - $RandomCompatCOMtest = new COM('CAPICOM.Utilities.1'); - if (method_exists($RandomCompatCOMtest, 'GetRandom')) { - // See random_bytes_com_dotnet.php - require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'random_bytes_com_dotnet.php'; - } - } catch (com_exception $e) { - // Don't try to use it. - } - } - $RandomCompat_disabled_classes = null; - $RandomCompatCOMtest = null; - } - - /** - * throw new Exception - */ - if (!is_callable('random_bytes')) { - /** - * We don't have any more options, so let's throw an exception right now - * and hope the developer won't let it fail silently. - * - * @param mixed $length - * @psalm-suppress MissingReturnType - * @psalm-suppress InvalidReturnType - * @throws Exception - * @return string - */ - function random_bytes($length) - { - unset($length); // Suppress "variable not used" warnings. - throw new Exception( - 'There is no suitable CSPRNG installed on your system' - ); - return ''; - } - } -} - -if (!is_callable('random_int')) { - require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'random_int.php'; -} - -$RandomCompatDIR = null; diff --git a/libraries/vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php b/libraries/vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php deleted file mode 100644 index 2b83369ea04a8..0000000000000 --- a/libraries/vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php +++ /dev/null @@ -1,88 +0,0 @@ -GetRandom($bytes, 0)); - if (RandomCompat_strlen($buf) >= $bytes) { - /** - * Return our random entropy buffer here: - */ - return RandomCompat_substr($buf, 0, $bytes); - } - ++$execCount; - } while ($execCount < $bytes); - - /** - * If we reach here, PHP has failed us. - */ - throw new Exception( - 'Could not gather sufficient random data' - ); - } -} \ No newline at end of file diff --git a/libraries/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php b/libraries/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php deleted file mode 100644 index ac36034af8c82..0000000000000 --- a/libraries/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php +++ /dev/null @@ -1,167 +0,0 @@ - 0); - - /** - * Is our result valid? - */ - if (is_string($buf)) { - if (RandomCompat_strlen($buf) === $bytes) { - /** - * Return our random entropy buffer here: - */ - return $buf; - } - } - } - - /** - * If we reach here, PHP has failed us. - */ - throw new Exception( - 'Error reading from source device' - ); - } -} diff --git a/libraries/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php b/libraries/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php deleted file mode 100644 index 1e017c145272c..0000000000000 --- a/libraries/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php +++ /dev/null @@ -1,88 +0,0 @@ - 2147483647) { - $buf = ''; - for ($i = 0; $i < $bytes; $i += 1073741824) { - $n = ($bytes - $i) > 1073741824 - ? 1073741824 - : $bytes - $i; - $buf .= \Sodium\randombytes_buf($n); - } - } else { - $buf = \Sodium\randombytes_buf($bytes); - } - - if ($buf !== false) { - if (RandomCompat_strlen($buf) === $bytes) { - return $buf; - } - } - - /** - * If we reach here, PHP has failed us. - */ - throw new Exception( - 'Could not gather sufficient random data' - ); - } -} diff --git a/libraries/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php b/libraries/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php deleted file mode 100644 index 388da4dc9c141..0000000000000 --- a/libraries/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php +++ /dev/null @@ -1,92 +0,0 @@ - 2147483647) { - for ($i = 0; $i < $bytes; $i += 1073741824) { - $n = ($bytes - $i) > 1073741824 - ? 1073741824 - : $bytes - $i; - $buf .= Sodium::randombytes_buf((int) $n); - } - } else { - $buf .= Sodium::randombytes_buf((int) $bytes); - } - - if (is_string($buf)) { - if (RandomCompat_strlen($buf) === $bytes) { - return $buf; - } - } - - /** - * If we reach here, PHP has failed us. - */ - throw new Exception( - 'Could not gather sufficient random data' - ); - } -} diff --git a/libraries/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php b/libraries/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php deleted file mode 100644 index 879450c9105d6..0000000000000 --- a/libraries/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php +++ /dev/null @@ -1,77 +0,0 @@ - operators might accidentally let a float - * through. - */ - - try { - $min = RandomCompat_intval($min); - } catch (TypeError $ex) { - throw new TypeError( - 'random_int(): $min must be an integer' - ); - } - - try { - $max = RandomCompat_intval($max); - } catch (TypeError $ex) { - throw new TypeError( - 'random_int(): $max must be an integer' - ); - } - - /** - * Now that we've verified our weak typing system has given us an integer, - * let's validate the logic then we can move forward with generating random - * integers along a given range. - */ - if ($min > $max) { - throw new Error( - 'Minimum value must be less than or equal to the maximum value' - ); - } - - if ($max === $min) { - return (int) $min; - } - - /** - * Initialize variables to 0 - * - * We want to store: - * $bytes => the number of random bytes we need - * $mask => an integer bitmask (for use with the &) operator - * so we can minimize the number of discards - */ - $attempts = $bits = $bytes = $mask = $valueShift = 0; - - /** - * At this point, $range is a positive number greater than 0. It might - * overflow, however, if $max - $min > PHP_INT_MAX. PHP will cast it to - * a float and we will lose some precision. - */ - $range = $max - $min; - - /** - * Test for integer overflow: - */ - if (!is_int($range)) { - - /** - * Still safely calculate wider ranges. - * Provided by @CodesInChaos, @oittaa - * - * @ref https://gist.github.com/CodesInChaos/03f9ea0b58e8b2b8d435 - * - * We use ~0 as a mask in this case because it generates all 1s - * - * @ref https://eval.in/400356 (32-bit) - * @ref http://3v4l.org/XX9r5 (64-bit) - */ - $bytes = PHP_INT_SIZE; - $mask = ~0; - - } else { - - /** - * $bits is effectively ceil(log($range, 2)) without dealing with - * type juggling - */ - while ($range > 0) { - if ($bits % 8 === 0) { - ++$bytes; - } - ++$bits; - $range >>= 1; - $mask = $mask << 1 | 1; - } - $valueShift = $min; - } - - $val = 0; - /** - * Now that we have our parameters set up, let's begin generating - * random integers until one falls between $min and $max - */ - do { - /** - * The rejection probability is at most 0.5, so this corresponds - * to a failure probability of 2^-128 for a working RNG - */ - if ($attempts > 128) { - throw new Exception( - 'random_int: RNG is broken - too many rejections' - ); - } - - /** - * Let's grab the necessary number of random bytes - */ - $randomByteString = random_bytes($bytes); - - /** - * Let's turn $randomByteString into an integer - * - * This uses bitwise operators (<< and |) to build an integer - * out of the values extracted from ord() - * - * Example: [9F] | [6D] | [32] | [0C] => - * 159 + 27904 + 3276800 + 201326592 => - * 204631455 - */ - $val &= 0; - for ($i = 0; $i < $bytes; ++$i) { - $val |= ord($randomByteString[$i]) << ($i * 8); - } - - /** - * Apply mask - */ - $val &= $mask; - $val += $valueShift; - - ++$attempts; - /** - * If $val overflows to a floating point number, - * ... or is larger than $max, - * ... or smaller than $min, - * then try again. - */ - } while (!is_int($val) || $val > $max || $val < $min); - - return (int) $val; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/LICENSE b/libraries/vendor/paragonie/sodium_compat/LICENSE deleted file mode 100644 index 532a3cf52707f..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -/* - * ISC License - * - * Copyright (c) 2016-2018 - * Paragon Initiative Enterprises - * - * Copyright (c) 2013-2018 - * Frank Denis - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ \ No newline at end of file diff --git a/libraries/vendor/paragonie/sodium_compat/autoload-fast.php b/libraries/vendor/paragonie/sodium_compat/autoload-fast.php deleted file mode 100644 index 08724d1eddd2c..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/autoload-fast.php +++ /dev/null @@ -1,4 +0,0 @@ -= 50300) { - // Namespaces didn't exist before 5.3.0, so don't even try to use this - // unless PHP >= 5.3.0 - require_once dirname(__FILE__) . '/lib/namespaced.php'; - require_once dirname(__FILE__) . '/lib/sodium_compat.php'; -} -if (PHP_VERSION_ID < 70200 || !extension_loaded('sodium')) { - require_once dirname(__FILE__) . '/lib/php72compat.php'; -} diff --git a/libraries/vendor/paragonie/sodium_compat/lib/constants.php b/libraries/vendor/paragonie/sodium_compat/lib/constants.php deleted file mode 100644 index 8ddb6a4879c36..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/lib/constants.php +++ /dev/null @@ -1,50 +0,0 @@ - 0 if the right operand is less than the left - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function compare($left, $right) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($left, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($right, 'string', 2); - - if (self::useNewSodiumAPI()) { - return (int) sodium_compare($left, $right); - } - if (self::use_fallback('compare')) { - return (int) call_user_func('\\Sodium\\compare', $left, $right); - } - return ParagonIE_Sodium_Core_Util::compare($left, $right); - } - - /** - * Is AES-256-GCM even available to use? - * - * @return bool - * @psalm-suppress UndefinedFunction - * @psalm-suppress MixedInferredReturnType - * @psalm-suppress MixedReturnStatement - */ - public static function crypto_aead_aes256gcm_is_available() - { - if (self::useNewSodiumAPI()) { - return sodium_crypto_aead_aes256gcm_is_available(); - } - if (self::use_fallback('crypto_aead_aes256gcm_is_available')) { - return call_user_func('\\Sodium\\crypto_aead_aes256gcm_is_available'); - } - if (PHP_VERSION_ID < 70100) { - // OpenSSL doesn't support AEAD before 7.1.0 - return false; - } - if (!is_callable('openssl_encrypt') || !is_callable('openssl_decrypt')) { - // OpenSSL isn't installed - return false; - } - return (bool) in_array('aes-256-gcm', openssl_get_cipher_methods()); - } - - /** - * Authenticated Encryption with Associated Data: Decryption - * - * Algorithm: - * AES-256-GCM - * - * This mode uses a 64-bit random nonce with a 64-bit counter. - * IETF mode uses a 96-bit random nonce with a 32-bit counter. - * - * @param string $ciphertext Encrypted message (with Poly1305 MAC appended) - * @param string $assocData Authenticated Associated Data (unencrypted) - * @param string $nonce Number to be used only Once; must be 8 bytes - * @param string $key Encryption key - * - * @return string|bool The original plaintext message - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedInferredReturnType - * @psalm-suppress MixedReturnStatement - */ - public static function crypto_aead_aes256gcm_decrypt( - $ciphertext = '', - $assocData = '', - $nonce = '', - $key = '' - ) { - if (!self::crypto_aead_aes256gcm_is_available()) { - throw new SodiumException('AES-256-GCM is not available'); - } - ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AES256GCM_NPUBBYTES) { - throw new SodiumException('Nonce must be CRYPTO_AEAD_AES256GCM_NPUBBYTES long'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AES256GCM_KEYBYTES) { - throw new SodiumException('Key must be CRYPTO_AEAD_AES256GCM_KEYBYTES long'); - } - if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_AEAD_AES256GCM_ABYTES) { - throw new SodiumException('Message must be at least CRYPTO_AEAD_AES256GCM_ABYTES long'); - } - - if (!self::crypto_aead_aes256gcm_is_available()) { - throw new SodiumException('AES-256-GCM is not available'); - } - $ctext = ParagonIE_Sodium_Core_Util::substr($ciphertext, 0, -self::CRYPTO_AEAD_AES256GCM_ABYTES); - $authTag = ParagonIE_Sodium_Core_Util::substr($ciphertext, -self::CRYPTO_AEAD_AES256GCM_ABYTES, 16); - return openssl_decrypt( - $ctext, - 'aes-256-gcm', - $key, - OPENSSL_RAW_DATA, - $nonce, - $authTag, - $assocData - ); - } - - /** - * Authenticated Encryption with Associated Data: Encryption - * - * Algorithm: - * AES-256-GCM - * - * @param string $plaintext Message to be encrypted - * @param string $assocData Authenticated Associated Data (unencrypted) - * @param string $nonce Number to be used only Once; must be 8 bytes - * @param string $key Encryption key - * - * @return string Ciphertext with a 16-byte GCM message - * authentication code appended - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_aead_aes256gcm_encrypt( - $plaintext = '', - $assocData = '', - $nonce = '', - $key = '' - ) { - if (!self::crypto_aead_aes256gcm_is_available()) { - throw new SodiumException('AES-256-GCM is not available'); - } - ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_AES256GCM_NPUBBYTES) { - throw new SodiumException('Nonce must be CRYPTO_AEAD_AES256GCM_NPUBBYTES long'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_AES256GCM_KEYBYTES) { - throw new SodiumException('Key must be CRYPTO_AEAD_AES256GCM_KEYBYTES long'); - } - $authTag = ''; - $ciphertext = openssl_encrypt( - $plaintext, - 'aes-256-gcm', - $key, - OPENSSL_RAW_DATA, - $nonce, - $authTag, - $assocData - ); - return $ciphertext . $authTag; - } - - /** - * Return a secure random key for use with the AES-256-GCM - * symmetric AEAD interface. - * - * @return string - */ - public static function crypto_aead_aes256gcm_keygen() - { - return random_bytes(self::CRYPTO_AEAD_AES256GCM_KEYBYTES); - } - - /** - * Authenticated Encryption with Associated Data: Decryption - * - * Algorithm: - * ChaCha20-Poly1305 - * - * This mode uses a 64-bit random nonce with a 64-bit counter. - * IETF mode uses a 96-bit random nonce with a 32-bit counter. - * - * @param string $ciphertext Encrypted message (with Poly1305 MAC appended) - * @param string $assocData Authenticated Associated Data (unencrypted) - * @param string $nonce Number to be used only Once; must be 8 bytes - * @param string $key Encryption key - * - * @return string The original plaintext message - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedInferredReturnType - * @psalm-suppress MixedReturnStatement - */ - public static function crypto_aead_chacha20poly1305_decrypt( - $ciphertext = '', - $assocData = '', - $nonce = '', - $key = '' - ) { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES) { - throw new SodiumException('Nonce must be CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES long'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES) { - throw new SodiumException('Key must be CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES long'); - } - if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_AEAD_CHACHA20POLY1305_ABYTES) { - throw new SodiumException('Message must be at least CRYPTO_AEAD_CHACHA20POLY1305_ABYTES long'); - } - - if (self::useNewSodiumAPI()) { - /** - * @psalm-suppress InvalidReturnStatement - * @psalm-suppress FalsableReturnStatement - */ - return sodium_crypto_aead_chacha20poly1305_decrypt( - $ciphertext, - $assocData, - $nonce, - $key - ); - } - if (self::use_fallback('crypto_aead_chacha20poly1305_decrypt')) { - return call_user_func( - '\\Sodium\\crypto_aead_chacha20poly1305_decrypt', - $ciphertext, - $assocData, - $nonce, - $key - ); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_decrypt( - $ciphertext, - $assocData, - $nonce, - $key - ); - } - return ParagonIE_Sodium_Crypto::aead_chacha20poly1305_decrypt( - $ciphertext, - $assocData, - $nonce, - $key - ); - } - - /** - * Authenticated Encryption with Associated Data - * - * Algorithm: - * ChaCha20-Poly1305 - * - * This mode uses a 64-bit random nonce with a 64-bit counter. - * IETF mode uses a 96-bit random nonce with a 32-bit counter. - * - * @param string $plaintext Message to be encrypted - * @param string $assocData Authenticated Associated Data (unencrypted) - * @param string $nonce Number to be used only Once; must be 8 bytes - * @param string $key Encryption key - * - * @return string Ciphertext with a 16-byte Poly1305 message - * authentication code appended - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_aead_chacha20poly1305_encrypt( - $plaintext = '', - $assocData = '', - $nonce = '', - $key = '' - ) { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES) { - throw new SodiumException('Nonce must be CRYPTO_AEAD_CHACHA20POLY1305_NPUBBYTES long'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES) { - throw new SodiumException('Key must be CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES long'); - } - - if (self::useNewSodiumAPI()) { - return (string) sodium_crypto_aead_chacha20poly1305_encrypt( - $plaintext, - $assocData, - $nonce, - $key - ); - } - if (self::use_fallback('crypto_aead_chacha20poly1305_encrypt')) { - return (string) call_user_func( - '\\Sodium\\crypto_aead_chacha20poly1305_encrypt', - $plaintext, - $assocData, - $nonce, - $key - ); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_encrypt( - $plaintext, - $assocData, - $nonce, - $key - ); - } - return ParagonIE_Sodium_Crypto::aead_chacha20poly1305_encrypt( - $plaintext, - $assocData, - $nonce, - $key - ); - } - - /** - * Authenticated Encryption with Associated Data: Decryption - * - * Algorithm: - * ChaCha20-Poly1305 - * - * IETF mode uses a 96-bit random nonce with a 32-bit counter. - * Regular mode uses a 64-bit random nonce with a 64-bit counter. - * - * @param string $ciphertext Encrypted message (with Poly1305 MAC appended) - * @param string $assocData Authenticated Associated Data (unencrypted) - * @param string $nonce Number to be used only Once; must be 12 bytes - * @param string $key Encryption key - * - * @return string The original plaintext message - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedInferredReturnType - * @psalm-suppress MixedReturnStatement - */ - public static function crypto_aead_chacha20poly1305_ietf_decrypt( - $ciphertext = '', - $assocData = '', - $nonce = '', - $key = '' - ) { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES) { - throw new SodiumException('Nonce must be CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES long'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES) { - throw new SodiumException('Key must be CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES long'); - } - if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_AEAD_CHACHA20POLY1305_ABYTES) { - throw new SodiumException('Message must be at least CRYPTO_AEAD_CHACHA20POLY1305_ABYTES long'); - } - - if (self::useNewSodiumAPI()) { - /** - * @psalm-suppress InvalidReturnStatement - * @psalm-suppress FalsableReturnStatement - */ - return sodium_crypto_aead_chacha20poly1305_ietf_decrypt( - $ciphertext, - $assocData, - $nonce, - $key - ); - } - if (self::use_fallback('crypto_aead_chacha20poly1305_ietf_decrypt')) { - return call_user_func( - '\\Sodium\\crypto_aead_chacha20poly1305_ietf_decrypt', - $ciphertext, - $assocData, - $nonce, - $key - ); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_ietf_decrypt( - $ciphertext, - $assocData, - $nonce, - $key - ); - } - return ParagonIE_Sodium_Crypto::aead_chacha20poly1305_ietf_decrypt( - $ciphertext, - $assocData, - $nonce, - $key - ); - } - - /** - * Return a secure random key for use with the ChaCha20-Poly1305 - * symmetric AEAD interface. - * - * @return string - */ - public static function crypto_aead_chacha20poly1305_keygen() - { - return random_bytes(self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES); - } - - /** - * Authenticated Encryption with Associated Data - * - * Algorithm: - * ChaCha20-Poly1305 - * - * IETF mode uses a 96-bit random nonce with a 32-bit counter. - * Regular mode uses a 64-bit random nonce with a 64-bit counter. - * - * @param string $plaintext Message to be encrypted - * @param string $assocData Authenticated Associated Data (unencrypted) - * @param string $nonce Number to be used only Once; must be 8 bytes - * @param string $key Encryption key - * - * @return string Ciphertext with a 16-byte Poly1305 message - * authentication code appended - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_aead_chacha20poly1305_ietf_encrypt( - $plaintext = '', - $assocData = '', - $nonce = '', - $key = '' - ) { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES) { - throw new SodiumException('Nonce must be CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES long'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES) { - throw new SodiumException('Key must be CRYPTO_AEAD_CHACHA20POLY1305_KEYBYTES long'); - } - - if (self::useNewSodiumAPI()) { - return (string) sodium_crypto_aead_chacha20poly1305_ietf_encrypt( - $plaintext, - $assocData, - $nonce, - $key - ); - } - if (self::use_fallback('crypto_aead_chacha20poly1305_ietf_encrypt')) { - return (string) call_user_func( - '\\Sodium\\crypto_aead_chacha20poly1305_ietf_encrypt', - $plaintext, - $assocData, - $nonce, - $key - ); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::aead_chacha20poly1305_ietf_encrypt( - $plaintext, - $assocData, - $nonce, - $key - ); - } - return ParagonIE_Sodium_Crypto::aead_chacha20poly1305_ietf_encrypt( - $plaintext, - $assocData, - $nonce, - $key - ); - } - - /** - * Return a secure random key for use with the ChaCha20-Poly1305 - * symmetric AEAD interface. (IETF version) - * - * @return string - */ - public static function crypto_aead_chacha20poly1305_ietf_keygen() - { - return random_bytes(self::CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES); - } - - /** - * Authenticated Encryption with Associated Data: Decryption - * - * Algorithm: - * XChaCha20-Poly1305 - * - * This mode uses a 64-bit random nonce with a 64-bit counter. - * IETF mode uses a 96-bit random nonce with a 32-bit counter. - * - * @param string $ciphertext Encrypted message (with Poly1305 MAC appended) - * @param string $assocData Authenticated Associated Data (unencrypted) - * @param string $nonce Number to be used only Once; must be 8 bytes - * @param string $key Encryption key - * - * @return string The original plaintext message - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_aead_xchacha20poly1305_ietf_decrypt( - $ciphertext = '', - $assocData = '', - $nonce = '', - $key = '' - ) { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES) { - throw new SodiumException('Nonce must be CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES long'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES) { - throw new SodiumException('Key must be CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES long'); - } - if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES) { - throw new SodiumException('Message must be at least CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES long'); - } - - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::aead_xchacha20poly1305_ietf_decrypt( - $ciphertext, - $assocData, - $nonce, - $key - ); - } - return ParagonIE_Sodium_Crypto::aead_xchacha20poly1305_ietf_decrypt( - $ciphertext, - $assocData, - $nonce, - $key - ); - } - - /** - * Authenticated Encryption with Associated Data - * - * Algorithm: - * XChaCha20-Poly1305 - * - * This mode uses a 64-bit random nonce with a 64-bit counter. - * IETF mode uses a 96-bit random nonce with a 32-bit counter. - * - * @param string $plaintext Message to be encrypted - * @param string $assocData Authenticated Associated Data (unencrypted) - * @param string $nonce Number to be used only Once; must be 8 bytes - * @param string $key Encryption key - * - * @return string Ciphertext with a 16-byte Poly1305 message - * authentication code appended - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_aead_xchacha20poly1305_ietf_encrypt( - $plaintext = '', - $assocData = '', - $nonce = '', - $key = '' - ) { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($assocData, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 3); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 4); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES) { - throw new SodiumException('Nonce must be CRYPTO_AEAD_XCHACHA20POLY1305_NPUBBYTES long'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES) { - throw new SodiumException('Key must be CRYPTO_AEAD_XCHACHA20POLY1305_KEYBYTES long'); - } - - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::aead_xchacha20poly1305_ietf_encrypt( - $plaintext, - $assocData, - $nonce, - $key - ); - } - return ParagonIE_Sodium_Crypto::aead_xchacha20poly1305_ietf_encrypt( - $plaintext, - $assocData, - $nonce, - $key - ); - } - - /** - * Return a secure random key for use with the XChaCha20-Poly1305 - * symmetric AEAD interface. - * - * @return string - */ - public static function crypto_aead_xchacha20poly1305_ietf_keygen() - { - return random_bytes(self::CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES); - } - - /** - * Authenticate a message. Uses symmetric-key cryptography. - * - * Algorithm: - * HMAC-SHA512-256. Which is HMAC-SHA-512 truncated to 256 bits. - * Not to be confused with HMAC-SHA-512/256 which would use the - * SHA-512/256 hash function (uses different initial parameters - * but still truncates to 256 bits to sidestep length-extension - * attacks). - * - * @param string $message Message to be authenticated - * @param string $key Symmetric authentication key - * @return string Message authentication code - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_auth($message, $key) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 2); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AUTH_KEYBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_AUTH_KEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return (string) sodium_crypto_auth($message, $key); - } - if (self::use_fallback('crypto_auth')) { - return (string) call_user_func('\\Sodium\\crypto_auth', $message, $key); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::auth($message, $key); - } - return ParagonIE_Sodium_Crypto::auth($message, $key); - } - - /** - * @return string - */ - public static function crypto_auth_keygen() - { - return random_bytes(self::CRYPTO_AUTH_KEYBYTES); - } - - /** - * Verify the MAC of a message previously authenticated with crypto_auth. - * - * @param string $mac Message authentication code - * @param string $message Message whose authenticity you are attempting to - * verify (with a given MAC and key) - * @param string $key Symmetric authentication key - * @return bool TRUE if authenticated, FALSE otherwise - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_auth_verify($mac, $message, $key) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($mac, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($mac) !== self::CRYPTO_AUTH_BYTES) { - throw new SodiumException('Argument 1 must be CRYPTO_AUTH_BYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_AUTH_KEYBYTES) { - throw new SodiumException('Argument 3 must be CRYPTO_AUTH_KEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return (bool) sodium_crypto_auth_verify($mac, $message, $key); - } - if (self::use_fallback('crypto_auth_verify')) { - return (bool) call_user_func('\\Sodium\\crypto_auth_verify', $mac, $message, $key); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::auth_verify($mac, $message, $key); - } - return ParagonIE_Sodium_Crypto::auth_verify($mac, $message, $key); - } - - /** - * Authenticated asymmetric-key encryption. Both the sender and recipient - * may decrypt messages. - * - * Algorithm: X25519-XSalsa20-Poly1305. - * X25519: Elliptic-Curve Diffie Hellman over Curve25519. - * XSalsa20: Extended-nonce variant of salsa20. - * Poyl1305: Polynomial MAC for one-time message authentication. - * - * @param string $plaintext The message to be encrypted - * @param string $nonce A Number to only be used Once; must be 24 bytes - * @param string $keypair Your secret key and your recipient's public key - * @return string Ciphertext with 16-byte Poly1305 MAC - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_box($plaintext, $nonce, $keypair) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 3); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_BOX_NONCEBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_BOX_NONCEBYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) { - throw new SodiumException('Argument 3 must be CRYPTO_BOX_KEYPAIRBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return (string) sodium_crypto_box($plaintext, $nonce, $keypair); - } - if (self::use_fallback('crypto_box')) { - return (string) call_user_func('\\Sodium\\crypto_box', $plaintext, $nonce, $keypair); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::box($plaintext, $nonce, $keypair); - } - return ParagonIE_Sodium_Crypto::box($plaintext, $nonce, $keypair); - } - - /** - * Anonymous public-key encryption. Only the recipient may decrypt messages. - * - * Algorithm: X25519-XSalsa20-Poly1305, as with crypto_box. - * The sender's X25519 keypair is ephemeral. - * Nonce is generated from the BLAKE2b hash of both public keys. - * - * This provides ciphertext integrity. - * - * @param string $plaintext Message to be sealed - * @param string $publicKey Your recipient's public key - * @return string Sealed message that only your recipient can - * decrypt - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_box_seal($plaintext, $publicKey) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_BOX_PUBLICKEYBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_BOX_PUBLICKEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return (string) sodium_crypto_box_seal($plaintext, $publicKey); - } - if (self::use_fallback('crypto_box_seal')) { - return (string) call_user_func('\\Sodium\\crypto_box_seal', $plaintext, $publicKey); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::box_seal($plaintext, $publicKey); - } - return ParagonIE_Sodium_Crypto::box_seal($plaintext, $publicKey); - } - - /** - * Opens a message encrypted with crypto_box_seal(). Requires - * the recipient's keypair (sk || pk) to decrypt successfully. - * - * This validates ciphertext integrity. - * - * @param string $ciphertext Sealed message to be opened - * @param string $keypair Your crypto_box keypair - * @return string The original plaintext message - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedInferredReturnType - * @psalm-suppress MixedReturnStatement - */ - public static function crypto_box_seal_open($ciphertext, $keypair) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 2); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_BOX_KEYPAIRBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - /** - * @psalm-suppress InvalidReturnStatement - * @psalm-suppress FalsableReturnStatement - */ - return sodium_crypto_box_seal_open($ciphertext, $keypair); - } - if (self::use_fallback('crypto_box_seal_open')) { - return call_user_func('\\Sodium\\crypto_box_seal_open', $ciphertext, $keypair); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::box_seal_open($ciphertext, $keypair); - } - return ParagonIE_Sodium_Crypto::box_seal_open($ciphertext, $keypair); - } - - /** - * Generate a new random X25519 keypair. - * - * @return string A 64-byte string; the first 32 are your secret key, while - * the last 32 are your public key. crypto_box_secretkey() - * and crypto_box_publickey() exist to separate them so you - * don't accidentally get them mixed up! - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_box_keypair() - { - if (self::useNewSodiumAPI()) { - return (string) sodium_crypto_box_keypair(); - } - if (self::use_fallback('crypto_box_keypair')) { - return (string) call_user_func('\\Sodium\\crypto_box_keypair'); - } - return ParagonIE_Sodium_Crypto::box_keypair(); - } - - /** - * Combine two keys into a keypair for use in library methods that expect - * a keypair. This doesn't necessarily have to be the same person's keys. - * - * @param string $secretKey Secret key - * @param string $publicKey Public key - * @return string Keypair - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_box_keypair_from_secretkey_and_publickey($secretKey, $publicKey) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_BOX_SECRETKEYBYTES) { - throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_BOX_PUBLICKEYBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_BOX_PUBLICKEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return (string) sodium_crypto_box_keypair_from_secretkey_and_publickey($secretKey, $publicKey); - } - if (self::use_fallback('crypto_box_keypair_from_secretkey_and_publickey')) { - return (string) call_user_func('\\Sodium\\crypto_box_keypair_from_secretkey_and_publickey', $secretKey, $publicKey); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::box_keypair_from_secretkey_and_publickey($secretKey, $publicKey); - } - return ParagonIE_Sodium_Crypto::box_keypair_from_secretkey_and_publickey($secretKey, $publicKey); - } - - /** - * Decrypt a message previously encrypted with crypto_box(). - * - * @param string $ciphertext Encrypted message - * @param string $nonce Number to only be used Once; must be 24 bytes - * @param string $keypair Your secret key and the sender's public key - * @return string The original plaintext message - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedInferredReturnType - * @psalm-suppress MixedReturnStatement - */ - public static function crypto_box_open($ciphertext, $nonce, $keypair) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 3); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($ciphertext) < self::CRYPTO_BOX_MACBYTES) { - throw new SodiumException('Argument 1 must be at least CRYPTO_BOX_MACBYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_BOX_NONCEBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_BOX_NONCEBYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) { - throw new SodiumException('Argument 3 must be CRYPTO_BOX_KEYPAIRBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - /** - * @psalm-suppress InvalidReturnStatement - * @psalm-suppress FalsableReturnStatement - */ - return sodium_crypto_box_open($ciphertext, $nonce, $keypair); - } - if (self::use_fallback('crypto_box_open')) { - return call_user_func('\\Sodium\\crypto_box_open', $ciphertext, $nonce, $keypair); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::box_open($ciphertext, $nonce, $keypair); - } - return ParagonIE_Sodium_Crypto::box_open($ciphertext, $nonce, $keypair); - } - - /** - * Extract the public key from a crypto_box keypair. - * - * @param string $keypair - * @return string Your crypto_box public key - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_box_publickey($keypair) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) { - throw new SodiumException('Argument 1 must be CRYPTO_BOX_KEYPAIRBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return (string) sodium_crypto_box_publickey($keypair); - } - if (self::use_fallback('crypto_box_publickey')) { - return (string) call_user_func('\\Sodium\\crypto_box_publickey', $keypair); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::box_publickey($keypair); - } - return ParagonIE_Sodium_Crypto::box_publickey($keypair); - } - - /** - * Calculate the X25519 public key from a given X25519 secret key. - * - * @param string $secretKey Any X25519 secret key - * @return string The corresponding X25519 public key - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_box_publickey_from_secretkey($secretKey) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_BOX_SECRETKEYBYTES) { - throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return (string) sodium_crypto_box_publickey_from_secretkey($secretKey); - } - if (self::use_fallback('crypto_box_publickey_from_secretkey')) { - return (string) call_user_func('\\Sodium\\crypto_box_publickey_from_secretkey', $secretKey); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::box_publickey_from_secretkey($secretKey); - } - return ParagonIE_Sodium_Crypto::box_publickey_from_secretkey($secretKey); - } - - /** - * Extract the secret key from a crypto_box keypair. - * - * @param string $keypair - * @return string Your crypto_box secret key - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_box_secretkey($keypair) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_BOX_KEYPAIRBYTES) { - throw new SodiumException('Argument 1 must be CRYPTO_BOX_KEYPAIRBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return (string) sodium_crypto_box_secretkey($keypair); - } - if (self::use_fallback('crypto_box_secretkey')) { - return (string) call_user_func('\\Sodium\\crypto_box_secretkey', $keypair); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::box_secretkey($keypair); - } - return ParagonIE_Sodium_Crypto::box_secretkey($keypair); - } - - /** - * Generate an X25519 keypair from a seed. - * - * @param string $seed - * @return string - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress UndefinedFunction - */ - public static function crypto_box_seed_keypair($seed) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($seed, 'string', 1); - - if (self::useNewSodiumAPI()) { - return (string) sodium_crypto_box_seed_keypair($seed); - } - if (self::use_fallback('crypto_box_seed_keypair')) { - return (string) call_user_func('\\Sodium\\crypto_box_seed_keypair', $seed); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::box_seed_keypair($seed); - } - return ParagonIE_Sodium_Crypto::box_seed_keypair($seed); - } - - /** - * Calculates a BLAKE2b hash, with an optional key. - * - * @param string $message The message to be hashed - * @param string|null $key If specified, must be a string between 16 - * and 64 bytes long - * @param int $length Output length in bytes; must be between 16 - * and 64 (default = 32) - * @return string Raw binary - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_generichash($message, $key = '', $length = self::CRYPTO_GENERICHASH_BYTES) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); - if (is_null($key)) { - $key = ''; - } - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($length, 'int', 3); - - /* Input validation: */ - if (!empty($key)) { - if (ParagonIE_Sodium_Core_Util::strlen($key) < self::CRYPTO_GENERICHASH_KEYBYTES_MIN) { - throw new SodiumException('Unsupported key size. Must be at least CRYPTO_GENERICHASH_KEYBYTES_MIN bytes long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) > self::CRYPTO_GENERICHASH_KEYBYTES_MAX) { - throw new SodiumException('Unsupported key size. Must be at most CRYPTO_GENERICHASH_KEYBYTES_MAX bytes long.'); - } - } - - if (self::useNewSodiumAPI()) { - return (string) sodium_crypto_generichash($message, $key, $length); - } - if (self::use_fallback('crypto_generichash')) { - return (string) call_user_func('\\Sodium\\crypto_generichash', $message, $key, $length); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::generichash($message, $key, $length); - } - return ParagonIE_Sodium_Crypto::generichash($message, $key, $length); - } - - /** - * Get the final BLAKE2b hash output for a given context. - * - * @param string &$ctx BLAKE2 hashing context. Generated by crypto_generichash_init(). - * @param int $length Hash output size. - * @return string Final BLAKE2b hash. - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_generichash_final(&$ctx, $length = self::CRYPTO_GENERICHASH_BYTES) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($ctx, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($length, 'int', 2); - - if (self::useNewSodiumAPI()) { - return sodium_crypto_generichash_final($ctx, $length); - } - if (self::use_fallback('crypto_generichash_final')) { - $func = '\\Sodium\\crypto_generichash_final'; - return (string) $func($ctx, $length); - } - if (PHP_INT_SIZE === 4) { - $result = ParagonIE_Sodium_Crypto32::generichash_final($ctx, $length); - } else { - $result = ParagonIE_Sodium_Crypto::generichash_final($ctx, $length); - } - try { - self::memzero($ctx); - } catch (SodiumException $ex) { - unset($ctx); - } - return $result; - } - - /** - * Initialize a BLAKE2b hashing context, for use in a streaming interface. - * - * @param string|null $key If specified must be a string between 16 and 64 bytes - * @param int $length The size of the desired hash output - * @return string A BLAKE2 hashing context, encoded as a string - * (To be 100% compatible with ext/libsodium) - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_generichash_init($key = '', $length = self::CRYPTO_GENERICHASH_BYTES) - { - /* Type checks: */ - if (is_null($key)) { - $key = ''; - } - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($length, 'int', 2); - - /* Input validation: */ - if (!empty($key)) { - if (ParagonIE_Sodium_Core_Util::strlen($key) < self::CRYPTO_GENERICHASH_KEYBYTES_MIN) { - throw new SodiumException('Unsupported key size. Must be at least CRYPTO_GENERICHASH_KEYBYTES_MIN bytes long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) > self::CRYPTO_GENERICHASH_KEYBYTES_MAX) { - throw new SodiumException('Unsupported key size. Must be at most CRYPTO_GENERICHASH_KEYBYTES_MAX bytes long.'); - } - } - - if (self::useNewSodiumAPI()) { - return sodium_crypto_generichash_init($key, $length); - } - if (self::use_fallback('crypto_generichash_init')) { - return (string) call_user_func('\\Sodium\\crypto_generichash_init', $key, $length); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::generichash_init($key, $length); - } - return ParagonIE_Sodium_Crypto::generichash_init($key, $length); - } - - /** - * Update a BLAKE2b hashing context with additional data. - * - * @param string &$ctx BLAKE2 hashing context. Generated by crypto_generichash_init(). - * $ctx is passed by reference and gets updated in-place. - * @param string $message The message to append to the existing hash state. - * @return void - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_generichash_update(&$ctx, $message) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($ctx, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 2); - - if (self::useNewSodiumAPI()) { - sodium_crypto_generichash_update($ctx, $message); - return; - } - if (self::use_fallback('crypto_generichash_update')) { - $func = '\\Sodium\\crypto_generichash_update'; - $func($ctx, $message); - return; - } - if (PHP_INT_SIZE === 4) { - $ctx = ParagonIE_Sodium_Crypto32::generichash_update($ctx, $message); - } else { - $ctx = ParagonIE_Sodium_Crypto::generichash_update($ctx, $message); - } - } - - /** - * @return string - */ - public static function crypto_generichash_keygen() - { - return random_bytes(self::CRYPTO_GENERICHASH_KEYBYTES); - } - - /** - * Perform a key exchange, between a designated client and a server. - * - * Typically, you would designate one machine to be the client and the - * other to be the server. The first two keys are what you'd expect for - * scalarmult() below, but the latter two public keys don't swap places. - * - * | ALICE | BOB | - * | Client | Server | - * |--------------------------------|-------------------------------------| - * | shared = crypto_kx( | shared = crypto_kx( | - * | alice_sk, | bob_sk, | <- contextual - * | bob_pk, | alice_pk, | <- contextual - * | alice_pk, | alice_pk, | <----- static - * | bob_pk | bob_pk | <----- static - * | ) | ) | - * - * They are used along with the scalarmult product to generate a 256-bit - * BLAKE2b hash unique to the client and server keys. - * - * @param string $my_secret - * @param string $their_public - * @param string $client_public - * @param string $server_public - * @return string - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_kx($my_secret, $their_public, $client_public, $server_public) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($my_secret, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($their_public, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($client_public, 'string', 3); - ParagonIE_Sodium_Core_Util::declareScalarType($server_public, 'string', 4); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($my_secret) !== self::CRYPTO_BOX_SECRETKEYBYTES) { - throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($their_public) !== self::CRYPTO_BOX_PUBLICKEYBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_BOX_PUBLICKEYBYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($client_public) !== self::CRYPTO_BOX_PUBLICKEYBYTES) { - throw new SodiumException('Argument 3 must be CRYPTO_BOX_PUBLICKEYBYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($server_public) !== self::CRYPTO_BOX_PUBLICKEYBYTES) { - throw new SodiumException('Argument 4 must be CRYPTO_BOX_PUBLICKEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - if (is_callable('sodium_crypto_kx')) { - return (string) sodium_crypto_kx( - $my_secret, - $their_public, - $client_public, - $server_public - ); - } - } - if (self::use_fallback('crypto_kx')) { - return (string) call_user_func( - '\\Sodium\\crypto_kx', - $my_secret, - $their_public, - $client_public, - $server_public - ); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::keyExchange( - $my_secret, - $their_public, - $client_public, - $server_public - ); - } - return ParagonIE_Sodium_Crypto::keyExchange( - $my_secret, - $their_public, - $client_public, - $server_public - ); - } - - /** - * @param int $outlen - * @param string $passwd - * @param string $salt - * @param int $opslimit - * @param int $memlimit - * @param int|null $alg - * @return string - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit, $alg = null) - { - ParagonIE_Sodium_Core_Util::declareScalarType($outlen, 'int', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($salt, 'string', 3); - ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 4); - ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 5); - - if (self::useNewSodiumAPI()) { - if (!is_null($alg)) { - ParagonIE_Sodium_Core_Util::declareScalarType($alg, 'int', 6); - return sodium_crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit, $alg); - } - return sodium_crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit); - } - if (self::use_fallback('crypto_pwhash')) { - return (string) call_user_func('\\Sodium\\crypto_pwhash', $outlen, $passwd, $salt, $opslimit, $memlimit); - } - // This is the best we can do. - throw new SodiumException( - 'This is not implemented, as it is not possible to implement Argon2i with acceptable performance in pure-PHP' - ); - } - - /** - * !Exclusive to sodium_compat! - * - * This returns TRUE if the native crypto_pwhash API is available by libsodium. - * This returns FALSE if only sodium_compat is available. - * - * @return bool - */ - public static function crypto_pwhash_is_available() - { - if (self::useNewSodiumAPI()) { - return true; - } - if (self::use_fallback('crypto_pwhash')) { - return true; - } - return false; - } - - /** - * @param string $passwd - * @param int $opslimit - * @param int $memlimit - * @return string - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_pwhash_str($passwd, $opslimit, $memlimit) - { - ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 3); - - if (self::useNewSodiumAPI()) { - return sodium_crypto_pwhash_str($passwd, $opslimit, $memlimit); - } - if (self::use_fallback('crypto_pwhash_str')) { - return (string) call_user_func('\\Sodium\\crypto_pwhash_str', $passwd, $opslimit, $memlimit); - } - // This is the best we can do. - throw new SodiumException( - 'This is not implemented, as it is not possible to implement Argon2i with acceptable performance in pure-PHP' - ); - } - - /** - * @param string $passwd - * @param string $hash - * @return bool - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_pwhash_str_verify($passwd, $hash) - { - ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($hash, 'string', 2); - - if (self::useNewSodiumAPI()) { - return (bool) sodium_crypto_pwhash_str_verify($passwd, $hash); - } - if (self::use_fallback('crypto_pwhash_str_verify')) { - return (bool) call_user_func('\\Sodium\\crypto_pwhash_str_verify', $passwd, $hash); - } - // This is the best we can do. - throw new SodiumException( - 'This is not implemented, as it is not possible to implement Argon2i with acceptable performance in pure-PHP' - ); - } - - /** - * @param int $outlen - * @param string $passwd - * @param string $salt - * @param int $opslimit - * @param int $memlimit - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function crypto_pwhash_scryptsalsa208sha256($outlen, $passwd, $salt, $opslimit, $memlimit) - { - ParagonIE_Sodium_Core_Util::declareScalarType($outlen, 'int', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($salt, 'string', 3); - ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 4); - ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 5); - - if (self::useNewSodiumAPI()) { - return (string) sodium_crypto_pwhash_scryptsalsa208sha256($outlen, $passwd, $salt, $opslimit, $memlimit); - } - if (self::use_fallback('crypto_pwhash_scryptsalsa208sha256')) { - return (string) call_user_func('\\Sodium\\crypto_pwhash_scryptsalsa208sha256', $outlen, $passwd, $salt, $opslimit, $memlimit); - } - // This is the best we can do. - throw new SodiumException( - 'This is not implemented, as it is not possible to implement Scrypt with acceptable performance in pure-PHP' - ); - } - - /** - * !Exclusive to sodium_compat! - * - * This returns TRUE if the native crypto_pwhash API is available by libsodium. - * This returns FALSE if only sodium_compat is available. - * - * @return bool - */ - public static function crypto_pwhash_scryptsalsa208sha256_is_available() - { - if (self::useNewSodiumAPI()) { - return true; - } - if (self::use_fallback('crypto_pwhash_scryptsalsa208sha256')) { - return true; - } - return false; - } - - /** - * @param string $passwd - * @param int $opslimit - * @param int $memlimit - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit) - { - ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 3); - - if (self::useNewSodiumAPI()) { - return (string) sodium_crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit); - } - if (self::use_fallback('crypto_pwhash_scryptsalsa208sha256_str')) { - return (string) call_user_func('\\Sodium\\crypto_pwhash_scryptsalsa208sha256_str', $passwd, $opslimit, $memlimit); - } - // This is the best we can do. - throw new SodiumException( - 'This is not implemented, as it is not possible to implement Scrypt with acceptable performance in pure-PHP' - ); - } - - /** - * @param string $passwd - * @param string $hash - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash) - { - ParagonIE_Sodium_Core_Util::declareScalarType($passwd, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($hash, 'string', 2); - - if (self::useNewSodiumAPI()) { - return (bool) sodium_crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash); - } - if (self::use_fallback('crypto_pwhash_scryptsalsa208sha256_str_verify')) { - return (bool) call_user_func('\\Sodium\\crypto_pwhash_scryptsalsa208sha256_str_verify', $passwd, $hash); - } - // This is the best we can do. - throw new SodiumException( - 'This is not implemented, as it is not possible to implement Scrypt with acceptable performance in pure-PHP' - ); - } - - /** - * Calculate the shared secret between your secret key and your - * recipient's public key. - * - * Algorithm: X25519 (ECDH over Curve25519) - * - * @param string $secretKey - * @param string $publicKey - * @return string - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_scalarmult($secretKey, $publicKey) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_BOX_SECRETKEYBYTES) { - throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_BOX_PUBLICKEYBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_BOX_PUBLICKEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return sodium_crypto_scalarmult($secretKey, $publicKey); - } - if (self::use_fallback('crypto_scalarmult')) { - return (string) call_user_func('\\Sodium\\crypto_scalarmult', $secretKey, $publicKey); - } - - /* Output validation: Forbid all-zero keys */ - if (ParagonIE_Sodium_Core_Util::hashEquals($secretKey, str_repeat("\0", self::CRYPTO_BOX_SECRETKEYBYTES))) { - throw new SodiumException('Zero secret key is not allowed'); - } - if (ParagonIE_Sodium_Core_Util::hashEquals($publicKey, str_repeat("\0", self::CRYPTO_BOX_PUBLICKEYBYTES))) { - throw new SodiumException('Zero public key is not allowed'); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::scalarmult($secretKey, $publicKey); - } - return ParagonIE_Sodium_Crypto::scalarmult($secretKey, $publicKey); - } - - /** - * Calculate an X25519 public key from an X25519 secret key. - * - * @param string $secretKey - * @return string - * @throws SodiumException - * @throws TypeError - * @psalm-suppress TooFewArguments - * @psalm-suppress MixedArgument - */ - public static function crypto_scalarmult_base($secretKey) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_BOX_SECRETKEYBYTES) { - throw new SodiumException('Argument 1 must be CRYPTO_BOX_SECRETKEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return sodium_crypto_scalarmult_base($secretKey); - } - if (self::use_fallback('crypto_scalarmult_base')) { - return (string) call_user_func('\\Sodium\\crypto_scalarmult_base', $secretKey); - } - if (ParagonIE_Sodium_Core_Util::hashEquals($secretKey, str_repeat("\0", self::CRYPTO_BOX_SECRETKEYBYTES))) { - throw new SodiumException('Zero secret key is not allowed'); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::scalarmult_base($secretKey); - } - return ParagonIE_Sodium_Crypto::scalarmult_base($secretKey); - } - - /** - * Authenticated symmetric-key encryption. - * - * Algorithm: XSalsa20-Poly1305 - * - * @param string $plaintext The message you're encrypting - * @param string $nonce A Number to be used Once; must be 24 bytes - * @param string $key Symmetric encryption key - * @return string Ciphertext with Poly1305 MAC - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_secretbox($plaintext, $nonce, $key) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_SECRETBOX_NONCEBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SECRETBOX_KEYBYTES) { - throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return sodium_crypto_secretbox($plaintext, $nonce, $key); - } - if (self::use_fallback('crypto_secretbox')) { - return (string) call_user_func('\\Sodium\\crypto_secretbox', $plaintext, $nonce, $key); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::secretbox($plaintext, $nonce, $key); - } - return ParagonIE_Sodium_Crypto::secretbox($plaintext, $nonce, $key); - } - - /** - * Decrypts a message previously encrypted with crypto_secretbox(). - * - * @param string $ciphertext Ciphertext with Poly1305 MAC - * @param string $nonce A Number to be used Once; must be 24 bytes - * @param string $key Symmetric encryption key - * @return string Original plaintext message - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedInferredReturnType - * @psalm-suppress MixedReturnStatement - */ - public static function crypto_secretbox_open($ciphertext, $nonce, $key) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_SECRETBOX_NONCEBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SECRETBOX_KEYBYTES) { - throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - /** - * @psalm-suppress InvalidReturnStatement - * @psalm-suppress FalsableReturnStatement - */ - return sodium_crypto_secretbox_open($ciphertext, $nonce, $key); - } - if (self::use_fallback('crypto_secretbox_open')) { - return call_user_func('\\Sodium\\crypto_secretbox_open', $ciphertext, $nonce, $key); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::secretbox_open($ciphertext, $nonce, $key); - } - return ParagonIE_Sodium_Crypto::secretbox_open($ciphertext, $nonce, $key); - } - - /** - * Return a secure random key for use with crypto_secretbox - * - * @return string - */ - public static function crypto_secretbox_keygen() - { - return random_bytes(self::CRYPTO_SECRETBOX_KEYBYTES); - } - - /** - * Authenticated symmetric-key encryption. - * - * Algorithm: XChaCha20-Poly1305 - * - * @param string $plaintext The message you're encrypting - * @param string $nonce A Number to be used Once; must be 24 bytes - * @param string $key Symmetric encryption key - * @return string Ciphertext with Poly1305 MAC - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_secretbox_xchacha20poly1305($plaintext, $nonce, $key) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($plaintext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_SECRETBOX_NONCEBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SECRETBOX_KEYBYTES) { - throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.'); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::secretbox_xchacha20poly1305($plaintext, $nonce, $key); - } - return ParagonIE_Sodium_Crypto::secretbox_xchacha20poly1305($plaintext, $nonce, $key); - } - /** - * Decrypts a message previously encrypted with crypto_secretbox_xchacha20poly1305(). - * - * @param string $ciphertext Ciphertext with Poly1305 MAC - * @param string $nonce A Number to be used Once; must be 24 bytes - * @param string $key Symmetric encryption key - * @return string Original plaintext message - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($ciphertext, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_SECRETBOX_NONCEBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SECRETBOX_KEYBYTES) { - throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.'); - } - - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key); - } - return ParagonIE_Sodium_Crypto::secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key); - } - - /** - * Calculates a SipHash-2-4 hash of a message for a given key. - * - * @param string $message Input message - * @param string $key SipHash-2-4 key - * @return string Hash - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedInferredReturnType - * @psalm-suppress MixedReturnStatement - */ - public static function crypto_shorthash($message, $key) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 2); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_SHORTHASH_KEYBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_SHORTHASH_KEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return sodium_crypto_shorthash($message, $key); - } - if (self::use_fallback('crypto_shorthash')) { - return (string) call_user_func('\\Sodium\\crypto_shorthash', $message, $key); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Core32_SipHash::sipHash24($message, $key); - } - return ParagonIE_Sodium_Core_SipHash::sipHash24($message, $key); - } - - /** - * Return a secure random key for use with crypto_shorthash - * - * @return string - */ - public static function crypto_shorthash_keygen() - { - return random_bytes(self::CRYPTO_SHORTHASH_KEYBYTES); - } - - /** - * Returns a signed message. You probably want crypto_sign_detached() - * instead, which only returns the signature. - * - * Algorithm: Ed25519 (EdDSA over Curve25519) - * - * @param string $message Message to be signed. - * @param string $secretKey Secret signing key. - * @return string Signed message (signature is prefixed). - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedInferredReturnType - * @psalm-suppress MixedReturnStatement - */ - public static function crypto_sign($message, $secretKey) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 2); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_SIGN_SECRETKEYBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_SIGN_SECRETKEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return sodium_crypto_sign($message, $secretKey); - } - if (self::use_fallback('crypto_sign')) { - return (string) call_user_func('\\Sodium\\crypto_sign', $message, $secretKey); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::sign($message, $secretKey); - } - return ParagonIE_Sodium_Crypto::sign($message, $secretKey); - } - - /** - * Validates a signed message then returns the message. - * - * @param string $signedMessage A signed message - * @param string $publicKey A public key - * @return string The original message (if the signature is - * valid for this public key) - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedInferredReturnType - * @psalm-suppress MixedReturnStatement - */ - public static function crypto_sign_open($signedMessage, $publicKey) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($signedMessage, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 2); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($signedMessage) < self::CRYPTO_SIGN_BYTES) { - throw new SodiumException('Argument 1 must be at least CRYPTO_SIGN_BYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_SIGN_PUBLICKEYBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_SIGN_PUBLICKEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - /** - * @psalm-suppress InvalidReturnStatement - * @psalm-suppress FalsableReturnStatement - */ - return sodium_crypto_sign_open($signedMessage, $publicKey); - } - if (self::use_fallback('crypto_sign_open')) { - return call_user_func('\\Sodium\\crypto_sign_open', $signedMessage, $publicKey); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::sign_open($signedMessage, $publicKey); - } - return ParagonIE_Sodium_Crypto::sign_open($signedMessage, $publicKey); - } - - /** - * Generate a new random Ed25519 keypair. - * - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function crypto_sign_keypair() - { - if (self::useNewSodiumAPI()) { - return sodium_crypto_sign_keypair(); - } - if (self::use_fallback('crypto_sign_keypair')) { - return (string) call_user_func('\\Sodium\\crypto_sign_keypair'); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Core32_Ed25519::keypair(); - } - return ParagonIE_Sodium_Core_Ed25519::keypair(); - } - - /** - * Generate an Ed25519 keypair from a seed. - * - * @param string $seed Input seed - * @return string Keypair - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_sign_seed_keypair($seed) - { - ParagonIE_Sodium_Core_Util::declareScalarType($seed, 'string', 1); - - if (self::useNewSodiumAPI()) { - return sodium_crypto_sign_seed_keypair($seed); - } - if (self::use_fallback('crypto_sign_keypair')) { - return (string) call_user_func('\\Sodium\\crypto_sign_seed_keypair', $seed); - } - $publicKey = ''; - $secretKey = ''; - if (PHP_INT_SIZE === 4) { - ParagonIE_Sodium_Core32_Ed25519::seed_keypair($publicKey, $secretKey, $seed); - } else { - ParagonIE_Sodium_Core_Ed25519::seed_keypair($publicKey, $secretKey, $seed); - } - return $secretKey . $publicKey; - } - - /** - * Extract an Ed25519 public key from an Ed25519 keypair. - * - * @param string $keypair Keypair - * @return string Public key - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_sign_publickey($keypair) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_SIGN_KEYPAIRBYTES) { - throw new SodiumException('Argument 1 must be CRYPTO_SIGN_KEYPAIRBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return sodium_crypto_sign_publickey($keypair); - } - if (self::use_fallback('crypto_sign_publickey')) { - return (string) call_user_func('\\Sodium\\crypto_sign_publickey', $keypair); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Core32_Ed25519::publickey($keypair); - } - return ParagonIE_Sodium_Core_Ed25519::publickey($keypair); - } - - /** - * Calculate an Ed25519 public key from an Ed25519 secret key. - * - * @param string $secretKey Your Ed25519 secret key - * @return string The corresponding Ed25519 public key - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_sign_publickey_from_secretkey($secretKey) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 1); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_SIGN_SECRETKEYBYTES) { - throw new SodiumException('Argument 1 must be CRYPTO_SIGN_SECRETKEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return sodium_crypto_sign_publickey_from_secretkey($secretKey); - } - if (self::use_fallback('crypto_sign_publickey_from_secretkey')) { - return (string) call_user_func('\\Sodium\\crypto_sign_publickey_from_secretkey', $secretKey); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Core32_Ed25519::publickey_from_secretkey($secretKey); - } - return ParagonIE_Sodium_Core_Ed25519::publickey_from_secretkey($secretKey); - } - - /** - * Extract an Ed25519 secret key from an Ed25519 keypair. - * - * @param string $keypair Keypair - * @return string Secret key - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_sign_secretkey($keypair) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($keypair, 'string', 1); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== self::CRYPTO_SIGN_KEYPAIRBYTES) { - throw new SodiumException('Argument 1 must be CRYPTO_SIGN_KEYPAIRBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return sodium_crypto_sign_secretkey($keypair); - } - if (self::use_fallback('crypto_sign_secretkey')) { - return (string) call_user_func('\\Sodium\\crypto_sign_secretkey', $keypair); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Core32_Ed25519::secretkey($keypair); - } - return ParagonIE_Sodium_Core_Ed25519::secretkey($keypair); - } - - /** - * Calculate the Ed25519 signature of a message and return ONLY the signature. - * - * Algorithm: Ed25519 (EdDSA over Curve25519) - * - * @param string $message Message to be signed - * @param string $secretKey Secret signing key - * @return string Digital signature - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_sign_detached($message, $secretKey) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($secretKey, 'string', 2); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($secretKey) !== self::CRYPTO_SIGN_SECRETKEYBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_SIGN_SECRETKEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return sodium_crypto_sign_detached($message, $secretKey); - } - if (self::use_fallback('crypto_sign_detached')) { - return (string) call_user_func('\\Sodium\\crypto_sign_detached', $message, $secretKey); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::sign_detached($message, $secretKey); - } - return ParagonIE_Sodium_Crypto::sign_detached($message, $secretKey); - } - - /** - * Verify the Ed25519 signature of a message. - * - * @param string $signature Digital sginature - * @param string $message Message to be verified - * @param string $publicKey Public key - * @return bool TRUE if this signature is good for this public key; - * FALSE otherwise - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_sign_verify_detached($signature, $message, $publicKey) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($signature, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($publicKey, 'string', 3); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($signature) !== self::CRYPTO_SIGN_BYTES) { - throw new SodiumException('Argument 1 must be CRYPTO_SIGN_BYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($publicKey) !== self::CRYPTO_SIGN_PUBLICKEYBYTES) { - throw new SodiumException('Argument 3 must be CRYPTO_SIGN_PUBLICKEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return sodium_crypto_sign_verify_detached($signature, $message, $publicKey); - } - if (self::use_fallback('crypto_sign_verify_detached')) { - return (bool) call_user_func('\\Sodium\\crypto_sign_verify_detached', $signature, $message, $publicKey); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Crypto32::sign_verify_detached($signature, $message, $publicKey); - } - return ParagonIE_Sodium_Crypto::sign_verify_detached($signature, $message, $publicKey); - } - - /** - * Convert an Ed25519 public key to a Curve25519 public key - * - * @param string $pk - * @return string - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_sign_ed25519_pk_to_curve25519($pk) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($pk, 'string', 1); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($pk) < self::CRYPTO_SIGN_PUBLICKEYBYTES) { - throw new SodiumException('Argument 1 must be at least CRYPTO_SIGN_PUBLICKEYBYTES long.'); - } - if (self::useNewSodiumAPI()) { - if (is_callable('crypto_sign_ed25519_pk_to_curve25519')) { - return (string) sodium_crypto_sign_ed25519_pk_to_curve25519($pk); - } - } - if (self::use_fallback('crypto_sign_ed25519_pk_to_curve25519')) { - return (string) call_user_func('\\Sodium\\crypto_sign_ed25519_pk_to_curve25519', $pk); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Core32_Ed25519::pk_to_curve25519($pk); - } - return ParagonIE_Sodium_Core_Ed25519::pk_to_curve25519($pk); - } - - /** - * Convert an Ed25519 secret key to a Curve25519 secret key - * - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_sign_ed25519_sk_to_curve25519($sk) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($sk, 'string', 1); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($sk) < self::CRYPTO_SIGN_SEEDBYTES) { - throw new SodiumException('Argument 1 must be at least CRYPTO_SIGN_SEEDBYTES long.'); - } - if (self::useNewSodiumAPI()) { - if (is_callable('crypto_sign_ed25519_sk_to_curve25519')) { - return sodium_crypto_sign_ed25519_sk_to_curve25519($sk); - } - } - if (self::use_fallback('crypto_sign_ed25519_sk_to_curve25519')) { - return (string) call_user_func('\\Sodium\\crypto_sign_ed25519_sk_to_curve25519', $sk); - } - - $h = hash('sha512', ParagonIE_Sodium_Core_Util::substr($sk, 0, 32), true); - $h[0] = ParagonIE_Sodium_Core_Util::intToChr( - ParagonIE_Sodium_Core_Util::chrToInt($h[0]) & 248 - ); - $h[31] = ParagonIE_Sodium_Core_Util::intToChr( - (ParagonIE_Sodium_Core_Util::chrToInt($h[31]) & 127) | 64 - ); - return ParagonIE_Sodium_Core_Util::substr($h, 0, 32); - } - - /** - * Expand a key and nonce into a keystream of pseudorandom bytes. - * - * @param int $len Number of bytes desired - * @param string $nonce Number to be used Once; must be 24 bytes - * @param string $key XSalsa20 key - * @return string Pseudorandom stream that can be XORed with messages - * to provide encryption (but not authentication; see - * Poly1305 or crypto_auth() for that, which is not - * optional for security) - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_stream($len, $nonce, $key) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($len, 'int', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_STREAM_NONCEBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_STREAM_KEYBYTES) { - throw new SodiumException('Argument 3 must be CRYPTO_STREAM_KEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return sodium_crypto_stream($len, $nonce, $key); - } - if (self::use_fallback('crypto_stream')) { - return (string) call_user_func('\\Sodium\\crypto_stream', $len, $nonce, $key); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Core32_XSalsa20::xsalsa20($len, $nonce, $key); - } - return ParagonIE_Sodium_Core_XSalsa20::xsalsa20($len, $nonce, $key); - } - - /** - * DANGER! UNAUTHENTICATED ENCRYPTION! - * - * Unless you are following expert advice, do not used this feature. - * - * Algorithm: XSalsa20 - * - * This DOES NOT provide ciphertext integrity. - * - * @param string $message Plaintext message - * @param string $nonce Number to be used Once; must be 24 bytes - * @param string $key Encryption key - * @return string Encrypted text which is vulnerable to chosen- - * ciphertext attacks unless you implement some - * other mitigation to the ciphertext (i.e. - * Encrypt then MAC) - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function crypto_stream_xor($message, $nonce, $key) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($message, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($nonce, 'string', 2); - ParagonIE_Sodium_Core_Util::declareScalarType($key, 'string', 3); - - /* Input validation: */ - if (ParagonIE_Sodium_Core_Util::strlen($nonce) !== self::CRYPTO_STREAM_NONCEBYTES) { - throw new SodiumException('Argument 2 must be CRYPTO_SECRETBOX_NONCEBYTES long.'); - } - if (ParagonIE_Sodium_Core_Util::strlen($key) !== self::CRYPTO_STREAM_KEYBYTES) { - throw new SodiumException('Argument 3 must be CRYPTO_SECRETBOX_KEYBYTES long.'); - } - - if (self::useNewSodiumAPI()) { - return sodium_crypto_stream_xor($message, $nonce, $key); - } - if (self::use_fallback('crypto_stream_xor')) { - return (string) call_user_func('\\Sodium\\crypto_stream_xor', $message, $nonce, $key); - } - if (PHP_INT_SIZE === 4) { - return ParagonIE_Sodium_Core32_XSalsa20::xsalsa20_xor($message, $nonce, $key); - } - return ParagonIE_Sodium_Core_XSalsa20::xsalsa20_xor($message, $nonce, $key); - } - - /** - * Return a secure random key for use with crypto_stream - * - * @return string - */ - public static function crypto_stream_keygen() - { - return random_bytes(self::CRYPTO_STREAM_KEYBYTES); - } - - /** - * Cache-timing-safe implementation of hex2bin(). - * - * @param string $string Hexadecimal string - * @return string Raw binary string - * @throws SodiumException - * @throws TypeError - * @psalm-suppress TooFewArguments - * @psalm-suppress MixedArgument - */ - public static function hex2bin($string) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($string, 'string', 1); - - if (self::useNewSodiumAPI()) { - if (is_callable('sodium_hex2bin')) { - return (string) sodium_hex2bin($string); - } - } - if (self::use_fallback('hex2bin')) { - return (string) call_user_func('\\Sodium\\hex2bin', $string); - } - return ParagonIE_Sodium_Core_Util::hex2bin($string); - } - - /** - * Increase a string (little endian) - * - * @param string $var - * - * @return void - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function increment(&$var) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($var, 'string', 1); - - if (self::useNewSodiumAPI()) { - sodium_increment($var); - return; - } - if (self::use_fallback('increment')) { - @call_user_func('\\Sodium\\increment', $var); - return; - } - - $len = ParagonIE_Sodium_Core_Util::strlen($var); - $c = 1; - $copy = ''; - for ($i = 0; $i < $len; ++$i) { - $c += ParagonIE_Sodium_Core_Util::chrToInt( - ParagonIE_Sodium_Core_Util::substr($var, $i, 1) - ); - $copy .= ParagonIE_Sodium_Core_Util::intToChr($c); - $c >>= 8; - } - $var = $copy; - } - - /** - * The equivalent to the libsodium minor version we aim to be compatible - * with (sans pwhash and memzero). - * - * @return int - * @psalm-suppress MixedInferredReturnType - * @psalm-suppress UndefinedFunction - */ - public static function library_version_major() - { - if (self::useNewSodiumAPI()) { - return sodium_library_version_major(); - } - if (self::use_fallback('library_version_major')) { - return (int) call_user_func('\\Sodium\\library_version_major'); - } - return self::LIBRARY_VERSION_MAJOR; - } - - /** - * The equivalent to the libsodium minor version we aim to be compatible - * with (sans pwhash and memzero). - * - * @return int - * @psalm-suppress MixedInferredReturnType - * @psalm-suppress UndefinedFunction - */ - public static function library_version_minor() - { - if (self::useNewSodiumAPI()) { - return sodium_library_version_minor(); - } - if (self::use_fallback('library_version_minor')) { - return (int) call_user_func('\\Sodium\\library_version_minor'); - } - return self::LIBRARY_VERSION_MINOR; - } - - /** - * Compare two strings. - * - * @param string $left - * @param string $right - * @return int - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - */ - public static function memcmp($left, $right) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($left, 'string', 1); - ParagonIE_Sodium_Core_Util::declareScalarType($right, 'string', 2); - - if (self::use_fallback('memcmp')) { - return (int) call_user_func('\\Sodium\\memcmp', $left, $right); - } - /** @var string $left */ - /** @var string $right */ - return ParagonIE_Sodium_Core_Util::memcmp($left, $right); - } - - /** - * It's actually not possible to zero memory buffers in PHP. You need the - * native library for that. - * - * @param string|null $var - * - * @return void - * @throws SodiumException (Unless libsodium is installed) - * @throws TypeError - * @psalm-suppress TooFewArguments - */ - public static function memzero(&$var) - { - /* Type checks: */ - ParagonIE_Sodium_Core_Util::declareScalarType($var, 'string', 1); - - if (self::useNewSodiumAPI()) { - sodium_memzero($var); - return; - } - if (self::use_fallback('memzero')) { - @call_user_func('\\Sodium\\memzero', $var); - return; - } - // This is the best we can do. - throw new SodiumException( - 'This is not implemented in sodium_compat, as it is not possible to securely wipe memory from PHP. ' . - 'To fix this error, make sure libsodium is installed and the PHP extension is enabled.' - ); - } - - /** - * Generate a string of bytes from the kernel's CSPRNG. - * Proudly uses /dev/urandom (if getrandom(2) is not available). - * - * @param int $numBytes - * @return string - * @throws TypeError - */ - public static function randombytes_buf($numBytes) - { - /* Type checks: */ - if (!is_int($numBytes)) { - if (is_numeric($numBytes)) { - $numBytes = (int) $numBytes; - } else { - throw new TypeError('Argument 1 must be an integer, ' . gettype($numBytes) . ' given.'); - } - } - if (self::use_fallback('randombytes_buf')) { - return (string) call_user_func('\\Sodium\\randombytes_buf', $numBytes); - } - return random_bytes($numBytes); - } - - /** - * Generate an integer between 0 and $range (non-inclusive). - * - * @param int $range - * @return int - * @throws TypeError - */ - public static function randombytes_uniform($range) - { - /* Type checks: */ - if (!is_int($range)) { - if (is_numeric($range)) { - $range = (int)$range; - } else { - throw new TypeError('Argument 1 must be an integer, ' . gettype($range) . ' given.'); - } - } - if (self::use_fallback('randombytes_uniform')) { - return (int) call_user_func('\\Sodium\\randombytes_uniform', $range); - } - return random_int(0, $range - 1); - } - - /** - * Generate a random 16-bit integer. - * - * @return int - */ - public static function randombytes_random16() - { - if (self::use_fallback('randombytes_random16')) { - return (int) call_user_func('\\Sodium\\randombytes_random16'); - } - return random_int(0, 65535); - } - - /** - * This emulates libsodium's version_string() function, except ours is - * prefixed with 'polyfill-'. - * - * @return string - * @psalm-suppress MixedInferredReturnType - * @psalm-suppress UndefinedFunction - */ - public static function version_string() - { - if (self::useNewSodiumAPI()) { - return (string) sodium_version_string(); - } - if (self::use_fallback('version_string')) { - return (string) call_user_func('\\Sodium\\version_string'); - } - return (string) self::VERSION_STRING; - } - - /** - * Should we use the libsodium core function instead? - * This is always a good idea, if it's available. (Unless we're in the - * middle of running our unit test suite.) - * - * If ext/libsodium is available, use it. Return TRUE. - * Otherwise, we have to use the code provided herein. Return FALSE. - * - * @param string $sodium_func_name - * - * @return bool - */ - protected static function use_fallback($sodium_func_name = '') - { - static $res = null; - if ($res === null) { - $res = extension_loaded('libsodium') && PHP_VERSION_ID >= 50300; - } - if ($res === false) { - // No libsodium installed - return false; - } - if (self::$disableFallbackForUnitTests) { - // Don't fallback. Use the PHP implementation. - return false; - } - if (!empty($sodium_func_name)) { - return is_callable('\\Sodium\\' . $sodium_func_name); - } - return true; - } - - /** - * Libsodium as implemented in PHP 7.2 - * and/or ext/sodium (via PECL) - * - * @ref https://wiki.php.net/rfc/libsodium - * @return bool - */ - protected static function useNewSodiumAPI() - { - static $res = null; - if ($res === null) { - $res = PHP_VERSION_ID >= 70000 && extension_loaded('sodium'); - } - if (self::$disableFallbackForUnitTests) { - // Don't fallback. Use the PHP implementation. - return false; - } - return (bool) $res; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php b/libraries/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php deleted file mode 100644 index c1a232b310274..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php +++ /dev/null @@ -1,746 +0,0 @@ -> - */ - protected static $sigma = array( - array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), - array( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3), - array( 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4), - array( 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8), - array( 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13), - array( 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9), - array( 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11), - array( 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10), - array( 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5), - array( 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0), - array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), - array( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3) - ); - - const BLOCKBYTES = 128; - const OUTBYTES = 64; - const KEYBYTES = 64; - - /** - * Turn two 32-bit integers into a fixed array representing a 64-bit integer. - * - * @internal You should not use this directly from another application - * - * @param int $high - * @param int $low - * @return SplFixedArray - * @psalm-suppress MixedAssignment - */ - public static function new64($high, $low) - { - $i64 = new SplFixedArray(2); - $i64[0] = $high & 0xffffffff; - $i64[1] = $low & 0xffffffff; - return $i64; - } - - /** - * Convert an arbitrary number into an SplFixedArray of two 32-bit integers - * that represents a 64-bit integer. - * - * @internal You should not use this directly from another application - * - * @param int $num - * @return SplFixedArray - */ - protected static function to64($num) - { - list($hi, $lo) = self::numericTo64BitInteger($num); - return self::new64($hi, $lo); - } - - /** - * Adds two 64-bit integers together, returning their sum as a SplFixedArray - * containing two 32-bit integers (representing a 64-bit integer). - * - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @param SplFixedArray $y - * @return SplFixedArray - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedOperand - */ - protected static function add64($x, $y) - { - $l = ($x[1] + $y[1]) & 0xffffffff; - return self::new64( - $x[0] + $y[0] + ( - ($l < $x[1]) ? 1 : 0 - ), - $l - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @param SplFixedArray $y - * @param SplFixedArray $z - * @return SplFixedArray - */ - protected static function add364($x, $y, $z) - { - return self::add64($x, self::add64($y, $z)); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @param SplFixedArray $y - * @return SplFixedArray - * @throws SodiumException - * @throws TypeError - */ - protected static function xor64(SplFixedArray $x, SplFixedArray $y) - { - if (!is_numeric($x[0])) { - throw new SodiumException('x[0] is not an integer'); - } - if (!is_numeric($x[1])) { - throw new SodiumException('x[1] is not an integer'); - } - if (!is_numeric($y[0])) { - throw new SodiumException('y[0] is not an integer'); - } - if (!is_numeric($y[1])) { - throw new SodiumException('y[1] is not an integer'); - } - return self::new64($x[0] ^ $y[0], $x[1] ^ $y[1]); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @param int $c - * @return SplFixedArray - * @psalm-suppress MixedAssignment - */ - public static function rotr64($x, $c) - { - if ($c >= 64) { - $c %= 64; - } - if ($c >= 32) { - /** @var int $tmp */ - $tmp = $x[0]; - $x[0] = $x[1]; - $x[1] = $tmp; - $c -= 32; - } - if ($c === 0) { - return $x; - } - - $l0 = 0; - $c = 64 - $c; - - if ($c < 32) { - /** @var int $h0 */ - $h0 = ($x[0] << $c) | ( - ( - $x[1] & ((1 << $c) - 1) - << - (32 - $c) - ) >> (32 - $c) - ); - /** @var int $l0 */ - $l0 = $x[1] << $c; - } else { - /** @var int $h0 */ - $h0 = $x[1] << ($c - 32); - } - - $h1 = 0; - $c1 = 64 - $c; - - if ($c1 < 32) { - /** @var int $h1 */ - $h1 = $x[0] >> $c1; - /** @var int $l1 */ - $l1 = ($x[1] >> $c1) | ($x[0] & ((1 << $c1) - 1)) << (32 - $c1); - } else { - /** @var int $l1 */ - $l1 = $x[0] >> ($c1 - 32); - } - - return self::new64($h0 | $h1, $l0 | $l1); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @return int - * @psalm-suppress MixedOperand - */ - protected static function flatten64($x) - { - return (int) ($x[0] * 4294967296 + $x[1]); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @param int $i - * @return SplFixedArray - * @psalm-suppress MixedArgument - * @psalm-suppress MixedArrayOffset - */ - protected static function load64(SplFixedArray $x, $i) - { - /** @var int $l */ - $l = $x[$i] | ($x[$i+1]<<8) | ($x[$i+2]<<16) | ($x[$i+3]<<24); - /** @var int $h */ - $h = $x[$i+4] | ($x[$i+5]<<8) | ($x[$i+6]<<16) | ($x[$i+7]<<24); - return self::new64($h, $l); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @param int $i - * @param SplFixedArray $u - * @return void - * @psalm-suppress MixedAssignment - */ - protected static function store64(SplFixedArray $x, $i, SplFixedArray $u) - { - $maxLength = $x->getSize() - 1; - for ($j = 0; $j < 8; ++$j) { - /* - [0, 1, 2, 3, 4, 5, 6, 7] - ... becomes ... - [0, 0, 0, 0, 1, 1, 1, 1] - */ - /** @var int $uIdx */ - $uIdx = ((7 - $j) & 4) >> 2; - $x[$i] = ($u[$uIdx] & 0xff); - if (++$i > $maxLength) { - return; - } - $u[$uIdx] >>= 8; - } - } - - /** - * This just sets the $iv static variable. - * - * @internal You should not use this directly from another application - * - * @return void - */ - public static function pseudoConstructor() - { - static $called = false; - if ($called) { - return; - } - self::$iv = new SplFixedArray(8); - self::$iv[0] = self::new64(0x6a09e667, 0xf3bcc908); - self::$iv[1] = self::new64(0xbb67ae85, 0x84caa73b); - self::$iv[2] = self::new64(0x3c6ef372, 0xfe94f82b); - self::$iv[3] = self::new64(0xa54ff53a, 0x5f1d36f1); - self::$iv[4] = self::new64(0x510e527f, 0xade682d1); - self::$iv[5] = self::new64(0x9b05688c, 0x2b3e6c1f); - self::$iv[6] = self::new64(0x1f83d9ab, 0xfb41bd6b); - self::$iv[7] = self::new64(0x5be0cd19, 0x137e2179); - - $called = true; - } - - /** - * Returns a fresh BLAKE2 context. - * - * @internal You should not use this directly from another application - * - * @return SplFixedArray - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - */ - protected static function context() - { - $ctx = new SplFixedArray(5); - $ctx[0] = new SplFixedArray(8); // h - $ctx[1] = new SplFixedArray(2); // t - $ctx[2] = new SplFixedArray(2); // f - $ctx[3] = new SplFixedArray(256); // buf - $ctx[4] = 0; // buflen - - for ($i = 8; $i--;) { - $ctx[0][$i] = self::$iv[$i]; - } - for ($i = 256; $i--;) { - $ctx[3][$i] = 0; - } - - $zero = self::new64(0, 0); - $ctx[1][0] = $zero; - $ctx[1][1] = $zero; - $ctx[2][0] = $zero; - $ctx[2][1] = $zero; - - return $ctx; - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $ctx - * @param SplFixedArray $buf - * @return void - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedArrayOffset - */ - protected static function compress(SplFixedArray $ctx, SplFixedArray $buf) - { - $m = new SplFixedArray(16); - $v = new SplFixedArray(16); - - for ($i = 16; $i--;) { - $m[$i] = self::load64($buf, $i << 3); - } - - for ($i = 8; $i--;) { - $v[$i] = $ctx[0][$i]; - } - - $v[ 8] = self::$iv[0]; - $v[ 9] = self::$iv[1]; - $v[10] = self::$iv[2]; - $v[11] = self::$iv[3]; - - $v[12] = self::xor64($ctx[1][0], self::$iv[4]); - $v[13] = self::xor64($ctx[1][1], self::$iv[5]); - $v[14] = self::xor64($ctx[2][0], self::$iv[6]); - $v[15] = self::xor64($ctx[2][1], self::$iv[7]); - - for ($r = 0; $r < 12; ++$r) { - $v = self::G($r, 0, 0, 4, 8, 12, $v, $m); - $v = self::G($r, 1, 1, 5, 9, 13, $v, $m); - $v = self::G($r, 2, 2, 6, 10, 14, $v, $m); - $v = self::G($r, 3, 3, 7, 11, 15, $v, $m); - $v = self::G($r, 4, 0, 5, 10, 15, $v, $m); - $v = self::G($r, 5, 1, 6, 11, 12, $v, $m); - $v = self::G($r, 6, 2, 7, 8, 13, $v, $m); - $v = self::G($r, 7, 3, 4, 9, 14, $v, $m); - } - - for ($i = 8; $i--;) { - $ctx[0][$i] = self::xor64( - $ctx[0][$i], self::xor64($v[$i], $v[$i+8]) - ); - } - } - - /** - * @internal You should not use this directly from another application - * - * @param int $r - * @param int $i - * @param int $a - * @param int $b - * @param int $c - * @param int $d - * @param SplFixedArray $v - * @param SplFixedArray $m - * @return SplFixedArray - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedArrayOffset - */ - public static function G($r, $i, $a, $b, $c, $d, SplFixedArray $v, SplFixedArray $m) - { - $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][$i << 1]]); - $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 32); - $v[$c] = self::add64($v[$c], $v[$d]); - $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 24); - $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][($i << 1) + 1]]); - $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 16); - $v[$c] = self::add64($v[$c], $v[$d]); - $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 63); - return $v; - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $ctx - * @param int $inc - * @return void - * @throws SodiumException - * @psalm-suppress MixedArgument - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - */ - public static function increment_counter($ctx, $inc) - { - if ($inc < 0) { - throw new SodiumException('Increasing by a negative number makes no sense.'); - } - $t = self::to64($inc); - # S->t is $ctx[1] in our implementation - - # S->t[0] = ( uint64_t )( t >> 0 ); - $ctx[1][0] = self::add64($ctx[1][0], $t); - - # S->t[1] += ( S->t[0] < inc ); - if (self::flatten64($ctx[1][0]) < $inc) { - $ctx[1][1] = self::add64($ctx[1][1], self::to64(1)); - } - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $ctx - * @param SplFixedArray $p - * @param int $plen - * @return void - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedArrayOffset - * @psalm-suppress MixedOperand - */ - public static function update(SplFixedArray $ctx, SplFixedArray $p, $plen) - { - self::pseudoConstructor(); - - $offset = 0; - while ($plen > 0) { - $left = $ctx[4]; - $fill = 256 - $left; - - if ($plen > $fill) { - # memcpy( S->buf + left, in, fill ); /* Fill buffer */ - for ($i = $fill; $i--;) { - $ctx[3][$i + $left] = $p[$i + $offset]; - } - - # S->buflen += fill; - $ctx[4] += $fill; - - # blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); - self::increment_counter($ctx, 128); - - # blake2b_compress( S, S->buf ); /* Compress */ - self::compress($ctx, $ctx[3]); - - # memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); /* Shift buffer left */ - for ($i = 128; $i--;) { - $ctx[3][$i] = $ctx[3][$i + 128]; - } - - # S->buflen -= BLAKE2B_BLOCKBYTES; - $ctx[4] -= 128; - - # in += fill; - $offset += $fill; - - # inlen -= fill; - $plen -= $fill; - } else { - for ($i = $plen; $i--;) { - $ctx[3][$i + $left] = $p[$i + $offset]; - } - $ctx[4] += $plen; - $offset += $plen; - $plen -= $plen; - } - } - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $ctx - * @param SplFixedArray $out - * @return SplFixedArray - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedArrayOffset - * @psalm-suppress MixedOperand - */ - public static function finish(SplFixedArray $ctx, SplFixedArray $out) - { - self::pseudoConstructor(); - if ($ctx[4] > 128) { - self::increment_counter($ctx, 128); - self::compress($ctx, $ctx[3]); - $ctx[4] -= 128; - if ($ctx[4] > 128) { - throw new SodiumException('Failed to assert that buflen <= 128 bytes'); - } - for ($i = $ctx[4]; $i--;) { - $ctx[3][$i] = $ctx[3][$i + 128]; - } - } - - self::increment_counter($ctx, $ctx[4]); - $ctx[2][0] = self::new64(0xffffffff, 0xffffffff); - - for ($i = 256 - $ctx[4]; $i--;) { - $ctx[3][$i+$ctx[4]] = 0; - } - - self::compress($ctx, $ctx[3]); - - $i = (int) (($out->getSize() - 1) / 8); - for (; $i >= 0; --$i) { - self::store64($out, $i << 3, $ctx[0][$i]); - } - return $out; - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray|null $key - * @param int $outlen - * @return SplFixedArray - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedArrayOffset - */ - public static function init($key = null, $outlen = 64) - { - self::pseudoConstructor(); - $klen = 0; - - if ($key !== null) { - if (count($key) > 64) { - throw new SodiumException('Invalid key size'); - } - $klen = count($key); - } - - if ($outlen > 64) { - throw new SodiumException('Invalid output size'); - } - - $ctx = self::context(); - - $p = new SplFixedArray(64); - for ($i = 64; --$i;) { - $p[$i] = 0; - } - - $p[0] = $outlen; // digest_length - $p[1] = $klen; // key_length - $p[2] = 1; // fanout - $p[3] = 1; // depth - - $ctx[0][0] = self::xor64( - $ctx[0][0], - self::load64($p, 0) - ); - - if ($klen > 0 && $key instanceof SplFixedArray) { - $block = new SplFixedArray(128); - for ($i = 128; $i--;) { - $block[$i] = 0; - } - for ($i = $klen; $i--;) { - $block[$i] = $key[$i]; - } - self::update($ctx, $block, 128); - } - - return $ctx; - } - - /** - * Convert a string into an SplFixedArray of integers - * - * @internal You should not use this directly from another application - * - * @param string $str - * @return SplFixedArray - */ - public static function stringToSplFixedArray($str = '') - { - $values = unpack('C*', $str); - return SplFixedArray::fromArray(array_values($values)); - } - - /** - * Convert an SplFixedArray of integers into a string - * - * @internal You should not use this directly from another application - * - * @param SplFixedArray $a - * @return string - * @throws TypeError - */ - public static function SplFixedArrayToString(SplFixedArray $a) - { - /** - * @var array - */ - $arr = $a->toArray(); - $c = $a->count(); - array_unshift($arr, str_repeat('C', $c)); - return (string) (call_user_func_array('pack', $arr)); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray[SplFixedArray] $ctx - * @return string - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedArrayOffset - * @psalm-suppress MixedMethodCall - */ - public static function contextToString(SplFixedArray $ctx) - { - $str = ''; - /** @var array> $ctxA */ - $ctxA = $ctx[0]->toArray(); - - # uint64_t h[8]; - for ($i = 0; $i < 8; ++$i) { - $str .= self::store32_le($ctxA[$i][1]); - $str .= self::store32_le($ctxA[$i][0]); - } - - # uint64_t t[2]; - # uint64_t f[2]; - for ($i = 1; $i < 3; ++$i) { - $ctxA = $ctx[$i]->toArray(); - $str .= self::store32_le($ctxA[0][1]); - $str .= self::store32_le($ctxA[0][0]); - $str .= self::store32_le($ctxA[1][1]); - $str .= self::store32_le($ctxA[1][0]); - } - - # uint8_t buf[2 * 128]; - $str .= self::SplFixedArrayToString($ctx[3]); - - # size_t buflen; - $str .= implode('', array( - self::intToChr($ctx[4] & 0xff), - self::intToChr(($ctx[4] >> 8) & 0xff), - self::intToChr(($ctx[4] >> 16) & 0xff), - self::intToChr(($ctx[4] >> 24) & 0xff), - self::intToChr(($ctx[4] >> 32) & 0xff), - self::intToChr(($ctx[4] >> 40) & 0xff), - self::intToChr(($ctx[4] >> 48) & 0xff), - self::intToChr(($ctx[4] >> 56) & 0xff) - )); - # uint8_t last_node; - return $str . "\x00"; - } - - /** - * Creates an SplFixedArray containing other SplFixedArray elements, from - * a string (compatible with \Sodium\crypto_generichash_{init, update, final}) - * - * @internal You should not use this directly from another application - * - * @param string $string - * @return SplFixedArray - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArrayAssignment - */ - public static function stringToContext($string) - { - $ctx = self::context(); - - # uint64_t h[8]; - for ($i = 0; $i < 8; ++$i) { - $ctx[0][$i] = SplFixedArray::fromArray( - array( - self::load_4( - self::substr($string, (($i << 3) + 4), 4) - ), - self::load_4( - self::substr($string, (($i << 3) + 0), 4) - ) - ) - ); - } - - # uint64_t t[2]; - # uint64_t f[2]; - for ($i = 1; $i < 3; ++$i) { - $ctx[$i][1] = SplFixedArray::fromArray( - array( - self::load_4(self::substr($string, 76 + (($i - 1) << 4), 4)), - self::load_4(self::substr($string, 72 + (($i - 1) << 4), 4)) - ) - ); - $ctx[$i][0] = SplFixedArray::fromArray( - array( - self::load_4(self::substr($string, 68 + (($i - 1) << 4), 4)), - self::load_4(self::substr($string, 64 + (($i - 1) << 4), 4)) - ) - ); - } - - # uint8_t buf[2 * 128]; - $ctx[3] = self::stringToSplFixedArray(self::substr($string, 96, 256)); - - - # uint8_t buf[2 * 128]; - $int = 0; - for ($i = 0; $i < 8; ++$i) { - $int |= self::chrToInt($string[352 + $i]) << ($i << 3); - } - $ctx[4] = $int; - - return $ctx; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/ChaCha20.php b/libraries/vendor/paragonie/sodium_compat/src/Core/ChaCha20.php deleted file mode 100644 index 806010c7fbf8a..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/ChaCha20.php +++ /dev/null @@ -1,395 +0,0 @@ -> (32 - $n)) - ) - ); - } - - /** - * The ChaCha20 quarter round function. Works on four 32-bit integers. - * - * @internal You should not use this directly from another application - * - * @param int $a - * @param int $b - * @param int $c - * @param int $d - * @return array - */ - protected static function quarterRound($a, $b, $c, $d) - { - # a = PLUS(a,b); d = ROTATE(XOR(d,a),16); - /** @var int $a */ - $a = ($a + $b) & 0xffffffff; - $d = self::rotate($d ^ $a, 16); - - # c = PLUS(c,d); b = ROTATE(XOR(b,c),12); - /** @var int $c */ - $c = ($c + $d) & 0xffffffff; - $b = self::rotate($b ^ $c, 12); - - # a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); - /** @var int $a */ - $a = ($a + $b) & 0xffffffff; - $d = self::rotate($d ^ $a, 8); - - # c = PLUS(c,d); b = ROTATE(XOR(b,c), 7); - /** @var int $c */ - $c = ($c + $d) & 0xffffffff; - $b = self::rotate($b ^ $c, 7); - return array((int) $a, (int) $b, (int) $c, (int) $d); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_ChaCha20_Ctx $ctx - * @param string $message - * - * @return string - * @throws TypeError - * @throws SodiumException - */ - public static function encryptBytes( - ParagonIE_Sodium_Core_ChaCha20_Ctx $ctx, - $message = '' - ) { - $bytes = self::strlen($message); - - /* - j0 = ctx->input[0]; - j1 = ctx->input[1]; - j2 = ctx->input[2]; - j3 = ctx->input[3]; - j4 = ctx->input[4]; - j5 = ctx->input[5]; - j6 = ctx->input[6]; - j7 = ctx->input[7]; - j8 = ctx->input[8]; - j9 = ctx->input[9]; - j10 = ctx->input[10]; - j11 = ctx->input[11]; - j12 = ctx->input[12]; - j13 = ctx->input[13]; - j14 = ctx->input[14]; - j15 = ctx->input[15]; - */ - $j0 = (int) $ctx[0]; - $j1 = (int) $ctx[1]; - $j2 = (int) $ctx[2]; - $j3 = (int) $ctx[3]; - $j4 = (int) $ctx[4]; - $j5 = (int) $ctx[5]; - $j6 = (int) $ctx[6]; - $j7 = (int) $ctx[7]; - $j8 = (int) $ctx[8]; - $j9 = (int) $ctx[9]; - $j10 = (int) $ctx[10]; - $j11 = (int) $ctx[11]; - $j12 = (int) $ctx[12]; - $j13 = (int) $ctx[13]; - $j14 = (int) $ctx[14]; - $j15 = (int) $ctx[15]; - - $c = ''; - for (;;) { - if ($bytes < 64) { - $message .= str_repeat("\x00", 64 - $bytes); - } - - $x0 = (int) $j0; - $x1 = (int) $j1; - $x2 = (int) $j2; - $x3 = (int) $j3; - $x4 = (int) $j4; - $x5 = (int) $j5; - $x6 = (int) $j6; - $x7 = (int) $j7; - $x8 = (int) $j8; - $x9 = (int) $j9; - $x10 = (int) $j10; - $x11 = (int) $j11; - $x12 = (int) $j12; - $x13 = (int) $j13; - $x14 = (int) $j14; - $x15 = (int) $j15; - - # for (i = 20; i > 0; i -= 2) { - for ($i = 20; $i > 0; $i -= 2) { - # QUARTERROUND( x0, x4, x8, x12) - list($x0, $x4, $x8, $x12) = self::quarterRound($x0, $x4, $x8, $x12); - - # QUARTERROUND( x1, x5, x9, x13) - list($x1, $x5, $x9, $x13) = self::quarterRound($x1, $x5, $x9, $x13); - - # QUARTERROUND( x2, x6, x10, x14) - list($x2, $x6, $x10, $x14) = self::quarterRound($x2, $x6, $x10, $x14); - - # QUARTERROUND( x3, x7, x11, x15) - list($x3, $x7, $x11, $x15) = self::quarterRound($x3, $x7, $x11, $x15); - - # QUARTERROUND( x0, x5, x10, x15) - list($x0, $x5, $x10, $x15) = self::quarterRound($x0, $x5, $x10, $x15); - - # QUARTERROUND( x1, x6, x11, x12) - list($x1, $x6, $x11, $x12) = self::quarterRound($x1, $x6, $x11, $x12); - - # QUARTERROUND( x2, x7, x8, x13) - list($x2, $x7, $x8, $x13) = self::quarterRound($x2, $x7, $x8, $x13); - - # QUARTERROUND( x3, x4, x9, x14) - list($x3, $x4, $x9, $x14) = self::quarterRound($x3, $x4, $x9, $x14); - } - /* - x0 = PLUS(x0, j0); - x1 = PLUS(x1, j1); - x2 = PLUS(x2, j2); - x3 = PLUS(x3, j3); - x4 = PLUS(x4, j4); - x5 = PLUS(x5, j5); - x6 = PLUS(x6, j6); - x7 = PLUS(x7, j7); - x8 = PLUS(x8, j8); - x9 = PLUS(x9, j9); - x10 = PLUS(x10, j10); - x11 = PLUS(x11, j11); - x12 = PLUS(x12, j12); - x13 = PLUS(x13, j13); - x14 = PLUS(x14, j14); - x15 = PLUS(x15, j15); - */ - /** @var int $x0 */ - $x0 = ($x0 & 0xffffffff) + $j0; - /** @var int $x1 */ - $x1 = ($x1 & 0xffffffff) + $j1; - /** @var int $x2 */ - $x2 = ($x2 & 0xffffffff) + $j2; - /** @var int $x3 */ - $x3 = ($x3 & 0xffffffff) + $j3; - /** @var int $x4 */ - $x4 = ($x4 & 0xffffffff) + $j4; - /** @var int $x5 */ - $x5 = ($x5 & 0xffffffff) + $j5; - /** @var int $x6 */ - $x6 = ($x6 & 0xffffffff) + $j6; - /** @var int $x7 */ - $x7 = ($x7 & 0xffffffff) + $j7; - /** @var int $x8 */ - $x8 = ($x8 & 0xffffffff) + $j8; - /** @var int $x9 */ - $x9 = ($x9 & 0xffffffff) + $j9; - /** @var int $x10 */ - $x10 = ($x10 & 0xffffffff) + $j10; - /** @var int $x11 */ - $x11 = ($x11 & 0xffffffff) + $j11; - /** @var int $x12 */ - $x12 = ($x12 & 0xffffffff) + $j12; - /** @var int $x13 */ - $x13 = ($x13 & 0xffffffff) + $j13; - /** @var int $x14 */ - $x14 = ($x14 & 0xffffffff) + $j14; - /** @var int $x15 */ - $x15 = ($x15 & 0xffffffff) + $j15; - - /* - x0 = XOR(x0, LOAD32_LE(m + 0)); - x1 = XOR(x1, LOAD32_LE(m + 4)); - x2 = XOR(x2, LOAD32_LE(m + 8)); - x3 = XOR(x3, LOAD32_LE(m + 12)); - x4 = XOR(x4, LOAD32_LE(m + 16)); - x5 = XOR(x5, LOAD32_LE(m + 20)); - x6 = XOR(x6, LOAD32_LE(m + 24)); - x7 = XOR(x7, LOAD32_LE(m + 28)); - x8 = XOR(x8, LOAD32_LE(m + 32)); - x9 = XOR(x9, LOAD32_LE(m + 36)); - x10 = XOR(x10, LOAD32_LE(m + 40)); - x11 = XOR(x11, LOAD32_LE(m + 44)); - x12 = XOR(x12, LOAD32_LE(m + 48)); - x13 = XOR(x13, LOAD32_LE(m + 52)); - x14 = XOR(x14, LOAD32_LE(m + 56)); - x15 = XOR(x15, LOAD32_LE(m + 60)); - */ - $x0 ^= self::load_4(self::substr($message, 0, 4)); - $x1 ^= self::load_4(self::substr($message, 4, 4)); - $x2 ^= self::load_4(self::substr($message, 8, 4)); - $x3 ^= self::load_4(self::substr($message, 12, 4)); - $x4 ^= self::load_4(self::substr($message, 16, 4)); - $x5 ^= self::load_4(self::substr($message, 20, 4)); - $x6 ^= self::load_4(self::substr($message, 24, 4)); - $x7 ^= self::load_4(self::substr($message, 28, 4)); - $x8 ^= self::load_4(self::substr($message, 32, 4)); - $x9 ^= self::load_4(self::substr($message, 36, 4)); - $x10 ^= self::load_4(self::substr($message, 40, 4)); - $x11 ^= self::load_4(self::substr($message, 44, 4)); - $x12 ^= self::load_4(self::substr($message, 48, 4)); - $x13 ^= self::load_4(self::substr($message, 52, 4)); - $x14 ^= self::load_4(self::substr($message, 56, 4)); - $x15 ^= self::load_4(self::substr($message, 60, 4)); - - /* - j12 = PLUSONE(j12); - if (!j12) { - j13 = PLUSONE(j13); - } - */ - ++$j12; - if ($j12 & 0xf0000000) { - throw new SodiumException('Overflow'); - } - - /* - STORE32_LE(c + 0, x0); - STORE32_LE(c + 4, x1); - STORE32_LE(c + 8, x2); - STORE32_LE(c + 12, x3); - STORE32_LE(c + 16, x4); - STORE32_LE(c + 20, x5); - STORE32_LE(c + 24, x6); - STORE32_LE(c + 28, x7); - STORE32_LE(c + 32, x8); - STORE32_LE(c + 36, x9); - STORE32_LE(c + 40, x10); - STORE32_LE(c + 44, x11); - STORE32_LE(c + 48, x12); - STORE32_LE(c + 52, x13); - STORE32_LE(c + 56, x14); - STORE32_LE(c + 60, x15); - */ - $block = self::store32_le((int) ($x0 & 0xffffffff)) . - self::store32_le((int) ($x1 & 0xffffffff)) . - self::store32_le((int) ($x2 & 0xffffffff)) . - self::store32_le((int) ($x3 & 0xffffffff)) . - self::store32_le((int) ($x4 & 0xffffffff)) . - self::store32_le((int) ($x5 & 0xffffffff)) . - self::store32_le((int) ($x6 & 0xffffffff)) . - self::store32_le((int) ($x7 & 0xffffffff)) . - self::store32_le((int) ($x8 & 0xffffffff)) . - self::store32_le((int) ($x9 & 0xffffffff)) . - self::store32_le((int) ($x10 & 0xffffffff)) . - self::store32_le((int) ($x11 & 0xffffffff)) . - self::store32_le((int) ($x12 & 0xffffffff)) . - self::store32_le((int) ($x13 & 0xffffffff)) . - self::store32_le((int) ($x14 & 0xffffffff)) . - self::store32_le((int) ($x15 & 0xffffffff)); - - /* Partial block */ - if ($bytes < 64) { - $c .= self::substr($block, 0, $bytes); - break; - } - - /* Full block */ - $c .= $block; - $bytes -= 64; - if ($bytes <= 0) { - break; - } - $message = self::substr($message, 64); - } - /* end for(;;) loop */ - - $ctx[12] = $j12; - $ctx[13] = $j13; - return $c; - } - - /** - * @internal You should not use this directly from another application - * - * @param int $len - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function stream($len = 64, $nonce = '', $key = '') - { - return self::encryptBytes( - new ParagonIE_Sodium_Core_ChaCha20_Ctx($key, $nonce), - str_repeat("\x00", $len) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $len - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function ietfStream($len, $nonce = '', $key = '') - { - return self::encryptBytes( - new ParagonIE_Sodium_Core_ChaCha20_IetfCtx($key, $nonce), - str_repeat("\x00", $len) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param string $nonce - * @param string $key - * @param string $ic - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function ietfStreamXorIc($message, $nonce = '', $key = '', $ic = '') - { - return self::encryptBytes( - new ParagonIE_Sodium_Core_ChaCha20_IetfCtx($key, $nonce, $ic), - $message - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param string $nonce - * @param string $key - * @param string $ic - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function streamXorIc($message, $nonce = '', $key = '', $ic = '') - { - return self::encryptBytes( - new ParagonIE_Sodium_Core_ChaCha20_Ctx($key, $nonce, $ic), - $message - ); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/ChaCha20/Ctx.php b/libraries/vendor/paragonie/sodium_compat/src/Core/ChaCha20/Ctx.php deleted file mode 100644 index b29ab90054df7..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/ChaCha20/Ctx.php +++ /dev/null @@ -1,120 +0,0 @@ - - */ - protected $container; - - /** - * ParagonIE_Sodium_Core_ChaCha20_Ctx constructor. - * - * @internal You should not use this directly from another application - * - * @param string $key ChaCha20 key. - * @param string $iv Initialization Vector (a.k.a. nonce). - * @param string $counter The initial counter value. - * Defaults to 8 0x00 bytes. - * @throws InvalidArgumentException - * @throws TypeError - */ - public function __construct($key = '', $iv = '', $counter = '') - { - if (self::strlen($key) !== 32) { - throw new InvalidArgumentException('ChaCha20 expects a 256-bit key.'); - } - if (self::strlen($iv) !== 8) { - throw new InvalidArgumentException('ChaCha20 expects a 64-bit nonce.'); - } - $this->container = new SplFixedArray(16); - - /* "expand 32-byte k" as per ChaCha20 spec */ - $this->container[0] = 0x61707865; - $this->container[1] = 0x3320646e; - $this->container[2] = 0x79622d32; - $this->container[3] = 0x6b206574; - $this->container[4] = self::load_4(self::substr($key, 0, 4)); - $this->container[5] = self::load_4(self::substr($key, 4, 4)); - $this->container[6] = self::load_4(self::substr($key, 8, 4)); - $this->container[7] = self::load_4(self::substr($key, 12, 4)); - $this->container[8] = self::load_4(self::substr($key, 16, 4)); - $this->container[9] = self::load_4(self::substr($key, 20, 4)); - $this->container[10] = self::load_4(self::substr($key, 24, 4)); - $this->container[11] = self::load_4(self::substr($key, 28, 4)); - - if (empty($counter)) { - $this->container[12] = 0; - $this->container[13] = 0; - } else { - $this->container[12] = self::load_4(self::substr($counter, 0, 4)); - $this->container[13] = self::load_4(self::substr($counter, 4, 4)); - } - $this->container[14] = self::load_4(self::substr($iv, 0, 4)); - $this->container[15] = self::load_4(self::substr($iv, 4, 4)); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $offset - * @param int $value - * @return void - * @psalm-suppress MixedArrayOffset - */ - public function offsetSet($offset, $value) - { - if (!is_int($offset)) { - throw new InvalidArgumentException('Expected an integer'); - } - if (!is_int($value)) { - throw new InvalidArgumentException('Expected an integer'); - } - $this->container[$offset] = $value; - } - - /** - * @internal You should not use this directly from another application - * - * @param mixed $offset - * @return bool - * @psalm-suppress MixedArrayOffset - */ - public function offsetExists($offset) - { - return isset($this->container[$offset]); - } - - /** - * @internal You should not use this directly from another application - * - * @param mixed $offset - * @return void - * @psalm-suppress MixedArrayOffset - */ - public function offsetUnset($offset) - { - unset($this->container[$offset]); - } - - /** - * @internal You should not use this directly from another application - * - * @param mixed $offset - * @return mixed|null - * @psalm-suppress MixedArrayOffset - */ - public function offsetGet($offset) - { - return isset($this->container[$offset]) - ? $this->container[$offset] - : null; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/ChaCha20/IetfCtx.php b/libraries/vendor/paragonie/sodium_compat/src/Core/ChaCha20/IetfCtx.php deleted file mode 100644 index 4d63b9004d00a..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/ChaCha20/IetfCtx.php +++ /dev/null @@ -1,38 +0,0 @@ -container[12] = self::load_4(self::substr($counter, 0, 4)); - } - $this->container[13] = self::load_4(self::substr($iv, 0, 4)); - $this->container[14] = self::load_4(self::substr($iv, 4, 4)); - $this->container[15] = self::load_4(self::substr($iv, 8, 4)); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519.php b/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519.php deleted file mode 100644 index dedf7a4d71e3f..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519.php +++ /dev/null @@ -1,2978 +0,0 @@ - $arr */ - $arr = array(); - for ($i = 0; $i < 10; ++$i) { - $arr[$i] = (int) ($f[$i] + $g[$i]); - } - return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($arr); - } - - /** - * Constant-time conditional move. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @param ParagonIE_Sodium_Core_Curve25519_Fe $g - * @param int $b - * @return ParagonIE_Sodium_Core_Curve25519_Fe - * @psalm-suppress MixedAssignment - */ - public static function fe_cmov( - ParagonIE_Sodium_Core_Curve25519_Fe $f, - ParagonIE_Sodium_Core_Curve25519_Fe $g, - $b = 0 - ) { - /** @var array $h */ - $h = array(); - $b *= -1; - for ($i = 0; $i < 10; ++$i) { - /** @var int $x */ - $x = (($f[$i] ^ $g[$i]) & $b); - $h[$i] = (int) ($f[$i] ^ $x); - } - return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($h); - } - - /** - * Create a copy of a field element. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @return ParagonIE_Sodium_Core_Curve25519_Fe - */ - public static function fe_copy(ParagonIE_Sodium_Core_Curve25519_Fe $f) - { - $h = clone $f; - return $h; - } - - /** - * Give: 32-byte string. - * Receive: A field element object to use for internal calculations. - * - * @internal You should not use this directly from another application - * - * @param string $s - * @return ParagonIE_Sodium_Core_Curve25519_Fe - * @throws RangeException - * @throws TypeError - */ - public static function fe_frombytes($s) - { - if (self::strlen($s) !== 32) { - throw new RangeException('Expected a 32-byte string.'); - } - /** @var int $h0 */ - $h0 = self::load_4($s); - /** @var int $h1 */ - $h1 = self::load_3(self::substr($s, 4, 3)) << 6; - /** @var int $h2 */ - $h2 = self::load_3(self::substr($s, 7, 3)) << 5; - /** @var int $h3 */ - $h3 = self::load_3(self::substr($s, 10, 3)) << 3; - /** @var int $h4 */ - $h4 = self::load_3(self::substr($s, 13, 3)) << 2; - /** @var int $h5 */ - $h5 = self::load_4(self::substr($s, 16, 4)); - /** @var int $h6 */ - $h6 = self::load_3(self::substr($s, 20, 3)) << 7; - /** @var int $h7 */ - $h7 = self::load_3(self::substr($s, 23, 3)) << 5; - /** @var int $h8 */ - $h8 = self::load_3(self::substr($s, 26, 3)) << 4; - /** @var int $h9 */ - $h9 = (self::load_3(self::substr($s, 29, 3)) & 8388607) << 2; - - /** @var int $carry9 */ - $carry9 = ($h9 + (1 << 24)) >> 25; - $h0 += self::mul($carry9, 19, 5); - $h9 -= $carry9 << 25; - /** @var int $carry1 */ - $carry1 = ($h1 + (1 << 24)) >> 25; - $h2 += $carry1; - $h1 -= $carry1 << 25; - /** @var int $carry3 */ - $carry3 = ($h3 + (1 << 24)) >> 25; - $h4 += $carry3; - $h3 -= $carry3 << 25; - /** @var int $carry5 */ - $carry5 = ($h5 + (1 << 24)) >> 25; - $h6 += $carry5; - $h5 -= $carry5 << 25; - /** @var int $carry7 */ - $carry7 = ($h7 + (1 << 24)) >> 25; - $h8 += $carry7; - $h7 -= $carry7 << 25; - - /** @var int $carry0 */ - $carry0 = ($h0 + (1 << 25)) >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - /** @var int $carry2 */ - $carry2 = ($h2 + (1 << 25)) >> 26; - $h3 += $carry2; - $h2 -= $carry2 << 26; - /** @var int $carry4 */ - $carry4 = ($h4 + (1 << 25)) >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - /** @var int $carry6 */ - $carry6 = ($h6 + (1 << 25)) >> 26; - $h7 += $carry6; - $h6 -= $carry6 << 26; - /** @var int $carry8 */ - $carry8 = ($h8 + (1 << 25)) >> 26; - $h9 += $carry8; - $h8 -= $carry8 << 26; - - return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( - array( - (int) $h0, - (int) $h1, - (int) $h2, - (int) $h3, - (int) $h4, - (int) $h5, - (int) $h6, - (int) $h7, - (int) $h8, - (int) $h9 - ) - ); - } - - /** - * Convert a field element to a byte string. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $h - * @return string - */ - public static function fe_tobytes(ParagonIE_Sodium_Core_Curve25519_Fe $h) - { - /** @var int $h0 */ - $h0 = (int) $h[0]; - /** @var int $h1 */ - $h1 = (int) $h[1]; - /** @var int $h2 */ - $h2 = (int) $h[2]; - /** @var int $h3 */ - $h3 = (int) $h[3]; - /** @var int $h4 */ - $h4 = (int) $h[4]; - /** @var int $h5 */ - $h5 = (int) $h[5]; - /** @var int $h6 */ - $h6 = (int) $h[6]; - /** @var int $h7 */ - $h7 = (int) $h[7]; - /** @var int $h8 */ - $h8 = (int) $h[8]; - /** @var int $h9 */ - $h9 = (int) $h[9]; - - /** @var int $q */ - $q = (self::mul($h9, 19, 5) + (1 << 24)) >> 25; - /** @var int $q */ - $q = ($h0 + $q) >> 26; - /** @var int $q */ - $q = ($h1 + $q) >> 25; - /** @var int $q */ - $q = ($h2 + $q) >> 26; - /** @var int $q */ - $q = ($h3 + $q) >> 25; - /** @var int $q */ - $q = ($h4 + $q) >> 26; - /** @var int $q */ - $q = ($h5 + $q) >> 25; - /** @var int $q */ - $q = ($h6 + $q) >> 26; - /** @var int $q */ - $q = ($h7 + $q) >> 25; - /** @var int $q */ - $q = ($h8 + $q) >> 26; - /** @var int $q */ - $q = ($h9 + $q) >> 25; - - $h0 += self::mul($q, 19, 5); - - /** @var int $carry0 */ - $carry0 = $h0 >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - /** @var int $carry1 */ - $carry1 = $h1 >> 25; - $h2 += $carry1; - $h1 -= $carry1 << 25; - /** @var int $carry2 */ - $carry2 = $h2 >> 26; - $h3 += $carry2; - $h2 -= $carry2 << 26; - /** @var int $carry3 */ - $carry3 = $h3 >> 25; - $h4 += $carry3; - $h3 -= $carry3 << 25; - /** @var int $carry4 */ - $carry4 = $h4 >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - /** @var int $carry5 */ - $carry5 = $h5 >> 25; - $h6 += $carry5; - $h5 -= $carry5 << 25; - /** @var int $carry6 */ - $carry6 = $h6 >> 26; - $h7 += $carry6; - $h6 -= $carry6 << 26; - /** @var int $carry7 */ - $carry7 = $h7 >> 25; - $h8 += $carry7; - $h7 -= $carry7 << 25; - /** @var int $carry8 */ - $carry8 = $h8 >> 26; - $h9 += $carry8; - $h8 -= $carry8 << 26; - /** @var int $carry9 */ - $carry9 = $h9 >> 25; - $h9 -= $carry9 << 25; - - /** - * @var array - */ - $s = array( - (int) (($h0 >> 0) & 0xff), - (int) (($h0 >> 8) & 0xff), - (int) (($h0 >> 16) & 0xff), - (int) ((($h0 >> 24) | ($h1 << 2)) & 0xff), - (int) (($h1 >> 6) & 0xff), - (int) (($h1 >> 14) & 0xff), - (int) ((($h1 >> 22) | ($h2 << 3)) & 0xff), - (int) (($h2 >> 5) & 0xff), - (int) (($h2 >> 13) & 0xff), - (int) ((($h2 >> 21) | ($h3 << 5)) & 0xff), - (int) (($h3 >> 3) & 0xff), - (int) (($h3 >> 11) & 0xff), - (int) ((($h3 >> 19) | ($h4 << 6)) & 0xff), - (int) (($h4 >> 2) & 0xff), - (int) (($h4 >> 10) & 0xff), - (int) (($h4 >> 18) & 0xff), - (int) (($h5 >> 0) & 0xff), - (int) (($h5 >> 8) & 0xff), - (int) (($h5 >> 16) & 0xff), - (int) ((($h5 >> 24) | ($h6 << 1)) & 0xff), - (int) (($h6 >> 7) & 0xff), - (int) (($h6 >> 15) & 0xff), - (int) ((($h6 >> 23) | ($h7 << 3)) & 0xff), - (int) (($h7 >> 5) & 0xff), - (int) (($h7 >> 13) & 0xff), - (int) ((($h7 >> 21) | ($h8 << 4)) & 0xff), - (int) (($h8 >> 4) & 0xff), - (int) (($h8 >> 12) & 0xff), - (int) ((($h8 >> 20) | ($h9 << 6)) & 0xff), - (int) (($h9 >> 2) & 0xff), - (int) (($h9 >> 10) & 0xff), - (int) (($h9 >> 18) & 0xff) - ); - return self::intArrayToString($s); - } - - /** - * Is a field element negative? (1 = yes, 0 = no. Used in calculations.) - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @return int - * @throws SodiumException - * @throws TypeError - */ - public static function fe_isnegative(ParagonIE_Sodium_Core_Curve25519_Fe $f) - { - $str = self::fe_tobytes($f); - return (int) (self::chrToInt($str[0]) & 1); - } - - /** - * Returns 0 if this field element results in all NUL bytes. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function fe_isnonzero(ParagonIE_Sodium_Core_Curve25519_Fe $f) - { - static $zero; - if ($zero === null) { - $zero = str_repeat("\x00", 32); - } - /** @var string $zero */ - /** @var string $str */ - $str = self::fe_tobytes($f); - return !self::verify_32($str, (string) $zero); - } - - /** - * Multiply two field elements - * - * h = f * g - * - * @internal You should not use this directly from another application - * - * @security Is multiplication a source of timing leaks? If so, can we do - * anything to prevent that from happening? - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @param ParagonIE_Sodium_Core_Curve25519_Fe $g - * @return ParagonIE_Sodium_Core_Curve25519_Fe - */ - public static function fe_mul( - ParagonIE_Sodium_Core_Curve25519_Fe $f, - ParagonIE_Sodium_Core_Curve25519_Fe $g - ) { - /** @var int $f0 */ - $f0 = $f[0]; - /** @var int $f1 */ - $f1 = $f[1]; - /** @var int $f2 */ - $f2 = $f[2]; - /** @var int $f3 */ - $f3 = $f[3]; - /** @var int $f4 */ - $f4 = $f[4]; - /** @var int $f5 */ - $f5 = $f[5]; - /** @var int $f6 */ - $f6 = $f[6]; - /** @var int $f7 */ - $f7 = $f[7]; - /** @var int $f8 */ - $f8 = $f[8]; - /** @var int $f9 */ - $f9 = $f[9]; - /** @var int $g0 */ - $g0 = $g[0]; - /** @var int $g1 */ - $g1 = $g[1]; - /** @var int $g2 */ - $g2 = $g[2]; - /** @var int $g3 */ - $g3 = $g[3]; - /** @var int $g4 */ - $g4 = $g[4]; - /** @var int $g5 */ - $g5 = $g[5]; - /** @var int $g6 */ - $g6 = $g[6]; - /** @var int $g7 */ - $g7 = $g[7]; - /** @var int $g8 */ - $g8 = $g[8]; - /** @var int $g9 */ - $g9 = $g[9]; - $g1_19 = self::mul($g1, 19, 5); - $g2_19 = self::mul($g2, 19, 5); - $g3_19 = self::mul($g3, 19, 5); - $g4_19 = self::mul($g4, 19, 5); - $g5_19 = self::mul($g5, 19, 5); - $g6_19 = self::mul($g6, 19, 5); - $g7_19 = self::mul($g7, 19, 5); - $g8_19 = self::mul($g8, 19, 5); - $g9_19 = self::mul($g9, 19, 5); - /** @var int $f1_2 */ - $f1_2 = $f1 << 1; - /** @var int $f3_2 */ - $f3_2 = $f3 << 1; - /** @var int $f5_2 */ - $f5_2 = $f5 << 1; - /** @var int $f7_2 */ - $f7_2 = $f7 << 1; - /** @var int $f9_2 */ - $f9_2 = $f9 << 1; - $f0g0 = self::mul($f0, $g0, 27); - $f0g1 = self::mul($f0, $g1, 26); - $f0g2 = self::mul($f0, $g2, 27); - $f0g3 = self::mul($f0, $g3, 26); - $f0g4 = self::mul($f0, $g4, 27); - $f0g5 = self::mul($f0, $g5, 26); - $f0g6 = self::mul($f0, $g6, 27); - $f0g7 = self::mul($f0, $g7, 26); - $f0g8 = self::mul($f0, $g8, 27); - $f0g9 = self::mul($f0, $g9, 27); - $f1g0 = self::mul($f1, $g0, 27); - $f1g1_2 = self::mul($f1_2, $g1, 26); - $f1g2 = self::mul($f1, $g2, 27); - $f1g3_2 = self::mul($f1_2, $g3, 26); - $f1g4 = self::mul($f1, $g4, 27); - $f1g5_2 = self::mul($f1_2, $g5, 26); - $f1g6 = self::mul($f1, $g6, 27); - $f1g7_2 = self::mul($f1_2, $g7, 26); - $f1g8 = self::mul($f1, $g8, 27); - $f1g9_38 = self::mul($g9_19, $f1_2, 27); - $f2g0 = self::mul($f2, $g0, 27); - $f2g1 = self::mul($f2, $g1, 26); - $f2g2 = self::mul($f2, $g2, 27); - $f2g3 = self::mul($f2, $g3, 26); - $f2g4 = self::mul($f2, $g4, 27); - $f2g5 = self::mul($f2, $g5, 26); - $f2g6 = self::mul($f2, $g6, 27); - $f2g7 = self::mul($f2, $g7, 26); - $f2g8_19 = self::mul($g8_19, $f2, 27); - $f2g9_19 = self::mul($g9_19, $f2, 27); - $f3g0 = self::mul($f3, $g0, 27); - $f3g1_2 = self::mul($f3_2, $g1, 26); - $f3g2 = self::mul($f3, $g2, 27); - $f3g3_2 = self::mul($f3_2, $g3, 26); - $f3g4 = self::mul($f3, $g4, 27); - $f3g5_2 = self::mul($f3_2, $g5, 26); - $f3g6 = self::mul($f3, $g6, 27); - $f3g7_38 = self::mul($g7_19, $f3_2, 27); - $f3g8_19 = self::mul($g8_19, $f3, 27); - $f3g9_38 = self::mul($g9_19, $f3_2, 27); - $f4g0 = self::mul($f4, $g0, 27); - $f4g1 = self::mul($f4, $g1, 26); - $f4g2 = self::mul($f4, $g2, 27); - $f4g3 = self::mul($f4, $g3, 26); - $f4g4 = self::mul($f4, $g4, 27); - $f4g5 = self::mul($f4, $g5, 26); - $f4g6_19 = self::mul($g6_19, $f4, 27); - $f4g7_19 = self::mul($g7_19, $f4, 27); - $f4g8_19 = self::mul($g8_19, $f4, 27); - $f4g9_19 = self::mul($g9_19, $f4, 27); - $f5g0 = self::mul($f5, $g0, 27); - $f5g1_2 = self::mul($f5_2, $g1, 26); - $f5g2 = self::mul($f5, $g2, 27); - $f5g3_2 = self::mul($f5_2, $g3, 26); - $f5g4 = self::mul($f5, $g4, 27); - $f5g5_38 = self::mul($g5_19, $f5_2, 27); - $f5g6_19 = self::mul($g6_19, $f5, 26); - $f5g7_38 = self::mul($g7_19, $f5_2, 27); - $f5g8_19 = self::mul($g8_19, $f5, 26); - $f5g9_38 = self::mul($g9_19, $f5_2, 27); - $f6g0 = self::mul($f6, $g0, 27); - $f6g1 = self::mul($f6, $g1, 26); - $f6g2 = self::mul($f6, $g2, 27); - $f6g3 = self::mul($f6, $g3, 26); - $f6g4_19 = self::mul($g4_19, $f6, 27); - $f6g5_19 = self::mul($g5_19, $f6, 27); - $f6g6_19 = self::mul($g6_19, $f6, 27); - $f6g7_19 = self::mul($g7_19, $f6, 27); - $f6g8_19 = self::mul($g8_19, $f6, 27); - $f6g9_19 = self::mul($g9_19, $f6, 27); - $f7g0 = self::mul($f7, $g0, 27); - $f7g1_2 = self::mul($f7_2, $g1, 26); - $f7g2 = self::mul($f7, $g2, 27); - $f7g3_38 = self::mul($g3_19, $f7_2, 27); - $f7g4_19 = self::mul($g4_19, $f7, 27); - $f7g5_38 = self::mul($g5_19, $f7_2, 27); - $f7g6_19 = self::mul($g6_19, $f7, 27); - $f7g7_38 = self::mul($g7_19, $f7_2, 27); - $f7g8_19 = self::mul($g8_19, $f7, 27); - $f7g9_38 = self::mul($g9_19,$f7_2, 27); - $f8g0 = self::mul($f8, $g0, 27); - $f8g1 = self::mul($f8, $g1, 26); - $f8g2_19 = self::mul($g2_19, $f8, 27); - $f8g3_19 = self::mul($g3_19, $f8, 27); - $f8g4_19 = self::mul($g4_19, $f8, 27); - $f8g5_19 = self::mul($g5_19, $f8, 27); - $f8g6_19 = self::mul($g6_19, $f8, 27); - $f8g7_19 = self::mul($g7_19, $f8, 27); - $f8g8_19 = self::mul($g8_19, $f8, 27); - $f8g9_19 = self::mul($g9_19, $f8, 27); - $f9g0 = self::mul($f9, $g0, 27); - $f9g1_38 = self::mul($g1_19, $f9_2, 27); - $f9g2_19 = self::mul($g2_19, $f9, 27); - $f9g3_38 = self::mul($g3_19, $f9_2, 27); - $f9g4_19 = self::mul($g4_19, $f9, 27); - $f9g5_38 = self::mul($g5_19, $f9_2, 27); - $f9g6_19 = self::mul($g6_19, $f9, 27); - $f9g7_38 = self::mul($g7_19, $f9_2, 27); - $f9g8_19 = self::mul($g8_19, $f9, 27); - $f9g9_38 = self::mul($g9_19, $f9_2, 27); - $h0 = $f0g0 + $f1g9_38 + $f2g8_19 + $f3g7_38 + $f4g6_19 + $f5g5_38 + $f6g4_19 + $f7g3_38 + $f8g2_19 + $f9g1_38; - $h1 = $f0g1 + $f1g0 + $f2g9_19 + $f3g8_19 + $f4g7_19 + $f5g6_19 + $f6g5_19 + $f7g4_19 + $f8g3_19 + $f9g2_19; - $h2 = $f0g2 + $f1g1_2 + $f2g0 + $f3g9_38 + $f4g8_19 + $f5g7_38 + $f6g6_19 + $f7g5_38 + $f8g4_19 + $f9g3_38; - $h3 = $f0g3 + $f1g2 + $f2g1 + $f3g0 + $f4g9_19 + $f5g8_19 + $f6g7_19 + $f7g6_19 + $f8g5_19 + $f9g4_19; - $h4 = $f0g4 + $f1g3_2 + $f2g2 + $f3g1_2 + $f4g0 + $f5g9_38 + $f6g8_19 + $f7g7_38 + $f8g6_19 + $f9g5_38; - $h5 = $f0g5 + $f1g4 + $f2g3 + $f3g2 + $f4g1 + $f5g0 + $f6g9_19 + $f7g8_19 + $f8g7_19 + $f9g6_19; - $h6 = $f0g6 + $f1g5_2 + $f2g4 + $f3g3_2 + $f4g2 + $f5g1_2 + $f6g0 + $f7g9_38 + $f8g8_19 + $f9g7_38; - $h7 = $f0g7 + $f1g6 + $f2g5 + $f3g4 + $f4g3 + $f5g2 + $f6g1 + $f7g0 + $f8g9_19 + $f9g8_19; - $h8 = $f0g8 + $f1g7_2 + $f2g6 + $f3g5_2 + $f4g4 + $f5g3_2 + $f6g2 + $f7g1_2 + $f8g0 + $f9g9_38; - $h9 = $f0g9 + $f1g8 + $f2g7 + $f3g6 + $f4g5 + $f5g4 + $f6g3 + $f7g2 + $f8g1 + $f9g0 ; - - /** @var int $carry0 */ - $carry0 = ($h0 + (1 << 25)) >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - /** @var int $carry4 */ - $carry4 = ($h4 + (1 << 25)) >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - - /** @var int $carry1 */ - $carry1 = ($h1 + (1 << 24)) >> 25; - $h2 += $carry1; - $h1 -= $carry1 << 25; - /** @var int $carry5 */ - $carry5 = ($h5 + (1 << 24)) >> 25; - $h6 += $carry5; - $h5 -= $carry5 << 25; - - /** @var int $carry2 */ - $carry2 = ($h2 + (1 << 25)) >> 26; - $h3 += $carry2; - $h2 -= $carry2 << 26; - /** @var int $carry6 */ - $carry6 = ($h6 + (1 << 25)) >> 26; - $h7 += $carry6; - $h6 -= $carry6 << 26; - - /** @var int $carry3 */ - $carry3 = ($h3 + (1 << 24)) >> 25; - $h4 += $carry3; - $h3 -= $carry3 << 25; - /** @var int $carry7 */ - $carry7 = ($h7 + (1 << 24)) >> 25; - $h8 += $carry7; - $h7 -= $carry7 << 25; - - /** @var int $carry4 */ - $carry4 = ($h4 + (1 << 25)) >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - /** @var int $carry8 */ - $carry8 = ($h8 + (1 << 25)) >> 26; - $h9 += $carry8; - $h8 -= $carry8 << 26; - - /** @var int $carry9 */ - $carry9 = ($h9 + (1 << 24)) >> 25; - $h0 += self::mul($carry9, 19, 5); - $h9 -= $carry9 << 25; - - /** @var int $carry0 */ - $carry0 = ($h0 + (1 << 25)) >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - - return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( - array( - (int) $h0, - (int) $h1, - (int) $h2, - (int) $h3, - (int) $h4, - (int) $h5, - (int) $h6, - (int) $h7, - (int) $h8, - (int) $h9 - ) - ); - } - - /** - * Get the negative values for each piece of the field element. - * - * h = -f - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @return ParagonIE_Sodium_Core_Curve25519_Fe - * @psalm-suppress MixedAssignment - */ - public static function fe_neg(ParagonIE_Sodium_Core_Curve25519_Fe $f) - { - $h = new ParagonIE_Sodium_Core_Curve25519_Fe(); - for ($i = 0; $i < 10; ++$i) { - $h[$i] = -$f[$i]; - } - return $h; - } - - /** - * Square a field element - * - * h = f * f - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @return ParagonIE_Sodium_Core_Curve25519_Fe - */ - public static function fe_sq(ParagonIE_Sodium_Core_Curve25519_Fe $f) - { - $f0 = (int) $f[0]; - $f1 = (int) $f[1]; - $f2 = (int) $f[2]; - $f3 = (int) $f[3]; - $f4 = (int) $f[4]; - $f5 = (int) $f[5]; - $f6 = (int) $f[6]; - $f7 = (int) $f[7]; - $f8 = (int) $f[8]; - $f9 = (int) $f[9]; - - /** @var int $f0_2 */ - $f0_2 = $f0 << 1; - /** @var int $f1_2 */ - $f1_2 = $f1 << 1; - /** @var int $f2_2 */ - $f2_2 = $f2 << 1; - /** @var int $f3_2 */ - $f3_2 = $f3 << 1; - /** @var int $f4_2 */ - $f4_2 = $f4 << 1; - /** @var int $f5_2 */ - $f5_2 = $f5 << 1; - /** @var int $f6_2 */ - $f6_2 = $f6 << 1; - /** @var int $f7_2 */ - $f7_2 = $f7 << 1; - $f5_38 = self::mul($f5, 38, 6); - $f6_19 = self::mul($f6, 19, 5); - $f7_38 = self::mul($f7, 38, 6); - $f8_19 = self::mul($f8, 19, 5); - $f9_38 = self::mul($f9, 38, 6); - $f0f0 = self::mul($f0, $f0, 26); - $f0f1_2 = self::mul($f0_2, $f1, 26); - $f0f2_2 = self::mul($f0_2, $f2, 26); - $f0f3_2 = self::mul($f0_2, $f3, 26); - $f0f4_2 = self::mul($f0_2, $f4, 26); - $f0f5_2 = self::mul($f0_2, $f5, 26); - $f0f6_2 = self::mul($f0_2, $f6, 26); - $f0f7_2 = self::mul($f0_2, $f7, 26); - $f0f8_2 = self::mul($f0_2, $f8, 26); - $f0f9_2 = self::mul($f0_2, $f9, 26); - $f1f1_2 = self::mul($f1_2, $f1, 26); - $f1f2_2 = self::mul($f1_2, $f2, 26); - $f1f3_4 = self::mul($f1_2, $f3_2, 26); - $f1f4_2 = self::mul($f1_2, $f4, 26); - $f1f5_4 = self::mul($f1_2, $f5_2, 27); - $f1f6_2 = self::mul($f1_2, $f6, 26); - $f1f7_4 = self::mul($f1_2, $f7_2, 26); - $f1f8_2 = self::mul($f1_2, $f8, 26); - $f1f9_76 = self::mul($f9_38, $f1_2, 26); - $f2f2 = self::mul($f2, $f2, 26); - $f2f3_2 = self::mul($f2_2, $f3, 26); - $f2f4_2 = self::mul($f2_2, $f4, 26); - $f2f5_2 = self::mul($f2_2, $f5, 26); - $f2f6_2 = self::mul($f2_2, $f6, 26); - $f2f7_2 = self::mul($f2_2, $f7, 26); - $f2f8_38 = self::mul($f8_19, $f2_2, 27); - $f2f9_38 = self::mul($f9_38, $f2, 26); - $f3f3_2 = self::mul($f3_2, $f3, 26); - $f3f4_2 = self::mul($f3_2, $f4, 26); - $f3f5_4 = self::mul($f3_2, $f5_2, 27); - $f3f6_2 = self::mul($f3_2, $f6, 26); - $f3f7_76 = self::mul($f7_38, $f3_2, 26); - $f3f8_38 = self::mul($f8_19, $f3_2, 26); - $f3f9_76 = self::mul($f9_38, $f3_2, 26); - $f4f4 = self::mul($f4, $f4, 26); - $f4f5_2 = self::mul($f4_2, $f5, 26); - $f4f6_38 = self::mul($f6_19, $f4_2, 27); - $f4f7_38 = self::mul($f7_38, $f4, 26); - $f4f8_38 = self::mul($f8_19, $f4_2, 27); - $f4f9_38 = self::mul($f9_38, $f4, 26); - $f5f5_38 = self::mul($f5_38, $f5, 26); - $f5f6_38 = self::mul($f6_19, $f5_2, 27); - $f5f7_76 = self::mul($f7_38, $f5_2, 27); - $f5f8_38 = self::mul($f8_19, $f5_2, 27); - $f5f9_76 = self::mul($f9_38, $f5_2, 27); - $f6f6_19 = self::mul($f6_19, $f6, 26); - $f6f7_38 = self::mul($f7_38, $f6, 26); - $f6f8_38 = self::mul($f8_19, $f6_2, 27); - $f6f9_38 = self::mul($f9_38, $f6, 26); - $f7f7_38 = self::mul($f7_38, $f7, 26); - $f7f8_38 = self::mul($f8_19, $f7_2, 27); - $f7f9_76 = self::mul($f9_38, $f7_2, 27); - $f8f8_19 = self::mul($f8_19, $f8, 26); - $f8f9_38 = self::mul($f9_38, $f8, 26); - $f9f9_38 = self::mul($f9_38, $f9, 27); - $h0 = $f0f0 + $f1f9_76 + $f2f8_38 + $f3f7_76 + $f4f6_38 + $f5f5_38; - $h1 = $f0f1_2 + $f2f9_38 + $f3f8_38 + $f4f7_38 + $f5f6_38; - $h2 = $f0f2_2 + $f1f1_2 + $f3f9_76 + $f4f8_38 + $f5f7_76 + $f6f6_19; - $h3 = $f0f3_2 + $f1f2_2 + $f4f9_38 + $f5f8_38 + $f6f7_38; - $h4 = $f0f4_2 + $f1f3_4 + $f2f2 + $f5f9_76 + $f6f8_38 + $f7f7_38; - $h5 = $f0f5_2 + $f1f4_2 + $f2f3_2 + $f6f9_38 + $f7f8_38; - $h6 = $f0f6_2 + $f1f5_4 + $f2f4_2 + $f3f3_2 + $f7f9_76 + $f8f8_19; - $h7 = $f0f7_2 + $f1f6_2 + $f2f5_2 + $f3f4_2 + $f8f9_38; - $h8 = $f0f8_2 + $f1f7_4 + $f2f6_2 + $f3f5_4 + $f4f4 + $f9f9_38; - $h9 = $f0f9_2 + $f1f8_2 + $f2f7_2 + $f3f6_2 + $f4f5_2; - - /** @var int $carry0 */ - $carry0 = ($h0 + (1 << 25)) >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - /** @var int $carry4 */ - $carry4 = ($h4 + (1 << 25)) >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - - /** @var int $carry1 */ - $carry1 = ($h1 + (1 << 24)) >> 25; - $h2 += $carry1; - $h1 -= $carry1 << 25; - /** @var int $carry5 */ - $carry5 = ($h5 + (1 << 24)) >> 25; - $h6 += $carry5; - $h5 -= $carry5 << 25; - - /** @var int $carry2 */ - $carry2 = ($h2 + (1 << 25)) >> 26; - $h3 += $carry2; - $h2 -= $carry2 << 26; - /** @var int $carry6 */ - $carry6 = ($h6 + (1 << 25)) >> 26; - $h7 += $carry6; - $h6 -= $carry6 << 26; - - /** @var int $carry3 */ - $carry3 = ($h3 + (1 << 24)) >> 25; - $h4 += $carry3; - $h3 -= $carry3 << 25; - /** @var int $carry7 */ - $carry7 = ($h7 + (1 << 24)) >> 25; - $h8 += $carry7; - $h7 -= $carry7 << 25; - - /** @var int $carry4 */ - $carry4 = ($h4 + (1 << 25)) >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - /** @var int $carry8 */ - $carry8 = ($h8 + (1 << 25)) >> 26; - $h9 += $carry8; - $h8 -= $carry8 << 26; - - /** @var int $carry9 */ - $carry9 = ($h9 + (1 << 24)) >> 25; - $h0 += self::mul($carry9, 19, 5); - $h9 -= $carry9 << 25; - - /** @var int $carry0 */ - $carry0 = ($h0 + (1 << 25)) >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - - return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( - array( - (int) $h0, - (int) $h1, - (int) $h2, - (int) $h3, - (int) $h4, - (int) $h5, - (int) $h6, - (int) $h7, - (int) $h8, - (int) $h9 - ) - ); - } - - - /** - * Square and double a field element - * - * h = 2 * f * f - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @return ParagonIE_Sodium_Core_Curve25519_Fe - */ - public static function fe_sq2(ParagonIE_Sodium_Core_Curve25519_Fe $f) - { - $f0 = (int) $f[0]; - $f1 = (int) $f[1]; - $f2 = (int) $f[2]; - $f3 = (int) $f[3]; - $f4 = (int) $f[4]; - $f5 = (int) $f[5]; - $f6 = (int) $f[6]; - $f7 = (int) $f[7]; - $f8 = (int) $f[8]; - $f9 = (int) $f[9]; - - /** @var int $f0_2 */ - $f0_2 = $f0 << 1; - /** @var int $f1_2 */ - $f1_2 = $f1 << 1; - /** @var int $f2_2 */ - $f2_2 = $f2 << 1; - /** @var int $f3_2 */ - $f3_2 = $f3 << 1; - /** @var int $f4_2 */ - $f4_2 = $f4 << 1; - /** @var int $f5_2 */ - $f5_2 = $f5 << 1; - /** @var int $f6_2 */ - $f6_2 = $f6 << 1; - /** @var int $f7_2 */ - $f7_2 = $f7 << 1; - $f5_38 = self::mul($f5, 38, 6); /* 1.959375*2^30 */ - $f6_19 = self::mul($f6, 19, 5); /* 1.959375*2^30 */ - $f7_38 = self::mul($f7, 38, 6); /* 1.959375*2^30 */ - $f8_19 = self::mul($f8, 19, 5); /* 1.959375*2^30 */ - $f9_38 = self::mul($f9, 38, 6); /* 1.959375*2^30 */ - $f0f0 = self::mul($f0, $f0, 26); - $f0f1_2 = self::mul($f0_2, $f1, 26); - $f0f2_2 = self::mul($f0_2, $f2, 26); - $f0f3_2 = self::mul($f0_2, $f3, 26); - $f0f4_2 = self::mul($f0_2, $f4, 26); - $f0f5_2 = self::mul($f0_2, $f5, 26); - $f0f6_2 = self::mul($f0_2, $f6, 26); - $f0f7_2 = self::mul($f0_2, $f7, 26); - $f0f8_2 = self::mul($f0_2, $f8, 26); - $f0f9_2 = self::mul($f0_2, $f9, 26); - $f1f1_2 = self::mul($f1_2, $f1, 26); - $f1f2_2 = self::mul($f1_2, $f2, 26); - $f1f3_4 = self::mul($f1_2, $f3_2, 27); - $f1f4_2 = self::mul($f1_2, $f4, 26); - $f1f5_4 = self::mul($f1_2, $f5_2, 27); - $f1f6_2 = self::mul($f1_2, $f6, 26); - $f1f7_4 = self::mul($f1_2, $f7_2, 27); - $f1f8_2 = self::mul($f1_2, $f8, 26); - $f1f9_76 = self::mul($f9_38, $f1_2, 27); - $f2f2 = self::mul($f2, $f2, 26); - $f2f3_2 = self::mul($f2_2, $f3, 26); - $f2f4_2 = self::mul($f2_2, $f4, 26); - $f2f5_2 = self::mul($f2_2, $f5, 26); - $f2f6_2 = self::mul($f2_2, $f6, 26); - $f2f7_2 = self::mul($f2_2, $f7, 26); - $f2f8_38 = self::mul($f8_19, $f2_2, 27); - $f2f9_38 = self::mul($f9_38, $f2, 26); - $f3f3_2 = self::mul($f3_2, $f3, 26); - $f3f4_2 = self::mul($f3_2, $f4, 26); - $f3f5_4 = self::mul($f3_2, $f5_2, 27); - $f3f6_2 = self::mul($f3_2, $f6, 27); - $f3f7_76 = self::mul($f7_38, $f3_2, 27); - $f3f8_38 = self::mul($f8_19, $f3_2, 27); - $f3f9_76 = self::mul($f9_38, $f3_2, 27); - $f4f4 = self::mul($f4, $f4, 26); - $f4f5_2 = self::mul($f4_2, $f5, 26); - $f4f6_38 = self::mul($f6_19, $f4_2, 27); - $f4f7_38 = self::mul($f7_38, $f4, 27); - $f4f8_38 = self::mul($f8_19, $f4_2, 27); - $f4f9_38 = self::mul($f9_38, $f4, 27); - $f5f5_38 = self::mul($f5_38, $f5, 26); - $f5f6_38 = self::mul($f6_19, $f5_2, 27); - $f5f7_76 = self::mul($f7_38, $f5_2, 27); - $f5f8_38 = self::mul($f8_19, $f5_2, 27); - $f5f9_76 = self::mul($f9_38, $f5_2, 27); - $f6f6_19 = self::mul($f6_19, $f6, 26); - $f6f7_38 = self::mul($f7_38, $f6, 26); - $f6f8_38 = self::mul($f8_19, $f6_2, 27); - $f6f9_38 = self::mul($f9_38, $f6, 26); - $f7f7_38 = self::mul($f7_38, $f7, 26); - $f7f8_38 = self::mul($f8_19, $f7_2, 27); - $f7f9_76 = self::mul($f9_38, $f7_2, 27); - $f8f8_19 = self::mul($f8_19, $f8, 26); - $f8f9_38 = self::mul($f9_38, $f8, 26); - $f9f9_38 = self::mul($f9_38, $f9, 27); - - /** @var int $h0 */ - $h0 = (int) ($f0f0 + $f1f9_76 + $f2f8_38 + $f3f7_76 + $f4f6_38 + $f5f5_38) << 1; - /** @var int $h1 */ - $h1 = (int) ($f0f1_2 + $f2f9_38 + $f3f8_38 + $f4f7_38 + $f5f6_38) << 1; - /** @var int $h2 */ - $h2 = (int) ($f0f2_2 + $f1f1_2 + $f3f9_76 + $f4f8_38 + $f5f7_76 + $f6f6_19) << 1; - /** @var int $h3 */ - $h3 = (int) ($f0f3_2 + $f1f2_2 + $f4f9_38 + $f5f8_38 + $f6f7_38) << 1; - /** @var int $h4 */ - $h4 = (int) ($f0f4_2 + $f1f3_4 + $f2f2 + $f5f9_76 + $f6f8_38 + $f7f7_38) << 1; - /** @var int $h5 */ - $h5 = (int) ($f0f5_2 + $f1f4_2 + $f2f3_2 + $f6f9_38 + $f7f8_38) << 1; - /** @var int $h6 */ - $h6 = (int) ($f0f6_2 + $f1f5_4 + $f2f4_2 + $f3f3_2 + $f7f9_76 + $f8f8_19) << 1; - /** @var int $h7 */ - $h7 = (int) ($f0f7_2 + $f1f6_2 + $f2f5_2 + $f3f4_2 + $f8f9_38) << 1; - /** @var int $h8 */ - $h8 = (int) ($f0f8_2 + $f1f7_4 + $f2f6_2 + $f3f5_4 + $f4f4 + $f9f9_38) << 1; - /** @var int $h9 */ - $h9 = (int) ($f0f9_2 + $f1f8_2 + $f2f7_2 + $f3f6_2 + $f4f5_2) << 1; - - /** @var int $carry0 */ - $carry0 = ($h0 + (1 << 25)) >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - /** @var int $carry4 */ - $carry4 = ($h4 + (1 << 25)) >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - - /** @var int $carry1 */ - $carry1 = ($h1 + (1 << 24)) >> 25; - $h2 += $carry1; - $h1 -= $carry1 << 25; - /** @var int $carry5 */ - $carry5 = ($h5 + (1 << 24)) >> 25; - $h6 += $carry5; - $h5 -= $carry5 << 25; - - /** @var int $carry2 */ - $carry2 = ($h2 + (1 << 25)) >> 26; - $h3 += $carry2; - $h2 -= $carry2 << 26; - /** @var int $carry6 */ - $carry6 = ($h6 + (1 << 25)) >> 26; - $h7 += $carry6; - $h6 -= $carry6 << 26; - - /** @var int $carry3 */ - $carry3 = ($h3 + (1 << 24)) >> 25; - $h4 += $carry3; - $h3 -= $carry3 << 25; - /** @var int $carry7 */ - $carry7 = ($h7 + (1 << 24)) >> 25; - $h8 += $carry7; - $h7 -= $carry7 << 25; - - /** @var int $carry4 */ - $carry4 = ($h4 + (1 << 25)) >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - /** @var int $carry8 */ - $carry8 = ($h8 + (1 << 25)) >> 26; - $h9 += $carry8; - $h8 -= $carry8 << 26; - - /** @var int $carry9 */ - $carry9 = ($h9 + (1 << 24)) >> 25; - $h0 += self::mul($carry9, 19, 5); - $h9 -= $carry9 << 25; - - /** @var int $carry0 */ - $carry0 = ($h0 + (1 << 25)) >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - - return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( - array( - (int) $h0, - (int) $h1, - (int) $h2, - (int) $h3, - (int) $h4, - (int) $h5, - (int) $h6, - (int) $h7, - (int) $h8, - (int) $h9 - ) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $Z - * @return ParagonIE_Sodium_Core_Curve25519_Fe - */ - public static function fe_invert(ParagonIE_Sodium_Core_Curve25519_Fe $Z) - { - $z = clone $Z; - $t0 = self::fe_sq($z); - $t1 = self::fe_sq($t0); - $t1 = self::fe_sq($t1); - $t1 = self::fe_mul($z, $t1); - $t0 = self::fe_mul($t0, $t1); - $t2 = self::fe_sq($t0); - $t1 = self::fe_mul($t1, $t2); - $t2 = self::fe_sq($t1); - for ($i = 1; $i < 5; ++$i) { - $t2 = self::fe_sq($t2); - } - $t1 = self::fe_mul($t2, $t1); - $t2 = self::fe_sq($t1); - for ($i = 1; $i < 10; ++$i) { - $t2 = self::fe_sq($t2); - } - $t2 = self::fe_mul($t2, $t1); - $t3 = self::fe_sq($t2); - for ($i = 1; $i < 20; ++$i) { - $t3 = self::fe_sq($t3); - } - $t2 = self::fe_mul($t3, $t2); - $t2 = self::fe_sq($t2); - for ($i = 1; $i < 10; ++$i) { - $t2 = self::fe_sq($t2); - } - $t1 = self::fe_mul($t2, $t1); - $t2 = self::fe_sq($t1); - for ($i = 1; $i < 50; ++$i) { - $t2 = self::fe_sq($t2); - } - $t2 = self::fe_mul($t2, $t1); - $t3 = self::fe_sq($t2); - for ($i = 1; $i < 100; ++$i) { - $t3 = self::fe_sq($t3); - } - $t2 = self::fe_mul($t3, $t2); - $t2 = self::fe_sq($t2); - for ($i = 1; $i < 50; ++$i) { - $t2 = self::fe_sq($t2); - } - $t1 = self::fe_mul($t2, $t1); - $t1 = self::fe_sq($t1); - for ($i = 1; $i < 5; ++$i) { - $t1 = self::fe_sq($t1); - } - return self::fe_mul($t1, $t0); - } - - /** - * @internal You should not use this directly from another application - * - * @ref https://github.com/jedisct1/libsodium/blob/68564326e1e9dc57ef03746f85734232d20ca6fb/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1054-L1106 - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $z - * @return ParagonIE_Sodium_Core_Curve25519_Fe - */ - public static function fe_pow22523(ParagonIE_Sodium_Core_Curve25519_Fe $z) - { - # fe_sq(t0, z); - # fe_sq(t1, t0); - # fe_sq(t1, t1); - # fe_mul(t1, z, t1); - # fe_mul(t0, t0, t1); - # fe_sq(t0, t0); - # fe_mul(t0, t1, t0); - # fe_sq(t1, t0); - $t0 = self::fe_sq($z); - $t1 = self::fe_sq($t0); - $t1 = self::fe_sq($t1); - $t1 = self::fe_mul($z, $t1); - $t0 = self::fe_mul($t0, $t1); - $t0 = self::fe_sq($t0); - $t0 = self::fe_mul($t1, $t0); - $t1 = self::fe_sq($t0); - - # for (i = 1; i < 5; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 5; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t0, t1, t0); - # fe_sq(t1, t0); - $t0 = self::fe_mul($t1, $t0); - $t1 = self::fe_sq($t0); - - # for (i = 1; i < 10; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 10; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t1, t1, t0); - # fe_sq(t2, t1); - $t1 = self::fe_mul($t1, $t0); - $t2 = self::fe_sq($t1); - - # for (i = 1; i < 20; ++i) { - # fe_sq(t2, t2); - # } - for ($i = 1; $i < 20; ++$i) { - $t2 = self::fe_sq($t2); - } - - # fe_mul(t1, t2, t1); - # fe_sq(t1, t1); - $t1 = self::fe_mul($t2, $t1); - $t1 = self::fe_sq($t1); - - # for (i = 1; i < 10; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 10; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t0, t1, t0); - # fe_sq(t1, t0); - $t0 = self::fe_mul($t1, $t0); - $t1 = self::fe_sq($t0); - - # for (i = 1; i < 50; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 50; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t1, t1, t0); - # fe_sq(t2, t1); - $t1 = self::fe_mul($t1, $t0); - $t2 = self::fe_sq($t1); - - # for (i = 1; i < 100; ++i) { - # fe_sq(t2, t2); - # } - for ($i = 1; $i < 100; ++$i) { - $t2 = self::fe_sq($t2); - } - - # fe_mul(t1, t2, t1); - # fe_sq(t1, t1); - $t1 = self::fe_mul($t2, $t1); - $t1 = self::fe_sq($t1); - - # for (i = 1; i < 50; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 50; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t0, t1, t0); - # fe_sq(t0, t0); - # fe_sq(t0, t0); - # fe_mul(out, t0, z); - $t0 = self::fe_mul($t1, $t0); - $t0 = self::fe_sq($t0); - $t0 = self::fe_sq($t0); - return self::fe_mul($t0, $z); - } - - /** - * Subtract two field elements. - * - * h = f - g - * - * Preconditions: - * |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - * |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - * - * Postconditions: - * |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @param ParagonIE_Sodium_Core_Curve25519_Fe $g - * @return ParagonIE_Sodium_Core_Curve25519_Fe - * @psalm-suppress MixedOperand - */ - public static function fe_sub(ParagonIE_Sodium_Core_Curve25519_Fe $f, ParagonIE_Sodium_Core_Curve25519_Fe $g) - { - return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( - array( - (int) ($f[0] - $g[0]), - (int) ($f[1] - $g[1]), - (int) ($f[2] - $g[2]), - (int) ($f[3] - $g[3]), - (int) ($f[4] - $g[4]), - (int) ($f[5] - $g[5]), - (int) ($f[6] - $g[6]), - (int) ($f[7] - $g[7]), - (int) ($f[8] - $g[8]), - (int) ($f[9] - $g[9]) - ) - ); - } - - /** - * Add two group elements. - * - * r = p + q - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 - */ - public static function ge_add( - ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, - ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q - ) { - $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); - $r->X = self::fe_add($p->Y, $p->X); - $r->Y = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_mul($r->X, $q->YplusX); - $r->Y = self::fe_mul($r->Y, $q->YminusX); - $r->T = self::fe_mul($q->T2d, $p->T); - $r->X = self::fe_mul($p->Z, $q->Z); - $t0 = self::fe_add($r->X, $r->X); - $r->X = self::fe_sub($r->Z, $r->Y); - $r->Y = self::fe_add($r->Z, $r->Y); - $r->Z = self::fe_add($t0, $r->T); - $r->T = self::fe_sub($t0, $r->T); - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @ref https://github.com/jedisct1/libsodium/blob/157c4a80c13b117608aeae12178b2d38825f9f8f/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1185-L1215 - * @param string $a - * @return array - * @throws SodiumException - * @throws TypeError - */ - public static function slide($a) - { - if (self::strlen($a) < 256) { - if (self::strlen($a) < 16) { - $a = str_pad($a, 256, '0', STR_PAD_RIGHT); - } - } - /** @var array $r */ - $r = array(); - - /** @var int $i */ - for ($i = 0; $i < 256; ++$i) { - $r[$i] = (int) ( - 1 & ( - self::chrToInt($a[(int) ($i >> 3)]) - >> - ($i & 7) - ) - ); - } - - for ($i = 0;$i < 256;++$i) { - if ($r[$i]) { - for ($b = 1;$b <= 6 && $i + $b < 256;++$b) { - if ($r[$i + $b]) { - if ($r[$i] + ($r[$i + $b] << $b) <= 15) { - $r[$i] += $r[$i + $b] << $b; - $r[$i + $b] = 0; - } elseif ($r[$i] - ($r[$i + $b] << $b) >= -15) { - $r[$i] -= $r[$i + $b] << $b; - for ($k = $i + $b; $k < 256; ++$k) { - if (!$r[$k]) { - $r[$k] = 1; - break; - } - $r[$k] = 0; - } - } else { - break; - } - } - } - } - } - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $s - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 - * @throws SodiumException - * @throws TypeError - */ - public static function ge_frombytes_negate_vartime($s) - { - static $d = null; - if (!$d) { - $d = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d); - } - - # fe_frombytes(h->Y,s); - # fe_1(h->Z); - $h = new ParagonIE_Sodium_Core_Curve25519_Ge_P3( - self::fe_0(), - self::fe_frombytes($s), - self::fe_1() - ); - - # fe_sq(u,h->Y); - # fe_mul(v,u,d); - # fe_sub(u,u,h->Z); /* u = y^2-1 */ - # fe_add(v,v,h->Z); /* v = dy^2+1 */ - $u = self::fe_sq($h->Y); - /** @var ParagonIE_Sodium_Core_Curve25519_Fe $d */ - $v = self::fe_mul($u, $d); - $u = self::fe_sub($u, $h->Z); /* u = y^2 - 1 */ - $v = self::fe_add($v, $h->Z); /* v = dy^2 + 1 */ - - # fe_sq(v3,v); - # fe_mul(v3,v3,v); /* v3 = v^3 */ - # fe_sq(h->X,v3); - # fe_mul(h->X,h->X,v); - # fe_mul(h->X,h->X,u); /* x = uv^7 */ - $v3 = self::fe_sq($v); - $v3 = self::fe_mul($v3, $v); /* v3 = v^3 */ - $h->X = self::fe_sq($v3); - $h->X = self::fe_mul($h->X, $v); - $h->X = self::fe_mul($h->X, $u); /* x = uv^7 */ - - # fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */ - # fe_mul(h->X,h->X,v3); - # fe_mul(h->X,h->X,u); /* x = uv^3(uv^7)^((q-5)/8) */ - $h->X = self::fe_pow22523($h->X); /* x = (uv^7)^((q-5)/8) */ - $h->X = self::fe_mul($h->X, $v3); - $h->X = self::fe_mul($h->X, $u); /* x = uv^3(uv^7)^((q-5)/8) */ - - # fe_sq(vxx,h->X); - # fe_mul(vxx,vxx,v); - # fe_sub(check,vxx,u); /* vx^2-u */ - $vxx = self::fe_sq($h->X); - $vxx = self::fe_mul($vxx, $v); - $check = self::fe_sub($vxx, $u); /* vx^2 - u */ - - # if (fe_isnonzero(check)) { - # fe_add(check,vxx,u); /* vx^2+u */ - # if (fe_isnonzero(check)) { - # return -1; - # } - # fe_mul(h->X,h->X,sqrtm1); - # } - if (self::fe_isnonzero($check)) { - $check = self::fe_add($vxx, $u); /* vx^2 + u */ - if (self::fe_isnonzero($check)) { - throw new RangeException('Internal check failed.'); - } - $h->X = self::fe_mul( - $h->X, - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1) - ); - } - - # if (fe_isnegative(h->X) == (s[31] >> 7)) { - # fe_neg(h->X,h->X); - # } - $i = self::chrToInt($s[31]); - if (self::fe_isnegative($h->X) === ($i >> 7)) { - $h->X = self::fe_neg($h->X); - } - - # fe_mul(h->T,h->X,h->Y); - $h->T = self::fe_mul($h->X, $h->Y); - return $h; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 - */ - public static function ge_madd( - ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R, - ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, - ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q - ) { - $r = clone $R; - $r->X = self::fe_add($p->Y, $p->X); - $r->Y = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_mul($r->X, $q->yplusx); - $r->Y = self::fe_mul($r->Y, $q->yminusx); - $r->T = self::fe_mul($q->xy2d, $p->T); - $t0 = self::fe_add(clone $p->Z, clone $p->Z); - $r->X = self::fe_sub($r->Z, $r->Y); - $r->Y = self::fe_add($r->Z, $r->Y); - $r->Z = self::fe_add($t0, $r->T); - $r->T = self::fe_sub($t0, $r->T); - - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 - */ - public static function ge_msub( - ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R, - ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, - ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q - ) { - $r = clone $R; - - $r->X = self::fe_add($p->Y, $p->X); - $r->Y = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_mul($r->X, $q->yminusx); - $r->Y = self::fe_mul($r->Y, $q->yplusx); - $r->T = self::fe_mul($q->xy2d, $p->T); - $t0 = self::fe_add($p->Z, $p->Z); - $r->X = self::fe_sub($r->Z, $r->Y); - $r->Y = self::fe_add($r->Z, $r->Y); - $r->Z = self::fe_sub($t0, $r->T); - $r->T = self::fe_add($t0, $r->T); - - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 - */ - public static function ge_p1p1_to_p2(ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p) - { - $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P2(); - $r->X = self::fe_mul($p->X, $p->T); - $r->Y = self::fe_mul($p->Y, $p->Z); - $r->Z = self::fe_mul($p->Z, $p->T); - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 - */ - public static function ge_p1p1_to_p3(ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p) - { - $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P3(); - $r->X = self::fe_mul($p->X, $p->T); - $r->Y = self::fe_mul($p->Y, $p->Z); - $r->Z = self::fe_mul($p->Z, $p->T); - $r->T = self::fe_mul($p->X, $p->Y); - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 - */ - public static function ge_p2_0() - { - return new ParagonIE_Sodium_Core_Curve25519_Ge_P2( - self::fe_0(), - self::fe_1(), - self::fe_1() - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P2 $p - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 - */ - public static function ge_p2_dbl(ParagonIE_Sodium_Core_Curve25519_Ge_P2 $p) - { - $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); - - $r->X = self::fe_sq($p->X); - $r->Z = self::fe_sq($p->Y); - $r->T = self::fe_sq2($p->Z); - $r->Y = self::fe_add($p->X, $p->Y); - $t0 = self::fe_sq($r->Y); - $r->Y = self::fe_add($r->Z, $r->X); - $r->Z = self::fe_sub($r->Z, $r->X); - $r->X = self::fe_sub($t0, $r->Y); - $r->T = self::fe_sub($r->T, $r->Z); - - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 - */ - public static function ge_p3_0() - { - return new ParagonIE_Sodium_Core_Curve25519_Ge_P3( - self::fe_0(), - self::fe_1(), - self::fe_1(), - self::fe_0() - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached - */ - public static function ge_p3_to_cached(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p) - { - static $d2 = null; - if ($d2 === null) { - $d2 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d2); - } - /** @var ParagonIE_Sodium_Core_Curve25519_Fe $d2 */ - $r = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached(); - $r->YplusX = self::fe_add($p->Y, $p->X); - $r->YminusX = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_copy($p->Z); - $r->T2d = self::fe_mul($p->T, $d2); - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 - */ - public static function ge_p3_to_p2(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p) - { - return new ParagonIE_Sodium_Core_Curve25519_Ge_P2( - $p->X, - $p->Y, - $p->Z - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function ge_p3_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h) - { - $recip = self::fe_invert($h->Z); - $x = self::fe_mul($h->X, $recip); - $y = self::fe_mul($h->Y, $recip); - $s = self::fe_tobytes($y); - $s[31] = self::intToChr( - self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7) - ); - return $s; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 - */ - public static function ge_p3_dbl(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p) - { - $q = self::ge_p3_to_p2($p); - return self::ge_p2_dbl($q); - } - - /** - * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp - */ - public static function ge_precomp_0() - { - return new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( - self::fe_1(), - self::fe_1(), - self::fe_0() - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $b - * @param int $c - * @return int - */ - public static function equal($b, $c) - { - return (int) ((($b ^ $c) - 1 & 0xffffffff) >> 31); - } - - /** - * @internal You should not use this directly from another application - * - * @param int|string $char - * @return int (1 = yes, 0 = no) - * @throws SodiumException - * @throws TypeError - */ - public static function negative($char) - { - if (is_int($char)) { - return $char < 0 ? 1 : 0; - } - $x = self::chrToInt(self::substr($char, 0, 1)); - return (int) ($x >> 63); - } - - /** - * Conditional move - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $t - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $u - * @param int $b - * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp - */ - public static function cmov( - ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $t, - ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $u, - $b - ) { - if (!is_int($b)) { - throw new InvalidArgumentException('Expected an integer.'); - } - return new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( - self::fe_cmov($t->yplusx, $u->yplusx, $b), - self::fe_cmov($t->yminusx, $u->yminusx, $b), - self::fe_cmov($t->xy2d, $u->xy2d, $b) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $pos - * @param int $b - * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayOffset - */ - public static function ge_select($pos = 0, $b = 0) - { - static $base = null; - if ($base === null) { - $base = array(); - /** @var int $i */ - foreach (self::$base as $i => $bas) { - for ($j = 0; $j < 8; ++$j) { - $base[$i][$j] = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][0]), - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][1]), - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][2]) - ); - } - } - } - /** @var array> $base */ - if (!is_int($pos)) { - throw new InvalidArgumentException('Position must be an integer'); - } - if ($pos < 0 || $pos > 31) { - throw new RangeException('Position is out of range [0, 31]'); - } - - /** @var int $bnegative */ - $bnegative = self::negative($b); - /** @var int $babs */ - $babs = $b - (((-$bnegative) & $b) << 1); - - $t = self::ge_precomp_0(); - for ($i = 0; $i < 8; ++$i) { - $t = self::cmov( - $t, - $base[$pos][$i], - self::equal($babs, $i + 1) - ); - } - $minusT = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( - self::fe_copy($t->yminusx), - self::fe_copy($t->yplusx), - self::fe_neg($t->xy2d) - ); - return self::cmov($t, $minusT, $bnegative); - } - - /** - * Subtract two group elements. - * - * r = p - q - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 - */ - public static function ge_sub( - ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, - ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q - ) { - $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); - - $r->X = self::fe_add($p->Y, $p->X); - $r->Y = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_mul($r->X, $q->YminusX); - $r->Y = self::fe_mul($r->Y, $q->YplusX); - $r->T = self::fe_mul($q->T2d, $p->T); - $r->X = self::fe_mul($p->Z, $q->Z); - $t0 = self::fe_add($r->X, $r->X); - $r->X = self::fe_sub($r->Z, $r->Y); - $r->Y = self::fe_add($r->Z, $r->Y); - $r->Z = self::fe_sub($t0, $r->T); - $r->T = self::fe_add($t0, $r->T); - - return $r; - } - - /** - * Convert a group element to a byte string. - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P2 $h - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function ge_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P2 $h) - { - $recip = self::fe_invert($h->Z); - $x = self::fe_mul($h->X, $recip); - $y = self::fe_mul($h->Y, $recip); - $s = self::fe_tobytes($y); - $s[31] = self::intToChr( - self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7) - ); - return $s; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $a - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A - * @param string $b - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedArrayAccess - */ - public static function ge_double_scalarmult_vartime( - $a, - ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A, - $b - ) { - /** @var array $Ai */ - $Ai = array(); - - /** @var array $Bi */ - static $Bi = array(); - if (!$Bi) { - for ($i = 0; $i < 8; ++$i) { - $Bi[$i] = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][0]), - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][1]), - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][2]) - ); - } - } - for ($i = 0; $i < 8; ++$i) { - $Ai[$i] = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached( - self::fe_0(), - self::fe_0(), - self::fe_0(), - self::fe_0() - ); - } - - # slide(aslide,a); - # slide(bslide,b); - $aslide = self::slide($a); - $bslide = self::slide($b); - - # ge_p3_to_cached(&Ai[0],A); - # ge_p3_dbl(&t,A); ge_p1p1_to_p3(&A2,&t); - $Ai[0] = self::ge_p3_to_cached($A); - $t = self::ge_p3_dbl($A); - $A2 = self::ge_p1p1_to_p3($t); - - # ge_add(&t,&A2,&Ai[0]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[1],&u); - # ge_add(&t,&A2,&Ai[1]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[2],&u); - # ge_add(&t,&A2,&Ai[2]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[3],&u); - # ge_add(&t,&A2,&Ai[3]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[4],&u); - # ge_add(&t,&A2,&Ai[4]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[5],&u); - # ge_add(&t,&A2,&Ai[5]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[6],&u); - # ge_add(&t,&A2,&Ai[6]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[7],&u); - for ($i = 0; $i < 7; ++$i) { - $t = self::ge_add($A2, $Ai[$i]); - $u = self::ge_p1p1_to_p3($t); - $Ai[$i + 1] = self::ge_p3_to_cached($u); - } - - # ge_p2_0(r); - $r = self::ge_p2_0(); - - # for (i = 255;i >= 0;--i) { - # if (aslide[i] || bslide[i]) break; - # } - $i = 255; - for (; $i >= 0; --$i) { - if ($aslide[$i] || $bslide[$i]) { - break; - } - } - - # for (;i >= 0;--i) { - for (; $i >= 0; --$i) { - # ge_p2_dbl(&t,r); - $t = self::ge_p2_dbl($r); - - # if (aslide[i] > 0) { - if ($aslide[$i] > 0) { - # ge_p1p1_to_p3(&u,&t); - # ge_add(&t,&u,&Ai[aslide[i]/2]); - $u = self::ge_p1p1_to_p3($t); - $t = self::ge_add( - $u, - $Ai[(int) floor($aslide[$i] / 2)] - ); - # } else if (aslide[i] < 0) { - } elseif ($aslide[$i] < 0) { - # ge_p1p1_to_p3(&u,&t); - # ge_sub(&t,&u,&Ai[(-aslide[i])/2]); - $u = self::ge_p1p1_to_p3($t); - $t = self::ge_sub( - $u, - $Ai[(int) floor(-$aslide[$i] / 2)] - ); - } - - # if (bslide[i] > 0) { - if ($bslide[$i] > 0) { - /** @var int $index */ - $index = (int) floor($bslide[$i] / 2); - # ge_p1p1_to_p3(&u,&t); - # ge_madd(&t,&u,&Bi[bslide[i]/2]); - $u = self::ge_p1p1_to_p3($t); - $t = self::ge_madd($t, $u, $Bi[$index]); - # } else if (bslide[i] < 0) { - } elseif ($bslide[$i] < 0) { - /** @var int $index */ - $index = (int) floor(-$bslide[$i] / 2); - # ge_p1p1_to_p3(&u,&t); - # ge_msub(&t,&u,&Bi[(-bslide[i])/2]); - $u = self::ge_p1p1_to_p3($t); - $t = self::ge_msub($t, $u, $Bi[$index]); - } - # ge_p1p1_to_p2(r,&t); - $r = self::ge_p1p1_to_p2($t); - } - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $a - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedOperand - */ - public static function ge_scalarmult_base($a) - { - /** @var array $e */ - $e = array(); - $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); - - for ($i = 0; $i < 32; ++$i) { - /** @var int $dbl */ - $dbl = (int) $i << 1; - $e[$dbl] = (int) self::chrToInt($a[$i]) & 15; - $e[$dbl + 1] = (int) (self::chrToInt($a[$i]) >> 4) & 15; - } - - /** @var int $carry */ - $carry = 0; - for ($i = 0; $i < 63; ++$i) { - $e[$i] += $carry; - /** @var int $carry */ - $carry = $e[$i] + 8; - /** @var int $carry */ - $carry >>= 4; - $e[$i] -= $carry << 4; - } - /** @var array $e */ - $e[63] += (int) $carry; - - $h = self::ge_p3_0(); - - for ($i = 1; $i < 64; $i += 2) { - $t = self::ge_select((int) floor($i / 2), (int) $e[$i]); - $r = self::ge_madd($r, $h, $t); - $h = self::ge_p1p1_to_p3($r); - } - - $r = self::ge_p3_dbl($h); - - $s = self::ge_p1p1_to_p2($r); - $r = self::ge_p2_dbl($s); - $s = self::ge_p1p1_to_p2($r); - $r = self::ge_p2_dbl($s); - $s = self::ge_p1p1_to_p2($r); - $r = self::ge_p2_dbl($s); - - $h = self::ge_p1p1_to_p3($r); - - for ($i = 0; $i < 64; $i += 2) { - $t = self::ge_select($i >> 1, (int) $e[$i]); - $r = self::ge_madd($r, $h, $t); - $h = self::ge_p1p1_to_p3($r); - } - return $h; - } - - /** - * Calculates (ab + c) mod l - * where l = 2^252 + 27742317777372353535851937790883648493 - * - * @internal You should not use this directly from another application - * - * @param string $a - * @param string $b - * @param string $c - * @return string - * @throws TypeError - */ - public static function sc_muladd($a, $b, $c) - { - /** @var int $a0 */ - $a0 = 2097151 & self::load_3(self::substr($a, 0, 3)); - /** @var int $a1 */ - $a1 = 2097151 & (self::load_4(self::substr($a, 2, 4)) >> 5); - /** @var int $a2 */ - $a2 = 2097151 & (self::load_3(self::substr($a, 5, 3)) >> 2); - /** @var int $a3 */ - $a3 = 2097151 & (self::load_4(self::substr($a, 7, 4)) >> 7); - /** @var int $a4 */ - $a4 = 2097151 & (self::load_4(self::substr($a, 10, 4)) >> 4); - /** @var int $a5 */ - $a5 = 2097151 & (self::load_3(self::substr($a, 13, 3)) >> 1); - /** @var int $a6 */ - $a6 = 2097151 & (self::load_4(self::substr($a, 15, 4)) >> 6); - /** @var int $a7 */ - $a7 = 2097151 & (self::load_3(self::substr($a, 18, 3)) >> 3); - /** @var int $a8 */ - $a8 = 2097151 & self::load_3(self::substr($a, 21, 3)); - /** @var int $a9 */ - $a9 = 2097151 & (self::load_4(self::substr($a, 23, 4)) >> 5); - /** @var int $a10 */ - $a10 = 2097151 & (self::load_3(self::substr($a, 26, 3)) >> 2); - /** @var int $a11 */ - $a11 = (self::load_4(self::substr($a, 28, 4)) >> 7); - - /** @var int $b0 */ - $b0 = 2097151 & self::load_3(self::substr($b, 0, 3)); - /** @var int $b1 */ - $b1 = 2097151 & (self::load_4(self::substr($b, 2, 4)) >> 5); - /** @var int $b2 */ - $b2 = 2097151 & (self::load_3(self::substr($b, 5, 3)) >> 2); - /** @var int $b3 */ - $b3 = 2097151 & (self::load_4(self::substr($b, 7, 4)) >> 7); - /** @var int $b4 */ - $b4 = 2097151 & (self::load_4(self::substr($b, 10, 4)) >> 4); - /** @var int $b5 */ - $b5 = 2097151 & (self::load_3(self::substr($b, 13, 3)) >> 1); - /** @var int $b6 */ - $b6 = 2097151 & (self::load_4(self::substr($b, 15, 4)) >> 6); - /** @var int $b7 */ - $b7 = 2097151 & (self::load_3(self::substr($b, 18, 3)) >> 3); - /** @var int $b8 */ - $b8 = 2097151 & self::load_3(self::substr($b, 21, 3)); - /** @var int $b9 */ - $b9 = 2097151 & (self::load_4(self::substr($b, 23, 4)) >> 5); - /** @var int $b10 */ - $b10 = 2097151 & (self::load_3(self::substr($b, 26, 3)) >> 2); - /** @var int $b11 */ - $b11 = (self::load_4(self::substr($b, 28, 4)) >> 7); - - /** @var int $c0 */ - $c0 = 2097151 & self::load_3(self::substr($c, 0, 3)); - /** @var int $c1 */ - $c1 = 2097151 & (self::load_4(self::substr($c, 2, 4)) >> 5); - /** @var int $c2 */ - $c2 = 2097151 & (self::load_3(self::substr($c, 5, 3)) >> 2); - /** @var int $c3 */ - $c3 = 2097151 & (self::load_4(self::substr($c, 7, 4)) >> 7); - /** @var int $c4 */ - $c4 = 2097151 & (self::load_4(self::substr($c, 10, 4)) >> 4); - /** @var int $c5 */ - $c5 = 2097151 & (self::load_3(self::substr($c, 13, 3)) >> 1); - /** @var int $c6 */ - $c6 = 2097151 & (self::load_4(self::substr($c, 15, 4)) >> 6); - /** @var int $c7 */ - $c7 = 2097151 & (self::load_3(self::substr($c, 18, 3)) >> 3); - /** @var int $c8 */ - $c8 = 2097151 & self::load_3(self::substr($c, 21, 3)); - /** @var int $c9 */ - $c9 = 2097151 & (self::load_4(self::substr($c, 23, 4)) >> 5); - /** @var int $c10 */ - $c10 = 2097151 & (self::load_3(self::substr($c, 26, 3)) >> 2); - /** @var int $c11 */ - $c11 = (self::load_4(self::substr($c, 28, 4)) >> 7); - - /* Can't really avoid the pyramid here: */ - $s0 = $c0 + self::mul($a0, $b0, 24); - $s1 = $c1 + self::mul($a0, $b1, 24) + self::mul($a1, $b0, 24); - $s2 = $c2 + self::mul($a0, $b2, 24) + self::mul($a1, $b1, 24) + self::mul($a2, $b0, 24); - $s3 = $c3 + self::mul($a0, $b3, 24) + self::mul($a1, $b2, 24) + self::mul($a2, $b1, 24) + self::mul($a3, $b0, 24); - $s4 = $c4 + self::mul($a0, $b4, 24) + self::mul($a1, $b3, 24) + self::mul($a2, $b2, 24) + self::mul($a3, $b1, 24) + self::mul($a4, $b0, 24); - $s5 = $c5 + self::mul($a0, $b5, 24) + self::mul($a1, $b4, 24) + self::mul($a2, $b3, 24) + self::mul($a3, $b2, 24) + self::mul($a4, $b1, 24) + self::mul($a5, $b0, 24); - $s6 = $c6 + self::mul($a0, $b6, 24) + self::mul($a1, $b5, 24) + self::mul($a2, $b4, 24) + self::mul($a3, $b3, 24) + self::mul($a4, $b2, 24) + self::mul($a5, $b1, 24) + self::mul($a6, $b0, 24); - $s7 = $c7 + self::mul($a0, $b7, 24) + self::mul($a1, $b6, 24) + self::mul($a2, $b5, 24) + self::mul($a3, $b4, 24) + self::mul($a4, $b3, 24) + self::mul($a5, $b2, 24) + self::mul($a6, $b1, 24) + self::mul($a7, $b0, 24); - $s8 = $c8 + self::mul($a0, $b8, 24) + self::mul($a1, $b7, 24) + self::mul($a2, $b6, 24) + self::mul($a3, $b5, 24) + self::mul($a4, $b4, 24) + self::mul($a5, $b3, 24) + self::mul($a6, $b2, 24) + self::mul($a7, $b1, 24) + self::mul($a8, $b0, 24); - $s9 = $c9 + self::mul($a0, $b9, 24) + self::mul($a1, $b8, 24) + self::mul($a2, $b7, 24) + self::mul($a3, $b6, 24) + self::mul($a4, $b5, 24) + self::mul($a5, $b4, 24) + self::mul($a6, $b3, 24) + self::mul($a7, $b2, 24) + self::mul($a8, $b1, 24) + self::mul($a9, $b0, 24); - $s10 = $c10 + self::mul($a0, $b10, 24) + self::mul($a1, $b9, 24) + self::mul($a2, $b8, 24) + self::mul($a3, $b7, 24) + self::mul($a4, $b6, 24) + self::mul($a5, $b5, 24) + self::mul($a6, $b4, 24) + self::mul($a7, $b3, 24) + self::mul($a8, $b2, 24) + self::mul($a9, $b1, 24) + self::mul($a10, $b0, 24); - $s11 = $c11 + self::mul($a0, $b11, 24) + self::mul($a1, $b10, 24) + self::mul($a2, $b9, 24) + self::mul($a3, $b8, 24) + self::mul($a4, $b7, 24) + self::mul($a5, $b6, 24) + self::mul($a6, $b5, 24) + self::mul($a7, $b4, 24) + self::mul($a8, $b3, 24) + self::mul($a9, $b2, 24) + self::mul($a10, $b1, 24) + self::mul($a11, $b0, 24); - $s12 = self::mul($a1, $b11, 24) + self::mul($a2, $b10, 24) + self::mul($a3, $b9, 24) + self::mul($a4, $b8, 24) + self::mul($a5, $b7, 24) + self::mul($a6, $b6, 24) + self::mul($a7, $b5, 24) + self::mul($a8, $b4, 24) + self::mul($a9, $b3, 24) + self::mul($a10, $b2, 24) + self::mul($a11, $b1, 24); - $s13 = self::mul($a2, $b11, 24) + self::mul($a3, $b10, 24) + self::mul($a4, $b9, 24) + self::mul($a5, $b8, 24) + self::mul($a6, $b7, 24) + self::mul($a7, $b6, 24) + self::mul($a8, $b5, 24) + self::mul($a9, $b4, 24) + self::mul($a10, $b3, 24) + self::mul($a11, $b2, 24); - $s14 = self::mul($a3, $b11, 24) + self::mul($a4, $b10, 24) + self::mul($a5, $b9, 24) + self::mul($a6, $b8, 24) + self::mul($a7, $b7, 24) + self::mul($a8, $b6, 24) + self::mul($a9, $b5, 24) + self::mul($a10, $b4, 24) + self::mul($a11, $b3, 24); - $s15 = self::mul($a4, $b11, 24) + self::mul($a5, $b10, 24) + self::mul($a6, $b9, 24) + self::mul($a7, $b8, 24) + self::mul($a8, $b7, 24) + self::mul($a9, $b6, 24) + self::mul($a10, $b5, 24) + self::mul($a11, $b4, 24); - $s16 = self::mul($a5, $b11, 24) + self::mul($a6, $b10, 24) + self::mul($a7, $b9, 24) + self::mul($a8, $b8, 24) + self::mul($a9, $b7, 24) + self::mul($a10, $b6, 24) + self::mul($a11, $b5, 24); - $s17 = self::mul($a6, $b11, 24) + self::mul($a7, $b10, 24) + self::mul($a8, $b9, 24) + self::mul($a9, $b8, 24) + self::mul($a10, $b7, 24) + self::mul($a11, $b6, 24); - $s18 = self::mul($a7, $b11, 24) + self::mul($a8, $b10, 24) + self::mul($a9, $b9, 24) + self::mul($a10, $b8, 24) + self::mul($a11, $b7, 24); - $s19 = self::mul($a8, $b11, 24) + self::mul($a9, $b10, 24) + self::mul($a10, $b9, 24) + self::mul($a11, $b8, 24); - $s20 = self::mul($a9, $b11, 24) + self::mul($a10, $b10, 24) + self::mul($a11, $b9, 24); - $s21 = self::mul($a10, $b11, 24) + self::mul($a11, $b10, 24); - $s22 = self::mul($a11, $b11, 24); - $s23 = 0; - - /** @var int $carry0 */ - $carry0 = ($s0 + (1 << 20)) >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - /** @var int $carry2 */ - $carry2 = ($s2 + (1 << 20)) >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - /** @var int $carry4 */ - $carry4 = ($s4 + (1 << 20)) >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - /** @var int $carry6 */ - $carry6 = ($s6 + (1 << 20)) >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - /** @var int $carry8 */ - $carry8 = ($s8 + (1 << 20)) >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - /** @var int $carry10 */ - $carry10 = ($s10 + (1 << 20)) >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - /** @var int $carry12 */ - $carry12 = ($s12 + (1 << 20)) >> 21; - $s13 += $carry12; - $s12 -= $carry12 << 21; - /** @var int $carry14 */ - $carry14 = ($s14 + (1 << 20)) >> 21; - $s15 += $carry14; - $s14 -= $carry14 << 21; - /** @var int $carry16 */ - $carry16 = ($s16 + (1 << 20)) >> 21; - $s17 += $carry16; - $s16 -= $carry16 << 21; - /** @var int $carry18 */ - $carry18 = ($s18 + (1 << 20)) >> 21; - $s19 += $carry18; - $s18 -= $carry18 << 21; - /** @var int $carry20 */ - $carry20 = ($s20 + (1 << 20)) >> 21; - $s21 += $carry20; - $s20 -= $carry20 << 21; - /** @var int $carry22 */ - $carry22 = ($s22 + (1 << 20)) >> 21; - $s23 += $carry22; - $s22 -= $carry22 << 21; - - /** @var int $carry1 */ - $carry1 = ($s1 + (1 << 20)) >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - /** @var int $carry3 */ - $carry3 = ($s3 + (1 << 20)) >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - /** @var int $carry5 */ - $carry5 = ($s5 + (1 << 20)) >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - /** @var int $carry7 */ - $carry7 = ($s7 + (1 << 20)) >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - /** @var int $carry9 */ - $carry9 = ($s9 + (1 << 20)) >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - /** @var int $carry11 */ - $carry11 = ($s11 + (1 << 20)) >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - /** @var int $carry13 */ - $carry13 = ($s13 + (1 << 20)) >> 21; - $s14 += $carry13; - $s13 -= $carry13 << 21; - /** @var int $carry15 */ - $carry15 = ($s15 + (1 << 20)) >> 21; - $s16 += $carry15; - $s15 -= $carry15 << 21; - /** @var int $carry17 */ - $carry17 = ($s17 + (1 << 20)) >> 21; - $s18 += $carry17; - $s17 -= $carry17 << 21; - /** @var int $carry19 */ - $carry19 = ($s19 + (1 << 20)) >> 21; - $s20 += $carry19; - $s19 -= $carry19 << 21; - /** @var int $carry21 */ - $carry21 = ($s21 + (1 << 20)) >> 21; - $s22 += $carry21; - $s21 -= $carry21 << 21; - - $s11 += self::mul($s23, 666643, 20); - $s12 += self::mul($s23, 470296, 19); - $s13 += self::mul($s23, 654183, 20); - $s14 -= self::mul($s23, 997805, 20); - $s15 += self::mul($s23, 136657, 18); - $s16 -= self::mul($s23, 683901, 20); - - $s10 += self::mul($s22, 666643, 20); - $s11 += self::mul($s22, 470296, 19); - $s12 += self::mul($s22, 654183, 20); - $s13 -= self::mul($s22, 997805, 20); - $s14 += self::mul($s22, 136657, 18); - $s15 -= self::mul($s22, 683901, 20); - - $s9 += self::mul($s21, 666643, 20); - $s10 += self::mul($s21, 470296, 19); - $s11 += self::mul($s21, 654183, 20); - $s12 -= self::mul($s21, 997805, 20); - $s13 += self::mul($s21, 136657, 18); - $s14 -= self::mul($s21, 683901, 20); - - $s8 += self::mul($s20, 666643, 20); - $s9 += self::mul($s20, 470296, 19); - $s10 += self::mul($s20, 654183, 20); - $s11 -= self::mul($s20, 997805, 20); - $s12 += self::mul($s20, 136657, 18); - $s13 -= self::mul($s20, 683901, 20); - - $s7 += self::mul($s19, 666643, 20); - $s8 += self::mul($s19, 470296, 19); - $s9 += self::mul($s19, 654183, 20); - $s10 -= self::mul($s19, 997805, 20); - $s11 += self::mul($s19, 136657, 18); - $s12 -= self::mul($s19, 683901, 20); - - $s6 += self::mul($s18, 666643, 20); - $s7 += self::mul($s18, 470296, 19); - $s8 += self::mul($s18, 654183, 20); - $s9 -= self::mul($s18, 997805, 20); - $s10 += self::mul($s18, 136657, 18); - $s11 -= self::mul($s18, 683901, 20); - - /** @var int $carry6 */ - $carry6 = ($s6 + (1 << 20)) >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - /** @var int $carry8 */ - $carry8 = ($s8 + (1 << 20)) >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - /** @var int $carry10 */ - $carry10 = ($s10 + (1 << 20)) >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - /** @var int $carry12 */ - $carry12 = ($s12 + (1 << 20)) >> 21; - $s13 += $carry12; - $s12 -= $carry12 << 21; - /** @var int $carry14 */ - $carry14 = ($s14 + (1 << 20)) >> 21; - $s15 += $carry14; - $s14 -= $carry14 << 21; - /** @var int $carry16 */ - $carry16 = ($s16 + (1 << 20)) >> 21; - $s17 += $carry16; - $s16 -= $carry16 << 21; - - /** @var int $carry7 */ - $carry7 = ($s7 + (1 << 20)) >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - /** @var int $carry9 */ - $carry9 = ($s9 + (1 << 20)) >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - /** @var int $carry11 */ - $carry11 = ($s11 + (1 << 20)) >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - /** @var int $carry13 */ - $carry13 = ($s13 + (1 << 20)) >> 21; - $s14 += $carry13; - $s13 -= $carry13 << 21; - /** @var int $carry15 */ - $carry15 = ($s15 + (1 << 20)) >> 21; - $s16 += $carry15; - $s15 -= $carry15 << 21; - - $s5 += self::mul($s17, 666643, 20); - $s6 += self::mul($s17, 470296, 19); - $s7 += self::mul($s17, 654183, 20); - $s8 -= self::mul($s17, 997805, 20); - $s9 += self::mul($s17, 136657, 18); - $s10 -= self::mul($s17, 683901, 20); - - $s4 += self::mul($s16, 666643, 20); - $s5 += self::mul($s16, 470296, 19); - $s6 += self::mul($s16, 654183, 20); - $s7 -= self::mul($s16, 997805, 20); - $s8 += self::mul($s16, 136657, 18); - $s9 -= self::mul($s16, 683901, 20); - - $s3 += self::mul($s15, 666643, 20); - $s4 += self::mul($s15, 470296, 19); - $s5 += self::mul($s15, 654183, 20); - $s6 -= self::mul($s15, 997805, 20); - $s7 += self::mul($s15, 136657, 18); - $s8 -= self::mul($s15, 683901, 20); - - $s2 += self::mul($s14, 666643, 20); - $s3 += self::mul($s14, 470296, 19); - $s4 += self::mul($s14, 654183, 20); - $s5 -= self::mul($s14, 997805, 20); - $s6 += self::mul($s14, 136657, 18); - $s7 -= self::mul($s14, 683901, 20); - - $s1 += self::mul($s13, 666643, 20); - $s2 += self::mul($s13, 470296, 19); - $s3 += self::mul($s13, 654183, 20); - $s4 -= self::mul($s13, 997805, 20); - $s5 += self::mul($s13, 136657, 18); - $s6 -= self::mul($s13, 683901, 20); - - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - $s12 = 0; - - /** @var int $carry0 */ - $carry0 = ($s0 + (1 << 20)) >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - /** @var int $carry2 */ - $carry2 = ($s2 + (1 << 20)) >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - /** @var int $carry4 */ - $carry4 = ($s4 + (1 << 20)) >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - /** @var int $carry6 */ - $carry6 = ($s6 + (1 << 20)) >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - /** @var int $carry8 */ - $carry8 = ($s8 + (1 << 20)) >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - /** @var int $carry10 */ - $carry10 = ($s10 + (1 << 20)) >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - - /** @var int $carry1 */ - $carry1 = ($s1 + (1 << 20)) >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - /** @var int $carry3 */ - $carry3 = ($s3 + (1 << 20)) >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - /** @var int $carry5 */ - $carry5 = ($s5 + (1 << 20)) >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - /** @var int $carry7 */ - $carry7 = ($s7 + (1 << 20)) >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - /** @var int $carry9 */ - $carry9 = ($s9 + (1 << 20)) >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - /** @var int $carry11 */ - $carry11 = ($s11 + (1 << 20)) >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - $s12 = 0; - - /** @var int $carry0 */ - $carry0 = $s0 >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - /** @var int $carry1 */ - $carry1 = $s1 >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - /** @var int $carry2 */ - $carry2 = $s2 >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - /** @var int $carry3 */ - $carry3 = $s3 >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - /** @var int $carry4 */ - $carry4 = $s4 >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - /** @var int $carry5 */ - $carry5 = $s5 >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - /** @var int $carry6 */ - $carry6 = $s6 >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - /** @var int $carry7 */ - $carry7 = $s7 >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - /** @var int $carry8 */ - $carry8 = $s8 >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - /** @var int $carry9 */ - $carry9 = $s9 >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - /** @var int $carry10 */ - $carry10 = $s10 >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - /** @var int $carry11 */ - $carry11 = $s11 >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - - /** @var int $carry0 */ - $carry0 = $s0 >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - /** @var int $carry1 */ - $carry1 = $s1 >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - /** @var int $carry2 */ - $carry2 = $s2 >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - /** @var int $carry3 */ - $carry3 = $s3 >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - /** @var int $carry4 */ - $carry4 = $s4 >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - /** @var int $carry5 */ - $carry5 = $s5 >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - /** @var int $carry6 */ - $carry6 = $s6 >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - /** @var int $carry7 */ - $carry7 = $s7 >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - /** @var int $carry8 */ - $carry8 = $s8 >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - /** @var int $carry9 */ - $carry9 = $s9 >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - /** @var int $carry10 */ - $carry10 = $s10 >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - - /** - * @var array - */ - $arr = array( - (int) (0xff & ($s0 >> 0)), - (int) (0xff & ($s0 >> 8)), - (int) (0xff & (($s0 >> 16) | $s1 << 5)), - (int) (0xff & ($s1 >> 3)), - (int) (0xff & ($s1 >> 11)), - (int) (0xff & (($s1 >> 19) | $s2 << 2)), - (int) (0xff & ($s2 >> 6)), - (int) (0xff & (($s2 >> 14) | $s3 << 7)), - (int) (0xff & ($s3 >> 1)), - (int) (0xff & ($s3 >> 9)), - (int) (0xff & (($s3 >> 17) | $s4 << 4)), - (int) (0xff & ($s4 >> 4)), - (int) (0xff & ($s4 >> 12)), - (int) (0xff & (($s4 >> 20) | $s5 << 1)), - (int) (0xff & ($s5 >> 7)), - (int) (0xff & (($s5 >> 15) | $s6 << 6)), - (int) (0xff & ($s6 >> 2)), - (int) (0xff & ($s6 >> 10)), - (int) (0xff & (($s6 >> 18) | $s7 << 3)), - (int) (0xff & ($s7 >> 5)), - (int) (0xff & ($s7 >> 13)), - (int) (0xff & ($s8 >> 0)), - (int) (0xff & ($s8 >> 8)), - (int) (0xff & (($s8 >> 16) | $s9 << 5)), - (int) (0xff & ($s9 >> 3)), - (int) (0xff & ($s9 >> 11)), - (int) (0xff & (($s9 >> 19) | $s10 << 2)), - (int) (0xff & ($s10 >> 6)), - (int) (0xff & (($s10 >> 14) | $s11 << 7)), - (int) (0xff & ($s11 >> 1)), - (int) (0xff & ($s11 >> 9)), - 0xff & ($s11 >> 17) - ); - return self::intArrayToString($arr); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $s - * @return string - * @throws TypeError - */ - public static function sc_reduce($s) - { - /** @var int $s0 */ - $s0 = 2097151 & self::load_3(self::substr($s, 0, 3)); - /** @var int $s1 */ - $s1 = 2097151 & (self::load_4(self::substr($s, 2, 4)) >> 5); - /** @var int $s2 */ - $s2 = 2097151 & (self::load_3(self::substr($s, 5, 3)) >> 2); - /** @var int $s3 */ - $s3 = 2097151 & (self::load_4(self::substr($s, 7, 4)) >> 7); - /** @var int $s4 */ - $s4 = 2097151 & (self::load_4(self::substr($s, 10, 4)) >> 4); - /** @var int $s5 */ - $s5 = 2097151 & (self::load_3(self::substr($s, 13, 3)) >> 1); - /** @var int $s6 */ - $s6 = 2097151 & (self::load_4(self::substr($s, 15, 4)) >> 6); - /** @var int $s7 */ - $s7 = 2097151 & (self::load_3(self::substr($s, 18, 4)) >> 3); - /** @var int $s8 */ - $s8 = 2097151 & self::load_3(self::substr($s, 21, 3)); - /** @var int $s9 */ - $s9 = 2097151 & (self::load_4(self::substr($s, 23, 4)) >> 5); - /** @var int $s10 */ - $s10 = 2097151 & (self::load_3(self::substr($s, 26, 3)) >> 2); - /** @var int $s11 */ - $s11 = 2097151 & (self::load_4(self::substr($s, 28, 4)) >> 7); - /** @var int $s12 */ - $s12 = 2097151 & (self::load_4(self::substr($s, 31, 4)) >> 4); - /** @var int $s13 */ - $s13 = 2097151 & (self::load_3(self::substr($s, 34, 3)) >> 1); - /** @var int $s14 */ - $s14 = 2097151 & (self::load_4(self::substr($s, 36, 4)) >> 6); - /** @var int $s15 */ - $s15 = 2097151 & (self::load_3(self::substr($s, 39, 4)) >> 3); - /** @var int $s16 */ - $s16 = 2097151 & self::load_3(self::substr($s, 42, 3)); - /** @var int $s17 */ - $s17 = 2097151 & (self::load_4(self::substr($s, 44, 4)) >> 5); - /** @var int $s18 */ - $s18 = 2097151 & (self::load_3(self::substr($s, 47, 3)) >> 2); - /** @var int $s19 */ - $s19 = 2097151 & (self::load_4(self::substr($s, 49, 4)) >> 7); - /** @var int $s20 */ - $s20 = 2097151 & (self::load_4(self::substr($s, 52, 4)) >> 4); - /** @var int $s21 */ - $s21 = 2097151 & (self::load_3(self::substr($s, 55, 3)) >> 1); - /** @var int $s22 */ - $s22 = 2097151 & (self::load_4(self::substr($s, 57, 4)) >> 6); - /** @var int $s23 */ - $s23 = (self::load_4(self::substr($s, 60, 4)) >> 3); - - $s11 += self::mul($s23, 666643, 20); - $s12 += self::mul($s23, 470296, 19); - $s13 += self::mul($s23, 654183, 20); - $s14 -= self::mul($s23, 997805, 20); - $s15 += self::mul($s23, 136657, 18); - $s16 -= self::mul($s23, 683901, 20); - - $s10 += self::mul($s22, 666643, 20); - $s11 += self::mul($s22, 470296, 19); - $s12 += self::mul($s22, 654183, 20); - $s13 -= self::mul($s22, 997805, 20); - $s14 += self::mul($s22, 136657, 18); - $s15 -= self::mul($s22, 683901, 20); - - $s9 += self::mul($s21, 666643, 20); - $s10 += self::mul($s21, 470296, 19); - $s11 += self::mul($s21, 654183, 20); - $s12 -= self::mul($s21, 997805, 20); - $s13 += self::mul($s21, 136657, 18); - $s14 -= self::mul($s21, 683901, 20); - - $s8 += self::mul($s20, 666643, 20); - $s9 += self::mul($s20, 470296, 19); - $s10 += self::mul($s20, 654183, 20); - $s11 -= self::mul($s20, 997805, 20); - $s12 += self::mul($s20, 136657, 18); - $s13 -= self::mul($s20, 683901, 20); - - $s7 += self::mul($s19, 666643, 20); - $s8 += self::mul($s19, 470296, 19); - $s9 += self::mul($s19, 654183, 20); - $s10 -= self::mul($s19, 997805, 20); - $s11 += self::mul($s19, 136657, 18); - $s12 -= self::mul($s19, 683901, 20); - - $s6 += self::mul($s18, 666643, 20); - $s7 += self::mul($s18, 470296, 19); - $s8 += self::mul($s18, 654183, 20); - $s9 -= self::mul($s18, 997805, 20); - $s10 += self::mul($s18, 136657, 18); - $s11 -= self::mul($s18, 683901, 20); - - /** @var int $carry6 */ - $carry6 = ($s6 + (1 << 20)) >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - /** @var int $carry8 */ - $carry8 = ($s8 + (1 << 20)) >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - /** @var int $carry10 */ - $carry10 = ($s10 + (1 << 20)) >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - /** @var int $carry12 */ - $carry12 = ($s12 + (1 << 20)) >> 21; - $s13 += $carry12; - $s12 -= $carry12 << 21; - /** @var int $carry14 */ - $carry14 = ($s14 + (1 << 20)) >> 21; - $s15 += $carry14; - $s14 -= $carry14 << 21; - /** @var int $carry16 */ - $carry16 = ($s16 + (1 << 20)) >> 21; - $s17 += $carry16; - $s16 -= $carry16 << 21; - - /** @var int $carry7 */ - $carry7 = ($s7 + (1 << 20)) >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - /** @var int $carry9 */ - $carry9 = ($s9 + (1 << 20)) >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - /** @var int $carry11 */ - $carry11 = ($s11 + (1 << 20)) >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - /** @var int $carry13 */ - $carry13 = ($s13 + (1 << 20)) >> 21; - $s14 += $carry13; - $s13 -= $carry13 << 21; - /** @var int $carry15 */ - $carry15 = ($s15 + (1 << 20)) >> 21; - $s16 += $carry15; - $s15 -= $carry15 << 21; - - $s5 += self::mul($s17, 666643, 20); - $s6 += self::mul($s17, 470296, 19); - $s7 += self::mul($s17, 654183, 20); - $s8 -= self::mul($s17, 997805, 20); - $s9 += self::mul($s17, 136657, 18); - $s10 -= self::mul($s17, 683901, 20); - - $s4 += self::mul($s16, 666643, 20); - $s5 += self::mul($s16, 470296, 19); - $s6 += self::mul($s16, 654183, 20); - $s7 -= self::mul($s16, 997805, 20); - $s8 += self::mul($s16, 136657, 18); - $s9 -= self::mul($s16, 683901, 20); - - $s3 += self::mul($s15, 666643, 20); - $s4 += self::mul($s15, 470296, 19); - $s5 += self::mul($s15, 654183, 20); - $s6 -= self::mul($s15, 997805, 20); - $s7 += self::mul($s15, 136657, 18); - $s8 -= self::mul($s15, 683901, 20); - - $s2 += self::mul($s14, 666643, 20); - $s3 += self::mul($s14, 470296, 19); - $s4 += self::mul($s14, 654183, 20); - $s5 -= self::mul($s14, 997805, 20); - $s6 += self::mul($s14, 136657, 18); - $s7 -= self::mul($s14, 683901, 20); - - $s1 += self::mul($s13, 666643, 20); - $s2 += self::mul($s13, 470296, 19); - $s3 += self::mul($s13, 654183, 20); - $s4 -= self::mul($s13, 997805, 20); - $s5 += self::mul($s13, 136657, 18); - $s6 -= self::mul($s13, 683901, 20); - - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - $s12 = 0; - - /** @var int $carry0 */ - $carry0 = ($s0 + (1 << 20)) >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - /** @var int $carry2 */ - $carry2 = ($s2 + (1 << 20)) >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - /** @var int $carry4 */ - $carry4 = ($s4 + (1 << 20)) >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - /** @var int $carry6 */ - $carry6 = ($s6 + (1 << 20)) >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - /** @var int $carry8 */ - $carry8 = ($s8 + (1 << 20)) >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - /** @var int $carry10 */ - $carry10 = ($s10 + (1 << 20)) >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - - /** @var int $carry1 */ - $carry1 = ($s1 + (1 << 20)) >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - /** @var int $carry3 */ - $carry3 = ($s3 + (1 << 20)) >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - /** @var int $carry5 */ - $carry5 = ($s5 + (1 << 20)) >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - /** @var int $carry7 */ - $carry7 = ($s7 + (1 << 20)) >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - /** @var int $carry9 */ - $carry9 = ($s9 + (1 << 20)) >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - /** @var int $carry11 */ - $carry11 = ($s11 + (1 << 20)) >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - $s12 = 0; - - /** @var int $carry0 */ - $carry0 = $s0 >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - /** @var int $carry1 */ - $carry1 = $s1 >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - /** @var int $carry2 */ - $carry2 = $s2 >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - /** @var int $carry3 */ - $carry3 = $s3 >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - /** @var int $carry4 */ - $carry4 = $s4 >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - /** @var int $carry5 */ - $carry5 = $s5 >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - /** @var int $carry6 */ - $carry6 = $s6 >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - /** @var int $carry7 */ - $carry7 = $s7 >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - /** @var int $carry8 */ - $carry8 = $s8 >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - /** @var int $carry9 */ - $carry9 = $s9 >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - /** @var int $carry10 */ - $carry10 = $s10 >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - /** @var int $carry11 */ - $carry11 = $s11 >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - - /** @var int $carry0 */ - $carry0 = $s0 >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - /** @var int $carry1 */ - $carry1 = $s1 >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - /** @var int $carry2 */ - $carry2 = $s2 >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - /** @var int $carry3 */ - $carry3 = $s3 >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - /** @var int $carry4 */ - $carry4 = $s4 >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - /** @var int $carry5 */ - $carry5 = $s5 >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - /** @var int $carry6 */ - $carry6 = $s6 >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - /** @var int $carry7 */ - $carry7 = $s7 >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - /** @var int $carry8 */ - $carry8 = $s8 >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - /** @var int $carry9 */ - $carry9 = $s9 >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - /** @var int $carry10 */ - $carry10 = $s10 >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - - /** - * @var array - */ - $arr = array( - (int) ($s0 >> 0), - (int) ($s0 >> 8), - (int) (($s0 >> 16) | $s1 << 5), - (int) ($s1 >> 3), - (int) ($s1 >> 11), - (int) (($s1 >> 19) | $s2 << 2), - (int) ($s2 >> 6), - (int) (($s2 >> 14) | $s3 << 7), - (int) ($s3 >> 1), - (int) ($s3 >> 9), - (int) (($s3 >> 17) | $s4 << 4), - (int) ($s4 >> 4), - (int) ($s4 >> 12), - (int) (($s4 >> 20) | $s5 << 1), - (int) ($s5 >> 7), - (int) (($s5 >> 15) | $s6 << 6), - (int) ($s6 >> 2), - (int) ($s6 >> 10), - (int) (($s6 >> 18) | $s7 << 3), - (int) ($s7 >> 5), - (int) ($s7 >> 13), - (int) ($s8 >> 0), - (int) ($s8 >> 8), - (int) (($s8 >> 16) | $s9 << 5), - (int) ($s9 >> 3), - (int) ($s9 >> 11), - (int) (($s9 >> 19) | $s10 << 2), - (int) ($s10 >> 6), - (int) (($s10 >> 14) | $s11 << 7), - (int) ($s11 >> 1), - (int) ($s11 >> 9), - (int) $s11 >> 17 - ); - return self::intArrayToString($arr); - } - - /** - * multiply by the order of the main subgroup l = 2^252+27742317777372353535851937790883648493 - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 - */ - public static function ge_mul_l(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A) - { - /** @var array $aslide */ - $aslide = array( - 13, 0, 0, 0, 0, -1, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0, - 0, 0, 0, -3, 0, 0, 0, 0, -13, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 3, 0, - 0, 0, 0, -13, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, - 0, 0, 11, 0, 0, 0, 0, -13, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, -1, - 0, 0, 0, 0, 3, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 5, 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, 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, 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, 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, 1 - ); - - /** @var array $Ai size 8 */ - $Ai = array(); - - # ge_p3_to_cached(&Ai[0], A); - $Ai[0] = self::ge_p3_to_cached($A); - # ge_p3_dbl(&t, A); - $t = self::ge_p3_dbl($A); - # ge_p1p1_to_p3(&A2, &t); - $A2 = self::ge_p1p1_to_p3($t); - - for ($i = 1; $i < 8; ++$i) { - # ge_add(&t, &A2, &Ai[0]); - $t = self::ge_add($A2, $Ai[$i - 1]); - # ge_p1p1_to_p3(&u, &t); - $u = self::ge_p1p1_to_p3($t); - # ge_p3_to_cached(&Ai[i], &u); - $Ai[$i] = self::ge_p3_to_cached($u); - } - - $r = self::ge_p3_0(); - for ($i = 252; $i >= 0; --$i) { - $t = self::ge_p3_dbl($r); - if ($aslide[$i] > 0) { - # ge_p1p1_to_p3(&u, &t); - $u = self::ge_p1p1_to_p3($t); - # ge_add(&t, &u, &Ai[aslide[i] / 2]); - $t = self::ge_add($u, $Ai[(int)($aslide[$i] / 2)]); - } elseif ($aslide[$i] < 0) { - # ge_p1p1_to_p3(&u, &t); - $u = self::ge_p1p1_to_p3($t); - # ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]); - $t = self::ge_sub($u, $Ai[(int)(-$aslide[$i] / 2)]); - } - } - - # ge_p1p1_to_p3(r, &t); - return self::ge_p1p1_to_p3($t); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Fe.php b/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Fe.php deleted file mode 100644 index 5cb711844976d..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Fe.php +++ /dev/null @@ -1,130 +0,0 @@ -size = 10; - } - - /** - * @internal You should not use this directly from another application - * - * @param array $array - * @param bool $save_indexes - * @return self - */ - public static function fromArray($array, $save_indexes = null) - { - $count = count($array); - if ($save_indexes) { - $keys = array_keys($array); - } else { - $keys = range(0, $count - 1); - } - $array = array_values($array); - - $obj = new ParagonIE_Sodium_Core_Curve25519_Fe($count); - if ($save_indexes) { - for ($i = 0; $i < $count; ++$i) { - $obj->offsetSet($keys[$i], $array[$i]); - } - } else { - for ($i = 0; $i < $count; ++$i) { - $obj->offsetSet($i, $array[$i]); - } - } - return $obj; - } - - /** - * @internal You should not use this directly from another application - * - * @param mixed $offset - * @param mixed $value - * @return void - * @psalm-suppress MixedArrayOffset - */ - public function offsetSet($offset, $value) - { - if (!is_int($value)) { - throw new InvalidArgumentException('Expected an integer'); - } - if (is_null($offset)) { - $this->container[] = $value; - } else { - $this->container[$offset] = $value; - } - } - - /** - * @internal You should not use this directly from another application - * - * @param mixed $offset - * @return bool - * @psalm-suppress MixedArrayOffset - */ - public function offsetExists($offset) - { - return isset($this->container[$offset]); - } - - /** - * @internal You should not use this directly from another application - * - * @param mixed $offset - * @return void - * @psalm-suppress MixedArrayOffset - */ - public function offsetUnset($offset) - { - unset($this->container[$offset]); - } - - /** - * @internal You should not use this directly from another application - * - * @param mixed $offset - * @return mixed|null - * @psalm-suppress MixedArrayOffset - */ - public function offsetGet($offset) - { - return isset($this->container[$offset]) - ? $this->container[$offset] - : null; - } - - /** - * @internal You should not use this directly from another application - * - * @return array - */ - public function __debugInfo() - { - return array(implode(', ', $this->container)); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Cached.php b/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Cached.php deleted file mode 100644 index 39bf8977766c9..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Cached.php +++ /dev/null @@ -1,65 +0,0 @@ -YplusX = $YplusX; - if ($YminusX === null) { - $YminusX = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->YminusX = $YminusX; - if ($Z === null) { - $Z = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->Z = $Z; - if ($T2d === null) { - $T2d = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->T2d = $T2d; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P1p1.php b/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P1p1.php deleted file mode 100644 index a63d6ab232e7c..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P1p1.php +++ /dev/null @@ -1,64 +0,0 @@ -X = $x; - if ($y === null) { - $y = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->Y = $y; - if ($z === null) { - $z = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->Z = $z; - if ($t === null) { - $t = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->T = $t; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P2.php b/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P2.php deleted file mode 100644 index aee4000d14193..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P2.php +++ /dev/null @@ -1,54 +0,0 @@ -X = $x; - if ($y === null) { - $y = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->Y = $y; - if ($z === null) { - $z = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->Z = $z; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P3.php b/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P3.php deleted file mode 100644 index 00f5b27a4b288..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/P3.php +++ /dev/null @@ -1,65 +0,0 @@ -X = $x; - if ($y === null) { - $y = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->Y = $y; - if ($z === null) { - $z = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->Z = $z; - if ($t === null) { - $t = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->T = $t; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Precomp.php b/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Precomp.php deleted file mode 100644 index 59611c103669e..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Precomp.php +++ /dev/null @@ -1,54 +0,0 @@ -yplusx = $yplusx; - if ($yminusx === null) { - $yminusx = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->yminusx = $yminusx; - if ($xy2d === null) { - $xy2d = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->xy2d = $xy2d; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/H.php b/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/H.php deleted file mode 100644 index 37ad497dc38d6..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/Curve25519/H.php +++ /dev/null @@ -1,1467 +0,0 @@ ->>> Basically, int[32][8][3][10] - */ - protected static $base = array( - array( - array( - array(25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605), - array(-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378), - array(-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546), - ), - array( - array(-12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303), - array(-21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081), - array(26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697), - ), - array( - array(15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024), - array(16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574), - array(30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357), - ), - array( - array(-17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540), - array(23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397), - array(7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325), - ), - array( - array(10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380), - array(4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306), - array(19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942), - ), - array( - array(-15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777), - array(-8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737), - array(-18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652), - ), - array( - array(5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766), - array(-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701), - array(28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300), - ), - array( - array(14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726), - array(-7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955), - array(27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425), - ), - ), - array( - array( - array(-13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171), - array(27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510), - array(17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660), - ), - array( - array(-10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639), - array(29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963), - array(5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950), - ), - array( - array(-27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568), - array(12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335), - array(25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628), - ), - array( - array(-26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007), - array(-2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772), - array(-22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653), - ), - array( - array(2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567), - array(13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686), - array(21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372), - ), - array( - array(-13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887), - array(-23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954), - array(-29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953), - ), - array( - array(24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833), - array(-16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532), - array(-22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876), - ), - array( - array(2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268), - array(33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214), - array(1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038), - ), - ), - array( - array( - array(6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800), - array(4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645), - array(-4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664), - ), - array( - array(1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933), - array(-25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182), - array(-17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222), - ), - array( - array(-18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991), - array(20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880), - array(9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092), - ), - array( - array(-16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295), - array(19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788), - array(8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553), - ), - array( - array(-15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026), - array(11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347), - array(-18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033), - ), - array( - array(-23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395), - array(-27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278), - array(1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890), - ), - array( - array(32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995), - array(-30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596), - array(-11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891), - ), - array( - array(31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060), - array(11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608), - array(-20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606), - ), - ), - array( - array( - array(7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389), - array(-19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016), - array(-11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341), - ), - array( - array(-22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505), - array(14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553), - array(-28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655), - ), - array( - array(15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220), - array(12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631), - array(-4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099), - ), - array( - array(26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556), - array(14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749), - array(236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930), - ), - array( - array(1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391), - array(5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253), - array(20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066), - ), - array( - array(24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958), - array(-11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082), - array(-28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383), - ), - array( - array(-30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521), - array(-11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807), - array(23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948), - ), - array( - array(9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134), - array(-32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455), - array(27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629), - ), - ), - array( - array( - array(-8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069), - array(-32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746), - array(24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919), - ), - array( - array(11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837), - array(8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906), - array(-28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771), - ), - array( - array(-25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817), - array(10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098), - array(10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409), - ), - array( - array(-12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504), - array(-26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727), - array(28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420), - ), - array( - array(-32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003), - array(-1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605), - array(-30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384), - ), - array( - array(-26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701), - array(-23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683), - array(29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708), - ), - array( - array(-3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563), - array(-19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260), - array(-5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387), - ), - array( - array(-19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672), - array(23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686), - array(-24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665), - ), - ), - array( - array( - array(11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182), - array(-31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277), - array(14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628), - ), - array( - array(-4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474), - array(-26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539), - array(-25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822), - ), - array( - array(-10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970), - array(19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756), - array(-24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508), - ), - array( - array(-26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683), - array(-10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655), - array(-20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158), - ), - array( - array(-4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125), - array(-15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839), - array(-20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664), - ), - array( - array(27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294), - array(-18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899), - array(-11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070), - ), - array( - array(3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294), - array(-15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949), - array(-21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083), - ), - array( - array(31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420), - array(-5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940), - array(29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396), - ), - ), - array( - array( - array(-12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567), - array(20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127), - array(-16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294), - ), - array( - array(-12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887), - array(22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964), - array(16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195), - ), - array( - array(9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244), - array(24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999), - array(-1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762), - ), - array( - array(-18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274), - array(-33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236), - array(-16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605), - ), - array( - array(-13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761), - array(-22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884), - array(-6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482), - ), - array( - array(-24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638), - array(-11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490), - array(-32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170), - ), - array( - array(5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736), - array(10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124), - array(-17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392), - ), - array( - array(8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029), - array(6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048), - array(28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958), - ), - ), - array( - array( - array(24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593), - array(26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071), - array(-11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692), - ), - array( - array(11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687), - array(-160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441), - array(-20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001), - ), - array( - array(-938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460), - array(-19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007), - array(-21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762), - ), - array( - array(15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005), - array(-9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674), - array(4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035), - ), - array( - array(7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590), - array(-2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957), - array(-30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812), - ), - array( - array(33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740), - array(-18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122), - array(-27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158), - ), - array( - array(8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885), - array(26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140), - array(19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857), - ), - array( - array(801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155), - array(19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260), - array(19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483), - ), - ), - array( - array( - array(-3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677), - array(32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815), - array(22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751), - ), - array( - array(-16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203), - array(-11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208), - array(1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230), - ), - array( - array(16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850), - array(-21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389), - array(-9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968), - ), - array( - array(-11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689), - array(14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880), - array(5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304), - ), - array( - array(30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632), - array(-3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412), - array(20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566), - ), - array( - array(-20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038), - array(-26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232), - array(-1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943), - ), - array( - array(17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856), - array(23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738), - array(15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971), - ), - array( - array(-27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718), - array(-13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697), - array(-11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883), - ), - ), - array( - array( - array(5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912), - array(-26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358), - array(3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849), - ), - array( - array(29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307), - array(-14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977), - array(-6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335), - ), - array( - array(-29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644), - array(-22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616), - array(-27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735), - ), - array( - array(-21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099), - array(29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341), - array(-936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336), - ), - array( - array(-23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646), - array(31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425), - array(-17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388), - ), - array( - array(-31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743), - array(-16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822), - array(-8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462), - ), - array( - array(18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985), - array(9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702), - array(-22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797), - ), - array( - array(21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293), - array(27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100), - array(19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688), - ), - ), - array( - array( - array(12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186), - array(2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610), - array(-2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707), - ), - array( - array(7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220), - array(915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025), - array(32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044), - ), - array( - array(32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992), - array(-4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027), - array(21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197), - ), - array( - array(8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901), - array(31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952), - array(19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878), - ), - array( - array(-28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390), - array(32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730), - array(2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730), - ), - array( - array(-19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180), - array(-30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272), - array(-15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715), - ), - array( - array(-22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970), - array(-31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772), - array(-17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865), - ), - array( - array(15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750), - array(20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373), - array(32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348), - ), - ), - array( - array( - array(9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144), - array(-22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195), - array(5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086), - ), - array( - array(-13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684), - array(-8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518), - array(-2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233), - ), - array( - array(-5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793), - array(-2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794), - array(580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435), - ), - array( - array(23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921), - array(13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518), - array(2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563), - ), - array( - array(14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278), - array(-27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024), - array(4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030), - ), - array( - array(10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783), - array(27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717), - array(6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844), - ), - array( - array(14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333), - array(16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048), - array(22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760), - ), - array( - array(-4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760), - array(-15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757), - array(-2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112), - ), - ), - array( - array( - array(-19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468), - array(3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184), - array(10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289), - ), - array( - array(15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066), - array(24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882), - array(13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226), - ), - array( - array(16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101), - array(29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279), - array(-6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811), - ), - array( - array(27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709), - array(20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714), - array(-2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121), - ), - array( - array(9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464), - array(12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847), - array(13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400), - ), - array( - array(4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414), - array(-15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158), - array(17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045), - ), - array( - array(-461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415), - array(-5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459), - array(-31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079), - ), - array( - array(21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412), - array(-20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743), - array(-14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836), - ), - ), - array( - array( - array(12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022), - array(18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429), - array(-6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065), - ), - array( - array(30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861), - array(10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000), - array(-33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101), - ), - array( - array(32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815), - array(29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642), - array(10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966), - ), - array( - array(25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574), - array(-21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742), - array(-18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689), - ), - array( - array(12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020), - array(-10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772), - array(3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982), - ), - array( - array(-14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953), - array(-16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218), - array(-17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265), - ), - array( - array(29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073), - array(-3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325), - array(-11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798), - ), - array( - array(-4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870), - array(-7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863), - array(-13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927), - ), - ), - array( - array( - array(-2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267), - array(-9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663), - array(22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862), - ), - array( - array(-25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673), - array(15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943), - array(15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020), - ), - array( - array(-4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238), - array(11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064), - array(14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795), - ), - array( - array(15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052), - array(-10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904), - array(29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531), - ), - array( - array(-13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979), - array(-5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841), - array(10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431), - ), - array( - array(10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324), - array(-31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940), - array(10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320), - ), - array( - array(-15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184), - array(14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114), - array(30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878), - ), - array( - array(12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784), - array(-2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091), - array(-16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585), - ), - ), - array( - array( - array(-8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208), - array(10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864), - array(17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661), - ), - array( - array(7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233), - array(26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212), - array(-12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525), - ), - array( - array(-24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068), - array(9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397), - array(-8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988), - ), - array( - array(5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889), - array(32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038), - array(14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697), - ), - array( - array(20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875), - array(-25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905), - array(-25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656), - ), - array( - array(11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818), - array(27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714), - array(10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203), - ), - array( - array(20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931), - array(-30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024), - array(-23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084), - ), - array( - array(-1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204), - array(20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817), - array(27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667), - ), - ), - array( - array( - array(11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504), - array(-12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768), - array(-19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255), - ), - array( - array(6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790), - array(1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438), - array(-22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333), - ), - array( - array(17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971), - array(31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905), - array(29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409), - ), - array( - array(12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409), - array(6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499), - array(-8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363), - ), - array( - array(28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664), - array(-11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324), - array(-21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940), - ), - array( - array(13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990), - array(-17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914), - array(-25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290), - ), - array( - array(24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257), - array(-6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433), - array(-16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236), - ), - array( - array(-12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045), - array(11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093), - array(-1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347), - ), - ), - array( - array( - array(-28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191), - array(-15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507), - array(-12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906), - ), - array( - array(3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018), - array(-16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109), - array(-23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926), - ), - array( - array(-24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528), - array(8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625), - array(-32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286), - ), - array( - array(2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033), - array(27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866), - array(21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896), - ), - array( - array(30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075), - array(26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347), - array(-22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437), - ), - array( - array(-5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165), - array(-18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588), - array(-32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193), - ), - array( - array(-19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017), - array(-28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883), - array(21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961), - ), - array( - array(8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043), - array(29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663), - array(-20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362), - ), - ), - array( - array( - array(-33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860), - array(2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466), - array(-24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063), - ), - array( - array(-26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997), - array(-1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295), - array(-13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369), - ), - array( - array(9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385), - array(18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109), - array(2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906), - ), - array( - array(4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424), - array(-19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185), - array(7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962), - ), - array( - array(-7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325), - array(10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593), - array(696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404), - ), - array( - array(-11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644), - array(17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801), - array(26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804), - ), - array( - array(-31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884), - array(-586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577), - array(-9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849), - ), - array( - array(32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473), - array(-8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644), - array(-2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319), - ), - ), - array( - array( - array(-11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599), - array(-9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768), - array(-27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084), - ), - array( - array(-27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328), - array(-15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369), - array(20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920), - ), - array( - array(12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815), - array(-32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025), - array(-21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397), - ), - array( - array(-20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448), - array(6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981), - array(30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165), - ), - array( - array(32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501), - array(17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073), - array(-1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861), - ), - array( - array(14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845), - array(-1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211), - array(18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870), - ), - array( - array(10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096), - array(33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803), - array(-32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168), - ), - array( - array(30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965), - array(-14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505), - array(18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598), - ), - ), - array( - array( - array(5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782), - array(5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900), - array(-31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479), - ), - array( - array(-12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208), - array(8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232), - array(17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719), - ), - array( - array(16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271), - array(-4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326), - array(-8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132), - ), - array( - array(14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300), - array(8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570), - array(15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670), - ), - array( - array(-2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994), - array(-12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913), - array(31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317), - ), - array( - array(-25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730), - array(842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096), - array(-4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078), - ), - array( - array(-15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411), - array(-19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905), - array(-9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654), - ), - array( - array(-28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870), - array(-23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498), - array(12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579), - ), - ), - array( - array( - array(14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677), - array(10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647), - array(-2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743), - ), - array( - array(-25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468), - array(21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375), - array(-25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155), - ), - array( - array(6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725), - array(-12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612), - array(-10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943), - ), - array( - array(-30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944), - array(30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928), - array(9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406), - ), - array( - array(22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139), - array(-8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963), - array(-31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693), - ), - array( - array(1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734), - array(-448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680), - array(-24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410), - ), - array( - array(-9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931), - array(-16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654), - array(22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710), - ), - array( - array(29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180), - array(-26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684), - array(-10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895), - ), - ), - array( - array( - array(22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501), - array(-11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413), - array(6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880), - ), - array( - array(-8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874), - array(22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962), - array(-7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899), - ), - array( - array(21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152), - array(9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063), - array(7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080), - ), - array( - array(-9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146), - array(-17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183), - array(-19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133), - ), - array( - array(-32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421), - array(-3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622), - array(-4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197), - ), - array( - array(2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663), - array(31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753), - array(4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755), - ), - array( - array(-9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862), - array(-26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118), - array(26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171), - ), - array( - array(15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380), - array(16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824), - array(28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270), - ), - ), - array( - array( - array(-817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438), - array(-31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584), - array(-594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562), - ), - array( - array(30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471), - array(18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610), - array(19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269), - ), - array( - array(-30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650), - array(14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369), - array(19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461), - ), - array( - array(30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462), - array(-5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793), - array(-2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218), - ), - array( - array(-24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226), - array(18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019), - array(-15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037), - ), - array( - array(31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171), - array(-17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132), - array(-28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841), - ), - array( - array(21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181), - array(-33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210), - array(-1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040), - ), - array( - array(3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935), - array(24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105), - array(-28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814), - ), - ), - array( - array( - array(793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852), - array(5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581), - array(-4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646), - ), - array( - array(10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844), - array(10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025), - array(27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453), - ), - array( - array(-23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068), - array(4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192), - array(-17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921), - ), - array( - array(-9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259), - array(-12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426), - array(-5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072), - ), - array( - array(-17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305), - array(13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832), - array(28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943), - ), - array( - array(-16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011), - array(24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447), - array(17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494), - ), - array( - array(-28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245), - array(-20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859), - array(28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915), - ), - array( - array(16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707), - array(10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848), - array(-11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224), - ), - ), - array( - array( - array(-25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391), - array(15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215), - array(-23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101), - ), - array( - array(23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713), - array(21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849), - array(-7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930), - ), - array( - array(-29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940), - array(-21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031), - array(-17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404), - ), - array( - array(-25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243), - array(-23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116), - array(-24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525), - ), - array( - array(-23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509), - array(-10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883), - array(15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865), - ), - array( - array(-3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660), - array(4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273), - array(-28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138), - ), - array( - array(-25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560), - array(-10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135), - array(2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941), - ), - array( - array(-4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739), - array(18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756), - array(-30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819), - ), - ), - array( - array( - array(-6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347), - array(-27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028), - array(21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075), - ), - array( - array(16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799), - array(-2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609), - array(-25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817), - ), - array( - array(-23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989), - array(-30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523), - array(4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278), - ), - array( - array(31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045), - array(19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377), - array(24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480), - ), - array( - array(17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016), - array(510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426), - array(18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525), - ), - array( - array(13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396), - array(9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080), - array(12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892), - ), - array( - array(15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275), - array(11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074), - array(20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140), - ), - array( - array(-16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717), - array(-1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101), - array(24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127), - ), - ), - array( - array( - array(-12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632), - array(-26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415), - array(-31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160), - ), - array( - array(31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876), - array(22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625), - array(-15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478), - ), - array( - array(27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164), - array(26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595), - array(-7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248), - ), - array( - array(-16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858), - array(15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193), - array(8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184), - ), - array( - array(-18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942), - array(-1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635), - array(21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948), - ), - array( - array(11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935), - array(-25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415), - array(-15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416), - ), - array( - array(-7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018), - array(4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778), - array(366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659), - ), - array( - array(-24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385), - array(18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503), - array(476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329), - ), - ), - array( - array( - array(20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056), - array(-13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838), - array(24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948), - ), - array( - array(-3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691), - array(-15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118), - array(-23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517), - ), - array( - array(-20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269), - array(-6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904), - array(-23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589), - ), - array( - array(-28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193), - array(-7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910), - array(-30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930), - ), - array( - array(-7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667), - array(25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481), - array(-9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876), - ), - array( - array(22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640), - array(-8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278), - array(-21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112), - ), - array( - array(26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272), - array(17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012), - array(-10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221), - ), - array( - array(30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046), - array(13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345), - array(-19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310), - ), - ), - array( - array( - array(19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937), - array(31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636), - array(-9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008), - ), - array( - array(-2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429), - array(-15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576), - array(31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066), - ), - array( - array(-9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490), - array(-12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104), - array(33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053), - ), - array( - array(31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275), - array(-20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511), - array(22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095), - ), - array( - array(-28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439), - array(23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939), - array(-23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424), - ), - array( - array(2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310), - array(3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608), - array(-32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079), - ), - array( - array(-23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101), - array(21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418), - array(18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576), - ), - array( - array(30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356), - array(9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996), - array(-26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099), - ), - ), - array( - array( - array(-26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728), - array(-13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658), - array(-10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242), - ), - array( - array(-21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001), - array(-4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766), - array(18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373), - ), - array( - array(26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458), - array(-17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628), - array(-13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657), - ), - array( - array(-23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062), - array(25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616), - array(31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014), - ), - array( - array(24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383), - array(-25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814), - array(-20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718), - ), - array( - array(30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417), - array(2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222), - array(33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444), - ), - array( - array(-20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597), - array(23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970), - array(1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799), - ), - array( - array(-5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647), - array(13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511), - array(-29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032), - ), - ), - array( - array( - array(9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834), - array(-23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461), - array(29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062), - ), - array( - array(-25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516), - array(-20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547), - array(-24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240), - ), - array( - array(-17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038), - array(-33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741), - array(16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103), - ), - array( - array(-19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747), - array(-1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323), - array(31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016), - ), - array( - array(-14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373), - array(15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228), - array(-2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141), - ), - array( - array(16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399), - array(11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831), - array(-185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376), - ), - array( - array(-32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313), - array(-18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958), - array(-6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577), - ), - array( - array(-22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743), - array(29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684), - array(-20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476), - ), - ) - ); - - /** - * See: libsodium's crypto_core/curve25519/ref10/base2.h - * - * @var array basically int[8][3] - */ - protected static $base2 = array( - array( - array(25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605), - array(-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378), - array(-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546), - ), - array( - array(15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024), - array(16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574), - array(30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357), - ), - array( - array(10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380), - array(4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306), - array(19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942), - ), - array( - array(5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766), - array(-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701), - array(28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300), - ), - array( - array(-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877), - array(-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951), - array(4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784), - ), - array( - array(-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436), - array(25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918), - array(23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877), - ), - array( - array(-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800), - array(-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305), - array(-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300), - ), - array( - array(-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876), - array(-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619), - array(-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683), - ) - ); - - /** - * 37095705934669439343138083508754565189542113879843219016388785533085940283555 - * - * @var array - */ - protected static $d = array( - -10913610, - 13857413, - -15372611, - 6949391, - 114729, - -8787816, - -6275908, - -3247719, - -18696448, - -12055116 - ); - - /** - * 2 * d = 16295367250680780974490674513165176452449235426866156013048779062215315747161 - * - * @var array - */ - protected static $d2 = array( - -21827239, - -5839606, - -30745221, - 13898782, - 229458, - 15978800, - -12551817, - -6495438, - 29715968, - 9444199 - ); - - /** - * sqrt(-1) - * - * @var array - */ - protected static $sqrtm1 = array( - -32595792, - -7943725, - 9377950, - 3500415, - 12389472, - -272473, - -25146209, - -2005654, - 326686, - 11406482 - ); -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/Ed25519.php b/libraries/vendor/paragonie/sodium_compat/src/Core/Ed25519.php deleted file mode 100644 index 4514dc8a32371..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/Ed25519.php +++ /dev/null @@ -1,479 +0,0 @@ -X)) { - throw new SodiumException('Unexpected zero result'); - } - - # fe_1(one_minus_y); - # fe_sub(one_minus_y, one_minus_y, A.Y); - # fe_invert(one_minus_y, one_minus_y); - $one_minux_y = self::fe_invert( - self::fe_sub( - self::fe_1(), - $A->Y - ) - ); - - # fe_1(x); - # fe_add(x, x, A.Y); - # fe_mul(x, x, one_minus_y); - $x = self::fe_mul( - self::fe_add(self::fe_1(), $A->Y), - $one_minux_y - ); - - # fe_tobytes(curve25519_pk, x); - return self::fe_tobytes($x); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sk_to_pk($sk) - { - return self::ge_p3_tobytes( - self::ge_scalarmult_base( - self::substr($sk, 0, 32) - ) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sign($message, $sk) - { - /** @var string $signature */ - $signature = self::sign_detached($message, $sk); - return $signature . $message; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message A signed message - * @param string $pk Public key - * @return string Message (without signature) - * @throws SodiumException - * @throws TypeError - */ - public static function sign_open($message, $pk) - { - /** @var string $signature */ - $signature = self::substr($message, 0, 64); - - /** @var string $message */ - $message = self::substr($message, 64); - - if (self::verify_detached($signature, $message, $pk)) { - return $message; - } - throw new SodiumException('Invalid signature'); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sign_detached($message, $sk) - { - # crypto_hash_sha512(az, sk, 32); - $az = hash('sha512', self::substr($sk, 0, 32), true); - - # az[0] &= 248; - # az[31] &= 63; - # az[31] |= 64; - $az[0] = self::intToChr(self::chrToInt($az[0]) & 248); - $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64); - - # crypto_hash_sha512_init(&hs); - # crypto_hash_sha512_update(&hs, az + 32, 32); - # crypto_hash_sha512_update(&hs, m, mlen); - # crypto_hash_sha512_final(&hs, nonce); - $hs = hash_init('sha512'); - hash_update($hs, self::substr($az, 32, 32)); - hash_update($hs, $message); - $nonceHash = hash_final($hs, true); - - # memmove(sig + 32, sk + 32, 32); - $pk = self::substr($sk, 32, 32); - - # sc_reduce(nonce); - # ge_scalarmult_base(&R, nonce); - # ge_p3_tobytes(sig, &R); - $nonce = self::sc_reduce($nonceHash) . self::substr($nonceHash, 32); - $sig = self::ge_p3_tobytes( - self::ge_scalarmult_base($nonce) - ); - - # crypto_hash_sha512_init(&hs); - # crypto_hash_sha512_update(&hs, sig, 64); - # crypto_hash_sha512_update(&hs, m, mlen); - # crypto_hash_sha512_final(&hs, hram); - $hs = hash_init('sha512'); - hash_update($hs, self::substr($sig, 0, 32)); - hash_update($hs, self::substr($pk, 0, 32)); - hash_update($hs, $message); - $hramHash = hash_final($hs, true); - - # sc_reduce(hram); - # sc_muladd(sig + 32, hram, az, nonce); - $hram = self::sc_reduce($hramHash); - $sigAfter = self::sc_muladd($hram, $az, $nonce); - $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32); - - try { - ParagonIE_Sodium_Compat::memzero($az); - } catch (SodiumException $ex) { - $az = null; - } - return $sig; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $sig - * @param string $message - * @param string $pk - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function verify_detached($sig, $message, $pk) - { - if (self::strlen($sig) < 64) { - throw new SodiumException('Signature is too short'); - } - if (self::check_S_lt_L(self::substr($sig, 32, 32))) { - throw new SodiumException('S < L - Invalid signature'); - } - if (self::small_order($sig)) { - throw new SodiumException('Signature is on too small of an order'); - } - if ((self::chrToInt($sig[63]) & 224) !== 0) { - throw new SodiumException('Invalid signature'); - } - $d = 0; - for ($i = 0; $i < 32; ++$i) { - $d |= self::chrToInt($pk[$i]); - } - if ($d === 0) { - throw new SodiumException('All zero public key'); - } - - /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */ - $orig = ParagonIE_Sodium_Compat::$fastMult; - - // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification. - ParagonIE_Sodium_Compat::$fastMult = true; - - /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A */ - $A = self::ge_frombytes_negate_vartime($pk); - - /** @var string $hDigest */ - $hDigest = hash( - 'sha512', - self::substr($sig, 0, 32) . - self::substr($pk, 0, 32) . - $message, - true - ); - - /** @var string $h */ - $h = self::sc_reduce($hDigest) . self::substr($hDigest, 32); - - /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P2 $R */ - $R = self::ge_double_scalarmult_vartime( - $h, - $A, - self::substr($sig, 32) - ); - - /** @var string $rcheck */ - $rcheck = self::ge_tobytes($R); - - // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before. - ParagonIE_Sodium_Compat::$fastMult = $orig; - - return self::verify_32($rcheck, self::substr($sig, 0, 32)); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $S - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function check_S_lt_L($S) - { - if (self::strlen($S) < 32) { - throw new SodiumException('Signature must be 32 bytes'); - } - $L = array( - 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, - 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10 - ); - $c = 0; - $n = 1; - $i = 32; - - /** @var array $L */ - do { - --$i; - $x = self::chrToInt($S[$i]); - $c |= ( - (($x - $L[$i]) >> 8) & $n - ); - $n &= ( - (($x ^ $L[$i]) - 1) >> 8 - ); - } while ($i !== 0); - - return $c === 0; - } - - /** - * @param string $R - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function small_order($R) - { - /** @var array> $blacklist */ - $blacklist = array( - /* 0 (order 4) */ - array( - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - ), - /* 1 (order 1) */ - array( - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - ), - /* 2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */ - array( - 0x26, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, - 0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0, - 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39, - 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x05 - ), - /* 55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */ - array( - 0xc7, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, - 0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f, - 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6, - 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0x7a - ), - /* p-1 (order 2) */ - array( - 0x13, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, - 0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0, - 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39, - 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x85 - ), - /* p (order 4) */ - array( - 0xb4, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, - 0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f, - 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6, - 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0xfa - ), - /* p+1 (order 1) */ - array( - 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f - ), - /* p+2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */ - array( - 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f - ), - /* p+55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */ - array( - 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f - ), - /* 2p-1 (order 2) */ - array( - 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - ), - /* 2p (order 4) */ - array( - 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - ), - /* 2p+1 (order 1) */ - array( - 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - ) - ); - /** @var int $countBlacklist */ - $countBlacklist = count($blacklist); - - for ($i = 0; $i < $countBlacklist; ++$i) { - $c = 0; - for ($j = 0; $j < 32; ++$j) { - $c |= self::chrToInt($R[$j]) ^ (int) $blacklist[$i][$j]; - } - if ($c === 0) { - return true; - } - } - return false; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/HChaCha20.php b/libraries/vendor/paragonie/sodium_compat/src/Core/HChaCha20.php deleted file mode 100644 index 947df10fbff2b..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/HChaCha20.php +++ /dev/null @@ -1,108 +0,0 @@ - 0; $i -= 2) { - $x4 ^= self::rotate($x0 + $x12, 7); - $x8 ^= self::rotate($x4 + $x0, 9); - $x12 ^= self::rotate($x8 + $x4, 13); - $x0 ^= self::rotate($x12 + $x8, 18); - $x9 ^= self::rotate($x5 + $x1, 7); - $x13 ^= self::rotate($x9 + $x5, 9); - $x1 ^= self::rotate($x13 + $x9, 13); - $x5 ^= self::rotate($x1 + $x13, 18); - $x14 ^= self::rotate($x10 + $x6, 7); - $x2 ^= self::rotate($x14 + $x10, 9); - $x6 ^= self::rotate($x2 + $x14, 13); - $x10 ^= self::rotate($x6 + $x2, 18); - $x3 ^= self::rotate($x15 + $x11, 7); - $x7 ^= self::rotate($x3 + $x15, 9); - $x11 ^= self::rotate($x7 + $x3, 13); - $x15 ^= self::rotate($x11 + $x7, 18); - $x1 ^= self::rotate($x0 + $x3, 7); - $x2 ^= self::rotate($x1 + $x0, 9); - $x3 ^= self::rotate($x2 + $x1, 13); - $x0 ^= self::rotate($x3 + $x2, 18); - $x6 ^= self::rotate($x5 + $x4, 7); - $x7 ^= self::rotate($x6 + $x5, 9); - $x4 ^= self::rotate($x7 + $x6, 13); - $x5 ^= self::rotate($x4 + $x7, 18); - $x11 ^= self::rotate($x10 + $x9, 7); - $x8 ^= self::rotate($x11 + $x10, 9); - $x9 ^= self::rotate($x8 + $x11, 13); - $x10 ^= self::rotate($x9 + $x8, 18); - $x12 ^= self::rotate($x15 + $x14, 7); - $x13 ^= self::rotate($x12 + $x15, 9); - $x14 ^= self::rotate($x13 + $x12, 13); - $x15 ^= self::rotate($x14 + $x13, 18); - } - - return self::store32_le($x0) . - self::store32_le($x5) . - self::store32_le($x10) . - self::store32_le($x15) . - self::store32_le($x6) . - self::store32_le($x7) . - self::store32_le($x8) . - self::store32_le($x9); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/Poly1305.php b/libraries/vendor/paragonie/sodium_compat/src/Core/Poly1305.php deleted file mode 100644 index 330182177e32e..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/Poly1305.php +++ /dev/null @@ -1,63 +0,0 @@ -update($m) - ->finish(); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $mac - * @param string $m - * @param string $key - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function onetimeauth_verify($mac, $m, $key) - { - if (self::strlen($key) < 32) { - throw new InvalidArgumentException( - 'Key must be 32 bytes long.' - ); - } - $state = new ParagonIE_Sodium_Core_Poly1305_State( - self::substr($key, 0, 32) - ); - $calc = $state - ->update($m) - ->finish(); - return self::verify_16($calc, $mac); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php b/libraries/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php deleted file mode 100644 index 1fa93101bf1be..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php +++ /dev/null @@ -1,419 +0,0 @@ - - */ - protected $buffer = array(); - - /** - * @var bool - */ - protected $final = false; - - /** - * @var array - */ - public $h; - - /** - * @var int - */ - protected $leftover = 0; - - /** - * @var int[] - */ - public $r; - - /** - * @var int[] - */ - public $pad; - - /** - * ParagonIE_Sodium_Core_Poly1305_State constructor. - * - * @internal You should not use this directly from another application - * - * @param string $key - * @throws InvalidArgumentException - * @throws TypeError - */ - public function __construct($key = '') - { - if (self::strlen($key) < 32) { - throw new InvalidArgumentException( - 'Poly1305 requires a 32-byte key' - ); - } - /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */ - $this->r = array( - (int) ((self::load_4(self::substr($key, 0, 4))) & 0x3ffffff), - (int) ((self::load_4(self::substr($key, 3, 4)) >> 2) & 0x3ffff03), - (int) ((self::load_4(self::substr($key, 6, 4)) >> 4) & 0x3ffc0ff), - (int) ((self::load_4(self::substr($key, 9, 4)) >> 6) & 0x3f03fff), - (int) ((self::load_4(self::substr($key, 12, 4)) >> 8) & 0x00fffff) - ); - - /* h = 0 */ - $this->h = array(0, 0, 0, 0, 0); - - /* save pad for later */ - $this->pad = array( - self::load_4(self::substr($key, 16, 4)), - self::load_4(self::substr($key, 20, 4)), - self::load_4(self::substr($key, 24, 4)), - self::load_4(self::substr($key, 28, 4)), - ); - - $this->leftover = 0; - $this->final = false; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @return self - * @throws SodiumException - * @throws TypeError - */ - public function update($message = '') - { - $bytes = self::strlen($message); - - /* handle leftover */ - if ($this->leftover) { - $want = ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - $this->leftover; - if ($want > $bytes) { - $want = $bytes; - } - for ($i = 0; $i < $want; ++$i) { - $mi = self::chrToInt($message[$i]); - $this->buffer[$this->leftover + $i] = $mi; - } - // We snip off the leftmost bytes. - $message = self::substr($message, $want); - $bytes = self::strlen($message); - $this->leftover += $want; - if ($this->leftover < ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { - // We still don't have enough to run $this->blocks() - return $this; - } - - $this->blocks( - static::intArrayToString($this->buffer), - ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - ); - $this->leftover = 0; - } - - /* process full blocks */ - if ($bytes >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { - /** @var int $want */ - $want = $bytes & ~(ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - 1); - if ($want >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { - $block = self::substr($message, 0, $want); - if (self::strlen($block) >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { - $this->blocks($block, $want); - $message = self::substr($message, $want); - $bytes = self::strlen($message); - } - } - } - - /* store leftover */ - if ($bytes) { - for ($i = 0; $i < $bytes; ++$i) { - $mi = self::chrToInt($message[$i]); - $this->buffer[$this->leftover + $i] = $mi; - } - $this->leftover = (int) $this->leftover + $bytes; - } - return $this; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param int $bytes - * @return self - * @throws TypeError - */ - public function blocks($message, $bytes) - { - if (self::strlen($message) < 16) { - $message = str_pad($message, 16, "\x00", STR_PAD_RIGHT); - } - /** @var int $hibit */ - $hibit = $this->final ? 0 : 1 << 24; /* 1 << 128 */ - $r0 = (int) $this->r[0]; - $r1 = (int) $this->r[1]; - $r2 = (int) $this->r[2]; - $r3 = (int) $this->r[3]; - $r4 = (int) $this->r[4]; - - $s1 = self::mul($r1, 5, 3); - $s2 = self::mul($r2, 5, 3); - $s3 = self::mul($r3, 5, 3); - $s4 = self::mul($r4, 5, 3); - - $h0 = $this->h[0]; - $h1 = $this->h[1]; - $h2 = $this->h[2]; - $h3 = $this->h[3]; - $h4 = $this->h[4]; - - while ($bytes >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { - /* h += m[i] */ - $h0 += self::load_4(self::substr($message, 0, 4)) & 0x3ffffff; - $h1 += (self::load_4(self::substr($message, 3, 4)) >> 2) & 0x3ffffff; - $h2 += (self::load_4(self::substr($message, 6, 4)) >> 4) & 0x3ffffff; - $h3 += (self::load_4(self::substr($message, 9, 4)) >> 6) & 0x3ffffff; - $h4 += (self::load_4(self::substr($message, 12, 4)) >> 8) | $hibit; - - /* h *= r */ - $d0 = ( - self::mul($h0, $r0, 31) + - self::mul($h1, $s4, 31) + - self::mul($h2, $s3, 31) + - self::mul($h3, $s2, 31) + - self::mul($h4, $s1, 31) - ); - - $d1 = ( - self::mul($h0, $r1, 31) + - self::mul($h1, $r0, 31) + - self::mul($h2, $s4, 31) + - self::mul($h3, $s3, 31) + - self::mul($h4, $s2, 31) - ); - - $d2 = ( - self::mul($h0, $r2, 31) + - self::mul($h1, $r1, 31) + - self::mul($h2, $r0, 31) + - self::mul($h3, $s4, 31) + - self::mul($h4, $s3, 31) - ); - - $d3 = ( - self::mul($h0, $r3, 31) + - self::mul($h1, $r2, 31) + - self::mul($h2, $r1, 31) + - self::mul($h3, $r0, 31) + - self::mul($h4, $s4, 31) - ); - - $d4 = ( - self::mul($h0, $r4, 31) + - self::mul($h1, $r3, 31) + - self::mul($h2, $r2, 31) + - self::mul($h3, $r1, 31) + - self::mul($h4, $r0, 31) - ); - - /* (partial) h %= p */ - /** @var int $c */ - $c = $d0 >> 26; - /** @var int $h0 */ - $h0 = $d0 & 0x3ffffff; - $d1 += $c; - - /** @var int $c */ - $c = $d1 >> 26; - /** @var int $h1 */ - $h1 = $d1 & 0x3ffffff; - $d2 += $c; - - /** @var int $c */ - $c = $d2 >> 26; - /** @var int $h2 */ - $h2 = $d2 & 0x3ffffff; - $d3 += $c; - - /** @var int $c */ - $c = $d3 >> 26; - /** @var int $h3 */ - $h3 = $d3 & 0x3ffffff; - $d4 += $c; - - /** @var int $c */ - $c = $d4 >> 26; - /** @var int $h4 */ - $h4 = $d4 & 0x3ffffff; - $h0 += (int) self::mul($c, 5, 3); - - /** @var int $c */ - $c = $h0 >> 26; - /** @var int $h0 */ - $h0 &= 0x3ffffff; - $h1 += $c; - - // Chop off the left 32 bytes. - $message = self::substr( - $message, - ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - ); - $bytes -= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE; - } - - $this->h = array( - (int) ($h0 & 0xffffffff), - (int) ($h1 & 0xffffffff), - (int) ($h2 & 0xffffffff), - (int) ($h3 & 0xffffffff), - (int) ($h4 & 0xffffffff) - ); - return $this; - } - - /** - * @internal You should not use this directly from another application - * - * @return string - * @throws TypeError - */ - public function finish() - { - /* process the remaining block */ - if ($this->leftover) { - $i = $this->leftover; - $this->buffer[$i++] = 1; - for (; $i < ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE; ++$i) { - $this->buffer[$i] = 0; - } - $this->final = true; - $this->blocks( - self::substr( - static::intArrayToString($this->buffer), - 0, - ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - ), - ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - ); - } - - $h0 = (int) $this->h[0]; - $h1 = (int) $this->h[1]; - $h2 = (int) $this->h[2]; - $h3 = (int) $this->h[3]; - $h4 = (int) $this->h[4]; - - /** @var int $c */ - $c = $h1 >> 26; - /** @var int $h1 */ - $h1 &= 0x3ffffff; - /** @var int $h2 */ - $h2 += $c; - /** @var int $c */ - $c = $h2 >> 26; - /** @var int $h2 */ - $h2 &= 0x3ffffff; - $h3 += $c; - /** @var int $c */ - $c = $h3 >> 26; - $h3 &= 0x3ffffff; - $h4 += $c; - /** @var int $c */ - $c = $h4 >> 26; - $h4 &= 0x3ffffff; - /** @var int $h0 */ - $h0 += self::mul($c, 5, 3); - /** @var int $c */ - $c = $h0 >> 26; - /** @var int $h0 */ - $h0 &= 0x3ffffff; - /** @var int $h1 */ - $h1 += $c; - - /* compute h + -p */ - /** @var int $g0 */ - $g0 = $h0 + 5; - /** @var int $c */ - $c = $g0 >> 26; - /** @var int $g0 */ - $g0 &= 0x3ffffff; - - /** @var int $g1 */ - $g1 = $h1 + $c; - /** @var int $c */ - $c = $g1 >> 26; - $g1 &= 0x3ffffff; - - /** @var int $g2 */ - $g2 = $h2 + $c; - /** @var int $c */ - $c = $g2 >> 26; - /** @var int $g2 */ - $g2 &= 0x3ffffff; - - /** @var int $g3 */ - $g3 = $h3 + $c; - /** @var int $c */ - $c = $g3 >> 26; - /** @var int $g3 */ - $g3 &= 0x3ffffff; - - /** @var int $g4 */ - $g4 = ($h4 + $c - (1 << 26)) & 0xffffffff; - - /* select h if h < p, or h + -p if h >= p */ - /** @var int $mask */ - $mask = ($g4 >> 31) - 1; - - $g0 &= $mask; - $g1 &= $mask; - $g2 &= $mask; - $g3 &= $mask; - $g4 &= $mask; - - /** @var int $mask */ - $mask = ~$mask & 0xffffffff; - /** @var int $h0 */ - $h0 = ($h0 & $mask) | $g0; - /** @var int $h1 */ - $h1 = ($h1 & $mask) | $g1; - /** @var int $h2 */ - $h2 = ($h2 & $mask) | $g2; - /** @var int $h3 */ - $h3 = ($h3 & $mask) | $g3; - /** @var int $h4 */ - $h4 = ($h4 & $mask) | $g4; - - /* h = h % (2^128) */ - /** @var int $h0 */ - $h0 = (($h0) | ($h1 << 26)) & 0xffffffff; - /** @var int $h1 */ - $h1 = (($h1 >> 6) | ($h2 << 20)) & 0xffffffff; - /** @var int $h2 */ - $h2 = (($h2 >> 12) | ($h3 << 14)) & 0xffffffff; - /** @var int $h3 */ - $h3 = (($h3 >> 18) | ($h4 << 8)) & 0xffffffff; - - /* mac = (h + pad) % (2^128) */ - $f = (int) ($h0 + $this->pad[0]); - $h0 = (int) $f; - $f = (int) ($h1 + $this->pad[1] + ($f >> 32)); - $h1 = (int) $f; - $f = (int) ($h2 + $this->pad[2] + ($f >> 32)); - $h2 = (int) $f; - $f = (int) ($h3 + $this->pad[3] + ($f >> 32)); - $h3 = (int) $f; - - return self::store32_le($h0 & 0xffffffff) . - self::store32_le($h1 & 0xffffffff) . - self::store32_le($h2 & 0xffffffff) . - self::store32_le($h3 & 0xffffffff); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/Salsa20.php b/libraries/vendor/paragonie/sodium_compat/src/Core/Salsa20.php deleted file mode 100644 index 515ccad605cce..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/Salsa20.php +++ /dev/null @@ -1,273 +0,0 @@ - 0; $i -= 2) { - $x4 ^= self::rotate($x0 + $x12, 7); - $x8 ^= self::rotate($x4 + $x0, 9); - $x12 ^= self::rotate($x8 + $x4, 13); - $x0 ^= self::rotate($x12 + $x8, 18); - - $x9 ^= self::rotate($x5 + $x1, 7); - $x13 ^= self::rotate($x9 + $x5, 9); - $x1 ^= self::rotate($x13 + $x9, 13); - $x5 ^= self::rotate($x1 + $x13, 18); - - $x14 ^= self::rotate($x10 + $x6, 7); - $x2 ^= self::rotate($x14 + $x10, 9); - $x6 ^= self::rotate($x2 + $x14, 13); - $x10 ^= self::rotate($x6 + $x2, 18); - - $x3 ^= self::rotate($x15 + $x11, 7); - $x7 ^= self::rotate($x3 + $x15, 9); - $x11 ^= self::rotate($x7 + $x3, 13); - $x15 ^= self::rotate($x11 + $x7, 18); - - $x1 ^= self::rotate($x0 + $x3, 7); - $x2 ^= self::rotate($x1 + $x0, 9); - $x3 ^= self::rotate($x2 + $x1, 13); - $x0 ^= self::rotate($x3 + $x2, 18); - - $x6 ^= self::rotate($x5 + $x4, 7); - $x7 ^= self::rotate($x6 + $x5, 9); - $x4 ^= self::rotate($x7 + $x6, 13); - $x5 ^= self::rotate($x4 + $x7, 18); - - $x11 ^= self::rotate($x10 + $x9, 7); - $x8 ^= self::rotate($x11 + $x10, 9); - $x9 ^= self::rotate($x8 + $x11, 13); - $x10 ^= self::rotate($x9 + $x8, 18); - - $x12 ^= self::rotate($x15 + $x14, 7); - $x13 ^= self::rotate($x12 + $x15, 9); - $x14 ^= self::rotate($x13 + $x12, 13); - $x15 ^= self::rotate($x14 + $x13, 18); - } - - $x0 += $j0; - $x1 += $j1; - $x2 += $j2; - $x3 += $j3; - $x4 += $j4; - $x5 += $j5; - $x6 += $j6; - $x7 += $j7; - $x8 += $j8; - $x9 += $j9; - $x10 += $j10; - $x11 += $j11; - $x12 += $j12; - $x13 += $j13; - $x14 += $j14; - $x15 += $j15; - - return self::store32_le($x0) . - self::store32_le($x1) . - self::store32_le($x2) . - self::store32_le($x3) . - self::store32_le($x4) . - self::store32_le($x5) . - self::store32_le($x6) . - self::store32_le($x7) . - self::store32_le($x8) . - self::store32_le($x9) . - self::store32_le($x10) . - self::store32_le($x11) . - self::store32_le($x12) . - self::store32_le($x13) . - self::store32_le($x14) . - self::store32_le($x15); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $len - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function salsa20($len, $nonce, $key) - { - if (self::strlen($key) !== 32) { - throw new RangeException('Key must be 32 bytes long'); - } - $kcopy = '' . $key; - $in = self::substr($nonce, 0, 8) . str_repeat("\0", 8); - $c = ''; - while ($len >= 64) { - $c .= self::core_salsa20($in, $kcopy, null); - $u = 1; - // Internal counter. - for ($i = 8; $i < 16; ++$i) { - $u += self::chrToInt($in[$i]); - $in[$i] = self::intToChr($u & 0xff); - $u >>= 8; - } - $len -= 64; - } - if ($len > 0) { - $c .= self::substr( - self::core_salsa20($in, $kcopy, null), - 0, - $len - ); - } - try { - ParagonIE_Sodium_Compat::memzero($kcopy); - } catch (SodiumException $ex) { - $kcopy = null; - } - return $c; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $m - * @param string $n - * @param int $ic - * @param string $k - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function salsa20_xor_ic($m, $n, $ic, $k) - { - $mlen = self::strlen($m); - if ($mlen < 1) { - return ''; - } - $kcopy = self::substr($k, 0, 32); - $in = self::substr($n, 0, 8); - // Initialize the counter - $in .= ParagonIE_Sodium_Core_Util::store64_le($ic); - - $c = ''; - while ($mlen >= 64) { - $block = self::core_salsa20($in, $kcopy, null); - $c .= self::xorStrings( - self::substr($m, 0, 64), - self::substr($block, 0, 64) - ); - $u = 1; - for ($i = 8; $i < 16; ++$i) { - $u += self::chrToInt($in[$i]); - $in[$i] = self::intToChr($u & 0xff); - $u >>= 8; - } - - $mlen -= 64; - $m = self::substr($m, 64); - } - - if ($mlen) { - $block = self::core_salsa20($in, $kcopy, null); - $c .= self::xorStrings( - self::substr($m, 0, $mlen), - self::substr($block, 0, $mlen) - ); - } - try { - ParagonIE_Sodium_Compat::memzero($block); - ParagonIE_Sodium_Compat::memzero($kcopy); - } catch (SodiumException $ex) { - $block = null; - $kcopy = null; - } - - return $c; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function salsa20_xor($message, $nonce, $key) - { - return self::xorStrings( - $message, - self::salsa20( - self::strlen($message), - $nonce, - $key - ) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $u - * @param int $c - * @return int - */ - public static function rotate($u, $c) - { - $u &= 0xffffffff; - $c %= 32; - return (int) (0xffffffff & ( - ($u << $c) - | - ($u >> (32 - $c)) - ) - ); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/SipHash.php b/libraries/vendor/paragonie/sodium_compat/src/Core/SipHash.php deleted file mode 100644 index 7d3981620efaa..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/SipHash.php +++ /dev/null @@ -1,305 +0,0 @@ - - */ - public static function add(array $a, array $b) - { - /** @var int $x1 */ - $x1 = $a[1] + $b[1]; - /** @var int $c */ - $c = $x1 >> 32; // Carry if ($a + $b) > 0xffffffff - /** @var int $x0 */ - $x0 = $a[0] + $b[0] + $c; - return array( - $x0 & 0xffffffff, - $x1 & 0xffffffff - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $int0 - * @param int $int1 - * @param int $c - * @return array - */ - public static function rotl_64($int0, $int1, $c) - { - $int0 &= 0xffffffff; - $int1 &= 0xffffffff; - $c &= 63; - if ($c === 32) { - return array($int1, $int0); - } - if ($c > 31) { - $tmp = $int1; - $int1 = $int0; - $int0 = $tmp; - $c &= 31; - } - if ($c === 0) { - return array($int0, $int1); - } - return array( - 0xffffffff & ( - ($int0 << $c) - | - ($int1 >> (32 - $c)) - ), - 0xffffffff & ( - ($int1 << $c) - | - ($int0 >> (32 - $c)) - ), - ); - } - - /** - * Implements Siphash-2-4 using only 32-bit numbers. - * - * When we split an int into two, the higher bits go to the lower index. - * e.g. 0xDEADBEEFAB10C92D becomes [ - * 0 => 0xDEADBEEF, - * 1 => 0xAB10C92D - * ]. - * - * @internal You should not use this directly from another application - * - * @param string $in - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sipHash24($in, $key) - { - $inlen = self::strlen($in); - - # /* "somepseudorandomlygeneratedbytes" */ - # u64 v0 = 0x736f6d6570736575ULL; - # u64 v1 = 0x646f72616e646f6dULL; - # u64 v2 = 0x6c7967656e657261ULL; - # u64 v3 = 0x7465646279746573ULL; - $v = array( - 0x736f6d65, // 0 - 0x70736575, // 1 - 0x646f7261, // 2 - 0x6e646f6d, // 3 - 0x6c796765, // 4 - 0x6e657261, // 5 - 0x74656462, // 6 - 0x79746573 // 7 - ); - // v0 => $v[0], $v[1] - // v1 => $v[2], $v[3] - // v2 => $v[4], $v[5] - // v3 => $v[6], $v[7] - - # u64 k0 = LOAD64_LE( k ); - # u64 k1 = LOAD64_LE( k + 8 ); - $k = array( - self::load_4(self::substr($key, 4, 4)), - self::load_4(self::substr($key, 0, 4)), - self::load_4(self::substr($key, 12, 4)), - self::load_4(self::substr($key, 8, 4)) - ); - // k0 => $k[0], $k[1] - // k1 => $k[2], $k[3] - - # b = ( ( u64 )inlen ) << 56; - $b = array( - $inlen << 24, - 0 - ); - // See docblock for why the 0th index gets the higher bits. - - # v3 ^= k1; - $v[6] ^= $k[2]; - $v[7] ^= $k[3]; - # v2 ^= k0; - $v[4] ^= $k[0]; - $v[5] ^= $k[1]; - # v1 ^= k1; - $v[2] ^= $k[2]; - $v[3] ^= $k[3]; - # v0 ^= k0; - $v[0] ^= $k[0]; - $v[1] ^= $k[1]; - - $left = $inlen; - # for ( ; in != end; in += 8 ) - while ($left >= 8) { - # m = LOAD64_LE( in ); - $m = array( - self::load_4(self::substr($in, 4, 4)), - self::load_4(self::substr($in, 0, 4)) - ); - - # v3 ^= m; - $v[6] ^= $m[0]; - $v[7] ^= $m[1]; - - # SIPROUND; - # SIPROUND; - $v = self::sipRound($v); - $v = self::sipRound($v); - - # v0 ^= m; - $v[0] ^= $m[0]; - $v[1] ^= $m[1]; - - $in = self::substr($in, 8); - $left -= 8; - } - - # switch( left ) - # { - # case 7: b |= ( ( u64 )in[ 6] ) << 48; - # case 6: b |= ( ( u64 )in[ 5] ) << 40; - # case 5: b |= ( ( u64 )in[ 4] ) << 32; - # case 4: b |= ( ( u64 )in[ 3] ) << 24; - # case 3: b |= ( ( u64 )in[ 2] ) << 16; - # case 2: b |= ( ( u64 )in[ 1] ) << 8; - # case 1: b |= ( ( u64 )in[ 0] ); break; - # case 0: break; - # } - switch ($left) { - case 7: - $b[0] |= self::chrToInt($in[6]) << 16; - case 6: - $b[0] |= self::chrToInt($in[5]) << 8; - case 5: - $b[0] |= self::chrToInt($in[4]); - case 4: - $b[1] |= self::chrToInt($in[3]) << 24; - case 3: - $b[1] |= self::chrToInt($in[2]) << 16; - case 2: - $b[1] |= self::chrToInt($in[1]) << 8; - case 1: - $b[1] |= self::chrToInt($in[0]); - case 0: - break; - } - // See docblock for why the 0th index gets the higher bits. - - # v3 ^= b; - $v[6] ^= $b[0]; - $v[7] ^= $b[1]; - - # SIPROUND; - # SIPROUND; - $v = self::sipRound($v); - $v = self::sipRound($v); - - # v0 ^= b; - $v[0] ^= $b[0]; - $v[1] ^= $b[1]; - - // Flip the lower 8 bits of v2 which is ($v[4], $v[5]) in our implementation - # v2 ^= 0xff; - $v[5] ^= 0xff; - - # SIPROUND; - # SIPROUND; - # SIPROUND; - # SIPROUND; - $v = self::sipRound($v); - $v = self::sipRound($v); - $v = self::sipRound($v); - $v = self::sipRound($v); - - # b = v0 ^ v1 ^ v2 ^ v3; - # STORE64_LE( out, b ); - return self::store32_le($v[1] ^ $v[3] ^ $v[5] ^ $v[7]) . - self::store32_le($v[0] ^ $v[2] ^ $v[4] ^ $v[6]); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/Util.php b/libraries/vendor/paragonie/sodium_compat/src/Core/Util.php deleted file mode 100644 index 9c8e41e29689b..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/Util.php +++ /dev/null @@ -1,921 +0,0 @@ -> $size) & 1); - return (int) ( - ($integer ^ $negative) - + - (($negative >> $realSize) & 1) - ); - } - - /** - * Convert a binary string into a hexadecimal string without cache-timing - * leaks - * - * @internal You should not use this directly from another application - * - * @param string $binaryString (raw binary) - * @return string - * @throws TypeError - */ - public static function bin2hex($binaryString) - { - /* Type checks: */ - if (!is_string($binaryString)) { - throw new TypeError('Argument 1 must be a string, ' . gettype($binaryString) . ' given.'); - } - - $hex = ''; - $len = self::strlen($binaryString); - for ($i = 0; $i < $len; ++$i) { - /** @var array $chunk */ - $chunk = unpack('C', $binaryString[$i]); - /** @var int $c */ - $c = $chunk[1] & 0xf; - /** @var int $b */ - $b = $chunk[1] >> 4; - $hex .= pack( - 'CC', - (87 + $b + ((($b - 10) >> 8) & ~38)), - (87 + $c + ((($c - 10) >> 8) & ~38)) - ); - } - return $hex; - } - - /** - * Convert a binary string into a hexadecimal string without cache-timing - * leaks, returning uppercase letters (as per RFC 4648) - * - * @internal You should not use this directly from another application - * - * @param string $bin_string (raw binary) - * @return string - * @throws TypeError - */ - public static function bin2hexUpper($bin_string) - { - $hex = ''; - $len = self::strlen($bin_string); - for ($i = 0; $i < $len; ++$i) { - /** @var array $chunk */ - $chunk = unpack('C', $bin_string[$i]); - /** - * Lower 16 bits - * - * @var int $c - */ - $c = $chunk[1] & 0xf; - - /** - * Upper 16 bits - * @var int $b - */ - $b = $chunk[1] >> 4; - - /** - * Use pack() and binary operators to turn the two integers - * into hexadecimal characters. We don't use chr() here, because - * it uses a lookup table internally and we want to avoid - * cache-timing side-channels. - */ - $hex .= pack( - 'CC', - (55 + $b + ((($b - 10) >> 8) & ~6)), - (55 + $c + ((($c - 10) >> 8) & ~6)) - ); - } - return $hex; - } - - /** - * Cache-timing-safe variant of ord() - * - * @internal You should not use this directly from another application - * - * @param string $chr - * @return int - * @throws SodiumException - * @throws TypeError - */ - public static function chrToInt($chr) - { - /* Type checks: */ - if (!is_string($chr)) { - throw new TypeError('Argument 1 must be a string, ' . gettype($chr) . ' given.'); - } - if (self::strlen($chr) !== 1) { - throw new SodiumException('chrToInt() expects a string that is exactly 1 character long'); - } - /** @var array $chunk */ - $chunk = unpack('C', $chr); - return (int) ($chunk[1]); - } - - /** - * Compares two strings. - * - * @internal You should not use this directly from another application - * - * @param string $left - * @param string $right - * @param int $len - * @return int - * @throws SodiumException - * @throws TypeError - */ - public static function compare($left, $right, $len = null) - { - $leftLen = self::strlen($left); - $rightLen = self::strlen($right); - if ($len === null) { - $len = max($leftLen, $rightLen); - $left = str_pad($left, $len, "\x00", STR_PAD_RIGHT); - $right = str_pad($right, $len, "\x00", STR_PAD_RIGHT); - } - - $gt = 0; - $eq = 1; - $i = $len; - while ($i !== 0) { - --$i; - $gt |= ((self::chrToInt($right[$i]) - self::chrToInt($left[$i])) >> 8) & $eq; - $eq &= ((self::chrToInt($right[$i]) ^ self::chrToInt($left[$i])) - 1) >> 8; - } - return ($gt + $gt + $eq) - 1; - } - - /** - * If a variable does not match a given type, throw a TypeError. - * - * @param mixed $mixedVar - * @param string $type - * @param int $argumentIndex - * @throws TypeError - * @throws SodiumException - * @return void - */ - public static function declareScalarType(&$mixedVar = null, $type = 'void', $argumentIndex = 0) - { - if (func_num_args() === 0) { - /* Tautology, by default */ - return; - } - if (func_num_args() === 1) { - throw new TypeError('Declared void, but passed a variable'); - } - $realType = strtolower(gettype($mixedVar)); - $type = strtolower($type); - switch ($type) { - case 'null': - if ($mixedVar !== null) { - throw new TypeError('Argument ' . $argumentIndex . ' must be null, ' . $realType . ' given.'); - } - break; - case 'integer': - case 'int': - $allow = array('int', 'integer'); - if (!in_array($type, $allow)) { - throw new TypeError('Argument ' . $argumentIndex . ' must be an integer, ' . $realType . ' given.'); - } - $mixedVar = (int) $mixedVar; - break; - case 'boolean': - case 'bool': - $allow = array('bool', 'boolean'); - if (!in_array($type, $allow)) { - throw new TypeError('Argument ' . $argumentIndex . ' must be a boolean, ' . $realType . ' given.'); - } - $mixedVar = (bool) $mixedVar; - break; - case 'string': - if (!is_string($mixedVar)) { - throw new TypeError('Argument ' . $argumentIndex . ' must be a string, ' . $realType . ' given.'); - } - $mixedVar = (string) $mixedVar; - break; - case 'decimal': - case 'double': - case 'float': - $allow = array('decimal', 'double', 'float'); - if (!in_array($type, $allow)) { - throw new TypeError('Argument ' . $argumentIndex . ' must be a float, ' . $realType . ' given.'); - } - $mixedVar = (float) $mixedVar; - break; - case 'object': - if (!is_object($mixedVar)) { - throw new TypeError('Argument ' . $argumentIndex . ' must be an object, ' . $realType . ' given.'); - } - break; - case 'array': - if (!is_array($mixedVar)) { - if (is_object($mixedVar)) { - if ($mixedVar instanceof ArrayAccess) { - return; - } - } - throw new TypeError('Argument ' . $argumentIndex . ' must be an array, ' . $realType . ' given.'); - } - break; - default: - throw new SodiumException('Unknown type (' . $realType .') does not match expect type (' . $type . ')'); - } - } - - /** - * Evaluate whether or not two strings are equal (in constant-time) - * - * @param string $left - * @param string $right - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function hashEquals($left, $right) - { - /* Type checks: */ - if (!is_string($left)) { - throw new TypeError('Argument 1 must be a string, ' . gettype($left) . ' given.'); - } - if (!is_string($right)) { - throw new TypeError('Argument 2 must be a string, ' . gettype($right) . ' given.'); - } - - if (is_callable('hash_equals')) { - return hash_equals($left, $right); - } - $d = 0; - /** @var int $len */ - $len = self::strlen($left); - if ($len !== self::strlen($right)) { - return false; - } - for ($i = 0; $i < $len; ++$i) { - $d |= self::chrToInt($left[$i]) ^ self::chrToInt($right[$i]); - } - - if ($d !== 0) { - return false; - } - return $left === $right; - } - - /** - * Convert a hexadecimal string into a binary string without cache-timing - * leaks - * - * @internal You should not use this directly from another application - * - * @param string $hexString - * @param bool $strictPadding - * @return string (raw binary) - * @throws RangeException - * @throws TypeError - */ - public static function hex2bin($hexString, $strictPadding = false) - { - /* Type checks: */ - if (!is_string($hexString)) { - throw new TypeError('Argument 1 must be a string, ' . gettype($hexString) . ' given.'); - } - - /** @var int $hex_pos */ - $hex_pos = 0; - /** @var string $bin */ - $bin = ''; - /** @var int $c_acc */ - $c_acc = 0; - /** @var int $hex_len */ - $hex_len = self::strlen($hexString); - /** @var int $state */ - $state = 0; - if (($hex_len & 1) !== 0) { - if ($strictPadding) { - throw new RangeException( - 'Expected an even number of hexadecimal characters' - ); - } else { - $hexString = '0' . $hexString; - ++$hex_len; - } - } - - $chunk = unpack('C*', $hexString); - while ($hex_pos < $hex_len) { - ++$hex_pos; - /** @var int $c */ - $c = $chunk[$hex_pos]; - /** @var int $c_num */ - $c_num = $c ^ 48; - /** @var int $c_num0 */ - $c_num0 = ($c_num - 10) >> 8; - /** @var int $c_alpha */ - $c_alpha = ($c & ~32) - 55; - /** @var int $c_alpha0 */ - $c_alpha0 = (($c_alpha - 10) ^ ($c_alpha - 16)) >> 8; - if (($c_num0 | $c_alpha0) === 0) { - throw new RangeException( - 'hex2bin() only expects hexadecimal characters' - ); - } - /** @var int $c_val */ - $c_val = ($c_num0 & $c_num) | ($c_alpha & $c_alpha0); - if ($state === 0) { - $c_acc = $c_val * 16; - } else { - $bin .= pack('C', $c_acc | $c_val); - } - $state ^= 1; - } - return $bin; - } - - /** - * Turn an array of integers into a string - * - * @internal You should not use this directly from another application - * - * @param array $ints - * @return string - */ - public static function intArrayToString(array $ints) - { - /** @var array $args */ - $args = $ints; - foreach ($args as $i => $v) { - $args[$i] = (int) ($v & 0xff); - } - array_unshift($args, str_repeat('C', count($ints))); - return (string) (call_user_func_array('pack', $args)); - } - - /** - * Cache-timing-safe variant of ord() - * - * @internal You should not use this directly from another application - * - * @param int $int - * @return string - * @throws TypeError - */ - public static function intToChr($int) - { - return pack('C', $int); - } - - /** - * Load a 3 character substring into an integer - * - * @internal You should not use this directly from another application - * - * @param string $string - * @return int - * @throws RangeException - * @throws TypeError - */ - public static function load_3($string) - { - /* Type checks: */ - if (!is_string($string)) { - throw new TypeError('Argument 1 must be a string, ' . gettype($string) . ' given.'); - } - - /* Input validation: */ - if (self::strlen($string) < 3) { - throw new RangeException( - 'String must be 3 bytes or more; ' . self::strlen($string) . ' given.' - ); - } - /** @var array $unpacked */ - $unpacked = unpack('V', $string . "\0"); - return (int) ($unpacked[1] & 0xffffff); - } - - /** - * Load a 4 character substring into an integer - * - * @internal You should not use this directly from another application - * - * @param string $string - * @return int - * @throws RangeException - * @throws TypeError - */ - public static function load_4($string) - { - /* Type checks: */ - if (!is_string($string)) { - throw new TypeError('Argument 1 must be a string, ' . gettype($string) . ' given.'); - } - - /* Input validation: */ - if (self::strlen($string) < 4) { - throw new RangeException( - 'String must be 4 bytes or more; ' . self::strlen($string) . ' given.' - ); - } - /** @var array $unpacked */ - $unpacked = unpack('V', $string); - return (int) ($unpacked[1] & 0xffffffff); - } - - /** - * Load a 8 character substring into an integer - * - * @internal You should not use this directly from another application - * - * @param string $string - * @return int - * @throws RangeException - * @throws SodiumException - * @throws TypeError - */ - public static function load64_le($string) - { - /* Type checks: */ - if (!is_string($string)) { - throw new TypeError('Argument 1 must be a string, ' . gettype($string) . ' given.'); - } - - /* Input validation: */ - if (self::strlen($string) < 4) { - throw new RangeException( - 'String must be 4 bytes or more; ' . self::strlen($string) . ' given.' - ); - } - if (PHP_VERSION_ID >= 50603 && PHP_INT_SIZE === 8) { - /** @var array $unpacked */ - $unpacked = unpack('P', $string); - return (int) $unpacked[1]; - } - - /** @var int $result */ - $result = (self::chrToInt($string[0]) & 0xff); - $result |= (self::chrToInt($string[1]) & 0xff) << 8; - $result |= (self::chrToInt($string[2]) & 0xff) << 16; - $result |= (self::chrToInt($string[3]) & 0xff) << 24; - $result |= (self::chrToInt($string[4]) & 0xff) << 32; - $result |= (self::chrToInt($string[5]) & 0xff) << 40; - $result |= (self::chrToInt($string[6]) & 0xff) << 48; - $result |= (self::chrToInt($string[7]) & 0xff) << 56; - return (int) $result; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $left - * @param string $right - * @return int - * @throws SodiumException - * @throws TypeError - */ - public static function memcmp($left, $right) - { - if (self::hashEquals($left, $right)) { - return 0; - } - return -1; - } - - /** - * Multiply two integers in constant-time - * - * Micro-architecture timing side-channels caused by how your CPU - * implements multiplication are best prevented by never using the - * multiplication operators and ensuring that our code always takes - * the same number of operations to complete, regardless of the values - * of $a and $b. - * - * @internal You should not use this directly from another application - * - * @param int $a - * @param int $b - * @param int $size Limits the number of operations (useful for small, - * constant operands) - * @return int - */ - public static function mul($a, $b, $size = 0) - { - if (ParagonIE_Sodium_Compat::$fastMult) { - return (int) ($a * $b); - } - - static $defaultSize = null; - /** @var int $defaultSize */ - if (!$defaultSize) { - /** @var int $defaultSize */ - $defaultSize = (PHP_INT_SIZE << 3) - 1; - } - if ($size < 1) { - /** @var int $size */ - $size = $defaultSize; - } - /** @var int $size */ - - $c = 0; - - /** - * Mask is either -1 or 0. - * - * -1 in binary looks like 0x1111 ... 1111 - * 0 in binary looks like 0x0000 ... 0000 - * - * @var int - */ - $mask = -(($b >> $defaultSize) & 1); - - /** - * Ensure $b is a positive integer, without creating - * a branching side-channel - * - * @var int $b - */ - $b = ($b & ~$mask) | ($mask & -$b); - - /** - * Unless $size is provided: - * - * This loop always runs 32 times when PHP_INT_SIZE is 4. - * This loop always runs 64 times when PHP_INT_SIZE is 8. - */ - for ($i = $size; $i >= 0; --$i) { - $c += (int) ($a & -($b & 1)); - $a <<= 1; - $b >>= 1; - } - - /** - * If $b was negative, we then apply the same value to $c here. - * It doesn't matter much if $a was negative; the $c += above would - * have produced a negative integer to begin with. But a negative $b - * makes $b >>= 1 never return 0, so we would end up with incorrect - * results. - * - * The end result is what we'd expect from integer multiplication. - */ - return (int) (($c & ~$mask) | ($mask & -$c)); - } - - /** - * Convert any arbitrary numbers into two 32-bit integers that represent - * a 64-bit integer. - * - * @internal You should not use this directly from another application - * - * @param int|float $num - * @return array - */ - public static function numericTo64BitInteger($num) - { - $high = 0; - /** @var int $low */ - $low = $num & 0xffffffff; - - if ((+(abs($num))) >= 1) { - if ($num > 0) { - /** @var int $high */ - $high = min((+(floor($num/4294967296))), 4294967295); - } else { - /** @var int $high */ - $high = ~~((+(ceil(($num - (+((~~($num)))))/4294967296)))); - } - } - return array((int) $high, (int) $low); - } - - /** - * Store a 24-bit integer into a string, treating it as big-endian. - * - * @internal You should not use this directly from another application - * - * @param int $int - * @return string - * @throws TypeError - */ - public static function store_3($int) - { - /* Type checks: */ - if (!is_int($int)) { - if (is_numeric($int)) { - $int = (int) $int; - } else { - throw new TypeError('Argument 1 must be an integer, ' . gettype($int) . ' given.'); - } - } - /** @var string $packed */ - $packed = pack('N', $int); - return self::substr($packed, 1, 3); - } - - /** - * Store a 32-bit integer into a string, treating it as little-endian. - * - * @internal You should not use this directly from another application - * - * @param int $int - * @return string - * @throws TypeError - */ - public static function store32_le($int) - { - /* Type checks: */ - if (!is_int($int)) { - if (is_numeric($int)) { - $int = (int) $int; - } else { - throw new TypeError('Argument 1 must be an integer, ' . gettype($int) . ' given.'); - } - } - - /** @var string $packed */ - $packed = pack('V', $int); - return $packed; - } - - /** - * Store a 32-bit integer into a string, treating it as big-endian. - * - * @internal You should not use this directly from another application - * - * @param int $int - * @return string - * @throws TypeError - */ - public static function store_4($int) - { - /* Type checks: */ - if (!is_int($int)) { - if (is_numeric($int)) { - $int = (int) $int; - } else { - throw new TypeError('Argument 1 must be an integer, ' . gettype($int) . ' given.'); - } - } - - /** @var string $packed */ - $packed = pack('N', $int); - return $packed; - } - - /** - * Stores a 64-bit integer as an string, treating it as little-endian. - * - * @internal You should not use this directly from another application - * - * @param int $int - * @return string - * @throws TypeError - */ - public static function store64_le($int) - { - /* Type checks: */ - if (!is_int($int)) { - if (is_numeric($int)) { - $int = (int) $int; - } else { - throw new TypeError('Argument 1 must be an integer, ' . gettype($int) . ' given.'); - } - } - - if (PHP_INT_SIZE === 8) { - if (PHP_VERSION_ID >= 50603) { - /** @var string $packed */ - $packed = pack('P', $int); - return $packed; - } - return self::intToChr($int & 0xff) . - self::intToChr(($int >> 8) & 0xff) . - self::intToChr(($int >> 16) & 0xff) . - self::intToChr(($int >> 24) & 0xff) . - self::intToChr(($int >> 32) & 0xff) . - self::intToChr(($int >> 40) & 0xff) . - self::intToChr(($int >> 48) & 0xff) . - self::intToChr(($int >> 56) & 0xff); - } - if ($int > PHP_INT_MAX) { - list($hiB, $int) = self::numericTo64BitInteger($int); - } else { - $hiB = 0; - } - return - self::intToChr(($int ) & 0xff) . - self::intToChr(($int >> 8) & 0xff) . - self::intToChr(($int >> 16) & 0xff) . - self::intToChr(($int >> 24) & 0xff) . - self::intToChr($hiB & 0xff) . - self::intToChr(($hiB >> 8) & 0xff) . - self::intToChr(($hiB >> 16) & 0xff) . - self::intToChr(($hiB >> 24) & 0xff); - } - - /** - * Safe string length - * - * @internal You should not use this directly from another application - * - * @ref mbstring.func_overload - * - * @param string $str - * @return int - * @throws TypeError - */ - public static function strlen($str) - { - /* Type checks: */ - if (!is_string($str)) { - throw new TypeError('String expected'); - } - - return (int) ( - self::isMbStringOverride() - ? mb_strlen($str, '8bit') - : strlen($str) - ); - } - - /** - * Turn a string into an array of integers - * - * @internal You should not use this directly from another application - * - * @param string $string - * @return array - * @throws TypeError - */ - public static function stringToIntArray($string) - { - if (!is_string($string)) { - throw new TypeError('String expected'); - } - /** - * @var array - */ - $values = array_values( - unpack('C*', $string) - ); - return $values; - } - - /** - * Safe substring - * - * @internal You should not use this directly from another application - * - * @ref mbstring.func_overload - * - * @param string $str - * @param int $start - * @param int $length - * @return string - * @throws TypeError - */ - public static function substr($str, $start = 0, $length = null) - { - /* Type checks: */ - if (!is_string($str)) { - throw new TypeError('String expected'); - } - - if ($length === 0) { - return ''; - } - - if (self::isMbStringOverride()) { - if (PHP_VERSION_ID < 50400 && $length === null) { - $length = self::strlen($str); - } - $sub = (string) mb_substr($str, $start, $length, '8bit'); - } elseif ($length === null) { - $sub = (string) substr($str, $start); - } else { - $sub = (string) substr($str, $start, $length); - } - if (isset($sub)) { - return $sub; - } - return ''; - } - - /** - * Compare a 16-character byte string in constant time. - * - * @internal You should not use this directly from another application - * - * @param string $a - * @param string $b - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function verify_16($a, $b) - { - /* Type checks: */ - if (!is_string($a)) { - throw new TypeError('String expected'); - } - if (!is_string($b)) { - throw new TypeError('String expected'); - } - return self::hashEquals( - self::substr($a, 0, 16), - self::substr($b, 0, 16) - ); - } - - /** - * Compare a 32-character byte string in constant time. - * - * @internal You should not use this directly from another application - * - * @param string $a - * @param string $b - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function verify_32($a, $b) - { - /* Type checks: */ - if (!is_string($a)) { - throw new TypeError('String expected'); - } - if (!is_string($b)) { - throw new TypeError('String expected'); - } - return self::hashEquals( - self::substr($a, 0, 32), - self::substr($b, 0, 32) - ); - } - - /** - * Calculate $a ^ $b for two strings. - * - * @internal You should not use this directly from another application - * - * @param string $a - * @param string $b - * @return string - * @throws TypeError - */ - public static function xorStrings($a, $b) - { - /* Type checks: */ - if (!is_string($a)) { - throw new TypeError('Argument 1 must be a string'); - } - if (!is_string($b)) { - throw new TypeError('Argument 2 must be a string'); - } - - return (string) ($a ^ $b); - } - - /** - * Returns whether or not mbstring.func_overload is in effect. - * - * @internal You should not use this directly from another application - * - * @return bool - */ - protected static function isMbStringOverride() - { - static $mbstring = null; - - if ($mbstring === null) { - $mbstring = extension_loaded('mbstring') - && - (ini_get('mbstring.func_overload') & MB_OVERLOAD_STRING); - } - /** @var bool $mbstring */ - - return $mbstring; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/X25519.php b/libraries/vendor/paragonie/sodium_compat/src/Core/X25519.php deleted file mode 100644 index 732bb65e96824..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/X25519.php +++ /dev/null @@ -1,327 +0,0 @@ -> 25; - $h[0] += self::mul($carry9, 19, 5); - $h[9] -= $carry9 << 25; - /** @var int $carry1 */ - $carry1 = ($h[1] + (1 << 24)) >> 25; - $h[2] += $carry1; - $h[1] -= $carry1 << 25; - /** @var int $carry3 */ - $carry3 = ($h[3] + (1 << 24)) >> 25; - $h[4] += $carry3; - $h[3] -= $carry3 << 25; - /** @var int $carry5 */ - $carry5 = ($h[5] + (1 << 24)) >> 25; - $h[6] += $carry5; - $h[5] -= $carry5 << 25; - /** @var int $carry7 */ - $carry7 = ($h[7] + (1 << 24)) >> 25; - $h[8] += $carry7; - $h[7] -= $carry7 << 25; - - /** @var int $carry0 */ - $carry0 = ($h[0] + (1 << 25)) >> 26; - $h[1] += $carry0; - $h[0] -= $carry0 << 26; - /** @var int $carry2 */ - $carry2 = ($h[2] + (1 << 25)) >> 26; - $h[3] += $carry2; - $h[2] -= $carry2 << 26; - /** @var int $carry4 */ - $carry4 = ($h[4] + (1 << 25)) >> 26; - $h[5] += $carry4; - $h[4] -= $carry4 << 26; - /** @var int $carry6 */ - $carry6 = ($h[6] + (1 << 25)) >> 26; - $h[7] += $carry6; - $h[6] -= $carry6 << 26; - /** @var int $carry8 */ - $carry8 = ($h[8] + (1 << 25)) >> 26; - $h[9] += $carry8; - $h[8] -= $carry8 << 26; - - foreach ($h as $i => $value) { - $h[$i] = (int) $value; - } - return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($h); - } - - /** - * @internal You should not use this directly from another application - * - * Inline comments preceded by # are from libsodium's ref10 code. - * - * @param string $n - * @param string $p - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function crypto_scalarmult_curve25519_ref10($n, $p) - { - # for (i = 0;i < 32;++i) e[i] = n[i]; - $e = '' . $n; - # e[0] &= 248; - $e[0] = self::intToChr( - self::chrToInt($e[0]) & 248 - ); - # e[31] &= 127; - # e[31] |= 64; - $e[31] = self::intToChr( - (self::chrToInt($e[31]) & 127) | 64 - ); - # fe_frombytes(x1,p); - $x1 = self::fe_frombytes($p); - # fe_1(x2); - $x2 = self::fe_1(); - # fe_0(z2); - $z2 = self::fe_0(); - # fe_copy(x3,x1); - $x3 = self::fe_copy($x1); - # fe_1(z3); - $z3 = self::fe_1(); - - # swap = 0; - /** @var int $swap */ - $swap = 0; - - # for (pos = 254;pos >= 0;--pos) { - for ($pos = 254; $pos >= 0; --$pos) { - # b = e[pos / 8] >> (pos & 7); - /** @var int $b */ - $b = self::chrToInt( - $e[(int) floor($pos / 8)] - ) >> ($pos & 7); - # b &= 1; - $b &= 1; - # swap ^= b; - $swap ^= $b; - # fe_cswap(x2,x3,swap); - self::fe_cswap($x2, $x3, $swap); - # fe_cswap(z2,z3,swap); - self::fe_cswap($z2, $z3, $swap); - # swap = b; - $swap = $b; - # fe_sub(tmp0,x3,z3); - $tmp0 = self::fe_sub($x3, $z3); - # fe_sub(tmp1,x2,z2); - $tmp1 = self::fe_sub($x2, $z2); - - # fe_add(x2,x2,z2); - $x2 = self::fe_add($x2, $z2); - - # fe_add(z2,x3,z3); - $z2 = self::fe_add($x3, $z3); - - # fe_mul(z3,tmp0,x2); - $z3 = self::fe_mul($tmp0, $x2); - - # fe_mul(z2,z2,tmp1); - $z2 = self::fe_mul($z2, $tmp1); - - # fe_sq(tmp0,tmp1); - $tmp0 = self::fe_sq($tmp1); - - # fe_sq(tmp1,x2); - $tmp1 = self::fe_sq($x2); - - # fe_add(x3,z3,z2); - $x3 = self::fe_add($z3, $z2); - - # fe_sub(z2,z3,z2); - $z2 = self::fe_sub($z3, $z2); - - # fe_mul(x2,tmp1,tmp0); - $x2 = self::fe_mul($tmp1, $tmp0); - - # fe_sub(tmp1,tmp1,tmp0); - $tmp1 = self::fe_sub($tmp1, $tmp0); - - # fe_sq(z2,z2); - $z2 = self::fe_sq($z2); - - # fe_mul121666(z3,tmp1); - $z3 = self::fe_mul121666($tmp1); - - # fe_sq(x3,x3); - $x3 = self::fe_sq($x3); - - # fe_add(tmp0,tmp0,z3); - $tmp0 = self::fe_add($tmp0, $z3); - - # fe_mul(z3,x1,z2); - $z3 = self::fe_mul($x1, $z2); - - # fe_mul(z2,tmp1,tmp0); - $z2 = self::fe_mul($tmp1, $tmp0); - } - - # fe_cswap(x2,x3,swap); - self::fe_cswap($x2, $x3, $swap); - - # fe_cswap(z2,z3,swap); - self::fe_cswap($z2, $z3, $swap); - - # fe_invert(z2,z2); - $z2 = self::fe_invert($z2); - - # fe_mul(x2,x2,z2); - $x2 = self::fe_mul($x2, $z2); - # fe_tobytes(q,x2); - return self::fe_tobytes($x2); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $edwardsY - * @param ParagonIE_Sodium_Core_Curve25519_Fe $edwardsZ - * @return ParagonIE_Sodium_Core_Curve25519_Fe - */ - public static function edwards_to_montgomery( - ParagonIE_Sodium_Core_Curve25519_Fe $edwardsY, - ParagonIE_Sodium_Core_Curve25519_Fe $edwardsZ - ) { - $tempX = self::fe_add($edwardsZ, $edwardsY); - $tempZ = self::fe_sub($edwardsZ, $edwardsY); - $tempZ = self::fe_invert($tempZ); - return self::fe_mul($tempX, $tempZ); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $n - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function crypto_scalarmult_curve25519_ref10_base($n) - { - # for (i = 0;i < 32;++i) e[i] = n[i]; - $e = '' . $n; - - # e[0] &= 248; - $e[0] = self::intToChr( - self::chrToInt($e[0]) & 248 - ); - - # e[31] &= 127; - # e[31] |= 64; - $e[31] = self::intToChr( - (self::chrToInt($e[31]) & 127) | 64 - ); - - $A = self::ge_scalarmult_base($e); - if ( - !($A->Y instanceof ParagonIE_Sodium_Core_Curve25519_Fe) - || - !($A->Z instanceof ParagonIE_Sodium_Core_Curve25519_Fe) - ) { - throw new TypeError('Null points encountered'); - } - $pk = self::edwards_to_montgomery($A->Y, $A->Z); - return self::fe_tobytes($pk); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core/XChaCha20.php b/libraries/vendor/paragonie/sodium_compat/src/Core/XChaCha20.php deleted file mode 100644 index a9b203ce57765..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core/XChaCha20.php +++ /dev/null @@ -1,64 +0,0 @@ -> - */ - public static $sigma = array( - array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), - array( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3), - array( 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4), - array( 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8), - array( 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13), - array( 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9), - array( 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11), - array( 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10), - array( 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5), - array( 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0), - array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), - array( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3) - ); - - const BLOCKBYTES = 128; - const OUTBYTES = 64; - const KEYBYTES = 64; - - /** - * Turn two 32-bit integers into a fixed array representing a 64-bit integer. - * - * @internal You should not use this directly from another application - * - * @param int $high - * @param int $low - * @return ParagonIE_Sodium_Core32_Int64 - * @throws SodiumException - * @throws TypeError - */ - public static function new64($high, $low) - { - return ParagonIE_Sodium_Core32_Int64::fromInts($low, $high); - } - - /** - * Convert an arbitrary number into an SplFixedArray of two 32-bit integers - * that represents a 64-bit integer. - * - * @internal You should not use this directly from another application - * - * @param int $num - * @return ParagonIE_Sodium_Core32_Int64 - * @throws SodiumException - * @throws TypeError - */ - protected static function to64($num) - { - list($hi, $lo) = self::numericTo64BitInteger($num); - return self::new64($hi, $lo); - } - - /** - * Adds two 64-bit integers together, returning their sum as a SplFixedArray - * containing two 32-bit integers (representing a 64-bit integer). - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Int64 $x - * @param ParagonIE_Sodium_Core32_Int64 $y - * @return ParagonIE_Sodium_Core32_Int64 - */ - protected static function add64($x, $y) - { - return $x->addInt64($y); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Int64 $x - * @param ParagonIE_Sodium_Core32_Int64 $y - * @param ParagonIE_Sodium_Core32_Int64 $z - * @return ParagonIE_Sodium_Core32_Int64 - */ - public static function add364($x, $y, $z) - { - return $x->addInt64($y)->addInt64($z); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Int64 $x - * @param ParagonIE_Sodium_Core32_Int64 $y - * @return ParagonIE_Sodium_Core32_Int64 - * @throws TypeError - */ - public static function xor64(ParagonIE_Sodium_Core32_Int64 $x, ParagonIE_Sodium_Core32_Int64 $y) - { - return $x->xorInt64($y); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Int64 $x - * @param int $c - * @return ParagonIE_Sodium_Core32_Int64 - * @throws SodiumException - * @throws TypeError - */ - public static function rotr64(ParagonIE_Sodium_Core32_Int64 $x, $c) - { - return $x->rotateRight($c); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @param int $i - * @return ParagonIE_Sodium_Core32_Int64 - * @throws SodiumException - * @throws TypeError - */ - public static function load64($x, $i) - { - /** @var int $l */ - $l = $x[$i] | ($x[$i+1]<<8) | ($x[$i+2]<<16) | ($x[$i+3]<<24); - /** @var int $h */ - $h = $x[$i+4] | ($x[$i+5]<<8) | ($x[$i+6]<<16) | ($x[$i+7]<<24); - return self::new64($h, $l); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @param int $i - * @param ParagonIE_Sodium_Core32_Int64 $u - * @return void - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedArrayOffset - */ - public static function store64(SplFixedArray $x, $i, ParagonIE_Sodium_Core32_Int64 $u) - { - $v = clone $u; - $maxLength = $x->getSize() - 1; - for ($j = 0; $j < 8; ++$j) { - $k = 3 - ($j >> 1); - $x[$i] = $v->limbs[$k] & 0xff; - if (++$i > $maxLength) { - return; - } - $v->limbs[$k] >>= 8; - } - } - - /** - * This just sets the $iv static variable. - * - * @internal You should not use this directly from another application - * - * @return void - * @throws SodiumException - * @throws TypeError - */ - public static function pseudoConstructor() - { - static $called = false; - if ($called) { - return; - } - self::$iv = new SplFixedArray(8); - self::$iv[0] = self::new64(0x6a09e667, 0xf3bcc908); - self::$iv[1] = self::new64(0xbb67ae85, 0x84caa73b); - self::$iv[2] = self::new64(0x3c6ef372, 0xfe94f82b); - self::$iv[3] = self::new64(0xa54ff53a, 0x5f1d36f1); - self::$iv[4] = self::new64(0x510e527f, 0xade682d1); - self::$iv[5] = self::new64(0x9b05688c, 0x2b3e6c1f); - self::$iv[6] = self::new64(0x1f83d9ab, 0xfb41bd6b); - self::$iv[7] = self::new64(0x5be0cd19, 0x137e2179); - - $called = true; - } - - /** - * Returns a fresh BLAKE2 context. - * - * @internal You should not use this directly from another application - * - * @return SplFixedArray - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedArrayOffset - * @throws SodiumException - * @throws TypeError - */ - protected static function context() - { - $ctx = new SplFixedArray(5); - $ctx[0] = new SplFixedArray(8); // h - $ctx[1] = new SplFixedArray(2); // t - $ctx[2] = new SplFixedArray(2); // f - $ctx[3] = new SplFixedArray(256); // buf - $ctx[4] = 0; // buflen - - for ($i = 8; $i--;) { - $ctx[0][$i] = self::$iv[$i]; - } - for ($i = 256; $i--;) { - $ctx[3][$i] = 0; - } - - $zero = self::new64(0, 0); - $ctx[1][0] = $zero; - $ctx[1][1] = $zero; - $ctx[2][0] = $zero; - $ctx[2][1] = $zero; - - return $ctx; - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $ctx - * @param SplFixedArray $buf - * @return void - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedAssignment - */ - protected static function compress(SplFixedArray $ctx, SplFixedArray $buf) - { - $m = new SplFixedArray(16); - $v = new SplFixedArray(16); - - for ($i = 16; $i--;) { - $m[$i] = self::load64($buf, $i << 3); - } - - for ($i = 8; $i--;) { - $v[$i] = $ctx[0][$i]; - } - - $v[ 8] = self::$iv[0]; - $v[ 9] = self::$iv[1]; - $v[10] = self::$iv[2]; - $v[11] = self::$iv[3]; - - $v[12] = self::xor64($ctx[1][0], self::$iv[4]); - $v[13] = self::xor64($ctx[1][1], self::$iv[5]); - $v[14] = self::xor64($ctx[2][0], self::$iv[6]); - $v[15] = self::xor64($ctx[2][1], self::$iv[7]); - - for ($r = 0; $r < 12; ++$r) { - $v = self::G($r, 0, 0, 4, 8, 12, $v, $m); - $v = self::G($r, 1, 1, 5, 9, 13, $v, $m); - $v = self::G($r, 2, 2, 6, 10, 14, $v, $m); - $v = self::G($r, 3, 3, 7, 11, 15, $v, $m); - $v = self::G($r, 4, 0, 5, 10, 15, $v, $m); - $v = self::G($r, 5, 1, 6, 11, 12, $v, $m); - $v = self::G($r, 6, 2, 7, 8, 13, $v, $m); - $v = self::G($r, 7, 3, 4, 9, 14, $v, $m); - } - - for ($i = 8; $i--;) { - $ctx[0][$i] = self::xor64( - $ctx[0][$i], self::xor64($v[$i], $v[$i+8]) - ); - } - } - - /** - * @internal You should not use this directly from another application - * - * @param int $r - * @param int $i - * @param int $a - * @param int $b - * @param int $c - * @param int $d - * @param SplFixedArray $v - * @param SplFixedArray $m - * @return SplFixedArray - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedArrayOffset - */ - public static function G($r, $i, $a, $b, $c, $d, SplFixedArray $v, SplFixedArray $m) - { - $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][$i << 1]]); - $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 32); - $v[$c] = self::add64($v[$c], $v[$d]); - $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 24); - $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][($i << 1) + 1]]); - $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 16); - $v[$c] = self::add64($v[$c], $v[$d]); - $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 63); - return $v; - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $ctx - * @param int $inc - * @return void - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - */ - public static function increment_counter($ctx, $inc) - { - if ($inc < 0) { - throw new SodiumException('Increasing by a negative number makes no sense.'); - } - $t = self::to64($inc); - # S->t is $ctx[1] in our implementation - - # S->t[0] = ( uint64_t )( t >> 0 ); - $ctx[1][0] = self::add64($ctx[1][0], $t); - - # S->t[1] += ( S->t[0] < inc ); - if (!($ctx[1][0] instanceof ParagonIE_Sodium_Core32_Int64)) { - throw new TypeError('Not an int64'); - } - /** @var ParagonIE_Sodium_Core32_Int64 $c*/ - $c = $ctx[1][0]; - if ($c->isLessThanInt($inc)) { - $ctx[1][1] = self::add64($ctx[1][1], self::to64(1)); - } - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $ctx - * @param SplFixedArray $p - * @param int $plen - * @return void - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedArrayOffset - * @psalm-suppress MixedMethodCall - * @psalm-suppress MixedOperand - */ - public static function update(SplFixedArray $ctx, SplFixedArray $p, $plen) - { - self::pseudoConstructor(); - - $offset = 0; - while ($plen > 0) { - $left = $ctx[4]; - $fill = 256 - $left; - - if ($plen > $fill) { - # memcpy( S->buf + left, in, fill ); /* Fill buffer */ - for ($i = $fill; $i--;) { - $ctx[3][$i + $left] = $p[$i + $offset]; - } - - # S->buflen += fill; - $ctx[4] += $fill; - - # blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); - self::increment_counter($ctx, 128); - - # blake2b_compress( S, S->buf ); /* Compress */ - self::compress($ctx, $ctx[3]); - - # memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); /* Shift buffer left */ - for ($i = 128; $i--;) { - $ctx[3][$i] = $ctx[3][$i + 128]; - } - - # S->buflen -= BLAKE2B_BLOCKBYTES; - $ctx[4] -= 128; - - # in += fill; - $offset += $fill; - - # inlen -= fill; - $plen -= $fill; - } else { - for ($i = $plen; $i--;) { - $ctx[3][$i + $left] = $p[$i + $offset]; - } - $ctx[4] += $plen; - $offset += $plen; - $plen -= $plen; - } - } - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $ctx - * @param SplFixedArray $out - * @return SplFixedArray - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedArrayOffset - * @psalm-suppress MixedMethodCall - * @psalm-suppress MixedOperand - */ - public static function finish(SplFixedArray $ctx, SplFixedArray $out) - { - self::pseudoConstructor(); - if ($ctx[4] > 128) { - self::increment_counter($ctx, 128); - self::compress($ctx, $ctx[3]); - $ctx[4] -= 128; - if ($ctx[4] > 128) { - throw new SodiumException('Failed to assert that buflen <= 128 bytes'); - } - for ($i = $ctx[4]; $i--;) { - $ctx[3][$i] = $ctx[3][$i + 128]; - } - } - - self::increment_counter($ctx, $ctx[4]); - $ctx[2][0] = self::new64(0xffffffff, 0xffffffff); - - for ($i = 256 - $ctx[4]; $i--;) { - /** @var int $i */ - $ctx[3][$i + $ctx[4]] = 0; - } - - self::compress($ctx, $ctx[3]); - - $i = (int) (($out->getSize() - 1) / 8); - for (; $i >= 0; --$i) { - self::store64($out, $i << 3, $ctx[0][$i]); - } - return $out; - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray|null $key - * @param int $outlen - * @return SplFixedArray - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedMethodCall - */ - public static function init($key = null, $outlen = 64) - { - self::pseudoConstructor(); - $klen = 0; - - if ($key !== null) { - if (count($key) > 64) { - throw new SodiumException('Invalid key size'); - } - $klen = count($key); - } - - if ($outlen > 64) { - throw new SodiumException('Invalid output size'); - } - - $ctx = self::context(); - - $p = new SplFixedArray(64); - for ($i = 64; --$i;) { - $p[$i] = 0; - } - - $p[0] = $outlen; // digest_length - $p[1] = $klen; // key_length - $p[2] = 1; // fanout - $p[3] = 1; // depth - - $ctx[0][0] = self::xor64( - $ctx[0][0], - self::load64($p, 0) - ); - - if ($klen > 0 && $key instanceof SplFixedArray) { - $block = new SplFixedArray(128); - for ($i = 128; $i--;) { - $block[$i] = 0; - } - for ($i = $klen; $i--;) { - $block[$i] = $key[$i]; - } - self::update($ctx, $block, 128); - } - - return $ctx; - } - - /** - * Convert a string into an SplFixedArray of integers - * - * @internal You should not use this directly from another application - * - * @param string $str - * @return SplFixedArray - */ - public static function stringToSplFixedArray($str = '') - { - $values = unpack('C*', $str); - return SplFixedArray::fromArray(array_values($values)); - } - - /** - * Convert an SplFixedArray of integers into a string - * - * @internal You should not use this directly from another application - * - * @param SplFixedArray $a - * @return string - */ - public static function SplFixedArrayToString(SplFixedArray $a) - { - /** - * @var array - */ - $arr = $a->toArray(); - $c = $a->count(); - array_unshift($arr, str_repeat('C', $c)); - return (string) (call_user_func_array('pack', $arr)); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray[SplFixedArray] $ctx - * @return string - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedMethodCall - */ - public static function contextToString(SplFixedArray $ctx) - { - $str = ''; - /** @var array $ctxA */ - $ctxA = $ctx[0]->toArray(); - - # uint64_t h[8]; - for ($i = 0; $i < 8; ++$i) { - if (!($ctxA[$i] instanceof ParagonIE_Sodium_Core32_Int64)) { - throw new TypeError('Not an instance of Int64'); - } - /** @var ParagonIE_Sodium_Core32_Int64 $ctxAi */ - $ctxAi = $ctxA[$i]; - $str .= $ctxAi->toString(); - } - - # uint64_t t[2]; - # uint64_t f[2]; - for ($i = 1; $i < 3; ++$i) { - /** @var array $ctxA */ - $ctxA = $ctx[$i]->toArray(); - /** @var ParagonIE_Sodium_Core32_Int64 $ctxA1 */ - $ctxA1 = $ctxA[0]; - /** @var ParagonIE_Sodium_Core32_Int64 $ctxA2 */ - $ctxA2 = $ctxA[1]; - - $str .= $ctxA1->toString(); - $str .= $ctxA2->toString(); - } - - # uint8_t buf[2 * 128]; - $str .= self::SplFixedArrayToString($ctx[3]); - - # size_t buflen; - $str .= implode('', array( - self::intToChr($ctx[4] & 0xff), - self::intToChr(($ctx[4] >> 8) & 0xff), - self::intToChr(($ctx[4] >> 16) & 0xff), - self::intToChr(($ctx[4] >> 24) & 0xff), - self::intToChr(($ctx[4] >> 32) & 0xff), - self::intToChr(($ctx[4] >> 40) & 0xff), - self::intToChr(($ctx[4] >> 48) & 0xff), - self::intToChr(($ctx[4] >> 56) & 0xff) - )); - # uint8_t last_node; - return $str . "\x00"; - } - - /** - * Creates an SplFixedArray containing other SplFixedArray elements, from - * a string (compatible with \Sodium\crypto_generichash_{init, update, final}) - * - * @internal You should not use this directly from another application - * - * @param string $string - * @return SplFixedArray - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - */ - public static function stringToContext($string) - { - $ctx = self::context(); - - # uint64_t h[8]; - for ($i = 0; $i < 8; ++$i) { - $ctx[0][$i] = ParagonIE_Sodium_Core32_Int64::fromString( - self::substr($string, (($i << 3) + 0), 8) - ); - } - - # uint64_t t[2]; - # uint64_t f[2]; - for ($i = 1; $i < 3; ++$i) { - $ctx[$i][1] = ParagonIE_Sodium_Core32_Int64::fromString( - self::substr($string, 72 + (($i - 1) << 4), 8) - ); - $ctx[$i][0] = ParagonIE_Sodium_Core32_Int64::fromString( - self::substr($string, 64 + (($i - 1) << 4), 8) - ); - } - - # uint8_t buf[2 * 128]; - $ctx[3] = self::stringToSplFixedArray(self::substr($string, 96, 256)); - - - # uint8_t buf[2 * 128]; - $int = 0; - for ($i = 0; $i < 8; ++$i) { - $int |= self::chrToInt($string[352 + $i]) << ($i << 3); - } - $ctx[4] = $int; - - return $ctx; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/ChaCha20.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/ChaCha20.php deleted file mode 100644 index 6f8c0bff9f11a..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/ChaCha20.php +++ /dev/null @@ -1,400 +0,0 @@ - - * @throws SodiumException - * @throws TypeError - */ - protected static function quarterRound( - ParagonIE_Sodium_Core32_Int32 $a, - ParagonIE_Sodium_Core32_Int32 $b, - ParagonIE_Sodium_Core32_Int32 $c, - ParagonIE_Sodium_Core32_Int32 $d - ) { - /** @var ParagonIE_Sodium_Core32_Int32 $a */ - /** @var ParagonIE_Sodium_Core32_Int32 $b */ - /** @var ParagonIE_Sodium_Core32_Int32 $c */ - /** @var ParagonIE_Sodium_Core32_Int32 $d */ - - # a = PLUS(a,b); d = ROTATE(XOR(d,a),16); - $a = $a->addInt32($b); - $d = $d->xorInt32($a)->rotateLeft(16); - - # c = PLUS(c,d); b = ROTATE(XOR(b,c),12); - $c = $c->addInt32($d); - $b = $b->xorInt32($c)->rotateLeft(12); - - # a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); - $a = $a->addInt32($b); - $d = $d->xorInt32($a)->rotateLeft(8); - - # c = PLUS(c,d); b = ROTATE(XOR(b,c), 7); - $c = $c->addInt32($d); - $b = $b->xorInt32($c)->rotateLeft(7); - - return array($a, $b, $c, $d); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_ChaCha20_Ctx $ctx - * @param string $message - * - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function encryptBytes( - ParagonIE_Sodium_Core32_ChaCha20_Ctx $ctx, - $message = '' - ) { - $bytes = self::strlen($message); - - /** @var ParagonIE_Sodium_Core32_Int32 $x0 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x1 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x2 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x3 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x4 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x5 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x6 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x7 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x8 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x9 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x10 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x11 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x12 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x13 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x14 */ - /** @var ParagonIE_Sodium_Core32_Int32 $x15 */ - - /* - j0 = ctx->input[0]; - j1 = ctx->input[1]; - j2 = ctx->input[2]; - j3 = ctx->input[3]; - j4 = ctx->input[4]; - j5 = ctx->input[5]; - j6 = ctx->input[6]; - j7 = ctx->input[7]; - j8 = ctx->input[8]; - j9 = ctx->input[9]; - j10 = ctx->input[10]; - j11 = ctx->input[11]; - j12 = ctx->input[12]; - j13 = ctx->input[13]; - j14 = ctx->input[14]; - j15 = ctx->input[15]; - */ - /** @var ParagonIE_Sodium_Core32_Int32 $j0 */ - $j0 = $ctx[0]; - /** @var ParagonIE_Sodium_Core32_Int32 $j1 */ - $j1 = $ctx[1]; - /** @var ParagonIE_Sodium_Core32_Int32 $j2 */ - $j2 = $ctx[2]; - /** @var ParagonIE_Sodium_Core32_Int32 $j3 */ - $j3 = $ctx[3]; - /** @var ParagonIE_Sodium_Core32_Int32 $j4 */ - $j4 = $ctx[4]; - /** @var ParagonIE_Sodium_Core32_Int32 $j5 */ - $j5 = $ctx[5]; - /** @var ParagonIE_Sodium_Core32_Int32 $j6 */ - $j6 = $ctx[6]; - /** @var ParagonIE_Sodium_Core32_Int32 $j7 */ - $j7 = $ctx[7]; - /** @var ParagonIE_Sodium_Core32_Int32 $j8 */ - $j8 = $ctx[8]; - /** @var ParagonIE_Sodium_Core32_Int32 $j9 */ - $j9 = $ctx[9]; - /** @var ParagonIE_Sodium_Core32_Int32 $j10 */ - $j10 = $ctx[10]; - /** @var ParagonIE_Sodium_Core32_Int32 $j11 */ - $j11 = $ctx[11]; - /** @var ParagonIE_Sodium_Core32_Int32 $j12 */ - $j12 = $ctx[12]; - /** @var ParagonIE_Sodium_Core32_Int32 $j13 */ - $j13 = $ctx[13]; - /** @var ParagonIE_Sodium_Core32_Int32 $j14 */ - $j14 = $ctx[14]; - /** @var ParagonIE_Sodium_Core32_Int32 $j15 */ - $j15 = $ctx[15]; - - $c = ''; - for (;;) { - if ($bytes < 64) { - $message .= str_repeat("\x00", 64 - $bytes); - } - - $x0 = clone $j0; - $x1 = clone $j1; - $x2 = clone $j2; - $x3 = clone $j3; - $x4 = clone $j4; - $x5 = clone $j5; - $x6 = clone $j6; - $x7 = clone $j7; - $x8 = clone $j8; - $x9 = clone $j9; - $x10 = clone $j10; - $x11 = clone $j11; - $x12 = clone $j12; - $x13 = clone $j13; - $x14 = clone $j14; - $x15 = clone $j15; - - # for (i = 20; i > 0; i -= 2) { - for ($i = 20; $i > 0; $i -= 2) { - # QUARTERROUND( x0, x4, x8, x12) - list($x0, $x4, $x8, $x12) = self::quarterRound($x0, $x4, $x8, $x12); - - # QUARTERROUND( x1, x5, x9, x13) - list($x1, $x5, $x9, $x13) = self::quarterRound($x1, $x5, $x9, $x13); - - # QUARTERROUND( x2, x6, x10, x14) - list($x2, $x6, $x10, $x14) = self::quarterRound($x2, $x6, $x10, $x14); - - # QUARTERROUND( x3, x7, x11, x15) - list($x3, $x7, $x11, $x15) = self::quarterRound($x3, $x7, $x11, $x15); - - # QUARTERROUND( x0, x5, x10, x15) - list($x0, $x5, $x10, $x15) = self::quarterRound($x0, $x5, $x10, $x15); - - # QUARTERROUND( x1, x6, x11, x12) - list($x1, $x6, $x11, $x12) = self::quarterRound($x1, $x6, $x11, $x12); - - # QUARTERROUND( x2, x7, x8, x13) - list($x2, $x7, $x8, $x13) = self::quarterRound($x2, $x7, $x8, $x13); - - # QUARTERROUND( x3, x4, x9, x14) - list($x3, $x4, $x9, $x14) = self::quarterRound($x3, $x4, $x9, $x14); - } - /* - x0 = PLUS(x0, j0); - x1 = PLUS(x1, j1); - x2 = PLUS(x2, j2); - x3 = PLUS(x3, j3); - x4 = PLUS(x4, j4); - x5 = PLUS(x5, j5); - x6 = PLUS(x6, j6); - x7 = PLUS(x7, j7); - x8 = PLUS(x8, j8); - x9 = PLUS(x9, j9); - x10 = PLUS(x10, j10); - x11 = PLUS(x11, j11); - x12 = PLUS(x12, j12); - x13 = PLUS(x13, j13); - x14 = PLUS(x14, j14); - x15 = PLUS(x15, j15); - */ - $x0 = $x0->addInt32($j0); - $x1 = $x1->addInt32($j1); - $x2 = $x2->addInt32($j2); - $x3 = $x3->addInt32($j3); - $x4 = $x4->addInt32($j4); - $x5 = $x5->addInt32($j5); - $x6 = $x6->addInt32($j6); - $x7 = $x7->addInt32($j7); - $x8 = $x8->addInt32($j8); - $x9 = $x9->addInt32($j9); - $x10 = $x10->addInt32($j10); - $x11 = $x11->addInt32($j11); - $x12 = $x12->addInt32($j12); - $x13 = $x13->addInt32($j13); - $x14 = $x14->addInt32($j14); - $x15 = $x15->addInt32($j15); - - /* - x0 = XOR(x0, LOAD32_LE(m + 0)); - x1 = XOR(x1, LOAD32_LE(m + 4)); - x2 = XOR(x2, LOAD32_LE(m + 8)); - x3 = XOR(x3, LOAD32_LE(m + 12)); - x4 = XOR(x4, LOAD32_LE(m + 16)); - x5 = XOR(x5, LOAD32_LE(m + 20)); - x6 = XOR(x6, LOAD32_LE(m + 24)); - x7 = XOR(x7, LOAD32_LE(m + 28)); - x8 = XOR(x8, LOAD32_LE(m + 32)); - x9 = XOR(x9, LOAD32_LE(m + 36)); - x10 = XOR(x10, LOAD32_LE(m + 40)); - x11 = XOR(x11, LOAD32_LE(m + 44)); - x12 = XOR(x12, LOAD32_LE(m + 48)); - x13 = XOR(x13, LOAD32_LE(m + 52)); - x14 = XOR(x14, LOAD32_LE(m + 56)); - x15 = XOR(x15, LOAD32_LE(m + 60)); - */ - $x0 = $x0->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 0, 4))); - $x1 = $x1->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 4, 4))); - $x2 = $x2->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 8, 4))); - $x3 = $x3->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 12, 4))); - $x4 = $x4->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 16, 4))); - $x5 = $x5->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 20, 4))); - $x6 = $x6->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 24, 4))); - $x7 = $x7->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 28, 4))); - $x8 = $x8->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 32, 4))); - $x9 = $x9->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 36, 4))); - $x10 = $x10->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 40, 4))); - $x11 = $x11->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 44, 4))); - $x12 = $x12->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 48, 4))); - $x13 = $x13->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 52, 4))); - $x14 = $x14->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 56, 4))); - $x15 = $x15->xorInt32(ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 60, 4))); - - /* - j12 = PLUSONE(j12); - if (!j12) { - j13 = PLUSONE(j13); - } - */ - /** @var ParagonIE_Sodium_Core32_Int32 $j12 */ - $j12 = $j12->addInt(1); - if ($j12->limbs[0] === 0 && $j12->limbs[1] === 0) { - $j13 = $j13->addInt(1); - } - - /* - STORE32_LE(c + 0, x0); - STORE32_LE(c + 4, x1); - STORE32_LE(c + 8, x2); - STORE32_LE(c + 12, x3); - STORE32_LE(c + 16, x4); - STORE32_LE(c + 20, x5); - STORE32_LE(c + 24, x6); - STORE32_LE(c + 28, x7); - STORE32_LE(c + 32, x8); - STORE32_LE(c + 36, x9); - STORE32_LE(c + 40, x10); - STORE32_LE(c + 44, x11); - STORE32_LE(c + 48, x12); - STORE32_LE(c + 52, x13); - STORE32_LE(c + 56, x14); - STORE32_LE(c + 60, x15); - */ - - $block = $x0->toReverseString() . - $x1->toReverseString() . - $x2->toReverseString() . - $x3->toReverseString() . - $x4->toReverseString() . - $x5->toReverseString() . - $x6->toReverseString() . - $x7->toReverseString() . - $x8->toReverseString() . - $x9->toReverseString() . - $x10->toReverseString() . - $x11->toReverseString() . - $x12->toReverseString() . - $x13->toReverseString() . - $x14->toReverseString() . - $x15->toReverseString(); - - /* Partial block */ - if ($bytes < 64) { - $c .= self::substr($block, 0, $bytes); - break; - } - - /* Full block */ - $c .= $block; - $bytes -= 64; - if ($bytes <= 0) { - break; - } - $message = self::substr($message, 64); - } - /* end for(;;) loop */ - - $ctx[12] = $j12; - $ctx[13] = $j13; - return $c; - } - - /** - * @internal You should not use this directly from another application - * - * @param int $len - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function stream($len = 64, $nonce = '', $key = '') - { - return self::encryptBytes( - new ParagonIE_Sodium_Core32_ChaCha20_Ctx($key, $nonce), - str_repeat("\x00", $len) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $len - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function ietfStream($len, $nonce = '', $key = '') - { - return self::encryptBytes( - new ParagonIE_Sodium_Core32_ChaCha20_IetfCtx($key, $nonce), - str_repeat("\x00", $len) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param string $nonce - * @param string $key - * @param string $ic - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function ietfStreamXorIc($message, $nonce = '', $key = '', $ic = '') - { - return self::encryptBytes( - new ParagonIE_Sodium_Core32_ChaCha20_IetfCtx($key, $nonce, $ic), - $message - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param string $nonce - * @param string $key - * @param string $ic - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function streamXorIc($message, $nonce = '', $key = '', $ic = '') - { - return self::encryptBytes( - new ParagonIE_Sodium_Core32_ChaCha20_Ctx($key, $nonce, $ic), - $message - ); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/Ctx.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/Ctx.php deleted file mode 100644 index 996acf23e5cfc..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/Ctx.php +++ /dev/null @@ -1,126 +0,0 @@ - - */ - protected $container; - - /** - * ParagonIE_Sodium_Core_ChaCha20_Ctx constructor. - * - * @internal You should not use this directly from another application - * - * @param string $key ChaCha20 key. - * @param string $iv Initialization Vector (a.k.a. nonce). - * @param string $counter The initial counter value. - * Defaults to 8 0x00 bytes. - * @throws InvalidArgumentException - * @throws SodiumException - * @throws TypeError - */ - public function __construct($key = '', $iv = '', $counter = '') - { - if (self::strlen($key) !== 32) { - throw new InvalidArgumentException('ChaCha20 expects a 256-bit key.'); - } - if (self::strlen($iv) !== 8) { - throw new InvalidArgumentException('ChaCha20 expects a 64-bit nonce.'); - } - $this->container = new SplFixedArray(16); - - /* "expand 32-byte k" as per ChaCha20 spec */ - $this->container[0] = new ParagonIE_Sodium_Core32_Int32(array(0x6170, 0x7865)); - $this->container[1] = new ParagonIE_Sodium_Core32_Int32(array(0x3320, 0x646e)); - $this->container[2] = new ParagonIE_Sodium_Core32_Int32(array(0x7962, 0x2d32)); - $this->container[3] = new ParagonIE_Sodium_Core32_Int32(array(0x6b20, 0x6574)); - - $this->container[4] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 0, 4)); - $this->container[5] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 4, 4)); - $this->container[6] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 8, 4)); - $this->container[7] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 12, 4)); - $this->container[8] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 16, 4)); - $this->container[9] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 20, 4)); - $this->container[10] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 24, 4)); - $this->container[11] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 28, 4)); - - if (empty($counter)) { - $this->container[12] = new ParagonIE_Sodium_Core32_Int32(); - $this->container[13] = new ParagonIE_Sodium_Core32_Int32(); - } else { - $this->container[12] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 0, 4)); - $this->container[13] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 4, 4)); - } - $this->container[14] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 0, 4)); - $this->container[15] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 4, 4)); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $offset - * @param int|ParagonIE_Sodium_Core32_Int32 $value - * @return void - */ - public function offsetSet($offset, $value) - { - if (!is_int($offset)) { - throw new InvalidArgumentException('Expected an integer'); - } - if ($value instanceof ParagonIE_Sodium_Core32_Int32) { - /* - } elseif (is_int($value)) { - $value = ParagonIE_Sodium_Core32_Int32::fromInt($value); - */ - } else { - throw new InvalidArgumentException('Expected an integer'); - } - $this->container[$offset] = $value; - } - - /** - * @internal You should not use this directly from another application - * - * @param mixed $offset - * @return bool - * @psalm-suppress MixedArrayOffset - */ - public function offsetExists($offset) - { - return isset($this->container[$offset]); - } - - /** - * @internal You should not use this directly from another application - * - * @param mixed $offset - * @return void - * @psalm-suppress MixedArrayOffset - */ - public function offsetUnset($offset) - { - unset($this->container[$offset]); - } - - /** - * @internal You should not use this directly from another application - * - * @param mixed $offset - * @return mixed|null - * @psalm-suppress MixedArrayOffset - */ - public function offsetGet($offset) - { - return isset($this->container[$offset]) - ? $this->container[$offset] - : null; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/IetfCtx.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/IetfCtx.php deleted file mode 100644 index eea08de85b0b3..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/IetfCtx.php +++ /dev/null @@ -1,39 +0,0 @@ -container[12] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 0, 4)); - } - $this->container[13] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 0, 4)); - $this->container[14] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 4, 4)); - $this->container[15] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 8, 4)); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519.php deleted file mode 100644 index 351a2f291f204..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519.php +++ /dev/null @@ -1,3543 +0,0 @@ -addInt32($g[$i]); - } - /** @var array $arr */ - return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray($arr); - } - - /** - * Constant-time conditional move. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $g - * @param int $b - * @return ParagonIE_Sodium_Core32_Curve25519_Fe - * @throws TypeError - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedMethodCall - */ - public static function fe_cmov( - ParagonIE_Sodium_Core32_Curve25519_Fe $f, - ParagonIE_Sodium_Core32_Curve25519_Fe $g, - $b = 0 - ) { - /** @var array $h */ - $h = array(); - for ($i = 0; $i < 10; ++$i) { - if (!($f[$i] instanceof ParagonIE_Sodium_Core32_Int32)) { - throw new TypeError('Expected Int32'); - } - if (!($g[$i] instanceof ParagonIE_Sodium_Core32_Int32)) { - throw new TypeError('Expected Int32'); - } - $h[$i] = $f[$i]->xorInt32( - $f[$i]->xorInt32($g[$i])->mask($b) - ); - } - /** @var array $h */ - return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray($h); - } - - /** - * Create a copy of a field element. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f - * @return ParagonIE_Sodium_Core32_Curve25519_Fe - */ - public static function fe_copy(ParagonIE_Sodium_Core32_Curve25519_Fe $f) - { - $h = clone $f; - return $h; - } - - /** - * Give: 32-byte string. - * Receive: A field element object to use for internal calculations. - * - * @internal You should not use this directly from another application - * - * @param string $s - * @return ParagonIE_Sodium_Core32_Curve25519_Fe - * @throws RangeException - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedMethodCall - */ - public static function fe_frombytes($s) - { - if (self::strlen($s) !== 32) { - throw new RangeException('Expected a 32-byte string.'); - } - /** @var ParagonIE_Sodium_Core32_Int32 $h0 */ - $h0 = ParagonIE_Sodium_Core32_Int32::fromInt( - self::load_4($s) - ); - /** @var ParagonIE_Sodium_Core32_Int32 $h1 */ - $h1 = ParagonIE_Sodium_Core32_Int32::fromInt( - self::load_3(self::substr($s, 4, 3)) << 6 - ); - /** @var ParagonIE_Sodium_Core32_Int32 $h2 */ - $h2 = ParagonIE_Sodium_Core32_Int32::fromInt( - self::load_3(self::substr($s, 7, 3)) << 5 - ); - /** @var ParagonIE_Sodium_Core32_Int32 $h3 */ - $h3 = ParagonIE_Sodium_Core32_Int32::fromInt( - self::load_3(self::substr($s, 10, 3)) << 3 - ); - /** @var ParagonIE_Sodium_Core32_Int32 $h4 */ - $h4 = ParagonIE_Sodium_Core32_Int32::fromInt( - self::load_3(self::substr($s, 13, 3)) << 2 - ); - /** @var ParagonIE_Sodium_Core32_Int32 $h5 */ - $h5 = ParagonIE_Sodium_Core32_Int32::fromInt( - self::load_4(self::substr($s, 16, 4)) - ); - /** @var ParagonIE_Sodium_Core32_Int32 $h6 */ - $h6 = ParagonIE_Sodium_Core32_Int32::fromInt( - self::load_3(self::substr($s, 20, 3)) << 7 - ); - /** @var ParagonIE_Sodium_Core32_Int32 $h7 */ - $h7 = ParagonIE_Sodium_Core32_Int32::fromInt( - self::load_3(self::substr($s, 23, 3)) << 5 - ); - /** @var ParagonIE_Sodium_Core32_Int32 $h8 */ - $h8 = ParagonIE_Sodium_Core32_Int32::fromInt( - self::load_3(self::substr($s, 26, 3)) << 4 - ); - /** @var ParagonIE_Sodium_Core32_Int32 $h9 */ - $h9 = ParagonIE_Sodium_Core32_Int32::fromInt( - (self::load_3(self::substr($s, 29, 3)) & 8388607) << 2 - ); - - $carry9 = $h9->addInt(1 << 24)->shiftRight(25); - $h0 = $h0->addInt32($carry9->mulInt(19, 5)); - $h9 = $h9->subInt32($carry9->shiftLeft(25)); - - $carry1 = $h1->addInt(1 << 24)->shiftRight(25); - $h2 = $h2->addInt32($carry1); - $h1 = $h1->subInt32($carry1->shiftLeft(25)); - - $carry3 = $h3->addInt(1 << 24)->shiftRight(25); - $h4 = $h4->addInt32($carry3); - $h3 = $h3->subInt32($carry3->shiftLeft(25)); - - $carry5 = $h5->addInt(1 << 24)->shiftRight(25); - $h6 = $h6->addInt32($carry5); - $h5 = $h5->subInt32($carry5->shiftLeft(25)); - - $carry7 = $h7->addInt(1 << 24)->shiftRight(25); - $h8 = $h8->addInt32($carry7); - $h7 = $h7->subInt32($carry7->shiftLeft(25)); - - $carry0 = $h0->addInt(1 << 25)->shiftRight(26); - $h1 = $h1->addInt32($carry0); - $h0 = $h0->subInt32($carry0->shiftLeft(26)); - - $carry2 = $h2->addInt(1 << 25)->shiftRight(26); - $h3 = $h3->addInt32($carry2); - $h2 = $h2->subInt32($carry2->shiftLeft(26)); - - $carry4 = $h4->addInt(1 << 25)->shiftRight(26); - $h5 = $h5->addInt32($carry4); - $h4 = $h4->subInt32($carry4->shiftLeft(26)); - - $carry6 = $h6->addInt(1 << 25)->shiftRight(26); - $h7 = $h7->addInt32($carry6); - $h6 = $h6->subInt32($carry6->shiftLeft(26)); - - $carry8 = $h8->addInt(1 << 25)->shiftRight(26); - $h9 = $h9->addInt32($carry8); - $h8 = $h8->subInt32($carry8->shiftLeft(26)); - - return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( - array($h0, $h1, $h2,$h3, $h4, $h5, $h6, $h7, $h8, $h9) - ); - } - - /** - * Convert a field element to a byte string. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $h - * @return string - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedMethodCall - */ - public static function fe_tobytes(ParagonIE_Sodium_Core32_Curve25519_Fe $h) - { - /** - * @var ParagonIE_Sodium_Core32_Int64[] $f - * @var ParagonIE_Sodium_Core32_Int64 $q - */ - $f = array(); - - for ($i = 0; $i < 10; ++$i) { - $f[$i] = $h[$i]->toInt64(); - } - - $q = $f[9]->mulInt(19, 5)->addInt(1 << 14)->shiftRight(25) - ->addInt64($f[0])->shiftRight(26) - ->addInt64($f[1])->shiftRight(25) - ->addInt64($f[2])->shiftRight(26) - ->addInt64($f[3])->shiftRight(25) - ->addInt64($f[4])->shiftRight(26) - ->addInt64($f[5])->shiftRight(25) - ->addInt64($f[6])->shiftRight(26) - ->addInt64($f[7])->shiftRight(25) - ->addInt64($f[8])->shiftRight(26) - ->addInt64($f[9])->shiftRight(25); - - $f[0] = $f[0]->addInt64($q->mulInt(19, 5)); - - $carry0 = $f[0]->shiftRight(26); - $f[1] = $f[1]->addInt64($carry0); - $f[0] = $f[0]->subInt64($carry0->shiftLeft(26)); - - $carry1 = $f[1]->shiftRight(25); - $f[2] = $f[2]->addInt64($carry1); - $f[1] = $f[1]->subInt64($carry1->shiftLeft(25)); - - $carry2 = $f[2]->shiftRight(26); - $f[3] = $f[3]->addInt64($carry2); - $f[2] = $f[2]->subInt64($carry2->shiftLeft(26)); - - $carry3 = $f[3]->shiftRight(25); - $f[4] = $f[4]->addInt64($carry3); - $f[3] = $f[3]->subInt64($carry3->shiftLeft(25)); - - $carry4 = $f[4]->shiftRight(26); - $f[5] = $f[5]->addInt64($carry4); - $f[4] = $f[4]->subInt64($carry4->shiftLeft(26)); - - $carry5 = $f[5]->shiftRight(25); - $f[6] = $f[6]->addInt64($carry5); - $f[5] = $f[5]->subInt64($carry5->shiftLeft(25)); - - $carry6 = $f[6]->shiftRight(26); - $f[7] = $f[7]->addInt64($carry6); - $f[6] = $f[6]->subInt64($carry6->shiftLeft(26)); - - $carry7 = $f[7]->shiftRight(25); - $f[8] = $f[8]->addInt64($carry7); - $f[7] = $f[7]->subInt64($carry7->shiftLeft(25)); - - $carry8 = $f[8]->shiftRight(26); - $f[9] = $f[9]->addInt64($carry8); - $f[8] = $f[8]->subInt64($carry8->shiftLeft(26)); - - $carry9 = $f[9]->shiftRight(25); - $f[9] = $f[9]->subInt64($carry9->shiftLeft(25)); - - /** @var int $h0 */ - $h0 = $f[0]->toInt32()->toInt(); - /** @var int $h1 */ - $h1 = $f[1]->toInt32()->toInt(); - /** @var int $h2 */ - $h2 = $f[2]->toInt32()->toInt(); - /** @var int $h3 */ - $h3 = $f[3]->toInt32()->toInt(); - /** @var int $h4 */ - $h4 = $f[4]->toInt32()->toInt(); - /** @var int $h5 */ - $h5 = $f[5]->toInt32()->toInt(); - /** @var int $h6 */ - $h6 = $f[6]->toInt32()->toInt(); - /** @var int $h7 */ - $h7 = $f[7]->toInt32()->toInt(); - /** @var int $h8 */ - $h8 = $f[8]->toInt32()->toInt(); - /** @var int $h9 */ - $h9 = $f[9]->toInt32()->toInt(); - - /** - * @var array - */ - $s = array( - (int) (($h0 >> 0) & 0xff), - (int) (($h0 >> 8) & 0xff), - (int) (($h0 >> 16) & 0xff), - (int) ((($h0 >> 24) | ($h1 << 2)) & 0xff), - (int) (($h1 >> 6) & 0xff), - (int) (($h1 >> 14) & 0xff), - (int) ((($h1 >> 22) | ($h2 << 3)) & 0xff), - (int) (($h2 >> 5) & 0xff), - (int) (($h2 >> 13) & 0xff), - (int) ((($h2 >> 21) | ($h3 << 5)) & 0xff), - (int) (($h3 >> 3) & 0xff), - (int) (($h3 >> 11) & 0xff), - (int) ((($h3 >> 19) | ($h4 << 6)) & 0xff), - (int) (($h4 >> 2) & 0xff), - (int) (($h4 >> 10) & 0xff), - (int) (($h4 >> 18) & 0xff), - (int) (($h5 >> 0) & 0xff), - (int) (($h5 >> 8) & 0xff), - (int) (($h5 >> 16) & 0xff), - (int) ((($h5 >> 24) | ($h6 << 1)) & 0xff), - (int) (($h6 >> 7) & 0xff), - (int) (($h6 >> 15) & 0xff), - (int) ((($h6 >> 23) | ($h7 << 3)) & 0xff), - (int) (($h7 >> 5) & 0xff), - (int) (($h7 >> 13) & 0xff), - (int) ((($h7 >> 21) | ($h8 << 4)) & 0xff), - (int) (($h8 >> 4) & 0xff), - (int) (($h8 >> 12) & 0xff), - (int) ((($h8 >> 20) | ($h9 << 6)) & 0xff), - (int) (($h9 >> 2) & 0xff), - (int) (($h9 >> 10) & 0xff), - (int) (($h9 >> 18) & 0xff) - ); - return self::intArrayToString($s); - } - - /** - * Is a field element negative? (1 = yes, 0 = no. Used in calculations.) - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f - * @return int - * @throws SodiumException - * @throws TypeError - */ - public static function fe_isnegative(ParagonIE_Sodium_Core32_Curve25519_Fe $f) - { - $str = self::fe_tobytes($f); - return (int) (self::chrToInt($str[0]) & 1); - } - - /** - * Returns 0 if this field element results in all NUL bytes. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function fe_isnonzero(ParagonIE_Sodium_Core32_Curve25519_Fe $f) - { - static $zero; - if ($zero === null) { - $zero = str_repeat("\x00", 32); - } - /** @var string $str */ - $str = self::fe_tobytes($f); - /** @var string $zero */ - return !self::verify_32($str, $zero); - } - - /** - * Multiply two field elements - * - * h = f * g - * - * @internal You should not use this directly from another application - * - * @security Is multiplication a source of timing leaks? If so, can we do - * anything to prevent that from happening? - * - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $g - * @return ParagonIE_Sodium_Core32_Curve25519_Fe - * @throws SodiumException - * @throws TypeError - */ - public static function fe_mul( - ParagonIE_Sodium_Core32_Curve25519_Fe $f, - ParagonIE_Sodium_Core32_Curve25519_Fe $g - ) { - /** - * @var ParagonIE_Sodium_Core32_Int32[] $f - * @var ParagonIE_Sodium_Core32_Int32[] $g - * @var ParagonIE_Sodium_Core32_Int64 $f0 - * @var ParagonIE_Sodium_Core32_Int64 $f1 - * @var ParagonIE_Sodium_Core32_Int64 $f2 - * @var ParagonIE_Sodium_Core32_Int64 $f3 - * @var ParagonIE_Sodium_Core32_Int64 $f4 - * @var ParagonIE_Sodium_Core32_Int64 $f5 - * @var ParagonIE_Sodium_Core32_Int64 $f6 - * @var ParagonIE_Sodium_Core32_Int64 $f7 - * @var ParagonIE_Sodium_Core32_Int64 $f8 - * @var ParagonIE_Sodium_Core32_Int64 $f9 - * @var ParagonIE_Sodium_Core32_Int64 $g0 - * @var ParagonIE_Sodium_Core32_Int64 $g1 - * @var ParagonIE_Sodium_Core32_Int64 $g2 - * @var ParagonIE_Sodium_Core32_Int64 $g3 - * @var ParagonIE_Sodium_Core32_Int64 $g4 - * @var ParagonIE_Sodium_Core32_Int64 $g5 - * @var ParagonIE_Sodium_Core32_Int64 $g6 - * @var ParagonIE_Sodium_Core32_Int64 $g7 - * @var ParagonIE_Sodium_Core32_Int64 $g8 - * @var ParagonIE_Sodium_Core32_Int64 $g9 - */ - $f0 = $f[0]->toInt64(); - $f1 = $f[1]->toInt64(); - $f2 = $f[2]->toInt64(); - $f3 = $f[3]->toInt64(); - $f4 = $f[4]->toInt64(); - $f5 = $f[5]->toInt64(); - $f6 = $f[6]->toInt64(); - $f7 = $f[7]->toInt64(); - $f8 = $f[8]->toInt64(); - $f9 = $f[9]->toInt64(); - $g0 = $g[0]->toInt64(); - $g1 = $g[1]->toInt64(); - $g2 = $g[2]->toInt64(); - $g3 = $g[3]->toInt64(); - $g4 = $g[4]->toInt64(); - $g5 = $g[5]->toInt64(); - $g6 = $g[6]->toInt64(); - $g7 = $g[7]->toInt64(); - $g8 = $g[8]->toInt64(); - $g9 = $g[9]->toInt64(); - $g1_19 = $g1->mulInt(19, 5); /* 2^4 <= 19 <= 2^5, but we only want 5 bits */ - $g2_19 = $g2->mulInt(19, 5); - $g3_19 = $g3->mulInt(19, 5); - $g4_19 = $g4->mulInt(19, 5); - $g5_19 = $g5->mulInt(19, 5); - $g6_19 = $g6->mulInt(19, 5); - $g7_19 = $g7->mulInt(19, 5); - $g8_19 = $g8->mulInt(19, 5); - $g9_19 = $g9->mulInt(19, 5); - /** @var ParagonIE_Sodium_Core32_Int64 $f1_2 */ - $f1_2 = $f1->shiftLeft(1); - /** @var ParagonIE_Sodium_Core32_Int64 $f3_2 */ - $f3_2 = $f3->shiftLeft(1); - /** @var ParagonIE_Sodium_Core32_Int64 $f5_2 */ - $f5_2 = $f5->shiftLeft(1); - /** @var ParagonIE_Sodium_Core32_Int64 $f7_2 */ - $f7_2 = $f7->shiftLeft(1); - /** @var ParagonIE_Sodium_Core32_Int64 $f9_2 */ - $f9_2 = $f9->shiftLeft(1); - $f0g0 = $f0->mulInt64($g0, 31); - $f0g1 = $f0->mulInt64($g1, 31); - $f0g2 = $f0->mulInt64($g2, 31); - $f0g3 = $f0->mulInt64($g3, 31); - $f0g4 = $f0->mulInt64($g4, 31); - $f0g5 = $f0->mulInt64($g5, 31); - $f0g6 = $f0->mulInt64($g6, 31); - $f0g7 = $f0->mulInt64($g7, 31); - $f0g8 = $f0->mulInt64($g8, 31); - $f0g9 = $f0->mulInt64($g9, 31); - $f1g0 = $f1->mulInt64($g0, 31); - $f1g1_2 = $f1_2->mulInt64($g1, 31); - $f1g2 = $f1->mulInt64($g2, 31); - $f1g3_2 = $f1_2->mulInt64($g3, 31); - $f1g4 = $f1->mulInt64($g4, 31); - $f1g5_2 = $f1_2->mulInt64($g5, 31); - $f1g6 = $f1->mulInt64($g6, 31); - $f1g7_2 = $f1_2->mulInt64($g7, 31); - $f1g8 = $f1->mulInt64($g8, 31); - $f1g9_38 = $g9_19->mulInt64($f1_2, 31); - $f2g0 = $f2->mulInt64($g0, 31); - $f2g1 = $f2->mulInt64($g1, 31); - $f2g2 = $f2->mulInt64($g2, 31); - $f2g3 = $f2->mulInt64($g3, 31); - $f2g4 = $f2->mulInt64($g4, 31); - $f2g5 = $f2->mulInt64($g5, 31); - $f2g6 = $f2->mulInt64($g6, 31); - $f2g7 = $f2->mulInt64($g7, 31); - $f2g8_19 = $g8_19->mulInt64($f2, 31); - $f2g9_19 = $g9_19->mulInt64($f2, 31); - $f3g0 = $f3->mulInt64($g0, 31); - $f3g1_2 = $f3_2->mulInt64($g1, 31); - $f3g2 = $f3->mulInt64($g2, 31); - $f3g3_2 = $f3_2->mulInt64($g3, 31); - $f3g4 = $f3->mulInt64($g4, 31); - $f3g5_2 = $f3_2->mulInt64($g5, 31); - $f3g6 = $f3->mulInt64($g6, 31); - $f3g7_38 = $g7_19->mulInt64($f3_2, 31); - $f3g8_19 = $g8_19->mulInt64($f3, 31); - $f3g9_38 = $g9_19->mulInt64($f3_2, 31); - $f4g0 = $f4->mulInt64($g0, 31); - $f4g1 = $f4->mulInt64($g1, 31); - $f4g2 = $f4->mulInt64($g2, 31); - $f4g3 = $f4->mulInt64($g3, 31); - $f4g4 = $f4->mulInt64($g4, 31); - $f4g5 = $f4->mulInt64($g5, 31); - $f4g6_19 = $g6_19->mulInt64($f4, 31); - $f4g7_19 = $g7_19->mulInt64($f4, 31); - $f4g8_19 = $g8_19->mulInt64($f4, 31); - $f4g9_19 = $g9_19->mulInt64($f4, 31); - $f5g0 = $f5->mulInt64($g0, 31); - $f5g1_2 = $f5_2->mulInt64($g1, 31); - $f5g2 = $f5->mulInt64($g2, 31); - $f5g3_2 = $f5_2->mulInt64($g3, 31); - $f5g4 = $f5->mulInt64($g4, 31); - $f5g5_38 = $g5_19->mulInt64($f5_2, 31); - $f5g6_19 = $g6_19->mulInt64($f5, 31); - $f5g7_38 = $g7_19->mulInt64($f5_2, 31); - $f5g8_19 = $g8_19->mulInt64($f5, 31); - $f5g9_38 = $g9_19->mulInt64($f5_2, 31); - $f6g0 = $f6->mulInt64($g0, 31); - $f6g1 = $f6->mulInt64($g1, 31); - $f6g2 = $f6->mulInt64($g2, 31); - $f6g3 = $f6->mulInt64($g3, 31); - $f6g4_19 = $g4_19->mulInt64($f6, 31); - $f6g5_19 = $g5_19->mulInt64($f6, 31); - $f6g6_19 = $g6_19->mulInt64($f6, 31); - $f6g7_19 = $g7_19->mulInt64($f6, 31); - $f6g8_19 = $g8_19->mulInt64($f6, 31); - $f6g9_19 = $g9_19->mulInt64($f6, 31); - $f7g0 = $f7->mulInt64($g0, 31); - $f7g1_2 = $g1->mulInt64($f7_2, 31); - $f7g2 = $f7->mulInt64($g2, 31); - $f7g3_38 = $g3_19->mulInt64($f7_2, 31); - $f7g4_19 = $g4_19->mulInt64($f7, 31); - $f7g5_38 = $g5_19->mulInt64($f7_2, 31); - $f7g6_19 = $g6_19->mulInt64($f7, 31); - $f7g7_38 = $g7_19->mulInt64($f7_2, 31); - $f7g8_19 = $g8_19->mulInt64($f7, 31); - $f7g9_38 = $g9_19->mulInt64($f7_2, 31); - $f8g0 = $f8->mulInt64($g0, 31); - $f8g1 = $f8->mulInt64($g1, 31); - $f8g2_19 = $f8->mulInt64($g2_19, 31); - $f8g3_19 = $f8->mulInt64($g3_19, 31); - $f8g4_19 = $f8->mulInt64($g4_19, 31); - $f8g5_19 = $f8->mulInt64($g5_19, 31); - $f8g6_19 = $f8->mulInt64($g6_19, 31); - $f8g7_19 = $f8->mulInt64($g7_19, 31); - $f8g8_19 = $f8->mulInt64($g8_19, 31); - $f8g9_19 = $f8->mulInt64($g9_19, 31); - $f9g0 = $f9->mulInt64($g0, 31); - $f9g1_38 = $f9_2->mulInt64($g1_19, 31); - $f9g2_19 = $f9->mulInt64($g2_19, 31); - $f9g3_38 = $f9_2->mulInt64($g3_19, 31); - $f9g4_19 = $f9->mulInt64($g4_19, 31); - $f9g5_38 = $f9_2->mulInt64($g5_19, 31); - $f9g6_19 = $f9->mulInt64($g6_19, 31); - $f9g7_38 = $f9_2->mulInt64($g7_19, 31); - $f9g8_19 = $f9->mulInt64($g8_19, 31); - $f9g9_38 = $f9_2->mulInt64($g9_19, 31); - - // $h0 = $f0g0 + $f1g9_38 + $f2g8_19 + $f3g7_38 + $f4g6_19 + $f5g5_38 + $f6g4_19 + $f7g3_38 + $f8g2_19 + $f9g1_38; - $h0 = $f0g0->addInt64($f1g9_38)->addInt64($f2g8_19)->addInt64($f3g7_38) - ->addInt64($f4g6_19)->addInt64($f5g5_38)->addInt64($f6g4_19) - ->addInt64($f7g3_38)->addInt64($f8g2_19)->addInt64($f9g1_38); - - // $h1 = $f0g1 + $f1g0 + $f2g9_19 + $f3g8_19 + $f4g7_19 + $f5g6_19 + $f6g5_19 + $f7g4_19 + $f8g3_19 + $f9g2_19; - $h1 = $f0g1->addInt64($f1g0)->addInt64($f2g9_19)->addInt64($f3g8_19) - ->addInt64($f4g7_19)->addInt64($f5g6_19)->addInt64($f6g5_19) - ->addInt64($f7g4_19)->addInt64($f8g3_19)->addInt64($f9g2_19); - - // $h2 = $f0g2 + $f1g1_2 + $f2g0 + $f3g9_38 + $f4g8_19 + $f5g7_38 + $f6g6_19 + $f7g5_38 + $f8g4_19 + $f9g3_38; - $h2 = $f0g2->addInt64($f1g1_2)->addInt64($f2g0)->addInt64($f3g9_38) - ->addInt64($f4g8_19)->addInt64($f5g7_38)->addInt64($f6g6_19) - ->addInt64($f7g5_38)->addInt64($f8g4_19)->addInt64($f9g3_38); - - // $h3 = $f0g3 + $f1g2 + $f2g1 + $f3g0 + $f4g9_19 + $f5g8_19 + $f6g7_19 + $f7g6_19 + $f8g5_19 + $f9g4_19; - $h3 = $f0g3->addInt64($f1g2)->addInt64($f2g1)->addInt64($f3g0) - ->addInt64($f4g9_19)->addInt64($f5g8_19)->addInt64($f6g7_19) - ->addInt64($f7g6_19)->addInt64($f8g5_19)->addInt64($f9g4_19); - - // $h4 = $f0g4 + $f1g3_2 + $f2g2 + $f3g1_2 + $f4g0 + $f5g9_38 + $f6g8_19 + $f7g7_38 + $f8g6_19 + $f9g5_38; - $h4 = $f0g4->addInt64($f1g3_2)->addInt64($f2g2)->addInt64($f3g1_2) - ->addInt64($f4g0)->addInt64($f5g9_38)->addInt64($f6g8_19) - ->addInt64($f7g7_38)->addInt64($f8g6_19)->addInt64($f9g5_38); - - // $h5 = $f0g5 + $f1g4 + $f2g3 + $f3g2 + $f4g1 + $f5g0 + $f6g9_19 + $f7g8_19 + $f8g7_19 + $f9g6_19; - $h5 = $f0g5->addInt64($f1g4)->addInt64($f2g3)->addInt64($f3g2) - ->addInt64($f4g1)->addInt64($f5g0)->addInt64($f6g9_19) - ->addInt64($f7g8_19)->addInt64($f8g7_19)->addInt64($f9g6_19); - - // $h6 = $f0g6 + $f1g5_2 + $f2g4 + $f3g3_2 + $f4g2 + $f5g1_2 + $f6g0 + $f7g9_38 + $f8g8_19 + $f9g7_38; - $h6 = $f0g6->addInt64($f1g5_2)->addInt64($f2g4)->addInt64($f3g3_2) - ->addInt64($f4g2)->addInt64($f5g1_2)->addInt64($f6g0) - ->addInt64($f7g9_38)->addInt64($f8g8_19)->addInt64($f9g7_38); - - // $h7 = $f0g7 + $f1g6 + $f2g5 + $f3g4 + $f4g3 + $f5g2 + $f6g1 + $f7g0 + $f8g9_19 + $f9g8_19; - $h7 = $f0g7->addInt64($f1g6)->addInt64($f2g5)->addInt64($f3g4) - ->addInt64($f4g3)->addInt64($f5g2)->addInt64($f6g1) - ->addInt64($f7g0)->addInt64($f8g9_19)->addInt64($f9g8_19); - - // $h8 = $f0g8 + $f1g7_2 + $f2g6 + $f3g5_2 + $f4g4 + $f5g3_2 + $f6g2 + $f7g1_2 + $f8g0 + $f9g9_38; - $h8 = $f0g8->addInt64($f1g7_2)->addInt64($f2g6)->addInt64($f3g5_2) - ->addInt64($f4g4)->addInt64($f5g3_2)->addInt64($f6g2) - ->addInt64($f7g1_2)->addInt64($f8g0)->addInt64($f9g9_38); - - // $h9 = $f0g9 + $f1g8 + $f2g7 + $f3g6 + $f4g5 + $f5g4 + $f6g3 + $f7g2 + $f8g1 + $f9g0 ; - $h9 = $f0g9->addInt64($f1g8)->addInt64($f2g7)->addInt64($f3g6) - ->addInt64($f4g5)->addInt64($f5g4)->addInt64($f6g3) - ->addInt64($f7g2)->addInt64($f8g1)->addInt64($f9g0); - - /** - * @var ParagonIE_Sodium_Core32_Int64 $h0 - * @var ParagonIE_Sodium_Core32_Int64 $h1 - * @var ParagonIE_Sodium_Core32_Int64 $h2 - * @var ParagonIE_Sodium_Core32_Int64 $h3 - * @var ParagonIE_Sodium_Core32_Int64 $h4 - * @var ParagonIE_Sodium_Core32_Int64 $h5 - * @var ParagonIE_Sodium_Core32_Int64 $h6 - * @var ParagonIE_Sodium_Core32_Int64 $h7 - * @var ParagonIE_Sodium_Core32_Int64 $h8 - * @var ParagonIE_Sodium_Core32_Int64 $h9 - * @var ParagonIE_Sodium_Core32_Int64 $carry0 - * @var ParagonIE_Sodium_Core32_Int64 $carry1 - * @var ParagonIE_Sodium_Core32_Int64 $carry2 - * @var ParagonIE_Sodium_Core32_Int64 $carry3 - * @var ParagonIE_Sodium_Core32_Int64 $carry4 - * @var ParagonIE_Sodium_Core32_Int64 $carry5 - * @var ParagonIE_Sodium_Core32_Int64 $carry6 - * @var ParagonIE_Sodium_Core32_Int64 $carry7 - * @var ParagonIE_Sodium_Core32_Int64 $carry8 - * @var ParagonIE_Sodium_Core32_Int64 $carry9 - */ - $carry0 = $h0->addInt(1 << 25)->shiftRight(26); - $h1 = $h1->addInt64($carry0); - $h0 = $h0->subInt64($carry0->shiftLeft(26)); - $carry4 = $h4->addInt(1 << 25)->shiftRight(26); - $h5 = $h5->addInt64($carry4); - $h4 = $h4->subInt64($carry4->shiftLeft(26)); - - $carry1 = $h1->addInt(1 << 24)->shiftRight(25); - $h2 = $h2->addInt64($carry1); - $h1 = $h1->subInt64($carry1->shiftLeft(25)); - $carry5 = $h5->addInt(1 << 24)->shiftRight(25); - $h6 = $h6->addInt64($carry5); - $h5 = $h5->subInt64($carry5->shiftLeft(25)); - - $carry2 = $h2->addInt(1 << 25)->shiftRight(26); - $h3 = $h3->addInt64($carry2); - $h2 = $h2->subInt64($carry2->shiftLeft(26)); - $carry6 = $h6->addInt(1 << 25)->shiftRight(26); - $h7 = $h7->addInt64($carry6); - $h6 = $h6->subInt64($carry6->shiftLeft(26)); - - $carry3 = $h3->addInt(1 << 24)->shiftRight(25); - $h4 = $h4->addInt64($carry3); - $h3 = $h3->subInt64($carry3->shiftLeft(25)); - $carry7 = $h7->addInt(1 << 24)->shiftRight(25); - $h8 = $h8->addInt64($carry7); - $h7 = $h7->subInt64($carry7->shiftLeft(25)); - - $carry4 = $h4->addInt(1 << 25)->shiftRight(26); - $h5 = $h5->addInt64($carry4); - $h4 = $h4->subInt64($carry4->shiftLeft(26)); - $carry8 = $h8->addInt(1 << 25)->shiftRight(26); - $h9 = $h9->addInt64($carry8); - $h8 = $h8->subInt64($carry8->shiftLeft(26)); - - $carry9 = $h9->addInt(1 << 24)->shiftRight(25); - $h0 = $h0->addInt64($carry9->mulInt(19)); - $h9 = $h9->subInt64($carry9->shiftLeft(25)); - - $carry0 = $h0->addInt(1 << 25)->shiftRight(26); - $h1 = $h1->addInt64($carry0); - $h0 = $h0->subInt64($carry0->shiftLeft(26)); - - return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( - array( - $h0->toInt32(), - $h1->toInt32(), - $h2->toInt32(), - $h3->toInt32(), - $h4->toInt32(), - $h5->toInt32(), - $h6->toInt32(), - $h7->toInt32(), - $h8->toInt32(), - $h9->toInt32() - ) - ); - } - - /** - * Get the negative values for each piece of the field element. - * - * h = -f - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f - * @return ParagonIE_Sodium_Core32_Curve25519_Fe - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedMethodCall - */ - public static function fe_neg(ParagonIE_Sodium_Core32_Curve25519_Fe $f) - { - $h = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - for ($i = 0; $i < 10; ++$i) { - $h[$i] = $h[$i]->subInt32($f[$i]); - } - return $h; - } - - /** - * Square a field element - * - * h = f * f - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f - * @return ParagonIE_Sodium_Core32_Curve25519_Fe - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedMethodCall - */ - public static function fe_sq(ParagonIE_Sodium_Core32_Curve25519_Fe $f) - { - /** @var ParagonIE_Sodium_Core32_Int64 $f0 */ - $f0 = $f[0]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f1 */ - $f1 = $f[1]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f2 */ - $f2 = $f[2]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f3 */ - $f3 = $f[3]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f4 */ - $f4 = $f[4]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f5 */ - $f5 = $f[5]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f6 */ - $f6 = $f[6]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f7 */ - $f7 = $f[7]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f8 */ - $f8 = $f[8]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f9 */ - $f9 = $f[9]->toInt64(); - - /** @var ParagonIE_Sodium_Core32_Int64 $f0_2 */ - $f0_2 = $f0->shiftLeft(1); - $f1_2 = $f1->shiftLeft(1); - $f2_2 = $f2->shiftLeft(1); - $f3_2 = $f3->shiftLeft(1); - $f4_2 = $f4->shiftLeft(1); - $f5_2 = $f5->shiftLeft(1); - $f6_2 = $f6->shiftLeft(1); - $f7_2 = $f7->shiftLeft(1); - $f5_38 = $f5->mulInt(38, 6); - $f6_19 = $f6->mulInt(19, 5); - $f7_38 = $f7->mulInt(38, 6); - $f8_19 = $f8->mulInt(19, 5); - $f9_38 = $f9->mulInt(38, 6); - /** @var ParagonIE_Sodium_Core32_Int64 $f0f0*/ - $f0f0 = $f0->mulInt64($f0, 31); - $f0f1_2 = $f0_2->mulInt64($f1, 31); - $f0f2_2 = $f0_2->mulInt64($f2, 31); - $f0f3_2 = $f0_2->mulInt64($f3, 31); - $f0f4_2 = $f0_2->mulInt64($f4, 31); - $f0f5_2 = $f0_2->mulInt64($f5, 31); - $f0f6_2 = $f0_2->mulInt64($f6, 31); - $f0f7_2 = $f0_2->mulInt64($f7, 31); - $f0f8_2 = $f0_2->mulInt64($f8, 31); - $f0f9_2 = $f0_2->mulInt64($f9, 31); - - $f1f1_2 = $f1_2->mulInt64($f1, 31); - $f1f2_2 = $f1_2->mulInt64($f2, 31); - $f1f3_4 = $f1_2->mulInt64($f3_2, 31); - $f1f4_2 = $f1_2->mulInt64($f4, 31); - $f1f5_4 = $f1_2->mulInt64($f5_2, 31); - $f1f6_2 = $f1_2->mulInt64($f6, 31); - $f1f7_4 = $f1_2->mulInt64($f7_2, 31); - $f1f8_2 = $f1_2->mulInt64($f8, 31); - $f1f9_76 = $f1_2->mulInt64($f9_38, 31); - - $f2f2 = $f2->mulInt64($f2, 31); - $f2f3_2 = $f2_2->mulInt64($f3, 31); - $f2f4_2 = $f2_2->mulInt64($f4, 31); - $f2f5_2 = $f2_2->mulInt64($f5, 31); - $f2f6_2 = $f2_2->mulInt64($f6, 31); - $f2f7_2 = $f2_2->mulInt64($f7, 31); - $f2f8_38 = $f8_19->mulInt64($f2_2, 31); - $f2f9_38 = $f9_38->mulInt64($f2, 31); - - $f3f3_2 = $f3_2->mulInt64($f3, 31); - $f3f4_2 = $f3_2->mulInt64($f4, 31); - $f3f5_4 = $f3_2->mulInt64($f5_2, 31); - $f3f6_2 = $f3_2->mulInt64($f6, 31); - $f3f7_76 = $f7_38->mulInt64($f3_2, 31); - $f3f8_38 = $f8_19->mulInt64($f3_2, 31); - $f3f9_76 = $f9_38->mulInt64($f3_2, 31); - - $f4f4 = $f4->mulInt64($f4, 31); - $f4f5_2 = $f4_2->mulInt64($f5, 31); - $f4f6_38 = $f4_2->mulInt64($f6_19, 31); - $f4f7_38 = $f7_38->mulInt64($f4, 31); - $f4f8_38 = $f8_19->mulInt64($f4_2, 31); - $f4f9_38 = $f9_38->mulInt64($f4, 31); - - $f5f5_38 = $f5_38->mulInt64($f5, 31); - $f5f6_38 = $f6_19->mulInt64($f5_2, 31); - $f5f7_76 = $f7_38->mulInt64($f5_2, 31); - $f5f8_38 = $f8_19->mulInt64($f5_2, 31); - $f5f9_76 = $f9_38->mulInt64($f5_2, 31); - - $f6f6_19 = $f6_19->mulInt64($f6, 31); - $f6f7_38 = $f7_38->mulInt64($f6, 31); - $f6f8_38 = $f8_19->mulInt64($f6_2, 31); - $f6f9_38 = $f6->mulInt64($f9_38, 31); - - $f7f7_38 = $f7->mulInt64($f7_38, 31); - $f7f8_38 = $f7_2->mulInt64($f8_19, 31); - $f7f9_76 = $f7_2->mulInt64($f9_38, 31); - - $f8f8_19 = $f8->mulInt64($f8_19, 31); - $f8f9_38 = $f8->mulInt64($f9_38, 31); - - $f9f9_38 = $f9->mulInt64($f9_38, 31); - - $h0 = $f0f0->addInt64($f1f9_76)->addInt64($f2f8_38)->addInt64($f3f7_76)->addInt64($f4f6_38)->addInt64($f5f5_38); - $h1 = $f0f1_2->addInt64($f2f9_38)->addInt64($f3f8_38)->addInt64($f4f7_38)->addInt64($f5f6_38); - $h2 = $f0f2_2->addInt64($f1f1_2)->addInt64($f3f9_76)->addInt64($f4f8_38)->addInt64($f5f7_76)->addInt64($f6f6_19); - $h3 = $f0f3_2->addInt64($f1f2_2)->addInt64($f4f9_38)->addInt64($f5f8_38)->addInt64($f6f7_38); - $h4 = $f0f4_2->addInt64($f1f3_4)->addInt64($f2f2)->addInt64($f5f9_76)->addInt64($f6f8_38)->addInt64($f7f7_38); - $h5 = $f0f5_2->addInt64($f1f4_2)->addInt64($f2f3_2)->addInt64($f6f9_38)->addInt64($f7f8_38); - $h6 = $f0f6_2->addInt64($f1f5_4)->addInt64($f2f4_2)->addInt64($f3f3_2)->addInt64($f7f9_76)->addInt64($f8f8_19); - $h7 = $f0f7_2->addInt64($f1f6_2)->addInt64($f2f5_2)->addInt64($f3f4_2)->addInt64($f8f9_38); - $h8 = $f0f8_2->addInt64($f1f7_4)->addInt64($f2f6_2)->addInt64($f3f5_4)->addInt64($f4f4)->addInt64($f9f9_38); - $h9 = $f0f9_2->addInt64($f1f8_2)->addInt64($f2f7_2)->addInt64($f3f6_2)->addInt64($f4f5_2); - - /** - * @var ParagonIE_Sodium_Core32_Int64 $h0 - * @var ParagonIE_Sodium_Core32_Int64 $h1 - * @var ParagonIE_Sodium_Core32_Int64 $h2 - * @var ParagonIE_Sodium_Core32_Int64 $h3 - * @var ParagonIE_Sodium_Core32_Int64 $h4 - * @var ParagonIE_Sodium_Core32_Int64 $h5 - * @var ParagonIE_Sodium_Core32_Int64 $h6 - * @var ParagonIE_Sodium_Core32_Int64 $h7 - * @var ParagonIE_Sodium_Core32_Int64 $h8 - * @var ParagonIE_Sodium_Core32_Int64 $h9 - */ - - $carry0 = $h0->addInt(1 << 25)->shiftRight(26); - $h1 = $h1->addInt64($carry0); - $h0 = $h0->subInt64($carry0->shiftLeft(26)); - - $carry4 = $h4->addInt(1 << 25)->shiftRight(26); - $h5 = $h5->addInt64($carry4); - $h4 = $h4->subInt64($carry4->shiftLeft(26)); - - $carry1 = $h1->addInt(1 << 24)->shiftRight(25); - $h2 = $h2->addInt64($carry1); - $h1 = $h1->subInt64($carry1->shiftLeft(25)); - - $carry5 = $h5->addInt(1 << 24)->shiftRight(25); - $h6 = $h6->addInt64($carry5); - $h5 = $h5->subInt64($carry5->shiftLeft(25)); - - $carry2 = $h2->addInt(1 << 25)->shiftRight(26); - $h3 = $h3->addInt64($carry2); - $h2 = $h2->subInt64($carry2->shiftLeft(26)); - - $carry6 = $h6->addInt(1 << 25)->shiftRight(26); - $h7 = $h7->addInt64($carry6); - $h6 = $h6->subInt64($carry6->shiftLeft(26)); - - $carry3 = $h3->addInt(1 << 24)->shiftRight(25); - $h4 = $h4->addInt64($carry3); - $h3 = $h3->subInt64($carry3->shiftLeft(25)); - - $carry7 = $h7->addInt(1 << 24)->shiftRight(25); - $h8 = $h8->addInt64($carry7); - $h7 = $h7->subInt64($carry7->shiftLeft(25)); - - $carry4 = $h4->addInt(1 << 25)->shiftRight(26); - $h5 = $h5->addInt64($carry4); - $h4 = $h4->subInt64($carry4->shiftLeft(26)); - - $carry8 = $h8->addInt(1 << 25)->shiftRight(26); - $h9 = $h9->addInt64($carry8); - $h8 = $h8->subInt64($carry8->shiftLeft(26)); - - $carry9 = $h9->addInt(1 << 24)->shiftRight(25); - $h0 = $h0->addInt64($carry9->mulInt(19)); - $h9 = $h9->subInt64($carry9->shiftLeft(25)); - - $carry0 = $h0->addInt(1 << 25)->shiftRight(26); - $h1 = $h1->addInt64($carry0); - $h0 = $h0->subInt64($carry0->shiftLeft(26)); - - return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( - array( - $h0->toInt32(), - $h1->toInt32(), - $h2->toInt32(), - $h3->toInt32(), - $h4->toInt32(), - $h5->toInt32(), - $h6->toInt32(), - $h7->toInt32(), - $h8->toInt32(), - $h9->toInt32() - ) - ); - } - - /** - * Square and double a field element - * - * h = 2 * f * f - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f - * @return ParagonIE_Sodium_Core32_Curve25519_Fe - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedMethodCall - */ - public static function fe_sq2(ParagonIE_Sodium_Core32_Curve25519_Fe $f) - { - /** @var ParagonIE_Sodium_Core32_Int64 $f0 */ - $f0 = $f[0]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f1 */ - $f1 = $f[1]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f2 */ - $f2 = $f[2]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f3 */ - $f3 = $f[3]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f4 */ - $f4 = $f[4]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f5 */ - $f5 = $f[5]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f6 */ - $f6 = $f[6]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f7 */ - $f7 = $f[7]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f8 */ - $f8 = $f[8]->toInt64(); - /** @var ParagonIE_Sodium_Core32_Int64 $f9 */ - $f9 = $f[9]->toInt64(); - - $f0_2 = $f0->shiftLeft(1); - $f1_2 = $f1->shiftLeft(1); - $f2_2 = $f2->shiftLeft(1); - $f3_2 = $f3->shiftLeft(1); - $f4_2 = $f4->shiftLeft(1); - $f5_2 = $f5->shiftLeft(1); - $f6_2 = $f6->shiftLeft(1); - $f7_2 = $f7->shiftLeft(1); - $f5_38 = $f5->mulInt(38, 6); /* 1.959375*2^30 */ - $f6_19 = $f6->mulInt(19, 5); /* 1.959375*2^30 */ - $f7_38 = $f7->mulInt(38, 6); /* 1.959375*2^30 */ - $f8_19 = $f8->mulInt(19, 5); /* 1.959375*2^30 */ - $f9_38 = $f9->mulInt(38, 6); /* 1.959375*2^30 */ - $f0f0 = $f0->mulInt64($f0, 31); - $f0f1_2 = $f0_2->mulInt64($f1, 31); - $f0f2_2 = $f0_2->mulInt64($f2, 31); - $f0f3_2 = $f0_2->mulInt64($f3, 31); - $f0f4_2 = $f0_2->mulInt64($f4, 31); - $f0f5_2 = $f0_2->mulInt64($f5, 31); - $f0f6_2 = $f0_2->mulInt64($f6, 31); - $f0f7_2 = $f0_2->mulInt64($f7, 31); - $f0f8_2 = $f0_2->mulInt64($f8, 31); - $f0f9_2 = $f0_2->mulInt64($f9, 31); - $f1f1_2 = $f1_2->mulInt64($f1, 31); - $f1f2_2 = $f1_2->mulInt64($f2, 31); - $f1f3_4 = $f1_2->mulInt64($f3_2, 31); - $f1f4_2 = $f1_2->mulInt64($f4, 31); - $f1f5_4 = $f1_2->mulInt64($f5_2, 31); - $f1f6_2 = $f1_2->mulInt64($f6, 31); - $f1f7_4 = $f1_2->mulInt64($f7_2, 31); - $f1f8_2 = $f1_2->mulInt64($f8, 31); - $f1f9_76 = $f1_2->mulInt64($f9_38, 31); - $f2f2 = $f2->mulInt64($f2, 31); - $f2f3_2 = $f2_2->mulInt64($f3, 31); - $f2f4_2 = $f2_2->mulInt64($f4, 31); - $f2f5_2 = $f2_2->mulInt64($f5, 31); - $f2f6_2 = $f2_2->mulInt64($f6, 31); - $f2f7_2 = $f2_2->mulInt64($f7, 31); - $f2f8_38 = $f2_2->mulInt64($f8_19, 31); - $f2f9_38 = $f2->mulInt64($f9_38, 31); - $f3f3_2 = $f3_2->mulInt64($f3, 31); - $f3f4_2 = $f3_2->mulInt64($f4, 31); - $f3f5_4 = $f3_2->mulInt64($f5_2, 31); - $f3f6_2 = $f3_2->mulInt64($f6, 31); - $f3f7_76 = $f3_2->mulInt64($f7_38, 31); - $f3f8_38 = $f3_2->mulInt64($f8_19, 31); - $f3f9_76 = $f3_2->mulInt64($f9_38, 31); - $f4f4 = $f4->mulInt64($f4, 31); - $f4f5_2 = $f4_2->mulInt64($f5, 31); - $f4f6_38 = $f4_2->mulInt64($f6_19, 31); - $f4f7_38 = $f4->mulInt64($f7_38, 31); - $f4f8_38 = $f4_2->mulInt64($f8_19, 31); - $f4f9_38 = $f4->mulInt64($f9_38, 31); - $f5f5_38 = $f5->mulInt64($f5_38, 31); - $f5f6_38 = $f5_2->mulInt64($f6_19, 31); - $f5f7_76 = $f5_2->mulInt64($f7_38, 31); - $f5f8_38 = $f5_2->mulInt64($f8_19, 31); - $f5f9_76 = $f5_2->mulInt64($f9_38, 31); - $f6f6_19 = $f6->mulInt64($f6_19, 31); - $f6f7_38 = $f6->mulInt64($f7_38, 31); - $f6f8_38 = $f6_2->mulInt64($f8_19, 31); - $f6f9_38 = $f6->mulInt64($f9_38, 31); - $f7f7_38 = $f7->mulInt64($f7_38, 31); - $f7f8_38 = $f7_2->mulInt64($f8_19, 31); - $f7f9_76 = $f7_2->mulInt64($f9_38, 31); - $f8f8_19 = $f8->mulInt64($f8_19, 31); - $f8f9_38 = $f8->mulInt64($f9_38, 31); - $f9f9_38 = $f9->mulInt64($f9_38, 31); - - $h0 = $f0f0->addInt64($f1f9_76)->addInt64($f2f8_38)->addInt64($f3f7_76)->addInt64($f4f6_38)->addInt64($f5f5_38); - $h1 = $f0f1_2->addInt64($f2f9_38)->addInt64($f3f8_38)->addInt64($f4f7_38)->addInt64($f5f6_38); - $h2 = $f0f2_2->addInt64($f1f1_2)->addInt64($f3f9_76)->addInt64($f4f8_38)->addInt64($f5f7_76)->addInt64($f6f6_19); - $h3 = $f0f3_2->addInt64($f1f2_2)->addInt64($f4f9_38)->addInt64($f5f8_38)->addInt64($f6f7_38); - $h4 = $f0f4_2->addInt64($f1f3_4)->addInt64($f2f2)->addInt64($f5f9_76)->addInt64($f6f8_38)->addInt64($f7f7_38); - $h5 = $f0f5_2->addInt64($f1f4_2)->addInt64($f2f3_2)->addInt64($f6f9_38)->addInt64($f7f8_38); - $h6 = $f0f6_2->addInt64($f1f5_4)->addInt64($f2f4_2)->addInt64($f3f3_2)->addInt64($f7f9_76)->addInt64($f8f8_19); - $h7 = $f0f7_2->addInt64($f1f6_2)->addInt64($f2f5_2)->addInt64($f3f4_2)->addInt64($f8f9_38); - $h8 = $f0f8_2->addInt64($f1f7_4)->addInt64($f2f6_2)->addInt64($f3f5_4)->addInt64($f4f4)->addInt64($f9f9_38); - $h9 = $f0f9_2->addInt64($f1f8_2)->addInt64($f2f7_2)->addInt64($f3f6_2)->addInt64($f4f5_2); - - /* - $h6 = (int) ($f0f6_2 + $f1f5_4 + $f2f4_2 + $f3f3_2 + $f7f9_76 + $f8f8_19); - $h7 = (int) ($f0f7_2 + $f1f6_2 + $f2f5_2 + $f3f4_2 + $f8f9_38); - $h8 = (int) ($f0f8_2 + $f1f7_4 + $f2f6_2 + $f3f5_4 + $f4f4 + $f9f9_38); - */ - - /** - * @var ParagonIE_Sodium_Core32_Int64 $h0 - * @var ParagonIE_Sodium_Core32_Int64 $h1 - * @var ParagonIE_Sodium_Core32_Int64 $h2 - * @var ParagonIE_Sodium_Core32_Int64 $h3 - * @var ParagonIE_Sodium_Core32_Int64 $h4 - * @var ParagonIE_Sodium_Core32_Int64 $h5 - * @var ParagonIE_Sodium_Core32_Int64 $h6 - * @var ParagonIE_Sodium_Core32_Int64 $h7 - * @var ParagonIE_Sodium_Core32_Int64 $h8 - * @var ParagonIE_Sodium_Core32_Int64 $h9 - */ - $h0 = $h0->shiftLeft(1); - $h1 = $h1->shiftLeft(1); - $h2 = $h2->shiftLeft(1); - $h3 = $h3->shiftLeft(1); - $h4 = $h4->shiftLeft(1); - $h5 = $h5->shiftLeft(1); - $h6 = $h6->shiftLeft(1); - $h7 = $h7->shiftLeft(1); - $h8 = $h8->shiftLeft(1); - $h9 = $h9->shiftLeft(1); - - $carry0 = $h0->addInt(1 << 25)->shiftRight(26); - $h1 = $h1->addInt64($carry0); - $h0 = $h0->subInt64($carry0->shiftLeft(26)); - $carry4 = $h4->addInt(1 << 25)->shiftRight(26); - $h5 = $h5->addInt64($carry4); - $h4 = $h4->subInt64($carry4->shiftLeft(26)); - - $carry1 = $h1->addInt(1 << 24)->shiftRight(25); - $h2 = $h2->addInt64($carry1); - $h1 = $h1->subInt64($carry1->shiftLeft(25)); - $carry5 = $h5->addInt(1 << 24)->shiftRight(25); - $h6 = $h6->addInt64($carry5); - $h5 = $h5->subInt64($carry5->shiftLeft(25)); - - $carry2 = $h2->addInt(1 << 25)->shiftRight(26); - $h3 = $h3->addInt64($carry2); - $h2 = $h2->subInt64($carry2->shiftLeft(26)); - $carry6 = $h6->addInt(1 << 25)->shiftRight(26); - $h7 = $h7->addInt64($carry6); - $h6 = $h6->subInt64($carry6->shiftLeft(26)); - - $carry3 = $h3->addInt(1 << 24)->shiftRight(25); - $h4 = $h4->addInt64($carry3); - $h3 = $h3->subInt64($carry3->shiftLeft(25)); - $carry7 = $h7->addInt(1 << 24)->shiftRight(25); - $h8 = $h8->addInt64($carry7); - $h7 = $h7->subInt64($carry7->shiftLeft(25)); - - $carry4 = $h4->addInt(1 << 25)->shiftRight(26); - $h5 = $h5->addInt64($carry4); - $h4 = $h4->subInt64($carry4->shiftLeft(26)); - $carry8 = $h8->addInt(1 << 25)->shiftRight(26); - $h9 = $h9->addInt64($carry8); - $h8 = $h8->subInt64($carry8->shiftLeft(26)); - - $carry9 = $h9->addInt(1 << 24)->shiftRight(25); - $h0 = $h0->addInt64($carry9->mulInt(19)); - $h9 = $h9->subInt64($carry9->shiftLeft(25)); - - $carry0 = $h0->addInt(1 << 25)->shiftRight(26); - $h1 = $h1->addInt64($carry0); - $h0 = $h0->subInt64($carry0->shiftLeft(26)); - - return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( - array( - $h0->toInt32(), - $h1->toInt32(), - $h2->toInt32(), - $h3->toInt32(), - $h4->toInt32(), - $h5->toInt32(), - $h6->toInt32(), - $h7->toInt32(), - $h8->toInt32(), - $h9->toInt32() - ) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $Z - * @return ParagonIE_Sodium_Core32_Curve25519_Fe - * @throws SodiumException - * @throws TypeError - */ - public static function fe_invert(ParagonIE_Sodium_Core32_Curve25519_Fe $Z) - { - $z = clone $Z; - $t0 = self::fe_sq($z); - $t1 = self::fe_sq($t0); - $t1 = self::fe_sq($t1); - $t1 = self::fe_mul($z, $t1); - $t0 = self::fe_mul($t0, $t1); - $t2 = self::fe_sq($t0); - $t1 = self::fe_mul($t1, $t2); - $t2 = self::fe_sq($t1); - for ($i = 1; $i < 5; ++$i) { - $t2 = self::fe_sq($t2); - } - $t1 = self::fe_mul($t2, $t1); - $t2 = self::fe_sq($t1); - for ($i = 1; $i < 10; ++$i) { - $t2 = self::fe_sq($t2); - } - $t2 = self::fe_mul($t2, $t1); - $t3 = self::fe_sq($t2); - for ($i = 1; $i < 20; ++$i) { - $t3 = self::fe_sq($t3); - } - $t2 = self::fe_mul($t3, $t2); - $t2 = self::fe_sq($t2); - for ($i = 1; $i < 10; ++$i) { - $t2 = self::fe_sq($t2); - } - $t1 = self::fe_mul($t2, $t1); - $t2 = self::fe_sq($t1); - for ($i = 1; $i < 50; ++$i) { - $t2 = self::fe_sq($t2); - } - $t2 = self::fe_mul($t2, $t1); - $t3 = self::fe_sq($t2); - for ($i = 1; $i < 100; ++$i) { - $t3 = self::fe_sq($t3); - } - $t2 = self::fe_mul($t3, $t2); - $t2 = self::fe_sq($t2); - for ($i = 1; $i < 50; ++$i) { - $t2 = self::fe_sq($t2); - } - $t1 = self::fe_mul($t2, $t1); - $t1 = self::fe_sq($t1); - for ($i = 1; $i < 5; ++$i) { - $t1 = self::fe_sq($t1); - } - return self::fe_mul($t1, $t0); - } - - /** - * @internal You should not use this directly from another application - * - * @ref https://github.com/jedisct1/libsodium/blob/68564326e1e9dc57ef03746f85734232d20ca6fb/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1054-L1106 - * - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $z - * @return ParagonIE_Sodium_Core32_Curve25519_Fe - * @throws SodiumException - * @throws TypeError - */ - public static function fe_pow22523(ParagonIE_Sodium_Core32_Curve25519_Fe $z) - { - # fe_sq(t0, z); - # fe_sq(t1, t0); - # fe_sq(t1, t1); - # fe_mul(t1, z, t1); - # fe_mul(t0, t0, t1); - # fe_sq(t0, t0); - # fe_mul(t0, t1, t0); - # fe_sq(t1, t0); - $t0 = self::fe_sq($z); - $t1 = self::fe_sq($t0); - $t1 = self::fe_sq($t1); - $t1 = self::fe_mul($z, $t1); - $t0 = self::fe_mul($t0, $t1); - $t0 = self::fe_sq($t0); - $t0 = self::fe_mul($t1, $t0); - $t1 = self::fe_sq($t0); - - # for (i = 1; i < 5; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 5; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t0, t1, t0); - # fe_sq(t1, t0); - $t0 = self::fe_mul($t1, $t0); - $t1 = self::fe_sq($t0); - - # for (i = 1; i < 10; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 10; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t1, t1, t0); - # fe_sq(t2, t1); - $t1 = self::fe_mul($t1, $t0); - $t2 = self::fe_sq($t1); - - # for (i = 1; i < 20; ++i) { - # fe_sq(t2, t2); - # } - for ($i = 1; $i < 20; ++$i) { - $t2 = self::fe_sq($t2); - } - - # fe_mul(t1, t2, t1); - # fe_sq(t1, t1); - $t1 = self::fe_mul($t2, $t1); - $t1 = self::fe_sq($t1); - - # for (i = 1; i < 10; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 10; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t0, t1, t0); - # fe_sq(t1, t0); - $t0 = self::fe_mul($t1, $t0); - $t1 = self::fe_sq($t0); - - # for (i = 1; i < 50; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 50; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t1, t1, t0); - # fe_sq(t2, t1); - $t1 = self::fe_mul($t1, $t0); - $t2 = self::fe_sq($t1); - - # for (i = 1; i < 100; ++i) { - # fe_sq(t2, t2); - # } - for ($i = 1; $i < 100; ++$i) { - $t2 = self::fe_sq($t2); - } - - # fe_mul(t1, t2, t1); - # fe_sq(t1, t1); - $t1 = self::fe_mul($t2, $t1); - $t1 = self::fe_sq($t1); - - # for (i = 1; i < 50; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 50; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t0, t1, t0); - # fe_sq(t0, t0); - # fe_sq(t0, t0); - # fe_mul(out, t0, z); - $t0 = self::fe_mul($t1, $t0); - $t0 = self::fe_sq($t0); - $t0 = self::fe_sq($t0); - return self::fe_mul($t0, $z); - } - - /** - * Subtract two field elements. - * - * h = f - g - * - * Preconditions: - * |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - * |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - * - * Postconditions: - * |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $g - * @return ParagonIE_Sodium_Core32_Curve25519_Fe - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedMethodCall - * @psalm-suppress MixedTypeCoercion - */ - public static function fe_sub(ParagonIE_Sodium_Core32_Curve25519_Fe $f, ParagonIE_Sodium_Core32_Curve25519_Fe $g) - { - return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( - array( - $f[0]->subInt32($g[0]), - $f[1]->subInt32($g[1]), - $f[2]->subInt32($g[2]), - $f[3]->subInt32($g[3]), - $f[4]->subInt32($g[4]), - $f[5]->subInt32($g[5]), - $f[6]->subInt32($g[6]), - $f[7]->subInt32($g[7]), - $f[8]->subInt32($g[8]), - $f[9]->subInt32($g[9]) - ) - ); - } - - /** - * Add two group elements. - * - * r = p + q - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Cached $q - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 - * @throws SodiumException - * @throws TypeError - */ - public static function ge_add( - ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p, - ParagonIE_Sodium_Core32_Curve25519_Ge_Cached $q - ) { - $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1(); - $r->X = self::fe_add($p->Y, $p->X); - $r->Y = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_mul($r->X, $q->YplusX); - $r->Y = self::fe_mul($r->Y, $q->YminusX); - $r->T = self::fe_mul($q->T2d, $p->T); - $r->X = self::fe_mul($p->Z, $q->Z); - $t0 = self::fe_add($r->X, $r->X); - $r->X = self::fe_sub($r->Z, $r->Y); - $r->Y = self::fe_add($r->Z, $r->Y); - $r->Z = self::fe_add($t0, $r->T); - $r->T = self::fe_sub($t0, $r->T); - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @ref https://github.com/jedisct1/libsodium/blob/157c4a80c13b117608aeae12178b2d38825f9f8f/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1185-L1215 - * @param string $a - * @return array - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArrayOffset - */ - public static function slide($a) - { - if (self::strlen($a) < 256) { - if (self::strlen($a) < 16) { - $a = str_pad($a, 256, '0', STR_PAD_RIGHT); - } - } - /** @var array $r */ - $r = array(); - for ($i = 0; $i < 256; ++$i) { - $r[$i] = (int) (1 & - ( - self::chrToInt($a[$i >> 3]) - >> - ($i & 7) - ) - ); - } - - for ($i = 0;$i < 256;++$i) { - if ($r[$i]) { - for ($b = 1;$b <= 6 && $i + $b < 256;++$b) { - if ($r[$i + $b]) { - if ($r[$i] + ($r[$i + $b] << $b) <= 15) { - $r[$i] += $r[$i + $b] << $b; - $r[$i + $b] = 0; - } elseif ($r[$i] - ($r[$i + $b] << $b) >= -15) { - $r[$i] -= $r[$i + $b] << $b; - for ($k = $i + $b; $k < 256; ++$k) { - if (!$r[$k]) { - $r[$k] = 1; - break; - } - $r[$k] = 0; - } - } else { - break; - } - } - } - } - } - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $s - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3 - * @throws SodiumException - * @throws TypeError - */ - public static function ge_frombytes_negate_vartime($s) - { - static $d = null; - if (!$d) { - /** @var ParagonIE_Sodium_Core32_Curve25519_Fe $d */ - $d = ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( - array( - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[0]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[1]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[2]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[3]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[4]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[5]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[6]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[7]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[8]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d[9]) - ) - ); - } - - # fe_frombytes(h->Y,s); - # fe_1(h->Z); - $h = new ParagonIE_Sodium_Core32_Curve25519_Ge_P3( - self::fe_0(), - self::fe_frombytes($s), - self::fe_1() - ); - - # fe_sq(u,h->Y); - # fe_mul(v,u,d); - # fe_sub(u,u,h->Z); /* u = y^2-1 */ - # fe_add(v,v,h->Z); /* v = dy^2+1 */ - $u = self::fe_sq($h->Y); - /** @var ParagonIE_Sodium_Core32_Curve25519_Fe $d */ - $v = self::fe_mul($u, $d); - $u = self::fe_sub($u, $h->Z); /* u = y^2 - 1 */ - $v = self::fe_add($v, $h->Z); /* v = dy^2 + 1 */ - - # fe_sq(v3,v); - # fe_mul(v3,v3,v); /* v3 = v^3 */ - # fe_sq(h->X,v3); - # fe_mul(h->X,h->X,v); - # fe_mul(h->X,h->X,u); /* x = uv^7 */ - $v3 = self::fe_sq($v); - $v3 = self::fe_mul($v3, $v); /* v3 = v^3 */ - $h->X = self::fe_sq($v3); - $h->X = self::fe_mul($h->X, $v); - $h->X = self::fe_mul($h->X, $u); /* x = uv^7 */ - - # fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */ - # fe_mul(h->X,h->X,v3); - # fe_mul(h->X,h->X,u); /* x = uv^3(uv^7)^((q-5)/8) */ - $h->X = self::fe_pow22523($h->X); /* x = (uv^7)^((q-5)/8) */ - $h->X = self::fe_mul($h->X, $v3); - $h->X = self::fe_mul($h->X, $u); /* x = uv^3(uv^7)^((q-5)/8) */ - - # fe_sq(vxx,h->X); - # fe_mul(vxx,vxx,v); - # fe_sub(check,vxx,u); /* vx^2-u */ - $vxx = self::fe_sq($h->X); - $vxx = self::fe_mul($vxx, $v); - $check = self::fe_sub($vxx, $u); /* vx^2 - u */ - - # if (fe_isnonzero(check)) { - # fe_add(check,vxx,u); /* vx^2+u */ - # if (fe_isnonzero(check)) { - # return -1; - # } - # fe_mul(h->X,h->X,sqrtm1); - # } - if (self::fe_isnonzero($check)) { - $check = self::fe_add($vxx, $u); /* vx^2 + u */ - if (self::fe_isnonzero($check)) { - throw new RangeException('Internal check failed.'); - } - $h->X = self::fe_mul( - $h->X, - ParagonIE_Sodium_Core32_Curve25519_Fe::fromIntArray(self::$sqrtm1) - ); - } - - # if (fe_isnegative(h->X) == (s[31] >> 7)) { - # fe_neg(h->X,h->X); - # } - $i = self::chrToInt($s[31]); - if (self::fe_isnegative($h->X) === ($i >> 7)) { - $h->X = self::fe_neg($h->X); - } - - # fe_mul(h->T,h->X,h->Y); - $h->T = self::fe_mul($h->X, $h->Y); - return $h; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $R - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $q - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 - * @throws SodiumException - * @throws TypeError - */ - public static function ge_madd( - ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $R, - ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p, - ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $q - ) { - $r = clone $R; - $r->X = self::fe_add($p->Y, $p->X); - $r->Y = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_mul($r->X, $q->yplusx); - $r->Y = self::fe_mul($r->Y, $q->yminusx); - $r->T = self::fe_mul($q->xy2d, $p->T); - $t0 = self::fe_add(clone $p->Z, clone $p->Z); - $r->X = self::fe_sub($r->Z, $r->Y); - $r->Y = self::fe_add($r->Z, $r->Y); - $r->Z = self::fe_add($t0, $r->T); - $r->T = self::fe_sub($t0, $r->T); - - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $R - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $q - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 - * @throws SodiumException - * @throws TypeError - */ - public static function ge_msub( - ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $R, - ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p, - ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $q - ) { - $r = clone $R; - - $r->X = self::fe_add($p->Y, $p->X); - $r->Y = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_mul($r->X, $q->yminusx); - $r->Y = self::fe_mul($r->Y, $q->yplusx); - $r->T = self::fe_mul($q->xy2d, $p->T); - $t0 = self::fe_add($p->Z, $p->Z); - $r->X = self::fe_sub($r->Z, $r->Y); - $r->Y = self::fe_add($r->Z, $r->Y); - $r->Z = self::fe_sub($t0, $r->T); - $r->T = self::fe_add($t0, $r->T); - - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $p - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P2 - * @throws SodiumException - * @throws TypeError - */ - public static function ge_p1p1_to_p2(ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $p) - { - $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P2(); - $r->X = self::fe_mul($p->X, $p->T); - $r->Y = self::fe_mul($p->Y, $p->Z); - $r->Z = self::fe_mul($p->Z, $p->T); - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $p - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3 - * @throws SodiumException - * @throws TypeError - */ - public static function ge_p1p1_to_p3(ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 $p) - { - $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P3(); - $r->X = self::fe_mul($p->X, $p->T); - $r->Y = self::fe_mul($p->Y, $p->Z); - $r->Z = self::fe_mul($p->Z, $p->T); - $r->T = self::fe_mul($p->X, $p->Y); - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P2 - * @throws SodiumException - * @throws TypeError - */ - public static function ge_p2_0() - { - return new ParagonIE_Sodium_Core32_Curve25519_Ge_P2( - self::fe_0(), - self::fe_1(), - self::fe_1() - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $p - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 - * @throws SodiumException - * @throws TypeError - */ - public static function ge_p2_dbl(ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $p) - { - $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1(); - - $r->X = self::fe_sq($p->X); - $r->Z = self::fe_sq($p->Y); - $r->T = self::fe_sq2($p->Z); - $r->Y = self::fe_add($p->X, $p->Y); - $t0 = self::fe_sq($r->Y); - $r->Y = self::fe_add($r->Z, $r->X); - $r->Z = self::fe_sub($r->Z, $r->X); - $r->X = self::fe_sub($t0, $r->Y); - $r->T = self::fe_sub($r->T, $r->Z); - - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3 - * @throws SodiumException - * @throws TypeError - */ - public static function ge_p3_0() - { - return new ParagonIE_Sodium_Core32_Curve25519_Ge_P3( - self::fe_0(), - self::fe_1(), - self::fe_1(), - self::fe_0() - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_Cached - * @throws SodiumException - * @throws TypeError - */ - public static function ge_p3_to_cached(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p) - { - static $d2 = null; - if ($d2 === null) { - $d2 = ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( - array( - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[0]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[1]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[2]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[3]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[4]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[5]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[6]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[7]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[8]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$d2[9]) - ) - ); - } - /** @var ParagonIE_Sodium_Core32_Curve25519_Fe $d2 */ - $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_Cached(); - $r->YplusX = self::fe_add($p->Y, $p->X); - $r->YminusX = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_copy($p->Z); - $r->T2d = self::fe_mul($p->T, $d2); - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P2 - */ - public static function ge_p3_to_p2(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p) - { - return new ParagonIE_Sodium_Core32_Curve25519_Ge_P2( - $p->X, - $p->Y, - $p->Z - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $h - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function ge_p3_tobytes(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $h) - { - $recip = self::fe_invert($h->Z); - $x = self::fe_mul($h->X, $recip); - $y = self::fe_mul($h->Y, $recip); - $s = self::fe_tobytes($y); - $s[31] = self::intToChr( - self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7) - ); - return $s; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 - * @throws SodiumException - * @throws TypeError - */ - public static function ge_p3_dbl(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p) - { - $q = self::ge_p3_to_p2($p); - return self::ge_p2_dbl($q); - } - - /** - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp - * @throws SodiumException - * @throws TypeError - */ - public static function ge_precomp_0() - { - return new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp( - self::fe_1(), - self::fe_1(), - self::fe_0() - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $b - * @param int $c - * @return int - * @psalm-suppress MixedReturnStatement - */ - public static function equal($b, $c) - { - return (int) ((($b ^ $c) - 1 & 0xffffffff) >> 31); - } - - /** - * @internal You should not use this directly from another application - * - * @param string|int $char - * @return int (1 = yes, 0 = no) - * @throws SodiumException - * @throws TypeError - */ - public static function negative($char) - { - if (is_int($char)) { - return $char < 0 ? 1 : 0; - } - /** @var string $char */ - /** @var int $x */ - $x = self::chrToInt(self::substr($char, 0, 1)); - return (int) ($x >> 31); - } - - /** - * Conditional move - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $t - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $u - * @param int $b - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp - * @throws SodiumException - * @throws TypeError - */ - public static function cmov( - ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $t, - ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $u, - $b - ) { - if (!is_int($b)) { - throw new InvalidArgumentException('Expected an integer.'); - } - return new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp( - self::fe_cmov($t->yplusx, $u->yplusx, $b), - self::fe_cmov($t->yminusx, $u->yminusx, $b), - self::fe_cmov($t->xy2d, $u->xy2d, $b) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $pos - * @param int $b - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayOffset - * @psalm-suppress MixedArgument - */ - public static function ge_select($pos = 0, $b = 0) - { - static $base = null; - if ($base === null) { - $base = array(); - foreach (self::$base as $i => $bas) { - for ($j = 0; $j < 8; ++$j) { - $base[$i][$j] = new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp( - ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( - array( - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][0]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][1]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][2]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][3]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][4]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][5]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][6]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][7]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][8]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][0][9]) - ) - ), - ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( - array( - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][0]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][1]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][2]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][3]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][4]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][5]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][6]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][7]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][8]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][1][9]) - ) - ), - ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( - array( - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][0]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][1]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][2]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][3]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][4]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][5]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][6]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][7]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][8]), - ParagonIE_Sodium_Core32_Int32::fromInt($bas[$j][2][9]) - ) - ) - ); - } - } - } - if (!is_int($pos)) { - throw new InvalidArgumentException('Position must be an integer'); - } - if ($pos < 0 || $pos > 31) { - throw new RangeException('Position is out of range [0, 31]'); - } - - $bnegative = self::negative($b); - /** @var int $babs */ - $babs = $b - (((-$bnegative) & $b) << 1); - - $t = self::ge_precomp_0(); - for ($i = 0; $i < 8; ++$i) { - $t = self::cmov( - $t, - $base[$pos][$i], - self::equal($babs, $i + 1) - ); - } - $minusT = new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp( - self::fe_copy($t->yminusx), - self::fe_copy($t->yplusx), - self::fe_neg($t->xy2d) - ); - return self::cmov($t, $minusT, -$bnegative); - } - - /** - * Subtract two group elements. - * - * r = p - q - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_Cached $q - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1 - * @throws SodiumException - * @throws TypeError - */ - public static function ge_sub( - ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $p, - ParagonIE_Sodium_Core32_Curve25519_Ge_Cached $q - ) { - $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1(); - - $r->X = self::fe_add($p->Y, $p->X); - $r->Y = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_mul($r->X, $q->YminusX); - $r->Y = self::fe_mul($r->Y, $q->YplusX); - $r->T = self::fe_mul($q->T2d, $p->T); - $r->X = self::fe_mul($p->Z, $q->Z); - $t0 = self::fe_add($r->X, $r->X); - $r->X = self::fe_sub($r->Z, $r->Y); - $r->Y = self::fe_add($r->Z, $r->Y); - $r->Z = self::fe_sub($t0, $r->T); - $r->T = self::fe_add($t0, $r->T); - - return $r; - } - - /** - * Convert a group element to a byte string. - * - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $h - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function ge_tobytes(ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $h) - { - $recip = self::fe_invert($h->Z); - $x = self::fe_mul($h->X, $recip); - $y = self::fe_mul($h->Y, $recip); - $s = self::fe_tobytes($y); - $s[31] = self::intToChr( - self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7) - ); - return $s; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $a - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A - * @param string $b - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P2 - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArrayAccess - */ - public static function ge_double_scalarmult_vartime( - $a, - ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A, - $b - ) { - /** @var array $Ai */ - $Ai = array(); - - static $Bi = array(); - /** @var array $Bi */ - if (!$Bi) { - for ($i = 0; $i < 8; ++$i) { - $Bi[$i] = new ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp( - ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( - array( - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][0]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][1]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][2]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][3]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][4]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][5]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][6]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][7]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][8]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][0][9]) - ) - ), - ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( - array( - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][0]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][1]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][2]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][3]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][4]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][5]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][6]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][7]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][8]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][1][9]) - ) - ), - ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray( - array( - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][0]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][1]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][2]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][3]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][4]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][5]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][6]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][7]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][8]), - ParagonIE_Sodium_Core32_Int32::fromInt(self::$base2[$i][2][9]) - ) - ) - ); - } - } - - for ($i = 0; $i < 8; ++$i) { - $Ai[$i] = new ParagonIE_Sodium_Core32_Curve25519_Ge_Cached( - self::fe_0(), - self::fe_0(), - self::fe_0(), - self::fe_0() - ); - } - /** @var array $Ai */ - - # slide(aslide,a); - # slide(bslide,b); - $aslide = self::slide($a); - $bslide = self::slide($b); - - # ge_p3_to_cached(&Ai[0],A); - # ge_p3_dbl(&t,A); ge_p1p1_to_p3(&A2,&t); - $Ai[0] = self::ge_p3_to_cached($A); - $t = self::ge_p3_dbl($A); - $A2 = self::ge_p1p1_to_p3($t); - - # ge_add(&t,&A2,&Ai[0]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[1],&u); - # ge_add(&t,&A2,&Ai[1]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[2],&u); - # ge_add(&t,&A2,&Ai[2]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[3],&u); - # ge_add(&t,&A2,&Ai[3]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[4],&u); - # ge_add(&t,&A2,&Ai[4]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[5],&u); - # ge_add(&t,&A2,&Ai[5]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[6],&u); - # ge_add(&t,&A2,&Ai[6]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[7],&u); - for ($i = 0; $i < 7; ++$i) { - $t = self::ge_add($A2, $Ai[$i]); - $u = self::ge_p1p1_to_p3($t); - $Ai[$i + 1] = self::ge_p3_to_cached($u); - } - - # ge_p2_0(r); - $r = self::ge_p2_0(); - - # for (i = 255;i >= 0;--i) { - # if (aslide[i] || bslide[i]) break; - # } - $i = 255; - for (; $i >= 0; --$i) { - if ($aslide[$i] || $bslide[$i]) { - break; - } - } - - # for (;i >= 0;--i) { - for (; $i >= 0; --$i) { - # ge_p2_dbl(&t,r); - $t = self::ge_p2_dbl($r); - - # if (aslide[i] > 0) { - if ($aslide[$i] > 0) { - # ge_p1p1_to_p3(&u,&t); - # ge_add(&t,&u,&Ai[aslide[i]/2]); - $u = self::ge_p1p1_to_p3($t); - $t = self::ge_add( - $u, - $Ai[(int) floor($aslide[$i] / 2)] - ); - # } else if (aslide[i] < 0) { - } elseif ($aslide[$i] < 0) { - # ge_p1p1_to_p3(&u,&t); - # ge_sub(&t,&u,&Ai[(-aslide[i])/2]); - $u = self::ge_p1p1_to_p3($t); - $t = self::ge_sub( - $u, - $Ai[(int) floor(-$aslide[$i] / 2)] - ); - } - /** @var array $Bi */ - - # if (bslide[i] > 0) { - if ($bslide[$i] > 0) { - # ge_p1p1_to_p3(&u,&t); - # ge_madd(&t,&u,&Bi[bslide[i]/2]); - $u = self::ge_p1p1_to_p3($t); - /** @var int $index */ - $index = (int) floor($bslide[$i] / 2); - /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $thisB */ - $thisB = $Bi[$index]; - $t = self::ge_madd($t, $u, $thisB); - # } else if (bslide[i] < 0) { - } elseif ($bslide[$i] < 0) { - # ge_p1p1_to_p3(&u,&t); - # ge_msub(&t,&u,&Bi[(-bslide[i])/2]); - $u = self::ge_p1p1_to_p3($t); - - /** @var int $index */ - $index = (int) floor(-$bslide[$i] / 2); - - /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_Precomp $thisB */ - $thisB = $Bi[$index]; - $t = self::ge_msub($t, $u, $thisB); - } - # ge_p1p1_to_p2(r,&t); - $r = self::ge_p1p1_to_p2($t); - } - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $a - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3 - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedOperand - * @throws SodiumException - * @throws TypeError - */ - public static function ge_scalarmult_base($a) - { - /** @var array $e */ - $e = array(); - $r = new ParagonIE_Sodium_Core32_Curve25519_Ge_P1p1(); - - for ($i = 0; $i < 32; ++$i) { - /** @var int $dbl */ - $dbl = (int) $i << 1; - $e[$dbl] = (int) self::chrToInt($a[$i]) & 15; - $e[$dbl + 1] = (int) (self::chrToInt($a[$i]) >> 4) & 15; - } - - /** @var int $carry */ - $carry = 0; - for ($i = 0; $i < 63; ++$i) { - $e[$i] += $carry; - /** @var int $carry */ - $carry = $e[$i] + 8; - /** @var int $carry */ - $carry >>= 4; - $e[$i] -= $carry << 4; - } - - /** @var array $e */ - $e[63] += (int) $carry; - - $h = self::ge_p3_0(); - - for ($i = 1; $i < 64; $i += 2) { - $t = self::ge_select((int) floor($i / 2), (int) $e[$i]); - $r = self::ge_madd($r, $h, $t); - $h = self::ge_p1p1_to_p3($r); - } - - $r = self::ge_p3_dbl($h); - - $s = self::ge_p1p1_to_p2($r); - $r = self::ge_p2_dbl($s); - $s = self::ge_p1p1_to_p2($r); - $r = self::ge_p2_dbl($s); - $s = self::ge_p1p1_to_p2($r); - $r = self::ge_p2_dbl($s); - - $h = self::ge_p1p1_to_p3($r); - - for ($i = 0; $i < 64; $i += 2) { - $t = self::ge_select($i >> 1, (int) $e[$i]); - $r = self::ge_madd($r, $h, $t); - $h = self::ge_p1p1_to_p3($r); - } - return $h; - } - - /** - * Calculates (ab + c) mod l - * where l = 2^252 + 27742317777372353535851937790883648493 - * - * @internal You should not use this directly from another application - * - * @param string $a - * @param string $b - * @param string $c - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sc_muladd($a, $b, $c) - { - $a0 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & self::load_3(self::substr($a, 0, 3)))->toInt64(); - $a1 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($a, 2, 4)) >> 5))->toInt64(); - $a2 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($a, 5, 3)) >> 2))->toInt64(); - $a3 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($a, 7, 4)) >> 7))->toInt64(); - $a4 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($a, 10, 4)) >> 4))->toInt64(); - $a5 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($a, 13, 3)) >> 1))->toInt64(); - $a6 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($a, 15, 4)) >> 6))->toInt64(); - $a7 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($a, 18, 3)) >> 3))->toInt64(); - $a8 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & self::load_3(self::substr($a, 21, 3)))->toInt64(); - $a9 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($a, 23, 4)) >> 5))->toInt64(); - $a10 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($a, 26, 3)) >> 2))->toInt64(); - $a11 = ParagonIE_Sodium_Core32_Int32::fromInt(0x1fffffff & (self::load_4(self::substr($a, 28, 4)) >> 7))->toInt64(); - $b0 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & self::load_3(self::substr($b, 0, 3)))->toInt64(); - $b1 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($b, 2, 4)) >> 5))->toInt64(); - $b2 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($b, 5, 3)) >> 2))->toInt64(); - $b3 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($b, 7, 4)) >> 7))->toInt64(); - $b4 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($b, 10, 4)) >> 4))->toInt64(); - $b5 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($b, 13, 3)) >> 1))->toInt64(); - $b6 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($b, 15, 4)) >> 6))->toInt64(); - $b7 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($b, 18, 3)) >> 3))->toInt64(); - $b8 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & self::load_3(self::substr($b, 21, 3)))->toInt64(); - $b9 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($b, 23, 4)) >> 5))->toInt64(); - $b10 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($b, 26, 3)) >> 2))->toInt64(); - $b11 = ParagonIE_Sodium_Core32_Int32::fromInt(0x1fffffff & (self::load_4(self::substr($b, 28, 4)) >> 7))->toInt64(); - $c0 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & self::load_3(self::substr($c, 0, 3)))->toInt64(); - $c1 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($c, 2, 4)) >> 5))->toInt64(); - $c2 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($c, 5, 3)) >> 2))->toInt64(); - $c3 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($c, 7, 4)) >> 7))->toInt64(); - $c4 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($c, 10, 4)) >> 4))->toInt64(); - $c5 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($c, 13, 3)) >> 1))->toInt64(); - $c6 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($c, 15, 4)) >> 6))->toInt64(); - $c7 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($c, 18, 3)) >> 3))->toInt64(); - $c8 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & self::load_3(self::substr($c, 21, 3)))->toInt64(); - $c9 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($c, 23, 4)) >> 5))->toInt64(); - $c10 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($c, 26, 3)) >> 2))->toInt64(); - $c11 = ParagonIE_Sodium_Core32_Int32::fromInt(0x1fffffff & (self::load_4(self::substr($c, 28, 4)) >> 7))->toInt64(); - - /* Can't really avoid the pyramid here: */ - /** - * @var ParagonIE_Sodium_Core32_Int64 $s0 - * @var ParagonIE_Sodium_Core32_Int64 $s1 - * @var ParagonIE_Sodium_Core32_Int64 $s2 - * @var ParagonIE_Sodium_Core32_Int64 $s3 - * @var ParagonIE_Sodium_Core32_Int64 $s4 - * @var ParagonIE_Sodium_Core32_Int64 $s5 - * @var ParagonIE_Sodium_Core32_Int64 $s6 - * @var ParagonIE_Sodium_Core32_Int64 $s7 - * @var ParagonIE_Sodium_Core32_Int64 $s8 - * @var ParagonIE_Sodium_Core32_Int64 $s9 - * @var ParagonIE_Sodium_Core32_Int64 $s10 - * @var ParagonIE_Sodium_Core32_Int64 $s11 - * @var ParagonIE_Sodium_Core32_Int64 $s12 - * @var ParagonIE_Sodium_Core32_Int64 $s13 - * @var ParagonIE_Sodium_Core32_Int64 $s14 - * @var ParagonIE_Sodium_Core32_Int64 $s15 - * @var ParagonIE_Sodium_Core32_Int64 $s16 - * @var ParagonIE_Sodium_Core32_Int64 $s17 - * @var ParagonIE_Sodium_Core32_Int64 $s18 - * @var ParagonIE_Sodium_Core32_Int64 $s19 - * @var ParagonIE_Sodium_Core32_Int64 $s20 - * @var ParagonIE_Sodium_Core32_Int64 $s21 - * @var ParagonIE_Sodium_Core32_Int64 $s22 - * @var ParagonIE_Sodium_Core32_Int64 $s23 - */ - - $s0 = $c0->addInt64($a0->mulInt64($b0, 24)); - $s1 = $c1->addInt64($a0->mulInt64($b1, 24))->addInt64($a1->mulInt64($b0, 24)); - $s2 = $c2->addInt64($a0->mulInt64($b2, 24))->addInt64($a1->mulInt64($b1, 24))->addInt64($a2->mulInt64($b0, 24)); - $s3 = $c3->addInt64($a0->mulInt64($b3, 24))->addInt64($a1->mulInt64($b2, 24))->addInt64($a2->mulInt64($b1, 24))->addInt64($a3->mulInt64($b0, 24)); - $s4 = $c4->addInt64($a0->mulInt64($b4, 24))->addInt64($a1->mulInt64($b3, 24))->addInt64($a2->mulInt64($b2, 24))->addInt64($a3->mulInt64($b1, 24))->addInt64($a4->mulInt64($b0, 24)); - $s5 = $c5->addInt64($a0->mulInt64($b5, 24))->addInt64($a1->mulInt64($b4, 24))->addInt64($a2->mulInt64($b3, 24))->addInt64($a3->mulInt64($b2, 24))->addInt64($a4->mulInt64($b1, 24))->addInt64($a5->mulInt64($b0, 24)); - $s6 = $c6->addInt64($a0->mulInt64($b6, 24))->addInt64($a1->mulInt64($b5, 24))->addInt64($a2->mulInt64($b4, 24))->addInt64($a3->mulInt64($b3, 24))->addInt64($a4->mulInt64($b2, 24))->addInt64($a5->mulInt64($b1, 24)) - ->addInt64($a6->mulInt64($b0, 24)); - $s7 = $c7->addInt64($a0->mulInt64($b7, 24))->addInt64($a1->mulInt64($b6, 24))->addInt64($a2->mulInt64($b5, 24))->addInt64($a3->mulInt64($b4, 24))->addInt64($a4->mulInt64($b3, 24))->addInt64($a5->mulInt64($b2, 24)) - ->addInt64($a6->mulInt64($b1, 24))->addInt64($a7->mulInt64($b0, 24)); - $s8 = $c8->addInt64($a0->mulInt64($b8, 24))->addInt64($a1->mulInt64($b7, 24))->addInt64($a2->mulInt64($b6, 24))->addInt64($a3->mulInt64($b5, 24))->addInt64($a4->mulInt64($b4, 24))->addInt64($a5->mulInt64($b3, 24)) - ->addInt64($a6->mulInt64($b2, 24))->addInt64($a7->mulInt64($b1, 24))->addInt64($a8->mulInt64($b0, 24)); - $s9 = $c9->addInt64($a0->mulInt64($b9, 24))->addInt64($a1->mulInt64($b8, 24))->addInt64($a2->mulInt64($b7, 24))->addInt64($a3->mulInt64($b6, 24))->addInt64($a4->mulInt64($b5, 24))->addInt64($a5->mulInt64($b4, 24)) - ->addInt64($a6->mulInt64($b3, 24))->addInt64($a7->mulInt64($b2, 24))->addInt64($a8->mulInt64($b1, 24))->addInt64($a9->mulInt64($b0, 24)); - $s10 = $c10->addInt64($a0->mulInt64($b10, 24))->addInt64($a1->mulInt64($b9, 24))->addInt64($a2->mulInt64($b8, 24))->addInt64($a3->mulInt64($b7, 24))->addInt64($a4->mulInt64($b6, 24))->addInt64($a5->mulInt64($b5, 24)) - ->addInt64($a6->mulInt64($b4, 24))->addInt64($a7->mulInt64($b3, 24))->addInt64($a8->mulInt64($b2, 24))->addInt64($a9->mulInt64($b1, 24))->addInt64($a10->mulInt64($b0, 24)); - $s11 = $c11->addInt64($a0->mulInt64($b11, 24))->addInt64($a1->mulInt64($b10, 24))->addInt64($a2->mulInt64($b9, 24))->addInt64($a3->mulInt64($b8, 24))->addInt64($a4->mulInt64($b7, 24))->addInt64($a5->mulInt64($b6, 24)) - ->addInt64($a6->mulInt64($b5, 24))->addInt64($a7->mulInt64($b4, 24))->addInt64($a8->mulInt64($b3, 24))->addInt64($a9->mulInt64($b2, 24))->addInt64($a10->mulInt64($b1, 24))->addInt64($a11->mulInt64($b0, 24)); - $s12 = $a1->mulInt64($b11, 24)->addInt64($a2->mulInt64($b10, 24))->addInt64($a3->mulInt64($b9, 24))->addInt64($a4->mulInt64($b8, 24))->addInt64($a5->mulInt64($b7, 24))->addInt64($a6->mulInt64($b6, 24)) - ->addInt64($a7->mulInt64($b5, 24))->addInt64($a8->mulInt64($b4, 24))->addInt64($a9->mulInt64($b3, 24))->addInt64($a10->mulInt64($b2, 24))->addInt64($a11->mulInt64($b1, 24)); - $s13 = $a2->mulInt64($b11, 24)->addInt64($a3->mulInt64($b10, 24))->addInt64($a4->mulInt64($b9, 24))->addInt64($a5->mulInt64($b8, 24))->addInt64($a6->mulInt64($b7, 24))->addInt64($a7->mulInt64($b6, 24)) - ->addInt64($a8->mulInt64($b5, 24))->addInt64($a9->mulInt64($b4, 24))->addInt64($a10->mulInt64($b3, 24))->addInt64($a11->mulInt64($b2, 24)); - $s14 = $a3->mulInt64($b11, 24)->addInt64($a4->mulInt64($b10, 24))->addInt64($a5->mulInt64($b9, 24))->addInt64($a6->mulInt64($b8, 24))->addInt64($a7->mulInt64($b7, 24))->addInt64($a8->mulInt64($b6, 24)) - ->addInt64($a9->mulInt64($b5, 24))->addInt64($a10->mulInt64($b4, 24))->addInt64($a11->mulInt64($b3, 24)); - $s15 = $a4->mulInt64($b11, 24)->addInt64($a5->mulInt64($b10, 24))->addInt64($a6->mulInt64($b9, 24))->addInt64($a7->mulInt64($b8, 24))->addInt64($a8->mulInt64($b7, 24))->addInt64($a9->mulInt64($b6, 24)) - ->addInt64($a10->mulInt64($b5, 24))->addInt64($a11->mulInt64($b4, 24)); - $s16 = $a5->mulInt64($b11, 24)->addInt64($a6->mulInt64($b10, 24))->addInt64($a7->mulInt64($b9, 24))->addInt64($a8->mulInt64($b8, 24))->addInt64($a9->mulInt64($b7, 24))->addInt64($a10->mulInt64($b6, 24)) - ->addInt64($a11->mulInt64($b5, 24)); - $s17 = $a6->mulInt64($b11, 24)->addInt64($a7->mulInt64($b10, 24))->addInt64($a8->mulInt64($b9, 24))->addInt64($a9->mulInt64($b8, 24))->addInt64($a10->mulInt64($b7, 24))->addInt64($a11->mulInt64($b6, 24)); - $s18 = $a7->mulInt64($b11, 24)->addInt64($a8->mulInt64($b10, 24))->addInt64($a9->mulInt64($b9, 24))->addInt64($a10->mulInt64($b8, 24))->addInt64($a11->mulInt64($b7, 24)); - $s19 = $a8->mulInt64($b11, 24)->addInt64($a9->mulInt64($b10, 24))->addInt64($a10->mulInt64($b9, 24))->addInt64($a11->mulInt64($b8, 24)); - $s20 = $a9->mulInt64($b11, 24)->addInt64($a10->mulInt64($b10, 24))->addInt64($a11->mulInt64($b9, 24)); - $s21 = $a10->mulInt64($b11, 24)->addInt64($a11->mulInt64($b10, 24)); - $s22 = $a11->mulInt64($b11, 24); - $s23 = new ParagonIE_Sodium_Core32_Int64(); - - $carry0 = $s0->addInt(1 << 20)->shiftRight(21); - $s1 = $s1->addInt64($carry0); - $s0 = $s0->subInt64($carry0->shiftLeft(21)); - $carry2 = $s2->addInt(1 << 20)->shiftRight(21); - $s3 = $s3->addInt64($carry2); - $s2 = $s2->subInt64($carry2->shiftLeft(21)); - $carry4 = $s4->addInt(1 << 20)->shiftRight(21); - $s5 = $s5->addInt64($carry4); - $s4 = $s4->subInt64($carry4->shiftLeft(21)); - $carry6 = $s6->addInt(1 << 20)->shiftRight(21); - $s7 = $s7->addInt64($carry6); - $s6 = $s6->subInt64($carry6->shiftLeft(21)); - $carry8 = $s8->addInt(1 << 20)->shiftRight(21); - $s9 = $s9->addInt64($carry8); - $s8 = $s8->subInt64($carry8->shiftLeft(21)); - $carry10 = $s10->addInt(1 << 20)->shiftRight(21); - $s11 = $s11->addInt64($carry10); - $s10 = $s10->subInt64($carry10->shiftLeft(21)); - $carry12 = $s12->addInt(1 << 20)->shiftRight(21); - $s13 = $s13->addInt64($carry12); - $s12 = $s12->subInt64($carry12->shiftLeft(21)); - $carry14 = $s14->addInt(1 << 20)->shiftRight(21); - $s15 = $s15->addInt64($carry14); - $s14 = $s14->subInt64($carry14->shiftLeft(21)); - $carry16 = $s16->addInt(1 << 20)->shiftRight(21); - $s17 = $s17->addInt64($carry16); - $s16 = $s16->subInt64($carry16->shiftLeft(21)); - $carry18 = $s18->addInt(1 << 20)->shiftRight(21); - $s19 = $s19->addInt64($carry18); - $s18 = $s18->subInt64($carry18->shiftLeft(21)); - $carry20 = $s20->addInt(1 << 20)->shiftRight(21); - $s21 = $s21->addInt64($carry20); - $s20 = $s20->subInt64($carry20->shiftLeft(21)); - $carry22 = $s22->addInt(1 << 20)->shiftRight(21); - $s23 = $s23->addInt64($carry22); - $s22 = $s22->subInt64($carry22->shiftLeft(21)); - - $carry1 = $s1->addInt(1 << 20)->shiftRight(21); - $s2 = $s2->addInt64($carry1); - $s1 = $s1->subInt64($carry1->shiftLeft(21)); - $carry3 = $s3->addInt(1 << 20)->shiftRight(21); - $s4 = $s4->addInt64($carry3); - $s3 = $s3->subInt64($carry3->shiftLeft(21)); - $carry5 = $s5->addInt(1 << 20)->shiftRight(21); - $s6 = $s6->addInt64($carry5); - $s5 = $s5->subInt64($carry5->shiftLeft(21)); - $carry7 = $s7->addInt(1 << 20)->shiftRight(21); - $s8 = $s8->addInt64($carry7); - $s7 = $s7->subInt64($carry7->shiftLeft(21)); - $carry9 = $s9->addInt(1 << 20)->shiftRight(21); - $s10 = $s10->addInt64($carry9); - $s9 = $s9->subInt64($carry9->shiftLeft(21)); - $carry11 = $s11->addInt(1 << 20)->shiftRight(21); - $s12 = $s12->addInt64($carry11); - $s11 = $s11->subInt64($carry11->shiftLeft(21)); - $carry13 = $s13->addInt(1 << 20)->shiftRight(21); - $s14 = $s14->addInt64($carry13); - $s13 = $s13->subInt64($carry13->shiftLeft(21)); - $carry15 = $s15->addInt(1 << 20)->shiftRight(21); - $s16 = $s16->addInt64($carry15); - $s15 = $s15->subInt64($carry15->shiftLeft(21)); - $carry17 = $s17->addInt(1 << 20)->shiftRight(21); - $s18 = $s18->addInt64($carry17); - $s17 = $s17->subInt64($carry17->shiftLeft(21)); - $carry19 = $s19->addInt(1 << 20)->shiftRight(21); - $s20 = $s20->addInt64($carry19); - $s19 = $s19->subInt64($carry19->shiftLeft(21)); - $carry21 = $s21->addInt(1 << 20)->shiftRight(21); - $s22 = $s22->addInt64($carry21); - $s21 = $s21->subInt64($carry21->shiftLeft(21)); - - $s11 = $s11->addInt64($s23->mulInt(666643, 20)); - $s12 = $s12->addInt64($s23->mulInt(470296, 19)); - $s13 = $s13->addInt64($s23->mulInt(654183, 20)); - $s14 = $s14->subInt64($s23->mulInt(997805, 20)); - $s15 = $s15->addInt64($s23->mulInt(136657, 18)); - $s16 = $s16->subInt64($s23->mulInt(683901, 20)); - - $s10 = $s10->addInt64($s22->mulInt(666643, 20)); - $s11 = $s11->addInt64($s22->mulInt(470296, 19)); - $s12 = $s12->addInt64($s22->mulInt(654183, 20)); - $s13 = $s13->subInt64($s22->mulInt(997805, 20)); - $s14 = $s14->addInt64($s22->mulInt(136657, 18)); - $s15 = $s15->subInt64($s22->mulInt(683901, 20)); - - $s9 = $s9->addInt64($s21->mulInt(666643, 20)); - $s10 = $s10->addInt64($s21->mulInt(470296, 19)); - $s11 = $s11->addInt64($s21->mulInt(654183, 20)); - $s12 = $s12->subInt64($s21->mulInt(997805, 20)); - $s13 = $s13->addInt64($s21->mulInt(136657, 18)); - $s14 = $s14->subInt64($s21->mulInt(683901, 20)); - - $s8 = $s8->addInt64($s20->mulInt(666643, 20)); - $s9 = $s9->addInt64($s20->mulInt(470296, 19)); - $s10 = $s10->addInt64($s20->mulInt(654183, 20)); - $s11 = $s11->subInt64($s20->mulInt(997805, 20)); - $s12 = $s12->addInt64($s20->mulInt(136657, 18)); - $s13 = $s13->subInt64($s20->mulInt(683901, 20)); - - $s7 = $s7->addInt64($s19->mulInt(666643, 20)); - $s8 = $s8->addInt64($s19->mulInt(470296, 19)); - $s9 = $s9->addInt64($s19->mulInt(654183, 20)); - $s10 = $s10->subInt64($s19->mulInt(997805, 20)); - $s11 = $s11->addInt64($s19->mulInt(136657, 18)); - $s12 = $s12->subInt64($s19->mulInt(683901, 20)); - - $s6 = $s6->addInt64($s18->mulInt(666643, 20)); - $s7 = $s7->addInt64($s18->mulInt(470296, 19)); - $s8 = $s8->addInt64($s18->mulInt(654183, 20)); - $s9 = $s9->subInt64($s18->mulInt(997805, 20)); - $s10 = $s10->addInt64($s18->mulInt(136657, 18)); - $s11 = $s11->subInt64($s18->mulInt(683901, 20)); - - $carry6 = $s6->addInt(1 << 20)->shiftRight(21); - $s7 = $s7->addInt64($carry6); - $s6 = $s6->subInt64($carry6->shiftLeft(21)); - $carry8 = $s8->addInt(1 << 20)->shiftRight(21); - $s9 = $s9->addInt64($carry8); - $s8 = $s8->subInt64($carry8->shiftLeft(21)); - $carry10 = $s10->addInt(1 << 20)->shiftRight(21); - $s11 = $s11->addInt64($carry10); - $s10 = $s10->subInt64($carry10->shiftLeft(21)); - $carry12 = $s12->addInt(1 << 20)->shiftRight(21); - $s13 = $s13->addInt64($carry12); - $s12 = $s12->subInt64($carry12->shiftLeft(21)); - $carry14 = $s14->addInt(1 << 20)->shiftRight(21); - $s15 = $s15->addInt64($carry14); - $s14 = $s14->subInt64($carry14->shiftLeft(21)); - $carry16 = $s16->addInt(1 << 20)->shiftRight(21); - $s17 = $s17->addInt64($carry16); - $s16 = $s16->subInt64($carry16->shiftLeft(21)); - - $carry7 = $s7->addInt(1 << 20)->shiftRight(21); - $s8 = $s8->addInt64($carry7); - $s7 = $s7->subInt64($carry7->shiftLeft(21)); - $carry9 = $s9->addInt(1 << 20)->shiftRight(21); - $s10 = $s10->addInt64($carry9); - $s9 = $s9->subInt64($carry9->shiftLeft(21)); - $carry11 = $s11->addInt(1 << 20)->shiftRight(21); - $s12 = $s12->addInt64($carry11); - $s11 = $s11->subInt64($carry11->shiftLeft(21)); - $carry13 = $s13->addInt(1 << 20)->shiftRight(21); - $s14 = $s14->addInt64($carry13); - $s13 = $s13->subInt64($carry13->shiftLeft(21)); - $carry15 = $s15->addInt(1 << 20)->shiftRight(21); - $s16 = $s16->addInt64($carry15); - $s15 = $s15->subInt64($carry15->shiftLeft(21)); - - $s5 = $s5->addInt64($s17->mulInt(666643, 20)); - $s6 = $s6->addInt64($s17->mulInt(470296, 19)); - $s7 = $s7->addInt64($s17->mulInt(654183, 20)); - $s8 = $s8->subInt64($s17->mulInt(997805, 20)); - $s9 = $s9->addInt64($s17->mulInt(136657, 18)); - $s10 = $s10->subInt64($s17->mulInt(683901, 20)); - - $s4 = $s4->addInt64($s16->mulInt(666643, 20)); - $s5 = $s5->addInt64($s16->mulInt(470296, 19)); - $s6 = $s6->addInt64($s16->mulInt(654183, 20)); - $s7 = $s7->subInt64($s16->mulInt(997805, 20)); - $s8 = $s8->addInt64($s16->mulInt(136657, 18)); - $s9 = $s9->subInt64($s16->mulInt(683901, 20)); - - $s3 = $s3->addInt64($s15->mulInt(666643, 20)); - $s4 = $s4->addInt64($s15->mulInt(470296, 19)); - $s5 = $s5->addInt64($s15->mulInt(654183, 20)); - $s6 = $s6->subInt64($s15->mulInt(997805, 20)); - $s7 = $s7->addInt64($s15->mulInt(136657, 18)); - $s8 = $s8->subInt64($s15->mulInt(683901, 20)); - - $s2 = $s2->addInt64($s14->mulInt(666643, 20)); - $s3 = $s3->addInt64($s14->mulInt(470296, 19)); - $s4 = $s4->addInt64($s14->mulInt(654183, 20)); - $s5 = $s5->subInt64($s14->mulInt(997805, 20)); - $s6 = $s6->addInt64($s14->mulInt(136657, 18)); - $s7 = $s7->subInt64($s14->mulInt(683901, 20)); - - $s1 = $s1->addInt64($s13->mulInt(666643, 20)); - $s2 = $s2->addInt64($s13->mulInt(470296, 19)); - $s3 = $s3->addInt64($s13->mulInt(654183, 20)); - $s4 = $s4->subInt64($s13->mulInt(997805, 20)); - $s5 = $s5->addInt64($s13->mulInt(136657, 18)); - $s6 = $s6->subInt64($s13->mulInt(683901, 20)); - - $s0 = $s0->addInt64($s12->mulInt(666643, 20)); - $s1 = $s1->addInt64($s12->mulInt(470296, 19)); - $s2 = $s2->addInt64($s12->mulInt(654183, 20)); - $s3 = $s3->subInt64($s12->mulInt(997805, 20)); - $s4 = $s4->addInt64($s12->mulInt(136657, 18)); - $s5 = $s5->subInt64($s12->mulInt(683901, 20)); - $s12 = new ParagonIE_Sodium_Core32_Int64(); - - $carry0 = $s0->addInt(1 << 20)->shiftRight(21); - $s1 = $s1->addInt64($carry0); - $s0 = $s0->subInt64($carry0->shiftLeft(21)); - $carry2 = $s2->addInt(1 << 20)->shiftRight(21); - $s3 = $s3->addInt64($carry2); - $s2 = $s2->subInt64($carry2->shiftLeft(21)); - $carry4 = $s4->addInt(1 << 20)->shiftRight(21); - $s5 = $s5->addInt64($carry4); - $s4 = $s4->subInt64($carry4->shiftLeft(21)); - $carry6 = $s6->addInt(1 << 20)->shiftRight(21); - $s7 = $s7->addInt64($carry6); - $s6 = $s6->subInt64($carry6->shiftLeft(21)); - $carry8 = $s8->addInt(1 << 20)->shiftRight(21); - $s9 = $s9->addInt64($carry8); - $s8 = $s8->subInt64($carry8->shiftLeft(21)); - $carry10 = $s10->addInt(1 << 20)->shiftRight(21); - $s11 = $s11->addInt64($carry10); - $s10 = $s10->subInt64($carry10->shiftLeft(21)); - - $carry1 = $s1->addInt(1 << 20)->shiftRight(21); - $s2 = $s2->addInt64($carry1); - $s1 = $s1->subInt64($carry1->shiftLeft(21)); - $carry3 = $s3->addInt(1 << 20)->shiftRight(21); - $s4 = $s4->addInt64($carry3); - $s3 = $s3->subInt64($carry3->shiftLeft(21)); - $carry5 = $s5->addInt(1 << 20)->shiftRight(21); - $s6 = $s6->addInt64($carry5); - $s5 = $s5->subInt64($carry5->shiftLeft(21)); - $carry7 = $s7->addInt(1 << 20)->shiftRight(21); - $s8 = $s8->addInt64($carry7); - $s7 = $s7->subInt64($carry7->shiftLeft(21)); - $carry9 = $s9->addInt(1 << 20)->shiftRight(21); - $s10 = $s10->addInt64($carry9); - $s9 = $s9->subInt64($carry9->shiftLeft(21)); - $carry11 = $s11->addInt(1 << 20)->shiftRight(21); - $s12 = $s12->addInt64($carry11); - $s11 = $s11->subInt64($carry11->shiftLeft(21)); - - $s0 = $s0->addInt64($s12->mulInt(666643, 20)); - $s1 = $s1->addInt64($s12->mulInt(470296, 19)); - $s2 = $s2->addInt64($s12->mulInt(654183, 20)); - $s3 = $s3->subInt64($s12->mulInt(997805, 20)); - $s4 = $s4->addInt64($s12->mulInt(136657, 18)); - $s5 = $s5->subInt64($s12->mulInt(683901, 20)); - $s12 = new ParagonIE_Sodium_Core32_Int64(); - - $carry0 = $s0->shiftRight(21); - $s1 = $s1->addInt64($carry0); - $s0 = $s0->subInt64($carry0->shiftLeft(21)); - $carry1 = $s1->shiftRight(21); - $s2 = $s2->addInt64($carry1); - $s1 = $s1->subInt64($carry1->shiftLeft(21)); - $carry2 = $s2->shiftRight(21); - $s3 = $s3->addInt64($carry2); - $s2 = $s2->subInt64($carry2->shiftLeft(21)); - $carry3 = $s3->shiftRight(21); - $s4 = $s4->addInt64($carry3); - $s3 = $s3->subInt64($carry3->shiftLeft(21)); - $carry4 = $s4->shiftRight(21); - $s5 = $s5->addInt64($carry4); - $s4 = $s4->subInt64($carry4->shiftLeft(21)); - $carry5 = $s5->shiftRight(21); - $s6 = $s6->addInt64($carry5); - $s5 = $s5->subInt64($carry5->shiftLeft(21)); - $carry6 = $s6->shiftRight(21); - $s7 = $s7->addInt64($carry6); - $s6 = $s6->subInt64($carry6->shiftLeft(21)); - $carry7 = $s7->shiftRight(21); - $s8 = $s8->addInt64($carry7); - $s7 = $s7->subInt64($carry7->shiftLeft(21)); - $carry8 = $s8->shiftRight(21); - $s9 = $s9->addInt64($carry8); - $s8 = $s8->subInt64($carry8->shiftLeft(21)); - $carry9 = $s9->shiftRight(21); - $s10 = $s10->addInt64($carry9); - $s9 = $s9->subInt64($carry9->shiftLeft(21)); - $carry10 = $s10->shiftRight(21); - $s11 = $s11->addInt64($carry10); - $s10 = $s10->subInt64($carry10->shiftLeft(21)); - $carry11 = $s11->shiftRight(21); - $s12 = $s12->addInt64($carry11); - $s11 = $s11->subInt64($carry11->shiftLeft(21)); - - $s0 = $s0->addInt64($s12->mulInt(666643, 20)); - $s1 = $s1->addInt64($s12->mulInt(470296, 19)); - $s2 = $s2->addInt64($s12->mulInt(654183, 20)); - $s3 = $s3->subInt64($s12->mulInt(997805, 20)); - $s4 = $s4->addInt64($s12->mulInt(136657, 18)); - $s5 = $s5->subInt64($s12->mulInt(683901, 20)); - - $carry0 = $s0->shiftRight(21); - $s1 = $s1->addInt64($carry0); - $s0 = $s0->subInt64($carry0->shiftLeft(21)); - $carry1 = $s1->shiftRight(21); - $s2 = $s2->addInt64($carry1); - $s1 = $s1->subInt64($carry1->shiftLeft(21)); - $carry2 = $s2->shiftRight(21); - $s3 = $s3->addInt64($carry2); - $s2 = $s2->subInt64($carry2->shiftLeft(21)); - $carry3 = $s3->shiftRight(21); - $s4 = $s4->addInt64($carry3); - $s3 = $s3->subInt64($carry3->shiftLeft(21)); - $carry4 = $s4->shiftRight(21); - $s5 = $s5->addInt64($carry4); - $s4 = $s4->subInt64($carry4->shiftLeft(21)); - $carry5 = $s5->shiftRight(21); - $s6 = $s6->addInt64($carry5); - $s5 = $s5->subInt64($carry5->shiftLeft(21)); - $carry6 = $s6->shiftRight(21); - $s7 = $s7->addInt64($carry6); - $s6 = $s6->subInt64($carry6->shiftLeft(21)); - $carry7 = $s7->shiftRight(21); - $s8 = $s8->addInt64($carry7); - $s7 = $s7->subInt64($carry7->shiftLeft(21)); - $carry8 = $s10->shiftRight(21); - $s9 = $s9->addInt64($carry8); - $s8 = $s8->subInt64($carry8->shiftLeft(21)); - $carry9 = $s9->shiftRight(21); - $s10 = $s10->addInt64($carry9); - $s9 = $s9->subInt64($carry9->shiftLeft(21)); - $carry10 = $s10->shiftRight(21); - $s11 = $s11->addInt64($carry10); - $s10 = $s10->subInt64($carry10->shiftLeft(21)); - - $S0 = $s0->toInt32()->toInt(); - $S1 = $s1->toInt32()->toInt(); - $S2 = $s2->toInt32()->toInt(); - $S3 = $s3->toInt32()->toInt(); - $S4 = $s4->toInt32()->toInt(); - $S5 = $s5->toInt32()->toInt(); - $S6 = $s6->toInt32()->toInt(); - $S7 = $s7->toInt32()->toInt(); - $S8 = $s8->toInt32()->toInt(); - $S9 = $s9->toInt32()->toInt(); - $S10 = $s10->toInt32()->toInt(); - $S11 = $s11->toInt32()->toInt(); - - /** - * @var array - */ - $arr = array( - (int) (0xff & ($S0 >> 0)), - (int) (0xff & ($S0 >> 8)), - (int) (0xff & (($S0 >> 16) | ($S1 << 5))), - (int) (0xff & ($S1 >> 3)), - (int) (0xff & ($S1 >> 11)), - (int) (0xff & (($S1 >> 19) | ($S2 << 2))), - (int) (0xff & ($S2 >> 6)), - (int) (0xff & (($S2 >> 14) | ($S3 << 7))), - (int) (0xff & ($S3 >> 1)), - (int) (0xff & ($S3 >> 9)), - (int) (0xff & (($S3 >> 17) | ($S4 << 4))), - (int) (0xff & ($S4 >> 4)), - (int) (0xff & ($S4 >> 12)), - (int) (0xff & (($S4 >> 20) | ($S5 << 1))), - (int) (0xff & ($S5 >> 7)), - (int) (0xff & (($S5 >> 15) | ($S6 << 6))), - (int) (0xff & ($S6 >> 2)), - (int) (0xff & ($S6 >> 10)), - (int) (0xff & (($S6 >> 18) | ($S7 << 3))), - (int) (0xff & ($S7 >> 5)), - (int) (0xff & ($S7 >> 13)), - (int) (0xff & ($S8 >> 0)), - (int) (0xff & ($S8 >> 8)), - (int) (0xff & (($S8 >> 16) | ($S9 << 5))), - (int) (0xff & ($S9 >> 3)), - (int) (0xff & ($S9 >> 11)), - (int) (0xff & (($S9 >> 19) | ($S10 << 2))), - (int) (0xff & ($S10 >> 6)), - (int) (0xff & (($S10 >> 14) | ($S11 << 7))), - (int) (0xff & ($S11 >> 1)), - (int) (0xff & ($S11 >> 9)), - (int) (0xff & ($S11 >> 17)) - ); - return self::intArrayToString($arr); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $s - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sc_reduce($s) - { - /** - * @var ParagonIE_Sodium_Core32_Int64 $s0 - * @var ParagonIE_Sodium_Core32_Int64 $s1 - * @var ParagonIE_Sodium_Core32_Int64 $s2 - * @var ParagonIE_Sodium_Core32_Int64 $s3 - * @var ParagonIE_Sodium_Core32_Int64 $s4 - * @var ParagonIE_Sodium_Core32_Int64 $s5 - * @var ParagonIE_Sodium_Core32_Int64 $s6 - * @var ParagonIE_Sodium_Core32_Int64 $s7 - * @var ParagonIE_Sodium_Core32_Int64 $s8 - * @var ParagonIE_Sodium_Core32_Int64 $s9 - * @var ParagonIE_Sodium_Core32_Int64 $s10 - * @var ParagonIE_Sodium_Core32_Int64 $s11 - * @var ParagonIE_Sodium_Core32_Int64 $s12 - * @var ParagonIE_Sodium_Core32_Int64 $s13 - * @var ParagonIE_Sodium_Core32_Int64 $s14 - * @var ParagonIE_Sodium_Core32_Int64 $s15 - * @var ParagonIE_Sodium_Core32_Int64 $s16 - * @var ParagonIE_Sodium_Core32_Int64 $s17 - * @var ParagonIE_Sodium_Core32_Int64 $s18 - * @var ParagonIE_Sodium_Core32_Int64 $s19 - * @var ParagonIE_Sodium_Core32_Int64 $s20 - * @var ParagonIE_Sodium_Core32_Int64 $s21 - * @var ParagonIE_Sodium_Core32_Int64 $s22 - * @var ParagonIE_Sodium_Core32_Int64 $s23 - */ - $s0 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & self::load_3(self::substr($s, 0, 3)))->toInt64(); - $s1 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 2, 4)) >> 5))->toInt64(); - $s2 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 5, 3)) >> 2))->toInt64(); - $s3 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 7, 4)) >> 7))->toInt64(); - $s4 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 10, 4)) >> 4))->toInt64(); - $s5 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 13, 3)) >> 1))->toInt64(); - $s6 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 15, 4)) >> 6))->toInt64(); - $s7 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 18, 4)) >> 3))->toInt64(); - $s8 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & self::load_3(self::substr($s, 21, 3)))->toInt64(); - $s9 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 23, 4)) >> 5))->toInt64(); - $s10 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 26, 3)) >> 2))->toInt64(); - $s11 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 28, 4)) >> 7))->toInt64(); - $s12 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 31, 4)) >> 4))->toInt64(); - $s13 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 34, 3)) >> 1))->toInt64(); - $s14 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 36, 4)) >> 6))->toInt64(); - $s15 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 39, 4)) >> 3))->toInt64(); - $s16 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & self::load_3(self::substr($s, 42, 3)))->toInt64(); - $s17 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 44, 4)) >> 5))->toInt64(); - $s18 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 47, 3)) >> 2))->toInt64(); - $s19 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 49, 4)) >> 7))->toInt64(); - $s20 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 52, 4)) >> 4))->toInt64(); - $s21 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 55, 3)) >> 1))->toInt64(); - $s22 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 57, 4)) >> 6))->toInt64(); - $s23 = ParagonIE_Sodium_Core32_Int32::fromInt(0x1fffffff & (self::load_4(self::substr($s, 60, 4)) >> 3))->toInt64(); - - $s11 = $s11->addInt64($s23->mulInt(666643, 20)); - $s12 = $s12->addInt64($s23->mulInt(470296, 19)); - $s13 = $s13->addInt64($s23->mulInt(654183, 20)); - $s14 = $s14->subInt64($s23->mulInt(997805, 20)); - $s15 = $s15->addInt64($s23->mulInt(136657, 18)); - $s16 = $s16->subInt64($s23->mulInt(683901, 20)); - - $s10 = $s10->addInt64($s22->mulInt(666643, 20)); - $s11 = $s11->addInt64($s22->mulInt(470296, 19)); - $s12 = $s12->addInt64($s22->mulInt(654183, 20)); - $s13 = $s13->subInt64($s22->mulInt(997805, 20)); - $s14 = $s14->addInt64($s22->mulInt(136657, 18)); - $s15 = $s15->subInt64($s22->mulInt(683901, 20)); - - $s9 = $s9->addInt64($s21->mulInt(666643, 20)); - $s10 = $s10->addInt64($s21->mulInt(470296, 19)); - $s11 = $s11->addInt64($s21->mulInt(654183, 20)); - $s12 = $s12->subInt64($s21->mulInt(997805, 20)); - $s13 = $s13->addInt64($s21->mulInt(136657, 18)); - $s14 = $s14->subInt64($s21->mulInt(683901, 20)); - - $s8 = $s8->addInt64($s20->mulInt(666643, 20)); - $s9 = $s9->addInt64($s20->mulInt(470296, 19)); - $s10 = $s10->addInt64($s20->mulInt(654183, 20)); - $s11 = $s11->subInt64($s20->mulInt(997805, 20)); - $s12 = $s12->addInt64($s20->mulInt(136657, 18)); - $s13 = $s13->subInt64($s20->mulInt(683901, 20)); - - $s7 = $s7->addInt64($s19->mulInt(666643, 20)); - $s8 = $s8->addInt64($s19->mulInt(470296, 19)); - $s9 = $s9->addInt64($s19->mulInt(654183, 20)); - $s10 = $s10->subInt64($s19->mulInt(997805, 20)); - $s11 = $s11->addInt64($s19->mulInt(136657, 18)); - $s12 = $s12->subInt64($s19->mulInt(683901, 20)); - - $s6 = $s6->addInt64($s18->mulInt(666643, 20)); - $s7 = $s7->addInt64($s18->mulInt(470296, 19)); - $s8 = $s8->addInt64($s18->mulInt(654183, 20)); - $s9 = $s9->subInt64($s18->mulInt(997805, 20)); - $s10 = $s10->addInt64($s18->mulInt(136657, 18)); - $s11 = $s11->subInt64($s18->mulInt(683901, 20)); - - $carry6 = $s6->addInt(1 << 20)->shiftRight(21); - $s7 = $s7->addInt64($carry6); - $s6 = $s6->subInt64($carry6->shiftLeft(21)); - $carry8 = $s8->addInt(1 << 20)->shiftRight(21); - $s9 = $s9->addInt64($carry8); - $s8 = $s8->subInt64($carry8->shiftLeft(21)); - $carry10 = $s10->addInt(1 << 20)->shiftRight(21); - $s11 = $s11->addInt64($carry10); - $s10 = $s10->subInt64($carry10->shiftLeft(21)); - $carry12 = $s12->addInt(1 << 20)->shiftRight(21); - $s13 = $s13->addInt64($carry12); - $s12 = $s12->subInt64($carry12->shiftLeft(21)); - $carry14 = $s14->addInt(1 << 20)->shiftRight(21); - $s15 = $s15->addInt64($carry14); - $s14 = $s14->subInt64($carry14->shiftLeft(21)); - $carry16 = $s16->addInt(1 << 20)->shiftRight(21); - $s17 = $s17->addInt64($carry16); - $s16 = $s16->subInt64($carry16->shiftLeft(21)); - - $carry7 = $s7->addInt(1 << 20)->shiftRight(21); - $s8 = $s8->addInt64($carry7); - $s7 = $s7->subInt64($carry7->shiftLeft(21)); - $carry9 = $s9->addInt(1 << 20)->shiftRight(21); - $s10 = $s10->addInt64($carry9); - $s9 = $s9->subInt64($carry9->shiftLeft(21)); - $carry11 = $s11->addInt(1 << 20)->shiftRight(21); - $s12 = $s12->addInt64($carry11); - $s11 = $s11->subInt64($carry11->shiftLeft(21)); - $carry13 = $s13->addInt(1 << 20)->shiftRight(21); - $s14 = $s14->addInt64($carry13); - $s13 = $s13->subInt64($carry13->shiftLeft(21)); - $carry15 = $s15->addInt(1 << 20)->shiftRight(21); - $s16 = $s16->addInt64($carry15); - $s15 = $s15->subInt64($carry15->shiftLeft(21)); - - $s5 = $s5->addInt64($s17->mulInt(666643, 20)); - $s6 = $s6->addInt64($s17->mulInt(470296, 19)); - $s7 = $s7->addInt64($s17->mulInt(654183, 20)); - $s8 = $s8->subInt64($s17->mulInt(997805, 20)); - $s9 = $s9->addInt64($s17->mulInt(136657, 18)); - $s10 = $s10->subInt64($s17->mulInt(683901, 20)); - - $s4 = $s4->addInt64($s16->mulInt(666643, 20)); - $s5 = $s5->addInt64($s16->mulInt(470296, 19)); - $s6 = $s6->addInt64($s16->mulInt(654183, 20)); - $s7 = $s7->subInt64($s16->mulInt(997805, 20)); - $s8 = $s8->addInt64($s16->mulInt(136657, 18)); - $s9 = $s9->subInt64($s16->mulInt(683901, 20)); - - $s3 = $s3->addInt64($s15->mulInt(666643, 20)); - $s4 = $s4->addInt64($s15->mulInt(470296, 19)); - $s5 = $s5->addInt64($s15->mulInt(654183, 20)); - $s6 = $s6->subInt64($s15->mulInt(997805, 20)); - $s7 = $s7->addInt64($s15->mulInt(136657, 18)); - $s8 = $s8->subInt64($s15->mulInt(683901, 20)); - - $s2 = $s2->addInt64($s14->mulInt(666643, 20)); - $s3 = $s3->addInt64($s14->mulInt(470296, 19)); - $s4 = $s4->addInt64($s14->mulInt(654183, 20)); - $s5 = $s5->subInt64($s14->mulInt(997805, 20)); - $s6 = $s6->addInt64($s14->mulInt(136657, 18)); - $s7 = $s7->subInt64($s14->mulInt(683901, 20)); - - $s1 = $s1->addInt64($s13->mulInt(666643, 20)); - $s2 = $s2->addInt64($s13->mulInt(470296, 19)); - $s3 = $s3->addInt64($s13->mulInt(654183, 20)); - $s4 = $s4->subInt64($s13->mulInt(997805, 20)); - $s5 = $s5->addInt64($s13->mulInt(136657, 18)); - $s6 = $s6->subInt64($s13->mulInt(683901, 20)); - - $s0 = $s0->addInt64($s12->mulInt(666643, 20)); - $s1 = $s1->addInt64($s12->mulInt(470296, 19)); - $s2 = $s2->addInt64($s12->mulInt(654183, 20)); - $s3 = $s3->subInt64($s12->mulInt(997805, 20)); - $s4 = $s4->addInt64($s12->mulInt(136657, 18)); - $s5 = $s5->subInt64($s12->mulInt(683901, 20)); - $s12 = new ParagonIE_Sodium_Core32_Int64(); - - $carry0 = $s0->addInt(1 << 20)->shiftRight(21); - $s1 = $s1->addInt64($carry0); - $s0 = $s0->subInt64($carry0->shiftLeft(21)); - $carry2 = $s2->addInt(1 << 20)->shiftRight(21); - $s3 = $s3->addInt64($carry2); - $s2 = $s2->subInt64($carry2->shiftLeft(21)); - $carry4 = $s4->addInt(1 << 20)->shiftRight(21); - $s5 = $s5->addInt64($carry4); - $s4 = $s4->subInt64($carry4->shiftLeft(21)); - $carry6 = $s6->addInt(1 << 20)->shiftRight(21); - $s7 = $s7->addInt64($carry6); - $s6 = $s6->subInt64($carry6->shiftLeft(21)); - $carry8 = $s8->addInt(1 << 20)->shiftRight(21); - $s9 = $s9->addInt64($carry8); - $s8 = $s8->subInt64($carry8->shiftLeft(21)); - $carry10 = $s10->addInt(1 << 20)->shiftRight(21); - $s11 = $s11->addInt64($carry10); - $s10 = $s10->subInt64($carry10->shiftLeft(21)); - $carry1 = $s1->addInt(1 << 20)->shiftRight(21); - $s2 = $s2->addInt64($carry1); - $s1 = $s1->subInt64($carry1->shiftLeft(21)); - $carry3 = $s3->addInt(1 << 20)->shiftRight(21); - $s4 = $s4->addInt64($carry3); - $s3 = $s3->subInt64($carry3->shiftLeft(21)); - $carry5 = $s5->addInt(1 << 20)->shiftRight(21); - $s6 = $s6->addInt64($carry5); - $s5 = $s5->subInt64($carry5->shiftLeft(21)); - $carry7 = $s7->addInt(1 << 20)->shiftRight(21); - $s8 = $s8->addInt64($carry7); - $s7 = $s7->subInt64($carry7->shiftLeft(21)); - $carry9 = $s9->addInt(1 << 20)->shiftRight(21); - $s10 = $s10->addInt64($carry9); - $s9 = $s9->subInt64($carry9->shiftLeft(21)); - $carry11 = $s11->addInt(1 << 20)->shiftRight(21); - $s12 = $s12->addInt64($carry11); - $s11 = $s11->subInt64($carry11->shiftLeft(21)); - - $s0 = $s0->addInt64($s12->mulInt(666643, 20)); - $s1 = $s1->addInt64($s12->mulInt(470296, 19)); - $s2 = $s2->addInt64($s12->mulInt(654183, 20)); - $s3 = $s3->subInt64($s12->mulInt(997805, 20)); - $s4 = $s4->addInt64($s12->mulInt(136657, 18)); - $s5 = $s5->subInt64($s12->mulInt(683901, 20)); - $s12 = new ParagonIE_Sodium_Core32_Int64(); - - $carry0 = $s0->shiftRight(21); - $s1 = $s1->addInt64($carry0); - $s0 = $s0->subInt64($carry0->shiftLeft(21)); - $carry1 = $s1->shiftRight(21); - $s2 = $s2->addInt64($carry1); - $s1 = $s1->subInt64($carry1->shiftLeft(21)); - $carry2 = $s2->shiftRight(21); - $s3 = $s3->addInt64($carry2); - $s2 = $s2->subInt64($carry2->shiftLeft(21)); - $carry3 = $s3->shiftRight(21); - $s4 = $s4->addInt64($carry3); - $s3 = $s3->subInt64($carry3->shiftLeft(21)); - $carry4 = $s4->shiftRight(21); - $s5 = $s5->addInt64($carry4); - $s4 = $s4->subInt64($carry4->shiftLeft(21)); - $carry5 = $s5->shiftRight(21); - $s6 = $s6->addInt64($carry5); - $s5 = $s5->subInt64($carry5->shiftLeft(21)); - $carry6 = $s6->shiftRight(21); - $s7 = $s7->addInt64($carry6); - $s6 = $s6->subInt64($carry6->shiftLeft(21)); - $carry7 = $s7->shiftRight(21); - $s8 = $s8->addInt64($carry7); - $s7 = $s7->subInt64($carry7->shiftLeft(21)); - $carry8 = $s8->shiftRight(21); - $s9 = $s9->addInt64($carry8); - $s8 = $s8->subInt64($carry8->shiftLeft(21)); - $carry9 = $s9->shiftRight(21); - $s10 = $s10->addInt64($carry9); - $s9 = $s9->subInt64($carry9->shiftLeft(21)); - $carry10 = $s10->shiftRight(21); - $s11 = $s11->addInt64($carry10); - $s10 = $s10->subInt64($carry10->shiftLeft(21)); - $carry11 = $s11->shiftRight(21); - $s12 = $s12->addInt64($carry11); - $s11 = $s11->subInt64($carry11->shiftLeft(21)); - - $s0 = $s0->addInt64($s12->mulInt(666643, 20)); - $s1 = $s1->addInt64($s12->mulInt(470296, 19)); - $s2 = $s2->addInt64($s12->mulInt(654183, 20)); - $s3 = $s3->subInt64($s12->mulInt(997805, 20)); - $s4 = $s4->addInt64($s12->mulInt(136657, 18)); - $s5 = $s5->subInt64($s12->mulInt(683901, 20)); - - $carry0 = $s0->shiftRight(21); - $s1 = $s1->addInt64($carry0); - $s0 = $s0->subInt64($carry0->shiftLeft(21)); - $carry1 = $s1->shiftRight(21); - $s2 = $s2->addInt64($carry1); - $s1 = $s1->subInt64($carry1->shiftLeft(21)); - $carry2 = $s2->shiftRight(21); - $s3 = $s3->addInt64($carry2); - $s2 = $s2->subInt64($carry2->shiftLeft(21)); - $carry3 = $s3->shiftRight(21); - $s4 = $s4->addInt64($carry3); - $s3 = $s3->subInt64($carry3->shiftLeft(21)); - $carry4 = $s4->shiftRight(21); - $s5 = $s5->addInt64($carry4); - $s4 = $s4->subInt64($carry4->shiftLeft(21)); - $carry5 = $s5->shiftRight(21); - $s6 = $s6->addInt64($carry5); - $s5 = $s5->subInt64($carry5->shiftLeft(21)); - $carry6 = $s6->shiftRight(21); - $s7 = $s7->addInt64($carry6); - $s6 = $s6->subInt64($carry6->shiftLeft(21)); - $carry7 = $s7->shiftRight(21); - $s8 = $s8->addInt64($carry7); - $s7 = $s7->subInt64($carry7->shiftLeft(21)); - $carry8 = $s8->shiftRight(21); - $s9 = $s9->addInt64($carry8); - $s8 = $s8->subInt64($carry8->shiftLeft(21)); - $carry9 = $s9->shiftRight(21); - $s10 = $s10->addInt64($carry9); - $s9 = $s9->subInt64($carry9->shiftLeft(21)); - $carry10 = $s10->shiftRight(21); - $s11 = $s11->addInt64($carry10); - $s10 = $s10->subInt64($carry10->shiftLeft(21)); - - $S0 = $s0->toInt32()->toInt(); - $S1 = $s1->toInt32()->toInt(); - $S2 = $s2->toInt32()->toInt(); - $S3 = $s3->toInt32()->toInt(); - $S4 = $s4->toInt32()->toInt(); - $S5 = $s5->toInt32()->toInt(); - $S6 = $s6->toInt32()->toInt(); - $S7 = $s7->toInt32()->toInt(); - $S8 = $s8->toInt32()->toInt(); - $S9 = $s9->toInt32()->toInt(); - $S10 = $s10->toInt32()->toInt(); - $S11 = $s11->toInt32()->toInt(); - - /** - * @var array - */ - $arr = array( - (int) ($S0 >> 0), - (int) ($S0 >> 8), - (int) (($S0 >> 16) | ($S1 << 5)), - (int) ($S1 >> 3), - (int) ($S1 >> 11), - (int) (($S1 >> 19) | ($S2 << 2)), - (int) ($S2 >> 6), - (int) (($S2 >> 14) | ($S3 << 7)), - (int) ($S3 >> 1), - (int) ($S3 >> 9), - (int) (($S3 >> 17) | ($S4 << 4)), - (int) ($S4 >> 4), - (int) ($S4 >> 12), - (int) (($S4 >> 20) | ($S5 << 1)), - (int) ($S5 >> 7), - (int) (($S5 >> 15) | ($S6 << 6)), - (int) ($S6 >> 2), - (int) ($S6 >> 10), - (int) (($S6 >> 18) | ($S7 << 3)), - (int) ($S7 >> 5), - (int) ($S7 >> 13), - (int) ($S8 >> 0), - (int) ($S8 >> 8), - (int) (($S8 >> 16) | ($S9 << 5)), - (int) ($S9 >> 3), - (int) ($S9 >> 11), - (int) (($S9 >> 19) | ($S10 << 2)), - (int) ($S10 >> 6), - (int) (($S10 >> 14) | ($S11 << 7)), - (int) ($S11 >> 1), - (int) ($S11 >> 9), - (int) $S11 >> 17 - ); - return self::intArrayToString($arr); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $s - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sc_reduce_old($s) - { - /** - * @var ParagonIE_Sodium_Core32_Int32 $s0 - * @var ParagonIE_Sodium_Core32_Int32 $s1 - * @var ParagonIE_Sodium_Core32_Int32 $s2 - * @var ParagonIE_Sodium_Core32_Int32 $s3 - * @var ParagonIE_Sodium_Core32_Int32 $s4 - * @var ParagonIE_Sodium_Core32_Int32 $s5 - * @var ParagonIE_Sodium_Core32_Int32 $s6 - * @var ParagonIE_Sodium_Core32_Int32 $s7 - * @var ParagonIE_Sodium_Core32_Int32 $s8 - * @var ParagonIE_Sodium_Core32_Int32 $s9 - * @var ParagonIE_Sodium_Core32_Int32 $s10 - * @var ParagonIE_Sodium_Core32_Int32 $s11 - * @var ParagonIE_Sodium_Core32_Int32 $s12 - * @var ParagonIE_Sodium_Core32_Int32 $s13 - * @var ParagonIE_Sodium_Core32_Int32 $s14 - * @var ParagonIE_Sodium_Core32_Int32 $s15 - * @var ParagonIE_Sodium_Core32_Int32 $s16 - * @var ParagonIE_Sodium_Core32_Int32 $s17 - * @var ParagonIE_Sodium_Core32_Int32 $s18 - * @var ParagonIE_Sodium_Core32_Int32 $s19 - * @var ParagonIE_Sodium_Core32_Int32 $s20 - * @var ParagonIE_Sodium_Core32_Int32 $s21 - * @var ParagonIE_Sodium_Core32_Int32 $s22 - * @var ParagonIE_Sodium_Core32_Int32 $s23 - */ - $s0 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & self::load_3(self::substr($s, 0, 3))); - $s1 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 2, 4)) >> 5)); - $s2 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 5, 3)) >> 2)); - $s3 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 7, 4)) >> 7)); - $s4 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 10, 4)) >> 4)); - $s5 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 13, 3)) >> 1)); - $s6 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 15, 4)) >> 6)); - $s7 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 18, 4)) >> 3)); - $s8 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & self::load_3(self::substr($s, 21, 3))); - $s9 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 23, 4)) >> 5)); - $s10 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 26, 3)) >> 2)); - $s11 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 28, 4)) >> 7)); - $s12 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 31, 4)) >> 4)); - $s13 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 34, 3)) >> 1)); - $s14 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 36, 4)) >> 6)); - $s15 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 39, 4)) >> 3)); - $s16 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & self::load_3(self::substr($s, 42, 3))); - $s17 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 44, 4)) >> 5)); - $s18 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 47, 3)) >> 2)); - $s19 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 49, 4)) >> 7)); - $s20 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 52, 4)) >> 4)); - $s21 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_3(self::substr($s, 55, 3)) >> 1)); - $s22 = ParagonIE_Sodium_Core32_Int32::fromInt(2097151 & (self::load_4(self::substr($s, 57, 4)) >> 6)); - $s23 = ParagonIE_Sodium_Core32_Int32::fromInt(self::load_4(self::substr($s, 60, 4)) >> 3); - - $s11 = $s11->addInt32($s23->mulInt(666643, 20)); - $s12 = $s12->addInt32($s23->mulInt(470296, 19)); - $s13 = $s13->addInt32($s23->mulInt(654183, 20)); - $s14 = $s14->subInt32($s23->mulInt(997805, 20)); - $s15 = $s15->addInt32($s23->mulInt(136657, 18)); - $s16 = $s16->subInt32($s23->mulInt(683901, 20)); - - $s10 = $s10->addInt32($s22->mulInt(666643, 20)); - $s11 = $s11->addInt32($s22->mulInt(470296, 19)); - $s12 = $s12->addInt32($s22->mulInt(654183, 20)); - $s13 = $s13->subInt32($s22->mulInt(997805, 20)); - $s14 = $s14->addInt32($s22->mulInt(136657, 18)); - $s15 = $s15->subInt32($s22->mulInt(683901, 20)); - - $s9 = $s9->addInt32($s21->mulInt(666643, 20)); - $s10 = $s10->addInt32($s21->mulInt(470296, 19)); - $s11 = $s11->addInt32($s21->mulInt(654183, 20)); - $s12 = $s12->subInt32($s21->mulInt(997805, 20)); - $s13 = $s13->addInt32($s21->mulInt(136657, 18)); - $s14 = $s14->subInt32($s21->mulInt(683901, 20)); - - $s8 = $s8->addInt32($s20->mulInt(666643, 20)); - $s9 = $s9->addInt32($s20->mulInt(470296, 19)); - $s10 = $s10->addInt32($s20->mulInt(654183, 20)); - $s11 = $s11->subInt32($s20->mulInt(997805, 20)); - $s12 = $s12->addInt32($s20->mulInt(136657, 18)); - $s13 = $s13->subInt32($s20->mulInt(683901, 20)); - - $s7 = $s7->addInt32($s19->mulInt(666643, 20)); - $s8 = $s8->addInt32($s19->mulInt(470296, 19)); - $s9 = $s9->addInt32($s19->mulInt(654183, 20)); - $s10 = $s10->subInt32($s19->mulInt(997805, 20)); - $s11 = $s11->addInt32($s19->mulInt(136657, 18)); - $s12 = $s12->subInt32($s19->mulInt(683901, 20)); - - $s6 = $s6->addInt32($s18->mulInt(666643, 20)); - $s7 = $s7->addInt32($s18->mulInt(470296, 19)); - $s8 = $s8->addInt32($s18->mulInt(654183, 20)); - $s9 = $s9->subInt32($s18->mulInt(997805, 20)); - $s10 = $s10->addInt32($s18->mulInt(136657, 18)); - $s11 = $s11->subInt32($s18->mulInt(683901, 20)); - - $carry6 = $s6->addInt(1 << 20)->shiftRight(21); - $s7 = $s7->addInt32($carry6); - $s6 = $s6->subInt32($carry6->shiftLeft(21)); - - $carry8 = $s8->addInt(1 << 20)->shiftRight(21); - $s9 = $s9->addInt32($carry8); - $s8 = $s8->subInt32($carry8->shiftLeft(21)); - - $carry10 = $s10->addInt(1 << 20)->shiftRight(21); - $s11 = $s11->addInt32($carry10); - $s10 = $s10->subInt32($carry10->shiftLeft(21)); - - $carry12 = $s12->addInt(1 << 20)->shiftRight(21); - $s13 = $s13->addInt32($carry12); - $s12 = $s12->subInt32($carry12->shiftLeft(21)); - - $carry14 = $s14->addInt(1 << 20)->shiftRight(21); - $s15 = $s15->addInt32($carry14); - $s14 = $s14->subInt32($carry14->shiftLeft(21)); - - $carry16 = $s16->addInt(1 << 20)->shiftRight(21); - $s17 = $s17->addInt32($carry16); - $s16 = $s16->subInt32($carry16->shiftLeft(21)); - - $carry7 = $s7->addInt(1 << 20)->shiftRight(21); - $s8 = $s8->addInt32($carry7); - $s7 = $s7->subInt32($carry7->shiftLeft(21)); - - $carry9 = $s9->addInt(1 << 20)->shiftRight(21); - $s10 = $s10->addInt32($carry9); - $s9 = $s9->subInt32($carry9->shiftLeft(21)); - - $carry11 = $s11->addInt(1 << 20)->shiftRight(21); - $s12 = $s12->addInt32($carry11); - $s11 = $s11->subInt32($carry11->shiftLeft(21)); - - $carry13 = $s13->addInt(1 << 20)->shiftRight(21); - $s14 = $s14->addInt32($carry13); - $s13 = $s13->subInt32($carry13->shiftLeft(21)); - - $carry15 = $s15->addInt(1 << 20)->shiftRight(21); - $s16 = $s16->addInt32($carry15); - $s15 = $s15->subInt32($carry15->shiftLeft(21)); - - $s5 = $s5->addInt32($s17->mulInt(666643, 20)); - $s6 = $s6->addInt32($s17->mulInt(470296, 19)); - $s7 = $s7->addInt32($s17->mulInt(654183, 20)); - $s8 = $s8->subInt32($s17->mulInt(997805, 20)); - $s9 = $s9->addInt32($s17->mulInt(136657, 18)); - $s10 = $s10->subInt32($s17->mulInt(683901, 20)); - - $s4 = $s4->addInt32($s16->mulInt(666643, 20)); - $s5 = $s5->addInt32($s16->mulInt(470296, 19)); - $s6 = $s6->addInt32($s16->mulInt(654183, 20)); - $s7 = $s7->subInt32($s16->mulInt(997805, 20)); - $s8 = $s8->addInt32($s16->mulInt(136657, 18)); - $s9 = $s9->subInt32($s16->mulInt(683901, 20)); - - $s3 = $s3->addInt32($s15->mulInt(666643, 20)); - $s4 = $s4->addInt32($s15->mulInt(470296, 19)); - $s5 = $s5->addInt32($s15->mulInt(654183, 20)); - $s6 = $s6->subInt32($s15->mulInt(997805, 20)); - $s7 = $s7->addInt32($s15->mulInt(136657, 18)); - $s8 = $s8->subInt32($s15->mulInt(683901, 20)); - - $s2 = $s2->addInt32($s14->mulInt(666643, 20)); - $s3 = $s3->addInt32($s14->mulInt(470296, 19)); - $s4 = $s4->addInt32($s14->mulInt(654183, 20)); - $s5 = $s5->subInt32($s14->mulInt(997805, 20)); - $s6 = $s6->addInt32($s14->mulInt(136657, 18)); - $s7 = $s7->subInt32($s14->mulInt(683901, 20)); - - $s1 = $s1->addInt32($s13->mulInt(666643, 20)); - $s2 = $s2->addInt32($s13->mulInt(470296, 19)); - $s3 = $s3->addInt32($s13->mulInt(654183, 20)); - $s4 = $s4->subInt32($s13->mulInt(997805, 20)); - $s5 = $s5->addInt32($s13->mulInt(136657, 18)); - $s6 = $s6->subInt32($s13->mulInt(683901, 20)); - - $s0 = $s0->addInt32($s12->mulInt(666643, 20)); - $s1 = $s1->addInt32($s12->mulInt(470296, 19)); - $s2 = $s2->addInt32($s12->mulInt(654183, 20)); - $s3 = $s3->subInt32($s12->mulInt(997805, 20)); - $s4 = $s4->addInt32($s12->mulInt(136657, 18)); - $s5 = $s5->subInt32($s12->mulInt(683901, 20)); - $s12 = new ParagonIE_Sodium_Core32_Int32(); - - $carry0 = $s0->addInt(1 << 20)->shiftRight(21); - $s1 = $s1->addInt32($carry0); - $s0 = $s0->subInt32($carry0->shiftLeft(21)); - $carry2 = $s2->addInt(1 << 20)->shiftRight(21); - $s3 = $s3->addInt32($carry2); - $s2 = $s2->subInt32($carry2->shiftLeft(21)); - $carry4 = $s4->addInt(1 << 20)->shiftRight(21); - $s5 = $s5->addInt32($carry4); - $s4 = $s4->subInt32($carry4->shiftLeft(21)); - $carry6 = $s6->addInt(1 << 20)->shiftRight(21); - $s7 = $s7->addInt32($carry6); - $s6 = $s6->subInt32($carry6->shiftLeft(21)); - $carry8 = $s8->addInt(1 << 20)->shiftRight(21); - $s9 = $s9->addInt32($carry8); - $s8 = $s8->subInt32($carry8->shiftLeft(21)); - $carry10 = $s10->addInt(1 << 20)->shiftRight(21); - $s11 = $s11->addInt32($carry10); - $s10 = $s10->subInt32($carry10->shiftLeft(21)); - $carry1 = $s1->addInt(1 << 20)->shiftRight(21); - $s2 = $s2->addInt32($carry1); - $s1 = $s1->subInt32($carry1->shiftLeft(21)); - $carry3 = $s3->addInt(1 << 20)->shiftRight(21); - $s4 = $s4->addInt32($carry3); - $s3 = $s3->subInt32($carry3->shiftLeft(21)); - $carry5 = $s5->addInt(1 << 20)->shiftRight(21); - $s6 = $s6->addInt32($carry5); - $s5 = $s5->subInt32($carry5->shiftLeft(21)); - $carry7 = $s7->addInt(1 << 20)->shiftRight(21); - $s8 = $s8->addInt32($carry7); - $s7 = $s7->subInt32($carry7->shiftLeft(21)); - $carry9 = $s9->addInt(1 << 20)->shiftRight(21); - $s10 = $s10->addInt32($carry9); - $s9 = $s9->subInt32($carry9->shiftLeft(21)); - $carry11 = $s11->addInt(1 << 20)->shiftRight(21); - $s12 = $s12->addInt32($carry11); - $s11 = $s11->subInt32($carry11->shiftLeft(21)); - - $s0 = $s0->addInt32($s12->mulInt(666643, 20)); - $s1 = $s1->addInt32($s12->mulInt(470296, 19)); - $s2 = $s2->addInt32($s12->mulInt(654183, 20)); - $s3 = $s3->subInt32($s12->mulInt(997805, 20)); - $s4 = $s4->addInt32($s12->mulInt(136657, 18)); - $s5 = $s5->subInt32($s12->mulInt(683901, 20)); - $s12 = new ParagonIE_Sodium_Core32_Int32(); - - $carry0 = $s0->shiftRight(21); - $s1 = $s1->addInt32($carry0); - $s0 = $s0->subInt32($carry0->shiftLeft(21)); - $carry1 = $s1->shiftRight(21); - $s2 = $s2->addInt32($carry1); - $s1 = $s1->subInt32($carry1->shiftLeft(21)); - $carry2 = $s2->shiftRight(21); - $s3 = $s3->addInt32($carry2); - $s2 = $s2->subInt32($carry2->shiftLeft(21)); - $carry3 = $s3->shiftRight(21); - $s4 = $s4->addInt32($carry3); - $s3 = $s3->subInt32($carry3->shiftLeft(21)); - $carry4 = $s4->shiftRight(21); - $s5 = $s5->addInt32($carry4); - $s4 = $s4->subInt32($carry4->shiftLeft(21)); - $carry5 = $s5->shiftRight(21); - $s6 = $s6->addInt32($carry5); - $s5 = $s5->subInt32($carry5->shiftLeft(21)); - $carry6 = $s6->shiftRight(21); - $s7 = $s7->addInt32($carry6); - $s6 = $s6->subInt32($carry6->shiftLeft(21)); - $carry7 = $s7->shiftRight(21); - $s8 = $s8->addInt32($carry7); - $s7 = $s7->subInt32($carry7->shiftLeft(21)); - $carry8 = $s8->shiftRight(21); - $s9 = $s9->addInt32($carry8); - $s8 = $s8->subInt32($carry8->shiftLeft(21)); - $carry9 = $s9->shiftRight(21); - $s10 = $s10->addInt32($carry9); - $s9 = $s9->subInt32($carry9->shiftLeft(21)); - $carry10 = $s10->shiftRight(21); - $s11 = $s11->addInt32($carry10); - $s10 = $s10->subInt32($carry10->shiftLeft(21)); - $carry11 = $s11->shiftRight(21); - $s12 = $s12->addInt32($carry11); - $s11 = $s11->subInt32($carry11->shiftLeft(21)); - - $s0 = $s0->addInt32($s12->mulInt(666643, 20)); - $s1 = $s1->addInt32($s12->mulInt(470296, 19)); - $s2 = $s2->addInt32($s12->mulInt(654183, 20)); - $s3 = $s3->subInt32($s12->mulInt(997805, 20)); - $s4 = $s4->addInt32($s12->mulInt(136657, 18)); - $s5 = $s5->subInt32($s12->mulInt(683901, 20)); - - $carry0 = $s0->shiftRight(21); - $s1 = $s1->addInt32($carry0); - $s0 = $s0->subInt32($carry0->shiftLeft(21)); - $carry1 = $s1->shiftRight(21); - $s2 = $s2->addInt32($carry1); - $s1 = $s1->subInt32($carry1->shiftLeft(21)); - $carry2 = $s2->shiftRight(21); - $s3 = $s3->addInt32($carry2); - $s2 = $s2->subInt32($carry2->shiftLeft(21)); - $carry3 = $s3->shiftRight(21); - $s4 = $s4->addInt32($carry3); - $s3 = $s3->subInt32($carry3->shiftLeft(21)); - $carry4 = $s4->shiftRight(21); - $s5 = $s5->addInt32($carry4); - $s4 = $s4->subInt32($carry4->shiftLeft(21)); - $carry5 = $s5->shiftRight(21); - $s6 = $s6->addInt32($carry5); - $s5 = $s5->subInt32($carry5->shiftLeft(21)); - $carry6 = $s6->shiftRight(21); - $s7 = $s7->addInt32($carry6); - $s6 = $s6->subInt32($carry6->shiftLeft(21)); - $carry7 = $s7->shiftRight(21); - $s8 = $s8->addInt32($carry7); - $s7 = $s7->subInt32($carry7->shiftLeft(21)); - $carry8 = $s8->shiftRight(21); - $s9 = $s9->addInt32($carry8); - $s8 = $s8->subInt32($carry8->shiftLeft(21)); - $carry9 = $s9->shiftRight(21); - $s10 = $s10->addInt32($carry9); - $s9 = $s9->subInt32($carry9->shiftLeft(21)); - $carry10 = $s10->shiftRight(21); - $s11 = $s11->addInt32($carry10); - $s10 = $s10->subInt32($carry10->shiftLeft(21)); - - $S0 = $s0->toInt(); - $S1 = $s1->toInt(); - $S2 = $s2->toInt(); - $S3 = $s3->toInt(); - $S4 = $s4->toInt(); - $S5 = $s5->toInt(); - $S6 = $s6->toInt(); - $S7 = $s7->toInt(); - $S8 = $s8->toInt(); - $S9 = $s9->toInt(); - $S10 = $s10->toInt(); - $S11 = $s11->toInt(); - - /** - * @var array - */ - $arr = array( - (int) ($S0 >> 0), - (int) ($S0 >> 8), - (int) (($S0 >> 16) | ($S1 << 5)), - (int) ($S1 >> 3), - (int) ($S1 >> 11), - (int) (($S1 >> 19) | ($S2 << 2)), - (int) ($S2 >> 6), - (int) (($S2 >> 14) | ($S3 << 7)), - (int) ($S3 >> 1), - (int) ($S3 >> 9), - (int) (($S3 >> 17) | ($S4 << 4)), - (int) ($S4 >> 4), - (int) ($S4 >> 12), - (int) (($S4 >> 20) | ($S5 << 1)), - (int) ($S5 >> 7), - (int) (($S5 >> 15) | ($S6 << 6)), - (int) ($S6 >> 2), - (int) ($S6 >> 10), - (int) (($S6 >> 18) | ($S7 << 3)), - (int) ($S7 >> 5), - (int) ($S7 >> 13), - (int) ($S8 >> 0), - (int) ($S8 >> 8), - (int) (($S8 >> 16) | ($S9 << 5)), - (int) ($S9 >> 3), - (int) ($S9 >> 11), - (int) (($S9 >> 19) | ($S10 << 2)), - (int) ($S10 >> 6), - (int) (($S10 >> 14) | ($S11 << 7)), - (int) ($S11 >> 1), - (int) ($S11 >> 9), - (int) $S11 >> 17 - ); - return self::intArrayToString($arr); - } - - /** - * multiply by the order of the main subgroup l = 2^252+27742317777372353535851937790883648493 - * - * @param ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A - * @return ParagonIE_Sodium_Core32_Curve25519_Ge_P3 - * @throws SodiumException - * @throws TypeError - */ - public static function ge_mul_l(ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A) - { - /** @var array $aslide */ - $aslide = array( - 13, 0, 0, 0, 0, -1, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0, - 0, 0, 0, -3, 0, 0, 0, 0, -13, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 3, 0, - 0, 0, 0, -13, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, - 0, 0, 11, 0, 0, 0, 0, -13, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, -1, - 0, 0, 0, 0, 3, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 5, 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, 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, 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, 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, 1 - ); - - /** @var array $Ai size 8 */ - $Ai = array(); - - # ge_p3_to_cached(&Ai[0], A); - $Ai[0] = self::ge_p3_to_cached($A); - # ge_p3_dbl(&t, A); - $t = self::ge_p3_dbl($A); - # ge_p1p1_to_p3(&A2, &t); - $A2 = self::ge_p1p1_to_p3($t); - - for ($i = 1; $i < 8; ++$i) { - # ge_add(&t, &A2, &Ai[0]); - $t = self::ge_add($A2, $Ai[$i - 1]); - # ge_p1p1_to_p3(&u, &t); - $u = self::ge_p1p1_to_p3($t); - # ge_p3_to_cached(&Ai[i], &u); - $Ai[$i] = self::ge_p3_to_cached($u); - } - - $r = self::ge_p3_0(); - for ($i = 252; $i >= 0; --$i) { - $t = self::ge_p3_dbl($r); - if ($aslide[$i] > 0) { - # ge_p1p1_to_p3(&u, &t); - $u = self::ge_p1p1_to_p3($t); - # ge_add(&t, &u, &Ai[aslide[i] / 2]); - $t = self::ge_add($u, $Ai[(int)($aslide[$i] / 2)]); - } elseif ($aslide[$i] < 0) { - # ge_p1p1_to_p3(&u, &t); - $u = self::ge_p1p1_to_p3($t); - # ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]); - $t = self::ge_sub($u, $Ai[(int)(-$aslide[$i] / 2)]); - } - } - # ge_p1p1_to_p3(r, &t); - return self::ge_p1p1_to_p3($t); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Fe.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Fe.php deleted file mode 100644 index 45f0807a6ae07..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Fe.php +++ /dev/null @@ -1,221 +0,0 @@ - - */ - protected $container = array(); - - /** - * @var int - */ - protected $size = 10; - - /** - * ParagonIE_Sodium_Core32_Curve25519_Fe constructor. - * @param int $size - */ - public function __construct($size = 10) - { - $this->size = 10; - } - - /** - * @internal You should not use this directly from another application - * - * @param array $array - * @param bool $save_indexes - * @return self - * @throws SodiumException - * @throws TypeError - */ - public static function fromArray($array, $save_indexes = null) - { - $count = count($array); - if ($save_indexes) { - $keys = array_keys($array); - } else { - $keys = range(0, $count - 1); - } - $array = array_values($array); - - $obj = new ParagonIE_Sodium_Core32_Curve25519_Fe($count); - if ($save_indexes) { - for ($i = 0; $i < $count; ++$i) { - $array[$i]->overflow = 0; - $obj->offsetSet($keys[$i], $array[$i]); - } - } else { - for ($i = 0; $i < $count; ++$i) { - $array[$i]->overflow = 0; - $obj->offsetSet($i, $array[$i]); - } - } - return $obj; - } - - /** - * @internal You should not use this directly from another application - * - * @param array $array - * @param bool $save_indexes - * @return self - * @throws SodiumException - * @throws TypeError - */ - public static function fromIntArray($array, $save_indexes = null) - { - $count = count($array); - if ($save_indexes) { - $keys = array_keys($array); - } else { - $keys = range(0, $count - 1); - } - $array = array_values($array); - $set = array(); - /** @var int $i */ - /** @var int $v */ - foreach ($array as $i => $v) { - $set[$i] = ParagonIE_Sodium_Core32_Int32::fromInt($v); - } - - $obj = new ParagonIE_Sodium_Core32_Curve25519_Fe($count); - if ($save_indexes) { - for ($i = 0; $i < $count; ++$i) { - $set[$i]->overflow = 0; - $obj->offsetSet($keys[$i], $set[$i]); - } - } else { - for ($i = 0; $i < $count; ++$i) { - $set[$i]->overflow = 0; - $obj->offsetSet($i, $set[$i]); - } - } - return $obj; - } - - /** - * @internal You should not use this directly from another application - * - * @param mixed $offset - * @param mixed $value - * @return void - * @throws SodiumException - * @throws TypeError - */ - public function offsetSet($offset, $value) - { - if (!($value instanceof ParagonIE_Sodium_Core32_Int32)) { - throw new InvalidArgumentException('Expected an instance of ParagonIE_Sodium_Core32_Int32'); - } - if (is_null($offset)) { - $this->container[] = $value; - } else { - ParagonIE_Sodium_Core32_Util::declareScalarType($offset, 'int', 1); - $this->container[(int) $offset] = $value; - } - } - - /** - * @internal You should not use this directly from another application - * - * @param mixed $offset - * @return bool - * @psalm-suppress MixedArrayOffset - */ - public function offsetExists($offset) - { - return isset($this->container[$offset]); - } - - /** - * @internal You should not use this directly from another application - * - * @param mixed $offset - * @return void - * @psalm-suppress MixedArrayOffset - */ - public function offsetUnset($offset) - { - unset($this->container[$offset]); - } - - /** - * @internal You should not use this directly from another application - * - * @param mixed $offset - * @return ParagonIE_Sodium_Core32_Int32 - * @psalm-suppress MixedArrayOffset - */ - public function offsetGet($offset) - { - if (!isset($this->container[$offset])) { - $this->container[(int) $offset] = new ParagonIE_Sodium_Core32_Int32(); - } - /** @var ParagonIE_Sodium_Core32_Int32 $get */ - $get = $this->container[$offset]; - return $get; - } - - /** - * @internal You should not use this directly from another application - * - * @return array - */ - public function __debugInfo() - { - if (empty($this->container)) { - return array(); - } - $c = array( - (int) ($this->container[0]->toInt()), - (int) ($this->container[1]->toInt()), - (int) ($this->container[2]->toInt()), - (int) ($this->container[3]->toInt()), - (int) ($this->container[4]->toInt()), - (int) ($this->container[5]->toInt()), - (int) ($this->container[6]->toInt()), - (int) ($this->container[7]->toInt()), - (int) ($this->container[8]->toInt()), - (int) ($this->container[9]->toInt()) - ); - - /* - $c = array( - ParagonIE_Sodium_Core_Util::bin2hex($this->container[0]->toReverseString()), - ParagonIE_Sodium_Core_Util::bin2hex($this->container[1]->toReverseString()), - ParagonIE_Sodium_Core_Util::bin2hex($this->container[2]->toReverseString()), - ParagonIE_Sodium_Core_Util::bin2hex($this->container[3]->toReverseString()), - ParagonIE_Sodium_Core_Util::bin2hex($this->container[4]->toReverseString()), - ParagonIE_Sodium_Core_Util::bin2hex($this->container[5]->toReverseString()), - ParagonIE_Sodium_Core_Util::bin2hex($this->container[6]->toReverseString()), - ParagonIE_Sodium_Core_Util::bin2hex($this->container[7]->toReverseString()), - ParagonIE_Sodium_Core_Util::bin2hex($this->container[8]->toReverseString()), - ParagonIE_Sodium_Core_Util::bin2hex($this->container[9]->toReverseString()) - ); - $c = array( - json_encode($this->container[0]->limbs), - json_encode($this->container[1]->limbs), - json_encode($this->container[2]->limbs), - json_encode($this->container[3]->limbs), - json_encode($this->container[4]->limbs), - json_encode($this->container[5]->limbs), - json_encode($this->container[6]->limbs), - json_encode($this->container[7]->limbs), - json_encode($this->container[8]->limbs), - json_encode($this->container[9]->limbs) - ); - */ - return array(implode(', ', $c)); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Cached.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Cached.php deleted file mode 100644 index 970481fddb71b..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Cached.php +++ /dev/null @@ -1,65 +0,0 @@ -YplusX = $YplusX; - if ($YminusX === null) { - $YminusX = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - } - $this->YminusX = $YminusX; - if ($Z === null) { - $Z = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - } - $this->Z = $Z; - if ($T2d === null) { - $T2d = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - } - $this->T2d = $T2d; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P1p1.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P1p1.php deleted file mode 100644 index ff10b1d7075f6..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P1p1.php +++ /dev/null @@ -1,67 +0,0 @@ -X = $x; - if ($y === null) { - $y = ParagonIE_Sodium_Core32_Curve25519::fe_0(); - } - $this->Y = $y; - if ($z === null) { - $z = ParagonIE_Sodium_Core32_Curve25519::fe_0(); - } - $this->Z = $z; - if ($t === null) { - $t = ParagonIE_Sodium_Core32_Curve25519::fe_0(); - } - $this->T = $t; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P2.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P2.php deleted file mode 100644 index 8a45a913e7583..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P2.php +++ /dev/null @@ -1,54 +0,0 @@ -X = $x; - if ($y === null) { - $y = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - } - $this->Y = $y; - if ($z === null) { - $z = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - } - $this->Z = $z; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P3.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P3.php deleted file mode 100644 index c9e4b16d9048b..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P3.php +++ /dev/null @@ -1,65 +0,0 @@ -X = $x; - if ($y === null) { - $y = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - } - $this->Y = $y; - if ($z === null) { - $z = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - } - $this->Z = $z; - if ($t === null) { - $t = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - } - $this->T = $t; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Precomp.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Precomp.php deleted file mode 100644 index b590b75de2b96..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Precomp.php +++ /dev/null @@ -1,56 +0,0 @@ -yplusx = $yplusx; - if ($yminusx === null) { - $yminusx = ParagonIE_Sodium_Core32_Curve25519::fe_0(); - } - $this->yminusx = $yminusx; - if ($xy2d === null) { - $xy2d = ParagonIE_Sodium_Core32_Curve25519::fe_0(); - } - $this->xy2d = $xy2d; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/H.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/H.php deleted file mode 100644 index 48c999a9f3a97..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/H.php +++ /dev/null @@ -1,1467 +0,0 @@ ->>> Basically, int[32][8][3][10] - */ - protected static $base = array( - array( - array( - array(25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605), - array(-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378), - array(-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546), - ), - array( - array(-12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303), - array(-21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081), - array(26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697), - ), - array( - array(15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024), - array(16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574), - array(30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357), - ), - array( - array(-17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540), - array(23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397), - array(7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325), - ), - array( - array(10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380), - array(4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306), - array(19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942), - ), - array( - array(-15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777), - array(-8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737), - array(-18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652), - ), - array( - array(5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766), - array(-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701), - array(28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300), - ), - array( - array(14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726), - array(-7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955), - array(27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425), - ), - ), - array( - array( - array(-13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171), - array(27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510), - array(17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660), - ), - array( - array(-10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639), - array(29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963), - array(5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950), - ), - array( - array(-27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568), - array(12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335), - array(25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628), - ), - array( - array(-26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007), - array(-2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772), - array(-22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653), - ), - array( - array(2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567), - array(13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686), - array(21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372), - ), - array( - array(-13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887), - array(-23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954), - array(-29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953), - ), - array( - array(24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833), - array(-16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532), - array(-22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876), - ), - array( - array(2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268), - array(33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214), - array(1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038), - ), - ), - array( - array( - array(6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800), - array(4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645), - array(-4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664), - ), - array( - array(1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933), - array(-25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182), - array(-17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222), - ), - array( - array(-18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991), - array(20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880), - array(9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092), - ), - array( - array(-16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295), - array(19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788), - array(8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553), - ), - array( - array(-15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026), - array(11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347), - array(-18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033), - ), - array( - array(-23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395), - array(-27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278), - array(1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890), - ), - array( - array(32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995), - array(-30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596), - array(-11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891), - ), - array( - array(31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060), - array(11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608), - array(-20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606), - ), - ), - array( - array( - array(7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389), - array(-19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016), - array(-11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341), - ), - array( - array(-22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505), - array(14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553), - array(-28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655), - ), - array( - array(15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220), - array(12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631), - array(-4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099), - ), - array( - array(26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556), - array(14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749), - array(236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930), - ), - array( - array(1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391), - array(5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253), - array(20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066), - ), - array( - array(24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958), - array(-11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082), - array(-28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383), - ), - array( - array(-30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521), - array(-11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807), - array(23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948), - ), - array( - array(9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134), - array(-32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455), - array(27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629), - ), - ), - array( - array( - array(-8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069), - array(-32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746), - array(24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919), - ), - array( - array(11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837), - array(8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906), - array(-28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771), - ), - array( - array(-25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817), - array(10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098), - array(10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409), - ), - array( - array(-12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504), - array(-26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727), - array(28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420), - ), - array( - array(-32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003), - array(-1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605), - array(-30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384), - ), - array( - array(-26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701), - array(-23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683), - array(29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708), - ), - array( - array(-3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563), - array(-19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260), - array(-5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387), - ), - array( - array(-19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672), - array(23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686), - array(-24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665), - ), - ), - array( - array( - array(11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182), - array(-31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277), - array(14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628), - ), - array( - array(-4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474), - array(-26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539), - array(-25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822), - ), - array( - array(-10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970), - array(19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756), - array(-24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508), - ), - array( - array(-26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683), - array(-10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655), - array(-20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158), - ), - array( - array(-4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125), - array(-15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839), - array(-20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664), - ), - array( - array(27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294), - array(-18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899), - array(-11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070), - ), - array( - array(3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294), - array(-15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949), - array(-21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083), - ), - array( - array(31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420), - array(-5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940), - array(29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396), - ), - ), - array( - array( - array(-12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567), - array(20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127), - array(-16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294), - ), - array( - array(-12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887), - array(22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964), - array(16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195), - ), - array( - array(9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244), - array(24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999), - array(-1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762), - ), - array( - array(-18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274), - array(-33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236), - array(-16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605), - ), - array( - array(-13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761), - array(-22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884), - array(-6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482), - ), - array( - array(-24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638), - array(-11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490), - array(-32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170), - ), - array( - array(5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736), - array(10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124), - array(-17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392), - ), - array( - array(8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029), - array(6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048), - array(28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958), - ), - ), - array( - array( - array(24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593), - array(26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071), - array(-11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692), - ), - array( - array(11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687), - array(-160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441), - array(-20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001), - ), - array( - array(-938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460), - array(-19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007), - array(-21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762), - ), - array( - array(15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005), - array(-9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674), - array(4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035), - ), - array( - array(7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590), - array(-2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957), - array(-30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812), - ), - array( - array(33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740), - array(-18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122), - array(-27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158), - ), - array( - array(8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885), - array(26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140), - array(19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857), - ), - array( - array(801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155), - array(19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260), - array(19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483), - ), - ), - array( - array( - array(-3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677), - array(32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815), - array(22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751), - ), - array( - array(-16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203), - array(-11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208), - array(1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230), - ), - array( - array(16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850), - array(-21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389), - array(-9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968), - ), - array( - array(-11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689), - array(14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880), - array(5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304), - ), - array( - array(30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632), - array(-3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412), - array(20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566), - ), - array( - array(-20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038), - array(-26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232), - array(-1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943), - ), - array( - array(17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856), - array(23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738), - array(15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971), - ), - array( - array(-27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718), - array(-13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697), - array(-11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883), - ), - ), - array( - array( - array(5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912), - array(-26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358), - array(3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849), - ), - array( - array(29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307), - array(-14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977), - array(-6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335), - ), - array( - array(-29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644), - array(-22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616), - array(-27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735), - ), - array( - array(-21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099), - array(29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341), - array(-936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336), - ), - array( - array(-23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646), - array(31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425), - array(-17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388), - ), - array( - array(-31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743), - array(-16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822), - array(-8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462), - ), - array( - array(18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985), - array(9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702), - array(-22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797), - ), - array( - array(21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293), - array(27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100), - array(19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688), - ), - ), - array( - array( - array(12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186), - array(2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610), - array(-2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707), - ), - array( - array(7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220), - array(915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025), - array(32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044), - ), - array( - array(32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992), - array(-4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027), - array(21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197), - ), - array( - array(8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901), - array(31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952), - array(19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878), - ), - array( - array(-28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390), - array(32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730), - array(2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730), - ), - array( - array(-19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180), - array(-30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272), - array(-15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715), - ), - array( - array(-22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970), - array(-31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772), - array(-17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865), - ), - array( - array(15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750), - array(20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373), - array(32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348), - ), - ), - array( - array( - array(9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144), - array(-22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195), - array(5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086), - ), - array( - array(-13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684), - array(-8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518), - array(-2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233), - ), - array( - array(-5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793), - array(-2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794), - array(580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435), - ), - array( - array(23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921), - array(13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518), - array(2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563), - ), - array( - array(14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278), - array(-27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024), - array(4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030), - ), - array( - array(10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783), - array(27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717), - array(6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844), - ), - array( - array(14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333), - array(16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048), - array(22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760), - ), - array( - array(-4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760), - array(-15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757), - array(-2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112), - ), - ), - array( - array( - array(-19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468), - array(3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184), - array(10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289), - ), - array( - array(15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066), - array(24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882), - array(13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226), - ), - array( - array(16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101), - array(29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279), - array(-6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811), - ), - array( - array(27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709), - array(20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714), - array(-2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121), - ), - array( - array(9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464), - array(12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847), - array(13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400), - ), - array( - array(4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414), - array(-15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158), - array(17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045), - ), - array( - array(-461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415), - array(-5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459), - array(-31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079), - ), - array( - array(21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412), - array(-20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743), - array(-14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836), - ), - ), - array( - array( - array(12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022), - array(18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429), - array(-6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065), - ), - array( - array(30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861), - array(10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000), - array(-33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101), - ), - array( - array(32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815), - array(29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642), - array(10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966), - ), - array( - array(25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574), - array(-21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742), - array(-18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689), - ), - array( - array(12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020), - array(-10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772), - array(3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982), - ), - array( - array(-14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953), - array(-16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218), - array(-17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265), - ), - array( - array(29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073), - array(-3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325), - array(-11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798), - ), - array( - array(-4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870), - array(-7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863), - array(-13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927), - ), - ), - array( - array( - array(-2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267), - array(-9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663), - array(22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862), - ), - array( - array(-25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673), - array(15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943), - array(15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020), - ), - array( - array(-4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238), - array(11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064), - array(14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795), - ), - array( - array(15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052), - array(-10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904), - array(29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531), - ), - array( - array(-13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979), - array(-5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841), - array(10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431), - ), - array( - array(10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324), - array(-31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940), - array(10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320), - ), - array( - array(-15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184), - array(14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114), - array(30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878), - ), - array( - array(12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784), - array(-2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091), - array(-16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585), - ), - ), - array( - array( - array(-8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208), - array(10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864), - array(17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661), - ), - array( - array(7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233), - array(26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212), - array(-12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525), - ), - array( - array(-24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068), - array(9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397), - array(-8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988), - ), - array( - array(5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889), - array(32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038), - array(14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697), - ), - array( - array(20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875), - array(-25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905), - array(-25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656), - ), - array( - array(11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818), - array(27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714), - array(10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203), - ), - array( - array(20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931), - array(-30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024), - array(-23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084), - ), - array( - array(-1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204), - array(20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817), - array(27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667), - ), - ), - array( - array( - array(11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504), - array(-12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768), - array(-19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255), - ), - array( - array(6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790), - array(1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438), - array(-22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333), - ), - array( - array(17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971), - array(31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905), - array(29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409), - ), - array( - array(12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409), - array(6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499), - array(-8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363), - ), - array( - array(28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664), - array(-11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324), - array(-21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940), - ), - array( - array(13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990), - array(-17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914), - array(-25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290), - ), - array( - array(24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257), - array(-6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433), - array(-16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236), - ), - array( - array(-12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045), - array(11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093), - array(-1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347), - ), - ), - array( - array( - array(-28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191), - array(-15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507), - array(-12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906), - ), - array( - array(3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018), - array(-16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109), - array(-23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926), - ), - array( - array(-24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528), - array(8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625), - array(-32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286), - ), - array( - array(2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033), - array(27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866), - array(21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896), - ), - array( - array(30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075), - array(26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347), - array(-22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437), - ), - array( - array(-5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165), - array(-18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588), - array(-32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193), - ), - array( - array(-19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017), - array(-28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883), - array(21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961), - ), - array( - array(8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043), - array(29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663), - array(-20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362), - ), - ), - array( - array( - array(-33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860), - array(2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466), - array(-24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063), - ), - array( - array(-26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997), - array(-1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295), - array(-13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369), - ), - array( - array(9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385), - array(18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109), - array(2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906), - ), - array( - array(4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424), - array(-19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185), - array(7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962), - ), - array( - array(-7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325), - array(10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593), - array(696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404), - ), - array( - array(-11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644), - array(17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801), - array(26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804), - ), - array( - array(-31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884), - array(-586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577), - array(-9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849), - ), - array( - array(32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473), - array(-8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644), - array(-2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319), - ), - ), - array( - array( - array(-11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599), - array(-9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768), - array(-27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084), - ), - array( - array(-27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328), - array(-15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369), - array(20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920), - ), - array( - array(12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815), - array(-32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025), - array(-21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397), - ), - array( - array(-20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448), - array(6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981), - array(30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165), - ), - array( - array(32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501), - array(17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073), - array(-1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861), - ), - array( - array(14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845), - array(-1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211), - array(18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870), - ), - array( - array(10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096), - array(33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803), - array(-32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168), - ), - array( - array(30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965), - array(-14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505), - array(18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598), - ), - ), - array( - array( - array(5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782), - array(5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900), - array(-31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479), - ), - array( - array(-12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208), - array(8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232), - array(17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719), - ), - array( - array(16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271), - array(-4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326), - array(-8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132), - ), - array( - array(14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300), - array(8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570), - array(15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670), - ), - array( - array(-2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994), - array(-12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913), - array(31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317), - ), - array( - array(-25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730), - array(842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096), - array(-4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078), - ), - array( - array(-15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411), - array(-19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905), - array(-9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654), - ), - array( - array(-28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870), - array(-23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498), - array(12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579), - ), - ), - array( - array( - array(14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677), - array(10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647), - array(-2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743), - ), - array( - array(-25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468), - array(21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375), - array(-25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155), - ), - array( - array(6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725), - array(-12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612), - array(-10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943), - ), - array( - array(-30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944), - array(30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928), - array(9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406), - ), - array( - array(22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139), - array(-8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963), - array(-31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693), - ), - array( - array(1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734), - array(-448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680), - array(-24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410), - ), - array( - array(-9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931), - array(-16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654), - array(22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710), - ), - array( - array(29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180), - array(-26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684), - array(-10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895), - ), - ), - array( - array( - array(22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501), - array(-11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413), - array(6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880), - ), - array( - array(-8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874), - array(22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962), - array(-7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899), - ), - array( - array(21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152), - array(9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063), - array(7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080), - ), - array( - array(-9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146), - array(-17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183), - array(-19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133), - ), - array( - array(-32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421), - array(-3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622), - array(-4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197), - ), - array( - array(2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663), - array(31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753), - array(4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755), - ), - array( - array(-9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862), - array(-26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118), - array(26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171), - ), - array( - array(15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380), - array(16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824), - array(28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270), - ), - ), - array( - array( - array(-817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438), - array(-31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584), - array(-594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562), - ), - array( - array(30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471), - array(18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610), - array(19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269), - ), - array( - array(-30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650), - array(14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369), - array(19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461), - ), - array( - array(30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462), - array(-5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793), - array(-2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218), - ), - array( - array(-24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226), - array(18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019), - array(-15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037), - ), - array( - array(31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171), - array(-17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132), - array(-28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841), - ), - array( - array(21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181), - array(-33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210), - array(-1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040), - ), - array( - array(3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935), - array(24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105), - array(-28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814), - ), - ), - array( - array( - array(793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852), - array(5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581), - array(-4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646), - ), - array( - array(10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844), - array(10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025), - array(27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453), - ), - array( - array(-23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068), - array(4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192), - array(-17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921), - ), - array( - array(-9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259), - array(-12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426), - array(-5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072), - ), - array( - array(-17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305), - array(13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832), - array(28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943), - ), - array( - array(-16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011), - array(24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447), - array(17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494), - ), - array( - array(-28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245), - array(-20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859), - array(28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915), - ), - array( - array(16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707), - array(10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848), - array(-11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224), - ), - ), - array( - array( - array(-25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391), - array(15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215), - array(-23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101), - ), - array( - array(23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713), - array(21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849), - array(-7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930), - ), - array( - array(-29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940), - array(-21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031), - array(-17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404), - ), - array( - array(-25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243), - array(-23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116), - array(-24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525), - ), - array( - array(-23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509), - array(-10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883), - array(15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865), - ), - array( - array(-3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660), - array(4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273), - array(-28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138), - ), - array( - array(-25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560), - array(-10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135), - array(2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941), - ), - array( - array(-4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739), - array(18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756), - array(-30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819), - ), - ), - array( - array( - array(-6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347), - array(-27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028), - array(21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075), - ), - array( - array(16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799), - array(-2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609), - array(-25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817), - ), - array( - array(-23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989), - array(-30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523), - array(4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278), - ), - array( - array(31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045), - array(19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377), - array(24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480), - ), - array( - array(17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016), - array(510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426), - array(18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525), - ), - array( - array(13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396), - array(9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080), - array(12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892), - ), - array( - array(15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275), - array(11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074), - array(20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140), - ), - array( - array(-16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717), - array(-1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101), - array(24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127), - ), - ), - array( - array( - array(-12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632), - array(-26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415), - array(-31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160), - ), - array( - array(31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876), - array(22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625), - array(-15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478), - ), - array( - array(27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164), - array(26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595), - array(-7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248), - ), - array( - array(-16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858), - array(15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193), - array(8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184), - ), - array( - array(-18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942), - array(-1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635), - array(21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948), - ), - array( - array(11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935), - array(-25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415), - array(-15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416), - ), - array( - array(-7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018), - array(4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778), - array(366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659), - ), - array( - array(-24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385), - array(18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503), - array(476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329), - ), - ), - array( - array( - array(20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056), - array(-13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838), - array(24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948), - ), - array( - array(-3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691), - array(-15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118), - array(-23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517), - ), - array( - array(-20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269), - array(-6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904), - array(-23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589), - ), - array( - array(-28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193), - array(-7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910), - array(-30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930), - ), - array( - array(-7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667), - array(25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481), - array(-9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876), - ), - array( - array(22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640), - array(-8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278), - array(-21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112), - ), - array( - array(26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272), - array(17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012), - array(-10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221), - ), - array( - array(30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046), - array(13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345), - array(-19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310), - ), - ), - array( - array( - array(19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937), - array(31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636), - array(-9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008), - ), - array( - array(-2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429), - array(-15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576), - array(31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066), - ), - array( - array(-9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490), - array(-12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104), - array(33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053), - ), - array( - array(31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275), - array(-20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511), - array(22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095), - ), - array( - array(-28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439), - array(23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939), - array(-23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424), - ), - array( - array(2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310), - array(3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608), - array(-32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079), - ), - array( - array(-23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101), - array(21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418), - array(18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576), - ), - array( - array(30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356), - array(9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996), - array(-26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099), - ), - ), - array( - array( - array(-26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728), - array(-13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658), - array(-10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242), - ), - array( - array(-21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001), - array(-4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766), - array(18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373), - ), - array( - array(26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458), - array(-17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628), - array(-13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657), - ), - array( - array(-23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062), - array(25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616), - array(31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014), - ), - array( - array(24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383), - array(-25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814), - array(-20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718), - ), - array( - array(30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417), - array(2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222), - array(33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444), - ), - array( - array(-20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597), - array(23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970), - array(1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799), - ), - array( - array(-5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647), - array(13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511), - array(-29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032), - ), - ), - array( - array( - array(9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834), - array(-23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461), - array(29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062), - ), - array( - array(-25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516), - array(-20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547), - array(-24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240), - ), - array( - array(-17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038), - array(-33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741), - array(16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103), - ), - array( - array(-19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747), - array(-1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323), - array(31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016), - ), - array( - array(-14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373), - array(15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228), - array(-2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141), - ), - array( - array(16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399), - array(11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831), - array(-185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376), - ), - array( - array(-32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313), - array(-18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958), - array(-6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577), - ), - array( - array(-22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743), - array(29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684), - array(-20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476), - ), - ) - ); - - /** - * See: libsodium's crypto_core/curve25519/ref10/base2.h - * - * @var array>> basically int[8][3] - */ - protected static $base2 = array( - array( - array(25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605), - array(-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378), - array(-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546), - ), - array( - array(15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024), - array(16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574), - array(30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357), - ), - array( - array(10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380), - array(4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306), - array(19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942), - ), - array( - array(5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766), - array(-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701), - array(28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300), - ), - array( - array(-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877), - array(-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951), - array(4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784), - ), - array( - array(-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436), - array(25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918), - array(23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877), - ), - array( - array(-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800), - array(-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305), - array(-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300), - ), - array( - array(-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876), - array(-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619), - array(-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683), - ) - ); - - /** - * 37095705934669439343138083508754565189542113879843219016388785533085940283555 - * - * @var array - */ - protected static $d = array( - -10913610, - 13857413, - -15372611, - 6949391, - 114729, - -8787816, - -6275908, - -3247719, - -18696448, - -12055116 - ); - - /** - * 2 * d = 16295367250680780974490674513165176452449235426866156013048779062215315747161 - * - * @var array - */ - protected static $d2 = array( - -21827239, - -5839606, - -30745221, - 13898782, - 229458, - 15978800, - -12551817, - -6495438, - 29715968, - 9444199 - ); - - /** - * sqrt(-1) - * - * @var array - */ - protected static $sqrtm1 = array( - -32595792, - -7943725, - 9377950, - 3500415, - 12389472, - -272473, - -25146209, - -2005654, - 326686, - 11406482 - ); -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/README.md b/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/README.md deleted file mode 100644 index e8097fa347506..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Curve25519 Data Structures - -These are PHP implementation of the [structs used in the ref10 curve25519 code](https://github.com/jedisct1/libsodium/blob/master/src/libsodium/include/sodium/private/curve25519_ref10.h). diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Ed25519.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Ed25519.php deleted file mode 100644 index 0128d8e0b189b..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Ed25519.php +++ /dev/null @@ -1,480 +0,0 @@ -X)) { - throw new SodiumException('Unexpected zero result'); - } - - # fe_1(one_minus_y); - # fe_sub(one_minus_y, one_minus_y, A.Y); - # fe_invert(one_minus_y, one_minus_y); - $one_minux_y = self::fe_invert( - self::fe_sub( - self::fe_1(), - $A->Y - ) - ); - - - # fe_1(x); - # fe_add(x, x, A.Y); - # fe_mul(x, x, one_minus_y); - $x = self::fe_mul( - self::fe_add(self::fe_1(), $A->Y), - $one_minux_y - ); - - # fe_tobytes(curve25519_pk, x); - return self::fe_tobytes($x); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sk_to_pk($sk) - { - return self::ge_p3_tobytes( - self::ge_scalarmult_base( - self::substr($sk, 0, 32) - ) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sign($message, $sk) - { - /** @var string $signature */ - $signature = self::sign_detached($message, $sk); - return $signature . $message; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message A signed message - * @param string $pk Public key - * @return string Message (without signature) - * @throws SodiumException - * @throws TypeError - */ - public static function sign_open($message, $pk) - { - /** @var string $signature */ - $signature = self::substr($message, 0, 64); - - /** @var string $message */ - $message = self::substr($message, 64); - - if (self::verify_detached($signature, $message, $pk)) { - return $message; - } - throw new SodiumException('Invalid signature'); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sign_detached($message, $sk) - { - # crypto_hash_sha512(az, sk, 32); - $az = hash('sha512', self::substr($sk, 0, 32), true); - - # az[0] &= 248; - # az[31] &= 63; - # az[31] |= 64; - $az[0] = self::intToChr(self::chrToInt($az[0]) & 248); - $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64); - - # crypto_hash_sha512_init(&hs); - # crypto_hash_sha512_update(&hs, az + 32, 32); - # crypto_hash_sha512_update(&hs, m, mlen); - # crypto_hash_sha512_final(&hs, nonce); - $hs = hash_init('sha512'); - hash_update($hs, self::substr($az, 32, 32)); - hash_update($hs, $message); - $nonceHash = hash_final($hs, true); - - # memmove(sig + 32, sk + 32, 32); - $pk = self::substr($sk, 32, 32); - - # sc_reduce(nonce); - # ge_scalarmult_base(&R, nonce); - # ge_p3_tobytes(sig, &R); - $nonce = self::sc_reduce($nonceHash) . self::substr($nonceHash, 32); - $sig = self::ge_p3_tobytes( - self::ge_scalarmult_base($nonce) - ); - - # crypto_hash_sha512_init(&hs); - # crypto_hash_sha512_update(&hs, sig, 64); - # crypto_hash_sha512_update(&hs, m, mlen); - # crypto_hash_sha512_final(&hs, hram); - $hs = hash_init('sha512'); - hash_update($hs, self::substr($sig, 0, 32)); - hash_update($hs, self::substr($pk, 0, 32)); - hash_update($hs, $message); - $hramHash = hash_final($hs, true); - - # sc_reduce(hram); - # sc_muladd(sig + 32, hram, az, nonce); - $hram = self::sc_reduce($hramHash); - $sigAfter = self::sc_muladd($hram, $az, $nonce); - $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32); - - try { - ParagonIE_Sodium_Compat::memzero($az); - } catch (SodiumException $ex) { - $az = null; - } - return $sig; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $sig - * @param string $message - * @param string $pk - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function verify_detached($sig, $message, $pk) - { - if (self::strlen($sig) < 64) { - throw new SodiumException('Signature is too short'); - } - if (self::check_S_lt_L(self::substr($sig, 32, 32))) { - throw new SodiumException('S < L - Invalid signature'); - } - if (self::small_order($sig)) { - throw new SodiumException('Signature is on too small of an order'); - } - if ((self::chrToInt($sig[63]) & 224) !== 0) { - throw new SodiumException('Invalid signature'); - } - $d = 0; - for ($i = 0; $i < 32; ++$i) { - $d |= self::chrToInt($pk[$i]); - } - if ($d === 0) { - throw new SodiumException('All zero public key'); - } - - /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */ - $orig = ParagonIE_Sodium_Compat::$fastMult; - - // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification. - ParagonIE_Sodium_Compat::$fastMult = true; - - /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A */ - $A = self::ge_frombytes_negate_vartime($pk); - - /** @var string $hDigest */ - $hDigest = hash( - 'sha512', - self::substr($sig, 0, 32) . - self::substr($pk, 0, 32) . - $message, - true - ); - - /** @var string $h */ - $h = self::sc_reduce($hDigest) . self::substr($hDigest, 32); - - /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $R */ - $R = self::ge_double_scalarmult_vartime( - $h, - $A, - self::substr($sig, 32) - ); - - /** @var string $rcheck */ - $rcheck = self::ge_tobytes($R); - - // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before. - ParagonIE_Sodium_Compat::$fastMult = $orig; - - return self::verify_32($rcheck, self::substr($sig, 0, 32)); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $S - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function check_S_lt_L($S) - { - if (self::strlen($S) < 32) { - throw new SodiumException('Signature must be 32 bytes'); - } - static $L = array( - 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, - 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10 - ); - /** @var array $L */ - $c = 0; - $n = 1; - $i = 32; - - do { - --$i; - $x = self::chrToInt($S[$i]); - $c |= ( - (($x - $L[$i]) >> 8) & $n - ); - $n &= ( - (($x ^ $L[$i]) - 1) >> 8 - ); - } while ($i !== 0); - - return $c === 0; - } - - /** - * @param string $R - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function small_order($R) - { - static $blacklist = array( - /* 0 (order 4) */ - array( - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - ), - /* 1 (order 1) */ - array( - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - ), - /* 2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */ - array( - 0x26, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, - 0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0, - 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39, - 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x05 - ), - /* 55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */ - array( - 0xc7, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, - 0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f, - 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6, - 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0x7a - ), - /* p-1 (order 2) */ - array( - 0x13, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, - 0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0, - 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39, - 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x85 - ), - /* p (order 4) */ - array( - 0xb4, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, - 0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f, - 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6, - 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0xfa - ), - /* p+1 (order 1) */ - array( - 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f - ), - /* p+2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */ - array( - 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f - ), - /* p+55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */ - array( - 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f - ), - /* 2p-1 (order 2) */ - array( - 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - ), - /* 2p (order 4) */ - array( - 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - ), - /* 2p+1 (order 1) */ - array( - 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - ) - ); - /** @var array> $blacklist */ - $countBlacklist = count($blacklist); - - for ($i = 0; $i < $countBlacklist; ++$i) { - $c = 0; - for ($j = 0; $j < 32; ++$j) { - $c |= self::chrToInt($R[$j]) ^ $blacklist[$i][$j]; - } - if ($c === 0) { - return true; - } - } - return false; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/HChaCha20.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/HChaCha20.php deleted file mode 100644 index 551d995e439f3..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/HChaCha20.php +++ /dev/null @@ -1,127 +0,0 @@ -toReverseString() . - $x1->toReverseString() . - $x2->toReverseString() . - $x3->toReverseString() . - $x12->toReverseString() . - $x13->toReverseString() . - $x14->toReverseString() . - $x15->toReverseString(); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/HSalsa20.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/HSalsa20.php deleted file mode 100644 index 39287f2d31792..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/HSalsa20.php +++ /dev/null @@ -1,141 +0,0 @@ - 0; $i -= 2) { - $x4 = $x4->xorInt32($x0->addInt32($x12)->rotateLeft(7)); - $x8 = $x8->xorInt32($x4->addInt32($x0)->rotateLeft(9)); - $x12 = $x12->xorInt32($x8->addInt32($x4)->rotateLeft(13)); - $x0 = $x0->xorInt32($x12->addInt32($x8)->rotateLeft(18)); - - $x9 = $x9->xorInt32($x5->addInt32($x1)->rotateLeft(7)); - $x13 = $x13->xorInt32($x9->addInt32($x5)->rotateLeft(9)); - $x1 = $x1->xorInt32($x13->addInt32($x9)->rotateLeft(13)); - $x5 = $x5->xorInt32($x1->addInt32($x13)->rotateLeft(18)); - - $x14 = $x14->xorInt32($x10->addInt32($x6)->rotateLeft(7)); - $x2 = $x2->xorInt32($x14->addInt32($x10)->rotateLeft(9)); - $x6 = $x6->xorInt32($x2->addInt32($x14)->rotateLeft(13)); - $x10 = $x10->xorInt32($x6->addInt32($x2)->rotateLeft(18)); - - $x3 = $x3->xorInt32($x15->addInt32($x11)->rotateLeft(7)); - $x7 = $x7->xorInt32($x3->addInt32($x15)->rotateLeft(9)); - $x11 = $x11->xorInt32($x7->addInt32($x3)->rotateLeft(13)); - $x15 = $x15->xorInt32($x11->addInt32($x7)->rotateLeft(18)); - - $x1 = $x1->xorInt32($x0->addInt32($x3)->rotateLeft(7)); - $x2 = $x2->xorInt32($x1->addInt32($x0)->rotateLeft(9)); - $x3 = $x3->xorInt32($x2->addInt32($x1)->rotateLeft(13)); - $x0 = $x0->xorInt32($x3->addInt32($x2)->rotateLeft(18)); - - $x6 = $x6->xorInt32($x5->addInt32($x4)->rotateLeft(7)); - $x7 = $x7->xorInt32($x6->addInt32($x5)->rotateLeft(9)); - $x4 = $x4->xorInt32($x7->addInt32($x6)->rotateLeft(13)); - $x5 = $x5->xorInt32($x4->addInt32($x7)->rotateLeft(18)); - - $x11 = $x11->xorInt32($x10->addInt32($x9)->rotateLeft(7)); - $x8 = $x8->xorInt32($x11->addInt32($x10)->rotateLeft(9)); - $x9 = $x9->xorInt32($x8->addInt32($x11)->rotateLeft(13)); - $x10 = $x10->xorInt32($x9->addInt32($x8)->rotateLeft(18)); - - $x12 = $x12->xorInt32($x15->addInt32($x14)->rotateLeft(7)); - $x13 = $x13->xorInt32($x12->addInt32($x15)->rotateLeft(9)); - $x14 = $x14->xorInt32($x13->addInt32($x12)->rotateLeft(13)); - $x15 = $x15->xorInt32($x14->addInt32($x13)->rotateLeft(18)); - } - - return $x0->toReverseString() . - $x5->toReverseString() . - $x10->toReverseString() . - $x15->toReverseString() . - $x6->toReverseString() . - $x7->toReverseString() . - $x8->toReverseString() . - $x9->toReverseString(); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Int32.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Int32.php deleted file mode 100644 index c5c8058cdf53d..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Int32.php +++ /dev/null @@ -1,650 +0,0 @@ - - two 16-bit integers - * - * 0 is the higher 16 bits - * 1 is the lower 16 bits - */ - public $limbs; - - /** - * @var int - */ - public $overflow = 0; - - /** - * @var bool - */ - public $unsignedInt = false; - - /** - * ParagonIE_Sodium_Core32_Int32 constructor. - * @param array $array - * @param bool $unsignedInt - */ - public function __construct($array = array(0, 0), $unsignedInt = false) - { - $this->limbs = array( - (int) $array[0], - (int) $array[1] - ); - $this->overflow = 0; - $this->unsignedInt = $unsignedInt; - } - - /** - * Adds two int32 objects - * - * @param ParagonIE_Sodium_Core32_Int32 $addend - * @return ParagonIE_Sodium_Core32_Int32 - */ - public function addInt32(ParagonIE_Sodium_Core32_Int32 $addend) - { - $return = new ParagonIE_Sodium_Core32_Int32(); - $return->unsignedInt = $this->unsignedInt; - - /** @var int $tmp */ - $tmp = $this->limbs[1] + $addend->limbs[1]; - /** @var int $carry */ - $carry = $tmp >> 16; - $return->limbs[1] = (int) ($tmp & 0xffff); - - /** @var int $tmp */ - $tmp = $this->limbs[0] + $addend->limbs[0] + $carry; - $return->limbs[0] = (int) ($tmp & 0xffff); - /** @var int overflow */ - $return->overflow = $this->overflow + $addend->overflow + ($tmp >> 16); - - return $return; - } - - /** - * Adds a normal integer to an int32 object - * - * @param int $int - * @return ParagonIE_Sodium_Core32_Int32 - * @throws SodiumException - * @throws TypeError - */ - public function addInt($int) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1); - - $return = new ParagonIE_Sodium_Core32_Int32(); - $return->unsignedInt = $this->unsignedInt; - - /** @var int $tmp */ - $tmp = ($this->limbs[1] & 0xffff) + ($int & 0xffff); - /** @var int $carry */ - $carry = $tmp >> 16; - $return->limbs[1] = (int) ($tmp & 0xffff); - - /** @var int $tmp */ - $tmp = $this->limbs[0] + (($int >> 16) & 0xffff) + $carry; - $return->limbs[0] = (int) ($tmp & 0xffff); - /** @var int overflow */ - $return->overflow = $this->overflow + ($tmp >> 16); - return $return; - } - - /** - * @param int $b - * @return int - */ - public function compareInt($b = 0) - { - $gt = 0; - $eq = 1; - - $i = 2; - $j = 0; - while ($i > 0) { - --$i; - /** @var int $x1 */ - $x1 = $this->limbs[$i]; - /** @var int $x2 */ - $x2 = ($b >> ($j << 4)) & 0xffff; - /** @var int $gt */ - $gt |= (($x2 - $x1) >> 8) & $eq; - /** @var int $eq */ - $eq &= (($x2 ^ $x1) - 1) >> 8; - } - return ($gt + $gt - $eq) + 1; - } - - /** - * @param int $m - * @return ParagonIE_Sodium_Core32_Int32 - */ - public function mask($m = 0) - { - /** @var int $hi */ - $hi = ($m >> 16) & 0xffff; - /** @var int $lo */ - $lo = ($m & 0xffff); - return new ParagonIE_Sodium_Core32_Int32( - array( - (int) ($this->limbs[0] & $hi), - (int) ($this->limbs[1] & $lo) - ), - $this->unsignedInt - ); - } - - /** - * @param int $int - * @param int $size - * @return ParagonIE_Sodium_Core32_Int32 - * @throws SodiumException - * @throws TypeError - */ - public function mulInt($int = 0, $size = 0) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1); - ParagonIE_Sodium_Core32_Util::declareScalarType($size, 'int', 2); - if (!$size) { - $size = 31; - } - /** @var int $size */ - - $a = clone $this; - $return = new ParagonIE_Sodium_Core32_Int32(); - $return->unsignedInt = $this->unsignedInt; - - for ($i = $size; $i >= 0; --$i) { - $m = (int) (-($int & 1)); - $return = $return->addInt32($a->mask($m)); - $a = $a->shiftLeft(1); - $int >>= 1; - } - return $return; - } - - /** - * @param ParagonIE_Sodium_Core32_Int32 $int - * @param int $size - * @return ParagonIE_Sodium_Core32_Int32 - * @throws SodiumException - * @throws TypeError - */ - public function mulInt32(ParagonIE_Sodium_Core32_Int32 $int, $size = 0) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($size, 'int', 2); - if (!$size) { - $size = 31; - } - /** @var int $size */ - - $a = clone $this; - $b = clone $int; - $return = new ParagonIE_Sodium_Core32_Int32(); - $return->unsignedInt = $this->unsignedInt; - - /** @var int $i */ - for ($i = $size; $i >= 0; --$i) { - $m = (int) (-($b->limbs[1] & 1)); - $return = $return->addInt32($a->mask($m)); - $a = $a->shiftLeft(1); - $b = $b->shiftRight(1); - } - return $return; - } - - /** - * OR this 32-bit integer with another. - * - * @param ParagonIE_Sodium_Core32_Int32 $b - * @return ParagonIE_Sodium_Core32_Int32 - */ - public function orInt32(ParagonIE_Sodium_Core32_Int32 $b) - { - $return = new ParagonIE_Sodium_Core32_Int32(); - $return->unsignedInt = $this->unsignedInt; - $return->limbs = array( - (int) ($this->limbs[0] | $b->limbs[0]), - (int) ($this->limbs[1] | $b->limbs[1]) - ); - /** @var int overflow */ - $return->overflow = $this->overflow | $b->overflow; - return $return; - } - - /** - * @param int $b - * @return bool - */ - public function isGreaterThan($b = 0) - { - return $this->compareInt($b) > 0; - } - - /** - * @param int $b - * @return bool - */ - public function isLessThanInt($b = 0) - { - return $this->compareInt($b) < 0; - } - - /** - * @param int $c - * @return ParagonIE_Sodium_Core32_Int32 - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArrayAccess - */ - public function rotateLeft($c = 0) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); - - $return = new ParagonIE_Sodium_Core32_Int32(); - $return->unsignedInt = $this->unsignedInt; - $c &= 31; - if ($c === 0) { - // NOP, but we want a copy. - $return->limbs = $this->limbs; - } else { - /** @var int $c */ - - /** @var int $idx_shift */ - $idx_shift = ($c >> 4) & 1; - - /** @var int $sub_shift */ - $sub_shift = $c & 15; - - /** @var array $limbs */ - $limbs =& $return->limbs; - - /** @var array $myLimbs */ - $myLimbs =& $this->limbs; - - for ($i = 1; $i >= 0; --$i) { - /** @var int $j */ - $j = ($i + $idx_shift) & 1; - /** @var int $k */ - $k = ($i + $idx_shift + 1) & 1; - $limbs[$i] = (int) ( - ( - ($myLimbs[$j] << $sub_shift) - | - ($myLimbs[$k] >> (16 - $sub_shift)) - ) & 0xffff - ); - } - } - return $return; - } - - /** - * Rotate to the right - * - * @param int $c - * @return ParagonIE_Sodium_Core32_Int32 - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArrayAccess - */ - public function rotateRight($c = 0) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); - - $return = new ParagonIE_Sodium_Core32_Int32(); - $return->unsignedInt = $this->unsignedInt; - $c &= 31; - /** @var int $c */ - if ($c === 0) { - // NOP, but we want a copy. - $return->limbs = $this->limbs; - } else { - /** @var int $c */ - - /** @var int $idx_shift */ - $idx_shift = ($c >> 4) & 1; - - /** @var int $sub_shift */ - $sub_shift = $c & 15; - - /** @var array $limbs */ - $limbs =& $return->limbs; - - /** @var array $myLimbs */ - $myLimbs =& $this->limbs; - - for ($i = 1; $i >= 0; --$i) { - /** @var int $j */ - $j = ($i - $idx_shift) & 1; - /** @var int $k */ - $k = ($i - $idx_shift - 1) & 1; - $limbs[$i] = (int) ( - ( - ($myLimbs[$j] >> (int) ($sub_shift)) - | - ($myLimbs[$k] << (16 - (int) ($sub_shift))) - ) & 0xffff - ); - } - } - return $return; - } - - /** - * @param bool $bool - * @return self - */ - public function setUnsignedInt($bool = false) - { - $this->unsignedInt = !empty($bool); - return $this; - } - - /** - * @param int $c - * @return ParagonIE_Sodium_Core32_Int32 - * @throws SodiumException - * @throws TypeError - */ - public function shiftLeft($c = 0) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); - $return = new ParagonIE_Sodium_Core32_Int32(); - $return->unsignedInt = $this->unsignedInt; - $c &= 63; - /** @var int $c */ - if ($c === 0) { - $return->limbs = $this->limbs; - } elseif ($c < 0) { - /** @var int $c */ - return $this->shiftRight(-$c); - } else { - /** @var int $c */ - /** @var int $tmp */ - $tmp = $this->limbs[1] << $c; - $return->limbs[1] = (int)($tmp & 0xffff); - /** @var int $carry */ - $carry = $tmp >> 16; - - /** @var int $tmp */ - $tmp = ($this->limbs[0] << $c) | ($carry & 0xffff); - $return->limbs[0] = (int) ($tmp & 0xffff); - } - return $return; - } - - /** - * @param int $c - * @return ParagonIE_Sodium_Core32_Int32 - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedOperand - */ - public function shiftRight($c = 0) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); - $return = new ParagonIE_Sodium_Core32_Int32(); - $return->unsignedInt = $this->unsignedInt; - $c &= 63; - /** @var int $c */ - if ($c >= 16) { - $return->limbs = array( - (int) ($this->overflow & 0xffff), - (int) ($this->limbs[0]) - ); - $return->overflow = $this->overflow >> 16; - return $return->shiftRight($c & 15); - } - if ($c === 0) { - $return->limbs = $this->limbs; - } elseif ($c < 0) { - /** @var int $c */ - return $this->shiftLeft(-$c); - } else { - if (is_null($c)) { - throw new TypeError(); - } - /** @var int $c */ - // $return->limbs[0] = (int) (($this->limbs[0] >> $c) & 0xffff); - $carryLeft = (int) ($this->overflow & ((1 << ($c + 1)) - 1)); - $return->limbs[0] = (int) ((($this->limbs[0] >> $c) | ($carryLeft << (16 - $c))) & 0xffff); - $carryRight = (int) ($this->limbs[0] & ((1 << ($c + 1)) - 1)); - $return->limbs[1] = (int) ((($this->limbs[1] >> $c) | ($carryRight << (16 - $c))) & 0xffff); - $return->overflow >>= $c; - } - return $return; - } - - /** - * Subtract a normal integer from an int32 object. - * - * @param int $int - * @return ParagonIE_Sodium_Core32_Int32 - * @throws SodiumException - * @throws TypeError - */ - public function subInt($int) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1); - - $return = new ParagonIE_Sodium_Core32_Int32(); - $return->unsignedInt = $this->unsignedInt; - - /** @var int $tmp */ - $tmp = $this->limbs[1] - ($int & 0xffff); - /** @var int $carry */ - $carry = $tmp >> 16; - $return->limbs[1] = (int) ($tmp & 0xffff); - - /** @var int $tmp */ - $tmp = $this->limbs[0] - (($int >> 16) & 0xffff) + $carry; - $return->limbs[0] = (int) ($tmp & 0xffff); - return $return; - } - - /** - * Subtract two int32 objects from each other - * - * @param ParagonIE_Sodium_Core32_Int32 $b - * @return ParagonIE_Sodium_Core32_Int32 - */ - public function subInt32(ParagonIE_Sodium_Core32_Int32 $b) - { - $return = new ParagonIE_Sodium_Core32_Int32(); - $return->unsignedInt = $this->unsignedInt; - - /** @var int $tmp */ - $tmp = $this->limbs[1] - ($b->limbs[1] & 0xffff); - /** @var int $carry */ - $carry = $tmp >> 16; - $return->limbs[1] = (int) ($tmp & 0xffff); - - /** @var int $tmp */ - $tmp = $this->limbs[0] - ($b->limbs[0] & 0xffff) + $carry; - $return->limbs[0] = (int) ($tmp & 0xffff); - return $return; - } - - /** - * XOR this 32-bit integer with another. - * - * @param ParagonIE_Sodium_Core32_Int32 $b - * @return ParagonIE_Sodium_Core32_Int32 - */ - public function xorInt32(ParagonIE_Sodium_Core32_Int32 $b) - { - $return = new ParagonIE_Sodium_Core32_Int32(); - $return->unsignedInt = $this->unsignedInt; - $return->limbs = array( - (int) ($this->limbs[0] ^ $b->limbs[0]), - (int) ($this->limbs[1] ^ $b->limbs[1]) - ); - return $return; - } - - /** - * @param int $signed - * @return self - * @throws SodiumException - * @throws TypeError - */ - public static function fromInt($signed) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($signed, 'int', 1);; - - return new ParagonIE_Sodium_Core32_Int32( - array( - (int) (($signed >> 16) & 0xffff), - (int) ($signed & 0xffff) - ) - ); - } - - /** - * @param string $string - * @return self - * @throws SodiumException - * @throws TypeError - */ - public static function fromString($string) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($string, 'string', 1); - $string = (string) $string; - if (ParagonIE_Sodium_Core32_Util::strlen($string) !== 4) { - throw new RangeException( - 'String must be 4 bytes; ' . ParagonIE_Sodium_Core32_Util::strlen($string) . ' given.' - ); - } - $return = new ParagonIE_Sodium_Core32_Int32(); - - $return->limbs[0] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[0]) & 0xff) << 8); - $return->limbs[0] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[1]) & 0xff); - $return->limbs[1] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[2]) & 0xff) << 8); - $return->limbs[1] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[3]) & 0xff); - return $return; - } - - /** - * @param string $string - * @return self - * @throws SodiumException - * @throws TypeError - */ - public static function fromReverseString($string) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($string, 'string', 1); - $string = (string) $string; - if (ParagonIE_Sodium_Core32_Util::strlen($string) !== 4) { - throw new RangeException( - 'String must be 4 bytes; ' . ParagonIE_Sodium_Core32_Util::strlen($string) . ' given.' - ); - } - $return = new ParagonIE_Sodium_Core32_Int32(); - - $return->limbs[0] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[3]) & 0xff) << 8); - $return->limbs[0] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[2]) & 0xff); - $return->limbs[1] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[1]) & 0xff) << 8); - $return->limbs[1] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[0]) & 0xff); - return $return; - } - - /** - * @return array - */ - public function toArray() - { - return array((int) ($this->limbs[0] << 16 | $this->limbs[1])); - } - - /** - * @return string - * @throws TypeError - */ - public function toString() - { - return - ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[0] >> 8) & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[0] & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[1] >> 8) & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[1] & 0xff); - } - - /** - * @return int - */ - public function toInt() - { - return (int) ( - (($this->limbs[0] & 0xffff) << 16) - | - ($this->limbs[1] & 0xffff) - ); - } - - /** - * @return ParagonIE_Sodium_Core32_Int32 - */ - public function toInt32() - { - $return = new ParagonIE_Sodium_Core32_Int32(); - $return->limbs[0] = (int) ($this->limbs[0] & 0xffff); - $return->limbs[1] = (int) ($this->limbs[1] & 0xffff); - $return->unsignedInt = $this->unsignedInt; - $return->overflow = (int) ($this->overflow & 0x7fffffff); - return $return; - } - - /** - * @return ParagonIE_Sodium_Core32_Int64 - */ - public function toInt64() - { - $return = new ParagonIE_Sodium_Core32_Int64(); - $return->unsignedInt = $this->unsignedInt; - if ($this->unsignedInt) { - $return->limbs[0] += (($this->overflow >> 16) & 0xffff); - $return->limbs[1] += (($this->overflow) & 0xffff); - } else { - $neg = -(($this->limbs[0] >> 15) & 1); - $return->limbs[0] = (int)($neg & 0xffff); - $return->limbs[1] = (int)($neg & 0xffff); - } - $return->limbs[2] = (int) ($this->limbs[0] & 0xffff); - $return->limbs[3] = (int) ($this->limbs[1] & 0xffff); - return $return; - } - - /** - * @return string - * @throws TypeError - */ - public function toReverseString() - { - return ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[1] & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[1] >> 8) & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[0] & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[0] >> 8) & 0xff); - } - - /** - * @return string - */ - public function __toString() - { - try { - return $this->toString(); - } catch (TypeError $ex) { - // PHP engine can't handle exceptions from __toString() - return ''; - } - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Int64.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Int64.php deleted file mode 100644 index f7a9975395a8f..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Int64.php +++ /dev/null @@ -1,743 +0,0 @@ - - four 16-bit integers - */ - public $limbs; - - /** - * @var int - */ - public $overflow = 0; - - /** - * @var bool - */ - public $unsignedInt = false; - - /** - * ParagonIE_Sodium_Core32_Int64 constructor. - * @param array $array - * @param bool $unsignedInt - */ - public function __construct($array = array(0, 0, 0, 0), $unsignedInt = false) - { - $this->limbs = array( - (int) $array[0], - (int) $array[1], - (int) $array[2], - (int) $array[3] - ); - $this->overflow = 0; - $this->unsignedInt = $unsignedInt; - } - - /** - * Adds two int64 objects - * - * @param ParagonIE_Sodium_Core32_Int64 $addend - * @return ParagonIE_Sodium_Core32_Int64 - */ - public function addInt64(ParagonIE_Sodium_Core32_Int64 $addend) - { - $return = new ParagonIE_Sodium_Core32_Int64(); - $return->unsignedInt = $this->unsignedInt; - /** @var int $carry */ - $carry = 0; - for ($i = 3; $i >= 0; --$i) { - /** @var int $tmp */ - $tmp = $this->limbs[$i] + $addend->limbs[$i] + $carry; - /** @var int $carry */ - $carry = $tmp >> 16; - $return->limbs[$i] = (int) ($tmp & 0xffff); - } - $return->overflow = $carry; - return $return; - } - - /** - * Adds a normal integer to an int64 object - * - * @param int $int - * @return ParagonIE_Sodium_Core32_Int64 - * @throws TypeError - */ - public function addInt($int) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1); - - $return = new ParagonIE_Sodium_Core32_Int64(); - $return->unsignedInt = $this->unsignedInt; - /** @var int $carry */ - $carry = 0; - for ($i = 3; $i >= 0; --$i) { - /** @var int $step */ - $step = (3 - $i) << 4; // 0, 16, 32, 48 - if ($i < 2) { - /** @var int $toAdd */ - $toAdd = 0; - } else { - /** @var int $toAdd */ - $toAdd = (($int >> $step) & 0xffff); - } - /** @var int $tmp */ - $tmp = $this->limbs[$i] + $toAdd + $carry; - - /** @var int $carry */ - $carry = $tmp >> 16; - $return->limbs[$i] = (int) ($tmp & 0xffff); - } - /** @var int overflow */ - $return->overflow = $carry; - return $return; - } - - /** - * @param int $b - * @return int - */ - public function compareInt($b = 0) - { - $gt = 0; - $eq = 1; - - $i = 4; - $j = 0; - while ($i > 0) { - --$i; - /** @var int $x1 */ - $x1 = $this->limbs[$i]; - /** @var int $x2 */ - $x2 = ($b >> ($j << 4)) & 0xffff; - /** int */ - $gt |= (($x2 - $x1) >> 8) & $eq; - /** int */ - $eq &= (($x2 ^ $x1) - 1) >> 8; - } - return ($gt + $gt - $eq) + 1; - } - - /** - * @param int $b - * @return bool - */ - public function isGreaterThan($b = 0) - { - return $this->compareInt($b) > 0; - } - - /** - * @param int $b - * @return bool - */ - public function isLessThanInt($b = 0) - { - return $this->compareInt($b) < 0; - } - - /** - * @param int $hi - * @param int $lo - * @return ParagonIE_Sodium_Core32_Int64 - */ - public function mask64($hi = 0, $lo = 0) - { - /** @var int $a */ - $a = ($hi >> 16) & 0xffff; - /** @var int $b */ - $b = ($hi) & 0xffff; - /** @var int $c */ - $c = ($lo >> 16) & 0xffff; - /** @var int $d */ - $d = ($lo & 0xffff); - return new ParagonIE_Sodium_Core32_Int64( - array( - $this->limbs[0] & $a, - $this->limbs[1] & $b, - $this->limbs[2] & $c, - $this->limbs[3] & $d - ), - $this->unsignedInt - ); - } - - /** - * @param int $int - * @param int $size - * @return ParagonIE_Sodium_Core32_Int64 - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedAssignment - */ - public function mulInt($int = 0, $size = 0) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1); - ParagonIE_Sodium_Core32_Util::declareScalarType($size, 'int', 2); - if (!$size) { - $size = 63; - } - - $a = clone $this; - $return = new ParagonIE_Sodium_Core32_Int64(); - $return->unsignedInt = $this->unsignedInt; - - for ($i = $size; $i >= 0; --$i) { - $return = $return->addInt64( - $a->mask64( - (int) (-($int & 1)), - (int) (-($int & 1)) - ) - ); - $a = $a->shiftLeft(1); - $int >>= 1; - } - return $return; - } - - /** - * @param ParagonIE_Sodium_Core32_Int64 $A - * @param ParagonIE_Sodium_Core32_Int64 $B - * @return array - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedInferredReturnType - */ - public static function ctSelect( - ParagonIE_Sodium_Core32_Int64 $A, - ParagonIE_Sodium_Core32_Int64 $B - ) { - $a = clone $A; - $b = clone $B; - /** @var int $aNeg */ - $aNeg = ($a->limbs[0] >> 15) & 1; - /** @var int $bNeg */ - $bNeg = ($b->limbs[0] >> 15) & 1; - /** @var int $m */ - $m = (-($aNeg & $bNeg)) | 1; - /** @var int $swap */ - $swap = $bNeg & ~$aNeg; - /** @var int $d */ - $d = -$swap; - - /* - if ($bNeg && !$aNeg) { - $a = clone $int; - $b = clone $this; - } elseif($bNeg && $aNeg) { - $a = $this->mulInt(-1); - $b = $int->mulInt(-1); - } - */ - $x = $a->xorInt64($b)->mask64($d, $d); - return array( - $a->xorInt64($x)->mulInt($m), - $b->xorInt64($x)->mulInt($m) - ); - } - - /** - * @param ParagonIE_Sodium_Core32_Int64 $int - * @param int $size - * @return ParagonIE_Sodium_Core32_Int64 - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedAssignment - */ - public function mulInt64(ParagonIE_Sodium_Core32_Int64 $int, $size = 0) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($size, 'int', 2); - if (!$size) { - $size = 63; - } - list($a, $b) = self::ctSelect($this, $int); - - $return = new ParagonIE_Sodium_Core32_Int64(); - $return->unsignedInt = $this->unsignedInt; - - /** @var int $size $i */ - /** @var int $i */ - for ($i = $size; $i >= 0; --$i) { - $return = $return->addInt64( - $a->mask64( - (int) (-($b->limbs[3] & 1)), - (int) (-($b->limbs[3] & 1)) - ) - ); - $a = $a->shiftLeft(1); - $b = $b->shiftRight(1); - } - return $return; - } - - /** - * OR this 64-bit integer with another. - * - * @param ParagonIE_Sodium_Core32_Int64 $b - * @return ParagonIE_Sodium_Core32_Int64 - */ - public function orInt64(ParagonIE_Sodium_Core32_Int64 $b) - { - $return = new ParagonIE_Sodium_Core32_Int64(); - $return->unsignedInt = $this->unsignedInt; - $return->limbs = array( - (int) ($this->limbs[0] | $b->limbs[0]), - (int) ($this->limbs[1] | $b->limbs[1]), - (int) ($this->limbs[2] | $b->limbs[2]), - (int) ($this->limbs[3] | $b->limbs[3]) - ); - return $return; - } - - /** - * @param int $c - * @return ParagonIE_Sodium_Core32_Int64 - * @throws TypeError - * @psalm-suppress MixedArrayAccess - */ - public function rotateLeft($c = 0) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); - - $return = new ParagonIE_Sodium_Core32_Int64(); - $return->unsignedInt = $this->unsignedInt; - $c &= 63; - if ($c === 0) { - // NOP, but we want a copy. - $return->limbs = $this->limbs; - } else { - /** @var array $limbs */ - $limbs =& $return->limbs; - - /** @var array $myLimbs */ - $myLimbs =& $this->limbs; - - /** @var int $idx_shift */ - $idx_shift = ($c >> 4) & 3; - /** @var int $sub_shift */ - $sub_shift = $c & 15; - - for ($i = 3; $i >= 0; --$i) { - /** @var int $j */ - $j = ($i + $idx_shift) & 3; - /** @var int $k */ - $k = ($i + $idx_shift + 1) & 3; - $limbs[$i] = (int) ( - ( - ($myLimbs[$j] << $sub_shift) - | - ($myLimbs[$k] >> (16 - $sub_shift)) - ) & 0xffff - ); - } - } - return $return; - } - - /** - * Rotate to the right - * - * @param int $c - * @return ParagonIE_Sodium_Core32_Int64 - * @throws TypeError - * @psalm-suppress MixedArrayAccess - */ - public function rotateRight($c = 0) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); - - /** @var ParagonIE_Sodium_Core32_Int64 $return */ - $return = new ParagonIE_Sodium_Core32_Int64(); - $return->unsignedInt = $this->unsignedInt; - $c &= 63; - /** @var int $c */ - if ($c === 0) { - // NOP, but we want a copy. - $return->limbs = $this->limbs; - } else { - /** @var array $limbs */ - $limbs =& $return->limbs; - - /** @var array $myLimbs */ - $myLimbs =& $this->limbs; - - /** @var int $idx_shift */ - $idx_shift = ($c >> 4) & 3; - /** @var int $sub_shift */ - $sub_shift = $c & 15; - - for ($i = 3; $i >= 0; --$i) { - /** @var int $j */ - $j = ($i - $idx_shift) & 3; - /** @var int $k */ - $k = ($i - $idx_shift - 1) & 3; - $limbs[$i] = (int) ( - ( - ($myLimbs[$j] >> (int) ($sub_shift)) - | - ($myLimbs[$k] << (16 - (int) ($sub_shift))) - ) & 0xffff - ); - } - } - return $return; - } - /** - * @param int $c - * @return ParagonIE_Sodium_Core32_Int64 - * @throws SodiumException - * @throws TypeError - */ - public function shiftLeft($c = 0) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); - $return = new ParagonIE_Sodium_Core32_Int64(); - $return->unsignedInt = $this->unsignedInt; - $c &= 63; - /** @var int $c */ - - if ($c >= 16) { - if ($c >= 48) { - $return->limbs = array( - $this->limbs[3], 0, 0, 0 - ); - } elseif ($c >= 32) { - $return->limbs = array( - $this->limbs[2], $this->limbs[3], 0, 0 - ); - } else { - $return->limbs = array( - $this->limbs[1], $this->limbs[2], $this->limbs[3], 0 - ); - } - return $return->shiftLeft($c & 15); - } - if ($c === 0) { - $return->limbs = $this->limbs; - } elseif ($c < 0) { - /** @var int $c */ - return $this->shiftRight(-$c); - } else { - if (is_null($c)) { - throw new TypeError(); - } - /** @var int $carry */ - $carry = 0; - for ($i = 3; $i >= 0; --$i) { - /** @var int $tmp */ - $tmp = ($this->limbs[$i] << $c) | ($carry & 0xffff); - $return->limbs[$i] = (int) ($tmp & 0xffff); - /** @var int $carry */ - $carry = $tmp >> 16; - } - } - return $return; - } - - /** - * @param int $c - * @return ParagonIE_Sodium_Core32_Int64 - * @throws SodiumException - * @throws TypeError - */ - public function shiftRight($c = 0) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($c, 'int', 1); - $return = new ParagonIE_Sodium_Core32_Int64(); - $return->unsignedInt = $this->unsignedInt; - $c &= 63; - /** @var int $c */ - - $negative = -(($this->limbs[0] >> 15) & 1); - if ($c >= 16) { - if ($c >= 48) { - $return->limbs = array( - (int) ($negative & 0xffff), - (int) ($negative & 0xffff), - (int) ($negative & 0xffff), - (int) $this->limbs[0] - ); - } elseif ($c >= 32) { - $return->limbs = array( - (int) ($negative & 0xffff), - (int) ($negative & 0xffff), - (int) $this->limbs[0], - (int) $this->limbs[1] - ); - } else { - $return->limbs = array( - (int) ($negative & 0xffff), - (int) $this->limbs[0], - (int) $this->limbs[1], - (int) $this->limbs[2] - ); - } - return $return->shiftRight($c & 15); - } - - if ($c === 0) { - $return->limbs = $this->limbs; - } elseif ($c < 0) { - return $this->shiftLeft(-$c); - } else { - if (!is_int($c)) { - throw new TypeError(); - } - /** @var int $carryRight */ - $carryRight = ($negative & 0xffff); - $mask = (int) (((1 << ($c + 1)) - 1) & 0xffff); - for ($i = 0; $i < 4; ++$i) { - $return->limbs[$i] = (int) ( - (($this->limbs[$i] >> $c) | ($carryRight << (16 - $c))) & 0xffff - ); - $carryRight = (int) ($this->limbs[$i] & $mask); - } - } - return $return; - } - - - /** - * Subtract a normal integer from an int64 object. - * - * @param int $int - * @return ParagonIE_Sodium_Core32_Int64 - * @throws TypeError - */ - public function subInt($int) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($int, 'int', 1); - - $return = new ParagonIE_Sodium_Core32_Int64(); - $return->unsignedInt = $this->unsignedInt; - - /** @var int $carry */ - $carry = 0; - for ($i = 3; $i >= 0; --$i) { - /** @var int $tmp */ - $tmp = $this->limbs[$i] - (($int >> 16) & 0xffff) + $carry; - /** @var int $carry */ - $carry = $tmp >> 16; - $return->limbs[$i] = (int) ($tmp & 0xffff); - } - return $return; - } - - /** - * The difference between two Int64 objects. - * - * @param ParagonIE_Sodium_Core32_Int64 $b - * @return ParagonIE_Sodium_Core32_Int64 - */ - public function subInt64(ParagonIE_Sodium_Core32_Int64 $b) - { - $return = new ParagonIE_Sodium_Core32_Int64(); - $return->unsignedInt = $this->unsignedInt; - /** @var int $carry */ - $carry = 0; - for ($i = 3; $i >= 0; --$i) { - /** @var int $tmp */ - $tmp = $this->limbs[$i] - $b->limbs[$i] + $carry; - /** @var int $carry */ - $carry = ($tmp >> 16); - $return->limbs[$i] = (int) ($tmp & 0xffff); - } - return $return; - } - - /** - * XOR this 64-bit integer with another. - * - * @param ParagonIE_Sodium_Core32_Int64 $b - * @return ParagonIE_Sodium_Core32_Int64 - */ - public function xorInt64(ParagonIE_Sodium_Core32_Int64 $b) - { - $return = new ParagonIE_Sodium_Core32_Int64(); - $return->unsignedInt = $this->unsignedInt; - $return->limbs = array( - (int) ($this->limbs[0] ^ $b->limbs[0]), - (int) ($this->limbs[1] ^ $b->limbs[1]), - (int) ($this->limbs[2] ^ $b->limbs[2]), - (int) ($this->limbs[3] ^ $b->limbs[3]) - ); - return $return; - } - - /** - * @param int $low - * @param int $high - * @return self - * @throws TypeError - */ - public static function fromInts($low, $high) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($low, 'int', 1); - ParagonIE_Sodium_Core32_Util::declareScalarType($high, 'int', 2); - - return new ParagonIE_Sodium_Core32_Int64( - array( - (int) (($high >> 16) & 0xffff), - (int) ($high & 0xffff), - (int) (($low >> 16) & 0xffff), - (int) ($low & 0xffff) - ) - ); - } - - /** - * @param string $string - * @return self - * @throws TypeError - */ - public static function fromString($string) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($string, 'string', 1); - $string = (string) $string; - if (ParagonIE_Sodium_Core32_Util::strlen($string) !== 8) { - throw new RangeException( - 'String must be 8 bytes; ' . ParagonIE_Sodium_Core32_Util::strlen($string) . ' given.' - ); - } - $return = new ParagonIE_Sodium_Core32_Int64(); - - $return->limbs[0] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[0]) & 0xff) << 8); - $return->limbs[0] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[1]) & 0xff); - $return->limbs[1] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[2]) & 0xff) << 8); - $return->limbs[1] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[3]) & 0xff); - $return->limbs[2] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[4]) & 0xff) << 8); - $return->limbs[2] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[5]) & 0xff); - $return->limbs[3] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[6]) & 0xff) << 8); - $return->limbs[3] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[7]) & 0xff); - return $return; - } - - /** - * @param string $string - * @return self - * @throws TypeError - */ - public static function fromReverseString($string) - { - ParagonIE_Sodium_Core32_Util::declareScalarType($string, 'string', 1); - $string = (string) $string; - if (ParagonIE_Sodium_Core32_Util::strlen($string) !== 8) { - throw new RangeException( - 'String must be 8 bytes; ' . ParagonIE_Sodium_Core32_Util::strlen($string) . ' given.' - ); - } - $return = new ParagonIE_Sodium_Core32_Int64(); - - $return->limbs[0] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[7]) & 0xff) << 8); - $return->limbs[0] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[6]) & 0xff); - $return->limbs[1] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[5]) & 0xff) << 8); - $return->limbs[1] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[4]) & 0xff); - $return->limbs[2] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[3]) & 0xff) << 8); - $return->limbs[2] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[2]) & 0xff); - $return->limbs[3] = (int) ((ParagonIE_Sodium_Core32_Util::chrToInt($string[1]) & 0xff) << 8); - $return->limbs[3] |= (ParagonIE_Sodium_Core32_Util::chrToInt($string[0]) & 0xff); - return $return; - } - - /** - * @return array - */ - public function toArray() - { - return array( - (int) ((($this->limbs[0] & 0xffff) << 16) | ($this->limbs[1] & 0xffff)), - (int) ((($this->limbs[2] & 0xffff) << 16) | ($this->limbs[3] & 0xffff)) - ); - } - - /** - * @return ParagonIE_Sodium_Core32_Int32 - */ - public function toInt32() - { - $return = new ParagonIE_Sodium_Core32_Int32(); - $return->limbs[0] = (int) ($this->limbs[2]); - $return->limbs[1] = (int) ($this->limbs[3]); - $return->unsignedInt = $this->unsignedInt; - $return->overflow = (int) (ParagonIE_Sodium_Core32_Util::abs($this->limbs[1], 16) & 0xffff); - return $return; - } - - /** - * @return ParagonIE_Sodium_Core32_Int64 - */ - public function toInt64() - { - $return = new ParagonIE_Sodium_Core32_Int64(); - $return->limbs[0] = (int) ($this->limbs[0]); - $return->limbs[1] = (int) ($this->limbs[1]); - $return->limbs[2] = (int) ($this->limbs[2]); - $return->limbs[3] = (int) ($this->limbs[3]); - $return->unsignedInt = $this->unsignedInt; - $return->overflow = ParagonIE_Sodium_Core32_Util::abs($this->overflow); - return $return; - } - - /** - * @param bool $bool - * @return self - */ - public function setUnsignedInt($bool = false) - { - $this->unsignedInt = !empty($bool); - return $this; - } - - /** - * @return string - * @throws TypeError - */ - public function toString() - { - return ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[0] >> 8) & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[0] & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[1] >> 8) & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[1] & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[2] >> 8) & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[2] & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[3] >> 8) & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[3] & 0xff); - } - - /** - * @return string - * @throws TypeError - */ - public function toReverseString() - { - return ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[3] & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[3] >> 8) & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[2] & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[2] >> 8) & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[1] & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[1] >> 8) & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr($this->limbs[0] & 0xff) . - ParagonIE_Sodium_Core32_Util::intToChr(($this->limbs[0] >> 8) & 0xff); - } - - /** - * @return string - */ - public function __toString() - { - try { - return $this->toString(); - } catch (TypeError $ex) { - // PHP engine can't handle exceptions from __toString() - return ''; - } - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Poly1305.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Poly1305.php deleted file mode 100644 index b9dfaf3c09ebb..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Poly1305.php +++ /dev/null @@ -1,63 +0,0 @@ -update($m) - ->finish(); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $mac - * @param string $m - * @param string $key - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function onetimeauth_verify($mac, $m, $key) - { - if (self::strlen($key) < 32) { - throw new InvalidArgumentException( - 'Key must be 32 bytes long.' - ); - } - $state = new ParagonIE_Sodium_Core32_Poly1305_State( - self::substr($key, 0, 32) - ); - $calc = $state - ->update($m) - ->finish(); - return self::verify_16($calc, $mac); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Poly1305/State.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Poly1305/State.php deleted file mode 100644 index 08a5399e419ca..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Poly1305/State.php +++ /dev/null @@ -1,451 +0,0 @@ - - */ - protected $buffer = array(); - - /** - * @var bool - */ - protected $final = false; - - /** - * @var array - */ - public $h; - - /** - * @var int - */ - protected $leftover = 0; - - /** - * @var array - */ - public $r; - - /** - * @var array - */ - public $pad; - - /** - * ParagonIE_Sodium_Core32_Poly1305_State constructor. - * - * @internal You should not use this directly from another application - * - * @param string $key - * @throws InvalidArgumentException - * @throws SodiumException - * @throws TypeError - */ - public function __construct($key = '') - { - if (self::strlen($key) < 32) { - throw new InvalidArgumentException( - 'Poly1305 requires a 32-byte key' - ); - } - /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */ - $this->r = array( - // st->r[0] = ... - ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 0, 4)) - ->setUnsignedInt(true) - ->mask(0x3ffffff), - // st->r[1] = ... - ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 3, 4)) - ->setUnsignedInt(true) - ->shiftRight(2) - ->mask(0x3ffff03), - // st->r[2] = ... - ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 6, 4)) - ->setUnsignedInt(true) - ->shiftRight(4) - ->mask(0x3ffc0ff), - // st->r[3] = ... - ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 9, 4)) - ->setUnsignedInt(true) - ->shiftRight(6) - ->mask(0x3f03fff), - // st->r[4] = ... - ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 12, 4)) - ->setUnsignedInt(true) - ->shiftRight(8) - ->mask(0x00fffff) - ); - - /* h = 0 */ - $this->h = array( - new ParagonIE_Sodium_Core32_Int32(array(0, 0), true), - new ParagonIE_Sodium_Core32_Int32(array(0, 0), true), - new ParagonIE_Sodium_Core32_Int32(array(0, 0), true), - new ParagonIE_Sodium_Core32_Int32(array(0, 0), true), - new ParagonIE_Sodium_Core32_Int32(array(0, 0), true) - ); - - /* save pad for later */ - $this->pad = array( - ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 16, 4)) - ->setUnsignedInt(true)->toInt64(), - ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 20, 4)) - ->setUnsignedInt(true)->toInt64(), - ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 24, 4)) - ->setUnsignedInt(true)->toInt64(), - ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 28, 4)) - ->setUnsignedInt(true)->toInt64(), - ); - - $this->leftover = 0; - $this->final = false; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @return self - * @throws SodiumException - * @throws TypeError - */ - public function update($message = '') - { - $bytes = self::strlen($message); - - /* handle leftover */ - if ($this->leftover) { - /** @var int $want */ - $want = ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE - $this->leftover; - if ($want > $bytes) { - $want = $bytes; - } - for ($i = 0; $i < $want; ++$i) { - $mi = self::chrToInt($message[$i]); - $this->buffer[$this->leftover + $i] = $mi; - } - // We snip off the leftmost bytes. - $message = self::substr($message, $want); - $bytes = self::strlen($message); - $this->leftover += $want; - if ($this->leftover < ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE) { - // We still don't have enough to run $this->blocks() - return $this; - } - - $this->blocks( - static::intArrayToString($this->buffer), - ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE - ); - $this->leftover = 0; - } - - /* process full blocks */ - if ($bytes >= ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE) { - /** @var int $want */ - $want = $bytes & ~(ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE - 1); - if ($want >= ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE) { - /** @var string $block */ - $block = self::substr($message, 0, $want); - if (self::strlen($block) >= ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE) { - $this->blocks($block, $want); - $message = self::substr($message, $want); - $bytes = self::strlen($message); - } - } - } - - /* store leftover */ - if ($bytes) { - for ($i = 0; $i < $bytes; ++$i) { - $mi = self::chrToInt($message[$i]); - $this->buffer[$this->leftover + $i] = $mi; - } - $this->leftover = (int) $this->leftover + $bytes; - } - return $this; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param int $bytes - * @return self - * @throws SodiumException - * @throws TypeError - */ - public function blocks($message, $bytes) - { - if (self::strlen($message) < 16) { - $message = str_pad($message, 16, "\x00", STR_PAD_RIGHT); - } - $hibit = ParagonIE_Sodium_Core32_Int32::fromInt((int) ($this->final ? 0 : 1 << 24)); /* 1 << 128 */ - $hibit->setUnsignedInt(true); - $zero = new ParagonIE_Sodium_Core32_Int64(array(0, 0, 0, 0), true); - /** - * @var ParagonIE_Sodium_Core32_Int64 $d0 - * @var ParagonIE_Sodium_Core32_Int64 $d1 - * @var ParagonIE_Sodium_Core32_Int64 $d2 - * @var ParagonIE_Sodium_Core32_Int64 $d3 - * @var ParagonIE_Sodium_Core32_Int64 $d4 - * @var ParagonIE_Sodium_Core32_Int64 $r0 - * @var ParagonIE_Sodium_Core32_Int64 $r1 - * @var ParagonIE_Sodium_Core32_Int64 $r2 - * @var ParagonIE_Sodium_Core32_Int64 $r3 - * @var ParagonIE_Sodium_Core32_Int64 $r4 - * - * @var ParagonIE_Sodium_Core32_Int32 $h0 - * @var ParagonIE_Sodium_Core32_Int32 $h1 - * @var ParagonIE_Sodium_Core32_Int32 $h2 - * @var ParagonIE_Sodium_Core32_Int32 $h3 - * @var ParagonIE_Sodium_Core32_Int32 $h4 - */ - $r0 = $this->r[0]->toInt64(); - $r1 = $this->r[1]->toInt64(); - $r2 = $this->r[2]->toInt64(); - $r3 = $this->r[3]->toInt64(); - $r4 = $this->r[4]->toInt64(); - - $s1 = $r1->toInt64()->mulInt(5); - $s2 = $r2->toInt64()->mulInt(5); - $s3 = $r3->toInt64()->mulInt(5); - $s4 = $r4->toInt64()->mulInt(5); - - $h0 = $this->h[0]; - $h1 = $this->h[1]; - $h2 = $this->h[2]; - $h3 = $this->h[3]; - $h4 = $this->h[4]; - - while ($bytes >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { - /* h += m[i] */ - $h0 = $h0->addInt32( - ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 0, 4)) - ->mask(0x3ffffff) - ); - $h1 = $h1->addInt32( - ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 3, 4)) - ->shiftRight(2) - ->mask(0x3ffffff) - ); - $h2 = $h2->addInt32( - ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 6, 4)) - ->shiftRight(4) - ->mask(0x3ffffff) - ); - $h3 = $h3->addInt32( - ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 9, 4)) - ->shiftRight(6) - ->mask(0x3ffffff) - ); - $h4 = $h4->addInt32( - ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($message, 12, 4)) - ->shiftRight(8) - ->orInt32($hibit) - ); - - /* h *= r */ - $d0 = $zero - ->addInt64($h0->toInt64()->mulInt64($r0)) - ->addInt64($h1->toInt64()->mulInt64($s4)) - ->addInt64($h2->toInt64()->mulInt64($s3)) - ->addInt64($h3->toInt64()->mulInt64($s2)) - ->addInt64($h4->toInt64()->mulInt64($s1)); - - $d1 = $zero - ->addInt64($h0->toInt64()->mulInt64($r1)) - ->addInt64($h1->toInt64()->mulInt64($r0)) - ->addInt64($h2->toInt64()->mulInt64($s4)) - ->addInt64($h3->toInt64()->mulInt64($s3)) - ->addInt64($h4->toInt64()->mulInt64($s2)); - - $d2 = $zero - ->addInt64($h0->toInt64()->mulInt64($r2)) - ->addInt64($h1->toInt64()->mulInt64($r1)) - ->addInt64($h2->toInt64()->mulInt64($r0)) - ->addInt64($h3->toInt64()->mulInt64($s4)) - ->addInt64($h4->toInt64()->mulInt64($s3)); - - $d3 = $zero - ->addInt64($h0->toInt64()->mulInt64($r3)) - ->addInt64($h1->toInt64()->mulInt64($r2)) - ->addInt64($h2->toInt64()->mulInt64($r1)) - ->addInt64($h3->toInt64()->mulInt64($r0)) - ->addInt64($h4->toInt64()->mulInt64($s4)); - - $d4 = $zero - ->addInt64($h0->toInt64()->mulInt64($r4)) - ->addInt64($h1->toInt64()->mulInt64($r3)) - ->addInt64($h2->toInt64()->mulInt64($r2)) - ->addInt64($h3->toInt64()->mulInt64($r1)) - ->addInt64($h4->toInt64()->mulInt64($r0)); - - /* (partial) h %= p */ - $c = $d0->shiftRight(26); - $h0 = $d0->toInt32()->mask(0x3ffffff); - $d1 = $d1->addInt64($c); - - $c = $d1->shiftRight(26); - $h1 = $d1->toInt32()->mask(0x3ffffff); - $d2 = $d2->addInt64($c); - - $c = $d2->shiftRight(26); - $h2 = $d2->toInt32()->mask(0x3ffffff); - $d3 = $d3->addInt64($c); - - $c = $d3->shiftRight(26); - $h3 = $d3->toInt32()->mask(0x3ffffff); - $d4 = $d4->addInt64($c); - - $c = $d4->shiftRight(26); - $h4 = $d4->toInt32()->mask(0x3ffffff); - $h0 = $h0->addInt32($c->toInt32()->mulInt(5, 3)); - - $c = $h0->shiftRight(26); - $h0 = $h0->mask(0x3ffffff); - $h1 = $h1->addInt32($c); - - // Chop off the left 32 bytes. - $message = self::substr( - $message, - ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE - ); - $bytes -= ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE; - } - - /** @var array $h */ - $this->h = array($h0, $h1, $h2, $h3, $h4); - return $this; - } - - /** - * @internal You should not use this directly from another application - * - * @return string - * @throws SodiumException - * @throws TypeError - */ - public function finish() - { - /* process the remaining block */ - if ($this->leftover) { - $i = $this->leftover; - $this->buffer[$i++] = 1; - for (; $i < ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE; ++$i) { - $this->buffer[$i] = 0; - } - $this->final = true; - $this->blocks( - self::substr( - static::intArrayToString($this->buffer), - 0, - ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE - ), - $b = ParagonIE_Sodium_Core32_Poly1305::BLOCK_SIZE - ); - } - - /** - * @var ParagonIE_Sodium_Core32_Int32 $f - * @var ParagonIE_Sodium_Core32_Int32 $g0 - * @var ParagonIE_Sodium_Core32_Int32 $g1 - * @var ParagonIE_Sodium_Core32_Int32 $g2 - * @var ParagonIE_Sodium_Core32_Int32 $g3 - * @var ParagonIE_Sodium_Core32_Int32 $g4 - * @var ParagonIE_Sodium_Core32_Int32 $h0 - * @var ParagonIE_Sodium_Core32_Int32 $h1 - * @var ParagonIE_Sodium_Core32_Int32 $h2 - * @var ParagonIE_Sodium_Core32_Int32 $h3 - * @var ParagonIE_Sodium_Core32_Int32 $h4 - */ - $h0 = $this->h[0]; - $h1 = $this->h[1]; - $h2 = $this->h[2]; - $h3 = $this->h[3]; - $h4 = $this->h[4]; - - $c = $h1->shiftRight(26); # $c = $h1 >> 26; - $h1 = $h1->mask(0x3ffffff); # $h1 &= 0x3ffffff; - - $h2 = $h2->addInt32($c); # $h2 += $c; - $c = $h2->shiftRight(26); # $c = $h2 >> 26; - $h2 = $h2->mask(0x3ffffff); # $h2 &= 0x3ffffff; - - $h3 = $h3->addInt32($c); # $h3 += $c; - $c = $h3->shiftRight(26); # $c = $h3 >> 26; - $h3 = $h3->mask(0x3ffffff); # $h3 &= 0x3ffffff; - - $h4 = $h4->addInt32($c); # $h4 += $c; - $c = $h4->shiftRight(26); # $c = $h4 >> 26; - $h4 = $h4->mask(0x3ffffff); # $h4 &= 0x3ffffff; - - $h0 = $h0->addInt32($c->mulInt(5)); # $h0 += self::mul($c, 5); - $c = $h0->shiftRight(26); # $c = $h0 >> 26; - $h0 = $h0->mask(0x3ffffff); # $h0 &= 0x3ffffff; - $h1 = $h1->addInt32($c); # $h1 += $c; - - /* compute h + -p */ - $g0 = $h0->addInt(5); - $c = $g0->shiftRight(26); - $g0 = $g0->mask(0x3ffffff); - $g1 = $h1->addInt32($c); - $c = $g1->shiftRight(26); - $g1 = $g1->mask(0x3ffffff); - $g2 = $h2->addInt32($c); - $c = $g2->shiftRight(26); - $g2 = $g2->mask(0x3ffffff); - $g3 = $h3->addInt32($c); - $c = $g3->shiftRight(26); - $g3 = $g3->mask(0x3ffffff); - $g4 = $h4->addInt32($c)->subInt(1 << 26); - - # $mask = ($g4 >> 31) - 1; - /* select h if h < p, or h + -p if h >= p */ - $mask = (int) (($g4->toInt() >> 31) + 1); - - $g0 = $g0->mask($mask); - $g1 = $g1->mask($mask); - $g2 = $g2->mask($mask); - $g3 = $g3->mask($mask); - $g4 = $g4->mask($mask); - - /** @var int $mask */ - $mask = (~$mask) & 0xffffffff; - - $h0 = $h0->mask($mask)->orInt32($g0); - $h1 = $h1->mask($mask)->orInt32($g1); - $h2 = $h2->mask($mask)->orInt32($g2); - $h3 = $h3->mask($mask)->orInt32($g3); - $h4 = $h4->mask($mask)->orInt32($g4); - - /* h = h % (2^128) */ - $h0 = $h0->orInt32($h1->shiftLeft(26)); - $h1 = $h1->shiftRight(6)->orInt32($h2->shiftLeft(20)); - $h2 = $h2->shiftRight(12)->orInt32($h3->shiftLeft(14)); - $h3 = $h3->shiftRight(18)->orInt32($h4->shiftLeft(8)); - - /* mac = (h + pad) % (2^128) */ - $f = $h0->toInt64()->addInt64($this->pad[0]); - $h0 = $f->toInt32(); - $f = $h1->toInt64()->addInt64($this->pad[1])->addInt($h0->overflow); - $h1 = $f->toInt32(); - $f = $h2->toInt64()->addInt64($this->pad[2])->addInt($h1->overflow); - $h2 = $f->toInt32(); - $f = $h3->toInt64()->addInt64($this->pad[3])->addInt($h2->overflow); - $h3 = $f->toInt32(); - - return $h0->toReverseString() . - $h1->toReverseString() . - $h2->toReverseString() . - $h3->toReverseString(); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Salsa20.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Salsa20.php deleted file mode 100644 index d8c8073ce7894..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Salsa20.php +++ /dev/null @@ -1,306 +0,0 @@ - 0; $i -= 2) { - $x4 = $x4->xorInt32($x0->addInt32($x12)->rotateLeft(7)); - $x8 = $x8->xorInt32($x4->addInt32($x0)->rotateLeft(9)); - $x12 = $x12->xorInt32($x8->addInt32($x4)->rotateLeft(13)); - $x0 = $x0->xorInt32($x12->addInt32($x8)->rotateLeft(18)); - - $x9 = $x9->xorInt32($x5->addInt32($x1)->rotateLeft(7)); - $x13 = $x13->xorInt32($x9->addInt32($x5)->rotateLeft(9)); - $x1 = $x1->xorInt32($x13->addInt32($x9)->rotateLeft(13)); - $x5 = $x5->xorInt32($x1->addInt32($x13)->rotateLeft(18)); - - $x14 = $x14->xorInt32($x10->addInt32($x6)->rotateLeft(7)); - $x2 = $x2->xorInt32($x14->addInt32($x10)->rotateLeft(9)); - $x6 = $x6->xorInt32($x2->addInt32($x14)->rotateLeft(13)); - $x10 = $x10->xorInt32($x6->addInt32($x2)->rotateLeft(18)); - - $x3 = $x3->xorInt32($x15->addInt32($x11)->rotateLeft(7)); - $x7 = $x7->xorInt32($x3->addInt32($x15)->rotateLeft(9)); - $x11 = $x11->xorInt32($x7->addInt32($x3)->rotateLeft(13)); - $x15 = $x15->xorInt32($x11->addInt32($x7)->rotateLeft(18)); - - $x1 = $x1->xorInt32($x0->addInt32($x3)->rotateLeft(7)); - $x2 = $x2->xorInt32($x1->addInt32($x0)->rotateLeft(9)); - $x3 = $x3->xorInt32($x2->addInt32($x1)->rotateLeft(13)); - $x0 = $x0->xorInt32($x3->addInt32($x2)->rotateLeft(18)); - - $x6 = $x6->xorInt32($x5->addInt32($x4)->rotateLeft(7)); - $x7 = $x7->xorInt32($x6->addInt32($x5)->rotateLeft(9)); - $x4 = $x4->xorInt32($x7->addInt32($x6)->rotateLeft(13)); - $x5 = $x5->xorInt32($x4->addInt32($x7)->rotateLeft(18)); - - $x11 = $x11->xorInt32($x10->addInt32($x9)->rotateLeft(7)); - $x8 = $x8->xorInt32($x11->addInt32($x10)->rotateLeft(9)); - $x9 = $x9->xorInt32($x8->addInt32($x11)->rotateLeft(13)); - $x10 = $x10->xorInt32($x9->addInt32($x8)->rotateLeft(18)); - - $x12 = $x12->xorInt32($x15->addInt32($x14)->rotateLeft(7)); - $x13 = $x13->xorInt32($x12->addInt32($x15)->rotateLeft(9)); - $x14 = $x14->xorInt32($x13->addInt32($x12)->rotateLeft(13)); - $x15 = $x15->xorInt32($x14->addInt32($x13)->rotateLeft(18)); - } - - $x0 = $x0->addInt32($j0); - $x1 = $x1->addInt32($j1); - $x2 = $x2->addInt32($j2); - $x3 = $x3->addInt32($j3); - $x4 = $x4->addInt32($j4); - $x5 = $x5->addInt32($j5); - $x6 = $x6->addInt32($j6); - $x7 = $x7->addInt32($j7); - $x8 = $x8->addInt32($j8); - $x9 = $x9->addInt32($j9); - $x10 = $x10->addInt32($j10); - $x11 = $x11->addInt32($j11); - $x12 = $x12->addInt32($j12); - $x13 = $x13->addInt32($j13); - $x14 = $x14->addInt32($j14); - $x15 = $x15->addInt32($j15); - - return $x0->toReverseString() . - $x1->toReverseString() . - $x2->toReverseString() . - $x3->toReverseString() . - $x4->toReverseString() . - $x5->toReverseString() . - $x6->toReverseString() . - $x7->toReverseString() . - $x8->toReverseString() . - $x9->toReverseString() . - $x10->toReverseString() . - $x11->toReverseString() . - $x12->toReverseString() . - $x13->toReverseString() . - $x14->toReverseString() . - $x15->toReverseString(); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $len - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function salsa20($len, $nonce, $key) - { - if (self::strlen($key) !== 32) { - throw new RangeException('Key must be 32 bytes long'); - } - $kcopy = '' . $key; - $in = self::substr($nonce, 0, 8) . str_repeat("\0", 8); - $c = ''; - while ($len >= 64) { - $c .= self::core_salsa20($in, $kcopy, null); - $u = 1; - // Internal counter. - for ($i = 8; $i < 16; ++$i) { - $u += self::chrToInt($in[$i]); - $in[$i] = self::intToChr($u & 0xff); - $u >>= 8; - } - $len -= 64; - } - if ($len > 0) { - $c .= self::substr( - self::core_salsa20($in, $kcopy, null), - 0, - $len - ); - } - try { - ParagonIE_Sodium_Compat::memzero($kcopy); - } catch (SodiumException $ex) { - $kcopy = null; - } - return $c; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $m - * @param string $n - * @param int $ic - * @param string $k - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function salsa20_xor_ic($m, $n, $ic, $k) - { - $mlen = self::strlen($m); - if ($mlen < 1) { - return ''; - } - $kcopy = self::substr($k, 0, 32); - $in = self::substr($n, 0, 8); - // Initialize the counter - $in .= ParagonIE_Sodium_Core32_Util::store64_le($ic); - - $c = ''; - while ($mlen >= 64) { - $block = self::core_salsa20($in, $kcopy, null); - $c .= self::xorStrings( - self::substr($m, 0, 64), - self::substr($block, 0, 64) - ); - $u = 1; - for ($i = 8; $i < 16; ++$i) { - $u += self::chrToInt($in[$i]); - $in[$i] = self::intToChr($u & 0xff); - $u >>= 8; - } - - $mlen -= 64; - $m = self::substr($m, 64); - } - - if ($mlen) { - $block = self::core_salsa20($in, $kcopy, null); - $c .= self::xorStrings( - self::substr($m, 0, $mlen), - self::substr($block, 0, $mlen) - ); - } - try { - ParagonIE_Sodium_Compat::memzero($block); - ParagonIE_Sodium_Compat::memzero($kcopy); - } catch (SodiumException $ex) { - $block = null; - $kcopy = null; - } - - return $c; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function salsa20_xor($message, $nonce, $key) - { - return self::xorStrings( - $message, - self::salsa20( - self::strlen($message), - $nonce, - $key - ) - ); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/SipHash.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/SipHash.php deleted file mode 100644 index 6d43602a45bd0..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/SipHash.php +++ /dev/null @@ -1,239 +0,0 @@ - $v - * @return array - */ - public static function sipRound(array $v) - { - # v0 += v1; - $v[0] = $v[0]->addInt64($v[1]); - - # v1 = ROTL(v1, 13); - $v[1] = $v[1]->rotateLeft(13); - - # v1 ^= v0; - $v[1] = $v[1]->xorInt64($v[0]); - - # v0=ROTL(v0,32); - $v[0] = $v[0]->rotateLeft(32); - - # v2 += v3; - $v[2] = $v[2]->addInt64($v[3]); - - # v3=ROTL(v3,16); - $v[3] = $v[3]->rotateLeft(16); - - # v3 ^= v2; - $v[3] = $v[3]->xorInt64($v[2]); - - # v0 += v3; - $v[0] = $v[0]->addInt64($v[3]); - - # v3=ROTL(v3,21); - $v[3] = $v[3]->rotateLeft(21); - - # v3 ^= v0; - $v[3] = $v[3]->xorInt64($v[0]); - - # v2 += v1; - $v[2] = $v[2]->addInt64($v[1]); - - # v1=ROTL(v1,17); - $v[1] = $v[1]->rotateLeft(17); - - # v1 ^= v2; - $v[1] = $v[1]->xorInt64($v[2]); - - # v2=ROTL(v2,32) - $v[2] = $v[2]->rotateLeft(32); - - return $v; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $in - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sipHash24($in, $key) - { - $inlen = self::strlen($in); - - # /* "somepseudorandomlygeneratedbytes" */ - # u64 v0 = 0x736f6d6570736575ULL; - # u64 v1 = 0x646f72616e646f6dULL; - # u64 v2 = 0x6c7967656e657261ULL; - # u64 v3 = 0x7465646279746573ULL; - $v = array( - new ParagonIE_Sodium_Core32_Int64( - array(0x736f, 0x6d65, 0x7073, 0x6575) - ), - new ParagonIE_Sodium_Core32_Int64( - array(0x646f, 0x7261, 0x6e64, 0x6f6d) - ), - new ParagonIE_Sodium_Core32_Int64( - array(0x6c79, 0x6765, 0x6e65, 0x7261) - ), - new ParagonIE_Sodium_Core32_Int64( - array(0x7465, 0x6462, 0x7974, 0x6573) - ) - ); - - # u64 k0 = LOAD64_LE( k ); - # u64 k1 = LOAD64_LE( k + 8 ); - $k = array( - ParagonIE_Sodium_Core32_Int64::fromReverseString( - self::substr($key, 0, 8) - ), - ParagonIE_Sodium_Core32_Int64::fromReverseString( - self::substr($key, 8, 8) - ) - ); - - # b = ( ( u64 )inlen ) << 56; - $b = new ParagonIE_Sodium_Core32_Int64( - array(($inlen << 8) & 0xffff, 0, 0, 0) - ); - - # v3 ^= k1; - $v[3] = $v[3]->xorInt64($k[1]); - # v2 ^= k0; - $v[2] = $v[2]->xorInt64($k[0]); - # v1 ^= k1; - $v[1] = $v[1]->xorInt64($k[1]); - # v0 ^= k0; - $v[0] = $v[0]->xorInt64($k[0]); - - $left = $inlen; - # for ( ; in != end; in += 8 ) - while ($left >= 8) { - # m = LOAD64_LE( in ); - $m = ParagonIE_Sodium_Core32_Int64::fromReverseString( - self::substr($in, 0, 8) - ); - - # v3 ^= m; - $v[3] = $v[3]->xorInt64($m); - - # SIPROUND; - # SIPROUND; - $v = self::sipRound($v); - $v = self::sipRound($v); - - # v0 ^= m; - $v[0] = $v[0]->xorInt64($m); - - $in = self::substr($in, 8); - $left -= 8; - } - - # switch( left ) - # { - # case 7: b |= ( ( u64 )in[ 6] ) << 48; - # case 6: b |= ( ( u64 )in[ 5] ) << 40; - # case 5: b |= ( ( u64 )in[ 4] ) << 32; - # case 4: b |= ( ( u64 )in[ 3] ) << 24; - # case 3: b |= ( ( u64 )in[ 2] ) << 16; - # case 2: b |= ( ( u64 )in[ 1] ) << 8; - # case 1: b |= ( ( u64 )in[ 0] ); break; - # case 0: break; - # } - switch ($left) { - case 7: - $b = $b->orInt64( - ParagonIE_Sodium_Core32_Int64::fromInts( - 0, self::chrToInt($in[6]) << 16 - ) - ); - case 6: - $b = $b->orInt64( - ParagonIE_Sodium_Core32_Int64::fromInts( - 0, self::chrToInt($in[5]) << 8 - ) - ); - case 5: - $b = $b->orInt64( - ParagonIE_Sodium_Core32_Int64::fromInts( - 0, self::chrToInt($in[4]) - ) - ); - case 4: - $b = $b->orInt64( - ParagonIE_Sodium_Core32_Int64::fromInts( - self::chrToInt($in[3]) << 24, 0 - ) - ); - case 3: - $b = $b->orInt64( - ParagonIE_Sodium_Core32_Int64::fromInts( - self::chrToInt($in[2]) << 16, 0 - ) - ); - case 2: - $b = $b->orInt64( - ParagonIE_Sodium_Core32_Int64::fromInts( - self::chrToInt($in[1]) << 8, 0 - ) - ); - case 1: - $b = $b->orInt64( - ParagonIE_Sodium_Core32_Int64::fromInts( - self::chrToInt($in[0]), 0 - ) - ); - case 0: - break; - } - // See docblock for why the 0th index gets the higher bits. - - # v3 ^= b; - $v[3] = $v[3]->xorInt64($b); - - # SIPROUND; - # SIPROUND; - $v = self::sipRound($v); - $v = self::sipRound($v); - - # v0 ^= b; - $v[0] = $v[0]->xorInt64($b); - - // Flip the lower 8 bits of v2 which is ($v[4], $v[5]) in our implementation - # v2 ^= 0xff; - $v[2]->limbs[3] ^= 0xff; - - # SIPROUND; - # SIPROUND; - # SIPROUND; - # SIPROUND; - $v = self::sipRound($v); - $v = self::sipRound($v); - $v = self::sipRound($v); - $v = self::sipRound($v); - - # b = v0 ^ v1 ^ v2 ^ v3; - # STORE64_LE( out, b ); - return $v[0] - ->xorInt64($v[1]) - ->xorInt64($v[2]) - ->xorInt64($v[3]) - ->toReverseString(); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/Util.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/Util.php deleted file mode 100644 index f32e5adc61aae..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/Util.php +++ /dev/null @@ -1,13 +0,0 @@ -toInt(); - $f1 = (int) $f[1]->toInt(); - $f2 = (int) $f[2]->toInt(); - $f3 = (int) $f[3]->toInt(); - $f4 = (int) $f[4]->toInt(); - $f5 = (int) $f[5]->toInt(); - $f6 = (int) $f[6]->toInt(); - $f7 = (int) $f[7]->toInt(); - $f8 = (int) $f[8]->toInt(); - $f9 = (int) $f[9]->toInt(); - $g0 = (int) $g[0]->toInt(); - $g1 = (int) $g[1]->toInt(); - $g2 = (int) $g[2]->toInt(); - $g3 = (int) $g[3]->toInt(); - $g4 = (int) $g[4]->toInt(); - $g5 = (int) $g[5]->toInt(); - $g6 = (int) $g[6]->toInt(); - $g7 = (int) $g[7]->toInt(); - $g8 = (int) $g[8]->toInt(); - $g9 = (int) $g[9]->toInt(); - $b = -$b; - /** @var int $x0 */ - $x0 = ($f0 ^ $g0) & $b; - /** @var int $x1 */ - $x1 = ($f1 ^ $g1) & $b; - /** @var int $x2 */ - $x2 = ($f2 ^ $g2) & $b; - /** @var int $x3 */ - $x3 = ($f3 ^ $g3) & $b; - /** @var int $x4 */ - $x4 = ($f4 ^ $g4) & $b; - /** @var int $x5 */ - $x5 = ($f5 ^ $g5) & $b; - /** @var int $x6 */ - $x6 = ($f6 ^ $g6) & $b; - /** @var int $x7 */ - $x7 = ($f7 ^ $g7) & $b; - /** @var int $x8 */ - $x8 = ($f8 ^ $g8) & $b; - /** @var int $x9 */ - $x9 = ($f9 ^ $g9) & $b; - $f[0] = ParagonIE_Sodium_Core32_Int32::fromInt($f0 ^ $x0); - $f[1] = ParagonIE_Sodium_Core32_Int32::fromInt($f1 ^ $x1); - $f[2] = ParagonIE_Sodium_Core32_Int32::fromInt($f2 ^ $x2); - $f[3] = ParagonIE_Sodium_Core32_Int32::fromInt($f3 ^ $x3); - $f[4] = ParagonIE_Sodium_Core32_Int32::fromInt($f4 ^ $x4); - $f[5] = ParagonIE_Sodium_Core32_Int32::fromInt($f5 ^ $x5); - $f[6] = ParagonIE_Sodium_Core32_Int32::fromInt($f6 ^ $x6); - $f[7] = ParagonIE_Sodium_Core32_Int32::fromInt($f7 ^ $x7); - $f[8] = ParagonIE_Sodium_Core32_Int32::fromInt($f8 ^ $x8); - $f[9] = ParagonIE_Sodium_Core32_Int32::fromInt($f9 ^ $x9); - $g[0] = ParagonIE_Sodium_Core32_Int32::fromInt($g0 ^ $x0); - $g[1] = ParagonIE_Sodium_Core32_Int32::fromInt($g1 ^ $x1); - $g[2] = ParagonIE_Sodium_Core32_Int32::fromInt($g2 ^ $x2); - $g[3] = ParagonIE_Sodium_Core32_Int32::fromInt($g3 ^ $x3); - $g[4] = ParagonIE_Sodium_Core32_Int32::fromInt($g4 ^ $x4); - $g[5] = ParagonIE_Sodium_Core32_Int32::fromInt($g5 ^ $x5); - $g[6] = ParagonIE_Sodium_Core32_Int32::fromInt($g6 ^ $x6); - $g[7] = ParagonIE_Sodium_Core32_Int32::fromInt($g7 ^ $x7); - $g[8] = ParagonIE_Sodium_Core32_Int32::fromInt($g8 ^ $x8); - $g[9] = ParagonIE_Sodium_Core32_Int32::fromInt($g9 ^ $x9); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $f - * @return ParagonIE_Sodium_Core32_Curve25519_Fe - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedMethodCall - */ - public static function fe_mul121666(ParagonIE_Sodium_Core32_Curve25519_Fe $f) - { - /** @var array $h */ - $h = array(); - for ($i = 0; $i < 10; ++$i) { - $h[$i] = $f[$i]->toInt64()->mulInt(121666, 17); - } - - /** @var ParagonIE_Sodium_Core32_Int32 $carry9 */ - $carry9 = $h[9]->addInt(1 << 24)->shiftRight(25); - $h[0] = $h[0]->addInt64($carry9->mulInt(19, 5)); - $h[9] = $h[9]->subInt64($carry9->shiftLeft(25)); - - /** @var ParagonIE_Sodium_Core32_Int32 $carry1 */ - $carry1 = $h[1]->addInt(1 << 24)->shiftRight(25); - $h[2] = $h[2]->addInt64($carry1); - $h[1] = $h[1]->subInt64($carry1->shiftLeft(25)); - - /** @var ParagonIE_Sodium_Core32_Int32 $carry3 */ - $carry3 = $h[3]->addInt(1 << 24)->shiftRight(25); - $h[4] = $h[4]->addInt64($carry3); - $h[3] = $h[3]->subInt64($carry3->shiftLeft(25)); - - /** @var ParagonIE_Sodium_Core32_Int32 $carry5 */ - $carry5 = $h[5]->addInt(1 << 24)->shiftRight(25); - $h[6] = $h[6]->addInt64($carry5); - $h[5] = $h[5]->subInt64($carry5->shiftLeft(25)); - - /** @var ParagonIE_Sodium_Core32_Int32 $carry7 */ - $carry7 = $h[7]->addInt(1 << 24)->shiftRight(25); - $h[8] = $h[8]->addInt64($carry7); - $h[7] = $h[7]->subInt64($carry7->shiftLeft(25)); - - /** @var ParagonIE_Sodium_Core32_Int32 $carry0 */ - $carry0 = $h[0]->addInt(1 << 25)->shiftRight(26); - $h[1] = $h[1]->addInt64($carry0); - $h[0] = $h[0]->subInt64($carry0->shiftLeft(26)); - - /** @var ParagonIE_Sodium_Core32_Int32 $carry2 */ - $carry2 = $h[2]->addInt(1 << 25)->shiftRight(26); - $h[3] = $h[3]->addInt64($carry2); - $h[2] = $h[2]->subInt64($carry2->shiftLeft(26)); - - /** @var ParagonIE_Sodium_Core32_Int32 $carry4 */ - $carry4 = $h[4]->addInt(1 << 25)->shiftRight(26); - $h[5] = $h[5]->addInt64($carry4); - $h[4] = $h[4]->subInt64($carry4->shiftLeft(26)); - - /** @var ParagonIE_Sodium_Core32_Int32 $carry6 */ - $carry6 = $h[6]->addInt(1 << 25)->shiftRight(26); - $h[7] = $h[7]->addInt64($carry6); - $h[6] = $h[6]->subInt64($carry6->shiftLeft(26)); - - /** @var ParagonIE_Sodium_Core32_Int32 $carry8 */ - $carry8 = $h[8]->addInt(1 << 25)->shiftRight(26); - $h[9] = $h[9]->addInt64($carry8); - $h[8] = $h[8]->subInt64($carry8->shiftLeft(26)); - - for ($i = 0; $i < 10; ++$i) { - $h[$i] = $h[$i]->toInt32(); - } - /** @var array $h */ - return ParagonIE_Sodium_Core32_Curve25519_Fe::fromArray($h); - } - - /** - * @internal You should not use this directly from another application - * - * Inline comments preceded by # are from libsodium's ref10 code. - * - * @param string $n - * @param string $p - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function crypto_scalarmult_curve25519_ref10($n, $p) - { - # for (i = 0;i < 32;++i) e[i] = n[i]; - $e = '' . $n; - # e[0] &= 248; - $e[0] = self::intToChr( - self::chrToInt($e[0]) & 248 - ); - # e[31] &= 127; - # e[31] |= 64; - $e[31] = self::intToChr( - (self::chrToInt($e[31]) & 127) | 64 - ); - # fe_frombytes(x1,p); - $x1 = self::fe_frombytes($p); - # fe_1(x2); - $x2 = self::fe_1(); - # fe_0(z2); - $z2 = self::fe_0(); - # fe_copy(x3,x1); - $x3 = self::fe_copy($x1); - # fe_1(z3); - $z3 = self::fe_1(); - - # swap = 0; - /** @var int $swap */ - $swap = 0; - - # for (pos = 254;pos >= 0;--pos) { - for ($pos = 254; $pos >= 0; --$pos) { - # b = e[pos / 8] >> (pos & 7); - /** @var int $b */ - $b = self::chrToInt( - $e[(int) floor($pos / 8)] - ) >> ($pos & 7); - # b &= 1; - $b &= 1; - # swap ^= b; - $swap ^= $b; - # fe_cswap(x2,x3,swap); - self::fe_cswap($x2, $x3, $swap); - # fe_cswap(z2,z3,swap); - self::fe_cswap($z2, $z3, $swap); - # swap = b; - /** @var int $swap */ - $swap = $b; - # fe_sub(tmp0,x3,z3); - $tmp0 = self::fe_sub($x3, $z3); - # fe_sub(tmp1,x2,z2); - $tmp1 = self::fe_sub($x2, $z2); - - # fe_add(x2,x2,z2); - $x2 = self::fe_add($x2, $z2); - - # fe_add(z2,x3,z3); - $z2 = self::fe_add($x3, $z3); - - # fe_mul(z3,tmp0,x2); - $z3 = self::fe_mul($tmp0, $x2); - - # fe_mul(z2,z2,tmp1); - $z2 = self::fe_mul($z2, $tmp1); - - # fe_sq(tmp0,tmp1); - $tmp0 = self::fe_sq($tmp1); - - # fe_sq(tmp1,x2); - $tmp1 = self::fe_sq($x2); - - # fe_add(x3,z3,z2); - $x3 = self::fe_add($z3, $z2); - - # fe_sub(z2,z3,z2); - $z2 = self::fe_sub($z3, $z2); - - # fe_mul(x2,tmp1,tmp0); - $x2 = self::fe_mul($tmp1, $tmp0); - - # fe_sub(tmp1,tmp1,tmp0); - $tmp1 = self::fe_sub($tmp1, $tmp0); - - # fe_sq(z2,z2); - $z2 = self::fe_sq($z2); - - # fe_mul121666(z3,tmp1); - $z3 = self::fe_mul121666($tmp1); - - # fe_sq(x3,x3); - $x3 = self::fe_sq($x3); - - # fe_add(tmp0,tmp0,z3); - $tmp0 = self::fe_add($tmp0, $z3); - - # fe_mul(z3,x1,z2); - $z3 = self::fe_mul($x1, $z2); - - # fe_mul(z2,tmp1,tmp0); - $z2 = self::fe_mul($tmp1, $tmp0); - } - - # fe_cswap(x2,x3,swap); - self::fe_cswap($x2, $x3, $swap); - - # fe_cswap(z2,z3,swap); - self::fe_cswap($z2, $z3, $swap); - - # fe_invert(z2,z2); - $z2 = self::fe_invert($z2); - - # fe_mul(x2,x2,z2); - $x2 = self::fe_mul($x2, $z2); - # fe_tobytes(q,x2); - return (string) self::fe_tobytes($x2); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $edwardsY - * @param ParagonIE_Sodium_Core32_Curve25519_Fe $edwardsZ - * @return ParagonIE_Sodium_Core32_Curve25519_Fe - * @throws SodiumException - * @throws TypeError - */ - public static function edwards_to_montgomery( - ParagonIE_Sodium_Core32_Curve25519_Fe $edwardsY, - ParagonIE_Sodium_Core32_Curve25519_Fe $edwardsZ - ) { - $tempX = self::fe_add($edwardsZ, $edwardsY); - $tempZ = self::fe_sub($edwardsZ, $edwardsY); - $tempZ = self::fe_invert($tempZ); - return self::fe_mul($tempX, $tempZ); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $n - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function crypto_scalarmult_curve25519_ref10_base($n) - { - # for (i = 0;i < 32;++i) e[i] = n[i]; - $e = '' . $n; - - # e[0] &= 248; - $e[0] = self::intToChr( - self::chrToInt($e[0]) & 248 - ); - - # e[31] &= 127; - # e[31] |= 64; - $e[31] = self::intToChr( - (self::chrToInt($e[31]) & 127) | 64 - ); - - $A = self::ge_scalarmult_base($e); - if ( - !($A->Y instanceof ParagonIE_Sodium_Core32_Curve25519_Fe) - || - !($A->Z instanceof ParagonIE_Sodium_Core32_Curve25519_Fe) - ) { - throw new TypeError('Null points encountered'); - } - $pk = self::edwards_to_montgomery($A->Y, $A->Z); - return self::fe_tobytes($pk); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Core32/XChaCha20.php b/libraries/vendor/paragonie/sodium_compat/src/Core32/XChaCha20.php deleted file mode 100644 index 1dfc8591d7faf..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Core32/XChaCha20.php +++ /dev/null @@ -1,64 +0,0 @@ -update($ad); - $state->update(ParagonIE_Sodium_Core_Util::store64_le($adlen)); - $state->update($ciphertext); - $state->update(ParagonIE_Sodium_Core_Util::store64_le($clen)); - $computed_mac = $state->finish(); - - /* Compare the given MAC with the recalculated MAC: */ - if (!ParagonIE_Sodium_Core_Util::verify_16($computed_mac, $mac)) { - throw new SodiumException('Invalid MAC'); - } - - // Here, we know that the MAC is valid, so we decrypt and return the plaintext - return ParagonIE_Sodium_Core_ChaCha20::streamXorIc( - $ciphertext, - $nonce, - $key, - ParagonIE_Sodium_Core_Util::store64_le(1) - ); - } - - /** - * AEAD Encryption with ChaCha20-Poly1305 - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $ad - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function aead_chacha20poly1305_encrypt( - $message = '', - $ad = '', - $nonce = '', - $key = '' - ) { - /** @var int $len - Length of the plaintext message */ - $len = ParagonIE_Sodium_Core_Util::strlen($message); - - /** @var int $adlen - Length of the associated data */ - $adlen = ParagonIE_Sodium_Core_Util::strlen($ad); - - /** @var string The first block of the chacha20 keystream, used as a poly1305 key */ - $block0 = ParagonIE_Sodium_Core_ChaCha20::stream( - 32, - $nonce, - $key - ); - $state = new ParagonIE_Sodium_Core_Poly1305_State($block0); - try { - ParagonIE_Sodium_Compat::memzero($block0); - } catch (SodiumException $ex) { - $block0 = null; - } - - /** @var string $ciphertext - Raw encrypted data */ - $ciphertext = ParagonIE_Sodium_Core_ChaCha20::streamXorIc( - $message, - $nonce, - $key, - ParagonIE_Sodium_Core_Util::store64_le(1) - ); - - $state->update($ad); - $state->update(ParagonIE_Sodium_Core_Util::store64_le($adlen)); - $state->update($ciphertext); - $state->update(ParagonIE_Sodium_Core_Util::store64_le($len)); - return $ciphertext . $state->finish(); - } - - /** - * AEAD Decryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $ad - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function aead_chacha20poly1305_ietf_decrypt( - $message = '', - $ad = '', - $nonce = '', - $key = '' - ) { - /** @var int $adlen - Length of associated data */ - $adlen = ParagonIE_Sodium_Core_Util::strlen($ad); - - /** @var int $len - Length of message (ciphertext + MAC) */ - $len = ParagonIE_Sodium_Core_Util::strlen($message); - - /** @var int $clen - Length of ciphertext */ - $clen = $len - self::aead_chacha20poly1305_IETF_ABYTES; - - /** @var string The first block of the chacha20 keystream, used as a poly1305 key */ - $block0 = ParagonIE_Sodium_Core_ChaCha20::ietfStream( - 32, - $nonce, - $key - ); - - /** @var string $mac - Message authentication code */ - $mac = ParagonIE_Sodium_Core_Util::substr( - $message, - $len - self::aead_chacha20poly1305_IETF_ABYTES, - self::aead_chacha20poly1305_IETF_ABYTES - ); - - /** @var string $ciphertext - The encrypted message (sans MAC) */ - $ciphertext = ParagonIE_Sodium_Core_Util::substr( - $message, - 0, - $len - self::aead_chacha20poly1305_IETF_ABYTES - ); - - /* Recalculate the Poly1305 authentication tag (MAC): */ - $state = new ParagonIE_Sodium_Core_Poly1305_State($block0); - try { - ParagonIE_Sodium_Compat::memzero($block0); - } catch (SodiumException $ex) { - $block0 = null; - } - $state->update($ad); - $state->update(str_repeat("\x00", ((0x10 - $adlen) & 0xf))); - $state->update($ciphertext); - $state->update(str_repeat("\x00", (0x10 - $clen) & 0xf)); - $state->update(ParagonIE_Sodium_Core_Util::store64_le($adlen)); - $state->update(ParagonIE_Sodium_Core_Util::store64_le($clen)); - $computed_mac = $state->finish(); - - /* Compare the given MAC with the recalculated MAC: */ - if (!ParagonIE_Sodium_Core_Util::verify_16($computed_mac, $mac)) { - throw new SodiumException('Invalid MAC'); - } - - // Here, we know that the MAC is valid, so we decrypt and return the plaintext - return ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc( - $ciphertext, - $nonce, - $key, - ParagonIE_Sodium_Core_Util::store64_le(1) - ); - } - - /** - * AEAD Encryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $ad - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function aead_chacha20poly1305_ietf_encrypt( - $message = '', - $ad = '', - $nonce = '', - $key = '' - ) { - /** @var int $len - Length of the plaintext message */ - $len = ParagonIE_Sodium_Core_Util::strlen($message); - - /** @var int $adlen - Length of the associated data */ - $adlen = ParagonIE_Sodium_Core_Util::strlen($ad); - - /** @var string The first block of the chacha20 keystream, used as a poly1305 key */ - $block0 = ParagonIE_Sodium_Core_ChaCha20::ietfStream( - 32, - $nonce, - $key - ); - $state = new ParagonIE_Sodium_Core_Poly1305_State($block0); - try { - ParagonIE_Sodium_Compat::memzero($block0); - } catch (SodiumException $ex) { - $block0 = null; - } - - /** @var string $ciphertext - Raw encrypted data */ - $ciphertext = ParagonIE_Sodium_Core_ChaCha20::ietfStreamXorIc( - $message, - $nonce, - $key, - ParagonIE_Sodium_Core_Util::store64_le(1) - ); - - $state->update($ad); - $state->update(str_repeat("\x00", ((0x10 - $adlen) & 0xf))); - $state->update($ciphertext); - $state->update(str_repeat("\x00", ((0x10 - $len) & 0xf))); - $state->update(ParagonIE_Sodium_Core_Util::store64_le($adlen)); - $state->update(ParagonIE_Sodium_Core_Util::store64_le($len)); - return $ciphertext . $state->finish(); - } - - /** - * AEAD Decryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $ad - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function aead_xchacha20poly1305_ietf_decrypt( - $message = '', - $ad = '', - $nonce = '', - $key = '' - ) { - $subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20( - ParagonIE_Sodium_Core_Util::substr($nonce, 0, 16), - $key - ); - $nonceLast = "\x00\x00\x00\x00" . - ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8); - - return self::aead_chacha20poly1305_ietf_decrypt($message, $ad, $nonceLast, $subkey); - } - - /** - * AEAD Encryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $ad - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function aead_xchacha20poly1305_ietf_encrypt( - $message = '', - $ad = '', - $nonce = '', - $key = '' - ) { - $subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20( - ParagonIE_Sodium_Core_Util::substr($nonce, 0, 16), - $key - ); - $nonceLast = "\x00\x00\x00\x00" . - ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8); - - return self::aead_chacha20poly1305_ietf_encrypt($message, $ad, $nonceLast, $subkey); - } - - /** - * HMAC-SHA-512-256 (a.k.a. the leftmost 256 bits of HMAC-SHA-512) - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $key - * @return string - * @throws TypeError - */ - public static function auth($message, $key) - { - return ParagonIE_Sodium_Core_Util::substr( - hash_hmac('sha512', $message, $key, true), - 0, - 32 - ); - } - - /** - * HMAC-SHA-512-256 validation. Constant-time via hash_equals(). - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $mac - * @param string $message - * @param string $key - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function auth_verify($mac, $message, $key) - { - return ParagonIE_Sodium_Core_Util::hashEquals( - $mac, - self::auth($message, $key) - ); - } - - /** - * X25519 key exchange followed by XSalsa20Poly1305 symmetric encryption - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $plaintext - * @param string $nonce - * @param string $keypair - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function box($plaintext, $nonce, $keypair) - { - $c = self::secretbox( - $plaintext, - $nonce, - self::box_beforenm( - self::box_secretkey($keypair), - self::box_publickey($keypair) - ) - ); - return $c; - } - - /** - * X25519-XSalsa20-Poly1305 with one ephemeral X25519 keypair. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $publicKey - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function box_seal($message, $publicKey) - { - /** @var string $ephemeralKeypair */ - $ephemeralKeypair = self::box_keypair(); - - /** @var string $ephemeralSK */ - $ephemeralSK = self::box_secretkey($ephemeralKeypair); - - /** @var string $ephemeralPK */ - $ephemeralPK = self::box_publickey($ephemeralKeypair); - - /** @var string $nonce */ - $nonce = self::generichash( - $ephemeralPK . $publicKey, - '', - 24 - ); - - /** @var string $keypair - The combined keypair used in crypto_box() */ - $keypair = self::box_keypair_from_secretkey_and_publickey($ephemeralSK, $publicKey); - - /** @var string $ciphertext Ciphertext + MAC from crypto_box */ - $ciphertext = self::box($message, $nonce, $keypair); - try { - ParagonIE_Sodium_Compat::memzero($ephemeralKeypair); - ParagonIE_Sodium_Compat::memzero($ephemeralSK); - ParagonIE_Sodium_Compat::memzero($nonce); - } catch (SodiumException $ex) { - $ephemeralKeypair = null; - $ephemeralSK = null; - $nonce = null; - } - return $ephemeralPK . $ciphertext; - } - - /** - * Opens a message encrypted via box_seal(). - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $keypair - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function box_seal_open($message, $keypair) - { - /** @var string $ephemeralPK */ - $ephemeralPK = ParagonIE_Sodium_Core_Util::substr($message, 0, 32); - - /** @var string $ciphertext (ciphertext + MAC) */ - $ciphertext = ParagonIE_Sodium_Core_Util::substr($message, 32); - - /** @var string $secretKey */ - $secretKey = self::box_secretkey($keypair); - - /** @var string $publicKey */ - $publicKey = self::box_publickey($keypair); - - /** @var string $nonce */ - $nonce = self::generichash( - $ephemeralPK . $publicKey, - '', - 24 - ); - - /** @var string $keypair */ - $keypair = self::box_keypair_from_secretkey_and_publickey($secretKey, $ephemeralPK); - - /** @var string $m */ - $m = self::box_open($ciphertext, $nonce, $keypair); - try { - ParagonIE_Sodium_Compat::memzero($secretKey); - ParagonIE_Sodium_Compat::memzero($ephemeralPK); - ParagonIE_Sodium_Compat::memzero($nonce); - } catch (SodiumException $ex) { - $secretKey = null; - $ephemeralPK = null; - $nonce = null; - } - return $m; - } - - /** - * Used by crypto_box() to get the crypto_secretbox() key. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $sk - * @param string $pk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function box_beforenm($sk, $pk) - { - return ParagonIE_Sodium_Core_HSalsa20::hsalsa20( - str_repeat("\x00", 16), - self::scalarmult($sk, $pk) - ); - } - - /** - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function box_keypair() - { - $sKey = random_bytes(32); - $pKey = self::scalarmult_base($sKey); - return $sKey . $pKey; - } - - /** - * @param string $seed - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function box_seed_keypair($seed) - { - $sKey = ParagonIE_Sodium_Core_Util::substr( - hash('sha512', $seed, true), - 0, - 32 - ); - $pKey = self::scalarmult_base($sKey); - return $sKey . $pKey; - } - - /** - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $sKey - * @param string $pKey - * @return string - * @throws TypeError - */ - public static function box_keypair_from_secretkey_and_publickey($sKey, $pKey) - { - return ParagonIE_Sodium_Core_Util::substr($sKey, 0, 32) . - ParagonIE_Sodium_Core_Util::substr($pKey, 0, 32); - } - - /** - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $keypair - * @return string - * @throws RangeException - * @throws TypeError - */ - public static function box_secretkey($keypair) - { - if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== 64) { - throw new RangeException('Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES bytes long.'); - } - return ParagonIE_Sodium_Core_Util::substr($keypair, 0, 32); - } - - /** - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $keypair - * @return string - * @throws RangeException - * @throws TypeError - */ - public static function box_publickey($keypair) - { - if (ParagonIE_Sodium_Core_Util::strlen($keypair) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES) { - throw new RangeException('Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES bytes long.'); - } - return ParagonIE_Sodium_Core_Util::substr($keypair, 32, 32); - } - - /** - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $sKey - * @return string - * @throws RangeException - * @throws SodiumException - * @throws TypeError - */ - public static function box_publickey_from_secretkey($sKey) - { - if (ParagonIE_Sodium_Core_Util::strlen($sKey) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES) { - throw new RangeException('Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES bytes long.'); - } - return self::scalarmult_base($sKey); - } - - /** - * Decrypt a message encrypted with box(). - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $ciphertext - * @param string $nonce - * @param string $keypair - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function box_open($ciphertext, $nonce, $keypair) - { - return self::secretbox_open( - $ciphertext, - $nonce, - self::box_beforenm( - self::box_secretkey($keypair), - self::box_publickey($keypair) - ) - ); - } - - /** - * Calculate a BLAKE2b hash. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string|null $key - * @param int $outlen - * @return string - * @throws RangeException - * @throws SodiumException - * @throws TypeError - */ - public static function generichash($message, $key = '', $outlen = 32) - { - // This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized - ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor(); - - $k = null; - if (!empty($key)) { - /** @var SplFixedArray $k */ - $k = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($key); - if ($k->count() > ParagonIE_Sodium_Core_BLAKE2b::KEYBYTES) { - throw new RangeException('Invalid key size'); - } - } - - /** @var SplFixedArray $in */ - $in = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($message); - - /** @var SplFixedArray $ctx */ - $ctx = ParagonIE_Sodium_Core_BLAKE2b::init($k, $outlen); - ParagonIE_Sodium_Core_BLAKE2b::update($ctx, $in, $in->count()); - - /** @var SplFixedArray $out */ - $out = new SplFixedArray($outlen); - $out = ParagonIE_Sodium_Core_BLAKE2b::finish($ctx, $out); - - /** @var array */ - $outArray = $out->toArray(); - return ParagonIE_Sodium_Core_Util::intArrayToString($outArray); - } - - /** - * Finalize a BLAKE2b hashing context, returning the hash. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $ctx - * @param int $outlen - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function generichash_final($ctx, $outlen = 32) - { - if (!is_string($ctx)) { - throw new TypeError('Context must be a string'); - } - $out = new SplFixedArray($outlen); - - /** @var SplFixedArray $context */ - $context = ParagonIE_Sodium_Core_BLAKE2b::stringToContext($ctx); - - /** @var SplFixedArray $out */ - $out = ParagonIE_Sodium_Core_BLAKE2b::finish($context, $out); - - /** @var array */ - $outArray = $out->toArray(); - return ParagonIE_Sodium_Core_Util::intArrayToString($outArray); - } - - /** - * Initialize a hashing context for BLAKE2b. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $key - * @param int $outputLength - * @return string - * @throws RangeException - * @throws SodiumException - * @throws TypeError - */ - public static function generichash_init($key = '', $outputLength = 32) - { - // This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized - ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor(); - - $k = null; - if (!empty($key)) { - $k = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($key); - if ($k->count() > ParagonIE_Sodium_Core_BLAKE2b::KEYBYTES) { - throw new RangeException('Invalid key size'); - } - } - - /** @var SplFixedArray $ctx */ - $ctx = ParagonIE_Sodium_Core_BLAKE2b::init($k, $outputLength); - - return ParagonIE_Sodium_Core_BLAKE2b::contextToString($ctx); - } - - /** - * Update a hashing context for BLAKE2b with $message - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $ctx - * @param string $message - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function generichash_update($ctx, $message) - { - // This ensures that ParagonIE_Sodium_Core_BLAKE2b::$iv is initialized - ParagonIE_Sodium_Core_BLAKE2b::pseudoConstructor(); - - /** @var SplFixedArray $context */ - $context = ParagonIE_Sodium_Core_BLAKE2b::stringToContext($ctx); - - /** @var SplFixedArray $in */ - $in = ParagonIE_Sodium_Core_BLAKE2b::stringToSplFixedArray($message); - - ParagonIE_Sodium_Core_BLAKE2b::update($context, $in, $in->count()); - - return ParagonIE_Sodium_Core_BLAKE2b::contextToString($context); - } - - /** - * Libsodium's crypto_kx(). - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $my_sk - * @param string $their_pk - * @param string $client_pk - * @param string $server_pk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function keyExchange($my_sk, $their_pk, $client_pk, $server_pk) - { - return self::generichash( - self::scalarmult($my_sk, $their_pk) . - $client_pk . - $server_pk - ); - } - - /** - * ECDH over Curve25519 - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $sKey - * @param string $pKey - * @return string - * - * @throws SodiumException - * @throws TypeError - */ - public static function scalarmult($sKey, $pKey) - { - $q = ParagonIE_Sodium_Core_X25519::crypto_scalarmult_curve25519_ref10($sKey, $pKey); - self::scalarmult_throw_if_zero($q); - return $q; - } - - /** - * ECDH over Curve25519, using the basepoint. - * Used to get a secret key from a public key. - * - * @param string $secret - * @return string - * - * @throws SodiumException - * @throws TypeError - */ - public static function scalarmult_base($secret) - { - $q = ParagonIE_Sodium_Core_X25519::crypto_scalarmult_curve25519_ref10_base($secret); - self::scalarmult_throw_if_zero($q); - return $q; - } - - /** - * This throws an Error if a zero public key was passed to the function. - * - * @param string $q - * @return void - * @throws SodiumException - * @throws TypeError - */ - protected static function scalarmult_throw_if_zero($q) - { - $d = 0; - for ($i = 0; $i < self::box_curve25519xsalsa20poly1305_SECRETKEYBYTES; ++$i) { - $d |= ParagonIE_Sodium_Core_Util::chrToInt($q[$i]); - } - - /* branch-free variant of === 0 */ - if (-(1 & (($d - 1) >> 8))) { - throw new SodiumException('Zero public key is not allowed'); - } - } - - /** - * XSalsa20-Poly1305 authenticated symmetric-key encryption. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $plaintext - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function secretbox($plaintext, $nonce, $key) - { - /** @var string $subkey */ - $subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key); - - /** @var string $block0 */ - $block0 = str_repeat("\x00", 32); - - /** @var int $mlen - Length of the plaintext message */ - $mlen = ParagonIE_Sodium_Core_Util::strlen($plaintext); - $mlen0 = $mlen; - if ($mlen0 > 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES) { - $mlen0 = 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES; - } - $block0 .= ParagonIE_Sodium_Core_Util::substr($plaintext, 0, $mlen0); - - /** @var string $block0 */ - $block0 = ParagonIE_Sodium_Core_Salsa20::salsa20_xor( - $block0, - ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), - $subkey - ); - - /** @var string $c */ - $c = ParagonIE_Sodium_Core_Util::substr( - $block0, - self::secretbox_xsalsa20poly1305_ZEROBYTES - ); - if ($mlen > $mlen0) { - $c .= ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic( - ParagonIE_Sodium_Core_Util::substr( - $plaintext, - self::secretbox_xsalsa20poly1305_ZEROBYTES - ), - ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), - 1, - $subkey - ); - } - $state = new ParagonIE_Sodium_Core_Poly1305_State( - ParagonIE_Sodium_Core_Util::substr( - $block0, - 0, - self::onetimeauth_poly1305_KEYBYTES - ) - ); - try { - ParagonIE_Sodium_Compat::memzero($block0); - ParagonIE_Sodium_Compat::memzero($subkey); - } catch (SodiumException $ex) { - $block0 = null; - $subkey = null; - } - - $state->update($c); - - /** @var string $c - MAC || ciphertext */ - $c = $state->finish() . $c; - unset($state); - - return $c; - } - - /** - * Decrypt a ciphertext generated via secretbox(). - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $ciphertext - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function secretbox_open($ciphertext, $nonce, $key) - { - /** @var string $mac */ - $mac = ParagonIE_Sodium_Core_Util::substr( - $ciphertext, - 0, - self::secretbox_xsalsa20poly1305_MACBYTES - ); - - /** @var string $c */ - $c = ParagonIE_Sodium_Core_Util::substr( - $ciphertext, - self::secretbox_xsalsa20poly1305_MACBYTES - ); - - /** @var int $clen */ - $clen = ParagonIE_Sodium_Core_Util::strlen($c); - - /** @var string $subkey */ - $subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key); - - /** @var string $block0 */ - $block0 = ParagonIE_Sodium_Core_Salsa20::salsa20( - 64, - ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), - $subkey - ); - $verified = ParagonIE_Sodium_Core_Poly1305::onetimeauth_verify( - $mac, - $c, - ParagonIE_Sodium_Core_Util::substr($block0, 0, 32) - ); - if (!$verified) { - try { - ParagonIE_Sodium_Compat::memzero($subkey); - } catch (SodiumException $ex) { - $subkey = null; - } - throw new SodiumException('Invalid MAC'); - } - - /** @var string $m - Decrypted message */ - $m = ParagonIE_Sodium_Core_Util::xorStrings( - ParagonIE_Sodium_Core_Util::substr($block0, self::secretbox_xsalsa20poly1305_ZEROBYTES), - ParagonIE_Sodium_Core_Util::substr($c, 0, self::secretbox_xsalsa20poly1305_ZEROBYTES) - ); - if ($clen > self::secretbox_xsalsa20poly1305_ZEROBYTES) { - // We had more than 1 block, so let's continue to decrypt the rest. - $m .= ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic( - ParagonIE_Sodium_Core_Util::substr( - $c, - self::secretbox_xsalsa20poly1305_ZEROBYTES - ), - ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), - 1, - (string) $subkey - ); - } - return $m; - } - - /** - * XChaCha20-Poly1305 authenticated symmetric-key encryption. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $plaintext - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function secretbox_xchacha20poly1305($plaintext, $nonce, $key) - { - /** @var string $subkey */ - $subkey = ParagonIE_Sodium_Core_HChaCha20::hChaCha20( - ParagonIE_Sodium_Core_Util::substr($nonce, 0, 16), - $key - ); - $nonceLast = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8); - - /** @var string $block0 */ - $block0 = str_repeat("\x00", 32); - - /** @var int $mlen - Length of the plaintext message */ - $mlen = ParagonIE_Sodium_Core_Util::strlen($plaintext); - $mlen0 = $mlen; - if ($mlen0 > 64 - self::secretbox_xchacha20poly1305_ZEROBYTES) { - $mlen0 = 64 - self::secretbox_xchacha20poly1305_ZEROBYTES; - } - $block0 .= ParagonIE_Sodium_Core_Util::substr($plaintext, 0, $mlen0); - - /** @var string $block0 */ - $block0 = ParagonIE_Sodium_Core_ChaCha20::streamXorIc( - $block0, - $nonceLast, - $subkey - ); - - /** @var string $c */ - $c = ParagonIE_Sodium_Core_Util::substr( - $block0, - self::secretbox_xchacha20poly1305_ZEROBYTES - ); - if ($mlen > $mlen0) { - $c .= ParagonIE_Sodium_Core_ChaCha20::streamXorIc( - ParagonIE_Sodium_Core_Util::substr( - $plaintext, - self::secretbox_xchacha20poly1305_ZEROBYTES - ), - $nonceLast, - $subkey, - ParagonIE_Sodium_Core_Util::store64_le(1) - ); - } - $state = new ParagonIE_Sodium_Core_Poly1305_State( - ParagonIE_Sodium_Core_Util::substr( - $block0, - 0, - self::onetimeauth_poly1305_KEYBYTES - ) - ); - try { - ParagonIE_Sodium_Compat::memzero($block0); - ParagonIE_Sodium_Compat::memzero($subkey); - } catch (SodiumException $ex) { - $block0 = null; - $subkey = null; - } - - $state->update($c); - - /** @var string $c - MAC || ciphertext */ - $c = $state->finish() . $c; - unset($state); - - return $c; - } - - /** - * Decrypt a ciphertext generated via secretbox_xchacha20poly1305(). - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $ciphertext - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key) - { - /** @var string $mac */ - $mac = ParagonIE_Sodium_Core_Util::substr( - $ciphertext, - 0, - self::secretbox_xchacha20poly1305_MACBYTES - ); - - /** @var string $c */ - $c = ParagonIE_Sodium_Core_Util::substr( - $ciphertext, - self::secretbox_xchacha20poly1305_MACBYTES - ); - - /** @var int $clen */ - $clen = ParagonIE_Sodium_Core_Util::strlen($c); - - /** @var string $subkey */ - $subkey = ParagonIE_Sodium_Core_HChaCha20::hchacha20($nonce, $key); - - /** @var string $block0 */ - $block0 = ParagonIE_Sodium_Core_ChaCha20::stream( - 64, - ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), - $subkey - ); - $verified = ParagonIE_Sodium_Core_Poly1305::onetimeauth_verify( - $mac, - $c, - ParagonIE_Sodium_Core_Util::substr($block0, 0, 32) - ); - - if (!$verified) { - try { - ParagonIE_Sodium_Compat::memzero($subkey); - } catch (SodiumException $ex) { - $subkey = null; - } - throw new SodiumException('Invalid MAC'); - } - - /** @var string $m - Decrypted message */ - $m = ParagonIE_Sodium_Core_Util::xorStrings( - ParagonIE_Sodium_Core_Util::substr($block0, self::secretbox_xchacha20poly1305_ZEROBYTES), - ParagonIE_Sodium_Core_Util::substr($c, 0, self::secretbox_xchacha20poly1305_ZEROBYTES) - ); - - if ($clen > self::secretbox_xchacha20poly1305_ZEROBYTES) { - // We had more than 1 block, so let's continue to decrypt the rest. - $m .= ParagonIE_Sodium_Core_ChaCha20::streamXorIc( - ParagonIE_Sodium_Core_Util::substr( - $c, - self::secretbox_xchacha20poly1305_ZEROBYTES - ), - ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), - (string) $subkey, - ParagonIE_Sodium_Core_Util::store64_le(1) - ); - } - return $m; - } - - /** - * Detached Ed25519 signature. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sign_detached($message, $sk) - { - return ParagonIE_Sodium_Core_Ed25519::sign_detached($message, $sk); - } - - /** - * Attached Ed25519 signature. (Returns a signed message.) - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sign($message, $sk) - { - return ParagonIE_Sodium_Core_Ed25519::sign($message, $sk); - } - - /** - * Opens a signed message. If valid, returns the message. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $signedMessage - * @param string $pk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sign_open($signedMessage, $pk) - { - return ParagonIE_Sodium_Core_Ed25519::sign_open($signedMessage, $pk); - } - - /** - * Verify a detached signature of a given message and public key. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $signature - * @param string $message - * @param string $pk - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function sign_verify_detached($signature, $message, $pk) - { - return ParagonIE_Sodium_Core_Ed25519::verify_detached($signature, $message, $pk); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/Crypto32.php b/libraries/vendor/paragonie/sodium_compat/src/Crypto32.php deleted file mode 100644 index cd4e266114ae2..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/Crypto32.php +++ /dev/null @@ -1,1244 +0,0 @@ -update($ad); - $state->update(ParagonIE_Sodium_Core32_Util::store64_le($adlen)); - $state->update($ciphertext); - $state->update(ParagonIE_Sodium_Core32_Util::store64_le($clen)); - $computed_mac = $state->finish(); - - /* Compare the given MAC with the recalculated MAC: */ - if (!ParagonIE_Sodium_Core32_Util::verify_16($computed_mac, $mac)) { - throw new SodiumException('Invalid MAC'); - } - - // Here, we know that the MAC is valid, so we decrypt and return the plaintext - return ParagonIE_Sodium_Core32_ChaCha20::streamXorIc( - $ciphertext, - $nonce, - $key, - ParagonIE_Sodium_Core32_Util::store64_le(1) - ); - } - - /** - * AEAD Encryption with ChaCha20-Poly1305 - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $ad - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function aead_chacha20poly1305_encrypt( - $message = '', - $ad = '', - $nonce = '', - $key = '' - ) { - /** @var int $len - Length of the plaintext message */ - $len = ParagonIE_Sodium_Core32_Util::strlen($message); - - /** @var int $adlen - Length of the associated data */ - $adlen = ParagonIE_Sodium_Core32_Util::strlen($ad); - - /** @var string The first block of the chacha20 keystream, used as a poly1305 key */ - $block0 = ParagonIE_Sodium_Core32_ChaCha20::stream( - 32, - $nonce, - $key - ); - $state = new ParagonIE_Sodium_Core32_Poly1305_State($block0); - try { - ParagonIE_Sodium_Compat::memzero($block0); - } catch (SodiumException $ex) { - $block0 = null; - } - - /** @var string $ciphertext - Raw encrypted data */ - $ciphertext = ParagonIE_Sodium_Core32_ChaCha20::streamXorIc( - $message, - $nonce, - $key, - ParagonIE_Sodium_Core32_Util::store64_le(1) - ); - - $state->update($ad); - $state->update(ParagonIE_Sodium_Core32_Util::store64_le($adlen)); - $state->update($ciphertext); - $state->update(ParagonIE_Sodium_Core32_Util::store64_le($len)); - return $ciphertext . $state->finish(); - } - - /** - * AEAD Decryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $ad - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function aead_chacha20poly1305_ietf_decrypt( - $message = '', - $ad = '', - $nonce = '', - $key = '' - ) { - /** @var int $adlen - Length of associated data */ - $adlen = ParagonIE_Sodium_Core32_Util::strlen($ad); - - /** @var int $len - Length of message (ciphertext + MAC) */ - $len = ParagonIE_Sodium_Core32_Util::strlen($message); - - /** @var int $clen - Length of ciphertext */ - $clen = $len - self::aead_chacha20poly1305_IETF_ABYTES; - - /** @var string The first block of the chacha20 keystream, used as a poly1305 key */ - $block0 = ParagonIE_Sodium_Core32_ChaCha20::ietfStream( - 32, - $nonce, - $key - ); - - /** @var string $mac - Message authentication code */ - $mac = ParagonIE_Sodium_Core32_Util::substr( - $message, - $len - self::aead_chacha20poly1305_IETF_ABYTES, - self::aead_chacha20poly1305_IETF_ABYTES - ); - - /** @var string $ciphertext - The encrypted message (sans MAC) */ - $ciphertext = ParagonIE_Sodium_Core32_Util::substr( - $message, - 0, - $len - self::aead_chacha20poly1305_IETF_ABYTES - ); - - /* Recalculate the Poly1305 authentication tag (MAC): */ - $state = new ParagonIE_Sodium_Core32_Poly1305_State($block0); - try { - ParagonIE_Sodium_Compat::memzero($block0); - } catch (SodiumException $ex) { - $block0 = null; - } - $state->update($ad); - $state->update(str_repeat("\x00", ((0x10 - $adlen) & 0xf))); - $state->update($ciphertext); - $state->update(str_repeat("\x00", (0x10 - $clen) & 0xf)); - $state->update(ParagonIE_Sodium_Core32_Util::store64_le($adlen)); - $state->update(ParagonIE_Sodium_Core32_Util::store64_le($clen)); - $computed_mac = $state->finish(); - - /* Compare the given MAC with the recalculated MAC: */ - if (!ParagonIE_Sodium_Core32_Util::verify_16($computed_mac, $mac)) { - throw new SodiumException('Invalid MAC'); - } - - // Here, we know that the MAC is valid, so we decrypt and return the plaintext - return ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc( - $ciphertext, - $nonce, - $key, - ParagonIE_Sodium_Core32_Util::store64_le(1) - ); - } - - /** - * AEAD Encryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $ad - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function aead_chacha20poly1305_ietf_encrypt( - $message = '', - $ad = '', - $nonce = '', - $key = '' - ) { - /** @var int $len - Length of the plaintext message */ - $len = ParagonIE_Sodium_Core32_Util::strlen($message); - - /** @var int $adlen - Length of the associated data */ - $adlen = ParagonIE_Sodium_Core32_Util::strlen($ad); - - /** @var string The first block of the chacha20 keystream, used as a poly1305 key */ - $block0 = ParagonIE_Sodium_Core32_ChaCha20::ietfStream( - 32, - $nonce, - $key - ); - $state = new ParagonIE_Sodium_Core32_Poly1305_State($block0); - try { - ParagonIE_Sodium_Compat::memzero($block0); - } catch (SodiumException $ex) { - $block0 = null; - } - - /** @var string $ciphertext - Raw encrypted data */ - $ciphertext = ParagonIE_Sodium_Core32_ChaCha20::ietfStreamXorIc( - $message, - $nonce, - $key, - ParagonIE_Sodium_Core32_Util::store64_le(1) - ); - - $state->update($ad); - $state->update(str_repeat("\x00", ((0x10 - $adlen) & 0xf))); - $state->update($ciphertext); - $state->update(str_repeat("\x00", ((0x10 - $len) & 0xf))); - $state->update(ParagonIE_Sodium_Core32_Util::store64_le($adlen)); - $state->update(ParagonIE_Sodium_Core32_Util::store64_le($len)); - return $ciphertext . $state->finish(); - } - - /** - * AEAD Decryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $ad - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function aead_xchacha20poly1305_ietf_decrypt( - $message = '', - $ad = '', - $nonce = '', - $key = '' - ) { - $subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20( - ParagonIE_Sodium_Core32_Util::substr($nonce, 0, 16), - $key - ); - $nonceLast = "\x00\x00\x00\x00" . - ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8); - - return self::aead_chacha20poly1305_ietf_decrypt($message, $ad, $nonceLast, $subkey); - } - - /** - * AEAD Encryption with ChaCha20-Poly1305, IETF mode (96-bit nonce) - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $ad - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function aead_xchacha20poly1305_ietf_encrypt( - $message = '', - $ad = '', - $nonce = '', - $key = '' - ) { - $subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20( - ParagonIE_Sodium_Core32_Util::substr($nonce, 0, 16), - $key - ); - $nonceLast = "\x00\x00\x00\x00" . - ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8); - - return self::aead_chacha20poly1305_ietf_encrypt($message, $ad, $nonceLast, $subkey); - } - - /** - * HMAC-SHA-512-256 (a.k.a. the leftmost 256 bits of HMAC-SHA-512) - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $key - * @return string - * @throws TypeError - */ - public static function auth($message, $key) - { - return ParagonIE_Sodium_Core32_Util::substr( - hash_hmac('sha512', $message, $key, true), - 0, - 32 - ); - } - - /** - * HMAC-SHA-512-256 validation. Constant-time via hash_equals(). - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $mac - * @param string $message - * @param string $key - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function auth_verify($mac, $message, $key) - { - return ParagonIE_Sodium_Core32_Util::hashEquals( - $mac, - self::auth($message, $key) - ); - } - - /** - * X25519 key exchange followed by XSalsa20Poly1305 symmetric encryption - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $plaintext - * @param string $nonce - * @param string $keypair - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function box($plaintext, $nonce, $keypair) - { - return self::secretbox( - $plaintext, - $nonce, - self::box_beforenm( - self::box_secretkey($keypair), - self::box_publickey($keypair) - ) - ); - } - - /** - * X25519-XSalsa20-Poly1305 with one ephemeral X25519 keypair. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $publicKey - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function box_seal($message, $publicKey) - { - /** @var string $ephemeralKeypair */ - $ephemeralKeypair = self::box_keypair(); - - /** @var string $ephemeralSK */ - $ephemeralSK = self::box_secretkey($ephemeralKeypair); - - /** @var string $ephemeralPK */ - $ephemeralPK = self::box_publickey($ephemeralKeypair); - - /** @var string $nonce */ - $nonce = self::generichash( - $ephemeralPK . $publicKey, - '', - 24 - ); - - /** @var string $keypair - The combined keypair used in crypto_box() */ - $keypair = self::box_keypair_from_secretkey_and_publickey($ephemeralSK, $publicKey); - - /** @var string $ciphertext Ciphertext + MAC from crypto_box */ - $ciphertext = self::box($message, $nonce, $keypair); - try { - ParagonIE_Sodium_Compat::memzero($ephemeralKeypair); - ParagonIE_Sodium_Compat::memzero($ephemeralSK); - ParagonIE_Sodium_Compat::memzero($nonce); - } catch (SodiumException $ex) { - $ephemeralKeypair = null; - $ephemeralSK = null; - $nonce = null; - } - return $ephemeralPK . $ciphertext; - } - - /** - * Opens a message encrypted via box_seal(). - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $keypair - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function box_seal_open($message, $keypair) - { - /** @var string $ephemeralPK */ - $ephemeralPK = ParagonIE_Sodium_Core32_Util::substr($message, 0, 32); - - /** @var string $ciphertext (ciphertext + MAC) */ - $ciphertext = ParagonIE_Sodium_Core32_Util::substr($message, 32); - - /** @var string $secretKey */ - $secretKey = self::box_secretkey($keypair); - - /** @var string $publicKey */ - $publicKey = self::box_publickey($keypair); - - /** @var string $nonce */ - $nonce = self::generichash( - $ephemeralPK . $publicKey, - '', - 24 - ); - - /** @var string $keypair */ - $keypair = self::box_keypair_from_secretkey_and_publickey($secretKey, $ephemeralPK); - - /** @var string $m */ - $m = self::box_open($ciphertext, $nonce, $keypair); - try { - ParagonIE_Sodium_Compat::memzero($secretKey); - ParagonIE_Sodium_Compat::memzero($ephemeralPK); - ParagonIE_Sodium_Compat::memzero($nonce); - } catch (SodiumException $ex) { - $secretKey = null; - $ephemeralPK = null; - $nonce = null; - } - return $m; - } - - /** - * Used by crypto_box() to get the crypto_secretbox() key. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $sk - * @param string $pk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function box_beforenm($sk, $pk) - { - return ParagonIE_Sodium_Core32_HSalsa20::hsalsa20( - str_repeat("\x00", 16), - self::scalarmult($sk, $pk) - ); - } - - /** - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function box_keypair() - { - $sKey = random_bytes(32); - $pKey = self::scalarmult_base($sKey); - return $sKey . $pKey; - } - - /** - * @param string $seed - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function box_seed_keypair($seed) - { - $sKey = ParagonIE_Sodium_Core32_Util::substr( - hash('sha512', $seed, true), - 0, - 32 - ); - $pKey = self::scalarmult_base($sKey); - return $sKey . $pKey; - } - - /** - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $sKey - * @param string $pKey - * @return string - * @throws TypeError - */ - public static function box_keypair_from_secretkey_and_publickey($sKey, $pKey) - { - return ParagonIE_Sodium_Core32_Util::substr($sKey, 0, 32) . - ParagonIE_Sodium_Core32_Util::substr($pKey, 0, 32); - } - - /** - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $keypair - * @return string - * @throws RangeException - * @throws TypeError - */ - public static function box_secretkey($keypair) - { - if (ParagonIE_Sodium_Core32_Util::strlen($keypair) !== 64) { - throw new RangeException('Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES bytes long.'); - } - return ParagonIE_Sodium_Core32_Util::substr($keypair, 0, 32); - } - - /** - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $keypair - * @return string - * @throws RangeException - * @throws TypeError - */ - public static function box_publickey($keypair) - { - if (ParagonIE_Sodium_Core32_Util::strlen($keypair) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES) { - throw new RangeException('Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_KEYPAIRBYTES bytes long.'); - } - return ParagonIE_Sodium_Core32_Util::substr($keypair, 32, 32); - } - - /** - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $sKey - * @return string - * @throws RangeException - * @throws SodiumException - * @throws TypeError - */ - public static function box_publickey_from_secretkey($sKey) - { - if (ParagonIE_Sodium_Core32_Util::strlen($sKey) !== ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES) { - throw new RangeException('Must be ParagonIE_Sodium_Compat::CRYPTO_BOX_SECRETKEYBYTES bytes long.'); - } - return self::scalarmult_base($sKey); - } - - /** - * Decrypt a message encrypted with box(). - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $ciphertext - * @param string $nonce - * @param string $keypair - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function box_open($ciphertext, $nonce, $keypair) - { - return self::secretbox_open( - $ciphertext, - $nonce, - self::box_beforenm( - self::box_secretkey($keypair), - self::box_publickey($keypair) - ) - ); - } - - /** - * Calculate a BLAKE2b hash. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string|null $key - * @param int $outlen - * @return string - * @throws RangeException - * @throws SodiumException - * @throws TypeError - */ - public static function generichash($message, $key = '', $outlen = 32) - { - // This ensures that ParagonIE_Sodium_Core32_BLAKE2b::$iv is initialized - ParagonIE_Sodium_Core32_BLAKE2b::pseudoConstructor(); - - $k = null; - if (!empty($key)) { - /** @var SplFixedArray $k */ - $k = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($key); - if ($k->count() > ParagonIE_Sodium_Core32_BLAKE2b::KEYBYTES) { - throw new RangeException('Invalid key size'); - } - } - - /** @var SplFixedArray $in */ - $in = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($message); - - /** @var SplFixedArray $ctx */ - $ctx = ParagonIE_Sodium_Core32_BLAKE2b::init($k, $outlen); - ParagonIE_Sodium_Core32_BLAKE2b::update($ctx, $in, $in->count()); - - /** @var SplFixedArray $out */ - $out = new SplFixedArray($outlen); - $out = ParagonIE_Sodium_Core32_BLAKE2b::finish($ctx, $out); - - /** @var array */ - $outArray = $out->toArray(); - return ParagonIE_Sodium_Core32_Util::intArrayToString($outArray); - } - - /** - * Finalize a BLAKE2b hashing context, returning the hash. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $ctx - * @param int $outlen - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function generichash_final($ctx, $outlen = 32) - { - if (!is_string($ctx)) { - throw new TypeError('Context must be a string'); - } - $out = new SplFixedArray($outlen); - - /** @var SplFixedArray $context */ - $context = ParagonIE_Sodium_Core32_BLAKE2b::stringToContext($ctx); - - /** @var SplFixedArray $out */ - $out = ParagonIE_Sodium_Core32_BLAKE2b::finish($context, $out); - - /** @var array */ - $outArray = $out->toArray(); - return ParagonIE_Sodium_Core32_Util::intArrayToString($outArray); - } - - /** - * Initialize a hashing context for BLAKE2b. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $key - * @param int $outputLength - * @return string - * @throws RangeException - * @throws SodiumException - * @throws TypeError - */ - public static function generichash_init($key = '', $outputLength = 32) - { - // This ensures that ParagonIE_Sodium_Core32_BLAKE2b::$iv is initialized - ParagonIE_Sodium_Core32_BLAKE2b::pseudoConstructor(); - - $k = null; - if (!empty($key)) { - $k = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($key); - if ($k->count() > ParagonIE_Sodium_Core32_BLAKE2b::KEYBYTES) { - throw new RangeException('Invalid key size'); - } - } - - /** @var SplFixedArray $ctx */ - $ctx = ParagonIE_Sodium_Core32_BLAKE2b::init($k, $outputLength); - - return ParagonIE_Sodium_Core32_BLAKE2b::contextToString($ctx); - } - - /** - * Update a hashing context for BLAKE2b with $message - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $ctx - * @param string $message - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function generichash_update($ctx, $message) - { - // This ensures that ParagonIE_Sodium_Core32_BLAKE2b::$iv is initialized - ParagonIE_Sodium_Core32_BLAKE2b::pseudoConstructor(); - - /** @var SplFixedArray $context */ - $context = ParagonIE_Sodium_Core32_BLAKE2b::stringToContext($ctx); - - /** @var SplFixedArray $in */ - $in = ParagonIE_Sodium_Core32_BLAKE2b::stringToSplFixedArray($message); - - ParagonIE_Sodium_Core32_BLAKE2b::update($context, $in, $in->count()); - - return ParagonIE_Sodium_Core32_BLAKE2b::contextToString($context); - } - - /** - * Libsodium's crypto_kx(). - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $my_sk - * @param string $their_pk - * @param string $client_pk - * @param string $server_pk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function keyExchange($my_sk, $their_pk, $client_pk, $server_pk) - { - return self::generichash( - self::scalarmult($my_sk, $their_pk) . - $client_pk . - $server_pk - ); - } - - /** - * ECDH over Curve25519 - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $sKey - * @param string $pKey - * @return string - * - * @throws SodiumException - * @throws TypeError - */ - public static function scalarmult($sKey, $pKey) - { - $q = ParagonIE_Sodium_Core32_X25519::crypto_scalarmult_curve25519_ref10($sKey, $pKey); - self::scalarmult_throw_if_zero($q); - return $q; - } - - /** - * ECDH over Curve25519, using the basepoint. - * Used to get a secret key from a public key. - * - * @param string $secret - * @return string - * - * @throws SodiumException - * @throws TypeError - */ - public static function scalarmult_base($secret) - { - $q = ParagonIE_Sodium_Core32_X25519::crypto_scalarmult_curve25519_ref10_base($secret); - self::scalarmult_throw_if_zero($q); - return $q; - } - - /** - * This throws an Error if a zero public key was passed to the function. - * - * @param string $q - * @return void - * @throws SodiumException - * @throws TypeError - */ - protected static function scalarmult_throw_if_zero($q) - { - $d = 0; - for ($i = 0; $i < self::box_curve25519xsalsa20poly1305_SECRETKEYBYTES; ++$i) { - $d |= ParagonIE_Sodium_Core32_Util::chrToInt($q[$i]); - } - - /* branch-free variant of === 0 */ - if (-(1 & (($d - 1) >> 8))) { - throw new SodiumException('Zero public key is not allowed'); - } - } - - /** - * XSalsa20-Poly1305 authenticated symmetric-key encryption. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $plaintext - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function secretbox($plaintext, $nonce, $key) - { - /** @var string $subkey */ - $subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key); - - /** @var string $block0 */ - $block0 = str_repeat("\x00", 32); - - /** @var int $mlen - Length of the plaintext message */ - $mlen = ParagonIE_Sodium_Core32_Util::strlen($plaintext); - $mlen0 = $mlen; - if ($mlen0 > 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES) { - $mlen0 = 64 - self::secretbox_xsalsa20poly1305_ZEROBYTES; - } - $block0 .= ParagonIE_Sodium_Core32_Util::substr($plaintext, 0, $mlen0); - - /** @var string $block0 */ - $block0 = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor( - $block0, - ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8), - $subkey - ); - - /** @var string $c */ - $c = ParagonIE_Sodium_Core32_Util::substr( - $block0, - self::secretbox_xsalsa20poly1305_ZEROBYTES - ); - if ($mlen > $mlen0) { - $c .= ParagonIE_Sodium_Core32_Salsa20::salsa20_xor_ic( - ParagonIE_Sodium_Core32_Util::substr( - $plaintext, - self::secretbox_xsalsa20poly1305_ZEROBYTES - ), - ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8), - 1, - $subkey - ); - } - $state = new ParagonIE_Sodium_Core32_Poly1305_State( - ParagonIE_Sodium_Core32_Util::substr( - $block0, - 0, - self::onetimeauth_poly1305_KEYBYTES - ) - ); - try { - ParagonIE_Sodium_Compat::memzero($block0); - ParagonIE_Sodium_Compat::memzero($subkey); - } catch (SodiumException $ex) { - $block0 = null; - $subkey = null; - } - - $state->update($c); - - /** @var string $c - MAC || ciphertext */ - $c = $state->finish() . $c; - unset($state); - - return $c; - } - - /** - * Decrypt a ciphertext generated via secretbox(). - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $ciphertext - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function secretbox_open($ciphertext, $nonce, $key) - { - /** @var string $mac */ - $mac = ParagonIE_Sodium_Core32_Util::substr( - $ciphertext, - 0, - self::secretbox_xsalsa20poly1305_MACBYTES - ); - - /** @var string $c */ - $c = ParagonIE_Sodium_Core32_Util::substr( - $ciphertext, - self::secretbox_xsalsa20poly1305_MACBYTES - ); - - /** @var int $clen */ - $clen = ParagonIE_Sodium_Core32_Util::strlen($c); - - /** @var string $subkey */ - $subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key); - - /** @var string $block0 */ - $block0 = ParagonIE_Sodium_Core32_Salsa20::salsa20( - 64, - ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8), - $subkey - ); - $verified = ParagonIE_Sodium_Core32_Poly1305::onetimeauth_verify( - $mac, - $c, - ParagonIE_Sodium_Core32_Util::substr($block0, 0, 32) - ); - if (!$verified) { - try { - ParagonIE_Sodium_Compat::memzero($subkey); - } catch (SodiumException $ex) { - $subkey = null; - } - throw new SodiumException('Invalid MAC'); - } - - /** @var string $m - Decrypted message */ - $m = ParagonIE_Sodium_Core32_Util::xorStrings( - ParagonIE_Sodium_Core32_Util::substr($block0, self::secretbox_xsalsa20poly1305_ZEROBYTES), - ParagonIE_Sodium_Core32_Util::substr($c, 0, self::secretbox_xsalsa20poly1305_ZEROBYTES) - ); - if ($clen > self::secretbox_xsalsa20poly1305_ZEROBYTES) { - // We had more than 1 block, so let's continue to decrypt the rest. - $m .= ParagonIE_Sodium_Core32_Salsa20::salsa20_xor_ic( - ParagonIE_Sodium_Core32_Util::substr( - $c, - self::secretbox_xsalsa20poly1305_ZEROBYTES - ), - ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8), - 1, - (string) $subkey - ); - } - return $m; - } - - /** - * XChaCha20-Poly1305 authenticated symmetric-key encryption. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $plaintext - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function secretbox_xchacha20poly1305($plaintext, $nonce, $key) - { - /** @var string $subkey */ - $subkey = ParagonIE_Sodium_Core32_HChaCha20::hChaCha20( - ParagonIE_Sodium_Core32_Util::substr($nonce, 0, 16), - $key - ); - $nonceLast = ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8); - - /** @var string $block0 */ - $block0 = str_repeat("\x00", 32); - - /** @var int $mlen - Length of the plaintext message */ - $mlen = ParagonIE_Sodium_Core32_Util::strlen($plaintext); - $mlen0 = $mlen; - if ($mlen0 > 64 - self::secretbox_xchacha20poly1305_ZEROBYTES) { - $mlen0 = 64 - self::secretbox_xchacha20poly1305_ZEROBYTES; - } - $block0 .= ParagonIE_Sodium_Core32_Util::substr($plaintext, 0, $mlen0); - - /** @var string $block0 */ - $block0 = ParagonIE_Sodium_Core32_ChaCha20::streamXorIc( - $block0, - $nonceLast, - $subkey - ); - - /** @var string $c */ - $c = ParagonIE_Sodium_Core32_Util::substr( - $block0, - self::secretbox_xchacha20poly1305_ZEROBYTES - ); - if ($mlen > $mlen0) { - $c .= ParagonIE_Sodium_Core32_ChaCha20::streamXorIc( - ParagonIE_Sodium_Core32_Util::substr( - $plaintext, - self::secretbox_xchacha20poly1305_ZEROBYTES - ), - $nonceLast, - $subkey, - ParagonIE_Sodium_Core32_Util::store64_le(1) - ); - } - $state = new ParagonIE_Sodium_Core32_Poly1305_State( - ParagonIE_Sodium_Core32_Util::substr( - $block0, - 0, - self::onetimeauth_poly1305_KEYBYTES - ) - ); - try { - ParagonIE_Sodium_Compat::memzero($block0); - ParagonIE_Sodium_Compat::memzero($subkey); - } catch (SodiumException $ex) { - $block0 = null; - $subkey = null; - } - - $state->update($c); - - /** @var string $c - MAC || ciphertext */ - $c = $state->finish() . $c; - unset($state); - - return $c; - } - - /** - * Decrypt a ciphertext generated via secretbox_xchacha20poly1305(). - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $ciphertext - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function secretbox_xchacha20poly1305_open($ciphertext, $nonce, $key) - { - /** @var string $mac */ - $mac = ParagonIE_Sodium_Core32_Util::substr( - $ciphertext, - 0, - self::secretbox_xchacha20poly1305_MACBYTES - ); - - /** @var string $c */ - $c = ParagonIE_Sodium_Core32_Util::substr( - $ciphertext, - self::secretbox_xchacha20poly1305_MACBYTES - ); - - /** @var int $clen */ - $clen = ParagonIE_Sodium_Core32_Util::strlen($c); - - /** @var string $subkey */ - $subkey = ParagonIE_Sodium_Core32_HChaCha20::hchacha20($nonce, $key); - - /** @var string $block0 */ - $block0 = ParagonIE_Sodium_Core32_ChaCha20::stream( - 64, - ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8), - $subkey - ); - $verified = ParagonIE_Sodium_Core32_Poly1305::onetimeauth_verify( - $mac, - $c, - ParagonIE_Sodium_Core32_Util::substr($block0, 0, 32) - ); - - if (!$verified) { - try { - ParagonIE_Sodium_Compat::memzero($subkey); - } catch (SodiumException $ex) { - $subkey = null; - } - throw new SodiumException('Invalid MAC'); - } - - /** @var string $m - Decrypted message */ - $m = ParagonIE_Sodium_Core32_Util::xorStrings( - ParagonIE_Sodium_Core32_Util::substr($block0, self::secretbox_xchacha20poly1305_ZEROBYTES), - ParagonIE_Sodium_Core32_Util::substr($c, 0, self::secretbox_xchacha20poly1305_ZEROBYTES) - ); - - if ($clen > self::secretbox_xchacha20poly1305_ZEROBYTES) { - // We had more than 1 block, so let's continue to decrypt the rest. - $m .= ParagonIE_Sodium_Core32_ChaCha20::streamXorIc( - ParagonIE_Sodium_Core32_Util::substr( - $c, - self::secretbox_xchacha20poly1305_ZEROBYTES - ), - ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8), - (string) $subkey, - ParagonIE_Sodium_Core32_Util::store64_le(1) - ); - } - return $m; - } - - /** - * Detached Ed25519 signature. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sign_detached($message, $sk) - { - return ParagonIE_Sodium_Core32_Ed25519::sign_detached($message, $sk); - } - - /** - * Attached Ed25519 signature. (Returns a signed message.) - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $message - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sign($message, $sk) - { - return ParagonIE_Sodium_Core32_Ed25519::sign($message, $sk); - } - - /** - * Opens a signed message. If valid, returns the message. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $signedMessage - * @param string $pk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sign_open($signedMessage, $pk) - { - return ParagonIE_Sodium_Core32_Ed25519::sign_open($signedMessage, $pk); - } - - /** - * Verify a detached signature of a given message and public key. - * - * @internal Do not use this directly. Use ParagonIE_Sodium_Compat. - * - * @param string $signature - * @param string $message - * @param string $pk - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function sign_verify_detached($signature, $message, $pk) - { - return ParagonIE_Sodium_Core32_Ed25519::verify_detached($signature, $message, $pk); - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/File.php b/libraries/vendor/paragonie/sodium_compat/src/File.php deleted file mode 100644 index 0f066533983fd..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/File.php +++ /dev/null @@ -1,1515 +0,0 @@ - ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_KEYBYTES_MAX) { - throw new TypeError('Argument 2 must be at most CRYPTO_GENERICHASH_KEYBYTES_MAX bytes'); - } - } - if ($outputLength < ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_BYTES_MIN) { - throw new SodiumException('Argument 3 must be at least CRYPTO_GENERICHASH_BYTES_MIN'); - } - if ($outputLength > ParagonIE_Sodium_Compat::CRYPTO_GENERICHASH_BYTES_MAX) { - throw new SodiumException('Argument 3 must be at least CRYPTO_GENERICHASH_BYTES_MAX'); - } - - /** @var int $size */ - $size = filesize($filePath); - if (!is_int($size)) { - throw new SodiumException('Could not obtain the file size'); - } - - /** @var resource $fp */ - $fp = fopen($filePath, 'rb'); - if (!is_resource($fp)) { - throw new SodiumException('Could not open input file for reading'); - } - $ctx = ParagonIE_Sodium_Compat::crypto_generichash_init($key, $outputLength); - while ($size > 0) { - $blockSize = $size > 64 - ? 64 - : $size; - $read = fread($fp, $blockSize); - if (!is_string($read)) { - throw new SodiumException('Could not read input file'); - } - ParagonIE_Sodium_Compat::crypto_generichash_update($ctx, $read); - $size -= $blockSize; - } - - fclose($fp); - return ParagonIE_Sodium_Compat::crypto_generichash_final($ctx, $outputLength); - } - - /** - * Encrypt a file (rather than a string). Uses less memory than - * ParagonIE_Sodium_Compat::crypto_secretbox(), but produces - * the same result. - * - * @param string $inputFile Absolute path to a file on the filesystem - * @param string $outputFile Absolute path to a file on the filesystem - * @param string $nonce Number to be used only once - * @param string $key Encryption key - * - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function secretbox($inputFile, $outputFile, $nonce, $key) - { - /* Type checks: */ - if (!is_string($inputFile)) { - throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given..'); - } - if (!is_string($outputFile)) { - throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.'); - } - if (!is_string($nonce)) { - throw new TypeError('Argument 3 must be a string, ' . gettype($nonce) . ' given.'); - } - - /* Input validation: */ - if (self::strlen($nonce) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_NONCEBYTES) { - throw new TypeError('Argument 3 must be CRYPTO_SECRETBOX_NONCEBYTES bytes'); - } - if (!is_string($key)) { - throw new TypeError('Argument 4 must be a string, ' . gettype($key) . ' given.'); - } - if (self::strlen($key) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_KEYBYTES) { - throw new TypeError('Argument 4 must be CRYPTO_SECRETBOX_KEYBYTES bytes'); - } - - /** @var int $size */ - $size = filesize($inputFile); - if (!is_int($size)) { - throw new SodiumException('Could not obtain the file size'); - } - - /** @var resource $ifp */ - $ifp = fopen($inputFile, 'rb'); - if (!is_resource($ifp)) { - throw new SodiumException('Could not open input file for reading'); - } - - /** @var resource $ofp */ - $ofp = fopen($outputFile, 'wb'); - if (!is_resource($ofp)) { - fclose($ifp); - throw new SodiumException('Could not open output file for writing'); - } - - $res = self::secretbox_encrypt($ifp, $ofp, $size, $nonce, $key); - fclose($ifp); - fclose($ofp); - return $res; - } - /** - * Seal a file (rather than a string). Uses less memory than - * ParagonIE_Sodium_Compat::crypto_secretbox_open(), but produces - * the same result. - * - * Warning: Does not protect against TOCTOU attacks. You should - * just load the file into memory and use crypto_secretbox_open() if - * you are worried about those. - * - * @param string $inputFile - * @param string $outputFile - * @param string $nonce - * @param string $key - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function secretbox_open($inputFile, $outputFile, $nonce, $key) - { - /* Type checks: */ - if (!is_string($inputFile)) { - throw new TypeError('Argument 1 must be a string, ' . gettype($inputFile) . ' given.'); - } - if (!is_string($outputFile)) { - throw new TypeError('Argument 2 must be a string, ' . gettype($outputFile) . ' given.'); - } - if (!is_string($nonce)) { - throw new TypeError('Argument 3 must be a string, ' . gettype($nonce) . ' given.'); - } - if (!is_string($key)) { - throw new TypeError('Argument 4 must be a string, ' . gettype($key) . ' given.'); - } - - /* Input validation: */ - if (self::strlen($nonce) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_NONCEBYTES) { - throw new TypeError('Argument 4 must be CRYPTO_SECRETBOX_NONCEBYTES bytes'); - } - if (self::strlen($key) !== ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_KEYBYTES) { - throw new TypeError('Argument 4 must be CRYPTO_SECRETBOXBOX_KEYBYTES bytes'); - } - - /** @var int $size */ - $size = filesize($inputFile); - if (!is_int($size)) { - throw new SodiumException('Could not obtain the file size'); - } - - /** @var resource $ifp */ - $ifp = fopen($inputFile, 'rb'); - if (!is_resource($ifp)) { - throw new SodiumException('Could not open input file for reading'); - } - - /** @var resource $ofp */ - $ofp = fopen($outputFile, 'wb'); - if (!is_resource($ofp)) { - fclose($ifp); - throw new SodiumException('Could not open output file for writing'); - } - - $res = self::secretbox_decrypt($ifp, $ofp, $size, $nonce, $key); - fclose($ifp); - fclose($ofp); - try { - ParagonIE_Sodium_Compat::memzero($key); - } catch (SodiumException $ex) { - unset($key); - } - return $res; - } - - /** - * Sign a file (rather than a string). Uses less memory than - * ParagonIE_Sodium_Compat::crypto_sign_detached(), but produces - * the same result. - * - * @param string $filePath Absolute path to a file on the filesystem - * @param string $secretKey Secret signing key - * - * @return string Ed25519 signature - * @throws SodiumException - * @throws TypeError - */ - public static function sign($filePath, $secretKey) - { - /* Type checks: */ - if (!is_string($filePath)) { - throw new TypeError('Argument 1 must be a string, ' . gettype($filePath) . ' given.'); - } - if (!is_string($secretKey)) { - throw new TypeError('Argument 2 must be a string, ' . gettype($secretKey) . ' given.'); - } - - /* Input validation: */ - if (self::strlen($secretKey) !== ParagonIE_Sodium_Compat::CRYPTO_SIGN_SECRETKEYBYTES) { - throw new TypeError('Argument 2 must be CRYPTO_SIGN_SECRETKEYBYTES bytes'); - } - if (PHP_INT_SIZE === 4) { - return self::sign_core32($filePath, $secretKey); - } - - /** @var int $size */ - $size = filesize($filePath); - if (!is_int($size)) { - throw new SodiumException('Could not obtain the file size'); - } - - /** @var resource $fp */ - $fp = fopen($filePath, 'rb'); - if (!is_resource($fp)) { - throw new SodiumException('Could not open input file for reading'); - } - - /** @var string $az */ - $az = hash('sha512', self::substr($secretKey, 0, 32), true); - - $az[0] = self::intToChr(self::chrToInt($az[0]) & 248); - $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64); - - /** @var resource $hs */ - $hs = hash_init('sha512'); - hash_update($hs, self::substr($az, 32, 32)); - /** @var resource $hs */ - $hs = self::updateHashWithFile($hs, $fp, $size); - - /** @var string $nonceHash */ - $nonceHash = hash_final($hs, true); - - /** @var string $pk */ - $pk = self::substr($secretKey, 32, 32); - - /** @var string $nonce */ - $nonce = ParagonIE_Sodium_Core_Ed25519::sc_reduce($nonceHash) . self::substr($nonceHash, 32); - - /** @var string $sig */ - $sig = ParagonIE_Sodium_Core_Ed25519::ge_p3_tobytes( - ParagonIE_Sodium_Core_Ed25519::ge_scalarmult_base($nonce) - ); - - /** @var resource $hs */ - $hs = hash_init('sha512'); - hash_update($hs, self::substr($sig, 0, 32)); - hash_update($hs, self::substr($pk, 0, 32)); - /** @var resource $hs */ - $hs = self::updateHashWithFile($hs, $fp, $size); - - /** @var string $hramHash */ - $hramHash = hash_final($hs, true); - - /** @var string $hram */ - $hram = ParagonIE_Sodium_Core_Ed25519::sc_reduce($hramHash); - - /** @var string $sigAfter */ - $sigAfter = ParagonIE_Sodium_Core_Ed25519::sc_muladd($hram, $az, $nonce); - - /** @var string $sig */ - $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32); - - try { - ParagonIE_Sodium_Compat::memzero($az); - } catch (SodiumException $ex) { - $az = null; - } - fclose($fp); - return $sig; - } - - /** - * Verify a file (rather than a string). Uses less memory than - * ParagonIE_Sodium_Compat::crypto_sign_verify_detached(), but - * produces the same result. - * - * @param string $sig Ed25519 signature - * @param string $filePath Absolute path to a file on the filesystem - * @param string $publicKey Signing public key - * - * @return bool - * @throws SodiumException - * @throws TypeError - * @throws Exception - */ - public static function verify($sig, $filePath, $publicKey) - { - /* Type checks: */ - if (!is_string($sig)) { - throw new TypeError('Argument 1 must be a string, ' . gettype($sig) . ' given.'); - } - if (!is_string($filePath)) { - throw new TypeError('Argument 2 must be a string, ' . gettype($filePath) . ' given.'); - } - if (!is_string($publicKey)) { - throw new TypeError('Argument 3 must be a string, ' . gettype($publicKey) . ' given.'); - } - - /* Input validation: */ - if (self::strlen($sig) !== ParagonIE_Sodium_Compat::CRYPTO_SIGN_BYTES) { - throw new TypeError('Argument 1 must be CRYPTO_SIGN_BYTES bytes'); - } - if (self::strlen($publicKey) !== ParagonIE_Sodium_Compat::CRYPTO_SIGN_PUBLICKEYBYTES) { - throw new TypeError('Argument 3 must be CRYPTO_SIGN_PUBLICKEYBYTES bytes'); - } - if (self::strlen($sig) < 64) { - throw new SodiumException('Signature is too short'); - } - - if (PHP_INT_SIZE === 4) { - return self::verify_core32($sig, $filePath, $publicKey); - } - - /* Security checks */ - if (ParagonIE_Sodium_Core_Ed25519::check_S_lt_L(self::substr($sig, 32, 32))) { - throw new SodiumException('S < L - Invalid signature'); - } - if (ParagonIE_Sodium_Core_Ed25519::small_order($sig)) { - throw new SodiumException('Signature is on too small of an order'); - } - if ((self::chrToInt($sig[63]) & 224) !== 0) { - throw new SodiumException('Invalid signature'); - } - $d = 0; - for ($i = 0; $i < 32; ++$i) { - $d |= self::chrToInt($publicKey[$i]); - } - if ($d === 0) { - throw new SodiumException('All zero public key'); - } - - /** @var int $size */ - $size = filesize($filePath); - if (!is_int($size)) { - throw new SodiumException('Could not obtain the file size'); - } - - /** @var resource $fp */ - $fp = fopen($filePath, 'rb'); - if (!is_resource($fp)) { - throw new SodiumException('Could not open input file for reading'); - } - - /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */ - $orig = ParagonIE_Sodium_Compat::$fastMult; - - // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification. - ParagonIE_Sodium_Compat::$fastMult = true; - - /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A */ - $A = ParagonIE_Sodium_Core_Ed25519::ge_frombytes_negate_vartime($publicKey); - - /** @var resource $hs */ - $hs = hash_init('sha512'); - hash_update($hs, self::substr($sig, 0, 32)); - hash_update($hs, self::substr($publicKey, 0, 32)); - /** @var resource $hs */ - $hs = self::updateHashWithFile($hs, $fp, $size); - /** @var string $hDigest */ - $hDigest = hash_final($hs, true); - - /** @var string $h */ - $h = ParagonIE_Sodium_Core_Ed25519::sc_reduce($hDigest) . self::substr($hDigest, 32); - - /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P2 $R */ - $R = ParagonIE_Sodium_Core_Ed25519::ge_double_scalarmult_vartime( - $h, - $A, - self::substr($sig, 32) - ); - - /** @var string $rcheck */ - $rcheck = ParagonIE_Sodium_Core_Ed25519::ge_tobytes($R); - - // Close the file handle - fclose($fp); - - // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before. - ParagonIE_Sodium_Compat::$fastMult = $orig; - return self::verify_32($rcheck, self::substr($sig, 0, 32)); - } - - /** - * @param resource $ifp - * @param resource $ofp - * @param int $mlen - * @param string $nonce - * @param string $boxKeypair - * @return bool - * @throws SodiumException - * @throws TypeError - */ - protected static function box_encrypt($ifp, $ofp, $mlen, $nonce, $boxKeypair) - { - return self::secretbox_encrypt( - $ifp, - $ofp, - $mlen, - $nonce, - ParagonIE_Sodium_Crypto::box_beforenm( - ParagonIE_Sodium_Crypto::box_secretkey($boxKeypair), - ParagonIE_Sodium_Crypto::box_publickey($boxKeypair) - ) - ); - } - - - /** - * @param resource $ifp - * @param resource $ofp - * @param int $mlen - * @param string $nonce - * @param string $boxKeypair - * @return bool - * @throws SodiumException - * @throws TypeError - */ - protected static function box_decrypt($ifp, $ofp, $mlen, $nonce, $boxKeypair) - { - return self::secretbox_decrypt( - $ifp, - $ofp, - $mlen, - $nonce, - ParagonIE_Sodium_Crypto::box_beforenm( - ParagonIE_Sodium_Crypto::box_secretkey($boxKeypair), - ParagonIE_Sodium_Crypto::box_publickey($boxKeypair) - ) - ); - } - - /** - * Encrypt a file - * - * @param resource $ifp - * @param resource $ofp - * @param int $mlen - * @param string $nonce - * @param string $key - * @return bool - * @throws SodiumException - * @throws TypeError - */ - protected static function secretbox_encrypt($ifp, $ofp, $mlen, $nonce, $key) - { - if (PHP_INT_SIZE === 4) { - return self::secretbox_encrypt_core32($ifp, $ofp, $mlen, $nonce, $key); - } - - $plaintext = fread($ifp, 32); - if (!is_string($plaintext)) { - throw new SodiumException('Could not read input file'); - } - $first32 = ftell($ifp); - - /** @var string $subkey */ - $subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key); - - /** @var string $realNonce */ - $realNonce = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8); - - /** @var string $block0 */ - $block0 = str_repeat("\x00", 32); - - /** @var int $mlen - Length of the plaintext message */ - $mlen0 = $mlen; - if ($mlen0 > 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES) { - $mlen0 = 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES; - } - $block0 .= ParagonIE_Sodium_Core_Util::substr($plaintext, 0, $mlen0); - - /** @var string $block0 */ - $block0 = ParagonIE_Sodium_Core_Salsa20::salsa20_xor( - $block0, - $realNonce, - $subkey - ); - - $state = new ParagonIE_Sodium_Core_Poly1305_State( - ParagonIE_Sodium_Core_Util::substr( - $block0, - 0, - ParagonIE_Sodium_Crypto::onetimeauth_poly1305_KEYBYTES - ) - ); - - // Pre-write 16 blank bytes for the Poly1305 tag - $start = ftell($ofp); - fwrite($ofp, str_repeat("\x00", 16)); - - /** @var string $c */ - $cBlock = ParagonIE_Sodium_Core_Util::substr( - $block0, - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES - ); - $state->update($cBlock); - fwrite($ofp, $cBlock); - $mlen -= 32; - - /** @var int $iter */ - $iter = 1; - - /** @var int $incr */ - $incr = self::BUFFER_SIZE >> 6; - - /* - * Set the cursor to the end of the first half-block. All future bytes will - * generated from salsa20_xor_ic, starting from 1 (second block). - */ - fseek($ifp, $first32, SEEK_SET); - - while ($mlen > 0) { - $blockSize = $mlen > self::BUFFER_SIZE - ? self::BUFFER_SIZE - : $mlen; - $plaintext = fread($ifp, $blockSize); - if (!is_string($plaintext)) { - throw new SodiumException('Could not read input file'); - } - $cBlock = ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic( - $plaintext, - $realNonce, - $iter, - $subkey - ); - fwrite($ofp, $cBlock, $blockSize); - $state->update($cBlock); - - $mlen -= $blockSize; - $iter += $incr; - } - try { - ParagonIE_Sodium_Compat::memzero($block0); - ParagonIE_Sodium_Compat::memzero($subkey); - } catch (SodiumException $ex) { - $block0 = null; - $subkey = null; - } - $end = ftell($ofp); - - /* - * Write the Poly1305 authentication tag that provides integrity - * over the ciphertext (encrypt-then-MAC) - */ - fseek($ofp, $start, SEEK_SET); - fwrite($ofp, $state->finish(), ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_MACBYTES); - fseek($ofp, $end, SEEK_SET); - unset($state); - - return true; - } - - /** - * Decrypt a file - * - * @param resource $ifp - * @param resource $ofp - * @param int $mlen - * @param string $nonce - * @param string $key - * @return bool - * @throws SodiumException - * @throws TypeError - */ - protected static function secretbox_decrypt($ifp, $ofp, $mlen, $nonce, $key) - { - if (PHP_INT_SIZE === 4) { - return self::secretbox_decrypt_core32($ifp, $ofp, $mlen, $nonce, $key); - } - $tag = fread($ifp, 16); - if (!is_string($tag)) { - throw new SodiumException('Could not read input file'); - } - - /** @var string $subkey */ - $subkey = ParagonIE_Sodium_Core_HSalsa20::hsalsa20($nonce, $key); - - /** @var string $realNonce */ - $realNonce = ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8); - - /** @var string $block0 */ - $block0 = ParagonIE_Sodium_Core_Salsa20::salsa20( - 64, - ParagonIE_Sodium_Core_Util::substr($nonce, 16, 8), - $subkey - ); - - /* Verify the Poly1305 MAC -before- attempting to decrypt! */ - $state = new ParagonIE_Sodium_Core_Poly1305_State(self::substr($block0, 0, 32)); - if (!self::onetimeauth_verify($state, $ifp, $tag, $mlen)) { - throw new SodiumException('Invalid MAC'); - } - - /* - * Set the cursor to the end of the first half-block. All future bytes will - * generated from salsa20_xor_ic, starting from 1 (second block). - */ - $first32 = fread($ifp, 32); - if (!is_string($first32)) { - throw new SodiumException('Could not read input file'); - } - $first32len = self::strlen($first32); - fwrite( - $ofp, - self::xorStrings( - self::substr($block0, 32, $first32len), - self::substr($first32, 0, $first32len) - ) - ); - $mlen -= 32; - - /** @var int $iter */ - $iter = 1; - - /** @var int $incr */ - $incr = self::BUFFER_SIZE >> 6; - - /* Decrypts ciphertext, writes to output file. */ - while ($mlen > 0) { - $blockSize = $mlen > self::BUFFER_SIZE - ? self::BUFFER_SIZE - : $mlen; - $ciphertext = fread($ifp, $blockSize); - if (!is_string($ciphertext)) { - throw new SodiumException('Could not read input file'); - } - $pBlock = ParagonIE_Sodium_Core_Salsa20::salsa20_xor_ic( - $ciphertext, - $realNonce, - $iter, - $subkey - ); - fwrite($ofp, $pBlock, $blockSize); - $mlen -= $blockSize; - $iter += $incr; - } - return true; - } - - /** - * @param ParagonIE_Sodium_Core_Poly1305_State $state - * @param resource $ifp - * @param string $tag - * @param int $mlen - * @return bool - * @throws SodiumException - * @throws TypeError - */ - protected static function onetimeauth_verify(ParagonIE_Sodium_Core_Poly1305_State $state, $ifp, $tag = '', $mlen = 0) - { - /** @var int $pos */ - $pos = ftell($ifp); - - /** @var int $iter */ - $iter = 1; - - /** @var int $incr */ - $incr = self::BUFFER_SIZE >> 6; - - while ($mlen > 0) { - $blockSize = $mlen > self::BUFFER_SIZE - ? self::BUFFER_SIZE - : $mlen; - $ciphertext = fread($ifp, $blockSize); - if (!is_string($ciphertext)) { - throw new SodiumException('Could not read input file'); - } - $state->update($ciphertext); - $mlen -= $blockSize; - $iter += $incr; - } - $res = ParagonIE_Sodium_Core_Util::verify_16($tag, $state->finish()); - - fseek($ifp, $pos, SEEK_SET); - return $res; - } - - /** - * Update a hash context with the contents of a file, without - * loading the entire file into memory. - * - * @param resource|object $hash - * @param resource $fp - * @param int $size - * @return mixed (resource on PHP < 7.2, object on PHP >= 7.2) - * @throws SodiumException - * @throws TypeError - * @psalm-suppress PossiblyInvalidArgument - * PHP 7.2 changes from a resource to an object, - * which causes Psalm to complain about an error. - */ - public static function updateHashWithFile($hash, $fp, $size = 0) - { - /* Type checks: */ - if (PHP_VERSION_ID < 70200) { - if (!is_resource($hash)) { - throw new TypeError('Argument 1 must be a resource, ' . gettype($hash) . ' given.'); - } - - } else { - if (!is_object($hash)) { - throw new TypeError('Argument 1 must be an object (PHP 7.2+), ' . gettype($hash) . ' given.'); - } - } - if (!is_resource($fp)) { - throw new TypeError('Argument 2 must be a resource, ' . gettype($fp) . ' given.'); - } - if (!is_int($size)) { - throw new TypeError('Argument 3 must be an integer, ' . gettype($size) . ' given.'); - } - - /** @var int $originalPosition */ - $originalPosition = ftell($fp); - - // Move file pointer to beginning of file - fseek($fp, 0, SEEK_SET); - for ($i = 0; $i < $size; $i += self::BUFFER_SIZE) { - /** @var string|bool $message */ - $message = fread( - $fp, - ($size - $i) > self::BUFFER_SIZE - ? $size - $i - : self::BUFFER_SIZE - ); - if (!is_string($message)) { - throw new SodiumException('Unexpected error reading from file.'); - } - /** @var string $message */ - /** @psalm-suppress InvalidArgument */ - hash_update($hash, $message); - } - // Reset file pointer's position - fseek($fp, $originalPosition, SEEK_SET); - return $hash; - } - - /** - * Sign a file (rather than a string). Uses less memory than - * ParagonIE_Sodium_Compat::crypto_sign_detached(), but produces - * the same result. (32-bit) - * - * @param string $filePath Absolute path to a file on the filesystem - * @param string $secretKey Secret signing key - * - * @return string Ed25519 signature - * @throws SodiumException - * @throws TypeError - */ - private static function sign_core32($filePath, $secretKey) - { - /** @var int|bool $size */ - $size = filesize($filePath); - if (!is_int($size)) { - throw new SodiumException('Could not obtain the file size'); - } - /** @var int $size */ - - /** @var resource|bool $fp */ - $fp = fopen($filePath, 'rb'); - if (!is_resource($fp)) { - throw new SodiumException('Could not open input file for reading'); - } - /** @var resource $fp */ - - /** @var string $az */ - $az = hash('sha512', self::substr($secretKey, 0, 32), true); - - $az[0] = self::intToChr(self::chrToInt($az[0]) & 248); - $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64); - - /** @var resource $hs */ - $hs = hash_init('sha512'); - hash_update($hs, self::substr($az, 32, 32)); - /** @var resource $hs */ - $hs = self::updateHashWithFile($hs, $fp, $size); - - /** @var string $nonceHash */ - $nonceHash = hash_final($hs, true); - - /** @var string $pk */ - $pk = self::substr($secretKey, 32, 32); - - /** @var string $nonce */ - $nonce = ParagonIE_Sodium_Core32_Ed25519::sc_reduce($nonceHash) . self::substr($nonceHash, 32); - - /** @var string $sig */ - $sig = ParagonIE_Sodium_Core32_Ed25519::ge_p3_tobytes( - ParagonIE_Sodium_Core32_Ed25519::ge_scalarmult_base($nonce) - ); - - /** @var resource $hs */ - $hs = hash_init('sha512'); - hash_update($hs, self::substr($sig, 0, 32)); - hash_update($hs, self::substr($pk, 0, 32)); - /** @var resource $hs */ - $hs = self::updateHashWithFile($hs, $fp, $size); - - /** @var string $hramHash */ - $hramHash = hash_final($hs, true); - - /** @var string $hram */ - $hram = ParagonIE_Sodium_Core32_Ed25519::sc_reduce($hramHash); - - /** @var string $sigAfter */ - $sigAfter = ParagonIE_Sodium_Core32_Ed25519::sc_muladd($hram, $az, $nonce); - - /** @var string $sig */ - $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32); - - try { - ParagonIE_Sodium_Compat::memzero($az); - } catch (SodiumException $ex) { - $az = null; - } - fclose($fp); - return $sig; - } - - /** - * - * Verify a file (rather than a string). Uses less memory than - * ParagonIE_Sodium_Compat::crypto_sign_verify_detached(), but - * produces the same result. (32-bit) - * - * @param string $sig Ed25519 signature - * @param string $filePath Absolute path to a file on the filesystem - * @param string $publicKey Signing public key - * - * @return bool - * @throws SodiumException - * @throws Exception - */ - public static function verify_core32($sig, $filePath, $publicKey) - { - /* Security checks */ - if (ParagonIE_Sodium_Core32_Ed25519::check_S_lt_L(self::substr($sig, 32, 32))) { - throw new SodiumException('S < L - Invalid signature'); - } - if (ParagonIE_Sodium_Core32_Ed25519::small_order($sig)) { - throw new SodiumException('Signature is on too small of an order'); - } - if ((self::chrToInt($sig[63]) & 224) !== 0) { - throw new SodiumException('Invalid signature'); - } - $d = 0; - for ($i = 0; $i < 32; ++$i) { - $d |= self::chrToInt($publicKey[$i]); - } - if ($d === 0) { - throw new SodiumException('All zero public key'); - } - - /** @var int|bool $size */ - $size = filesize($filePath); - if (!is_int($size)) { - throw new SodiumException('Could not obtain the file size'); - } - /** @var int $size */ - - /** @var resource|bool $fp */ - $fp = fopen($filePath, 'rb'); - if (!is_resource($fp)) { - throw new SodiumException('Could not open input file for reading'); - } - /** @var resource $fp */ - - /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */ - $orig = ParagonIE_Sodium_Compat::$fastMult; - - // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification. - ParagonIE_Sodium_Compat::$fastMult = true; - - /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_P3 $A */ - $A = ParagonIE_Sodium_Core32_Ed25519::ge_frombytes_negate_vartime($publicKey); - - /** @var resource $hs */ - $hs = hash_init('sha512'); - hash_update($hs, self::substr($sig, 0, 32)); - hash_update($hs, self::substr($publicKey, 0, 32)); - /** @var resource $hs */ - $hs = self::updateHashWithFile($hs, $fp, $size); - /** @var string $hDigest */ - $hDigest = hash_final($hs, true); - - /** @var string $h */ - $h = ParagonIE_Sodium_Core32_Ed25519::sc_reduce($hDigest) . self::substr($hDigest, 32); - - /** @var ParagonIE_Sodium_Core32_Curve25519_Ge_P2 $R */ - $R = ParagonIE_Sodium_Core32_Ed25519::ge_double_scalarmult_vartime( - $h, - $A, - self::substr($sig, 32) - ); - - /** @var string $rcheck */ - $rcheck = ParagonIE_Sodium_Core32_Ed25519::ge_tobytes($R); - - // Close the file handle - fclose($fp); - - // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before. - ParagonIE_Sodium_Compat::$fastMult = $orig; - return self::verify_32($rcheck, self::substr($sig, 0, 32)); - } - - /** - * Encrypt a file (32-bit) - * - * @param resource $ifp - * @param resource $ofp - * @param int $mlen - * @param string $nonce - * @param string $key - * @return bool - * @throws SodiumException - * @throws TypeError - */ - protected static function secretbox_encrypt_core32($ifp, $ofp, $mlen, $nonce, $key) - { - $plaintext = fread($ifp, 32); - if (!is_string($plaintext)) { - throw new SodiumException('Could not read input file'); - } - $first32 = ftell($ifp); - - /** @var string $subkey */ - $subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key); - - /** @var string $realNonce */ - $realNonce = ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8); - - /** @var string $block0 */ - $block0 = str_repeat("\x00", 32); - - /** @var int $mlen - Length of the plaintext message */ - $mlen0 = $mlen; - if ($mlen0 > 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES) { - $mlen0 = 64 - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES; - } - $block0 .= ParagonIE_Sodium_Core32_Util::substr($plaintext, 0, $mlen0); - - /** @var string $block0 */ - $block0 = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor( - $block0, - $realNonce, - $subkey - ); - - $state = new ParagonIE_Sodium_Core32_Poly1305_State( - ParagonIE_Sodium_Core32_Util::substr( - $block0, - 0, - ParagonIE_Sodium_Crypto::onetimeauth_poly1305_KEYBYTES - ) - ); - - // Pre-write 16 blank bytes for the Poly1305 tag - $start = ftell($ofp); - fwrite($ofp, str_repeat("\x00", 16)); - - /** @var string $c */ - $cBlock = ParagonIE_Sodium_Core32_Util::substr( - $block0, - ParagonIE_Sodium_Crypto::secretbox_xsalsa20poly1305_ZEROBYTES - ); - $state->update($cBlock); - fwrite($ofp, $cBlock); - $mlen -= 32; - - /** @var int $iter */ - $iter = 1; - - /** @var int $incr */ - $incr = self::BUFFER_SIZE >> 6; - - /* - * Set the cursor to the end of the first half-block. All future bytes will - * generated from salsa20_xor_ic, starting from 1 (second block). - */ - fseek($ifp, $first32, SEEK_SET); - - while ($mlen > 0) { - $blockSize = $mlen > self::BUFFER_SIZE - ? self::BUFFER_SIZE - : $mlen; - $plaintext = fread($ifp, $blockSize); - if (!is_string($plaintext)) { - throw new SodiumException('Could not read input file'); - } - $cBlock = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor_ic( - $plaintext, - $realNonce, - $iter, - $subkey - ); - fwrite($ofp, $cBlock, $blockSize); - $state->update($cBlock); - - $mlen -= $blockSize; - $iter += $incr; - } - try { - ParagonIE_Sodium_Compat::memzero($block0); - ParagonIE_Sodium_Compat::memzero($subkey); - } catch (SodiumException $ex) { - $block0 = null; - $subkey = null; - } - $end = ftell($ofp); - - /* - * Write the Poly1305 authentication tag that provides integrity - * over the ciphertext (encrypt-then-MAC) - */ - fseek($ofp, $start, SEEK_SET); - fwrite($ofp, $state->finish(), ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_MACBYTES); - fseek($ofp, $end, SEEK_SET); - unset($state); - - return true; - } - - /** - * Decrypt a file (32-bit) - * - * @param resource $ifp - * @param resource $ofp - * @param int $mlen - * @param string $nonce - * @param string $key - * @return bool - * @throws SodiumException - * @throws TypeError - */ - protected static function secretbox_decrypt_core32($ifp, $ofp, $mlen, $nonce, $key) - { - $tag = fread($ifp, 16); - if (!is_string($tag)) { - throw new SodiumException('Could not read input file'); - } - - /** @var string $subkey */ - $subkey = ParagonIE_Sodium_Core32_HSalsa20::hsalsa20($nonce, $key); - - /** @var string $realNonce */ - $realNonce = ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8); - - /** @var string $block0 */ - $block0 = ParagonIE_Sodium_Core32_Salsa20::salsa20( - 64, - ParagonIE_Sodium_Core32_Util::substr($nonce, 16, 8), - $subkey - ); - - /* Verify the Poly1305 MAC -before- attempting to decrypt! */ - $state = new ParagonIE_Sodium_Core32_Poly1305_State(self::substr($block0, 0, 32)); - if (!self::onetimeauth_verify_core32($state, $ifp, $tag, $mlen)) { - throw new SodiumException('Invalid MAC'); - } - - /* - * Set the cursor to the end of the first half-block. All future bytes will - * generated from salsa20_xor_ic, starting from 1 (second block). - */ - $first32 = fread($ifp, 32); - if (!is_string($first32)) { - throw new SodiumException('Could not read input file'); - } - $first32len = self::strlen($first32); - fwrite( - $ofp, - self::xorStrings( - self::substr($block0, 32, $first32len), - self::substr($first32, 0, $first32len) - ) - ); - $mlen -= 32; - - /** @var int $iter */ - $iter = 1; - - /** @var int $incr */ - $incr = self::BUFFER_SIZE >> 6; - - /* Decrypts ciphertext, writes to output file. */ - while ($mlen > 0) { - $blockSize = $mlen > self::BUFFER_SIZE - ? self::BUFFER_SIZE - : $mlen; - $ciphertext = fread($ifp, $blockSize); - if (!is_string($ciphertext)) { - throw new SodiumException('Could not read input file'); - } - $pBlock = ParagonIE_Sodium_Core32_Salsa20::salsa20_xor_ic( - $ciphertext, - $realNonce, - $iter, - $subkey - ); - fwrite($ofp, $pBlock, $blockSize); - $mlen -= $blockSize; - $iter += $incr; - } - return true; - } - - /** - * One-time message authentication for 32-bit systems - * - * @param ParagonIE_Sodium_Core32_Poly1305_State $state - * @param resource $ifp - * @param string $tag - * @param int $mlen - * @return bool - * @throws SodiumException - * @throws TypeError - */ - protected static function onetimeauth_verify_core32(ParagonIE_Sodium_Core32_Poly1305_State $state, $ifp, $tag = '', $mlen = 0) - { - /** @var int $pos */ - $pos = ftell($ifp); - - /** @var int $iter */ - $iter = 1; - - /** @var int $incr */ - $incr = self::BUFFER_SIZE >> 6; - - while ($mlen > 0) { - $blockSize = $mlen > self::BUFFER_SIZE - ? self::BUFFER_SIZE - : $mlen; - $ciphertext = fread($ifp, $blockSize); - if (!is_string($ciphertext)) { - throw new SodiumException('Could not read input file'); - } - $state->update($ciphertext); - $mlen -= $blockSize; - $iter += $incr; - } - $res = ParagonIE_Sodium_Core32_Util::verify_16($tag, $state->finish()); - - fseek($ifp, $pos, SEEK_SET); - return $res; - } -} diff --git a/libraries/vendor/paragonie/sodium_compat/src/SodiumException.php b/libraries/vendor/paragonie/sodium_compat/src/SodiumException.php deleted file mode 100644 index a3176d7dd595d..0000000000000 --- a/libraries/vendor/paragonie/sodium_compat/src/SodiumException.php +++ /dev/null @@ -1,11 +0,0 @@ - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! \ No newline at end of file diff --git a/libraries/vendor/phpmailer/phpmailer/VERSION b/libraries/vendor/phpmailer/phpmailer/VERSION deleted file mode 100644 index 81f0c273cab9d..0000000000000 --- a/libraries/vendor/phpmailer/phpmailer/VERSION +++ /dev/null @@ -1 +0,0 @@ -6.0.5 \ No newline at end of file diff --git a/libraries/vendor/phpmailer/phpmailer/src/Exception.php b/libraries/vendor/phpmailer/phpmailer/src/Exception.php deleted file mode 100644 index 9a05dec3ca869..0000000000000 --- a/libraries/vendor/phpmailer/phpmailer/src/Exception.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @author Jim Jagielski (jimjag) - * @author Andy Prevost (codeworxtech) - * @author Brent R. Matzelle (original founder) - * @copyright 2012 - 2017 Marcus Bointon - * @copyright 2010 - 2012 Jim Jagielski - * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - * @note This program is distributed in the hope that it will be useful - WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - */ - -namespace PHPMailer\PHPMailer; - -/** - * PHPMailer exception handler. - * - * @author Marcus Bointon - */ -class Exception extends \Exception -{ - /** - * Prettify error message output. - * - * @return string - */ - public function errorMessage() - { - return '' . htmlspecialchars($this->getMessage()) . "
\n"; - } -} diff --git a/libraries/vendor/phpmailer/phpmailer/src/OAuth.php b/libraries/vendor/phpmailer/phpmailer/src/OAuth.php deleted file mode 100644 index 0bce7e3468c69..0000000000000 --- a/libraries/vendor/phpmailer/phpmailer/src/OAuth.php +++ /dev/null @@ -1,138 +0,0 @@ - - * @author Jim Jagielski (jimjag) - * @author Andy Prevost (codeworxtech) - * @author Brent R. Matzelle (original founder) - * @copyright 2012 - 2015 Marcus Bointon - * @copyright 2010 - 2012 Jim Jagielski - * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - * @note This program is distributed in the hope that it will be useful - WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - */ - -namespace PHPMailer\PHPMailer; - -use League\OAuth2\Client\Grant\RefreshToken; -use League\OAuth2\Client\Provider\AbstractProvider; -use League\OAuth2\Client\Token\AccessToken; - -/** - * OAuth - OAuth2 authentication wrapper class. - * Uses the oauth2-client package from the League of Extraordinary Packages. - * - * @see http://oauth2-client.thephpleague.com - * - * @author Marcus Bointon (Synchro/coolbru) - */ -class OAuth -{ - /** - * An instance of the League OAuth Client Provider. - * - * @var AbstractProvider - */ - protected $provider; - - /** - * The current OAuth access token. - * - * @var AccessToken - */ - protected $oauthToken; - - /** - * The user's email address, usually used as the login ID - * and also the from address when sending email. - * - * @var string - */ - protected $oauthUserEmail = ''; - - /** - * The client secret, generated in the app definition of the service you're connecting to. - * - * @var string - */ - protected $oauthClientSecret = ''; - - /** - * The client ID, generated in the app definition of the service you're connecting to. - * - * @var string - */ - protected $oauthClientId = ''; - - /** - * The refresh token, used to obtain new AccessTokens. - * - * @var string - */ - protected $oauthRefreshToken = ''; - - /** - * OAuth constructor. - * - * @param array $options Associative array containing - * `provider`, `userName`, `clientSecret`, `clientId` and `refreshToken` elements - */ - public function __construct($options) - { - $this->provider = $options['provider']; - $this->oauthUserEmail = $options['userName']; - $this->oauthClientSecret = $options['clientSecret']; - $this->oauthClientId = $options['clientId']; - $this->oauthRefreshToken = $options['refreshToken']; - } - - /** - * Get a new RefreshToken. - * - * @return RefreshToken - */ - protected function getGrant() - { - return new RefreshToken(); - } - - /** - * Get a new AccessToken. - * - * @return AccessToken - */ - protected function getToken() - { - return $this->provider->getAccessToken( - $this->getGrant(), - ['refresh_token' => $this->oauthRefreshToken] - ); - } - - /** - * Generate a base64-encoded OAuth token. - * - * @return string - */ - public function getOauth64() - { - // Get a new token if it's not available or has expired - if (null === $this->oauthToken or $this->oauthToken->hasExpired()) { - $this->oauthToken = $this->getToken(); - } - - return base64_encode( - 'user=' . - $this->oauthUserEmail . - "\001auth=Bearer " . - $this->oauthToken . - "\001\001" - ); - } -} diff --git a/libraries/vendor/phpmailer/phpmailer/src/PHPMailer.php b/libraries/vendor/phpmailer/phpmailer/src/PHPMailer.php deleted file mode 100644 index f51ce73a9f63b..0000000000000 --- a/libraries/vendor/phpmailer/phpmailer/src/PHPMailer.php +++ /dev/null @@ -1,4420 +0,0 @@ - - * @author Jim Jagielski (jimjag) - * @author Andy Prevost (codeworxtech) - * @author Brent R. Matzelle (original founder) - * @copyright 2012 - 2017 Marcus Bointon - * @copyright 2010 - 2012 Jim Jagielski - * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - * @note This program is distributed in the hope that it will be useful - WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - */ - -namespace PHPMailer\PHPMailer; - -/** - * PHPMailer - PHP email creation and transport class. - * - * @author Marcus Bointon (Synchro/coolbru) - * @author Jim Jagielski (jimjag) - * @author Andy Prevost (codeworxtech) - * @author Brent R. Matzelle (original founder) - */ -class PHPMailer -{ - /** - * Email priority. - * Options: null (default), 1 = High, 3 = Normal, 5 = low. - * When null, the header is not set at all. - * - * @var int - */ - public $Priority; - - /** - * The character set of the message. - * - * @var string - */ - public $CharSet = 'iso-8859-1'; - - /** - * The MIME Content-type of the message. - * - * @var string - */ - public $ContentType = 'text/plain'; - - /** - * The message encoding. - * Options: "8bit", "7bit", "binary", "base64", and "quoted-printable". - * - * @var string - */ - public $Encoding = '8bit'; - - /** - * Holds the most recent mailer error message. - * - * @var string - */ - public $ErrorInfo = ''; - - /** - * The From email address for the message. - * - * @var string - */ - public $From = 'root@localhost'; - - /** - * The From name of the message. - * - * @var string - */ - public $FromName = 'Root User'; - - /** - * The envelope sender of the message. - * This will usually be turned into a Return-Path header by the receiver, - * and is the address that bounces will be sent to. - * If not empty, will be passed via `-f` to sendmail or as the 'MAIL FROM' value over SMTP. - * - * @var string - */ - public $Sender = ''; - - /** - * The Subject of the message. - * - * @var string - */ - public $Subject = ''; - - /** - * An HTML or plain text message body. - * If HTML then call isHTML(true). - * - * @var string - */ - public $Body = ''; - - /** - * The plain-text message body. - * This body can be read by mail clients that do not have HTML email - * capability such as mutt & Eudora. - * Clients that can read HTML will view the normal Body. - * - * @var string - */ - public $AltBody = ''; - - /** - * An iCal message part body. - * Only supported in simple alt or alt_inline message types - * To generate iCal event structures, use classes like EasyPeasyICS or iCalcreator. - * - * @see http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/ - * @see http://kigkonsult.se/iCalcreator/ - * - * @var string - */ - public $Ical = ''; - - /** - * The complete compiled MIME message body. - * - * @var string - */ - protected $MIMEBody = ''; - - /** - * The complete compiled MIME message headers. - * - * @var string - */ - protected $MIMEHeader = ''; - - /** - * Extra headers that createHeader() doesn't fold in. - * - * @var string - */ - protected $mailHeader = ''; - - /** - * Word-wrap the message body to this number of chars. - * Set to 0 to not wrap. A useful value here is 78, for RFC2822 section 2.1.1 compliance. - * - * @see static::STD_LINE_LENGTH - * - * @var int - */ - public $WordWrap = 0; - - /** - * Which method to use to send mail. - * Options: "mail", "sendmail", or "smtp". - * - * @var string - */ - public $Mailer = 'mail'; - - /** - * The path to the sendmail program. - * - * @var string - */ - public $Sendmail = '/usr/sbin/sendmail'; - - /** - * Whether mail() uses a fully sendmail-compatible MTA. - * One which supports sendmail's "-oi -f" options. - * - * @var bool - */ - public $UseSendmailOptions = true; - - /** - * The email address that a reading confirmation should be sent to, also known as read receipt. - * - * @var string - */ - public $ConfirmReadingTo = ''; - - /** - * The hostname to use in the Message-ID header and as default HELO string. - * If empty, PHPMailer attempts to find one with, in order, - * $_SERVER['SERVER_NAME'], gethostname(), php_uname('n'), or the value - * 'localhost.localdomain'. - * - * @var string - */ - public $Hostname = ''; - - /** - * An ID to be used in the Message-ID header. - * If empty, a unique id will be generated. - * You can set your own, but it must be in the format "", - * as defined in RFC5322 section 3.6.4 or it will be ignored. - * - * @see https://tools.ietf.org/html/rfc5322#section-3.6.4 - * - * @var string - */ - public $MessageID = ''; - - /** - * The message Date to be used in the Date header. - * If empty, the current date will be added. - * - * @var string - */ - public $MessageDate = ''; - - /** - * SMTP hosts. - * Either a single hostname or multiple semicolon-delimited hostnames. - * You can also specify a different port - * for each host by using this format: [hostname:port] - * (e.g. "smtp1.example.com:25;smtp2.example.com"). - * You can also specify encryption type, for example: - * (e.g. "tls://smtp1.example.com:587;ssl://smtp2.example.com:465"). - * Hosts will be tried in order. - * - * @var string - */ - public $Host = 'localhost'; - - /** - * The default SMTP server port. - * - * @var int - */ - public $Port = 25; - - /** - * The SMTP HELO of the message. - * Default is $Hostname. If $Hostname is empty, PHPMailer attempts to find - * one with the same method described above for $Hostname. - * - * @see PHPMailer::$Hostname - * - * @var string - */ - public $Helo = ''; - - /** - * What kind of encryption to use on the SMTP connection. - * Options: '', 'ssl' or 'tls'. - * - * @var string - */ - public $SMTPSecure = ''; - - /** - * Whether to enable TLS encryption automatically if a server supports it, - * even if `SMTPSecure` is not set to 'tls'. - * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid. - * - * @var bool - */ - public $SMTPAutoTLS = true; - - /** - * Whether to use SMTP authentication. - * Uses the Username and Password properties. - * - * @see PHPMailer::$Username - * @see PHPMailer::$Password - * - * @var bool - */ - public $SMTPAuth = false; - - /** - * Options array passed to stream_context_create when connecting via SMTP. - * - * @var array - */ - public $SMTPOptions = []; - - /** - * SMTP username. - * - * @var string - */ - public $Username = ''; - - /** - * SMTP password. - * - * @var string - */ - public $Password = ''; - - /** - * SMTP auth type. - * Options are CRAM-MD5, LOGIN, PLAIN, XOAUTH2, attempted in that order if not specified. - * - * @var string - */ - public $AuthType = ''; - - /** - * An instance of the PHPMailer OAuth class. - * - * @var OAuth - */ - protected $oauth; - - /** - * The SMTP server timeout in seconds. - * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2. - * - * @var int - */ - public $Timeout = 300; - - /** - * SMTP class debug output mode. - * Debug output level. - * Options: - * * `0` No output - * * `1` Commands - * * `2` Data and commands - * * `3` As 2 plus connection status - * * `4` Low-level data output. - * - * @see SMTP::$do_debug - * - * @var int - */ - public $SMTPDebug = 0; - - /** - * How to handle debug output. - * Options: - * * `echo` Output plain-text as-is, appropriate for CLI - * * `html` Output escaped, line breaks converted to `
`, appropriate for browser output - * * `error_log` Output to error log as configured in php.ini - * By default PHPMailer will use `echo` if run from a `cli` or `cli-server` SAPI, `html` otherwise. - * Alternatively, you can provide a callable expecting two params: a message string and the debug level: - * - * ```php - * $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";}; - * ``` - * - * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug` - * level output is used: - * - * ```php - * $mail->Debugoutput = new myPsr3Logger; - * ``` - * - * @see SMTP::$Debugoutput - * - * @var string|callable|\Psr\Log\LoggerInterface - */ - public $Debugoutput = 'echo'; - - /** - * Whether to keep SMTP connection open after each message. - * If this is set to true then to close the connection - * requires an explicit call to smtpClose(). - * - * @var bool - */ - public $SMTPKeepAlive = false; - - /** - * Whether to split multiple to addresses into multiple messages - * or send them all in one message. - * Only supported in `mail` and `sendmail` transports, not in SMTP. - * - * @var bool - */ - public $SingleTo = false; - - /** - * Storage for addresses when SingleTo is enabled. - * - * @var array - */ - protected $SingleToArray = []; - - /** - * Whether to generate VERP addresses on send. - * Only applicable when sending via SMTP. - * - * @see https://en.wikipedia.org/wiki/Variable_envelope_return_path - * @see http://www.postfix.org/VERP_README.html Postfix VERP info - * - * @var bool - */ - public $do_verp = false; - - /** - * Whether to allow sending messages with an empty body. - * - * @var bool - */ - public $AllowEmpty = false; - - /** - * DKIM selector. - * - * @var string - */ - public $DKIM_selector = ''; - - /** - * DKIM Identity. - * Usually the email address used as the source of the email. - * - * @var string - */ - public $DKIM_identity = ''; - - /** - * DKIM passphrase. - * Used if your key is encrypted. - * - * @var string - */ - public $DKIM_passphrase = ''; - - /** - * DKIM signing domain name. - * - * @example 'example.com' - * - * @var string - */ - public $DKIM_domain = ''; - - /** - * DKIM private key file path. - * - * @var string - */ - public $DKIM_private = ''; - - /** - * DKIM private key string. - * - * If set, takes precedence over `$DKIM_private`. - * - * @var string - */ - public $DKIM_private_string = ''; - - /** - * Callback Action function name. - * - * The function that handles the result of the send email action. - * It is called out by send() for each email sent. - * - * Value can be any php callable: http://www.php.net/is_callable - * - * Parameters: - * bool $result result of the send action - * array $to email addresses of the recipients - * array $cc cc email addresses - * array $bcc bcc email addresses - * string $subject the subject - * string $body the email body - * string $from email address of sender - * string $extra extra information of possible use - * "smtp_transaction_id' => last smtp transaction id - * - * @var string - */ - public $action_function = ''; - - /** - * What to put in the X-Mailer header. - * Options: An empty string for PHPMailer default, whitespace for none, or a string to use. - * - * @var string - */ - public $XMailer = ''; - - /** - * Which validator to use by default when validating email addresses. - * May be a callable to inject your own validator, but there are several built-in validators. - * The default validator uses PHP's FILTER_VALIDATE_EMAIL filter_var option. - * - * @see PHPMailer::validateAddress() - * - * @var string|callable - */ - public static $validator = 'php'; - - /** - * An instance of the SMTP sender class. - * - * @var SMTP - */ - protected $smtp; - - /** - * The array of 'to' names and addresses. - * - * @var array - */ - protected $to = []; - - /** - * The array of 'cc' names and addresses. - * - * @var array - */ - protected $cc = []; - - /** - * The array of 'bcc' names and addresses. - * - * @var array - */ - protected $bcc = []; - - /** - * The array of reply-to names and addresses. - * - * @var array - */ - protected $ReplyTo = []; - - /** - * An array of all kinds of addresses. - * Includes all of $to, $cc, $bcc. - * - * @see PHPMailer::$to - * @see PHPMailer::$cc - * @see PHPMailer::$bcc - * - * @var array - */ - protected $all_recipients = []; - - /** - * An array of names and addresses queued for validation. - * In send(), valid and non duplicate entries are moved to $all_recipients - * and one of $to, $cc, or $bcc. - * This array is used only for addresses with IDN. - * - * @see PHPMailer::$to - * @see PHPMailer::$cc - * @see PHPMailer::$bcc - * @see PHPMailer::$all_recipients - * - * @var array - */ - protected $RecipientsQueue = []; - - /** - * An array of reply-to names and addresses queued for validation. - * In send(), valid and non duplicate entries are moved to $ReplyTo. - * This array is used only for addresses with IDN. - * - * @see PHPMailer::$ReplyTo - * - * @var array - */ - protected $ReplyToQueue = []; - - /** - * The array of attachments. - * - * @var array - */ - protected $attachment = []; - - /** - * The array of custom headers. - * - * @var array - */ - protected $CustomHeader = []; - - /** - * The most recent Message-ID (including angular brackets). - * - * @var string - */ - protected $lastMessageID = ''; - - /** - * The message's MIME type. - * - * @var string - */ - protected $message_type = ''; - - /** - * The array of MIME boundary strings. - * - * @var array - */ - protected $boundary = []; - - /** - * The array of available languages. - * - * @var array - */ - protected $language = []; - - /** - * The number of errors encountered. - * - * @var int - */ - protected $error_count = 0; - - /** - * The S/MIME certificate file path. - * - * @var string - */ - protected $sign_cert_file = ''; - - /** - * The S/MIME key file path. - * - * @var string - */ - protected $sign_key_file = ''; - - /** - * The optional S/MIME extra certificates ("CA Chain") file path. - * - * @var string - */ - protected $sign_extracerts_file = ''; - - /** - * The S/MIME password for the key. - * Used only if the key is encrypted. - * - * @var string - */ - protected $sign_key_pass = ''; - - /** - * Whether to throw exceptions for errors. - * - * @var bool - */ - protected $exceptions = false; - - /** - * Unique ID used for message ID and boundaries. - * - * @var string - */ - protected $uniqueid = ''; - - /** - * The PHPMailer Version number. - * - * @var string - */ - const VERSION = '6.0.5'; - - /** - * Error severity: message only, continue processing. - * - * @var int - */ - const STOP_MESSAGE = 0; - - /** - * Error severity: message, likely ok to continue processing. - * - * @var int - */ - const STOP_CONTINUE = 1; - - /** - * Error severity: message, plus full stop, critical error reached. - * - * @var int - */ - const STOP_CRITICAL = 2; - - /** - * SMTP RFC standard line ending. - * - * @var string - */ - protected static $LE = "\r\n"; - - /** - * The maximum line length allowed by RFC 2822 section 2.1.1. - * - * @var int - */ - const MAX_LINE_LENGTH = 998; - - /** - * The lower maximum line length allowed by RFC 2822 section 2.1.1. - * This length does NOT include the line break - * 76 means that lines will be 77 or 78 chars depending on whether - * the line break format is LF or CRLF; both are valid. - * - * @var int - */ - const STD_LINE_LENGTH = 76; - - /** - * Constructor. - * - * @param bool $exceptions Should we throw external exceptions? - */ - public function __construct($exceptions = null) - { - if (null !== $exceptions) { - $this->exceptions = (bool) $exceptions; - } - //Pick an appropriate debug output format automatically - $this->Debugoutput = (strpos(PHP_SAPI, 'cli') !== false ? 'echo' : 'html'); - } - - /** - * Destructor. - */ - public function __destruct() - { - //Close any open SMTP connection nicely - $this->smtpClose(); - } - - /** - * Call mail() in a safe_mode-aware fashion. - * Also, unless sendmail_path points to sendmail (or something that - * claims to be sendmail), don't pass params (not a perfect fix, - * but it will do). - * - * @param string $to To - * @param string $subject Subject - * @param string $body Message Body - * @param string $header Additional Header(s) - * @param string|null $params Params - * - * @return bool - */ - private function mailPassthru($to, $subject, $body, $header, $params) - { - //Check overloading of mail function to avoid double-encoding - if (ini_get('mbstring.func_overload') & 1) { - $subject = $this->secureHeader($subject); - } else { - $subject = $this->encodeHeader($this->secureHeader($subject)); - } - //Calling mail() with null params breaks - if (!$this->UseSendmailOptions or null === $params) { - $result = @mail($to, $subject, $body, $header); - } else { - $result = @mail($to, $subject, $body, $header, $params); - } - - return $result; - } - - /** - * Output debugging info via user-defined method. - * Only generates output if SMTP debug output is enabled (@see SMTP::$do_debug). - * - * @see PHPMailer::$Debugoutput - * @see PHPMailer::$SMTPDebug - * - * @param string $str - */ - protected function edebug($str) - { - if ($this->SMTPDebug <= 0) { - return; - } - //Is this a PSR-3 logger? - if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) { - $this->Debugoutput->debug($str); - - return; - } - //Avoid clash with built-in function names - if (!in_array($this->Debugoutput, ['error_log', 'html', 'echo']) and is_callable($this->Debugoutput)) { - call_user_func($this->Debugoutput, $str, $this->SMTPDebug); - - return; - } - switch ($this->Debugoutput) { - case 'error_log': - //Don't output, just log - error_log($str); - break; - case 'html': - //Cleans up output a bit for a better looking, HTML-safe output - echo htmlentities( - preg_replace('/[\r\n]+/', '', $str), - ENT_QUOTES, - 'UTF-8' - ), "
\n"; - break; - case 'echo': - default: - //Normalize line breaks - $str = preg_replace('/\r\n|\r/ms', "\n", $str); - echo gmdate('Y-m-d H:i:s'), - "\t", - //Trim trailing space - trim( - //Indent for readability, except for trailing break - str_replace( - "\n", - "\n \t ", - trim($str) - ) - ), - "\n"; - } - } - - /** - * Sets message type to HTML or plain. - * - * @param bool $isHtml True for HTML mode - */ - public function isHTML($isHtml = true) - { - if ($isHtml) { - $this->ContentType = 'text/html'; - } else { - $this->ContentType = 'text/plain'; - } - } - - /** - * Send messages using SMTP. - */ - public function isSMTP() - { - $this->Mailer = 'smtp'; - } - - /** - * Send messages using PHP's mail() function. - */ - public function isMail() - { - $this->Mailer = 'mail'; - } - - /** - * Send messages using $Sendmail. - */ - public function isSendmail() - { - $ini_sendmail_path = ini_get('sendmail_path'); - - if (false === stripos($ini_sendmail_path, 'sendmail')) { - $this->Sendmail = '/usr/sbin/sendmail'; - } else { - $this->Sendmail = $ini_sendmail_path; - } - $this->Mailer = 'sendmail'; - } - - /** - * Send messages using qmail. - */ - public function isQmail() - { - $ini_sendmail_path = ini_get('sendmail_path'); - - if (false === stripos($ini_sendmail_path, 'qmail')) { - $this->Sendmail = '/var/qmail/bin/qmail-inject'; - } else { - $this->Sendmail = $ini_sendmail_path; - } - $this->Mailer = 'qmail'; - } - - /** - * Add a "To" address. - * - * @param string $address The email address to send to - * @param string $name - * - * @return bool true on success, false if address already used or invalid in some way - */ - public function addAddress($address, $name = '') - { - return $this->addOrEnqueueAnAddress('to', $address, $name); - } - - /** - * Add a "CC" address. - * - * @param string $address The email address to send to - * @param string $name - * - * @return bool true on success, false if address already used or invalid in some way - */ - public function addCC($address, $name = '') - { - return $this->addOrEnqueueAnAddress('cc', $address, $name); - } - - /** - * Add a "BCC" address. - * - * @param string $address The email address to send to - * @param string $name - * - * @return bool true on success, false if address already used or invalid in some way - */ - public function addBCC($address, $name = '') - { - return $this->addOrEnqueueAnAddress('bcc', $address, $name); - } - - /** - * Add a "Reply-To" address. - * - * @param string $address The email address to reply to - * @param string $name - * - * @return bool true on success, false if address already used or invalid in some way - */ - public function addReplyTo($address, $name = '') - { - return $this->addOrEnqueueAnAddress('Reply-To', $address, $name); - } - - /** - * Add an address to one of the recipient arrays or to the ReplyTo array. Because PHPMailer - * can't validate addresses with an IDN without knowing the PHPMailer::$CharSet (that can still - * be modified after calling this function), addition of such addresses is delayed until send(). - * Addresses that have been added already return false, but do not throw exceptions. - * - * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo' - * @param string $address The email address to send, resp. to reply to - * @param string $name - * - * @throws Exception - * - * @return bool true on success, false if address already used or invalid in some way - */ - protected function addOrEnqueueAnAddress($kind, $address, $name) - { - $address = trim($address); - $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim - $pos = strrpos($address, '@'); - if (false === $pos) { - // At-sign is missing. - $error_message = sprintf('%s (%s): %s', - $this->lang('invalid_address'), - $kind, - $address); - $this->setError($error_message); - $this->edebug($error_message); - if ($this->exceptions) { - throw new Exception($error_message); - } - - return false; - } - $params = [$kind, $address, $name]; - // Enqueue addresses with IDN until we know the PHPMailer::$CharSet. - if ($this->has8bitChars(substr($address, ++$pos)) and static::idnSupported()) { - if ('Reply-To' != $kind) { - if (!array_key_exists($address, $this->RecipientsQueue)) { - $this->RecipientsQueue[$address] = $params; - - return true; - } - } else { - if (!array_key_exists($address, $this->ReplyToQueue)) { - $this->ReplyToQueue[$address] = $params; - - return true; - } - } - - return false; - } - - // Immediately add standard addresses without IDN. - return call_user_func_array([$this, 'addAnAddress'], $params); - } - - /** - * Add an address to one of the recipient arrays or to the ReplyTo array. - * Addresses that have been added already return false, but do not throw exceptions. - * - * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo' - * @param string $address The email address to send, resp. to reply to - * @param string $name - * - * @throws Exception - * - * @return bool true on success, false if address already used or invalid in some way - */ - protected function addAnAddress($kind, $address, $name = '') - { - if (!in_array($kind, ['to', 'cc', 'bcc', 'Reply-To'])) { - $error_message = sprintf('%s: %s', - $this->lang('Invalid recipient kind'), - $kind); - $this->setError($error_message); - $this->edebug($error_message); - if ($this->exceptions) { - throw new Exception($error_message); - } - - return false; - } - if (!static::validateAddress($address)) { - $error_message = sprintf('%s (%s): %s', - $this->lang('invalid_address'), - $kind, - $address); - $this->setError($error_message); - $this->edebug($error_message); - if ($this->exceptions) { - throw new Exception($error_message); - } - - return false; - } - if ('Reply-To' != $kind) { - if (!array_key_exists(strtolower($address), $this->all_recipients)) { - $this->{$kind}[] = [$address, $name]; - $this->all_recipients[strtolower($address)] = true; - - return true; - } - } else { - if (!array_key_exists(strtolower($address), $this->ReplyTo)) { - $this->ReplyTo[strtolower($address)] = [$address, $name]; - - return true; - } - } - - return false; - } - - /** - * Parse and validate a string containing one or more RFC822-style comma-separated email addresses - * of the form "display name
" into an array of name/address pairs. - * Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available. - * Note that quotes in the name part are removed. - * - * @see http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation - * - * @param string $addrstr The address list string - * @param bool $useimap Whether to use the IMAP extension to parse the list - * - * @return array - */ - public static function parseAddresses($addrstr, $useimap = true) - { - $addresses = []; - if ($useimap and function_exists('imap_rfc822_parse_adrlist')) { - //Use this built-in parser if it's available - $list = imap_rfc822_parse_adrlist($addrstr, ''); - foreach ($list as $address) { - if ('.SYNTAX-ERROR.' != $address->host) { - if (static::validateAddress($address->mailbox . '@' . $address->host)) { - $addresses[] = [ - 'name' => (property_exists($address, 'personal') ? $address->personal : ''), - 'address' => $address->mailbox . '@' . $address->host, - ]; - } - } - } - } else { - //Use this simpler parser - $list = explode(',', $addrstr); - foreach ($list as $address) { - $address = trim($address); - //Is there a separate name part? - if (strpos($address, '<') === false) { - //No separate name, just use the whole thing - if (static::validateAddress($address)) { - $addresses[] = [ - 'name' => '', - 'address' => $address, - ]; - } - } else { - list($name, $email) = explode('<', $address); - $email = trim(str_replace('>', '', $email)); - if (static::validateAddress($email)) { - $addresses[] = [ - 'name' => trim(str_replace(['"', "'"], '', $name)), - 'address' => $email, - ]; - } - } - } - } - - return $addresses; - } - - /** - * Set the From and FromName properties. - * - * @param string $address - * @param string $name - * @param bool $auto Whether to also set the Sender address, defaults to true - * - * @throws Exception - * - * @return bool - */ - public function setFrom($address, $name = '', $auto = true) - { - $address = trim($address); - $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim - // Don't validate now addresses with IDN. Will be done in send(). - $pos = strrpos($address, '@'); - if (false === $pos or - (!$this->has8bitChars(substr($address, ++$pos)) or !static::idnSupported()) and - !static::validateAddress($address)) { - $error_message = sprintf('%s (From): %s', - $this->lang('invalid_address'), - $address); - $this->setError($error_message); - $this->edebug($error_message); - if ($this->exceptions) { - throw new Exception($error_message); - } - - return false; - } - $this->From = $address; - $this->FromName = $name; - if ($auto) { - if (empty($this->Sender)) { - $this->Sender = $address; - } - } - - return true; - } - - /** - * Return the Message-ID header of the last email. - * Technically this is the value from the last time the headers were created, - * but it's also the message ID of the last sent message except in - * pathological cases. - * - * @return string - */ - public function getLastMessageID() - { - return $this->lastMessageID; - } - - /** - * Check that a string looks like an email address. - * Validation patterns supported: - * * `auto` Pick best pattern automatically; - * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0; - * * `pcre` Use old PCRE implementation; - * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL; - * * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements. - * * `noregex` Don't use a regex: super fast, really dumb. - * Alternatively you may pass in a callable to inject your own validator, for example: - * - * ```php - * PHPMailer::validateAddress('user@example.com', function($address) { - * return (strpos($address, '@') !== false); - * }); - * ``` - * - * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator. - * - * @param string $address The email address to check - * @param string|callable $patternselect Which pattern to use - * - * @return bool - */ - public static function validateAddress($address, $patternselect = null) - { - if (null === $patternselect) { - $patternselect = static::$validator; - } - if (is_callable($patternselect)) { - return call_user_func($patternselect, $address); - } - //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321 - if (strpos($address, "\n") !== false or strpos($address, "\r") !== false) { - return false; - } - switch ($patternselect) { - case 'pcre': //Kept for BC - case 'pcre8': - /* - * A more complex and more permissive version of the RFC5322 regex on which FILTER_VALIDATE_EMAIL - * is based. - * In addition to the addresses allowed by filter_var, also permits: - * * dotless domains: `a@b` - * * comments: `1234 @ local(blah) .machine .example` - * * quoted elements: `'"test blah"@example.org'` - * * numeric TLDs: `a@b.123` - * * unbracketed IPv4 literals: `a@192.168.0.1` - * * IPv6 literals: 'first.last@[IPv6:a1::]' - * Not all of these will necessarily work for sending! - * - * @see http://squiloople.com/2009/12/20/email-address-validation/ - * @copyright 2009-2010 Michael Rushton - * Feel free to use and redistribute this code. But please keep this copyright notice. - */ - return (bool) preg_match( - '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' . - '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' . - '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' . - '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' . - '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' . - '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' . - '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' . - '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' . - '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD', - $address - ); - case 'html5': - /* - * This is the pattern used in the HTML5 spec for validation of 'email' type form input elements. - * - * @see http://www.whatwg.org/specs/web-apps/current-work/#e-mail-state-(type=email) - */ - return (bool) preg_match( - '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' . - '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD', - $address - ); - case 'php': - default: - return (bool) filter_var($address, FILTER_VALIDATE_EMAIL); - } - } - - /** - * Tells whether IDNs (Internationalized Domain Names) are supported or not. This requires the - * `intl` and `mbstring` PHP extensions. - * - * @return bool `true` if required functions for IDN support are present - */ - public static function idnSupported() - { - return function_exists('idn_to_ascii') and function_exists('mb_convert_encoding'); - } - - /** - * Converts IDN in given email address to its ASCII form, also known as punycode, if possible. - * Important: Address must be passed in same encoding as currently set in PHPMailer::$CharSet. - * This function silently returns unmodified address if: - * - No conversion is necessary (i.e. domain name is not an IDN, or is already in ASCII form) - * - Conversion to punycode is impossible (e.g. required PHP functions are not available) - * or fails for any reason (e.g. domain contains characters not allowed in an IDN). - * - * @see PHPMailer::$CharSet - * - * @param string $address The email address to convert - * - * @return string The encoded address in ASCII form - */ - public function punyencodeAddress($address) - { - // Verify we have required functions, CharSet, and at-sign. - $pos = strrpos($address, '@'); - if (static::idnSupported() and - !empty($this->CharSet) and - false !== $pos - ) { - $domain = substr($address, ++$pos); - // Verify CharSet string is a valid one, and domain properly encoded in this CharSet. - if ($this->has8bitChars($domain) and @mb_check_encoding($domain, $this->CharSet)) { - $domain = mb_convert_encoding($domain, 'UTF-8', $this->CharSet); - //Ignore IDE complaints about this line - method signature changed in PHP 5.4 - $errorcode = 0; - $punycode = idn_to_ascii($domain, $errorcode, INTL_IDNA_VARIANT_UTS46); - if (false !== $punycode) { - return substr($address, 0, $pos) . $punycode; - } - } - } - - return $address; - } - - /** - * Create a message and send it. - * Uses the sending method specified by $Mailer. - * - * @throws Exception - * - * @return bool false on error - See the ErrorInfo property for details of the error - */ - public function send() - { - try { - if (!$this->preSend()) { - return false; - } - - return $this->postSend(); - } catch (Exception $exc) { - $this->mailHeader = ''; - $this->setError($exc->getMessage()); - if ($this->exceptions) { - throw $exc; - } - - return false; - } - } - - /** - * Prepare a message for sending. - * - * @throws Exception - * - * @return bool - */ - public function preSend() - { - if ('smtp' == $this->Mailer or - ('mail' == $this->Mailer and stripos(PHP_OS, 'WIN') === 0) - ) { - //SMTP mandates RFC-compliant line endings - //and it's also used with mail() on Windows - static::setLE("\r\n"); - } else { - //Maintain backward compatibility with legacy Linux command line mailers - static::setLE(PHP_EOL); - } - //Check for buggy PHP versions that add a header with an incorrect line break - if (ini_get('mail.add_x_header') == 1 - and 'mail' == $this->Mailer - and stripos(PHP_OS, 'WIN') === 0 - and ((version_compare(PHP_VERSION, '7.0.0', '>=') - and version_compare(PHP_VERSION, '7.0.17', '<')) - or (version_compare(PHP_VERSION, '7.1.0', '>=') - and version_compare(PHP_VERSION, '7.1.3', '<'))) - ) { - trigger_error( - 'Your version of PHP is affected by a bug that may result in corrupted messages.' . - ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' . - ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.', - E_USER_WARNING - ); - } - - try { - $this->error_count = 0; // Reset errors - $this->mailHeader = ''; - - // Dequeue recipient and Reply-To addresses with IDN - foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) { - $params[1] = $this->punyencodeAddress($params[1]); - call_user_func_array([$this, 'addAnAddress'], $params); - } - if (count($this->to) + count($this->cc) + count($this->bcc) < 1) { - throw new Exception($this->lang('provide_address'), self::STOP_CRITICAL); - } - - // Validate From, Sender, and ConfirmReadingTo addresses - foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) { - $this->$address_kind = trim($this->$address_kind); - if (empty($this->$address_kind)) { - continue; - } - $this->$address_kind = $this->punyencodeAddress($this->$address_kind); - if (!static::validateAddress($this->$address_kind)) { - $error_message = sprintf('%s (%s): %s', - $this->lang('invalid_address'), - $address_kind, - $this->$address_kind); - $this->setError($error_message); - $this->edebug($error_message); - if ($this->exceptions) { - throw new Exception($error_message); - } - - return false; - } - } - - // Set whether the message is multipart/alternative - if ($this->alternativeExists()) { - $this->ContentType = 'multipart/alternative'; - } - - $this->setMessageType(); - // Refuse to send an empty message unless we are specifically allowing it - if (!$this->AllowEmpty and empty($this->Body)) { - throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL); - } - - //Trim subject consistently - $this->Subject = trim($this->Subject); - // Create body before headers in case body makes changes to headers (e.g. altering transfer encoding) - $this->MIMEHeader = ''; - $this->MIMEBody = $this->createBody(); - // createBody may have added some headers, so retain them - $tempheaders = $this->MIMEHeader; - $this->MIMEHeader = $this->createHeader(); - $this->MIMEHeader .= $tempheaders; - - // To capture the complete message when using mail(), create - // an extra header list which createHeader() doesn't fold in - if ('mail' == $this->Mailer) { - if (count($this->to) > 0) { - $this->mailHeader .= $this->addrAppend('To', $this->to); - } else { - $this->mailHeader .= $this->headerLine('To', 'undisclosed-recipients:;'); - } - $this->mailHeader .= $this->headerLine( - 'Subject', - $this->encodeHeader($this->secureHeader($this->Subject)) - ); - } - - // Sign with DKIM if enabled - if (!empty($this->DKIM_domain) - and !empty($this->DKIM_selector) - and (!empty($this->DKIM_private_string) - or (!empty($this->DKIM_private) and file_exists($this->DKIM_private)) - ) - ) { - $header_dkim = $this->DKIM_Add( - $this->MIMEHeader . $this->mailHeader, - $this->encodeHeader($this->secureHeader($this->Subject)), - $this->MIMEBody - ); - $this->MIMEHeader = rtrim($this->MIMEHeader, "\r\n ") . static::$LE . - static::normalizeBreaks($header_dkim) . static::$LE; - } - - return true; - } catch (Exception $exc) { - $this->setError($exc->getMessage()); - if ($this->exceptions) { - throw $exc; - } - - return false; - } - } - - /** - * Actually send a message via the selected mechanism. - * - * @throws Exception - * - * @return bool - */ - public function postSend() - { - try { - // Choose the mailer and send through it - switch ($this->Mailer) { - case 'sendmail': - case 'qmail': - return $this->sendmailSend($this->MIMEHeader, $this->MIMEBody); - case 'smtp': - return $this->smtpSend($this->MIMEHeader, $this->MIMEBody); - case 'mail': - return $this->mailSend($this->MIMEHeader, $this->MIMEBody); - default: - $sendMethod = $this->Mailer . 'Send'; - if (method_exists($this, $sendMethod)) { - return $this->$sendMethod($this->MIMEHeader, $this->MIMEBody); - } - - return $this->mailSend($this->MIMEHeader, $this->MIMEBody); - } - } catch (Exception $exc) { - $this->setError($exc->getMessage()); - $this->edebug($exc->getMessage()); - if ($this->exceptions) { - throw $exc; - } - } - - return false; - } - - /** - * Send mail using the $Sendmail program. - * - * @see PHPMailer::$Sendmail - * - * @param string $header The message headers - * @param string $body The message body - * - * @throws Exception - * - * @return bool - */ - protected function sendmailSend($header, $body) - { - // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. - if (!empty($this->Sender) and self::isShellSafe($this->Sender)) { - if ('qmail' == $this->Mailer) { - $sendmailFmt = '%s -f%s'; - } else { - $sendmailFmt = '%s -oi -f%s -t'; - } - } else { - if ('qmail' == $this->Mailer) { - $sendmailFmt = '%s'; - } else { - $sendmailFmt = '%s -oi -t'; - } - } - - $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender); - - if ($this->SingleTo) { - foreach ($this->SingleToArray as $toAddr) { - $mail = @popen($sendmail, 'w'); - if (!$mail) { - throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } - fwrite($mail, 'To: ' . $toAddr . "\n"); - fwrite($mail, $header); - fwrite($mail, $body); - $result = pclose($mail); - $this->doCallback( - ($result == 0), - [$toAddr], - $this->cc, - $this->bcc, - $this->Subject, - $body, - $this->From, - [] - ); - if (0 !== $result) { - throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } - } - } else { - $mail = @popen($sendmail, 'w'); - if (!$mail) { - throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } - fwrite($mail, $header); - fwrite($mail, $body); - $result = pclose($mail); - $this->doCallback( - ($result == 0), - $this->to, - $this->cc, - $this->bcc, - $this->Subject, - $body, - $this->From, - [] - ); - if (0 !== $result) { - throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } - } - - return true; - } - - /** - * Fix CVE-2016-10033 and CVE-2016-10045 by disallowing potentially unsafe shell characters. - * Note that escapeshellarg and escapeshellcmd are inadequate for our purposes, especially on Windows. - * - * @see https://github.com/PHPMailer/PHPMailer/issues/924 CVE-2016-10045 bug report - * - * @param string $string The string to be validated - * - * @return bool - */ - protected static function isShellSafe($string) - { - // Future-proof - if (escapeshellcmd($string) !== $string - or !in_array(escapeshellarg($string), ["'$string'", "\"$string\""]) - ) { - return false; - } - - $length = strlen($string); - - for ($i = 0; $i < $length; ++$i) { - $c = $string[$i]; - - // All other characters have a special meaning in at least one common shell, including = and +. - // Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here. - // Note that this does permit non-Latin alphanumeric characters based on the current locale. - if (!ctype_alnum($c) && strpos('@_-.', $c) === false) { - return false; - } - } - - return true; - } - - /** - * Send mail using the PHP mail() function. - * - * @see http://www.php.net/manual/en/book.mail.php - * - * @param string $header The message headers - * @param string $body The message body - * - * @throws Exception - * - * @return bool - */ - protected function mailSend($header, $body) - { - $toArr = []; - foreach ($this->to as $toaddr) { - $toArr[] = $this->addrFormat($toaddr); - } - $to = implode(', ', $toArr); - - $params = null; - //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver - if (!empty($this->Sender) and static::validateAddress($this->Sender)) { - //A space after `-f` is optional, but there is a long history of its presence - //causing problems, so we don't use one - //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html - //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html - //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html - //Example problem: https://www.drupal.org/node/1057954 - // CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped. - if (self::isShellSafe($this->Sender)) { - $params = sprintf('-f%s', $this->Sender); - } - } - if (!empty($this->Sender) and static::validateAddress($this->Sender)) { - $old_from = ini_get('sendmail_from'); - ini_set('sendmail_from', $this->Sender); - } - $result = false; - if ($this->SingleTo and count($toArr) > 1) { - foreach ($toArr as $toAddr) { - $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params); - $this->doCallback($result, [$toAddr], $this->cc, $this->bcc, $this->Subject, $body, $this->From, []); - } - } else { - $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params); - $this->doCallback($result, $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From, []); - } - if (isset($old_from)) { - ini_set('sendmail_from', $old_from); - } - if (!$result) { - throw new Exception($this->lang('instantiate'), self::STOP_CRITICAL); - } - - return true; - } - - /** - * Get an instance to use for SMTP operations. - * Override this function to load your own SMTP implementation, - * or set one with setSMTPInstance. - * - * @return SMTP - */ - public function getSMTPInstance() - { - if (!is_object($this->smtp)) { - $this->smtp = new SMTP(); - } - - return $this->smtp; - } - - /** - * Provide an instance to use for SMTP operations. - * - * @param SMTP $smtp - * - * @return SMTP - */ - public function setSMTPInstance(SMTP $smtp) - { - $this->smtp = $smtp; - - return $this->smtp; - } - - /** - * Send mail via SMTP. - * Returns false if there is a bad MAIL FROM, RCPT, or DATA input. - * - * @see PHPMailer::setSMTPInstance() to use a different class. - * - * @uses \PHPMailer\PHPMailer\SMTP - * - * @param string $header The message headers - * @param string $body The message body - * - * @throws Exception - * - * @return bool - */ - protected function smtpSend($header, $body) - { - $bad_rcpt = []; - if (!$this->smtpConnect($this->SMTPOptions)) { - throw new Exception($this->lang('smtp_connect_failed'), self::STOP_CRITICAL); - } - //Sender already validated in preSend() - if ('' == $this->Sender) { - $smtp_from = $this->From; - } else { - $smtp_from = $this->Sender; - } - if (!$this->smtp->mail($smtp_from)) { - $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError())); - throw new Exception($this->ErrorInfo, self::STOP_CRITICAL); - } - - $callbacks = []; - // Attempt to send to all recipients - foreach ([$this->to, $this->cc, $this->bcc] as $togroup) { - foreach ($togroup as $to) { - if (!$this->smtp->recipient($to[0])) { - $error = $this->smtp->getError(); - $bad_rcpt[] = ['to' => $to[0], 'error' => $error['detail']]; - $isSent = false; - } else { - $isSent = true; - } - - $callbacks[] = ['issent'=>$isSent, 'to'=>$to[0]]; - } - } - - // Only send the DATA command if we have viable recipients - if ((count($this->all_recipients) > count($bad_rcpt)) and !$this->smtp->data($header . $body)) { - throw new Exception($this->lang('data_not_accepted'), self::STOP_CRITICAL); - } - - $smtp_transaction_id = $this->smtp->getLastTransactionID(); - - if ($this->SMTPKeepAlive) { - $this->smtp->reset(); - } else { - $this->smtp->quit(); - $this->smtp->close(); - } - - foreach ($callbacks as $cb) { - $this->doCallback( - $cb['issent'], - [$cb['to']], - [], - [], - $this->Subject, - $body, - $this->From, - ['smtp_transaction_id' => $smtp_transaction_id] - ); - } - - //Create error message for any bad addresses - if (count($bad_rcpt) > 0) { - $errstr = ''; - foreach ($bad_rcpt as $bad) { - $errstr .= $bad['to'] . ': ' . $bad['error']; - } - throw new Exception( - $this->lang('recipients_failed') . $errstr, - self::STOP_CONTINUE - ); - } - - return true; - } - - /** - * Initiate a connection to an SMTP server. - * Returns false if the operation failed. - * - * @param array $options An array of options compatible with stream_context_create() - * - * @throws Exception - * - * @uses \PHPMailer\PHPMailer\SMTP - * - * @return bool - */ - public function smtpConnect($options = null) - { - if (null === $this->smtp) { - $this->smtp = $this->getSMTPInstance(); - } - - //If no options are provided, use whatever is set in the instance - if (null === $options) { - $options = $this->SMTPOptions; - } - - // Already connected? - if ($this->smtp->connected()) { - return true; - } - - $this->smtp->setTimeout($this->Timeout); - $this->smtp->setDebugLevel($this->SMTPDebug); - $this->smtp->setDebugOutput($this->Debugoutput); - $this->smtp->setVerp($this->do_verp); - $hosts = explode(';', $this->Host); - $lastexception = null; - - foreach ($hosts as $hostentry) { - $hostinfo = []; - if (!preg_match( - '/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*|\[[a-fA-F0-9:]+\]):?([0-9]*)$/', - trim($hostentry), - $hostinfo - )) { - static::edebug($this->lang('connect_host') . ' ' . $hostentry); - // Not a valid host entry - continue; - } - // $hostinfo[2]: optional ssl or tls prefix - // $hostinfo[3]: the hostname - // $hostinfo[4]: optional port number - // The host string prefix can temporarily override the current setting for SMTPSecure - // If it's not specified, the default value is used - - //Check the host name is a valid name or IP address before trying to use it - if (!static::isValidHost($hostinfo[3])) { - static::edebug($this->lang('connect_host') . ' ' . $hostentry); - continue; - } - $prefix = ''; - $secure = $this->SMTPSecure; - $tls = ('tls' == $this->SMTPSecure); - if ('ssl' == $hostinfo[2] or ('' == $hostinfo[2] and 'ssl' == $this->SMTPSecure)) { - $prefix = 'ssl://'; - $tls = false; // Can't have SSL and TLS at the same time - $secure = 'ssl'; - } elseif ('tls' == $hostinfo[2]) { - $tls = true; - // tls doesn't use a prefix - $secure = 'tls'; - } - //Do we need the OpenSSL extension? - $sslext = defined('OPENSSL_ALGO_SHA256'); - if ('tls' === $secure or 'ssl' === $secure) { - //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled - if (!$sslext) { - throw new Exception($this->lang('extension_missing') . 'openssl', self::STOP_CRITICAL); - } - } - $host = $hostinfo[3]; - $port = $this->Port; - $tport = (int) $hostinfo[4]; - if ($tport > 0 and $tport < 65536) { - $port = $tport; - } - if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) { - try { - if ($this->Helo) { - $hello = $this->Helo; - } else { - $hello = $this->serverHostname(); - } - $this->smtp->hello($hello); - //Automatically enable TLS encryption if: - // * it's not disabled - // * we have openssl extension - // * we are not already using SSL - // * the server offers STARTTLS - if ($this->SMTPAutoTLS and $sslext and 'ssl' != $secure and $this->smtp->getServerExt('STARTTLS')) { - $tls = true; - } - if ($tls) { - if (!$this->smtp->startTLS()) { - throw new Exception($this->lang('connect_host')); - } - // We must resend EHLO after TLS negotiation - $this->smtp->hello($hello); - } - if ($this->SMTPAuth) { - if (!$this->smtp->authenticate( - $this->Username, - $this->Password, - $this->AuthType, - $this->oauth - ) - ) { - throw new Exception($this->lang('authenticate')); - } - } - - return true; - } catch (Exception $exc) { - $lastexception = $exc; - $this->edebug($exc->getMessage()); - // We must have connected, but then failed TLS or Auth, so close connection nicely - $this->smtp->quit(); - } - } - } - // If we get here, all connection attempts have failed, so close connection hard - $this->smtp->close(); - // As we've caught all exceptions, just report whatever the last one was - if ($this->exceptions and null !== $lastexception) { - throw $lastexception; - } - - return false; - } - - /** - * Close the active SMTP session if one exists. - */ - public function smtpClose() - { - if (null !== $this->smtp) { - if ($this->smtp->connected()) { - $this->smtp->quit(); - $this->smtp->close(); - } - } - } - - /** - * Set the language for error messages. - * Returns false if it cannot load the language file. - * The default language is English. - * - * @param string $langcode ISO 639-1 2-character language code (e.g. French is "fr") - * @param string $lang_path Path to the language file directory, with trailing separator (slash) - * - * @return bool - */ - public function setLanguage($langcode = 'en', $lang_path = '') - { - // Backwards compatibility for renamed language codes - $renamed_langcodes = [ - 'br' => 'pt_br', - 'cz' => 'cs', - 'dk' => 'da', - 'no' => 'nb', - 'se' => 'sv', - 'sr' => 'rs', - ]; - - if (isset($renamed_langcodes[$langcode])) { - $langcode = $renamed_langcodes[$langcode]; - } - - // Define full set of translatable strings in English - $PHPMAILER_LANG = [ - 'authenticate' => 'SMTP Error: Could not authenticate.', - 'connect_host' => 'SMTP Error: Could not connect to SMTP host.', - 'data_not_accepted' => 'SMTP Error: data not accepted.', - 'empty_message' => 'Message body empty', - 'encoding' => 'Unknown encoding: ', - 'execute' => 'Could not execute: ', - 'file_access' => 'Could not access file: ', - 'file_open' => 'File Error: Could not open file: ', - 'from_failed' => 'The following From address failed: ', - 'instantiate' => 'Could not instantiate mail function.', - 'invalid_address' => 'Invalid address: ', - 'mailer_not_supported' => ' mailer is not supported.', - 'provide_address' => 'You must provide at least one recipient email address.', - 'recipients_failed' => 'SMTP Error: The following recipients failed: ', - 'signing' => 'Signing Error: ', - 'smtp_connect_failed' => 'SMTP connect() failed.', - 'smtp_error' => 'SMTP server error: ', - 'variable_set' => 'Cannot set or reset variable: ', - 'extension_missing' => 'Extension missing: ', - ]; - if (empty($lang_path)) { - // Calculate an absolute path so it can work if CWD is not here - $lang_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR; - } - //Validate $langcode - if (!preg_match('/^[a-z]{2}(?:_[a-zA-Z]{2})?$/', $langcode)) { - $langcode = 'en'; - } - $foundlang = true; - $lang_file = $lang_path . 'phpmailer.lang-' . $langcode . '.php'; - // There is no English translation file - if ('en' != $langcode) { - // Make sure language file path is readable - if (!file_exists($lang_file)) { - $foundlang = false; - } else { - // Overwrite language-specific strings. - // This way we'll never have missing translation keys. - $foundlang = include $lang_file; - } - } - $this->language = $PHPMAILER_LANG; - - return (bool) $foundlang; // Returns false if language not found - } - - /** - * Get the array of strings for the current language. - * - * @return array - */ - public function getTranslations() - { - return $this->language; - } - - /** - * Create recipient headers. - * - * @param string $type - * @param array $addr An array of recipients, - * where each recipient is a 2-element indexed array with element 0 containing an address - * and element 1 containing a name, like: - * [['joe@example.com', 'Joe User'], ['zoe@example.com', 'Zoe User']] - * - * @return string - */ - public function addrAppend($type, $addr) - { - $addresses = []; - foreach ($addr as $address) { - $addresses[] = $this->addrFormat($address); - } - - return $type . ': ' . implode(', ', $addresses) . static::$LE; - } - - /** - * Format an address for use in a message header. - * - * @param array $addr A 2-element indexed array, element 0 containing an address, element 1 containing a name like - * ['joe@example.com', 'Joe User'] - * - * @return string - */ - public function addrFormat($addr) - { - if (empty($addr[1])) { // No name provided - return $this->secureHeader($addr[0]); - } - - return $this->encodeHeader($this->secureHeader($addr[1]), 'phrase') . ' <' . $this->secureHeader( - $addr[0] - ) . '>'; - } - - /** - * Word-wrap message. - * For use with mailers that do not automatically perform wrapping - * and for quoted-printable encoded messages. - * Original written by philippe. - * - * @param string $message The message to wrap - * @param int $length The line length to wrap to - * @param bool $qp_mode Whether to run in Quoted-Printable mode - * - * @return string - */ - public function wrapText($message, $length, $qp_mode = false) - { - if ($qp_mode) { - $soft_break = sprintf(' =%s', static::$LE); - } else { - $soft_break = static::$LE; - } - // If utf-8 encoding is used, we will need to make sure we don't - // split multibyte characters when we wrap - $is_utf8 = 'utf-8' == strtolower($this->CharSet); - $lelen = strlen(static::$LE); - $crlflen = strlen(static::$LE); - - $message = static::normalizeBreaks($message); - //Remove a trailing line break - if (substr($message, -$lelen) == static::$LE) { - $message = substr($message, 0, -$lelen); - } - - //Split message into lines - $lines = explode(static::$LE, $message); - //Message will be rebuilt in here - $message = ''; - foreach ($lines as $line) { - $words = explode(' ', $line); - $buf = ''; - $firstword = true; - foreach ($words as $word) { - if ($qp_mode and (strlen($word) > $length)) { - $space_left = $length - strlen($buf) - $crlflen; - if (!$firstword) { - if ($space_left > 20) { - $len = $space_left; - if ($is_utf8) { - $len = $this->utf8CharBoundary($word, $len); - } elseif ('=' == substr($word, $len - 1, 1)) { - --$len; - } elseif ('=' == substr($word, $len - 2, 1)) { - $len -= 2; - } - $part = substr($word, 0, $len); - $word = substr($word, $len); - $buf .= ' ' . $part; - $message .= $buf . sprintf('=%s', static::$LE); - } else { - $message .= $buf . $soft_break; - } - $buf = ''; - } - while (strlen($word) > 0) { - if ($length <= 0) { - break; - } - $len = $length; - if ($is_utf8) { - $len = $this->utf8CharBoundary($word, $len); - } elseif ('=' == substr($word, $len - 1, 1)) { - --$len; - } elseif ('=' == substr($word, $len - 2, 1)) { - $len -= 2; - } - $part = substr($word, 0, $len); - $word = substr($word, $len); - - if (strlen($word) > 0) { - $message .= $part . sprintf('=%s', static::$LE); - } else { - $buf = $part; - } - } - } else { - $buf_o = $buf; - if (!$firstword) { - $buf .= ' '; - } - $buf .= $word; - - if (strlen($buf) > $length and '' != $buf_o) { - $message .= $buf_o . $soft_break; - $buf = $word; - } - } - $firstword = false; - } - $message .= $buf . static::$LE; - } - - return $message; - } - - /** - * Find the last character boundary prior to $maxLength in a utf-8 - * quoted-printable encoded string. - * Original written by Colin Brown. - * - * @param string $encodedText utf-8 QP text - * @param int $maxLength Find the last character boundary prior to this length - * - * @return int - */ - public function utf8CharBoundary($encodedText, $maxLength) - { - $foundSplitPos = false; - $lookBack = 3; - while (!$foundSplitPos) { - $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack); - $encodedCharPos = strpos($lastChunk, '='); - if (false !== $encodedCharPos) { - // Found start of encoded character byte within $lookBack block. - // Check the encoded byte value (the 2 chars after the '=') - $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2); - $dec = hexdec($hex); - if ($dec < 128) { - // Single byte character. - // If the encoded char was found at pos 0, it will fit - // otherwise reduce maxLength to start of the encoded char - if ($encodedCharPos > 0) { - $maxLength -= $lookBack - $encodedCharPos; - } - $foundSplitPos = true; - } elseif ($dec >= 192) { - // First byte of a multi byte character - // Reduce maxLength to split at start of character - $maxLength -= $lookBack - $encodedCharPos; - $foundSplitPos = true; - } elseif ($dec < 192) { - // Middle byte of a multi byte character, look further back - $lookBack += 3; - } - } else { - // No encoded character found - $foundSplitPos = true; - } - } - - return $maxLength; - } - - /** - * Apply word wrapping to the message body. - * Wraps the message body to the number of chars set in the WordWrap property. - * You should only do this to plain-text bodies as wrapping HTML tags may break them. - * This is called automatically by createBody(), so you don't need to call it yourself. - */ - public function setWordWrap() - { - if ($this->WordWrap < 1) { - return; - } - - switch ($this->message_type) { - case 'alt': - case 'alt_inline': - case 'alt_attach': - case 'alt_inline_attach': - $this->AltBody = $this->wrapText($this->AltBody, $this->WordWrap); - break; - default: - $this->Body = $this->wrapText($this->Body, $this->WordWrap); - break; - } - } - - /** - * Assemble message headers. - * - * @return string The assembled headers - */ - public function createHeader() - { - $result = ''; - - $result .= $this->headerLine('Date', '' == $this->MessageDate ? self::rfcDate() : $this->MessageDate); - - // To be created automatically by mail() - if ($this->SingleTo) { - if ('mail' != $this->Mailer) { - foreach ($this->to as $toaddr) { - $this->SingleToArray[] = $this->addrFormat($toaddr); - } - } - } else { - if (count($this->to) > 0) { - if ('mail' != $this->Mailer) { - $result .= $this->addrAppend('To', $this->to); - } - } elseif (count($this->cc) == 0) { - $result .= $this->headerLine('To', 'undisclosed-recipients:;'); - } - } - - $result .= $this->addrAppend('From', [[trim($this->From), $this->FromName]]); - - // sendmail and mail() extract Cc from the header before sending - if (count($this->cc) > 0) { - $result .= $this->addrAppend('Cc', $this->cc); - } - - // sendmail and mail() extract Bcc from the header before sending - if (( - 'sendmail' == $this->Mailer or 'qmail' == $this->Mailer or 'mail' == $this->Mailer - ) - and count($this->bcc) > 0 - ) { - $result .= $this->addrAppend('Bcc', $this->bcc); - } - - if (count($this->ReplyTo) > 0) { - $result .= $this->addrAppend('Reply-To', $this->ReplyTo); - } - - // mail() sets the subject itself - if ('mail' != $this->Mailer) { - $result .= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader($this->Subject))); - } - - // Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4 - // https://tools.ietf.org/html/rfc5322#section-3.6.4 - if ('' != $this->MessageID and preg_match('/^<.*@.*>$/', $this->MessageID)) { - $this->lastMessageID = $this->MessageID; - } else { - $this->lastMessageID = sprintf('<%s@%s>', $this->uniqueid, $this->serverHostname()); - } - $result .= $this->headerLine('Message-ID', $this->lastMessageID); - if (null !== $this->Priority) { - $result .= $this->headerLine('X-Priority', $this->Priority); - } - if ('' == $this->XMailer) { - $result .= $this->headerLine( - 'X-Mailer', - 'PHPMailer ' . self::VERSION . ' (https://github.com/PHPMailer/PHPMailer)' - ); - } else { - $myXmailer = trim($this->XMailer); - if ($myXmailer) { - $result .= $this->headerLine('X-Mailer', $myXmailer); - } - } - - if ('' != $this->ConfirmReadingTo) { - $result .= $this->headerLine('Disposition-Notification-To', '<' . $this->ConfirmReadingTo . '>'); - } - - // Add custom headers - foreach ($this->CustomHeader as $header) { - $result .= $this->headerLine( - trim($header[0]), - $this->encodeHeader(trim($header[1])) - ); - } - if (!$this->sign_key_file) { - $result .= $this->headerLine('MIME-Version', '1.0'); - $result .= $this->getMailMIME(); - } - - return $result; - } - - /** - * Get the message MIME type headers. - * - * @return string - */ - public function getMailMIME() - { - $result = ''; - $ismultipart = true; - switch ($this->message_type) { - case 'inline': - $result .= $this->headerLine('Content-Type', 'multipart/related;'); - $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"'); - break; - case 'attach': - case 'inline_attach': - case 'alt_attach': - case 'alt_inline_attach': - $result .= $this->headerLine('Content-Type', 'multipart/mixed;'); - $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"'); - break; - case 'alt': - case 'alt_inline': - $result .= $this->headerLine('Content-Type', 'multipart/alternative;'); - $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"'); - break; - default: - // Catches case 'plain': and case '': - $result .= $this->textLine('Content-Type: ' . $this->ContentType . '; charset=' . $this->CharSet); - $ismultipart = false; - break; - } - // RFC1341 part 5 says 7bit is assumed if not specified - if ('7bit' != $this->Encoding) { - // RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE - if ($ismultipart) { - if ('8bit' == $this->Encoding) { - $result .= $this->headerLine('Content-Transfer-Encoding', '8bit'); - } - // The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible - } else { - $result .= $this->headerLine('Content-Transfer-Encoding', $this->Encoding); - } - } - - if ('mail' != $this->Mailer) { - $result .= static::$LE; - } - - return $result; - } - - /** - * Returns the whole MIME message. - * Includes complete headers and body. - * Only valid post preSend(). - * - * @see PHPMailer::preSend() - * - * @return string - */ - public function getSentMIMEMessage() - { - return rtrim($this->MIMEHeader . $this->mailHeader, "\n\r") . static::$LE . static::$LE . $this->MIMEBody; - } - - /** - * Create a unique ID to use for boundaries. - * - * @return string - */ - protected function generateId() - { - $len = 32; //32 bytes = 256 bits - if (function_exists('random_bytes')) { - $bytes = random_bytes($len); - } elseif (function_exists('openssl_random_pseudo_bytes')) { - $bytes = openssl_random_pseudo_bytes($len); - } else { - //Use a hash to force the length to the same as the other methods - $bytes = hash('sha256', uniqid((string) mt_rand(), true), true); - } - - //We don't care about messing up base64 format here, just want a random string - return str_replace(['=', '+', '/'], '', base64_encode(hash('sha256', $bytes, true))); - } - - /** - * Assemble the message body. - * Returns an empty string on failure. - * - * @throws Exception - * - * @return string The assembled message body - */ - public function createBody() - { - $body = ''; - //Create unique IDs and preset boundaries - $this->uniqueid = $this->generateId(); - $this->boundary[1] = 'b1_' . $this->uniqueid; - $this->boundary[2] = 'b2_' . $this->uniqueid; - $this->boundary[3] = 'b3_' . $this->uniqueid; - - if ($this->sign_key_file) { - $body .= $this->getMailMIME() . static::$LE; - } - - $this->setWordWrap(); - - $bodyEncoding = $this->Encoding; - $bodyCharSet = $this->CharSet; - //Can we do a 7-bit downgrade? - if ('8bit' == $bodyEncoding and !$this->has8bitChars($this->Body)) { - $bodyEncoding = '7bit'; - //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit - $bodyCharSet = 'us-ascii'; - } - //If lines are too long, and we're not already using an encoding that will shorten them, - //change to quoted-printable transfer encoding for the body part only - if ('base64' != $this->Encoding and static::hasLineLongerThanMax($this->Body)) { - $bodyEncoding = 'quoted-printable'; - } - - $altBodyEncoding = $this->Encoding; - $altBodyCharSet = $this->CharSet; - //Can we do a 7-bit downgrade? - if ('8bit' == $altBodyEncoding and !$this->has8bitChars($this->AltBody)) { - $altBodyEncoding = '7bit'; - //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit - $altBodyCharSet = 'us-ascii'; - } - //If lines are too long, and we're not already using an encoding that will shorten them, - //change to quoted-printable transfer encoding for the alt body part only - if ('base64' != $altBodyEncoding and static::hasLineLongerThanMax($this->AltBody)) { - $altBodyEncoding = 'quoted-printable'; - } - //Use this as a preamble in all multipart message types - $mimepre = 'This is a multi-part message in MIME format.' . static::$LE; - switch ($this->message_type) { - case 'inline': - $body .= $mimepre; - $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding); - $body .= $this->encodeString($this->Body, $bodyEncoding); - $body .= static::$LE; - $body .= $this->attachAll('inline', $this->boundary[1]); - break; - case 'attach': - $body .= $mimepre; - $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding); - $body .= $this->encodeString($this->Body, $bodyEncoding); - $body .= static::$LE; - $body .= $this->attachAll('attachment', $this->boundary[1]); - break; - case 'inline_attach': - $body .= $mimepre; - $body .= $this->textLine('--' . $this->boundary[1]); - $body .= $this->headerLine('Content-Type', 'multipart/related;'); - $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"'); - $body .= static::$LE; - $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, '', $bodyEncoding); - $body .= $this->encodeString($this->Body, $bodyEncoding); - $body .= static::$LE; - $body .= $this->attachAll('inline', $this->boundary[2]); - $body .= static::$LE; - $body .= $this->attachAll('attachment', $this->boundary[1]); - break; - case 'alt': - $body .= $mimepre; - $body .= $this->getBoundary($this->boundary[1], $altBodyCharSet, 'text/plain', $altBodyEncoding); - $body .= $this->encodeString($this->AltBody, $altBodyEncoding); - $body .= static::$LE; - $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, 'text/html', $bodyEncoding); - $body .= $this->encodeString($this->Body, $bodyEncoding); - $body .= static::$LE; - if (!empty($this->Ical)) { - $body .= $this->getBoundary($this->boundary[1], '', 'text/calendar; method=REQUEST', ''); - $body .= $this->encodeString($this->Ical, $this->Encoding); - $body .= static::$LE; - } - $body .= $this->endBoundary($this->boundary[1]); - break; - case 'alt_inline': - $body .= $mimepre; - $body .= $this->getBoundary($this->boundary[1], $altBodyCharSet, 'text/plain', $altBodyEncoding); - $body .= $this->encodeString($this->AltBody, $altBodyEncoding); - $body .= static::$LE; - $body .= $this->textLine('--' . $this->boundary[1]); - $body .= $this->headerLine('Content-Type', 'multipart/related;'); - $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"'); - $body .= static::$LE; - $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, 'text/html', $bodyEncoding); - $body .= $this->encodeString($this->Body, $bodyEncoding); - $body .= static::$LE; - $body .= $this->attachAll('inline', $this->boundary[2]); - $body .= static::$LE; - $body .= $this->endBoundary($this->boundary[1]); - break; - case 'alt_attach': - $body .= $mimepre; - $body .= $this->textLine('--' . $this->boundary[1]); - $body .= $this->headerLine('Content-Type', 'multipart/alternative;'); - $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"'); - $body .= static::$LE; - $body .= $this->getBoundary($this->boundary[2], $altBodyCharSet, 'text/plain', $altBodyEncoding); - $body .= $this->encodeString($this->AltBody, $altBodyEncoding); - $body .= static::$LE; - $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, 'text/html', $bodyEncoding); - $body .= $this->encodeString($this->Body, $bodyEncoding); - $body .= static::$LE; - if (!empty($this->Ical)) { - $body .= $this->getBoundary($this->boundary[2], '', 'text/calendar; method=REQUEST', ''); - $body .= $this->encodeString($this->Ical, $this->Encoding); - } - $body .= $this->endBoundary($this->boundary[2]); - $body .= static::$LE; - $body .= $this->attachAll('attachment', $this->boundary[1]); - break; - case 'alt_inline_attach': - $body .= $mimepre; - $body .= $this->textLine('--' . $this->boundary[1]); - $body .= $this->headerLine('Content-Type', 'multipart/alternative;'); - $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"'); - $body .= static::$LE; - $body .= $this->getBoundary($this->boundary[2], $altBodyCharSet, 'text/plain', $altBodyEncoding); - $body .= $this->encodeString($this->AltBody, $altBodyEncoding); - $body .= static::$LE; - $body .= $this->textLine('--' . $this->boundary[2]); - $body .= $this->headerLine('Content-Type', 'multipart/related;'); - $body .= $this->textLine("\tboundary=\"" . $this->boundary[3] . '"'); - $body .= static::$LE; - $body .= $this->getBoundary($this->boundary[3], $bodyCharSet, 'text/html', $bodyEncoding); - $body .= $this->encodeString($this->Body, $bodyEncoding); - $body .= static::$LE; - $body .= $this->attachAll('inline', $this->boundary[3]); - $body .= static::$LE; - $body .= $this->endBoundary($this->boundary[2]); - $body .= static::$LE; - $body .= $this->attachAll('attachment', $this->boundary[1]); - break; - default: - // Catch case 'plain' and case '', applies to simple `text/plain` and `text/html` body content types - //Reset the `Encoding` property in case we changed it for line length reasons - $this->Encoding = $bodyEncoding; - $body .= $this->encodeString($this->Body, $this->Encoding); - break; - } - - if ($this->isError()) { - $body = ''; - if ($this->exceptions) { - throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL); - } - } elseif ($this->sign_key_file) { - try { - if (!defined('PKCS7_TEXT')) { - throw new Exception($this->lang('extension_missing') . 'openssl'); - } - // @TODO would be nice to use php://temp streams here - $file = tempnam(sys_get_temp_dir(), 'mail'); - if (false === file_put_contents($file, $body)) { - throw new Exception($this->lang('signing') . ' Could not write temp file'); - } - $signed = tempnam(sys_get_temp_dir(), 'signed'); - //Workaround for PHP bug https://bugs.php.net/bug.php?id=69197 - if (empty($this->sign_extracerts_file)) { - $sign = @openssl_pkcs7_sign( - $file, - $signed, - 'file://' . realpath($this->sign_cert_file), - ['file://' . realpath($this->sign_key_file), $this->sign_key_pass], - [] - ); - } else { - $sign = @openssl_pkcs7_sign( - $file, - $signed, - 'file://' . realpath($this->sign_cert_file), - ['file://' . realpath($this->sign_key_file), $this->sign_key_pass], - [], - PKCS7_DETACHED, - $this->sign_extracerts_file - ); - } - @unlink($file); - if ($sign) { - $body = file_get_contents($signed); - @unlink($signed); - //The message returned by openssl contains both headers and body, so need to split them up - $parts = explode("\n\n", $body, 2); - $this->MIMEHeader .= $parts[0] . static::$LE . static::$LE; - $body = $parts[1]; - } else { - @unlink($signed); - throw new Exception($this->lang('signing') . openssl_error_string()); - } - } catch (Exception $exc) { - $body = ''; - if ($this->exceptions) { - throw $exc; - } - } - } - - return $body; - } - - /** - * Return the start of a message boundary. - * - * @param string $boundary - * @param string $charSet - * @param string $contentType - * @param string $encoding - * - * @return string - */ - protected function getBoundary($boundary, $charSet, $contentType, $encoding) - { - $result = ''; - if ('' == $charSet) { - $charSet = $this->CharSet; - } - if ('' == $contentType) { - $contentType = $this->ContentType; - } - if ('' == $encoding) { - $encoding = $this->Encoding; - } - $result .= $this->textLine('--' . $boundary); - $result .= sprintf('Content-Type: %s; charset=%s', $contentType, $charSet); - $result .= static::$LE; - // RFC1341 part 5 says 7bit is assumed if not specified - if ('7bit' != $encoding) { - $result .= $this->headerLine('Content-Transfer-Encoding', $encoding); - } - $result .= static::$LE; - - return $result; - } - - /** - * Return the end of a message boundary. - * - * @param string $boundary - * - * @return string - */ - protected function endBoundary($boundary) - { - return static::$LE . '--' . $boundary . '--' . static::$LE; - } - - /** - * Set the message type. - * PHPMailer only supports some preset message types, not arbitrary MIME structures. - */ - protected function setMessageType() - { - $type = []; - if ($this->alternativeExists()) { - $type[] = 'alt'; - } - if ($this->inlineImageExists()) { - $type[] = 'inline'; - } - if ($this->attachmentExists()) { - $type[] = 'attach'; - } - $this->message_type = implode('_', $type); - if ('' == $this->message_type) { - //The 'plain' message_type refers to the message having a single body element, not that it is plain-text - $this->message_type = 'plain'; - } - } - - /** - * Format a header line. - * - * @param string $name - * @param string|int $value - * - * @return string - */ - public function headerLine($name, $value) - { - return $name . ': ' . $value . static::$LE; - } - - /** - * Return a formatted mail line. - * - * @param string $value - * - * @return string - */ - public function textLine($value) - { - return $value . static::$LE; - } - - /** - * Add an attachment from a path on the filesystem. - * Never use a user-supplied path to a file! - * Returns false if the file could not be found or read. - * - * @param string $path Path to the attachment - * @param string $name Overrides the attachment name - * @param string $encoding File encoding (see $Encoding) - * @param string $type File extension (MIME) type - * @param string $disposition Disposition to use - * - * @throws Exception - * - * @return bool - */ - public function addAttachment($path, $name = '', $encoding = 'base64', $type = '', $disposition = 'attachment') - { - try { - if (!@is_file($path)) { - throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE); - } - - // If a MIME type is not specified, try to work it out from the file name - if ('' == $type) { - $type = static::filenameToType($path); - } - - $filename = basename($path); - if ('' == $name) { - $name = $filename; - } - - $this->attachment[] = [ - 0 => $path, - 1 => $filename, - 2 => $name, - 3 => $encoding, - 4 => $type, - 5 => false, // isStringAttachment - 6 => $disposition, - 7 => $name, - ]; - } catch (Exception $exc) { - $this->setError($exc->getMessage()); - $this->edebug($exc->getMessage()); - if ($this->exceptions) { - throw $exc; - } - - return false; - } - - return true; - } - - /** - * Return the array of attachments. - * - * @return array - */ - public function getAttachments() - { - return $this->attachment; - } - - /** - * Attach all file, string, and binary attachments to the message. - * Returns an empty string on failure. - * - * @param string $disposition_type - * @param string $boundary - * - * @return string - */ - protected function attachAll($disposition_type, $boundary) - { - // Return text of body - $mime = []; - $cidUniq = []; - $incl = []; - - // Add all attachments - foreach ($this->attachment as $attachment) { - // Check if it is a valid disposition_filter - if ($attachment[6] == $disposition_type) { - // Check for string attachment - $string = ''; - $path = ''; - $bString = $attachment[5]; - if ($bString) { - $string = $attachment[0]; - } else { - $path = $attachment[0]; - } - - $inclhash = hash('sha256', serialize($attachment)); - if (in_array($inclhash, $incl)) { - continue; - } - $incl[] = $inclhash; - $name = $attachment[2]; - $encoding = $attachment[3]; - $type = $attachment[4]; - $disposition = $attachment[6]; - $cid = $attachment[7]; - if ('inline' == $disposition and array_key_exists($cid, $cidUniq)) { - continue; - } - $cidUniq[$cid] = true; - - $mime[] = sprintf('--%s%s', $boundary, static::$LE); - //Only include a filename property if we have one - if (!empty($name)) { - $mime[] = sprintf( - 'Content-Type: %s; name="%s"%s', - $type, - $this->encodeHeader($this->secureHeader($name)), - static::$LE - ); - } else { - $mime[] = sprintf( - 'Content-Type: %s%s', - $type, - static::$LE - ); - } - // RFC1341 part 5 says 7bit is assumed if not specified - if ('7bit' != $encoding) { - $mime[] = sprintf('Content-Transfer-Encoding: %s%s', $encoding, static::$LE); - } - - if (!empty($cid)) { - $mime[] = sprintf('Content-ID: <%s>%s', $cid, static::$LE); - } - - // If a filename contains any of these chars, it should be quoted, - // but not otherwise: RFC2183 & RFC2045 5.1 - // Fixes a warning in IETF's msglint MIME checker - // Allow for bypassing the Content-Disposition header totally - if (!(empty($disposition))) { - $encoded_name = $this->encodeHeader($this->secureHeader($name)); - if (preg_match('/[ \(\)<>@,;:\\"\/\[\]\?=]/', $encoded_name)) { - $mime[] = sprintf( - 'Content-Disposition: %s; filename="%s"%s', - $disposition, - $encoded_name, - static::$LE . static::$LE - ); - } else { - if (!empty($encoded_name)) { - $mime[] = sprintf( - 'Content-Disposition: %s; filename=%s%s', - $disposition, - $encoded_name, - static::$LE . static::$LE - ); - } else { - $mime[] = sprintf( - 'Content-Disposition: %s%s', - $disposition, - static::$LE . static::$LE - ); - } - } - } else { - $mime[] = static::$LE; - } - - // Encode as string attachment - if ($bString) { - $mime[] = $this->encodeString($string, $encoding); - } else { - $mime[] = $this->encodeFile($path, $encoding); - } - if ($this->isError()) { - return ''; - } - $mime[] = static::$LE; - } - } - - $mime[] = sprintf('--%s--%s', $boundary, static::$LE); - - return implode('', $mime); - } - - /** - * Encode a file attachment in requested format. - * Returns an empty string on failure. - * - * @param string $path The full path to the file - * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable' - * - * @throws Exception - * - * @return string - */ - protected function encodeFile($path, $encoding = 'base64') - { - try { - if (!file_exists($path)) { - throw new Exception($this->lang('file_open') . $path, self::STOP_CONTINUE); - } - $file_buffer = file_get_contents($path); - if (false === $file_buffer) { - throw new Exception($this->lang('file_open') . $path, self::STOP_CONTINUE); - } - $file_buffer = $this->encodeString($file_buffer, $encoding); - - return $file_buffer; - } catch (Exception $exc) { - $this->setError($exc->getMessage()); - - return ''; - } - } - - /** - * Encode a string in requested format. - * Returns an empty string on failure. - * - * @param string $str The text to encode - * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable - * - * @return string - */ - public function encodeString($str, $encoding = 'base64') - { - $encoded = ''; - switch (strtolower($encoding)) { - case 'base64': - $encoded = chunk_split( - base64_encode($str), - static::STD_LINE_LENGTH, - static::$LE - ); - break; - case '7bit': - case '8bit': - $encoded = static::normalizeBreaks($str); - // Make sure it ends with a line break - if (substr($encoded, -(strlen(static::$LE))) != static::$LE) { - $encoded .= static::$LE; - } - break; - case 'binary': - $encoded = $str; - break; - case 'quoted-printable': - $encoded = $this->encodeQP($str); - break; - default: - $this->setError($this->lang('encoding') . $encoding); - break; - } - - return $encoded; - } - - /** - * Encode a header value (not including its label) optimally. - * Picks shortest of Q, B, or none. Result includes folding if needed. - * See RFC822 definitions for phrase, comment and text positions. - * - * @param string $str The header value to encode - * @param string $position What context the string will be used in - * - * @return string - */ - public function encodeHeader($str, $position = 'text') - { - $matchcount = 0; - switch (strtolower($position)) { - case 'phrase': - if (!preg_match('/[\200-\377]/', $str)) { - // Can't use addslashes as we don't know the value of magic_quotes_sybase - $encoded = addcslashes($str, "\0..\37\177\\\""); - if (($str == $encoded) and !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) { - return $encoded; - } - - return "\"$encoded\""; - } - $matchcount = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches); - break; - /* @noinspection PhpMissingBreakStatementInspection */ - case 'comment': - $matchcount = preg_match_all('/[()"]/', $str, $matches); - //fallthrough - case 'text': - default: - $matchcount += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches); - break; - } - - //RFCs specify a maximum line length of 78 chars, however mail() will sometimes - //corrupt messages with headers longer than 65 chars. See #818 - $lengthsub = 'mail' == $this->Mailer ? 13 : 0; - $maxlen = static::STD_LINE_LENGTH - $lengthsub; - // Try to select the encoding which should produce the shortest output - if ($matchcount > strlen($str) / 3) { - // More than a third of the content will need encoding, so B encoding will be most efficient - $encoding = 'B'; - //This calculation is: - // max line length - // - shorten to avoid mail() corruption - // - Q/B encoding char overhead ("` =??[QB]??=`") - // - charset name length - $maxlen = static::STD_LINE_LENGTH - $lengthsub - 8 - strlen($this->CharSet); - if ($this->hasMultiBytes($str)) { - // Use a custom function which correctly encodes and wraps long - // multibyte strings without breaking lines within a character - $encoded = $this->base64EncodeWrapMB($str, "\n"); - } else { - $encoded = base64_encode($str); - $maxlen -= $maxlen % 4; - $encoded = trim(chunk_split($encoded, $maxlen, "\n")); - } - $encoded = preg_replace('/^(.*)$/m', ' =?' . $this->CharSet . "?$encoding?\\1?=", $encoded); - } elseif ($matchcount > 0) { - //1 or more chars need encoding, use Q-encode - $encoding = 'Q'; - //Recalc max line length for Q encoding - see comments on B encode - $maxlen = static::STD_LINE_LENGTH - $lengthsub - 8 - strlen($this->CharSet); - $encoded = $this->encodeQ($str, $position); - $encoded = $this->wrapText($encoded, $maxlen, true); - $encoded = str_replace('=' . static::$LE, "\n", trim($encoded)); - $encoded = preg_replace('/^(.*)$/m', ' =?' . $this->CharSet . "?$encoding?\\1?=", $encoded); - } elseif (strlen($str) > $maxlen) { - //No chars need encoding, but line is too long, so fold it - $encoded = trim($this->wrapText($str, $maxlen, false)); - if ($str == $encoded) { - //Wrapping nicely didn't work, wrap hard instead - $encoded = trim(chunk_split($str, static::STD_LINE_LENGTH, static::$LE)); - } - $encoded = str_replace(static::$LE, "\n", trim($encoded)); - $encoded = preg_replace('/^(.*)$/m', ' \\1', $encoded); - } else { - //No reformatting needed - return $str; - } - - return trim(static::normalizeBreaks($encoded)); - } - - /** - * Check if a string contains multi-byte characters. - * - * @param string $str multi-byte text to wrap encode - * - * @return bool - */ - public function hasMultiBytes($str) - { - if (function_exists('mb_strlen')) { - return strlen($str) > mb_strlen($str, $this->CharSet); - } - - // Assume no multibytes (we can't handle without mbstring functions anyway) - return false; - } - - /** - * Does a string contain any 8-bit chars (in any charset)? - * - * @param string $text - * - * @return bool - */ - public function has8bitChars($text) - { - return (bool) preg_match('/[\x80-\xFF]/', $text); - } - - /** - * Encode and wrap long multibyte strings for mail headers - * without breaking lines within a character. - * Adapted from a function by paravoid. - * - * @see http://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283 - * - * @param string $str multi-byte text to wrap encode - * @param string $linebreak string to use as linefeed/end-of-line - * - * @return string - */ - public function base64EncodeWrapMB($str, $linebreak = null) - { - $start = '=?' . $this->CharSet . '?B?'; - $end = '?='; - $encoded = ''; - if (null === $linebreak) { - $linebreak = static::$LE; - } - - $mb_length = mb_strlen($str, $this->CharSet); - // Each line must have length <= 75, including $start and $end - $length = 75 - strlen($start) - strlen($end); - // Average multi-byte ratio - $ratio = $mb_length / strlen($str); - // Base64 has a 4:3 ratio - $avgLength = floor($length * $ratio * .75); - - for ($i = 0; $i < $mb_length; $i += $offset) { - $lookBack = 0; - do { - $offset = $avgLength - $lookBack; - $chunk = mb_substr($str, $i, $offset, $this->CharSet); - $chunk = base64_encode($chunk); - ++$lookBack; - } while (strlen($chunk) > $length); - $encoded .= $chunk . $linebreak; - } - - // Chomp the last linefeed - return substr($encoded, 0, -strlen($linebreak)); - } - - /** - * Encode a string in quoted-printable format. - * According to RFC2045 section 6.7. - * - * @param string $string The text to encode - * - * @return string - */ - public function encodeQP($string) - { - return static::normalizeBreaks(quoted_printable_encode($string)); - } - - /** - * Encode a string using Q encoding. - * - * @see http://tools.ietf.org/html/rfc2047#section-4.2 - * - * @param string $str the text to encode - * @param string $position Where the text is going to be used, see the RFC for what that means - * - * @return string - */ - public function encodeQ($str, $position = 'text') - { - // There should not be any EOL in the string - $pattern = ''; - $encoded = str_replace(["\r", "\n"], '', $str); - switch (strtolower($position)) { - case 'phrase': - // RFC 2047 section 5.3 - $pattern = '^A-Za-z0-9!*+\/ -'; - break; - /* - * RFC 2047 section 5.2. - * Build $pattern without including delimiters and [] - */ - /* @noinspection PhpMissingBreakStatementInspection */ - case 'comment': - $pattern = '\(\)"'; - /* Intentional fall through */ - case 'text': - default: - // RFC 2047 section 5.1 - // Replace every high ascii, control, =, ? and _ characters - /** @noinspection SuspiciousAssignmentsInspection */ - $pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $pattern; - break; - } - $matches = []; - if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) { - // If the string contains an '=', make sure it's the first thing we replace - // so as to avoid double-encoding - $eqkey = array_search('=', $matches[0]); - if (false !== $eqkey) { - unset($matches[0][$eqkey]); - array_unshift($matches[0], '='); - } - foreach (array_unique($matches[0]) as $char) { - $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded); - } - } - // Replace spaces with _ (more readable than =20) - // RFC 2047 section 4.2(2) - return str_replace(' ', '_', $encoded); - } - - /** - * Add a string or binary attachment (non-filesystem). - * This method can be used to attach ascii or binary data, - * such as a BLOB record from a database. - * - * @param string $string String attachment data - * @param string $filename Name of the attachment - * @param string $encoding File encoding (see $Encoding) - * @param string $type File extension (MIME) type - * @param string $disposition Disposition to use - */ - public function addStringAttachment( - $string, - $filename, - $encoding = 'base64', - $type = '', - $disposition = 'attachment' - ) { - // If a MIME type is not specified, try to work it out from the file name - if ('' == $type) { - $type = static::filenameToType($filename); - } - // Append to $attachment array - $this->attachment[] = [ - 0 => $string, - 1 => $filename, - 2 => basename($filename), - 3 => $encoding, - 4 => $type, - 5 => true, // isStringAttachment - 6 => $disposition, - 7 => 0, - ]; - } - - /** - * Add an embedded (inline) attachment from a file. - * This can include images, sounds, and just about any other document type. - * These differ from 'regular' attachments in that they are intended to be - * displayed inline with the message, not just attached for download. - * This is used in HTML messages that embed the images - * the HTML refers to using the $cid value. - * Never use a user-supplied path to a file! - * - * @param string $path Path to the attachment - * @param string $cid Content ID of the attachment; Use this to reference - * the content when using an embedded image in HTML - * @param string $name Overrides the attachment name - * @param string $encoding File encoding (see $Encoding) - * @param string $type File MIME type - * @param string $disposition Disposition to use - * - * @return bool True on successfully adding an attachment - */ - public function addEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = '', $disposition = 'inline') - { - if (!@is_file($path)) { - $this->setError($this->lang('file_access') . $path); - - return false; - } - - // If a MIME type is not specified, try to work it out from the file name - if ('' == $type) { - $type = static::filenameToType($path); - } - - $filename = basename($path); - if ('' == $name) { - $name = $filename; - } - - // Append to $attachment array - $this->attachment[] = [ - 0 => $path, - 1 => $filename, - 2 => $name, - 3 => $encoding, - 4 => $type, - 5 => false, // isStringAttachment - 6 => $disposition, - 7 => $cid, - ]; - - return true; - } - - /** - * Add an embedded stringified attachment. - * This can include images, sounds, and just about any other document type. - * If your filename doesn't contain an extension, be sure to set the $type to an appropriate MIME type. - * - * @param string $string The attachment binary data - * @param string $cid Content ID of the attachment; Use this to reference - * the content when using an embedded image in HTML - * @param string $name A filename for the attachment. If this contains an extension, - * PHPMailer will attempt to set a MIME type for the attachment. - * For example 'file.jpg' would get an 'image/jpeg' MIME type. - * @param string $encoding File encoding (see $Encoding), defaults to 'base64' - * @param string $type MIME type - will be used in preference to any automatically derived type - * @param string $disposition Disposition to use - * - * @return bool True on successfully adding an attachment - */ - public function addStringEmbeddedImage( - $string, - $cid, - $name = '', - $encoding = 'base64', - $type = '', - $disposition = 'inline' - ) { - // If a MIME type is not specified, try to work it out from the name - if ('' == $type and !empty($name)) { - $type = static::filenameToType($name); - } - - // Append to $attachment array - $this->attachment[] = [ - 0 => $string, - 1 => $name, - 2 => $name, - 3 => $encoding, - 4 => $type, - 5 => true, // isStringAttachment - 6 => $disposition, - 7 => $cid, - ]; - - return true; - } - - /** - * Check if an embedded attachment is present with this cid. - * - * @param string $cid - * - * @return bool - */ - protected function cidExists($cid) - { - foreach ($this->attachment as $attachment) { - if ('inline' == $attachment[6] and $cid == $attachment[7]) { - return true; - } - } - - return false; - } - - /** - * Check if an inline attachment is present. - * - * @return bool - */ - public function inlineImageExists() - { - foreach ($this->attachment as $attachment) { - if ('inline' == $attachment[6]) { - return true; - } - } - - return false; - } - - /** - * Check if an attachment (non-inline) is present. - * - * @return bool - */ - public function attachmentExists() - { - foreach ($this->attachment as $attachment) { - if ('attachment' == $attachment[6]) { - return true; - } - } - - return false; - } - - /** - * Check if this message has an alternative body set. - * - * @return bool - */ - public function alternativeExists() - { - return !empty($this->AltBody); - } - - /** - * Clear queued addresses of given kind. - * - * @param string $kind 'to', 'cc', or 'bcc' - */ - public function clearQueuedAddresses($kind) - { - $this->RecipientsQueue = array_filter( - $this->RecipientsQueue, - function ($params) use ($kind) { - return $params[0] != $kind; - } - ); - } - - /** - * Clear all To recipients. - */ - public function clearAddresses() - { - foreach ($this->to as $to) { - unset($this->all_recipients[strtolower($to[0])]); - } - $this->to = []; - $this->clearQueuedAddresses('to'); - } - - /** - * Clear all CC recipients. - */ - public function clearCCs() - { - foreach ($this->cc as $cc) { - unset($this->all_recipients[strtolower($cc[0])]); - } - $this->cc = []; - $this->clearQueuedAddresses('cc'); - } - - /** - * Clear all BCC recipients. - */ - public function clearBCCs() - { - foreach ($this->bcc as $bcc) { - unset($this->all_recipients[strtolower($bcc[0])]); - } - $this->bcc = []; - $this->clearQueuedAddresses('bcc'); - } - - /** - * Clear all ReplyTo recipients. - */ - public function clearReplyTos() - { - $this->ReplyTo = []; - $this->ReplyToQueue = []; - } - - /** - * Clear all recipient types. - */ - public function clearAllRecipients() - { - $this->to = []; - $this->cc = []; - $this->bcc = []; - $this->all_recipients = []; - $this->RecipientsQueue = []; - } - - /** - * Clear all filesystem, string, and binary attachments. - */ - public function clearAttachments() - { - $this->attachment = []; - } - - /** - * Clear all custom headers. - */ - public function clearCustomHeaders() - { - $this->CustomHeader = []; - } - - /** - * Add an error message to the error container. - * - * @param string $msg - */ - protected function setError($msg) - { - ++$this->error_count; - if ('smtp' == $this->Mailer and null !== $this->smtp) { - $lasterror = $this->smtp->getError(); - if (!empty($lasterror['error'])) { - $msg .= $this->lang('smtp_error') . $lasterror['error']; - if (!empty($lasterror['detail'])) { - $msg .= ' Detail: ' . $lasterror['detail']; - } - if (!empty($lasterror['smtp_code'])) { - $msg .= ' SMTP code: ' . $lasterror['smtp_code']; - } - if (!empty($lasterror['smtp_code_ex'])) { - $msg .= ' Additional SMTP info: ' . $lasterror['smtp_code_ex']; - } - } - } - $this->ErrorInfo = $msg; - } - - /** - * Return an RFC 822 formatted date. - * - * @return string - */ - public static function rfcDate() - { - // Set the time zone to whatever the default is to avoid 500 errors - // Will default to UTC if it's not set properly in php.ini - date_default_timezone_set(@date_default_timezone_get()); - - return date('D, j M Y H:i:s O'); - } - - /** - * Get the server hostname. - * Returns 'localhost.localdomain' if unknown. - * - * @return string - */ - protected function serverHostname() - { - $result = ''; - if (!empty($this->Hostname)) { - $result = $this->Hostname; - } elseif (isset($_SERVER) and array_key_exists('SERVER_NAME', $_SERVER)) { - $result = $_SERVER['SERVER_NAME']; - } elseif (function_exists('gethostname') and gethostname() !== false) { - $result = gethostname(); - } elseif (php_uname('n') !== false) { - $result = php_uname('n'); - } - if (!static::isValidHost($result)) { - return 'localhost.localdomain'; - } - - return $result; - } - - /** - * Validate whether a string contains a valid value to use as a hostname or IP address. - * IPv6 addresses must include [], e.g. `[::1]`, not just `::1`. - * - * @param string $host The host name or IP address to check - * - * @return bool - */ - public static function isValidHost($host) - { - //Simple syntax limits - if (empty($host) - or !is_string($host) - or strlen($host) > 256 - ) { - return false; - } - //Looks like a bracketed IPv6 address - if (trim($host, '[]') != $host) { - return (bool) filter_var(trim($host, '[]'), FILTER_VALIDATE_IP, FILTER_FLAG_IPV6); - } - //If removing all the dots results in a numeric string, it must be an IPv4 address. - //Need to check this first because otherwise things like `999.0.0.0` are considered valid host names - if (is_numeric(str_replace('.', '', $host))) { - //Is it a valid IPv4 address? - return (bool) filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4); - } - if (filter_var('http://' . $host, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)) { - //Is it a syntactically valid hostname? - return true; - } - - return false; - } - - /** - * Get an error message in the current language. - * - * @param string $key - * - * @return string - */ - protected function lang($key) - { - if (count($this->language) < 1) { - $this->setLanguage('en'); // set the default language - } - - if (array_key_exists($key, $this->language)) { - if ('smtp_connect_failed' == $key) { - //Include a link to troubleshooting docs on SMTP connection failure - //this is by far the biggest cause of support questions - //but it's usually not PHPMailer's fault. - return $this->language[$key] . ' https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting'; - } - - return $this->language[$key]; - } - - //Return the key as a fallback - return $key; - } - - /** - * Check if an error occurred. - * - * @return bool True if an error did occur - */ - public function isError() - { - return $this->error_count > 0; - } - - /** - * Add a custom header. - * $name value can be overloaded to contain - * both header name and value (name:value). - * - * @param string $name Custom header name - * @param string|null $value Header value - */ - public function addCustomHeader($name, $value = null) - { - if (null === $value) { - // Value passed in as name:value - $this->CustomHeader[] = explode(':', $name, 2); - } else { - $this->CustomHeader[] = [$name, $value]; - } - } - - /** - * Returns all custom headers. - * - * @return array - */ - public function getCustomHeaders() - { - return $this->CustomHeader; - } - - /** - * Create a message body from an HTML string. - * Automatically inlines images and creates a plain-text version by converting the HTML, - * overwriting any existing values in Body and AltBody. - * Do not source $message content from user input! - * $basedir is prepended when handling relative URLs, e.g. and must not be empty - * will look for an image file in $basedir/images/a.png and convert it to inline. - * If you don't provide a $basedir, relative paths will be left untouched (and thus probably break in email) - * Converts data-uri images into embedded attachments. - * If you don't want to apply these transformations to your HTML, just set Body and AltBody directly. - * - * @param string $message HTML message string - * @param string $basedir Absolute path to a base directory to prepend to relative paths to images - * @param bool|callable $advanced Whether to use the internal HTML to text converter - * or your own custom converter @see PHPMailer::html2text() - * - * @return string $message The transformed message Body - */ - public function msgHTML($message, $basedir = '', $advanced = false) - { - preg_match_all('/(src|background)=["\'](.*)["\']/Ui', $message, $images); - if (array_key_exists(2, $images)) { - if (strlen($basedir) > 1 && '/' != substr($basedir, -1)) { - // Ensure $basedir has a trailing / - $basedir .= '/'; - } - foreach ($images[2] as $imgindex => $url) { - // Convert data URIs into embedded images - //e.g. "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" - if (preg_match('#^data:(image/(?:jpe?g|gif|png));?(base64)?,(.+)#', $url, $match)) { - if (count($match) == 4 and 'base64' == $match[2]) { - $data = base64_decode($match[3]); - } elseif ('' == $match[2]) { - $data = rawurldecode($match[3]); - } else { - //Not recognised so leave it alone - continue; - } - //Hash the decoded data, not the URL so that the same data-URI image used in multiple places - //will only be embedded once, even if it used a different encoding - $cid = hash('sha256', $data) . '@phpmailer.0'; // RFC2392 S 2 - - if (!$this->cidExists($cid)) { - $this->addStringEmbeddedImage($data, $cid, 'embed' . $imgindex, 'base64', $match[1]); - } - $message = str_replace( - $images[0][$imgindex], - $images[1][$imgindex] . '="cid:' . $cid . '"', - $message - ); - continue; - } - if (// Only process relative URLs if a basedir is provided (i.e. no absolute local paths) - !empty($basedir) - // Ignore URLs containing parent dir traversal (..) - and (strpos($url, '..') === false) - // Do not change urls that are already inline images - and 0 !== strpos($url, 'cid:') - // Do not change absolute URLs, including anonymous protocol - and !preg_match('#^[a-z][a-z0-9+.-]*:?//#i', $url) - ) { - $filename = basename($url); - $directory = dirname($url); - if ('.' == $directory) { - $directory = ''; - } - $cid = hash('sha256', $url) . '@phpmailer.0'; // RFC2392 S 2 - if (strlen($basedir) > 1 and '/' != substr($basedir, -1)) { - $basedir .= '/'; - } - if (strlen($directory) > 1 and '/' != substr($directory, -1)) { - $directory .= '/'; - } - if ($this->addEmbeddedImage( - $basedir . $directory . $filename, - $cid, - $filename, - 'base64', - static::_mime_types((string) static::mb_pathinfo($filename, PATHINFO_EXTENSION)) - ) - ) { - $message = preg_replace( - '/' . $images[1][$imgindex] . '=["\']' . preg_quote($url, '/') . '["\']/Ui', - $images[1][$imgindex] . '="cid:' . $cid . '"', - $message - ); - } - } - } - } - $this->isHTML(true); - // Convert all message body line breaks to LE, makes quoted-printable encoding work much better - $this->Body = static::normalizeBreaks($message); - $this->AltBody = static::normalizeBreaks($this->html2text($message, $advanced)); - if (!$this->alternativeExists()) { - $this->AltBody = 'This is an HTML-only message. To view it, activate HTML in your email application.' - . static::$LE; - } - - return $this->Body; - } - - /** - * Convert an HTML string into plain text. - * This is used by msgHTML(). - * Note - older versions of this function used a bundled advanced converter - * which was removed for license reasons in #232. - * Example usage: - * - * ```php - * // Use default conversion - * $plain = $mail->html2text($html); - * // Use your own custom converter - * $plain = $mail->html2text($html, function($html) { - * $converter = new MyHtml2text($html); - * return $converter->get_text(); - * }); - * ``` - * - * @param string $html The HTML text to convert - * @param bool|callable $advanced Any boolean value to use the internal converter, - * or provide your own callable for custom conversion - * - * @return string - */ - public function html2text($html, $advanced = false) - { - if (is_callable($advanced)) { - return call_user_func($advanced, $html); - } - - return html_entity_decode( - trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/si', '', $html))), - ENT_QUOTES, - $this->CharSet - ); - } - - /** - * Get the MIME type for a file extension. - * - * @param string $ext File extension - * - * @return string MIME type of file - */ - public static function _mime_types($ext = '') - { - $mimes = [ - 'xl' => 'application/excel', - 'js' => 'application/javascript', - 'hqx' => 'application/mac-binhex40', - 'cpt' => 'application/mac-compactpro', - 'bin' => 'application/macbinary', - 'doc' => 'application/msword', - 'word' => 'application/msword', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', - 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', - 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', - 'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12', - 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', - 'class' => 'application/octet-stream', - 'dll' => 'application/octet-stream', - 'dms' => 'application/octet-stream', - 'exe' => 'application/octet-stream', - 'lha' => 'application/octet-stream', - 'lzh' => 'application/octet-stream', - 'psd' => 'application/octet-stream', - 'sea' => 'application/octet-stream', - 'so' => 'application/octet-stream', - 'oda' => 'application/oda', - 'pdf' => 'application/pdf', - 'ai' => 'application/postscript', - 'eps' => 'application/postscript', - 'ps' => 'application/postscript', - 'smi' => 'application/smil', - 'smil' => 'application/smil', - 'mif' => 'application/vnd.mif', - 'xls' => 'application/vnd.ms-excel', - 'ppt' => 'application/vnd.ms-powerpoint', - 'wbxml' => 'application/vnd.wap.wbxml', - 'wmlc' => 'application/vnd.wap.wmlc', - 'dcr' => 'application/x-director', - 'dir' => 'application/x-director', - 'dxr' => 'application/x-director', - 'dvi' => 'application/x-dvi', - 'gtar' => 'application/x-gtar', - 'php3' => 'application/x-httpd-php', - 'php4' => 'application/x-httpd-php', - 'php' => 'application/x-httpd-php', - 'phtml' => 'application/x-httpd-php', - 'phps' => 'application/x-httpd-php-source', - 'swf' => 'application/x-shockwave-flash', - 'sit' => 'application/x-stuffit', - 'tar' => 'application/x-tar', - 'tgz' => 'application/x-tar', - 'xht' => 'application/xhtml+xml', - 'xhtml' => 'application/xhtml+xml', - 'zip' => 'application/zip', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'mp2' => 'audio/mpeg', - 'mp3' => 'audio/mpeg', - 'm4a' => 'audio/mp4', - 'mpga' => 'audio/mpeg', - 'aif' => 'audio/x-aiff', - 'aifc' => 'audio/x-aiff', - 'aiff' => 'audio/x-aiff', - 'ram' => 'audio/x-pn-realaudio', - 'rm' => 'audio/x-pn-realaudio', - 'rpm' => 'audio/x-pn-realaudio-plugin', - 'ra' => 'audio/x-realaudio', - 'wav' => 'audio/x-wav', - 'mka' => 'audio/x-matroska', - 'bmp' => 'image/bmp', - 'gif' => 'image/gif', - 'jpeg' => 'image/jpeg', - 'jpe' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'png' => 'image/png', - 'tiff' => 'image/tiff', - 'tif' => 'image/tiff', - 'webp' => 'image/webp', - 'heif' => 'image/heif', - 'heifs' => 'image/heif-sequence', - 'heic' => 'image/heic', - 'heics' => 'image/heic-sequence', - 'eml' => 'message/rfc822', - 'css' => 'text/css', - 'html' => 'text/html', - 'htm' => 'text/html', - 'shtml' => 'text/html', - 'log' => 'text/plain', - 'text' => 'text/plain', - 'txt' => 'text/plain', - 'rtx' => 'text/richtext', - 'rtf' => 'text/rtf', - 'vcf' => 'text/vcard', - 'vcard' => 'text/vcard', - 'ics' => 'text/calendar', - 'xml' => 'text/xml', - 'xsl' => 'text/xml', - 'wmv' => 'video/x-ms-wmv', - 'mpeg' => 'video/mpeg', - 'mpe' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'mp4' => 'video/mp4', - 'm4v' => 'video/mp4', - 'mov' => 'video/quicktime', - 'qt' => 'video/quicktime', - 'rv' => 'video/vnd.rn-realvideo', - 'avi' => 'video/x-msvideo', - 'movie' => 'video/x-sgi-movie', - 'webm' => 'video/webm', - 'mkv' => 'video/x-matroska', - ]; - $ext = strtolower($ext); - if (array_key_exists($ext, $mimes)) { - return $mimes[$ext]; - } - - return 'application/octet-stream'; - } - - /** - * Map a file name to a MIME type. - * Defaults to 'application/octet-stream', i.e.. arbitrary binary data. - * - * @param string $filename A file name or full path, does not need to exist as a file - * - * @return string - */ - public static function filenameToType($filename) - { - // In case the path is a URL, strip any query string before getting extension - $qpos = strpos($filename, '?'); - if (false !== $qpos) { - $filename = substr($filename, 0, $qpos); - } - $ext = static::mb_pathinfo($filename, PATHINFO_EXTENSION); - - return static::_mime_types($ext); - } - - /** - * Multi-byte-safe pathinfo replacement. - * Drop-in replacement for pathinfo(), but multibyte- and cross-platform-safe. - * - * @see http://www.php.net/manual/en/function.pathinfo.php#107461 - * - * @param string $path A filename or path, does not need to exist as a file - * @param int|string $options Either a PATHINFO_* constant, - * or a string name to return only the specified piece - * - * @return string|array - */ - public static function mb_pathinfo($path, $options = null) - { - $ret = ['dirname' => '', 'basename' => '', 'extension' => '', 'filename' => '']; - $pathinfo = []; - if (preg_match('#^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$#im', $path, $pathinfo)) { - if (array_key_exists(1, $pathinfo)) { - $ret['dirname'] = $pathinfo[1]; - } - if (array_key_exists(2, $pathinfo)) { - $ret['basename'] = $pathinfo[2]; - } - if (array_key_exists(5, $pathinfo)) { - $ret['extension'] = $pathinfo[5]; - } - if (array_key_exists(3, $pathinfo)) { - $ret['filename'] = $pathinfo[3]; - } - } - switch ($options) { - case PATHINFO_DIRNAME: - case 'dirname': - return $ret['dirname']; - case PATHINFO_BASENAME: - case 'basename': - return $ret['basename']; - case PATHINFO_EXTENSION: - case 'extension': - return $ret['extension']; - case PATHINFO_FILENAME: - case 'filename': - return $ret['filename']; - default: - return $ret; - } - } - - /** - * Set or reset instance properties. - * You should avoid this function - it's more verbose, less efficient, more error-prone and - * harder to debug than setting properties directly. - * Usage Example: - * `$mail->set('SMTPSecure', 'tls');` - * is the same as: - * `$mail->SMTPSecure = 'tls';`. - * - * @param string $name The property name to set - * @param mixed $value The value to set the property to - * - * @return bool - */ - public function set($name, $value = '') - { - if (property_exists($this, $name)) { - $this->$name = $value; - - return true; - } - $this->setError($this->lang('variable_set') . $name); - - return false; - } - - /** - * Strip newlines to prevent header injection. - * - * @param string $str - * - * @return string - */ - public function secureHeader($str) - { - return trim(str_replace(["\r", "\n"], '', $str)); - } - - /** - * Normalize line breaks in a string. - * Converts UNIX LF, Mac CR and Windows CRLF line breaks into a single line break format. - * Defaults to CRLF (for message bodies) and preserves consecutive breaks. - * - * @param string $text - * @param string $breaktype What kind of line break to use; defaults to static::$LE - * - * @return string - */ - public static function normalizeBreaks($text, $breaktype = null) - { - if (null === $breaktype) { - $breaktype = static::$LE; - } - // Normalise to \n - $text = str_replace(["\r\n", "\r"], "\n", $text); - // Now convert LE as needed - if ("\n" !== $breaktype) { - $text = str_replace("\n", $breaktype, $text); - } - - return $text; - } - - /** - * Return the current line break format string. - * - * @return string - */ - public static function getLE() - { - return static::$LE; - } - - /** - * Set the line break format string, e.g. "\r\n". - * - * @param string $le - */ - protected static function setLE($le) - { - static::$LE = $le; - } - - /** - * Set the public and private key files and password for S/MIME signing. - * - * @param string $cert_filename - * @param string $key_filename - * @param string $key_pass Password for private key - * @param string $extracerts_filename Optional path to chain certificate - */ - public function sign($cert_filename, $key_filename, $key_pass, $extracerts_filename = '') - { - $this->sign_cert_file = $cert_filename; - $this->sign_key_file = $key_filename; - $this->sign_key_pass = $key_pass; - $this->sign_extracerts_file = $extracerts_filename; - } - - /** - * Quoted-Printable-encode a DKIM header. - * - * @param string $txt - * - * @return string - */ - public function DKIM_QP($txt) - { - $line = ''; - $len = strlen($txt); - for ($i = 0; $i < $len; ++$i) { - $ord = ord($txt[$i]); - if (((0x21 <= $ord) and ($ord <= 0x3A)) or $ord == 0x3C or ((0x3E <= $ord) and ($ord <= 0x7E))) { - $line .= $txt[$i]; - } else { - $line .= '=' . sprintf('%02X', $ord); - } - } - - return $line; - } - - /** - * Generate a DKIM signature. - * - * @param string $signHeader - * - * @throws Exception - * - * @return string The DKIM signature value - */ - public function DKIM_Sign($signHeader) - { - if (!defined('PKCS7_TEXT')) { - if ($this->exceptions) { - throw new Exception($this->lang('extension_missing') . 'openssl'); - } - - return ''; - } - $privKeyStr = !empty($this->DKIM_private_string) ? - $this->DKIM_private_string : - file_get_contents($this->DKIM_private); - if ('' != $this->DKIM_passphrase) { - $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase); - } else { - $privKey = openssl_pkey_get_private($privKeyStr); - } - if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) { - openssl_pkey_free($privKey); - - return base64_encode($signature); - } - openssl_pkey_free($privKey); - - return ''; - } - - /** - * Generate a DKIM canonicalization header. - * Uses the 'relaxed' algorithm from RFC6376 section 3.4.2. - * Canonicalized headers should *always* use CRLF, regardless of mailer setting. - * - * @see https://tools.ietf.org/html/rfc6376#section-3.4.2 - * - * @param string $signHeader Header - * - * @return string - */ - public function DKIM_HeaderC($signHeader) - { - //Unfold all header continuation lines - //Also collapses folded whitespace. - //Note PCRE \s is too broad a definition of whitespace; RFC5322 defines it as `[ \t]` - //@see https://tools.ietf.org/html/rfc5322#section-2.2 - //That means this may break if you do something daft like put vertical tabs in your headers. - $signHeader = preg_replace('/\r\n[ \t]+/', ' ', $signHeader); - $lines = explode("\r\n", $signHeader); - foreach ($lines as $key => $line) { - //If the header is missing a :, skip it as it's invalid - //This is likely to happen because the explode() above will also split - //on the trailing LE, leaving an empty line - if (strpos($line, ':') === false) { - continue; - } - list($heading, $value) = explode(':', $line, 2); - //Lower-case header name - $heading = strtolower($heading); - //Collapse white space within the value - $value = preg_replace('/[ \t]{2,}/', ' ', $value); - //RFC6376 is slightly unclear here - it says to delete space at the *end* of each value - //But then says to delete space before and after the colon. - //Net result is the same as trimming both ends of the value. - //by elimination, the same applies to the field name - $lines[$key] = trim($heading, " \t") . ':' . trim($value, " \t"); - } - - return implode("\r\n", $lines); - } - - /** - * Generate a DKIM canonicalization body. - * Uses the 'simple' algorithm from RFC6376 section 3.4.3. - * Canonicalized bodies should *always* use CRLF, regardless of mailer setting. - * - * @see https://tools.ietf.org/html/rfc6376#section-3.4.3 - * - * @param string $body Message Body - * - * @return string - */ - public function DKIM_BodyC($body) - { - if (empty($body)) { - return "\r\n"; - } - // Normalize line endings to CRLF - $body = static::normalizeBreaks($body, "\r\n"); - - //Reduce multiple trailing line breaks to a single one - return rtrim($body, "\r\n") . "\r\n"; - } - - /** - * Create the DKIM header and body in a new message header. - * - * @param string $headers_line Header lines - * @param string $subject Subject - * @param string $body Body - * - * @return string - */ - public function DKIM_Add($headers_line, $subject, $body) - { - $DKIMsignatureType = 'rsa-sha256'; // Signature & hash algorithms - $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization of header/body - $DKIMquery = 'dns/txt'; // Query method - $DKIMtime = time(); // Signature Timestamp = seconds since 00:00:00 - Jan 1, 1970 (UTC time zone) - $subject_header = "Subject: $subject"; - $headers = explode(static::$LE, $headers_line); - $from_header = ''; - $to_header = ''; - $date_header = ''; - $current = ''; - foreach ($headers as $header) { - if (strpos($header, 'From:') === 0) { - $from_header = $header; - $current = 'from_header'; - } elseif (strpos($header, 'To:') === 0) { - $to_header = $header; - $current = 'to_header'; - } elseif (strpos($header, 'Date:') === 0) { - $date_header = $header; - $current = 'date_header'; - } else { - if (!empty($$current) and strpos($header, ' =?') === 0) { - $$current .= $header; - } else { - $current = ''; - } - } - } - $from = str_replace('|', '=7C', $this->DKIM_QP($from_header)); - $to = str_replace('|', '=7C', $this->DKIM_QP($to_header)); - $date = str_replace('|', '=7C', $this->DKIM_QP($date_header)); - $subject = str_replace( - '|', - '=7C', - $this->DKIM_QP($subject_header) - ); // Copied header fields (dkim-quoted-printable) - $body = $this->DKIM_BodyC($body); - $DKIMlen = strlen($body); // Length of body - $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body))); // Base64 of packed binary SHA-256 hash of body - if ('' == $this->DKIM_identity) { - $ident = ''; - } else { - $ident = ' i=' . $this->DKIM_identity . ';'; - } - $dkimhdrs = 'DKIM-Signature: v=1; a=' . - $DKIMsignatureType . '; q=' . - $DKIMquery . '; l=' . - $DKIMlen . '; s=' . - $this->DKIM_selector . - ";\r\n" . - "\tt=" . $DKIMtime . '; c=' . $DKIMcanonicalization . ";\r\n" . - "\th=From:To:Date:Subject;\r\n" . - "\td=" . $this->DKIM_domain . ';' . $ident . "\r\n" . - "\tz=$from\r\n" . - "\t|$to\r\n" . - "\t|$date\r\n" . - "\t|$subject;\r\n" . - "\tbh=" . $DKIMb64 . ";\r\n" . - "\tb="; - $toSign = $this->DKIM_HeaderC( - $from_header . "\r\n" . - $to_header . "\r\n" . - $date_header . "\r\n" . - $subject_header . "\r\n" . - $dkimhdrs - ); - $signed = $this->DKIM_Sign($toSign); - - return static::normalizeBreaks($dkimhdrs . $signed) . static::$LE; - } - - /** - * Detect if a string contains a line longer than the maximum line length - * allowed by RFC 2822 section 2.1.1. - * - * @param string $str - * - * @return bool - */ - public static function hasLineLongerThanMax($str) - { - return (bool) preg_match('/^(.{' . (self::MAX_LINE_LENGTH + strlen(static::$LE)) . ',})/m', $str); - } - - /** - * Allows for public read access to 'to' property. - * Before the send() call, queued addresses (i.e. with IDN) are not yet included. - * - * @return array - */ - public function getToAddresses() - { - return $this->to; - } - - /** - * Allows for public read access to 'cc' property. - * Before the send() call, queued addresses (i.e. with IDN) are not yet included. - * - * @return array - */ - public function getCcAddresses() - { - return $this->cc; - } - - /** - * Allows for public read access to 'bcc' property. - * Before the send() call, queued addresses (i.e. with IDN) are not yet included. - * - * @return array - */ - public function getBccAddresses() - { - return $this->bcc; - } - - /** - * Allows for public read access to 'ReplyTo' property. - * Before the send() call, queued addresses (i.e. with IDN) are not yet included. - * - * @return array - */ - public function getReplyToAddresses() - { - return $this->ReplyTo; - } - - /** - * Allows for public read access to 'all_recipients' property. - * Before the send() call, queued addresses (i.e. with IDN) are not yet included. - * - * @return array - */ - public function getAllRecipientAddresses() - { - return $this->all_recipients; - } - - /** - * Perform a callback. - * - * @param bool $isSent - * @param array $to - * @param array $cc - * @param array $bcc - * @param string $subject - * @param string $body - * @param string $from - * @param array $extra - */ - protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from, $extra) - { - if (!empty($this->action_function) and is_callable($this->action_function)) { - call_user_func($this->action_function, $isSent, $to, $cc, $bcc, $subject, $body, $from, $extra); - } - } - - /** - * Get the OAuth instance. - * - * @return OAuth - */ - public function getOAuth() - { - return $this->oauth; - } - - /** - * Set an OAuth instance. - * - * @param OAuth $oauth - */ - public function setOAuth(OAuth $oauth) - { - $this->oauth = $oauth; - } -} diff --git a/libraries/vendor/phpmailer/phpmailer/src/POP3.php b/libraries/vendor/phpmailer/phpmailer/src/POP3.php deleted file mode 100644 index 9b51c8ac52a6d..0000000000000 --- a/libraries/vendor/phpmailer/phpmailer/src/POP3.php +++ /dev/null @@ -1,419 +0,0 @@ - - * @author Jim Jagielski (jimjag) - * @author Andy Prevost (codeworxtech) - * @author Brent R. Matzelle (original founder) - * @copyright 2012 - 2017 Marcus Bointon - * @copyright 2010 - 2012 Jim Jagielski - * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - * @note This program is distributed in the hope that it will be useful - WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - */ - -namespace PHPMailer\PHPMailer; - -/** - * PHPMailer POP-Before-SMTP Authentication Class. - * Specifically for PHPMailer to use for RFC1939 POP-before-SMTP authentication. - * 1) This class does not support APOP authentication. - * 2) Opening and closing lots of POP3 connections can be quite slow. If you need - * to send a batch of emails then just perform the authentication once at the start, - * and then loop through your mail sending script. Providing this process doesn't - * take longer than the verification period lasts on your POP3 server, you should be fine. - * 3) This is really ancient technology; you should only need to use it to talk to very old systems. - * 4) This POP3 class is deliberately lightweight and incomplete, and implements just - * enough to do authentication. - * If you want a more complete class there are other POP3 classes for PHP available. - * - * @author Richard Davey (original author) - * @author Marcus Bointon (Synchro/coolbru) - * @author Jim Jagielski (jimjag) - * @author Andy Prevost (codeworxtech) - */ -class POP3 -{ - /** - * The POP3 PHPMailer Version number. - * - * @var string - */ - const VERSION = '6.0.5'; - - /** - * Default POP3 port number. - * - * @var int - */ - const DEFAULT_PORT = 110; - - /** - * Default timeout in seconds. - * - * @var int - */ - const DEFAULT_TIMEOUT = 30; - - /** - * Debug display level. - * Options: 0 = no, 1+ = yes. - * - * @var int - */ - public $do_debug = 0; - - /** - * POP3 mail server hostname. - * - * @var string - */ - public $host; - - /** - * POP3 port number. - * - * @var int - */ - public $port; - - /** - * POP3 Timeout Value in seconds. - * - * @var int - */ - public $tval; - - /** - * POP3 username. - * - * @var string - */ - public $username; - - /** - * POP3 password. - * - * @var string - */ - public $password; - - /** - * Resource handle for the POP3 connection socket. - * - * @var resource - */ - protected $pop_conn; - - /** - * Are we connected? - * - * @var bool - */ - protected $connected = false; - - /** - * Error container. - * - * @var array - */ - protected $errors = []; - - /** - * Line break constant. - */ - const LE = "\r\n"; - - /** - * Simple static wrapper for all-in-one POP before SMTP. - * - * @param string $host The hostname to connect to - * @param int|bool $port The port number to connect to - * @param int|bool $timeout The timeout value - * @param string $username - * @param string $password - * @param int $debug_level - * - * @return bool - */ - public static function popBeforeSmtp( - $host, - $port = false, - $timeout = false, - $username = '', - $password = '', - $debug_level = 0 - ) { - $pop = new self(); - - return $pop->authorise($host, $port, $timeout, $username, $password, $debug_level); - } - - /** - * Authenticate with a POP3 server. - * A connect, login, disconnect sequence - * appropriate for POP-before SMTP authorisation. - * - * @param string $host The hostname to connect to - * @param int|bool $port The port number to connect to - * @param int|bool $timeout The timeout value - * @param string $username - * @param string $password - * @param int $debug_level - * - * @return bool - */ - public function authorise($host, $port = false, $timeout = false, $username = '', $password = '', $debug_level = 0) - { - $this->host = $host; - // If no port value provided, use default - if (false === $port) { - $this->port = static::DEFAULT_PORT; - } else { - $this->port = (int) $port; - } - // If no timeout value provided, use default - if (false === $timeout) { - $this->tval = static::DEFAULT_TIMEOUT; - } else { - $this->tval = (int) $timeout; - } - $this->do_debug = $debug_level; - $this->username = $username; - $this->password = $password; - // Reset the error log - $this->errors = []; - // connect - $result = $this->connect($this->host, $this->port, $this->tval); - if ($result) { - $login_result = $this->login($this->username, $this->password); - if ($login_result) { - $this->disconnect(); - - return true; - } - } - // We need to disconnect regardless of whether the login succeeded - $this->disconnect(); - - return false; - } - - /** - * Connect to a POP3 server. - * - * @param string $host - * @param int|bool $port - * @param int $tval - * - * @return bool - */ - public function connect($host, $port = false, $tval = 30) - { - // Are we already connected? - if ($this->connected) { - return true; - } - - //On Windows this will raise a PHP Warning error if the hostname doesn't exist. - //Rather than suppress it with @fsockopen, capture it cleanly instead - set_error_handler([$this, 'catchWarning']); - - if (false === $port) { - $port = static::DEFAULT_PORT; - } - - // connect to the POP3 server - $this->pop_conn = fsockopen( - $host, // POP3 Host - $port, // Port # - $errno, // Error Number - $errstr, // Error Message - $tval - ); // Timeout (seconds) - // Restore the error handler - restore_error_handler(); - - // Did we connect? - if (false === $this->pop_conn) { - // It would appear not... - $this->setError( - "Failed to connect to server $host on port $port. errno: $errno; errstr: $errstr" - ); - - return false; - } - - // Increase the stream time-out - stream_set_timeout($this->pop_conn, $tval, 0); - - // Get the POP3 server response - $pop3_response = $this->getResponse(); - // Check for the +OK - if ($this->checkResponse($pop3_response)) { - // The connection is established and the POP3 server is talking - $this->connected = true; - - return true; - } - - return false; - } - - /** - * Log in to the POP3 server. - * Does not support APOP (RFC 2828, 4949). - * - * @param string $username - * @param string $password - * - * @return bool - */ - public function login($username = '', $password = '') - { - if (!$this->connected) { - $this->setError('Not connected to POP3 server'); - } - if (empty($username)) { - $username = $this->username; - } - if (empty($password)) { - $password = $this->password; - } - - // Send the Username - $this->sendString("USER $username" . static::LE); - $pop3_response = $this->getResponse(); - if ($this->checkResponse($pop3_response)) { - // Send the Password - $this->sendString("PASS $password" . static::LE); - $pop3_response = $this->getResponse(); - if ($this->checkResponse($pop3_response)) { - return true; - } - } - - return false; - } - - /** - * Disconnect from the POP3 server. - */ - public function disconnect() - { - $this->sendString('QUIT'); - //The QUIT command may cause the daemon to exit, which will kill our connection - //So ignore errors here - try { - @fclose($this->pop_conn); - } catch (Exception $e) { - //Do nothing - } - } - - /** - * Get a response from the POP3 server. - * - * @param int $size The maximum number of bytes to retrieve - * - * @return string - */ - protected function getResponse($size = 128) - { - $response = fgets($this->pop_conn, $size); - if ($this->do_debug >= 1) { - echo 'Server -> Client: ', $response; - } - - return $response; - } - - /** - * Send raw data to the POP3 server. - * - * @param string $string - * - * @return int - */ - protected function sendString($string) - { - if ($this->pop_conn) { - if ($this->do_debug >= 2) { //Show client messages when debug >= 2 - echo 'Client -> Server: ', $string; - } - - return fwrite($this->pop_conn, $string, strlen($string)); - } - - return 0; - } - - /** - * Checks the POP3 server response. - * Looks for for +OK or -ERR. - * - * @param string $string - * - * @return bool - */ - protected function checkResponse($string) - { - if (substr($string, 0, 3) !== '+OK') { - $this->setError("Server reported an error: $string"); - - return false; - } - - return true; - } - - /** - * Add an error to the internal error store. - * Also display debug output if it's enabled. - * - * @param string $error - */ - protected function setError($error) - { - $this->errors[] = $error; - if ($this->do_debug >= 1) { - echo '
';
-            foreach ($this->errors as $e) {
-                print_r($e);
-            }
-            echo '
'; - } - } - - /** - * Get an array of error messages, if any. - * - * @return array - */ - public function getErrors() - { - return $this->errors; - } - - /** - * POP3 connection error handler. - * - * @param int $errno - * @param string $errstr - * @param string $errfile - * @param int $errline - */ - protected function catchWarning($errno, $errstr, $errfile, $errline) - { - $this->setError( - 'Connecting to the POP3 server raised a PHP warning:' . - "errno: $errno errstr: $errstr; errfile: $errfile; errline: $errline" - ); - } -} diff --git a/libraries/vendor/phpmailer/phpmailer/src/SMTP.php b/libraries/vendor/phpmailer/phpmailer/src/SMTP.php deleted file mode 100644 index f04afea1bc73c..0000000000000 --- a/libraries/vendor/phpmailer/phpmailer/src/SMTP.php +++ /dev/null @@ -1,1325 +0,0 @@ - - * @author Jim Jagielski (jimjag) - * @author Andy Prevost (codeworxtech) - * @author Brent R. Matzelle (original founder) - * @copyright 2012 - 2017 Marcus Bointon - * @copyright 2010 - 2012 Jim Jagielski - * @copyright 2004 - 2009 Andy Prevost - * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License - * @note This program is distributed in the hope that it will be useful - WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - */ - -namespace PHPMailer\PHPMailer; - -/** - * PHPMailer RFC821 SMTP email transport class. - * Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server. - * - * @author Chris Ryan - * @author Marcus Bointon - */ -class SMTP -{ - /** - * The PHPMailer SMTP version number. - * - * @var string - */ - const VERSION = '6.0.5'; - - /** - * SMTP line break constant. - * - * @var string - */ - const LE = "\r\n"; - - /** - * The SMTP port to use if one is not specified. - * - * @var int - */ - const DEFAULT_PORT = 25; - - /** - * The maximum line length allowed by RFC 2822 section 2.1.1. - * - * @var int - */ - const MAX_LINE_LENGTH = 998; - - /** - * Debug level for no output. - */ - const DEBUG_OFF = 0; - - /** - * Debug level to show client -> server messages. - */ - const DEBUG_CLIENT = 1; - - /** - * Debug level to show client -> server and server -> client messages. - */ - const DEBUG_SERVER = 2; - - /** - * Debug level to show connection status, client -> server and server -> client messages. - */ - const DEBUG_CONNECTION = 3; - - /** - * Debug level to show all messages. - */ - const DEBUG_LOWLEVEL = 4; - - /** - * Debug output level. - * Options: - * * self::DEBUG_OFF (`0`) No debug output, default - * * self::DEBUG_CLIENT (`1`) Client commands - * * self::DEBUG_SERVER (`2`) Client commands and server responses - * * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status - * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages. - * - * @var int - */ - public $do_debug = self::DEBUG_OFF; - - /** - * How to handle debug output. - * Options: - * * `echo` Output plain-text as-is, appropriate for CLI - * * `html` Output escaped, line breaks converted to `
`, appropriate for browser output - * * `error_log` Output to error log as configured in php.ini - * Alternatively, you can provide a callable expecting two params: a message string and the debug level: - * - * ```php - * $smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";}; - * ``` - * - * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug` - * level output is used: - * - * ```php - * $mail->Debugoutput = new myPsr3Logger; - * ``` - * - * @var string|callable|\Psr\Log\LoggerInterface - */ - public $Debugoutput = 'echo'; - - /** - * Whether to use VERP. - * - * @see http://en.wikipedia.org/wiki/Variable_envelope_return_path - * @see http://www.postfix.org/VERP_README.html Info on VERP - * - * @var bool - */ - public $do_verp = false; - - /** - * The timeout value for connection, in seconds. - * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2. - * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure. - * - * @see http://tools.ietf.org/html/rfc2821#section-4.5.3.2 - * - * @var int - */ - public $Timeout = 300; - - /** - * How long to wait for commands to complete, in seconds. - * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2. - * - * @var int - */ - public $Timelimit = 300; - - /** - * Patterns to extract an SMTP transaction id from reply to a DATA command. - * The first capture group in each regex will be used as the ID. - * MS ESMTP returns the message ID, which may not be correct for internal tracking. - * - * @var string[] - */ - protected $smtp_transaction_id_patterns = [ - 'exim' => '/[0-9]{3} OK id=(.*)/', - 'sendmail' => '/[0-9]{3} 2.0.0 (.*) Message/', - 'postfix' => '/[0-9]{3} 2.0.0 Ok: queued as (.*)/', - 'Microsoft_ESMTP' => '/[0-9]{3} 2.[0-9].0 (.*)@(?:.*) Queued mail for delivery/', - 'Amazon_SES' => '/[0-9]{3} Ok (.*)/', - 'SendGrid' => '/[0-9]{3} Ok: queued as (.*)/', - ]; - - /** - * The last transaction ID issued in response to a DATA command, - * if one was detected. - * - * @var string|bool|null - */ - protected $last_smtp_transaction_id; - - /** - * The socket for the server connection. - * - * @var ?resource - */ - protected $smtp_conn; - - /** - * Error information, if any, for the last SMTP command. - * - * @var array - */ - protected $error = [ - 'error' => '', - 'detail' => '', - 'smtp_code' => '', - 'smtp_code_ex' => '', - ]; - - /** - * The reply the server sent to us for HELO. - * If null, no HELO string has yet been received. - * - * @var string|null - */ - protected $helo_rply = null; - - /** - * The set of SMTP extensions sent in reply to EHLO command. - * Indexes of the array are extension names. - * Value at index 'HELO' or 'EHLO' (according to command that was sent) - * represents the server name. In case of HELO it is the only element of the array. - * Other values can be boolean TRUE or an array containing extension options. - * If null, no HELO/EHLO string has yet been received. - * - * @var array|null - */ - protected $server_caps = null; - - /** - * The most recent reply received from the server. - * - * @var string - */ - protected $last_reply = ''; - - /** - * Output debugging info via a user-selected method. - * - * @param string $str Debug string to output - * @param int $level The debug level of this message; see DEBUG_* constants - * - * @see SMTP::$Debugoutput - * @see SMTP::$do_debug - */ - protected function edebug($str, $level = 0) - { - if ($level > $this->do_debug) { - return; - } - //Is this a PSR-3 logger? - if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) { - $this->Debugoutput->debug($str); - - return; - } - //Avoid clash with built-in function names - if (!in_array($this->Debugoutput, ['error_log', 'html', 'echo']) and is_callable($this->Debugoutput)) { - call_user_func($this->Debugoutput, $str, $level); - - return; - } - switch ($this->Debugoutput) { - case 'error_log': - //Don't output, just log - error_log($str); - break; - case 'html': - //Cleans up output a bit for a better looking, HTML-safe output - echo gmdate('Y-m-d H:i:s'), ' ', htmlentities( - preg_replace('/[\r\n]+/', '', $str), - ENT_QUOTES, - 'UTF-8' - ), "
\n"; - break; - case 'echo': - default: - //Normalize line breaks - $str = preg_replace('/\r\n|\r/ms', "\n", $str); - echo gmdate('Y-m-d H:i:s'), - "\t", - //Trim trailing space - trim( - //Indent for readability, except for trailing break - str_replace( - "\n", - "\n \t ", - trim($str) - ) - ), - "\n"; - } - } - - /** - * Connect to an SMTP server. - * - * @param string $host SMTP server IP or host name - * @param int $port The port number to connect to - * @param int $timeout How long to wait for the connection to open - * @param array $options An array of options for stream_context_create() - * - * @return bool - */ - public function connect($host, $port = null, $timeout = 30, $options = []) - { - static $streamok; - //This is enabled by default since 5.0.0 but some providers disable it - //Check this once and cache the result - if (null === $streamok) { - $streamok = function_exists('stream_socket_client'); - } - // Clear errors to avoid confusion - $this->setError(''); - // Make sure we are __not__ connected - if ($this->connected()) { - // Already connected, generate error - $this->setError('Already connected to a server'); - - return false; - } - if (empty($port)) { - $port = self::DEFAULT_PORT; - } - // Connect to the SMTP server - $this->edebug( - "Connection: opening to $host:$port, timeout=$timeout, options=" . - (count($options) > 0 ? var_export($options, true) : 'array()'), - self::DEBUG_CONNECTION - ); - $errno = 0; - $errstr = ''; - if ($streamok) { - $socket_context = stream_context_create($options); - set_error_handler([$this, 'errorHandler']); - $this->smtp_conn = stream_socket_client( - $host . ':' . $port, - $errno, - $errstr, - $timeout, - STREAM_CLIENT_CONNECT, - $socket_context - ); - restore_error_handler(); - } else { - //Fall back to fsockopen which should work in more places, but is missing some features - $this->edebug( - 'Connection: stream_socket_client not available, falling back to fsockopen', - self::DEBUG_CONNECTION - ); - set_error_handler([$this, 'errorHandler']); - $this->smtp_conn = fsockopen( - $host, - $port, - $errno, - $errstr, - $timeout - ); - restore_error_handler(); - } - // Verify we connected properly - if (!is_resource($this->smtp_conn)) { - $this->setError( - 'Failed to connect to server', - '', - (string) $errno, - (string) $errstr - ); - $this->edebug( - 'SMTP ERROR: ' . $this->error['error'] - . ": $errstr ($errno)", - self::DEBUG_CLIENT - ); - - return false; - } - $this->edebug('Connection: opened', self::DEBUG_CONNECTION); - // SMTP server can take longer to respond, give longer timeout for first read - // Windows does not have support for this timeout function - if (substr(PHP_OS, 0, 3) != 'WIN') { - $max = ini_get('max_execution_time'); - // Don't bother if unlimited - if (0 != $max and $timeout > $max) { - @set_time_limit($timeout); - } - stream_set_timeout($this->smtp_conn, $timeout, 0); - } - // Get any announcement - $announce = $this->get_lines(); - $this->edebug('SERVER -> CLIENT: ' . $announce, self::DEBUG_SERVER); - - return true; - } - - /** - * Initiate a TLS (encrypted) session. - * - * @return bool - */ - public function startTLS() - { - if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) { - return false; - } - - //Allow the best TLS version(s) we can - $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT; - - //PHP 5.6.7 dropped inclusion of TLS 1.1 and 1.2 in STREAM_CRYPTO_METHOD_TLS_CLIENT - //so add them back in manually if we can - if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) { - $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; - $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT; - } - - // Begin encrypted connection - set_error_handler([$this, 'errorHandler']); - $crypto_ok = stream_socket_enable_crypto( - $this->smtp_conn, - true, - $crypto_method - ); - restore_error_handler(); - - return (bool) $crypto_ok; - } - - /** - * Perform SMTP authentication. - * Must be run after hello(). - * - * @see hello() - * - * @param string $username The user name - * @param string $password The password - * @param string $authtype The auth type (CRAM-MD5, PLAIN, LOGIN, XOAUTH2) - * @param OAuth $OAuth An optional OAuth instance for XOAUTH2 authentication - * - * @return bool True if successfully authenticated - */ - public function authenticate( - $username, - $password, - $authtype = null, - $OAuth = null - ) { - if (!$this->server_caps) { - $this->setError('Authentication is not allowed before HELO/EHLO'); - - return false; - } - - if (array_key_exists('EHLO', $this->server_caps)) { - // SMTP extensions are available; try to find a proper authentication method - if (!array_key_exists('AUTH', $this->server_caps)) { - $this->setError('Authentication is not allowed at this stage'); - // 'at this stage' means that auth may be allowed after the stage changes - // e.g. after STARTTLS - - return false; - } - - $this->edebug('Auth method requested: ' . ($authtype ? $authtype : 'UNSPECIFIED'), self::DEBUG_LOWLEVEL); - $this->edebug( - 'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']), - self::DEBUG_LOWLEVEL - ); - - //If we have requested a specific auth type, check the server supports it before trying others - if (null !== $authtype and !in_array($authtype, $this->server_caps['AUTH'])) { - $this->edebug('Requested auth method not available: ' . $authtype, self::DEBUG_LOWLEVEL); - $authtype = null; - } - - if (empty($authtype)) { - //If no auth mechanism is specified, attempt to use these, in this order - //Try CRAM-MD5 first as it's more secure than the others - foreach (['CRAM-MD5', 'LOGIN', 'PLAIN', 'XOAUTH2'] as $method) { - if (in_array($method, $this->server_caps['AUTH'])) { - $authtype = $method; - break; - } - } - if (empty($authtype)) { - $this->setError('No supported authentication methods found'); - - return false; - } - self::edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL); - } - - if (!in_array($authtype, $this->server_caps['AUTH'])) { - $this->setError("The requested authentication method \"$authtype\" is not supported by the server"); - - return false; - } - } elseif (empty($authtype)) { - $authtype = 'LOGIN'; - } - switch ($authtype) { - case 'PLAIN': - // Start authentication - if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) { - return false; - } - // Send encoded username and password - if (!$this->sendCommand( - 'User & Password', - base64_encode("\0" . $username . "\0" . $password), - 235 - ) - ) { - return false; - } - break; - case 'LOGIN': - // Start authentication - if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) { - return false; - } - if (!$this->sendCommand('Username', base64_encode($username), 334)) { - return false; - } - if (!$this->sendCommand('Password', base64_encode($password), 235)) { - return false; - } - break; - case 'CRAM-MD5': - // Start authentication - if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) { - return false; - } - // Get the challenge - $challenge = base64_decode(substr($this->last_reply, 4)); - - // Build the response - $response = $username . ' ' . $this->hmac($challenge, $password); - - // send encoded credentials - return $this->sendCommand('Username', base64_encode($response), 235); - case 'XOAUTH2': - //The OAuth instance must be set up prior to requesting auth. - if (null === $OAuth) { - return false; - } - $oauth = $OAuth->getOauth64(); - - // Start authentication - if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) { - return false; - } - break; - default: - $this->setError("Authentication method \"$authtype\" is not supported"); - - return false; - } - - return true; - } - - /** - * Calculate an MD5 HMAC hash. - * Works like hash_hmac('md5', $data, $key) - * in case that function is not available. - * - * @param string $data The data to hash - * @param string $key The key to hash with - * - * @return string - */ - protected function hmac($data, $key) - { - if (function_exists('hash_hmac')) { - return hash_hmac('md5', $data, $key); - } - - // The following borrowed from - // http://php.net/manual/en/function.mhash.php#27225 - - // RFC 2104 HMAC implementation for php. - // Creates an md5 HMAC. - // Eliminates the need to install mhash to compute a HMAC - // by Lance Rushing - - $bytelen = 64; // byte length for md5 - if (strlen($key) > $bytelen) { - $key = pack('H*', md5($key)); - } - $key = str_pad($key, $bytelen, chr(0x00)); - $ipad = str_pad('', $bytelen, chr(0x36)); - $opad = str_pad('', $bytelen, chr(0x5c)); - $k_ipad = $key ^ $ipad; - $k_opad = $key ^ $opad; - - return md5($k_opad . pack('H*', md5($k_ipad . $data))); - } - - /** - * Check connection state. - * - * @return bool True if connected - */ - public function connected() - { - if (is_resource($this->smtp_conn)) { - $sock_status = stream_get_meta_data($this->smtp_conn); - if ($sock_status['eof']) { - // The socket is valid but we are not connected - $this->edebug( - 'SMTP NOTICE: EOF caught while checking if connected', - self::DEBUG_CLIENT - ); - $this->close(); - - return false; - } - - return true; // everything looks good - } - - return false; - } - - /** - * Close the socket and clean up the state of the class. - * Don't use this function without first trying to use QUIT. - * - * @see quit() - */ - public function close() - { - $this->setError(''); - $this->server_caps = null; - $this->helo_rply = null; - if (is_resource($this->smtp_conn)) { - // close the connection and cleanup - fclose($this->smtp_conn); - $this->smtp_conn = null; //Makes for cleaner serialization - $this->edebug('Connection: closed', self::DEBUG_CONNECTION); - } - } - - /** - * Send an SMTP DATA command. - * Issues a data command and sends the msg_data to the server, - * finializing the mail transaction. $msg_data is the message - * that is to be send with the headers. Each header needs to be - * on a single line followed by a with the message headers - * and the message body being separated by an additional . - * Implements RFC 821: DATA . - * - * @param string $msg_data Message data to send - * - * @return bool - */ - public function data($msg_data) - { - //This will use the standard timelimit - if (!$this->sendCommand('DATA', 'DATA', 354)) { - return false; - } - - /* The server is ready to accept data! - * According to rfc821 we should not send more than 1000 characters on a single line (including the LE) - * so we will break the data up into lines by \r and/or \n then if needed we will break each of those into - * smaller lines to fit within the limit. - * We will also look for lines that start with a '.' and prepend an additional '.'. - * NOTE: this does not count towards line-length limit. - */ - - // Normalize line breaks before exploding - $lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $msg_data)); - - /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field - * of the first line (':' separated) does not contain a space then it _should_ be a header and we will - * process all lines before a blank line as headers. - */ - - $field = substr($lines[0], 0, strpos($lines[0], ':')); - $in_headers = false; - if (!empty($field) and strpos($field, ' ') === false) { - $in_headers = true; - } - - foreach ($lines as $line) { - $lines_out = []; - if ($in_headers and $line == '') { - $in_headers = false; - } - //Break this line up into several smaller lines if it's too long - //Micro-optimisation: isset($str[$len]) is faster than (strlen($str) > $len), - while (isset($line[self::MAX_LINE_LENGTH])) { - //Working backwards, try to find a space within the last MAX_LINE_LENGTH chars of the line to break on - //so as to avoid breaking in the middle of a word - $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' '); - //Deliberately matches both false and 0 - if (!$pos) { - //No nice break found, add a hard break - $pos = self::MAX_LINE_LENGTH - 1; - $lines_out[] = substr($line, 0, $pos); - $line = substr($line, $pos); - } else { - //Break at the found point - $lines_out[] = substr($line, 0, $pos); - //Move along by the amount we dealt with - $line = substr($line, $pos + 1); - } - //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1 - if ($in_headers) { - $line = "\t" . $line; - } - } - $lines_out[] = $line; - - //Send the lines to the server - foreach ($lines_out as $line_out) { - //RFC2821 section 4.5.2 - if (!empty($line_out) and $line_out[0] == '.') { - $line_out = '.' . $line_out; - } - $this->client_send($line_out . static::LE, 'DATA'); - } - } - - //Message data has been sent, complete the command - //Increase timelimit for end of DATA command - $savetimelimit = $this->Timelimit; - $this->Timelimit = $this->Timelimit * 2; - $result = $this->sendCommand('DATA END', '.', 250); - $this->recordLastTransactionID(); - //Restore timelimit - $this->Timelimit = $savetimelimit; - - return $result; - } - - /** - * Send an SMTP HELO or EHLO command. - * Used to identify the sending server to the receiving server. - * This makes sure that client and server are in a known state. - * Implements RFC 821: HELO - * and RFC 2821 EHLO. - * - * @param string $host The host name or IP to connect to - * - * @return bool - */ - public function hello($host = '') - { - //Try extended hello first (RFC 2821) - return (bool) ($this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host)); - } - - /** - * Send an SMTP HELO or EHLO command. - * Low-level implementation used by hello(). - * - * @param string $hello The HELO string - * @param string $host The hostname to say we are - * - * @return bool - * - * @see hello() - */ - protected function sendHello($hello, $host) - { - $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250); - $this->helo_rply = $this->last_reply; - if ($noerror) { - $this->parseHelloFields($hello); - } else { - $this->server_caps = null; - } - - return $noerror; - } - - /** - * Parse a reply to HELO/EHLO command to discover server extensions. - * In case of HELO, the only parameter that can be discovered is a server name. - * - * @param string $type `HELO` or `EHLO` - */ - protected function parseHelloFields($type) - { - $this->server_caps = []; - $lines = explode("\n", $this->helo_rply); - - foreach ($lines as $n => $s) { - //First 4 chars contain response code followed by - or space - $s = trim(substr($s, 4)); - if (empty($s)) { - continue; - } - $fields = explode(' ', $s); - if (!empty($fields)) { - if (!$n) { - $name = $type; - $fields = $fields[0]; - } else { - $name = array_shift($fields); - switch ($name) { - case 'SIZE': - $fields = ($fields ? $fields[0] : 0); - break; - case 'AUTH': - if (!is_array($fields)) { - $fields = []; - } - break; - default: - $fields = true; - } - } - $this->server_caps[$name] = $fields; - } - } - } - - /** - * Send an SMTP MAIL command. - * Starts a mail transaction from the email address specified in - * $from. Returns true if successful or false otherwise. If True - * the mail transaction is started and then one or more recipient - * commands may be called followed by a data command. - * Implements RFC 821: MAIL FROM: . - * - * @param string $from Source address of this message - * - * @return bool - */ - public function mail($from) - { - $useVerp = ($this->do_verp ? ' XVERP' : ''); - - return $this->sendCommand( - 'MAIL FROM', - 'MAIL FROM:<' . $from . '>' . $useVerp, - 250 - ); - } - - /** - * Send an SMTP QUIT command. - * Closes the socket if there is no error or the $close_on_error argument is true. - * Implements from RFC 821: QUIT . - * - * @param bool $close_on_error Should the connection close if an error occurs? - * - * @return bool - */ - public function quit($close_on_error = true) - { - $noerror = $this->sendCommand('QUIT', 'QUIT', 221); - $err = $this->error; //Save any error - if ($noerror or $close_on_error) { - $this->close(); - $this->error = $err; //Restore any error from the quit command - } - - return $noerror; - } - - /** - * Send an SMTP RCPT command. - * Sets the TO argument to $toaddr. - * Returns true if the recipient was accepted false if it was rejected. - * Implements from RFC 821: RCPT TO: . - * - * @param string $address The address the message is being sent to - * - * @return bool - */ - public function recipient($address) - { - return $this->sendCommand( - 'RCPT TO', - 'RCPT TO:<' . $address . '>', - [250, 251] - ); - } - - /** - * Send an SMTP RSET command. - * Abort any transaction that is currently in progress. - * Implements RFC 821: RSET . - * - * @return bool True on success - */ - public function reset() - { - return $this->sendCommand('RSET', 'RSET', 250); - } - - /** - * Send a command to an SMTP server and check its return code. - * - * @param string $command The command name - not sent to the server - * @param string $commandstring The actual command to send - * @param int|array $expect One or more expected integer success codes - * - * @return bool True on success - */ - protected function sendCommand($command, $commandstring, $expect) - { - if (!$this->connected()) { - $this->setError("Called $command without being connected"); - - return false; - } - //Reject line breaks in all commands - if (strpos($commandstring, "\n") !== false or strpos($commandstring, "\r") !== false) { - $this->setError("Command '$command' contained line breaks"); - - return false; - } - $this->client_send($commandstring . static::LE, $command); - - $this->last_reply = $this->get_lines(); - // Fetch SMTP code and possible error code explanation - $matches = []; - if (preg_match('/^([0-9]{3})[ -](?:([0-9]\\.[0-9]\\.[0-9]) )?/', $this->last_reply, $matches)) { - $code = $matches[1]; - $code_ex = (count($matches) > 2 ? $matches[2] : null); - // Cut off error code from each response line - $detail = preg_replace( - "/{$code}[ -]" . - ($code_ex ? str_replace('.', '\\.', $code_ex) . ' ' : '') . '/m', - '', - $this->last_reply - ); - } else { - // Fall back to simple parsing if regex fails - $code = substr($this->last_reply, 0, 3); - $code_ex = null; - $detail = substr($this->last_reply, 4); - } - - $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER); - - if (!in_array($code, (array) $expect)) { - $this->setError( - "$command command failed", - $detail, - $code, - $code_ex - ); - $this->edebug( - 'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply, - self::DEBUG_CLIENT - ); - - return false; - } - - $this->setError(''); - - return true; - } - - /** - * Send an SMTP SAML command. - * Starts a mail transaction from the email address specified in $from. - * Returns true if successful or false otherwise. If True - * the mail transaction is started and then one or more recipient - * commands may be called followed by a data command. This command - * will send the message to the users terminal if they are logged - * in and send them an email. - * Implements RFC 821: SAML FROM: . - * - * @param string $from The address the message is from - * - * @return bool - */ - public function sendAndMail($from) - { - return $this->sendCommand('SAML', "SAML FROM:$from", 250); - } - - /** - * Send an SMTP VRFY command. - * - * @param string $name The name to verify - * - * @return bool - */ - public function verify($name) - { - return $this->sendCommand('VRFY', "VRFY $name", [250, 251]); - } - - /** - * Send an SMTP NOOP command. - * Used to keep keep-alives alive, doesn't actually do anything. - * - * @return bool - */ - public function noop() - { - return $this->sendCommand('NOOP', 'NOOP', 250); - } - - /** - * Send an SMTP TURN command. - * This is an optional command for SMTP that this class does not support. - * This method is here to make the RFC821 Definition complete for this class - * and _may_ be implemented in future. - * Implements from RFC 821: TURN . - * - * @return bool - */ - public function turn() - { - $this->setError('The SMTP TURN command is not implemented'); - $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT); - - return false; - } - - /** - * Send raw data to the server. - * - * @param string $data The data to send - * @param string $command Optionally, the command this is part of, used only for controlling debug output - * - * @return int|bool The number of bytes sent to the server or false on error - */ - public function client_send($data, $command = '') - { - //If SMTP transcripts are left enabled, or debug output is posted online - //it can leak credentials, so hide credentials in all but lowest level - if (self::DEBUG_LOWLEVEL > $this->do_debug and - in_array($command, ['User & Password', 'Username', 'Password'], true)) { - $this->edebug('CLIENT -> SERVER: